@rpcbase/ui 0.280.0 → 0.281.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AddressAutocompleteInput/index.d.ts +1 -1
- package/dist/components/AddressAutocompleteInput/index.d.ts.map +1 -1
- package/dist/components/ApplePayButton/index.d.ts +1 -1
- package/dist/components/ApplePayButton/index.d.ts.map +1 -1
- package/dist/components/Checkbox/index.d.ts +1 -1
- package/dist/components/Checkbox/index.d.ts.map +1 -1
- package/dist/components/DayPickerField/index.d.ts +2 -2
- package/dist/components/DayPickerField/index.d.ts.map +1 -1
- package/dist/components/Dialog/index.d.ts +9 -9
- package/dist/components/Dialog/index.d.ts.map +1 -1
- package/dist/components/FilesUploadField/index.d.ts +1 -1
- package/dist/components/FilesUploadField/index.d.ts.map +1 -1
- package/dist/components/HourPickerField/index.d.ts +2 -2
- package/dist/components/HourPickerField/index.d.ts.map +1 -1
- package/dist/components/I18nField/index.d.ts +1 -1
- package/dist/components/I18nField/index.d.ts.map +1 -1
- package/dist/components/Image/index.d.ts +1 -1
- package/dist/components/Image/index.d.ts.map +1 -1
- package/dist/components/ImagesField/index.d.ts +1 -1
- package/dist/components/ImagesField/index.d.ts.map +1 -1
- package/dist/components/Input/index.d.ts +1 -1
- package/dist/components/Input/index.d.ts.map +1 -1
- package/dist/components/Notifications/NotificationsButton.d.ts +1 -1
- package/dist/components/Notifications/NotificationsButton.d.ts.map +1 -1
- package/dist/components/Notifications/NotificationsDrawer.d.ts +1 -1
- package/dist/components/Notifications/NotificationsDrawer.d.ts.map +1 -1
- package/dist/components/Notifications/NotificationsSettings.d.ts +1 -1
- package/dist/components/Notifications/NotificationsSettings.d.ts.map +1 -1
- package/dist/components/PhoneNumberInput/suggestions.d.ts +3 -3
- package/dist/components/PhoneNumberInput/suggestions.d.ts.map +1 -1
- package/dist/components/Select/index.d.ts +2 -2
- package/dist/components/Select/index.d.ts.map +1 -1
- package/dist/components/header/MenuPopover/index.d.ts +1 -1
- package/dist/components/header/MenuPopover/index.d.ts.map +1 -1
- package/dist/index.js +12 -12
- package/dist/index10.js +6 -4
- package/dist/index10.js.map +1 -1
- package/dist/index12.js.map +1 -1
- package/dist/index13.js.map +1 -1
- package/dist/index14.js.map +1 -1
- package/dist/index15.js.map +1 -1
- package/dist/index154.js +19 -7
- package/dist/index154.js.map +1 -1
- package/dist/index16.js +36 -45
- package/dist/index16.js.map +1 -1
- package/dist/index160.js +3 -3
- package/dist/index160.js.map +1 -1
- package/dist/index166.js +5 -5
- package/dist/index166.js.map +1 -1
- package/dist/index172.js +27 -25
- package/dist/index172.js.map +1 -1
- package/dist/index181.js +1 -1
- package/dist/index181.js.map +1 -1
- package/dist/index182.js +145 -162
- package/dist/index182.js.map +1 -1
- package/dist/index184.js +6 -8
- package/dist/index184.js.map +1 -1
- package/dist/index186.js +2 -8
- package/dist/index186.js.map +1 -1
- package/dist/index19.js +1 -1
- package/dist/index19.js.map +1 -1
- package/dist/index195.js +1 -1
- package/dist/index195.js.map +1 -1
- package/dist/index196.js +2 -2
- package/dist/index196.js.map +1 -1
- package/dist/index197.js +1 -1
- package/dist/index197.js.map +1 -1
- package/dist/index198.js +16 -15
- package/dist/index198.js.map +1 -1
- package/dist/index199.js +13 -17
- package/dist/index199.js.map +1 -1
- package/dist/index200.js +3 -2
- package/dist/index200.js.map +1 -1
- package/dist/index207.js +5 -90
- package/dist/index207.js.map +1 -1
- package/dist/index208.js +15 -3
- package/dist/index208.js.map +1 -1
- package/dist/index209.js +102 -22
- package/dist/index209.js.map +1 -1
- package/dist/index210.js +3 -28
- package/dist/index210.js.map +1 -1
- package/dist/index211.js +23 -19
- package/dist/index211.js.map +1 -1
- package/dist/index212.js +27 -6
- package/dist/index212.js.map +1 -1
- package/dist/index213.js +19 -14
- package/dist/index213.js.map +1 -1
- package/dist/index214.js +5 -6
- package/dist/index214.js.map +1 -1
- package/dist/index215.js +14 -26
- package/dist/index215.js.map +1 -1
- package/dist/index216.js +7 -22
- package/dist/index216.js.map +1 -1
- package/dist/index217.js +27 -6
- package/dist/index217.js.map +1 -1
- package/dist/index218.js +23 -5
- package/dist/index218.js.map +1 -1
- package/dist/index219.js +6 -4
- package/dist/index219.js.map +1 -1
- package/dist/index220.js +5 -4
- package/dist/index220.js.map +1 -1
- package/dist/index221.js +4 -24
- package/dist/index221.js.map +1 -1
- package/dist/index222.js +4 -3
- package/dist/index222.js.map +1 -1
- package/dist/index223.js +21 -21
- package/dist/index223.js.map +1 -1
- package/dist/index224.js +3 -23
- package/dist/index224.js.map +1 -1
- package/dist/index225.js +23 -6
- package/dist/index225.js.map +1 -1
- package/dist/index226.js +22 -9
- package/dist/index226.js.map +1 -1
- package/dist/index227.js +5 -17
- package/dist/index227.js.map +1 -1
- package/dist/index228.js +8 -49
- package/dist/index228.js.map +1 -1
- package/dist/index229.js +18 -5
- package/dist/index229.js.map +1 -1
- package/dist/index230.js +50 -19
- package/dist/index230.js.map +1 -1
- package/dist/index231.js +20 -28
- package/dist/index231.js.map +1 -1
- package/dist/index232.js +27 -104
- package/dist/index232.js.map +1 -1
- package/dist/index233.js +98 -33
- package/dist/index233.js.map +1 -1
- package/dist/index234.js +28 -113
- package/dist/index234.js.map +1 -1
- package/dist/index235.js +117 -11
- package/dist/index235.js.map +1 -1
- package/dist/index236.js +12 -4
- package/dist/index236.js.map +1 -1
- package/dist/index237.js +4 -15
- package/dist/index237.js.map +1 -1
- package/dist/index238.js +13 -62
- package/dist/index238.js.map +1 -1
- package/dist/index239.js +64 -9
- package/dist/index239.js.map +1 -1
- package/dist/index240.js +10 -106
- package/dist/index240.js.map +1 -1
- package/dist/index241.js +107 -13
- package/dist/index241.js.map +1 -1
- package/dist/index242.js +16 -13
- package/dist/index242.js.map +1 -1
- package/dist/index243.js +13 -5
- package/dist/index243.js.map +1 -1
- package/dist/index244.js +4 -316
- package/dist/index244.js.map +1 -1
- package/dist/index245.js +315 -58
- package/dist/index245.js.map +1 -1
- package/dist/index246.js +58 -223
- package/dist/index246.js.map +1 -1
- package/dist/index247.js +215 -318
- package/dist/index247.js.map +1 -1
- package/dist/index248.js +250 -306
- package/dist/index248.js.map +1 -1
- package/dist/index249.js +308 -173
- package/dist/index249.js.map +1 -1
- package/dist/index250.js +178 -7
- package/dist/index250.js.map +1 -1
- package/dist/index251.js +8 -15
- package/dist/index251.js.map +1 -1
- package/dist/index252.js +41 -5
- package/dist/index252.js.map +1 -1
- package/dist/index253.js +46 -38
- package/dist/index253.js.map +1 -1
- package/dist/index254.js +7 -50
- package/dist/index254.js.map +1 -1
- package/dist/index255.js +49 -6
- package/dist/index255.js.map +1 -1
- package/dist/index256.js +48 -46
- package/dist/index256.js.map +1 -1
- package/dist/index257.js +6 -51
- package/dist/index257.js.map +1 -1
- package/dist/index258.js +10 -9
- package/dist/index258.js.map +1 -1
- package/dist/index259.js +60 -8
- package/dist/index259.js.map +1 -1
- package/dist/index26.js.map +1 -1
- package/dist/index260.js +41 -60
- package/dist/index260.js.map +1 -1
- package/dist/index261.js +88 -34
- package/dist/index261.js.map +1 -1
- package/dist/index262.js +47 -94
- package/dist/index262.js.map +1 -1
- package/dist/index263.js +36 -49
- package/dist/index263.js.map +1 -1
- package/dist/index264.js +45 -32
- package/dist/index264.js.map +1 -1
- package/dist/index265.js +47 -46
- package/dist/index265.js.map +1 -1
- package/dist/index266.js +18 -48
- package/dist/index266.js.map +1 -1
- package/dist/index267.js +174 -15
- package/dist/index267.js.map +1 -1
- package/dist/index268.js +47 -169
- package/dist/index268.js.map +1 -1
- package/dist/index269.js +17 -34
- package/dist/index269.js.map +1 -1
- package/dist/index270.js +59 -10
- package/dist/index270.js.map +1 -1
- package/dist/index271.js +10 -66
- package/dist/index271.js.map +1 -1
- package/dist/index272.js +4 -4
- package/dist/index273.js +71 -69
- package/dist/index273.js.map +1 -1
- package/dist/index274.js +158 -152
- package/dist/index274.js.map +1 -1
- package/dist/index275.js +7 -13
- package/dist/index275.js.map +1 -1
- package/dist/index276.js +12 -5
- package/dist/index276.js.map +1 -1
- package/dist/index277.js +12 -6
- package/dist/index277.js.map +1 -1
- package/dist/index278.js +11 -12
- package/dist/index278.js.map +1 -1
- package/dist/index279.js +65 -9
- package/dist/index279.js.map +1 -1
- package/dist/index280.js +6 -74
- package/dist/index280.js.map +1 -1
- package/dist/index281.js +25 -6
- package/dist/index281.js.map +1 -1
- package/dist/index282.js +24 -24
- package/dist/index282.js.map +1 -1
- package/dist/index283.js +125 -24
- package/dist/index283.js.map +1 -1
- package/dist/index284.js +52 -115
- package/dist/index284.js.map +1 -1
- package/dist/index285.js +59 -55
- package/dist/index285.js.map +1 -1
- package/dist/index286.js +48 -61
- package/dist/index286.js.map +1 -1
- package/dist/index287.js +5 -48
- package/dist/index287.js.map +1 -1
- package/dist/index288.js +14 -8
- package/dist/index288.js.map +1 -1
- package/dist/index289.js +18 -14
- package/dist/index289.js.map +1 -1
- package/dist/index290.js +10 -17
- package/dist/index290.js.map +1 -1
- package/dist/index291.js +23 -11
- package/dist/index291.js.map +1 -1
- package/dist/index292.js +52 -25
- package/dist/index292.js.map +1 -1
- package/dist/index293.js +6 -52
- package/dist/index293.js.map +1 -1
- package/dist/index294.js +137 -5
- package/dist/index294.js.map +1 -1
- package/dist/index295.js +59 -149
- package/dist/index295.js.map +1 -1
- package/dist/index296.js +90 -49
- package/dist/index296.js.map +1 -1
- package/dist/index297.js +11 -117
- package/dist/index297.js.map +1 -1
- package/dist/index298.js +863 -11
- package/dist/index298.js.map +1 -1
- package/dist/index299.js +21 -865
- package/dist/index299.js.map +1 -1
- package/dist/index3.js.map +1 -1
- package/dist/index300.js +417 -27
- package/dist/index300.js.map +1 -1
- package/dist/index301.js +774 -483
- package/dist/index301.js.map +1 -1
- package/dist/index302.js +7436 -803
- package/dist/index302.js.map +1 -1
- package/dist/index303.js +7 -7429
- package/dist/index303.js.map +1 -1
- package/dist/index304.js +12 -6
- package/dist/index304.js.map +1 -1
- package/dist/index305.js +5 -12
- package/dist/index305.js.map +1 -1
- package/dist/index306.js +3 -3
- package/dist/index306.js.map +1 -1
- package/dist/index307.js +469 -5
- package/dist/index307.js.map +1 -1
- package/dist/index308.js +32 -464
- package/dist/index308.js.map +1 -1
- package/dist/index309.js +18 -36
- package/dist/index309.js.map +1 -1
- package/dist/index310.js +28 -17
- package/dist/index310.js.map +1 -1
- package/dist/index311.js +4 -30
- package/dist/index311.js.map +1 -1
- package/dist/index312.js +59 -4
- package/dist/index312.js.map +1 -1
- package/dist/index313.js +11 -59
- package/dist/index313.js.map +1 -1
- package/dist/index314.js +5 -9
- package/dist/index314.js.map +1 -1
- package/dist/index315.js +9 -5
- package/dist/index315.js.map +1 -1
- package/dist/index316.js +12 -9
- package/dist/index316.js.map +1 -1
- package/dist/index317.js +3 -13
- package/dist/index317.js.map +1 -1
- package/dist/index318.js +17 -3
- package/dist/index318.js.map +1 -1
- package/dist/index319.js +23 -14
- package/dist/index319.js.map +1 -1
- package/dist/index320.js +39 -23
- package/dist/index320.js.map +1 -1
- package/dist/index321.js +5 -41
- package/dist/index321.js.map +1 -1
- package/dist/index322.js +25 -5
- package/dist/index322.js.map +1 -1
- package/dist/index323.js +18 -24
- package/dist/index323.js.map +1 -1
- package/dist/index324.js +32 -17
- package/dist/index324.js.map +1 -1
- package/dist/index325.js +5 -34
- package/dist/index325.js.map +1 -1
- package/dist/index326.js +9 -5
- package/dist/index326.js.map +1 -1
- package/dist/index327.js +7 -8
- package/dist/index327.js.map +1 -1
- package/dist/index328.js +9 -8
- package/dist/index328.js.map +1 -1
- package/dist/index329.js +10 -9
- package/dist/index329.js.map +1 -1
- package/dist/index330.js +7 -10
- package/dist/index330.js.map +1 -1
- package/dist/index331.js +75 -7
- package/dist/index331.js.map +1 -1
- package/dist/index332.js +153 -66
- package/dist/index332.js.map +1 -1
- package/dist/index333.js +99 -147
- package/dist/index333.js.map +1 -1
- package/dist/index334.js +13 -113
- package/dist/index334.js.map +1 -1
- package/dist/index335.js +78 -12
- package/dist/index335.js.map +1 -1
- package/dist/index336.js +23 -57
- package/dist/index336.js.map +1 -1
- package/dist/index337.js +12 -45
- package/dist/index337.js.map +1 -1
- package/dist/index338.js +16 -13
- package/dist/index338.js.map +1 -1
- package/dist/index339.js +100 -15
- package/dist/index339.js.map +1 -1
- package/dist/index340.js +50 -95
- package/dist/index340.js.map +1 -1
- package/dist/index341.js +57 -5
- package/dist/index341.js.map +1 -1
- package/dist/index342.js +41 -78
- package/dist/index342.js.map +1 -1
- package/dist/index343.js +100 -58
- package/dist/index343.js.map +1 -1
- package/dist/index344.js +46 -104
- package/dist/index344.js.map +1 -1
- package/dist/index345.js +39 -51
- package/dist/index345.js.map +1 -1
- package/dist/index346.js +143 -42
- package/dist/index346.js.map +1 -1
- package/dist/index347.js +122 -123
- package/dist/index347.js.map +1 -1
- package/dist/index348.js +224 -108
- package/dist/index348.js.map +1 -1
- package/dist/index349.js +158 -174
- package/dist/index349.js.map +1 -1
- package/dist/index350.js +213 -144
- package/dist/index350.js.map +1 -1
- package/dist/index351.js +5 -309
- package/dist/index351.js.map +1 -1
- package/dist/index352.js +6 -5
- package/dist/index352.js.map +1 -1
- package/dist/index353.js +7 -6
- package/dist/index353.js.map +1 -1
- package/dist/index354.js +4 -5
- package/dist/index354.js.map +1 -1
- package/dist/index355.js +4 -4
- package/dist/index355.js.map +1 -1
- package/dist/index356.js +21 -6
- package/dist/index356.js.map +1 -1
- package/dist/index357.js +10 -21
- package/dist/index357.js.map +1 -1
- package/dist/index358.js +128 -10
- package/dist/index358.js.map +1 -1
- package/dist/index359.js +36 -122
- package/dist/index359.js.map +1 -1
- package/dist/index360.js +64 -38
- package/dist/index360.js.map +1 -1
- package/dist/index361.js +115 -66
- package/dist/index361.js.map +1 -1
- package/dist/index362.js +485 -112
- package/dist/index362.js.map +1 -1
- package/dist/index363.js +7 -490
- package/dist/index363.js.map +1 -1
- package/dist/index364.js +1 -1
- package/dist/index364.js.map +1 -1
- package/dist/index367.js +2 -9
- package/dist/index367.js.map +1 -1
- package/dist/index368.js +26 -5
- package/dist/index368.js.map +1 -1
- package/dist/index369.js +43 -27
- package/dist/index369.js.map +1 -1
- package/dist/index370.js +35 -46
- package/dist/index370.js.map +1 -1
- package/dist/index371.js +16 -27
- package/dist/index371.js.map +1 -1
- package/dist/index372.js +41 -16
- package/dist/index372.js.map +1 -1
- package/dist/index373.js +11 -42
- package/dist/index373.js.map +1 -1
- package/dist/index374.js +10 -14
- package/dist/index374.js.map +1 -1
- package/dist/index375.js +51 -9
- package/dist/index375.js.map +1 -1
- package/dist/index376.js +40 -53
- package/dist/index376.js.map +1 -1
- package/dist/index377.js +17 -43
- package/dist/index377.js.map +1 -1
- package/dist/index378.js +4 -15
- package/dist/index378.js.map +1 -1
- package/dist/index379.js +4 -4
- package/dist/index379.js.map +1 -1
- package/dist/index380.js +9 -4
- package/dist/index380.js.map +1 -1
- package/dist/index381.js +304 -9
- package/dist/index381.js.map +1 -1
- package/dist/index382.js +4 -339
- package/dist/index382.js.map +1 -1
- package/dist/index383.js +21 -5
- package/dist/index383.js.map +1 -1
- package/dist/index384.js +106 -16
- package/dist/index384.js.map +1 -1
- package/dist/index385.js +19 -109
- package/dist/index385.js.map +1 -1
- package/dist/index386.js +18 -18
- package/dist/index386.js.map +1 -1
- package/dist/index387.js +14 -19
- package/dist/index387.js.map +1 -1
- package/dist/index388.js +12 -4
- package/dist/index388.js.map +1 -1
- package/dist/index389.js +113 -20
- package/dist/index389.js.map +1 -1
- package/dist/index390.js +5 -11
- package/dist/index390.js.map +1 -1
- package/dist/index391.js +28 -85
- package/dist/index391.js.map +1 -1
- package/dist/index392.js +9 -9
- package/dist/index392.js.map +1 -1
- package/dist/index393.js +6 -29
- package/dist/index393.js.map +1 -1
- package/dist/index394.js +254 -10
- package/dist/index394.js.map +1 -1
- package/dist/index395.js +12 -6
- package/dist/index395.js.map +1 -1
- package/dist/index396.js +11 -252
- package/dist/index396.js.map +1 -1
- package/dist/index397.js +6 -11
- package/dist/index397.js.map +1 -1
- package/dist/index398.js +22 -10
- package/dist/index398.js.map +1 -1
- package/dist/index399.js +22 -6
- package/dist/index399.js.map +1 -1
- package/dist/index4.js.map +1 -1
- package/dist/index400.js +103 -21
- package/dist/index400.js.map +1 -1
- package/dist/index401.js +15 -23
- package/dist/index401.js.map +1 -1
- package/dist/index402.js +11 -108
- package/dist/index402.js.map +1 -1
- package/dist/index403.js +10 -15
- package/dist/index403.js.map +1 -1
- package/dist/index404.js +237 -10
- package/dist/index404.js.map +1 -1
- package/dist/index405.js +27 -9
- package/dist/index405.js.map +1 -1
- package/dist/index406.js +33 -238
- package/dist/index406.js.map +1 -1
- package/dist/index407.js +11 -30
- package/dist/index407.js.map +1 -1
- package/dist/index408.js +118 -48
- package/dist/index408.js.map +1 -1
- package/dist/index409.js +39 -11
- package/dist/index409.js.map +1 -1
- package/dist/index410.js +18 -121
- package/dist/index410.js.map +1 -1
- package/dist/index411.js +11 -39
- package/dist/index411.js.map +1 -1
- package/dist/index412.js +21 -24
- package/dist/index412.js.map +1 -1
- package/dist/index413.js +17 -11
- package/dist/index413.js.map +1 -1
- package/dist/index414.js +10 -20
- package/dist/index414.js.map +1 -1
- package/dist/index415.js +4 -17
- package/dist/index415.js.map +1 -1
- package/dist/index416.js +300 -14
- package/dist/index416.js.map +1 -1
- package/dist/index417.js +61 -323
- package/dist/index417.js.map +1 -1
- package/dist/index418.js +4 -63
- package/dist/index418.js.map +1 -1
- package/dist/index419.js +28 -4
- package/dist/index419.js.map +1 -1
- package/dist/index420.js +468 -25
- package/dist/index420.js.map +1 -1
- package/dist/index421.js +250 -452
- package/dist/index421.js.map +1 -1
- package/dist/index6.js.map +1 -1
- package/dist/index7.js +91 -133
- package/dist/index7.js.map +1 -1
- package/dist/index70.js +2 -2
- package/dist/index70.js.map +1 -1
- package/dist/index71.js +11 -4
- package/dist/index71.js.map +1 -1
- package/dist/index72.js +1 -3
- package/dist/index72.js.map +1 -1
- package/dist/index8.js.map +1 -1
- package/dist/index9.js +16 -19
- package/dist/index9.js.map +1 -1
- package/dist/test-only/TestCoverageTestBadge/index.d.ts +1 -1
- package/dist/test-only/TestCoverageTestBadge/index.d.ts.map +1 -1
- package/package.json +15 -15
- package/dist/index422.js +0 -272
- package/dist/index422.js.map +0 -1
package/dist/index421.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index421.js","names":["createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","Context","Dialog","DialogPrimitive","Loader2","MoreVertical","X","cn","NotificationItem","NotificationsRealtimeState","ListResponse","ok","error","notifications","unreadCount","unseenCount","DayGroup","key","label","items","BrowserNotificationPermission","NotificationPermission","NotificationActionMode","NotificationAction","link","mode","toMs","iso","ms","Date","parse","Number","isFinite","getDayKey","date","getTime","year","getFullYear","month","String","getMonth","padStart","day","getDate","formatDayLabel","yearRaw","monthRaw","dayRaw","split","now","includeYear","toLocaleDateString","undefined","weekday","getNotificationLink","item","dataLink","data","trim","platformWebpush","platform","webpush","Array","isArray","fcmOptions","getNotificationActionMode","linkMode","getNotificationAction","getNotificationActionLabel","action","pushUrlWithoutReload","url","window","history","pushState","state","dispatchEvent","PopStateEvent","applyNotificationAction","currentUrl","URL","location","href","actionUrl","searchParams","forEach","value","set","hash","pathname","search","groupByDay","groups","currentKey","createdAt","push","length","getBrowserNotificationPermission","Notification","permission","EmptyRealtimeContext","NotificationsDrawer","open","onOpenChange","className","limit","defaultUnreadOnly","realtimeContext","realtime","setItems","setUnreadCount","setUnseenCount","loading","setLoading","setError","unreadOnly","setUnreadOnly","browserNotificationPermission","setBrowserNotificationPermission","browserNotificationPermissionRequesting","setBrowserNotificationPermissionRequesting","mergedItems","mergedUnreadCount","mergedUnseenCount","mergedLoading","mergedError","Error","message","visibleItems","slice","unread","filter","n","readAt","read","Boolean","unreadGroups","readGroups","refresh","markSeen","res","fetch","method","headers","credentials","body","JSON","stringify","json","catch","nextItems","Math","max","floor","keepalive","navigator","permissions","query","permissionStatus","PermissionStatus","disposed","syncPermission","name","PermissionName","then","status","addEventListener","removeEventListener","requestBrowserNotificationPermission","nextPermission","requestPermission","markAsRead","id","encodeURIComponent","nowIso","toISOString","current","target","find","count","seenAt","map","archive","requestClose","handleOpenChange","nextOpen","v","group","BrowserNotificationPermissionNotice","t0","$","_c","requesting","onEnable","t1","Symbol","for","isDenied","t2","t3","t4","t5","t6","t7","NotificationRow","notification","onMarkRead","onArchive","onAction","menuOpen","setMenuOpen","menuRef","menuButtonRef","isUnread","actionLabel","bb0","toLocaleString","createdAtLabel","handlePointerDown","event","Node","contains","handleKeyDown","event_0","focus","document","t8","title","t9","t10","t11","t12","t13","t14","t15","_temp","t16","t17","t18","t19"],"sources":["../src/components/Notifications/NotificationsDrawer.tsx"],"sourcesContent":["import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type Context } from \"react\"\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\nimport { Loader2, MoreVertical, X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport type { NotificationItem, NotificationsRealtimeState } from \"./types\"\n\n\ntype ListResponse = {\n ok?: boolean\n error?: string\n notifications?: NotificationItem[]\n unreadCount?: number\n unseenCount?: number\n}\n\ntype DayGroup = {\n key: string\n label: string\n items: NotificationItem[]\n}\n\ntype BrowserNotificationPermission = NotificationPermission | \"unsupported\"\ntype NotificationActionMode = \"navigate\" | \"merge_current_search\"\n\ntype NotificationAction = {\n link: string\n mode: NotificationActionMode\n}\n\nconst toMs = (iso: string): number => {\n const ms = Date.parse(iso)\n return Number.isFinite(ms) ? ms : 0\n}\n\nconst getDayKey = (iso: string): string => {\n const date = new Date(toMs(iso))\n if (!Number.isFinite(date.getTime())) return \"unknown\"\n\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, \"0\")\n const day = String(date.getDate()).padStart(2, \"0\")\n\n return `${year}-${month}-${day}`\n}\n\nconst formatDayLabel = (key: string): string => {\n if (key === \"unknown\") return \"Unknown date\"\n const [yearRaw, monthRaw, dayRaw] = key.split(\"-\")\n const year = Number(yearRaw)\n const month = Number(monthRaw)\n const day = Number(dayRaw)\n\n if (!Number.isFinite(year) || !Number.isFinite(month) || !Number.isFinite(day)) return \"Unknown date\"\n\n const date = new Date(year, month - 1, day)\n if (!Number.isFinite(date.getTime())) return \"Unknown date\"\n\n const now = new Date()\n const includeYear = now.getFullYear() !== year\n return date.toLocaleDateString(undefined, includeYear\n ? { weekday: \"short\", month: \"short\", day: \"numeric\", year: \"numeric\" }\n : { weekday: \"short\", month: \"short\", day: \"numeric\" })\n}\n\nconst getNotificationLink = (item: NotificationItem): string => {\n const dataLink = item.data?.link?.trim()\n if (dataLink) return dataLink\n\n const platformWebpush = item.platform?.webpush\n if (!platformWebpush || typeof platformWebpush !== \"object\" || Array.isArray(platformWebpush)) return \"\"\n const fcmOptions = (platformWebpush as { fcmOptions?: unknown }).fcmOptions\n if (!fcmOptions || typeof fcmOptions !== \"object\" || Array.isArray(fcmOptions)) return \"\"\n const link = (fcmOptions as { link?: unknown }).link\n return typeof link === \"string\" ? link.trim() : \"\"\n}\n\nconst getNotificationActionMode = (item: NotificationItem): NotificationActionMode => {\n return item.data?.linkMode === \"merge_current_search\" ? \"merge_current_search\" : \"navigate\"\n}\n\nconst getNotificationAction = (item: NotificationItem): NotificationAction | null => {\n const link = getNotificationLink(item)\n if (!link) return null\n return {\n link,\n mode: getNotificationActionMode(item),\n }\n}\n\nconst getNotificationActionLabel = (action: NotificationAction | null): string => {\n if (!action) return \"\"\n return action.mode === \"merge_current_search\" ? \"Open\" : action.link\n}\n\nconst pushUrlWithoutReload = (url: string): void => {\n window.history.pushState(window.history.state, \"\", url)\n window.dispatchEvent(new PopStateEvent(\"popstate\", { state: window.history.state }))\n}\n\nconst applyNotificationAction = (action: NotificationAction): void => {\n if (action.mode === \"merge_current_search\") {\n const currentUrl = new URL(window.location.href)\n const actionUrl = new URL(action.link, currentUrl)\n\n actionUrl.searchParams.forEach((value, key) => {\n currentUrl.searchParams.set(key, value)\n })\n if (actionUrl.hash) {\n currentUrl.hash = actionUrl.hash\n }\n\n pushUrlWithoutReload(`${currentUrl.pathname}${currentUrl.search}${currentUrl.hash}`)\n return\n }\n\n window.location.href = action.link\n}\n\nconst groupByDay = (items: NotificationItem[]): DayGroup[] => {\n const groups: DayGroup[] = []\n let currentKey: string | null = null\n\n for (const item of items) {\n const key = getDayKey(item.createdAt)\n if (key !== currentKey) {\n currentKey = key\n groups.push({ key, label: formatDayLabel(key), items: [] })\n }\n groups[groups.length - 1]!.items.push(item)\n }\n\n return groups\n}\n\nconst getBrowserNotificationPermission = (): BrowserNotificationPermission => {\n if (typeof window === \"undefined\") return \"unsupported\"\n if (!(\"Notification\" in window)) return \"unsupported\"\n return window.Notification.permission\n}\n\nconst EmptyRealtimeContext = createContext<NotificationsRealtimeState | null>(null)\n\nexport function NotificationsDrawer({\n open,\n onOpenChange,\n className,\n limit = 50,\n defaultUnreadOnly = false,\n realtimeContext,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n className?: string\n limit?: number\n defaultUnreadOnly?: boolean\n realtimeContext?: Context<NotificationsRealtimeState | null>\n}) {\n const realtime = useContext(realtimeContext ?? EmptyRealtimeContext)\n\n const [items, setItems] = useState<NotificationItem[]>([])\n const [unreadCount, setUnreadCount] = useState<number>(0)\n const [unseenCount, setUnseenCount] = useState<number>(0)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [unreadOnly, setUnreadOnly] = useState<boolean>(defaultUnreadOnly)\n const [browserNotificationPermission, setBrowserNotificationPermission] = useState<BrowserNotificationPermission>(() =>\n getBrowserNotificationPermission(),\n )\n const [browserNotificationPermissionRequesting, setBrowserNotificationPermissionRequesting] = useState(false)\n\n const mergedItems = realtime?.notifications ?? items\n const mergedUnreadCount = realtime?.unreadCount ?? unreadCount\n const mergedUnseenCount = realtime?.unseenCount ?? unseenCount\n const mergedLoading = realtime?.loading ?? loading\n const mergedError = realtime?.error\n ? (realtime.error instanceof Error ? realtime.error.message : String(realtime.error))\n : error\n\n const visibleItems = useMemo(() => mergedItems.slice(0, limit), [limit, mergedItems])\n\n const unread = useMemo(() => visibleItems.filter((n) => !n.readAt), [visibleItems])\n const read = useMemo(() => visibleItems.filter((n) => Boolean(n.readAt)), [visibleItems])\n const unreadGroups = useMemo(() => groupByDay(unread), [unread])\n const readGroups = useMemo(() => groupByDay(read), [read])\n\n const refresh = useCallback(async ({ unreadOnly, markSeen }: { unreadOnly: boolean; markSeen: boolean }) => {\n setLoading(true)\n setError(null)\n\n try {\n const res = await fetch(\"/api/rb/notifications\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: JSON.stringify({ limit, unreadOnly, markSeen }),\n })\n\n const json = (await res.json().catch(() => null)) as ListResponse | null\n if (!res.ok || !json?.ok) {\n setError(json?.error || \"Unable to load notifications.\")\n return\n }\n\n const nextItems = Array.isArray(json.notifications) ? json.notifications : []\n setItems(nextItems)\n setUnreadCount(Number.isFinite(json.unreadCount) ? Math.max(0, Math.floor(json.unreadCount ?? 0)) : 0)\n setUnseenCount(Number.isFinite(json.unseenCount) ? Math.max(0, Math.floor(json.unseenCount ?? 0)) : 0)\n } catch {\n setError(\"Unable to load notifications.\")\n } finally {\n setLoading(false)\n }\n }, [limit])\n\n useEffect(() => {\n if (!open) return\n if (realtime) {\n void (async () => {\n try {\n await fetch(\"/api/rb/notifications\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n keepalive: true,\n body: JSON.stringify({ limit: 1, markSeen: true }),\n })\n } catch {\n return\n }\n })()\n return\n }\n void refresh({ unreadOnly, markSeen: true })\n }, [open, realtime, refresh, unreadOnly])\n\n useEffect(() => {\n if (!open) return\n if (realtime) return\n void refresh({ unreadOnly, markSeen: false })\n }, [open, realtime, refresh, unreadOnly])\n\n useEffect(() => {\n if (!open) return\n\n setBrowserNotificationPermission(getBrowserNotificationPermission())\n\n if (typeof navigator === \"undefined\" || !navigator.permissions?.query) return\n\n let permissionStatus: PermissionStatus | null = null\n let disposed = false\n const syncPermission = () => {\n setBrowserNotificationPermission(getBrowserNotificationPermission())\n }\n\n try {\n void navigator.permissions.query({ name: \"notifications\" as PermissionName }).then((status) => {\n if (disposed) return\n permissionStatus = status\n syncPermission()\n status.addEventListener(\"change\", syncPermission)\n }).catch(() => {\n // Notifications are not exposed through the Permissions API in every browser.\n })\n } catch {\n return\n }\n\n return () => {\n disposed = true\n permissionStatus?.removeEventListener(\"change\", syncPermission)\n }\n }, [open])\n\n const requestBrowserNotificationPermission = async () => {\n if (typeof window === \"undefined\" || !(\"Notification\" in window)) {\n setBrowserNotificationPermission(\"unsupported\")\n return\n }\n\n setBrowserNotificationPermissionRequesting(true)\n try {\n const nextPermission = await window.Notification.requestPermission()\n setBrowserNotificationPermission(nextPermission)\n } catch {\n setBrowserNotificationPermission(getBrowserNotificationPermission())\n } finally {\n setBrowserNotificationPermissionRequesting(false)\n }\n }\n\n const markAsRead = async (id: string) => {\n try {\n const res = await fetch(`/api/rb/notifications/${encodeURIComponent(id)}/read`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n keepalive: true,\n body: \"{}\",\n })\n\n const json = (await res.json().catch(() => null)) as { ok?: boolean } | null\n if (!res.ok || !json?.ok) return\n\n const nowIso = new Date().toISOString()\n if (realtime) return\n setItems((current) => {\n const target = current.find((n) => n.id === id)\n if (target && !target.readAt) {\n setUnreadCount((count) => Math.max(0, count - 1))\n }\n if (target && !target.seenAt) {\n setUnseenCount((count) => Math.max(0, count - 1))\n }\n return current.map((n) => (n.id === id && !n.readAt ? { ...n, readAt: nowIso, ...(n.seenAt ? {} : { seenAt: nowIso }) } : n))\n })\n } catch {\n return\n }\n }\n\n const archive = async (id: string) => {\n try {\n const res = await fetch(`/api/rb/notifications/${encodeURIComponent(id)}/archive`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: \"{}\",\n })\n\n const json = (await res.json().catch(() => null)) as { ok?: boolean } | null\n if (!res.ok || !json?.ok) return\n\n if (realtime) return\n setItems((current) => {\n const target = current.find((n) => n.id === id)\n if (target && !target.readAt) {\n setUnreadCount((count) => Math.max(0, count - 1))\n }\n if (target && !target.seenAt) {\n setUnseenCount((count) => Math.max(0, count - 1))\n }\n return current.filter((n) => n.id !== id)\n })\n } catch {\n return\n }\n }\n\n const requestClose = () => {\n onOpenChange(false)\n }\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (nextOpen) {\n onOpenChange(true)\n return\n }\n\n requestClose()\n }\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={handleOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Backdrop className=\"fixed inset-0 z-50 bg-black/50\" onClick={requestClose} />\n <DialogPrimitive.Popup\n className={cn(\n \"fixed right-0 top-0 z-50 flex h-full w-full max-w-md flex-col border-l bg-background shadow-xl outline-none\",\n className,\n )}\n >\n <header className=\"flex items-center justify-between gap-2 border-b px-4 py-3\">\n <div className=\"flex min-w-0 flex-col\">\n <DialogPrimitive.Title className=\"text-sm font-semibold\">Notifications</DialogPrimitive.Title>\n <span className=\"text-xs text-muted-foreground\">\n {mergedUnreadCount > 0 ? `${mergedUnreadCount} unread` : mergedUnseenCount > 0 ? `${mergedUnseenCount} new` : \"All caught up\"}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => setUnreadOnly((v) => !v)}\n className={cn(\n \"rounded-md border px-2 py-1 text-xs\",\n unreadOnly ? \"bg-accent text-foreground\" : \"bg-background text-muted-foreground hover:bg-accent\",\n )}\n >\n {unreadOnly ? \"Unread\" : \"All\"}\n </button>\n <DialogPrimitive.Close\n type=\"button\"\n aria-label=\"Close notifications\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\"\n onClick={requestClose}\n >\n <X className=\"h-4 w-4\" />\n </DialogPrimitive.Close>\n </div>\n </header>\n\n <div className=\"flex-1 overflow-y-auto px-4 pb-3\">\n <BrowserNotificationPermissionNotice\n permission={browserNotificationPermission}\n requesting={browserNotificationPermissionRequesting}\n onEnable={requestBrowserNotificationPermission}\n />\n {mergedLoading ? (\n <div className=\"flex items-center justify-center py-10 text-muted-foreground\">\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n </div>\n ) : mergedError ? (\n <div className=\"py-10 text-center text-sm text-muted-foreground\">{mergedError}</div>\n ) : visibleItems.length === 0 ? (\n <div className=\"py-10 text-center text-sm text-muted-foreground\">No notifications.</div>\n ) : (\n <div className=\"flex flex-col gap-4\">\n <div>\n <div className=\"sticky top-0 z-20 -mx-4 flex h-8 items-center border-b bg-background px-4 text-xs font-semibold text-muted-foreground\">\n Unread notifications\n </div>\n {unreadGroups.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">No unread notifications.</div>\n ) : (\n unreadGroups.map((group) => (\n <div key={`unread:${group.key}`}>\n <div className=\"sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground\">\n {group.label}\n </div>\n <div className=\"-mx-4 flex flex-col divide-y divide-border\">\n {group.items.map((n) => (\n <NotificationRow\n key={n.id}\n notification={n}\n onMarkRead={markAsRead}\n onArchive={archive}\n onAction={requestClose}\n />\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n\n {unreadOnly ? null : (\n <div>\n <div className=\"sticky top-0 z-20 -mx-4 flex h-8 items-center border-b bg-background px-4 text-xs font-semibold text-muted-foreground\">\n Previous notifications\n </div>\n {readGroups.length === 0 ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">No previous notifications.</div>\n ) : (\n readGroups.map((group) => (\n <div key={`previous:${group.key}`}>\n <div className=\"sticky top-8 z-10 -mx-4 flex h-7 items-center bg-background px-4 text-[11px] font-semibold text-muted-foreground\">\n {group.label}\n </div>\n <div className=\"-mx-4 flex flex-col divide-y divide-border\">\n {group.items.map((n) => (\n <NotificationRow\n key={n.id}\n notification={n}\n onMarkRead={markAsRead}\n onArchive={archive}\n onAction={requestClose}\n />\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </DialogPrimitive.Popup>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n )\n}\n\nfunction BrowserNotificationPermissionNotice({\n permission,\n requesting,\n onEnable,\n}: {\n permission: BrowserNotificationPermission\n requesting: boolean\n onEnable: () => void\n}) {\n if (permission === \"granted\") return null\n\n if (permission === \"unsupported\") {\n return (\n <div className=\"mt-3 rounded-md border bg-muted/40 p-3 text-sm text-muted-foreground\">\n Browser notifications are not supported by this browser.\n </div>\n )\n }\n\n const isDenied = permission === \"denied\"\n\n return (\n <div className=\"mt-3 rounded-md border bg-muted/40 p-3\">\n <div className=\"text-sm font-medium\">\n {isDenied ? \"Browser notifications are blocked.\" : \"Browser notifications are not enabled.\"}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">\n {isDenied\n ? \"Enable notifications for this site in your browser settings, then click again.\"\n : \"Enable browser notifications to receive important alerts.\"}\n </div>\n <button\n type=\"button\"\n className=\"mt-3 inline-flex h-8 items-center rounded-md border bg-background px-2.5 text-xs font-medium hover:bg-accent disabled:pointer-events-none disabled:opacity-50\"\n disabled={requesting}\n onClick={onEnable}\n >\n {requesting ? \"Enabling...\" : \"Enable browser notifications\"}\n </button>\n </div>\n )\n}\n\nfunction NotificationRow({\n notification,\n onMarkRead,\n onArchive,\n onAction,\n}: {\n notification: NotificationItem\n onMarkRead: (id: string) => void\n onArchive: (id: string) => void\n onAction: () => void\n}) {\n const [menuOpen, setMenuOpen] = useState(false)\n const menuRef = useRef<HTMLDivElement | null>(null)\n const menuButtonRef = useRef<HTMLButtonElement | null>(null)\n const isUnread = !notification.readAt\n const action = getNotificationAction(notification)\n const actionLabel = getNotificationActionLabel(action)\n const createdAtLabel = (() => {\n const date = new Date(toMs(notification.createdAt))\n if (!Number.isFinite(date.getTime())) return \"\"\n return date.toLocaleString()\n })()\n\n useEffect(() => {\n if (!menuOpen) return\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target\n if (!(target instanceof Node)) return\n if (menuRef.current?.contains(target) || menuButtonRef.current?.contains(target)) return\n setMenuOpen(false)\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return\n setMenuOpen(false)\n menuButtonRef.current?.focus()\n }\n\n document.addEventListener(\"pointerdown\", handlePointerDown)\n document.addEventListener(\"keydown\", handleKeyDown)\n\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown)\n document.removeEventListener(\"keydown\", handleKeyDown)\n }\n }, [menuOpen])\n\n return (\n <div\n className={cn(\n \"group flex w-full gap-3 px-4 py-3 hover:bg-accent/40\",\n isUnread ? \"bg-primary/5\" : \"bg-background\",\n )}\n >\n <button\n type=\"button\"\n className=\"min-w-0 flex-1 text-left\"\n onClick={() => {\n if (isUnread) {\n void onMarkRead(notification.id)\n }\n if (action) {\n onAction()\n applyNotificationAction(action)\n }\n }}\n >\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-semibold\">{notification.title}</div>\n {notification.body ? (\n <div className=\"mt-0.5 line-clamp-2 text-xs text-muted-foreground\">{notification.body}</div>\n ) : null}\n </div>\n {actionLabel ? <div className=\"mt-2 truncate text-xs text-primary\">{actionLabel}</div> : null}\n {createdAtLabel ? (\n <div className=\"mt-2 text-[11px] text-muted-foreground\">{createdAtLabel}</div>\n ) : null}\n </button>\n <div className=\"relative flex items-start\">\n <button\n ref={menuButtonRef}\n type=\"button\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-md hover:bg-accent\"\n aria-label=\"Notification options\"\n aria-haspopup=\"menu\"\n aria-expanded={menuOpen}\n onClick={() => {\n setMenuOpen((open) => !open)\n }}\n >\n <MoreVertical className=\"h-4 w-4\" />\n </button>\n {menuOpen ? (\n <div\n ref={menuRef}\n role=\"menu\"\n className={cn(\n \"absolute right-0 top-full z-50 mt-1 min-w-[10rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n )}\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent focus:bg-accent focus:text-accent-foreground\"\n onClick={() => {\n setMenuOpen(false)\n onArchive(notification.id)\n }}\n >\n Archive\n </button>\n <button\n type=\"button\"\n role=\"menuitem\"\n className=\"relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none transition-colors hover:bg-accent focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\"\n disabled={!isUnread}\n onClick={() => {\n setMenuOpen(false)\n onMarkRead(notification.id)\n }}\n >\n Mark as read\n </button>\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index421.js","names":["res","json","normalized","p","next","topic","e"],"sources":["../src/components/Notifications/NotificationsSettings.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\"\nimport { Loader2 } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport type { NotificationDigestFrequency, NotificationSettings, NotificationTopicCatalogItem, NotificationTopicPreference } from \"./types\"\n\n\ntype SettingsResponse = {\n ok?: boolean\n error?: string\n settings?: NotificationSettings\n}\n\nconst digestValues: Array<{ value: NotificationDigestFrequency; label: string }> = [\n { value: \"off\", label: \"Off\" },\n { value: \"daily\", label: \"Daily\" },\n { value: \"weekly\", label: \"Weekly\" },\n]\n\nconst normalizeSettings = (settings: NotificationSettings | undefined): NotificationSettings => {\n const digestFrequency = settings?.digestFrequency\n const frequency: NotificationDigestFrequency =\n digestFrequency === \"off\" || digestFrequency === \"daily\" || digestFrequency === \"weekly\"\n ? digestFrequency\n : \"weekly\"\n\n const topicPreferences = Array.isArray(settings?.topicPreferences)\n ? settings!.topicPreferences\n .map((pref) => ({\n topic: typeof pref.topic === \"string\" ? pref.topic.trim() : \"\",\n inApp: pref.inApp === true,\n emailDigest: pref.emailDigest === true,\n push: pref.push === true,\n }))\n .filter((pref) => pref.topic.length > 0)\n : []\n\n return {\n digestFrequency: frequency,\n topicPreferences,\n ...(typeof settings?.lastDigestSentAt === \"string\" ? { lastDigestSentAt: settings.lastDigestSentAt } : {}),\n }\n}\n\nconst normalizeTopics = (topics: NotificationTopicCatalogItem[] | undefined): NotificationTopicCatalogItem[] => {\n if (!Array.isArray(topics)) return []\n\n const seen = new Set<string>()\n return topics\n .map((topic) => ({\n topic: typeof topic.topic === \"string\" ? topic.topic.trim() : \"\",\n title: typeof topic.title === \"string\" ? topic.title.trim() : \"\",\n description: typeof topic.description === \"string\" ? topic.description.trim() : undefined,\n }))\n .filter((topic) => topic.topic.length > 0)\n .filter((topic) => {\n if (seen.has(topic.topic)) return false\n seen.add(topic.topic)\n return true\n })\n}\n\nconst applyTopicsToSettings = (\n settings: NotificationSettings,\n topics: NotificationTopicCatalogItem[],\n): NotificationSettings => {\n const defaults: NotificationTopicPreference = {\n topic: \"\",\n inApp: true,\n emailDigest: true,\n push: false,\n }\n\n const byTopic = new Map(settings.topicPreferences.map((pref) => [pref.topic, pref]))\n return {\n ...settings,\n topicPreferences: topics.map((topic) => {\n const existing = byTopic.get(topic.topic)\n return existing\n ? {\n topic: topic.topic,\n inApp: existing.inApp === true,\n emailDigest: existing.emailDigest === true,\n push: existing.push === true,\n }\n : {\n ...defaults,\n topic: topic.topic,\n }\n }),\n }\n}\n\nexport function NotificationsSettings({\n className,\n topics,\n}: {\n className?: string\n topics?: NotificationTopicCatalogItem[]\n}) {\n const [loading, setLoading] = useState(true)\n const [saving, setSaving] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [settings, setSettings] = useState<NotificationSettings>(() =>\n normalizeSettings({ digestFrequency: \"weekly\", topicPreferences: [] }),\n )\n\n const normalizedTopics = useMemo(() => normalizeTopics(topics), [topics])\n\n const loadSettings = async () => {\n setLoading(true)\n setError(null)\n try {\n const res = await fetch(\"/api/rb/notifications/settings\", {\n method: \"GET\",\n credentials: \"include\",\n })\n const json = (await res.json().catch(() => null)) as SettingsResponse | null\n if (!res.ok || !json?.ok) {\n setError(json?.error || \"Unable to load notification settings.\")\n return\n }\n const normalized = normalizeSettings(json.settings)\n setSettings(normalizedTopics.length > 0 ? applyTopicsToSettings(normalized, normalizedTopics) : normalized)\n } catch {\n setError(\"Unable to load notification settings.\")\n } finally {\n setLoading(false)\n }\n }\n\n const saveSettings = async (next: NotificationSettings) => {\n setSaving(true)\n setError(null)\n try {\n const res = await fetch(\"/api/rb/notifications/settings\", {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: JSON.stringify({\n digestFrequency: next.digestFrequency,\n topicPreferences: next.topicPreferences,\n }),\n })\n const json = (await res.json().catch(() => null)) as SettingsResponse | null\n if (!res.ok || !json?.ok) {\n setError(json?.error || \"Unable to save notification settings.\")\n return\n }\n const normalized = normalizeSettings(json.settings)\n setSettings(normalizedTopics.length > 0 ? applyTopicsToSettings(normalized, normalizedTopics) : normalized)\n } catch {\n setError(\"Unable to save notification settings.\")\n } finally {\n setSaving(false)\n }\n }\n\n useEffect(() => {\n void loadSettings()\n }, [])\n\n useEffect(() => {\n if (normalizedTopics.length === 0) return\n setSettings((current) => applyTopicsToSettings(current, normalizedTopics))\n }, [normalizedTopics])\n\n const updatePreference = (topic: string, update: (p: NotificationTopicPreference) => NotificationTopicPreference) => {\n const hasExisting = settings.topicPreferences.some((p) => p.topic === topic)\n const nextPrefs = hasExisting\n ? settings.topicPreferences.map((p) => (p.topic === topic ? update(p) : p))\n : [...settings.topicPreferences, update({ topic, inApp: true, emailDigest: true, push: false })]\n const next = normalizeSettings({ ...settings, topicPreferences: nextPrefs })\n setSettings(next)\n void saveSettings(next)\n }\n\n if (loading) {\n return (\n <div className={cn(\"flex items-center justify-center py-10 text-muted-foreground\", className)}>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n </div>\n )\n }\n\n return (\n <div className={cn(\"space-y-4\", className)}>\n <div className=\"rounded-md border bg-background p-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <div className=\"text-sm font-semibold\">Email digest</div>\n <div className=\"mt-1 text-xs text-muted-foreground\">Choose how often we email you a summary.</div>\n </div>\n <select\n value={settings.digestFrequency}\n onChange={(e) => {\n const value = e.target.value as NotificationDigestFrequency\n const next = normalizeSettings({ ...settings, digestFrequency: value })\n setSettings(next)\n void saveSettings(next)\n }}\n className=\"h-9 rounded-md border bg-background px-2 text-sm\"\n >\n {digestValues.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n </div>\n\n <div className=\"rounded-md border bg-background p-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <div className=\"text-sm font-semibold\">Topics</div>\n <div className=\"mt-1 text-xs text-muted-foreground\">Choose where you receive each topic.</div>\n </div>\n </div>\n\n {normalizedTopics.length === 0 ? (\n <div className=\"mt-4 text-sm text-muted-foreground\">No topics configured.</div>\n ) : (\n <div className=\"mt-4 overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"text-left text-xs text-muted-foreground\">\n <th className=\"py-2 pr-4 font-medium\">Topic</th>\n <th className=\"py-2 pr-4 font-medium\">In-app</th>\n <th className=\"py-2 pr-4 font-medium\">Email digest</th>\n <th className=\"py-2 pr-4 font-medium\">Push</th>\n </tr>\n </thead>\n <tbody>\n {settings.topicPreferences.map((pref) => {\n const meta = normalizedTopics.find((topic) => topic.topic === pref.topic)\n return (\n <tr key={pref.topic} className=\"border-t align-top\">\n <td className=\"py-3 pr-4\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"font-medium\">{meta?.title || pref.topic}</span>\n {meta?.description ? (\n <span className=\"text-xs text-muted-foreground\">{meta.description}</span>\n ) : null}\n <span className=\"text-[11px] text-muted-foreground\">{pref.topic}</span>\n </div>\n </td>\n <td className=\"py-3 pr-4\">\n <input\n type=\"checkbox\"\n checked={pref.inApp}\n onChange={(e) =>\n updatePreference(pref.topic, (p) => ({ ...p, inApp: e.target.checked }))\n }\n />\n </td>\n <td className=\"py-3 pr-4\">\n <input\n type=\"checkbox\"\n checked={pref.emailDigest}\n onChange={(e) =>\n updatePreference(pref.topic, (p) => ({ ...p, emailDigest: e.target.checked }))\n }\n />\n </td>\n <td className=\"py-3 pr-4\">\n <input\n type=\"checkbox\"\n checked={pref.push}\n disabled\n className=\"opacity-50\"\n aria-label=\"Push notifications (coming soon)\"\n />\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )}\n\n {error ? (\n <div className=\"mt-3 text-sm text-destructive\">{error}</div>\n ) : saving ? (\n <div className=\"mt-3 text-xs text-muted-foreground\">Saving…</div>\n ) : null}\n </div>\n </div>\n )\n}\n"],"mappings":";;;;;AAcA,IAAM,IAA6E;CACjF;EAAE,OAAO;EAAO,OAAO;CAAM;CAC7B;EAAE,OAAO;EAAS,OAAO;CAAQ;CACjC;EAAE,OAAO;EAAU,OAAO;CAAS;AAAC,GAGhC,KAAqB,MAAqE;CAC9F,IAAM,IAAkB,GAAU;CAiBlC,OAAO;EACL,iBAhBA,MAAoB,SAAS,MAAoB,WAAW,MAAoB,WAC5E,IACA;EAeJ,kBAbuB,MAAM,QAAQ,GAAU,gBAAgB,IAC7D,EAAU,iBACT,KAAK,OAAU;GACd,OAAO,OAAO,EAAK,SAAU,WAAW,EAAK,MAAM,KAAK,IAAI;GAC5D,OAAO,EAAK,UAAU;GACtB,aAAa,EAAK,gBAAgB;GAClC,MAAM,EAAK,SAAS;EACtB,EAAE,CAAC,CACF,QAAQ,MAAS,EAAK,MAAM,SAAS,CAAC,IACvC,CAAA;EAKF,GAAI,OAAO,GAAU,oBAAqB,WAAW,EAAE,kBAAkB,EAAS,iBAAiB,IAAI,CAAC;CAC1G;AACF,GAEM,KAAmB,MAAuF;CAC9G,IAAI,CAAC,MAAM,QAAQ,CAAM,GAAG,OAAO,CAAA;CAEnC,IAAM,oBAAO,IAAI,IAAY;CAC7B,OAAO,EACJ,KAAK,OAAW;EACf,OAAO,OAAO,EAAM,SAAU,WAAW,EAAM,MAAM,KAAK,IAAI;EAC9D,OAAO,OAAO,EAAM,SAAU,WAAW,EAAM,MAAM,KAAK,IAAI;EAC9D,aAAa,OAAO,EAAM,eAAgB,WAAW,EAAM,YAAY,KAAK,IAAI,KAAA;CAClF,EAAE,CAAC,CACF,QAAQ,MAAU,EAAM,MAAM,SAAS,CAAC,CAAC,CACzC,QAAQ,MACP,CAAI,EAAK,IAAI,EAAM,KAAK,MACxB,EAAK,IAAI,EAAM,KAAK,GACb,GACR;AACL,GAEM,KACJ,GACA,MACyB;CACzB,IAAM,IAAwC;EAC5C,OAAO;EACP,OAAO;EACP,aAAa;EACb,MAAM;CACR,GAEM,IAAU,IAAI,IAAI,EAAS,iBAAiB,KAAK,MAAS,CAAC,EAAK,OAAO,CAAI,CAAC,CAAC;CACnF,OAAO;EACL,GAAG;EACH,kBAAkB,EAAO,KAAK,MAAU;GACtC,IAAM,IAAW,EAAQ,IAAI,EAAM,KAAK;GACxC,OAAO,IACH;IACA,OAAO,EAAM;IACb,OAAO,EAAS,UAAU;IAC1B,aAAa,EAAS,gBAAgB;IACtC,MAAM,EAAS,SAAS;GAC1B,IACE;IACA,GAAG;IACH,OAAO,EAAM;GACf;EACJ,CAAC;CACH;AACF;AAEA,SAAgB,EAAsB,EACpC,cACA,aAIC;CACD,IAAM,CAAC,GAAS,KAAc,EAAS,EAAI,GACrC,CAAC,GAAQ,KAAa,EAAS,EAAK,GACpC,CAAC,GAAO,KAAY,EAAwB,IAAI,GAChD,CAAC,GAAU,KAAe,QAC9B,EAAkB;EAAE,iBAAiB;EAAU,kBAAkB,CAAA;CAAG,CAAC,CACvE,GAEM,IAAmB,QAAc,EAAgB,CAAM,GAAG,CAAC,CAAM,CAAC,GAElE,IAAe,YAAY;EAE/B,AADA,EAAW,EAAI,GACf,EAAS,IAAI;EACb,IAAI;GACF,IAAM,IAAM,MAAM,MAAM,kCAAkC;IACxD,QAAQ;IACR,aAAa;GACf,CAAC,GACK,IAAQ,MAAM,EAAI,KAAK,CAAC,CAAC,YAAY,IAAI;GAC/C,IAAI,CAAC,EAAI,MAAM,CAAC,GAAM,IAAI;IACxB,EAAS,GAAM,SAAS,uCAAuC;IAC/D;GACF;GACA,IAAM,IAAa,EAAkB,EAAK,QAAQ;GAClD,EAAY,EAAiB,SAAS,IAAI,EAAsB,GAAY,CAAgB,IAAI,CAAU;EAC5G,QAAQ;GACN,EAAS,uCAAuC;EAClD,UAAU;GACR,EAAW,EAAK;EAClB;CACF,GAEM,IAAe,OAAO,MAA+B;EAEzD,AADA,EAAU,EAAI,GACd,EAAS,IAAI;EACb,IAAI;GACF,IAAMA,IAAM,MAAM,MAAM,kCAAkC;IACxD,QAAQ;IACR,SAAS,EAAE,gBAAgB,mBAAmB;IAC9C,aAAa;IACb,MAAM,KAAK,UAAU;KACnB,iBAAiB,EAAK;KACtB,kBAAkB,EAAK;IACzB,CAAC;GACH,CAAC,GACKC,IAAQ,MAAMD,EAAI,KAAK,CAAC,CAAC,YAAY,IAAI;GAC/C,IAAI,CAACA,EAAI,MAAM,CAACC,GAAM,IAAI;IACxB,EAASA,GAAM,SAAS,uCAAuC;IAC/D;GACF;GACA,IAAMC,IAAa,EAAkBD,EAAK,QAAQ;GAClD,EAAY,EAAiB,SAAS,IAAI,EAAsBC,GAAY,CAAgB,IAAIA,CAAU;EAC5G,QAAQ;GACN,EAAS,uCAAuC;EAClD,UAAU;GACR,EAAU,EAAK;EACjB;CACF;CAMA,AAJA,QAAgB;EACd,EAAkB;CACpB,GAAG,CAAA,CAAE,GAEL,QAAgB;EACV,EAAiB,WAAW,KAChC,GAAa,MAAY,EAAsB,GAAS,CAAgB,CAAC;CAC3E,GAAG,CAAC,CAAgB,CAAC;CAErB,IAAM,KAAoB,GAAe,MAA4E;EAEnH,IAAM,IADc,EAAS,iBAAiB,MAAM,MAAM,EAAE,UAAU,CACpD,IACd,EAAS,iBAAiB,KAAKC,MAAOA,EAAE,UAAU,IAAQ,EAAOA,CAAC,IAAIA,CAAE,IACxE,CAAC,GAAG,EAAS,kBAAkB,EAAO;GAAE;GAAO,OAAO;GAAM,aAAa;GAAM,MAAM;EAAM,CAAC,CAAC,GAC3FC,IAAO,EAAkB;GAAE,GAAG;GAAU,kBAAkB;EAAU,CAAC;EAE3E,AADA,EAAYA,CAAI,GAChB,EAAkBA,CAAI;CACxB;CAUA,OARI,IAEA,kBAAC,OAAD;EAAK,WAAW,EAAG,gEAAgE,CAAS;EAC1F,UAAA,kBAAC,GAAD,EAAS,WAAU,uBAAsB,CAAA;CACtC,CAAA,IAKP,kBAAC,OAAD;EAAK,WAAW,EAAG,aAAa,CAAS;EAAzC,UAAA,CACE,kBAAC,OAAD;GAAK,WAAU;GACb,UAAA,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;KAAwB,UAAA;IAAiB,CAAA,GACxD,kBAAC,OAAD;KAAK,WAAU;KAAqC,UAAA;IAA6C,CAAA,CAC9F,EAAA,CAAA,GACL,kBAAC,UAAD;KACE,OAAO,EAAS;KAChB,WAAW,MAAM;MACf,IAAM,IAAQ,EAAE,OAAO,OACjBA,IAAO,EAAkB;OAAE,GAAG;OAAU,iBAAiB;MAAM,CAAC;MAEtE,AADA,EAAYA,CAAI,GAChB,EAAkBA,CAAI;KACxB;KACA,WAAU;KAET,UAAA,EAAa,KAAK,MACjB,kBAAC,UAAD;MAAwB,OAAO,EAAI;MAChC,UAAA,EAAI;KACC,GAFK,EAAI,KAET,CACT;IACK,CAAA,CACL;;EACF,CAAA,GAEL,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,kBAAC,OAAD;KAAK,WAAU;KACb,UAAA,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;MAAK,WAAU;MAAwB,UAAA;KAAW,CAAA,GAClD,kBAAC,OAAD;MAAK,WAAU;MAAqC,UAAA;KAAyC,CAAA,CAC1F,EAAA,CAAA;IACF,CAAA;IAEJ,EAAiB,WAAW,IAC3B,kBAAC,OAAD;KAAK,WAAU;KAAqC,UAAA;IAA0B,CAAA,IAE9E,kBAAC,OAAD;KAAK,WAAU;KACb,UAAA,kBAAC,SAAD;MAAO,WAAU;MAAjB,UAAA,CACE,kBAAC,SAAD,EAAA,UACE,kBAAC,MAAD;OAAI,WAAU;OAAd,UAAA;QACE,kBAAC,MAAD;SAAI,WAAU;SAAwB,UAAA;QAAS,CAAA;QAC/C,kBAAC,MAAD;SAAI,WAAU;SAAwB,UAAA;QAAU,CAAA;QAChD,kBAAC,MAAD;SAAI,WAAU;SAAwB,UAAA;QAAgB,CAAA;QACtD,kBAAC,MAAD;SAAI,WAAU;SAAwB,UAAA;QAAQ,CAAA;OAC5C;MACC,CAAA,EAAA,CAAA,GACP,kBAAC,SAAD,EAAA,UACG,EAAS,iBAAiB,KAAK,MAAS;OACvC,IAAM,IAAO,EAAiB,MAAMC,MAAUA,EAAM,UAAU,EAAK,KAAK;OACxE,OACE,kBAAC,MAAD;QAAqB,WAAU;QAA/B,UAAA;SACE,kBAAC,MAAD;UAAI,WAAU;UACZ,UAAA,kBAAC,OAAD;WAAK,WAAU;WAAf,UAAA;YACE,kBAAC,QAAD;aAAM,WAAU;aAAe,UAAA,GAAM,SAAS,EAAK;YAAY,CAAA;YAC9D,GAAM,cACL,kBAAC,QAAD;aAAM,WAAU;aAAiC,UAAA,EAAK;YAAkB,CAAA,IACtE;YACJ,kBAAC,QAAD;aAAM,WAAU;aAAqC,UAAA,EAAK;YAAY,CAAA;WACnE;;SACH,CAAA;SACJ,kBAAC,MAAD;UAAI,WAAU;UACZ,UAAA,kBAAC,SAAD;WACE,MAAK;WACL,SAAS,EAAK;WACd,WAAWC,MACT,EAAiB,EAAK,QAAQH,OAAO;YAAE,GAAGA;YAAG,OAAOG,EAAE,OAAO;WAAQ,EAAE;UACxE,CAAA;SAED,CAAA;SACJ,kBAAC,MAAD;UAAI,WAAU;UACZ,UAAA,kBAAC,SAAD;WACE,MAAK;WACL,SAAS,EAAK;WACd,WAAWA,MACT,EAAiB,EAAK,QAAQH,OAAO;YAAE,GAAGA;YAAG,aAAaG,EAAE,OAAO;WAAQ,EAAE;UAC9E,CAAA;SAED,CAAA;SACJ,kBAAC,MAAD;UAAI,WAAU;UACZ,UAAA,kBAAC,SAAD;WACE,MAAK;WACL,SAAS,EAAK;WACd,UAAA;WACA,WAAU;WACV,cAAW;UAAkC,CAAA;SAE7C,CAAA;QACF;OArCK,GAAA,EAAK,KAqCV;MAER,CAAC,EACI,CAAA,CACF;;IACJ,CAAA;IAGN,IACC,kBAAC,OAAD;KAAK,WAAU;KAAiC,UAAA;IAAW,CAAA,IACzD,IACF,kBAAC,OAAD;KAAK,WAAU;KAAqC,UAAA;IAAY,CAAA,IAC9D;GACD;EACF,CAAA,CAAA;;AAET"}
|
package/dist/index6.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index6.js","names":["
|
|
1
|
+
{"version":3,"file":"index6.js","names":["cancelled"],"sources":["../src/helpers/useMapsLibrary.ts"],"sourcesContent":["/// <reference types=\"google.maps\" />\n\nimport { useEffect, useState } from \"react\"\nimport { setOptions, importLibrary } from \"@googlemaps/js-api-loader\"\n\n\ntype GoogleMapsLibraryName =\n | \"core\"\n | \"maps\"\n | \"maps3d\"\n | \"routes\"\n | \"geometry\"\n | \"elevation\"\n | \"streetView\"\n | \"journeySharing\"\n | \"drawing\"\n | \"visualization\"\n | \"marker\"\n | \"places\"\n | \"geocoding\"\n | (string & {})\n\ntype GoogleMapsLibraryModule<T extends GoogleMapsLibraryName> =\n T extends \"core\" ? google.maps.CoreLibrary\n : T extends \"maps\" ? google.maps.MapsLibrary\n : T extends \"maps3d\" ? google.maps.Maps3DLibrary\n : T extends \"routes\" ? google.maps.RoutesLibrary\n : T extends \"geometry\" ? google.maps.GeometryLibrary\n : T extends \"elevation\" ? google.maps.ElevationLibrary\n : T extends \"streetView\" ? google.maps.StreetViewLibrary\n : T extends \"journeySharing\" ? google.maps.JourneySharingLibrary\n : T extends \"drawing\" ? google.maps.DrawingLibrary\n : T extends \"visualization\" ? google.maps.VisualizationLibrary\n : T extends \"marker\" ? google.maps.MarkerLibrary\n : T extends \"places\" ? google.maps.PlacesLibrary\n : T extends \"geocoding\" ? google.maps.GeocodingLibrary\n : unknown\n\n\nlet initPromise: Promise<void> | null = null\nlet configuredKey: string | null = null\n\nconst libraryPromises = new Map<string, Promise<unknown>>()\n\nconst ensureGoogle = (apiKey?: string) => {\n if (!apiKey) {\n const error = new Error(\"useMapsLibrary: missing Google Maps API key\")\n console.error(error.message)\n return Promise.reject(error)\n }\n\n if (!initPromise) {\n configuredKey = apiKey\n setOptions({\n key: apiKey,\n v: \"weekly\",\n })\n initPromise = importLibrary(\"core\")\n .then(() => {})\n .catch(error => {\n initPromise = null\n throw error\n })\n } else if (configuredKey !== apiKey) {\n console.warn(\n \"useMapsLibrary: ignoring attempt to re-initialize Google Maps with a different API key than the one already in use.\"\n )\n }\n\n return initPromise\n}\n\nconst loadLibrary = <T extends GoogleMapsLibraryName>(\n library: T,\n apiKey?: string\n) => {\n const cacheKey = String(library)\n const cached = libraryPromises.get(cacheKey)\n if (cached) {\n return cached as Promise<GoogleMapsLibraryModule<T>>\n }\n\n const promise = ensureGoogle(apiKey)\n .then(() => {\n if (typeof window === \"undefined\" || !window.google?.maps?.importLibrary) {\n throw new Error(\"useMapsLibrary: google.maps.importLibrary is not available.\")\n }\n return window.google.maps.importLibrary(cacheKey)\n })\n .then(module => module as GoogleMapsLibraryModule<T>)\n .catch(error => {\n libraryPromises.delete(cacheKey)\n throw error\n })\n\n libraryPromises.set(cacheKey, promise as Promise<unknown>)\n return promise\n}\n\nexport const useMapsLibrary = <T extends GoogleMapsLibraryName>(\n library: T,\n apiKey?: string\n) => {\n const [module, setModule] =\n useState<GoogleMapsLibraryModule<T> | null>(null)\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return\n }\n\n let cancelled = false\n\n loadLibrary(library, apiKey)\n .then(loadedModule => {\n if (!cancelled) {\n setModule(loadedModule)\n }\n })\n .catch(error => {\n if (!cancelled) {\n console.error(`useMapsLibrary: failed to load ${String(library)} library`, error)\n setModule(null)\n }\n })\n\n return () => {\n cancelled = true\n }\n }, [library, apiKey])\n\n return module\n}\n\nexport type { GoogleMapsLibraryName, GoogleMapsLibraryModule }\n"],"mappings":";;;;AAuCA,IAAI,IAAoC,MACpC,IAA+B,MAE7B,oBAAkB,IAAI,IAA8B,GAEpD,KAAgB,MAAoB;CACxC,IAAI,CAAC,GAAQ;EACX,IAAM,IAAQ,gBAAI,MAAM,6CAA6C;EAErE,OADA,QAAQ,MAAM,EAAM,OAAO,GACpB,QAAQ,OAAO,CAAK;CAC7B;CAoBA,OAlBK,IAYM,MAAkB,KAC3B,QAAQ,KACN,qHACF,KAdA,IAAgB,GAChB,EAAW;EACT,KAAK;EACL,GAAG;CACL,CAAC,GACD,IAAc,EAAc,MAAM,CAAC,CAChC,WAAW,CAAC,CAAC,CAAC,CACd,OAAM,MAAS;EAEd,MADA,IAAc,MACR;CACR,CAAC,IAOE;AACT,GAEM,KACJ,GACA,MACG;CACH,IAAM,IAAW,OAAO,CAAO,GACzB,IAAS,EAAgB,IAAI,CAAQ;CAC3C,IAAI,GACF,OAAO;CAGT,IAAM,IAAU,EAAa,CAAM,CAAC,CACjC,WAAW;EACV,IAAI,OAAO,SAAW,OAAe,CAAC,OAAO,QAAQ,MAAM,eACzD,MAAU,MAAM,6DAA6D;EAE/E,OAAO,OAAO,OAAO,KAAK,cAAc,CAAQ;CAClD,CAAC,CAAC,CACD,MAAK,MAAU,CAAoC,CAAC,CACpD,OAAM,MAAS;EAEd,MADA,EAAgB,OAAO,CAAQ,GACzB;CACR,CAAC;CAGH,OADA,EAAgB,IAAI,GAAU,CAA2B,GAClD;AACT,GAEa,KAAiB,GAAA,MAAA;CAAA,IAAA,IAAA,EAAA,CAAA,GAI5B,CAAA,GAAA,KACE,EAA4C,IAAI,GAAC,GAAA;CAyB9B,OAzB8B,EAAA,OAAA,KAAA,EAAA,OAAA,KAEzC,UAAA;EACR,IAAI,OAAO,SAAW,KAAW;EAIjC,IAAA,IAAgB;EAaZ,OAXJ,EAAY,GAAS,CAAM,CAAC,CAAA,MACpB,MAAA;GACJ,AAAK,KACH,EAAU,CAAY;EACvB,CACF,CAAC,CAAA,OACK,MAAA;GACL,AAAK,MACH,QAAO,MAAO,kCAAkC,OAAO,CAAO,EAAC,WAAY,CAAK,GAChF,EAAU,IAAI;EACf,CACF,SAEI;GACL,IAAYA;EAAH;CACV,GACA,IAAA,CAAC,GAAS,CAAM,GAAC,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,GAAA,EAAA,KAAA,MAAA,IAAA,EAAA,IAAA,IAAA,EAAA,KAvBpB,EAAU,GAuBP,CAAiB,GAEb;AAAM"}
|
package/dist/index7.js
CHANGED
|
@@ -1,93 +1,76 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useEffect as t, useRef as n, useState as r } from "react";
|
|
1
|
+
import { useEffect as e, useRef as t, useState as n } from "react";
|
|
3
2
|
//#region src/helpers/useScrollPagination.ts
|
|
4
|
-
var
|
|
3
|
+
var r = () => typeof window > "u" ? !1 : "IntersectionObserver" in window, i = (e, t, n) => {
|
|
5
4
|
let r = e.getBoundingClientRect(), i = t.getBoundingClientRect();
|
|
6
5
|
return r.bottom >= i.top - n && r.top <= i.bottom;
|
|
7
|
-
},
|
|
6
|
+
}, a = (e, t, n) => {
|
|
8
7
|
let r = e.getBoundingClientRect(), i = t.getBoundingClientRect();
|
|
9
8
|
return r.top <= i.bottom + n && r.bottom >= i.top;
|
|
10
9
|
};
|
|
11
|
-
function
|
|
12
|
-
let
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
},
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
},
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
},
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
},
|
|
28
|
-
let
|
|
29
|
-
|
|
30
|
-
C.current =
|
|
31
|
-
}, N = [s], a[12] = s, a[13] = M, a[14] = N), t(M, N);
|
|
32
|
-
let P, F;
|
|
33
|
-
a[15] === c ? (P = a[16], F = a[17]) : (P = () => {
|
|
34
|
-
ve.current = c;
|
|
35
|
-
}, F = [c], a[15] = c, a[16] = P, a[17] = F), t(P, F);
|
|
36
|
-
let I;
|
|
37
|
-
a[18] === Symbol.for("react.memo_cache_sentinel") ? (I = () => {
|
|
38
|
-
x.current = !0, S.current = !0;
|
|
39
|
-
}, a[18] = I) : I = a[18];
|
|
40
|
-
let L;
|
|
41
|
-
a[19] === l ? L = a[20] : (L = [l], a[19] = l, a[20] = L), t(I, L);
|
|
42
|
-
let R;
|
|
43
|
-
a[21] === m ? R = a[22] : (R = (e) => {
|
|
44
|
-
if (!me.current || !C.current || !x.current || y.current || b.current) return;
|
|
45
|
-
x.current = !1, y.current = !0, fe(!0);
|
|
10
|
+
function o({ containerRef: o, enabled: s = !0, hasPreviousPage: c = !1, hasNextPage: l = !1, onStartReached: u, onEndReached: d, startReachedOffsetPx: f = 160, endReachedOffsetPx: p = 160, maintainScrollOnStartFetch: m = !0 }) {
|
|
11
|
+
let [h, g] = n(null), [_, v] = n(null), [y, b] = n(!1), [x, S] = n(!1), C = t(!1), w = t(!1), T = t(!0), E = t(!0), D = t(c), O = t(l), k = t(c), A = t(l), j = t(u), M = t(d);
|
|
12
|
+
e(() => {
|
|
13
|
+
C.current = y;
|
|
14
|
+
}, [y]), e(() => {
|
|
15
|
+
w.current = x;
|
|
16
|
+
}, [x]), e(() => {
|
|
17
|
+
D.current = c;
|
|
18
|
+
}, [c]), e(() => {
|
|
19
|
+
O.current = l;
|
|
20
|
+
}, [l]), e(() => {
|
|
21
|
+
j.current = u;
|
|
22
|
+
}, [u]), e(() => {
|
|
23
|
+
M.current = d;
|
|
24
|
+
}, [d]), e(() => {
|
|
25
|
+
T.current = !0, E.current = !0;
|
|
26
|
+
}, [s]);
|
|
27
|
+
let N = (e) => {
|
|
28
|
+
if (!D.current || !j.current || !T.current || C.current || w.current) return;
|
|
29
|
+
T.current = !1, C.current = !0, b(!0);
|
|
46
30
|
let t = e.scrollTop, n = e.scrollHeight;
|
|
47
|
-
Promise.resolve(
|
|
31
|
+
Promise.resolve(j.current()).then(async () => {
|
|
48
32
|
if (!m || !e.isConnected) return;
|
|
49
|
-
await new Promise(
|
|
33
|
+
await new Promise((e) => {
|
|
34
|
+
window.requestAnimationFrame(() => {
|
|
35
|
+
window.requestAnimationFrame(() => e());
|
|
36
|
+
});
|
|
37
|
+
});
|
|
50
38
|
let r = e.scrollHeight - n;
|
|
51
39
|
r <= 0 || (e.scrollTop = t + r);
|
|
52
40
|
}).finally(() => {
|
|
53
|
-
|
|
41
|
+
C.current = !1, b(!1);
|
|
54
42
|
});
|
|
55
|
-
},
|
|
56
|
-
let z = R, B;
|
|
57
|
-
a[23] !== o || a[24] !== p || a[25] !== g ? (B = () => {
|
|
43
|
+
}, P = () => {
|
|
58
44
|
let e = o.current;
|
|
59
|
-
return !e || !
|
|
60
|
-
},
|
|
61
|
-
|
|
62
|
-
a[27] !== o || a[28] !== V ? (H = () => {
|
|
63
|
-
if (!he.current || !ve.current || !S.current || b.current || y.current) return;
|
|
45
|
+
return !e || !_ ? !1 : a(_, e, Math.max(0, p));
|
|
46
|
+
}, F = () => {
|
|
47
|
+
if (!O.current || !M.current || !E.current || w.current || C.current) return;
|
|
64
48
|
let e = o.current?.scrollHeight;
|
|
65
|
-
|
|
49
|
+
E.current = !1, w.current = !0, S(!0);
|
|
66
50
|
let t;
|
|
67
|
-
Promise.resolve(
|
|
51
|
+
Promise.resolve(M.current()).then((e) => {
|
|
68
52
|
t = e;
|
|
69
53
|
}).finally(() => {
|
|
70
|
-
|
|
54
|
+
w.current = !1, S(!1), E.current = !0, t !== !1 && window.requestAnimationFrame(() => {
|
|
71
55
|
window.requestAnimationFrame(() => {
|
|
72
56
|
let t = o.current;
|
|
73
|
-
t && (!(typeof e == "number" && t.scrollHeight > e) || !
|
|
57
|
+
t && (!(typeof e == "number" && t.scrollHeight > e) || !O.current || !P() || F());
|
|
74
58
|
});
|
|
75
59
|
});
|
|
76
60
|
});
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
if (!l || !i()) return;
|
|
61
|
+
};
|
|
62
|
+
return e(() => {
|
|
63
|
+
if (!s || !r()) return;
|
|
81
64
|
let e = o.current;
|
|
82
65
|
if (!e || !h) return;
|
|
83
66
|
let t = new IntersectionObserver((t) => {
|
|
84
67
|
let n = t[0];
|
|
85
68
|
if (n) {
|
|
86
69
|
if (!n.isIntersecting) {
|
|
87
|
-
|
|
70
|
+
T.current = !0;
|
|
88
71
|
return;
|
|
89
72
|
}
|
|
90
|
-
|
|
73
|
+
N(e);
|
|
91
74
|
}
|
|
92
75
|
}, {
|
|
93
76
|
root: e,
|
|
@@ -97,97 +80,81 @@ function ne(ne) {
|
|
|
97
80
|
return t.observe(h), () => {
|
|
98
81
|
t.disconnect();
|
|
99
82
|
};
|
|
100
|
-
},
|
|
101
|
-
let W;
|
|
102
|
-
a[36] !== o || a[37] !== l || a[38] !== m || a[39] !== f || a[40] !== h ? (W = [
|
|
83
|
+
}, [
|
|
103
84
|
o,
|
|
104
|
-
|
|
85
|
+
s,
|
|
105
86
|
m,
|
|
106
87
|
f,
|
|
107
88
|
h
|
|
108
|
-
],
|
|
109
|
-
|
|
110
|
-
a[42] !== o || a[43] !== l || a[44] !== u || a[45] !== z || a[46] !== f || a[47] !== h ? (G = () => {
|
|
111
|
-
if (!l) return;
|
|
89
|
+
]), e(() => {
|
|
90
|
+
if (!s) return;
|
|
112
91
|
let e = o.current;
|
|
113
92
|
if (!e || !h) return;
|
|
114
|
-
let t =
|
|
115
|
-
if (
|
|
116
|
-
if (!
|
|
117
|
-
|
|
93
|
+
let t = k.current;
|
|
94
|
+
if (k.current = c, !(!c || t)) {
|
|
95
|
+
if (!i(h, e, Math.max(0, f))) {
|
|
96
|
+
T.current = !0;
|
|
118
97
|
return;
|
|
119
98
|
}
|
|
120
|
-
|
|
99
|
+
N(e);
|
|
121
100
|
}
|
|
122
|
-
},
|
|
123
|
-
let K;
|
|
124
|
-
a[49] !== o || a[50] !== l || a[51] !== u || a[52] !== m || a[53] !== f || a[54] !== h ? (K = [
|
|
101
|
+
}, [
|
|
125
102
|
o,
|
|
126
|
-
|
|
127
|
-
|
|
103
|
+
s,
|
|
104
|
+
c,
|
|
128
105
|
m,
|
|
129
106
|
f,
|
|
130
107
|
h
|
|
131
|
-
],
|
|
132
|
-
|
|
133
|
-
a[56] !== o || a[57] !== l || a[58] !== p || a[59] !== g || a[60] !== H ? (q = () => {
|
|
134
|
-
if (!l || !i()) return;
|
|
108
|
+
]), e(() => {
|
|
109
|
+
if (!s || !r()) return;
|
|
135
110
|
let e = o.current;
|
|
136
|
-
if (!e || !
|
|
111
|
+
if (!e || !_) return;
|
|
137
112
|
let t = new IntersectionObserver((e) => {
|
|
138
113
|
let t = e[0];
|
|
139
114
|
if (t) {
|
|
140
115
|
if (!t.isIntersecting) {
|
|
141
|
-
|
|
116
|
+
E.current = !0;
|
|
142
117
|
return;
|
|
143
118
|
}
|
|
144
|
-
|
|
119
|
+
F();
|
|
145
120
|
}
|
|
146
121
|
}, {
|
|
147
122
|
root: e,
|
|
148
123
|
rootMargin: `0px 0px ${Math.max(0, p)}px 0px`,
|
|
149
124
|
threshold: 0
|
|
150
125
|
});
|
|
151
|
-
return t.observe(
|
|
126
|
+
return t.observe(_), () => {
|
|
152
127
|
t.disconnect();
|
|
153
128
|
};
|
|
154
|
-
},
|
|
155
|
-
let J;
|
|
156
|
-
a[62] !== o || a[63] !== l || a[64] !== p || a[65] !== g ? (J = [
|
|
129
|
+
}, [
|
|
157
130
|
o,
|
|
158
|
-
|
|
131
|
+
s,
|
|
159
132
|
p,
|
|
160
|
-
|
|
161
|
-
],
|
|
162
|
-
|
|
163
|
-
a[67] !== o || a[68] !== l || a[69] !== p || a[70] !== g || a[71] !== d || a[72] !== H ? (Y = () => {
|
|
164
|
-
if (!l) return;
|
|
133
|
+
_
|
|
134
|
+
]), e(() => {
|
|
135
|
+
if (!s) return;
|
|
165
136
|
let e = o.current;
|
|
166
|
-
if (!e || !
|
|
167
|
-
let t =
|
|
168
|
-
if (
|
|
169
|
-
if (!
|
|
170
|
-
|
|
137
|
+
if (!e || !_) return;
|
|
138
|
+
let t = A.current;
|
|
139
|
+
if (A.current = l, !(!l || t)) {
|
|
140
|
+
if (!a(_, e, Math.max(0, p))) {
|
|
141
|
+
E.current = !0;
|
|
171
142
|
return;
|
|
172
143
|
}
|
|
173
|
-
|
|
144
|
+
F();
|
|
174
145
|
}
|
|
175
|
-
},
|
|
176
|
-
let X;
|
|
177
|
-
a[74] !== o || a[75] !== l || a[76] !== p || a[77] !== g || a[78] !== d ? (X = [
|
|
146
|
+
}, [
|
|
178
147
|
o,
|
|
179
|
-
|
|
148
|
+
s,
|
|
180
149
|
p,
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
],
|
|
184
|
-
|
|
185
|
-
a[80] !== o || a[81] !== l || a[82] !== g || a[83] !== d || a[84] !== V || a[85] !== H ? (Z = () => {
|
|
186
|
-
if (!l || !d) return;
|
|
150
|
+
_,
|
|
151
|
+
l
|
|
152
|
+
]), e(() => {
|
|
153
|
+
if (!s || !l) return;
|
|
187
154
|
let e = o.current;
|
|
188
|
-
if (!e || !
|
|
155
|
+
if (!e || !_) return;
|
|
189
156
|
let t = () => {
|
|
190
|
-
|
|
157
|
+
P() && F();
|
|
191
158
|
}, n = () => {
|
|
192
159
|
t();
|
|
193
160
|
}, r = () => {
|
|
@@ -198,29 +165,20 @@ function ne(ne) {
|
|
|
198
165
|
return e.addEventListener("scroll", n, { passive: !0 }), window.addEventListener("resize", r), () => {
|
|
199
166
|
e.removeEventListener("scroll", n), window.removeEventListener("resize", r);
|
|
200
167
|
};
|
|
201
|
-
},
|
|
202
|
-
let Q;
|
|
203
|
-
a[87] !== o || a[88] !== l || a[89] !== p || a[90] !== g || a[91] !== d ? (Q = [
|
|
168
|
+
}, [
|
|
204
169
|
o,
|
|
205
|
-
|
|
170
|
+
s,
|
|
206
171
|
p,
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
]
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
isFetchingNext: v
|
|
216
|
-
}, a[93] = v, a[94] = _, a[95] = $) : $ = a[95], $;
|
|
217
|
-
}
|
|
218
|
-
function re(e) {
|
|
219
|
-
window.requestAnimationFrame(() => {
|
|
220
|
-
window.requestAnimationFrame(() => e());
|
|
221
|
-
});
|
|
172
|
+
_,
|
|
173
|
+
l
|
|
174
|
+
]), {
|
|
175
|
+
startSentinelRef: g,
|
|
176
|
+
endSentinelRef: v,
|
|
177
|
+
isFetchingPrevious: y,
|
|
178
|
+
isFetchingNext: x
|
|
179
|
+
};
|
|
222
180
|
}
|
|
223
181
|
//#endregion
|
|
224
|
-
export {
|
|
182
|
+
export { o as useScrollPagination };
|
|
225
183
|
|
|
226
184
|
//# sourceMappingURL=index7.js.map
|
package/dist/index7.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index7.js","names":["useEffect","useRef","useState","RefObject","MaybePromise","T","Promise","ReachCallback","UseScrollPaginationOptions","containerRef","HTMLElement","enabled","hasPreviousPage","hasNextPage","onStartReached","onEndReached","startReachedOffsetPx","endReachedOffsetPx","maintainScrollOnStartFetch","UseScrollPaginationResult","startSentinelRef","node","Element","endSentinelRef","isFetchingPrevious","isFetchingNext","supportsIntersectionObserver","window","isWithinStartRange","target","root","offsetPx","targetRect","getBoundingClientRect","rootRect","bottom","top","isWithinEndRange","useScrollPagination","t0","$","_c","t1","t2","t3","t4","t5","t6","undefined","startSentinel","setStartSentinel","endSentinel","setEndSentinel","setIsFetchingPrevious","setIsFetchingNext","isFetchingPreviousRef","isFetchingNextRef","canTriggerStartRef","canTriggerEndRef","hasPreviousPageRef","hasNextPageRef","previousHasPreviousPageRef","previousHasNextPageRef","onStartReachedRef","onEndReachedRef","t7","t8","current","t10","t9","t11","t12","t13","t14","t15","t16","t17","t18","t19","Symbol","for","t20","t21","previousScrollTop","scrollTop","previousScrollHeight","scrollHeight","resolve","then","isConnected","_temp","scrollHeightDelta","finally","runStartFetch","t22","root_0","resolvedOffsetPx","Math","max","isEndSentinelWithinRange","runEndFetch","initialRoot","previousScrollHeight_0","didFetch","result","requestAnimationFrame","root_1","didGrow","t23","root_2","observer","IntersectionObserver","entries","entry","isIntersecting","rootMargin","threshold","observe","disconnect","t24","t25","root_3","hadPreviousPage","resolvedOffsetPx_0","t26","t27","root_4","observer_0","entries_0","entry_0","t28","t29","root_5","hadNextPage","resolvedOffsetPx_1","t30","t31","root_6","checkAndFetch","handleScroll","handleResize","addEventListener","passive","removeEventListener","t32","t33"],"sources":["../src/helpers/useScrollPagination.ts"],"sourcesContent":["import { useEffect, useRef, useState, type RefObject } from \"react\"\n\n\ntype MaybePromise<T> = T | Promise<T>\n\ntype ReachCallback = () => MaybePromise<boolean | void>\n\nexport type UseScrollPaginationOptions = {\n containerRef: RefObject<HTMLElement | null>\n enabled?: boolean\n hasPreviousPage?: boolean\n hasNextPage?: boolean\n onStartReached?: ReachCallback\n onEndReached?: ReachCallback\n startReachedOffsetPx?: number\n endReachedOffsetPx?: number\n maintainScrollOnStartFetch?: boolean\n}\n\nexport type UseScrollPaginationResult = {\n startSentinelRef: (node: Element | null) => void\n endSentinelRef: (node: Element | null) => void\n isFetchingPrevious: boolean\n isFetchingNext: boolean\n}\n\nconst supportsIntersectionObserver = () => {\n if (typeof window === \"undefined\") return false\n return \"IntersectionObserver\" in window\n}\n\nconst isWithinStartRange = (target: Element, root: HTMLElement, offsetPx: number) => {\n const targetRect = target.getBoundingClientRect()\n const rootRect = root.getBoundingClientRect()\n return targetRect.bottom >= rootRect.top - offsetPx && targetRect.top <= rootRect.bottom\n}\n\nconst isWithinEndRange = (target: Element, root: HTMLElement, offsetPx: number) => {\n const targetRect = target.getBoundingClientRect()\n const rootRect = root.getBoundingClientRect()\n return targetRect.top <= rootRect.bottom + offsetPx && targetRect.bottom >= rootRect.top\n}\n\nexport function useScrollPagination({\n containerRef,\n enabled = true,\n hasPreviousPage = false,\n hasNextPage = false,\n onStartReached,\n onEndReached,\n startReachedOffsetPx = 160,\n endReachedOffsetPx = 160,\n maintainScrollOnStartFetch = true,\n}: UseScrollPaginationOptions): UseScrollPaginationResult {\n const [startSentinel, setStartSentinel] = useState<Element | null>(null)\n const [endSentinel, setEndSentinel] = useState<Element | null>(null)\n const [isFetchingPrevious, setIsFetchingPrevious] = useState(false)\n const [isFetchingNext, setIsFetchingNext] = useState(false)\n\n const isFetchingPreviousRef = useRef(false)\n const isFetchingNextRef = useRef(false)\n const canTriggerStartRef = useRef(true)\n const canTriggerEndRef = useRef(true)\n const hasPreviousPageRef = useRef(hasPreviousPage)\n const hasNextPageRef = useRef(hasNextPage)\n const previousHasPreviousPageRef = useRef(hasPreviousPage)\n const previousHasNextPageRef = useRef(hasNextPage)\n const onStartReachedRef = useRef<ReachCallback | undefined>(onStartReached)\n const onEndReachedRef = useRef<ReachCallback | undefined>(onEndReached)\n\n useEffect(() => {\n isFetchingPreviousRef.current = isFetchingPrevious\n }, [isFetchingPrevious])\n\n useEffect(() => {\n isFetchingNextRef.current = isFetchingNext\n }, [isFetchingNext])\n\n useEffect(() => {\n hasPreviousPageRef.current = hasPreviousPage\n }, [hasPreviousPage])\n\n useEffect(() => {\n hasNextPageRef.current = hasNextPage\n }, [hasNextPage])\n\n useEffect(() => {\n onStartReachedRef.current = onStartReached\n }, [onStartReached])\n\n useEffect(() => {\n onEndReachedRef.current = onEndReached\n }, [onEndReached])\n\n useEffect(() => {\n canTriggerStartRef.current = true\n canTriggerEndRef.current = true\n }, [enabled])\n\n const runStartFetch = (root: HTMLElement) => {\n if (!hasPreviousPageRef.current) return\n if (!onStartReachedRef.current) return\n if (!canTriggerStartRef.current) return\n if (isFetchingPreviousRef.current || isFetchingNextRef.current) return\n\n canTriggerStartRef.current = false\n isFetchingPreviousRef.current = true\n setIsFetchingPrevious(true)\n\n const previousScrollTop = root.scrollTop\n const previousScrollHeight = root.scrollHeight\n\n void Promise.resolve(onStartReachedRef.current())\n .then(async () => {\n if (!maintainScrollOnStartFetch) return\n if (!root.isConnected) return\n\n await new Promise<void>((resolve) => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => resolve())\n })\n })\n\n const scrollHeightDelta = root.scrollHeight - previousScrollHeight\n if (scrollHeightDelta <= 0) return\n root.scrollTop = previousScrollTop + scrollHeightDelta\n })\n .finally(() => {\n isFetchingPreviousRef.current = false\n setIsFetchingPrevious(false)\n })\n }\n\n const isEndSentinelWithinRange = () => {\n const root = containerRef.current\n if (!root || !endSentinel) return false\n const resolvedOffsetPx = Math.max(0, endReachedOffsetPx)\n return isWithinEndRange(endSentinel, root, resolvedOffsetPx)\n }\n\n const runEndFetch = () => {\n if (!hasNextPageRef.current) return\n if (!onEndReachedRef.current) return\n if (!canTriggerEndRef.current) return\n if (isFetchingNextRef.current || isFetchingPreviousRef.current) return\n\n const initialRoot = containerRef.current\n const previousScrollHeight = initialRoot?.scrollHeight\n canTriggerEndRef.current = false\n isFetchingNextRef.current = true\n setIsFetchingNext(true)\n\n let didFetch: boolean | void\n void Promise.resolve(onEndReachedRef.current())\n .then((result) => {\n didFetch = result\n })\n .finally(() => {\n isFetchingNextRef.current = false\n setIsFetchingNext(false)\n canTriggerEndRef.current = true\n\n if (didFetch === false) return\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n const root = containerRef.current\n if (!root) return\n const didGrow = typeof previousScrollHeight === \"number\"\n ? root.scrollHeight > previousScrollHeight\n : false\n if (!didGrow || !hasNextPageRef.current || !isEndSentinelWithinRange()) return\n runEndFetch()\n })\n })\n })\n }\n\n useEffect(() => {\n if (!enabled) return\n if (!supportsIntersectionObserver()) return\n\n const root = containerRef.current\n if (!root || !startSentinel) return\n\n const observer = new IntersectionObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n\n if (!entry.isIntersecting) {\n canTriggerStartRef.current = true\n return\n }\n\n runStartFetch(root)\n }, {\n root,\n rootMargin: `${Math.max(0, startReachedOffsetPx)}px 0px 0px 0px`,\n threshold: 0,\n })\n\n observer.observe(startSentinel)\n return () => {\n observer.disconnect()\n }\n }, [containerRef, enabled, maintainScrollOnStartFetch, startReachedOffsetPx, startSentinel])\n\n useEffect(() => {\n if (!enabled) return\n\n const root = containerRef.current\n if (!root || !startSentinel) return\n\n const hadPreviousPage = previousHasPreviousPageRef.current\n previousHasPreviousPageRef.current = hasPreviousPage\n if (!hasPreviousPage || hadPreviousPage) return\n\n const resolvedOffsetPx = Math.max(0, startReachedOffsetPx)\n if (!isWithinStartRange(startSentinel, root, resolvedOffsetPx)) {\n canTriggerStartRef.current = true\n return\n }\n\n runStartFetch(root)\n }, [\n containerRef,\n enabled,\n hasPreviousPage,\n maintainScrollOnStartFetch,\n startReachedOffsetPx,\n startSentinel,\n ])\n\n useEffect(() => {\n if (!enabled) return\n if (!supportsIntersectionObserver()) return\n\n const root = containerRef.current\n if (!root || !endSentinel) return\n\n const observer = new IntersectionObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n\n if (!entry.isIntersecting) {\n canTriggerEndRef.current = true\n return\n }\n\n runEndFetch()\n }, {\n root,\n rootMargin: `0px 0px ${Math.max(0, endReachedOffsetPx)}px 0px`,\n threshold: 0,\n })\n\n observer.observe(endSentinel)\n return () => {\n observer.disconnect()\n }\n }, [containerRef, enabled, endReachedOffsetPx, endSentinel])\n\n useEffect(() => {\n if (!enabled) return\n\n const root = containerRef.current\n if (!root || !endSentinel) return\n\n const hadNextPage = previousHasNextPageRef.current\n previousHasNextPageRef.current = hasNextPage\n if (!hasNextPage || hadNextPage) return\n\n const resolvedOffsetPx = Math.max(0, endReachedOffsetPx)\n if (!isWithinEndRange(endSentinel, root, resolvedOffsetPx)) {\n canTriggerEndRef.current = true\n return\n }\n\n runEndFetch()\n }, [\n containerRef,\n enabled,\n endReachedOffsetPx,\n endSentinel,\n hasNextPage,\n ])\n\n useEffect(() => {\n if (!enabled) return\n if (!hasNextPage) return\n\n const root = containerRef.current\n if (!root || !endSentinel) return\n\n const checkAndFetch = () => {\n if (!isEndSentinelWithinRange()) return\n runEndFetch()\n }\n\n const handleScroll = () => {\n checkAndFetch()\n }\n\n const handleResize = () => {\n window.requestAnimationFrame(() => {\n checkAndFetch()\n })\n }\n\n root.addEventListener(\"scroll\", handleScroll, { passive: true })\n window.addEventListener(\"resize\", handleResize)\n\n return () => {\n root.removeEventListener(\"scroll\", handleScroll)\n window.removeEventListener(\"resize\", handleResize)\n }\n }, [\n containerRef,\n enabled,\n endReachedOffsetPx,\n endSentinel,\n hasNextPage,\n ])\n\n return {\n startSentinelRef: setStartSentinel,\n endSentinelRef: setEndSentinel,\n isFetchingPrevious,\n isFetchingNext,\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index7.js","names":["root","previousScrollHeight","resolvedOffsetPx","observer","entries","entry"],"sources":["../src/helpers/useScrollPagination.ts"],"sourcesContent":["import { useEffect, useRef, useState, type RefObject } from \"react\"\n\n\ntype MaybePromise<T> = T | Promise<T>\n\ntype ReachCallback = () => MaybePromise<boolean | void>\n\nexport type UseScrollPaginationOptions = {\n containerRef: RefObject<HTMLElement | null>\n enabled?: boolean\n hasPreviousPage?: boolean\n hasNextPage?: boolean\n onStartReached?: ReachCallback\n onEndReached?: ReachCallback\n startReachedOffsetPx?: number\n endReachedOffsetPx?: number\n maintainScrollOnStartFetch?: boolean\n}\n\nexport type UseScrollPaginationResult = {\n startSentinelRef: (node: Element | null) => void\n endSentinelRef: (node: Element | null) => void\n isFetchingPrevious: boolean\n isFetchingNext: boolean\n}\n\nconst supportsIntersectionObserver = () => {\n if (typeof window === \"undefined\") return false\n return \"IntersectionObserver\" in window\n}\n\nconst isWithinStartRange = (target: Element, root: HTMLElement, offsetPx: number) => {\n const targetRect = target.getBoundingClientRect()\n const rootRect = root.getBoundingClientRect()\n return targetRect.bottom >= rootRect.top - offsetPx && targetRect.top <= rootRect.bottom\n}\n\nconst isWithinEndRange = (target: Element, root: HTMLElement, offsetPx: number) => {\n const targetRect = target.getBoundingClientRect()\n const rootRect = root.getBoundingClientRect()\n return targetRect.top <= rootRect.bottom + offsetPx && targetRect.bottom >= rootRect.top\n}\n\nexport function useScrollPagination({\n containerRef,\n enabled = true,\n hasPreviousPage = false,\n hasNextPage = false,\n onStartReached,\n onEndReached,\n startReachedOffsetPx = 160,\n endReachedOffsetPx = 160,\n maintainScrollOnStartFetch = true,\n}: UseScrollPaginationOptions): UseScrollPaginationResult {\n const [startSentinel, setStartSentinel] = useState<Element | null>(null)\n const [endSentinel, setEndSentinel] = useState<Element | null>(null)\n const [isFetchingPrevious, setIsFetchingPrevious] = useState(false)\n const [isFetchingNext, setIsFetchingNext] = useState(false)\n\n const isFetchingPreviousRef = useRef(false)\n const isFetchingNextRef = useRef(false)\n const canTriggerStartRef = useRef(true)\n const canTriggerEndRef = useRef(true)\n const hasPreviousPageRef = useRef(hasPreviousPage)\n const hasNextPageRef = useRef(hasNextPage)\n const previousHasPreviousPageRef = useRef(hasPreviousPage)\n const previousHasNextPageRef = useRef(hasNextPage)\n const onStartReachedRef = useRef<ReachCallback | undefined>(onStartReached)\n const onEndReachedRef = useRef<ReachCallback | undefined>(onEndReached)\n\n useEffect(() => {\n isFetchingPreviousRef.current = isFetchingPrevious\n }, [isFetchingPrevious])\n\n useEffect(() => {\n isFetchingNextRef.current = isFetchingNext\n }, [isFetchingNext])\n\n useEffect(() => {\n hasPreviousPageRef.current = hasPreviousPage\n }, [hasPreviousPage])\n\n useEffect(() => {\n hasNextPageRef.current = hasNextPage\n }, [hasNextPage])\n\n useEffect(() => {\n onStartReachedRef.current = onStartReached\n }, [onStartReached])\n\n useEffect(() => {\n onEndReachedRef.current = onEndReached\n }, [onEndReached])\n\n useEffect(() => {\n canTriggerStartRef.current = true\n canTriggerEndRef.current = true\n }, [enabled])\n\n const runStartFetch = (root: HTMLElement) => {\n if (!hasPreviousPageRef.current) return\n if (!onStartReachedRef.current) return\n if (!canTriggerStartRef.current) return\n if (isFetchingPreviousRef.current || isFetchingNextRef.current) return\n\n canTriggerStartRef.current = false\n isFetchingPreviousRef.current = true\n setIsFetchingPrevious(true)\n\n const previousScrollTop = root.scrollTop\n const previousScrollHeight = root.scrollHeight\n\n void Promise.resolve(onStartReachedRef.current())\n .then(async () => {\n if (!maintainScrollOnStartFetch) return\n if (!root.isConnected) return\n\n await new Promise<void>((resolve) => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => resolve())\n })\n })\n\n const scrollHeightDelta = root.scrollHeight - previousScrollHeight\n if (scrollHeightDelta <= 0) return\n root.scrollTop = previousScrollTop + scrollHeightDelta\n })\n .finally(() => {\n isFetchingPreviousRef.current = false\n setIsFetchingPrevious(false)\n })\n }\n\n const isEndSentinelWithinRange = () => {\n const root = containerRef.current\n if (!root || !endSentinel) return false\n const resolvedOffsetPx = Math.max(0, endReachedOffsetPx)\n return isWithinEndRange(endSentinel, root, resolvedOffsetPx)\n }\n\n const runEndFetch = () => {\n if (!hasNextPageRef.current) return\n if (!onEndReachedRef.current) return\n if (!canTriggerEndRef.current) return\n if (isFetchingNextRef.current || isFetchingPreviousRef.current) return\n\n const initialRoot = containerRef.current\n const previousScrollHeight = initialRoot?.scrollHeight\n canTriggerEndRef.current = false\n isFetchingNextRef.current = true\n setIsFetchingNext(true)\n\n let didFetch: boolean | void\n void Promise.resolve(onEndReachedRef.current())\n .then((result) => {\n didFetch = result\n })\n .finally(() => {\n isFetchingNextRef.current = false\n setIsFetchingNext(false)\n canTriggerEndRef.current = true\n\n if (didFetch === false) return\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n const root = containerRef.current\n if (!root) return\n const didGrow = typeof previousScrollHeight === \"number\"\n ? root.scrollHeight > previousScrollHeight\n : false\n if (!didGrow || !hasNextPageRef.current || !isEndSentinelWithinRange()) return\n runEndFetch()\n })\n })\n })\n }\n\n useEffect(() => {\n if (!enabled) return\n if (!supportsIntersectionObserver()) return\n\n const root = containerRef.current\n if (!root || !startSentinel) return\n\n const observer = new IntersectionObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n\n if (!entry.isIntersecting) {\n canTriggerStartRef.current = true\n return\n }\n\n runStartFetch(root)\n }, {\n root,\n rootMargin: `${Math.max(0, startReachedOffsetPx)}px 0px 0px 0px`,\n threshold: 0,\n })\n\n observer.observe(startSentinel)\n return () => {\n observer.disconnect()\n }\n }, [containerRef, enabled, maintainScrollOnStartFetch, startReachedOffsetPx, startSentinel])\n\n useEffect(() => {\n if (!enabled) return\n\n const root = containerRef.current\n if (!root || !startSentinel) return\n\n const hadPreviousPage = previousHasPreviousPageRef.current\n previousHasPreviousPageRef.current = hasPreviousPage\n if (!hasPreviousPage || hadPreviousPage) return\n\n const resolvedOffsetPx = Math.max(0, startReachedOffsetPx)\n if (!isWithinStartRange(startSentinel, root, resolvedOffsetPx)) {\n canTriggerStartRef.current = true\n return\n }\n\n runStartFetch(root)\n }, [\n containerRef,\n enabled,\n hasPreviousPage,\n maintainScrollOnStartFetch,\n startReachedOffsetPx,\n startSentinel,\n ])\n\n useEffect(() => {\n if (!enabled) return\n if (!supportsIntersectionObserver()) return\n\n const root = containerRef.current\n if (!root || !endSentinel) return\n\n const observer = new IntersectionObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n\n if (!entry.isIntersecting) {\n canTriggerEndRef.current = true\n return\n }\n\n runEndFetch()\n }, {\n root,\n rootMargin: `0px 0px ${Math.max(0, endReachedOffsetPx)}px 0px`,\n threshold: 0,\n })\n\n observer.observe(endSentinel)\n return () => {\n observer.disconnect()\n }\n }, [containerRef, enabled, endReachedOffsetPx, endSentinel])\n\n useEffect(() => {\n if (!enabled) return\n\n const root = containerRef.current\n if (!root || !endSentinel) return\n\n const hadNextPage = previousHasNextPageRef.current\n previousHasNextPageRef.current = hasNextPage\n if (!hasNextPage || hadNextPage) return\n\n const resolvedOffsetPx = Math.max(0, endReachedOffsetPx)\n if (!isWithinEndRange(endSentinel, root, resolvedOffsetPx)) {\n canTriggerEndRef.current = true\n return\n }\n\n runEndFetch()\n }, [\n containerRef,\n enabled,\n endReachedOffsetPx,\n endSentinel,\n hasNextPage,\n ])\n\n useEffect(() => {\n if (!enabled) return\n if (!hasNextPage) return\n\n const root = containerRef.current\n if (!root || !endSentinel) return\n\n const checkAndFetch = () => {\n if (!isEndSentinelWithinRange()) return\n runEndFetch()\n }\n\n const handleScroll = () => {\n checkAndFetch()\n }\n\n const handleResize = () => {\n window.requestAnimationFrame(() => {\n checkAndFetch()\n })\n }\n\n root.addEventListener(\"scroll\", handleScroll, { passive: true })\n window.addEventListener(\"resize\", handleResize)\n\n return () => {\n root.removeEventListener(\"scroll\", handleScroll)\n window.removeEventListener(\"resize\", handleResize)\n }\n }, [\n containerRef,\n enabled,\n endReachedOffsetPx,\n endSentinel,\n hasNextPage,\n ])\n\n return {\n startSentinelRef: setStartSentinel,\n endSentinelRef: setEndSentinel,\n isFetchingPrevious,\n isFetchingNext,\n }\n}\n"],"mappings":"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"}
|
package/dist/index70.js
CHANGED
|
@@ -35,8 +35,8 @@ var t = {
|
|
|
35
35
|
return e(t.getSeconds(), n.length);
|
|
36
36
|
},
|
|
37
37
|
S(t, n) {
|
|
38
|
-
let r = n.length, i = t.getMilliseconds();
|
|
39
|
-
return e(
|
|
38
|
+
let r = n.length, i = t.getMilliseconds(), a = Math.trunc(i * 10 ** (r - 3));
|
|
39
|
+
return e(a, n.length);
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
42
|
//#endregion
|