@rpcbase/ui 0.279.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
@@ -1 +1 @@
1
- {"version":3,"file":"index421.js","names":["createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","Context","Dialog","DialogPrimitive","Loader2","MoreVertical","X","cn","NotificationItem","NotificationsRealtimeState","ListResponse","ok","error","notifications","unreadCount","unseenCount","DayGroup","key","label","items","BrowserNotificationPermission","NotificationPermission","NotificationActionMode","NotificationAction","link","mode","toMs","iso","ms","Date","parse","Number","isFinite","getDayKey","date","getTime","year","getFullYear","month","String","getMonth","padStart","day","getDate","formatDayLabel","yearRaw","monthRaw","dayRaw","split","now","includeYear","toLocaleDateString","undefined","weekday","getNotificationLink","item","dataLink","data","trim","platformWebpush","platform","webpush","Array","isArray","fcmOptions","getNotificationActionMode","linkMode","getNotificationAction","getNotificationActionLabel","action","pushUrlWithoutReload","url","window","history","pushState","state","dispatchEvent","PopStateEvent","applyNotificationAction","currentUrl","URL","location","href","actionUrl","searchParams","forEach","value","set","hash","pathname","search","groupByDay","groups","currentKey","createdAt","push","length","getBrowserNotificationPermission","Notification","permission","EmptyRealtimeContext","NotificationsDrawer","open","onOpenChange","className","limit","defaultUnreadOnly","realtimeContext","realtime","setItems","setUnreadCount","setUnseenCount","loading","setLoading","setError","unreadOnly","setUnreadOnly","browserNotificationPermission","setBrowserNotificationPermission","browserNotificationPermissionRequesting","setBrowserNotificationPermissionRequesting","mergedItems","mergedUnreadCount","mergedUnseenCount","mergedLoading","mergedError","Error","message","visibleItems","slice","unread","filter","n","readAt","read","Boolean","unreadGroups","readGroups","refresh","markSeen","res","fetch","method","headers","credentials","body","JSON","stringify","json","catch","nextItems","Math","max","floor","keepalive","navigator","permissions","query","permissionStatus","PermissionStatus","disposed","syncPermission","name","PermissionName","then","status","addEventListener","removeEventListener","requestBrowserNotificationPermission","nextPermission","requestPermission","markAsRead","id","encodeURIComponent","nowIso","toISOString","current","target","find","count","seenAt","map","archive","requestClose","handleOpenChange","nextOpen","v","group","BrowserNotificationPermissionNotice","t0","$","_c","requesting","onEnable","t1","Symbol","for","isDenied","t2","t3","t4","t5","t6","t7","NotificationRow","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","t16","t17","t18","t19"],"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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"}
1
+ {"version":3,"file":"index421.js","names":["res","json","normalized","p","next","topic","e"],"sources":["../src/components/Notifications/NotificationsSettings.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\"\nimport { Loader2 } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport type { NotificationDigestFrequency, NotificationSettings, NotificationTopicCatalogItem, NotificationTopicPreference } from \"./types\"\n\n\ntype SettingsResponse = {\n ok?: boolean\n error?: string\n settings?: NotificationSettings\n}\n\nconst digestValues: Array<{ value: NotificationDigestFrequency; label: string }> = [\n { value: \"off\", label: \"Off\" },\n { value: \"daily\", label: \"Daily\" },\n { value: \"weekly\", label: \"Weekly\" },\n]\n\nconst normalizeSettings = (settings: NotificationSettings | undefined): NotificationSettings => {\n const digestFrequency = settings?.digestFrequency\n const frequency: NotificationDigestFrequency =\n digestFrequency === \"off\" || digestFrequency === \"daily\" || digestFrequency === \"weekly\"\n ? digestFrequency\n : \"weekly\"\n\n const topicPreferences = Array.isArray(settings?.topicPreferences)\n ? settings!.topicPreferences\n .map((pref) => ({\n topic: typeof pref.topic === \"string\" ? pref.topic.trim() : \"\",\n inApp: pref.inApp === true,\n emailDigest: pref.emailDigest === true,\n push: pref.push === true,\n }))\n .filter((pref) => pref.topic.length > 0)\n : []\n\n return {\n digestFrequency: frequency,\n topicPreferences,\n ...(typeof settings?.lastDigestSentAt === \"string\" ? { lastDigestSentAt: settings.lastDigestSentAt } : {}),\n }\n}\n\nconst normalizeTopics = (topics: NotificationTopicCatalogItem[] | undefined): NotificationTopicCatalogItem[] => {\n if (!Array.isArray(topics)) return []\n\n const seen = new Set<string>()\n return topics\n .map((topic) => ({\n topic: typeof topic.topic === \"string\" ? topic.topic.trim() : \"\",\n title: typeof topic.title === \"string\" ? topic.title.trim() : \"\",\n description: typeof topic.description === \"string\" ? topic.description.trim() : undefined,\n }))\n .filter((topic) => topic.topic.length > 0)\n .filter((topic) => {\n if (seen.has(topic.topic)) return false\n seen.add(topic.topic)\n return true\n })\n}\n\nconst applyTopicsToSettings = (\n settings: NotificationSettings,\n topics: NotificationTopicCatalogItem[],\n): NotificationSettings => {\n const defaults: NotificationTopicPreference = {\n topic: \"\",\n inApp: true,\n emailDigest: true,\n push: false,\n }\n\n const byTopic = new Map(settings.topicPreferences.map((pref) => [pref.topic, pref]))\n return {\n ...settings,\n topicPreferences: topics.map((topic) => {\n const existing = byTopic.get(topic.topic)\n return existing\n ? {\n topic: topic.topic,\n inApp: existing.inApp === true,\n emailDigest: existing.emailDigest === true,\n push: existing.push === true,\n }\n : {\n ...defaults,\n topic: topic.topic,\n }\n }),\n }\n}\n\nexport function NotificationsSettings({\n className,\n topics,\n}: {\n className?: string\n topics?: NotificationTopicCatalogItem[]\n}) {\n const [loading, setLoading] = useState(true)\n const [saving, setSaving] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [settings, setSettings] = useState<NotificationSettings>(() =>\n normalizeSettings({ digestFrequency: \"weekly\", topicPreferences: [] }),\n )\n\n const normalizedTopics = useMemo(() => normalizeTopics(topics), [topics])\n\n const loadSettings = async () => {\n setLoading(true)\n setError(null)\n try {\n const res = await fetch(\"/api/rb/notifications/settings\", {\n method: \"GET\",\n credentials: \"include\",\n })\n const json = (await res.json().catch(() => null)) as SettingsResponse | null\n if (!res.ok || !json?.ok) {\n setError(json?.error || \"Unable to load notification settings.\")\n return\n }\n const normalized = normalizeSettings(json.settings)\n setSettings(normalizedTopics.length > 0 ? applyTopicsToSettings(normalized, normalizedTopics) : normalized)\n } catch {\n setError(\"Unable to load notification settings.\")\n } finally {\n setLoading(false)\n }\n }\n\n const saveSettings = async (next: NotificationSettings) => {\n setSaving(true)\n setError(null)\n try {\n const res = await fetch(\"/api/rb/notifications/settings\", {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: JSON.stringify({\n digestFrequency: next.digestFrequency,\n topicPreferences: next.topicPreferences,\n }),\n })\n const json = (await res.json().catch(() => null)) as SettingsResponse | null\n if (!res.ok || !json?.ok) {\n setError(json?.error || \"Unable to save notification settings.\")\n return\n }\n const normalized = normalizeSettings(json.settings)\n setSettings(normalizedTopics.length > 0 ? applyTopicsToSettings(normalized, normalizedTopics) : normalized)\n } catch {\n setError(\"Unable to save notification settings.\")\n } finally {\n setSaving(false)\n }\n }\n\n useEffect(() => {\n void loadSettings()\n }, [])\n\n useEffect(() => {\n if (normalizedTopics.length === 0) return\n setSettings((current) => applyTopicsToSettings(current, normalizedTopics))\n }, [normalizedTopics])\n\n const updatePreference = (topic: string, update: (p: NotificationTopicPreference) => NotificationTopicPreference) => {\n const hasExisting = settings.topicPreferences.some((p) => p.topic === topic)\n const nextPrefs = hasExisting\n ? settings.topicPreferences.map((p) => (p.topic === topic ? update(p) : p))\n : [...settings.topicPreferences, update({ topic, inApp: true, emailDigest: true, push: false })]\n const next = normalizeSettings({ ...settings, topicPreferences: nextPrefs })\n setSettings(next)\n void saveSettings(next)\n }\n\n if (loading) {\n return (\n <div className={cn(\"flex items-center justify-center py-10 text-muted-foreground\", className)}>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n </div>\n )\n }\n\n return (\n <div className={cn(\"space-y-4\", className)}>\n <div className=\"rounded-md border bg-background p-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <div className=\"text-sm font-semibold\">Email digest</div>\n <div className=\"mt-1 text-xs text-muted-foreground\">Choose how often we email you a summary.</div>\n </div>\n <select\n value={settings.digestFrequency}\n onChange={(e) => {\n const value = e.target.value as NotificationDigestFrequency\n const next = normalizeSettings({ ...settings, digestFrequency: value })\n setSettings(next)\n void saveSettings(next)\n }}\n className=\"h-9 rounded-md border bg-background px-2 text-sm\"\n >\n {digestValues.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n </div>\n\n <div className=\"rounded-md border bg-background p-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <div className=\"text-sm font-semibold\">Topics</div>\n <div className=\"mt-1 text-xs text-muted-foreground\">Choose where you receive each topic.</div>\n </div>\n </div>\n\n {normalizedTopics.length === 0 ? (\n <div className=\"mt-4 text-sm text-muted-foreground\">No topics configured.</div>\n ) : (\n <div className=\"mt-4 overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"text-left text-xs text-muted-foreground\">\n <th className=\"py-2 pr-4 font-medium\">Topic</th>\n <th className=\"py-2 pr-4 font-medium\">In-app</th>\n <th className=\"py-2 pr-4 font-medium\">Email digest</th>\n <th className=\"py-2 pr-4 font-medium\">Push</th>\n </tr>\n </thead>\n <tbody>\n {settings.topicPreferences.map((pref) => {\n const meta = normalizedTopics.find((topic) => topic.topic === pref.topic)\n return (\n <tr key={pref.topic} className=\"border-t align-top\">\n <td className=\"py-3 pr-4\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"font-medium\">{meta?.title || pref.topic}</span>\n {meta?.description ? (\n <span className=\"text-xs text-muted-foreground\">{meta.description}</span>\n ) : null}\n <span className=\"text-[11px] text-muted-foreground\">{pref.topic}</span>\n </div>\n </td>\n <td className=\"py-3 pr-4\">\n <input\n type=\"checkbox\"\n checked={pref.inApp}\n onChange={(e) =>\n updatePreference(pref.topic, (p) => ({ ...p, inApp: e.target.checked }))\n }\n />\n </td>\n <td className=\"py-3 pr-4\">\n <input\n type=\"checkbox\"\n checked={pref.emailDigest}\n onChange={(e) =>\n updatePreference(pref.topic, (p) => ({ ...p, emailDigest: e.target.checked }))\n }\n />\n </td>\n <td className=\"py-3 pr-4\">\n <input\n type=\"checkbox\"\n checked={pref.push}\n disabled\n className=\"opacity-50\"\n aria-label=\"Push notifications (coming soon)\"\n />\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )}\n\n {error ? (\n <div className=\"mt-3 text-sm text-destructive\">{error}</div>\n ) : saving ? (\n <div className=\"mt-3 text-xs text-muted-foreground\">Saving…</div>\n ) : null}\n </div>\n </div>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index6.js","names":["useEffect","useState","setOptions","importLibrary","GoogleMapsLibraryName","GoogleMapsLibraryModule","T","google","maps","CoreLibrary","MapsLibrary","Maps3DLibrary","RoutesLibrary","GeometryLibrary","ElevationLibrary","StreetViewLibrary","JourneySharingLibrary","DrawingLibrary","VisualizationLibrary","MarkerLibrary","PlacesLibrary","GeocodingLibrary","initPromise","Promise","configuredKey","libraryPromises","Map","ensureGoogle","apiKey","error","Error","console","message","reject","key","v","then","catch","warn","loadLibrary","library","cacheKey","String","cached","get","promise","window","module","delete","set","useMapsLibrary","$","_c","setModule","t0","t1","cancelled","loadedModule"],"sources":["../src/helpers/useMapsLibrary.ts"],"sourcesContent":["/// <reference types=\"google.maps\" />\n\nimport { useEffect, useState } from \"react\"\nimport { setOptions, importLibrary } from \"@googlemaps/js-api-loader\"\n\n\ntype GoogleMapsLibraryName =\n | \"core\"\n | \"maps\"\n | \"maps3d\"\n | \"routes\"\n | \"geometry\"\n | \"elevation\"\n | \"streetView\"\n | \"journeySharing\"\n | \"drawing\"\n | \"visualization\"\n | \"marker\"\n | \"places\"\n | \"geocoding\"\n | (string & {})\n\ntype GoogleMapsLibraryModule<T extends GoogleMapsLibraryName> =\n T extends \"core\" ? google.maps.CoreLibrary\n : T extends \"maps\" ? google.maps.MapsLibrary\n : T extends \"maps3d\" ? google.maps.Maps3DLibrary\n : T extends \"routes\" ? google.maps.RoutesLibrary\n : T extends \"geometry\" ? google.maps.GeometryLibrary\n : T extends \"elevation\" ? google.maps.ElevationLibrary\n : T extends \"streetView\" ? google.maps.StreetViewLibrary\n : T extends \"journeySharing\" ? google.maps.JourneySharingLibrary\n : T extends \"drawing\" ? google.maps.DrawingLibrary\n : T extends \"visualization\" ? google.maps.VisualizationLibrary\n : T extends \"marker\" ? google.maps.MarkerLibrary\n : T extends \"places\" ? google.maps.PlacesLibrary\n : T extends \"geocoding\" ? google.maps.GeocodingLibrary\n : unknown\n\n\nlet initPromise: Promise<void> | null = null\nlet configuredKey: string | null = null\n\nconst libraryPromises = new Map<string, Promise<unknown>>()\n\nconst ensureGoogle = (apiKey?: string) => {\n if (!apiKey) {\n const error = new Error(\"useMapsLibrary: missing Google Maps API key\")\n console.error(error.message)\n return Promise.reject(error)\n }\n\n if (!initPromise) {\n configuredKey = apiKey\n setOptions({\n key: apiKey,\n v: \"weekly\",\n })\n initPromise = importLibrary(\"core\")\n .then(() => {})\n .catch(error => {\n initPromise = null\n throw error\n })\n } else if (configuredKey !== apiKey) {\n console.warn(\n \"useMapsLibrary: ignoring attempt to re-initialize Google Maps with a different API key than the one already in use.\"\n )\n }\n\n return initPromise\n}\n\nconst loadLibrary = <T extends GoogleMapsLibraryName>(\n library: T,\n apiKey?: string\n) => {\n const cacheKey = String(library)\n const cached = libraryPromises.get(cacheKey)\n if (cached) {\n return cached as Promise<GoogleMapsLibraryModule<T>>\n }\n\n const promise = ensureGoogle(apiKey)\n .then(() => {\n if (typeof window === \"undefined\" || !window.google?.maps?.importLibrary) {\n throw new Error(\"useMapsLibrary: google.maps.importLibrary is not available.\")\n }\n return window.google.maps.importLibrary(cacheKey)\n })\n .then(module => module as GoogleMapsLibraryModule<T>)\n .catch(error => {\n libraryPromises.delete(cacheKey)\n throw error\n })\n\n libraryPromises.set(cacheKey, promise as Promise<unknown>)\n return promise\n}\n\nexport const useMapsLibrary = <T extends GoogleMapsLibraryName>(\n library: T,\n apiKey?: string\n) => {\n const [module, setModule] =\n useState<GoogleMapsLibraryModule<T> | null>(null)\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return\n }\n\n let cancelled = false\n\n loadLibrary(library, apiKey)\n .then(loadedModule => {\n if (!cancelled) {\n setModule(loadedModule)\n }\n })\n .catch(error => {\n if (!cancelled) {\n console.error(`useMapsLibrary: failed to load ${String(library)} library`, error)\n setModule(null)\n }\n })\n\n return () => {\n cancelled = true\n }\n }, [library, apiKey])\n\n return module\n}\n\nexport type { GoogleMapsLibraryName, GoogleMapsLibraryModule }\n"],"mappings":";;;;AAuCA,IAAIsB,IAAoC,MACpCE,IAA+B,MAE7BC,oBAAkB,IAAIC,IAA8B,GAEpDC,KAAgBC,MAAoB;CACxC,IAAI,CAACA,GAAQ;EACX,IAAMC,IAAQ,gBAAIC,MAAM,6CAA6C;EAErE,OADAC,QAAQF,MAAMA,EAAMG,OAAO,GACpBT,QAAQU,OAAOJ,CAAK;CAC7B;CAoBA,OAlBKP,IAYME,MAAkBI,KAC3BG,QAAQO,KACN,qHACF,KAdAd,IAAgBI,GAChB1B,EAAW;EACTgC,KAAKN;EACLO,GAAG;CACL,CAAC,GACDb,IAAcnB,EAAc,MAAM,CAAC,CAChCiC,WAAW,CAAC,CAAC,CAAC,CACdC,OAAMR,MAAS;EAEd,MADAP,IAAc,MACRO;CACR,CAAC,IAOEP;AACT,GAEMiB,KACJC,GACAZ,MACG;CACH,IAAMa,IAAWC,OAAOF,CAAO,GACzBG,IAASlB,EAAgBmB,IAAIH,CAAQ;CAC3C,IAAIE,GACF,OAAOA;CAGT,IAAME,IAAUlB,EAAaC,CAAM,CAAC,CACjCQ,WAAW;EACV,IAAI,OAAOU,SAAW,OAAe,CAACA,OAAOvC,QAAQC,MAAML,eACzD,MAAU2B,MAAM,6DAA6D;EAE/E,OAAOgB,OAAOvC,OAAOC,KAAKL,cAAcsC,CAAQ;CAClD,CAAC,CAAC,CACDL,MAAKW,MAAUA,CAAoC,CAAC,CACpDV,OAAMR,MAAS;EAEd,MADAJ,EAAgBuB,OAAOP,CAAQ,GACzBZ;CACR,CAAC;CAGH,OADAJ,EAAgBwB,IAAIR,GAAUI,CAA2B,GAClDA;AACT,GAEaK,KAAiBV,GAAAZ,MAAA;CAAA,IAAAuB,IAAAC,EAAA,CAAA,GAI5B,CAAAL,GAAAM,KACEpD,EAA4C,IAAI,GAACqD,GAAAC;CAyB9B,OAzB8BJ,EAAA,OAAAvB,KAAAuB,EAAA,OAAAX,KAEzCc,UAAA;EACR,IAAI,OAAOR,SAAW,KAAW;EAIjC,IAAAU,IAAgB;EAaZ,OAXJjB,EAAYC,GAASZ,CAAM,CAAC,CAAAQ,MACpBqB,MAAA;GACJ,AAAKD,KACHH,EAAUI,CAAY;EACvB,CACF,CAAC,CAAApB,OACKR,MAAA;GACL,AAAK2B,MACHzB,QAAOF,MAAO,kCAAkCa,OAAOF,CAAO,EAAC,WAAYX,CAAK,GAChFwB,EAAU,IAAI;EACf,CACF,SAEI;GACLG,IAAYA;EAAH;CACV,GACAD,IAAA,CAACf,GAASZ,CAAM,GAACuB,EAAA,KAAAvB,GAAAuB,EAAA,KAAAX,GAAAW,EAAA,KAAAG,GAAAH,EAAA,KAAAI,MAAAD,IAAAH,EAAA,IAAAI,IAAAJ,EAAA,KAvBpBnD,EAAUsD,GAuBPC,CAAiB,GAEbR;AAAM"}
1
+ {"version":3,"file":"index6.js","names":["cancelled"],"sources":["../src/helpers/useMapsLibrary.ts"],"sourcesContent":["/// <reference types=\"google.maps\" />\n\nimport { useEffect, useState } from \"react\"\nimport { setOptions, importLibrary } from \"@googlemaps/js-api-loader\"\n\n\ntype GoogleMapsLibraryName =\n | \"core\"\n | \"maps\"\n | \"maps3d\"\n | \"routes\"\n | \"geometry\"\n | \"elevation\"\n | \"streetView\"\n | \"journeySharing\"\n | \"drawing\"\n | \"visualization\"\n | \"marker\"\n | \"places\"\n | \"geocoding\"\n | (string & {})\n\ntype GoogleMapsLibraryModule<T extends GoogleMapsLibraryName> =\n T extends \"core\" ? google.maps.CoreLibrary\n : T extends \"maps\" ? google.maps.MapsLibrary\n : T extends \"maps3d\" ? google.maps.Maps3DLibrary\n : T extends \"routes\" ? google.maps.RoutesLibrary\n : T extends \"geometry\" ? google.maps.GeometryLibrary\n : T extends \"elevation\" ? google.maps.ElevationLibrary\n : T extends \"streetView\" ? google.maps.StreetViewLibrary\n : T extends \"journeySharing\" ? google.maps.JourneySharingLibrary\n : T extends \"drawing\" ? google.maps.DrawingLibrary\n : T extends \"visualization\" ? google.maps.VisualizationLibrary\n : T extends \"marker\" ? google.maps.MarkerLibrary\n : T extends \"places\" ? google.maps.PlacesLibrary\n : T extends \"geocoding\" ? google.maps.GeocodingLibrary\n : unknown\n\n\nlet initPromise: Promise<void> | null = null\nlet configuredKey: string | null = null\n\nconst libraryPromises = new Map<string, Promise<unknown>>()\n\nconst ensureGoogle = (apiKey?: string) => {\n if (!apiKey) {\n const error = new Error(\"useMapsLibrary: missing Google Maps API key\")\n console.error(error.message)\n return Promise.reject(error)\n }\n\n if (!initPromise) {\n configuredKey = apiKey\n setOptions({\n key: apiKey,\n v: \"weekly\",\n })\n initPromise = importLibrary(\"core\")\n .then(() => {})\n .catch(error => {\n initPromise = null\n throw error\n })\n } else if (configuredKey !== apiKey) {\n console.warn(\n \"useMapsLibrary: ignoring attempt to re-initialize Google Maps with a different API key than the one already in use.\"\n )\n }\n\n return initPromise\n}\n\nconst loadLibrary = <T extends GoogleMapsLibraryName>(\n library: T,\n apiKey?: string\n) => {\n const cacheKey = String(library)\n const cached = libraryPromises.get(cacheKey)\n if (cached) {\n return cached as Promise<GoogleMapsLibraryModule<T>>\n }\n\n const promise = ensureGoogle(apiKey)\n .then(() => {\n if (typeof window === \"undefined\" || !window.google?.maps?.importLibrary) {\n throw new Error(\"useMapsLibrary: google.maps.importLibrary is not available.\")\n }\n return window.google.maps.importLibrary(cacheKey)\n })\n .then(module => module as GoogleMapsLibraryModule<T>)\n .catch(error => {\n libraryPromises.delete(cacheKey)\n throw error\n })\n\n libraryPromises.set(cacheKey, promise as Promise<unknown>)\n return promise\n}\n\nexport const useMapsLibrary = <T extends GoogleMapsLibraryName>(\n library: T,\n apiKey?: string\n) => {\n const [module, setModule] =\n useState<GoogleMapsLibraryModule<T> | null>(null)\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return\n }\n\n let cancelled = false\n\n loadLibrary(library, apiKey)\n .then(loadedModule => {\n if (!cancelled) {\n setModule(loadedModule)\n }\n })\n .catch(error => {\n if (!cancelled) {\n console.error(`useMapsLibrary: failed to load ${String(library)} library`, error)\n setModule(null)\n }\n })\n\n return () => {\n cancelled = true\n }\n }, [library, apiKey])\n\n return module\n}\n\nexport type { GoogleMapsLibraryName, GoogleMapsLibraryModule }\n"],"mappings":";;;;AAuCA,IAAI,IAAoC,MACpC,IAA+B,MAE7B,oBAAkB,IAAI,IAA8B,GAEpD,KAAgB,MAAoB;CACxC,IAAI,CAAC,GAAQ;EACX,IAAM,IAAQ,gBAAI,MAAM,6CAA6C;EAErE,OADA,QAAQ,MAAM,EAAM,OAAO,GACpB,QAAQ,OAAO,CAAK;CAC7B;CAoBA,OAlBK,IAYM,MAAkB,KAC3B,QAAQ,KACN,qHACF,KAdA,IAAgB,GAChB,EAAW;EACT,KAAK;EACL,GAAG;CACL,CAAC,GACD,IAAc,EAAc,MAAM,CAAC,CAChC,WAAW,CAAC,CAAC,CAAC,CACd,OAAM,MAAS;EAEd,MADA,IAAc,MACR;CACR,CAAC,IAOE;AACT,GAEM,KACJ,GACA,MACG;CACH,IAAM,IAAW,OAAO,CAAO,GACzB,IAAS,EAAgB,IAAI,CAAQ;CAC3C,IAAI,GACF,OAAO;CAGT,IAAM,IAAU,EAAa,CAAM,CAAC,CACjC,WAAW;EACV,IAAI,OAAO,SAAW,OAAe,CAAC,OAAO,QAAQ,MAAM,eACzD,MAAU,MAAM,6DAA6D;EAE/E,OAAO,OAAO,OAAO,KAAK,cAAc,CAAQ;CAClD,CAAC,CAAC,CACD,MAAK,MAAU,CAAoC,CAAC,CACpD,OAAM,MAAS;EAEd,MADA,EAAgB,OAAO,CAAQ,GACzB;CACR,CAAC;CAGH,OADA,EAAgB,IAAI,GAAU,CAA2B,GAClD;AACT,GAEa,KAAiB,GAAA,MAAA;CAAA,IAAA,IAAA,EAAA,CAAA,GAI5B,CAAA,GAAA,KACE,EAA4C,IAAI,GAAC,GAAA;CAyB9B,OAzB8B,EAAA,OAAA,KAAA,EAAA,OAAA,KAEzC,UAAA;EACR,IAAI,OAAO,SAAW,KAAW;EAIjC,IAAA,IAAgB;EAaZ,OAXJ,EAAY,GAAS,CAAM,CAAC,CAAA,MACpB,MAAA;GACJ,AAAK,KACH,EAAU,CAAY;EACvB,CACF,CAAC,CAAA,OACK,MAAA;GACL,AAAK,MACH,QAAO,MAAO,kCAAkC,OAAO,CAAO,EAAC,WAAY,CAAK,GAChF,EAAU,IAAI;EACf,CACF,SAEI;GACL,IAAYA;EAAH;CACV,GACA,IAAA,CAAC,GAAS,CAAM,GAAC,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,MAAA,IAAA,EAAA,IAAA,IAAA,EAAA,KAvBpB,EAAU,GAuBP,CAAiB,GAEb;AAAM"}
package/dist/index7.js CHANGED
@@ -1,93 +1,76 @@
1
- import { c as e } from "react/compiler-runtime";
2
- import { useEffect as t, useRef as n, useState as r } from "react";
1
+ import { useEffect as e, useRef as t, useState as n } from "react";
3
2
  //#region src/helpers/useScrollPagination.ts
4
- var i = () => typeof window > "u" ? !1 : "IntersectionObserver" in window, ee = (e, t, n) => {
3
+ var r = () => typeof window > "u" ? !1 : "IntersectionObserver" in window, i = (e, t, n) => {
5
4
  let r = e.getBoundingClientRect(), i = t.getBoundingClientRect();
6
5
  return r.bottom >= i.top - n && r.top <= i.bottom;
7
- }, te = (e, t, n) => {
6
+ }, a = (e, t, n) => {
8
7
  let r = e.getBoundingClientRect(), i = t.getBoundingClientRect();
9
8
  return r.top <= i.bottom + n && r.bottom >= i.top;
10
9
  };
11
- function ne(ne) {
12
- let a = e(96), { containerRef: o, enabled: ie, hasPreviousPage: ae, hasNextPage: oe, onStartReached: s, onEndReached: c, startReachedOffsetPx: se, endReachedOffsetPx: ce, maintainScrollOnStartFetch: le } = ne, l = ie === void 0 || ie, u = ae !== void 0 && ae, d = oe !== void 0 && oe, f = se === void 0 ? 160 : se, p = ce === void 0 ? 160 : ce, m = le === void 0 || le, [h, ue] = r(null), [g, de] = r(null), [_, fe] = r(!1), [v, pe] = r(!1), y = n(!1), b = n(!1), x = n(!0), S = n(!0), me = n(u), he = n(d), ge = n(u), _e = n(d), C = n(s), ve = n(c), w, T;
13
- a[0] === _ ? (w = a[1], T = a[2]) : (w = () => {
14
- y.current = _;
15
- }, T = [_], a[0] = _, a[1] = w, a[2] = T), t(w, T);
16
- let E, D;
17
- a[3] === v ? (E = a[4], D = a[5]) : (D = () => {
18
- b.current = v;
19
- }, E = [v], a[3] = v, a[4] = E, a[5] = D), t(D, E);
20
- let O, k;
21
- a[6] === u ? (O = a[7], k = a[8]) : (O = () => {
22
- me.current = u;
23
- }, k = [u], a[6] = u, a[7] = O, a[8] = k), t(O, k);
24
- let A, j;
25
- a[9] === d ? (A = a[10], j = a[11]) : (A = () => {
26
- he.current = d;
27
- }, j = [d], a[9] = d, a[10] = A, a[11] = j), t(A, j);
28
- let M, N;
29
- a[12] === s ? (M = a[13], N = a[14]) : (M = () => {
30
- C.current = s;
31
- }, N = [s], a[12] = s, a[13] = M, a[14] = N), t(M, N);
32
- let P, F;
33
- a[15] === c ? (P = a[16], F = a[17]) : (P = () => {
34
- ve.current = c;
35
- }, F = [c], a[15] = c, a[16] = P, a[17] = F), t(P, F);
36
- let I;
37
- a[18] === Symbol.for("react.memo_cache_sentinel") ? (I = () => {
38
- x.current = !0, S.current = !0;
39
- }, a[18] = I) : I = a[18];
40
- let L;
41
- a[19] === l ? L = a[20] : (L = [l], a[19] = l, a[20] = L), t(I, L);
42
- let R;
43
- a[21] === m ? R = a[22] : (R = (e) => {
44
- if (!me.current || !C.current || !x.current || y.current || b.current) return;
45
- x.current = !1, y.current = !0, fe(!0);
10
+ function o({ containerRef: o, enabled: s = !0, hasPreviousPage: c = !1, hasNextPage: l = !1, onStartReached: u, onEndReached: d, startReachedOffsetPx: f = 160, endReachedOffsetPx: p = 160, maintainScrollOnStartFetch: m = !0 }) {
11
+ let [h, g] = n(null), [_, v] = n(null), [y, b] = n(!1), [x, S] = n(!1), C = t(!1), w = t(!1), T = t(!0), E = t(!0), D = t(c), O = t(l), k = t(c), A = t(l), j = t(u), M = t(d);
12
+ e(() => {
13
+ C.current = y;
14
+ }, [y]), e(() => {
15
+ w.current = x;
16
+ }, [x]), e(() => {
17
+ D.current = c;
18
+ }, [c]), e(() => {
19
+ O.current = l;
20
+ }, [l]), e(() => {
21
+ j.current = u;
22
+ }, [u]), e(() => {
23
+ M.current = d;
24
+ }, [d]), e(() => {
25
+ T.current = !0, E.current = !0;
26
+ }, [s]);
27
+ let N = (e) => {
28
+ if (!D.current || !j.current || !T.current || C.current || w.current) return;
29
+ T.current = !1, C.current = !0, b(!0);
46
30
  let t = e.scrollTop, n = e.scrollHeight;
47
- Promise.resolve(C.current()).then(async () => {
31
+ Promise.resolve(j.current()).then(async () => {
48
32
  if (!m || !e.isConnected) return;
49
- await new Promise(re);
33
+ await new Promise((e) => {
34
+ window.requestAnimationFrame(() => {
35
+ window.requestAnimationFrame(() => e());
36
+ });
37
+ });
50
38
  let r = e.scrollHeight - n;
51
39
  r <= 0 || (e.scrollTop = t + r);
52
40
  }).finally(() => {
53
- y.current = !1, fe(!1);
41
+ C.current = !1, b(!1);
54
42
  });
55
- }, a[21] = m, a[22] = R);
56
- let z = R, B;
57
- a[23] !== o || a[24] !== p || a[25] !== g ? (B = () => {
43
+ }, P = () => {
58
44
  let e = o.current;
59
- return !e || !g ? !1 : te(g, e, Math.max(0, p));
60
- }, a[23] = o, a[24] = p, a[25] = g, a[26] = B) : B = a[26];
61
- let V = B, H;
62
- a[27] !== o || a[28] !== V ? (H = () => {
63
- if (!he.current || !ve.current || !S.current || b.current || y.current) return;
45
+ return !e || !_ ? !1 : a(_, e, Math.max(0, p));
46
+ }, F = () => {
47
+ if (!O.current || !M.current || !E.current || w.current || C.current) return;
64
48
  let e = o.current?.scrollHeight;
65
- S.current = !1, b.current = !0, pe(!0);
49
+ E.current = !1, w.current = !0, S(!0);
66
50
  let t;
67
- Promise.resolve(ve.current()).then((e) => {
51
+ Promise.resolve(M.current()).then((e) => {
68
52
  t = e;
69
53
  }).finally(() => {
70
- b.current = !1, pe(!1), S.current = !0, t !== !1 && window.requestAnimationFrame(() => {
54
+ w.current = !1, S(!1), E.current = !0, t !== !1 && window.requestAnimationFrame(() => {
71
55
  window.requestAnimationFrame(() => {
72
56
  let t = o.current;
73
- t && (!(typeof e == "number" && t.scrollHeight > e) || !he.current || !V() || H());
57
+ t && (!(typeof e == "number" && t.scrollHeight > e) || !O.current || !P() || F());
74
58
  });
75
59
  });
76
60
  });
77
- }, a[27] = o, a[28] = V, a[29] = H) : H = a[29];
78
- let U;
79
- a[30] !== o || a[31] !== l || a[32] !== z || a[33] !== f || a[34] !== h ? (U = () => {
80
- if (!l || !i()) return;
61
+ };
62
+ return e(() => {
63
+ if (!s || !r()) return;
81
64
  let e = o.current;
82
65
  if (!e || !h) return;
83
66
  let t = new IntersectionObserver((t) => {
84
67
  let n = t[0];
85
68
  if (n) {
86
69
  if (!n.isIntersecting) {
87
- x.current = !0;
70
+ T.current = !0;
88
71
  return;
89
72
  }
90
- z(e);
73
+ N(e);
91
74
  }
92
75
  }, {
93
76
  root: e,
@@ -97,97 +80,81 @@ function ne(ne) {
97
80
  return t.observe(h), () => {
98
81
  t.disconnect();
99
82
  };
100
- }, a[30] = o, a[31] = l, a[32] = z, a[33] = f, a[34] = h, a[35] = U) : U = a[35];
101
- let W;
102
- a[36] !== o || a[37] !== l || a[38] !== m || a[39] !== f || a[40] !== h ? (W = [
83
+ }, [
103
84
  o,
104
- l,
85
+ s,
105
86
  m,
106
87
  f,
107
88
  h
108
- ], a[36] = o, a[37] = l, a[38] = m, a[39] = f, a[40] = h, a[41] = W) : W = a[41], t(U, W);
109
- let G;
110
- a[42] !== o || a[43] !== l || a[44] !== u || a[45] !== z || a[46] !== f || a[47] !== h ? (G = () => {
111
- if (!l) return;
89
+ ]), e(() => {
90
+ if (!s) return;
112
91
  let e = o.current;
113
92
  if (!e || !h) return;
114
- let t = ge.current;
115
- if (ge.current = u, !(!u || t)) {
116
- if (!ee(h, e, Math.max(0, f))) {
117
- x.current = !0;
93
+ let t = k.current;
94
+ if (k.current = c, !(!c || t)) {
95
+ if (!i(h, e, Math.max(0, f))) {
96
+ T.current = !0;
118
97
  return;
119
98
  }
120
- z(e);
99
+ N(e);
121
100
  }
122
- }, a[42] = o, a[43] = l, a[44] = u, a[45] = z, a[46] = f, a[47] = h, a[48] = G) : G = a[48];
123
- let K;
124
- a[49] !== o || a[50] !== l || a[51] !== u || a[52] !== m || a[53] !== f || a[54] !== h ? (K = [
101
+ }, [
125
102
  o,
126
- l,
127
- u,
103
+ s,
104
+ c,
128
105
  m,
129
106
  f,
130
107
  h
131
- ], a[49] = o, a[50] = l, a[51] = u, a[52] = m, a[53] = f, a[54] = h, a[55] = K) : K = a[55], t(G, K);
132
- let q;
133
- a[56] !== o || a[57] !== l || a[58] !== p || a[59] !== g || a[60] !== H ? (q = () => {
134
- if (!l || !i()) return;
108
+ ]), e(() => {
109
+ if (!s || !r()) return;
135
110
  let e = o.current;
136
- if (!e || !g) return;
111
+ if (!e || !_) return;
137
112
  let t = new IntersectionObserver((e) => {
138
113
  let t = e[0];
139
114
  if (t) {
140
115
  if (!t.isIntersecting) {
141
- S.current = !0;
116
+ E.current = !0;
142
117
  return;
143
118
  }
144
- H();
119
+ F();
145
120
  }
146
121
  }, {
147
122
  root: e,
148
123
  rootMargin: `0px 0px ${Math.max(0, p)}px 0px`,
149
124
  threshold: 0
150
125
  });
151
- return t.observe(g), () => {
126
+ return t.observe(_), () => {
152
127
  t.disconnect();
153
128
  };
154
- }, a[56] = o, a[57] = l, a[58] = p, a[59] = g, a[60] = H, a[61] = q) : q = a[61];
155
- let J;
156
- a[62] !== o || a[63] !== l || a[64] !== p || a[65] !== g ? (J = [
129
+ }, [
157
130
  o,
158
- l,
131
+ s,
159
132
  p,
160
- g
161
- ], a[62] = o, a[63] = l, a[64] = p, a[65] = g, a[66] = J) : J = a[66], t(q, J);
162
- let Y;
163
- a[67] !== o || a[68] !== l || a[69] !== p || a[70] !== g || a[71] !== d || a[72] !== H ? (Y = () => {
164
- if (!l) return;
133
+ _
134
+ ]), e(() => {
135
+ if (!s) return;
165
136
  let e = o.current;
166
- if (!e || !g) return;
167
- let t = _e.current;
168
- if (_e.current = d, !(!d || t)) {
169
- if (!te(g, e, Math.max(0, p))) {
170
- S.current = !0;
137
+ if (!e || !_) return;
138
+ let t = A.current;
139
+ if (A.current = l, !(!l || t)) {
140
+ if (!a(_, e, Math.max(0, p))) {
141
+ E.current = !0;
171
142
  return;
172
143
  }
173
- H();
144
+ F();
174
145
  }
175
- }, a[67] = o, a[68] = l, a[69] = p, a[70] = g, a[71] = d, a[72] = H, a[73] = Y) : Y = a[73];
176
- let X;
177
- a[74] !== o || a[75] !== l || a[76] !== p || a[77] !== g || a[78] !== d ? (X = [
146
+ }, [
178
147
  o,
179
- l,
148
+ s,
180
149
  p,
181
- g,
182
- d
183
- ], a[74] = o, a[75] = l, a[76] = p, a[77] = g, a[78] = d, a[79] = X) : X = a[79], t(Y, X);
184
- let Z;
185
- a[80] !== o || a[81] !== l || a[82] !== g || a[83] !== d || a[84] !== V || a[85] !== H ? (Z = () => {
186
- if (!l || !d) return;
150
+ _,
151
+ l
152
+ ]), e(() => {
153
+ if (!s || !l) return;
187
154
  let e = o.current;
188
- if (!e || !g) return;
155
+ if (!e || !_) return;
189
156
  let t = () => {
190
- V() && H();
157
+ P() && F();
191
158
  }, n = () => {
192
159
  t();
193
160
  }, r = () => {
@@ -198,29 +165,20 @@ function ne(ne) {
198
165
  return e.addEventListener("scroll", n, { passive: !0 }), window.addEventListener("resize", r), () => {
199
166
  e.removeEventListener("scroll", n), window.removeEventListener("resize", r);
200
167
  };
201
- }, a[80] = o, a[81] = l, a[82] = g, a[83] = d, a[84] = V, a[85] = H, a[86] = Z) : Z = a[86];
202
- let Q;
203
- a[87] !== o || a[88] !== l || a[89] !== p || a[90] !== g || a[91] !== d ? (Q = [
168
+ }, [
204
169
  o,
205
- l,
170
+ s,
206
171
  p,
207
- g,
208
- d
209
- ], a[87] = o, a[88] = l, a[89] = p, a[90] = g, a[91] = d, a[92] = Q) : Q = a[92], t(Z, Q);
210
- let $;
211
- return a[93] !== v || a[94] !== _ ? ($ = {
212
- startSentinelRef: ue,
213
- endSentinelRef: de,
214
- isFetchingPrevious: _,
215
- isFetchingNext: v
216
- }, a[93] = v, a[94] = _, a[95] = $) : $ = a[95], $;
217
- }
218
- function re(e) {
219
- window.requestAnimationFrame(() => {
220
- window.requestAnimationFrame(() => e());
221
- });
172
+ _,
173
+ l
174
+ ]), {
175
+ startSentinelRef: g,
176
+ endSentinelRef: v,
177
+ isFetchingPrevious: y,
178
+ isFetchingNext: x
179
+ };
222
180
  }
223
181
  //#endregion
224
- export { ne as useScrollPagination };
182
+ export { o as useScrollPagination };
225
183
 
226
184
  //# sourceMappingURL=index7.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index7.js","names":["useEffect","useRef","useState","RefObject","MaybePromise","T","Promise","ReachCallback","UseScrollPaginationOptions","containerRef","HTMLElement","enabled","hasPreviousPage","hasNextPage","onStartReached","onEndReached","startReachedOffsetPx","endReachedOffsetPx","maintainScrollOnStartFetch","UseScrollPaginationResult","startSentinelRef","node","Element","endSentinelRef","isFetchingPrevious","isFetchingNext","supportsIntersectionObserver","window","isWithinStartRange","target","root","offsetPx","targetRect","getBoundingClientRect","rootRect","bottom","top","isWithinEndRange","useScrollPagination","t0","$","_c","t1","t2","t3","t4","t5","t6","undefined","startSentinel","setStartSentinel","endSentinel","setEndSentinel","setIsFetchingPrevious","setIsFetchingNext","isFetchingPreviousRef","isFetchingNextRef","canTriggerStartRef","canTriggerEndRef","hasPreviousPageRef","hasNextPageRef","previousHasPreviousPageRef","previousHasNextPageRef","onStartReachedRef","onEndReachedRef","t7","t8","current","t10","t9","t11","t12","t13","t14","t15","t16","t17","t18","t19","Symbol","for","t20","t21","previousScrollTop","scrollTop","previousScrollHeight","scrollHeight","resolve","then","isConnected","_temp","scrollHeightDelta","finally","runStartFetch","t22","root_0","resolvedOffsetPx","Math","max","isEndSentinelWithinRange","runEndFetch","initialRoot","previousScrollHeight_0","didFetch","result","requestAnimationFrame","root_1","didGrow","t23","root_2","observer","IntersectionObserver","entries","entry","isIntersecting","rootMargin","threshold","observe","disconnect","t24","t25","root_3","hadPreviousPage","resolvedOffsetPx_0","t26","t27","root_4","observer_0","entries_0","entry_0","t28","t29","root_5","hadNextPage","resolvedOffsetPx_1","t30","t31","root_6","checkAndFetch","handleScroll","handleResize","addEventListener","passive","removeEventListener","t32","t33"],"sources":["../src/helpers/useScrollPagination.ts"],"sourcesContent":["import { useEffect, useRef, useState, type RefObject } from \"react\"\n\n\ntype MaybePromise<T> = T | Promise<T>\n\ntype ReachCallback = () => MaybePromise<boolean | void>\n\nexport type UseScrollPaginationOptions = {\n containerRef: RefObject<HTMLElement | null>\n enabled?: boolean\n hasPreviousPage?: boolean\n hasNextPage?: boolean\n onStartReached?: ReachCallback\n onEndReached?: ReachCallback\n startReachedOffsetPx?: number\n endReachedOffsetPx?: number\n maintainScrollOnStartFetch?: boolean\n}\n\nexport type UseScrollPaginationResult = {\n startSentinelRef: (node: Element | null) => void\n endSentinelRef: (node: Element | null) => void\n isFetchingPrevious: boolean\n isFetchingNext: boolean\n}\n\nconst supportsIntersectionObserver = () => {\n if (typeof window === \"undefined\") return false\n return \"IntersectionObserver\" in window\n}\n\nconst isWithinStartRange = (target: Element, root: HTMLElement, offsetPx: number) => {\n const targetRect = target.getBoundingClientRect()\n const rootRect = root.getBoundingClientRect()\n return targetRect.bottom >= rootRect.top - offsetPx && targetRect.top <= rootRect.bottom\n}\n\nconst isWithinEndRange = (target: Element, root: HTMLElement, offsetPx: number) => {\n const targetRect = target.getBoundingClientRect()\n const rootRect = root.getBoundingClientRect()\n return targetRect.top <= rootRect.bottom + offsetPx && targetRect.bottom >= rootRect.top\n}\n\nexport function useScrollPagination({\n containerRef,\n enabled = true,\n hasPreviousPage = false,\n hasNextPage = false,\n onStartReached,\n onEndReached,\n startReachedOffsetPx = 160,\n endReachedOffsetPx = 160,\n maintainScrollOnStartFetch = true,\n}: UseScrollPaginationOptions): UseScrollPaginationResult {\n const [startSentinel, setStartSentinel] = useState<Element | null>(null)\n const [endSentinel, setEndSentinel] = useState<Element | null>(null)\n const [isFetchingPrevious, setIsFetchingPrevious] = useState(false)\n const [isFetchingNext, setIsFetchingNext] = useState(false)\n\n const isFetchingPreviousRef = useRef(false)\n const isFetchingNextRef = useRef(false)\n const canTriggerStartRef = useRef(true)\n const canTriggerEndRef = useRef(true)\n const hasPreviousPageRef = useRef(hasPreviousPage)\n const hasNextPageRef = useRef(hasNextPage)\n const previousHasPreviousPageRef = useRef(hasPreviousPage)\n const previousHasNextPageRef = useRef(hasNextPage)\n const onStartReachedRef = useRef<ReachCallback | undefined>(onStartReached)\n const onEndReachedRef = useRef<ReachCallback | undefined>(onEndReached)\n\n useEffect(() => {\n isFetchingPreviousRef.current = isFetchingPrevious\n }, [isFetchingPrevious])\n\n useEffect(() => {\n isFetchingNextRef.current = isFetchingNext\n }, [isFetchingNext])\n\n useEffect(() => {\n hasPreviousPageRef.current = hasPreviousPage\n }, [hasPreviousPage])\n\n useEffect(() => {\n hasNextPageRef.current = hasNextPage\n }, [hasNextPage])\n\n useEffect(() => {\n onStartReachedRef.current = onStartReached\n }, [onStartReached])\n\n useEffect(() => {\n onEndReachedRef.current = onEndReached\n }, [onEndReached])\n\n useEffect(() => {\n canTriggerStartRef.current = true\n canTriggerEndRef.current = true\n }, [enabled])\n\n const runStartFetch = (root: HTMLElement) => {\n if (!hasPreviousPageRef.current) return\n if (!onStartReachedRef.current) return\n if (!canTriggerStartRef.current) return\n if (isFetchingPreviousRef.current || isFetchingNextRef.current) return\n\n canTriggerStartRef.current = false\n isFetchingPreviousRef.current = true\n setIsFetchingPrevious(true)\n\n const previousScrollTop = root.scrollTop\n const previousScrollHeight = root.scrollHeight\n\n void Promise.resolve(onStartReachedRef.current())\n .then(async () => {\n if (!maintainScrollOnStartFetch) return\n if (!root.isConnected) return\n\n await new Promise<void>((resolve) => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => resolve())\n })\n })\n\n const scrollHeightDelta = root.scrollHeight - previousScrollHeight\n if (scrollHeightDelta <= 0) return\n root.scrollTop = previousScrollTop + scrollHeightDelta\n })\n .finally(() => {\n isFetchingPreviousRef.current = false\n setIsFetchingPrevious(false)\n })\n }\n\n const isEndSentinelWithinRange = () => {\n const root = containerRef.current\n if (!root || !endSentinel) return false\n const resolvedOffsetPx = Math.max(0, endReachedOffsetPx)\n return isWithinEndRange(endSentinel, root, resolvedOffsetPx)\n }\n\n const runEndFetch = () => {\n if (!hasNextPageRef.current) return\n if (!onEndReachedRef.current) return\n if (!canTriggerEndRef.current) return\n if (isFetchingNextRef.current || isFetchingPreviousRef.current) return\n\n const initialRoot = containerRef.current\n const previousScrollHeight = initialRoot?.scrollHeight\n canTriggerEndRef.current = false\n isFetchingNextRef.current = true\n setIsFetchingNext(true)\n\n let didFetch: boolean | void\n void Promise.resolve(onEndReachedRef.current())\n .then((result) => {\n didFetch = result\n })\n .finally(() => {\n isFetchingNextRef.current = false\n setIsFetchingNext(false)\n canTriggerEndRef.current = true\n\n if (didFetch === false) return\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n const root = containerRef.current\n if (!root) return\n const didGrow = typeof previousScrollHeight === \"number\"\n ? root.scrollHeight > previousScrollHeight\n : false\n if (!didGrow || !hasNextPageRef.current || !isEndSentinelWithinRange()) return\n runEndFetch()\n })\n })\n })\n }\n\n useEffect(() => {\n if (!enabled) return\n if (!supportsIntersectionObserver()) return\n\n const root = containerRef.current\n if (!root || !startSentinel) return\n\n const observer = new IntersectionObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n\n if (!entry.isIntersecting) {\n canTriggerStartRef.current = true\n return\n }\n\n runStartFetch(root)\n }, {\n root,\n rootMargin: `${Math.max(0, startReachedOffsetPx)}px 0px 0px 0px`,\n threshold: 0,\n })\n\n observer.observe(startSentinel)\n return () => {\n observer.disconnect()\n }\n }, [containerRef, enabled, maintainScrollOnStartFetch, startReachedOffsetPx, startSentinel])\n\n useEffect(() => {\n if (!enabled) return\n\n const root = containerRef.current\n if (!root || !startSentinel) return\n\n const hadPreviousPage = previousHasPreviousPageRef.current\n previousHasPreviousPageRef.current = hasPreviousPage\n if (!hasPreviousPage || hadPreviousPage) return\n\n const resolvedOffsetPx = Math.max(0, startReachedOffsetPx)\n if (!isWithinStartRange(startSentinel, root, resolvedOffsetPx)) {\n canTriggerStartRef.current = true\n return\n }\n\n runStartFetch(root)\n }, [\n containerRef,\n enabled,\n hasPreviousPage,\n maintainScrollOnStartFetch,\n startReachedOffsetPx,\n startSentinel,\n ])\n\n useEffect(() => {\n if (!enabled) return\n if (!supportsIntersectionObserver()) return\n\n const root = containerRef.current\n if (!root || !endSentinel) return\n\n const observer = new IntersectionObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n\n if (!entry.isIntersecting) {\n canTriggerEndRef.current = true\n return\n }\n\n runEndFetch()\n }, {\n root,\n rootMargin: `0px 0px ${Math.max(0, endReachedOffsetPx)}px 0px`,\n threshold: 0,\n })\n\n observer.observe(endSentinel)\n return () => {\n observer.disconnect()\n }\n }, [containerRef, enabled, endReachedOffsetPx, endSentinel])\n\n useEffect(() => {\n if (!enabled) return\n\n const root = containerRef.current\n if (!root || !endSentinel) return\n\n const hadNextPage = previousHasNextPageRef.current\n previousHasNextPageRef.current = hasNextPage\n if (!hasNextPage || hadNextPage) return\n\n const resolvedOffsetPx = Math.max(0, endReachedOffsetPx)\n if (!isWithinEndRange(endSentinel, root, resolvedOffsetPx)) {\n canTriggerEndRef.current = true\n return\n }\n\n runEndFetch()\n }, [\n containerRef,\n enabled,\n endReachedOffsetPx,\n endSentinel,\n hasNextPage,\n ])\n\n useEffect(() => {\n if (!enabled) return\n if (!hasNextPage) return\n\n const root = containerRef.current\n if (!root || !endSentinel) return\n\n const checkAndFetch = () => {\n if (!isEndSentinelWithinRange()) return\n runEndFetch()\n }\n\n const handleScroll = () => {\n checkAndFetch()\n }\n\n const handleResize = () => {\n window.requestAnimationFrame(() => {\n checkAndFetch()\n })\n }\n\n root.addEventListener(\"scroll\", handleScroll, { passive: true })\n window.addEventListener(\"resize\", handleResize)\n\n return () => {\n root.removeEventListener(\"scroll\", handleScroll)\n window.removeEventListener(\"resize\", handleResize)\n }\n }, [\n containerRef,\n enabled,\n endReachedOffsetPx,\n endSentinel,\n hasNextPage,\n ])\n\n return {\n startSentinelRef: setStartSentinel,\n endSentinelRef: setEndSentinel,\n isFetchingPrevious,\n isFetchingNext,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index7.js","names":["root","previousScrollHeight","resolvedOffsetPx","observer","entries","entry"],"sources":["../src/helpers/useScrollPagination.ts"],"sourcesContent":["import { useEffect, useRef, useState, type RefObject } from \"react\"\n\n\ntype MaybePromise<T> = T | Promise<T>\n\ntype ReachCallback = () => MaybePromise<boolean | void>\n\nexport type UseScrollPaginationOptions = {\n containerRef: RefObject<HTMLElement | null>\n enabled?: boolean\n hasPreviousPage?: boolean\n hasNextPage?: boolean\n onStartReached?: ReachCallback\n onEndReached?: ReachCallback\n startReachedOffsetPx?: number\n endReachedOffsetPx?: number\n maintainScrollOnStartFetch?: boolean\n}\n\nexport type UseScrollPaginationResult = {\n startSentinelRef: (node: Element | null) => void\n endSentinelRef: (node: Element | null) => void\n isFetchingPrevious: boolean\n isFetchingNext: boolean\n}\n\nconst supportsIntersectionObserver = () => {\n if (typeof window === \"undefined\") return false\n return \"IntersectionObserver\" in window\n}\n\nconst isWithinStartRange = (target: Element, root: HTMLElement, offsetPx: number) => {\n const targetRect = target.getBoundingClientRect()\n const rootRect = root.getBoundingClientRect()\n return targetRect.bottom >= rootRect.top - offsetPx && targetRect.top <= rootRect.bottom\n}\n\nconst isWithinEndRange = (target: Element, root: HTMLElement, offsetPx: number) => {\n const targetRect = target.getBoundingClientRect()\n const rootRect = root.getBoundingClientRect()\n return targetRect.top <= rootRect.bottom + offsetPx && targetRect.bottom >= rootRect.top\n}\n\nexport function useScrollPagination({\n containerRef,\n enabled = true,\n hasPreviousPage = false,\n hasNextPage = false,\n onStartReached,\n onEndReached,\n startReachedOffsetPx = 160,\n endReachedOffsetPx = 160,\n maintainScrollOnStartFetch = true,\n}: UseScrollPaginationOptions): UseScrollPaginationResult {\n const [startSentinel, setStartSentinel] = useState<Element | null>(null)\n const [endSentinel, setEndSentinel] = useState<Element | null>(null)\n const [isFetchingPrevious, setIsFetchingPrevious] = useState(false)\n const [isFetchingNext, setIsFetchingNext] = useState(false)\n\n const isFetchingPreviousRef = useRef(false)\n const isFetchingNextRef = useRef(false)\n const canTriggerStartRef = useRef(true)\n const canTriggerEndRef = useRef(true)\n const hasPreviousPageRef = useRef(hasPreviousPage)\n const hasNextPageRef = useRef(hasNextPage)\n const previousHasPreviousPageRef = useRef(hasPreviousPage)\n const previousHasNextPageRef = useRef(hasNextPage)\n const onStartReachedRef = useRef<ReachCallback | undefined>(onStartReached)\n const onEndReachedRef = useRef<ReachCallback | undefined>(onEndReached)\n\n useEffect(() => {\n isFetchingPreviousRef.current = isFetchingPrevious\n }, [isFetchingPrevious])\n\n useEffect(() => {\n isFetchingNextRef.current = isFetchingNext\n }, [isFetchingNext])\n\n useEffect(() => {\n hasPreviousPageRef.current = hasPreviousPage\n }, [hasPreviousPage])\n\n useEffect(() => {\n hasNextPageRef.current = hasNextPage\n }, [hasNextPage])\n\n useEffect(() => {\n onStartReachedRef.current = onStartReached\n }, [onStartReached])\n\n useEffect(() => {\n onEndReachedRef.current = onEndReached\n }, [onEndReached])\n\n useEffect(() => {\n canTriggerStartRef.current = true\n canTriggerEndRef.current = true\n }, [enabled])\n\n const runStartFetch = (root: HTMLElement) => {\n if (!hasPreviousPageRef.current) return\n if (!onStartReachedRef.current) return\n if (!canTriggerStartRef.current) return\n if (isFetchingPreviousRef.current || isFetchingNextRef.current) return\n\n canTriggerStartRef.current = false\n isFetchingPreviousRef.current = true\n setIsFetchingPrevious(true)\n\n const previousScrollTop = root.scrollTop\n const previousScrollHeight = root.scrollHeight\n\n void Promise.resolve(onStartReachedRef.current())\n .then(async () => {\n if (!maintainScrollOnStartFetch) return\n if (!root.isConnected) return\n\n await new Promise<void>((resolve) => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => resolve())\n })\n })\n\n const scrollHeightDelta = root.scrollHeight - previousScrollHeight\n if (scrollHeightDelta <= 0) return\n root.scrollTop = previousScrollTop + scrollHeightDelta\n })\n .finally(() => {\n isFetchingPreviousRef.current = false\n setIsFetchingPrevious(false)\n })\n }\n\n const isEndSentinelWithinRange = () => {\n const root = containerRef.current\n if (!root || !endSentinel) return false\n const resolvedOffsetPx = Math.max(0, endReachedOffsetPx)\n return isWithinEndRange(endSentinel, root, resolvedOffsetPx)\n }\n\n const runEndFetch = () => {\n if (!hasNextPageRef.current) return\n if (!onEndReachedRef.current) return\n if (!canTriggerEndRef.current) return\n if (isFetchingNextRef.current || isFetchingPreviousRef.current) return\n\n const initialRoot = containerRef.current\n const previousScrollHeight = initialRoot?.scrollHeight\n canTriggerEndRef.current = false\n isFetchingNextRef.current = true\n setIsFetchingNext(true)\n\n let didFetch: boolean | void\n void Promise.resolve(onEndReachedRef.current())\n .then((result) => {\n didFetch = result\n })\n .finally(() => {\n isFetchingNextRef.current = false\n setIsFetchingNext(false)\n canTriggerEndRef.current = true\n\n if (didFetch === false) return\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n const root = containerRef.current\n if (!root) return\n const didGrow = typeof previousScrollHeight === \"number\"\n ? root.scrollHeight > previousScrollHeight\n : false\n if (!didGrow || !hasNextPageRef.current || !isEndSentinelWithinRange()) return\n runEndFetch()\n })\n })\n })\n }\n\n useEffect(() => {\n if (!enabled) return\n if (!supportsIntersectionObserver()) return\n\n const root = containerRef.current\n if (!root || !startSentinel) return\n\n const observer = new IntersectionObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n\n if (!entry.isIntersecting) {\n canTriggerStartRef.current = true\n return\n }\n\n runStartFetch(root)\n }, {\n root,\n rootMargin: `${Math.max(0, startReachedOffsetPx)}px 0px 0px 0px`,\n threshold: 0,\n })\n\n observer.observe(startSentinel)\n return () => {\n observer.disconnect()\n }\n }, [containerRef, enabled, maintainScrollOnStartFetch, startReachedOffsetPx, startSentinel])\n\n useEffect(() => {\n if (!enabled) return\n\n const root = containerRef.current\n if (!root || !startSentinel) return\n\n const hadPreviousPage = previousHasPreviousPageRef.current\n previousHasPreviousPageRef.current = hasPreviousPage\n if (!hasPreviousPage || hadPreviousPage) return\n\n const resolvedOffsetPx = Math.max(0, startReachedOffsetPx)\n if (!isWithinStartRange(startSentinel, root, resolvedOffsetPx)) {\n canTriggerStartRef.current = true\n return\n }\n\n runStartFetch(root)\n }, [\n containerRef,\n enabled,\n hasPreviousPage,\n maintainScrollOnStartFetch,\n startReachedOffsetPx,\n startSentinel,\n ])\n\n useEffect(() => {\n if (!enabled) return\n if (!supportsIntersectionObserver()) return\n\n const root = containerRef.current\n if (!root || !endSentinel) return\n\n const observer = new IntersectionObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n\n if (!entry.isIntersecting) {\n canTriggerEndRef.current = true\n return\n }\n\n runEndFetch()\n }, {\n root,\n rootMargin: `0px 0px ${Math.max(0, endReachedOffsetPx)}px 0px`,\n threshold: 0,\n })\n\n observer.observe(endSentinel)\n return () => {\n observer.disconnect()\n }\n }, [containerRef, enabled, endReachedOffsetPx, endSentinel])\n\n useEffect(() => {\n if (!enabled) return\n\n const root = containerRef.current\n if (!root || !endSentinel) return\n\n const hadNextPage = previousHasNextPageRef.current\n previousHasNextPageRef.current = hasNextPage\n if (!hasNextPage || hadNextPage) return\n\n const resolvedOffsetPx = Math.max(0, endReachedOffsetPx)\n if (!isWithinEndRange(endSentinel, root, resolvedOffsetPx)) {\n canTriggerEndRef.current = true\n return\n }\n\n runEndFetch()\n }, [\n containerRef,\n enabled,\n endReachedOffsetPx,\n endSentinel,\n hasNextPage,\n ])\n\n useEffect(() => {\n if (!enabled) return\n if (!hasNextPage) return\n\n const root = containerRef.current\n if (!root || !endSentinel) return\n\n const checkAndFetch = () => {\n if (!isEndSentinelWithinRange()) return\n runEndFetch()\n }\n\n const handleScroll = () => {\n checkAndFetch()\n }\n\n const handleResize = () => {\n window.requestAnimationFrame(() => {\n checkAndFetch()\n })\n }\n\n root.addEventListener(\"scroll\", handleScroll, { passive: true })\n window.addEventListener(\"resize\", handleResize)\n\n return () => {\n root.removeEventListener(\"scroll\", handleScroll)\n window.removeEventListener(\"resize\", handleResize)\n }\n }, [\n containerRef,\n enabled,\n endReachedOffsetPx,\n endSentinel,\n hasNextPage,\n ])\n\n return {\n startSentinelRef: setStartSentinel,\n endSentinelRef: setEndSentinel,\n isFetchingPrevious,\n isFetchingNext,\n }\n}\n"],"mappings":"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"}
package/dist/index70.js CHANGED
@@ -35,8 +35,8 @@ var t = {
35
35
  return e(t.getSeconds(), n.length);
36
36
  },
37
37
  S(t, n) {
38
- let r = n.length, i = t.getMilliseconds();
39
- return e(Math.trunc(i * 10 ** (r - 3)), n.length);
38
+ let r = n.length, i = t.getMilliseconds(), a = Math.trunc(i * 10 ** (r - 3));
39
+ return e(a, n.length);
40
40
  }
41
41
  };
42
42
  //#endregion