@rpcbase/ui 0.280.0 → 0.281.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 (518) hide show
  1. package/dist/components/AddressAutocompleteInput/index.d.ts +1 -1
  2. package/dist/components/AddressAutocompleteInput/index.d.ts.map +1 -1
  3. package/dist/components/ApplePayButton/index.d.ts +1 -1
  4. package/dist/components/ApplePayButton/index.d.ts.map +1 -1
  5. package/dist/components/Checkbox/index.d.ts +1 -1
  6. package/dist/components/Checkbox/index.d.ts.map +1 -1
  7. package/dist/components/DayPickerField/index.d.ts +2 -2
  8. package/dist/components/DayPickerField/index.d.ts.map +1 -1
  9. package/dist/components/Dialog/index.d.ts +9 -9
  10. package/dist/components/Dialog/index.d.ts.map +1 -1
  11. package/dist/components/FilesUploadField/index.d.ts +1 -1
  12. package/dist/components/FilesUploadField/index.d.ts.map +1 -1
  13. package/dist/components/HourPickerField/index.d.ts +2 -2
  14. package/dist/components/HourPickerField/index.d.ts.map +1 -1
  15. package/dist/components/I18nField/index.d.ts +1 -1
  16. package/dist/components/I18nField/index.d.ts.map +1 -1
  17. package/dist/components/Image/index.d.ts +1 -1
  18. package/dist/components/Image/index.d.ts.map +1 -1
  19. package/dist/components/ImagesField/index.d.ts +1 -1
  20. package/dist/components/ImagesField/index.d.ts.map +1 -1
  21. package/dist/components/Input/index.d.ts +1 -1
  22. package/dist/components/Input/index.d.ts.map +1 -1
  23. package/dist/components/Notifications/NotificationsButton.d.ts +1 -1
  24. package/dist/components/Notifications/NotificationsButton.d.ts.map +1 -1
  25. package/dist/components/Notifications/NotificationsDrawer.d.ts +1 -1
  26. package/dist/components/Notifications/NotificationsDrawer.d.ts.map +1 -1
  27. package/dist/components/Notifications/NotificationsSettings.d.ts +1 -1
  28. package/dist/components/Notifications/NotificationsSettings.d.ts.map +1 -1
  29. package/dist/components/PhoneNumberInput/suggestions.d.ts +3 -3
  30. package/dist/components/PhoneNumberInput/suggestions.d.ts.map +1 -1
  31. package/dist/components/Select/index.d.ts +2 -2
  32. package/dist/components/Select/index.d.ts.map +1 -1
  33. package/dist/components/header/MenuPopover/index.d.ts +1 -1
  34. package/dist/components/header/MenuPopover/index.d.ts.map +1 -1
  35. package/dist/index.js +12 -12
  36. package/dist/index10.js +6 -4
  37. package/dist/index10.js.map +1 -1
  38. package/dist/index12.js.map +1 -1
  39. package/dist/index13.js.map +1 -1
  40. package/dist/index14.js.map +1 -1
  41. package/dist/index15.js.map +1 -1
  42. package/dist/index154.js +19 -7
  43. package/dist/index154.js.map +1 -1
  44. package/dist/index16.js +36 -45
  45. package/dist/index16.js.map +1 -1
  46. package/dist/index160.js +3 -3
  47. package/dist/index160.js.map +1 -1
  48. package/dist/index166.js +5 -5
  49. package/dist/index166.js.map +1 -1
  50. package/dist/index172.js +27 -25
  51. package/dist/index172.js.map +1 -1
  52. package/dist/index181.js +1 -1
  53. package/dist/index181.js.map +1 -1
  54. package/dist/index182.js +145 -162
  55. package/dist/index182.js.map +1 -1
  56. package/dist/index184.js +6 -8
  57. package/dist/index184.js.map +1 -1
  58. package/dist/index186.js +2 -8
  59. package/dist/index186.js.map +1 -1
  60. package/dist/index19.js +1 -1
  61. package/dist/index19.js.map +1 -1
  62. package/dist/index195.js +1 -1
  63. package/dist/index195.js.map +1 -1
  64. package/dist/index196.js +2 -2
  65. package/dist/index196.js.map +1 -1
  66. package/dist/index197.js +1 -1
  67. package/dist/index197.js.map +1 -1
  68. package/dist/index198.js +16 -15
  69. package/dist/index198.js.map +1 -1
  70. package/dist/index199.js +13 -17
  71. package/dist/index199.js.map +1 -1
  72. package/dist/index200.js +3 -2
  73. package/dist/index200.js.map +1 -1
  74. package/dist/index207.js +5 -90
  75. package/dist/index207.js.map +1 -1
  76. package/dist/index208.js +15 -3
  77. package/dist/index208.js.map +1 -1
  78. package/dist/index209.js +102 -22
  79. package/dist/index209.js.map +1 -1
  80. package/dist/index210.js +3 -28
  81. package/dist/index210.js.map +1 -1
  82. package/dist/index211.js +23 -19
  83. package/dist/index211.js.map +1 -1
  84. package/dist/index212.js +27 -6
  85. package/dist/index212.js.map +1 -1
  86. package/dist/index213.js +19 -14
  87. package/dist/index213.js.map +1 -1
  88. package/dist/index214.js +5 -6
  89. package/dist/index214.js.map +1 -1
  90. package/dist/index215.js +14 -26
  91. package/dist/index215.js.map +1 -1
  92. package/dist/index216.js +7 -22
  93. package/dist/index216.js.map +1 -1
  94. package/dist/index217.js +27 -6
  95. package/dist/index217.js.map +1 -1
  96. package/dist/index218.js +23 -5
  97. package/dist/index218.js.map +1 -1
  98. package/dist/index219.js +6 -4
  99. package/dist/index219.js.map +1 -1
  100. package/dist/index220.js +5 -4
  101. package/dist/index220.js.map +1 -1
  102. package/dist/index221.js +4 -24
  103. package/dist/index221.js.map +1 -1
  104. package/dist/index222.js +4 -3
  105. package/dist/index222.js.map +1 -1
  106. package/dist/index223.js +21 -21
  107. package/dist/index223.js.map +1 -1
  108. package/dist/index224.js +3 -23
  109. package/dist/index224.js.map +1 -1
  110. package/dist/index225.js +23 -6
  111. package/dist/index225.js.map +1 -1
  112. package/dist/index226.js +22 -9
  113. package/dist/index226.js.map +1 -1
  114. package/dist/index227.js +5 -17
  115. package/dist/index227.js.map +1 -1
  116. package/dist/index228.js +8 -49
  117. package/dist/index228.js.map +1 -1
  118. package/dist/index229.js +18 -5
  119. package/dist/index229.js.map +1 -1
  120. package/dist/index230.js +50 -19
  121. package/dist/index230.js.map +1 -1
  122. package/dist/index231.js +20 -28
  123. package/dist/index231.js.map +1 -1
  124. package/dist/index232.js +27 -104
  125. package/dist/index232.js.map +1 -1
  126. package/dist/index233.js +98 -33
  127. package/dist/index233.js.map +1 -1
  128. package/dist/index234.js +28 -113
  129. package/dist/index234.js.map +1 -1
  130. package/dist/index235.js +117 -11
  131. package/dist/index235.js.map +1 -1
  132. package/dist/index236.js +12 -4
  133. package/dist/index236.js.map +1 -1
  134. package/dist/index237.js +4 -15
  135. package/dist/index237.js.map +1 -1
  136. package/dist/index238.js +13 -62
  137. package/dist/index238.js.map +1 -1
  138. package/dist/index239.js +64 -9
  139. package/dist/index239.js.map +1 -1
  140. package/dist/index240.js +10 -106
  141. package/dist/index240.js.map +1 -1
  142. package/dist/index241.js +107 -13
  143. package/dist/index241.js.map +1 -1
  144. package/dist/index242.js +16 -13
  145. package/dist/index242.js.map +1 -1
  146. package/dist/index243.js +13 -5
  147. package/dist/index243.js.map +1 -1
  148. package/dist/index244.js +4 -316
  149. package/dist/index244.js.map +1 -1
  150. package/dist/index245.js +315 -58
  151. package/dist/index245.js.map +1 -1
  152. package/dist/index246.js +58 -223
  153. package/dist/index246.js.map +1 -1
  154. package/dist/index247.js +215 -318
  155. package/dist/index247.js.map +1 -1
  156. package/dist/index248.js +250 -306
  157. package/dist/index248.js.map +1 -1
  158. package/dist/index249.js +308 -173
  159. package/dist/index249.js.map +1 -1
  160. package/dist/index250.js +178 -7
  161. package/dist/index250.js.map +1 -1
  162. package/dist/index251.js +8 -15
  163. package/dist/index251.js.map +1 -1
  164. package/dist/index252.js +41 -5
  165. package/dist/index252.js.map +1 -1
  166. package/dist/index253.js +46 -38
  167. package/dist/index253.js.map +1 -1
  168. package/dist/index254.js +7 -50
  169. package/dist/index254.js.map +1 -1
  170. package/dist/index255.js +49 -6
  171. package/dist/index255.js.map +1 -1
  172. package/dist/index256.js +48 -46
  173. package/dist/index256.js.map +1 -1
  174. package/dist/index257.js +6 -51
  175. package/dist/index257.js.map +1 -1
  176. package/dist/index258.js +10 -9
  177. package/dist/index258.js.map +1 -1
  178. package/dist/index259.js +60 -8
  179. package/dist/index259.js.map +1 -1
  180. package/dist/index26.js.map +1 -1
  181. package/dist/index260.js +41 -60
  182. package/dist/index260.js.map +1 -1
  183. package/dist/index261.js +88 -34
  184. package/dist/index261.js.map +1 -1
  185. package/dist/index262.js +47 -94
  186. package/dist/index262.js.map +1 -1
  187. package/dist/index263.js +36 -49
  188. package/dist/index263.js.map +1 -1
  189. package/dist/index264.js +45 -32
  190. package/dist/index264.js.map +1 -1
  191. package/dist/index265.js +47 -46
  192. package/dist/index265.js.map +1 -1
  193. package/dist/index266.js +18 -48
  194. package/dist/index266.js.map +1 -1
  195. package/dist/index267.js +174 -15
  196. package/dist/index267.js.map +1 -1
  197. package/dist/index268.js +47 -169
  198. package/dist/index268.js.map +1 -1
  199. package/dist/index269.js +17 -34
  200. package/dist/index269.js.map +1 -1
  201. package/dist/index270.js +59 -10
  202. package/dist/index270.js.map +1 -1
  203. package/dist/index271.js +10 -66
  204. package/dist/index271.js.map +1 -1
  205. package/dist/index272.js +4 -4
  206. package/dist/index273.js +71 -69
  207. package/dist/index273.js.map +1 -1
  208. package/dist/index274.js +158 -152
  209. package/dist/index274.js.map +1 -1
  210. package/dist/index275.js +7 -13
  211. package/dist/index275.js.map +1 -1
  212. package/dist/index276.js +12 -5
  213. package/dist/index276.js.map +1 -1
  214. package/dist/index277.js +12 -6
  215. package/dist/index277.js.map +1 -1
  216. package/dist/index278.js +11 -12
  217. package/dist/index278.js.map +1 -1
  218. package/dist/index279.js +65 -9
  219. package/dist/index279.js.map +1 -1
  220. package/dist/index280.js +6 -74
  221. package/dist/index280.js.map +1 -1
  222. package/dist/index281.js +25 -6
  223. package/dist/index281.js.map +1 -1
  224. package/dist/index282.js +24 -24
  225. package/dist/index282.js.map +1 -1
  226. package/dist/index283.js +125 -24
  227. package/dist/index283.js.map +1 -1
  228. package/dist/index284.js +52 -115
  229. package/dist/index284.js.map +1 -1
  230. package/dist/index285.js +59 -55
  231. package/dist/index285.js.map +1 -1
  232. package/dist/index286.js +48 -61
  233. package/dist/index286.js.map +1 -1
  234. package/dist/index287.js +5 -48
  235. package/dist/index287.js.map +1 -1
  236. package/dist/index288.js +14 -8
  237. package/dist/index288.js.map +1 -1
  238. package/dist/index289.js +18 -14
  239. package/dist/index289.js.map +1 -1
  240. package/dist/index290.js +10 -17
  241. package/dist/index290.js.map +1 -1
  242. package/dist/index291.js +23 -11
  243. package/dist/index291.js.map +1 -1
  244. package/dist/index292.js +52 -25
  245. package/dist/index292.js.map +1 -1
  246. package/dist/index293.js +6 -52
  247. package/dist/index293.js.map +1 -1
  248. package/dist/index294.js +137 -5
  249. package/dist/index294.js.map +1 -1
  250. package/dist/index295.js +59 -149
  251. package/dist/index295.js.map +1 -1
  252. package/dist/index296.js +90 -49
  253. package/dist/index296.js.map +1 -1
  254. package/dist/index297.js +11 -117
  255. package/dist/index297.js.map +1 -1
  256. package/dist/index298.js +863 -11
  257. package/dist/index298.js.map +1 -1
  258. package/dist/index299.js +21 -865
  259. package/dist/index299.js.map +1 -1
  260. package/dist/index3.js.map +1 -1
  261. package/dist/index300.js +417 -27
  262. package/dist/index300.js.map +1 -1
  263. package/dist/index301.js +774 -483
  264. package/dist/index301.js.map +1 -1
  265. package/dist/index302.js +7436 -803
  266. package/dist/index302.js.map +1 -1
  267. package/dist/index303.js +7 -7429
  268. package/dist/index303.js.map +1 -1
  269. package/dist/index304.js +12 -6
  270. package/dist/index304.js.map +1 -1
  271. package/dist/index305.js +5 -12
  272. package/dist/index305.js.map +1 -1
  273. package/dist/index306.js +3 -3
  274. package/dist/index306.js.map +1 -1
  275. package/dist/index307.js +469 -5
  276. package/dist/index307.js.map +1 -1
  277. package/dist/index308.js +32 -464
  278. package/dist/index308.js.map +1 -1
  279. package/dist/index309.js +18 -36
  280. package/dist/index309.js.map +1 -1
  281. package/dist/index310.js +28 -17
  282. package/dist/index310.js.map +1 -1
  283. package/dist/index311.js +4 -30
  284. package/dist/index311.js.map +1 -1
  285. package/dist/index312.js +59 -4
  286. package/dist/index312.js.map +1 -1
  287. package/dist/index313.js +11 -59
  288. package/dist/index313.js.map +1 -1
  289. package/dist/index314.js +5 -9
  290. package/dist/index314.js.map +1 -1
  291. package/dist/index315.js +9 -5
  292. package/dist/index315.js.map +1 -1
  293. package/dist/index316.js +12 -9
  294. package/dist/index316.js.map +1 -1
  295. package/dist/index317.js +3 -13
  296. package/dist/index317.js.map +1 -1
  297. package/dist/index318.js +17 -3
  298. package/dist/index318.js.map +1 -1
  299. package/dist/index319.js +23 -14
  300. package/dist/index319.js.map +1 -1
  301. package/dist/index320.js +39 -23
  302. package/dist/index320.js.map +1 -1
  303. package/dist/index321.js +5 -41
  304. package/dist/index321.js.map +1 -1
  305. package/dist/index322.js +25 -5
  306. package/dist/index322.js.map +1 -1
  307. package/dist/index323.js +18 -24
  308. package/dist/index323.js.map +1 -1
  309. package/dist/index324.js +32 -17
  310. package/dist/index324.js.map +1 -1
  311. package/dist/index325.js +5 -34
  312. package/dist/index325.js.map +1 -1
  313. package/dist/index326.js +9 -5
  314. package/dist/index326.js.map +1 -1
  315. package/dist/index327.js +7 -8
  316. package/dist/index327.js.map +1 -1
  317. package/dist/index328.js +9 -8
  318. package/dist/index328.js.map +1 -1
  319. package/dist/index329.js +10 -9
  320. package/dist/index329.js.map +1 -1
  321. package/dist/index330.js +7 -10
  322. package/dist/index330.js.map +1 -1
  323. package/dist/index331.js +75 -7
  324. package/dist/index331.js.map +1 -1
  325. package/dist/index332.js +153 -66
  326. package/dist/index332.js.map +1 -1
  327. package/dist/index333.js +99 -147
  328. package/dist/index333.js.map +1 -1
  329. package/dist/index334.js +13 -113
  330. package/dist/index334.js.map +1 -1
  331. package/dist/index335.js +78 -12
  332. package/dist/index335.js.map +1 -1
  333. package/dist/index336.js +23 -57
  334. package/dist/index336.js.map +1 -1
  335. package/dist/index337.js +12 -45
  336. package/dist/index337.js.map +1 -1
  337. package/dist/index338.js +16 -13
  338. package/dist/index338.js.map +1 -1
  339. package/dist/index339.js +100 -15
  340. package/dist/index339.js.map +1 -1
  341. package/dist/index340.js +50 -95
  342. package/dist/index340.js.map +1 -1
  343. package/dist/index341.js +57 -5
  344. package/dist/index341.js.map +1 -1
  345. package/dist/index342.js +41 -78
  346. package/dist/index342.js.map +1 -1
  347. package/dist/index343.js +100 -58
  348. package/dist/index343.js.map +1 -1
  349. package/dist/index344.js +46 -104
  350. package/dist/index344.js.map +1 -1
  351. package/dist/index345.js +39 -51
  352. package/dist/index345.js.map +1 -1
  353. package/dist/index346.js +143 -42
  354. package/dist/index346.js.map +1 -1
  355. package/dist/index347.js +122 -123
  356. package/dist/index347.js.map +1 -1
  357. package/dist/index348.js +224 -108
  358. package/dist/index348.js.map +1 -1
  359. package/dist/index349.js +158 -174
  360. package/dist/index349.js.map +1 -1
  361. package/dist/index350.js +213 -144
  362. package/dist/index350.js.map +1 -1
  363. package/dist/index351.js +5 -309
  364. package/dist/index351.js.map +1 -1
  365. package/dist/index352.js +6 -5
  366. package/dist/index352.js.map +1 -1
  367. package/dist/index353.js +7 -6
  368. package/dist/index353.js.map +1 -1
  369. package/dist/index354.js +4 -5
  370. package/dist/index354.js.map +1 -1
  371. package/dist/index355.js +4 -4
  372. package/dist/index355.js.map +1 -1
  373. package/dist/index356.js +21 -6
  374. package/dist/index356.js.map +1 -1
  375. package/dist/index357.js +10 -21
  376. package/dist/index357.js.map +1 -1
  377. package/dist/index358.js +128 -10
  378. package/dist/index358.js.map +1 -1
  379. package/dist/index359.js +36 -122
  380. package/dist/index359.js.map +1 -1
  381. package/dist/index360.js +64 -38
  382. package/dist/index360.js.map +1 -1
  383. package/dist/index361.js +115 -66
  384. package/dist/index361.js.map +1 -1
  385. package/dist/index362.js +485 -112
  386. package/dist/index362.js.map +1 -1
  387. package/dist/index363.js +7 -490
  388. package/dist/index363.js.map +1 -1
  389. package/dist/index364.js +1 -1
  390. package/dist/index364.js.map +1 -1
  391. package/dist/index367.js +2 -9
  392. package/dist/index367.js.map +1 -1
  393. package/dist/index368.js +26 -5
  394. package/dist/index368.js.map +1 -1
  395. package/dist/index369.js +43 -27
  396. package/dist/index369.js.map +1 -1
  397. package/dist/index370.js +35 -46
  398. package/dist/index370.js.map +1 -1
  399. package/dist/index371.js +16 -27
  400. package/dist/index371.js.map +1 -1
  401. package/dist/index372.js +41 -16
  402. package/dist/index372.js.map +1 -1
  403. package/dist/index373.js +11 -42
  404. package/dist/index373.js.map +1 -1
  405. package/dist/index374.js +10 -14
  406. package/dist/index374.js.map +1 -1
  407. package/dist/index375.js +51 -9
  408. package/dist/index375.js.map +1 -1
  409. package/dist/index376.js +40 -53
  410. package/dist/index376.js.map +1 -1
  411. package/dist/index377.js +17 -43
  412. package/dist/index377.js.map +1 -1
  413. package/dist/index378.js +4 -15
  414. package/dist/index378.js.map +1 -1
  415. package/dist/index379.js +4 -4
  416. package/dist/index379.js.map +1 -1
  417. package/dist/index380.js +9 -4
  418. package/dist/index380.js.map +1 -1
  419. package/dist/index381.js +304 -9
  420. package/dist/index381.js.map +1 -1
  421. package/dist/index382.js +4 -339
  422. package/dist/index382.js.map +1 -1
  423. package/dist/index383.js +21 -5
  424. package/dist/index383.js.map +1 -1
  425. package/dist/index384.js +106 -16
  426. package/dist/index384.js.map +1 -1
  427. package/dist/index385.js +19 -109
  428. package/dist/index385.js.map +1 -1
  429. package/dist/index386.js +18 -18
  430. package/dist/index386.js.map +1 -1
  431. package/dist/index387.js +14 -19
  432. package/dist/index387.js.map +1 -1
  433. package/dist/index388.js +12 -4
  434. package/dist/index388.js.map +1 -1
  435. package/dist/index389.js +113 -20
  436. package/dist/index389.js.map +1 -1
  437. package/dist/index390.js +5 -11
  438. package/dist/index390.js.map +1 -1
  439. package/dist/index391.js +28 -85
  440. package/dist/index391.js.map +1 -1
  441. package/dist/index392.js +9 -9
  442. package/dist/index392.js.map +1 -1
  443. package/dist/index393.js +6 -29
  444. package/dist/index393.js.map +1 -1
  445. package/dist/index394.js +254 -10
  446. package/dist/index394.js.map +1 -1
  447. package/dist/index395.js +12 -6
  448. package/dist/index395.js.map +1 -1
  449. package/dist/index396.js +11 -252
  450. package/dist/index396.js.map +1 -1
  451. package/dist/index397.js +6 -11
  452. package/dist/index397.js.map +1 -1
  453. package/dist/index398.js +22 -10
  454. package/dist/index398.js.map +1 -1
  455. package/dist/index399.js +22 -6
  456. package/dist/index399.js.map +1 -1
  457. package/dist/index4.js.map +1 -1
  458. package/dist/index400.js +103 -21
  459. package/dist/index400.js.map +1 -1
  460. package/dist/index401.js +15 -23
  461. package/dist/index401.js.map +1 -1
  462. package/dist/index402.js +11 -108
  463. package/dist/index402.js.map +1 -1
  464. package/dist/index403.js +10 -15
  465. package/dist/index403.js.map +1 -1
  466. package/dist/index404.js +237 -10
  467. package/dist/index404.js.map +1 -1
  468. package/dist/index405.js +27 -9
  469. package/dist/index405.js.map +1 -1
  470. package/dist/index406.js +33 -238
  471. package/dist/index406.js.map +1 -1
  472. package/dist/index407.js +11 -30
  473. package/dist/index407.js.map +1 -1
  474. package/dist/index408.js +118 -48
  475. package/dist/index408.js.map +1 -1
  476. package/dist/index409.js +39 -11
  477. package/dist/index409.js.map +1 -1
  478. package/dist/index410.js +18 -121
  479. package/dist/index410.js.map +1 -1
  480. package/dist/index411.js +11 -39
  481. package/dist/index411.js.map +1 -1
  482. package/dist/index412.js +21 -24
  483. package/dist/index412.js.map +1 -1
  484. package/dist/index413.js +17 -11
  485. package/dist/index413.js.map +1 -1
  486. package/dist/index414.js +10 -20
  487. package/dist/index414.js.map +1 -1
  488. package/dist/index415.js +4 -17
  489. package/dist/index415.js.map +1 -1
  490. package/dist/index416.js +300 -14
  491. package/dist/index416.js.map +1 -1
  492. package/dist/index417.js +61 -323
  493. package/dist/index417.js.map +1 -1
  494. package/dist/index418.js +4 -63
  495. package/dist/index418.js.map +1 -1
  496. package/dist/index419.js +28 -4
  497. package/dist/index419.js.map +1 -1
  498. package/dist/index420.js +468 -25
  499. package/dist/index420.js.map +1 -1
  500. package/dist/index421.js +250 -452
  501. package/dist/index421.js.map +1 -1
  502. package/dist/index6.js.map +1 -1
  503. package/dist/index7.js +91 -133
  504. package/dist/index7.js.map +1 -1
  505. package/dist/index70.js +2 -2
  506. package/dist/index70.js.map +1 -1
  507. package/dist/index71.js +11 -4
  508. package/dist/index71.js.map +1 -1
  509. package/dist/index72.js +1 -3
  510. package/dist/index72.js.map +1 -1
  511. package/dist/index8.js.map +1 -1
  512. package/dist/index9.js +16 -19
  513. package/dist/index9.js.map +1 -1
  514. package/dist/test-only/TestCoverageTestBadge/index.d.ts +1 -1
  515. package/dist/test-only/TestCoverageTestBadge/index.d.ts.map +1 -1
  516. package/package.json +15 -15
  517. package/dist/index422.js +0 -272
  518. package/dist/index422.js.map +0 -1
package/dist/index420.js CHANGED
@@ -1,31 +1,474 @@
1
1
  import { cn as e } from "./index12.js";
2
- import { c as t } from "react/compiler-runtime";
3
- import { Bell as n } from "lucide-react";
4
- import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
- //#region src/components/Notifications/NotificationsButton.tsx
6
- function a(a) {
7
- let o = t(12), { unseenCount: s, unreadCount: c, onClick: l, className: u } = a, d = Number.isFinite(s) ? s : c, f;
8
- o[0] === d ? f = o[1] : (f = Number.isFinite(d) ? Math.max(0, Math.floor(d ?? 0)) : 0, o[0] = d, o[1] = f);
9
- let p = f, m;
10
- o[2] === u ? m = o[3] : (m = e("relative inline-flex h-9 w-9 items-center justify-center rounded-md border bg-background text-foreground hover:bg-accent", u), o[2] = u, o[3] = m);
11
- let h = p > 0 ? `Notifications (${p} new)` : "Notifications", g;
12
- o[4] === Symbol.for("react.memo_cache_sentinel") ? (g = /* @__PURE__ */ r(n, { className: "h-4 w-4" }), o[4] = g) : g = o[4];
13
- let _;
14
- o[5] === p ? _ = o[6] : (_ = p > 0 ? /* @__PURE__ */ r("span", {
15
- className: "absolute -right-1 -top-1 inline-flex min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[10px] font-semibold leading-4 text-primary-foreground",
16
- "aria-hidden": "true",
17
- children: p > 99 ? "99+" : String(p)
18
- }) : null, o[5] = p, o[6] = _);
19
- let v;
20
- return o[7] !== l || o[8] !== m || o[9] !== h || o[10] !== _ ? (v = /* @__PURE__ */ i("button", {
2
+ import { DialogBackdrop as t } from "./index199.js";
3
+ import { DialogClose as n } from "./index212.js";
4
+ import { DialogPopup as r } from "./index279.js";
5
+ import { DialogPortal as i } from "./index282.js";
6
+ import { DialogRoot as a } from "./index287.js";
7
+ import { DialogTitle as o } from "./index288.js";
8
+ import { c as s } from "react/compiler-runtime";
9
+ import { createContext as c, useCallback as l, useContext as u, useEffect as d, useMemo as f, useRef as p, useState as m } from "react";
10
+ import { Loader2 as h, MoreVertical as g, X as _ } from "lucide-react";
11
+ import { jsx as v, jsxs as y } from "react/jsx-runtime";
12
+ //#region src/components/Notifications/NotificationsDrawer.tsx
13
+ var b = (e) => {
14
+ let t = Date.parse(e);
15
+ return Number.isFinite(t) ? t : 0;
16
+ }, x = (e) => {
17
+ let t = new Date(b(e));
18
+ return Number.isFinite(t.getTime()) ? `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, "0")}-${String(t.getDate()).padStart(2, "0")}` : "unknown";
19
+ }, S = (e) => {
20
+ if (e === "unknown") return "Unknown date";
21
+ let [t, n, r] = e.split("-"), i = Number(t), a = Number(n), o = Number(r);
22
+ if (!Number.isFinite(i) || !Number.isFinite(a) || !Number.isFinite(o)) return "Unknown date";
23
+ let s = new Date(i, a - 1, o);
24
+ if (!Number.isFinite(s.getTime())) return "Unknown date";
25
+ let c = (/* @__PURE__ */ new Date()).getFullYear() !== i;
26
+ return s.toLocaleDateString(void 0, c ? {
27
+ weekday: "short",
28
+ month: "short",
29
+ day: "numeric",
30
+ year: "numeric"
31
+ } : {
32
+ weekday: "short",
33
+ month: "short",
34
+ day: "numeric"
35
+ });
36
+ }, C = (e) => {
37
+ let t = e.data?.link?.trim();
38
+ if (t) return t;
39
+ let n = e.platform?.webpush;
40
+ if (!n || typeof n != "object" || Array.isArray(n)) return "";
41
+ let r = n.fcmOptions;
42
+ if (!r || typeof r != "object" || Array.isArray(r)) return "";
43
+ let i = r.link;
44
+ return typeof i == "string" ? i.trim() : "";
45
+ }, w = (e) => e.data?.linkMode === "merge_current_search" ? "merge_current_search" : "navigate", T = (e) => {
46
+ let t = C(e);
47
+ return t ? {
48
+ link: t,
49
+ mode: w(e)
50
+ } : null;
51
+ }, E = (e) => e ? e.mode === "merge_current_search" ? "Open" : e.link : "", D = (e) => {
52
+ window.history.pushState(window.history.state, "", e), window.dispatchEvent(new PopStateEvent("popstate", { state: window.history.state }));
53
+ }, O = (e) => {
54
+ if (e.mode === "merge_current_search") {
55
+ let t = new URL(window.location.href), n = new URL(e.link, t);
56
+ n.searchParams.forEach((e, n) => {
57
+ t.searchParams.set(n, e);
58
+ }), n.hash && (t.hash = n.hash), D(`${t.pathname}${t.search}${t.hash}`);
59
+ return;
60
+ }
61
+ window.location.href = e.link;
62
+ }, k = (e) => {
63
+ let t = [], n = null;
64
+ for (let r of e) {
65
+ let e = x(r.createdAt);
66
+ e !== n && (n = e, t.push({
67
+ key: e,
68
+ label: S(e),
69
+ items: []
70
+ })), t[t.length - 1].items.push(r);
71
+ }
72
+ return t;
73
+ }, A = () => typeof window > "u" || !("Notification" in window) ? "unsupported" : window.Notification.permission, j = c(null);
74
+ function M({ open: s, onOpenChange: c, className: p, limit: g = 50, defaultUnreadOnly: b = !1, realtimeContext: x }) {
75
+ let S = u(x ?? j), [C, w] = m([]), [T, E] = m(0), [D, O] = m(0), [M, F] = m(!1), [I, L] = m(null), [R, z] = m(b), [B, V] = m(() => A()), [H, U] = m(!1), W = S?.notifications ?? C, G = S?.unreadCount ?? T, K = S?.unseenCount ?? D, ee = S?.loading ?? M, q = S?.error ? S.error instanceof Error ? S.error.message : String(S.error) : I, J = f(() => W.slice(0, g), [g, W]), Y = f(() => J.filter((e) => !e.readAt), [J]), X = f(() => J.filter((e) => !!e.readAt), [J]), Z = f(() => k(Y), [Y]), te = f(() => k(X), [X]), Q = l(async ({ unreadOnly: e, markSeen: t }) => {
76
+ F(!0), L(null);
77
+ try {
78
+ let n = await fetch("/api/rb/notifications", {
79
+ method: "POST",
80
+ headers: { "Content-Type": "application/json" },
81
+ credentials: "include",
82
+ body: JSON.stringify({
83
+ limit: g,
84
+ unreadOnly: e,
85
+ markSeen: t
86
+ })
87
+ }), r = await n.json().catch(() => null);
88
+ if (!n.ok || !r?.ok) {
89
+ L(r?.error || "Unable to load notifications.");
90
+ return;
91
+ }
92
+ let i = Array.isArray(r.notifications) ? r.notifications : [];
93
+ w(i), E(Number.isFinite(r.unreadCount) ? Math.max(0, Math.floor(r.unreadCount ?? 0)) : 0), O(Number.isFinite(r.unseenCount) ? Math.max(0, Math.floor(r.unseenCount ?? 0)) : 0);
94
+ } catch {
95
+ L("Unable to load notifications.");
96
+ } finally {
97
+ F(!1);
98
+ }
99
+ }, [g]);
100
+ d(() => {
101
+ if (s) {
102
+ if (S) {
103
+ (async () => {
104
+ try {
105
+ await fetch("/api/rb/notifications", {
106
+ method: "POST",
107
+ headers: { "Content-Type": "application/json" },
108
+ credentials: "include",
109
+ keepalive: !0,
110
+ body: JSON.stringify({
111
+ limit: 1,
112
+ markSeen: !0
113
+ })
114
+ });
115
+ } catch {
116
+ return;
117
+ }
118
+ })();
119
+ return;
120
+ }
121
+ Q({
122
+ unreadOnly: R,
123
+ markSeen: !0
124
+ });
125
+ }
126
+ }, [
127
+ s,
128
+ S,
129
+ Q,
130
+ R
131
+ ]), d(() => {
132
+ s && (S || Q({
133
+ unreadOnly: R,
134
+ markSeen: !1
135
+ }));
136
+ }, [
137
+ s,
138
+ S,
139
+ Q,
140
+ R
141
+ ]), d(() => {
142
+ if (!s || (V(A()), typeof navigator > "u" || !navigator.permissions?.query)) return;
143
+ let e = null, t = !1, n = () => {
144
+ V(A());
145
+ };
146
+ try {
147
+ navigator.permissions.query({ name: "notifications" }).then((r) => {
148
+ t || (e = r, n(), r.addEventListener("change", n));
149
+ }).catch(() => {});
150
+ } catch {
151
+ return;
152
+ }
153
+ return () => {
154
+ t = !0, e?.removeEventListener("change", n);
155
+ };
156
+ }, [s]);
157
+ let ne = async () => {
158
+ if (typeof window > "u" || !("Notification" in window)) {
159
+ V("unsupported");
160
+ return;
161
+ }
162
+ U(!0);
163
+ try {
164
+ let e = await window.Notification.requestPermission();
165
+ V(e);
166
+ } catch {
167
+ V(A());
168
+ } finally {
169
+ U(!1);
170
+ }
171
+ }, re = async (e) => {
172
+ try {
173
+ let t = await fetch(`/api/rb/notifications/${encodeURIComponent(e)}/read`, {
174
+ method: "POST",
175
+ headers: { "Content-Type": "application/json" },
176
+ credentials: "include",
177
+ keepalive: !0,
178
+ body: "{}"
179
+ }), n = await t.json().catch(() => null);
180
+ if (!t.ok || !n?.ok) return;
181
+ let r = (/* @__PURE__ */ new Date()).toISOString();
182
+ if (S) return;
183
+ w((t) => {
184
+ let n = t.find((t) => t.id === e);
185
+ return n && !n.readAt && E((e) => Math.max(0, e - 1)), n && !n.seenAt && O((e) => Math.max(0, e - 1)), t.map((t) => t.id === e && !t.readAt ? {
186
+ ...t,
187
+ readAt: r,
188
+ ...t.seenAt ? {} : { seenAt: r }
189
+ } : t);
190
+ });
191
+ } catch {
192
+ return;
193
+ }
194
+ }, ie = async (e) => {
195
+ try {
196
+ let t = await fetch(`/api/rb/notifications/${encodeURIComponent(e)}/archive`, {
197
+ method: "POST",
198
+ headers: { "Content-Type": "application/json" },
199
+ credentials: "include",
200
+ body: "{}"
201
+ }), n = await t.json().catch(() => null);
202
+ if (!t.ok || !n?.ok || S) return;
203
+ w((t) => {
204
+ let n = t.find((t) => t.id === e);
205
+ return n && !n.readAt && E((e) => Math.max(0, e - 1)), n && !n.seenAt && O((e) => Math.max(0, e - 1)), t.filter((t) => t.id !== e);
206
+ });
207
+ } catch {
208
+ return;
209
+ }
210
+ }, $ = () => {
211
+ c(!1);
212
+ };
213
+ return /* @__PURE__ */ v(a, {
214
+ open: s,
215
+ onOpenChange: (e) => {
216
+ if (e) {
217
+ c(!0);
218
+ return;
219
+ }
220
+ $();
221
+ },
222
+ children: /* @__PURE__ */ y(i, { children: [/* @__PURE__ */ v(t, {
223
+ className: "fixed inset-0 z-50 bg-black/50",
224
+ onClick: $
225
+ }), /* @__PURE__ */ y(r, {
226
+ className: e("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", p),
227
+ children: [/* @__PURE__ */ y("header", {
228
+ className: "flex items-center justify-between gap-2 border-b px-4 py-3",
229
+ children: [/* @__PURE__ */ y("div", {
230
+ className: "flex min-w-0 flex-col",
231
+ children: [/* @__PURE__ */ v(o, {
232
+ className: "text-sm font-semibold",
233
+ children: "Notifications"
234
+ }), /* @__PURE__ */ v("span", {
235
+ className: "text-xs text-muted-foreground",
236
+ children: G > 0 ? `${G} unread` : K > 0 ? `${K} new` : "All caught up"
237
+ })]
238
+ }), /* @__PURE__ */ y("div", {
239
+ className: "flex items-center gap-2",
240
+ children: [/* @__PURE__ */ v("button", {
241
+ type: "button",
242
+ onClick: () => z((e) => !e),
243
+ className: e("rounded-md border px-2 py-1 text-xs", R ? "bg-accent text-foreground" : "bg-background text-muted-foreground hover:bg-accent"),
244
+ children: R ? "Unread" : "All"
245
+ }), /* @__PURE__ */ v(n, {
246
+ type: "button",
247
+ "aria-label": "Close notifications",
248
+ className: "inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent",
249
+ onClick: $,
250
+ children: /* @__PURE__ */ v(_, { className: "h-4 w-4" })
251
+ })]
252
+ })]
253
+ }), /* @__PURE__ */ y("div", {
254
+ className: "flex-1 overflow-y-auto px-4 pb-3",
255
+ children: [/* @__PURE__ */ v(N, {
256
+ permission: B,
257
+ requesting: H,
258
+ onEnable: ne
259
+ }), ee ? /* @__PURE__ */ v("div", {
260
+ className: "flex items-center justify-center py-10 text-muted-foreground",
261
+ children: /* @__PURE__ */ v(h, { className: "h-4 w-4 animate-spin" })
262
+ }) : q ? /* @__PURE__ */ v("div", {
263
+ className: "py-10 text-center text-sm text-muted-foreground",
264
+ children: q
265
+ }) : J.length === 0 ? /* @__PURE__ */ v("div", {
266
+ className: "py-10 text-center text-sm text-muted-foreground",
267
+ children: "No notifications."
268
+ }) : /* @__PURE__ */ y("div", {
269
+ className: "flex flex-col gap-4",
270
+ children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("div", {
271
+ 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",
272
+ children: "Unread notifications"
273
+ }), Z.length === 0 ? /* @__PURE__ */ v("div", {
274
+ className: "py-6 text-center text-sm text-muted-foreground",
275
+ children: "No unread notifications."
276
+ }) : Z.map((e) => /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("div", {
277
+ className: "sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground",
278
+ children: e.label
279
+ }), /* @__PURE__ */ v("div", {
280
+ className: "-mx-4 flex flex-col divide-y divide-border",
281
+ children: e.items.map((e) => /* @__PURE__ */ v(P, {
282
+ notification: e,
283
+ onMarkRead: re,
284
+ onArchive: ie,
285
+ onAction: $
286
+ }, e.id))
287
+ })] }, `unread:${e.key}`))] }), R ? null : /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("div", {
288
+ 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",
289
+ children: "Previous notifications"
290
+ }), te.length === 0 ? /* @__PURE__ */ v("div", {
291
+ className: "py-6 text-center text-sm text-muted-foreground",
292
+ children: "No previous notifications."
293
+ }) : te.map((e) => /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("div", {
294
+ className: "sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground",
295
+ children: e.label
296
+ }), /* @__PURE__ */ v("div", {
297
+ className: "-mx-4 flex flex-col divide-y divide-border",
298
+ children: e.items.map((e) => /* @__PURE__ */ v(P, {
299
+ notification: e,
300
+ onMarkRead: re,
301
+ onArchive: ie,
302
+ onAction: $
303
+ }, e.id))
304
+ })] }, `previous:${e.key}`))] })]
305
+ })]
306
+ })]
307
+ })] })
308
+ });
309
+ }
310
+ function N(e) {
311
+ let t = s(13), { permission: n, requesting: r, onEnable: i } = e;
312
+ if (n === "granted") return null;
313
+ if (n === "unsupported") {
314
+ let e;
315
+ return t[0] === Symbol.for("react.memo_cache_sentinel") ? (e = /* @__PURE__ */ v("div", {
316
+ className: "mt-3 rounded-md border bg-muted/40 p-3 text-sm text-muted-foreground",
317
+ children: "Browser notifications are not supported by this browser."
318
+ }), t[0] = e) : e = t[0], e;
319
+ }
320
+ let a = n === "denied", o = a ? "Browser notifications are blocked." : "Browser notifications are not enabled.", c;
321
+ t[1] === o ? c = t[2] : (c = /* @__PURE__ */ v("div", {
322
+ className: "text-sm font-medium",
323
+ children: o
324
+ }), t[1] = o, t[2] = c);
325
+ let l = a ? "Enable notifications for this site in your browser settings, then click again." : "Enable browser notifications to receive important alerts.", u;
326
+ t[3] === l ? u = t[4] : (u = /* @__PURE__ */ v("div", {
327
+ className: "mt-1 text-xs text-muted-foreground",
328
+ children: l
329
+ }), t[3] = l, t[4] = u);
330
+ let d = r ? "Enabling..." : "Enable browser notifications", f;
331
+ t[5] !== i || t[6] !== r || t[7] !== d ? (f = /* @__PURE__ */ v("button", {
332
+ type: "button",
333
+ 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",
334
+ disabled: r,
335
+ onClick: i,
336
+ children: d
337
+ }), t[5] = i, t[6] = r, t[7] = d, t[8] = f) : f = t[8];
338
+ let p;
339
+ return t[9] !== c || t[10] !== u || t[11] !== f ? (p = /* @__PURE__ */ y("div", {
340
+ className: "mt-3 rounded-md border bg-muted/40 p-3",
341
+ children: [
342
+ c,
343
+ u,
344
+ f
345
+ ]
346
+ }), t[9] = c, t[10] = u, t[11] = f, t[12] = p) : p = t[12], p;
347
+ }
348
+ function P(t) {
349
+ let n = s(49), { notification: r, onMarkRead: i, onArchive: a, onAction: o } = t, [c, l] = m(!1), u = p(null), f = p(null), h = !r.readAt, _, x;
350
+ n[0] === r ? (_ = n[1], x = n[2]) : (_ = T(r), x = E(_), n[0] = r, n[1] = _, n[2] = x);
351
+ let S = x, C;
352
+ if (n[3] !== r.createdAt) {
353
+ bb0: {
354
+ let e = new Date(b(r.createdAt));
355
+ if (!Number.isFinite(e.getTime())) {
356
+ C = "";
357
+ break bb0;
358
+ }
359
+ C = e.toLocaleString();
360
+ }
361
+ n[3] = r.createdAt, n[4] = C;
362
+ } else C = n[4];
363
+ let w = C, D, k;
364
+ n[5] === c ? (D = n[6], k = n[7]) : (D = () => {
365
+ if (!c) return;
366
+ let e = (e) => {
367
+ let t = e.target;
368
+ t instanceof Node && (u.current?.contains(t) || f.current?.contains(t) || l(!1));
369
+ }, t = (e) => {
370
+ e.key === "Escape" && (l(!1), f.current?.focus());
371
+ };
372
+ return document.addEventListener("pointerdown", e), document.addEventListener("keydown", t), () => {
373
+ document.removeEventListener("pointerdown", e), document.removeEventListener("keydown", t);
374
+ };
375
+ }, k = [c], n[5] = c, n[6] = D, n[7] = k), d(D, k);
376
+ let A = h ? "bg-primary/5" : "bg-background", j;
377
+ n[8] === A ? j = n[9] : (j = e("group flex w-full gap-3 px-4 py-3 hover:bg-accent/40", A), n[8] = A, n[9] = j);
378
+ let M;
379
+ n[10] !== _ || n[11] !== h || n[12] !== r.id || n[13] !== o || n[14] !== i ? (M = () => {
380
+ h && i(r.id), _ && (o(), O(_));
381
+ }, n[10] = _, n[11] = h, n[12] = r.id, n[13] = o, n[14] = i, n[15] = M) : M = n[15];
382
+ let N;
383
+ n[16] === r.title ? N = n[17] : (N = /* @__PURE__ */ v("div", {
384
+ className: "truncate text-sm font-semibold",
385
+ children: r.title
386
+ }), n[16] = r.title, n[17] = N);
387
+ let P;
388
+ n[18] === r.body ? P = n[19] : (P = r.body ? /* @__PURE__ */ v("div", {
389
+ className: "mt-0.5 line-clamp-2 text-xs text-muted-foreground",
390
+ children: r.body
391
+ }) : null, n[18] = r.body, n[19] = P);
392
+ let I;
393
+ n[20] !== N || n[21] !== P ? (I = /* @__PURE__ */ y("div", {
394
+ className: "min-w-0",
395
+ children: [N, P]
396
+ }), n[20] = N, n[21] = P, n[22] = I) : I = n[22];
397
+ let L;
398
+ n[23] === S ? L = n[24] : (L = S ? /* @__PURE__ */ v("div", {
399
+ className: "mt-2 truncate text-xs text-primary",
400
+ children: S
401
+ }) : null, n[23] = S, n[24] = L);
402
+ let R;
403
+ n[25] === w ? R = n[26] : (R = w ? /* @__PURE__ */ v("div", {
404
+ className: "mt-2 text-[11px] text-muted-foreground",
405
+ children: w
406
+ }) : null, n[25] = w, n[26] = R);
407
+ let z;
408
+ n[27] !== I || n[28] !== L || n[29] !== R || n[30] !== M ? (z = /* @__PURE__ */ y("button", {
21
409
  type: "button",
22
- onClick: l,
23
- className: m,
24
- "aria-label": h,
25
- children: [g, _]
26
- }), o[7] = l, o[8] = m, o[9] = h, o[10] = _, o[11] = v) : v = o[11], v;
410
+ className: "min-w-0 flex-1 text-left",
411
+ onClick: M,
412
+ children: [
413
+ I,
414
+ L,
415
+ R
416
+ ]
417
+ }), n[27] = I, n[28] = L, n[29] = R, n[30] = M, n[31] = z) : z = n[31];
418
+ let B, V;
419
+ n[32] === Symbol.for("react.memo_cache_sentinel") ? (B = () => {
420
+ l(F);
421
+ }, V = /* @__PURE__ */ v(g, { className: "h-4 w-4" }), n[32] = B, n[33] = V) : (B = n[32], V = n[33]);
422
+ let H;
423
+ n[34] === c ? H = n[35] : (H = /* @__PURE__ */ v("button", {
424
+ ref: f,
425
+ type: "button",
426
+ className: "inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent",
427
+ "aria-label": "Notification options",
428
+ "aria-haspopup": "menu",
429
+ "aria-expanded": c,
430
+ onClick: B,
431
+ children: V
432
+ }), n[34] = c, n[35] = H);
433
+ let U;
434
+ n[36] !== h || n[37] !== c || n[38] !== r.id || n[39] !== a || n[40] !== i ? (U = c ? /* @__PURE__ */ y("div", {
435
+ ref: u,
436
+ role: "menu",
437
+ className: e("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"),
438
+ children: [/* @__PURE__ */ v("button", {
439
+ type: "button",
440
+ role: "menuitem",
441
+ 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",
442
+ onClick: () => {
443
+ l(!1), a(r.id);
444
+ },
445
+ children: "Archive"
446
+ }), /* @__PURE__ */ v("button", {
447
+ type: "button",
448
+ role: "menuitem",
449
+ 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",
450
+ disabled: !h,
451
+ onClick: () => {
452
+ l(!1), i(r.id);
453
+ },
454
+ children: "Mark as read"
455
+ })]
456
+ }) : null, n[36] = h, n[37] = c, n[38] = r.id, n[39] = a, n[40] = i, n[41] = U) : U = n[41];
457
+ let W;
458
+ n[42] !== H || n[43] !== U ? (W = /* @__PURE__ */ y("div", {
459
+ className: "relative flex items-start",
460
+ children: [H, U]
461
+ }), n[42] = H, n[43] = U, n[44] = W) : W = n[44];
462
+ let G;
463
+ return n[45] !== z || n[46] !== W || n[47] !== j ? (G = /* @__PURE__ */ y("div", {
464
+ className: j,
465
+ children: [z, W]
466
+ }), n[45] = z, n[46] = W, n[47] = j, n[48] = G) : G = n[48], G;
467
+ }
468
+ function F(e) {
469
+ return !e;
27
470
  }
28
471
  //#endregion
29
- export { a as NotificationsButton };
472
+ export { M as NotificationsDrawer };
30
473
 
31
474
  //# sourceMappingURL=index420.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index420.js","names":["Bell","cn","NotificationsButton","t0","$","_c","unseenCount","unreadCount","onClick","className","rawCount","Number","isFinite","t1","Math","max","floor","count","t2","t3","t4","Symbol","for","t5","String","t6"],"sources":["../src/components/Notifications/NotificationsButton.tsx"],"sourcesContent":["import { Bell } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\n\nexport function NotificationsButton({\n unseenCount,\n unreadCount,\n onClick,\n className,\n}: {\n unseenCount?: number\n unreadCount?: number\n onClick?: () => void\n className?: string\n}) {\n const rawCount = Number.isFinite(unseenCount) ? unseenCount : unreadCount\n const count = Number.isFinite(rawCount) ? Math.max(0, Math.floor(rawCount ?? 0)) : 0\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"relative inline-flex h-9 w-9 items-center justify-center rounded-md border bg-background text-foreground hover:bg-accent\",\n className,\n )}\n aria-label={count > 0 ? `Notifications (${count} new)` : \"Notifications\"}\n >\n <Bell className=\"h-4 w-4\" />\n {count > 0 ? (\n <span\n className=\"absolute -right-1 -top-1 inline-flex min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[10px] font-semibold leading-4 text-primary-foreground\"\n aria-hidden=\"true\"\n >\n {count > 99 ? \"99+\" : String(count)}\n </span>\n ) : null}\n </button>\n )\n}\n"],"mappings":";;;;;AAKA,SAAOE,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAA6B,EAAAC,gBAAAC,gBAAAC,YAAAC,iBAAAN,GAWlCO,IAAiBC,OAAMC,SAAUN,CAAuC,IAAvDA,IAAAC,GAAwDM;CAAA,AAAAT,EAAA,OAAAM,IACWG,IAAAT,EAAA,MAAtES,IAAAF,OAAMC,SAAUF,CAAqD,IAAzCI,KAAIC,IAAK,GAAGD,KAAIE,MAAON,KAAA,CAAa,CAAK,IAArE,GAAsEN,EAAA,KAAAM,GAAAN,EAAA,KAAAS;CAApF,IAAAI,IAAcJ,GAAsEK;CAAA,AAAAd,EAAA,OAAAK,IAS/ES,IAAAd,EAAA,MAHUc,IAAAjB,EACT,4HACAQ,CACF,GAACL,EAAA,KAAAK,GAAAL,EAAA,KAAAc;CACW,IAAAC,IAAAF,IAAQ,IAAR,kBAA8BA,EAAK,SAAnC,iBAA4DG;CAAA,AAAAhB,EAAA,OAAAiB,OAAAC,IAAA,2BAAA,KAExEF,IAAA,kBAAC,GAAD,EAAgB,WAAA,UAAS,CAAA,GAAGhB,EAAA,KAAAgB,KAAAA,IAAAhB,EAAA;CAAA,IAAAmB;CAAA,AAAAnB,EAAA,OAAAa,IAQpBM,IAAAnB,EAAA,MAPPmB,IAAAN,IAAQ,IACP,kBAAA,QAAA;EACY,WAAA;EACE,eAAA;YAEXA,IAAQ,KAAR,QAAqBO,OAAOP,CAAK;CAC7B,CAAA,IANR,MAOOb,EAAA,KAAAa,GAAAb,EAAA,KAAAmB;CAAA,IAAAE;CACD,OADCrB,EAAA,OAAAI,KAAAJ,EAAA,OAAAc,KAAAd,EAAA,OAAAe,KAAAf,EAAA,QAAAmB,KAjBVE,IAAA,kBAAA,UAAA;EACO,MAAA;EACIjB;EACE,WAAAU;EAIC,cAAAC;YAPd,CASEC,GACCG,CAQM;KAAAnB,EAAA,KAAAI,GAAAJ,EAAA,KAAAc,GAAAd,EAAA,KAAAe,GAAAf,EAAA,MAAAmB,GAAAnB,EAAA,MAAAqB,KAAAA,IAAArB,EAAA,KAlBTqB;AAkBS"}
1
+ {"version":3,"file":"index420.js","names":["n","unreadOnly","res","json","count","id","current","target","group","requesting","onEnable","event","actionLabel","createdAtLabel","menuButtonRef","menuOpen","menuRef"],"sources":["../src/components/Notifications/NotificationsDrawer.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type Context } from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\nimport { Loader2, MoreVertical, X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport type { NotificationItem, NotificationsRealtimeState } from \"./types\"\n\n\ntype ListResponse = {\n ok?: boolean\n error?: string\n notifications?: NotificationItem[]\n unreadCount?: number\n unseenCount?: number\n}\n\ntype DayGroup = {\n key: string\n label: string\n items: NotificationItem[]\n}\n\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\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 requestClose = () => {\n onOpenChange(false)\n }\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (nextOpen) {\n onOpenChange(true)\n return\n }\n\n requestClose()\n }\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Backdrop className=\"fixed inset-0 z-50 bg-black/50\" onClick={requestClose} />\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 type=\"button\"\n aria-label=\"Close notifications\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\"\n onClick={requestClose}\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={requestClose}\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={requestClose}\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"],"mappings":"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"}