@rpcbase/ui 0.241.0 → 0.243.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 (774) hide show
  1. package/dist/components/DayPickerField/index.d.ts.map +1 -1
  2. package/dist/components/Notifications/NotificationsDrawer.d.ts.map +1 -1
  3. package/dist/components/PhoneNumberInput/country-options.d.ts +1 -1
  4. package/dist/components/PhoneNumberInput/country-options.d.ts.map +1 -1
  5. package/dist/index100.js +8 -4
  6. package/dist/index100.js.map +1 -1
  7. package/dist/index101.js +5 -8
  8. package/dist/index101.js.map +1 -1
  9. package/dist/index102.js +4 -5
  10. package/dist/index102.js.map +1 -1
  11. package/dist/index103.js +3 -3
  12. package/dist/index103.js.map +1 -1
  13. package/dist/index104.js +6 -4
  14. package/dist/index104.js.map +1 -1
  15. package/dist/index105.js +152 -6
  16. package/dist/index105.js.map +1 -1
  17. package/dist/index106.js +38 -144
  18. package/dist/index106.js.map +1 -1
  19. package/dist/index107.js +4 -39
  20. package/dist/index107.js.map +1 -1
  21. package/dist/index108.js +7 -4
  22. package/dist/index108.js.map +1 -1
  23. package/dist/index109.js +12 -6
  24. package/dist/index109.js.map +1 -1
  25. package/dist/index110.js +13 -13
  26. package/dist/index110.js.map +1 -1
  27. package/dist/index111.js +7 -13
  28. package/dist/index111.js.map +1 -1
  29. package/dist/index112.js +30 -6
  30. package/dist/index112.js.map +1 -1
  31. package/dist/index113.js +10 -31
  32. package/dist/index113.js.map +1 -1
  33. package/dist/index114.js +10 -10
  34. package/dist/index114.js.map +1 -1
  35. package/dist/index115.js +8 -10
  36. package/dist/index115.js.map +1 -1
  37. package/dist/index116.js +13 -8
  38. package/dist/index116.js.map +1 -1
  39. package/dist/index117.js +101 -13
  40. package/dist/index117.js.map +1 -1
  41. package/dist/index118.js +20 -102
  42. package/dist/index118.js.map +1 -1
  43. package/dist/index119.js +54 -20
  44. package/dist/index119.js.map +1 -1
  45. package/dist/index120.js +70 -51
  46. package/dist/index120.js.map +1 -1
  47. package/dist/index121.js +9 -72
  48. package/dist/index121.js.map +1 -1
  49. package/dist/index122.js +20 -9
  50. package/dist/index122.js.map +1 -1
  51. package/dist/index123.js +16 -20
  52. package/dist/index123.js.map +1 -1
  53. package/dist/index124.js +23 -16
  54. package/dist/index124.js.map +1 -1
  55. package/dist/index125.js +6 -23
  56. package/dist/index125.js.map +1 -1
  57. package/dist/index126.js +5 -6
  58. package/dist/index126.js.map +1 -1
  59. package/dist/index127.js +23 -5
  60. package/dist/index127.js.map +1 -1
  61. package/dist/index128.js +35 -24
  62. package/dist/index128.js.map +1 -1
  63. package/dist/index129.js +14 -35
  64. package/dist/index129.js.map +1 -1
  65. package/dist/index130.js +5 -16
  66. package/dist/index130.js.map +1 -1
  67. package/dist/index131.js +4 -6
  68. package/dist/index131.js.map +1 -1
  69. package/dist/index132.js +4 -4
  70. package/dist/index132.js.map +1 -1
  71. package/dist/index133.js +4 -4
  72. package/dist/index133.js.map +1 -1
  73. package/dist/index134.js +4 -4
  74. package/dist/index134.js.map +1 -1
  75. package/dist/index135.js +3 -4
  76. package/dist/index135.js.map +1 -1
  77. package/dist/index136.js +4 -3
  78. package/dist/index136.js.map +1 -1
  79. package/dist/index137.js +22 -7
  80. package/dist/index137.js.map +1 -1
  81. package/dist/index138.js +6 -24
  82. package/dist/index138.js.map +1 -1
  83. package/dist/index139.js +4 -7
  84. package/dist/index139.js.map +1 -1
  85. package/dist/index140.js +5 -6
  86. package/dist/index140.js.map +1 -1
  87. package/dist/index141.js +3 -5
  88. package/dist/index141.js.map +1 -1
  89. package/dist/index142.js +3 -3
  90. package/dist/index142.js.map +1 -1
  91. package/dist/index143.js +4 -3
  92. package/dist/index143.js.map +1 -1
  93. package/dist/index144.js +3 -4
  94. package/dist/index144.js.map +1 -1
  95. package/dist/index145.js +4 -3
  96. package/dist/index145.js.map +1 -1
  97. package/dist/index146.js +3 -4
  98. package/dist/index146.js.map +1 -1
  99. package/dist/index147.js +3 -3
  100. package/dist/index147.js.map +1 -1
  101. package/dist/index148.js +3 -3
  102. package/dist/index148.js.map +1 -1
  103. package/dist/index149.js +5 -3
  104. package/dist/index149.js.map +1 -1
  105. package/dist/index150.js +68 -5
  106. package/dist/index150.js.map +1 -1
  107. package/dist/index151.js +2 -69
  108. package/dist/index151.js.map +1 -1
  109. package/dist/index152.js +386 -2
  110. package/dist/index152.js.map +1 -1
  111. package/dist/index153.js +201 -303
  112. package/dist/index153.js.map +1 -1
  113. package/dist/index154.js +46 -247
  114. package/dist/index154.js.map +1 -1
  115. package/dist/index155.js +42 -56
  116. package/dist/index155.js.map +1 -1
  117. package/dist/index156.js +169 -46
  118. package/dist/index156.js.map +1 -1
  119. package/dist/index157.js +96 -156
  120. package/dist/index157.js.map +1 -1
  121. package/dist/index158.js +24 -109
  122. package/dist/index158.js.map +1 -1
  123. package/dist/index159.js +8 -25
  124. package/dist/index159.js.map +1 -1
  125. package/dist/index16.js +91 -91
  126. package/dist/index16.js.map +1 -1
  127. package/dist/index160.js +5 -8
  128. package/dist/index160.js.map +1 -1
  129. package/dist/index161.js +5 -4
  130. package/dist/index161.js.map +1 -1
  131. package/dist/index162.js +4 -5
  132. package/dist/index162.js.map +1 -1
  133. package/dist/index163.js +487 -4
  134. package/dist/index163.js.map +1 -1
  135. package/dist/index164.js +151 -428
  136. package/dist/index164.js.map +1 -1
  137. package/dist/index165.js +13 -185
  138. package/dist/index165.js.map +1 -1
  139. package/dist/index166.js.map +1 -1
  140. package/dist/index167.js +6 -6
  141. package/dist/index167.js.map +1 -1
  142. package/dist/index168.js +3 -6
  143. package/dist/index168.js.map +1 -1
  144. package/dist/index169.js +15 -17
  145. package/dist/index169.js.map +1 -1
  146. package/dist/index170.js.map +1 -1
  147. package/dist/index171.js +12 -9
  148. package/dist/index171.js.map +1 -1
  149. package/dist/index172.js +10 -10
  150. package/dist/index172.js.map +1 -1
  151. package/dist/index173.js.map +1 -1
  152. package/dist/index174.js.map +1 -1
  153. package/dist/index175.js +1 -1
  154. package/dist/index175.js.map +1 -1
  155. package/dist/index176.js +13 -12
  156. package/dist/index176.js.map +1 -1
  157. package/dist/index177.js.map +1 -1
  158. package/dist/index178.js +1 -1
  159. package/dist/index178.js.map +1 -1
  160. package/dist/index179.js.map +1 -1
  161. package/dist/index180.js.map +1 -1
  162. package/dist/index181.js +1 -1
  163. package/dist/index181.js.map +1 -1
  164. package/dist/index182.js +2 -2
  165. package/dist/index182.js.map +1 -1
  166. package/dist/index183.js +6 -8
  167. package/dist/index183.js.map +1 -1
  168. package/dist/index184.js +161 -246
  169. package/dist/index184.js.map +1 -1
  170. package/dist/index185.js +279 -4
  171. package/dist/index185.js.map +1 -1
  172. package/dist/index186.js +5 -28
  173. package/dist/index186.js.map +1 -1
  174. package/dist/index187.js +23 -122
  175. package/dist/index187.js.map +1 -1
  176. package/dist/index188.js +126 -5
  177. package/dist/index188.js.map +1 -1
  178. package/dist/index189.js +59 -74
  179. package/dist/index189.js.map +1 -1
  180. package/dist/index190.js +7 -65
  181. package/dist/index190.js.map +1 -1
  182. package/dist/index191.js +16 -9
  183. package/dist/index191.js.map +1 -1
  184. package/dist/index192.js +31 -16
  185. package/dist/index192.js.map +1 -1
  186. package/dist/index193.js +65 -88
  187. package/dist/index193.js.map +1 -1
  188. package/dist/index194.js +58 -65
  189. package/dist/index194.js.map +1 -1
  190. package/dist/index195.js +8 -45
  191. package/dist/index195.js.map +1 -1
  192. package/dist/index196.js +77 -48
  193. package/dist/index196.js.map +1 -1
  194. package/dist/index197.js +19 -8
  195. package/dist/index197.js.map +1 -1
  196. package/dist/index198.js +15 -86
  197. package/dist/index198.js.map +1 -1
  198. package/dist/index199.js +4 -18
  199. package/dist/index199.js.map +1 -1
  200. package/dist/index200.js +4 -15
  201. package/dist/index200.js.map +1 -1
  202. package/dist/index201.js +6 -5
  203. package/dist/index201.js.map +1 -1
  204. package/dist/index202.js +4 -5
  205. package/dist/index202.js.map +1 -1
  206. package/dist/index203.js +6 -6
  207. package/dist/index203.js.map +1 -1
  208. package/dist/index204.js +16 -4
  209. package/dist/index204.js.map +1 -1
  210. package/dist/index205.js +4 -6
  211. package/dist/index205.js.map +1 -1
  212. package/dist/index206.js +4 -16
  213. package/dist/index206.js.map +1 -1
  214. package/dist/index207.js +12 -4
  215. package/dist/index207.js.map +1 -1
  216. package/dist/index208.js +9 -4
  217. package/dist/index208.js.map +1 -1
  218. package/dist/index209.js +13 -12
  219. package/dist/index209.js.map +1 -1
  220. package/dist/index210.js +13 -9
  221. package/dist/index210.js.map +1 -1
  222. package/dist/index211.js +4 -13
  223. package/dist/index211.js.map +1 -1
  224. package/dist/index212.js +5 -13
  225. package/dist/index212.js.map +1 -1
  226. package/dist/index213.js +6 -4
  227. package/dist/index213.js.map +1 -1
  228. package/dist/index214.js +5 -5
  229. package/dist/index214.js.map +1 -1
  230. package/dist/index215.js +54 -6
  231. package/dist/index215.js.map +1 -1
  232. package/dist/index216.js +8 -5
  233. package/dist/index216.js.map +1 -1
  234. package/dist/index217.js +4 -54
  235. package/dist/index217.js.map +1 -1
  236. package/dist/index218.js +4 -8
  237. package/dist/index218.js.map +1 -1
  238. package/dist/index219.js +8 -4
  239. package/dist/index219.js.map +1 -1
  240. package/dist/index220.js +4 -4
  241. package/dist/index220.js.map +1 -1
  242. package/dist/index221.js +4 -8
  243. package/dist/index221.js.map +1 -1
  244. package/dist/index222.js +3 -4
  245. package/dist/index222.js.map +1 -1
  246. package/dist/index223.js +10 -4
  247. package/dist/index223.js.map +1 -1
  248. package/dist/index224.js +9 -3
  249. package/dist/index224.js.map +1 -1
  250. package/dist/index225.js +8 -9
  251. package/dist/index225.js.map +1 -1
  252. package/dist/index226.js +10 -9
  253. package/dist/index226.js.map +1 -1
  254. package/dist/index227.js +10 -9
  255. package/dist/index227.js.map +1 -1
  256. package/dist/index228.js +9 -10
  257. package/dist/index228.js.map +1 -1
  258. package/dist/index229.js +6 -10
  259. package/dist/index229.js.map +1 -1
  260. package/dist/index230.js +5 -9
  261. package/dist/index230.js.map +1 -1
  262. package/dist/index231.js +4 -6
  263. package/dist/index231.js.map +1 -1
  264. package/dist/index232.js +5 -5
  265. package/dist/index232.js.map +1 -1
  266. package/dist/index233.js +6 -4
  267. package/dist/index233.js.map +1 -1
  268. package/dist/index234.js +5 -5
  269. package/dist/index234.js.map +1 -1
  270. package/dist/index235.js +16 -6
  271. package/dist/index235.js.map +1 -1
  272. package/dist/index236.js +7 -5
  273. package/dist/index236.js.map +1 -1
  274. package/dist/index237.js +9 -15
  275. package/dist/index237.js.map +1 -1
  276. package/dist/index238.js +10 -7
  277. package/dist/index238.js.map +1 -1
  278. package/dist/index239.js +21 -10
  279. package/dist/index239.js.map +1 -1
  280. package/dist/index240.js +8 -10
  281. package/dist/index240.js.map +1 -1
  282. package/dist/index241.js +9 -21
  283. package/dist/index241.js.map +1 -1
  284. package/dist/index242.js +9 -10
  285. package/dist/index242.js.map +1 -1
  286. package/dist/index243.js +4 -9
  287. package/dist/index243.js.map +1 -1
  288. package/dist/index244.js +5 -9
  289. package/dist/index244.js.map +1 -1
  290. package/dist/index245.js +16 -4
  291. package/dist/index245.js.map +1 -1
  292. package/dist/index246.js +9 -5
  293. package/dist/index246.js.map +1 -1
  294. package/dist/index247.js +18 -16
  295. package/dist/index247.js.map +1 -1
  296. package/dist/index248.js +20 -9
  297. package/dist/index248.js.map +1 -1
  298. package/dist/index249.js +8 -14
  299. package/dist/index249.js.map +1 -1
  300. package/dist/index250.js +29 -15
  301. package/dist/index250.js.map +1 -1
  302. package/dist/index251.js +12 -12
  303. package/dist/index251.js.map +1 -1
  304. package/dist/index252.js +24 -28
  305. package/dist/index252.js.map +1 -1
  306. package/dist/index253.js +5 -12
  307. package/dist/index253.js.map +1 -1
  308. package/dist/index254.js +152 -23
  309. package/dist/index254.js.map +1 -1
  310. package/dist/index255.js +32 -5
  311. package/dist/index255.js.map +1 -1
  312. package/dist/index256.js +12 -20
  313. package/dist/index256.js.map +1 -1
  314. package/dist/index257.js +44 -61
  315. package/dist/index257.js.map +1 -1
  316. package/dist/index258.js +9 -6
  317. package/dist/index258.js.map +1 -1
  318. package/dist/index259.js +11 -11
  319. package/dist/index259.js.map +1 -1
  320. package/dist/index260.js +41 -48
  321. package/dist/index260.js.map +1 -1
  322. package/dist/index261.js +98 -4
  323. package/dist/index261.js.map +1 -1
  324. package/dist/index262.js +84 -27
  325. package/dist/index262.js.map +1 -1
  326. package/dist/index263.js +103 -14
  327. package/dist/index263.js.map +1 -1
  328. package/dist/index264.js +52 -5
  329. package/dist/index264.js.map +1 -1
  330. package/dist/index265.js +11 -21
  331. package/dist/index265.js.map +1 -1
  332. package/dist/index266.js +4 -51
  333. package/dist/index266.js.map +1 -1
  334. package/dist/index267.js +37 -25
  335. package/dist/index267.js.map +1 -1
  336. package/dist/index268.js +8 -41
  337. package/dist/index268.js.map +1 -1
  338. package/dist/index269.js +132 -36
  339. package/dist/index269.js.map +1 -1
  340. package/dist/index27.js +421 -350
  341. package/dist/index27.js.map +1 -1
  342. package/dist/index270.js +18 -45
  343. package/dist/index270.js.map +1 -1
  344. package/dist/index271.js +14 -19
  345. package/dist/index271.js.map +1 -1
  346. package/dist/index272.js +3 -70
  347. package/dist/index272.js.map +1 -1
  348. package/dist/index273.js +34 -15
  349. package/dist/index273.js.map +1 -1
  350. package/dist/index274.js +20 -11
  351. package/dist/index274.js.map +1 -1
  352. package/dist/index275.js +8 -27
  353. package/dist/index275.js.map +1 -1
  354. package/dist/index276.js +9 -13
  355. package/dist/index276.js.map +1 -1
  356. package/dist/index277.js +24 -18
  357. package/dist/index277.js.map +1 -1
  358. package/dist/index278.js +27 -35
  359. package/dist/index278.js.map +1 -1
  360. package/dist/index279.js +16 -262
  361. package/dist/index279.js.map +1 -1
  362. package/dist/index280.js +20 -279
  363. package/dist/index280.js.map +1 -1
  364. package/dist/index281.js +64 -66
  365. package/dist/index281.js.map +1 -1
  366. package/dist/index282.js +6 -99
  367. package/dist/index282.js.map +1 -1
  368. package/dist/index283.js +5 -83
  369. package/dist/index283.js.map +1 -1
  370. package/dist/index284.js +11 -3
  371. package/dist/index284.js.map +1 -1
  372. package/dist/index285.js +3 -29
  373. package/dist/index285.js.map +1 -1
  374. package/dist/index286.js +50 -16
  375. package/dist/index286.js.map +1 -1
  376. package/dist/index287.js +4 -35
  377. package/dist/index287.js.map +1 -1
  378. package/dist/index288.js +28 -15
  379. package/dist/index288.js.map +1 -1
  380. package/dist/index289.js +16 -3
  381. package/dist/index289.js.map +1 -1
  382. package/dist/index29.js +48 -29
  383. package/dist/index29.js.map +1 -1
  384. package/dist/index290.js +5 -26
  385. package/dist/index290.js.map +1 -1
  386. package/dist/index291.js +20 -27
  387. package/dist/index291.js.map +1 -1
  388. package/dist/index292.js +54 -4
  389. package/dist/index292.js.map +1 -1
  390. package/dist/index293.js +18 -76
  391. package/dist/index293.js.map +1 -1
  392. package/dist/index294.js +37 -265
  393. package/dist/index294.js.map +1 -1
  394. package/dist/index295.js +39 -11
  395. package/dist/index295.js.map +1 -1
  396. package/dist/index296.js +45 -10
  397. package/dist/index296.js.map +1 -1
  398. package/dist/index297.js +20 -25
  399. package/dist/index297.js.map +1 -1
  400. package/dist/index298.js +69 -15
  401. package/dist/index298.js.map +1 -1
  402. package/dist/index299.js +14 -122
  403. package/dist/index299.js.map +1 -1
  404. package/dist/index300.js +3 -5
  405. package/dist/index300.js.map +1 -1
  406. package/dist/index301.js +11 -40
  407. package/dist/index301.js.map +1 -1
  408. package/dist/index302.js +12 -64
  409. package/dist/index302.js.map +1 -1
  410. package/dist/index303.js +19 -14
  411. package/dist/index303.js.map +1 -1
  412. package/dist/index304.js +36 -7
  413. package/dist/index304.js.map +1 -1
  414. package/dist/index305.js +239 -5
  415. package/dist/index305.js.map +1 -1
  416. package/dist/index306.js +252 -3
  417. package/dist/index306.js.map +1 -1
  418. package/dist/index307.js +68 -10
  419. package/dist/index307.js.map +1 -1
  420. package/dist/index308.js +99 -7
  421. package/dist/index308.js.map +1 -1
  422. package/dist/index309.js +80 -130
  423. package/dist/index309.js.map +1 -1
  424. package/dist/index31.js +194 -184
  425. package/dist/index31.js.map +1 -1
  426. package/dist/index310.js +3 -399
  427. package/dist/index310.js.map +1 -1
  428. package/dist/index311.js +29 -52
  429. package/dist/index311.js.map +1 -1
  430. package/dist/index312.js +15 -10
  431. package/dist/index312.js.map +1 -1
  432. package/dist/index313.js +35 -12
  433. package/dist/index313.js.map +1 -1
  434. package/dist/index314.js +17 -13
  435. package/dist/index314.js.map +1 -1
  436. package/dist/index315.js +3 -154
  437. package/dist/index315.js.map +1 -1
  438. package/dist/index316.js +25 -29
  439. package/dist/index316.js.map +1 -1
  440. package/dist/index317.js +28 -9
  441. package/dist/index317.js.map +1 -1
  442. package/dist/index318.js +4 -49
  443. package/dist/index318.js.map +1 -1
  444. package/dist/index319.js +77 -10
  445. package/dist/index319.js.map +1 -1
  446. package/dist/index32.js +3 -3
  447. package/dist/index32.js.map +1 -1
  448. package/dist/index320.js +271 -43
  449. package/dist/index320.js.map +1 -1
  450. package/dist/index321.js +11 -95
  451. package/dist/index321.js.map +1 -1
  452. package/dist/index322.js +11 -87
  453. package/dist/index322.js.map +1 -1
  454. package/dist/index323.js +24 -104
  455. package/dist/index323.js.map +1 -1
  456. package/dist/index324.js +16 -52
  457. package/dist/index324.js.map +1 -1
  458. package/dist/index325.js +124 -10
  459. package/dist/index325.js.map +1 -1
  460. package/dist/index326.js +5 -37
  461. package/dist/index326.js.map +1 -1
  462. package/dist/index327.js +65 -8
  463. package/dist/index327.js.map +1 -1
  464. package/dist/index328.js +14 -4
  465. package/dist/index328.js.map +1 -1
  466. package/dist/index329.js +7 -9
  467. package/dist/index329.js.map +1 -1
  468. package/dist/index330.js +5 -116
  469. package/dist/index330.js.map +1 -1
  470. package/dist/index331.js +3 -17
  471. package/dist/index331.js.map +1 -1
  472. package/dist/index332.js +10 -15
  473. package/dist/index332.js.map +1 -1
  474. package/dist/index333.js +7 -36
  475. package/dist/index333.js.map +1 -1
  476. package/dist/index334.js +131 -18
  477. package/dist/index334.js.map +1 -1
  478. package/dist/index335.js +398 -7
  479. package/dist/index335.js.map +1 -1
  480. package/dist/index336.js +5 -20
  481. package/dist/index336.js.map +1 -1
  482. package/dist/index337.js +50 -26
  483. package/dist/index337.js.map +1 -1
  484. package/dist/index338.js +11 -16
  485. package/dist/index338.js.map +1 -1
  486. package/dist/index339.js +27 -8
  487. package/dist/index339.js.map +1 -1
  488. package/dist/index34.js +7 -61
  489. package/dist/index34.js.map +1 -1
  490. package/dist/index340.js +11 -11
  491. package/dist/index340.js.map +1 -1
  492. package/dist/index341.js +8 -8
  493. package/dist/index341.js.map +1 -1
  494. package/dist/index342.js +11 -13
  495. package/dist/index342.js.map +1 -1
  496. package/dist/index343.js +8 -3
  497. package/dist/index343.js.map +1 -1
  498. package/dist/index344.js +13 -3
  499. package/dist/index344.js.map +1 -1
  500. package/dist/index345.js +3 -17
  501. package/dist/index345.js.map +1 -1
  502. package/dist/index346.js +3 -51
  503. package/dist/index346.js.map +1 -1
  504. package/dist/index347.js +17 -5
  505. package/dist/index347.js.map +1 -1
  506. package/dist/index348.js +60 -121
  507. package/dist/index348.js.map +1 -1
  508. package/dist/index349.js +65 -31
  509. package/dist/index349.js.map +1 -1
  510. package/dist/index35.js +29 -30
  511. package/dist/index35.js.map +1 -1
  512. package/dist/index350.js +47 -69
  513. package/dist/index350.js.map +1 -1
  514. package/dist/index351.js +5 -142
  515. package/dist/index351.js.map +1 -1
  516. package/dist/index352.js +7 -60
  517. package/dist/index352.js.map +1 -1
  518. package/dist/index353.js +4 -49
  519. package/dist/index353.js.map +1 -1
  520. package/dist/index354.js +12 -15
  521. package/dist/index354.js.map +1 -1
  522. package/dist/index355.js +21 -8
  523. package/dist/index355.js.map +1 -1
  524. package/dist/index356.js +17 -5
  525. package/dist/index356.js.map +1 -1
  526. package/dist/index357.js +8 -12
  527. package/dist/index357.js.map +1 -1
  528. package/dist/index358.js +144 -21
  529. package/dist/index358.js.map +1 -1
  530. package/dist/index359.js +79 -4
  531. package/dist/index359.js.map +1 -1
  532. package/dist/index36.js +52 -53
  533. package/dist/index36.js.map +1 -1
  534. package/dist/index360.js +61 -17
  535. package/dist/index360.js.map +1 -1
  536. package/dist/index361.js +15 -13
  537. package/dist/index361.js.map +1 -1
  538. package/dist/index362.js +4 -11
  539. package/dist/index362.js.map +1 -1
  540. package/dist/index363.js +18 -17
  541. package/dist/index363.js.map +1 -1
  542. package/dist/index364.js +13 -4
  543. package/dist/index364.js.map +1 -1
  544. package/dist/index365.js +4 -5
  545. package/dist/index365.js.map +1 -1
  546. package/dist/index366.js +20 -20
  547. package/dist/index366.js.map +1 -1
  548. package/dist/index367.js +4 -45
  549. package/dist/index367.js.map +1 -1
  550. package/dist/index368.js +11 -17
  551. package/dist/index368.js.map +1 -1
  552. package/dist/index369.js +6 -5
  553. package/dist/index369.js.map +1 -1
  554. package/dist/index37.js.map +1 -1
  555. package/dist/index370.js +3 -201
  556. package/dist/index370.js.map +1 -1
  557. package/dist/index371.js +20 -77
  558. package/dist/index371.js.map +1 -1
  559. package/dist/index372.js +45 -21
  560. package/dist/index372.js.map +1 -1
  561. package/dist/index373.js +18 -9
  562. package/dist/index373.js.map +1 -1
  563. package/dist/index374.js +5 -26
  564. package/dist/index374.js.map +1 -1
  565. package/dist/index375.js +196 -22
  566. package/dist/index375.js.map +1 -1
  567. package/dist/index376.js +73 -137
  568. package/dist/index376.js.map +1 -1
  569. package/dist/index377.js +121 -10
  570. package/dist/index377.js.map +1 -1
  571. package/dist/index378.js +7 -225
  572. package/dist/index378.js.map +1 -1
  573. package/dist/index379.js +27 -4
  574. package/dist/index379.js.map +1 -1
  575. package/dist/index38.js.map +1 -1
  576. package/dist/index380.js +136 -18
  577. package/dist/index380.js.map +1 -1
  578. package/dist/index381.js +10 -75
  579. package/dist/index381.js.map +1 -1
  580. package/dist/index382.js +47 -12
  581. package/dist/index382.js.map +1 -1
  582. package/dist/index383.js +3 -3
  583. package/dist/index383.js.map +1 -1
  584. package/dist/index384.js +19 -69
  585. package/dist/index384.js.map +1 -1
  586. package/dist/index385.js +76 -9
  587. package/dist/index385.js.map +1 -1
  588. package/dist/index386.js +12 -16
  589. package/dist/index386.js.map +1 -1
  590. package/dist/index387.js +3 -4
  591. package/dist/index387.js.map +1 -1
  592. package/dist/index388.js +71 -4
  593. package/dist/index388.js.map +1 -1
  594. package/dist/index389.js +36 -4
  595. package/dist/index389.js.map +1 -1
  596. package/dist/index39.js +3 -3
  597. package/dist/index39.js.map +1 -1
  598. package/dist/index390.js +7 -16
  599. package/dist/index390.js.map +1 -1
  600. package/dist/index391.js +15 -8
  601. package/dist/index391.js.map +1 -1
  602. package/dist/index392.js +4 -5
  603. package/dist/index392.js.map +1 -1
  604. package/dist/index393.js +4 -4
  605. package/dist/index393.js.map +1 -1
  606. package/dist/index394.js +4 -546
  607. package/dist/index394.js.map +1 -1
  608. package/dist/index395.js +16 -47
  609. package/dist/index395.js.map +1 -1
  610. package/dist/index396.js +8 -17
  611. package/dist/index396.js.map +1 -1
  612. package/dist/index397.js +5 -5
  613. package/dist/index397.js.map +1 -1
  614. package/dist/index398.js +4 -7
  615. package/dist/index398.js.map +1 -1
  616. package/dist/index399.js +545 -6
  617. package/dist/index399.js.map +1 -1
  618. package/dist/index40.js.map +1 -1
  619. package/dist/index400.js +47 -8
  620. package/dist/index400.js.map +1 -1
  621. package/dist/index401.js +17 -11
  622. package/dist/index401.js.map +1 -1
  623. package/dist/index402.js +5 -8
  624. package/dist/index402.js.map +1 -1
  625. package/dist/index403.js +7 -12
  626. package/dist/index403.js.map +1 -1
  627. package/dist/index404.js +7 -3
  628. package/dist/index404.js.map +1 -1
  629. package/dist/index405.js +8 -3
  630. package/dist/index405.js.map +1 -1
  631. package/dist/index406.js +11 -14
  632. package/dist/index406.js.map +1 -1
  633. package/dist/index407.js +8 -491
  634. package/dist/index407.js.map +1 -1
  635. package/dist/index408.js +12 -4
  636. package/dist/index408.js.map +1 -1
  637. package/dist/index409.js +3 -56
  638. package/dist/index409.js.map +1 -1
  639. package/dist/index41.js +45 -40
  640. package/dist/index41.js.map +1 -1
  641. package/dist/index410.js +3 -68
  642. package/dist/index410.js.map +1 -1
  643. package/dist/index411.js +15 -31
  644. package/dist/index411.js.map +1 -1
  645. package/dist/index412.js +3 -9
  646. package/dist/index412.js.map +1 -1
  647. package/dist/index413.js +488 -149
  648. package/dist/index413.js.map +1 -1
  649. package/dist/index414.js +66 -106
  650. package/dist/index414.js.map +1 -1
  651. package/dist/index415.js +31 -8
  652. package/dist/index415.js.map +1 -1
  653. package/dist/index416.js +9 -2
  654. package/dist/index416.js.map +1 -1
  655. package/dist/index417.js +150 -41
  656. package/dist/index417.js.map +1 -1
  657. package/dist/index418.js +108 -56
  658. package/dist/index418.js.map +1 -1
  659. package/dist/index419.js +4 -7
  660. package/dist/index419.js.map +1 -1
  661. package/dist/index420.js +56 -2
  662. package/dist/index420.js.map +1 -1
  663. package/dist/index421.js +7 -54
  664. package/dist/index421.js.map +1 -1
  665. package/dist/index422.js +2 -56
  666. package/dist/index422.js.map +1 -1
  667. package/dist/index423.js +44 -2
  668. package/dist/index423.js.map +1 -1
  669. package/dist/index424.js +56 -2
  670. package/dist/index424.js.map +1 -1
  671. package/dist/index425.js +8 -2
  672. package/dist/index425.js.map +1 -1
  673. package/dist/index426.js +2 -2
  674. package/dist/index427.js +54 -15
  675. package/dist/index427.js.map +1 -1
  676. package/dist/index428.js +55 -28
  677. package/dist/index428.js.map +1 -1
  678. package/dist/index429.js +31 -11
  679. package/dist/index429.js.map +1 -1
  680. package/dist/index430.js +14 -5
  681. package/dist/index430.js.map +1 -1
  682. package/dist/index431.js +32 -0
  683. package/dist/index431.js.map +1 -0
  684. package/dist/index432.js +16 -0
  685. package/dist/index432.js.map +1 -0
  686. package/dist/index433.js +10 -0
  687. package/dist/index433.js.map +1 -0
  688. package/dist/index434.js +5 -0
  689. package/dist/index434.js.map +1 -0
  690. package/dist/index435.js +5 -0
  691. package/dist/index435.js.map +1 -0
  692. package/dist/index436.js +5 -0
  693. package/dist/index436.js.map +1 -0
  694. package/dist/index437.js +5 -0
  695. package/dist/index437.js.map +1 -0
  696. package/dist/index48.js +2 -2
  697. package/dist/index48.js.map +1 -1
  698. package/dist/index49.js +274 -268
  699. package/dist/index49.js.map +1 -1
  700. package/dist/index50.js +182 -184
  701. package/dist/index50.js.map +1 -1
  702. package/dist/index51.js +3 -3
  703. package/dist/index51.js.map +1 -1
  704. package/dist/index52.js +105 -103
  705. package/dist/index52.js.map +1 -1
  706. package/dist/index53.js +5 -5
  707. package/dist/index53.js.map +1 -1
  708. package/dist/index54.js.map +1 -1
  709. package/dist/index55.js +102 -110
  710. package/dist/index55.js.map +1 -1
  711. package/dist/index56.js +4 -4
  712. package/dist/index56.js.map +1 -1
  713. package/dist/index57.js +5 -5
  714. package/dist/index57.js.map +1 -1
  715. package/dist/index58.js +9 -9
  716. package/dist/index58.js.map +1 -1
  717. package/dist/index59.js +5 -5
  718. package/dist/index59.js.map +1 -1
  719. package/dist/index6.js +43 -48
  720. package/dist/index6.js.map +1 -1
  721. package/dist/index60.js +90 -86
  722. package/dist/index60.js.map +1 -1
  723. package/dist/index61.js +2 -2
  724. package/dist/index61.js.map +1 -1
  725. package/dist/index62.js +24 -26
  726. package/dist/index62.js.map +1 -1
  727. package/dist/index76.js +1 -1
  728. package/dist/index77.js +2 -2
  729. package/dist/index77.js.map +1 -1
  730. package/dist/index78.js +2 -2
  731. package/dist/index78.js.map +1 -1
  732. package/dist/index79.js +50 -52
  733. package/dist/index79.js.map +1 -1
  734. package/dist/index80.js +4 -4
  735. package/dist/index80.js.map +1 -1
  736. package/dist/index81.js +12 -4
  737. package/dist/index81.js.map +1 -1
  738. package/dist/index82.js +5 -15
  739. package/dist/index82.js.map +1 -1
  740. package/dist/index83.js +7 -5
  741. package/dist/index83.js.map +1 -1
  742. package/dist/index84.js +17 -7
  743. package/dist/index84.js.map +1 -1
  744. package/dist/index85.js +4 -16
  745. package/dist/index85.js.map +1 -1
  746. package/dist/index86.js +1 -1
  747. package/dist/index86.js.map +1 -1
  748. package/dist/index87.js +5 -4
  749. package/dist/index87.js.map +1 -1
  750. package/dist/index88.js +4 -4
  751. package/dist/index88.js.map +1 -1
  752. package/dist/index89.js +4 -5
  753. package/dist/index89.js.map +1 -1
  754. package/dist/index90.js +2 -2
  755. package/dist/index90.js.map +1 -1
  756. package/dist/index91.js +5 -3
  757. package/dist/index91.js.map +1 -1
  758. package/dist/index92.js +24 -6
  759. package/dist/index92.js.map +1 -1
  760. package/dist/index93.js +4 -24
  761. package/dist/index93.js.map +1 -1
  762. package/dist/index94.js +4 -6
  763. package/dist/index94.js.map +1 -1
  764. package/dist/index95.js +2 -2
  765. package/dist/index95.js.map +1 -1
  766. package/dist/index96.js +5 -6
  767. package/dist/index96.js.map +1 -1
  768. package/dist/index97.js +4 -5
  769. package/dist/index97.js.map +1 -1
  770. package/dist/index98.js +4 -3
  771. package/dist/index98.js.map +1 -1
  772. package/dist/index99.js +4 -5
  773. package/dist/index99.js.map +1 -1
  774. package/package.json +14 -12
package/dist/index16.js CHANGED
@@ -23,8 +23,8 @@ const ne = (o) => {
23
23
  if (!Number.isFinite(a) || !Number.isFinite(y) || !Number.isFinite(i)) return "Unknown date";
24
24
  const c = new Date(a, y - 1, i);
25
25
  if (!Number.isFinite(c.getTime())) return "Unknown date";
26
- const m = (/* @__PURE__ */ new Date()).getFullYear() !== a;
27
- return c.toLocaleDateString(void 0, m ? {
26
+ const f = (/* @__PURE__ */ new Date()).getFullYear() !== a;
27
+ return c.toLocaleDateString(void 0, f ? {
28
28
  weekday: "short",
29
29
  month: "short",
30
30
  day: "numeric",
@@ -49,16 +49,16 @@ const ne = (o) => {
49
49
  link: e,
50
50
  mode: ye(o)
51
51
  } : null;
52
- }, ve = (o) => {
52
+ }, ve = (o) => o ? o.mode === "merge_current_search" ? "Open" : o.link : "", Ne = (o) => {
53
53
  window.history.pushState(window.history.state, "", o), window.dispatchEvent(new PopStateEvent("popstate", {
54
54
  state: window.history.state
55
55
  }));
56
- }, Ne = (o) => {
56
+ }, je = (o) => {
57
57
  if (o.mode === "merge_current_search") {
58
58
  const e = new URL(window.location.href), n = new URL(o.link, e);
59
59
  n.searchParams.forEach((r, a) => {
60
60
  e.searchParams.set(a, r);
61
- }), n.hash && (e.hash = n.hash), ve(`${e.pathname}${e.search}${e.hash}`);
61
+ }), n.hash && (e.hash = n.hash), Ne(`${e.pathname}${e.search}${e.hash}`);
62
62
  return;
63
63
  }
64
64
  window.location.href = o.link;
@@ -74,8 +74,8 @@ const ne = (o) => {
74
74
  })), e[e.length - 1].items.push(r);
75
75
  }
76
76
  return e;
77
- }, J = () => typeof window > "u" || !("Notification" in window) ? "unsupported" : window.Notification.permission, je = se(null);
78
- function Be({
77
+ }, J = () => typeof window > "u" || !("Notification" in window) ? "unsupported" : window.Notification.permission, ke = se(null);
78
+ function Te({
79
79
  open: o,
80
80
  onOpenChange: e,
81
81
  className: n,
@@ -83,11 +83,11 @@ function Be({
83
83
  defaultUnreadOnly: a = !1,
84
84
  realtimeContext: y
85
85
  }) {
86
- const i = ie(y ?? je), [c, w] = U([]), [m, u] = U(0), [x, f] = U(0), [v, M] = U(!1), [q, L] = U(null), [h, K] = U(a), [O, p] = U(() => J()), [$, k] = U(!1), A = H(null), C = i?.notifications ?? c, R = i?.unreadCount ?? m, S = i?.unseenCount ?? x, z = i?.loading ?? v, T = i?.error ? i.error instanceof Error ? i.error.message : String(i.error) : q, b = G(() => C.slice(0, r), [r, C]), E = G(() => b.filter((s) => !s.readAt), [b]), D = G(() => b.filter((s) => !!s.readAt), [b]), F = G(() => Z(E), [E]), B = G(() => Z(D), [D]), I = re(async ({
86
+ const i = ie(y ?? ke), [c, w] = U([]), [f, m] = U(0), [l, x] = U(0), [v, L] = U(!1), [q, M] = U(null), [h, K] = U(a), [O, p] = U(() => J()), [$, k] = U(!1), A = H(null), C = i?.notifications ?? c, R = i?.unreadCount ?? f, S = i?.unseenCount ?? l, z = i?.loading ?? v, T = i?.error ? i.error instanceof Error ? i.error.message : String(i.error) : q, b = G(() => C.slice(0, r), [r, C]), E = G(() => b.filter((s) => !s.readAt), [b]), D = G(() => b.filter((s) => !!s.readAt), [b]), F = G(() => Z(E), [E]), B = G(() => Z(D), [D]), I = re(async ({
87
87
  unreadOnly: s,
88
- markSeen: d
88
+ markSeen: u
89
89
  }) => {
90
- M(!0), L(null);
90
+ L(!0), M(null);
91
91
  try {
92
92
  const j = await fetch("/api/rb/notifications", {
93
93
  method: "POST",
@@ -98,19 +98,19 @@ function Be({
98
98
  body: JSON.stringify({
99
99
  limit: r,
100
100
  unreadOnly: s,
101
- markSeen: d
101
+ markSeen: u
102
102
  })
103
- }), l = await j.json().catch(() => null);
104
- if (!j.ok || !l?.ok) {
105
- L(l?.error || "Unable to load notifications.");
103
+ }), d = await j.json().catch(() => null);
104
+ if (!j.ok || !d?.ok) {
105
+ M(d?.error || "Unable to load notifications.");
106
106
  return;
107
107
  }
108
- const P = Array.isArray(l.notifications) ? l.notifications : [];
109
- w(P), u(Number.isFinite(l.unreadCount) ? Math.max(0, Math.floor(l.unreadCount ?? 0)) : 0), f(Number.isFinite(l.unseenCount) ? Math.max(0, Math.floor(l.unseenCount ?? 0)) : 0);
108
+ const P = Array.isArray(d.notifications) ? d.notifications : [];
109
+ w(P), m(Number.isFinite(d.unreadCount) ? Math.max(0, Math.floor(d.unreadCount ?? 0)) : 0), x(Number.isFinite(d.unseenCount) ? Math.max(0, Math.floor(d.unseenCount ?? 0)) : 0);
110
110
  } catch {
111
- L("Unable to load notifications.");
111
+ M("Unable to load notifications.");
112
112
  } finally {
113
- M(!1);
113
+ L(!1);
114
114
  }
115
115
  }, [r]);
116
116
  W(() => {
@@ -148,22 +148,22 @@ function Be({
148
148
  }));
149
149
  }, [o, i, I, h]), W(() => {
150
150
  if (!o || (p(J()), typeof navigator > "u" || !navigator.permissions?.query)) return;
151
- let s = null, d = !1;
151
+ let s = null, u = !1;
152
152
  const j = () => {
153
153
  p(J());
154
154
  };
155
155
  try {
156
156
  navigator.permissions.query({
157
157
  name: "notifications"
158
- }).then((l) => {
159
- d || (s = l, j(), l.addEventListener("change", j));
158
+ }).then((d) => {
159
+ u || (s = d, j(), d.addEventListener("change", j));
160
160
  }).catch(() => {
161
161
  });
162
162
  } catch {
163
163
  return;
164
164
  }
165
165
  return () => {
166
- d = !0, s?.removeEventListener("change", j);
166
+ u = !0, s?.removeEventListener("change", j);
167
167
  };
168
168
  }, [o]);
169
169
  const Y = async () => {
@@ -182,7 +182,7 @@ function Be({
182
182
  }
183
183
  }, _ = async (s) => {
184
184
  try {
185
- const d = await fetch(`/api/rb/notifications/${encodeURIComponent(s)}/read`, {
185
+ const u = await fetch(`/api/rb/notifications/${encodeURIComponent(s)}/read`, {
186
186
  method: "POST",
187
187
  headers: {
188
188
  "Content-Type": "application/json"
@@ -190,17 +190,17 @@ function Be({
190
190
  credentials: "include",
191
191
  keepalive: !0,
192
192
  body: "{}"
193
- }), j = await d.json().catch(() => null);
194
- if (!d.ok || !j?.ok) return;
195
- const l = (/* @__PURE__ */ new Date()).toISOString();
193
+ }), j = await u.json().catch(() => null);
194
+ if (!u.ok || !j?.ok) return;
195
+ const d = (/* @__PURE__ */ new Date()).toISOString();
196
196
  if (i) return;
197
197
  w((P) => {
198
198
  const g = P.find((N) => N.id === s);
199
- return g && !g.readAt && u((N) => Math.max(0, N - 1)), g && !g.seenAt && f((N) => Math.max(0, N - 1)), P.map((N) => N.id === s && !N.readAt ? {
199
+ return g && !g.readAt && m((N) => Math.max(0, N - 1)), g && !g.seenAt && x((N) => Math.max(0, N - 1)), P.map((N) => N.id === s && !N.readAt ? {
200
200
  ...N,
201
- readAt: l,
201
+ readAt: d,
202
202
  ...N.seenAt ? {} : {
203
- seenAt: l
203
+ seenAt: d
204
204
  }
205
205
  } : N);
206
206
  });
@@ -209,18 +209,18 @@ function Be({
209
209
  }
210
210
  }, Q = async (s) => {
211
211
  try {
212
- const d = await fetch(`/api/rb/notifications/${encodeURIComponent(s)}/archive`, {
212
+ const u = await fetch(`/api/rb/notifications/${encodeURIComponent(s)}/archive`, {
213
213
  method: "POST",
214
214
  headers: {
215
215
  "Content-Type": "application/json"
216
216
  },
217
217
  credentials: "include",
218
218
  body: "{}"
219
- }), j = await d.json().catch(() => null);
220
- if (!d.ok || !j?.ok || i) return;
221
- w((l) => {
222
- const P = l.find((g) => g.id === s);
223
- return P && !P.readAt && u((g) => Math.max(0, g - 1)), P && !P.seenAt && f((g) => Math.max(0, g - 1)), l.filter((g) => g.id !== s);
219
+ }), j = await u.json().catch(() => null);
220
+ if (!u.ok || !j?.ok || i) return;
221
+ w((d) => {
222
+ const P = d.find((g) => g.id === s);
223
+ return P && !P.readAt && m((g) => Math.max(0, g - 1)), P && !P.seenAt && x((g) => Math.max(0, g - 1)), d.filter((g) => g.id !== s);
224
224
  });
225
225
  } catch {
226
226
  return;
@@ -248,20 +248,20 @@ function Be({
248
248
  ] })
249
249
  ] }),
250
250
  /* @__PURE__ */ t.jsxs("div", { className: "flex-1 overflow-y-auto px-4 pb-3", children: [
251
- /* @__PURE__ */ t.jsx(ke, { permission: O, requesting: $, onEnable: Y }),
251
+ /* @__PURE__ */ t.jsx(Ae, { permission: O, requesting: $, onEnable: Y }),
252
252
  z ? /* @__PURE__ */ t.jsx("div", { className: "flex items-center justify-center py-10 text-muted-foreground", children: /* @__PURE__ */ t.jsx(ce, { className: "h-4 w-4 animate-spin" }) }) : T ? /* @__PURE__ */ t.jsx("div", { className: "py-10 text-center text-sm text-muted-foreground", children: T }) : b.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: [
253
253
  /* @__PURE__ */ t.jsxs("div", { children: [
254
254
  /* @__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" }),
255
255
  F.length === 0 ? /* @__PURE__ */ t.jsx("div", { className: "py-6 text-center text-sm text-muted-foreground", children: "No unread notifications." }) : F.map((s) => /* @__PURE__ */ t.jsxs("div", { children: [
256
256
  /* @__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: s.label }),
257
- /* @__PURE__ */ t.jsx("div", { className: "-mx-4 flex flex-col divide-y divide-border", children: s.items.map((d) => /* @__PURE__ */ t.jsx(ee, { notification: d, onMarkRead: _, onArchive: Q, onAction: X }, d.id)) })
257
+ /* @__PURE__ */ t.jsx("div", { className: "-mx-4 flex flex-col divide-y divide-border", children: s.items.map((u) => /* @__PURE__ */ t.jsx(ee, { notification: u, onMarkRead: _, onArchive: Q, onAction: X }, u.id)) })
258
258
  ] }, `unread:${s.key}`))
259
259
  ] }),
260
260
  h ? null : /* @__PURE__ */ t.jsxs("div", { children: [
261
261
  /* @__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" }),
262
262
  B.length === 0 ? /* @__PURE__ */ t.jsx("div", { className: "py-6 text-center text-sm text-muted-foreground", children: "No previous notifications." }) : B.map((s) => /* @__PURE__ */ t.jsxs("div", { children: [
263
263
  /* @__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: s.label }),
264
- /* @__PURE__ */ t.jsx("div", { className: "-mx-4 flex flex-col divide-y divide-border", children: s.items.map((d) => /* @__PURE__ */ t.jsx(ee, { notification: d, onMarkRead: _, onArchive: Q, onAction: X }, d.id)) })
264
+ /* @__PURE__ */ t.jsx("div", { className: "-mx-4 flex flex-col divide-y divide-border", children: s.items.map((u) => /* @__PURE__ */ t.jsx(ee, { notification: u, onMarkRead: _, onArchive: Q, onAction: X }, u.id)) })
265
265
  ] }, `previous:${s.key}`))
266
266
  ] })
267
267
  ] })
@@ -269,7 +269,7 @@ function Be({
269
269
  ] })
270
270
  ] }) });
271
271
  }
272
- function ke(o) {
272
+ function Ae(o) {
273
273
  const e = te.c(13), {
274
274
  permission: n,
275
275
  requesting: r,
@@ -285,112 +285,112 @@ function ke(o) {
285
285
  let c;
286
286
  e[1] !== i ? (c = /* @__PURE__ */ t.jsx("div", { className: "text-sm font-medium", children: i }), e[1] = i, e[2] = c) : c = e[2];
287
287
  const w = y ? "Enable notifications for this site in your browser settings, then click again." : "Enable browser notifications to receive important alerts.";
288
- let m;
289
- e[3] !== w ? (m = /* @__PURE__ */ t.jsx("div", { className: "mt-1 text-xs text-muted-foreground", children: w }), e[3] = w, e[4] = m) : m = e[4];
290
- const u = r ? "Enabling..." : "Enable browser notifications";
291
- let x;
292
- e[5] !== a || e[6] !== r || e[7] !== u ? (x = /* @__PURE__ */ t.jsx("button", { type: "button", className: "mt-3 inline-flex h-8 items-center rounded-md border bg-background px-2.5 text-xs font-medium hover:bg-accent disabled:pointer-events-none disabled:opacity-50", disabled: r, onClick: a, children: u }), e[5] = a, e[6] = r, e[7] = u, e[8] = x) : x = e[8];
293
288
  let f;
294
- return e[9] !== c || e[10] !== m || e[11] !== x ? (f = /* @__PURE__ */ t.jsxs("div", { className: "mt-3 rounded-md border bg-muted/40 p-3", children: [
289
+ e[3] !== w ? (f = /* @__PURE__ */ t.jsx("div", { className: "mt-1 text-xs text-muted-foreground", children: w }), e[3] = w, e[4] = f) : f = e[4];
290
+ const m = r ? "Enabling..." : "Enable browser notifications";
291
+ let l;
292
+ e[5] !== a || e[6] !== r || e[7] !== m ? (l = /* @__PURE__ */ t.jsx("button", { type: "button", className: "mt-3 inline-flex h-8 items-center rounded-md border bg-background px-2.5 text-xs font-medium hover:bg-accent disabled:pointer-events-none disabled:opacity-50", disabled: r, onClick: a, children: m }), e[5] = a, e[6] = r, e[7] = m, e[8] = l) : l = e[8];
293
+ let x;
294
+ return e[9] !== c || e[10] !== f || e[11] !== l ? (x = /* @__PURE__ */ t.jsxs("div", { className: "mt-3 rounded-md border bg-muted/40 p-3", children: [
295
295
  c,
296
- m,
297
- x
298
- ] }), e[9] = c, e[10] = m, e[11] = x, e[12] = f) : f = e[12], f;
296
+ f,
297
+ l
298
+ ] }), e[9] = c, e[10] = f, e[11] = l, e[12] = x) : x = e[12], x;
299
299
  }
300
300
  function ee(o) {
301
- const e = te.c(48), {
301
+ const e = te.c(49), {
302
302
  notification: n,
303
303
  onMarkRead: r,
304
304
  onArchive: a,
305
305
  onAction: y
306
- } = o, [i, c] = U(!1), w = H(null), m = H(null), u = !n.readAt;
307
- let x;
308
- e[0] !== n ? (x = we(n), e[0] = n, e[1] = x) : x = e[1];
309
- const f = x, v = f?.link ?? "";
310
- let M;
311
- if (e[2] !== n.createdAt) {
306
+ } = o, [i, c] = U(!1), w = H(null), f = H(null), m = !n.readAt;
307
+ let l, x;
308
+ e[0] !== n ? (l = we(n), x = ve(l), e[0] = n, e[1] = l, e[2] = x) : (l = e[1], x = e[2]);
309
+ const v = x;
310
+ let L;
311
+ if (e[3] !== n.createdAt) {
312
312
  e: {
313
313
  const B = new Date(ne(n.createdAt));
314
314
  if (!Number.isFinite(B.getTime())) {
315
- M = "";
315
+ L = "";
316
316
  break e;
317
317
  }
318
- M = B.toLocaleString();
318
+ L = B.toLocaleString();
319
319
  }
320
- e[2] = n.createdAt, e[3] = M;
320
+ e[3] = n.createdAt, e[4] = L;
321
321
  } else
322
- M = e[3];
323
- const q = M;
324
- let L, h;
325
- e[4] !== i ? (L = () => {
322
+ L = e[4];
323
+ const q = L;
324
+ let M, h;
325
+ e[5] !== i ? (M = () => {
326
326
  if (!i)
327
327
  return;
328
328
  const B = (Y) => {
329
329
  const _ = Y.target;
330
- _ instanceof Node && (w.current?.contains(_) || m.current?.contains(_) || c(!1));
330
+ _ instanceof Node && (w.current?.contains(_) || f.current?.contains(_) || c(!1));
331
331
  }, I = (Y) => {
332
- Y.key === "Escape" && (c(!1), m.current?.focus());
332
+ Y.key === "Escape" && (c(!1), f.current?.focus());
333
333
  };
334
334
  return document.addEventListener("pointerdown", B), document.addEventListener("keydown", I), () => {
335
335
  document.removeEventListener("pointerdown", B), document.removeEventListener("keydown", I);
336
336
  };
337
- }, h = [i], e[4] = i, e[5] = L, e[6] = h) : (L = e[5], h = e[6]), W(L, h);
338
- const K = u ? "bg-primary/5" : "bg-background";
337
+ }, h = [i], e[5] = i, e[6] = M, e[7] = h) : (M = e[6], h = e[7]), W(M, h);
338
+ const K = m ? "bg-primary/5" : "bg-background";
339
339
  let O;
340
- e[7] !== K ? (O = V("group flex w-full gap-3 px-4 py-3 hover:bg-accent/40", K), e[7] = K, e[8] = O) : O = e[8];
340
+ e[8] !== K ? (O = V("group flex w-full gap-3 px-4 py-3 hover:bg-accent/40", K), e[8] = K, e[9] = O) : O = e[9];
341
341
  let p;
342
- e[9] !== f || e[10] !== u || e[11] !== n.id || e[12] !== y || e[13] !== r ? (p = () => {
343
- u && r(n.id), f && (y(), Ne(f));
344
- }, e[9] = f, e[10] = u, e[11] = n.id, e[12] = y, e[13] = r, e[14] = p) : p = e[14];
342
+ e[10] !== l || e[11] !== m || e[12] !== n.id || e[13] !== y || e[14] !== r ? (p = () => {
343
+ m && r(n.id), l && (y(), je(l));
344
+ }, e[10] = l, e[11] = m, e[12] = n.id, e[13] = y, e[14] = r, e[15] = p) : p = e[15];
345
345
  let $;
346
- e[15] !== n.title ? ($ = /* @__PURE__ */ t.jsx("div", { className: "truncate text-sm font-semibold", children: n.title }), e[15] = n.title, e[16] = $) : $ = e[16];
346
+ e[16] !== n.title ? ($ = /* @__PURE__ */ t.jsx("div", { className: "truncate text-sm font-semibold", children: n.title }), e[16] = n.title, e[17] = $) : $ = e[17];
347
347
  let k;
348
- e[17] !== n.body ? (k = n.body ? /* @__PURE__ */ t.jsx("div", { className: "mt-0.5 line-clamp-2 text-xs text-muted-foreground", children: n.body }) : null, e[17] = n.body, e[18] = k) : k = e[18];
348
+ e[18] !== n.body ? (k = n.body ? /* @__PURE__ */ t.jsx("div", { className: "mt-0.5 line-clamp-2 text-xs text-muted-foreground", children: n.body }) : null, e[18] = n.body, e[19] = k) : k = e[19];
349
349
  let A;
350
- e[19] !== $ || e[20] !== k ? (A = /* @__PURE__ */ t.jsxs("div", { className: "min-w-0", children: [
350
+ e[20] !== $ || e[21] !== k ? (A = /* @__PURE__ */ t.jsxs("div", { className: "min-w-0", children: [
351
351
  $,
352
352
  k
353
- ] }), e[19] = $, e[20] = k, e[21] = A) : A = e[21];
353
+ ] }), e[20] = $, e[21] = k, e[22] = A) : A = e[22];
354
354
  let C;
355
- e[22] !== v ? (C = v ? /* @__PURE__ */ t.jsx("div", { className: "mt-2 truncate text-xs text-primary", children: v }) : null, e[22] = v, e[23] = C) : C = e[23];
355
+ e[23] !== v ? (C = v ? /* @__PURE__ */ t.jsx("div", { className: "mt-2 truncate text-xs text-primary", children: v }) : null, e[23] = v, e[24] = C) : C = e[24];
356
356
  let R;
357
- e[24] !== q ? (R = q ? /* @__PURE__ */ t.jsx("div", { className: "mt-2 text-[11px] text-muted-foreground", children: q }) : null, e[24] = q, e[25] = R) : R = e[25];
357
+ e[25] !== q ? (R = q ? /* @__PURE__ */ t.jsx("div", { className: "mt-2 text-[11px] text-muted-foreground", children: q }) : null, e[25] = q, e[26] = R) : R = e[26];
358
358
  let S;
359
- e[26] !== A || e[27] !== C || e[28] !== R || e[29] !== p ? (S = /* @__PURE__ */ t.jsxs("button", { type: "button", className: "min-w-0 flex-1 text-left", onClick: p, children: [
359
+ e[27] !== A || e[28] !== C || e[29] !== R || e[30] !== p ? (S = /* @__PURE__ */ t.jsxs("button", { type: "button", className: "min-w-0 flex-1 text-left", onClick: p, children: [
360
360
  A,
361
361
  C,
362
362
  R
363
- ] }), e[26] = A, e[27] = C, e[28] = R, e[29] = p, e[30] = S) : S = e[30];
363
+ ] }), e[27] = A, e[28] = C, e[29] = R, e[30] = p, e[31] = S) : S = e[31];
364
364
  let z, T;
365
- e[31] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (z = () => {
366
- c(Ae);
367
- }, T = /* @__PURE__ */ t.jsx(le, { className: "h-4 w-4" }), e[31] = z, e[32] = T) : (z = e[31], T = e[32]);
365
+ e[32] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (z = () => {
366
+ c(Ce);
367
+ }, T = /* @__PURE__ */ t.jsx(le, { className: "h-4 w-4" }), e[32] = z, e[33] = T) : (z = e[32], T = e[33]);
368
368
  let b;
369
- e[33] !== i ? (b = /* @__PURE__ */ t.jsx("button", { ref: m, 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": i, onClick: z, children: T }), e[33] = i, e[34] = b) : b = e[34];
369
+ e[34] !== i ? (b = /* @__PURE__ */ t.jsx("button", { ref: f, 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": i, onClick: z, children: T }), e[34] = i, e[35] = b) : b = e[35];
370
370
  let E;
371
- e[35] !== u || e[36] !== i || e[37] !== n.id || e[38] !== a || e[39] !== r ? (E = i ? /* @__PURE__ */ t.jsxs("div", { ref: w, role: "menu", className: V("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: [
371
+ e[36] !== m || e[37] !== i || e[38] !== n.id || e[39] !== a || e[40] !== r ? (E = i ? /* @__PURE__ */ t.jsxs("div", { ref: w, role: "menu", className: V("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: [
372
372
  /* @__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: () => {
373
373
  c(!1), a(n.id);
374
374
  }, children: "Archive" }),
375
- /* @__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: !u, onClick: () => {
375
+ /* @__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: !m, onClick: () => {
376
376
  c(!1), r(n.id);
377
377
  }, children: "Mark as read" })
378
- ] }) : null, e[35] = u, e[36] = i, e[37] = n.id, e[38] = a, e[39] = r, e[40] = E) : E = e[40];
378
+ ] }) : null, e[36] = m, e[37] = i, e[38] = n.id, e[39] = a, e[40] = r, e[41] = E) : E = e[41];
379
379
  let D;
380
- e[41] !== b || e[42] !== E ? (D = /* @__PURE__ */ t.jsxs("div", { className: "relative flex items-start", children: [
380
+ e[42] !== b || e[43] !== E ? (D = /* @__PURE__ */ t.jsxs("div", { className: "relative flex items-start", children: [
381
381
  b,
382
382
  E
383
- ] }), e[41] = b, e[42] = E, e[43] = D) : D = e[43];
383
+ ] }), e[42] = b, e[43] = E, e[44] = D) : D = e[44];
384
384
  let F;
385
- return e[44] !== S || e[45] !== D || e[46] !== O ? (F = /* @__PURE__ */ t.jsxs("div", { className: O, children: [
385
+ return e[45] !== S || e[46] !== D || e[47] !== O ? (F = /* @__PURE__ */ t.jsxs("div", { className: O, children: [
386
386
  S,
387
387
  D
388
- ] }), e[44] = S, e[45] = D, e[46] = O, e[47] = F) : F = e[47], F;
388
+ ] }), e[45] = S, e[46] = D, e[47] = O, e[48] = F) : F = e[48], F;
389
389
  }
390
- function Ae(o) {
390
+ function Ce(o) {
391
391
  return !o;
392
392
  }
393
393
  export {
394
- Be as NotificationsDrawer
394
+ Te as NotificationsDrawer
395
395
  };
396
396
  //# 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 { Dialog as DialogPrimitive, type DialogRoot } 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\ntype BrowserNotificationPermission = NotificationPermission | \"unsupported\"\ntype NotificationActionMode = \"navigate\" | \"merge_current_search\"\n\ntype NotificationAction = {\n link: string\n mode: NotificationActionMode\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 getNotificationLink = (item: NotificationItem): string => {\n const dataLink = item.data?.link?.trim()\n if (dataLink) return dataLink\n\n const platformWebpush = item.platform?.webpush\n if (!platformWebpush || typeof platformWebpush !== \"object\" || Array.isArray(platformWebpush)) return \"\"\n const fcmOptions = (platformWebpush as { fcmOptions?: unknown }).fcmOptions\n if (!fcmOptions || typeof fcmOptions !== \"object\" || Array.isArray(fcmOptions)) return \"\"\n const link = (fcmOptions as { link?: unknown }).link\n return typeof link === \"string\" ? link.trim() : \"\"\n}\n\nconst getNotificationActionMode = (item: NotificationItem): NotificationActionMode => {\n return item.data?.linkMode === \"merge_current_search\" ? \"merge_current_search\" : \"navigate\"\n}\n\nconst getNotificationAction = (item: NotificationItem): NotificationAction | null => {\n const link = getNotificationLink(item)\n if (!link) return null\n return {\n link,\n mode: getNotificationActionMode(item),\n }\n}\n\nconst pushUrlWithoutReload = (url: string): void => {\n window.history.pushState(window.history.state, \"\", url)\n window.dispatchEvent(new PopStateEvent(\"popstate\", { state: window.history.state }))\n}\n\nconst applyNotificationAction = (action: NotificationAction): void => {\n if (action.mode === \"merge_current_search\") {\n const currentUrl = new URL(window.location.href)\n const actionUrl = new URL(action.link, currentUrl)\n\n actionUrl.searchParams.forEach((value, key) => {\n currentUrl.searchParams.set(key, value)\n })\n if (actionUrl.hash) {\n currentUrl.hash = actionUrl.hash\n }\n\n pushUrlWithoutReload(`${currentUrl.pathname}${currentUrl.search}${currentUrl.hash}`)\n return\n }\n\n window.location.href = action.link\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 getBrowserNotificationPermission = (): BrowserNotificationPermission => {\n if (typeof window === \"undefined\") return \"unsupported\"\n if (!(\"Notification\" in window)) return \"unsupported\"\n return window.Notification.permission\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 const [browserNotificationPermission, setBrowserNotificationPermission] = useState<BrowserNotificationPermission>(() =>\n getBrowserNotificationPermission(),\n )\n const [browserNotificationPermissionRequesting, setBrowserNotificationPermissionRequesting] = useState(false)\n const dialogActionsRef = useRef<DialogRoot.Actions | null>(null)\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 useEffect(() => {\n if (!open) return\n\n setBrowserNotificationPermission(getBrowserNotificationPermission())\n\n if (typeof navigator === \"undefined\" || !navigator.permissions?.query) return\n\n let permissionStatus: PermissionStatus | null = null\n let disposed = false\n const syncPermission = () => {\n setBrowserNotificationPermission(getBrowserNotificationPermission())\n }\n\n try {\n void navigator.permissions.query({ name: \"notifications\" as PermissionName }).then((status) => {\n if (disposed) return\n permissionStatus = status\n syncPermission()\n status.addEventListener(\"change\", syncPermission)\n }).catch(() => {\n // Notifications are not exposed through the Permissions API in every browser.\n })\n } catch {\n return\n }\n\n return () => {\n disposed = true\n permissionStatus?.removeEventListener(\"change\", syncPermission)\n }\n }, [open])\n\n const requestBrowserNotificationPermission = async () => {\n if (typeof window === \"undefined\" || !(\"Notification\" in window)) {\n setBrowserNotificationPermission(\"unsupported\")\n return\n }\n\n setBrowserNotificationPermissionRequesting(true)\n try {\n const nextPermission = await window.Notification.requestPermission()\n setBrowserNotificationPermission(nextPermission)\n } catch {\n setBrowserNotificationPermission(getBrowserNotificationPermission())\n } finally {\n setBrowserNotificationPermissionRequesting(false)\n }\n }\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 const closeImmediately = () => {\n onOpenChange(false)\n dialogActionsRef.current?.unmount()\n }\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (nextOpen) {\n onOpenChange(true)\n return\n }\n\n closeImmediately()\n }\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={handleOpenChange} actionsRef={dialogActionsRef}>\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 <BrowserNotificationPermissionNotice\n permission={browserNotificationPermission}\n requesting={browserNotificationPermissionRequesting}\n onEnable={requestBrowserNotificationPermission}\n />\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 onAction={closeImmediately}\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 onAction={closeImmediately}\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 BrowserNotificationPermissionNotice({\n permission,\n requesting,\n onEnable,\n}: {\n permission: BrowserNotificationPermission\n requesting: boolean\n onEnable: () => void\n}) {\n if (permission === \"granted\") return null\n\n if (permission === \"unsupported\") {\n return (\n <div className=\"mt-3 rounded-md border bg-muted/40 p-3 text-sm text-muted-foreground\">\n Browser notifications are not supported by this browser.\n </div>\n )\n }\n\n const isDenied = permission === \"denied\"\n\n return (\n <div className=\"mt-3 rounded-md border bg-muted/40 p-3\">\n <div className=\"text-sm font-medium\">\n {isDenied ? \"Browser notifications are blocked.\" : \"Browser notifications are not enabled.\"}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">\n {isDenied\n ? \"Enable notifications for this site in your browser settings, then click again.\"\n : \"Enable browser notifications to receive important alerts.\"}\n </div>\n <button\n type=\"button\"\n className=\"mt-3 inline-flex h-8 items-center rounded-md border bg-background px-2.5 text-xs font-medium hover:bg-accent disabled:pointer-events-none disabled:opacity-50\"\n disabled={requesting}\n onClick={onEnable}\n >\n {requesting ? \"Enabling...\" : \"Enable browser notifications\"}\n </button>\n </div>\n )\n}\n\nfunction NotificationRow({\n notification,\n onMarkRead,\n onArchive,\n onAction,\n}: {\n notification: NotificationItem\n onMarkRead: (id: string) => void\n onArchive: (id: string) => void\n onAction: () => 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 action = getNotificationAction(notification)\n const link = action?.link ?? \"\"\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 (action) {\n onAction()\n applyNotificationAction(action)\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 {link ? <div className=\"mt-2 truncate text-xs text-primary\">{link}</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","getNotificationLink","item","dataLink","data","link","trim","platformWebpush","platform","webpush","Array","isArray","fcmOptions","getNotificationActionMode","linkMode","getNotificationAction","mode","pushUrlWithoutReload","url","window","history","pushState","state","dispatchEvent","PopStateEvent","applyNotificationAction","action","currentUrl","URL","location","href","actionUrl","searchParams","forEach","value","set","hash","pathname","search","groupByDay","items","groups","currentKey","createdAt","push","label","length","getBrowserNotificationPermission","Notification","permission","EmptyRealtimeContext","createContext","NotificationsDrawer","open","onOpenChange","className","limit","defaultUnreadOnly","realtimeContext","realtime","useContext","setItems","useState","unreadCount","setUnreadCount","unseenCount","setUnseenCount","loading","setLoading","error","setError","unreadOnly","setUnreadOnly","browserNotificationPermission","setBrowserNotificationPermission","browserNotificationPermissionRequesting","setBrowserNotificationPermissionRequesting","dialogActionsRef","useRef","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","Math","max","floor","useEffect","keepalive","navigator","permissions","query","permissionStatus","disposed","syncPermission","name","then","status","addEventListener","removeEventListener","requestBrowserNotificationPermission","nextPermission","requestPermission","markAsRead","id","encodeURIComponent","nowIso","toISOString","current","target","find","count","seenAt","map","archive","closeImmediately","unmount","handleOpenChange","nextOpen","jsx","DialogPrimitive.Root","jsxs","DialogPrimitive.Portal","DialogPrimitive.Backdrop","DialogPrimitive.Popup","cn","DialogPrimitive.Title","v","DialogPrimitive.Close","X","BrowserNotificationPermissionNotice","Loader2","group","NotificationRow","t0","$","_c","requesting","onEnable","t1","Symbol","for","isDenied","t2","t3","t4","t5","t6","t7","notification","onMarkRead","onArchive","onAction","menuOpen","setMenuOpen","menuRef","menuButtonRef","isUnread","bb0","toLocaleString","createdAtLabel","handlePointerDown","event","Node","contains","handleKeyDown","event_0","focus","document","t8","title","t9","t10","t11","t12","t13","t14","t15","_temp","MoreVertical","t16","t17","t18","t19"],"mappings":";;;;;;;;;;;AA+BA,MAAMA,KAAOA,CAACC,MAAwB;AACpC,QAAMC,IAAKC,KAAKC,MAAMH,CAAG;AACzB,SAAOI,OAAOC,SAASJ,CAAE,IAAIA,IAAK;AACpC,GAEMK,KAAYA,CAACN,MAAwB;AACzC,QAAMO,IAAO,IAAIL,KAAKH,GAAKC,CAAG,CAAC;AAC/B,MAAI,CAACI,OAAOC,SAASE,EAAKC,QAAAA,CAAS,EAAG,QAAO;AAE7C,QAAMC,IAAOF,EAAKG,YAAAA,GACZC,IAAQC,OAAOL,EAAKM,SAAAA,IAAa,CAAC,EAAEC,SAAS,GAAG,GAAG,GACnDC,IAAMH,OAAOL,EAAKS,QAAAA,CAAS,EAAEF,SAAS,GAAG,GAAG;AAElD,SAAO,GAAGL,CAAI,IAAIE,CAAK,IAAII,CAAG;AAChC,GAEME,KAAiBA,CAACC,MAAwB;AAC9C,MAAIA,MAAQ,UAAW,QAAO;AAC9B,QAAM,CAACC,GAASC,GAAUC,CAAM,IAAIH,EAAII,MAAM,GAAG,GAC3Cb,IAAOL,OAAOe,CAAO,GACrBR,IAAQP,OAAOgB,CAAQ,GACvBL,IAAMX,OAAOiB,CAAM;AAEzB,MAAI,CAACjB,OAAOC,SAASI,CAAI,KAAK,CAACL,OAAOC,SAASM,CAAK,KAAK,CAACP,OAAOC,SAASU,CAAG,EAAG,QAAO;AAEvF,QAAMR,IAAO,IAAIL,KAAKO,GAAME,IAAQ,GAAGI,CAAG;AAC1C,MAAI,CAACX,OAAOC,SAASE,EAAKC,QAAAA,CAAS,EAAG,QAAO;AAG7C,QAAMe,yBADUrB,KAAAA,GACQQ,YAAAA,MAAkBD;AAC1C,SAAOF,EAAKiB,mBAAmBC,QAAWF,IACtC;AAAA,IAAEG,SAAS;AAAA,IAASf,OAAO;AAAA,IAASI,KAAK;AAAA,IAAWN,MAAM;AAAA,EAAA,IAC1D;AAAA,IAAEiB,SAAS;AAAA,IAASf,OAAO;AAAA,IAASI,KAAK;AAAA,EAAA,CAAW;AAC1D,GAEMY,KAAsBA,CAACC,MAAmC;AAC9D,QAAMC,IAAWD,EAAKE,MAAMC,MAAMC,KAAAA;AAClC,MAAIH,EAAU,QAAOA;AAErB,QAAMI,IAAkBL,EAAKM,UAAUC;AACvC,MAAI,CAACF,KAAmB,OAAOA,KAAoB,YAAYG,MAAMC,QAAQJ,CAAe,EAAG,QAAO;AACtG,QAAMK,IAAcL,EAA6CK;AACjE,MAAI,CAACA,KAAc,OAAOA,KAAe,YAAYF,MAAMC,QAAQC,CAAU,EAAG,QAAO;AACvF,QAAMP,IAAQO,EAAkCP;AAChD,SAAO,OAAOA,KAAS,WAAWA,EAAKC,SAAS;AAClD,GAEMO,KAA4BA,CAACX,MAC1BA,EAAKE,MAAMU,aAAa,yBAAyB,yBAAyB,YAG7EC,KAAwBA,CAACb,MAAsD;AACnF,QAAMG,IAAOJ,GAAoBC,CAAI;AACrC,SAAKG,IACE;AAAA,IACLA,MAAAA;AAAAA,IACAW,MAAMH,GAA0BX,CAAI;AAAA,EAAA,IAHpB;AAKpB,GAEMe,KAAuBA,CAACC,MAAsB;AAClDC,SAAOC,QAAQC,UAAUF,OAAOC,QAAQE,OAAO,IAAIJ,CAAG,GACtDC,OAAOI,cAAc,IAAIC,cAAc,YAAY;AAAA,IAAEF,OAAOH,OAAOC,QAAQE;AAAAA,EAAAA,CAAO,CAAC;AACrF,GAEMG,KAA0BA,CAACC,MAAqC;AACpE,MAAIA,EAAOV,SAAS,wBAAwB;AAC1C,UAAMW,IAAa,IAAIC,IAAIT,OAAOU,SAASC,IAAI,GACzCC,IAAY,IAAIH,IAAIF,EAAOrB,MAAMsB,CAAU;AAEjDI,IAAAA,EAAUC,aAAaC,QAAQ,CAACC,GAAO1C,MAAQ;AAC7CmC,MAAAA,EAAWK,aAAaG,IAAI3C,GAAK0C,CAAK;AAAA,IACxC,CAAC,GACGH,EAAUK,SACZT,EAAWS,OAAOL,EAAUK,OAG9BnB,GAAqB,GAAGU,EAAWU,QAAQ,GAAGV,EAAWW,MAAM,GAAGX,EAAWS,IAAI,EAAE;AACnF;AAAA,EACF;AAEAjB,SAAOU,SAASC,OAAOJ,EAAOrB;AAChC,GAEMkC,IAAaA,CAACC,MAA0C;AAC5D,QAAMC,IAAqB,CAAA;AAC3B,MAAIC,IAA4B;AAEhC,aAAWxC,KAAQsC,GAAO;AACxB,UAAMhD,IAAMZ,GAAUsB,EAAKyC,SAAS;AACpC,IAAInD,MAAQkD,MACVA,IAAalD,GACbiD,EAAOG,KAAK;AAAA,MAAEpD,KAAAA;AAAAA,MAAKqD,OAAOtD,GAAeC,CAAG;AAAA,MAAGgD,OAAO,CAAA;AAAA,IAAA,CAAI,IAE5DC,EAAOA,EAAOK,SAAS,CAAC,EAAGN,MAAMI,KAAK1C,CAAI;AAAA,EAC5C;AAEA,SAAOuC;AACT,GAEMM,IAAmCA,MACnC,OAAO5B,SAAW,OAClB,EAAE,kBAAkBA,UAAgB,gBACjCA,OAAO6B,aAAaC,YAGvBC,KAAuBC,GAAiD,IAAI;AAE3E,SAASC,GAAoB;AAAA,EAClCC,MAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,OAAAA,IAAQ;AAAA,EACRC,mBAAAA,IAAoB;AAAA,EACpBC,iBAAAA;AAQF,GAAG;AACD,QAAMC,IAAWC,GAAWF,KAAmBR,EAAoB,GAE7D,CAACV,GAAOqB,CAAQ,IAAIC,EAA6B,CAAA,CAAE,GACnD,CAACC,GAAaC,CAAc,IAAIF,EAAiB,CAAC,GAClD,CAACG,GAAaC,CAAc,IAAIJ,EAAiB,CAAC,GAClD,CAACK,GAASC,CAAU,IAAIN,EAAS,EAAK,GACtC,CAACO,GAAOC,CAAQ,IAAIR,EAAwB,IAAI,GAChD,CAACS,GAAYC,CAAa,IAAIV,EAAkBL,CAAiB,GACjE,CAACgB,GAA+BC,CAAgC,IAAIZ,EAAwC,MAChHf,GACF,GACM,CAAC4B,GAAyCC,CAA0C,IAAId,EAAS,EAAK,GACtGe,IAAmBC,EAAkC,IAAI,GAEzDC,IAAcpB,GAAUqB,iBAAiBxC,GACzCyC,IAAoBtB,GAAUI,eAAeA,GAC7CmB,IAAoBvB,GAAUM,eAAeA,GAC7CkB,IAAgBxB,GAAUQ,WAAWA,GACrCiB,IAAczB,GAAUU,QACzBV,EAASU,iBAAiBgB,QAAQ1B,EAASU,MAAMiB,UAAUpG,OAAOyE,EAASU,KAAK,IACjFA,GAEEkB,IAAeC,EAAQ,MAAMT,EAAYU,MAAM,GAAGjC,CAAK,GAAG,CAACA,GAAOuB,CAAW,CAAC,GAE9EW,IAASF,EAAQ,MAAMD,EAAaI,OAAQC,CAAAA,MAAM,CAACA,EAAEC,MAAM,GAAG,CAACN,CAAY,CAAC,GAC5EO,IAAON,EAAQ,MAAMD,EAAaI,OAAQC,CAAAA,MAAMG,EAAQH,EAAEC,MAAO,GAAG,CAACN,CAAY,CAAC,GAClFS,IAAeR,EAAQ,MAAMjD,EAAWmD,CAAM,GAAG,CAACA,CAAM,CAAC,GACzDO,IAAaT,EAAQ,MAAMjD,EAAWuD,CAAI,GAAG,CAACA,CAAI,CAAC,GAEnDI,IAAUC,GAAY,OAAO;AAAA,IAAE5B,YAAAA;AAAAA,IAAY6B,UAAAA;AAAAA,EAAAA,MAA2D;AAC1GhC,IAAAA,EAAW,EAAI,GACfE,EAAS,IAAI;AAEb,QAAI;AACF,YAAM+B,IAAM,MAAMC,MAAM,yBAAyB;AAAA,QAC/CC,QAAQ;AAAA,QACRC,SAAS;AAAA,UAAE,gBAAgB;AAAA,QAAA;AAAA,QAC3BC,aAAa;AAAA,QACbC,MAAMC,KAAKC,UAAU;AAAA,UAAEpD,OAAAA;AAAAA,UAAOe,YAAAA;AAAAA,UAAY6B,UAAAA;AAAAA,QAAAA,CAAU;AAAA,MAAA,CACrD,GAEKS,IAAQ,MAAMR,EAAIQ,OAAOC,MAAM,MAAM,IAAI;AAC/C,UAAI,CAACT,EAAIU,MAAM,CAACF,GAAME,IAAI;AACxBzC,QAAAA,EAASuC,GAAMxC,SAAS,+BAA+B;AACvD;AAAA,MACF;AAEA,YAAM2C,IAAYtG,MAAMC,QAAQkG,EAAK7B,aAAa,IAAI6B,EAAK7B,gBAAgB,CAAA;AAC3EnB,MAAAA,EAASmD,CAAS,GAClBhD,EAAetF,OAAOC,SAASkI,EAAK9C,WAAW,IAAIkD,KAAKC,IAAI,GAAGD,KAAKE,MAAMN,EAAK9C,eAAe,CAAC,CAAC,IAAI,CAAC,GACrGG,EAAexF,OAAOC,SAASkI,EAAK5C,WAAW,IAAIgD,KAAKC,IAAI,GAAGD,KAAKE,MAAMN,EAAK5C,eAAe,CAAC,CAAC,IAAI,CAAC;AAAA,IACvG,QAAQ;AACNK,MAAAA,EAAS,+BAA+B;AAAA,IAC1C,UAAA;AACEF,MAAAA,EAAW,EAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAACZ,CAAK,CAAC;AAEV4D,EAAAA,EAAU,MAAM;AACd,QAAK/D,GACL;AAAA,UAAIM,GAAU;AACZ,SAAM,YAAY;AAChB,cAAI;AACF,kBAAM2C,MAAM,yBAAyB;AAAA,cACnCC,QAAQ;AAAA,cACRC,SAAS;AAAA,gBAAE,gBAAgB;AAAA,cAAA;AAAA,cAC3BC,aAAa;AAAA,cACbY,WAAW;AAAA,cACXX,MAAMC,KAAKC,UAAU;AAAA,gBAAEpD,OAAO;AAAA,gBAAG4C,UAAU;AAAA,cAAA,CAAM;AAAA,YAAA,CAClD;AAAA,UACH,QAAQ;AACN;AAAA,UACF;AAAA,QACF,GAAA;AACA;AAAA,MACF;AACA,MAAKF,EAAQ;AAAA,QAAE3B,YAAAA;AAAAA,QAAY6B,UAAU;AAAA,MAAA,CAAM;AAAA;AAAA,EAC7C,GAAG,CAAC/C,GAAMM,GAAUuC,GAAS3B,CAAU,CAAC,GAExC6C,EAAU,MAAM;AACd,IAAK/D,MACDM,KACCuC,EAAQ;AAAA,MAAE3B,YAAAA;AAAAA,MAAY6B,UAAU;AAAA,IAAA,CAAO;AAAA,EAC9C,GAAG,CAAC/C,GAAMM,GAAUuC,GAAS3B,CAAU,CAAC,GAExC6C,EAAU,MAAM;AAKd,QAJI,CAAC/D,MAELqB,EAAiC3B,GAAkC,GAE/D,OAAOuE,YAAc,OAAe,CAACA,UAAUC,aAAaC,OAAO;AAEvE,QAAIC,IAA4C,MAC5CC,IAAW;AACf,UAAMC,IAAiBA,MAAM;AAC3BjD,MAAAA,EAAiC3B,GAAkC;AAAA,IACrE;AAEA,QAAI;AACF,MAAKuE,UAAUC,YAAYC,MAAM;AAAA,QAAEI,MAAM;AAAA,MAAA,CAAmC,EAAEC,KAAMC,CAAAA,MAAW;AAC7F,QAAIJ,MACJD,IAAmBK,GACnBH,EAAAA,GACAG,EAAOC,iBAAiB,UAAUJ,CAAc;AAAA,MAClD,CAAC,EAAEb,MAAM,MAAM;AAAA,MACb,CACD;AAAA,IACH,QAAQ;AACN;AAAA,IACF;AAEA,WAAO,MAAM;AACXY,MAAAA,IAAW,IACXD,GAAkBO,oBAAoB,UAAUL,CAAc;AAAA,IAChE;AAAA,EACF,GAAG,CAACtE,CAAI,CAAC;AAET,QAAM4E,IAAuC,YAAY;AACvD,QAAI,OAAO9G,SAAW,OAAe,EAAE,kBAAkBA,SAAS;AAChEuD,MAAAA,EAAiC,aAAa;AAC9C;AAAA,IACF;AAEAE,IAAAA,EAA2C,EAAI;AAC/C,QAAI;AACF,YAAMsD,IAAiB,MAAM/G,OAAO6B,aAAamF,kBAAAA;AACjDzD,MAAAA,EAAiCwD,CAAc;AAAA,IACjD,QAAQ;AACNxD,MAAAA,EAAiC3B,GAAkC;AAAA,IACrE,UAAA;AACE6B,MAAAA,EAA2C,EAAK;AAAA,IAClD;AAAA,EACF,GAEMwD,IAAa,OAAOC,MAAe;AACvC,QAAI;AACF,YAAMhC,IAAM,MAAMC,MAAM,yBAAyBgC,mBAAmBD,CAAE,CAAC,SAAS;AAAA,QAC9E9B,QAAQ;AAAA,QACRC,SAAS;AAAA,UAAE,gBAAgB;AAAA,QAAA;AAAA,QAC3BC,aAAa;AAAA,QACbY,WAAW;AAAA,QACXX,MAAM;AAAA,MAAA,CACP,GAEKG,IAAQ,MAAMR,EAAIQ,OAAOC,MAAM,MAAM,IAAI;AAC/C,UAAI,CAACT,EAAIU,MAAM,CAACF,GAAME,GAAI;AAE1B,YAAMwB,KAAS,oBAAI/J,KAAAA,GAAOgK,YAAAA;AAC1B,UAAI7E,EAAU;AACdE,MAAAA,EAAU4E,CAAAA,MAAY;AACpB,cAAMC,IAASD,EAAQE,KAAM/C,CAAAA,MAAMA,EAAEyC,OAAOA,CAAE;AAC9C,eAAIK,KAAU,CAACA,EAAO7C,UACpB7B,EAAgB4E,OAAU3B,KAAKC,IAAI,GAAG0B,IAAQ,CAAC,CAAC,GAE9CF,KAAU,CAACA,EAAOG,UACpB3E,EAAgB0E,OAAU3B,KAAKC,IAAI,GAAG0B,IAAQ,CAAC,CAAC,GAE3CH,EAAQK,IAAKlD,CAAAA,MAAOA,EAAEyC,OAAOA,KAAM,CAACzC,EAAEC,SAAS;AAAA,UAAE,GAAGD;AAAAA,UAAGC,QAAQ0C;AAAAA,UAAQ,GAAI3C,EAAEiD,SAAS,KAAK;AAAA,YAAEA,QAAQN;AAAAA,UAAAA;AAAAA,QAAO,IAAO3C,CAAE;AAAA,MAC9H,CAAC;AAAA,IACH,QAAQ;AACN;AAAA,IACF;AAAA,EACF,GAEMmD,IAAU,OAAOV,MAAe;AACpC,QAAI;AACF,YAAMhC,IAAM,MAAMC,MAAM,yBAAyBgC,mBAAmBD,CAAE,CAAC,YAAY;AAAA,QACjF9B,QAAQ;AAAA,QACRC,SAAS;AAAA,UAAE,gBAAgB;AAAA,QAAA;AAAA,QAC3BC,aAAa;AAAA,QACbC,MAAM;AAAA,MAAA,CACP,GAEKG,IAAQ,MAAMR,EAAIQ,OAAOC,MAAM,MAAM,IAAI;AAG/C,UAFI,CAACT,EAAIU,MAAM,CAACF,GAAME,MAElBpD,EAAU;AACdE,MAAAA,EAAU4E,CAAAA,MAAY;AACpB,cAAMC,IAASD,EAAQE,KAAM/C,CAAAA,MAAMA,EAAEyC,OAAOA,CAAE;AAC9C,eAAIK,KAAU,CAACA,EAAO7C,UACpB7B,EAAgB4E,OAAU3B,KAAKC,IAAI,GAAG0B,IAAQ,CAAC,CAAC,GAE9CF,KAAU,CAACA,EAAOG,UACpB3E,EAAgB0E,OAAU3B,KAAKC,IAAI,GAAG0B,IAAQ,CAAC,CAAC,GAE3CH,EAAQ9C,OAAQC,CAAAA,MAAMA,EAAEyC,OAAOA,CAAE;AAAA,MAC1C,CAAC;AAAA,IACH,QAAQ;AACN;AAAA,IACF;AAAA,EACF,GAEMW,IAAmBA,MAAM;AAC7B1F,IAAAA,EAAa,EAAK,GAClBuB,EAAiB4D,SAASQ,QAAAA;AAAAA,EAC5B,GAEMC,KAAmBA,CAACC,MAAsB;AAC9C,QAAIA,GAAU;AACZ7F,MAAAA,EAAa,EAAI;AACjB;AAAA,IACF;AAEA0F,IAAAA,EAAAA;AAAAA,EACF;AAEA,SACEI,gBAAAA,EAAAA,IAACC,IAAA,EAAqB,MAAAhG,GAAY,cAAc6F,IAAkB,YAAYrE,GAC5E,UAAAyE,gBAAAA,EAAAA,KAACC,IAAA,EACC,UAAA;AAAA,IAAAH,gBAAAA,EAAAA,IAACI,IAAA,EAAyB,WAAU,iCAAA,CAAgC;AAAA,IACpEF,gBAAAA,EAAAA,KAACG,IAAA,EACC,WAAWC,EACT,+GACAnG,CACF,GAEA,UAAA;AAAA,MAAA+F,gBAAAA,EAAAA,KAAC,UAAA,EAAO,WAAU,8DAChB,UAAA;AAAA,QAAAA,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,UAAAF,gBAAAA,EAAAA,IAACO,IAAA,EAAsB,WAAU,yBAAwB,UAAA,iBAAa;AAAA,UACtEP,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,iCACbnE,cAAoB,IAAI,GAAGA,CAAiB,YAAYC,IAAoB,IAAI,GAAGA,CAAiB,SAAS,gBAAA,CAChH;AAAA,QAAA,GACF;AAAA,QACAoE,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,UAAAF,gBAAAA,MAAC,YACC,MAAK,UACL,SAAS,MAAM5E,EAAeoF,OAAM,CAACA,CAAC,GACtC,WAAWF,EACT,uCACAnF,IAAa,8BAA8B,qDAC7C,GAECA,UAAAA,IAAa,WAAW,OAC3B;AAAA,gCACCsF,IAAA,EACC,8BAAS,UAAA,EAAO,MAAK,UAAS,WAAU,iFAExC,UAAAT,gBAAAA,EAAAA,IAACU,IAAA,EAAE,WAAU,WAAS,EAAA,CACxB;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,GACF;AAAA,MAEAR,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,oCACb,UAAA;AAAA,QAAAF,gBAAAA,MAACW,MACC,YAAYtF,GACZ,YAAYE,GACZ,UAAUsD,GAAqC;AAAA,QAEhD9C,IACCiE,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,gEACb,UAAAA,gBAAAA,EAAAA,IAACY,IAAA,EAAQ,WAAU,uBAAA,CAAsB,EAAA,CAC3C,IACE5E,0BACD,OAAA,EAAI,WAAU,mDAAmDA,UAAAA,EAAAA,CAAY,IAC5EG,EAAazC,WAAW,IAC1BsG,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,mDAAkD,UAAA,oBAAA,CAAiB,IAElFE,gBAAAA,EAAAA,KAAC,OAAA,EAAI,WAAU,uBACb,UAAA;AAAA,UAAAA,gBAAAA,OAAC,OAAA,EACC,UAAA;AAAA,YAAAF,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,yHAAuH,UAAA,wBAEtI;AAAA,YACCpD,EAAalD,WAAW,IACvBsG,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,kDAAiD,UAAA,2BAAA,CAAwB,IAExFpD,EAAa8C,IAAKmB,CAAAA,6BACf,OAAA,EACC,UAAA;AAAA,cAAAb,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,oHACZa,UAAAA,EAAMpH,OACT;AAAA,cACAuG,gBAAAA,EAAAA,IAAC,SAAI,WAAU,8CACZa,YAAMzH,MAAMsG,IAAKlD,OAChBwD,gBAAAA,EAAAA,IAACc,IAAA,EAEC,cAActE,GACd,YAAYwC,GACZ,WAAWW,GACX,UAAUC,EAAAA,GAJLpD,EAAEyC,GAMV,EAAA,CACH;AAAA,YAAA,EAAA,GAdQ,UAAU4B,EAAMzK,GAAG,EAe7B,CACD;AAAA,UAAA,GAEL;AAAA,UAEC+E,IAAa,OACZ+E,gBAAAA,EAAAA,KAAC,OAAA,EACC,UAAA;AAAA,YAAAF,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,yHAAuH,UAAA,0BAEtI;AAAA,YACCnD,EAAWnD,WAAW,IACrBsG,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,kDAAiD,UAAA,6BAAA,CAA0B,IAE1FnD,EAAW6C,IAAKmB,CAAAA,6BACb,OAAA,EACC,UAAA;AAAA,cAAAb,gBAAAA,EAAAA,IAAC,OAAA,EAAI,WAAU,oHACZa,UAAAA,EAAMpH,OACT;AAAA,cACAuG,gBAAAA,EAAAA,IAAC,SAAI,WAAU,8CACZa,YAAMzH,MAAMsG,IAAKlD,OAChBwD,gBAAAA,EAAAA,IAACc,IAAA,EAEC,cAActE,GACd,YAAYwC,GACZ,WAAWW,GACX,UAAUC,EAAAA,GAJLpD,EAAEyC,GAMV,EAAA,CACH;AAAA,YAAA,EAAA,GAdQ,YAAY4B,EAAMzK,GAAG,EAe/B,CACD;AAAA,UAAA,EAAA,CAEL;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;AAEA,SAAAuK,GAAAI,GAAA;AAAA,QAAAC,IAAAC,GAAAA,EAAA,EAAA,GAA6C;AAAA,IAAApH,YAAAA;AAAAA,IAAAqH,YAAAA;AAAAA,IAAAC,UAAAA;AAAAA,EAAAA,IAAAJ;AAS3C,MAAIlH,MAAe;AAAS,WAAS;AAErC,MAAIA,MAAe,eAAa;AAAA,QAAAuH;AAAA,WAAAJ,EAAA,CAAA,MAAAK,uBAAAC,IAAA,2BAAA,KAE5BF,IAAApB,gBAAAA,EAAAA,IAAA,OAAA,EAAe,WAAA,wEAAuE,UAAA,4DAEtF,GAAMgB,OAAAI,KAAAA,IAAAJ,EAAA,CAAA,GAFNI;AAAAA,EAEM;AAIV,QAAAG,IAAiB1H,MAAe,UAKzBuH,IAAAG,IAAA,uCAAA;AAA0F,MAAAC;AAAA,EAAAR,SAAAI,KAD7FI,IAAAxB,gBAAAA,EAAAA,IAAA,OAAA,EAAe,WAAA,uBACZoB,UAAAA,GACH,GAAMJ,OAAAI,GAAAJ,OAAAQ,KAAAA,IAAAR,EAAA,CAAA;AAEH,QAAAS,IAAAF,IAAA,mFAAA;AAE8D,MAAAG;AAAA,EAAAV,SAAAS,KAHjEC,IAAA1B,gBAAAA,EAAAA,IAAA,OAAA,EAAe,WAAA,sCACZyB,UAAAA,GAGH,GAAMT,OAAAS,GAAAT,OAAAU,KAAAA,IAAAV,EAAA,CAAA;AAOH,QAAAW,IAAAT,IAAA,gBAAA;AAA2D,MAAAU;AAAA,EAAAZ,EAAA,CAAA,MAAAG,KAAAH,SAAAE,KAAAF,EAAA,CAAA,MAAAW,KAN9DC,IAAA5B,gBAAAA,EAAAA,IAAA,UAAA,EACO,MAAA,UACK,WAAA,iKACAkB,aACDC,SAAAA,GAERQ,UAAAA,EAAAA,CACH,GAASX,OAAAG,GAAAH,OAAAE,GAAAF,OAAAW,GAAAX,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAa;AAAA,SAAAb,EAAA,CAAA,MAAAQ,KAAAR,UAAAU,KAAAV,EAAA,EAAA,MAAAY,KAhBXC,oCAAe,WAAA,0CACbL,UAAAA;AAAAA,IAAAA;AAAAA,IAGAE;AAAAA,IAKAE;AAAAA,EAAAA,GAQF,GAAMZ,OAAAQ,GAAAR,QAAAU,GAAAV,QAAAY,GAAAZ,QAAAa,KAAAA,IAAAb,EAAA,EAAA,GAjBNa;AAiBM;AAIV,SAAAf,GAAAC,GAAA;AAAA,QAAAC,IAAAC,GAAAA,EAAA,EAAA,GAAyB;AAAA,IAAAa,cAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,WAAAA;AAAAA,IAAAC,UAAAA;AAAAA,EAAAA,IAAAlB,GAWvB,CAAAmB,GAAAC,CAAA,IAAgCzH,EAAS,EAAK,GAC9C0H,IAAgB1G,EAA8B,IAAI,GAClD2G,IAAsB3G,EAAiC,IAAI,GAC3D4G,IAAiB,CAACR,EAAYrF;AAAO,MAAA2E;AAAA,EAAAJ,SAAAc,KACtBV,IAAAzJ,GAAsBmK,CAAY,GAACd,OAAAc,GAAAd,OAAAI,KAAAA,IAAAJ,EAAA,CAAA;AAAlD,QAAA1I,IAAe8I,GACfnK,IAAaqB,GAAMrB,QAAN;AAAkB,MAAAuK;AAAA,MAAAR,EAAA,CAAA,MAAAc,EAAAvI,WAAA;AAAAgJ,IAAAA,GAAA;AAE7B,YAAA9M,IAAa,IAAIL,KAAKH,GAAK6M,EAAYvI,SAAU,CAAC;AAClD,UAAI,CAACjE,OAAMC,SAAUE,EAAIC,QAAAA,CAAU,GAAC;AAAE8L,QAAAA,IAAO;AAAP,cAAAe;AAAAA,MAAS;AAC/Cf,MAAAA,IAAO/L,EAAI+M,eAAAA;AAAAA,IAAiB;AAAAxB,IAAAA,EAAA,CAAA,IAAAc,EAAAvI,WAAAyH,OAAAQ;AAAAA,EAAA;AAAAA,IAAAA,IAAAR,EAAA,CAAA;AAH9B,QAAAyB,IAAuBjB;AAInB,MAAAC,GAAAC;AAAA,EAAAV,SAAAkB,KAEMT,IAAAA,MAAA;AACR,QAAI,CAACS;AAAQ;AAEb,UAAAQ,IAA0BC,CAAAA,MAAA;AACxB,YAAArD,IAAeqD,EAAKrD;AACpB,MAAMA,aAAkBsD,SACpBR,EAAO/C,SAAkBwD,SAACvD,CAAiD,KAAtC+C,EAAahD,SAAkBwD,SAACvD,CAAM,KAC/E6C,EAAY,EAAK;AAAA,IAAC,GAGpBW,IAAsBC,CAAAA,MAAA;AACpB,MAAIJ,EAAKvM,QAAS,aAClB+L,EAAY,EAAK,GACjBE,EAAahD,SAAe2D,MAAAA;AAAAA,IAAE;AAGhCC,oBAAQtE,iBAAkB,eAAe+D,CAAiB,GAC1DO,SAAQtE,iBAAkB,WAAWmE,CAAa,GAE3C,MAAA;AACLG,eAAQrE,oBAAqB,eAAe8D,CAAiB,GAC7DO,SAAQrE,oBAAqB,WAAWkE,CAAa;AAAA,IAAC;AAAA,EACvD,GACApB,IAAA,CAACQ,CAAQ,GAAClB,OAAAkB,GAAAlB,OAAAS,GAAAT,OAAAU,MAAAD,IAAAT,EAAA,CAAA,GAAAU,IAAAV,EAAA,CAAA,IAvBbhD,EAAUyD,GAuBPC,CAAU;AAMP,QAAAC,IAAAW,IAAA,iBAAA;AAA2C,MAAAV;AAAA,EAAAZ,SAAAW,KAFlCC,IAAAtB,EACT,wDACAqB,CACF,GAACX,OAAAW,GAAAX,OAAAY,KAAAA,IAAAZ,EAAA,CAAA;AAAA,MAAAa;AAAA,EAAAb,SAAA1I,KAAA0I,EAAA,EAAA,MAAAsB,KAAAtB,EAAA,EAAA,MAAAc,EAAA7C,MAAA+B,EAAA,EAAA,MAAAiB,KAAAjB,UAAAe,KAKUF,IAAAA,MAAA;AACP,IAAIS,KACGP,EAAWD,EAAY7C,EAAG,GAE7B3G,MACF2J,EAAAA,GACA5J,GAAwBC,CAAM;AAAA,EAC/B,GACF0I,OAAA1I,GAAA0I,QAAAsB,GAAAtB,EAAA,EAAA,IAAAc,EAAA7C,IAAA+B,QAAAiB,GAAAjB,QAAAe,GAAAf,QAAAa,KAAAA,IAAAb,EAAA,EAAA;AAAA,MAAAkC;AAAA,EAAAlC,EAAA,EAAA,MAAAc,EAAAqB,SAGCD,IAAAlD,gBAAAA,EAAAA,IAAA,OAAA,EAAe,WAAA,kCAAkC8B,YAAYqB,OAAO,GAAMnC,EAAA,EAAA,IAAAc,EAAAqB,OAAAnC,QAAAkC,KAAAA,IAAAlC,EAAA,EAAA;AAAA,MAAAoC;AAAA,EAAApC,EAAA,EAAA,MAAAc,EAAAxE,QACzE8F,IAAAtB,EAAYxE,OACX0C,gBAAAA,EAAAA,IAAA,OAAA,EAAe,WAAA,qDAAqD8B,UAAAA,EAAYxE,MAAM,IADvF,MAEO0D,EAAA,EAAA,IAAAc,EAAAxE,MAAA0D,QAAAoC,KAAAA,IAAApC,EAAA,EAAA;AAAA,MAAAqC;AAAA,EAAArC,EAAA,EAAA,MAAAkC,KAAAlC,UAAAoC,KAJVC,IAAAnD,gBAAAA,EAAAA,KAAA,OAAA,EAAe,WAAA,WACbgD,UAAAA;AAAAA,IAAAA;AAAAA,IACCE;AAAAA,EAAAA,GAGH,GAAMpC,QAAAkC,GAAAlC,QAAAoC,GAAApC,QAAAqC,KAAAA,IAAArC,EAAA,EAAA;AAAA,MAAAsC;AAAA,EAAAtC,UAAA/J,KACLqM,IAAArM,IAAO+I,gBAAAA,EAAAA,IAAA,OAAA,EAAe,WAAA,mDAA2C,IAAjE,MAA8EgB,QAAA/J,GAAA+J,QAAAsC,KAAAA,IAAAtC,EAAA,EAAA;AAAA,MAAAuC;AAAA,EAAAvC,UAAAyB,KAC9Ec,IAAAd,IACCzC,gBAAAA,EAAAA,IAAA,OAAA,EAAe,WAAA,uDAAyD,IADzE,MAEOgB,QAAAyB,GAAAzB,QAAAuC,KAAAA,IAAAvC,EAAA,EAAA;AAAA,MAAAwC;AAAA,EAAAxC,EAAA,EAAA,MAAAqC,KAAArC,EAAA,EAAA,MAAAsC,KAAAtC,EAAA,EAAA,MAAAuC,KAAAvC,UAAAa,KAtBV2B,2BAAA,UAAA,EACO,MAAA,UACK,WAAA,4BACD,SAAA3B,GAUTwB,UAAAA;AAAAA,IAAAA;AAAAA,IAMCC;AAAAA,IACAC;AAAAA,EAAAA,GAGH,GAASvC,QAAAqC,GAAArC,QAAAsC,GAAAtC,QAAAuC,GAAAvC,QAAAa,GAAAb,QAAAwC,KAAAA,IAAAxC,EAAA,EAAA;AAAA,MAAAyC,GAAAC;AAAA,EAAA1C,EAAA,EAAA,MAAAK,uBAAAC,IAAA,2BAAA,KASImC,IAAAA,MAAA;AACPtB,IAAAA,EAAYwB,EAAe;AAAA,EAAC,GAG9BD,0BAACE,IAAA,EAAuB,WAAA,UAAA,CAAS,GAAG5C,QAAAyC,GAAAzC,QAAA0C,MAAAD,IAAAzC,EAAA,EAAA,GAAA0C,IAAA1C,EAAA,EAAA;AAAA,MAAA6C;AAAA,EAAA7C,UAAAkB,KAXtC2B,sCACOxB,KAAAA,GACA,MAAA,UACK,WAAA,8EACC,cAAA,wBACG,iBAAA,QACCH,iBAAAA,GACN,SAAAuB,GAITC,UAAAA,GACF,GAAS1C,QAAAkB,GAAAlB,QAAA6C,KAAAA,IAAA7C,EAAA,EAAA;AAAA,MAAA8C;AAAA,EAAA9C,UAAAsB,KAAAtB,EAAA,EAAA,MAAAkB,KAAAlB,EAAA,EAAA,MAAAc,EAAA7C,MAAA+B,EAAA,EAAA,MAAAgB,KAAAhB,UAAAe,KACR+B,IAAA5B,IACChC,gBAAAA,EAAAA,KAAA,OAAA,EACOkC,KAAAA,GACA,MAAA,QACM,WAAA9B,EACT,wIACA,iCACF,GAEA,UAAA;AAAA,IAAAN,gBAAAA,kBACO,MAAA,UACA,MAAA,YACK,WAAA,2MACD,SAAA,MAAA;AACPmC,MAAAA,EAAY,EAAK,GACjBH,EAAUF,EAAY7C,EAAG;AAAA,IAAC,GAE7B,UAAA,WAED;AAAA,IACAe,gBAAAA,EAAAA,IAAA,UAAA,EACO,MAAA,UACA,MAAA,YACK,WAAA,4PACA,UAAA,CAACsC,GACF,SAAA,MAAA;AACPH,MAAAA,EAAY,EAAK,GACjBJ,EAAWD,EAAY7C,EAAG;AAAA,IAAC,GAE9B,UAAA,eAAA,CAED;AAAA,EAAA,EAAA,CACF,IAhCD,MAiCO+B,QAAAsB,GAAAtB,QAAAkB,GAAAlB,EAAA,EAAA,IAAAc,EAAA7C,IAAA+B,QAAAgB,GAAAhB,QAAAe,GAAAf,QAAA8C,KAAAA,IAAA9C,EAAA,EAAA;AAAA,MAAA+C;AAAA,EAAA/C,EAAA,EAAA,MAAA6C,KAAA7C,UAAA8C,KA/CVC,IAAA7D,gBAAAA,EAAAA,KAAA,OAAA,EAAe,WAAA,6BACb2D,UAAAA;AAAAA,IAAAA;AAAAA,IAaCC;AAAAA,EAAAA,GAkCH,GAAM9C,QAAA6C,GAAA7C,QAAA8C,GAAA9C,QAAA+C,KAAAA,IAAA/C,EAAA,EAAA;AAAA,MAAAgD;AAAA,SAAAhD,EAAA,EAAA,MAAAwC,KAAAxC,UAAA+C,KAAA/C,EAAA,EAAA,MAAAY,KA9ERoC,IAAA9D,gBAAAA,EAAAA,KAAA,OAAA,EACa,WAAA0B,GAKX4B,UAAAA;AAAAA,IAAAA;AAAAA,IAwBAO;AAAAA,EAAAA,GAiDF,GAAM/C,QAAAwC,GAAAxC,QAAA+C,GAAA/C,QAAAY,GAAAZ,QAAAgD,KAAAA,IAAAhD,EAAA,EAAA,GA/ENgD;AA+EM;AAhIV,SAAAL,GAAA1J,GAAA;AAAA,SAwFkC,CAACA;AAAI;"}
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, type DialogRoot } 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\ntype BrowserNotificationPermission = NotificationPermission | \"unsupported\"\ntype NotificationActionMode = \"navigate\" | \"merge_current_search\"\n\ntype NotificationAction = {\n link: string\n mode: NotificationActionMode\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 getNotificationLink = (item: NotificationItem): string => {\n const dataLink = item.data?.link?.trim()\n if (dataLink) return dataLink\n\n const platformWebpush = item.platform?.webpush\n if (!platformWebpush || typeof platformWebpush !== \"object\" || Array.isArray(platformWebpush)) return \"\"\n const fcmOptions = (platformWebpush as { fcmOptions?: unknown }).fcmOptions\n if (!fcmOptions || typeof fcmOptions !== \"object\" || Array.isArray(fcmOptions)) return \"\"\n const link = (fcmOptions as { link?: unknown }).link\n return typeof link === \"string\" ? link.trim() : \"\"\n}\n\nconst getNotificationActionMode = (item: NotificationItem): NotificationActionMode => {\n return item.data?.linkMode === \"merge_current_search\" ? \"merge_current_search\" : \"navigate\"\n}\n\nconst getNotificationAction = (item: NotificationItem): NotificationAction | null => {\n const link = getNotificationLink(item)\n if (!link) return null\n return {\n link,\n mode: getNotificationActionMode(item),\n }\n}\n\nconst getNotificationActionLabel = (action: NotificationAction | null): string => {\n if (!action) return \"\"\n return action.mode === \"merge_current_search\" ? \"Open\" : action.link\n}\n\nconst pushUrlWithoutReload = (url: string): void => {\n window.history.pushState(window.history.state, \"\", url)\n window.dispatchEvent(new PopStateEvent(\"popstate\", { state: window.history.state }))\n}\n\nconst applyNotificationAction = (action: NotificationAction): void => {\n if (action.mode === \"merge_current_search\") {\n const currentUrl = new URL(window.location.href)\n const actionUrl = new URL(action.link, currentUrl)\n\n actionUrl.searchParams.forEach((value, key) => {\n currentUrl.searchParams.set(key, value)\n })\n if (actionUrl.hash) {\n currentUrl.hash = actionUrl.hash\n }\n\n pushUrlWithoutReload(`${currentUrl.pathname}${currentUrl.search}${currentUrl.hash}`)\n return\n }\n\n window.location.href = action.link\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 getBrowserNotificationPermission = (): BrowserNotificationPermission => {\n if (typeof window === \"undefined\") return \"unsupported\"\n if (!(\"Notification\" in window)) return \"unsupported\"\n return window.Notification.permission\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 const [browserNotificationPermission, setBrowserNotificationPermission] = useState<BrowserNotificationPermission>(() =>\n getBrowserNotificationPermission(),\n )\n const [browserNotificationPermissionRequesting, setBrowserNotificationPermissionRequesting] = useState(false)\n const dialogActionsRef = useRef<DialogRoot.Actions | null>(null)\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 useEffect(() => {\n if (!open) return\n\n setBrowserNotificationPermission(getBrowserNotificationPermission())\n\n if (typeof navigator === \"undefined\" || !navigator.permissions?.query) return\n\n let permissionStatus: PermissionStatus | null = null\n let disposed = false\n const syncPermission = () => {\n setBrowserNotificationPermission(getBrowserNotificationPermission())\n }\n\n try {\n void navigator.permissions.query({ name: \"notifications\" as PermissionName }).then((status) => {\n if (disposed) return\n permissionStatus = status\n syncPermission()\n status.addEventListener(\"change\", syncPermission)\n }).catch(() => {\n // Notifications are not exposed through the Permissions API in every browser.\n })\n } catch {\n return\n }\n\n return () => {\n disposed = true\n permissionStatus?.removeEventListener(\"change\", syncPermission)\n }\n }, [open])\n\n const requestBrowserNotificationPermission = async () => {\n if (typeof window === \"undefined\" || !(\"Notification\" in window)) {\n setBrowserNotificationPermission(\"unsupported\")\n return\n }\n\n setBrowserNotificationPermissionRequesting(true)\n try {\n const nextPermission = await window.Notification.requestPermission()\n setBrowserNotificationPermission(nextPermission)\n } catch {\n setBrowserNotificationPermission(getBrowserNotificationPermission())\n } finally {\n setBrowserNotificationPermissionRequesting(false)\n }\n }\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 const closeImmediately = () => {\n onOpenChange(false)\n dialogActionsRef.current?.unmount()\n }\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (nextOpen) {\n onOpenChange(true)\n return\n }\n\n closeImmediately()\n }\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={handleOpenChange} actionsRef={dialogActionsRef}>\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 <BrowserNotificationPermissionNotice\n permission={browserNotificationPermission}\n requesting={browserNotificationPermissionRequesting}\n onEnable={requestBrowserNotificationPermission}\n />\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 onAction={closeImmediately}\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 onAction={closeImmediately}\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 BrowserNotificationPermissionNotice({\n permission,\n requesting,\n onEnable,\n}: {\n permission: BrowserNotificationPermission\n requesting: boolean\n onEnable: () => void\n}) {\n if (permission === \"granted\") return null\n\n if (permission === \"unsupported\") {\n return (\n <div className=\"mt-3 rounded-md border bg-muted/40 p-3 text-sm text-muted-foreground\">\n Browser notifications are not supported by this browser.\n </div>\n )\n }\n\n const isDenied = permission === \"denied\"\n\n return (\n <div className=\"mt-3 rounded-md border bg-muted/40 p-3\">\n <div className=\"text-sm font-medium\">\n {isDenied ? \"Browser notifications are blocked.\" : \"Browser notifications are not enabled.\"}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">\n {isDenied\n ? \"Enable notifications for this site in your browser settings, then click again.\"\n : \"Enable browser notifications to receive important alerts.\"}\n </div>\n <button\n type=\"button\"\n className=\"mt-3 inline-flex h-8 items-center rounded-md border bg-background px-2.5 text-xs font-medium hover:bg-accent disabled:pointer-events-none disabled:opacity-50\"\n disabled={requesting}\n onClick={onEnable}\n >\n {requesting ? \"Enabling...\" : \"Enable browser notifications\"}\n </button>\n </div>\n )\n}\n\nfunction NotificationRow({\n notification,\n onMarkRead,\n onArchive,\n onAction,\n}: {\n notification: NotificationItem\n onMarkRead: (id: string) => void\n onArchive: (id: string) => void\n onAction: () => 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 action = getNotificationAction(notification)\n const actionLabel = getNotificationActionLabel(action)\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 (action) {\n onAction()\n applyNotificationAction(action)\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 {actionLabel ? <div className=\"mt-2 truncate text-xs text-primary\">{actionLabel}</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","getNotificationLink","item","dataLink","data","link","trim","platformWebpush","platform","webpush","Array","isArray","fcmOptions","getNotificationActionMode","linkMode","getNotificationAction","mode","getNotificationActionLabel","action","pushUrlWithoutReload","url","window","history","pushState","state","dispatchEvent","PopStateEvent","applyNotificationAction","currentUrl","URL","location","href","actionUrl","searchParams","forEach","value","set","hash","pathname","search","groupByDay","items","groups","currentKey","createdAt","push","label","length","getBrowserNotificationPermission","Notification","permission","EmptyRealtimeContext","createContext","NotificationsDrawer","open","onOpenChange","className","limit","defaultUnreadOnly","realtimeContext","realtime","useContext","setItems","useState","unreadCount","setUnreadCount","unseenCount","setUnseenCount","loading","setLoading","error","setError","unreadOnly","setUnreadOnly","browserNotificationPermission","setBrowserNotificationPermission","browserNotificationPermissionRequesting","setBrowserNotificationPermissionRequesting","dialogActionsRef","useRef","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","Math","max","floor","useEffect","keepalive","navigator","permissions","query","permissionStatus","disposed","syncPermission","name","then","status","addEventListener","removeEventListener","requestBrowserNotificationPermission","nextPermission","requestPermission","markAsRead","id","encodeURIComponent","nowIso","toISOString","current","target","find","count","seenAt","map","archive","closeImmediately","unmount","handleOpenChange","nextOpen","jsx","DialogPrimitive.Root","jsxs","DialogPrimitive.Portal","DialogPrimitive.Backdrop","DialogPrimitive.Popup","cn","DialogPrimitive.Title","v","DialogPrimitive.Close","X","BrowserNotificationPermissionNotice","Loader2","group","NotificationRow","t0","$","_c","requesting","onEnable","t1","Symbol","for","isDenied","t2","t3","t4","t5","t6","t7","notification","onMarkRead","onArchive","onAction","menuOpen","setMenuOpen","menuRef","menuButtonRef","isUnread","actionLabel","bb0","toLocaleString","createdAtLabel","handlePointerDown","event","Node","contains","handleKeyDown","event_0","focus","document","t8","title","t9","t10","t11","t12","t13","t14","t15","_temp","MoreVertical","t16","t17","t18","t19"],"mappings":"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"}
package/dist/index160.js CHANGED
@@ -1,11 +1,8 @@
1
- var v = 2, A = 17, E = 3, _ = "0-90-9٠-٩۰-۹", F = "-‐-―−ー-", u = "//", a = "..", S = "  ­​⁠ ", r = "()()[]\\[\\]", c = "~⁓∼~", N = "".concat(F).concat(u).concat(a).concat(S).concat(r).concat(c), T = "++";
1
+ import { VALID_PUNCTUATION as e } from "./index159.js";
2
+ function a(t) {
3
+ return t.replace(new RegExp("[".concat(e, "]+"), "g"), " ").trim();
4
+ }
2
5
  export {
3
- E as MAX_LENGTH_COUNTRY_CODE,
4
- A as MAX_LENGTH_FOR_NSN,
5
- v as MIN_LENGTH_FOR_NSN,
6
- T as PLUS_CHARS,
7
- _ as VALID_DIGITS,
8
- N as VALID_PUNCTUATION,
9
- S as WHITESPACE
6
+ a as default
10
7
  };
11
8
  //# sourceMappingURL=index160.js.map