@rpcbase/ui 0.224.0 → 0.226.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 (832) hide show
  1. package/dist/components/DayPickerField/index.d.ts.map +1 -1
  2. package/dist/components/Dialog/index.d.ts +13 -9
  3. package/dist/components/Dialog/index.d.ts.map +1 -1
  4. package/dist/components/FilesUploadField/index.d.ts.map +1 -1
  5. package/dist/components/HourPickerField/index.d.ts.map +1 -1
  6. package/dist/components/PhoneNumberInput/index.d.ts.map +1 -1
  7. package/dist/components/PhoneNumberInput/suggestions.d.ts.map +1 -1
  8. package/dist/components/Select/index.d.ts +16 -10
  9. package/dist/components/Select/index.d.ts.map +1 -1
  10. package/dist/index10.js +102 -103
  11. package/dist/index10.js.map +1 -1
  12. package/dist/index100.js +11 -4
  13. package/dist/index100.js.map +1 -1
  14. package/dist/index101.js +69 -52
  15. package/dist/index101.js.map +1 -1
  16. package/dist/index102.js +38 -5
  17. package/dist/index102.js.map +1 -1
  18. package/dist/index103.js +14 -5
  19. package/dist/index103.js.map +1 -1
  20. package/dist/index104.js +23 -15
  21. package/dist/index104.js.map +1 -1
  22. package/dist/index105.js +110 -5
  23. package/dist/index105.js.map +1 -1
  24. package/dist/index106.js +13 -8
  25. package/dist/index106.js.map +1 -1
  26. package/dist/index107.js +4 -16
  27. package/dist/index107.js.map +1 -1
  28. package/dist/index108.js +4 -5
  29. package/dist/index108.js.map +1 -1
  30. package/dist/index109.js +5 -5
  31. package/dist/index109.js.map +1 -1
  32. package/dist/index110.js +11 -5
  33. package/dist/index110.js.map +1 -1
  34. package/dist/index111.js +19 -5
  35. package/dist/index111.js.map +1 -1
  36. package/dist/index112.js +13 -5
  37. package/dist/index112.js.map +1 -1
  38. package/dist/index113.js +261 -4
  39. package/dist/index113.js.map +1 -1
  40. package/dist/index114.js +4 -6
  41. package/dist/index114.js.map +1 -1
  42. package/dist/index115.js +28 -25
  43. package/dist/index115.js.map +1 -1
  44. package/dist/index116.js +126 -6
  45. package/dist/index116.js.map +1 -1
  46. package/dist/index117.js +5 -4
  47. package/dist/index117.js.map +1 -1
  48. package/dist/index118.js +78 -6
  49. package/dist/index118.js.map +1 -1
  50. package/dist/index119.js +66 -5
  51. package/dist/index119.js.map +1 -1
  52. package/dist/index12.js +1 -1
  53. package/dist/index120.js +8 -4
  54. package/dist/index120.js.map +1 -1
  55. package/dist/index121.js +16 -6
  56. package/dist/index121.js.map +1 -1
  57. package/dist/index122.js +92 -4
  58. package/dist/index122.js.map +1 -1
  59. package/dist/index123.js +65 -8
  60. package/dist/index123.js.map +1 -1
  61. package/dist/index124.js +45 -5
  62. package/dist/index124.js.map +1 -1
  63. package/dist/index125.js +52 -5
  64. package/dist/index125.js.map +1 -1
  65. package/dist/index126.js +4 -4
  66. package/dist/index126.js.map +1 -1
  67. package/dist/index127.js +4 -6
  68. package/dist/index127.js.map +1 -1
  69. package/dist/index128.js +15 -145
  70. package/dist/index128.js.map +1 -1
  71. package/dist/index129.js +5 -39
  72. package/dist/index129.js.map +1 -1
  73. package/dist/index130.js +7 -4
  74. package/dist/index130.js.map +1 -1
  75. package/dist/index131.js +16 -7
  76. package/dist/index131.js.map +1 -1
  77. package/dist/index132.js +4 -13
  78. package/dist/index132.js.map +1 -1
  79. package/dist/index133.js +4 -13
  80. package/dist/index133.js.map +1 -1
  81. package/dist/index134.js +5 -7
  82. package/dist/index134.js.map +1 -1
  83. package/dist/index135.js +5 -31
  84. package/dist/index135.js.map +1 -1
  85. package/dist/index136.js +4 -10
  86. package/dist/index136.js.map +1 -1
  87. package/dist/index137.js +4 -10
  88. package/dist/index137.js.map +1 -1
  89. package/dist/index138.js +6 -8
  90. package/dist/index138.js.map +1 -1
  91. package/dist/index139.js +24 -13
  92. package/dist/index139.js.map +1 -1
  93. package/dist/index140.js +6 -101
  94. package/dist/index140.js.map +1 -1
  95. package/dist/index141.js +5 -20
  96. package/dist/index141.js.map +1 -1
  97. package/dist/index142.js +6 -53
  98. package/dist/index142.js.map +1 -1
  99. package/dist/index143.js +5 -72
  100. package/dist/index143.js.map +1 -1
  101. package/dist/index144.js +4 -9
  102. package/dist/index144.js.map +1 -1
  103. package/dist/index145.js +5 -20
  104. package/dist/index145.js.map +1 -1
  105. package/dist/index146.js +4 -16
  106. package/dist/index146.js.map +1 -1
  107. package/dist/index147.js +8 -23
  108. package/dist/index147.js.map +1 -1
  109. package/dist/index148.js +5 -6
  110. package/dist/index148.js.map +1 -1
  111. package/dist/index149.js +4 -5
  112. package/dist/index149.js.map +1 -1
  113. package/dist/index150.js +3 -22
  114. package/dist/index150.js.map +1 -1
  115. package/dist/index151.js +7 -35
  116. package/dist/index151.js.map +1 -1
  117. package/dist/index152.js +146 -16
  118. package/dist/index152.js.map +1 -1
  119. package/dist/index153.js +39 -6
  120. package/dist/index153.js.map +1 -1
  121. package/dist/index154.js +4 -4
  122. package/dist/index154.js.map +1 -1
  123. package/dist/index155.js +7 -4
  124. package/dist/index155.js.map +1 -1
  125. package/dist/index156.js +13 -4
  126. package/dist/index156.js.map +1 -1
  127. package/dist/index157.js +13 -4
  128. package/dist/index157.js.map +1 -1
  129. package/dist/index158.js +7 -3
  130. package/dist/index158.js.map +1 -1
  131. package/dist/index159.js +31 -6
  132. package/dist/index159.js.map +1 -1
  133. package/dist/index16.js +77 -72
  134. package/dist/index16.js.map +1 -1
  135. package/dist/index160.js +11 -24
  136. package/dist/index160.js.map +1 -1
  137. package/dist/index161.js +10 -7
  138. package/dist/index161.js.map +1 -1
  139. package/dist/index162.js +8 -6
  140. package/dist/index162.js.map +1 -1
  141. package/dist/index163.js +13 -5
  142. package/dist/index163.js.map +1 -1
  143. package/dist/index164.js +101 -3
  144. package/dist/index164.js.map +1 -1
  145. package/dist/index165.js +20 -4
  146. package/dist/index165.js.map +1 -1
  147. package/dist/index166.js +53 -4
  148. package/dist/index166.js.map +1 -1
  149. package/dist/index167.js +72 -3
  150. package/dist/index167.js.map +1 -1
  151. package/dist/index168.js +9 -4
  152. package/dist/index168.js.map +1 -1
  153. package/dist/index169.js +20 -3
  154. package/dist/index169.js.map +1 -1
  155. package/dist/index170.js +16 -3
  156. package/dist/index170.js.map +1 -1
  157. package/dist/index171.js +23 -3
  158. package/dist/index171.js.map +1 -1
  159. package/dist/index172.js +6 -46
  160. package/dist/index172.js.map +1 -1
  161. package/dist/index173.js +5 -229
  162. package/dist/index173.js.map +1 -1
  163. package/dist/index174.js +24 -22
  164. package/dist/index174.js.map +1 -1
  165. package/dist/index175.js +35 -25
  166. package/dist/index175.js.map +1 -1
  167. package/dist/index176.js +16 -401
  168. package/dist/index176.js.map +1 -1
  169. package/dist/index177.js +6 -13
  170. package/dist/index177.js.map +1 -1
  171. package/dist/index178.js +4 -154
  172. package/dist/index178.js.map +1 -1
  173. package/dist/index179.js +4 -30
  174. package/dist/index179.js.map +1 -1
  175. package/dist/index18.js +205 -186
  176. package/dist/index18.js.map +1 -1
  177. package/dist/index180.js +4 -9
  178. package/dist/index180.js.map +1 -1
  179. package/dist/index181.js +4 -48
  180. package/dist/index181.js.map +1 -1
  181. package/dist/index182.js +3 -11
  182. package/dist/index182.js.map +1 -1
  183. package/dist/index183.js +6 -44
  184. package/dist/index183.js.map +1 -1
  185. package/dist/index184.js +24 -96
  186. package/dist/index184.js.map +1 -1
  187. package/dist/index185.js +7 -86
  188. package/dist/index185.js.map +1 -1
  189. package/dist/index186.js +6 -105
  190. package/dist/index186.js.map +1 -1
  191. package/dist/index187.js +5 -52
  192. package/dist/index187.js.map +1 -1
  193. package/dist/index188.js +3 -11
  194. package/dist/index188.js.map +1 -1
  195. package/dist/index189.js +3 -37
  196. package/dist/index189.js.map +1 -1
  197. package/dist/index19.js +280 -208
  198. package/dist/index19.js.map +1 -1
  199. package/dist/index190.js +4 -8
  200. package/dist/index190.js.map +1 -1
  201. package/dist/index191.js +3 -116
  202. package/dist/index191.js.map +1 -1
  203. package/dist/index192.js +4 -17
  204. package/dist/index192.js.map +1 -1
  205. package/dist/index193.js +3 -15
  206. package/dist/index193.js.map +1 -1
  207. package/dist/index194.js +3 -3
  208. package/dist/index194.js.map +1 -1
  209. package/dist/index195.js +3 -36
  210. package/dist/index195.js.map +1 -1
  211. package/dist/index196.js +13 -20
  212. package/dist/index196.js.map +1 -1
  213. package/dist/index197.js +154 -9
  214. package/dist/index197.js.map +1 -1
  215. package/dist/index198.js +30 -8
  216. package/dist/index198.js.map +1 -1
  217. package/dist/index199.js +9 -19
  218. package/dist/index199.js.map +1 -1
  219. package/dist/index200.js +45 -25
  220. package/dist/index200.js.map +1 -1
  221. package/dist/index201.js +11 -16
  222. package/dist/index201.js.map +1 -1
  223. package/dist/index202.js +44 -58
  224. package/dist/index202.js.map +1 -1
  225. package/dist/index203.js +95 -8
  226. package/dist/index203.js.map +1 -1
  227. package/dist/index204.js +81 -61
  228. package/dist/index204.js.map +1 -1
  229. package/dist/index205.js +103 -17
  230. package/dist/index205.js.map +1 -1
  231. package/dist/index206.js +50 -14
  232. package/dist/index206.js.map +1 -1
  233. package/dist/index207.js +10 -4
  234. package/dist/index207.js.map +1 -1
  235. package/dist/index208.js +36 -4
  236. package/dist/index208.js.map +1 -1
  237. package/dist/index209.js +8 -6
  238. package/dist/index209.js.map +1 -1
  239. package/dist/index210.js +116 -4
  240. package/dist/index210.js.map +1 -1
  241. package/dist/index211.js +17 -6
  242. package/dist/index211.js.map +1 -1
  243. package/dist/index212.js +15 -16
  244. package/dist/index212.js.map +1 -1
  245. package/dist/index213.js +3 -4
  246. package/dist/index213.js.map +1 -1
  247. package/dist/index214.js +36 -4
  248. package/dist/index214.js.map +1 -1
  249. package/dist/index215.js +20 -12
  250. package/dist/index215.js.map +1 -1
  251. package/dist/index216.js +9 -9
  252. package/dist/index216.js.map +1 -1
  253. package/dist/index217.js +8 -13
  254. package/dist/index217.js.map +1 -1
  255. package/dist/index218.js +19 -13
  256. package/dist/index218.js.map +1 -1
  257. package/dist/index219.js +28 -4
  258. package/dist/index219.js.map +1 -1
  259. package/dist/index220.js +16 -5
  260. package/dist/index220.js.map +1 -1
  261. package/dist/index221.js +66 -6
  262. package/dist/index221.js.map +1 -1
  263. package/dist/index222.js +8 -5
  264. package/dist/index222.js.map +1 -1
  265. package/dist/index223.js +11 -54
  266. package/dist/index223.js.map +1 -1
  267. package/dist/index224.js +8 -8
  268. package/dist/index224.js.map +1 -1
  269. package/dist/index225.js +5 -4
  270. package/dist/index225.js.map +1 -1
  271. package/dist/index226.js +13 -4
  272. package/dist/index226.js.map +1 -1
  273. package/dist/index227.js +3 -8
  274. package/dist/index227.js.map +1 -1
  275. package/dist/index228.js +3 -4
  276. package/dist/index228.js.map +1 -1
  277. package/dist/index229.js +99 -4
  278. package/dist/index229.js.map +1 -1
  279. package/dist/index230.js +29 -3
  280. package/dist/index230.js.map +1 -1
  281. package/dist/index231.js +51 -10
  282. package/dist/index231.js.map +1 -1
  283. package/dist/index232.js +17 -9
  284. package/dist/index232.js.map +1 -1
  285. package/dist/index233.js +5 -9
  286. package/dist/index233.js.map +1 -1
  287. package/dist/index234.js +122 -10
  288. package/dist/index234.js.map +1 -1
  289. package/dist/index235.js +27 -10
  290. package/dist/index235.js.map +1 -1
  291. package/dist/index236.js +32 -9
  292. package/dist/index236.js.map +1 -1
  293. package/dist/index237.js +73 -6
  294. package/dist/index237.js.map +1 -1
  295. package/dist/index238.js +262 -5
  296. package/dist/index238.js.map +1 -1
  297. package/dist/index239.js +28 -4
  298. package/dist/index239.js.map +1 -1
  299. package/dist/index240.js +6 -5
  300. package/dist/index240.js.map +1 -1
  301. package/dist/index241.js +142 -6
  302. package/dist/index241.js.map +1 -1
  303. package/dist/index242.js +61 -5
  304. package/dist/index242.js.map +1 -1
  305. package/dist/index243.js +49 -16
  306. package/dist/index243.js.map +1 -1
  307. package/dist/index244.js +15 -8
  308. package/dist/index244.js.map +1 -1
  309. package/dist/index245.js +132 -9
  310. package/dist/index245.js.map +1 -1
  311. package/dist/index246.js +7 -9
  312. package/dist/index246.js.map +1 -1
  313. package/dist/index247.js +5 -22
  314. package/dist/index247.js.map +1 -1
  315. package/dist/index248.js +4 -11
  316. package/dist/index248.js.map +1 -1
  317. package/dist/index249.js +11 -9
  318. package/dist/index249.js.map +1 -1
  319. package/dist/index250.js +21 -9
  320. package/dist/index250.js.map +1 -1
  321. package/dist/index251.js +20 -5
  322. package/dist/index251.js.map +1 -1
  323. package/dist/index252.js +11 -5
  324. package/dist/index252.js.map +1 -1
  325. package/dist/index253.js +48 -14
  326. package/dist/index253.js.map +1 -1
  327. package/dist/index254.js +16 -9
  328. package/dist/index254.js.map +1 -1
  329. package/dist/index255.js +21 -18
  330. package/dist/index255.js.map +1 -1
  331. package/dist/index256.js +50 -14
  332. package/dist/index256.js.map +1 -1
  333. package/dist/index257.js +25 -12
  334. package/dist/index257.js.map +1 -1
  335. package/dist/index258.js +41 -29
  336. package/dist/index258.js.map +1 -1
  337. package/dist/index259.js +39 -12
  338. package/dist/index259.js.map +1 -1
  339. package/dist/index260.js +45 -26
  340. package/dist/index260.js.map +1 -1
  341. package/dist/index261.js +20 -5
  342. package/dist/index261.js.map +1 -1
  343. package/dist/index262.js +68 -22
  344. package/dist/index262.js.map +1 -1
  345. package/dist/index263.js +18 -29
  346. package/dist/index263.js.map +1 -1
  347. package/dist/index264.js +12 -5
  348. package/dist/index264.js.map +1 -1
  349. package/dist/index265.js +12 -19
  350. package/dist/index265.js.map +1 -1
  351. package/dist/index266.js +18 -4
  352. package/dist/index266.js.map +1 -1
  353. package/dist/index267.js +36 -17
  354. package/dist/index267.js.map +1 -1
  355. package/dist/index268.js +278 -12
  356. package/dist/index268.js.map +1 -1
  357. package/dist/index269.js +69 -5
  358. package/dist/index269.js.map +1 -1
  359. package/dist/index270.js +84 -3
  360. package/dist/index270.js.map +1 -1
  361. package/dist/index271.js +3 -23
  362. package/dist/index271.js.map +1 -1
  363. package/dist/index272.js +28 -111
  364. package/dist/index272.js.map +1 -1
  365. package/dist/index273.js +16 -15
  366. package/dist/index273.js.map +1 -1
  367. package/dist/index274.js +32 -527
  368. package/dist/index274.js.map +1 -1
  369. package/dist/index275.js +14 -123
  370. package/dist/index275.js.map +1 -1
  371. package/dist/index276.js +3 -133
  372. package/dist/index276.js.map +1 -1
  373. package/dist/index277.js +26 -4
  374. package/dist/index277.js.map +1 -1
  375. package/dist/index278.js +4 -5
  376. package/dist/index278.js.map +1 -1
  377. package/dist/index279.js +79 -4
  378. package/dist/index279.js.map +1 -1
  379. package/dist/index28.js +1 -1
  380. package/dist/index280.js +269 -15
  381. package/dist/index280.js.map +1 -1
  382. package/dist/index281.js +11 -8
  383. package/dist/index281.js.map +1 -1
  384. package/dist/index282.js +10 -5
  385. package/dist/index282.js.map +1 -1
  386. package/dist/index283.js +25 -4
  387. package/dist/index283.js.map +1 -1
  388. package/dist/index284.js +16 -545
  389. package/dist/index284.js.map +1 -1
  390. package/dist/index285.js +123 -44
  391. package/dist/index285.js.map +1 -1
  392. package/dist/index286.js +5 -17
  393. package/dist/index286.js.map +1 -1
  394. package/dist/index287.js +40 -5
  395. package/dist/index287.js.map +1 -1
  396. package/dist/index288.js +65 -7
  397. package/dist/index288.js.map +1 -1
  398. package/dist/index289.js +14 -7
  399. package/dist/index289.js.map +1 -1
  400. package/dist/index290.js +7 -7
  401. package/dist/index290.js.map +1 -1
  402. package/dist/index291.js +5 -11
  403. package/dist/index291.js.map +1 -1
  404. package/dist/index292.js +3 -8
  405. package/dist/index292.js.map +1 -1
  406. package/dist/index293.js +10 -12
  407. package/dist/index293.js.map +1 -1
  408. package/dist/index294.js +8 -69
  409. package/dist/index294.js.map +1 -1
  410. package/dist/index295.js +398 -7
  411. package/dist/index295.js.map +1 -1
  412. package/dist/index296.js +53 -14
  413. package/dist/index296.js.map +1 -1
  414. package/dist/index297.js +12 -66
  415. package/dist/index297.js.map +1 -1
  416. package/dist/index298.js +11 -64
  417. package/dist/index298.js.map +1 -1
  418. package/dist/index299.js +58 -4
  419. package/dist/index299.js.map +1 -1
  420. package/dist/index30.js +1 -1
  421. package/dist/index300.js +9 -56
  422. package/dist/index300.js.map +1 -1
  423. package/dist/index301.js +66 -67
  424. package/dist/index301.js.map +1 -1
  425. package/dist/index302.js +20 -31
  426. package/dist/index302.js.map +1 -1
  427. package/dist/index303.js +17 -9
  428. package/dist/index303.js.map +1 -1
  429. package/dist/index304.js +5 -152
  430. package/dist/index304.js.map +1 -1
  431. package/dist/index305.js +5 -107
  432. package/dist/index305.js.map +1 -1
  433. package/dist/index306.js +6 -3
  434. package/dist/index306.js.map +1 -1
  435. package/dist/index307.js +4 -22
  436. package/dist/index307.js.map +1 -1
  437. package/dist/index308.js +6 -15
  438. package/dist/index308.js.map +1 -1
  439. package/dist/index309.js +16 -28
  440. package/dist/index309.js.map +1 -1
  441. package/dist/index31.js +227 -120
  442. package/dist/index31.js.map +1 -1
  443. package/dist/index310.js +4 -12
  444. package/dist/index310.js.map +1 -1
  445. package/dist/index311.js +4 -6
  446. package/dist/index311.js.map +1 -1
  447. package/dist/index312.js +13 -23
  448. package/dist/index312.js.map +1 -1
  449. package/dist/index313.js +10 -13
  450. package/dist/index313.js.map +1 -1
  451. package/dist/index314.js +13 -27
  452. package/dist/index314.js.map +1 -1
  453. package/dist/index315.js +14 -5
  454. package/dist/index315.js.map +1 -1
  455. package/dist/index316.js +8 -0
  456. package/dist/index316.js.map +1 -0
  457. package/dist/index317.js +9 -0
  458. package/dist/index317.js.map +1 -0
  459. package/dist/index318.js +10 -0
  460. package/dist/index318.js.map +1 -0
  461. package/dist/index319.js +9 -0
  462. package/dist/index319.js.map +1 -0
  463. package/dist/index32.js +21 -229
  464. package/dist/index32.js.map +1 -1
  465. package/dist/index320.js +58 -0
  466. package/dist/index320.js.map +1 -0
  467. package/dist/index321.js +12 -0
  468. package/dist/index321.js.map +1 -0
  469. package/dist/index322.js +8 -0
  470. package/dist/index322.js.map +1 -0
  471. package/dist/index323.js +8 -0
  472. package/dist/index323.js.map +1 -0
  473. package/dist/index324.js +12 -0
  474. package/dist/index324.js.map +1 -0
  475. package/dist/index325.js +8 -0
  476. package/dist/index325.js.map +1 -0
  477. package/dist/index326.js +8 -0
  478. package/dist/index326.js.map +1 -0
  479. package/dist/index327.js +7 -0
  480. package/dist/index327.js.map +1 -0
  481. package/dist/index328.js +14 -0
  482. package/dist/index328.js.map +1 -0
  483. package/dist/index329.js +13 -0
  484. package/dist/index329.js.map +1 -0
  485. package/dist/index33.js +4 -23
  486. package/dist/index33.js.map +1 -1
  487. package/dist/index330.js +13 -0
  488. package/dist/index330.js.map +1 -0
  489. package/dist/index331.js +14 -0
  490. package/dist/index331.js.map +1 -0
  491. package/dist/index332.js +14 -0
  492. package/dist/index332.js.map +1 -0
  493. package/dist/index333.js +13 -0
  494. package/dist/index333.js.map +1 -0
  495. package/dist/index334.js +10 -0
  496. package/dist/index334.js.map +1 -0
  497. package/dist/index335.js +9 -0
  498. package/dist/index335.js.map +1 -0
  499. package/dist/index336.js +8 -0
  500. package/dist/index336.js.map +1 -0
  501. package/dist/index337.js +9 -0
  502. package/dist/index337.js.map +1 -0
  503. package/dist/index338.js +10 -0
  504. package/dist/index338.js.map +1 -0
  505. package/dist/index339.js +9 -0
  506. package/dist/index339.js.map +1 -0
  507. package/dist/index34.js +62 -51
  508. package/dist/index34.js.map +1 -1
  509. package/dist/index340.js +20 -0
  510. package/dist/index340.js.map +1 -0
  511. package/dist/index341.js +11 -0
  512. package/dist/index341.js.map +1 -0
  513. package/dist/index342.js +14 -0
  514. package/dist/index342.js.map +1 -0
  515. package/dist/index343.js +14 -0
  516. package/dist/index343.js.map +1 -0
  517. package/dist/index344.js +25 -0
  518. package/dist/index344.js.map +1 -0
  519. package/dist/index345.js +14 -0
  520. package/dist/index345.js.map +1 -0
  521. package/dist/index346.js +13 -0
  522. package/dist/index346.js.map +1 -0
  523. package/dist/index347.js +13 -0
  524. package/dist/index347.js.map +1 -0
  525. package/dist/index348.js +8 -0
  526. package/dist/index348.js.map +1 -0
  527. package/dist/index349.js +9 -0
  528. package/dist/index349.js.map +1 -0
  529. package/dist/index35.js +38 -21
  530. package/dist/index35.js.map +1 -1
  531. package/dist/index350.js +20 -0
  532. package/dist/index350.js.map +1 -0
  533. package/dist/index351.js +13 -0
  534. package/dist/index351.js.map +1 -0
  535. package/dist/index352.js +22 -0
  536. package/dist/index352.js.map +1 -0
  537. package/dist/index353.js +19 -0
  538. package/dist/index353.js.map +1 -0
  539. package/dist/index354.js +16 -0
  540. package/dist/index354.js.map +1 -0
  541. package/dist/index355.js +33 -0
  542. package/dist/index355.js.map +1 -0
  543. package/dist/index356.js +16 -0
  544. package/dist/index356.js.map +1 -0
  545. package/dist/index357.js +29 -0
  546. package/dist/index357.js.map +1 -0
  547. package/dist/index358.js +9 -0
  548. package/dist/index358.js.map +1 -0
  549. package/dist/index359.js +24 -0
  550. package/dist/index359.js.map +1 -0
  551. package/dist/index36.js +75 -127
  552. package/dist/index36.js.map +1 -1
  553. package/dist/index360.js +12 -0
  554. package/dist/index360.js.map +1 -0
  555. package/dist/index361.js +29 -0
  556. package/dist/index361.js.map +1 -0
  557. package/dist/index362.js +30 -0
  558. package/dist/index362.js.map +1 -0
  559. package/dist/index363.js +141 -0
  560. package/dist/index363.js.map +1 -0
  561. package/dist/index364.js +16 -0
  562. package/dist/index364.js.map +1 -0
  563. package/dist/index365.js +230 -0
  564. package/dist/index365.js.map +1 -0
  565. package/dist/index366.js +7 -0
  566. package/dist/index366.js.map +1 -0
  567. package/dist/index367.js +23 -0
  568. package/dist/index367.js.map +1 -0
  569. package/dist/index368.js +81 -0
  570. package/dist/index368.js.map +1 -0
  571. package/dist/index369.js +15 -0
  572. package/dist/index369.js.map +1 -0
  573. package/dist/index37.js +22 -221
  574. package/dist/index37.js.map +1 -1
  575. package/dist/index370.js +7 -0
  576. package/dist/index370.js.map +1 -0
  577. package/dist/index371.js +81 -0
  578. package/dist/index371.js.map +1 -0
  579. package/dist/index372.js +204 -0
  580. package/dist/index372.js.map +1 -0
  581. package/dist/index373.js +75 -0
  582. package/dist/index373.js.map +1 -0
  583. package/dist/index374.js +12 -0
  584. package/dist/index374.js.map +1 -0
  585. package/dist/index375.js +20 -0
  586. package/dist/index375.js.map +1 -0
  587. package/dist/index376.js +19 -0
  588. package/dist/index376.js.map +1 -0
  589. package/dist/index377.js +7 -0
  590. package/dist/index377.js.map +1 -0
  591. package/dist/index378.js +15 -0
  592. package/dist/index378.js.map +1 -0
  593. package/dist/index379.js +9 -0
  594. package/dist/index379.js.map +1 -0
  595. package/dist/index38.js +37 -90
  596. package/dist/index38.js.map +1 -1
  597. package/dist/index380.js +24 -0
  598. package/dist/index380.js.map +1 -0
  599. package/dist/index381.js +48 -0
  600. package/dist/index381.js.map +1 -0
  601. package/dist/index382.js +21 -0
  602. package/dist/index382.js.map +1 -0
  603. package/dist/index383.js +8 -0
  604. package/dist/index383.js.map +1 -0
  605. package/dist/index384.js +8 -0
  606. package/dist/index384.js.map +1 -0
  607. package/dist/index385.js +21 -0
  608. package/dist/index385.js.map +1 -0
  609. package/dist/index386.js +16 -0
  610. package/dist/index386.js.map +1 -0
  611. package/dist/index387.js +18 -0
  612. package/dist/index387.js.map +1 -0
  613. package/dist/index388.js +495 -0
  614. package/dist/index388.js.map +1 -0
  615. package/dist/index389.js +6 -0
  616. package/dist/index389.js.map +1 -0
  617. package/dist/index39.js +28 -119
  618. package/dist/index39.js.map +1 -1
  619. package/dist/index390.js +6 -0
  620. package/dist/index390.js.map +1 -0
  621. package/dist/index391.js +8 -0
  622. package/dist/index391.js.map +1 -0
  623. package/dist/index392.js +8 -0
  624. package/dist/index392.js.map +1 -0
  625. package/dist/index393.js +7 -0
  626. package/dist/index393.js.map +1 -0
  627. package/dist/index394.js +19 -0
  628. package/dist/index394.js.map +1 -0
  629. package/dist/index395.js +12 -0
  630. package/dist/index395.js.map +1 -0
  631. package/dist/index396.js +9 -0
  632. package/dist/index396.js.map +1 -0
  633. package/dist/index397.js +8 -0
  634. package/dist/index397.js.map +1 -0
  635. package/dist/index398.js +549 -0
  636. package/dist/index398.js.map +1 -0
  637. package/dist/index399.js +50 -0
  638. package/dist/index399.js.map +1 -0
  639. package/dist/index40.js +23 -6
  640. package/dist/index40.js.map +1 -1
  641. package/dist/index400.js +21 -0
  642. package/dist/index400.js.map +1 -0
  643. package/dist/index401.js +9 -0
  644. package/dist/index401.js.map +1 -0
  645. package/dist/index402.js +11 -0
  646. package/dist/index402.js.map +1 -0
  647. package/dist/index403.js +10 -0
  648. package/dist/index403.js.map +1 -0
  649. package/dist/index404.js +11 -0
  650. package/dist/index404.js.map +1 -0
  651. package/dist/index405.js +15 -0
  652. package/dist/index405.js.map +1 -0
  653. package/dist/index406.js +12 -0
  654. package/dist/index406.js.map +1 -0
  655. package/dist/index407.js +16 -0
  656. package/dist/index407.js.map +1 -0
  657. package/dist/index408.js +11 -0
  658. package/dist/index408.js.map +1 -0
  659. package/dist/index409.js +5 -0
  660. package/dist/index409.js.map +1 -0
  661. package/dist/index41.js +51 -817
  662. package/dist/index41.js.map +1 -1
  663. package/dist/index410.js +47 -0
  664. package/dist/index410.js.map +1 -0
  665. package/dist/index411.js +59 -0
  666. package/dist/index411.js.map +1 -0
  667. package/dist/index412.js +11 -0
  668. package/dist/index412.js.map +1 -0
  669. package/dist/index413.js +5 -0
  670. package/dist/index413.js.map +1 -0
  671. package/dist/index414.js +58 -0
  672. package/dist/index414.js.map +1 -0
  673. package/dist/index415.js +59 -0
  674. package/dist/index415.js.map +1 -0
  675. package/dist/index416.js +8 -0
  676. package/dist/index416.js.map +1 -0
  677. package/dist/index417.js +59 -0
  678. package/dist/index417.js.map +1 -0
  679. package/dist/index418.js +71 -0
  680. package/dist/index418.js.map +1 -0
  681. package/dist/index419.js +34 -0
  682. package/dist/index419.js.map +1 -0
  683. package/dist/index42.js +51 -57
  684. package/dist/index42.js.map +1 -1
  685. package/dist/index420.js +12 -0
  686. package/dist/index420.js.map +1 -0
  687. package/dist/index421.js +156 -0
  688. package/dist/index421.js.map +1 -0
  689. package/dist/index422.js +111 -0
  690. package/dist/index422.js.map +1 -0
  691. package/dist/index423.js +5 -0
  692. package/dist/index423.js.map +1 -0
  693. package/dist/index424.js +5 -0
  694. package/dist/index424.js.map +1 -0
  695. package/dist/index425.js +5 -0
  696. package/dist/index425.js.map +1 -0
  697. package/dist/index426.js +5 -0
  698. package/dist/index426.js.map +1 -0
  699. package/dist/index427.js +19 -0
  700. package/dist/index427.js.map +1 -0
  701. package/dist/index428.js +32 -0
  702. package/dist/index428.js.map +1 -0
  703. package/dist/index429.js +16 -0
  704. package/dist/index429.js.map +1 -0
  705. package/dist/index43.js +21 -7
  706. package/dist/index43.js.map +1 -1
  707. package/dist/index430.js +10 -0
  708. package/dist/index430.js.map +1 -0
  709. package/dist/index44.js +130 -2
  710. package/dist/index44.js.map +1 -1
  711. package/dist/index45.js +221 -11
  712. package/dist/index45.js.map +1 -1
  713. package/dist/index46.js +90 -18
  714. package/dist/index46.js.map +1 -1
  715. package/dist/index47.js +126 -7
  716. package/dist/index47.js.map +1 -1
  717. package/dist/index48.js +6 -2
  718. package/dist/index48.js.map +1 -1
  719. package/dist/index49.js +326 -23
  720. package/dist/index49.js.map +1 -1
  721. package/dist/index50.js +247 -221
  722. package/dist/index50.js.map +1 -1
  723. package/dist/index51.js +27 -2
  724. package/dist/index51.js.map +1 -1
  725. package/dist/index52.js +129 -2
  726. package/dist/index52.js.map +1 -1
  727. package/dist/index53.js +26 -2
  728. package/dist/index53.js.map +1 -1
  729. package/dist/index54.js +23 -2
  730. package/dist/index54.js.map +1 -1
  731. package/dist/index55.js +145 -6
  732. package/dist/index55.js.map +1 -1
  733. package/dist/index56.js +34 -33
  734. package/dist/index56.js.map +1 -1
  735. package/dist/index57.js +28 -48
  736. package/dist/index57.js.map +1 -1
  737. package/dist/index58.js +41 -8
  738. package/dist/index58.js.map +1 -1
  739. package/dist/index59.js +21 -12
  740. package/dist/index59.js.map +1 -1
  741. package/dist/index6.js +84 -85
  742. package/dist/index6.js.map +1 -1
  743. package/dist/index60.js +132 -6
  744. package/dist/index60.js.map +1 -1
  745. package/dist/index61.js +51 -8
  746. package/dist/index61.js.map +1 -1
  747. package/dist/index62.js +30 -6
  748. package/dist/index62.js.map +1 -1
  749. package/dist/index63.js +57 -4
  750. package/dist/index63.js.map +1 -1
  751. package/dist/index64.js +7 -47
  752. package/dist/index64.js.map +1 -1
  753. package/dist/index65.js +2 -51
  754. package/dist/index65.js.map +1 -1
  755. package/dist/index66.js +11 -7
  756. package/dist/index66.js.map +1 -1
  757. package/dist/index67.js +17 -13
  758. package/dist/index67.js.map +1 -1
  759. package/dist/index68.js +7 -133
  760. package/dist/index68.js.map +1 -1
  761. package/dist/index69.js +2 -11
  762. package/dist/index69.js.map +1 -1
  763. package/dist/index7.js +123 -98
  764. package/dist/index7.js.map +1 -1
  765. package/dist/index70.js +22 -215
  766. package/dist/index70.js.map +1 -1
  767. package/dist/index71.js +234 -13
  768. package/dist/index71.js.map +1 -1
  769. package/dist/index72.js +5 -46
  770. package/dist/index72.js.map +1 -1
  771. package/dist/index73.js +7 -49
  772. package/dist/index73.js.map +1 -1
  773. package/dist/index74.js +6 -4
  774. package/dist/index74.js.map +1 -1
  775. package/dist/index75.js +2 -6
  776. package/dist/index75.js.map +1 -1
  777. package/dist/index76.js +2 -28
  778. package/dist/index76.js.map +1 -1
  779. package/dist/index77.js +2 -50
  780. package/dist/index77.js.map +1 -1
  781. package/dist/index78.js +2 -9
  782. package/dist/index78.js.map +1 -1
  783. package/dist/index79.js +5 -46
  784. package/dist/index79.js.map +1 -1
  785. package/dist/index8.js +53 -54
  786. package/dist/index8.js.map +1 -1
  787. package/dist/index80.js +68 -5
  788. package/dist/index80.js.map +1 -1
  789. package/dist/index81.js +2 -69
  790. package/dist/index81.js.map +1 -1
  791. package/dist/index82.js +364 -2
  792. package/dist/index82.js.map +1 -1
  793. package/dist/index83.js +201 -303
  794. package/dist/index83.js.map +1 -1
  795. package/dist/index84.js +46 -247
  796. package/dist/index84.js.map +1 -1
  797. package/dist/index85.js +42 -56
  798. package/dist/index85.js.map +1 -1
  799. package/dist/index86.js +169 -46
  800. package/dist/index86.js.map +1 -1
  801. package/dist/index87.js +96 -156
  802. package/dist/index87.js.map +1 -1
  803. package/dist/index88.js +24 -109
  804. package/dist/index88.js.map +1 -1
  805. package/dist/index89.js +8 -25
  806. package/dist/index89.js.map +1 -1
  807. package/dist/index9.js +1 -1
  808. package/dist/index90.js +5 -8
  809. package/dist/index90.js.map +1 -1
  810. package/dist/index91.js +5 -4
  811. package/dist/index91.js.map +1 -1
  812. package/dist/index92.js +4 -5
  813. package/dist/index92.js.map +1 -1
  814. package/dist/index93.js +466 -4
  815. package/dist/index93.js.map +1 -1
  816. package/dist/index94.js +139 -420
  817. package/dist/index94.js.map +1 -1
  818. package/dist/index95.js +71 -149
  819. package/dist/index95.js.map +1 -1
  820. package/dist/index96.js +229 -74
  821. package/dist/index96.js.map +1 -1
  822. package/dist/index97.js +9 -262
  823. package/dist/index97.js.map +1 -1
  824. package/dist/index98.js +42 -9
  825. package/dist/index98.js.map +1 -1
  826. package/dist/index99.js +4 -42
  827. package/dist/index99.js.map +1 -1
  828. package/dist/lib/render-as-child.d.ts +5 -0
  829. package/dist/lib/render-as-child.d.ts.map +1 -0
  830. package/package.json +3 -6
  831. package/dist/lib/react-compose-refs.d.ts +0 -5
  832. package/dist/lib/react-compose-refs.d.ts.map +0 -1
package/dist/index16.js CHANGED
@@ -1,22 +1,27 @@
1
1
  import { j as t } from "./index30.js";
2
- import { c as H } from "./index28.js";
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) => {
2
+ import { c as q } from "./index28.js";
3
+ import { useContext as H, useState as T, useMemo as B, useCallback as Q, useEffect as Y, createContext as W, useRef as G } from "react";
4
+ import { X as Z, Loader2 as _, MoreVertical as ee } from "lucide-react";
5
+ import { cn as K } from "./index2.js";
6
+ import { DialogRoot as te } from "./index34.js";
7
+ import { DialogPortal as ne } from "./index39.js";
8
+ import { DialogBackdrop as re } from "./index38.js";
9
+ import { DialogPopup as oe } from "./index36.js";
10
+ import { DialogTitle as se } from "./index40.js";
11
+ import { DialogClose as ie } from "./index35.js";
12
+ const X = (s) => {
8
13
  const e = Date.parse(s);
9
14
  return Number.isFinite(e) ? e : 0;
10
- }, ne = (s) => {
11
- const e = new Date(q(s));
15
+ }, ae = (s) => {
16
+ const e = new Date(X(s));
12
17
  if (!Number.isFinite(e.getTime())) return "unknown";
13
18
  const n = e.getFullYear(), i = String(e.getMonth() + 1).padStart(2, "0"), a = String(e.getDate()).padStart(2, "0");
14
19
  return `${n}-${i}-${a}`;
15
- }, re = (s) => {
20
+ }, le = (s) => {
16
21
  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);
22
+ const [e, n, i] = s.split("-"), a = Number(e), l = Number(n), o = Number(i);
23
+ if (!Number.isFinite(a) || !Number.isFinite(l) || !Number.isFinite(o)) return "Unknown date";
24
+ const U = new Date(a, l - 1, o);
20
25
  if (!Number.isFinite(U.getTime())) return "Unknown date";
21
26
  const f = (/* @__PURE__ */ new Date()).getFullYear() !== a;
22
27
  return U.toLocaleDateString(void 0, f ? {
@@ -29,28 +34,28 @@ const q = (s) => {
29
34
  month: "short",
30
35
  day: "numeric"
31
36
  });
32
- }, V = (s) => {
37
+ }, J = (s) => {
33
38
  const e = [];
34
39
  let n = null;
35
40
  for (const i of s) {
36
- const a = ne(i.createdAt);
41
+ const a = ae(i.createdAt);
37
42
  a !== n && (n = a, e.push({
38
43
  key: a,
39
- label: re(a),
44
+ label: le(a),
40
45
  items: []
41
46
  })), e[e.length - 1].items.push(i);
42
47
  }
43
48
  return e;
44
- }, oe = Z(null);
45
- function ue({
49
+ }, ce = W(null);
50
+ function Ne({
46
51
  open: s,
47
52
  onOpenChange: e,
48
53
  className: n,
49
54
  limit: i = 50,
50
55
  defaultUnreadOnly: a = !1,
51
- realtimeContext: c
56
+ realtimeContext: l
52
57
  }) {
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 ({
58
+ const o = H(l ?? ce), [U, A] = T([]), [f, g] = T(0), [F, D] = T(0), [L, $] = T(!1), [S, h] = T(null), [c, M] = T(a), y = o?.notifications ?? U, v = o?.unreadCount ?? f, j = o?.unseenCount ?? F, R = o?.loading ?? L, O = o?.error ? o.error instanceof Error ? o.error.message : String(o.error) : S, p = B(() => y.slice(0, i), [i, y]), N = B(() => p.filter((r) => !r.readAt), [p]), w = B(() => p.filter((r) => !!r.readAt), [p]), k = B(() => J(N), [N]), E = B(() => J(w), [w]), b = Q(async ({
54
59
  unreadOnly: r,
55
60
  markSeen: u
56
61
  }) => {
@@ -73,14 +78,14 @@ function ue({
73
78
  return;
74
79
  }
75
80
  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);
81
+ A(C), g(Number.isFinite(d.unreadCount) ? Math.max(0, Math.floor(d.unreadCount ?? 0)) : 0), D(Number.isFinite(d.unseenCount) ? Math.max(0, Math.floor(d.unseenCount ?? 0)) : 0);
77
82
  } catch {
78
83
  h("Unable to load notifications.");
79
84
  } finally {
80
85
  $(!1);
81
86
  }
82
87
  }, [i]);
83
- G(() => {
88
+ Y(() => {
84
89
  if (s) {
85
90
  if (o) {
86
91
  (async () => {
@@ -104,17 +109,17 @@ function ue({
104
109
  return;
105
110
  }
106
111
  b({
107
- unreadOnly: l,
112
+ unreadOnly: c,
108
113
  markSeen: !0
109
114
  });
110
115
  }
111
- }, [s, o, b, l]), G(() => {
116
+ }, [s, o, b, c]), Y(() => {
112
117
  s && (o || b({
113
- unreadOnly: l,
118
+ unreadOnly: c,
114
119
  markSeen: !1
115
120
  }));
116
- }, [s, o, b, l]);
117
- const B = async (r) => {
121
+ }, [s, o, b, c]);
122
+ const P = async (r) => {
118
123
  try {
119
124
  const u = await fetch(`/api/rb/notifications/${encodeURIComponent(r)}/read`, {
120
125
  method: "POST",
@@ -130,7 +135,7 @@ function ue({
130
135
  if (o) return;
131
136
  A((C) => {
132
137
  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 ? {
138
+ return m && !m.readAt && g((x) => Math.max(0, x - 1)), m && !m.seenAt && D((x) => Math.max(0, x - 1)), C.map((x) => x.id === r && !x.readAt ? {
134
139
  ...x,
135
140
  readAt: d,
136
141
  ...x.seenAt ? {} : {
@@ -154,54 +159,54 @@ function ue({
154
159
  if (!u.ok || !I?.ok || o) return;
155
160
  A((d) => {
156
161
  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);
162
+ return C && !C.readAt && g((m) => Math.max(0, m - 1)), C && !C.seenAt && D((m) => Math.max(0, m - 1)), d.filter((m) => m.id !== r);
158
163
  });
159
164
  } catch {
160
165
  return;
161
166
  }
162
167
  };
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: [
168
+ return /* @__PURE__ */ t.jsx(te, { open: s, onOpenChange: e, children: /* @__PURE__ */ t.jsxs(ne, { children: [
169
+ /* @__PURE__ */ t.jsx(re, { className: "fixed inset-0 z-50 bg-black/50" }),
170
+ /* @__PURE__ */ t.jsxs(oe, { className: K("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: [
166
171
  /* @__PURE__ */ t.jsxs("header", { className: "flex items-center justify-between gap-2 border-b px-4 py-3", children: [
167
172
  /* @__PURE__ */ t.jsxs("div", { className: "flex min-w-0 flex-col", children: [
168
- /* @__PURE__ */ t.jsx(P.Title, { className: "text-sm font-semibold", children: "Notifications" }),
173
+ /* @__PURE__ */ t.jsx(se, { className: "text-sm font-semibold", children: "Notifications" }),
169
174
  /* @__PURE__ */ t.jsx("span", { className: "text-xs text-muted-foreground", children: v > 0 ? `${v} unread` : j > 0 ? `${j} new` : "All caught up" })
170
175
  ] }),
171
176
  /* @__PURE__ */ t.jsxs("div", { className: "flex items-center gap-2", children: [
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" }) }) })
177
+ /* @__PURE__ */ t.jsx("button", { type: "button", onClick: () => M((r) => !r), className: K("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" }),
178
+ /* @__PURE__ */ t.jsx(ie, { render: /* @__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(Z, { className: "h-4 w-4" }) })
174
179
  ] })
175
180
  ] }),
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: [
181
+ /* @__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(_, { 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: [
177
182
  /* @__PURE__ */ t.jsxs("div", { children: [
178
183
  /* @__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" }),
179
184
  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
185
  /* @__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)) })
186
+ /* @__PURE__ */ t.jsx("div", { className: "-mx-4 flex flex-col divide-y divide-border", children: r.items.map((u) => /* @__PURE__ */ t.jsx(V, { notification: u, onMarkRead: P, onArchive: z }, u.id)) })
182
187
  ] }, `unread:${r.key}`))
183
188
  ] }),
184
- l ? null : /* @__PURE__ */ t.jsxs("div", { children: [
189
+ c ? null : /* @__PURE__ */ t.jsxs("div", { children: [
185
190
  /* @__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" }),
186
191
  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
192
  /* @__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)) })
193
+ /* @__PURE__ */ t.jsx("div", { className: "-mx-4 flex flex-col divide-y divide-border", children: r.items.map((u) => /* @__PURE__ */ t.jsx(V, { notification: u, onMarkRead: P, onArchive: z }, u.id)) })
189
194
  ] }, `previous:${r.key}`))
190
195
  ] })
191
196
  ] }) })
192
197
  ] })
193
198
  ] }) });
194
199
  }
195
- function X(s) {
196
- const e = H.c(45), {
200
+ function V(s) {
201
+ const e = q.c(45), {
197
202
  notification: n,
198
203
  onMarkRead: i,
199
204
  onArchive: a
200
- } = s, [c, o] = T(!1), U = J(null), A = J(null), f = !n.readAt;
205
+ } = s, [l, o] = T(!1), U = G(null), A = G(null), f = !n.readAt;
201
206
  let g;
202
207
  if (e[0] !== n.createdAt) {
203
208
  e: {
204
- const b = new Date(q(n.createdAt));
209
+ const b = new Date(X(n.createdAt));
205
210
  if (!Number.isFinite(b.getTime())) {
206
211
  g = "";
207
212
  break e;
@@ -212,76 +217,76 @@ function X(s) {
212
217
  } else
213
218
  g = e[1];
214
219
  const F = g;
215
- let S, L;
216
- e[2] !== c ? (S = () => {
217
- if (!c)
220
+ let D, L;
221
+ e[2] !== l ? (D = () => {
222
+ if (!l)
218
223
  return;
219
224
  const b = (z) => {
220
225
  const r = z.target;
221
226
  r instanceof Node && (U.current?.contains(r) || A.current?.contains(r) || o(!1));
222
- }, B = (z) => {
227
+ }, P = (z) => {
223
228
  z.key === "Escape" && (o(!1), A.current?.focus());
224
229
  };
225
- return document.addEventListener("pointerdown", b), document.addEventListener("keydown", B), () => {
226
- document.removeEventListener("pointerdown", b), document.removeEventListener("keydown", B);
230
+ return document.addEventListener("pointerdown", b), document.addEventListener("keydown", P), () => {
231
+ document.removeEventListener("pointerdown", b), document.removeEventListener("keydown", P);
227
232
  };
228
- }, L = [c], e[2] = c, e[3] = S, e[4] = L) : (S = e[3], L = e[4]), G(S, L);
233
+ }, L = [l], e[2] = l, e[3] = D, e[4] = L) : (D = e[3], L = e[4]), Y(D, L);
229
234
  const $ = f ? "bg-primary/5" : "bg-background";
230
- let M;
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];
235
+ let S;
236
+ e[5] !== $ ? (S = K("group flex w-full gap-3 px-4 py-3 hover:bg-accent/40", $), e[5] = $, e[6] = S) : S = e[6];
232
237
  let h;
233
238
  e[7] !== f || e[8] !== n.id || e[9] !== n.url || e[10] !== i ? (h = () => {
234
239
  f && i(n.id), n.url && (window.location.href = n.url);
235
240
  }, 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];
241
+ let c;
242
+ e[12] !== n.title ? (c = /* @__PURE__ */ t.jsx("div", { className: "truncate text-sm font-semibold", children: n.title }), e[12] = n.title, e[13] = c) : c = e[13];
243
+ let M;
244
+ e[14] !== n.body ? (M = 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] = M) : M = e[15];
240
245
  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];
246
+ e[16] !== c || e[17] !== M ? (y = /* @__PURE__ */ t.jsxs("div", { className: "min-w-0", children: [
247
+ c,
248
+ M
249
+ ] }), e[16] = c, e[17] = M, e[18] = y) : y = e[18];
245
250
  let v;
246
251
  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
252
  let j;
248
253
  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: [
254
+ let R;
255
+ e[23] !== v || e[24] !== j || e[25] !== h || e[26] !== y ? (R = /* @__PURE__ */ t.jsxs("button", { type: "button", className: "min-w-0 flex-1 text-left", onClick: h, children: [
251
256
  y,
252
257
  v,
253
258
  j
254
- ] }), e[23] = v, e[24] = j, e[25] = h, e[26] = y, e[27] = D) : D = e[27];
259
+ ] }), e[23] = v, e[24] = j, e[25] = h, e[26] = y, e[27] = R) : R = e[27];
255
260
  let O, p;
256
261
  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]);
262
+ o(de);
263
+ }, p = /* @__PURE__ */ t.jsx(ee, { className: "h-4 w-4" }), e[28] = O, e[29] = p) : (O = e[28], p = e[29]);
259
264
  let N;
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];
265
+ e[30] !== l ? (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": l, onClick: O, children: p }), e[30] = l, e[31] = N) : N = e[31];
261
266
  let w;
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: [
267
+ e[32] !== f || e[33] !== l || e[34] !== n.id || e[35] !== a || e[36] !== i ? (w = l ? /* @__PURE__ */ t.jsxs("div", { ref: U, role: "menu", className: K("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
268
  /* @__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
269
  o(!1), a(n.id);
265
270
  }, children: "Archive" }),
266
271
  /* @__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
272
  o(!1), i(n.id);
268
273
  }, 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];
274
+ ] }) : null, e[32] = f, e[33] = l, e[34] = n.id, e[35] = a, e[36] = i, e[37] = w) : w = e[37];
270
275
  let k;
271
276
  e[38] !== N || e[39] !== w ? (k = /* @__PURE__ */ t.jsxs("div", { className: "relative flex items-start", children: [
272
277
  N,
273
278
  w
274
279
  ] }), e[38] = N, e[39] = w, e[40] = k) : k = e[40];
275
280
  let E;
276
- return e[41] !== D || e[42] !== k || e[43] !== M ? (E = /* @__PURE__ */ t.jsxs("div", { className: M, children: [
277
- D,
281
+ return e[41] !== R || e[42] !== k || e[43] !== S ? (E = /* @__PURE__ */ t.jsxs("div", { className: S, children: [
282
+ R,
278
283
  k
279
- ] }), e[41] = D, e[42] = k, e[43] = M, e[44] = E) : E = e[44], E;
284
+ ] }), e[41] = R, e[42] = k, e[43] = S, e[44] = E) : E = e[44], E;
280
285
  }
281
- function se(s) {
286
+ function de(s) {
282
287
  return !s;
283
288
  }
284
289
  export {
285
- ue as NotificationsDrawer
290
+ Ne as NotificationsDrawer
286
291
  };
287
292
  //# 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, 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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"}
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 { Dialog as DialogPrimitive } from \"@base-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.Backdrop className=\"fixed inset-0 z-50 bg-black/50\" />\n <DialogPrimitive.Popup\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\n render={<button type=\"button\" className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\" />}\n >\n <X className=\"h-4 w-4\" />\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.Popup>\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.Root","jsxs","DialogPrimitive.Portal","DialogPrimitive.Backdrop","DialogPrimitive.Popup","cn","DialogPrimitive.Title","v","DialogPrimitive.Close","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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"}
package/dist/index160.js CHANGED
@@ -1,27 +1,14 @@
1
- import { labelDay as o, labelDayButton as l } from "./index161.js";
2
- import { labelCaption as t, labelGrid as b } from "./index162.js";
3
- import { labelGridcell as m } from "./index163.js";
4
- import { labelMonthDropdown as f } from "./index164.js";
5
- import { labelNav as n } from "./index165.js";
6
- import { labelNext as u } from "./index166.js";
7
- import { labelPrevious as N } from "./index167.js";
8
- import { labelWeekday as y } from "./index168.js";
9
- import { labelWeekNumber as v } from "./index169.js";
10
- import { labelWeekNumberHeader as G } from "./index170.js";
11
- import { labelYearDropdown as h } from "./index171.js";
1
+ function d(o, n, s, a, e) {
2
+ const { startOfMonth: r, startOfYear: c, endOfYear: f, eachMonthOfInterval: l, getMonth: p } = e;
3
+ return l({
4
+ start: c(o),
5
+ end: f(o)
6
+ }).map((t) => {
7
+ const O = a.formatMonthDropdown(t, e), h = p(t), u = n && t < r(n) || s && t > r(s) || !1;
8
+ return { value: h, label: O, disabled: u };
9
+ });
10
+ }
12
11
  export {
13
- t as labelCaption,
14
- o as labelDay,
15
- l as labelDayButton,
16
- b as labelGrid,
17
- m as labelGridcell,
18
- f as labelMonthDropdown,
19
- n as labelNav,
20
- u as labelNext,
21
- N as labelPrevious,
22
- v as labelWeekNumber,
23
- G as labelWeekNumberHeader,
24
- y as labelWeekday,
25
- h as labelYearDropdown
12
+ d as getMonthOptions
26
13
  };
27
14
  //# sourceMappingURL=index160.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index160.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
1
+ {"version":3,"file":"index160.js","sources":["../../../node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.js"],"sourcesContent":["/**\n * Returns the months to show in the dropdown.\n *\n * This function generates a list of months for the current year, formatted\n * using the provided formatter, and determines whether each month should be\n * disabled based on the navigation range.\n *\n * @param displayMonth The currently displayed month.\n * @param navStart The start date for navigation.\n * @param navEnd The end date for navigation.\n * @param formatters The formatters to use for formatting the month labels.\n * @param dateLib The date library to use for date manipulation.\n * @returns An array of dropdown options representing the months, or `undefined`\n * if no months are available.\n */\nexport function getMonthOptions(displayMonth, navStart, navEnd, formatters, dateLib) {\n const { startOfMonth, startOfYear, endOfYear, eachMonthOfInterval, getMonth, } = dateLib;\n const months = eachMonthOfInterval({\n start: startOfYear(displayMonth),\n end: endOfYear(displayMonth),\n });\n const options = months.map((month) => {\n const label = formatters.formatMonthDropdown(month, dateLib);\n const value = getMonth(month);\n const disabled = (navStart && month < startOfMonth(navStart)) ||\n (navEnd && month > startOfMonth(navEnd)) ||\n false;\n return { value, label, disabled };\n });\n return options;\n}\n"],"names":["getMonthOptions","displayMonth","navStart","navEnd","formatters","dateLib","startOfMonth","startOfYear","endOfYear","eachMonthOfInterval","getMonth","month","label","value","disabled"],"mappings":"AAeO,SAASA,EAAgBC,GAAcC,GAAUC,GAAQC,GAAYC,GAAS;AACjF,QAAM,EAAE,cAAAC,GAAc,aAAAC,GAAa,WAAAC,GAAW,qBAAAC,GAAqB,UAAAC,EAAQ,IAAML;AAajF,SAZeI,EAAoB;AAAA,IAC/B,OAAOF,EAAYN,CAAY;AAAA,IAC/B,KAAKO,EAAUP,CAAY;AAAA,EACnC,CAAK,EACsB,IAAI,CAACU,MAAU;AAClC,UAAMC,IAAQR,EAAW,oBAAoBO,GAAON,CAAO,GACrDQ,IAAQH,EAASC,CAAK,GACtBG,IAAYZ,KAAYS,IAAQL,EAAaJ,CAAQ,KACtDC,KAAUQ,IAAQL,EAAaH,CAAM,KACtC;AACJ,WAAO,EAAE,OAAAU,GAAO,OAAAD,GAAO,UAAAE,EAAQ;AAAA,EACnC,CAAC;AAEL;","x_google_ignoreList":[0]}
package/dist/index161.js CHANGED
@@ -1,11 +1,14 @@
1
- import { DateLib as n } from "./index128.js";
2
- function r(a, t, l, o) {
3
- let e = (o ?? new n(l)).format(a, "PPPP");
4
- return t.today && (e = `Today, ${e}`), t.selected && (e = `${e}, selected`), e;
1
+ import { UI as f } from "./index165.js";
2
+ function n(r, o = {}, i = {}) {
3
+ let e = { ...o?.[f.Day] };
4
+ return Object.entries(r).filter(([, t]) => t === !0).forEach(([t]) => {
5
+ e = {
6
+ ...e,
7
+ ...i?.[t]
8
+ };
9
+ }), e;
5
10
  }
6
- const c = r;
7
11
  export {
8
- c as labelDay,
9
- r as labelDayButton
12
+ n as getStyleForModifiers
10
13
  };
11
14
  //# sourceMappingURL=index161.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index161.js","sources":["../../../node_modules/react-day-picker/dist/esm/labels/labelDayButton.js"],"sourcesContent":["import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Generates the ARIA label for a day button.\n *\n * Use the `modifiers` argument to provide additional context for the label,\n * such as indicating if the day is \"today\" or \"selected.\"\n *\n * @defaultValue The formatted date.\n * @param date - The date to format.\n * @param modifiers - The modifiers providing context for the day.\n * @param options - Optional configuration for the date formatting library.\n * @param dateLib - An optional instance of the date formatting library.\n * @returns The ARIA label for the day button.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelDayButton(date, modifiers, options, dateLib) {\n let label = (dateLib ?? new DateLib(options)).format(date, \"PPPP\");\n if (modifiers.today)\n label = `Today, ${label}`;\n if (modifiers.selected)\n label = `${label}, selected`;\n return label;\n}\n/**\n * @ignore\n * @deprecated Use `labelDayButton` instead.\n */\nexport const labelDay = labelDayButton;\n"],"names":["labelDayButton","date","modifiers","options","dateLib","label","DateLib","labelDay"],"mappings":";AAgBO,SAASA,EAAeC,GAAMC,GAAWC,GAASC,GAAS;AAC9D,MAAIC,KAASD,KAAW,IAAIE,EAAQH,CAAO,GAAG,OAAOF,GAAM,MAAM;AACjE,SAAIC,EAAU,UACVG,IAAQ,UAAUA,CAAK,KACvBH,EAAU,aACVG,IAAQ,GAAGA,CAAK,eACbA;AACX;AAKY,MAACE,IAAWP;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index161.js","sources":["../../../node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.js"],"sourcesContent":["import { UI } from \"../UI.js\";\n/**\n * Returns the computed style for a day based on its modifiers.\n *\n * This function merges the base styles for the day with any styles associated\n * with active modifiers.\n *\n * @param dayModifiers The modifiers applied to the day.\n * @param styles The base styles for the calendar elements.\n * @param modifiersStyles The styles associated with specific modifiers.\n * @returns The computed style for the day.\n */\nexport function getStyleForModifiers(dayModifiers, styles = {}, modifiersStyles = {}) {\n let style = { ...styles?.[UI.Day] };\n Object.entries(dayModifiers)\n .filter(([, active]) => active === true)\n .forEach(([modifier]) => {\n style = {\n ...style,\n ...modifiersStyles?.[modifier],\n };\n });\n return style;\n}\n"],"names":["getStyleForModifiers","dayModifiers","styles","modifiersStyles","style","UI","active","modifier"],"mappings":";AAYO,SAASA,EAAqBC,GAAcC,IAAS,CAAA,GAAIC,IAAkB,CAAA,GAAI;AAClF,MAAIC,IAAQ,EAAE,GAAGF,IAASG,EAAG,GAAG,EAAC;AACjC,gBAAO,QAAQJ,CAAY,EACtB,OAAO,CAAC,CAAA,EAAGK,CAAM,MAAMA,MAAW,EAAI,EACtC,QAAQ,CAAC,CAACC,CAAQ,MAAM;AACzB,IAAAH,IAAQ;AAAA,MACJ,GAAGA;AAAA,MACH,GAAGD,IAAkBI,CAAQ;AAAA,IACzC;AAAA,EACI,CAAC,GACMH;AACX;","x_google_ignoreList":[0]}
package/dist/index162.js CHANGED
@@ -1,10 +1,12 @@
1
- import { DateLib as r } from "./index128.js";
2
- function e(t, o, n) {
3
- return (n ?? new r(o)).formatMonthYear(t);
1
+ function y(t, o, a, n) {
2
+ const s = n ?? t.today(), c = a ? t.startOfBroadcastWeek(s, t) : o ? t.startOfISOWeek(s) : t.startOfWeek(s), r = [];
3
+ for (let e = 0; e < 7; e++) {
4
+ const f = t.addDays(c, e);
5
+ r.push(f);
6
+ }
7
+ return r;
4
8
  }
5
- const l = e;
6
9
  export {
7
- l as labelCaption,
8
- e as labelGrid
10
+ y as getWeekdays
9
11
  };
10
12
  //# sourceMappingURL=index162.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index162.js","sources":["../../../node_modules/react-day-picker/dist/esm/labels/labelGrid.js"],"sourcesContent":["import { DateLib } from \"../classes/DateLib.js\";\n/**\n * Generates the ARIA label for the month grid, which is announced when entering\n * the grid.\n *\n * @defaultValue Locale-specific month/year order (e.g., \"November 2022\").\n * @param date - The date representing the month.\n * @param options - Optional configuration for the date formatting library.\n * @param dateLib - An optional instance of the date formatting library.\n * @returns The ARIA label for the month grid.\n * @group Labels\n * @see https://daypicker.dev/docs/translation#aria-labels\n */\nexport function labelGrid(date, options, dateLib) {\n const lib = dateLib ?? new DateLib(options);\n return lib.formatMonthYear(date);\n}\n/**\n * @ignore\n * @deprecated Use {@link labelGrid} instead.\n */\nexport const labelCaption = labelGrid;\n"],"names":["labelGrid","date","options","dateLib","DateLib","labelCaption"],"mappings":";AAaO,SAASA,EAAUC,GAAMC,GAASC,GAAS;AAE9C,UADYA,KAAW,IAAIC,EAAQF,CAAO,GAC/B,gBAAgBD,CAAI;AACnC;AAKY,MAACI,IAAeL;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index162.js","sources":["../../../node_modules/react-day-picker/dist/esm/helpers/getWeekdays.js"],"sourcesContent":["/**\n * Generates a series of 7 days, starting from the beginning of the week, to use\n * for formatting weekday names (e.g., Monday, Tuesday, etc.).\n *\n * @param dateLib The date library to use for date manipulation.\n * @param ISOWeek Whether to use ISO week numbering (weeks start on Monday).\n * @param broadcastCalendar Whether to use the broadcast calendar (weeks start\n * on Monday, but may include adjustments for broadcast-specific rules).\n * @returns An array of 7 dates representing the weekdays.\n */\nexport function getWeekdays(dateLib, ISOWeek, broadcastCalendar, today) {\n const referenceToday = today ?? dateLib.today();\n const start = broadcastCalendar\n ? dateLib.startOfBroadcastWeek(referenceToday, dateLib)\n : ISOWeek\n ? dateLib.startOfISOWeek(referenceToday)\n : dateLib.startOfWeek(referenceToday);\n const days = [];\n for (let i = 0; i < 7; i++) {\n const day = dateLib.addDays(start, i);\n days.push(day);\n }\n return days;\n}\n"],"names":["getWeekdays","dateLib","ISOWeek","broadcastCalendar","today","referenceToday","start","days","i","day"],"mappings":"AAUO,SAASA,EAAYC,GAASC,GAASC,GAAmBC,GAAO;AACpE,QAAMC,IAAiBD,KAASH,EAAQ,MAAK,GACvCK,IAAQH,IACRF,EAAQ,qBAAqBI,GAAgBJ,CAAO,IACpDC,IACID,EAAQ,eAAeI,CAAc,IACrCJ,EAAQ,YAAYI,CAAc,GACtCE,IAAO,CAAA;AACb,WAASC,IAAI,GAAGA,IAAI,GAAGA,KAAK;AACxB,UAAMC,IAAMR,EAAQ,QAAQK,GAAOE,CAAC;AACpC,IAAAD,EAAK,KAAKE,CAAG;AAAA,EACjB;AACA,SAAOF;AACX;","x_google_ignoreList":[0]}