@rpcbase/ui 0.207.0 → 0.208.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/dist/index.js +7 -7
  2. package/dist/index19.js +1 -1
  3. package/dist/index19.js.map +1 -1
  4. package/dist/index200.js +56 -55
  5. package/dist/index200.js.map +1 -1
  6. package/dist/index201.js +60 -8
  7. package/dist/index201.js.map +1 -1
  8. package/dist/index202.js +7 -15
  9. package/dist/index202.js.map +1 -1
  10. package/dist/index203.js +15 -143
  11. package/dist/index203.js.map +1 -1
  12. package/dist/index204.js +145 -4
  13. package/dist/index204.js.map +1 -1
  14. package/dist/index205.js +4 -11
  15. package/dist/index205.js.map +1 -1
  16. package/dist/index206.js +10 -104
  17. package/dist/index206.js.map +1 -1
  18. package/dist/index207.js +94 -347
  19. package/dist/index207.js.map +1 -1
  20. package/dist/index208.js +349 -87
  21. package/dist/index208.js.map +1 -1
  22. package/dist/index209.js +73 -304
  23. package/dist/index209.js.map +1 -1
  24. package/dist/index210.js +309 -193
  25. package/dist/index210.js.map +1 -1
  26. package/dist/index211.js +211 -19
  27. package/dist/index211.js.map +1 -1
  28. package/dist/index212.js +18 -27
  29. package/dist/index212.js.map +1 -1
  30. package/dist/index213.js +27 -187
  31. package/dist/index213.js.map +1 -1
  32. package/dist/index214.js +186 -16
  33. package/dist/index214.js.map +1 -1
  34. package/dist/index215.js +18 -44
  35. package/dist/index215.js.map +1 -1
  36. package/dist/index216.js +60 -8
  37. package/dist/index216.js.map +1 -1
  38. package/dist/index217.js +42 -23
  39. package/dist/index217.js.map +1 -1
  40. package/dist/index218.js +9 -44
  41. package/dist/index218.js.map +1 -1
  42. package/dist/index219.js +25 -18
  43. package/dist/index219.js.map +1 -1
  44. package/dist/index220.js +45 -3
  45. package/dist/index220.js.map +1 -1
  46. package/dist/index221.js +17 -4
  47. package/dist/index221.js.map +1 -1
  48. package/dist/index222.js +3 -21
  49. package/dist/index222.js.map +1 -1
  50. package/dist/index223.js +4 -24
  51. package/dist/index223.js.map +1 -1
  52. package/dist/index224.js +17 -64
  53. package/dist/index224.js.map +1 -1
  54. package/dist/index225.js +23 -13
  55. package/dist/index225.js.map +1 -1
  56. package/dist/index226.js +68 -4
  57. package/dist/index226.js.map +1 -1
  58. package/dist/index227.js +14 -50
  59. package/dist/index227.js.map +1 -1
  60. package/dist/index228.js +4 -6
  61. package/dist/index228.js.map +1 -1
  62. package/dist/index229.js +50 -26
  63. package/dist/index229.js.map +1 -1
  64. package/dist/index230.js +5 -13
  65. package/dist/index230.js.map +1 -1
  66. package/dist/index231.js +25 -8
  67. package/dist/index231.js.map +1 -1
  68. package/dist/index232.js +17 -3
  69. package/dist/index232.js.map +1 -0
  70. package/dist/index233.js +8 -24
  71. package/dist/index233.js.map +1 -1
  72. package/dist/index234.js +2 -71
  73. package/dist/index235.js +29 -3
  74. package/dist/index235.js.map +1 -0
  75. package/dist/index236.js +69 -12
  76. package/dist/index236.js.map +1 -1
  77. package/dist/index237.js +3 -54
  78. package/dist/index238.js +11 -114
  79. package/dist/index238.js.map +1 -1
  80. package/dist/index239.js +51 -6
  81. package/dist/index239.js.map +1 -1
  82. package/dist/index240.js +115 -13
  83. package/dist/index240.js.map +1 -1
  84. package/dist/index241.js +6 -687
  85. package/dist/index241.js.map +1 -1
  86. package/dist/index242.js +13 -253
  87. package/dist/index242.js.map +1 -1
  88. package/dist/index243.js +662 -676
  89. package/dist/index243.js.map +1 -1
  90. package/dist/index244.js +252 -7430
  91. package/dist/index244.js.map +1 -1
  92. package/dist/index245.js +700 -6
  93. package/dist/index245.js.map +1 -1
  94. package/dist/index246.js +7429 -11
  95. package/dist/index246.js.map +1 -1
  96. package/dist/index247.js +5 -4
  97. package/dist/index247.js.map +1 -1
  98. package/dist/index248.js +11 -458
  99. package/dist/index248.js.map +1 -1
  100. package/dist/index249.js +5 -37
  101. package/dist/index249.js.map +1 -1
  102. package/dist/index250.js +458 -18
  103. package/dist/index250.js.map +1 -1
  104. package/dist/index251.js +34 -24
  105. package/dist/index251.js.map +1 -1
  106. package/dist/index252.js +19 -4
  107. package/dist/index252.js.map +1 -1
  108. package/dist/index253.js +23 -54
  109. package/dist/index253.js.map +1 -1
  110. package/dist/index254.js +4 -7
  111. package/dist/index254.js.map +1 -1
  112. package/dist/index255.js +57 -11
  113. package/dist/index255.js.map +1 -1
  114. package/dist/index256.js +8 -3
  115. package/dist/index256.js.map +1 -1
  116. package/dist/index257.js +12 -16
  117. package/dist/index257.js.map +1 -1
  118. package/dist/index258.js +3 -26
  119. package/dist/index258.js.map +1 -1
  120. package/dist/index259.js +15 -42
  121. package/dist/index259.js.map +1 -1
  122. package/dist/index260.js +25 -13
  123. package/dist/index260.js.map +1 -1
  124. package/dist/index261.js +40 -22
  125. package/dist/index261.js.map +1 -1
  126. package/dist/index262.js +13 -17
  127. package/dist/index262.js.map +1 -1
  128. package/dist/index263.js +24 -34
  129. package/dist/index263.js.map +1 -1
  130. package/dist/index264.js +17 -5
  131. package/dist/index264.js.map +1 -1
  132. package/dist/index265.js +35 -9
  133. package/dist/index265.js.map +1 -1
  134. package/dist/index266.js +5 -8
  135. package/dist/index266.js.map +1 -1
  136. package/dist/index267.js +9 -9
  137. package/dist/index267.js.map +1 -1
  138. package/dist/index268.js +8 -10
  139. package/dist/index268.js.map +1 -1
  140. package/dist/index269.js +9 -7
  141. package/dist/index269.js.map +1 -1
  142. package/dist/index270.js +9 -72
  143. package/dist/index270.js.map +1 -1
  144. package/dist/index271.js +7 -171
  145. package/dist/index271.js.map +1 -1
  146. package/dist/index272.js +63 -104
  147. package/dist/index272.js.map +1 -1
  148. package/dist/index273.js +169 -12
  149. package/dist/index273.js.map +1 -1
  150. package/dist/index274.js +109 -75
  151. package/dist/index274.js.map +1 -1
  152. package/dist/index275.js +12 -44
  153. package/dist/index275.js.map +1 -1
  154. package/dist/index276.js +79 -12
  155. package/dist/index276.js.map +1 -1
  156. package/dist/index277.js +45 -15
  157. package/dist/index277.js.map +1 -1
  158. package/dist/index278.js +12 -98
  159. package/dist/index278.js.map +1 -1
  160. package/dist/index279.js +15 -55
  161. package/dist/index279.js.map +1 -1
  162. package/dist/index280.js +89 -98
  163. package/dist/index280.js.map +1 -1
  164. package/dist/index281.js +27 -42
  165. package/dist/index281.js.map +1 -1
  166. package/dist/index282.js +92 -97
  167. package/dist/index282.js.map +1 -1
  168. package/dist/index283.js +62 -46
  169. package/dist/index283.js.map +1 -1
  170. package/dist/index284.js +108 -38
  171. package/dist/index284.js.map +1 -1
  172. package/dist/index285.js +48 -135
  173. package/dist/index285.js.map +1 -1
  174. package/dist/index286.js +43 -139
  175. package/dist/index286.js.map +1 -1
  176. package/dist/index287.js +105 -217
  177. package/dist/index287.js.map +1 -1
  178. package/dist/index288.js +109 -210
  179. package/dist/index288.js.map +1 -1
  180. package/dist/index289.js +168 -212
  181. package/dist/index289.js.map +1 -1
  182. package/dist/index290.js +240 -5
  183. package/dist/index290.js.map +1 -1
  184. package/dist/index291.js +298 -6
  185. package/dist/index291.js.map +1 -1
  186. package/dist/index292.js +5 -7
  187. package/dist/index292.js.map +1 -1
  188. package/dist/index293.js +4 -4
  189. package/dist/index293.js.map +1 -1
  190. package/dist/index294.js +7 -6
  191. package/dist/index294.js.map +1 -1
  192. package/dist/index295.js +6 -21
  193. package/dist/index295.js.map +1 -1
  194. package/dist/index296.js +6 -10
  195. package/dist/index296.js.map +1 -1
  196. package/dist/index297.js +18 -123
  197. package/dist/index297.js.map +1 -1
  198. package/dist/index298.js +10 -164
  199. package/dist/index298.js.map +1 -1
  200. package/dist/index299.js +116 -58
  201. package/dist/index299.js.map +1 -1
  202. package/dist/index300.js +161 -106
  203. package/dist/index300.js.map +1 -1
  204. package/dist/index301.js +66 -489
  205. package/dist/index301.js.map +1 -1
  206. package/dist/index302.js +106 -59
  207. package/dist/index302.js.map +1 -1
  208. package/dist/index303.js +492 -4
  209. package/dist/index303.js.map +1 -1
  210. package/dist/index304.js +62 -27
  211. package/dist/index304.js.map +1 -1
  212. package/dist/index305.js +4 -66
  213. package/dist/index305.js.map +1 -1
  214. package/dist/index306.js +27 -152
  215. package/dist/index306.js.map +1 -1
  216. package/dist/index307.js +59 -555
  217. package/dist/index307.js.map +1 -1
  218. package/dist/index308.js +143 -201
  219. package/dist/index308.js.map +1 -1
  220. package/dist/index309.js +56 -326
  221. package/dist/index309.js.map +1 -1
  222. package/dist/index310.js +553 -260
  223. package/dist/index310.js.map +1 -1
  224. package/dist/index311.js +214 -0
  225. package/dist/index311.js.map +1 -0
  226. package/dist/index312.js +335 -0
  227. package/dist/index312.js.map +1 -0
  228. package/dist/index313.js +272 -0
  229. package/dist/index313.js.map +1 -0
  230. package/package.json +2 -2
  231. package/dist/index234.js.map +0 -1
  232. package/dist/index237.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index313.js","names":["useEffect","useMemo","useState","Loader2","cn","NotificationDigestFrequency","NotificationSettings","NotificationTopicCatalogItem","NotificationTopicPreference","SettingsResponse","ok","error","settings","digestValues","Array","value","label","normalizeSettings","digestFrequency","frequency","topicPreferences","isArray","map","pref","topic","trim","inApp","emailDigest","push","filter","length","lastDigestSentAt","normalizeTopics","topics","seen","Set","title","description","undefined","has","add","applyTopicsToSettings","defaults","byTopic","Map","existing","get","NotificationsSettings","className","loading","setLoading","saving","setSaving","setError","setSettings","normalizedTopics","loadSettings","res","fetch","method","credentials","json","catch","normalized","saveSettings","next","headers","body","JSON","stringify","current","updatePreference","update","p","hasExisting","some","nextPrefs","e","target","opt","meta","find","checked"],"sources":["../src/components/Notifications/NotificationsSettings.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\"\nimport { Loader2 } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport type { NotificationDigestFrequency, NotificationSettings, NotificationTopicCatalogItem, NotificationTopicPreference } from \"./types\"\n\n\ntype SettingsResponse = {\n ok?: boolean\n error?: string\n settings?: NotificationSettings\n}\n\nconst digestValues: Array<{ value: NotificationDigestFrequency; label: string }> = [\n { value: \"off\", label: \"Off\" },\n { value: \"daily\", label: \"Daily\" },\n { value: \"weekly\", label: \"Weekly\" },\n]\n\nconst normalizeSettings = (settings: NotificationSettings | undefined): NotificationSettings => {\n const digestFrequency = settings?.digestFrequency\n const frequency: NotificationDigestFrequency =\n digestFrequency === \"off\" || digestFrequency === \"daily\" || digestFrequency === \"weekly\"\n ? digestFrequency\n : \"weekly\"\n\n const topicPreferences = Array.isArray(settings?.topicPreferences)\n ? settings!.topicPreferences\n .map((pref) => ({\n topic: typeof pref.topic === \"string\" ? pref.topic.trim() : \"\",\n inApp: pref.inApp === true,\n emailDigest: pref.emailDigest === true,\n push: pref.push === true,\n }))\n .filter((pref) => pref.topic.length > 0)\n : []\n\n return {\n digestFrequency: frequency,\n topicPreferences,\n ...(typeof settings?.lastDigestSentAt === \"string\" ? { lastDigestSentAt: settings.lastDigestSentAt } : {}),\n }\n}\n\nconst normalizeTopics = (topics: NotificationTopicCatalogItem[] | undefined): NotificationTopicCatalogItem[] => {\n if (!Array.isArray(topics)) return []\n\n const seen = new Set<string>()\n return topics\n .map((topic) => ({\n topic: typeof topic.topic === \"string\" ? topic.topic.trim() : \"\",\n title: typeof topic.title === \"string\" ? topic.title.trim() : \"\",\n description: typeof topic.description === \"string\" ? topic.description.trim() : undefined,\n }))\n .filter((topic) => topic.topic.length > 0)\n .filter((topic) => {\n if (seen.has(topic.topic)) return false\n seen.add(topic.topic)\n return true\n })\n}\n\nconst applyTopicsToSettings = (\n settings: NotificationSettings,\n topics: NotificationTopicCatalogItem[],\n): NotificationSettings => {\n const defaults: NotificationTopicPreference = {\n topic: \"\",\n inApp: true,\n emailDigest: true,\n push: false,\n }\n\n const byTopic = new Map(settings.topicPreferences.map((pref) => [pref.topic, pref]))\n return {\n ...settings,\n topicPreferences: topics.map((topic) => {\n const existing = byTopic.get(topic.topic)\n return existing\n ? {\n topic: topic.topic,\n inApp: existing.inApp === true,\n emailDigest: existing.emailDigest === true,\n push: existing.push === true,\n }\n : {\n ...defaults,\n topic: topic.topic,\n }\n }),\n }\n}\n\nexport function NotificationsSettings({\n className,\n topics,\n}: {\n className?: string\n topics?: NotificationTopicCatalogItem[]\n}) {\n const [loading, setLoading] = useState(true)\n const [saving, setSaving] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [settings, setSettings] = useState<NotificationSettings>(() =>\n normalizeSettings({ digestFrequency: \"weekly\", topicPreferences: [] }),\n )\n\n const normalizedTopics = useMemo(() => normalizeTopics(topics), [topics])\n\n const loadSettings = async () => {\n setLoading(true)\n setError(null)\n try {\n const res = await fetch(\"/api/rb/notifications/settings\", {\n method: \"GET\",\n credentials: \"include\",\n })\n const json = (await res.json().catch(() => null)) as SettingsResponse | null\n if (!res.ok || !json?.ok) {\n setError(json?.error || \"Unable to load notification settings.\")\n return\n }\n const normalized = normalizeSettings(json.settings)\n setSettings(normalizedTopics.length > 0 ? applyTopicsToSettings(normalized, normalizedTopics) : normalized)\n } catch {\n setError(\"Unable to load notification settings.\")\n } finally {\n setLoading(false)\n }\n }\n\n const saveSettings = async (next: NotificationSettings) => {\n setSaving(true)\n setError(null)\n try {\n const res = await fetch(\"/api/rb/notifications/settings\", {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: JSON.stringify({\n digestFrequency: next.digestFrequency,\n topicPreferences: next.topicPreferences,\n }),\n })\n const json = (await res.json().catch(() => null)) as SettingsResponse | null\n if (!res.ok || !json?.ok) {\n setError(json?.error || \"Unable to save notification settings.\")\n return\n }\n const normalized = normalizeSettings(json.settings)\n setSettings(normalizedTopics.length > 0 ? applyTopicsToSettings(normalized, normalizedTopics) : normalized)\n } catch {\n setError(\"Unable to save notification settings.\")\n } finally {\n setSaving(false)\n }\n }\n\n useEffect(() => {\n void loadSettings()\n }, [])\n\n useEffect(() => {\n if (normalizedTopics.length === 0) return\n setSettings((current) => applyTopicsToSettings(current, normalizedTopics))\n }, [normalizedTopics])\n\n const updatePreference = (topic: string, update: (p: NotificationTopicPreference) => NotificationTopicPreference) => {\n const hasExisting = settings.topicPreferences.some((p) => p.topic === topic)\n const nextPrefs = hasExisting\n ? settings.topicPreferences.map((p) => (p.topic === topic ? update(p) : p))\n : [...settings.topicPreferences, update({ topic, inApp: true, emailDigest: true, push: false })]\n const next = normalizeSettings({ ...settings, topicPreferences: nextPrefs })\n setSettings(next)\n void saveSettings(next)\n }\n\n if (loading) {\n return (\n <div className={cn(\"flex items-center justify-center py-10 text-muted-foreground\", className)}>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n </div>\n )\n }\n\n return (\n <div className={cn(\"space-y-4\", className)}>\n <div className=\"rounded-md border bg-background p-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <div className=\"text-sm font-semibold\">Email digest</div>\n <div className=\"mt-1 text-xs text-muted-foreground\">Choose how often we email you a summary.</div>\n </div>\n <select\n value={settings.digestFrequency}\n onChange={(e) => {\n const value = e.target.value as NotificationDigestFrequency\n const next = normalizeSettings({ ...settings, digestFrequency: value })\n setSettings(next)\n void saveSettings(next)\n }}\n className=\"h-9 rounded-md border bg-background px-2 text-sm\"\n >\n {digestValues.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n </div>\n\n <div className=\"rounded-md border bg-background p-4\">\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <div className=\"text-sm font-semibold\">Topics</div>\n <div className=\"mt-1 text-xs text-muted-foreground\">Choose where you receive each topic.</div>\n </div>\n </div>\n\n {normalizedTopics.length === 0 ? (\n <div className=\"mt-4 text-sm text-muted-foreground\">No topics configured.</div>\n ) : (\n <div className=\"mt-4 overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"text-left text-xs text-muted-foreground\">\n <th className=\"py-2 pr-4 font-medium\">Topic</th>\n <th className=\"py-2 pr-4 font-medium\">In-app</th>\n <th className=\"py-2 pr-4 font-medium\">Email digest</th>\n <th className=\"py-2 pr-4 font-medium\">Push</th>\n </tr>\n </thead>\n <tbody>\n {settings.topicPreferences.map((pref) => {\n const meta = normalizedTopics.find((topic) => topic.topic === pref.topic)\n return (\n <tr key={pref.topic} className=\"border-t align-top\">\n <td className=\"py-3 pr-4\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"font-medium\">{meta?.title || pref.topic}</span>\n {meta?.description ? (\n <span className=\"text-xs text-muted-foreground\">{meta.description}</span>\n ) : null}\n <span className=\"text-[11px] text-muted-foreground\">{pref.topic}</span>\n </div>\n </td>\n <td className=\"py-3 pr-4\">\n <input\n type=\"checkbox\"\n checked={pref.inApp}\n onChange={(e) =>\n updatePreference(pref.topic, (p) => ({ ...p, inApp: e.target.checked }))\n }\n />\n </td>\n <td className=\"py-3 pr-4\">\n <input\n type=\"checkbox\"\n checked={pref.emailDigest}\n onChange={(e) =>\n updatePreference(pref.topic, (p) => ({ ...p, emailDigest: e.target.checked }))\n }\n />\n </td>\n <td className=\"py-3 pr-4\">\n <input\n type=\"checkbox\"\n checked={pref.push}\n disabled\n className=\"opacity-50\"\n aria-label=\"Push notifications (coming soon)\"\n />\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )}\n\n {error ? (\n <div className=\"mt-3 text-sm text-destructive\">{error}</div>\n ) : saving ? (\n <div className=\"mt-3 text-xs text-muted-foreground\">Saving…</div>\n ) : null}\n </div>\n </div>\n )\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/ui",
3
- "version": "0.207.0",
3
+ "version": "0.208.0",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -88,7 +88,7 @@
88
88
  },
89
89
  "peerDependencies": {
90
90
  "libphonenumber-js": "^1.12",
91
- "lucide-react": "^0.562"
91
+ "lucide-react": "*"
92
92
  },
93
93
  "dependencies": {
94
94
  "@dnd-kit/core": "6.3.1",
@@ -1 +0,0 @@
1
- {"version":3,"file":"index234.js","names":["React"],"sources":["../../../node_modules/react-remove-scroll-bar/dist/es2015/component.js"],"sourcesContent":["import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of <Style\n */\n var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n"],"x_google_ignoreList":[0],"mappings":";;;;;;AAIA,IAAI,IAAQ,GAAgB,EACjB,IAAgB,sBAIvB,IAAY,SAAU,GAAI,GAAe,GAAS,GAAW;CAC7D,IAAI,IAAO,EAAG,MAAM,IAAM,EAAG,KAAK,IAAQ,EAAG,OAAO,IAAM,EAAG;AAE7D,QADI,MAAY,KAAK,MAAK,IAAU,WAC7B;KAAe;sBAA0D;oBAA2C,OAAmB;;SAAqC;uBAAoD;;MAAgE;EACnS,KAAiB,sBAA6B;EAC9C,MAAY,YACR;oBAA8B;mBAAuC;qBAAwC;;;oBAAgF,OAAmB;;EACpN,MAAY,aAAa,kBAAyB,OAAmB;EACxE,CACI,OAAO,QAAQ,CACf,KAAK,GAAG;;;KAA2B;aAA8C,OAAmB;;;KAAqC;oBAAqD,OAAmB;;;KAAqC,MAAiC;eAAgD;;;KAAqC,MAAiC;sBAAuD;;;SAAyC;MAAmC,MAAqC;;;GAE1jB,IAAuB,WAAY;CACnC,IAAI,IAAU,SAAS,SAAS,KAAK,aAAA,qBAA2B,IAAI,KAAK,GAAG;AAC5E,QAAO,SAAS,EAAQ,GAAG,IAAU;GAE9B,IAAmB,WAAY;AACtC,GAAM,UAAU,WAAY;AAExB,SADA,SAAS,KAAK,aAAa,IAAgB,GAAsB,GAAG,GAAG,UAAU,CAAC,EAC3E,WAAY;GACf,IAAI,IAAa,GAAsB,GAAG;AAC1C,GAAI,KAAc,IACd,SAAS,KAAK,gBAAgB,EAAc,GAG5C,SAAS,KAAK,aAAa,GAAe,EAAW,UAAU,CAAC;;IAGzE,EAAE,CAAC;GAKC,IAAkB,SAAU,GAAI;CACvC,IAAI,IAAa,EAAG,YAAY,IAAc,EAAG,aAAa,IAAK,EAAG,SAAS,IAAU,MAAO,KAAK,IAAI,WAAW;AACpH,IAAkB;CAMlB,IAAI,IAAMA,EAAM,QAAQ,WAAY;AAAE,SAAO,EAAY,EAAQ;IAAK,CAAC,EAAQ,CAAC;AAChF,QAAOA,EAAM,cAAc,GAAO,EAAE,QAAQ,EAAU,GAAK,CAAC,GAAY,GAAU,IAA6B,KAAf,aAAkB,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index237.js","names":[],"sources":["../../../node_modules/react-remove-scroll/dist/es2015/handleScroll.js"],"sourcesContent":["var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n if (!(node instanceof Element)) {\n return false;\n }\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var ownerDocument = node.ownerDocument;\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n if (scrollHeight > clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n if (!target) {\n break;\n }\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n var parent_1 = target.parentNode;\n // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n // this is the same logic used in focus-lock\n target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n"],"x_google_ignoreList":[0],"mappings":";AAAA,IAAI,IAAuB,SAAU,GAAM;AAEvC,QAAO,EAAK,YAAY;GAExB,IAAuB,SAAU,GAAM,GAAU;AACjD,KAAI,EAAE,aAAgB,SAClB,QAAO;CAEX,IAAI,IAAS,OAAO,iBAAiB,EAAK;AAC1C,QAEA,EAAO,OAAc,YAEjB,EAAE,EAAO,cAAc,EAAO,aAAa,CAAC,EAAqB,EAAK,IAAI,EAAO,OAAc;GAEnG,IAA0B,SAAU,GAAM;AAAE,QAAO,EAAqB,GAAM,YAAY;GAC1F,IAA0B,SAAU,GAAM;AAAE,QAAO,EAAqB,GAAM,YAAY;GACnF,IAA0B,SAAU,GAAM,GAAM;CACvD,IAAI,IAAgB,EAAK,eACrB,IAAU;AACd,IAAG;AAMC,MAJI,OAAO,aAAe,OAAe,aAAmB,eACxD,IAAU,EAAQ,OAEH,EAAuB,GAAM,EAAQ,EACtC;GACd,IAAI,IAAK,EAAmB,GAAM,EAAQ;AAC1C,OAD2D,EAAG,KAAmB,EAAG,GAEhF,QAAO;;AAGf,MAAU,EAAQ;UACb,KAAW,MAAY,EAAc;AAC9C,QAAO;GAEP,IAAsB,SAAU,GAAI;AAEpC,QAAO;EADS,EAAG;EAA0B,EAAG;EAA6B,EAAG;EAK/E;GAED,IAAsB,SAAU,GAAI;AAEpC,QAAO;EADU,EAAG;EAA0B,EAAG;EAA2B,EAAG;EAK9E;GAED,IAAyB,SAAU,GAAM,GAAM;AAC/C,QAAO,MAAS,MAAM,EAAwB,EAAK,GAAG,EAAwB,EAAK;GAEnF,IAAqB,SAAU,GAAM,GAAM;AAC3C,QAAO,MAAS,MAAM,EAAoB,EAAK,GAAG,EAAoB,EAAK;GAE3E,IAAqB,SAAU,GAAM,GAAW;AAMhD,QAAO,MAAS,OAAO,MAAc,QAAQ,KAAK;GAE3C,IAAe,SAAU,GAAM,GAAW,GAAO,GAAa,GAAc;CACnF,IAAI,IAAkB,EAAmB,GAAM,OAAO,iBAAiB,EAAU,CAAC,UAAU,EACxF,IAAQ,IAAkB,GAE1B,IAAS,EAAM,QACf,IAAe,EAAU,SAAS,EAAO,EACzC,IAAqB,IACrB,IAAkB,IAAQ,GAC1B,IAAkB,GAClB,IAAqB;AACzB,IAAG;AACC,MAAI,CAAC,EACD;EAEJ,IAAI,IAAK,EAAmB,GAAM,EAAO,EAAE,IAAW,EAAG,IACrD,IADoE,EAAG,KAAe,EAAG,KACnD,IAAkB;AAC5D,GAAI,KAAY,MACR,EAAuB,GAAM,EAAO,KACpC,KAAmB,GACnB,KAAsB;EAG9B,IAAI,IAAW,EAAO;AAGtB,MAAU,KAAY,EAAS,aAAa,KAAK,yBAAyB,EAAS,OAAO;UAG7F,CAAC,KAAgB,MAAW,SAAS,QAEjC,MAAiB,EAAU,SAAS,EAAO,IAAI,MAAc;AAUlE,SARI,MACE,KAAgB,KAAK,IAAI,EAAgB,GAAG,KAAO,CAAC,KAAgB,IAAQ,MAGzE,CAAC,MACJ,KAAgB,KAAK,IAAI,EAAmB,GAAG,KAAO,CAAC,KAAgB,CAAC,IAAQ,QAHlF,IAAqB,KAMlB"}