@rpcbase/ui 0.242.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 (478) hide show
  1. package/dist/components/Notifications/NotificationsDrawer.d.ts.map +1 -1
  2. package/dist/index105.js +36 -36
  3. package/dist/index117.js +6 -6
  4. package/dist/index120.js +10 -10
  5. package/dist/index122.js +2 -2
  6. package/dist/index123.js +3 -3
  7. package/dist/index124.js +1 -1
  8. package/dist/index126.js +2 -2
  9. package/dist/index128.js +2 -2
  10. package/dist/index150.js +3 -3
  11. package/dist/index156.js +1 -1
  12. package/dist/index16.js +91 -91
  13. package/dist/index16.js.map +1 -1
  14. package/dist/index163.js +2 -2
  15. package/dist/index164.js +7 -7
  16. package/dist/index167.js +4 -4
  17. package/dist/index169.js +1 -1
  18. package/dist/index172.js +3 -3
  19. package/dist/index175.js +1 -1
  20. package/dist/index176.js +4 -4
  21. package/dist/index182.js +2 -2
  22. package/dist/index184.js +4 -4
  23. package/dist/index185.js +13 -13
  24. package/dist/index186.js +1 -1
  25. package/dist/index188.js +5 -5
  26. package/dist/index189.js +3 -3
  27. package/dist/index192.js +2 -2
  28. package/dist/index193.js +6 -6
  29. package/dist/index194.js +59 -20
  30. package/dist/index194.js.map +1 -1
  31. package/dist/index195.js +8 -66
  32. package/dist/index195.js.map +1 -1
  33. package/dist/index196.js +87 -6
  34. package/dist/index196.js.map +1 -1
  35. package/dist/index197.js +19 -5
  36. package/dist/index197.js.map +1 -1
  37. package/dist/index198.js +16 -11
  38. package/dist/index198.js.map +1 -1
  39. package/dist/index199.js +5 -3
  40. package/dist/index199.js.map +1 -1
  41. package/dist/index200.js +4 -49
  42. package/dist/index200.js.map +1 -1
  43. package/dist/index201.js +7 -4
  44. package/dist/index201.js.map +1 -1
  45. package/dist/index202.js +4 -29
  46. package/dist/index202.js.map +1 -1
  47. package/dist/index203.js +6 -16
  48. package/dist/index203.js.map +1 -1
  49. package/dist/index204.js +16 -5
  50. package/dist/index204.js.map +1 -1
  51. package/dist/index205.js +4 -21
  52. package/dist/index205.js.map +1 -1
  53. package/dist/index206.js +4 -53
  54. package/dist/index206.js.map +1 -1
  55. package/dist/index207.js +12 -20
  56. package/dist/index207.js.map +1 -1
  57. package/dist/index208.js +9 -41
  58. package/dist/index208.js.map +1 -1
  59. package/dist/index209.js +13 -39
  60. package/dist/index209.js.map +1 -1
  61. package/dist/index210.js +14 -46
  62. package/dist/index210.js.map +1 -1
  63. package/dist/index211.js +4 -20
  64. package/dist/index211.js.map +1 -1
  65. package/dist/index212.js +5 -70
  66. package/dist/index212.js.map +1 -1
  67. package/dist/index213.js +6 -17
  68. package/dist/index213.js.map +1 -1
  69. package/dist/index214.js +5 -3
  70. package/dist/index214.js.map +1 -1
  71. package/dist/index215.js +54 -11
  72. package/dist/index215.js.map +1 -1
  73. package/dist/index216.js +8 -13
  74. package/dist/index216.js.map +1 -1
  75. package/dist/index217.js +4 -18
  76. package/dist/index217.js.map +1 -1
  77. package/dist/index218.js +4 -36
  78. package/dist/index218.js.map +1 -1
  79. package/dist/index219.js +8 -239
  80. package/dist/index219.js.map +1 -1
  81. package/dist/index220.js +4 -252
  82. package/dist/index220.js.map +1 -1
  83. package/dist/index221.js +4 -68
  84. package/dist/index221.js.map +1 -1
  85. package/dist/index222.js +3 -99
  86. package/dist/index222.js.map +1 -1
  87. package/dist/index223.js +10 -83
  88. package/dist/index223.js.map +1 -1
  89. package/dist/index224.js +9 -3
  90. package/dist/index224.js.map +1 -1
  91. package/dist/index225.js +9 -29
  92. package/dist/index225.js.map +1 -1
  93. package/dist/index226.js +10 -16
  94. package/dist/index226.js.map +1 -1
  95. package/dist/index227.js +11 -35
  96. package/dist/index227.js.map +1 -1
  97. package/dist/index228.js +9 -17
  98. package/dist/index228.js.map +1 -1
  99. package/dist/index229.js +6 -3
  100. package/dist/index229.js.map +1 -1
  101. package/dist/index230.js +5 -26
  102. package/dist/index230.js.map +1 -1
  103. package/dist/index231.js +4 -28
  104. package/dist/index231.js.map +1 -1
  105. package/dist/index232.js +6 -4
  106. package/dist/index232.js.map +1 -1
  107. package/dist/index233.js +6 -78
  108. package/dist/index233.js.map +1 -1
  109. package/dist/index234.js +5 -272
  110. package/dist/index234.js.map +1 -1
  111. package/dist/index235.js +15 -10
  112. package/dist/index235.js.map +1 -1
  113. package/dist/index236.js +7 -10
  114. package/dist/index236.js.map +1 -1
  115. package/dist/index237.js +10 -25
  116. package/dist/index237.js.map +1 -1
  117. package/dist/index238.js +10 -16
  118. package/dist/index238.js.map +1 -1
  119. package/dist/index239.js +21 -125
  120. package/dist/index239.js.map +1 -1
  121. package/dist/index240.js +8 -5
  122. package/dist/index240.js.map +1 -1
  123. package/dist/index241.js +9 -65
  124. package/dist/index241.js.map +1 -1
  125. package/dist/index242.js +10 -14
  126. package/dist/index242.js.map +1 -1
  127. package/dist/index243.js +4 -7
  128. package/dist/index243.js.map +1 -1
  129. package/dist/index244.js +5 -5
  130. package/dist/index244.js.map +1 -1
  131. package/dist/index245.js +16 -3
  132. package/dist/index245.js.map +1 -1
  133. package/dist/index246.js +9 -10
  134. package/dist/index246.js.map +1 -1
  135. package/dist/index247.js +18 -7
  136. package/dist/index247.js.map +1 -1
  137. package/dist/index248.js +19 -132
  138. package/dist/index248.js.map +1 -1
  139. package/dist/index249.js +10 -397
  140. package/dist/index249.js.map +1 -1
  141. package/dist/index250.js +30 -5
  142. package/dist/index250.js.map +1 -1
  143. package/dist/index251.js +12 -52
  144. package/dist/index251.js.map +1 -1
  145. package/dist/index252.js +25 -11
  146. package/dist/index252.js.map +1 -1
  147. package/dist/index253.js +5 -27
  148. package/dist/index253.js.map +1 -1
  149. package/dist/index254.js +153 -10
  150. package/dist/index254.js.map +1 -1
  151. package/dist/index255.js +32 -58
  152. package/dist/index255.js.map +1 -1
  153. package/dist/index256.js +11 -8
  154. package/dist/index256.js.map +1 -1
  155. package/dist/index257.js +43 -81
  156. package/dist/index257.js.map +1 -1
  157. package/dist/index258.js +9 -19
  158. package/dist/index258.js.map +1 -1
  159. package/dist/index259.js +11 -16
  160. package/dist/index259.js.map +1 -1
  161. package/dist/index260.js +42 -4
  162. package/dist/index260.js.map +1 -1
  163. package/dist/index261.js +96 -4
  164. package/dist/index261.js.map +1 -1
  165. package/dist/index262.js +86 -6
  166. package/dist/index262.js.map +1 -1
  167. package/dist/index263.js +105 -4
  168. package/dist/index263.js.map +1 -1
  169. package/dist/index264.js +52 -6
  170. package/dist/index264.js.map +1 -1
  171. package/dist/index265.js +11 -16
  172. package/dist/index265.js.map +1 -1
  173. package/dist/index266.js +4 -4
  174. package/dist/index266.js.map +1 -1
  175. package/dist/index267.js +37 -4
  176. package/dist/index267.js.map +1 -1
  177. package/dist/index268.js +8 -12
  178. package/dist/index268.js.map +1 -1
  179. package/dist/index269.js +135 -9
  180. package/dist/index269.js.map +1 -1
  181. package/dist/index270.js +17 -13
  182. package/dist/index270.js.map +1 -1
  183. package/dist/index271.js +15 -13
  184. package/dist/index271.js.map +1 -1
  185. package/dist/index272.js +3 -4
  186. package/dist/index272.js.map +1 -1
  187. package/dist/index273.js +36 -5
  188. package/dist/index273.js.map +1 -1
  189. package/dist/index274.js +20 -6
  190. package/dist/index274.js.map +1 -1
  191. package/dist/index275.js +8 -5
  192. package/dist/index275.js.map +1 -1
  193. package/dist/index276.js +9 -54
  194. package/dist/index276.js.map +1 -1
  195. package/dist/index277.js +24 -8
  196. package/dist/index277.js.map +1 -1
  197. package/dist/index278.js +28 -4
  198. package/dist/index278.js.map +1 -1
  199. package/dist/index279.js +16 -4
  200. package/dist/index279.js.map +1 -1
  201. package/dist/index280.js +20 -9
  202. package/dist/index280.js.map +1 -1
  203. package/dist/index281.js +66 -4
  204. package/dist/index281.js.map +1 -1
  205. package/dist/index282.js +6 -4
  206. package/dist/index282.js.map +1 -1
  207. package/dist/index283.js +5 -3
  208. package/dist/index283.js.map +1 -1
  209. package/dist/index284.js +11 -10
  210. package/dist/index284.js.map +1 -1
  211. package/dist/index285.js +3 -9
  212. package/dist/index285.js.map +1 -1
  213. package/dist/index286.js +50 -9
  214. package/dist/index286.js.map +1 -1
  215. package/dist/index287.js +4 -11
  216. package/dist/index287.js.map +1 -1
  217. package/dist/index288.js +29 -10
  218. package/dist/index288.js.map +1 -1
  219. package/dist/index289.js +16 -9
  220. package/dist/index289.js.map +1 -1
  221. package/dist/index290.js +5 -6
  222. package/dist/index290.js.map +1 -1
  223. package/dist/index291.js +21 -5
  224. package/dist/index291.js.map +1 -1
  225. package/dist/index292.js +53 -4
  226. package/dist/index292.js.map +1 -1
  227. package/dist/index293.js +20 -5
  228. package/dist/index293.js.map +1 -1
  229. package/dist/index294.js +41 -6
  230. package/dist/index294.js.map +1 -1
  231. package/dist/index295.js +39 -5
  232. package/dist/index295.js.map +1 -1
  233. package/dist/index296.js +46 -17
  234. package/dist/index296.js.map +1 -1
  235. package/dist/index297.js +20 -7
  236. package/dist/index297.js.map +1 -1
  237. package/dist/index298.js +69 -9
  238. package/dist/index298.js.map +1 -1
  239. package/dist/index299.js +17 -10
  240. package/dist/index299.js.map +1 -1
  241. package/dist/index300.js +3 -21
  242. package/dist/index300.js.map +1 -1
  243. package/dist/index301.js +11 -8
  244. package/dist/index301.js.map +1 -1
  245. package/dist/index302.js +13 -9
  246. package/dist/index302.js.map +1 -1
  247. package/dist/index303.js +18 -9
  248. package/dist/index303.js.map +1 -1
  249. package/dist/index304.js +36 -4
  250. package/dist/index304.js.map +1 -1
  251. package/dist/index305.js +239 -5
  252. package/dist/index305.js.map +1 -1
  253. package/dist/index306.js +251 -15
  254. package/dist/index306.js.map +1 -1
  255. package/dist/index307.js +68 -9
  256. package/dist/index307.js.map +1 -1
  257. package/dist/index308.js +98 -17
  258. package/dist/index308.js.map +1 -1
  259. package/dist/index309.js +82 -19
  260. package/dist/index309.js.map +1 -1
  261. package/dist/index310.js +3 -12
  262. package/dist/index310.js.map +1 -1
  263. package/dist/index311.js +28 -28
  264. package/dist/index311.js.map +1 -1
  265. package/dist/index312.js +16 -12
  266. package/dist/index312.js.map +1 -1
  267. package/dist/index313.js +34 -25
  268. package/dist/index313.js.map +1 -1
  269. package/dist/index314.js +17 -5
  270. package/dist/index314.js.map +1 -1
  271. package/dist/index315.js +3 -154
  272. package/dist/index315.js.map +1 -1
  273. package/dist/index316.js +25 -31
  274. package/dist/index316.js.map +1 -1
  275. package/dist/index317.js +28 -11
  276. package/dist/index317.js.map +1 -1
  277. package/dist/index318.js +4 -50
  278. package/dist/index318.js.map +1 -1
  279. package/dist/index319.js +78 -9
  280. package/dist/index319.js.map +1 -1
  281. package/dist/index320.js +271 -10
  282. package/dist/index320.js.map +1 -1
  283. package/dist/index321.js +11 -43
  284. package/dist/index321.js.map +1 -1
  285. package/dist/index322.js +10 -97
  286. package/dist/index322.js.map +1 -1
  287. package/dist/index323.js +25 -86
  288. package/dist/index323.js.map +1 -1
  289. package/dist/index324.js +15 -104
  290. package/dist/index324.js.map +1 -1
  291. package/dist/index325.js +123 -50
  292. package/dist/index325.js.map +1 -1
  293. package/dist/index326.js +5 -11
  294. package/dist/index326.js.map +1 -1
  295. package/dist/index327.js +65 -4
  296. package/dist/index327.js.map +1 -1
  297. package/dist/index328.js +13 -37
  298. package/dist/index328.js.map +1 -1
  299. package/dist/index329.js +7 -8
  300. package/dist/index329.js.map +1 -1
  301. package/dist/index330.js +5 -135
  302. package/dist/index330.js.map +1 -1
  303. package/dist/index331.js +3 -17
  304. package/dist/index331.js.map +1 -1
  305. package/dist/index332.js +10 -15
  306. package/dist/index332.js.map +1 -1
  307. package/dist/index333.js +7 -3
  308. package/dist/index333.js.map +1 -1
  309. package/dist/index334.js +129 -32
  310. package/dist/index334.js.map +1 -1
  311. package/dist/index335.js +397 -18
  312. package/dist/index335.js.map +1 -1
  313. package/dist/index336.js +5 -10
  314. package/dist/index336.js.map +1 -1
  315. package/dist/index337.js +52 -8
  316. package/dist/index337.js.map +1 -1
  317. package/dist/index338.js +11 -24
  318. package/dist/index338.js.map +1 -1
  319. package/dist/index339.js +27 -28
  320. package/dist/index339.js.map +1 -1
  321. package/dist/index340.js +11 -16
  322. package/dist/index340.js.map +1 -1
  323. package/dist/index341.js +1 -1
  324. package/dist/index348.js +60 -50
  325. package/dist/index348.js.map +1 -1
  326. package/dist/index349.js +66 -5
  327. package/dist/index349.js.map +1 -1
  328. package/dist/index350.js +50 -60
  329. package/dist/index350.js.map +1 -1
  330. package/dist/index351.js +5 -66
  331. package/dist/index351.js.map +1 -1
  332. package/dist/index357.js +1 -1
  333. package/dist/index358.js +5 -5
  334. package/dist/index359.js +1 -1
  335. package/dist/index362.js +5 -4
  336. package/dist/index362.js.map +1 -1
  337. package/dist/index363.js +18 -6
  338. package/dist/index363.js.map +1 -1
  339. package/dist/index364.js +13 -3
  340. package/dist/index364.js.map +1 -1
  341. package/dist/index365.js +4 -11
  342. package/dist/index365.js.map +1 -1
  343. package/dist/index366.js +20 -20
  344. package/dist/index366.js.map +1 -1
  345. package/dist/index367.js +4 -45
  346. package/dist/index367.js.map +1 -1
  347. package/dist/index368.js +11 -17
  348. package/dist/index368.js.map +1 -1
  349. package/dist/index369.js +6 -5
  350. package/dist/index369.js.map +1 -1
  351. package/dist/index370.js +3 -201
  352. package/dist/index370.js.map +1 -1
  353. package/dist/index371.js +20 -73
  354. package/dist/index371.js.map +1 -1
  355. package/dist/index372.js +43 -122
  356. package/dist/index372.js.map +1 -1
  357. package/dist/index373.js +18 -5
  358. package/dist/index373.js.map +1 -1
  359. package/dist/index374.js +4 -17
  360. package/dist/index374.js.map +1 -1
  361. package/dist/index375.js +200 -12
  362. package/dist/index375.js.map +1 -1
  363. package/dist/index376.js +73 -4
  364. package/dist/index376.js.map +1 -1
  365. package/dist/index377.js +122 -19
  366. package/dist/index377.js.map +1 -1
  367. package/dist/index379.js +4 -4
  368. package/dist/index380.js +3 -3
  369. package/dist/index382.js +1 -1
  370. package/dist/index384.js +1 -1
  371. package/dist/index385.js +2 -2
  372. package/dist/index388.js +2 -2
  373. package/dist/index389.js +2 -2
  374. package/dist/index392.js +5 -3
  375. package/dist/index392.js.map +1 -1
  376. package/dist/index393.js +5 -3
  377. package/dist/index393.js.map +1 -1
  378. package/dist/index394.js +4 -5
  379. package/dist/index394.js.map +1 -1
  380. package/dist/index395.js +15 -4
  381. package/dist/index395.js.map +1 -1
  382. package/dist/index396.js +9 -4
  383. package/dist/index396.js.map +1 -1
  384. package/dist/index397.js +5 -15
  385. package/dist/index397.js.map +1 -1
  386. package/dist/index398.js +4 -8
  387. package/dist/index398.js.map +1 -1
  388. package/dist/index399.js +545 -5
  389. package/dist/index399.js.map +1 -1
  390. package/dist/index400.js +47 -5
  391. package/dist/index400.js.map +1 -1
  392. package/dist/index401.js +15 -543
  393. package/dist/index401.js.map +1 -1
  394. package/dist/index402.js +6 -47
  395. package/dist/index402.js.map +1 -1
  396. package/dist/index403.js +7 -17
  397. package/dist/index403.js.map +1 -1
  398. package/dist/index404.js +6 -5
  399. package/dist/index404.js.map +1 -1
  400. package/dist/index405.js +7 -7
  401. package/dist/index405.js.map +1 -1
  402. package/dist/index406.js +11 -6
  403. package/dist/index406.js.map +1 -1
  404. package/dist/index407.js +8 -7
  405. package/dist/index407.js.map +1 -1
  406. package/dist/index408.js +12 -11
  407. package/dist/index408.js.map +1 -1
  408. package/dist/index409.js +3 -9
  409. package/dist/index409.js.map +1 -1
  410. package/dist/index410.js +3 -13
  411. package/dist/index410.js.map +1 -1
  412. package/dist/index411.js +15 -3
  413. package/dist/index411.js.map +1 -1
  414. package/dist/index412.js +3 -15
  415. package/dist/index412.js.map +1 -1
  416. package/dist/index413.js +1 -1
  417. package/dist/index414.js +68 -8
  418. package/dist/index414.js.map +1 -1
  419. package/dist/index415.js +31 -2
  420. package/dist/index415.js.map +1 -1
  421. package/dist/index416.js +9 -44
  422. package/dist/index416.js.map +1 -1
  423. package/dist/index417.js +152 -55
  424. package/dist/index417.js.map +1 -1
  425. package/dist/index418.js +108 -8
  426. package/dist/index418.js.map +1 -1
  427. package/dist/index419.js +5 -2
  428. package/dist/index419.js.map +1 -1
  429. package/dist/index420.js +55 -54
  430. package/dist/index420.js.map +1 -1
  431. package/dist/index421.js +7 -55
  432. package/dist/index421.js.map +1 -1
  433. package/dist/index422.js +2 -33
  434. package/dist/index422.js.map +1 -1
  435. package/dist/index423.js +43 -67
  436. package/dist/index423.js.map +1 -1
  437. package/dist/index424.js +56 -31
  438. package/dist/index424.js.map +1 -1
  439. package/dist/index425.js +8 -9
  440. package/dist/index425.js.map +1 -1
  441. package/dist/index426.js +2 -153
  442. package/dist/index426.js.map +1 -1
  443. package/dist/index427.js +54 -107
  444. package/dist/index427.js.map +1 -1
  445. package/dist/index428.js +55 -4
  446. package/dist/index428.js.map +1 -1
  447. package/dist/index429.js +32 -55
  448. package/dist/index429.js.map +1 -1
  449. package/dist/index430.js +16 -2
  450. package/dist/index430.js.map +1 -1
  451. package/dist/index431.js +29 -2
  452. package/dist/index431.js.map +1 -1
  453. package/dist/index432.js +13 -2
  454. package/dist/index432.js.map +1 -1
  455. package/dist/index433.js +7 -2
  456. package/dist/index433.js.map +1 -1
  457. package/dist/index434.js +2 -16
  458. package/dist/index434.js.map +1 -1
  459. package/dist/index435.js +2 -29
  460. package/dist/index435.js.map +1 -1
  461. package/dist/index436.js +2 -13
  462. package/dist/index436.js.map +1 -1
  463. package/dist/index437.js +2 -7
  464. package/dist/index437.js.map +1 -1
  465. package/dist/index49.js +30 -30
  466. package/dist/index50.js +21 -21
  467. package/dist/index51.js +1 -1
  468. package/dist/index52.js +8 -8
  469. package/dist/index53.js +2 -2
  470. package/dist/index55.js +16 -16
  471. package/dist/index56.js +4 -4
  472. package/dist/index57.js +3 -3
  473. package/dist/index58.js +7 -7
  474. package/dist/index59.js +4 -4
  475. package/dist/index60.js +12 -12
  476. package/dist/index61.js +2 -2
  477. package/dist/index62.js +2 -2
  478. package/package.json +1 -1
@@ -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":"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"}
1
+ {"version":3,"file":"index16.js","sources":["../src/components/Notifications/NotificationsDrawer.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type Context } from \"react\"\nimport { Dialog as DialogPrimitive, 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/index163.js CHANGED
@@ -1,6 +1,6 @@
1
- import h from "./index326.js";
1
+ import h from "./index265.js";
2
2
  import l from "./index170.js";
3
- import v from "./index327.js";
3
+ import v from "./index266.js";
4
4
  function o(n) {
5
5
  "@babel/helpers - typeof";
6
6
  return o = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(t) {
package/dist/index164.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import g, { validateMetadata as h } from "./index163.js";
2
- import d from "./index316.js";
3
- import v from "./index317.js";
4
- import w from "./index318.js";
5
- import P from "./index319.js";
6
- import E from "./index320.js";
7
- import O from "./index321.js";
2
+ import d from "./index255.js";
3
+ import v from "./index256.js";
4
+ import w from "./index257.js";
5
+ import P from "./index258.js";
6
+ import E from "./index259.js";
7
+ import O from "./index260.js";
8
8
  import s from "./index170.js";
9
- import j from "./index322.js";
9
+ import j from "./index261.js";
10
10
  function i(r) {
11
11
  "@babel/helpers - typeof";
12
12
  return i = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) {
package/dist/index167.js CHANGED
@@ -1,7 +1,7 @@
1
- import b from "./index321.js";
2
- import y from "./index338.js";
3
- import m from "./index339.js";
4
- import C from "./index340.js";
1
+ import b from "./index260.js";
2
+ import y from "./index277.js";
3
+ import m from "./index278.js";
4
+ import C from "./index279.js";
5
5
  import v from "./index157.js";
6
6
  import { VALID_PUNCTUATION as s, VALID_DIGITS as g, PLUS_CHARS as p } from "./index159.js";
7
7
  function d(i) {
package/dist/index169.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import u from "./index163.js";
2
- import f from "./index318.js";
2
+ import f from "./index257.js";
3
3
  function d(e, r) {
4
4
  var t = typeof Symbol < "u" && e[Symbol.iterator] || e["@@iterator"];
5
5
  if (t) return (t = t.call(e)).next.bind(t);
package/dist/index172.js CHANGED
@@ -1,15 +1,15 @@
1
1
  import b from "./index190.js";
2
2
  import * as c from "react";
3
3
  import { createElement as p } from "react";
4
- import { useMergedRefs as E, useMergedRefsN as g } from "./index195.js";
4
+ import { useMergedRefs as E, useMergedRefsN as g } from "./index281.js";
5
5
  import { getReactElementRef as y } from "./index341.js";
6
6
  import { mergeObjects as R } from "./index342.js";
7
7
  import { warn as v } from "./index343.js";
8
- import { EMPTY_OBJECT as f } from "./index204.js";
8
+ import { EMPTY_OBJECT as f } from "./index290.js";
9
9
  import { getStateAttributesProps as w } from "./index344.js";
10
10
  import { resolveClassName as C } from "./index345.js";
11
11
  import { resolveStyle as T } from "./index346.js";
12
- import { mergeClassNames as _, mergeProps as h, mergePropsN as k } from "./index222.js";
12
+ import { mergeClassNames as _, mergeProps as h, mergePropsN as k } from "./index308.js";
13
13
  function q(r, e, t = {}) {
14
14
  const a = e.render, s = I(e, t);
15
15
  if (t.enabled === !1)
package/dist/index175.js CHANGED
@@ -1,4 +1,4 @@
1
- import { EMPTY_OBJECT as l } from "./index204.js";
1
+ import { EMPTY_OBJECT as l } from "./index290.js";
2
2
  function u(a, n, o, s) {
3
3
  let e = !1, t = !1;
4
4
  const r = l;
package/dist/index176.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import * as l from "react";
2
- import { isHTMLElement as M } from "./index248.js";
3
- import { useStableCallback as H } from "./index202.js";
2
+ import { isHTMLElement as M } from "./index334.js";
3
+ import { useStableCallback as H } from "./index288.js";
4
4
  import { error as y } from "./index352.js";
5
5
  import { SafeReact as B } from "./index353.js";
6
- import { useIsoLayoutEffect as A } from "./index201.js";
6
+ import { useIsoLayoutEffect as A } from "./index287.js";
7
7
  import { useCompositeRootContext as L } from "./index354.js";
8
8
  import { useFocusableWhenDisabled as W } from "./index355.js";
9
- import { mergeProps as $, makeEventPreventable as x } from "./index222.js";
9
+ import { mergeProps as $, makeEventPreventable as x } from "./index308.js";
10
10
  function X(a = {}) {
11
11
  const {
12
12
  disabled: o = !1,
package/dist/index182.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as l from "react";
2
- import { useStableCallback as m } from "./index202.js";
3
- import { useAnimationsFinished as f } from "./index348.js";
2
+ import { useStableCallback as m } from "./index288.js";
3
+ import { useAnimationsFinished as f } from "./index350.js";
4
4
  function c(a) {
5
5
  const {
6
6
  enabled: e = !0,
package/dist/index184.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import * as a from "react";
2
2
  import "react-dom";
3
- import { EMPTY_OBJECT as f } from "./index204.js";
3
+ import { EMPTY_OBJECT as f } from "./index290.js";
4
4
  import { useId as T } from "./index347.js";
5
- import { useStableCallback as p } from "./index202.js";
6
- import { useIsoLayoutEffect as s } from "./index201.js";
5
+ import { useStableCallback as p } from "./index288.js";
6
+ import { useIsoLayoutEffect as s } from "./index287.js";
7
7
  import { FOCUSABLE_ATTRIBUTE as v } from "./index390.js";
8
8
  import { useFloatingParentNodeId as C } from "./index386.js";
9
9
  import { useSyncedFloatingRootContext as E } from "./index389.js";
10
- import { useTransitionStatus as I } from "./index209.js";
10
+ import { useTransitionStatus as I } from "./index295.js";
11
11
  import { useOpenChangeComplete as O } from "./index182.js";
12
12
  import { createChangeEventDetails as S } from "./index175.js";
13
13
  import { none as P } from "./index177.js";
package/dist/index185.js CHANGED
@@ -1,17 +1,17 @@
1
1
  import * as E from "react";
2
- import { isHTMLElement as q, getNodeName as Se, getWindow as Be } from "./index248.js";
3
- import { addEventListener as I } from "./index240.js";
2
+ import { isHTMLElement as q, getNodeName as Se, getWindow as Be } from "./index334.js";
3
+ import { addEventListener as I } from "./index326.js";
4
4
  import { mergeCleanups as ge } from "./index378.js";
5
- import { useMergedRefs as Ee } from "./index195.js";
6
- import { useValueAsRef as $ } from "./index203.js";
7
- import { useStableCallback as oe } from "./index202.js";
8
- import { useIsoLayoutEffect as W } from "./index201.js";
9
- import { useTimeout as Fe } from "./index225.js";
10
- import { useAnimationFrame as Ue } from "./index241.js";
11
- import { ownerDocument as O } from "./index224.js";
5
+ import { useMergedRefs as Ee } from "./index281.js";
6
+ import { useValueAsRef as $ } from "./index289.js";
7
+ import { useStableCallback as oe } from "./index288.js";
8
+ import { useIsoLayoutEffect as W } from "./index287.js";
9
+ import { useTimeout as Fe } from "./index311.js";
10
+ import { useAnimationFrame as Ue } from "./index327.js";
11
+ import { ownerDocument as O } from "./index310.js";
12
12
  import { FocusGuard as Te } from "./index379.js";
13
- import { isTypeableCombobox as xe, getFloatingFocusElement as ye, isTypeableElement as $e } from "./index230.js";
14
- import { isVirtualClick as ze, isVirtualPointerEvent as Je, stopEvent as Qe } from "./index253.js";
13
+ import { isTypeableCombobox as xe, getFloatingFocusElement as ye, isTypeableElement as $e } from "./index316.js";
14
+ import { isVirtualClick as ze, isVirtualPointerEvent as Je, stopEvent as Qe } from "./index339.js";
15
15
  import { isOutsideEvent as Ie, getNextTabbable as Xe, getPreviousTabbable as Ye, tabbable as De, isTabbable as ie, focusable as Ze } from "./index380.js";
16
16
  import { getNodeAncestors as ve, getNodeChildren as he } from "./index381.js";
17
17
  import { isElementVisible as et } from "./index382.js";
@@ -24,9 +24,9 @@ import { useFloatingTree as rt } from "./index386.js";
24
24
  import { CLICK_TRIGGER_IDENTIFIER as ot } from "./index191.js";
25
25
  import { resolveRef as w } from "./index387.js";
26
26
  import { j as ue } from "./index30.js";
27
- import { activeElement as N, contains as c, getTarget as z } from "./index231.js";
27
+ import { activeElement as N, contains as c, getTarget as z } from "./index317.js";
28
28
  import { triggerHover as st, outsidePress as ut, focusOut as it } from "./index177.js";
29
- import { webkit as ct } from "./index250.js";
29
+ import { webkit as ct } from "./index336.js";
30
30
  function ft(n, D) {
31
31
  const M = Be(z(n));
32
32
  return n instanceof M.KeyboardEvent ? "keyboard" : n instanceof M.FocusEvent ? D || "keyboard" : "pointerType" in n ? n.pointerType || "keyboard" : "touches" in n ? "touch" : n instanceof M.MouseEvent ? D || (n.detail === 0 ? "keyboard" : "mouse") : "";
package/dist/index186.js CHANGED
@@ -1,4 +1,4 @@
1
- import { isReactVersionAtLeast as r } from "./index349.js";
1
+ import { isReactVersionAtLeast as r } from "./index351.js";
2
2
  function n(e) {
3
3
  return r(19) ? e : e ? "true" : void 0;
4
4
  }
package/dist/index188.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import * as o from "react";
2
2
  import * as j from "react-dom";
3
- import { isNode as w } from "./index248.js";
4
- import { addEventListener as S } from "./index240.js";
3
+ import { isNode as w } from "./index334.js";
4
+ import { addEventListener as S } from "./index326.js";
5
5
  import { mergeCleanups as G } from "./index378.js";
6
6
  import { useId as _ } from "./index347.js";
7
- import { useIsoLayoutEffect as h } from "./index201.js";
8
- import { useStableCallback as L } from "./index202.js";
9
- import { EMPTY_OBJECT as k } from "./index204.js";
7
+ import { useIsoLayoutEffect as h } from "./index287.js";
8
+ import { useStableCallback as L } from "./index288.js";
9
+ import { EMPTY_OBJECT as k } from "./index290.js";
10
10
  import { FocusGuard as T } from "./index379.js";
11
11
  import { enableFocusInside as I, isOutsideEvent as E, getPreviousTabbable as q, getNextTabbable as A, disableFocusInside as B } from "./index380.js";
12
12
  import { createChangeEventDetails as H } from "./index175.js";
package/dist/index189.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import * as w from "react";
2
- import { useOnFirstRender as y } from "./index197.js";
3
- import { useDialogRoot as T, DialogInteractions as k } from "./index350.js";
2
+ import { useOnFirstRender as y } from "./index283.js";
3
+ import { useDialogRoot as T, DialogInteractions as k } from "./index348.js";
4
4
  import { useDialogRootContext as V, IsDrawerContext as A, DialogRootContext as B } from "./index171.js";
5
- import { DialogStore as E } from "./index351.js";
5
+ import { DialogStore as E } from "./index349.js";
6
6
  import { j as a } from "./index30.js";
7
7
  function J(c, l = "dialog") {
8
8
  const {
package/dist/index192.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as i from "react";
2
- import { useStableCallback as u } from "./index202.js";
2
+ import { useStableCallback as u } from "./index288.js";
3
3
  import { useEnhancedClickHandler as c } from "./index356.js";
4
- import { useValueChanged as l } from "./index215.js";
4
+ import { useValueChanged as l } from "./index301.js";
5
5
  import { ios as a } from "./index357.js";
6
6
  function m(e, t) {
7
7
  const n = u((p, s) => {
package/dist/index193.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import * as p from "react";
2
- import { useAnimationFrame as v } from "./index241.js";
3
- import { useTimeout as P } from "./index225.js";
4
- import { EMPTY_OBJECT as b } from "./index204.js";
5
- import { isTypeableElement as x } from "./index230.js";
6
- import { isMouseLikePointerType as E } from "./index253.js";
2
+ import { useAnimationFrame as v } from "./index327.js";
3
+ import { useTimeout as P } from "./index311.js";
4
+ import { EMPTY_OBJECT as b } from "./index290.js";
5
+ import { isTypeableElement as x } from "./index316.js";
6
+ import { isMouseLikePointerType as E } from "./index339.js";
7
7
  import { createChangeEventDetails as I } from "./index175.js";
8
- import { getTarget as S } from "./index231.js";
8
+ import { getTarget as S } from "./index317.js";
9
9
  import { triggerPress as q } from "./index177.js";
10
10
  function Y(s, M = {}) {
11
11
  const {
package/dist/index194.js CHANGED
@@ -1,23 +1,62 @@
1
- const i = {
2
- clipPath: "inset(50%)",
3
- overflow: "hidden",
4
- whiteSpace: "nowrap",
5
- border: 0,
6
- padding: 0,
7
- width: 1,
8
- height: 1,
9
- margin: -1
10
- }, e = {
11
- ...i,
12
- position: "fixed",
13
- top: 0,
14
- left: 0
15
- }, t = {
16
- ...i,
17
- position: "absolute"
18
- };
1
+ import { tzName as r } from "./index195.js";
2
+ import { TZDateMini as s } from "./index196.js";
3
+ class o extends s {
4
+ //#region static
5
+ static tz(t, ...e) {
6
+ return e.length ? new o(...e, t) : new o(Date.now(), t);
7
+ }
8
+ //#endregion
9
+ //#region representation
10
+ toISOString() {
11
+ const [t, e, n] = this.tzComponents(), i = `${t}${e}:${n}`;
12
+ return this.internal.toISOString().slice(0, -1) + i;
13
+ }
14
+ toString() {
15
+ return `${this.toDateString()} ${this.toTimeString()}`;
16
+ }
17
+ toDateString() {
18
+ const [t, e, n, i] = this.internal.toUTCString().split(" ");
19
+ return `${t?.slice(0, -1)} ${n} ${e} ${i}`;
20
+ }
21
+ toTimeString() {
22
+ const t = this.internal.toUTCString().split(" ")[4], [e, n, i] = this.tzComponents();
23
+ return `${t} GMT${e}${n}${i} (${r(this.timeZone, this)})`;
24
+ }
25
+ toLocaleString(t, e) {
26
+ return Date.prototype.toLocaleString.call(this, t, {
27
+ ...e,
28
+ timeZone: e?.timeZone || this.timeZone
29
+ });
30
+ }
31
+ toLocaleDateString(t, e) {
32
+ return Date.prototype.toLocaleDateString.call(this, t, {
33
+ ...e,
34
+ timeZone: e?.timeZone || this.timeZone
35
+ });
36
+ }
37
+ toLocaleTimeString(t, e) {
38
+ return Date.prototype.toLocaleTimeString.call(this, t, {
39
+ ...e,
40
+ timeZone: e?.timeZone || this.timeZone
41
+ });
42
+ }
43
+ //#endregion
44
+ //#region private
45
+ tzComponents() {
46
+ const t = this.getTimezoneOffset(), e = t > 0 ? "-" : "+", n = String(Math.floor(Math.abs(t) / 60)).padStart(2, "0"), i = String(Math.abs(t) % 60).padStart(2, "0");
47
+ return [e, n, i];
48
+ }
49
+ //#endregion
50
+ withTimeZone(t) {
51
+ return new o(+this, t);
52
+ }
53
+ //#region date-fns integration
54
+ [/* @__PURE__ */ Symbol.for("constructDateFrom")](t) {
55
+ return new o(+new Date(t), this.timeZone);
56
+ }
57
+ //#endregion
58
+ }
19
59
  export {
20
- e as visuallyHidden,
21
- t as visuallyHiddenInput
60
+ o as TZDate
22
61
  };
23
62
  //# sourceMappingURL=index194.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index194.js","sources":["../node_modules/@base-ui/utils/visuallyHidden.mjs"],"sourcesContent":["const visuallyHiddenBase = {\n clipPath: 'inset(50%)',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n border: 0,\n padding: 0,\n width: 1,\n height: 1,\n margin: -1\n};\nexport const visuallyHidden = {\n ...visuallyHiddenBase,\n position: 'fixed',\n top: 0,\n left: 0\n};\nexport const visuallyHiddenInput = {\n ...visuallyHiddenBase,\n position: 'absolute'\n};"],"names":["visuallyHiddenBase","visuallyHidden","visuallyHiddenInput"],"mappings":"AAAA,MAAMA,IAAqB;AAAA,EACzB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AACV,GACaC,IAAiB;AAAA,EAC5B,GAAGD;AAAA,EACH,UAAU;AAAA,EACV,KAAK;AAAA,EACL,MAAM;AACR,GACaE,IAAsB;AAAA,EACjC,GAAGF;AAAA,EACH,UAAU;AACZ;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index194.js","sources":["../../../node_modules/@date-fns/tz/date/index.js"],"sourcesContent":["import { tzName } from \"../tzName/index.js\";\nimport { TZDateMini } from \"./mini.js\";\nexport class TZDate extends TZDateMini {\n //#region static\n\n static tz(tz, ...args) {\n return args.length ? new TZDate(...args, tz) : new TZDate(Date.now(), tz);\n }\n\n //#endregion\n\n //#region representation\n\n toISOString() {\n const [sign, hours, minutes] = this.tzComponents();\n const tz = `${sign}${hours}:${minutes}`;\n return this.internal.toISOString().slice(0, -1) + tz;\n }\n toString() {\n // \"Tue Aug 13 2024 07:50:19 GMT+0800 (Singapore Standard Time)\";\n return `${this.toDateString()} ${this.toTimeString()}`;\n }\n toDateString() {\n // toUTCString returns RFC 7231 (\"Mon, 12 Aug 2024 23:36:08 GMT\")\n const [day, date, month, year] = this.internal.toUTCString().split(\" \");\n // \"Tue Aug 13 2024\"\n return `${day?.slice(0, -1) /* Remove \",\" */} ${month} ${date} ${year}`;\n }\n toTimeString() {\n // toUTCString returns RFC 7231 (\"Mon, 12 Aug 2024 23:36:08 GMT\")\n const time = this.internal.toUTCString().split(\" \")[4];\n const [sign, hours, minutes] = this.tzComponents();\n // \"07:42:23 GMT+0800 (Singapore Standard Time)\"\n return `${time} GMT${sign}${hours}${minutes} (${tzName(this.timeZone, this)})`;\n }\n toLocaleString(locales, options) {\n return Date.prototype.toLocaleString.call(this, locales, {\n ...options,\n timeZone: options?.timeZone || this.timeZone\n });\n }\n toLocaleDateString(locales, options) {\n return Date.prototype.toLocaleDateString.call(this, locales, {\n ...options,\n timeZone: options?.timeZone || this.timeZone\n });\n }\n toLocaleTimeString(locales, options) {\n return Date.prototype.toLocaleTimeString.call(this, locales, {\n ...options,\n timeZone: options?.timeZone || this.timeZone\n });\n }\n\n //#endregion\n\n //#region private\n\n tzComponents() {\n const offset = this.getTimezoneOffset();\n const sign = offset > 0 ? \"-\" : \"+\";\n const hours = String(Math.floor(Math.abs(offset) / 60)).padStart(2, \"0\");\n const minutes = String(Math.abs(offset) % 60).padStart(2, \"0\");\n return [sign, hours, minutes];\n }\n\n //#endregion\n\n withTimeZone(timeZone) {\n return new TZDate(+this, timeZone);\n }\n\n //#region date-fns integration\n\n [Symbol.for(\"constructDateFrom\")](date) {\n return new TZDate(+new Date(date), this.timeZone);\n }\n\n //#endregion\n}"],"names":["TZDate","TZDateMini","tz","args","sign","hours","minutes","day","date","month","year","time","tzName","locales","options","offset","timeZone"],"mappings":";;AAEO,MAAMA,UAAeC,EAAW;AAAA;AAAA,EAGrC,OAAO,GAAGC,MAAOC,GAAM;AACrB,WAAOA,EAAK,SAAS,IAAIH,EAAO,GAAGG,GAAMD,CAAE,IAAI,IAAIF,EAAO,KAAK,IAAG,GAAIE,CAAE;AAAA,EAC1E;AAAA;AAAA;AAAA,EAMA,cAAc;AACZ,UAAM,CAACE,GAAMC,GAAOC,CAAO,IAAI,KAAK,aAAY,GAC1CJ,IAAK,GAAGE,CAAI,GAAGC,CAAK,IAAIC,CAAO;AACrC,WAAO,KAAK,SAAS,YAAW,EAAG,MAAM,GAAG,EAAE,IAAIJ;AAAA,EACpD;AAAA,EACA,WAAW;AAET,WAAO,GAAG,KAAK,aAAY,CAAE,IAAI,KAAK,aAAY,CAAE;AAAA,EACtD;AAAA,EACA,eAAe;AAEb,UAAM,CAACK,GAAKC,GAAMC,GAAOC,CAAI,IAAI,KAAK,SAAS,cAAc,MAAM,GAAG;AAEtE,WAAO,GAAGH,GAAK,MAAM,GAAG,EAAE,CAAC,IAAqBE,CAAK,IAAID,CAAI,IAAIE,CAAI;AAAA,EACvE;AAAA,EACA,eAAe;AAEb,UAAMC,IAAO,KAAK,SAAS,YAAW,EAAG,MAAM,GAAG,EAAE,CAAC,GAC/C,CAACP,GAAMC,GAAOC,CAAO,IAAI,KAAK,aAAY;AAEhD,WAAO,GAAGK,CAAI,OAAOP,CAAI,GAAGC,CAAK,GAAGC,CAAO,KAAKM,EAAO,KAAK,UAAU,IAAI,CAAC;AAAA,EAC7E;AAAA,EACA,eAAeC,GAASC,GAAS;AAC/B,WAAO,KAAK,UAAU,eAAe,KAAK,MAAMD,GAAS;AAAA,MACvD,GAAGC;AAAA,MACH,UAAUA,GAAS,YAAY,KAAK;AAAA,IAC1C,CAAK;AAAA,EACH;AAAA,EACA,mBAAmBD,GAASC,GAAS;AACnC,WAAO,KAAK,UAAU,mBAAmB,KAAK,MAAMD,GAAS;AAAA,MAC3D,GAAGC;AAAA,MACH,UAAUA,GAAS,YAAY,KAAK;AAAA,IAC1C,CAAK;AAAA,EACH;AAAA,EACA,mBAAmBD,GAASC,GAAS;AACnC,WAAO,KAAK,UAAU,mBAAmB,KAAK,MAAMD,GAAS;AAAA,MAC3D,GAAGC;AAAA,MACH,UAAUA,GAAS,YAAY,KAAK;AAAA,IAC1C,CAAK;AAAA,EACH;AAAA;AAAA;AAAA,EAMA,eAAe;AACb,UAAMC,IAAS,KAAK,kBAAiB,GAC/BX,IAAOW,IAAS,IAAI,MAAM,KAC1BV,IAAQ,OAAO,KAAK,MAAM,KAAK,IAAIU,CAAM,IAAI,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG,GACjET,IAAU,OAAO,KAAK,IAAIS,CAAM,IAAI,EAAE,EAAE,SAAS,GAAG,GAAG;AAC7D,WAAO,CAACX,GAAMC,GAAOC,CAAO;AAAA,EAC9B;AAAA;AAAA,EAIA,aAAaU,GAAU;AACrB,WAAO,IAAIhB,EAAO,CAAC,MAAMgB,CAAQ;AAAA,EACnC;AAAA;AAAA,EAIA,CAAC,uBAAO,IAAI,mBAAmB,CAAC,EAAER,GAAM;AACtC,WAAO,IAAIR,EAAO,CAAC,IAAI,KAAKQ,CAAI,GAAG,KAAK,QAAQ;AAAA,EAClD;AAAA;AAGF;","x_google_ignoreList":[0]}