@rpcbase/ui 0.247.0 → 0.248.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 (534) hide show
  1. package/dist/components/Notifications/NotificationsDrawer.d.ts.map +1 -1
  2. package/dist/index105.js +36 -36
  3. package/dist/index117.js +6 -6
  4. package/dist/index120.js +10 -10
  5. package/dist/index122.js +2 -2
  6. package/dist/index123.js +3 -3
  7. package/dist/index124.js +1 -1
  8. package/dist/index126.js +2 -2
  9. package/dist/index128.js +2 -2
  10. package/dist/index150.js +3 -3
  11. package/dist/index156.js +1 -1
  12. package/dist/index16.js +157 -157
  13. package/dist/index16.js.map +1 -1
  14. package/dist/index163.js +2 -2
  15. package/dist/index164.js +7 -7
  16. package/dist/index167.js +4 -4
  17. package/dist/index169.js +1 -1
  18. package/dist/index171.js +14 -58
  19. package/dist/index171.js.map +1 -1
  20. package/dist/index172.js +68 -8
  21. package/dist/index172.js.map +1 -1
  22. package/dist/index173.js +37 -87
  23. package/dist/index173.js.map +1 -1
  24. package/dist/index174.js +13 -19
  25. package/dist/index174.js.map +1 -1
  26. package/dist/index175.js +23 -16
  27. package/dist/index175.js.map +1 -1
  28. package/dist/index176.js +111 -5
  29. package/dist/index176.js.map +1 -1
  30. package/dist/index177.js +13 -6
  31. package/dist/index177.js.map +1 -1
  32. package/dist/index178.js +4 -6
  33. package/dist/index178.js.map +1 -1
  34. package/dist/index179.js +4 -5
  35. package/dist/index179.js.map +1 -1
  36. package/dist/index180.js +5 -7
  37. package/dist/index180.js.map +1 -1
  38. package/dist/index181.js +11 -16
  39. package/dist/index181.js.map +1 -1
  40. package/dist/index182.js +19 -4
  41. package/dist/index182.js.map +1 -1
  42. package/dist/index183.js +11 -5
  43. package/dist/index183.js.map +1 -1
  44. package/dist/index184.js +176 -12
  45. package/dist/index184.js.map +1 -1
  46. package/dist/index185.js +279 -9
  47. package/dist/index185.js.map +1 -1
  48. package/dist/index186.js +4 -13
  49. package/dist/index186.js.map +1 -1
  50. package/dist/index187.js +28 -14
  51. package/dist/index187.js.map +1 -1
  52. package/dist/index188.js +126 -4
  53. package/dist/index188.js.map +1 -1
  54. package/dist/index189.js +63 -5
  55. package/dist/index189.js.map +1 -1
  56. package/dist/index190.js +8 -6
  57. package/dist/index190.js.map +1 -1
  58. package/dist/index191.js +16 -6
  59. package/dist/index191.js.map +1 -1
  60. package/dist/index192.js +29 -53
  61. package/dist/index192.js.map +1 -1
  62. package/dist/index193.js +69 -8
  63. package/dist/index193.js.map +1 -1
  64. package/dist/index194.js +58 -4
  65. package/dist/index194.js.map +1 -1
  66. package/dist/index195.js +8 -4
  67. package/dist/index195.js.map +1 -1
  68. package/dist/index196.js +87 -8
  69. package/dist/index196.js.map +1 -1
  70. package/dist/index197.js +19 -4
  71. package/dist/index197.js.map +1 -1
  72. package/dist/index198.js +16 -4
  73. package/dist/index198.js.map +1 -1
  74. package/dist/index199.js +5 -3
  75. package/dist/index199.js.map +1 -1
  76. package/dist/index200.js +5 -10
  77. package/dist/index200.js.map +1 -1
  78. package/dist/index201.js +6 -9
  79. package/dist/index201.js.map +1 -1
  80. package/dist/index202.js +4 -9
  81. package/dist/index202.js.map +1 -1
  82. package/dist/index203.js +6 -10
  83. package/dist/index203.js.map +1 -1
  84. package/dist/index204.js +16 -10
  85. package/dist/index204.js.map +1 -1
  86. package/dist/index205.js +4 -9
  87. package/dist/index205.js.map +1 -1
  88. package/dist/index206.js +4 -6
  89. package/dist/index206.js.map +1 -1
  90. package/dist/index207.js +12 -5
  91. package/dist/index207.js.map +1 -1
  92. package/dist/index208.js +9 -4
  93. package/dist/index208.js.map +1 -1
  94. package/dist/index209.js +13 -5
  95. package/dist/index209.js.map +1 -1
  96. package/dist/index210.js +13 -6
  97. package/dist/index210.js.map +1 -1
  98. package/dist/index211.js +4 -5
  99. package/dist/index211.js.map +1 -1
  100. package/dist/index212.js +5 -16
  101. package/dist/index212.js.map +1 -1
  102. package/dist/index213.js +6 -7
  103. package/dist/index213.js.map +1 -1
  104. package/dist/index214.js +5 -10
  105. package/dist/index214.js.map +1 -1
  106. package/dist/index215.js +54 -10
  107. package/dist/index215.js.map +1 -1
  108. package/dist/index216.js +8 -21
  109. package/dist/index216.js.map +1 -1
  110. package/dist/index217.js +4 -8
  111. package/dist/index217.js.map +1 -1
  112. package/dist/index218.js +4 -9
  113. package/dist/index218.js.map +1 -1
  114. package/dist/index219.js +8 -9
  115. package/dist/index219.js.map +1 -1
  116. package/dist/index220.js +4 -4
  117. package/dist/index220.js.map +1 -1
  118. package/dist/index221.js +4 -5
  119. package/dist/index221.js.map +1 -1
  120. package/dist/index222.js +3 -16
  121. package/dist/index222.js.map +1 -1
  122. package/dist/index223.js +10 -9
  123. package/dist/index223.js.map +1 -1
  124. package/dist/index224.js +9 -18
  125. package/dist/index224.js.map +1 -1
  126. package/dist/index225.js +9 -20
  127. package/dist/index225.js.map +1 -1
  128. package/dist/index226.js +10 -12
  129. package/dist/index226.js.map +1 -1
  130. package/dist/index227.js +10 -29
  131. package/dist/index227.js.map +1 -1
  132. package/dist/index228.js +9 -12
  133. package/dist/index228.js.map +1 -1
  134. package/dist/index229.js +6 -25
  135. package/dist/index229.js.map +1 -1
  136. package/dist/index230.js +5 -5
  137. package/dist/index230.js.map +1 -1
  138. package/dist/index231.js +4 -14
  139. package/dist/index231.js.map +1 -1
  140. package/dist/index232.js +5 -68
  141. package/dist/index232.js.map +1 -1
  142. package/dist/index233.js +7 -38
  143. package/dist/index233.js.map +1 -1
  144. package/dist/index234.js +6 -14
  145. package/dist/index234.js.map +1 -1
  146. package/dist/index235.js +16 -23
  147. package/dist/index235.js.map +1 -1
  148. package/dist/index236.js +7 -111
  149. package/dist/index236.js.map +1 -1
  150. package/dist/index237.js +11 -13
  151. package/dist/index237.js.map +1 -1
  152. package/dist/index238.js +10 -4
  153. package/dist/index238.js.map +1 -1
  154. package/dist/index239.js +22 -4
  155. package/dist/index239.js.map +1 -1
  156. package/dist/index240.js +9 -5
  157. package/dist/index240.js.map +1 -1
  158. package/dist/index241.js +9 -11
  159. package/dist/index241.js.map +1 -1
  160. package/dist/index242.js +9 -19
  161. package/dist/index242.js.map +1 -1
  162. package/dist/index243.js +5 -11
  163. package/dist/index243.js.map +1 -1
  164. package/dist/index244.js +5 -176
  165. package/dist/index244.js.map +1 -1
  166. package/dist/index245.js +15 -278
  167. package/dist/index245.js.map +1 -1
  168. package/dist/index246.js +9 -4
  169. package/dist/index246.js.map +1 -1
  170. package/dist/index247.js +19 -28
  171. package/dist/index247.js.map +1 -1
  172. package/dist/index248.js +18 -124
  173. package/dist/index248.js.map +1 -1
  174. package/dist/index249.js +12 -63
  175. package/dist/index249.js.map +1 -1
  176. package/dist/index250.js +29 -8
  177. package/dist/index250.js.map +1 -1
  178. package/dist/index251.js +12 -15
  179. package/dist/index251.js.map +1 -1
  180. package/dist/index252.js +25 -30
  181. package/dist/index252.js.map +1 -1
  182. package/dist/index253.js +5 -69
  183. package/dist/index253.js.map +1 -1
  184. package/dist/index254.js +20 -155
  185. package/dist/index254.js.map +1 -1
  186. package/dist/index255.js +65 -31
  187. package/dist/index255.js.map +1 -1
  188. package/dist/index256.js +6 -11
  189. package/dist/index256.js.map +1 -1
  190. package/dist/index257.js +5 -49
  191. package/dist/index257.js.map +1 -1
  192. package/dist/index258.js +11 -9
  193. package/dist/index258.js.map +1 -1
  194. package/dist/index259.js +3 -11
  195. package/dist/index259.js.map +1 -1
  196. package/dist/index260.js +48 -41
  197. package/dist/index260.js.map +1 -1
  198. package/dist/index261.js +4 -98
  199. package/dist/index261.js.map +1 -1
  200. package/dist/index262.js +27 -84
  201. package/dist/index262.js.map +1 -1
  202. package/dist/index263.js +14 -103
  203. package/dist/index263.js.map +1 -1
  204. package/dist/index264.js +5 -52
  205. package/dist/index264.js.map +1 -1
  206. package/dist/index265.js +21 -11
  207. package/dist/index265.js.map +1 -1
  208. package/dist/index266.js +53 -4
  209. package/dist/index266.js.map +1 -1
  210. package/dist/index267.js +20 -37
  211. package/dist/index267.js.map +1 -1
  212. package/dist/index268.js +41 -8
  213. package/dist/index268.js.map +1 -1
  214. package/dist/index269.js +39 -3
  215. package/dist/index269.js.map +1 -1
  216. package/dist/index270.js +46 -10
  217. package/dist/index270.js.map +1 -1
  218. package/dist/index271.js +18 -133
  219. package/dist/index271.js.map +1 -1
  220. package/dist/index272.js +69 -16
  221. package/dist/index272.js.map +1 -1
  222. package/dist/index273.js +17 -15
  223. package/dist/index273.js.map +1 -1
  224. package/dist/index274.js +3 -36
  225. package/dist/index274.js.map +1 -1
  226. package/dist/index275.js +11 -20
  227. package/dist/index275.js.map +1 -1
  228. package/dist/index276.js +13 -8
  229. package/dist/index276.js.map +1 -1
  230. package/dist/index277.js +18 -24
  231. package/dist/index277.js.map +1 -1
  232. package/dist/index278.js +35 -27
  233. package/dist/index278.js.map +1 -1
  234. package/dist/index279.js +239 -16
  235. package/dist/index279.js.map +1 -1
  236. package/dist/index280.js +253 -20
  237. package/dist/index280.js.map +1 -1
  238. package/dist/index281.js +66 -64
  239. package/dist/index281.js.map +1 -1
  240. package/dist/index282.js +99 -6
  241. package/dist/index282.js.map +1 -1
  242. package/dist/index283.js +83 -5
  243. package/dist/index283.js.map +1 -1
  244. package/dist/index284.js +3 -11
  245. package/dist/index284.js.map +1 -1
  246. package/dist/index285.js +29 -3
  247. package/dist/index285.js.map +1 -1
  248. package/dist/index286.js +16 -50
  249. package/dist/index286.js.map +1 -1
  250. package/dist/index287.js +35 -4
  251. package/dist/index287.js.map +1 -1
  252. package/dist/index288.js +16 -28
  253. package/dist/index288.js.map +1 -1
  254. package/dist/index289.js +3 -16
  255. package/dist/index289.js.map +1 -1
  256. package/dist/index290.js +26 -5
  257. package/dist/index290.js.map +1 -1
  258. package/dist/index291.js +27 -20
  259. package/dist/index291.js.map +1 -1
  260. package/dist/index292.js +4 -54
  261. package/dist/index292.js.map +1 -1
  262. package/dist/index293.js +76 -18
  263. package/dist/index293.js.map +1 -1
  264. package/dist/index294.js +268 -37
  265. package/dist/index294.js.map +1 -1
  266. package/dist/index295.js +11 -39
  267. package/dist/index295.js.map +1 -1
  268. package/dist/index296.js +10 -45
  269. package/dist/index296.js.map +1 -1
  270. package/dist/index297.js +25 -20
  271. package/dist/index297.js.map +1 -1
  272. package/dist/index298.js +15 -69
  273. package/dist/index298.js.map +1 -1
  274. package/dist/index299.js +122 -14
  275. package/dist/index299.js.map +1 -1
  276. package/dist/index300.js +5 -3
  277. package/dist/index300.js.map +1 -1
  278. package/dist/index301.js +65 -11
  279. package/dist/index301.js.map +1 -1
  280. package/dist/index302.js +14 -14
  281. package/dist/index302.js.map +1 -1
  282. package/dist/index303.js +7 -18
  283. package/dist/index303.js.map +1 -1
  284. package/dist/index304.js +5 -36
  285. package/dist/index304.js.map +1 -1
  286. package/dist/index305.js +3 -239
  287. package/dist/index305.js.map +1 -1
  288. package/dist/index306.js +10 -252
  289. package/dist/index306.js.map +1 -1
  290. package/dist/index307.js +7 -68
  291. package/dist/index307.js.map +1 -1
  292. package/dist/index308.js +128 -94
  293. package/dist/index308.js.map +1 -1
  294. package/dist/index309.js +391 -75
  295. package/dist/index309.js.map +1 -1
  296. package/dist/index310.js +5 -4
  297. package/dist/index310.js.map +1 -1
  298. package/dist/index311.js +51 -28
  299. package/dist/index311.js.map +1 -1
  300. package/dist/index312.js +10 -15
  301. package/dist/index312.js.map +1 -1
  302. package/dist/index313.js +28 -35
  303. package/dist/index313.js.map +1 -1
  304. package/dist/index314.js +11 -17
  305. package/dist/index314.js.map +1 -1
  306. package/dist/index315.js +154 -3
  307. package/dist/index315.js.map +1 -1
  308. package/dist/index316.js +31 -25
  309. package/dist/index316.js.map +1 -1
  310. package/dist/index317.js +11 -28
  311. package/dist/index317.js.map +1 -1
  312. package/dist/index318.js +50 -4
  313. package/dist/index318.js.map +1 -1
  314. package/dist/index319.js +9 -78
  315. package/dist/index319.js.map +1 -1
  316. package/dist/index320.js +10 -271
  317. package/dist/index320.js.map +1 -1
  318. package/dist/index321.js +43 -11
  319. package/dist/index321.js.map +1 -1
  320. package/dist/index322.js +97 -10
  321. package/dist/index322.js.map +1 -1
  322. package/dist/index323.js +86 -25
  323. package/dist/index323.js.map +1 -1
  324. package/dist/index324.js +104 -15
  325. package/dist/index324.js.map +1 -1
  326. package/dist/index325.js +50 -123
  327. package/dist/index325.js.map +1 -1
  328. package/dist/index326.js +11 -5
  329. package/dist/index326.js.map +1 -1
  330. package/dist/index327.js +4 -65
  331. package/dist/index327.js.map +1 -1
  332. package/dist/index328.js +37 -13
  333. package/dist/index328.js.map +1 -1
  334. package/dist/index329.js +8 -7
  335. package/dist/index329.js.map +1 -1
  336. package/dist/index330.js +135 -5
  337. package/dist/index330.js.map +1 -1
  338. package/dist/index331.js +17 -3
  339. package/dist/index331.js.map +1 -1
  340. package/dist/index332.js +15 -10
  341. package/dist/index332.js.map +1 -1
  342. package/dist/index333.js +3 -7
  343. package/dist/index333.js.map +1 -1
  344. package/dist/index334.js +32 -129
  345. package/dist/index334.js.map +1 -1
  346. package/dist/index335.js +18 -397
  347. package/dist/index335.js.map +1 -1
  348. package/dist/index336.js +10 -5
  349. package/dist/index336.js.map +1 -1
  350. package/dist/index337.js +8 -52
  351. package/dist/index337.js.map +1 -1
  352. package/dist/index338.js +8 -11
  353. package/dist/index338.js.map +1 -1
  354. package/dist/index339.js +11 -27
  355. package/dist/index339.js.map +1 -1
  356. package/dist/index34.js +2 -2
  357. package/dist/index340.js +8 -11
  358. package/dist/index340.js.map +1 -1
  359. package/dist/index341.js +13 -4
  360. package/dist/index341.js.map +1 -1
  361. package/dist/index342.js +4 -18
  362. package/dist/index342.js.map +1 -1
  363. package/dist/index343.js +3 -12
  364. package/dist/index343.js.map +1 -1
  365. package/dist/index344.js +16 -7
  366. package/dist/index344.js.map +1 -1
  367. package/dist/index345.js +22 -9
  368. package/dist/index345.js.map +1 -1
  369. package/dist/index346.js +27 -7
  370. package/dist/index346.js.map +1 -1
  371. package/dist/index347.js +14 -11
  372. package/dist/index347.js.map +1 -1
  373. package/dist/index348.js +51 -3
  374. package/dist/index348.js.map +1 -1
  375. package/dist/index349.js +61 -3
  376. package/dist/index349.js.map +1 -1
  377. package/dist/index35.js +5 -5
  378. package/dist/index350.js +65 -16
  379. package/dist/index350.js.map +1 -1
  380. package/dist/index352.js +8 -51
  381. package/dist/index352.js.map +1 -1
  382. package/dist/index353.js +5 -62
  383. package/dist/index353.js.map +1 -1
  384. package/dist/index354.js +11 -66
  385. package/dist/index354.js.map +1 -1
  386. package/dist/index355.js +21 -8
  387. package/dist/index355.js.map +1 -1
  388. package/dist/index356.js +17 -5
  389. package/dist/index356.js.map +1 -1
  390. package/dist/index357.js +8 -12
  391. package/dist/index357.js.map +1 -1
  392. package/dist/index358.js +144 -21
  393. package/dist/index358.js.map +1 -1
  394. package/dist/index359.js +77 -14
  395. package/dist/index359.js.map +1 -1
  396. package/dist/index36.js +11 -11
  397. package/dist/index360.js +62 -8
  398. package/dist/index360.js.map +1 -1
  399. package/dist/index361.js +15 -145
  400. package/dist/index361.js.map +1 -1
  401. package/dist/index362.js +4 -79
  402. package/dist/index362.js.map +1 -1
  403. package/dist/index363.js +17 -61
  404. package/dist/index363.js.map +1 -1
  405. package/dist/index364.js +13 -15
  406. package/dist/index364.js.map +1 -1
  407. package/dist/index365.js +4 -5
  408. package/dist/index365.js.map +1 -1
  409. package/dist/index366.js +10 -19
  410. package/dist/index366.js.map +1 -1
  411. package/dist/index367.js +6 -4
  412. package/dist/index367.js.map +1 -1
  413. package/dist/index368.js +3 -6
  414. package/dist/index368.js.map +1 -1
  415. package/dist/index369.js +21 -3
  416. package/dist/index369.js.map +1 -1
  417. package/dist/index37.js +3 -3
  418. package/dist/index370.js +44 -11
  419. package/dist/index370.js.map +1 -1
  420. package/dist/index371.js +17 -20
  421. package/dist/index371.js.map +1 -1
  422. package/dist/index372.js +5 -45
  423. package/dist/index372.js.map +1 -1
  424. package/dist/index373.js +198 -15
  425. package/dist/index373.js.map +1 -1
  426. package/dist/index374.js +74 -5
  427. package/dist/index374.js.map +1 -1
  428. package/dist/index375.js +115 -192
  429. package/dist/index375.js.map +1 -1
  430. package/dist/index376.js +4 -73
  431. package/dist/index376.js.map +1 -1
  432. package/dist/index377.js +19 -122
  433. package/dist/index377.js.map +1 -1
  434. package/dist/index378.js +8 -4
  435. package/dist/index378.js.map +1 -1
  436. package/dist/index379.js +27 -5
  437. package/dist/index379.js.map +1 -1
  438. package/dist/index38.js +4 -4
  439. package/dist/index380.js +138 -4
  440. package/dist/index380.js.map +1 -1
  441. package/dist/index381.js +12 -15
  442. package/dist/index381.js.map +1 -1
  443. package/dist/index382.js +46 -8
  444. package/dist/index382.js.map +1 -1
  445. package/dist/index383.js +3 -5
  446. package/dist/index383.js.map +1 -1
  447. package/dist/index384.js +21 -4
  448. package/dist/index384.js.map +1 -1
  449. package/dist/index385.js +72 -542
  450. package/dist/index385.js.map +1 -1
  451. package/dist/index386.js +11 -46
  452. package/dist/index386.js.map +1 -1
  453. package/dist/index387.js +3 -17
  454. package/dist/index387.js.map +1 -1
  455. package/dist/index388.js +71 -5
  456. package/dist/index388.js.map +1 -1
  457. package/dist/index389.js +35 -7
  458. package/dist/index389.js.map +1 -1
  459. package/dist/index39.js +5 -5
  460. package/dist/index390.js +7 -7
  461. package/dist/index390.js.map +1 -1
  462. package/dist/index391.js +15 -7
  463. package/dist/index391.js.map +1 -1
  464. package/dist/index392.js +4 -11
  465. package/dist/index392.js.map +1 -1
  466. package/dist/index393.js +4 -8
  467. package/dist/index393.js.map +1 -1
  468. package/dist/index394.js +4 -13
  469. package/dist/index394.js.map +1 -1
  470. package/dist/index395.js +15 -8
  471. package/dist/index395.js.map +1 -1
  472. package/dist/index396.js +9 -27
  473. package/dist/index396.js.map +1 -1
  474. package/dist/index397.js +5 -137
  475. package/dist/index397.js.map +1 -1
  476. package/dist/index398.js +4 -12
  477. package/dist/index398.js.map +1 -1
  478. package/dist/index399.js +543 -44
  479. package/dist/index399.js.map +1 -1
  480. package/dist/index40.js +3 -3
  481. package/dist/index400.js +47 -4
  482. package/dist/index400.js.map +1 -1
  483. package/dist/index401.js +17 -21
  484. package/dist/index401.js.map +1 -1
  485. package/dist/index402.js +5 -75
  486. package/dist/index402.js.map +1 -1
  487. package/dist/index403.js +8 -12
  488. package/dist/index403.js.map +1 -1
  489. package/dist/index404.js +6 -3
  490. package/dist/index404.js.map +1 -1
  491. package/dist/index405.js +7 -71
  492. package/dist/index405.js.map +1 -1
  493. package/dist/index406.js +11 -35
  494. package/dist/index406.js.map +1 -1
  495. package/dist/index407.js +9 -7
  496. package/dist/index407.js.map +1 -1
  497. package/dist/index408.js +12 -15
  498. package/dist/index408.js.map +1 -1
  499. package/dist/index41.js +10 -10
  500. package/dist/index411.js +14 -4
  501. package/dist/index411.js.map +1 -1
  502. package/dist/index412.js +3 -56
  503. package/dist/index412.js.map +1 -1
  504. package/dist/index413.js +490 -66
  505. package/dist/index413.js.map +1 -1
  506. package/dist/index414.js +5 -31
  507. package/dist/index414.js.map +1 -1
  508. package/dist/index415.js +56 -9
  509. package/dist/index415.js.map +1 -1
  510. package/dist/index416.js +61 -146
  511. package/dist/index416.js.map +1 -1
  512. package/dist/index417.js +26 -103
  513. package/dist/index417.js.map +1 -1
  514. package/dist/index418.js +9 -15
  515. package/dist/index418.js.map +1 -1
  516. package/dist/index419.js +153 -3
  517. package/dist/index419.js.map +1 -1
  518. package/dist/index420.js +106 -490
  519. package/dist/index420.js.map +1 -1
  520. package/dist/index49.js +36 -36
  521. package/dist/index50.js +29 -29
  522. package/dist/index51.js +2 -2
  523. package/dist/index52.js +12 -12
  524. package/dist/index53.js +4 -4
  525. package/dist/index54.js +1 -1
  526. package/dist/index55.js +21 -21
  527. package/dist/index56.js +5 -5
  528. package/dist/index57.js +5 -5
  529. package/dist/index58.js +8 -8
  530. package/dist/index59.js +5 -5
  531. package/dist/index60.js +17 -17
  532. package/dist/index61.js +5 -5
  533. package/dist/index62.js +3 -3
  534. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index16.js","sources":["../src/components/Notifications/NotificationsDrawer.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type Context } from \"react\"\nimport { Dialog as DialogPrimitive, type DialogRoot } from \"@base-ui/react/dialog\"\nimport { Loader2, MoreVertical, X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport type { NotificationItem, NotificationsRealtimeState } from \"./types\"\n\n\ntype ListResponse = {\n ok?: boolean\n error?: string\n notifications?: NotificationItem[]\n unreadCount?: number\n unseenCount?: number\n}\n\ntype DayGroup = {\n key: string\n label: string\n items: NotificationItem[]\n}\n\ntype BrowserNotificationPermission = NotificationPermission | \"unsupported\"\ntype NotificationActionMode = \"navigate\" | \"merge_current_search\"\n\ntype NotificationAction = {\n link: string\n mode: NotificationActionMode\n}\n\nconst toMs = (iso: string): number => {\n const ms = Date.parse(iso)\n return Number.isFinite(ms) ? ms : 0\n}\n\nconst getDayKey = (iso: string): string => {\n const date = new Date(toMs(iso))\n if (!Number.isFinite(date.getTime())) return \"unknown\"\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, \"0\")\n const day = String(date.getDate()).padStart(2, \"0\")\n\n return `${year}-${month}-${day}`\n}\n\nconst formatDayLabel = (key: string): string => {\n if (key === \"unknown\") return \"Unknown date\"\n const [yearRaw, monthRaw, dayRaw] = key.split(\"-\")\n const year = Number(yearRaw)\n const month = Number(monthRaw)\n const day = Number(dayRaw)\n\n if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) return \"Unknown date\"\n\n const date = new Date(year, month - 1, day)\n if (!Number.isFinite(date.getTime())) return \"Unknown date\"\n\n const now = new Date()\n const includeYear = now.getFullYear() !== year\n return date.toLocaleDateString(undefined, includeYear\n ? { weekday: \"short\", month: \"short\", day: \"numeric\", year: \"numeric\" }\n : { weekday: \"short\", month: \"short\", day: \"numeric\" })\n}\n\nconst getNotificationLink = (item: NotificationItem): string => {\n const dataLink = item.data?.link?.trim()\n if (dataLink) return dataLink\n\n const platformWebpush = item.platform?.webpush\n if (!platformWebpush || typeof platformWebpush !== \"object\" || Array.isArray(platformWebpush)) return \"\"\n const fcmOptions = (platformWebpush as { fcmOptions?: unknown }).fcmOptions\n if (!fcmOptions || typeof fcmOptions !== \"object\" || Array.isArray(fcmOptions)) return \"\"\n const link = (fcmOptions as { link?: unknown }).link\n return typeof link === \"string\" ? link.trim() : \"\"\n}\n\nconst getNotificationActionMode = (item: NotificationItem): NotificationActionMode => {\n return item.data?.linkMode === \"merge_current_search\" ? \"merge_current_search\" : \"navigate\"\n}\n\nconst getNotificationAction = (item: NotificationItem): NotificationAction | null => {\n const link = getNotificationLink(item)\n if (!link) return null\n return {\n link,\n mode: getNotificationActionMode(item),\n }\n}\n\nconst getNotificationActionLabel = (action: NotificationAction | null): string => {\n if (!action) return \"\"\n return action.mode === \"merge_current_search\" ? \"Open\" : action.link\n}\n\nconst pushUrlWithoutReload = (url: string): void => {\n window.history.pushState(window.history.state, \"\", url)\n window.dispatchEvent(new PopStateEvent(\"popstate\", { state: window.history.state }))\n}\n\nconst applyNotificationAction = (action: NotificationAction): void => {\n if (action.mode === \"merge_current_search\") {\n const currentUrl = new URL(window.location.href)\n const actionUrl = new URL(action.link, currentUrl)\n\n actionUrl.searchParams.forEach((value, key) => {\n currentUrl.searchParams.set(key, value)\n })\n if (actionUrl.hash) {\n currentUrl.hash = actionUrl.hash\n }\n\n pushUrlWithoutReload(`${currentUrl.pathname}${currentUrl.search}${currentUrl.hash}`)\n return\n }\n\n window.location.href = action.link\n}\n\nconst groupByDay = (items: NotificationItem[]): DayGroup[] => {\n const groups: DayGroup[] = []\n let currentKey: string | null = null\n\n for (const item of items) {\n const key = getDayKey(item.createdAt)\n if (key !== currentKey) {\n currentKey = key\n groups.push({ key, label: formatDayLabel(key), items: [] })\n }\n groups[groups.length - 1]!.items.push(item)\n }\n\n return groups\n}\n\nconst getBrowserNotificationPermission = (): BrowserNotificationPermission => {\n if (typeof window === \"undefined\") return \"unsupported\"\n if (!(\"Notification\" in window)) return \"unsupported\"\n return window.Notification.permission\n}\n\nconst EmptyRealtimeContext = createContext<NotificationsRealtimeState | null>(null)\n\nexport function NotificationsDrawer({\n open,\n onOpenChange,\n className,\n limit = 50,\n defaultUnreadOnly = false,\n realtimeContext,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n className?: string\n limit?: number\n defaultUnreadOnly?: boolean\n realtimeContext?: Context<NotificationsRealtimeState | null>\n}) {\n const realtime = useContext(realtimeContext ?? EmptyRealtimeContext)\n\n const [items, setItems] = useState<NotificationItem[]>([])\n const [unreadCount, setUnreadCount] = useState<number>(0)\n const [unseenCount, setUnseenCount] = useState<number>(0)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [unreadOnly, setUnreadOnly] = useState<boolean>(defaultUnreadOnly)\n const [browserNotificationPermission, setBrowserNotificationPermission] = useState<BrowserNotificationPermission>(() =>\n getBrowserNotificationPermission(),\n )\n const [browserNotificationPermissionRequesting, setBrowserNotificationPermissionRequesting] = useState(false)\n const dialogActionsRef = useRef<DialogRoot.Actions | null>(null)\n\n const mergedItems = realtime?.notifications ?? items\n const mergedUnreadCount = realtime?.unreadCount ?? unreadCount\n const mergedUnseenCount = realtime?.unseenCount ?? unseenCount\n const mergedLoading = realtime?.loading ?? loading\n const mergedError = realtime?.error\n ? (realtime.error instanceof Error ? realtime.error.message : String(realtime.error))\n : error\n\n const visibleItems = useMemo(() => mergedItems.slice(0, limit), [limit, mergedItems])\n\n const unread = useMemo(() => visibleItems.filter((n) => !n.readAt), [visibleItems])\n const read = useMemo(() => visibleItems.filter((n) => Boolean(n.readAt)), [visibleItems])\n const unreadGroups = useMemo(() => groupByDay(unread), [unread])\n const readGroups = useMemo(() => groupByDay(read), [read])\n\n const refresh = useCallback(async ({ unreadOnly, markSeen }: { unreadOnly: boolean; markSeen: boolean }) => {\n setLoading(true)\n setError(null)\n\n try {\n const res = await fetch(\"/api/rb/notifications\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: JSON.stringify({ limit, unreadOnly, markSeen }),\n })\n\n const json = (await res.json().catch(() => null)) as ListResponse | null\n if (!res.ok || !json?.ok) {\n setError(json?.error || \"Unable to load notifications.\")\n return\n }\n\n const nextItems = Array.isArray(json.notifications) ? json.notifications : []\n setItems(nextItems)\n setUnreadCount(Number.isFinite(json.unreadCount) ? Math.max(0, Math.floor(json.unreadCount ?? 0)) : 0)\n setUnseenCount(Number.isFinite(json.unseenCount) ? Math.max(0, Math.floor(json.unseenCount ?? 0)) : 0)\n } catch {\n setError(\"Unable to load notifications.\")\n } finally {\n setLoading(false)\n }\n }, [limit])\n\n useEffect(() => {\n if (!open) return\n if (realtime) {\n void (async () => {\n try {\n await fetch(\"/api/rb/notifications\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n keepalive: true,\n body: JSON.stringify({ limit: 1, markSeen: true }),\n })\n } catch {\n return\n }\n })()\n return\n }\n void refresh({ unreadOnly, markSeen: true })\n }, [open, realtime, refresh, unreadOnly])\n\n useEffect(() => {\n if (!open) return\n if (realtime) return\n void refresh({ unreadOnly, markSeen: false })\n }, [open, realtime, refresh, unreadOnly])\n\n useEffect(() => {\n if (!open) return\n\n setBrowserNotificationPermission(getBrowserNotificationPermission())\n\n if (typeof navigator === \"undefined\" || !navigator.permissions?.query) return\n\n let permissionStatus: PermissionStatus | null = null\n let disposed = false\n const syncPermission = () => {\n setBrowserNotificationPermission(getBrowserNotificationPermission())\n }\n\n try {\n void navigator.permissions.query({ name: \"notifications\" as PermissionName }).then((status) => {\n if (disposed) return\n permissionStatus = status\n syncPermission()\n status.addEventListener(\"change\", syncPermission)\n }).catch(() => {\n // Notifications are not exposed through the Permissions API in every browser.\n })\n } catch {\n return\n }\n\n return () => {\n disposed = true\n permissionStatus?.removeEventListener(\"change\", syncPermission)\n }\n }, [open])\n\n const requestBrowserNotificationPermission = async () => {\n if (typeof window === \"undefined\" || !(\"Notification\" in window)) {\n setBrowserNotificationPermission(\"unsupported\")\n return\n }\n\n setBrowserNotificationPermissionRequesting(true)\n try {\n const nextPermission = await window.Notification.requestPermission()\n setBrowserNotificationPermission(nextPermission)\n } catch {\n setBrowserNotificationPermission(getBrowserNotificationPermission())\n } finally {\n setBrowserNotificationPermissionRequesting(false)\n }\n }\n\n const markAsRead = async (id: string) => {\n try {\n const res = await fetch(`/api/rb/notifications/${encodeURIComponent(id)}/read`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n keepalive: true,\n body: \"{}\",\n })\n\n const json = (await res.json().catch(() => null)) as { ok?: boolean } | null\n if (!res.ok || !json?.ok) return\n\n const nowIso = new Date().toISOString()\n if (realtime) return\n setItems((current) => {\n const target = current.find((n) => n.id === id)\n if (target && !target.readAt) {\n setUnreadCount((count) => Math.max(0, count - 1))\n }\n if (target && !target.seenAt) {\n setUnseenCount((count) => Math.max(0, count - 1))\n }\n return current.map((n) => (n.id === id && !n.readAt ? { ...n, readAt: nowIso, ...(n.seenAt ? {} : { seenAt: nowIso }) } : n))\n })\n } catch {\n return\n }\n }\n\n const archive = async (id: string) => {\n try {\n const res = await fetch(`/api/rb/notifications/${encodeURIComponent(id)}/archive`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: \"{}\",\n })\n\n const json = (await res.json().catch(() => null)) as { ok?: boolean } | null\n if (!res.ok || !json?.ok) return\n\n if (realtime) return\n setItems((current) => {\n const target = current.find((n) => n.id === id)\n if (target && !target.readAt) {\n setUnreadCount((count) => Math.max(0, count - 1))\n }\n if (target && !target.seenAt) {\n setUnseenCount((count) => Math.max(0, count - 1))\n }\n return current.filter((n) => n.id !== id)\n })\n } catch {\n return\n }\n }\n\n const closeImmediately = () => {\n onOpenChange(false)\n dialogActionsRef.current?.unmount()\n }\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (nextOpen) {\n onOpenChange(true)\n return\n }\n\n closeImmediately()\n }\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={handleOpenChange} actionsRef={dialogActionsRef}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Backdrop className=\"fixed inset-0 z-50 bg-black/50\" />\n <DialogPrimitive.Popup\n className={cn(\n \"fixed right-0 top-0 z-50 flex h-full w-full max-w-md flex-col border-l bg-background shadow-xl outline-none\",\n className,\n )}\n >\n <header className=\"flex items-center justify-between gap-2 border-b px-4 py-3\">\n <div className=\"flex min-w-0 flex-col\">\n <DialogPrimitive.Title className=\"text-sm font-semibold\">Notifications</DialogPrimitive.Title>\n <span className=\"text-xs text-muted-foreground\">\n {mergedUnreadCount > 0 ? `${mergedUnreadCount} unread` : mergedUnseenCount > 0 ? `${mergedUnseenCount} new` : \"All caught up\"}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => setUnreadOnly((v) => !v)}\n className={cn(\n \"rounded-md border px-2 py-1 text-xs\",\n unreadOnly ? \"bg-accent text-foreground\" : \"bg-background text-muted-foreground hover:bg-accent\",\n )}\n >\n {unreadOnly ? \"Unread\" : \"All\"}\n </button>\n <DialogPrimitive.Close\n render={<button type=\"button\" className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\" />}\n >\n <X className=\"h-4 w-4\" />\n </DialogPrimitive.Close>\n </div>\n </header>\n\n <div className=\"flex-1 overflow-y-auto px-4 pb-3\">\n <BrowserNotificationPermissionNotice\n permission={browserNotificationPermission}\n requesting={browserNotificationPermissionRequesting}\n onEnable={requestBrowserNotificationPermission}\n />\n {mergedLoading ? (\n <div className=\"flex items-center justify-center py-10 text-muted-foreground\">\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n </div>\n ) : mergedError ? (\n <div className=\"py-10 text-center text-sm text-muted-foreground\">{mergedError}</div>\n ) : visibleItems.length === 0 ? (\n <div className=\"py-10 text-center text-sm text-muted-foreground\">No notifications.</div>\n ) : (\n <div className=\"flex flex-col gap-4\">\n <div>\n <div className=\"sticky top-0 z-20 -mx-4 flex h-8 items-center border-b bg-background px-4 text-xs font-semibold text-muted-foreground\">\n Unread notifications\n </div>\n {unreadGroups.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">No unread notifications.</div>\n ) : (\n unreadGroups.map((group) => (\n <div key={`unread:${group.key}`}>\n <div className=\"sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground\">\n {group.label}\n </div>\n <div className=\"-mx-4 flex flex-col divide-y divide-border\">\n {group.items.map((n) => (\n <NotificationRow\n key={n.id}\n notification={n}\n onMarkRead={markAsRead}\n onArchive={archive}\n onAction={closeImmediately}\n />\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n\n {unreadOnly ? null : (\n <div>\n <div className=\"sticky top-0 z-20 -mx-4 flex h-8 items-center border-b bg-background px-4 text-xs font-semibold text-muted-foreground\">\n Previous notifications\n </div>\n {readGroups.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">No previous notifications.</div>\n ) : (\n readGroups.map((group) => (\n <div key={`previous:${group.key}`}>\n <div className=\"sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground\">\n {group.label}\n </div>\n <div className=\"-mx-4 flex flex-col divide-y divide-border\">\n {group.items.map((n) => (\n <NotificationRow\n key={n.id}\n notification={n}\n onMarkRead={markAsRead}\n onArchive={archive}\n onAction={closeImmediately}\n />\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </DialogPrimitive.Popup>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n}\n\nfunction BrowserNotificationPermissionNotice({\n permission,\n requesting,\n onEnable,\n}: {\n permission: BrowserNotificationPermission\n requesting: boolean\n onEnable: () => void\n}) {\n if (permission === \"granted\") return null\n\n if (permission === \"unsupported\") {\n return (\n <div className=\"mt-3 rounded-md border bg-muted/40 p-3 text-sm text-muted-foreground\">\n Browser notifications are not supported by this browser.\n </div>\n )\n }\n\n const isDenied = permission === \"denied\"\n\n return (\n <div className=\"mt-3 rounded-md border bg-muted/40 p-3\">\n <div className=\"text-sm font-medium\">\n {isDenied ? \"Browser notifications are blocked.\" : \"Browser notifications are not enabled.\"}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">\n {isDenied\n ? \"Enable notifications for this site in your browser settings, then click again.\"\n : \"Enable browser notifications to receive important alerts.\"}\n </div>\n <button\n type=\"button\"\n className=\"mt-3 inline-flex h-8 items-center rounded-md border bg-background px-2.5 text-xs font-medium hover:bg-accent disabled:pointer-events-none disabled:opacity-50\"\n disabled={requesting}\n onClick={onEnable}\n >\n {requesting ? \"Enabling...\" : \"Enable browser notifications\"}\n </button>\n </div>\n )\n}\n\nfunction NotificationRow({\n notification,\n onMarkRead,\n onArchive,\n onAction,\n}: {\n notification: NotificationItem\n onMarkRead: (id: string) => void\n onArchive: (id: string) => void\n onAction: () => void\n}) {\n const [menuOpen, setMenuOpen] = useState(false)\n const menuRef = useRef<HTMLDivElement | null>(null)\n const menuButtonRef = useRef<HTMLButtonElement | null>(null)\n const isUnread = !notification.readAt\n const action = getNotificationAction(notification)\n const actionLabel = getNotificationActionLabel(action)\n const createdAtLabel = (() => {\n const date = new Date(toMs(notification.createdAt))\n if (!Number.isFinite(date.getTime())) return \"\"\n return date.toLocaleString()\n })()\n\n useEffect(() => {\n if (!menuOpen) return\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target\n if (!(target instanceof Node)) return\n if (menuRef.current?.contains(target) || menuButtonRef.current?.contains(target)) return\n setMenuOpen(false)\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return\n setMenuOpen(false)\n menuButtonRef.current?.focus()\n }\n\n document.addEventListener(\"pointerdown\", handlePointerDown)\n document.addEventListener(\"keydown\", handleKeyDown)\n\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown)\n document.removeEventListener(\"keydown\", handleKeyDown)\n }\n }, [menuOpen])\n\n return (\n <div\n className={cn(\n \"group flex w-full gap-3 px-4 py-3 hover:bg-accent/40\",\n isUnread ? \"bg-primary/5\" : \"bg-background\",\n )}\n >\n <button\n type=\"button\"\n className=\"min-w-0 flex-1 text-left\"\n onClick={() => {\n if (isUnread) {\n void onMarkRead(notification.id)\n }\n if (action) {\n onAction()\n applyNotificationAction(action)\n }\n }}\n >\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-semibold\">{notification.title}</div>\n {notification.body ? (\n <div className=\"mt-0.5 line-clamp-2 text-xs text-muted-foreground\">{notification.body}</div>\n ) : null}\n </div>\n {actionLabel ? <div className=\"mt-2 truncate text-xs text-primary\">{actionLabel}</div> : null}\n {createdAtLabel ? (\n <div className=\"mt-2 text-[11px] text-muted-foreground\">{createdAtLabel}</div>\n ) : null}\n </button>\n <div className=\"relative flex items-start\">\n <button\n ref={menuButtonRef}\n type=\"button\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\"\n aria-label=\"Notification options\"\n aria-haspopup=\"menu\"\n aria-expanded={menuOpen}\n onClick={() => {\n setMenuOpen((open) => !open)\n }}\n >\n <MoreVertical className=\"h-4 w-4\" />\n </button>\n {menuOpen ? (\n <div\n ref={menuRef}\n role=\"menu\"\n className={cn(\n \"absolute right-0 top-full z-50 mt-1 min-w-[10rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n )}\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent focus:bg-accent focus:text-accent-foreground\"\n onClick={() => {\n setMenuOpen(false)\n onArchive(notification.id)\n }}\n >\n Archive\n </button>\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\"\n disabled={!isUnread}\n onClick={() => {\n setMenuOpen(false)\n onMarkRead(notification.id)\n }}\n >\n Mark as read\n </button>\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n"],"names":["toMs","iso","ms","Date","parse","Number","isFinite","getDayKey","date","getTime","year","getFullYear","month","String","getMonth","padStart","day","getDate","formatDayLabel","key","yearRaw","monthRaw","dayRaw","split","includeYear","toLocaleDateString","undefined","weekday","getNotificationLink","item","dataLink","data","link","trim","platformWebpush","platform","webpush","Array","isArray","fcmOptions","getNotificationActionMode","linkMode","getNotificationAction","mode","getNotificationActionLabel","action","pushUrlWithoutReload","url","window","history","pushState","state","dispatchEvent","PopStateEvent","applyNotificationAction","currentUrl","URL","location","href","actionUrl","searchParams","forEach","value","set","hash","pathname","search","groupByDay","items","groups","currentKey","createdAt","push","label","length","getBrowserNotificationPermission","Notification","permission","EmptyRealtimeContext","createContext","NotificationsDrawer","open","onOpenChange","className","limit","defaultUnreadOnly","realtimeContext","realtime","useContext","setItems","useState","unreadCount","setUnreadCount","unseenCount","setUnseenCount","loading","setLoading","error","setError","unreadOnly","setUnreadOnly","browserNotificationPermission","setBrowserNotificationPermission","browserNotificationPermissionRequesting","setBrowserNotificationPermissionRequesting","dialogActionsRef","useRef","mergedItems","notifications","mergedUnreadCount","mergedUnseenCount","mergedLoading","mergedError","Error","message","visibleItems","useMemo","slice","unread","filter","n","readAt","read","Boolean","unreadGroups","readGroups","refresh","useCallback","markSeen","res","fetch","method","headers","credentials","body","JSON","stringify","json","catch","ok","nextItems","Math","max","floor","useEffect","keepalive","navigator","permissions","query","permissionStatus","disposed","syncPermission","name","then","status","addEventListener","removeEventListener","requestBrowserNotificationPermission","nextPermission","requestPermission","markAsRead","id","encodeURIComponent","nowIso","toISOString","current","target","find","count","seenAt","map","archive","closeImmediately","unmount","handleOpenChange","nextOpen","jsx","DialogPrimitive.Root","jsxs","DialogPrimitive.Portal","DialogPrimitive.Backdrop","DialogPrimitive.Popup","cn","DialogPrimitive.Title","v","DialogPrimitive.Close","X","BrowserNotificationPermissionNotice","Loader2","group","NotificationRow","t0","$","_c","requesting","onEnable","t1","Symbol","for","isDenied","t2","t3","t4","t5","t6","t7","notification","onMarkRead","onArchive","onAction","menuOpen","setMenuOpen","menuRef","menuButtonRef","isUnread","actionLabel","bb0","toLocaleString","createdAtLabel","handlePointerDown","event","Node","contains","handleKeyDown","event_0","focus","document","t8","title","t9","t10","t11","t12","t13","t14","t15","_temp","MoreVertical","t16","t17","t18","t19"],"mappings":"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"}
1
+ {"version":3,"file":"index16.js","sources":["../src/components/Notifications/NotificationsDrawer.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type Context } from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\nimport { Loader2, MoreVertical, X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport type { NotificationItem, NotificationsRealtimeState } from \"./types\"\n\n\ntype ListResponse = {\n ok?: boolean\n error?: string\n notifications?: NotificationItem[]\n unreadCount?: number\n unseenCount?: number\n}\n\ntype DayGroup = {\n key: string\n label: string\n items: NotificationItem[]\n}\n\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"],"names":["toMs","iso","ms","Date","parse","Number","isFinite","getDayKey","date","getTime","year","getFullYear","month","String","getMonth","padStart","day","getDate","formatDayLabel","key","yearRaw","monthRaw","dayRaw","split","includeYear","toLocaleDateString","undefined","weekday","getNotificationLink","item","dataLink","data","link","trim","platformWebpush","platform","webpush","Array","isArray","fcmOptions","getNotificationActionMode","linkMode","getNotificationAction","mode","getNotificationActionLabel","action","pushUrlWithoutReload","url","window","history","pushState","state","dispatchEvent","PopStateEvent","applyNotificationAction","currentUrl","URL","location","href","actionUrl","searchParams","forEach","value","set","hash","pathname","search","groupByDay","items","groups","currentKey","createdAt","push","label","length","getBrowserNotificationPermission","Notification","permission","EmptyRealtimeContext","createContext","NotificationsDrawer","open","onOpenChange","className","limit","defaultUnreadOnly","realtimeContext","realtime","useContext","setItems","useState","unreadCount","setUnreadCount","unseenCount","setUnseenCount","loading","setLoading","error","setError","unreadOnly","setUnreadOnly","browserNotificationPermission","setBrowserNotificationPermission","browserNotificationPermissionRequesting","setBrowserNotificationPermissionRequesting","mergedItems","notifications","mergedUnreadCount","mergedUnseenCount","mergedLoading","mergedError","Error","message","visibleItems","useMemo","slice","unread","filter","n","readAt","read","Boolean","unreadGroups","readGroups","refresh","useCallback","markSeen","res","fetch","method","headers","credentials","body","JSON","stringify","json","catch","ok","nextItems","Math","max","floor","useEffect","keepalive","navigator","permissions","query","permissionStatus","disposed","syncPermission","name","then","status","addEventListener","removeEventListener","requestBrowserNotificationPermission","nextPermission","requestPermission","markAsRead","id","encodeURIComponent","nowIso","toISOString","current","target","find","count","seenAt","map","archive","requestClose","handleOpenChange","nextOpen","jsx","DialogPrimitive.Root","jsxs","DialogPrimitive.Portal","DialogPrimitive.Backdrop","DialogPrimitive.Popup","cn","DialogPrimitive.Title","v","DialogPrimitive.Close","X","BrowserNotificationPermissionNotice","Loader2","group","NotificationRow","t0","$","_c","requesting","onEnable","t1","Symbol","for","isDenied","t2","t3","t4","t5","t6","t7","notification","onMarkRead","onArchive","onAction","menuOpen","setMenuOpen","menuRef","useRef","menuButtonRef","isUnread","actionLabel","bb0","toLocaleString","createdAtLabel","handlePointerDown","event","Node","contains","handleKeyDown","event_0","focus","document","t8","title","t9","t10","t11","t12","t13","t14","t15","_temp","MoreVertical","t16","t17","t18","t19"],"mappings":"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"}
package/dist/index163.js CHANGED
@@ -1,6 +1,6 @@
1
- import h from "./index265.js";
1
+ import h from "./index326.js";
2
2
  import l from "./index170.js";
3
- import v from "./index266.js";
3
+ import v from "./index327.js";
4
4
  function o(n) {
5
5
  "@babel/helpers - typeof";
6
6
  return o = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(t) {
package/dist/index164.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import g, { validateMetadata as h } from "./index163.js";
2
- import d from "./index255.js";
3
- import v from "./index256.js";
4
- import w from "./index257.js";
5
- import P from "./index258.js";
6
- import E from "./index259.js";
7
- import O from "./index260.js";
2
+ import d from "./index316.js";
3
+ import v from "./index317.js";
4
+ import w from "./index318.js";
5
+ import P from "./index319.js";
6
+ import E from "./index320.js";
7
+ import O from "./index321.js";
8
8
  import s from "./index170.js";
9
- import j from "./index261.js";
9
+ import j from "./index322.js";
10
10
  function i(r) {
11
11
  "@babel/helpers - typeof";
12
12
  return i = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) {
package/dist/index167.js CHANGED
@@ -1,7 +1,7 @@
1
- import b from "./index260.js";
2
- import y from "./index277.js";
3
- import m from "./index278.js";
4
- import C from "./index279.js";
1
+ import b from "./index321.js";
2
+ import y from "./index345.js";
3
+ import m from "./index346.js";
4
+ import C from "./index347.js";
5
5
  import v from "./index157.js";
6
6
  import { VALID_PUNCTUATION as s, VALID_DIGITS as g, PLUS_CHARS as p } from "./index159.js";
7
7
  function d(i) {
package/dist/index169.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import u from "./index163.js";
2
- import f from "./index257.js";
2
+ import f from "./index318.js";
3
3
  function d(e, r) {
4
4
  var t = typeof Symbol < "u" && e[Symbol.iterator] || e["@@iterator"];
5
5
  if (t) return (t = t.call(e)).next.bind(t);
package/dist/index171.js CHANGED
@@ -1,62 +1,18 @@
1
- import { tzName as r } from "./index172.js";
2
- import { TZDateMini as s } from "./index173.js";
3
- class o extends s {
4
- //#region static
5
- static tz(t, ...e) {
6
- return e.length ? new o(...e, t) : new o(Date.now(), t);
7
- }
8
- //#endregion
9
- //#region representation
10
- toISOString() {
11
- const [t, e, n] = this.tzComponents(), i = `${t}${e}:${n}`;
12
- return this.internal.toISOString().slice(0, -1) + i;
13
- }
14
- toString() {
15
- return `${this.toDateString()} ${this.toTimeString()}`;
16
- }
17
- toDateString() {
18
- const [t, e, n, i] = this.internal.toUTCString().split(" ");
19
- return `${t?.slice(0, -1)} ${n} ${e} ${i}`;
20
- }
21
- toTimeString() {
22
- const t = this.internal.toUTCString().split(" ")[4], [e, n, i] = this.tzComponents();
23
- return `${t} GMT${e}${n}${i} (${r(this.timeZone, this)})`;
24
- }
25
- toLocaleString(t, e) {
26
- return Date.prototype.toLocaleString.call(this, t, {
27
- ...e,
28
- timeZone: e?.timeZone || this.timeZone
29
- });
30
- }
31
- toLocaleDateString(t, e) {
32
- return Date.prototype.toLocaleDateString.call(this, t, {
33
- ...e,
34
- timeZone: e?.timeZone || this.timeZone
35
- });
36
- }
37
- toLocaleTimeString(t, e) {
38
- return Date.prototype.toLocaleTimeString.call(this, t, {
39
- ...e,
40
- timeZone: e?.timeZone || this.timeZone
41
- });
42
- }
43
- //#endregion
44
- //#region private
45
- tzComponents() {
46
- const t = this.getTimezoneOffset(), e = t > 0 ? "-" : "+", n = String(Math.floor(Math.abs(t) / 60)).padStart(2, "0"), i = String(Math.abs(t) % 60).padStart(2, "0");
47
- return [e, n, i];
48
- }
49
- //#endregion
50
- withTimeZone(t) {
51
- return new o(+this, t);
52
- }
53
- //#region date-fns integration
54
- [/* @__PURE__ */ Symbol.for("constructDateFrom")](t) {
55
- return new o(+new Date(t), this.timeZone);
56
- }
57
- //#endregion
1
+ import r from "./index190.js";
2
+ import * as o from "react";
3
+ const s = /* @__PURE__ */ o.createContext(!1);
4
+ process.env.NODE_ENV !== "production" && (s.displayName = "IsDrawerContext");
5
+ const e = /* @__PURE__ */ o.createContext(void 0);
6
+ process.env.NODE_ENV !== "production" && (e.displayName = "DialogRootContext");
7
+ function a(n) {
8
+ const t = o.useContext(e);
9
+ if (n === !1 && t === void 0)
10
+ throw new Error(process.env.NODE_ENV !== "production" ? "Base UI: DialogRootContext is missing. Dialog parts must be placed within <Dialog.Root>." : r(27));
11
+ return t;
58
12
  }
59
13
  export {
60
- o as TZDate
14
+ e as DialogRootContext,
15
+ s as IsDrawerContext,
16
+ a as useDialogRootContext
61
17
  };
62
18
  //# sourceMappingURL=index171.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index171.js","sources":["../../../node_modules/@date-fns/tz/date/index.js"],"sourcesContent":["import { tzName } from \"../tzName/index.js\";\nimport { TZDateMini } from \"./mini.js\";\nexport class TZDate extends TZDateMini {\n //#region static\n\n static tz(tz, ...args) {\n return args.length ? new TZDate(...args, tz) : new TZDate(Date.now(), tz);\n }\n\n //#endregion\n\n //#region representation\n\n toISOString() {\n const [sign, hours, minutes] = this.tzComponents();\n const tz = `${sign}${hours}:${minutes}`;\n return this.internal.toISOString().slice(0, -1) + tz;\n }\n toString() {\n // \"Tue Aug 13 2024 07:50:19 GMT+0800 (Singapore Standard Time)\";\n return `${this.toDateString()} ${this.toTimeString()}`;\n }\n toDateString() {\n // toUTCString returns RFC 7231 (\"Mon, 12 Aug 2024 23:36:08 GMT\")\n const [day, date, month, year] = this.internal.toUTCString().split(\" \");\n // \"Tue Aug 13 2024\"\n return `${day?.slice(0, -1) /* Remove \",\" */} ${month} ${date} ${year}`;\n }\n toTimeString() {\n // toUTCString returns RFC 7231 (\"Mon, 12 Aug 2024 23:36:08 GMT\")\n const time = this.internal.toUTCString().split(\" \")[4];\n const [sign, hours, minutes] = this.tzComponents();\n // \"07:42:23 GMT+0800 (Singapore Standard Time)\"\n return `${time} GMT${sign}${hours}${minutes} (${tzName(this.timeZone, this)})`;\n }\n toLocaleString(locales, options) {\n return Date.prototype.toLocaleString.call(this, locales, {\n ...options,\n timeZone: options?.timeZone || this.timeZone\n });\n }\n toLocaleDateString(locales, options) {\n return Date.prototype.toLocaleDateString.call(this, locales, {\n ...options,\n timeZone: options?.timeZone || this.timeZone\n });\n }\n toLocaleTimeString(locales, options) {\n return Date.prototype.toLocaleTimeString.call(this, locales, {\n ...options,\n timeZone: options?.timeZone || this.timeZone\n });\n }\n\n //#endregion\n\n //#region private\n\n tzComponents() {\n const offset = this.getTimezoneOffset();\n const sign = offset > 0 ? \"-\" : \"+\";\n const hours = String(Math.floor(Math.abs(offset) / 60)).padStart(2, \"0\");\n const minutes = String(Math.abs(offset) % 60).padStart(2, \"0\");\n return [sign, hours, minutes];\n }\n\n //#endregion\n\n withTimeZone(timeZone) {\n return new TZDate(+this, timeZone);\n }\n\n //#region date-fns integration\n\n [Symbol.for(\"constructDateFrom\")](date) {\n return new TZDate(+new Date(date), this.timeZone);\n }\n\n //#endregion\n}"],"names":["TZDate","TZDateMini","tz","args","sign","hours","minutes","day","date","month","year","time","tzName","locales","options","offset","timeZone"],"mappings":";;AAEO,MAAMA,UAAeC,EAAW;AAAA;AAAA,EAGrC,OAAO,GAAGC,MAAOC,GAAM;AACrB,WAAOA,EAAK,SAAS,IAAIH,EAAO,GAAGG,GAAMD,CAAE,IAAI,IAAIF,EAAO,KAAK,IAAG,GAAIE,CAAE;AAAA,EAC1E;AAAA;AAAA;AAAA,EAMA,cAAc;AACZ,UAAM,CAACE,GAAMC,GAAOC,CAAO,IAAI,KAAK,aAAY,GAC1CJ,IAAK,GAAGE,CAAI,GAAGC,CAAK,IAAIC,CAAO;AACrC,WAAO,KAAK,SAAS,YAAW,EAAG,MAAM,GAAG,EAAE,IAAIJ;AAAA,EACpD;AAAA,EACA,WAAW;AAET,WAAO,GAAG,KAAK,aAAY,CAAE,IAAI,KAAK,aAAY,CAAE;AAAA,EACtD;AAAA,EACA,eAAe;AAEb,UAAM,CAACK,GAAKC,GAAMC,GAAOC,CAAI,IAAI,KAAK,SAAS,cAAc,MAAM,GAAG;AAEtE,WAAO,GAAGH,GAAK,MAAM,GAAG,EAAE,CAAC,IAAqBE,CAAK,IAAID,CAAI,IAAIE,CAAI;AAAA,EACvE;AAAA,EACA,eAAe;AAEb,UAAMC,IAAO,KAAK,SAAS,YAAW,EAAG,MAAM,GAAG,EAAE,CAAC,GAC/C,CAACP,GAAMC,GAAOC,CAAO,IAAI,KAAK,aAAY;AAEhD,WAAO,GAAGK,CAAI,OAAOP,CAAI,GAAGC,CAAK,GAAGC,CAAO,KAAKM,EAAO,KAAK,UAAU,IAAI,CAAC;AAAA,EAC7E;AAAA,EACA,eAAeC,GAASC,GAAS;AAC/B,WAAO,KAAK,UAAU,eAAe,KAAK,MAAMD,GAAS;AAAA,MACvD,GAAGC;AAAA,MACH,UAAUA,GAAS,YAAY,KAAK;AAAA,IAC1C,CAAK;AAAA,EACH;AAAA,EACA,mBAAmBD,GAASC,GAAS;AACnC,WAAO,KAAK,UAAU,mBAAmB,KAAK,MAAMD,GAAS;AAAA,MAC3D,GAAGC;AAAA,MACH,UAAUA,GAAS,YAAY,KAAK;AAAA,IAC1C,CAAK;AAAA,EACH;AAAA,EACA,mBAAmBD,GAASC,GAAS;AACnC,WAAO,KAAK,UAAU,mBAAmB,KAAK,MAAMD,GAAS;AAAA,MAC3D,GAAGC;AAAA,MACH,UAAUA,GAAS,YAAY,KAAK;AAAA,IAC1C,CAAK;AAAA,EACH;AAAA;AAAA;AAAA,EAMA,eAAe;AACb,UAAMC,IAAS,KAAK,kBAAiB,GAC/BX,IAAOW,IAAS,IAAI,MAAM,KAC1BV,IAAQ,OAAO,KAAK,MAAM,KAAK,IAAIU,CAAM,IAAI,EAAE,CAAC,EAAE,SAAS,GAAG,GAAG,GACjET,IAAU,OAAO,KAAK,IAAIS,CAAM,IAAI,EAAE,EAAE,SAAS,GAAG,GAAG;AAC7D,WAAO,CAACX,GAAMC,GAAOC,CAAO;AAAA,EAC9B;AAAA;AAAA,EAIA,aAAaU,GAAU;AACrB,WAAO,IAAIhB,EAAO,CAAC,MAAMgB,CAAQ;AAAA,EACnC;AAAA;AAAA,EAIA,CAAC,uBAAO,IAAI,mBAAmB,CAAC,EAAER,GAAM;AACtC,WAAO,IAAIR,EAAO,CAAC,IAAI,KAAKQ,CAAI,GAAG,KAAK,QAAQ;AAAA,EAClD;AAAA;AAGF;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index171.js","sources":["../../../node_modules/@base-ui/react/dialog/root/DialogRootContext.mjs"],"sourcesContent":["'use client';\n\nimport _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nexport const IsDrawerContext = /*#__PURE__*/React.createContext(false);\nif (process.env.NODE_ENV !== \"production\") IsDrawerContext.displayName = \"IsDrawerContext\";\nexport const DialogRootContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== \"production\") DialogRootContext.displayName = \"DialogRootContext\";\nexport function useDialogRootContext(optional) {\n const dialogRootContext = React.useContext(DialogRootContext);\n if (optional === false && dialogRootContext === undefined) {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: DialogRootContext is missing. Dialog parts must be placed within <Dialog.Root>.' : _formatErrorMessage(27));\n }\n return dialogRootContext;\n}"],"names":["IsDrawerContext","React","DialogRootContext","useDialogRootContext","optional","dialogRootContext","_formatErrorMessage"],"mappings":";;AAIY,MAACA,IAA+B,gBAAAC,EAAM,cAAc,EAAK;AACjE,QAAQ,IAAI,aAAa,iBAAcD,EAAgB,cAAc;AAC7D,MAACE,IAAiC,gBAAAD,EAAM,cAAc,MAAS;AACvE,QAAQ,IAAI,aAAa,iBAAcC,EAAkB,cAAc;AACpE,SAASC,EAAqBC,GAAU;AAC7C,QAAMC,IAAoBJ,EAAM,WAAWC,CAAiB;AAC5D,MAAIE,MAAa,MAASC,MAAsB;AAC9C,UAAM,IAAI,MAAM,QAAQ,IAAI,aAAa,eAAe,6FAA6FC,EAAoB,EAAE,CAAC;AAE9K,SAAOD;AACT;","x_google_ignoreList":[0]}
package/dist/index172.js CHANGED
@@ -1,12 +1,72 @@
1
- function o(e, n, t = "long") {
2
- return new Intl.DateTimeFormat("en-US", {
3
- // Enforces engine to render the time. Without the option JavaScriptCore omits it.
4
- hour: "numeric",
5
- timeZone: e,
6
- timeZoneName: t
7
- }).format(n).split(/\s/g).slice(2).join(" ");
1
+ import b from "./index190.js";
2
+ import * as c from "react";
3
+ import { createElement as p } from "react";
4
+ import { useMergedRefs as E, useMergedRefsN as g } from "./index255.js";
5
+ import { getReactElementRef as y } from "./index338.js";
6
+ import { mergeObjects as R } from "./index339.js";
7
+ import { warn as v } from "./index340.js";
8
+ import { EMPTY_OBJECT as f } from "./index264.js";
9
+ import { getStateAttributesProps as w } from "./index341.js";
10
+ import { resolveClassName as C } from "./index342.js";
11
+ import { resolveStyle as T } from "./index343.js";
12
+ import { mergeClassNames as _, mergeProps as h, mergePropsN as k } from "./index282.js";
13
+ function q(r, e, t = {}) {
14
+ const a = e.render, s = I(e, t);
15
+ if (t.enabled === !1)
16
+ return null;
17
+ const n = t.state ?? f;
18
+ return B(r, a, s, n);
19
+ }
20
+ function I(r, e = {}) {
21
+ const {
22
+ className: t,
23
+ style: a,
24
+ render: s
25
+ } = r, {
26
+ state: n = f,
27
+ ref: l,
28
+ props: u,
29
+ stateAttributesMapping: N,
30
+ enabled: i = !0
31
+ } = e, d = i ? C(t, n) : void 0, m = i ? T(a, n) : void 0, P = i ? w(n, N) : f, A = i && u ? O(u) : void 0, o = i ? R(P, A) ?? {} : f;
32
+ return typeof document < "u" && (i ? Array.isArray(l) ? o.ref = g([o.ref, y(s), ...l]) : o.ref = E(o.ref, y(s), l) : E(null, null)), i ? (d !== void 0 && (o.className = _(o.className, d)), m !== void 0 && (o.style = R(o.style, m)), o) : f;
33
+ }
34
+ function O(r) {
35
+ return Array.isArray(r) ? k(r) : h(void 0, r);
36
+ }
37
+ const M = /* @__PURE__ */ Symbol.for("react.lazy"), V = /^[A-Z][A-Za-z0-9$]*$/, $ = /[a-z]/;
38
+ function B(r, e, t, a) {
39
+ if (e) {
40
+ if (typeof e == "function")
41
+ return process.env.NODE_ENV !== "production" && D(e), e(t, a);
42
+ const s = h(t, e.props);
43
+ s.ref = t.ref;
44
+ let n = e;
45
+ if (n?.$$typeof === M && (n = c.Children.toArray(e)[0]), process.env.NODE_ENV !== "production" && !/* @__PURE__ */ c.isValidElement(n))
46
+ throw new Error(["Base UI: The `render` prop was provided an invalid React element as `React.isValidElement(render)` is `false`.", "A valid React element must be provided to the `render` prop because it is cloned with props to replace the default element.", "https://base-ui.com/r/invalid-render-prop"].join(`
47
+ `));
48
+ return /* @__PURE__ */ c.cloneElement(n, s);
49
+ }
50
+ if (r && typeof r == "string")
51
+ return L(r, t);
52
+ throw new Error(process.env.NODE_ENV !== "production" ? "Base UI: Render element or function are not defined." : b(8));
53
+ }
54
+ function D(r) {
55
+ const e = r.name;
56
+ e.length !== 0 && V.test(e) && $.test(e) && v(`The \`render\` prop received a function named \`${e}\` that starts with an uppercase letter.`, "This usually means a React component was passed directly as `render={Component}`.", "Base UI calls `render` as a plain function, which can break the Rules of Hooks during reconciliation.", "If this is an intentional render callback, rename it to start with a lowercase letter.", "Use `render={<Component />}` or `render={(props) => <Component {...props} />}` instead.", "https://base-ui.com/r/invalid-render-prop");
57
+ }
58
+ function L(r, e) {
59
+ return r === "button" ? /* @__PURE__ */ p("button", {
60
+ type: "button",
61
+ ...e,
62
+ key: e.key
63
+ }) : r === "img" ? /* @__PURE__ */ p("img", {
64
+ alt: "",
65
+ ...e,
66
+ key: e.key
67
+ }) : /* @__PURE__ */ c.createElement(r, e);
8
68
  }
9
69
  export {
10
- o as tzName
70
+ q as useRenderElement
11
71
  };
12
72
  //# sourceMappingURL=index172.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index172.js","sources":["../../../node_modules/@date-fns/tz/tzName/index.js"],"sourcesContent":["/**\n * Time zone name format.\n */\n\n/**\n * The function returns the time zone name for the given date in the specified\n * time zone.\n *\n * It uses the `Intl.DateTimeFormat` API and by default outputs the time zone\n * name in a long format, e.g. \"Pacific Standard Time\" or\n * \"Singapore Standard Time\".\n *\n * It is possible to specify the format as the third argument using one of the following options\n *\n * - \"short\": e.g. \"EDT\" or \"GMT+8\".\n * - \"long\": e.g. \"Eastern Daylight Time\".\n * - \"shortGeneric\": e.g. \"ET\" or \"Singapore Time\".\n * - \"longGeneric\": e.g. \"Eastern Time\" or \"Singapore Standard Time\".\n *\n * These options correspond to TR35 tokens `z..zzz`, `zzzz`, `v`, and `vvvv` respectively: https://www.unicode.org/reports/tr35/tr35-dates.html#dfst-zone\n *\n * @param timeZone - Time zone name (IANA or UTC offset)\n * @param date - Date object to get the time zone name for\n * @param format - Optional format of the time zone name. Defaults to \"long\". Can be \"short\", \"long\", \"shortGeneric\", or \"longGeneric\".\n *\n * @returns Time zone name (e.g. \"Singapore Standard Time\")\n */\nexport function tzName(timeZone, date, format = \"long\") {\n return new Intl.DateTimeFormat(\"en-US\", {\n // Enforces engine to render the time. Without the option JavaScriptCore omits it.\n hour: \"numeric\",\n timeZone: timeZone,\n timeZoneName: format\n }).format(date).split(/\\s/g) // Format.JS uses non-breaking spaces\n .slice(2) // Skip the hour and AM/PM parts\n .join(\" \");\n}"],"names":["tzName","timeZone","date","format"],"mappings":"AA2BO,SAASA,EAAOC,GAAUC,GAAMC,IAAS,QAAQ;AACtD,SAAO,IAAI,KAAK,eAAe,SAAS;AAAA;AAAA,IAEtC,MAAM;AAAA,IACN,UAAUF;AAAA,IACV,cAAcE;AAAA,EAClB,CAAG,EAAE,OAAOD,CAAI,EAAE,MAAM,KAAK,EAC1B,MAAM,CAAC,EACP,KAAK,GAAG;AACX;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index172.js","sources":["../../../node_modules/@base-ui/react/internals/useRenderElement.mjs"],"sourcesContent":["import _formatErrorMessage from \"@base-ui/utils/formatErrorMessage\";\nimport * as React from 'react';\nimport { useMergedRefs, useMergedRefsN } from '@base-ui/utils/useMergedRefs';\nimport { getReactElementRef } from '@base-ui/utils/getReactElementRef';\nimport { mergeObjects } from '@base-ui/utils/mergeObjects';\nimport { warn } from '@base-ui/utils/warn';\nimport { EMPTY_OBJECT } from '@base-ui/utils/empty';\nimport { getStateAttributesProps } from \"./getStateAttributesProps.mjs\";\nimport { resolveClassName } from \"../utils/resolveClassName.mjs\";\nimport { resolveStyle } from \"../utils/resolveStyle.mjs\";\nimport { mergeProps, mergePropsN, mergeClassNames } from \"../merge-props/index.mjs\";\nimport { createElement as _createElement } from \"react\";\n/**\n * Renders a Base UI element.\n *\n * @param element The default HTML element to render. Can be overridden by the `render` prop.\n * @param componentProps An object containing the `render` and `className` props to be used for element customization. Other props are ignored.\n * @param params Additional parameters for rendering the element.\n */\nexport function useRenderElement(element, componentProps, params = {}) {\n const renderProp = componentProps.render;\n const outProps = useRenderElementProps(componentProps, params);\n if (params.enabled === false) {\n return null;\n }\n const state = params.state ?? EMPTY_OBJECT;\n return evaluateRenderProp(element, renderProp, outProps, state);\n}\n\n/**\n * Computes render element final props.\n */\nfunction useRenderElementProps(componentProps, params = {}) {\n const {\n className: classNameProp,\n style: styleProp,\n render: renderProp\n } = componentProps;\n const {\n state = EMPTY_OBJECT,\n ref,\n props,\n stateAttributesMapping,\n enabled = true\n } = params;\n const className = enabled ? resolveClassName(classNameProp, state) : undefined;\n const style = enabled ? resolveStyle(styleProp, state) : undefined;\n const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping) : EMPTY_OBJECT;\n const resolvedProps = enabled && props ? resolveRenderFunctionProps(props) : undefined;\n\n // Ensure outProps is always a new mutable object when enabled, never EMPTY_OBJECT.\n // This prevents potential TypeError when setting ref, className, or style properties,\n // since EMPTY_OBJECT is frozen and mutations would fail in strict mode.\n const outProps = enabled ? mergeObjects(stateProps, resolvedProps) ?? {} : EMPTY_OBJECT;\n\n // SAFETY: The `useMergedRefs` functions use a single hook to store the same value,\n // switching between them at runtime is safe. If this assertion fails, React will\n // throw at runtime anyway.\n // This also skips the `useMergedRefs` call on the server, which is fine because\n // refs are not used on the server side.\n /* eslint-disable react-hooks/rules-of-hooks */\n if (typeof document !== 'undefined') {\n if (!enabled) {\n useMergedRefs(null, null);\n } else if (Array.isArray(ref)) {\n outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]);\n } else {\n outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref);\n }\n }\n if (!enabled) {\n return EMPTY_OBJECT;\n }\n if (className !== undefined) {\n outProps.className = mergeClassNames(outProps.className, className);\n }\n if (style !== undefined) {\n outProps.style = mergeObjects(outProps.style, style);\n }\n return outProps;\n}\nfunction resolveRenderFunctionProps(props) {\n if (Array.isArray(props)) {\n return mergePropsN(props);\n }\n return mergeProps(undefined, props);\n}\n\n// The symbol React uses internally for lazy components\n// https://github.com/facebook/react/blob/a0566250b210499b4c5677f5ac2eedbd71d51a1b/packages/shared/ReactSymbols.js#L31\n//\n// TODO delete once https://github.com/facebook/react/issues/32392 is fixed\nconst REACT_LAZY_TYPE = Symbol.for('react.lazy');\nconst COMPONENT_IDENTIFIER_PATTERN = /^[A-Z][A-Za-z0-9$]*$/;\nconst LOWERCASE_CHARACTER_PATTERN = /[a-z]/;\nfunction evaluateRenderProp(element, render, props, state) {\n if (render) {\n if (typeof render === 'function') {\n if (process.env.NODE_ENV !== 'production') {\n warnIfRenderPropLooksLikeComponent(render);\n }\n return render(props, state);\n }\n const mergedProps = mergeProps(props, render.props);\n mergedProps.ref = props.ref;\n let newElement = render;\n\n // Workaround for https://github.com/facebook/react/issues/32392\n // This works because the toArray() logic unwrap lazy element type in\n // https://github.com/facebook/react/blob/a0566250b210499b4c5677f5ac2eedbd71d51a1b/packages/react/src/ReactChildren.js#L186\n if (newElement?.$$typeof === REACT_LAZY_TYPE) {\n const children = React.Children.toArray(render);\n newElement = children[0];\n }\n\n // There is a high number of indirections, the error message thrown by React.cloneElement() is\n // hard to use for developers, this logic provides a better context.\n //\n // Our general guideline is to never change the control flow depending on the environment.\n // However, React.cloneElement() throws if React.isValidElement() is false,\n // so we can throw before with custom message.\n if (process.env.NODE_ENV !== 'production') {\n if (! /*#__PURE__*/React.isValidElement(newElement)) {\n // TODO: fix mui/no-guarded-throw\n // eslint-disable-next-line mui/no-guarded-throw\n throw new Error(['Base UI: The `render` prop was provided an invalid React element as `React.isValidElement(render)` is `false`.', 'A valid React element must be provided to the `render` prop because it is cloned with props to replace the default element.', 'https://base-ui.com/r/invalid-render-prop'].join('\\n'));\n }\n }\n return /*#__PURE__*/React.cloneElement(newElement, mergedProps);\n }\n if (element) {\n if (typeof element === 'string') {\n return renderTag(element, props);\n }\n }\n // Unreachable, but the typings on `useRenderElement` need to be reworked\n // to annotate it correctly.\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'Base UI: Render element or function are not defined.' : _formatErrorMessage(8));\n}\nfunction warnIfRenderPropLooksLikeComponent(renderFn) {\n const functionName = renderFn.name;\n if (functionName.length === 0) {\n return;\n }\n if (!COMPONENT_IDENTIFIER_PATTERN.test(functionName)) {\n return;\n }\n if (!LOWERCASE_CHARACTER_PATTERN.test(functionName)) {\n return;\n }\n warn(`The \\`render\\` prop received a function named \\`${functionName}\\` that starts with an uppercase letter.`, 'This usually means a React component was passed directly as `render={Component}`.', 'Base UI calls `render` as a plain function, which can break the Rules of Hooks during reconciliation.', 'If this is an intentional render callback, rename it to start with a lowercase letter.', 'Use `render={<Component />}` or `render={(props) => <Component {...props} />}` instead.', 'https://base-ui.com/r/invalid-render-prop');\n}\nfunction renderTag(Tag, props) {\n if (Tag === 'button') {\n return /*#__PURE__*/_createElement(\"button\", {\n type: \"button\",\n ...props,\n key: props.key\n });\n }\n if (Tag === 'img') {\n return /*#__PURE__*/_createElement(\"img\", {\n alt: \"\",\n ...props,\n key: props.key\n });\n }\n return /*#__PURE__*/React.createElement(Tag, props);\n}"],"names":["useRenderElement","element","componentProps","params","renderProp","outProps","useRenderElementProps","state","EMPTY_OBJECT","evaluateRenderProp","classNameProp","styleProp","ref","props","stateAttributesMapping","enabled","className","resolveClassName","style","resolveStyle","stateProps","getStateAttributesProps","resolvedProps","resolveRenderFunctionProps","mergeObjects","useMergedRefsN","getReactElementRef","useMergedRefs","mergeClassNames","mergePropsN","mergeProps","REACT_LAZY_TYPE","COMPONENT_IDENTIFIER_PATTERN","LOWERCASE_CHARACTER_PATTERN","render","warnIfRenderPropLooksLikeComponent","mergedProps","newElement","React","renderTag","_formatErrorMessage","renderFn","functionName","warn","Tag","_createElement"],"mappings":"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","x_google_ignoreList":[0]}