From a05d071cf08a3a277daa0dd04fe6f76f67a3ecf2 Mon Sep 17 00:00:00 2001 From: Rob Galanakis Date: Thu, 30 May 2024 14:58:46 -0700 Subject: [PATCH 1/5] Connection cache age validation We aren't validating connections when we take them out of the cache. In some cases, they can be sitting there quite a while, and we see a disconnect error. If an available connection is old, re-validate it. --- lib/webhookdb/connection_cache.rb | 30 +++++++++++++++++++-- spec/webhookdb/connection_cache_spec.rb | 36 +++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/lib/webhookdb/connection_cache.rb b/lib/webhookdb/connection_cache.rb index 08110645..0c7d8f03 100644 --- a/lib/webhookdb/connection_cache.rb +++ b/lib/webhookdb/connection_cache.rb @@ -52,6 +52,9 @@ class ReentranceError < StandardError; end # prune connections with no pending borrows. setting :prune_interval, 120 + # If a connection hasn't been used in this long, validate it before reusing it. + setting :idle_timeout, 20.minutes + # Seconds for the :fast timeout option. setting :timeout_fast, 30 # Seconds for the :slow timeout option. @@ -83,6 +86,25 @@ def initialize(prune_interval:) @last_pruned_at = Time.now end + Available = Struct.new(:connection, :at) do + delegate :disconnect, to: :connection + + # Return +connection+ if it has not been idle long enough, + # or if it has been idle, then validate it (SELECT 1), and return +connection+ + # if it's valid, or +nil+ if the database disconnected it. + def validated_connection + needs_validation_at = self.at + Webhookdb::ConnectionCache.idle_timeout + return self.connection if needs_validation_at > Time.now + begin + self.connection << "SELECT 1" + return self.connection + rescue Sequel::DatabaseDisconnectError + self.connection.disconnect + return nil + end + end + end + # Connect to the database at the given URL. # borrow is not re-entrant, so if the current thread already owns a connection # to the given url, raise a ReentrantError. @@ -111,7 +133,11 @@ def borrow(url, transaction: false, timeout: nil, &block) raise ReentranceError, "ConnectionCache#borrow is not re-entrant for the same database since the connection has stateful config" end - conn = db_loans[:available].pop || take_conn(url, single_threaded: true, extensions: [:pg_json, :pg_streaming]) + if (available = db_loans[:available].pop) + # If the connection doesn't validate, it won't be in :available at this point, so don't worry about it. + conn = available.validated_connection + end + conn ||= take_conn(url, single_threaded: true, extensions: [:pg_json, :pg_streaming]) db_loans[:loaned][t] = conn end conn << "SET statement_timeout TO #{timeout * 1000}" if timeout.present? @@ -126,7 +152,7 @@ def borrow(url, transaction: false, timeout: nil, &block) conn << "SET statement_timeout TO 0" if timeout.present? @mutex.synchronize do @dbs_for_urls[url][:loaned].delete(t) - @dbs_for_urls[url][:available] << conn + @dbs_for_urls[url][:available] << Available.new(conn, Time.now) end end self.prune(url) if now > self.next_prune_at diff --git a/spec/webhookdb/connection_cache_spec.rb b/spec/webhookdb/connection_cache_spec.rb index b5648002..58e511bf 100644 --- a/spec/webhookdb/connection_cache_spec.rb +++ b/spec/webhookdb/connection_cache_spec.rb @@ -133,6 +133,42 @@ def capture_conn(inst, url, **kw) end end + def connpid(c) + return c.select(Sequel.function(:pg_backend_pid)).first[:pg_backend_pid] + end + + it "validates connections idle more than the idle timeout, and does not use ones that fail" do + conn = nil + pid = nil + instance.borrow(db1_url) do |c| + conn = c + pid = connpid(c) + c.execute("SET application_name TO 'validationtest'") + end + instance.borrow(db1_url) do |c| + expect(conn).to be(c) + end + t1 = 2.hours.from_now + t2 = 4.hours.from_now + # This should validate, and reuse the original connection reused because it is still valid. + Timecop.travel(t1) do + instance.borrow(db1_url) do |c| + expect(connpid(c)).to eq(pid) + expect(conn).to be(c) + end + end + # This should validate, and a new conneciton opened because validation failed. + Timecop.travel(t2) do + Sequel.connect(db1_url) do |c| + c << "SELECT pg_terminate_backend(#{pid})" + end + instance.borrow(db1_url) do |c| + expect(connpid(c)).to_not eq(pid) + expect(conn).to_not be(c) + end + end + end + it "prunes available connections once it has been prune_seconds since the last prune" do Timecop.freeze do instance.borrow(db1_url) do |_| From f6474e5c6335943b375c7c054bcaff981fd854d7 Mon Sep 17 00:00:00 2001 From: Rob Galanakis Date: Mon, 3 Jun 2024 10:34:07 -0700 Subject: [PATCH 2/5] wip --- .tool-versions | 1 + Makefile | 2 + admin-dist/favicon.ico | Bin 15086 -> 0 bytes admin/Makefile | 18 +- admin/README.md | 10 +- admin/public/favicon.ico | Bin 15086 -> 0 bytes bin/build-admin | 2 +- bin/build-web | 9 + docker/Dockerfile | 1 + lib/webhookdb/apps.rb | 25 +- web-dist/assets/index-685d67a7.js | 543 ++ web-dist/assets/index-e6c1a3fc.css | 1 + web-dist/assets/loader-ce7ad8bc.svg | 25 + web-dist/index.html | 18 + web-dist/manifest.json | 15 + web/.eslintrc.js | 25 + web/.gitignore | 25 + web/.prettierrc | 10 + web/Makefile | 14 + web/README.md | 41 + web/index.html | 16 + web/package-lock.json | 5463 ++++++++++++++++++ web/package.json | 47 + web/postcss.config.cjs | 14 + web/prettier.config.js | 1 + web/public/manifest.json | 15 + web/src/App.jsx | 286 + web/src/api.jsx | 89 + web/src/assets/images/dropdown.svg | 3 + web/src/assets/images/loader.svg | 25 + web/src/assets/images/webhookdb-logo-512.png | Bin 0 -> 20526 bytes web/src/assets/images/webhookdb-logo.svg | 88 + web/src/components/ButtonLink.jsx | 5 + web/src/components/ErrorScreen.jsx | 38 + web/src/components/Redirect.jsx | 5 + web/src/components/ScreenLoader.css | 34 + web/src/components/ScreenLoader.jsx | 41 + web/src/components/icons.jsx | 1 + web/src/config.js | 41 + web/src/hocs/authRedirects.jsx | 24 + web/src/hocs/withMetatags.jsx | 17 + web/src/hocs/withProps.jsx | 7 + web/src/main.jsx | 14 + web/src/modules/apiBase.js | 95 + web/src/modules/apilogger.js | 83 + web/src/modules/applyHocs.js | 11 + web/src/modules/badContext.js | 9 + web/src/modules/bluejay.js | 52 + web/src/modules/dayConfig.js | 7 + web/src/modules/fp.js | 105 + web/src/modules/localStorageHelper.js | 78 + web/src/modules/logger.js | 76 + web/src/modules/refreshAsync.js | 3 + web/src/modules/renderComponent.jsx | 3 + web/src/modules/sentry.js | 56 + web/src/modules/signOut.js | 10 + web/src/modules/spluralize.js | 12 + web/src/pages/SigninPage.jsx | 84 + web/src/state/GlobalViewStateProvider.jsx | 47 + web/src/state/ScreenLoaderProvider.jsx | 26 + web/src/state/UserProvider.jsx | 76 + web/src/state/useAsyncFetch.jsx | 158 + web/src/state/useError.jsx | 46 + web/src/state/useGlobalViewState.jsx | 19 + web/src/state/useMountEffect.jsx | 11 + web/src/state/useQuery.jsx | 10 + web/src/state/useRoleAccess.jsx | 34 + web/src/state/useScreenLoader.jsx | 23 + web/src/state/useToast.jsx | 36 + web/src/state/useToggle.jsx | 41 + web/src/state/useUser.jsx | 20 + web/src/static/android-chrome-192x192.png | Bin 0 -> 17467 bytes web/src/static/android-chrome-512x512.png | Bin 0 -> 20526 bytes web/src/static/apple-touch-icon.png | Bin 0 -> 16079 bytes web/src/static/favicon-16x16.png | Bin 0 -> 599 bytes web/src/static/favicon-32x32.png | Bin 0 -> 1307 bytes web/src/static/favicon.ico | Bin 0 -> 15406 bytes web/src/static/site.webmanifest | 1 + web/src/theme.jsx | 6 + web/vite.config.js | 16 + 80 files changed, 8289 insertions(+), 24 deletions(-) delete mode 100644 admin-dist/favicon.ico delete mode 100644 admin/public/favicon.ico create mode 100755 bin/build-web create mode 100644 web-dist/assets/index-685d67a7.js create mode 100644 web-dist/assets/index-e6c1a3fc.css create mode 100644 web-dist/assets/loader-ce7ad8bc.svg create mode 100644 web-dist/index.html create mode 100644 web-dist/manifest.json create mode 100644 web/.eslintrc.js create mode 100644 web/.gitignore create mode 100644 web/.prettierrc create mode 100644 web/Makefile create mode 100644 web/README.md create mode 100644 web/index.html create mode 100644 web/package-lock.json create mode 100644 web/package.json create mode 100644 web/postcss.config.cjs create mode 100644 web/prettier.config.js create mode 100644 web/public/manifest.json create mode 100644 web/src/App.jsx create mode 100644 web/src/api.jsx create mode 100644 web/src/assets/images/dropdown.svg create mode 100644 web/src/assets/images/loader.svg create mode 100644 web/src/assets/images/webhookdb-logo-512.png create mode 100644 web/src/assets/images/webhookdb-logo.svg create mode 100644 web/src/components/ButtonLink.jsx create mode 100644 web/src/components/ErrorScreen.jsx create mode 100644 web/src/components/Redirect.jsx create mode 100644 web/src/components/ScreenLoader.css create mode 100644 web/src/components/ScreenLoader.jsx create mode 100644 web/src/components/icons.jsx create mode 100644 web/src/config.js create mode 100644 web/src/hocs/authRedirects.jsx create mode 100644 web/src/hocs/withMetatags.jsx create mode 100644 web/src/hocs/withProps.jsx create mode 100644 web/src/main.jsx create mode 100644 web/src/modules/apiBase.js create mode 100644 web/src/modules/apilogger.js create mode 100644 web/src/modules/applyHocs.js create mode 100644 web/src/modules/badContext.js create mode 100644 web/src/modules/bluejay.js create mode 100644 web/src/modules/dayConfig.js create mode 100644 web/src/modules/fp.js create mode 100644 web/src/modules/localStorageHelper.js create mode 100644 web/src/modules/logger.js create mode 100644 web/src/modules/refreshAsync.js create mode 100644 web/src/modules/renderComponent.jsx create mode 100644 web/src/modules/sentry.js create mode 100644 web/src/modules/signOut.js create mode 100644 web/src/modules/spluralize.js create mode 100644 web/src/pages/SigninPage.jsx create mode 100644 web/src/state/GlobalViewStateProvider.jsx create mode 100644 web/src/state/ScreenLoaderProvider.jsx create mode 100644 web/src/state/UserProvider.jsx create mode 100644 web/src/state/useAsyncFetch.jsx create mode 100644 web/src/state/useError.jsx create mode 100644 web/src/state/useGlobalViewState.jsx create mode 100644 web/src/state/useMountEffect.jsx create mode 100644 web/src/state/useQuery.jsx create mode 100644 web/src/state/useRoleAccess.jsx create mode 100644 web/src/state/useScreenLoader.jsx create mode 100644 web/src/state/useToast.jsx create mode 100644 web/src/state/useToggle.jsx create mode 100644 web/src/state/useUser.jsx create mode 100644 web/src/static/android-chrome-192x192.png create mode 100644 web/src/static/android-chrome-512x512.png create mode 100644 web/src/static/apple-touch-icon.png create mode 100644 web/src/static/favicon-16x16.png create mode 100644 web/src/static/favicon-32x32.png create mode 100644 web/src/static/favicon.ico create mode 100644 web/src/static/site.webmanifest create mode 100644 web/src/theme.jsx create mode 100644 web/vite.config.js diff --git a/.tool-versions b/.tool-versions index 40b87ee4..464312c7 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1,2 @@ ruby 3.2.1 +nodejs 22.2.0 diff --git a/Makefile b/Makefile index d8326f89..b67dc5aa 100644 --- a/Makefile +++ b/Makefile @@ -93,6 +93,8 @@ message-render-html: env-MESSAGE admin-build: bin/build-admin +web-build: + bin/build-web dockerdev-build: @docker build -f docker/dev.Dockerfile -t webhookdb-dev:latest --progress=plain . diff --git a/admin-dist/favicon.ico b/admin-dist/favicon.ico deleted file mode 100644 index f9222554e6c30f98dc616b5b1f8df05f1cbc9350..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 zcmeHO34Bi168|D0_M&#Bv6ZS{OY2#(kwge;i>>x8ym+XksMZ>yG_Q{a&rYbF)FY&J zQM=ef36co4FCmuL!gT(Voa@WCB>5r<>2rU-$^GuV=bV`{XU@!=nTbwkrL)#mtES_- zoo+=%ovx-%r?az5d@i8VMe(}=e8+ch8=dY4Zcv%qa2H)S2E3Q6Lc&e|FA>dPIK*%; ziveg3UN?FFOB|?z}4iED<|1o>Bu45+XLZcRT|O`&-KYUbSn|m=5h}WSiF1sBj?-hvB$*2HvJ6iqXinZKRL4qdhrV zTWK`ld%aw?Ep-r{Mj>_@$E2ezM#Efp@Ot> z$`p#Zaf4pGc%f_%z2x5yV`J&$zP(JhEBW>D7JT7Hj!>Hl<&vy}dHRj@59kjL2oOAv zA3dU;HEWoqAN1AFpO5x$+$inuT)$3UHUFXEw&%G`^y)#+o<7yS?^?H(g67So-xe*R zV>@>e`kXsVHXuC;3u);@910B=ZO zpnQwDd4q{rd#xx#P#E`3EI6y{YKOecqVS(gyouU+@O{Prtr2s$E;L7qA(C z5o~An1O=r#{ow1jEt-+%hh>C!;2*%#t_=Bf>Zs|A#XnABxp`%?6#dYjZOWIUL%aqr zUc?K1_ygUq0P~7xz%#D&@aA zsw7S5(T!I5`-_|h^IlP~V)A4P80SM#r%t6i{W4%G{$QOp@%h@E3}FtCcdQZYqdwpr z)@keVWrFF_xwF)^V)-O{DXsSF`Ln0AdfHT)K6Hrq1@H|N%=&IPZCEg$u3x+;cwfGJ zNlW~GOyc_}IZEk{`6>F(9z7!d6yB+RX{8_b*VO)1x&yrHThCc!7Lz!C;siBkS<%O> zXh`nvoZUuZIT+(~=t0e=Q+-~C{^a~0j1PZ##gxfFO%LwfqdrcKM*fnTFXRMs(}16$ zJ3Z|_)a=B8O&h5m>|CM`f_sM2&-mdxVjp9_!^eSs75q%ATi)E{#r}BbPph(AR}kKM z6e_@eX#uv+ABcarcFt^yfBsx}5a2uBX#Fyp{_k6PYCh(qUS8VX1HW6BFDw4#9oAQf zS6*a)0{RO8p98+1@~g3TyRk2nu-DT^{!^46rg6Au3yprifA-e!Lr$R7c3eO=#`zVmEJST6;G8aAK~RVuTunqT&kA?+DWKV*G@kB`VM&R_%F>nEWf_#sDX z52L+4sQ1a~Ec5bj`uqsnhzt6&JNrMJ8cBjv;fLaw`p#1NSF%0Ax%$@CD|GwnRkHx!0r3LZ zuP&c`YNR*PO0Qu*OXx@6R%{Qu*Z7>ee^EUd_?%_Gio}N;S;v@+Tk%+iw4~+PQu?6_ zlwL^bo}AuD3$3R5SW3UCG2Z06zc2m9`u|Px*&Ob_FaOzoW#Rm3R?lB&_4)yQ`=5n= zqkbbx*U#wJ0=@g4`5ZuO&RE{5>?F)?&x#|{eJ zvV~*W84riIZ>QKhw;8p}IsC-#-E#g#P7$$`j0E6lT%<6828I9F?>iG>vwVhxubI){ znkTpL*$6-5Hs@cY*L%zj{KY!I!=E63+WPD9KczE=k`cpok@tymq^1py{j?GGy;M{C!YRQ0mA7@8`y#`MQc{GqUR`P+Eq|n26{Ki<_xwhvq$KR2o zQ{PjIA9?_BUC5FGJo|R*CVPD*=l6gE_)%8?9Vc-vv}gQyH)TM7Su@qvlKGp`Kfs4t zBE)T>hcF)GeP9E3Ui=eV`vKgNc#$S$_|^Ort+*?^>Ygh6Ja1gL zu3Vw>$B$D4=UkC@jXZUd?%ld2a}V9J*(e9Ba3pt62|su>tXWe+4cP9Wb+l*wdWN7x zST8wf)WV_e$JG3i!;Nn#;YS;+W4)ZV#=!f_iSx)xj#I*A>U(PNOFyigDPa0cjhotc zsmA}Bc+An0EPh^le9vewJb%3D^Vb_bf4^(vvUrw;6oX;Q4Hrh8Je zN1&&0)(5@lj~qMR>F2>Pj(Wx&_5>j9_zpT%fBZ&W+K?uV#h$_^K|K_Fa>W0U+nmN{ z57e!}A87Yc1!}}|Q2kM-J+Ps>)WX6y0UkeZZ}B5ASLl1x31B?bGmPV$FzQGQ`)}bo zPkU=?a<;XVnyf({4cQhI7aP&GLV59fR?e0CzV!eJGUvJ8Y<&6Om6xZ3FbR{`zBWAR9^6A7|^5#o7PtD(j@y3O)+j8tQ!G f{zYZYai-D-WlzywAN1w-b@$Kf?q5TFVCnN;r_I_P diff --git a/admin/Makefile b/admin/Makefile index ada67acb..97b5212b 100644 --- a/admin/Makefile +++ b/admin/Makefile @@ -1,3 +1,10 @@ +install: + npm install + +start: + npm run dev +test: + npm test fmt: npm run fmt-fix @@ -5,14 +12,3 @@ fmt: check: npm run fmt-check npm run lint-check -test: - npm test - -start: - npm run dev - -env-%: - @if [ -z '${${*}}' ]; then echo 'ERROR: variable $* not set' && exit 1; fi -cmd-exists-%: - @hash $(*) > /dev/null 2>&1 || \ - (echo "ERROR: '$(*)' must be installed and available on your PATH."; exit 1) diff --git a/admin/README.md b/admin/README.md index dc4b963e..576a8176 100644 --- a/admin/README.md +++ b/admin/README.md @@ -5,7 +5,7 @@ Install the application dependencies by running: ```sh -npm install +make install ``` ## Development @@ -13,7 +13,7 @@ npm install Start the application in development mode by running: ```sh -npm run dev +make start ``` ## Production @@ -24,6 +24,12 @@ Build the application in production mode by running: npm run build ``` +Or, from the root `webhookdb/Makefile`: + +```sh +make admin-build +``` + ## Hosting For now, the admin app is built manually and checked in. diff --git a/admin/public/favicon.ico b/admin/public/favicon.ico deleted file mode 100644 index f9222554e6c30f98dc616b5b1f8df05f1cbc9350..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 zcmeHO34Bi168|D0_M&#Bv6ZS{OY2#(kwge;i>>x8ym+XksMZ>yG_Q{a&rYbF)FY&J zQM=ef36co4FCmuL!gT(Voa@WCB>5r<>2rU-$^GuV=bV`{XU@!=nTbwkrL)#mtES_- zoo+=%ovx-%r?az5d@i8VMe(}=e8+ch8=dY4Zcv%qa2H)S2E3Q6Lc&e|FA>dPIK*%; ziveg3UN?FFOB|?z}4iED<|1o>Bu45+XLZcRT|O`&-KYUbSn|m=5h}WSiF1sBj?-hvB$*2HvJ6iqXinZKRL4qdhrV zTWK`ld%aw?Ep-r{Mj>_@$E2ezM#Efp@Ot> z$`p#Zaf4pGc%f_%z2x5yV`J&$zP(JhEBW>D7JT7Hj!>Hl<&vy}dHRj@59kjL2oOAv zA3dU;HEWoqAN1AFpO5x$+$inuT)$3UHUFXEw&%G`^y)#+o<7yS?^?H(g67So-xe*R zV>@>e`kXsVHXuC;3u);@910B=ZO zpnQwDd4q{rd#xx#P#E`3EI6y{YKOecqVS(gyouU+@O{Prtr2s$E;L7qA(C z5o~An1O=r#{ow1jEt-+%hh>C!;2*%#t_=Bf>Zs|A#XnABxp`%?6#dYjZOWIUL%aqr zUc?K1_ygUq0P~7xz%#D&@aA zsw7S5(T!I5`-_|h^IlP~V)A4P80SM#r%t6i{W4%G{$QOp@%h@E3}FtCcdQZYqdwpr z)@keVWrFF_xwF)^V)-O{DXsSF`Ln0AdfHT)K6Hrq1@H|N%=&IPZCEg$u3x+;cwfGJ zNlW~GOyc_}IZEk{`6>F(9z7!d6yB+RX{8_b*VO)1x&yrHThCc!7Lz!C;siBkS<%O> zXh`nvoZUuZIT+(~=t0e=Q+-~C{^a~0j1PZ##gxfFO%LwfqdrcKM*fnTFXRMs(}16$ zJ3Z|_)a=B8O&h5m>|CM`f_sM2&-mdxVjp9_!^eSs75q%ATi)E{#r}BbPph(AR}kKM z6e_@eX#uv+ABcarcFt^yfBsx}5a2uBX#Fyp{_k6PYCh(qUS8VX1HW6BFDw4#9oAQf zS6*a)0{RO8p98+1@~g3TyRk2nu-DT^{!^46rg6Au3yprifA-e!Lr$R7c3eO=#`zVmEJST6;G8aAK~RVuTunqT&kA?+DWKV*G@kB`VM&R_%F>nEWf_#sDX z52L+4sQ1a~Ec5bj`uqsnhzt6&JNrMJ8cBjv;fLaw`p#1NSF%0Ax%$@CD|GwnRkHx!0r3LZ zuP&c`YNR*PO0Qu*OXx@6R%{Qu*Z7>ee^EUd_?%_Gio}N;S;v@+Tk%+iw4~+PQu?6_ zlwL^bo}AuD3$3R5SW3UCG2Z06zc2m9`u|Px*&Ob_FaOzoW#Rm3R?lB&_4)yQ`=5n= zqkbbx*U#wJ0=@g4`5ZuO&RE{5>?F)?&x#|{eJ zvV~*W84riIZ>QKhw;8p}IsC-#-E#g#P7$$`j0E6lT%<6828I9F?>iG>vwVhxubI){ znkTpL*$6-5Hs@cY*L%zj{KY!I!=E63+WPD9KczE=k`cpok@tymq^1py{j?GGy;M{C!YRQ0mA7@8`y#`MQc{GqUR`P+Eq|n26{Ki<_xwhvq$KR2o zQ{PjIA9?_BUC5FGJo|R*CVPD*=l6gE_)%8?9Vc-vv}gQyH)TM7Su@qvlKGp`Kfs4t zBE)T>hcF)GeP9E3Ui=eV`vKgNc#$S$_|^Ort+*?^>Ygh6Ja1gL zu3Vw>$B$D4=UkC@jXZUd?%ld2a}V9J*(e9Ba3pt62|su>tXWe+4cP9Wb+l*wdWN7x zST8wf)WV_e$JG3i!;Nn#;YS;+W4)ZV#=!f_iSx)xj#I*A>U(PNOFyigDPa0cjhotc zsmA}Bc+An0EPh^le9vewJb%3D^Vb_bf4^(vvUrw;6oX;Q4Hrh8Je zN1&&0)(5@lj~qMR>F2>Pj(Wx&_5>j9_zpT%fBZ&W+K?uV#h$_^K|K_Fa>W0U+nmN{ z57e!}A87Yc1!}}|Q2kM-J+Ps>)WX6y0UkeZZ}B5ASLl1x31B?bGmPV$FzQGQ`)}bo zPkU=?a<;XVnyf({4cQhI7aP&GLV59fR?e0CzV!eJGUvJ8Y<&6Om6xZ3FbR{`zBWAR9^6A7|^5#o7PtD(j@y3O)+j8tQ!G f{zYZYai-D-WlzywAN1w-b@$Kf?q5TFVCnN;r_I_P diff --git a/bin/build-admin b/bin/build-admin index 5bf3cdf3..fe0eaf9b 100755 --- a/bin/build-admin +++ b/bin/build-admin @@ -5,5 +5,5 @@ cd admin npm install --production=false export NODE_ENV=production npm run build -rm -r ../admin-dist +rm -f -r ../admin-dist mv dist/ ../admin-dist diff --git a/bin/build-web b/bin/build-web new file mode 100755 index 00000000..057b8826 --- /dev/null +++ b/bin/build-web @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +set -e + +cd web +npm install --production=false +export NODE_ENV=production +npm run build +rm -f -r ../web-dist +mv dist/ ../web-dist diff --git a/docker/Dockerfile b/docker/Dockerfile index 8cd6e8a1..e5107435 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -9,6 +9,7 @@ COPY webhookdb.gemspec . COPY lib/webhookdb/version.rb lib/webhookdb/version.rb RUN bundle install --deployment COPY ./admin-dist admin-dist +COPY ./web-dist web-dist COPY ./config config COPY ./data data COPY ./db db diff --git a/lib/webhookdb/apps.rb b/lib/webhookdb/apps.rb index e145ce51..1cedee91 100644 --- a/lib/webhookdb/apps.rb +++ b/lib/webhookdb/apps.rb @@ -100,18 +100,23 @@ class AdminAPI < Webhookdb::Service add_swagger_documentation if ENV["RACK_ENV"] == "development" end - Admin = Rack::Builder.new do - build_dir = Pathname(__FILE__).dirname.parent.parent + "admin-dist" - dw = Rack::DynamicConfigWriter.new(build_dir + "index.html", global_assign: "window.whdbDynamicEnv") - env = { - "VITE_API_ROOT" => "/", - "VITE_RELEASE" => "admin@1.0.0", - "NODE_ENV" => "production", - }.merge(Rack::DynamicConfigWriter.pick_env("VITE_")) - index_bytes = dw.as_string(env) - Rack::SpaApp.run_spa_app(self, build_dir, enforce_ssl: Webhookdb::Service.enforce_ssl, index_bytes:) + def self.build_static_app(name) + Rack::Builder.new do + build_dir = Pathname(__FILE__).dirname.parent.parent + "#{name}-dist" + dw = Rack::DynamicConfigWriter.new(build_dir + "index.html", global_assign: "window.whdbDynamicEnv") + env = { + "VITE_API_ROOT" => "/", + "VITE_RELEASE_COMMIT" => Webhookdb::COMMIT, + "NODE_ENV" => "production", + }.merge(Rack::DynamicConfigWriter.pick_env("VITE_")) + index_bytes = dw.as_string(env) + Rack::SpaApp.run_spa_app(self, build_dir, enforce_ssl: Webhookdb::Service.enforce_ssl, index_bytes:) + end end + Admin = build_static_app("admin") + Web = build_static_app("web") + SidekiqWeb = Rack::Builder.new do use Sentry::Rack::CaptureExceptions if Webhookdb::Sentry.enabled? use Rack::Auth::Basic, "Protected Area" do |username, password| diff --git a/web-dist/assets/index-685d67a7.js b/web-dist/assets/index-685d67a7.js new file mode 100644 index 00000000..a9dc87e2 --- /dev/null +++ b/web-dist/assets/index-685d67a7.js @@ -0,0 +1,543 @@ +var Qx=Object.defineProperty;var Zx=(e,t,n)=>t in e?Qx(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Fn=(e,t,n)=>(Zx(e,typeof t!="symbol"?t+"":t,n),n);function eI(e,t){for(var n=0;nr[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const s of i.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(o){if(o.ep)return;o.ep=!0;const i=n(o);fetch(o.href,i)}})();var Er=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Lt(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var b1={exports:{}},Ic={},T1={exports:{}},oe={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var La=Symbol.for("react.element"),tI=Symbol.for("react.portal"),nI=Symbol.for("react.fragment"),rI=Symbol.for("react.strict_mode"),oI=Symbol.for("react.profiler"),iI=Symbol.for("react.provider"),sI=Symbol.for("react.context"),aI=Symbol.for("react.forward_ref"),lI=Symbol.for("react.suspense"),uI=Symbol.for("react.memo"),cI=Symbol.for("react.lazy"),My=Symbol.iterator;function fI(e){return e===null||typeof e!="object"?null:(e=My&&e[My]||e["@@iterator"],typeof e=="function"?e:null)}var C1={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},k1=Object.assign,x1={};function qi(e,t,n){this.props=e,this.context=t,this.refs=x1,this.updater=n||C1}qi.prototype.isReactComponent={};qi.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};qi.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function I1(){}I1.prototype=qi.prototype;function Xh(e,t,n){this.props=e,this.context=t,this.refs=x1,this.updater=n||C1}var Jh=Xh.prototype=new I1;Jh.constructor=Xh;k1(Jh,qi.prototype);Jh.isPureReactComponent=!0;var Ny=Array.isArray,R1=Object.prototype.hasOwnProperty,Qh={current:null},$1={key:!0,ref:!0,__self:!0,__source:!0};function O1(e,t,n){var r,o={},i=null,s=null;if(t!=null)for(r in t.ref!==void 0&&(s=t.ref),t.key!==void 0&&(i=""+t.key),t)R1.call(t,r)&&!$1.hasOwnProperty(r)&&(o[r]=t[r]);var a=arguments.length-2;if(a===1)o.children=n;else if(1>>1,G=T[H];if(0>>1;Ho(Me,$))Heo(tt,Me)?(T[H]=tt,T[He]=$,H=He):(T[H]=Me,T[ce]=$,H=ce);else if(Heo(tt,$))T[H]=tt,T[He]=$,H=He;else break e}}return O}function o(T,O){var $=T.sortIndex-O.sortIndex;return $!==0?$:T.id-O.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var s=Date,a=s.now();e.unstable_now=function(){return s.now()-a}}var l=[],u=[],f=1,c=null,d=3,h=!1,m=!1,_=!1,v=typeof setTimeout=="function"?setTimeout:null,g=typeof clearTimeout=="function"?clearTimeout:null,p=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function y(T){for(var O=n(u);O!==null;){if(O.callback===null)r(u);else if(O.startTime<=T)r(u),O.sortIndex=O.expirationTime,t(l,O);else break;O=n(u)}}function S(T){if(_=!1,y(T),!m)if(n(l)!==null)m=!0,R(b);else{var O=n(u);O!==null&&L(S,O.startTime-T)}}function b(T,O){m=!1,_&&(_=!1,g(x),x=-1),h=!0;var $=d;try{for(y(O),c=n(l);c!==null&&(!(c.expirationTime>O)||T&&!A());){var H=c.callback;if(typeof H=="function"){c.callback=null,d=c.priorityLevel;var G=H(c.expirationTime<=O);O=e.unstable_now(),typeof G=="function"?c.callback=G:c===n(l)&&r(l),y(O)}else r(l);c=n(l)}if(c!==null)var ue=!0;else{var ce=n(u);ce!==null&&L(S,ce.startTime-O),ue=!1}return ue}finally{c=null,d=$,h=!1}}var E=!1,w=null,x=-1,D=5,I=-1;function A(){return!(e.unstable_now()-IT||125H?(T.sortIndex=$,t(u,T),n(l)===null&&T===n(u)&&(_?(g(x),x=-1):_=!0,L(S,$-H))):(T.sortIndex=G,t(l,T),m||h||(m=!0,R(b))),T},e.unstable_shouldYield=A,e.unstable_wrapCallback=function(T){var O=d;return function(){var $=d;d=O;try{return T.apply(this,arguments)}finally{d=$}}}})(L1);P1.exports=L1;var bI=P1.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var TI=P,Wt=bI;function M(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Xd=Object.prototype.hasOwnProperty,CI=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Ly={},Dy={};function kI(e){return Xd.call(Dy,e)?!0:Xd.call(Ly,e)?!1:CI.test(e)?Dy[e]=!0:(Ly[e]=!0,!1)}function xI(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function II(e,t,n,r){if(t===null||typeof t>"u"||xI(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function It(e,t,n,r,o,i,s){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=s}var mt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){mt[e]=new It(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];mt[t]=new It(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){mt[e]=new It(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){mt[e]=new It(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){mt[e]=new It(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){mt[e]=new It(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){mt[e]=new It(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){mt[e]=new It(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){mt[e]=new It(e,5,!1,e.toLowerCase(),null,!1,!1)});var em=/[\-:]([a-z])/g;function tm(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(em,tm);mt[t]=new It(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(em,tm);mt[t]=new It(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(em,tm);mt[t]=new It(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){mt[e]=new It(e,1,!1,e.toLowerCase(),null,!1,!1)});mt.xlinkHref=new It("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){mt[e]=new It(e,1,!1,e.toLowerCase(),null,!0,!0)});function nm(e,t,n,r){var o=mt.hasOwnProperty(t)?mt[t]:null;(o!==null?o.type!==0:r||!(2a||o[s]!==i[a]){var l=` +`+o[s].replace(" at new "," at ");return e.displayName&&l.includes("")&&(l=l.replace("",e.displayName)),l}while(1<=s&&0<=a);break}}}finally{zf=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Ds(e):""}function RI(e){switch(e.tag){case 5:return Ds(e.type);case 16:return Ds("Lazy");case 13:return Ds("Suspense");case 19:return Ds("SuspenseList");case 0:case 2:case 15:return e=Hf(e.type,!1),e;case 11:return e=Hf(e.type.render,!1),e;case 1:return e=Hf(e.type,!0),e;default:return""}}function ep(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Qo:return"Fragment";case Jo:return"Portal";case Jd:return"Profiler";case rm:return"StrictMode";case Qd:return"Suspense";case Zd:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case U1:return(e.displayName||"Context")+".Consumer";case F1:return(e._context.displayName||"Context")+".Provider";case om:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case im:return t=e.displayName||null,t!==null?t:ep(e.type)||"Memo";case pr:t=e._payload,e=e._init;try{return ep(e(t))}catch{}}return null}function $I(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return ep(t);case 8:return t===rm?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Ur(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function B1(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function OI(e){var t=B1(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(s){r=""+s,i.call(this,s)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(s){r=""+s},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function ll(e){e._valueTracker||(e._valueTracker=OI(e))}function z1(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=B1(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function wu(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function tp(e,t){var n=t.checked;return De({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Uy(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Ur(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function H1(e,t){t=t.checked,t!=null&&nm(e,"checked",t,!1)}function np(e,t){H1(e,t);var n=Ur(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?rp(e,t.type,n):t.hasOwnProperty("defaultValue")&&rp(e,t.type,Ur(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function jy(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function rp(e,t,n){(t!=="number"||wu(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Fs=Array.isArray;function gi(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o"+t.valueOf().toString()+"",t=ul.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function ia(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Hs={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},AI=["Webkit","ms","Moz","O"];Object.keys(Hs).forEach(function(e){AI.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Hs[t]=Hs[e]})});function q1(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Hs.hasOwnProperty(e)&&Hs[e]?(""+t).trim():t+"px"}function K1(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,o=q1(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}var MI=De({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function sp(e,t){if(t){if(MI[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(M(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(M(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(M(61))}if(t.style!=null&&typeof t.style!="object")throw Error(M(62))}}function ap(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var lp=null;function sm(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var up=null,yi=null,_i=null;function Hy(e){if(e=Ua(e)){if(typeof up!="function")throw Error(M(280));var t=e.stateNode;t&&(t=Mc(t),up(e.stateNode,e.type,t))}}function Y1(e){yi?_i?_i.push(e):_i=[e]:yi=e}function X1(){if(yi){var e=yi,t=_i;if(_i=yi=null,Hy(e),t)for(e=0;e>>=0,e===0?32:31-(WI(e)/VI|0)|0}var cl=64,fl=4194304;function Us(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function ku(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,o=e.suspendedLanes,i=e.pingedLanes,s=n&268435455;if(s!==0){var a=s&~o;a!==0?r=Us(a):(i&=s,i!==0&&(r=Us(i)))}else s=n&~o,s!==0?r=Us(s):i!==0&&(r=Us(i));if(r===0)return 0;if(t!==0&&t!==r&&!(t&o)&&(o=r&-r,i=t&-t,o>=i||o===16&&(i&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function Da(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-hn(t),e[t]=n}function YI(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Vs),Qy=String.fromCharCode(32),Zy=!1;function gE(e,t){switch(e){case"keyup":return bR.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function yE(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Zo=!1;function CR(e,t){switch(e){case"compositionend":return yE(t);case"keypress":return t.which!==32?null:(Zy=!0,Qy);case"textInput":return e=t.data,e===Qy&&Zy?null:e;default:return null}}function kR(e,t){if(Zo)return e==="compositionend"||!hm&&gE(e,t)?(e=hE(),Gl=fm=wr=null,Zo=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=r_(n)}}function EE(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?EE(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function wE(){for(var e=window,t=wu();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=wu(e.document)}return t}function mm(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function PR(e){var t=wE(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&EE(n.ownerDocument.documentElement,n)){if(r!==null&&mm(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var o=n.textContent.length,i=Math.min(r.start,o);r=r.end===void 0?i:Math.min(r.end,o),!e.extend&&i>r&&(o=r,r=i,i=o),o=o_(n,i);var s=o_(n,r);o&&s&&(e.rangeCount!==1||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==s.node||e.focusOffset!==s.offset)&&(t=t.createRange(),t.setStart(o.node,o.offset),e.removeAllRanges(),i>r?(e.addRange(t),e.extend(s.node,s.offset)):(t.setEnd(s.node,s.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,ei=null,mp=null,qs=null,gp=!1;function i_(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;gp||ei==null||ei!==wu(r)||(r=ei,"selectionStart"in r&&mm(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),qs&&fa(qs,r)||(qs=r,r=Ru(mp,"onSelect"),0ri||(e.current=wp[ri],wp[ri]=null,ri--)}function Te(e,t){ri++,wp[ri]=e.current,e.current=t}var jr={},St=Vr(jr),At=Vr(!1),So=jr;function Ri(e,t){var n=e.type.contextTypes;if(!n)return jr;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in n)o[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function Mt(e){return e=e.childContextTypes,e!=null}function Ou(){Ie(At),Ie(St)}function d_(e,t,n){if(St.current!==jr)throw Error(M(168));Te(St,t),Te(At,n)}function OE(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var o in r)if(!(o in t))throw Error(M(108,$I(e)||"Unknown",o));return De({},n,r)}function Au(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||jr,So=St.current,Te(St,e),Te(At,At.current),!0}function p_(e,t,n){var r=e.stateNode;if(!r)throw Error(M(169));n?(e=OE(e,t,So),r.__reactInternalMemoizedMergedChildContext=e,Ie(At),Ie(St),Te(St,e)):Ie(At),Te(At,n)}var Vn=null,Nc=!1,rd=!1;function AE(e){Vn===null?Vn=[e]:Vn.push(e)}function qR(e){Nc=!0,AE(e)}function Gr(){if(!rd&&Vn!==null){rd=!0;var e=0,t=me;try{var n=Vn;for(me=1;e>=s,o-=s,qn=1<<32-hn(t)+o|n<x?(D=w,w=null):D=w.sibling;var I=d(g,w,y[x],S);if(I===null){w===null&&(w=D);break}e&&w&&I.alternate===null&&t(g,w),p=i(I,p,x),E===null?b=I:E.sibling=I,E=I,w=D}if(x===y.length)return n(g,w),Ae&&Qr(g,x),b;if(w===null){for(;xx?(D=w,w=null):D=w.sibling;var A=d(g,w,I.value,S);if(A===null){w===null&&(w=D);break}e&&w&&A.alternate===null&&t(g,w),p=i(A,p,x),E===null?b=A:E.sibling=A,E=A,w=D}if(I.done)return n(g,w),Ae&&Qr(g,x),b;if(w===null){for(;!I.done;x++,I=y.next())I=c(g,I.value,S),I!==null&&(p=i(I,p,x),E===null?b=I:E.sibling=I,E=I);return Ae&&Qr(g,x),b}for(w=r(g,w);!I.done;x++,I=y.next())I=h(w,g,x,I.value,S),I!==null&&(e&&I.alternate!==null&&w.delete(I.key===null?x:I.key),p=i(I,p,x),E===null?b=I:E.sibling=I,E=I);return e&&w.forEach(function(W){return t(g,W)}),Ae&&Qr(g,x),b}function v(g,p,y,S){if(typeof y=="object"&&y!==null&&y.type===Qo&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case al:e:{for(var b=y.key,E=p;E!==null;){if(E.key===b){if(b=y.type,b===Qo){if(E.tag===7){n(g,E.sibling),p=o(E,y.props.children),p.return=g,g=p;break e}}else if(E.elementType===b||typeof b=="object"&&b!==null&&b.$$typeof===pr&&g_(b)===E.type){n(g,E.sibling),p=o(E,y.props),p.ref=ks(g,E,y),p.return=g,g=p;break e}n(g,E);break}else t(g,E);E=E.sibling}y.type===Qo?(p=uo(y.props.children,g.mode,S,y.key),p.return=g,g=p):(S=eu(y.type,y.key,y.props,null,g.mode,S),S.ref=ks(g,p,y),S.return=g,g=S)}return s(g);case Jo:e:{for(E=y.key;p!==null;){if(p.key===E)if(p.tag===4&&p.stateNode.containerInfo===y.containerInfo&&p.stateNode.implementation===y.implementation){n(g,p.sibling),p=o(p,y.children||[]),p.return=g,g=p;break e}else{n(g,p);break}else t(g,p);p=p.sibling}p=fd(y,g.mode,S),p.return=g,g=p}return s(g);case pr:return E=y._init,v(g,p,E(y._payload),S)}if(Fs(y))return m(g,p,y,S);if(Es(y))return _(g,p,y,S);_l(g,y)}return typeof y=="string"&&y!==""||typeof y=="number"?(y=""+y,p!==null&&p.tag===6?(n(g,p.sibling),p=o(p,y),p.return=g,g=p):(n(g,p),p=cd(y,g.mode,S),p.return=g,g=p),s(g)):n(g,p)}return v}var Oi=LE(!0),DE=LE(!1),Pu=Vr(null),Lu=null,si=null,vm=null;function Sm(){vm=si=Lu=null}function Em(e){var t=Pu.current;Ie(Pu),e._currentValue=t}function Cp(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Si(e,t){Lu=e,vm=si=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Ot=!0),e.firstContext=null)}function nn(e){var t=e._currentValue;if(vm!==e)if(e={context:e,memoizedValue:t,next:null},si===null){if(Lu===null)throw Error(M(308));si=e,Lu.dependencies={lanes:0,firstContext:e}}else si=si.next=e;return t}var oo=null;function wm(e){oo===null?oo=[e]:oo.push(e)}function FE(e,t,n,r){var o=t.interleaved;return o===null?(n.next=n,wm(t)):(n.next=o.next,o.next=n),t.interleaved=n,er(e,r)}function er(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var hr=!1;function bm(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function UE(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Yn(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Or(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,ae&2){var o=r.pending;return o===null?t.next=t:(t.next=o.next,o.next=t),r.pending=t,er(e,n)}return o=r.interleaved,o===null?(t.next=t,wm(r)):(t.next=o.next,o.next=t),r.interleaved=t,er(e,n)}function Kl(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,lm(e,n)}}function y_(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var o=null,i=null;if(n=n.firstBaseUpdate,n!==null){do{var s={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};i===null?o=i=s:i=i.next=s,n=n.next}while(n!==null);i===null?o=i=t:i=i.next=t}else o=i=t;n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:i,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Du(e,t,n,r){var o=e.updateQueue;hr=!1;var i=o.firstBaseUpdate,s=o.lastBaseUpdate,a=o.shared.pending;if(a!==null){o.shared.pending=null;var l=a,u=l.next;l.next=null,s===null?i=u:s.next=u,s=l;var f=e.alternate;f!==null&&(f=f.updateQueue,a=f.lastBaseUpdate,a!==s&&(a===null?f.firstBaseUpdate=u:a.next=u,f.lastBaseUpdate=l))}if(i!==null){var c=o.baseState;s=0,f=u=l=null,a=i;do{var d=a.lane,h=a.eventTime;if((r&d)===d){f!==null&&(f=f.next={eventTime:h,lane:0,tag:a.tag,payload:a.payload,callback:a.callback,next:null});e:{var m=e,_=a;switch(d=t,h=n,_.tag){case 1:if(m=_.payload,typeof m=="function"){c=m.call(h,c,d);break e}c=m;break e;case 3:m.flags=m.flags&-65537|128;case 0:if(m=_.payload,d=typeof m=="function"?m.call(h,c,d):m,d==null)break e;c=De({},c,d);break e;case 2:hr=!0}}a.callback!==null&&a.lane!==0&&(e.flags|=64,d=o.effects,d===null?o.effects=[a]:d.push(a))}else h={eventTime:h,lane:d,tag:a.tag,payload:a.payload,callback:a.callback,next:null},f===null?(u=f=h,l=c):f=f.next=h,s|=d;if(a=a.next,a===null){if(a=o.shared.pending,a===null)break;d=a,a=d.next,d.next=null,o.lastBaseUpdate=d,o.shared.pending=null}}while(1);if(f===null&&(l=c),o.baseState=l,o.firstBaseUpdate=u,o.lastBaseUpdate=f,t=o.shared.interleaved,t!==null){o=t;do s|=o.lane,o=o.next;while(o!==t)}else i===null&&(o.shared.lanes=0);bo|=s,e.lanes=s,e.memoizedState=c}}function __(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=id.transition;id.transition={};try{e(!1),t()}finally{me=n,id.transition=r}}function nw(){return rn().memoizedState}function JR(e,t,n){var r=Mr(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},rw(e))ow(t,n);else if(n=FE(e,t,n,r),n!==null){var o=Ct();mn(n,e,r,o),iw(n,t,r)}}function QR(e,t,n){var r=Mr(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(rw(e))ow(t,o);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var s=t.lastRenderedState,a=i(s,n);if(o.hasEagerState=!0,o.eagerState=a,vn(a,s)){var l=t.interleaved;l===null?(o.next=o,wm(t)):(o.next=l.next,l.next=o),t.interleaved=o;return}}catch{}finally{}n=FE(e,t,o,r),n!==null&&(o=Ct(),mn(n,e,r,o),iw(n,t,r))}}function rw(e){var t=e.alternate;return e===Le||t!==null&&t===Le}function ow(e,t){Ks=Uu=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function iw(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,lm(e,n)}}var ju={readContext:nn,useCallback:yt,useContext:yt,useEffect:yt,useImperativeHandle:yt,useInsertionEffect:yt,useLayoutEffect:yt,useMemo:yt,useReducer:yt,useRef:yt,useState:yt,useDebugValue:yt,useDeferredValue:yt,useTransition:yt,useMutableSource:yt,useSyncExternalStore:yt,useId:yt,unstable_isNewReconciler:!1},ZR={readContext:nn,useCallback:function(e,t){return xn().memoizedState=[e,t===void 0?null:t],e},useContext:nn,useEffect:S_,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Xl(4194308,4,JE.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Xl(4194308,4,e,t)},useInsertionEffect:function(e,t){return Xl(4,2,e,t)},useMemo:function(e,t){var n=xn();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=xn();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=JR.bind(null,Le,e),[r.memoizedState,e]},useRef:function(e){var t=xn();return e={current:e},t.memoizedState=e},useState:v_,useDebugValue:Om,useDeferredValue:function(e){return xn().memoizedState=e},useTransition:function(){var e=v_(!1),t=e[0];return e=XR.bind(null,e[1]),xn().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Le,o=xn();if(Ae){if(n===void 0)throw Error(M(407));n=n()}else{if(n=t(),ft===null)throw Error(M(349));wo&30||HE(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,S_(VE.bind(null,r,i,e),[e]),r.flags|=2048,va(9,WE.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=xn(),t=ft.identifierPrefix;if(Ae){var n=Kn,r=qn;n=(r&~(1<<32-hn(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=ya++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=s.createElement(n,{is:r.is}):(e=s.createElement(n),n==="select"&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,n),e[$n]=t,e[ha]=r,mw(e,t,!1,!1),t.stateNode=e;e:{switch(s=ap(n,r),n){case"dialog":ke("cancel",e),ke("close",e),o=r;break;case"iframe":case"object":case"embed":ke("load",e),o=r;break;case"video":case"audio":for(o=0;oNi&&(t.flags|=128,r=!0,xs(i,!1),t.lanes=4194304)}else{if(!r)if(e=Fu(s),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),xs(i,!0),i.tail===null&&i.tailMode==="hidden"&&!s.alternate&&!Ae)return _t(t),null}else 2*Ve()-i.renderingStartTime>Ni&&n!==1073741824&&(t.flags|=128,r=!0,xs(i,!1),t.lanes=4194304);i.isBackwards?(s.sibling=t.child,t.child=s):(n=i.last,n!==null?n.sibling=s:t.child=s,i.last=s)}return i.tail!==null?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Ve(),t.sibling=null,n=Pe.current,Te(Pe,r?n&1|2:n&1),t):(_t(t),null);case 22:case 23:return Dm(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Ft&1073741824&&(_t(t),t.subtreeFlags&6&&(t.flags|=8192)):_t(t),null;case 24:return null;case 25:return null}throw Error(M(156,t.tag))}function a$(e,t){switch(ym(t),t.tag){case 1:return Mt(t.type)&&Ou(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Ai(),Ie(At),Ie(St),km(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Cm(t),null;case 13:if(Ie(Pe),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(M(340));$i()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ie(Pe),null;case 4:return Ai(),null;case 10:return Em(t.type._context),null;case 22:case 23:return Dm(),null;case 24:return null;default:return null}}var Sl=!1,vt=!1,l$=typeof WeakSet=="function"?WeakSet:Set,B=null;function ai(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Be(e,t,r)}else n.current=null}function Np(e,t,n){try{n()}catch(r){Be(e,t,r)}}var O_=!1;function u$(e,t){if(yp=xu,e=wE(),mm(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch{n=null;break e}var s=0,a=-1,l=-1,u=0,f=0,c=e,d=null;t:for(;;){for(var h;c!==n||o!==0&&c.nodeType!==3||(a=s+o),c!==i||r!==0&&c.nodeType!==3||(l=s+r),c.nodeType===3&&(s+=c.nodeValue.length),(h=c.firstChild)!==null;)d=c,c=h;for(;;){if(c===e)break t;if(d===n&&++u===o&&(a=s),d===i&&++f===r&&(l=s),(h=c.nextSibling)!==null)break;c=d,d=c.parentNode}c=h}n=a===-1||l===-1?null:{start:a,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(_p={focusedElem:e,selectionRange:n},xu=!1,B=t;B!==null;)if(t=B,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,B=e;else for(;B!==null;){t=B;try{var m=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(m!==null){var _=m.memoizedProps,v=m.memoizedState,g=t.stateNode,p=g.getSnapshotBeforeUpdate(t.elementType===t.type?_:ln(t.type,_),v);g.__reactInternalSnapshotBeforeUpdate=p}break;case 3:var y=t.stateNode.containerInfo;y.nodeType===1?y.textContent="":y.nodeType===9&&y.documentElement&&y.removeChild(y.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(M(163))}}catch(S){Be(t,t.return,S)}if(e=t.sibling,e!==null){e.return=t.return,B=e;break}B=t.return}return m=O_,O_=!1,m}function Ys(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var o=r=r.next;do{if((o.tag&e)===e){var i=o.destroy;o.destroy=void 0,i!==void 0&&Np(t,n,i)}o=o.next}while(o!==r)}}function Dc(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Pp(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function _w(e){var t=e.alternate;t!==null&&(e.alternate=null,_w(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[$n],delete t[ha],delete t[Ep],delete t[VR],delete t[GR])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function vw(e){return e.tag===5||e.tag===3||e.tag===4}function A_(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||vw(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Lp(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=$u));else if(r!==4&&(e=e.child,e!==null))for(Lp(e,t,n),e=e.sibling;e!==null;)Lp(e,t,n),e=e.sibling}function Dp(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Dp(e,t,n),e=e.sibling;e!==null;)Dp(e,t,n),e=e.sibling}var pt=null,un=!1;function ur(e,t,n){for(n=n.child;n!==null;)Sw(e,t,n),n=n.sibling}function Sw(e,t,n){if(Pn&&typeof Pn.onCommitFiberUnmount=="function")try{Pn.onCommitFiberUnmount(Rc,n)}catch{}switch(n.tag){case 5:vt||ai(n,t);case 6:var r=pt,o=un;pt=null,ur(e,t,n),pt=r,un=o,pt!==null&&(un?(e=pt,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):pt.removeChild(n.stateNode));break;case 18:pt!==null&&(un?(e=pt,n=n.stateNode,e.nodeType===8?nd(e.parentNode,n):e.nodeType===1&&nd(e,n),ua(e)):nd(pt,n.stateNode));break;case 4:r=pt,o=un,pt=n.stateNode.containerInfo,un=!0,ur(e,t,n),pt=r,un=o;break;case 0:case 11:case 14:case 15:if(!vt&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){o=r=r.next;do{var i=o,s=i.destroy;i=i.tag,s!==void 0&&(i&2||i&4)&&Np(n,t,s),o=o.next}while(o!==r)}ur(e,t,n);break;case 1:if(!vt&&(ai(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(a){Be(n,t,a)}ur(e,t,n);break;case 21:ur(e,t,n);break;case 22:n.mode&1?(vt=(r=vt)||n.memoizedState!==null,ur(e,t,n),vt=r):ur(e,t,n);break;default:ur(e,t,n)}}function M_(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new l$),t.forEach(function(r){var o=_$.bind(null,e,r);n.has(r)||(n.add(r),r.then(o,o))})}}function sn(e,t){var n=t.deletions;if(n!==null)for(var r=0;ro&&(o=s),r&=~i}if(r=o,r=Ve()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*f$(r/1960))-r,10e?16:e,br===null)var r=!1;else{if(e=br,br=null,Hu=0,ae&6)throw Error(M(331));var o=ae;for(ae|=4,B=e.current;B!==null;){var i=B,s=i.child;if(B.flags&16){var a=i.deletions;if(a!==null){for(var l=0;lVe()-Pm?lo(e,0):Nm|=n),Nt(e,t)}function Iw(e,t){t===0&&(e.mode&1?(t=fl,fl<<=1,!(fl&130023424)&&(fl=4194304)):t=1);var n=Ct();e=er(e,t),e!==null&&(Da(e,t,n),Nt(e,n))}function y$(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Iw(e,n)}function _$(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;o!==null&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(M(314))}r!==null&&r.delete(t),Iw(e,n)}var Rw;Rw=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||At.current)Ot=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Ot=!1,i$(e,t,n);Ot=!!(e.flags&131072)}else Ot=!1,Ae&&t.flags&1048576&&ME(t,Nu,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Jl(e,t),e=t.pendingProps;var o=Ri(t,St.current);Si(t,n),o=Im(null,t,r,e,o,n);var i=Rm();return t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Mt(r)?(i=!0,Au(t)):i=!1,t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,bm(t),o.updater=Lc,t.stateNode=o,o._reactInternals=t,xp(t,r,e,n),t=$p(null,t,r,!0,i,n)):(t.tag=0,Ae&&i&&gm(t),wt(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Jl(e,t),e=t.pendingProps,o=r._init,r=o(r._payload),t.type=r,o=t.tag=S$(r),e=ln(r,e),o){case 0:t=Rp(null,t,r,e,n);break e;case 1:t=I_(null,t,r,e,n);break e;case 11:t=k_(null,t,r,e,n);break e;case 14:t=x_(null,t,r,ln(r.type,e),n);break e}throw Error(M(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ln(r,o),Rp(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ln(r,o),I_(e,t,r,o,n);case 3:e:{if(dw(t),e===null)throw Error(M(387));r=t.pendingProps,i=t.memoizedState,o=i.element,UE(e,t),Du(t,r,null,n);var s=t.memoizedState;if(r=s.element,i.isDehydrated)if(i={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=i,t.memoizedState=i,t.flags&256){o=Mi(Error(M(423)),t),t=R_(e,t,r,n,o);break e}else if(r!==o){o=Mi(Error(M(424)),t),t=R_(e,t,r,n,o);break e}else for(jt=$r(t.stateNode.containerInfo.firstChild),zt=t,Ae=!0,cn=null,n=DE(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if($i(),r===o){t=tr(e,t,n);break e}wt(e,t,r,n)}t=t.child}return t;case 5:return jE(t),e===null&&Tp(t),r=t.type,o=t.pendingProps,i=e!==null?e.memoizedProps:null,s=o.children,vp(r,o)?s=null:i!==null&&vp(r,i)&&(t.flags|=32),fw(e,t),wt(e,t,s,n),t.child;case 6:return e===null&&Tp(t),null;case 13:return pw(e,t,n);case 4:return Tm(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Oi(t,null,r,n):wt(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ln(r,o),k_(e,t,r,o,n);case 7:return wt(e,t,t.pendingProps,n),t.child;case 8:return wt(e,t,t.pendingProps.children,n),t.child;case 12:return wt(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,s=o.value,Te(Pu,r._currentValue),r._currentValue=s,i!==null)if(vn(i.value,s)){if(i.children===o.children&&!At.current){t=tr(e,t,n);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var a=i.dependencies;if(a!==null){s=i.child;for(var l=a.firstContext;l!==null;){if(l.context===r){if(i.tag===1){l=Yn(-1,n&-n),l.tag=2;var u=i.updateQueue;if(u!==null){u=u.shared;var f=u.pending;f===null?l.next=l:(l.next=f.next,f.next=l),u.pending=l}}i.lanes|=n,l=i.alternate,l!==null&&(l.lanes|=n),Cp(i.return,n,t),a.lanes|=n;break}l=l.next}}else if(i.tag===10)s=i.type===t.type?null:i.child;else if(i.tag===18){if(s=i.return,s===null)throw Error(M(341));s.lanes|=n,a=s.alternate,a!==null&&(a.lanes|=n),Cp(s,n,t),s=i.sibling}else s=i.child;if(s!==null)s.return=i;else for(s=i;s!==null;){if(s===t){s=null;break}if(i=s.sibling,i!==null){i.return=s.return,s=i;break}s=s.return}i=s}wt(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,Si(t,n),o=nn(o),r=r(o),t.flags|=1,wt(e,t,r,n),t.child;case 14:return r=t.type,o=ln(r,t.pendingProps),o=ln(r.type,o),x_(e,t,r,o,n);case 15:return uw(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ln(r,o),Jl(e,t),t.tag=1,Mt(r)?(e=!0,Au(t)):e=!1,Si(t,n),sw(t,r,o),xp(t,r,o,n),$p(null,t,r,!0,e,n);case 19:return hw(e,t,n);case 22:return cw(e,t,n)}throw Error(M(156,t.tag))};function $w(e,t){return rE(e,t)}function v$(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Zt(e,t,n,r){return new v$(e,t,n,r)}function Um(e){return e=e.prototype,!(!e||!e.isReactComponent)}function S$(e){if(typeof e=="function")return Um(e)?1:0;if(e!=null){if(e=e.$$typeof,e===om)return 11;if(e===im)return 14}return 2}function Nr(e,t){var n=e.alternate;return n===null?(n=Zt(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function eu(e,t,n,r,o,i){var s=2;if(r=e,typeof e=="function")Um(e)&&(s=1);else if(typeof e=="string")s=5;else e:switch(e){case Qo:return uo(n.children,o,i,t);case rm:s=8,o|=8;break;case Jd:return e=Zt(12,n,t,o|2),e.elementType=Jd,e.lanes=i,e;case Qd:return e=Zt(13,n,t,o),e.elementType=Qd,e.lanes=i,e;case Zd:return e=Zt(19,n,t,o),e.elementType=Zd,e.lanes=i,e;case j1:return Uc(n,o,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case F1:s=10;break e;case U1:s=9;break e;case om:s=11;break e;case im:s=14;break e;case pr:s=16,r=null;break e}throw Error(M(130,e==null?e:typeof e,""))}return t=Zt(s,n,t,o),t.elementType=e,t.type=r,t.lanes=i,t}function uo(e,t,n,r){return e=Zt(7,e,r,t),e.lanes=n,e}function Uc(e,t,n,r){return e=Zt(22,e,r,t),e.elementType=j1,e.lanes=n,e.stateNode={isHidden:!1},e}function cd(e,t,n){return e=Zt(6,e,null,t),e.lanes=n,e}function fd(e,t,n){return t=Zt(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function E$(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Vf(0),this.expirationTimes=Vf(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Vf(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function jm(e,t,n,r,o,i,s,a,l){return e=new E$(e,t,n,a,l),t===1?(t=1,i===!0&&(t|=8)):t=0,i=Zt(3,null,null,t),e.current=i,i.stateNode=e,i.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},bm(i),e}function w$(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Nw)}catch(e){console.error(e)}}Nw(),N1.exports=Gt;var x$=N1.exports,B_=x$;Yd.createRoot=B_.createRoot,Yd.hydrateRoot=B_.hydrateRoot;function I$(e){_e.useEffect(e,[])}function R$(e){return e===void 0}var $$=R$;const z_=Lt($$);var O$=Array.isArray,En=O$,A$=typeof Er=="object"&&Er&&Er.Object===Object&&Er,Pw=A$,M$=Pw,N$=typeof self=="object"&&self&&self.Object===Object&&self,P$=M$||N$||Function("return this")(),Dn=P$,L$=Dn,D$=L$.Symbol,Xi=D$,H_=Xi,Lw=Object.prototype,F$=Lw.hasOwnProperty,U$=Lw.toString,Rs=H_?H_.toStringTag:void 0;function j$(e){var t=F$.call(e,Rs),n=e[Rs];try{e[Rs]=void 0;var r=!0}catch{}var o=U$.call(e);return r&&(t?e[Rs]=n:delete e[Rs]),o}var B$=j$,z$=Object.prototype,H$=z$.toString;function W$(e){return H$.call(e)}var V$=W$,W_=Xi,G$=B$,q$=V$,K$="[object Null]",Y$="[object Undefined]",V_=W_?W_.toStringTag:void 0;function X$(e){return e==null?e===void 0?Y$:K$:V_&&V_ in Object(e)?G$(e):q$(e)}var Ji=X$;function J$(e){return e!=null&&typeof e=="object"}var qr=J$,Q$=Ji,Z$=qr,eO="[object Symbol]";function tO(e){return typeof e=="symbol"||Z$(e)&&Q$(e)==eO}var Wm=tO,nO=En,rO=Wm,oO=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,iO=/^\w*$/;function sO(e,t){if(nO(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||rO(e)?!0:iO.test(e)||!oO.test(e)||t!=null&&e in Object(t)}var Vm=sO;function aO(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var Qi=aO,lO=Ji,uO=Qi,cO="[object AsyncFunction]",fO="[object Function]",dO="[object GeneratorFunction]",pO="[object Proxy]";function hO(e){if(!uO(e))return!1;var t=lO(e);return t==fO||t==dO||t==cO||t==pO}var Dw=hO,mO=Dn,gO=mO["__core-js_shared__"],yO=gO,dd=yO,G_=function(){var e=/[^.]+$/.exec(dd&&dd.keys&&dd.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function _O(e){return!!G_&&G_ in e}var vO=_O,SO=Function.prototype,EO=SO.toString;function wO(e){if(e!=null){try{return EO.call(e)}catch{}try{return e+""}catch{}}return""}var Fw=wO,bO=Dw,TO=vO,CO=Qi,kO=Fw,xO=/[\\^$.*+?()[\]{}|]/g,IO=/^\[object .+?Constructor\]$/,RO=Function.prototype,$O=Object.prototype,OO=RO.toString,AO=$O.hasOwnProperty,MO=RegExp("^"+OO.call(AO).replace(xO,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function NO(e){if(!CO(e)||TO(e))return!1;var t=bO(e)?MO:IO;return t.test(kO(e))}var PO=NO;function LO(e,t){return e==null?void 0:e[t]}var DO=LO,FO=PO,UO=DO;function jO(e,t){var n=UO(e,t);return FO(n)?n:void 0}var Mo=jO,BO=Mo,zO=BO(Object,"create"),Wc=zO,q_=Wc;function HO(){this.__data__=q_?q_(null):{},this.size=0}var WO=HO;function VO(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var GO=VO,qO=Wc,KO="__lodash_hash_undefined__",YO=Object.prototype,XO=YO.hasOwnProperty;function JO(e){var t=this.__data__;if(qO){var n=t[e];return n===KO?void 0:n}return XO.call(t,e)?t[e]:void 0}var QO=JO,ZO=Wc,eA=Object.prototype,tA=eA.hasOwnProperty;function nA(e){var t=this.__data__;return ZO?t[e]!==void 0:tA.call(t,e)}var rA=nA,oA=Wc,iA="__lodash_hash_undefined__";function sA(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=oA&&t===void 0?iA:t,this}var aA=sA,lA=WO,uA=GO,cA=QO,fA=rA,dA=aA;function Zi(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t-1}var RA=IA,$A=Vc;function OA(e,t){var n=this.__data__,r=$A(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var AA=OA,MA=mA,NA=bA,PA=kA,LA=RA,DA=AA;function es(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t"u")throw new Error(t)}function Hw(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function GM(){return Math.random().toString(36).substr(2,8)}function Z_(e,t){return{usr:e.state,key:e.key,idx:t}}function zp(e,t,n,r){return n===void 0&&(n=null),Ea({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?ns(t):t,{state:n,key:t&&t.key||r||GM()})}function Ww(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&n!=="?"&&(t+=n.charAt(0)==="?"?n:"?"+n),r&&r!=="#"&&(t+=r.charAt(0)==="#"?r:"#"+r),t}function ns(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function qM(e,t,n,r){r===void 0&&(r={});let{window:o=document.defaultView,v5Compat:i=!1}=r,s=o.history,a=Tr.Pop,l=null,u=f();u==null&&(u=0,s.replaceState(Ea({},s.state,{idx:u}),""));function f(){return(s.state||{idx:null}).idx}function c(){a=Tr.Pop;let v=f(),g=v==null?null:v-u;u=v,l&&l({action:a,location:_.location,delta:g})}function d(v,g){a=Tr.Push;let p=zp(_.location,v,g);n&&n(p,v),u=f()+1;let y=Z_(p,u),S=_.createHref(p);try{s.pushState(y,"",S)}catch(b){if(b instanceof DOMException&&b.name==="DataCloneError")throw b;o.location.assign(S)}i&&l&&l({action:a,location:_.location,delta:1})}function h(v,g){a=Tr.Replace;let p=zp(_.location,v,g);n&&n(p,v),u=f();let y=Z_(p,u),S=_.createHref(p);s.replaceState(y,"",S),i&&l&&l({action:a,location:_.location,delta:0})}function m(v){let g=o.location.origin!=="null"?o.location.origin:o.location.href,p=typeof v=="string"?v:Ww(v);return p=p.replace(/ $/,"%20"),Ze(g,"No window.location.(origin|href) available to create URL for href: "+p),new URL(p,g)}let _={get action(){return a},get location(){return e(o,s)},listen(v){if(l)throw new Error("A history only accepts one active listener");return o.addEventListener(Q_,c),l=v,()=>{o.removeEventListener(Q_,c),l=null}},createHref(v){return t(o,v)},createURL:m,encodeLocation(v){let g=m(v);return{pathname:g.pathname,search:g.search,hash:g.hash}},push:d,replace:h,go(v){return s.go(v)}};return _}var ev;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(ev||(ev={}));function Vw(e,t,n){n===void 0&&(n="/");let r=typeof t=="string"?ns(t):t,o=Kw(r.pathname||"/",n);if(o==null)return null;let i=Gw(e);KM(i);let s=null;for(let a=0;s==null&&a{let l={relativePath:a===void 0?i.path||"":a,caseSensitive:i.caseSensitive===!0,childrenIndex:s,route:i};l.relativePath.startsWith("/")&&(Ze(l.relativePath.startsWith(r),'Absolute route path "'+l.relativePath+'" nested under path '+('"'+r+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),l.relativePath=l.relativePath.slice(r.length));let u=co([r,l.relativePath]),f=n.concat(l);i.children&&i.children.length>0&&(Ze(i.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+u+'".')),Gw(i.children,t,f,u)),!(i.path==null&&!i.index)&&t.push({path:u,score:t2(u,i.index),routesMeta:f})};return e.forEach((i,s)=>{var a;if(i.path===""||!((a=i.path)!=null&&a.includes("?")))o(i,s);else for(let l of qw(i.path))o(i,s,l)}),t}function qw(e){let t=e.split("/");if(t.length===0)return[];let[n,...r]=t,o=n.endsWith("?"),i=n.replace(/\?$/,"");if(r.length===0)return o?[i,""]:[i];let s=qw(r.join("/")),a=[];return a.push(...s.map(l=>l===""?i:[i,l].join("/"))),o&&a.push(...s),a.map(l=>e.startsWith("/")&&l===""?"/":l)}function KM(e){e.sort((t,n)=>t.score!==n.score?n.score-t.score:n2(t.routesMeta.map(r=>r.childrenIndex),n.routesMeta.map(r=>r.childrenIndex)))}const YM=/^:[\w-]+$/,XM=3,JM=2,QM=1,ZM=10,e2=-2,tv=e=>e==="*";function t2(e,t){let n=e.split("/"),r=n.length;return n.some(tv)&&(r+=e2),t&&(r+=JM),n.filter(o=>!tv(o)).reduce((o,i)=>o+(YM.test(i)?XM:i===""?QM:ZM),r)}function n2(e,t){return e.length===t.length&&e.slice(0,-1).every((r,o)=>r===t[o])?e[e.length-1]-t[t.length-1]:0}function r2(e,t){let{routesMeta:n}=e,r={},o="/",i=[];for(let s=0;s{let{paramName:d,isOptional:h}=f;if(d==="*"){let _=a[c]||"";s=i.slice(0,i.length-_.length).replace(/(.)\/+$/,"$1")}const m=a[c];return h&&!m?u[d]=void 0:u[d]=(m||"").replace(/%2F/g,"/"),u},{}),pathname:i,pathnameBase:s,pattern:e}}function i2(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!0),Hw(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let r=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(s,a,l)=>(r.push({paramName:a,isOptional:l!=null}),l?"/?([^\\/]+)?":"/([^\\/]+)"));return e.endsWith("*")?(r.push({paramName:"*"}),o+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":e!==""&&e!=="/"&&(o+="(?:(?=\\/|$))"),[new RegExp(o,t?void 0:"i"),r]}function s2(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return Hw(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function Kw(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&r!=="/"?null:e.slice(n)||"/"}function a2(e,t){t===void 0&&(t="/");let{pathname:n,search:r="",hash:o=""}=typeof e=="string"?ns(e):e;return{pathname:n?n.startsWith("/")?n:l2(n,t):t,search:f2(r),hash:d2(o)}}function l2(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(o=>{o===".."?n.length>1&&n.pop():o!=="."&&n.push(o)}),n.length>1?n.join("/"):"/"}function pd(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the ")+("`to."+n+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function u2(e){return e.filter((t,n)=>n===0||t.route.path&&t.route.path.length>0)}function Yw(e,t){let n=u2(e);return t?n.map((r,o)=>o===e.length-1?r.pathname:r.pathnameBase):n.map(r=>r.pathnameBase)}function Xw(e,t,n,r){r===void 0&&(r=!1);let o;typeof e=="string"?o=ns(e):(o=Ea({},e),Ze(!o.pathname||!o.pathname.includes("?"),pd("?","pathname","search",o)),Ze(!o.pathname||!o.pathname.includes("#"),pd("#","pathname","hash",o)),Ze(!o.search||!o.search.includes("#"),pd("#","search","hash",o)));let i=e===""||o.pathname==="",s=i?"/":o.pathname,a;if(s==null)a=n;else{let c=t.length-1;if(!r&&s.startsWith("..")){let d=s.split("/");for(;d[0]==="..";)d.shift(),c-=1;o.pathname=d.join("/")}a=c>=0?t[c]:"/"}let l=a2(o,a),u=s&&s!=="/"&&s.endsWith("/"),f=(i||s===".")&&n.endsWith("/");return!l.pathname.endsWith("/")&&(u||f)&&(l.pathname+="/"),l}const co=e=>e.join("/").replace(/\/\/+/g,"/"),c2=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),f2=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,d2=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;function p2(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const Jw=["post","put","patch","delete"];new Set(Jw);const h2=["get",...Jw];new Set(h2);/** + * React Router v6.23.1 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function wa(){return wa=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.current=!0}),P.useCallback(function(u,f){if(f===void 0&&(f={}),!a.current)return;if(typeof u=="number"){r.go(u);return}let c=Xw(u,JSON.parse(s),i,f.relative==="path");e==null&&t!=="/"&&(c.pathname=c.pathname==="/"?t:co([t,c.pathname])),(f.replace?r.replace:r.push)(c,f.state,f)},[t,r,s,i,e])}function _2(e,t){return v2(e,t)}function v2(e,t,n,r){Wa()||Ze(!1);let{navigator:o}=P.useContext(za),{matches:i}=P.useContext(No),s=i[i.length-1],a=s?s.params:{};s&&s.pathname;let l=s?s.pathnameBase:"/";s&&s.route;let u=rs(),f;if(t){var c;let v=typeof t=="string"?ns(t):t;l==="/"||(c=v.pathname)!=null&&c.startsWith(l)||Ze(!1),f=v}else f=u;let d=f.pathname||"/",h=d;if(l!=="/"){let v=l.replace(/^\//,"").split("/");h="/"+d.replace(/^\//,"").split("/").slice(v.length).join("/")}let m=Vw(e,{pathname:h}),_=T2(m&&m.map(v=>Object.assign({},v,{params:Object.assign({},a,v.params),pathname:co([l,o.encodeLocation?o.encodeLocation(v.pathname).pathname:v.pathname]),pathnameBase:v.pathnameBase==="/"?l:co([l,o.encodeLocation?o.encodeLocation(v.pathnameBase).pathname:v.pathnameBase])})),i,n,r);return t&&_?P.createElement(Ha.Provider,{value:{location:wa({pathname:"/",search:"",hash:"",state:null,key:"default"},f),navigationType:Tr.Pop}},_):_}function S2(){let e=I2(),t=p2(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,o={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"},i=null;return P.createElement(P.Fragment,null,P.createElement("h2",null,"Unexpected Application Error!"),P.createElement("h3",{style:{fontStyle:"italic"}},t),n?P.createElement("pre",{style:o},n):null,i)}const E2=P.createElement(S2,null);class w2 extends P.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,n){return n.location!==t.location||n.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:n.error,location:n.location,revalidation:t.revalidation||n.revalidation}}componentDidCatch(t,n){console.error("React Router caught the following error during render",t,n)}render(){return this.state.error!==void 0?P.createElement(No.Provider,{value:this.props.routeContext},P.createElement(Qw.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function b2(e){let{routeContext:t,match:n,children:r}=e,o=P.useContext(Jm);return o&&o.static&&o.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(o.staticContext._deepestRenderedBoundaryId=n.route.id),P.createElement(No.Provider,{value:t},r)}function T2(e,t,n,r){var o;if(t===void 0&&(t=[]),n===void 0&&(n=null),r===void 0&&(r=null),e==null){var i;if((i=n)!=null&&i.errors)e=n.matches;else return null}let s=e,a=(o=n)==null?void 0:o.errors;if(a!=null){let f=s.findIndex(c=>c.route.id&&(a==null?void 0:a[c.route.id])!==void 0);f>=0||Ze(!1),s=s.slice(0,Math.min(s.length,f+1))}let l=!1,u=-1;if(n&&r&&r.v7_partialHydration)for(let f=0;f=0?s=s.slice(0,u+1):s=[s[0]];break}}}return s.reduceRight((f,c,d)=>{let h,m=!1,_=null,v=null;n&&(h=a&&c.route.id?a[c.route.id]:void 0,_=c.route.errorElement||E2,l&&(u<0&&d===0?($2("route-fallback",!1),m=!0,v=null):u===d&&(m=!0,v=c.route.hydrateFallbackElement||null)));let g=t.concat(s.slice(0,d+1)),p=()=>{let y;return h?y=_:m?y=v:c.route.Component?y=P.createElement(c.route.Component,null):c.route.element?y=c.route.element:y=f,P.createElement(b2,{match:c,routeContext:{outlet:f,matches:g,isDataRoute:n!=null},children:y})};return n&&(c.route.ErrorBoundary||c.route.errorElement||d===0)?P.createElement(w2,{location:n.location,revalidation:n.revalidation,component:_,error:h,children:p(),routeContext:{outlet:null,matches:g,isDataRoute:!0}}):p()},null)}var tb=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(tb||{}),qu=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(qu||{});function C2(e){let t=P.useContext(Jm);return t||Ze(!1),t}function k2(e){let t=P.useContext(m2);return t||Ze(!1),t}function x2(e){let t=P.useContext(No);return t||Ze(!1),t}function nb(e){let t=x2(),n=t.matches[t.matches.length-1];return n.route.id||Ze(!1),n.route.id}function I2(){var e;let t=P.useContext(Qw),n=k2(qu.UseRouteError),r=nb(qu.UseRouteError);return t!==void 0?t:(e=n.errors)==null?void 0:e[r]}function R2(){let{router:e}=C2(tb.UseNavigateStable),t=nb(qu.UseNavigateStable),n=P.useRef(!1);return Zw(()=>{n.current=!0}),P.useCallback(function(o,i){i===void 0&&(i={}),n.current&&(typeof o=="number"?e.navigate(o):e.navigate(o,wa({fromRouteId:t},i)))},[e,t])}const nv={};function $2(e,t,n){!t&&!nv[e]&&(nv[e]=!0)}function O2(e){let{to:t,replace:n,state:r,relative:o}=e;Wa()||Ze(!1);let{future:i,static:s}=P.useContext(za),{matches:a}=P.useContext(No),{pathname:l}=rs(),u=eb(),f=Xw(t,Yw(a,i.v7_relativeSplatPath),l,o==="path"),c=JSON.stringify(f);return P.useEffect(()=>u(JSON.parse(c),{replace:n,state:r,relative:o}),[u,c,o,n,r]),null}function Hp(e){Ze(!1)}function A2(e){let{basename:t="/",children:n=null,location:r,navigationType:o=Tr.Pop,navigator:i,static:s=!1,future:a}=e;Wa()&&Ze(!1);let l=t.replace(/^\/*/,"/"),u=P.useMemo(()=>({basename:l,navigator:i,static:s,future:wa({v7_relativeSplatPath:!1},a)}),[l,a,i,s]);typeof r=="string"&&(r=ns(r));let{pathname:f="/",search:c="",hash:d="",state:h=null,key:m="default"}=r,_=P.useMemo(()=>{let v=Kw(f,l);return v==null?null:{location:{pathname:v,search:c,hash:d,state:h,key:m},navigationType:o}},[l,f,c,d,h,m,o]);return _==null?null:P.createElement(za.Provider,{value:u},P.createElement(Ha.Provider,{children:n,value:_}))}function M2(e){let{children:t,location:n}=e;return _2(Ku(t),n)}new Promise(()=>{});function Ku(e,t){t===void 0&&(t=[]);let n=[];return P.Children.forEach(e,(r,o)=>{if(!P.isValidElement(r))return;let i=[...t,o];if(r.type===P.Fragment){n.push.apply(n,Ku(r.props.children,i));return}r.type!==Hp&&Ze(!1),!r.props.index||!r.props.children||Ze(!1);let s={id:r.props.id||i.join("-"),caseSensitive:r.props.caseSensitive,element:r.props.element,Component:r.props.Component,index:r.props.index,path:r.props.path,loader:r.props.loader,action:r.props.action,errorElement:r.props.errorElement,ErrorBoundary:r.props.ErrorBoundary,hasErrorBoundary:r.props.ErrorBoundary!=null||r.props.errorElement!=null,shouldRevalidate:r.props.shouldRevalidate,handle:r.props.handle,lazy:r.props.lazy};r.props.children&&(s.children=Ku(r.props.children,i)),n.push(s)}),n}/** + * React Router DOM v6.23.1 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */const N2="6";try{window.__reactRouterVersion=N2}catch{}const P2="startTransition",rv=gI[P2];function L2(e){let{basename:t,children:n,future:r,window:o}=e,i=P.useRef();i.current==null&&(i.current=VM({window:o,v5Compat:!0}));let s=i.current,[a,l]=P.useState({action:s.action,location:s.location}),{v7_startTransition:u}=r||{},f=P.useCallback(c=>{u&&rv?rv(()=>l(c)):l(c)},[l,u]);return P.useLayoutEffect(()=>s.listen(f),[s,f]),P.createElement(A2,{basename:t,children:n,location:a.location,navigationType:a.action,navigator:s,future:r})}var ov;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(ov||(ov={}));var iv;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(iv||(iv={}));function fo(e){return Object.keys(e)}function hd(e){return e&&typeof e=="object"&&!Array.isArray(e)}function Qm(e,t){const n={...e},r=t;return hd(e)&&hd(t)&&Object.keys(t).forEach(o=>{hd(r[o])&&o in e?n[o]=Qm(n[o],r[o]):n[o]=r[o]}),n}function D2(e){var t;return typeof e!="string"||!e.includes("var(--mantine-scale)")?e:(t=e.match(/^calc\((.*?)\)$/))==null?void 0:t[1].split("*")[0].trim()}function F2(e){const t=D2(e);return typeof t=="number"?t:typeof t=="string"?t.includes("calc")||t.includes("var")?t:t.includes("px")?Number(t.replace("px","")):t.includes("rem")?Number(t.replace("rem",""))*16:t.includes("em")?Number(t.replace("em",""))*16:Number(t):NaN}function md(e){return e==="0rem"?"0rem":`calc(${e} * var(--mantine-scale))`}function rb(e,{shouldScale:t=!1}={}){function n(r){if(r===0||r==="0")return`0${e}`;if(typeof r=="number"){const o=`${r/16}${e}`;return t?md(o):o}if(typeof r=="string"){if(r===""||r.startsWith("calc(")||r.startsWith("clamp(")||r.includes("rgba("))return r;if(r.includes(","))return r.split(",").map(i=>n(i)).join(",");if(r.includes(" "))return r.split(" ").map(i=>n(i)).join(" ");if(r.includes(e))return t?md(r):r;const o=r.replace("px","");if(!Number.isNaN(Number(o))){const i=`${Number(o)/16}${e}`;return t?md(i):i}}return r}return n}const F=rb("rem",{shouldScale:!0}),sv=rb("em"),ob=typeof document<"u"?P.useLayoutEffect:P.useEffect;function ib(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t>16&255,o=n>>8&255,i=n&255;return{r,g:o,b:i,a:1}}function H2(e){const[t,n,r,o]=e.replace(/[^0-9,./]/g,"").split(/[/,]/).map(Number);return{r:t,g:n,b:r,a:o||1}}function W2(e){const t=/^hsla?\(\s*(\d+)\s*,\s*(\d+%)\s*,\s*(\d+%)\s*(,\s*(0?\.\d+|\d+(\.\d+)?))?\s*\)$/i,n=e.match(t);if(!n)return{r:0,g:0,b:0,a:1};const r=parseInt(n[1],10),o=parseInt(n[2],10)/100,i=parseInt(n[3],10)/100,s=n[5]?parseFloat(n[5]):void 0,a=(1-Math.abs(2*i-1))*o,l=r/60,u=a*(1-Math.abs(l%2-1)),f=i-a/2;let c,d,h;return l>=0&&l<1?(c=a,d=u,h=0):l>=1&&l<2?(c=u,d=a,h=0):l>=2&&l<3?(c=0,d=a,h=u):l>=3&&l<4?(c=0,d=u,h=a):l>=4&&l<5?(c=u,d=0,h=a):(c=a,d=0,h=u),{r:Math.round((c+f)*255),g:Math.round((d+f)*255),b:Math.round((h+f)*255),a:s||1}}function Zm(e){return B2(e)?z2(e):e.startsWith("rgb")?H2(e):e.startsWith("hsl")?W2(e):{r:0,g:0,b:0,a:1}}function bl(e,t){if(e.startsWith("var("))return`color-mix(in srgb, ${e}, black ${t*100}%)`;const{r:n,g:r,b:o,a:i}=Zm(e),s=1-t,a=l=>Math.round(l*s);return`rgba(${a(n)}, ${a(r)}, ${a(o)}, ${i})`}function ba(e,t){return typeof e.primaryShade=="number"?e.primaryShade:t==="dark"?e.primaryShade.dark:e.primaryShade.light}function gd(e){return e<=.03928?e/12.92:((e+.055)/1.055)**2.4}function V2(e){const t=e.match(/oklch\((.*?)%\s/);return t?parseFloat(t[1]):null}function G2(e){if(e.startsWith("oklch("))return(V2(e)||0)/100;const{r:t,g:n,b:r}=Zm(e),o=t/255,i=n/255,s=r/255,a=gd(o),l=gd(i),u=gd(s);return .2126*a+.7152*l+.0722*u}function $s(e,t=.179){return e.startsWith("var(")?!1:G2(e)>t}function eg({color:e,theme:t,colorScheme:n}){if(typeof e!="string")throw new Error(`[@mantine/core] Failed to parse color. Expected color to be a string, instead got ${typeof e}`);if(e==="bright")return{color:e,value:n==="dark"?t.white:t.black,shade:void 0,isThemeColor:!1,isLight:$s(n==="dark"?t.white:t.black,t.luminanceThreshold),variable:"--mantine-color-bright"};if(e==="dimmed")return{color:e,value:n==="dark"?t.colors.dark[2]:t.colors.gray[7],shade:void 0,isThemeColor:!1,isLight:$s(n==="dark"?t.colors.dark[2]:t.colors.gray[6],t.luminanceThreshold),variable:"--mantine-color-dimmed"};if(e==="white"||e==="black")return{color:e,value:e==="white"?t.white:t.black,shade:void 0,isThemeColor:!1,isLight:$s(e==="white"?t.white:t.black,t.luminanceThreshold),variable:`--mantine-color-${e}`};const[r,o]=e.split("."),i=o?Number(o):void 0,s=r in t.colors;if(s){const a=i!==void 0?t.colors[r][i]:t.colors[r][ba(t,n||"light")];return{color:r,value:a,shade:i,isThemeColor:s,isLight:$s(a,t.luminanceThreshold),variable:o?`--mantine-color-${r}-${i}`:`--mantine-color-${r}-filled`}}return{color:e,value:e,isThemeColor:s,isLight:$s(e,t.luminanceThreshold),shade:i,variable:void 0}}function av(e,t){const n=eg({color:e||t.primaryColor,theme:t});return n.variable?`var(${n.variable})`:e}function lv(e,t){const n={from:(e==null?void 0:e.from)||t.defaultGradient.from,to:(e==null?void 0:e.to)||t.defaultGradient.to,deg:(e==null?void 0:e.deg)||t.defaultGradient.deg||0},r=av(n.from,t),o=av(n.to,t);return`linear-gradient(${n.deg}deg, ${r} 0%, ${o} 100%)`}function jn(e,t){if(typeof e!="string"||t>1||t<0)return"rgba(0, 0, 0, 1)";if(e.startsWith("var(")){const i=(1-t)*100;return`color-mix(in srgb, ${e}, transparent ${i}%)`}if(e.startsWith("oklch"))return e.includes("/")?e.replace(/\/\s*[\d.]+\s*\)/,`/ ${t})`):e.replace(")",` / ${t})`);const{r:n,g:r,b:o}=Zm(e);return`rgba(${n}, ${r}, ${o}, ${t})`}const zo=jn,q2=({color:e,theme:t,variant:n,gradient:r,autoContrast:o})=>{const i=eg({color:e,theme:t}),s=typeof o=="boolean"?o:t.autoContrast;if(n==="filled"){const a=s&&i.isLight?"var(--mantine-color-black)":"var(--mantine-color-white)";return i.isThemeColor?i.shade===void 0?{background:`var(--mantine-color-${e}-filled)`,hover:`var(--mantine-color-${e}-filled-hover)`,color:a,border:`${F(1)} solid transparent`}:{background:`var(--mantine-color-${i.color}-${i.shade})`,hover:`var(--mantine-color-${i.color}-${i.shade===9?8:i.shade+1})`,color:a,border:`${F(1)} solid transparent`}:{background:e,hover:bl(e,.1),color:a,border:`${F(1)} solid transparent`}}if(n==="light"){if(i.isThemeColor){if(i.shade===void 0)return{background:`var(--mantine-color-${e}-light)`,hover:`var(--mantine-color-${e}-light-hover)`,color:`var(--mantine-color-${e}-light-color)`,border:`${F(1)} solid transparent`};const a=t.colors[i.color][i.shade];return{background:jn(a,.1),hover:jn(a,.12),color:`var(--mantine-color-${i.color}-${Math.min(i.shade,6)})`,border:`${F(1)} solid transparent`}}return{background:jn(e,.1),hover:jn(e,.12),color:e,border:`${F(1)} solid transparent`}}if(n==="outline")return i.isThemeColor?i.shade===void 0?{background:"transparent",hover:`var(--mantine-color-${e}-outline-hover)`,color:`var(--mantine-color-${e}-outline)`,border:`${F(1)} solid var(--mantine-color-${e}-outline)`}:{background:"transparent",hover:jn(t.colors[i.color][i.shade],.05),color:`var(--mantine-color-${i.color}-${i.shade})`,border:`${F(1)} solid var(--mantine-color-${i.color}-${i.shade})`}:{background:"transparent",hover:jn(e,.05),color:e,border:`${F(1)} solid ${e}`};if(n==="subtle"){if(i.isThemeColor){if(i.shade===void 0)return{background:"transparent",hover:`var(--mantine-color-${e}-light-hover)`,color:`var(--mantine-color-${e}-light-color)`,border:`${F(1)} solid transparent`};const a=t.colors[i.color][i.shade];return{background:"transparent",hover:jn(a,.12),color:`var(--mantine-color-${i.color}-${Math.min(i.shade,6)})`,border:`${F(1)} solid transparent`}}return{background:"transparent",hover:jn(e,.12),color:e,border:`${F(1)} solid transparent`}}return n==="transparent"?i.isThemeColor?i.shade===void 0?{background:"transparent",hover:"transparent",color:`var(--mantine-color-${e}-light-color)`,border:`${F(1)} solid transparent`}:{background:"transparent",hover:"transparent",color:`var(--mantine-color-${i.color}-${Math.min(i.shade,6)})`,border:`${F(1)} solid transparent`}:{background:"transparent",hover:"transparent",color:e,border:`${F(1)} solid transparent`}:n==="white"?i.isThemeColor?i.shade===void 0?{background:"var(--mantine-color-white)",hover:bl(t.white,.01),color:`var(--mantine-color-${e}-filled)`,border:`${F(1)} solid transparent`}:{background:"var(--mantine-color-white)",hover:bl(t.white,.01),color:`var(--mantine-color-${i.color}-${i.shade})`,border:`${F(1)} solid transparent`}:{background:"var(--mantine-color-white)",hover:bl(t.white,.01),color:e,border:`${F(1)} solid transparent`}:n==="gradient"?{background:lv(r,t),hover:lv(r,t),color:"var(--mantine-color-white)",border:"none"}:n==="default"?{background:"var(--mantine-color-default)",hover:"var(--mantine-color-default-hover)",color:"var(--mantine-color-default-color)",border:`${F(1)} solid var(--mantine-color-default-border)`}:{}},K2={dark:["#C9C9C9","#b8b8b8","#828282","#696969","#424242","#3b3b3b","#2e2e2e","#242424","#1f1f1f","#141414"],gray:["#f8f9fa","#f1f3f5","#e9ecef","#dee2e6","#ced4da","#adb5bd","#868e96","#495057","#343a40","#212529"],red:["#fff5f5","#ffe3e3","#ffc9c9","#ffa8a8","#ff8787","#ff6b6b","#fa5252","#f03e3e","#e03131","#c92a2a"],pink:["#fff0f6","#ffdeeb","#fcc2d7","#faa2c1","#f783ac","#f06595","#e64980","#d6336c","#c2255c","#a61e4d"],grape:["#f8f0fc","#f3d9fa","#eebefa","#e599f7","#da77f2","#cc5de8","#be4bdb","#ae3ec9","#9c36b5","#862e9c"],violet:["#f3f0ff","#e5dbff","#d0bfff","#b197fc","#9775fa","#845ef7","#7950f2","#7048e8","#6741d9","#5f3dc4"],indigo:["#edf2ff","#dbe4ff","#bac8ff","#91a7ff","#748ffc","#5c7cfa","#4c6ef5","#4263eb","#3b5bdb","#364fc7"],blue:["#e7f5ff","#d0ebff","#a5d8ff","#74c0fc","#4dabf7","#339af0","#228be6","#1c7ed6","#1971c2","#1864ab"],cyan:["#e3fafc","#c5f6fa","#99e9f2","#66d9e8","#3bc9db","#22b8cf","#15aabf","#1098ad","#0c8599","#0b7285"],teal:["#e6fcf5","#c3fae8","#96f2d7","#63e6be","#38d9a9","#20c997","#12b886","#0ca678","#099268","#087f5b"],green:["#ebfbee","#d3f9d8","#b2f2bb","#8ce99a","#69db7c","#51cf66","#40c057","#37b24d","#2f9e44","#2b8a3e"],lime:["#f4fce3","#e9fac8","#d8f5a2","#c0eb75","#a9e34b","#94d82d","#82c91e","#74b816","#66a80f","#5c940d"],yellow:["#fff9db","#fff3bf","#ffec99","#ffe066","#ffd43b","#fcc419","#fab005","#f59f00","#f08c00","#e67700"],orange:["#fff4e6","#ffe8cc","#ffd8a8","#ffc078","#ffa94d","#ff922b","#fd7e14","#f76707","#e8590c","#d9480f"]},uv="-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji",tg={scale:1,fontSmoothing:!0,focusRing:"auto",white:"#fff",black:"#000",colors:K2,primaryShade:{light:6,dark:8},primaryColor:"blue",variantColorResolver:q2,autoContrast:!1,luminanceThreshold:.3,fontFamily:uv,fontFamilyMonospace:"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace",respectReducedMotion:!1,cursorType:"default",defaultGradient:{from:"blue",to:"cyan",deg:45},defaultRadius:"sm",activeClassName:"mantine-active",focusClassName:"",headings:{fontFamily:uv,fontWeight:"700",textWrap:"wrap",sizes:{h1:{fontSize:F(34),lineHeight:"1.3"},h2:{fontSize:F(26),lineHeight:"1.35"},h3:{fontSize:F(22),lineHeight:"1.4"},h4:{fontSize:F(18),lineHeight:"1.45"},h5:{fontSize:F(16),lineHeight:"1.5"},h6:{fontSize:F(14),lineHeight:"1.5"}}},fontSizes:{xs:F(12),sm:F(14),md:F(16),lg:F(18),xl:F(20)},lineHeights:{xs:"1.4",sm:"1.45",md:"1.55",lg:"1.6",xl:"1.65"},radius:{xs:F(2),sm:F(4),md:F(8),lg:F(16),xl:F(32)},spacing:{xs:F(10),sm:F(12),md:F(16),lg:F(20),xl:F(32)},breakpoints:{xs:"36em",sm:"48em",md:"62em",lg:"75em",xl:"88em"},shadows:{xs:`0 ${F(1)} ${F(3)} rgba(0, 0, 0, 0.05), 0 ${F(1)} ${F(2)} rgba(0, 0, 0, 0.1)`,sm:`0 ${F(1)} ${F(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${F(10)} ${F(15)} ${F(-5)}, rgba(0, 0, 0, 0.04) 0 ${F(7)} ${F(7)} ${F(-5)}`,md:`0 ${F(1)} ${F(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${F(20)} ${F(25)} ${F(-5)}, rgba(0, 0, 0, 0.04) 0 ${F(10)} ${F(10)} ${F(-5)}`,lg:`0 ${F(1)} ${F(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${F(28)} ${F(23)} ${F(-7)}, rgba(0, 0, 0, 0.04) 0 ${F(12)} ${F(12)} ${F(-7)}`,xl:`0 ${F(1)} ${F(3)} rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05) 0 ${F(36)} ${F(28)} ${F(-7)}, rgba(0, 0, 0, 0.04) 0 ${F(17)} ${F(17)} ${F(-7)}`},other:{},components:{}};function cv(e){return e==="auto"||e==="dark"||e==="light"}function Y2({key:e="mantine-color-scheme-value"}={}){let t;return{get:n=>{if(typeof window>"u")return n;try{const r=window.localStorage.getItem(e);return cv(r)?r:n}catch{return n}},set:n=>{try{window.localStorage.setItem(e,n)}catch(r){console.warn("[@mantine/core] Local storage color scheme manager was unable to save color scheme.",r)}},subscribe:n=>{t=r=>{r.storageArea===window.localStorage&&r.key===e&&cv(r.newValue)&&n(r.newValue)},window.addEventListener("storage",t)},unsubscribe:()=>{window.removeEventListener("storage",t)},clear:()=>{window.localStorage.removeItem(e)}}}const X2="[@mantine/core] MantineProvider: Invalid theme.primaryColor, it accepts only key of theme.colors, learn more – https://mantine.dev/theming/colors/#primary-color",fv="[@mantine/core] MantineProvider: Invalid theme.primaryShade, it accepts only 0-9 integers or an object { light: 0-9, dark: 0-9 }";function yd(e){return e<0||e>9?!1:parseInt(e.toString(),10)===e}function dv(e){if(!(e.primaryColor in e.colors))throw new Error(X2);if(typeof e.primaryShade=="object"&&(!yd(e.primaryShade.dark)||!yd(e.primaryShade.light)))throw new Error(fv);if(typeof e.primaryShade=="number"&&!yd(e.primaryShade))throw new Error(fv)}function J2(e,t){var r;if(!t)return dv(e),e;const n=Qm(e,t);return t.fontFamily&&!((r=t.headings)!=null&&r.fontFamily)&&(n.headings.fontFamily=t.fontFamily),dv(n),n}const ng=P.createContext(null),Q2=()=>P.useContext(ng)||tg;function ub(){const e=P.useContext(ng);if(!e)throw new Error("@mantine/core: MantineProvider was not found in component tree, make sure you have it in your app");return e}function cb({theme:e,children:t,inherit:n=!0}){const r=Q2(),o=P.useMemo(()=>J2(n?r:tg,e),[e,r,n]);return q.jsx(ng.Provider,{value:o,children:t})}cb.displayName="@mantine/core/MantineThemeProvider";function Z2(){const e=ub(),t=lb(),n=fo(e.breakpoints).reduce((r,o)=>{const i=e.breakpoints[o].includes("px"),s=F2(e.breakpoints[o]),a=i?`${s-.1}px`:sv(s-.1),l=i?`${s}px`:sv(s);return`${r}@media (max-width: ${a}) {.mantine-visible-from-${o} {display: none !important;}}@media (min-width: ${l}) {.mantine-hidden-from-${o} {display: none !important;}}`},"");return q.jsx("style",{"data-mantine-styles":"classes",nonce:t==null?void 0:t(),dangerouslySetInnerHTML:{__html:n}})}function _d(e){return Object.entries(e).map(([t,n])=>`${t}: ${n};`).join("")}function vd(e,t){return(Array.isArray(e)?e:[e]).reduce((r,o)=>`${o}{${r}}`,t)}function eN(e,t){const n=_d(e.variables),r=n?vd(t,n):"",o=_d(e.dark),i=o?vd(`${t}[data-mantine-color-scheme="dark"]`,o):"",s=_d(e.light),a=s?vd(`${t}[data-mantine-color-scheme="light"]`,s):"";return`${r}${i}${a}`}function tN({color:e,theme:t,autoContrast:n}){return(typeof n=="boolean"?n:t.autoContrast)&&eg({color:e||t.primaryColor,theme:t}).isLight?"var(--mantine-color-black)":"var(--mantine-color-white)"}function pv(e,t){return tN({color:e.colors[e.primaryColor][ba(e,t)],theme:e,autoContrast:null})}function Tl({theme:e,color:t,colorScheme:n,name:r=t,withColorValues:o=!0}){if(!e.colors[t])return{};if(n==="light"){const a=ba(e,"light"),l={[`--mantine-color-${r}-text`]:`var(--mantine-color-${r}-filled)`,[`--mantine-color-${r}-filled`]:`var(--mantine-color-${r}-${a})`,[`--mantine-color-${r}-filled-hover`]:`var(--mantine-color-${r}-${a===9?8:a+1})`,[`--mantine-color-${r}-light`]:zo(e.colors[t][a],.1),[`--mantine-color-${r}-light-hover`]:zo(e.colors[t][a],.12),[`--mantine-color-${r}-light-color`]:`var(--mantine-color-${r}-${a})`,[`--mantine-color-${r}-outline`]:`var(--mantine-color-${r}-${a})`,[`--mantine-color-${r}-outline-hover`]:zo(e.colors[t][a],.05)};return o?{[`--mantine-color-${r}-0`]:e.colors[t][0],[`--mantine-color-${r}-1`]:e.colors[t][1],[`--mantine-color-${r}-2`]:e.colors[t][2],[`--mantine-color-${r}-3`]:e.colors[t][3],[`--mantine-color-${r}-4`]:e.colors[t][4],[`--mantine-color-${r}-5`]:e.colors[t][5],[`--mantine-color-${r}-6`]:e.colors[t][6],[`--mantine-color-${r}-7`]:e.colors[t][7],[`--mantine-color-${r}-8`]:e.colors[t][8],[`--mantine-color-${r}-9`]:e.colors[t][9],...l}:l}const i=ba(e,"dark"),s={[`--mantine-color-${r}-text`]:`var(--mantine-color-${r}-4)`,[`--mantine-color-${r}-filled`]:`var(--mantine-color-${r}-${i})`,[`--mantine-color-${r}-filled-hover`]:`var(--mantine-color-${r}-${i===9?8:i+1})`,[`--mantine-color-${r}-light`]:zo(e.colors[t][Math.max(0,i-2)],.15),[`--mantine-color-${r}-light-hover`]:zo(e.colors[t][Math.max(0,i-2)],.2),[`--mantine-color-${r}-light-color`]:`var(--mantine-color-${r}-${Math.max(i-5,0)})`,[`--mantine-color-${r}-outline`]:`var(--mantine-color-${r}-${Math.max(i-4,0)})`,[`--mantine-color-${r}-outline-hover`]:zo(e.colors[t][Math.max(i-4,0)],.05)};return o?{[`--mantine-color-${r}-0`]:e.colors[t][0],[`--mantine-color-${r}-1`]:e.colors[t][1],[`--mantine-color-${r}-2`]:e.colors[t][2],[`--mantine-color-${r}-3`]:e.colors[t][3],[`--mantine-color-${r}-4`]:e.colors[t][4],[`--mantine-color-${r}-5`]:e.colors[t][5],[`--mantine-color-${r}-6`]:e.colors[t][6],[`--mantine-color-${r}-7`]:e.colors[t][7],[`--mantine-color-${r}-8`]:e.colors[t][8],[`--mantine-color-${r}-9`]:e.colors[t][9],...s}:s}function nN(e){return!!e&&typeof e=="object"&&"mantine-virtual-color"in e}function Ho(e,t,n){fo(t).forEach(r=>Object.assign(e,{[`--mantine-${n}-${r}`]:t[r]}))}const fb=e=>{const t=ba(e,"light"),n=e.defaultRadius in e.radius?e.radius[e.defaultRadius]:F(e.defaultRadius),r={variables:{"--mantine-scale":e.scale.toString(),"--mantine-cursor-type":e.cursorType,"--mantine-color-scheme":"light dark","--mantine-webkit-font-smoothing":e.fontSmoothing?"antialiased":"unset","--mantine-moz-font-smoothing":e.fontSmoothing?"grayscale":"unset","--mantine-color-white":e.white,"--mantine-color-black":e.black,"--mantine-line-height":e.lineHeights.md,"--mantine-font-family":e.fontFamily,"--mantine-font-family-monospace":e.fontFamilyMonospace,"--mantine-font-family-headings":e.headings.fontFamily,"--mantine-heading-font-weight":e.headings.fontWeight,"--mantine-heading-text-wrap":e.headings.textWrap,"--mantine-radius-default":n,"--mantine-primary-color-filled":`var(--mantine-color-${e.primaryColor}-filled)`,"--mantine-primary-color-filled-hover":`var(--mantine-color-${e.primaryColor}-filled-hover)`,"--mantine-primary-color-light":`var(--mantine-color-${e.primaryColor}-light)`,"--mantine-primary-color-light-hover":`var(--mantine-color-${e.primaryColor}-light-hover)`,"--mantine-primary-color-light-color":`var(--mantine-color-${e.primaryColor}-light-color)`},light:{"--mantine-primary-color-contrast":pv(e,"light"),"--mantine-color-bright":"var(--mantine-color-black)","--mantine-color-text":e.black,"--mantine-color-body":e.white,"--mantine-color-error":"var(--mantine-color-red-6)","--mantine-color-placeholder":"var(--mantine-color-gray-5)","--mantine-color-anchor":`var(--mantine-color-${e.primaryColor}-${t})`,"--mantine-color-default":"var(--mantine-color-white)","--mantine-color-default-hover":"var(--mantine-color-gray-0)","--mantine-color-default-color":"var(--mantine-color-black)","--mantine-color-default-border":"var(--mantine-color-gray-4)","--mantine-color-dimmed":"var(--mantine-color-gray-6)"},dark:{"--mantine-primary-color-contrast":pv(e,"dark"),"--mantine-color-bright":"var(--mantine-color-white)","--mantine-color-text":"var(--mantine-color-dark-0)","--mantine-color-body":"var(--mantine-color-dark-7)","--mantine-color-error":"var(--mantine-color-red-8)","--mantine-color-placeholder":"var(--mantine-color-dark-3)","--mantine-color-anchor":`var(--mantine-color-${e.primaryColor}-4)`,"--mantine-color-default":"var(--mantine-color-dark-6)","--mantine-color-default-hover":"var(--mantine-color-dark-5)","--mantine-color-default-color":"var(--mantine-color-white)","--mantine-color-default-border":"var(--mantine-color-dark-4)","--mantine-color-dimmed":"var(--mantine-color-dark-2)"}};Ho(r.variables,e.breakpoints,"breakpoint"),Ho(r.variables,e.spacing,"spacing"),Ho(r.variables,e.fontSizes,"font-size"),Ho(r.variables,e.lineHeights,"line-height"),Ho(r.variables,e.shadows,"shadow"),Ho(r.variables,e.radius,"radius"),e.colors[e.primaryColor].forEach((i,s)=>{r.variables[`--mantine-primary-color-${s}`]=`var(--mantine-color-${e.primaryColor}-${s})`}),fo(e.colors).forEach(i=>{const s=e.colors[i];if(nN(s)){Object.assign(r.light,Tl({theme:e,name:s.name,color:s.light,colorScheme:"light",withColorValues:!0})),Object.assign(r.dark,Tl({theme:e,name:s.name,color:s.dark,colorScheme:"dark",withColorValues:!0}));return}s.forEach((a,l)=>{r.variables[`--mantine-color-${i}-${l}`]=a}),Object.assign(r.light,Tl({theme:e,color:i,colorScheme:"light",withColorValues:!1})),Object.assign(r.dark,Tl({theme:e,color:i,colorScheme:"dark",withColorValues:!1}))});const o=e.headings.sizes;return fo(o).forEach(i=>{r.variables[`--mantine-${i}-font-size`]=o[i].fontSize,r.variables[`--mantine-${i}-line-height`]=o[i].lineHeight,r.variables[`--mantine-${i}-font-weight`]=o[i].fontWeight||e.headings.fontWeight}),r};function rN({theme:e,generator:t}){const n=fb(e),r=t==null?void 0:t(e);return r?Qm(n,r):n}const Sd=fb(tg);function oN(e){const t={variables:{},light:{},dark:{}};return fo(e.variables).forEach(n=>{Sd.variables[n]!==e.variables[n]&&(t.variables[n]=e.variables[n])}),fo(e.light).forEach(n=>{Sd.light[n]!==e.light[n]&&(t.light[n]=e.light[n])}),fo(e.dark).forEach(n=>{Sd.dark[n]!==e.dark[n]&&(t.dark[n]=e.dark[n])}),t}function iN(e){return` + ${e}[data-mantine-color-scheme="dark"] { --mantine-color-scheme: dark; } + ${e}[data-mantine-color-scheme="light"] { --mantine-color-scheme: light; } +`}function db({cssVariablesSelector:e,deduplicateCssVariables:t}){const n=ub(),r=lb(),o=j2(),i=rN({theme:n,generator:o}),s=e===":root"&&t,a=s?oN(i):i,l=eN(a,e);return l?q.jsx("style",{"data-mantine-styles":!0,nonce:r==null?void 0:r(),dangerouslySetInnerHTML:{__html:`${l}${s?"":iN(e)}`}}):null}db.displayName="@mantine/CssVariables";function sN(){const e=console.error;console.error=(...t)=>{t.length>1&&typeof t[0]=="string"&&t[0].toLowerCase().includes("extra attributes from the server")&&typeof t[1]=="string"&&t[1].toLowerCase().includes("data-mantine-color-scheme")||e(...t)}}function Wo(e,t){var r;const n=e!=="auto"?e:window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";(r=t())==null||r.setAttribute("data-mantine-color-scheme",n)}function aN({manager:e,defaultColorScheme:t,getRootElement:n,forceColorScheme:r}){const o=P.useRef(),[i,s]=P.useState(()=>e.get(t)),a=r||i,l=P.useCallback(f=>{r||(Wo(f,n),s(f),e.set(f))},[e.set,a,r]),u=P.useCallback(()=>{s(t),Wo(t,n),e.clear()},[e.clear,t]);return P.useEffect(()=>(e.subscribe(l),e.unsubscribe),[e.subscribe,e.unsubscribe]),ob(()=>{Wo(e.get(t),n)},[]),P.useEffect(()=>{var c;if(r)return Wo(r,n),()=>{};r===void 0&&Wo(i,n),o.current=window.matchMedia("(prefers-color-scheme: dark)");const f=d=>{i==="auto"&&Wo(d.matches?"dark":"light",n)};return(c=o.current)==null||c.addEventListener("change",f),()=>{var d;return(d=o.current)==null?void 0:d.removeEventListener("change",f)}},[i,r]),{colorScheme:a,setColorScheme:l,clearColorScheme:u}}function lN({respectReducedMotion:e,getRootElement:t}){ob(()=>{var n;e&&((n=t())==null||n.setAttribute("data-respect-reduced-motion","true"))},[e])}sN();function pb({theme:e,children:t,getStyleNonce:n,withStaticClasses:r=!0,withGlobalClasses:o=!0,deduplicateCssVariables:i=!0,withCssVariables:s=!0,cssVariablesSelector:a=":root",classNamesPrefix:l="mantine",colorSchemeManager:u=Y2(),defaultColorScheme:f="light",getRootElement:c=()=>document.documentElement,cssVariablesResolver:d,forceColorScheme:h,stylesTransform:m}){const{colorScheme:_,setColorScheme:v,clearColorScheme:g}=aN({defaultColorScheme:f,forceColorScheme:h,manager:u,getRootElement:c});return lN({respectReducedMotion:(e==null?void 0:e.respectReducedMotion)||!1,getRootElement:c}),q.jsx(sb.Provider,{value:{colorScheme:_,setColorScheme:v,clearColorScheme:g,getRootElement:c,classNamesPrefix:l,getStyleNonce:n,cssVariablesResolver:d,cssVariablesSelector:a,withStaticClasses:r,stylesTransform:m},children:q.jsxs(cb,{theme:e,children:[s&&q.jsx(db,{cssVariablesSelector:a,deduplicateCssVariables:i}),o&&q.jsx(Z2,{}),t]})})}pb.displayName="@mantine/core/MantineProvider";function hb({to:e,...t}){return q.jsx(O2,{replace:!0,to:e,...t})}const mb=Object.prototype.toString;function Pr(e){switch(mb.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return nr(e,Error)}}function os(e,t){return mb.call(e)===`[object ${t}]`}function gb(e){return os(e,"ErrorEvent")}function hv(e){return os(e,"DOMError")}function uN(e){return os(e,"DOMException")}function Xn(e){return os(e,"String")}function rg(e){return typeof e=="object"&&e!==null&&"__sentry_template_string__"in e&&"__sentry_template_values__"in e}function og(e){return e===null||rg(e)||typeof e!="object"&&typeof e!="function"}function Co(e){return os(e,"Object")}function Yc(e){return typeof Event<"u"&&nr(e,Event)}function cN(e){return typeof Element<"u"&&nr(e,Element)}function fN(e){return os(e,"RegExp")}function Va(e){return!!(e&&e.then&&typeof e.then=="function")}function dN(e){return Co(e)&&"nativeEvent"in e&&"preventDefault"in e&&"stopPropagation"in e}function nr(e,t){try{return e instanceof t}catch{return!1}}function yb(e){return!!(typeof e=="object"&&e!==null&&(e.__isVue||e._isVue))}function po(e,t=0){return typeof e!="string"||t===0||e.length<=t?e:`${e.slice(0,t)}...`}function Ed(e,t){let n=e;const r=n.length;if(r<=150)return n;t>r&&(t=r);let o=Math.max(t-60,0);o<5&&(o=0);let i=Math.min(o+140,r);return i>r-5&&(i=r),i===r&&(o=Math.max(i-140,0)),n=n.slice(o,i),o>0&&(n=`'{snip} ${n}`),ipN(e,r,n))}function hN(e,t,n=250,r,o,i,s){if(!i.exception||!i.exception.values||!s||!nr(s.originalException,Error))return;const a=i.exception.values.length>0?i.exception.values[i.exception.values.length-1]:void 0;a&&(i.exception.values=mN(Wp(e,t,o,s.originalException,r,i.exception.values,a,0),n))}function Wp(e,t,n,r,o,i,s,a){if(i.length>=n+1)return i;let l=[...i];if(nr(r[o],Error)){mv(s,a);const u=e(t,r[o]),f=l.length;gv(u,o,f,a),l=Wp(e,t,n,r[o],o,[u,...l],u,f)}return Array.isArray(r.errors)&&r.errors.forEach((u,f)=>{if(nr(u,Error)){mv(s,a);const c=e(t,u),d=l.length;gv(c,`errors[${f}]`,d,a),l=Wp(e,t,n,u,o,[c,...l],c,d)}}),l}function mv(e,t){e.mechanism=e.mechanism||{type:"generic",handled:!0},e.mechanism={...e.mechanism,...e.type==="AggregateError"&&{is_exception_group:!0},exception_id:t}}function gv(e,t,n,r){e.mechanism=e.mechanism||{type:"generic",handled:!0},e.mechanism={...e.mechanism,type:"chained",source:t,exception_id:n,parent_id:r}}function mN(e,t){return e.map(n=>(n.value&&(n.value=po(n.value,t)),n))}const Jn="8.7.0",K=globalThis;function Xc(e,t,n){const r=n||K,o=r.__SENTRY__=r.__SENTRY__||{},i=o[Jn]=o[Jn]||{};return i[e]||(i[e]=t())}const wi=K,gN=80;function Br(e,t={}){if(!e)return"";try{let n=e;const r=5,o=[];let i=0,s=0;const a=" > ",l=a.length;let u;const f=Array.isArray(t)?t:t.keyAttrs,c=!Array.isArray(t)&&t.maxStringLength||gN;for(;n&&i++1&&s+o.length*l+u.length>=c));)o.push(u),s+=u.length,n=n.parentNode;return o.reverse().join(a)}catch{return""}}function yN(e,t){const n=e,r=[];let o,i,s,a,l;if(!n||!n.tagName)return"";if(wi.HTMLElement&&n instanceof HTMLElement&&n.dataset){if(n.dataset.sentryComponent)return n.dataset.sentryComponent;if(n.dataset.sentryElement)return n.dataset.sentryElement}r.push(n.tagName.toLowerCase());const u=t&&t.length?t.filter(c=>n.getAttribute(c)).map(c=>[c,n.getAttribute(c)]):null;if(u&&u.length)u.forEach(c=>{r.push(`[${c[0]}="${c[1]}"]`)});else if(n.id&&r.push(`#${n.id}`),o=n.className,o&&Xn(o))for(i=o.split(/\s+/),l=0;l"u"||__SENTRY_DEBUG__,vN="Sentry Logger ",Xu=["debug","info","warn","error","log","assert","trace"],Ju={};function zr(e){if(!("console"in K))return e();const t=K.console,n={},r=Object.keys(Ju);r.forEach(o=>{const i=Ju[o];n[o]=t[o],t[o]=i});try{return e()}finally{r.forEach(o=>{t[o]=n[o]})}}function SN(){let e=!1;const t={enable:()=>{e=!0},disable:()=>{e=!1},isEnabled:()=>e};return is?Xu.forEach(n=>{t[n]=(...r)=>{e&&zr(()=>{K.console[n](`${vN}[${n}]:`,...r)})}}):Xu.forEach(n=>{t[n]=()=>{}}),t}const C=SN(),EN=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/;function wN(e){return e==="http"||e==="https"}function Po(e,t=!1){const{host:n,path:r,pass:o,port:i,projectId:s,protocol:a,publicKey:l}=e;return`${a}://${l}${t&&o?`:${o}`:""}@${n}${i?`:${i}`:""}/${r&&`${r}/`}${s}`}function Sb(e){const t=EN.exec(e);if(!t){zr(()=>{console.error(`Invalid Sentry Dsn: ${e}`)});return}const[n,r,o="",i,s="",a]=t.slice(1);let l="",u=a;const f=u.split("/");if(f.length>1&&(l=f.slice(0,-1).join("/"),u=f.pop()),u){const c=u.match(/^\d+/);c&&(u=c[0])}return Eb({host:i,pass:o,path:l,projectId:u,port:s,protocol:n,publicKey:r})}function Eb(e){return{protocol:e.protocol,publicKey:e.publicKey||"",pass:e.pass||"",host:e.host,port:e.port||"",path:e.path||"",projectId:e.projectId}}function bN(e){if(!is)return!0;const{port:t,projectId:n,protocol:r}=e;return["protocol","publicKey","host","projectId"].find(s=>e[s]?!1:(C.error(`Invalid Sentry Dsn: ${s} missing`),!0))?!1:n.match(/^\d+$/)?wN(r)?t&&isNaN(parseInt(t,10))?(C.error(`Invalid Sentry Dsn: Invalid port ${t}`),!1):!0:(C.error(`Invalid Sentry Dsn: Invalid protocol ${r}`),!1):(C.error(`Invalid Sentry Dsn: Invalid projectId ${n}`),!1)}function wb(e){const t=typeof e=="string"?Sb(e):Eb(e);if(!(!t||!bN(t)))return t}class On extends Error{constructor(t,n="warn"){super(t),this.message=t,this.name=new.target.prototype.constructor.name,Object.setPrototypeOf(this,new.target.prototype),this.logLevel=n}}function ct(e,t,n){if(!(t in e))return;const r=e[t],o=n(r);typeof o=="function"&&bb(o,r),e[t]=o}function Vt(e,t,n){try{Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0})}catch{is&&C.log(`Failed to add non-enumerable property "${t}" to object`,e)}}function bb(e,t){try{const n=t.prototype||{};e.prototype=t.prototype=n,Vt(e,"__sentry_original__",t)}catch{}}function ig(e){return e.__sentry_original__}function TN(e){return Object.keys(e).map(t=>`${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`).join("&")}function Tb(e){if(Pr(e))return{message:e.message,name:e.name,stack:e.stack,..._v(e)};if(Yc(e)){const t={type:e.type,target:yv(e.target),currentTarget:yv(e.currentTarget),..._v(e)};return typeof CustomEvent<"u"&&nr(e,CustomEvent)&&(t.detail=e.detail),t}else return e}function yv(e){try{return cN(e)?Br(e):Object.prototype.toString.call(e)}catch{return""}}function _v(e){if(typeof e=="object"&&e!==null){const t={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}else return{}}function CN(e,t=40){const n=Object.keys(Tb(e));if(n.sort(),!n.length)return"[object has no keys]";if(n[0].length>=t)return po(n[0],t);for(let r=n.length;r>0;r--){const o=n.slice(0,r).join(", ");if(!(o.length>t))return r===n.length?o:po(o,t)}return""}function Qe(e){return Vp(e,new Map)}function Vp(e,t){if(kN(e)){const n=t.get(e);if(n!==void 0)return n;const r={};t.set(e,r);for(const o of Object.keys(e))typeof e[o]<"u"&&(r[o]=Vp(e[o],t));return r}if(Array.isArray(e)){const n=t.get(e);if(n!==void 0)return n;const r=[];return t.set(e,r),e.forEach(o=>{r.push(Vp(o,t))}),r}return e}function kN(e){if(!Co(e))return!1;try{const t=Object.getPrototypeOf(e).constructor.name;return!t||t==="Object"}catch{return!0}}const Cb=50,ar="?",vv=/\(error: (.*)\)/,Sv=/captureMessage|captureException/;function kb(...e){const t=e.sort((n,r)=>n[0]-r[0]).map(n=>n[1]);return(n,r=0,o=0)=>{const i=[],s=n.split(` +`);for(let a=r;a1024)continue;const u=vv.test(l)?l.replace(vv,"$1"):l;if(!u.match(/\S*Error: /)){for(const f of t){const c=f(u);if(c){i.push(c);break}}if(i.length>=Cb+o)break}}return IN(i.slice(o))}}function xN(e){return Array.isArray(e)?kb(...e):e}function IN(e){if(!e.length)return[];const t=Array.from(e);return/sentryWrapped/.test(t[t.length-1].function||"")&&t.pop(),t.reverse(),Sv.test(t[t.length-1].function||"")&&(t.pop(),Sv.test(t[t.length-1].function||"")&&t.pop()),t.slice(0,Cb).map(n=>({...n,filename:n.filename||t[t.length-1].filename,function:n.function||ar}))}const wd="";function rr(e){try{return!e||typeof e!="function"?wd:e.name||wd}catch{return wd}}const tu={},Ev={};function Lo(e,t){tu[e]=tu[e]||[],tu[e].push(t)}function Do(e,t){Ev[e]||(t(),Ev[e]=!0)}function gn(e,t){const n=e&&tu[e];if(n)for(const r of n)try{r(t)}catch(o){is&&C.error(`Error while triggering instrumentation handler. +Type: ${e} +Name: ${rr(r)} +Error:`,o)}}function xb(e){const t="console";Lo(t,e),Do(t,RN)}function RN(){"console"in K&&Xu.forEach(function(e){e in K.console&&ct(K.console,e,function(t){return Ju[e]=t,function(...n){gn("console",{args:n,level:e});const o=Ju[e];o&&o.apply(K.console,n)}})})}const Qu=K;function Ib(){if(!("fetch"in Qu))return!1;try{return new Headers,new Request("http://www.example.com"),new Response,!0}catch{return!1}}function Gp(e){return e&&/^function\s+\w+\(\)\s+\{\s+\[native code\]\s+\}$/.test(e.toString())}function Rb(){if(typeof EdgeRuntime=="string")return!0;if(!Ib())return!1;if(Gp(Qu.fetch))return!0;let e=!1;const t=Qu.document;if(t&&typeof t.createElement=="function")try{const n=t.createElement("iframe");n.hidden=!0,t.head.appendChild(n),n.contentWindow&&n.contentWindow.fetch&&(e=Gp(n.contentWindow.fetch)),t.head.removeChild(n)}catch(n){is&&C.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",n)}return e}function $N(){return"ReportingObserver"in Qu}const $b=1e3;function Ga(){return Date.now()/$b}function ON(){const{performance:e}=K;if(!e||!e.now)return Ga;const t=Date.now()-e.now(),n=e.timeOrigin==null?t:e.timeOrigin;return()=>(n+e.now())/$b}const Re=ON(),kt=(()=>{const{performance:e}=K;if(!e||!e.now)return;const t=3600*1e3,n=e.now(),r=Date.now(),o=e.timeOrigin?Math.abs(e.timeOrigin+n-r):t,i=o{const s={...o,endTimestamp:Re()*1e3,response:i};return gn("fetch",s),i},i=>{const s={...o,endTimestamp:Re()*1e3,error:i};throw gn("fetch",s),i})}})}function qp(e,t){return!!e&&typeof e=="object"&&!!e[t]}function wv(e){return typeof e=="string"?e:e?qp(e,"url")?e.url:e.toString?e.toString():"":""}function MN(e){if(e.length===0)return{method:"GET",url:""};if(e.length===2){const[n,r]=e;return{url:wv(n),method:qp(r,"method")?String(r.method).toUpperCase():"GET"}}const t=e[0];return{url:wv(t),method:qp(t,"method")?String(t.method).toUpperCase():"GET"}}let Cl=null;function Ob(e){const t="error";Lo(t,e),Do(t,NN)}function NN(){Cl=K.onerror,K.onerror=function(e,t,n,r,o){return gn("error",{column:r,error:o,line:n,msg:e,url:t}),Cl&&!Cl.__SENTRY_LOADER__?Cl.apply(this,arguments):!1},K.onerror.__SENTRY_INSTRUMENTED__=!0}let kl=null;function Ab(e){const t="unhandledrejection";Lo(t,e),Do(t,PN)}function PN(){kl=K.onunhandledrejection,K.onunhandledrejection=function(e){return gn("unhandledrejection",e),kl&&!kl.__SENTRY_LOADER__?kl.apply(this,arguments):!0},K.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}function LN(){return typeof __SENTRY_BROWSER_BUNDLE__<"u"&&!!__SENTRY_BROWSER_BUNDLE__}function DN(){return"npm"}function FN(){return!LN()&&Object.prototype.toString.call(typeof process<"u"?process:0)==="[object process]"}function Kp(){return typeof window<"u"&&(!FN()||UN())}function UN(){return K.process!==void 0&&K.process.type==="renderer"}function jN(){const e=typeof WeakSet=="function",t=e?new WeakSet:[];function n(o){if(e)return t.has(o)?!0:(t.add(o),!1);for(let i=0;iMath.random()*16;try{if(t&&t.randomUUID)return t.randomUUID().replace(/-/g,"");t&&t.getRandomValues&&(n=()=>{const r=new Uint8Array(1);return t.getRandomValues(r),r[0]})}catch{}return([1e7]+1e3+4e3+8e3+1e11).replace(/[018]/g,r=>(r^(n()&15)>>r/4).toString(16))}function Mb(e){return e.exception&&e.exception.values?e.exception.values[0]:void 0}function to(e){const{message:t,event_id:n}=e;if(t)return t;const r=Mb(e);return r?r.type&&r.value?`${r.type}: ${r.value}`:r.type||r.value||n||"":n||""}function Yp(e,t,n){const r=e.exception=e.exception||{},o=r.values=r.values||[],i=o[0]=o[0]||{};i.value||(i.value=t||""),i.type||(i.type=n||"Error")}function ko(e,t){const n=Mb(e);if(!n)return;const r={type:"generic",handled:!0},o=n.mechanism;if(n.mechanism={...r,...o,...t},t&&"data"in t){const i={...o&&o.data,...t.data};n.mechanism.data=i}}function BN(e,t,n=5){if(t.lineno===void 0)return;const r=e.length,o=Math.max(Math.min(r-1,t.lineno-1),0);t.pre_context=e.slice(Math.max(0,o-n),o).map(i=>Ed(i,0)),t.context_line=Ed(e[Math.min(r-1,o)],t.colno||0),t.post_context=e.slice(Math.min(o+1,r),o+1+n).map(i=>Ed(i,0))}function bv(e){if(e&&e.__sentry_captured__)return!0;try{Vt(e,"__sentry_captured__",!0)}catch{}return!1}function Nb(e){return Array.isArray(e)?e:[e]}function fn(e,t=100,n=1/0){try{return Xp("",e,t,n)}catch(r){return{ERROR:`**non-serializable** (${r})`}}}function Pb(e,t=3,n=100*1024){const r=fn(e,t);return VN(r)>n?Pb(e,t-1,n):r}function Xp(e,t,n=1/0,r=1/0,o=jN()){const[i,s]=o;if(t==null||["number","boolean","string"].includes(typeof t)&&!Number.isNaN(t))return t;const a=zN(e,t);if(!a.startsWith("[object "))return a;if(t.__sentry_skip_normalization__)return t;const l=typeof t.__sentry_override_normalization_depth__=="number"?t.__sentry_override_normalization_depth__:n;if(l===0)return a.replace("object ","");if(i(t))return"[Circular ~]";const u=t;if(u&&typeof u.toJSON=="function")try{const h=u.toJSON();return Xp("",h,l-1,r,o)}catch{}const f=Array.isArray(t)?[]:{};let c=0;const d=Tb(t);for(const h in d){if(!Object.prototype.hasOwnProperty.call(d,h))continue;if(c>=r){f[h]="[MaxProperties ~]";break}const m=d[h];f[h]=Xp(h,m,l-1,r,o),c++}return s(t),f}function zN(e,t){try{if(e==="domain"&&t&&typeof t=="object"&&t._events)return"[Domain]";if(e==="domainEmitter")return"[DomainEmitter]";if(typeof global<"u"&&t===global)return"[Global]";if(typeof window<"u"&&t===window)return"[Window]";if(typeof document<"u"&&t===document)return"[Document]";if(yb(t))return"[VueViewModel]";if(dN(t))return"[SyntheticEvent]";if(typeof t=="number"&&t!==t)return"[NaN]";if(typeof t=="function")return`[Function: ${rr(t)}]`;if(typeof t=="symbol")return`[${String(t)}]`;if(typeof t=="bigint")return`[BigInt: ${String(t)}]`;const n=HN(t);return/^HTML(\w*)Element$/.test(n)?`[HTMLElement: ${n}]`:`[object ${n}]`}catch(n){return`**non-serializable** (${n})`}}function HN(e){const t=Object.getPrototypeOf(e);return t?t.constructor.name:"null prototype"}function WN(e){return~-encodeURI(e).split(/%..|./).length}function VN(e){return WN(JSON.stringify(e))}function GN(e,t){let n=0;for(let r=e.length-1;r>=0;r--){const o=e[r];o==="."?e.splice(r,1):o===".."?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}const qN=/^(\S+:\\|\/?)([\s\S]*?)((?:\.{1,2}|[^/\\]+?|)(\.[^./\\]*|))(?:[/\\]*)$/;function KN(e){const t=e.length>1024?`${e.slice(-1024)}`:e,n=qN.exec(t);return n?n.slice(1):[]}function Tv(...e){let t="",n=!1;for(let r=e.length-1;r>=-1&&!n;r--){const o=r>=0?e[r]:"/";o&&(t=`${o}/${t}`,n=o.charAt(0)==="/")}return t=GN(t.split("/").filter(r=>!!r),!n).join("/"),(n?"/":"")+t||"."}function Cv(e){let t=0;for(;t=0&&e[n]==="";n--);return t>n?[]:e.slice(t,n-t+1)}function YN(e,t){e=Tv(e).slice(1),t=Tv(t).slice(1);const n=Cv(e.split("/")),r=Cv(t.split("/")),o=Math.min(n.length,r.length);let i=o;for(let a=0;a{t(e)})}function Zu(e){return new Qt((t,n)=>{n(e)})}class Qt{constructor(t){Qt.prototype.__init.call(this),Qt.prototype.__init2.call(this),Qt.prototype.__init3.call(this),Qt.prototype.__init4.call(this),this._state=Wn.PENDING,this._handlers=[];try{t(this._resolve,this._reject)}catch(n){this._reject(n)}}then(t,n){return new Qt((r,o)=>{this._handlers.push([!1,i=>{if(!t)r(i);else try{r(t(i))}catch(s){o(s)}},i=>{if(!n)o(i);else try{r(n(i))}catch(s){o(s)}}]),this._executeHandlers()})}catch(t){return this.then(n=>n,t)}finally(t){return new Qt((n,r)=>{let o,i;return this.then(s=>{i=!1,o=s,t&&t()},s=>{i=!0,o=s,t&&t()}).then(()=>{if(i){r(o);return}n(o)})})}__init(){this._resolve=t=>{this._setResult(Wn.RESOLVED,t)}}__init2(){this._reject=t=>{this._setResult(Wn.REJECTED,t)}}__init3(){this._setResult=(t,n)=>{if(this._state===Wn.PENDING){if(Va(n)){n.then(this._resolve,this._reject);return}this._state=t,this._value=n,this._executeHandlers()}}}__init4(){this._executeHandlers=()=>{if(this._state===Wn.PENDING)return;const t=this._handlers.slice();this._handlers=[],t.forEach(n=>{n[0]||(this._state===Wn.RESOLVED&&n[1](this._value),this._state===Wn.REJECTED&&n[2](this._value),n[0]=!0)})}}}function JN(e){const t=[];function n(){return e===void 0||t.lengthr(a)).then(null,()=>r(a).then(null,()=>{})),a}function i(s){return new Qt((a,l)=>{let u=t.length;if(!u)return a(!0);const f=setTimeout(()=>{s&&s>0&&a(!1)},s);t.forEach(c=>{or(c).then(()=>{--u||(clearTimeout(f),a(!0))},l)})})}return{$:t,add:o,drain:i}}function ho(e){if(!e)return{};const t=e.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!t)return{};const n=t[6]||"",r=t[8]||"";return{host:t[4],path:t[5],protocol:t[2],search:n,hash:r,relative:t[5]+n+r}}function QN(e){return e.split(/[\?#]/,1)[0]}function kv(e){return e.split(/\\?\//).filter(t=>t.length>0&&t!==",").length}const ZN=["fatal","error","warning","log","info","debug"];function Lb(e){return e==="warn"?"warning":ZN.includes(e)?e:"log"}const Jp="baggage",Db="sentry-",eP=/^sentry-/,tP=8192;function nP(e){const t=rP(e);if(!t)return;const n=Object.entries(t).reduce((r,[o,i])=>{if(o.match(eP)){const s=o.slice(Db.length);r[s]=i}return r},{});if(Object.keys(n).length>0)return n}function ag(e){if(!e)return;const t=Object.entries(e).reduce((n,[r,o])=>(o&&(n[`${Db}${r}`]=o),n),{});return oP(t)}function rP(e){if(!(!e||!Xn(e)&&!Array.isArray(e)))return Array.isArray(e)?e.reduce((t,n)=>{const r=xv(n);for(const o of Object.keys(r))t[o]=r[o];return t},{}):xv(e)}function xv(e){return e.split(",").map(t=>t.split("=").map(n=>decodeURIComponent(n.trim()))).reduce((t,[n,r])=>(t[n]=r,t),{})}function oP(e){if(Object.keys(e).length!==0)return Object.entries(e).reduce((t,[n,r],o)=>{const i=`${encodeURIComponent(n)}=${encodeURIComponent(r)}`,s=o===0?i:`${t},${i}`;return s.length>tP?(is&&C.warn(`Not adding key: ${n} with val: ${r} to baggage header due to exceeding baggage size limits.`),t):s},"")}const iP=new RegExp("^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$");function sP(e){if(!e)return;const t=e.match(iP);if(!t)return;let n;return t[3]==="1"?n=!0:t[3]==="0"&&(n=!1),{traceId:t[1],parentSampled:n,parentSpanId:t[2]}}function Fb(e,t){const n=sP(e),r=nP(t),{traceId:o,parentSpanId:i,parentSampled:s}=n||{};return n?{traceId:o||Ce(),parentSpanId:i||Ce().substring(16),spanId:Ce().substring(16),sampled:s,dsc:r||{}}:{traceId:o||Ce(),spanId:Ce().substring(16)}}function lg(e=Ce(),t=Ce().substring(16),n){let r="";return n!==void 0&&(r=n?"-1":"-0"),`${e}-${t}${r}`}function lr(e,t=[]){return[e,t]}function aP(e,t){const[n,r]=e;return[n,[...r,t]]}function Pi(e,t){const n=e[1];for(const r of n){const o=r[0].type;if(t(r,o))return!0}return!1}function Iv(e,t){return Pi(e,(n,r)=>t.includes(r))}function ec(e){return K.__SENTRY__&&K.__SENTRY__.encodePolyfill?K.__SENTRY__.encodePolyfill(e):new TextEncoder().encode(e)}function lP(e){return K.__SENTRY__&&K.__SENTRY__.decodePolyfill?K.__SENTRY__.decodePolyfill(e):new TextDecoder().decode(e)}function Qp(e){const[t,n]=e;let r=JSON.stringify(t);function o(i){typeof r=="string"?r=typeof i=="string"?r+i:[ec(r),i]:r.push(typeof i=="string"?ec(i):i)}for(const i of n){const[s,a]=i;if(o(` +${JSON.stringify(s)} +`),typeof a=="string"||a instanceof Uint8Array)o(a);else{let l;try{l=JSON.stringify(a)}catch{l=JSON.stringify(fn(a))}o(l)}}return typeof r=="string"?r:uP(r)}function uP(e){const t=e.reduce((o,i)=>o+i.length,0),n=new Uint8Array(t);let r=0;for(const o of e)n.set(o,r),r+=o.length;return n}function cP(e){let t=typeof e=="string"?ec(e):e;function n(s){const a=t.subarray(0,s);return t=t.subarray(s+1),a}function r(){let s=t.indexOf(10);return s<0&&(s=t.length),JSON.parse(lP(n(s)))}const o=r(),i=[];for(;t.length;){const s=r(),a=typeof s.length=="number"?s.length:void 0;i.push([s,a?n(a):r()])}return[o,i]}function fP(e){return[{type:"span"},e]}function dP(e){const t=typeof e.data=="string"?ec(e.data):e.data;return[Qe({type:"attachment",length:t.length,filename:e.filename,content_type:e.contentType,attachment_type:e.attachmentType}),t]}const pP={session:"session",sessions:"session",attachment:"attachment",transaction:"transaction",event:"error",client_report:"internal",user_report:"default",profile:"profile",replay_event:"replay",replay_recording:"replay",check_in:"monitor",feedback:"feedback",span:"span",statsd:"metric_bucket"};function Rv(e){return pP[e]}function ug(e){if(!e||!e.sdk)return;const{name:t,version:n}=e.sdk;return{name:t,version:n}}function Ub(e,t,n,r){const o=e.sdkProcessingMetadata&&e.sdkProcessingMetadata.dynamicSamplingContext;return{event_id:e.event_id,sent_at:new Date().toISOString(),...t&&{sdk:t},...!!n&&r&&{dsn:Po(r)},...o&&{trace:Qe({...o})}}}function hP(e,t,n){const r=[{type:"client_report"},{timestamp:n||Ga(),discarded_events:e}];return lr(t?{dsn:t}:{},[r])}const mP=60*1e3;function jb(e,t=Date.now()){const n=parseInt(`${e}`,10);if(!isNaN(n))return n*1e3;const r=Date.parse(`${e}`);return isNaN(r)?mP:r-t}function gP(e,t){return e[t]||e.all||0}function Bb(e,t,n=Date.now()){return gP(e,t)>n}function zb(e,{statusCode:t,headers:n},r=Date.now()){const o={...e},i=n&&n["x-sentry-rate-limits"],s=n&&n["retry-after"];if(i)for(const a of i.trim().split(",")){const[l,u,,,f]=a.split(":",5),c=parseInt(l,10),d=(isNaN(c)?60:c)*1e3;if(!u)o.all=r+d;else for(const h of u.split(";"))h==="metric_bucket"?(!f||f.split(";").includes("custom"))&&(o[h]=r+d):o[h]=r+d}else s?o.all=r+jb(s,r):t===429&&(o.all=r+60*1e3);return o}function yP(e,t){return e??t()}function nu(e){let t,n=e[0],r=1;for(;rn.call(t,...s)),t=void 0)}return n}function Ta(){return{traceId:Ce(),spanId:Ce().substring(16)}}const xl=K;function _P(){const e=xl.chrome,t=e&&e.app&&e.app.runtime,n="history"in xl&&!!xl.history.pushState&&!!xl.history.replaceState;return!t&&n}const X=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__;function Fo(){return cg(K),K}function cg(e){const t=e.__SENTRY__=e.__SENTRY__||{};return t.version=t.version||Jn,t[Jn]=t[Jn]||{}}function vP(e){const t=Re(),n={sid:Ce(),init:!0,timestamp:t,started:t,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>EP(n)};return e&&Li(n,e),n}function Li(e,t={}){if(t.user&&(!e.ipAddress&&t.user.ip_address&&(e.ipAddress=t.user.ip_address),!e.did&&!t.did&&(e.did=t.user.id||t.user.email||t.user.username)),e.timestamp=t.timestamp||Re(),t.abnormal_mechanism&&(e.abnormal_mechanism=t.abnormal_mechanism),t.ignoreDuration&&(e.ignoreDuration=t.ignoreDuration),t.sid&&(e.sid=t.sid.length===32?t.sid:Ce()),t.init!==void 0&&(e.init=t.init),!e.did&&t.did&&(e.did=`${t.did}`),typeof t.started=="number"&&(e.started=t.started),e.ignoreDuration)e.duration=void 0;else if(typeof t.duration=="number")e.duration=t.duration;else{const n=e.timestamp-e.started;e.duration=n>=0?n:0}t.release&&(e.release=t.release),t.environment&&(e.environment=t.environment),!e.ipAddress&&t.ipAddress&&(e.ipAddress=t.ipAddress),!e.userAgent&&t.userAgent&&(e.userAgent=t.userAgent),typeof t.errors=="number"&&(e.errors=t.errors),t.status&&(e.status=t.status)}function SP(e,t){let n={};t?n={status:t}:e.status==="ok"&&(n={status:"exited"}),Li(e,n)}function EP(e){return Qe({sid:`${e.sid}`,init:e.init,started:new Date(e.started*1e3).toISOString(),timestamp:new Date(e.timestamp*1e3).toISOString(),status:e.status,errors:e.errors,did:typeof e.did=="number"||typeof e.did=="string"?`${e.did}`:void 0,duration:e.duration,abnormal_mechanism:e.abnormal_mechanism,attrs:{release:e.release,environment:e.environment,ip_address:e.ipAddress,user_agent:e.userAgent}})}const Zp="_sentrySpan";function xo(e,t){t?Vt(e,Zp,t):delete e[Zp]}function tc(e){return e[Zp]}const wP=100;class fg{constructor(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._attachments=[],this._user={},this._tags={},this._extra={},this._contexts={},this._sdkProcessingMetadata={},this._propagationContext=Ta()}clone(){const t=new fg;return t._breadcrumbs=[...this._breadcrumbs],t._tags={...this._tags},t._extra={...this._extra},t._contexts={...this._contexts},t._user=this._user,t._level=this._level,t._session=this._session,t._transactionName=this._transactionName,t._fingerprint=this._fingerprint,t._eventProcessors=[...this._eventProcessors],t._requestSession=this._requestSession,t._attachments=[...this._attachments],t._sdkProcessingMetadata={...this._sdkProcessingMetadata},t._propagationContext={...this._propagationContext},t._client=this._client,t._lastEventId=this._lastEventId,xo(t,tc(this)),t}setClient(t){this._client=t}setLastEventId(t){this._lastEventId=t}getClient(){return this._client}lastEventId(){return this._lastEventId}addScopeListener(t){this._scopeListeners.push(t)}addEventProcessor(t){return this._eventProcessors.push(t),this}setUser(t){return this._user=t||{email:void 0,id:void 0,ip_address:void 0,username:void 0},this._session&&Li(this._session,{user:t}),this._notifyScopeListeners(),this}getUser(){return this._user}getRequestSession(){return this._requestSession}setRequestSession(t){return this._requestSession=t,this}setTags(t){return this._tags={...this._tags,...t},this._notifyScopeListeners(),this}setTag(t,n){return this._tags={...this._tags,[t]:n},this._notifyScopeListeners(),this}setExtras(t){return this._extra={...this._extra,...t},this._notifyScopeListeners(),this}setExtra(t,n){return this._extra={...this._extra,[t]:n},this._notifyScopeListeners(),this}setFingerprint(t){return this._fingerprint=t,this._notifyScopeListeners(),this}setLevel(t){return this._level=t,this._notifyScopeListeners(),this}setTransactionName(t){return this._transactionName=t,this._notifyScopeListeners(),this}setContext(t,n){return n===null?delete this._contexts[t]:this._contexts[t]=n,this._notifyScopeListeners(),this}setSession(t){return t?this._session=t:delete this._session,this._notifyScopeListeners(),this}getSession(){return this._session}update(t){if(!t)return this;const n=typeof t=="function"?t(this):t,[r,o]=n instanceof ir?[n.getScopeData(),n.getRequestSession()]:Co(n)?[t,t.requestSession]:[],{tags:i,extra:s,user:a,contexts:l,level:u,fingerprint:f=[],propagationContext:c}=r||{};return this._tags={...this._tags,...i},this._extra={...this._extra,...s},this._contexts={...this._contexts,...l},a&&Object.keys(a).length&&(this._user=a),u&&(this._level=u),f.length&&(this._fingerprint=f),c&&(this._propagationContext=c),o&&(this._requestSession=o),this}clear(){return this._breadcrumbs=[],this._tags={},this._extra={},this._user={},this._contexts={},this._level=void 0,this._transactionName=void 0,this._fingerprint=void 0,this._requestSession=void 0,this._session=void 0,xo(this,void 0),this._attachments=[],this._propagationContext=Ta(),this._notifyScopeListeners(),this}addBreadcrumb(t,n){const r=typeof n=="number"?n:wP;if(r<=0)return this;const o={timestamp:Ga(),...t},i=this._breadcrumbs;return i.push(o),this._breadcrumbs=i.length>r?i.slice(-r):i,this._notifyScopeListeners(),this}getLastBreadcrumb(){return this._breadcrumbs[this._breadcrumbs.length-1]}clearBreadcrumbs(){return this._breadcrumbs=[],this._notifyScopeListeners(),this}addAttachment(t){return this._attachments.push(t),this}clearAttachments(){return this._attachments=[],this}getScopeData(){return{breadcrumbs:this._breadcrumbs,attachments:this._attachments,contexts:this._contexts,tags:this._tags,extra:this._extra,user:this._user,level:this._level,fingerprint:this._fingerprint||[],eventProcessors:this._eventProcessors,propagationContext:this._propagationContext,sdkProcessingMetadata:this._sdkProcessingMetadata,transactionName:this._transactionName,span:tc(this)}}setSDKProcessingMetadata(t){return this._sdkProcessingMetadata={...this._sdkProcessingMetadata,...t},this}setPropagationContext(t){return this._propagationContext=t,this}getPropagationContext(){return this._propagationContext}captureException(t,n){const r=n&&n.event_id?n.event_id:Ce();if(!this._client)return C.warn("No client configured on scope - will not capture exception!"),r;const o=new Error("Sentry syntheticException");return this._client.captureException(t,{originalException:t,syntheticException:o,...n,event_id:r},this),r}captureMessage(t,n,r){const o=r&&r.event_id?r.event_id:Ce();if(!this._client)return C.warn("No client configured on scope - will not capture message!"),o;const i=new Error(t);return this._client.captureMessage(t,n,{originalException:t,syntheticException:i,...r,event_id:o},this),o}captureEvent(t,n){const r=n&&n.event_id?n.event_id:Ce();return this._client?(this._client.captureEvent(t,{...n,event_id:r},this),r):(C.warn("No client configured on scope - will not capture event!"),r)}_notifyScopeListeners(){this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach(t=>{t(this)}),this._notifyingListeners=!1)}}const ir=fg;function bP(){return Xc("defaultCurrentScope",()=>new ir)}function TP(){return Xc("defaultIsolationScope",()=>new ir)}class CP{constructor(t,n){let r;t?r=t:r=new ir;let o;n?o=n:o=new ir,this._stack=[{scope:r}],this._isolationScope=o}withScope(t){const n=this._pushScope();let r;try{r=t(n)}catch(o){throw this._popScope(),o}return Va(r)?r.then(o=>(this._popScope(),o),o=>{throw this._popScope(),o}):(this._popScope(),r)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this._isolationScope}getStack(){return this._stack}getStackTop(){return this._stack[this._stack.length-1]}_pushScope(){const t=this.getScope().clone();return this.getStack().push({client:this.getClient(),scope:t}),t}_popScope(){return this.getStack().length<=1?!1:!!this.getStack().pop()}}function Di(){const e=Fo(),t=cg(e);return t.stack=t.stack||new CP(bP(),TP())}function kP(e){return Di().withScope(e)}function xP(e,t){const n=Di();return n.withScope(()=>(n.getStackTop().scope=e,t(e)))}function $v(e){return Di().withScope(()=>e(Di().getIsolationScope()))}function IP(){return{withIsolationScope:$v,withScope:kP,withSetScope:xP,withSetIsolationScope:(e,t)=>$v(t),getCurrentScope:()=>Di().getScope(),getIsolationScope:()=>Di().getIsolationScope()}}function ss(e){const t=cg(e);return t.acs?t.acs:IP()}function re(){const e=Fo();return ss(e).getCurrentScope()}function Ke(){const e=Fo();return ss(e).getIsolationScope()}function Jc(){return Xc("globalScope",()=>new ir)}function wn(...e){const t=Fo(),n=ss(t);if(e.length===2){const[r,o]=e;return r?n.withSetScope(r,o):n.withScope(o)}return n.withScope(e[0])}function RP(...e){const t=Fo(),n=ss(t);if(e.length===2){const[r,o]=e;return r?n.withSetIsolationScope(r,o):n.withIsolationScope(o)}return n.withIsolationScope(e[0])}function z(){return re().getClient()}const eh="_sentryMetrics";function th(e){const t=e[eh];if(!t)return;const n={};for(const[,[r,o]]of t)n[r]||(n[r]=[]),n[r].push(Qe(o));return n}function $P(e,t,n,r,o,i,s){const l=e[eh]||(e[eh]=new Map),u=`${t}:${n}@${o}`,f=l.get(s);if(f){const[,c]=f;l.set(s,[u,{min:Math.min(c.min,r),max:Math.max(c.max,r),count:c.count+=1,sum:c.sum+=r,tags:c.tags}])}else l.set(s,[u,{min:r,max:r,count:1,sum:r,tags:i}])}const Ge="sentry.source",dg="sentry.sample_rate",Pt="sentry.op",ge="sentry.origin",nh="sentry.idle_span_finish_reason",pg="sentry.measurement_unit",hg="sentry.measurement_value",OP="sentry.profile_id",Hb="sentry.exclusive_time",AP=0,Wb=1,Ye=2;function Vb(e){if(e<400&&e>=100)return{code:Wb};if(e>=400&&e<500)switch(e){case 401:return{code:Ye,message:"unauthenticated"};case 403:return{code:Ye,message:"permission_denied"};case 404:return{code:Ye,message:"not_found"};case 409:return{code:Ye,message:"already_exists"};case 413:return{code:Ye,message:"failed_precondition"};case 429:return{code:Ye,message:"resource_exhausted"};case 499:return{code:Ye,message:"cancelled"};default:return{code:Ye,message:"invalid_argument"}}if(e>=500&&e<600)switch(e){case 501:return{code:Ye,message:"unimplemented"};case 503:return{code:Ye,message:"unavailable"};case 504:return{code:Ye,message:"deadline_exceeded"};default:return{code:Ye,message:"internal_error"}}return{code:Ye,message:"unknown_error"}}function mg(e,t){e.setAttribute("http.response.status_code",t);const n=Vb(t);n.message!=="unknown_error"&&e.setStatus(n)}const Gb=0,qb=1;function MP(e){const{spanId:t,traceId:n}=e.spanContext(),{data:r,op:o,parent_span_id:i,status:s,origin:a}=J(e);return Qe({parent_span_id:i,span_id:t,trace_id:n,data:r,op:o,status:s,origin:a})}function NP(e){const{spanId:t,traceId:n}=e.spanContext(),{parent_span_id:r}=J(e);return Qe({parent_span_id:r,span_id:t,trace_id:n})}function gg(e){const{traceId:t,spanId:n}=e.spanContext(),r=Uo(e);return lg(t,n,r)}function mo(e){return typeof e=="number"?Ov(e):Array.isArray(e)?e[0]+e[1]/1e9:e instanceof Date?Ov(e.getTime()):Re()}function Ov(e){return e>9999999999?e/1e3:e}function J(e){if(LP(e))return e.getSpanJSON();try{const{spanId:t,traceId:n}=e.spanContext();if(PP(e)){const{attributes:r,startTime:o,name:i,endTime:s,parentSpanId:a,status:l}=e;return Qe({span_id:t,trace_id:n,data:r,description:i,parent_span_id:a,start_timestamp:mo(o),timestamp:mo(s)||void 0,status:Kb(l),op:r[Pt],origin:r[ge],_metrics_summary:th(e)})}return{span_id:t,trace_id:n}}catch{return{}}}function PP(e){const t=e;return!!t.attributes&&!!t.startTime&&!!t.name&&!!t.endTime&&!!t.status}function LP(e){return typeof e.getSpanJSON=="function"}function Uo(e){const{traceFlags:t}=e.spanContext();return t===qb}function Kb(e){if(!(!e||e.code===AP))return e.code===Wb?"ok":e.message||"unknown_error"}const go="_sentryChildSpans",rh="_sentryRootSpan";function Yb(e,t){const n=e[rh]||e;Vt(t,rh,n),e[go]?e[go].add(t):Vt(e,go,new Set([t]))}function DP(e,t){e[go]&&e[go].delete(t)}function Qs(e){const t=new Set;function n(r){if(!t.has(r)&&Uo(r)){t.add(r);const o=r[go]?Array.from(r[go]):[];for(const i of o)n(i)}}return n(e),Array.from(t)}function qe(e){return e[rh]||e}function at(){const e=Fo(),t=ss(e);return t.getActiveSpan?t.getActiveSpan():tc(re())}function FP(e,t,n,r,o,i){const s=at();s&&$P(s,e,t,n,r,o,i)}let Av=!1;function yg(){Av||(Av=!0,Ob(oh),Ab(oh))}function oh(){const e=at(),t=e&&qe(e);if(t){const n="internal_error";X&&C.log(`[Tracing] Root span: ${n} -> Global error occured`),t.setStatus({code:Ye,message:n})}}oh.tag="sentry_tracingErrorCallback";const Xb="_sentryScope",Jb="_sentryIsolationScope";function UP(e,t,n){e&&(Vt(e,Jb,n),Vt(e,Xb,t))}function Mv(e){return{scope:e[Xb],isolationScope:e[Jb]}}function jP(){yg()}function Hr(e){if(typeof __SENTRY_TRACING__=="boolean"&&!__SENTRY_TRACING__)return!1;const t=e||BP();return!!t&&(t.enableTracing||"tracesSampleRate"in t||"tracesSampler"in t)}function BP(){const e=z();return e&&e.getOptions()}class Kr{constructor(t={}){this._traceId=t.traceId||Ce(),this._spanId=t.spanId||Ce().substring(16)}spanContext(){return{spanId:this._spanId,traceId:this._traceId,traceFlags:Gb}}end(t){}setAttribute(t,n){return this}setAttributes(t){return this}setStatus(t){return this}updateName(t){return this}isRecording(){return!1}addEvent(t,n,r){return this}}function _g(e,t,n=()=>{}){let r;try{r=e()}catch(o){throw t(o),n(),o}return zP(r,t,n)}function zP(e,t,n){return Va(e)?e.then(r=>(n(),r),r=>{throw t(r),n(),r}):(n(),e)}const Qc="production",Qb="_frozenDsc";function Nv(e,t){Vt(e,Qb,t)}function Zc(e,t){const n=t.getOptions(),{publicKey:r}=t.getDsn()||{},o=Qe({environment:n.environment||Qc,release:n.release,public_key:r,trace_id:e});return t.emit("createDsc",o),o}function Yr(e){const t=z();if(!t)return{};const n=Zc(J(e).trace_id||"",t),r=qe(e);if(!r)return n;const o=r[Qb];if(o)return o;const i=J(r),s=i.data||{},a=s[dg];a!=null&&(n.sample_rate=`${a}`);const l=s[Ge];return l&&l!=="url"&&(n.transaction=i.description),n.sampled=String(Uo(r)),t.emit("createDsc",n),n}function HP(e){const t=Yr(e);return ag(t)}function WP(e){if(!X)return;const{description:t="< unknown name >",op:n="< unknown op >",parent_span_id:r}=J(e),{spanId:o}=e.spanContext(),i=Uo(e),s=qe(e),a=s===e,l=`[Tracing] Starting ${i?"sampled":"unsampled"} ${a?"root ":""}span`,u=[`op: ${n}`,`name: ${t}`,`ID: ${o}`];if(r&&u.push(`parent ID: ${r}`),!a){const{op:f,description:c}=J(s);u.push(`root ID: ${s.spanContext().spanId}`),f&&u.push(`root op: ${f}`),c&&u.push(`root description: ${c}`)}C.log(`${l} + ${u.join(` + `)}`)}function VP(e){if(!X)return;const{description:t="< unknown name >",op:n="< unknown op >"}=J(e),{spanId:r}=e.spanContext(),i=qe(e)===e,s=`[Tracing] Finishing "${n}" ${i?"root ":""}span "${t}" with ID ${r}`;C.log(s)}function nc(e){if(typeof e=="boolean")return Number(e);const t=typeof e=="string"?parseFloat(e):e;if(typeof t!="number"||isNaN(t)||t<0||t>1){X&&C.warn(`[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(e)} of type ${JSON.stringify(typeof e)}.`);return}return t}function GP(e,t){if(!Hr(e))return[!1];let n;typeof e.tracesSampler=="function"?n=e.tracesSampler(t):t.parentSampled!==void 0?n=t.parentSampled:typeof e.tracesSampleRate<"u"?n=e.tracesSampleRate:n=1;const r=nc(n);return r===void 0?(X&&C.warn("[Tracing] Discarding transaction because of invalid sample rate."),[!1]):r?Math.random()a(J(f)):f=>J(f),u=[];for(const f of e){const c=l(f);c&&u.push(fP(c))}return lr(s,u)}function Zb(e,t,n){const r=at(),o=r&&qe(r);o&&o.addEvent(e,{[hg]:t,[pg]:n})}function Pv(e){if(!e||e.length===0)return;const t={};return e.forEach(n=>{const r=n.attributes||{},o=r[pg],i=r[hg];typeof o=="string"&&typeof i=="number"&&(t[n.name]={value:i,unit:o})}),t}const Lv=1e3;class vg{constructor(t={}){this._traceId=t.traceId||Ce(),this._spanId=t.spanId||Ce().substring(16),this._startTime=t.startTimestamp||Re(),this._attributes={},this.setAttributes({[ge]:"manual",[Pt]:t.op,...t.attributes}),this._name=t.name,t.parentSpanId&&(this._parentSpanId=t.parentSpanId),"sampled"in t&&(this._sampled=t.sampled),t.endTimestamp&&(this._endTime=t.endTimestamp),this._events=[],this._isStandaloneSpan=t.isStandalone,this._endTime&&this._onSpanEnded()}spanContext(){const{_spanId:t,_traceId:n,_sampled:r}=this;return{spanId:t,traceId:n,traceFlags:r?qb:Gb}}setAttribute(t,n){n===void 0?delete this._attributes[t]:this._attributes[t]=n}setAttributes(t){Object.keys(t).forEach(n=>this.setAttribute(n,t[n]))}updateStartTime(t){this._startTime=mo(t)}setStatus(t){return this._status=t,this}updateName(t){return this._name=t,this}end(t){this._endTime||(this._endTime=mo(t),VP(this),this._onSpanEnded())}getSpanJSON(){return Qe({data:this._attributes,description:this._name,op:this._attributes[Pt],parent_span_id:this._parentSpanId,span_id:this._spanId,start_timestamp:this._startTime,status:Kb(this._status),timestamp:this._endTime,trace_id:this._traceId,origin:this._attributes[ge],_metrics_summary:th(this),profile_id:this._attributes[OP],exclusive_time:this._attributes[Hb],measurements:Pv(this._events),is_segment:this._isStandaloneSpan&&qe(this)===this||void 0,segment_id:this._isStandaloneSpan?qe(this).spanContext().spanId:void 0})}isRecording(){return!this._endTime&&!!this._sampled}addEvent(t,n,r){X&&C.log("[Tracing] Adding an event to span:",t);const o=Dv(n)?n:r||Re(),i=Dv(n)?{}:n||{},s={name:t,time:mo(o),attributes:i};return this._events.push(s),this}isStandaloneSpan(){return!!this._isStandaloneSpan}_onSpanEnded(){const t=z();if(t&&t.emit("spanEnd",this),!(this._isStandaloneSpan||this===qe(this)))return;if(this._isStandaloneSpan){QP(XP([this],t));return}const r=this._convertSpanToTransaction();r&&(Mv(this).scope||re()).captureEvent(r)}_convertSpanToTransaction(){if(!Fv(J(this)))return;this._name||(X&&C.warn("Transaction has no name, falling back to ``."),this._name="");const{scope:t,isolationScope:n}=Mv(this),o=(t||re()).getClient()||z();if(this._sampled!==!0){X&&C.log("[Tracing] Discarding transaction because its trace was not chosen to be sampled."),o&&o.recordDroppedEvent("sample_rate","transaction");return}const s=Qs(this).filter(c=>c!==this&&!JP(c)).map(c=>J(c)).filter(Fv),a=this._attributes[Ge],l={contexts:{trace:MP(this)},spans:s.length>Lv?s.sort((c,d)=>c.start_timestamp-d.start_timestamp).slice(0,Lv):s,start_timestamp:this._startTime,timestamp:this._endTime,transaction:this._name,type:"transaction",sdkProcessingMetadata:{capturedSpanScope:t,capturedSpanIsolationScope:n,...Qe({dynamicSamplingContext:Yr(this)})},_metrics_summary:th(this),...a&&{transaction_info:{source:a}}},u=Pv(this._events);return u&&Object.keys(u).length&&(X&&C.log("[Measurements] Adding measurements to transaction",JSON.stringify(u,void 0,2)),l.measurements=u),l}}function Dv(e){return e&&typeof e=="number"||e instanceof Date||Array.isArray(e)}function Fv(e){return!!e.start_timestamp&&!!e.timestamp&&!!e.span_id&&!!e.trace_id}function JP(e){return e instanceof vg&&e.isStandaloneSpan()}function QP(e){const t=z();if(!t)return;const n=e[1];if(!n||n.length===0){t.recordDroppedEvent("before_send","span");return}const r=t.getTransport();r&&r.send(e).then(null,o=>{X&&C.error("Error while sending span:",o)})}const eT="__SENTRY_SUPPRESS_TRACING__";function ZP(e,t){const n=ef();if(n.startSpan)return n.startSpan(e,t);const r=Eg(e);return wn(e.scope,o=>{const i=wg(o),a=e.onlyIfParent&&!i?new Kr:Sg({parentSpan:i,spanContext:r,forceTransaction:e.forceTransaction,scope:o});return xo(o,a),_g(()=>t(a),()=>{const{status:l}=J(a);a.isRecording()&&(!l||l==="ok")&&a.setStatus({code:Ye,message:"internal_error"})},()=>a.end())})}function tT(e,t){const n=ef();if(n.startSpanManual)return n.startSpanManual(e,t);const r=Eg(e);return wn(e.scope,o=>{const i=wg(o),a=e.onlyIfParent&&!i?new Kr:Sg({parentSpan:i,spanContext:r,forceTransaction:e.forceTransaction,scope:o});xo(o,a);function l(){a.end()}return _g(()=>t(a,l),()=>{const{status:u}=J(a);a.isRecording()&&(!u||u==="ok")&&a.setStatus({code:Ye,message:"internal_error"})})})}function Ht(e){const t=ef();if(t.startInactiveSpan)return t.startInactiveSpan(e);const n=Eg(e),r=e.scope||re(),o=wg(r);return e.onlyIfParent&&!o?new Kr:Sg({parentSpan:o,spanContext:n,forceTransaction:e.forceTransaction,scope:r})}const eL=({sentryTrace:e,baggage:t},n)=>wn(r=>{const o=Fb(e,t);return r.setPropagationContext(o),n()});function Ca(e,t){const n=ef();return n.withActiveSpan?n.withActiveSpan(e,t):wn(r=>(xo(r,e||void 0),t(r)))}function tL(e){return wn(t=>(t.setPropagationContext(Ta()),X&&C.info(`Starting a new trace with id ${t.getPropagationContext().traceId}`),Ca(null,e)))}function Sg({parentSpan:e,spanContext:t,forceTransaction:n,scope:r}){if(!Hr())return new Kr;const o=Ke();let i;if(e&&!n)i=nL(e,r,t),Yb(e,i);else if(e){const s=Yr(e),{traceId:a,spanId:l}=e.spanContext(),u=Uo(e);i=Uv({traceId:a,parentSpanId:l,...t},r,u),Nv(i,s)}else{const{traceId:s,dsc:a,parentSpanId:l,sampled:u}={...o.getPropagationContext(),...r.getPropagationContext()};i=Uv({traceId:s,parentSpanId:l,...t},r,u),a&&Nv(i,a)}return WP(i),UP(i,r,o),i}function Eg(e){const n={isStandalone:(e.experimental||{}).standalone,...e};if(e.startTime){const r={...n};return r.startTimestamp=mo(e.startTime),delete r.startTime,r}return n}function ef(){const e=Fo();return ss(e)}function Uv(e,t,n){const r=z(),o=r&&r.getOptions()||{},{name:i="",attributes:s}=e,[a,l]=t.getScopeData().sdkProcessingMetadata[eT]?[!1]:GP(o,{name:i,parentSampled:n,attributes:s,transactionContext:{name:i,parentSampled:n}}),u=new vg({...e,attributes:{[Ge]:"custom",...e.attributes},sampled:a});return l!==void 0&&u.setAttribute(dg,l),r&&r.emit("spanStart",u),u}function nL(e,t,n){const{spanId:r,traceId:o}=e.spanContext(),i=t.getScopeData().sdkProcessingMetadata[eT]?!1:Uo(e),s=i?new vg({...n,parentSpanId:r,traceId:o,sampled:i}):new Kr({traceId:o});Yb(e,s);const a=z();return a&&(a.emit("spanStart",s),n.endTimestamp&&a.emit("spanEnd",s)),s}function wg(e){const t=tc(e);if(!t)return;const n=z();return(n?n.getOptions():{}).parentSpanIsAlwaysRootSpan?qe(t):t}const ru={idleTimeout:1e3,finalTimeout:3e4,childSpanTimeout:15e3},rL="heartbeatFailed",oL="idleTimeout",iL="finalTimeout",sL="externalFinish";function nT(e,t={}){const n=new Map;let r=!1,o,i=sL,s=!t.disableAutoFinish;const{idleTimeout:a=ru.idleTimeout,finalTimeout:l=ru.finalTimeout,childSpanTimeout:u=ru.childSpanTimeout,beforeSpanEnd:f}=t,c=z();if(!c||!Hr())return new Kr;const d=re(),h=at(),m=aL(e);function _(E=Re()){const w=Qs(m).filter(ee=>ee!==m);if(!w.length){m.end(E);return}const x=w.map(ee=>J(ee).timestamp).filter(ee=>!!ee),D=x.length?Math.max(...x):void 0,I=mo(E),A=J(m).start_timestamp,W=Math.min(A?A+l/1e3:1/0,Math.max(A||-1/0,Math.min(I,D||1/0)));m.end(W)}function v(){o&&(clearTimeout(o),o=void 0)}function g(E){v(),o=setTimeout(()=>{!r&&n.size===0&&s&&(i=oL,_(E))},a)}function p(E){o=setTimeout(()=>{!r&&s&&(i=rL,_(E))},u)}function y(E){v(),n.set(E,!0);const w=Re();p(w+u/1e3)}function S(E){if(n.has(E)&&n.delete(E),n.size===0){const w=Re();g(w+a/1e3)}}function b(){r=!0,n.clear(),f&&f(m),xo(d,h);const E=J(m),{timestamp:w,start_timestamp:x}=E;if(!w||!x)return;(E.data||{})[nh]||m.setAttribute(nh,i),C.log(`[Tracing] Idle span "${E.op}" finished`);const I=Qs(m).filter(W=>W!==m);let A=0;I.forEach(W=>{W.isRecording()&&(W.setStatus({code:Ye,message:"cancelled"}),W.end(w),X&&C.log("[Tracing] Cancelling span since span ended early",JSON.stringify(W,void 0,2)));const ee=J(W),{timestamp:j=0,start_timestamp:N=0}=ee,R=N<=w,L=(l+a)/1e3,T=j-N0&&m.setAttribute("sentry.idle_span_discarded_spans",A)}return c.on("spanStart",E=>{if(r||E===m||J(E).timestamp)return;Qs(m).includes(E)&&y(E.spanContext().spanId)}),c.on("spanEnd",E=>{r||(S(E.spanContext().spanId),E===m&&b())}),c.on("idleSpanEnableAutoFinish",E=>{E===m&&(s=!0,g(),n.size&&p())}),t.disableAutoFinish||g(),setTimeout(()=>{r||(m.setStatus({code:Ye,message:"deadline_exceeded"}),i=iL,_())},l),m}function aL(e){const t=Ht(e);return xo(re(),t),X&&C.log("[Tracing] Started span is an idle span"),t}function ih(e,t,n,r=0){return new Qt((o,i)=>{const s=e[r];if(t===null||typeof s!="function")o(t);else{const a=s({...t},n);X&&s.id&&a===null&&C.log(`Event processor "${s.id}" dropped event`),Va(a)?a.then(l=>ih(e,l,n,r+1).then(o)).then(null,i):ih(e,a,n,r+1).then(o).then(null,i)}})}function lL(e,t){const{fingerprint:n,span:r,breadcrumbs:o,sdkProcessingMetadata:i}=t;uL(e,t),r&&dL(e,r),pL(e,n),cL(e,o),fL(e,i)}function jv(e,t){const{extra:n,tags:r,user:o,contexts:i,level:s,sdkProcessingMetadata:a,breadcrumbs:l,fingerprint:u,eventProcessors:f,attachments:c,propagationContext:d,transactionName:h,span:m}=t;Os(e,"extra",n),Os(e,"tags",r),Os(e,"user",o),Os(e,"contexts",i),Os(e,"sdkProcessingMetadata",a),s&&(e.level=s),h&&(e.transactionName=h),m&&(e.span=m),l.length&&(e.breadcrumbs=[...e.breadcrumbs,...l]),u.length&&(e.fingerprint=[...e.fingerprint,...u]),f.length&&(e.eventProcessors=[...e.eventProcessors,...f]),c.length&&(e.attachments=[...e.attachments,...c]),e.propagationContext={...e.propagationContext,...d}}function Os(e,t,n){if(n&&Object.keys(n).length){e[t]={...e[t]};for(const r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[t][r]=n[r])}}function uL(e,t){const{extra:n,tags:r,user:o,contexts:i,level:s,transactionName:a}=t,l=Qe(n);l&&Object.keys(l).length&&(e.extra={...l,...e.extra});const u=Qe(r);u&&Object.keys(u).length&&(e.tags={...u,...e.tags});const f=Qe(o);f&&Object.keys(f).length&&(e.user={...f,...e.user});const c=Qe(i);c&&Object.keys(c).length&&(e.contexts={...c,...e.contexts}),s&&(e.level=s),a&&e.type!=="transaction"&&(e.transaction=a)}function cL(e,t){const n=[...e.breadcrumbs||[],...t];e.breadcrumbs=n.length?n:void 0}function fL(e,t){e.sdkProcessingMetadata={...e.sdkProcessingMetadata,...t}}function dL(e,t){e.contexts={trace:NP(t),...e.contexts},e.sdkProcessingMetadata={dynamicSamplingContext:Yr(t),...e.sdkProcessingMetadata};const n=qe(t),r=J(n).description;r&&!e.transaction&&e.type==="transaction"&&(e.transaction=r)}function pL(e,t){e.fingerprint=e.fingerprint?Nb(e.fingerprint):[],t&&(e.fingerprint=e.fingerprint.concat(t)),e.fingerprint&&!e.fingerprint.length&&delete e.fingerprint}function rT(e,t,n,r,o,i){const{normalizeDepth:s=3,normalizeMaxBreadth:a=1e3}=e,l={...t,event_id:t.event_id||n.event_id||Ce(),timestamp:t.timestamp||Ga()},u=n.integrations||e.integrations.map(v=>v.name);hL(l,e),yL(l,u),t.type===void 0&&mL(l,e.stackParser);const f=vL(r,n.captureContext);n.mechanism&&ko(l,n.mechanism);const c=o?o.getEventProcessors():[],d=Jc().getScopeData();if(i){const v=i.getScopeData();jv(d,v)}if(f){const v=f.getScopeData();jv(d,v)}const h=[...n.attachments||[],...d.attachments];h.length&&(n.attachments=h),lL(l,d);const m=[...c,...d.eventProcessors];return ih(m,l,n).then(v=>(v&&gL(v),typeof s=="number"&&s>0?_L(v,s,a):v))}function hL(e,t){const{environment:n,release:r,dist:o,maxValueLength:i=250}=t;"environment"in e||(e.environment="environment"in t?n:Qc),e.release===void 0&&r!==void 0&&(e.release=r),e.dist===void 0&&o!==void 0&&(e.dist=o),e.message&&(e.message=po(e.message,i));const s=e.exception&&e.exception.values&&e.exception.values[0];s&&s.value&&(s.value=po(s.value,i));const a=e.request;a&&a.url&&(a.url=po(a.url,i))}const Bv=new WeakMap;function mL(e,t){const n=K._sentryDebugIds;if(!n)return;let r;const o=Bv.get(t);o?r=o:(r=new Map,Bv.set(t,r));const i=Object.keys(n).reduce((s,a)=>{let l;const u=r.get(a);u?l=u:(l=t(a),r.set(a,l));for(let f=l.length-1;f>=0;f--){const c=l[f];if(c.filename){s[c.filename]=n[a];break}}return s},{});try{e.exception.values.forEach(s=>{s.stacktrace.frames.forEach(a=>{a.filename&&(a.debug_id=i[a.filename])})})}catch{}}function gL(e){const t={};try{e.exception.values.forEach(r=>{r.stacktrace.frames.forEach(o=>{o.debug_id&&(o.abs_path?t[o.abs_path]=o.debug_id:o.filename&&(t[o.filename]=o.debug_id),delete o.debug_id)})})}catch{}if(Object.keys(t).length===0)return;e.debug_meta=e.debug_meta||{},e.debug_meta.images=e.debug_meta.images||[];const n=e.debug_meta.images;Object.keys(t).forEach(r=>{n.push({type:"sourcemap",code_file:r,debug_id:t[r]})})}function yL(e,t){t.length>0&&(e.sdk=e.sdk||{},e.sdk.integrations=[...e.sdk.integrations||[],...t])}function _L(e,t,n){if(!e)return null;const r={...e,...e.breadcrumbs&&{breadcrumbs:e.breadcrumbs.map(o=>({...o,...o.data&&{data:fn(o.data,t,n)}}))},...e.user&&{user:fn(e.user,t,n)},...e.contexts&&{contexts:fn(e.contexts,t,n)},...e.extra&&{extra:fn(e.extra,t,n)}};return e.contexts&&e.contexts.trace&&r.contexts&&(r.contexts.trace=e.contexts.trace,e.contexts.trace.data&&(r.contexts.trace.data=fn(e.contexts.trace.data,t,n))),e.spans&&(r.spans=e.spans.map(o=>({...o,...o.data&&{data:fn(o.data,t,n)}}))),r}function vL(e,t){if(!t)return e;const n=e?e.clone():new ir;return n.update(t),n}function SL(e){if(e)return EL(e)?{captureContext:e}:bL(e)?{captureContext:e}:e}function EL(e){return e instanceof ir||typeof e=="function"}const wL=["user","level","extra","contexts","tags","fingerprint","requestSession","propagationContext"];function bL(e){return Object.keys(e).some(t=>wL.includes(t))}function as(e,t){return re().captureException(e,SL(t))}function rc(e,t){const n=typeof t=="string"?t:void 0,r=typeof t!="string"?{captureContext:t}:void 0;return re().captureMessage(e,n,r)}function ls(e,t){return re().captureEvent(e,t)}function bg(e,t){Ke().setContext(e,t)}function oT(e){Ke().setExtras(e)}function iT(e,t){Ke().setExtra(e,t)}function sT(e){Ke().setTags(e)}function aT(e,t){Ke().setTag(e,t)}function lT(e){Ke().setUser(e)}function uT(){return Ke().lastEventId()}async function TL(e){const t=z();return t?t.flush(e):(X&&C.warn("Cannot flush events. No client defined."),Promise.resolve(!1))}async function CL(e){const t=z();return t?t.close(e):(X&&C.warn("Cannot flush events and disable SDK. No client defined."),Promise.resolve(!1))}function kL(){return!!z()}function cT(e){Ke().addEventProcessor(e)}function oc(e){const t=z(),n=Ke(),r=re(),{release:o,environment:i=Qc}=t&&t.getOptions()||{},{userAgent:s}=K.navigator||{},a=vP({release:o,environment:i,user:r.getUser()||n.getUser(),...s&&{userAgent:s},...e}),l=n.getSession();return l&&l.status==="ok"&&Li(l,{status:"exited"}),ka(),n.setSession(a),r.setSession(a),a}function ka(){const e=Ke(),t=re(),n=t.getSession()||e.getSession();n&&SP(n),fT(),e.setSession(),t.setSession()}function fT(){const e=Ke(),t=re(),n=z(),r=t.getSession()||e.getSession();r&&n&&n.captureSession(r)}function sh(e=!1){if(e){ka();return}fT()}const xL="7";function dT(e){const t=e.protocol?`${e.protocol}:`:"",n=e.port?`:${e.port}`:"";return`${t}//${e.host}${n}${e.path?`/${e.path}`:""}/api/`}function IL(e){return`${dT(e)}${e.projectId}/envelope/`}function RL(e,t){return TN({sentry_key:e.publicKey,sentry_version:xL,...t&&{sentry_client:`${t.name}/${t.version}`}})}function pT(e,t,n){return t||`${IL(e)}?${RL(e,n)}`}function $L(e,t){const n=wb(e);if(!n)return"";const r=`${dT(n)}embed/error-page/`;let o=`dsn=${Po(n)}`;for(const i in t)if(i!=="dsn"&&i!=="onClose")if(i==="user"){const s=t.user;if(!s)continue;s.name&&(o+=`&name=${encodeURIComponent(s.name)}`),s.email&&(o+=`&email=${encodeURIComponent(s.email)}`)}else o+=`&${encodeURIComponent(i)}=${encodeURIComponent(t[i])}`;return`${r}?${o}`}const zv=[];function OL(e){const t={};return e.forEach(n=>{const{name:r}=n,o=t[r];o&&!o.isDefaultInstance&&n.isDefaultInstance||(t[r]=n)}),Object.keys(t).map(n=>t[n])}function AL(e){const t=e.defaultIntegrations||[],n=e.integrations;t.forEach(s=>{s.isDefaultInstance=!0});let r;Array.isArray(n)?r=[...t,...n]:typeof n=="function"?r=Nb(n(t)):r=t;const o=OL(r),i=PL(o,s=>s.name==="Debug");if(i!==-1){const[s]=o.splice(i,1);o.push(s)}return o}function ML(e,t){const n={};return t.forEach(r=>{r&&hT(e,r,n)}),n}function Hv(e,t){for(const n of t)n&&n.afterAllSetup&&n.afterAllSetup(e)}function hT(e,t,n){if(n[t.name]){X&&C.log(`Integration skipped because it was already installed: ${t.name}`);return}if(n[t.name]=t,zv.indexOf(t.name)===-1&&typeof t.setupOnce=="function"&&(t.setupOnce(),zv.push(t.name)),t.setup&&typeof t.setup=="function"&&t.setup(e),typeof t.preprocessEvent=="function"){const r=t.preprocessEvent.bind(t);e.on("preprocessEvent",(o,i)=>r(o,i,e))}if(typeof t.processEvent=="function"){const r=t.processEvent.bind(t),o=Object.assign((i,s)=>r(i,s,e),{id:t.name});e.addEventProcessor(o)}X&&C.log(`Integration installed: ${t.name}`)}function NL(e){const t=z();if(!t){X&&C.warn(`Cannot add integration "${e.name}" because no SDK Client is available.`);return}t.addIntegration(e)}function PL(e,t){for(let n=0;nthis._captureEvent(s,i,r))),i.event_id}captureMessage(t,n,r,o){const i={event_id:Ce(),...r},s=rg(t)?t:String(t),a=og(t)?this.eventFromMessage(s,n,i):this.eventFromException(t,i);return this._process(a.then(l=>this._captureEvent(l,i,o))),i.event_id}captureEvent(t,n,r){const o=Ce();if(n&&n.originalException&&bv(n.originalException))return X&&C.log(Wv),o;const i={event_id:o,...n},a=(t.sdkProcessingMetadata||{}).capturedSpanScope;return this._process(this._captureEvent(t,i,a||r)),i.event_id}captureSession(t){typeof t.release!="string"?X&&C.warn("Discarded session because of missing or non-string release"):(this.sendSession(t),Li(t,{init:!1}))}getDsn(){return this._dsn}getOptions(){return this._options}getSdkMetadata(){return this._options._metadata}getTransport(){return this._transport}flush(t){const n=this._transport;return n?(this.emit("flush"),this._isClientDoneProcessing(t).then(r=>n.flush(t).then(o=>r&&o))):or(!0)}close(t){return this.flush(t).then(n=>(this.getOptions().enabled=!1,this.emit("close"),n))}getEventProcessors(){return this._eventProcessors}addEventProcessor(t){this._eventProcessors.push(t)}init(){this._isEnabled()&&this._setupIntegrations()}getIntegrationByName(t){return this._integrations[t]}addIntegration(t){const n=this._integrations[t.name];hT(this,t,this._integrations),n||Hv(this,[t])}sendEvent(t,n={}){this.emit("beforeSendEvent",t,n);let r=YP(t,this._dsn,this._options._metadata,this._options.tunnel);for(const i of n.attachments||[])r=aP(r,dP(i));const o=this.sendEnvelope(r);o&&o.then(i=>this.emit("afterSendEvent",t,i),null)}sendSession(t){const n=KP(t,this._dsn,this._options._metadata,this._options.tunnel);this.sendEnvelope(n)}recordDroppedEvent(t,n,r){if(this._options.sendClientReports){const o=`${t}:${n}`;X&&C.log(`Adding outcome: "${o}"`),this._outcomes[o]=this._outcomes[o]+1||1}}on(t,n){this._hooks[t]||(this._hooks[t]=[]),this._hooks[t].push(n)}emit(t,...n){this._hooks[t]&&this._hooks[t].forEach(r=>r(...n))}sendEnvelope(t){return this.emit("beforeEnvelope",t),this._isEnabled()&&this._transport?this._transport.send(t).then(null,n=>(X&&C.error("Error while sending event:",n),n)):(X&&C.error("Transport disabled"),or({}))}_setupIntegrations(){const{integrations:t}=this._options;this._integrations=ML(this,t),Hv(this,t)}_updateSessionFromEvent(t,n){let r=!1,o=!1;const i=n.exception&&n.exception.values;if(i){o=!0;for(const l of i){const u=l.mechanism;if(u&&u.handled===!1){r=!0;break}}}const s=t.status==="ok";(s&&t.errors===0||s&&r)&&(Li(t,{...r&&{status:"crashed"},errors:t.errors||Number(o||r)}),this.captureSession(t))}_isClientDoneProcessing(t){return new Qt(n=>{let r=0;const o=1,i=setInterval(()=>{this._numProcessing==0?(clearInterval(i),n(!0)):(r+=o,t&&r>=t&&(clearInterval(i),n(!1)))},o)})}_isEnabled(){return this.getOptions().enabled!==!1&&this._transport!==void 0}_prepareEvent(t,n,r,o=Ke()){const i=this.getOptions(),s=Object.keys(this._integrations);return!n.integrations&&s.length>0&&(n.integrations=s),this.emit("preprocessEvent",t,n),t.type||o.setLastEventId(t.event_id||n.event_id),rT(i,t,n,r,this,o).then(a=>{if(a===null)return a;const l={...o.getPropagationContext(),...r?r.getPropagationContext():void 0};if(!(a.contexts&&a.contexts.trace)&&l){const{traceId:f,spanId:c,parentSpanId:d,dsc:h}=l;a.contexts={trace:Qe({trace_id:f,span_id:c,parent_span_id:d}),...a.contexts};const m=h||Zc(f,this);a.sdkProcessingMetadata={dynamicSamplingContext:m,...a.sdkProcessingMetadata}}return a})}_captureEvent(t,n={},r){return this._processEvent(t,n,r).then(o=>o.event_id,o=>{if(X){const i=o;i.logLevel==="log"?C.log(i.message):C.warn(i)}})}_processEvent(t,n,r){const o=this.getOptions(),{sampleRate:i}=o,s=gT(t),a=mT(t),l=t.type||"error",u=`before send for type \`${l}\``,f=typeof i>"u"?void 0:nc(i);if(a&&typeof f=="number"&&Math.random()>f)return this.recordDroppedEvent("sample_rate","error",t),Zu(new On(`Discarding event because it's not included in the random sample (sampling rate = ${i})`,"log"));const c=l==="replay_event"?"replay":l,h=(t.sdkProcessingMetadata||{}).capturedSpanIsolationScope;return this._prepareEvent(t,n,r,h).then(m=>{if(m===null)throw this.recordDroppedEvent("event_processor",c,t),new On("An event processor returned `null`, will not send event.","log");if(n.data&&n.data.__sentry__===!0)return m;const v=FL(o,m,n);return DL(v,u)}).then(m=>{if(m===null)throw this.recordDroppedEvent("before_send",c,t),new On(`${u} returned \`null\`, will not send event.`,"log");const _=r&&r.getSession();!s&&_&&this._updateSessionFromEvent(_,m);const v=m.transaction_info;if(s&&v&&m.transaction!==t.transaction){const g="custom";m.transaction_info={...v,source:g}}return this.sendEvent(m,n),m}).then(null,m=>{throw m instanceof On?m:(this.captureException(m,{data:{__sentry__:!0},originalException:m}),new On(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event. +Reason: ${m}`))})}_process(t){this._numProcessing++,t.then(n=>(this._numProcessing--,n),n=>(this._numProcessing--,n))}_clearOutcomes(){const t=this._outcomes;return this._outcomes={},Object.keys(t).map(n=>{const[r,o]=n.split(":");return{reason:r,category:o,quantity:t[n]}})}}function DL(e,t){const n=`${t} must return \`null\` or a valid event.`;if(Va(e))return e.then(r=>{if(!Co(r)&&r!==null)throw new On(n);return r},r=>{throw new On(`${t} rejected with ${r}`)});if(!Co(e)&&e!==null)throw new On(n);return e}function FL(e,t,n){const{beforeSend:r,beforeSendTransaction:o,beforeSendSpan:i}=e;if(mT(t)&&r)return r(t,n);if(gT(t)){if(t.spans&&i){const s=[];for(const a of t.spans){const l=i(a);l&&s.push(l)}t.spans=s}if(o)return o(t,n)}return t}function mT(e){return e.type===void 0}function gT(e){return e.type==="transaction"}function UL(e,t){t.debug===!0&&(X?C.enable():zr(()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})),re().update(t.initialScope);const r=new e(t);yT(r),r.init()}function yT(e){re().setClient(e)}const jL=64;function _T(e,t,n=JN(e.bufferSize||jL)){let r={};const o=s=>n.drain(s);function i(s){const a=[];if(Pi(s,(c,d)=>{const h=Rv(d);if(Bb(r,h)){const m=Vv(c,d);e.recordDroppedEvent("ratelimit_backoff",h,m)}else a.push(c)}),a.length===0)return or({});const l=lr(s[0],a),u=c=>{Pi(l,(d,h)=>{const m=Vv(d,h);e.recordDroppedEvent(c,Rv(h),m)})},f=()=>t({body:Qp(l)}).then(c=>(c.statusCode!==void 0&&(c.statusCode<200||c.statusCode>=300)&&X&&C.warn(`Sentry responded with status code ${c.statusCode} to sent event.`),r=zb(r,c),c),c=>{throw u("network_error"),c});return n.add(f).then(c=>c,c=>{if(c instanceof On)return X&&C.error("Skipped sending event because buffer is full."),u("queue_overflow"),or({});throw c})}return{send:i,flush:o}}function Vv(e,t){if(!(t!=="event"&&t!=="transaction"))return Array.isArray(e)?e[1]:void 0}const Gv=100,qv=5e3,BL=36e5;function zL(e){function t(...n){X&&C.info("[Offline]:",...n)}return n=>{const r=e(n);if(!n.createStore)throw new Error("No `createStore` function was provided");const o=n.createStore(n);let i=qv,s;function a(c,d,h){return Iv(c,["client_report"])?!1:n.shouldStore?n.shouldStore(c,d,h):!0}function l(c){s&&clearTimeout(s),s=setTimeout(async()=>{s=void 0;const d=await o.shift();d&&(t("Attempting to send previously queued event"),d[0].sent_at=new Date().toISOString(),f(d,!0).catch(h=>{t("Failed to retry sending",h)}))},c),typeof s!="number"&&s.unref&&s.unref()}function u(){s||(l(i),i=Math.min(i*2,BL))}async function f(c,d=!1){if(!d&&Iv(c,["replay_event","replay_recording"]))return await o.push(c),l(Gv),{};try{const h=await r.send(c);let m=Gv;if(h){if(h.headers&&h.headers["retry-after"])m=jb(h.headers["retry-after"]);else if(h.headers&&h.headers["x-sentry-rate-limits"])m=6e4;else if((h.statusCode||0)>=400)return h}return l(m),i=qv,h}catch(h){if(await a(c,h,i))return d?await o.unshift(c):await o.push(c),u(),t("Error sending. Event queued.",h),{};throw h}}return n.flushAtStartup&&u(),{send:f,flush:c=>r.flush(c)}}}function vT(e,t){let n;return Pi(e,(r,o)=>(t.includes(o)&&(n=Array.isArray(r)?r[1]:void 0),!!n)),n}function HL(e,t){return n=>{const r=e(n);return{...r,send:async o=>{const i=vT(o,["event","transaction","profile","replay_event"]);return i&&(i.release=t),r.send(o)}}}}function WL(e,t){return lr(t?{...e[0],dsn:t}:e[0],e[1])}function VL(e,t){return n=>{const r=e(n),o=new Map;function i(l,u){const f=u?`${l}:${u}`:l;let c=o.get(f);if(!c){const d=Sb(l);if(!d)return;const h=pT(d,n.tunnel);c=u?HL(e,u)({...n,url:h}):e({...n,url:h}),o.set(f,c)}return[l,c]}async function s(l){function u(d){const h=d&&d.length?d:["event"];return vT(l,h)}const f=t({envelope:l,getEvent:u}).map(d=>typeof d=="string"?i(d,void 0):i(d.dsn,d.release)).filter(d=>!!d);return f.length===0&&f.push(["",r]),(await Promise.all(f.map(([d,h])=>h.send(WL(l,d)))))[0]}async function a(l){const u=[...o.values(),r];return(await Promise.all(u.map(c=>c.flush(l)))).every(c=>c)}return{send:s,flush:a}}}function ST(e,t){const n=t&&t.getDsn(),r=t&&t.getOptions().tunnel;return qL(e,n)||GL(e,r)}function GL(e,t){return t?Kv(e)===Kv(t):!1}function qL(e,t){return t?e.includes(t.host):!1}function Kv(e){return e[e.length-1]==="/"?e.slice(0,-1):e}function KL(e,...t){const n=new String(String.raw(e,...t));return n.__sentry_template_string__=e.join("\0").replace(/%/g,"%%").replace(/\0/g,"%s"),n.__sentry_template_values__=t,n}function ET(e,t,n=[t],r="npm"){const o=e._metadata||{};o.sdk||(o.sdk={name:`sentry.javascript.${t}`,packages:n.map(i=>({name:`${r}:@sentry/${i}`,version:Jn})),version:Jn}),e._metadata=o}const YL=100;function Sn(e,t){const n=z(),r=Ke();if(!n)return;const{beforeBreadcrumb:o=null,maxBreadcrumbs:i=YL}=n.getOptions();if(i<=0)return;const a={timestamp:Ga(),...e},l=o?zr(()=>o(a,t)):a;l!==null&&(n.emit&&n.emit("beforeAddBreadcrumb",l,t),r.addBreadcrumb(l,i))}let Yv;const XL="FunctionToString",Xv=new WeakMap,JL=()=>({name:XL,setupOnce(){Yv=Function.prototype.toString;try{Function.prototype.toString=function(...e){const t=ig(this),n=Xv.has(z())&&t!==void 0?t:this;return Yv.apply(n,e)}}catch{}},setup(e){Xv.set(e,!0)}}),wT=JL,QL=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/,/^ResizeObserver loop completed with undelivered notifications.$/,/^Cannot redefine property: googletag$/],ZL="InboundFilters",eD=(e={})=>({name:ZL,processEvent(t,n,r){const o=r.getOptions(),i=tD(e,o);return nD(t,i)?null:t}}),bT=eD;function tD(e={},t={}){return{allowUrls:[...e.allowUrls||[],...t.allowUrls||[]],denyUrls:[...e.denyUrls||[],...t.denyUrls||[]],ignoreErrors:[...e.ignoreErrors||[],...t.ignoreErrors||[],...e.disableErrorDefaults?[]:QL],ignoreTransactions:[...e.ignoreTransactions||[],...t.ignoreTransactions||[]],ignoreInternal:e.ignoreInternal!==void 0?e.ignoreInternal:!0}}function nD(e,t){return t.ignoreInternal&&lD(e)?(X&&C.warn(`Event dropped due to being internal Sentry Error. +Event: ${to(e)}`),!0):rD(e,t.ignoreErrors)?(X&&C.warn(`Event dropped due to being matched by \`ignoreErrors\` option. +Event: ${to(e)}`),!0):oD(e,t.ignoreTransactions)?(X&&C.warn(`Event dropped due to being matched by \`ignoreTransactions\` option. +Event: ${to(e)}`),!0):iD(e,t.denyUrls)?(X&&C.warn(`Event dropped due to being matched by \`denyUrls\` option. +Event: ${to(e)}. +Url: ${ic(e)}`),!0):sD(e,t.allowUrls)?!1:(X&&C.warn(`Event dropped due to not being matched by \`allowUrls\` option. +Event: ${to(e)}. +Url: ${ic(e)}`),!0)}function rD(e,t){return e.type||!t||!t.length?!1:aD(e).some(n=>Lr(n,t))}function oD(e,t){if(e.type!=="transaction"||!t||!t.length)return!1;const n=e.transaction;return n?Lr(n,t):!1}function iD(e,t){if(!t||!t.length)return!1;const n=ic(e);return n?Lr(n,t):!1}function sD(e,t){if(!t||!t.length)return!0;const n=ic(e);return n?Lr(n,t):!0}function aD(e){const t=[];e.message&&t.push(e.message);let n;try{n=e.exception.values[e.exception.values.length-1]}catch{}return n&&n.value&&(t.push(n.value),n.type&&t.push(`${n.type}: ${n.value}`)),t}function lD(e){try{return e.exception.values[0].type==="SentryError"}catch{}return!1}function uD(e=[]){for(let t=e.length-1;t>=0;t--){const n=e[t];if(n&&n.filename!==""&&n.filename!=="[native code]")return n.filename||null}return null}function ic(e){try{let t;try{t=e.exception.values[0].stacktrace.frames}catch{}return t?uD(t):null}catch{return X&&C.error(`Cannot extract url for event ${to(e)}`),null}}const TT=new Map,Jv=new Set;function cD(e){if(K._sentryModuleMetadata)for(const t of Object.keys(K._sentryModuleMetadata)){const n=K._sentryModuleMetadata[t];if(Jv.has(t))continue;Jv.add(t);const r=e(t);for(const o of r.reverse())if(o.filename){TT.set(o.filename,n);break}}}function fD(e,t){return cD(e),TT.get(t)}function dD(e,t){try{t.exception.values.forEach(n=>{if(n.stacktrace)for(const r of n.stacktrace.frames||[]){if(!r.filename)continue;const o=fD(e,r.filename);o&&(r.module_metadata=o)}})}catch{}}function pD(e){try{e.exception.values.forEach(t=>{if(t.stacktrace)for(const n of t.stacktrace.frames||[])delete n.module_metadata})}catch{}}const hD="ModuleMetadata",mD=()=>({name:hD,setup(e){e.on("beforeEnvelope",t=>{Pi(t,(n,r)=>{if(r==="event"){const o=Array.isArray(n)?n[1]:void 0;o&&(pD(o),n[1]=o)}})})},processEvent(e,t,n){const r=n.getOptions().stackParser;return dD(r,e),e}}),gD=mD,yD="CaptureConsole",_D=(e={})=>{const t=e.levels||Xu;return{name:yD,setup(n){"console"in K&&xb(({args:r,level:o})=>{z()!==n||!t.includes(o)||SD(r,o)})}}},vD=_D;function SD(e,t){const n={level:Lb(t),extra:{arguments:e}};wn(r=>{if(r.addEventProcessor(s=>(s.logger="console",ko(s,{handled:!1,type:"console"}),s)),t==="assert"){if(!e[0]){const s=`Assertion failed: ${Yu(e.slice(1)," ")||"console.assert"}`;r.setExtra("arguments",e.slice(1)),rc(s,n)}return}const o=e.find(s=>s instanceof Error);if(o){as(o,n);return}const i=Yu(e," ");rc(i,n)})}const ED="Debug",wD=(e={})=>{const t={debugger:!1,stringify:!1,...e};return{name:ED,setup(n){n.on("beforeSendEvent",(r,o)=>{if(t.debugger)debugger;zr(()=>{t.stringify?(console.log(JSON.stringify(r,null,2)),o&&Object.keys(o).length&&console.log(JSON.stringify(o,null,2))):(console.log(r),o&&Object.keys(o).length&&console.log(o))})})}}},bD=wD,TD="Dedupe",CD=()=>{let e;return{name:TD,processEvent(t){if(t.type)return t;try{if(kD(t,e))return X&&C.warn("Event dropped due to being a duplicate of previously captured event."),null}catch{}return e=t}}},CT=CD;function kD(e,t){return t?!!(xD(e,t)||ID(e,t)):!1}function xD(e,t){const n=e.message,r=t.message;return!(!n&&!r||n&&!r||!n&&r||n!==r||!xT(e,t)||!kT(e,t))}function ID(e,t){const n=Qv(t),r=Qv(e);return!(!n||!r||n.type!==r.type||n.value!==r.value||!xT(e,t)||!kT(e,t))}function kT(e,t){let n=Zv(e),r=Zv(t);if(!n&&!r)return!0;if(n&&!r||!n&&r||(n=n,r=r,r.length!==n.length))return!1;for(let o=0;o{const{depth:t=3,captureErrorCause:n=!0}=e;return{name:RD,processEvent(r,o){return AD(r,o,t,n)}}},OD=$D;function AD(e,t={},n,r){if(!t.originalException||!Pr(t.originalException))return e;const o=t.originalException.name||t.originalException.constructor.name,i=MD(t.originalException,r);if(i){const s={...e.contexts},a=fn(i,n);return Co(a)&&(Vt(a,"__sentry_skip_normalization__",!0),s[o]=a),{...e,contexts:s}}return e}function MD(e,t){try{const n=["name","message","stack","line","column","fileName","lineNumber","columnNumber","toJSON"],r={};for(const o of Object.keys(e)){if(n.indexOf(o)!==-1)continue;const i=e[o];r[o]=Pr(i)?i.toString():i}if(t&&e.cause!==void 0&&(r.cause=Pr(e.cause)?e.cause.toString():e.cause),typeof e.toJSON=="function"){const o=e.toJSON();for(const i of Object.keys(o)){const s=o[i];r[i]=Pr(s)?s.toString():s}}return r}catch(n){X&&C.error("Unable to extract extra data from the Error object:",n)}return null}const ND="RewriteFrames",PD=(e={})=>{const t=e.root,n=e.prefix||"app:///",r="window"in K&&K.window!==void 0,o=e.iteratee||LD({isBrowser:r,root:t,prefix:n});function i(a){try{return{...a,exception:{...a.exception,values:a.exception.values.map(l=>({...l,...l.stacktrace&&{stacktrace:s(l.stacktrace)}}))}}}catch{return a}}function s(a){return{...a,frames:a&&a.frames&&a.frames.map(l=>o(l))}}return{name:ND,processEvent(a){let l=a;return a.exception&&Array.isArray(a.exception.values)&&(l=i(l)),l}}};function LD({isBrowser:e,root:t,prefix:n}){return r=>{if(!r.filename)return r;const o=/^[a-zA-Z]:\\/.test(r.filename)||r.filename.includes("\\")&&!r.filename.includes("/"),i=/^\//.test(r.filename);if(e){if(t){const s=r.filename;s.indexOf(t)===0&&(r.filename=s.replace(t,n))}}else if(o||i){const s=o?r.filename.replace(/^[a-zA-Z]:/,"").replace(/\\/g,"/"):r.filename,a=t?YN(t,s):XN(s);r.filename=`${n}${a}`}return r}}const DD="SessionTiming",FD=()=>{const e=Re()*1e3;return{name:DD,processEvent(t){const n=Re()*1e3;return{...t,extra:{...t.extra,"session:start":e,"session:duration":n-e,"session:end":n}}}}},UD=FD,jD=10,BD="ZodErrors";function zD(e){return Pr(e)&&e.name==="ZodError"&&Array.isArray(e.errors)}function HD(e){return{...e,path:"path"in e&&Array.isArray(e.path)?e.path.join("."):void 0,keys:"keys"in e?JSON.stringify(e.keys):void 0,unionErrors:"unionErrors"in e?JSON.stringify(e.unionErrors):void 0}}function WD(e){const t=new Set;for(const r of e.issues)r.path&&t.add(r.path[0]);const n=Array.from(t);return`Failed to validate keys: ${po(n.join(", "),100)}`}function VD(e,t,n){return!t.exception||!t.exception.values||!n||!n.originalException||!zD(n.originalException)||n.originalException.issues.length===0?t:{...t,exception:{...t.exception,values:[{...t.exception.values[0],value:WD(n.originalException)},...t.exception.values.slice(1)]},extra:{...t.extra,"zoderror.issues":n.originalException.errors.slice(0,e).map(HD)}}}const GD=(e={})=>{const t=e.limit||jD;return{name:BD,processEvent(n,r){return VD(t,n,r)}}},qD=GD,IT="c",RT="g",Tg="s",$T="d",KD=5e3;function OT(e,t){const n=Xc("globalMetricsAggregators",()=>new WeakMap),r=n.get(e);if(r)return r;const o=new t(e);return e.on("flush",()=>o.flush()),e.on("close",()=>o.close()),n.set(e,o),o}function tf(e,t,n,r,o={}){const i=o.client||z();if(!i)return;const s=at(),a=s?qe(s):void 0,l=a&&J(a).description,{unit:u,tags:f,timestamp:c}=o,{release:d,environment:h}=i.getOptions(),m={};d&&(m.release=d),h&&(m.environment=h),l&&(m.transaction=l),X&&C.log(`Adding value of ${r} to ${t} metric ${n}`),OT(i,e).add(t,n,r,u,{...m,...f},c)}function YD(e,t,n=1,r){tf(e,IT,t,Cg(n),r)}function ah(e,t,n,r){tf(e,$T,t,Cg(n),r)}function XD(e,t,n,r="second",o){if(typeof n=="function"){const i=Re();return tT({op:"metrics.timing",name:t,startTime:i,onlyIfParent:!0},s=>_g(()=>n(),()=>{},()=>{const a=Re(),l=a-i;ah(e,t,l,{...o,unit:"second"}),s.end(a)}))}ah(e,t,n,{...o,unit:r})}function JD(e,t,n,r){tf(e,Tg,t,n,r)}function QD(e,t,n,r){tf(e,RT,t,Cg(n),r)}const qa={increment:YD,distribution:ah,set:JD,gauge:QD,timing:XD,getMetricsAggregatorForClient:OT};function Cg(e){return typeof e=="string"?parseInt(e):e}function ZD(e,t,n,r){const o=Object.entries(Qe(r)).sort((i,s)=>i[0].localeCompare(s[0]));return`${e}${t}${n}${o}`}function e3(e){let t=0;for(let n=0;n>>0}function t3(e){let t="";for(const n of e){const r=Object.entries(n.tags),o=r.length>0?`|#${r.map(([i,s])=>`${i}:${s}`).join(",")}`:"";t+=`${n.name}@${n.unit}:${n.metric}|${n.metricType}${o}|T${n.timestamp} +`}return t}function n3(e){return e.replace(/[^\w]+/gi,"_")}function r3(e){return e.replace(/[^\w\-.]+/gi,"_")}function o3(e){return e.replace(/[^\w\-./]+/gi,"")}const i3=[[` +`,"\\n"],["\r","\\r"],[" ","\\t"],["\\","\\\\"],["|","\\u{7c}"],[",","\\u{2c}"]];function s3(e){for(const[t,n]of i3)if(e===t)return n;return e}function a3(e){return[...e].reduce((t,n)=>t+s3(n),"")}function l3(e){const t={};for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)){const r=o3(n);t[r]=a3(String(e[n]))}return t}function u3(e,t){C.log(`Flushing aggregated metrics, number of metrics: ${t.length}`);const n=e.getDsn(),r=e.getSdkMetadata(),o=e.getOptions().tunnel,i=c3(t,n,r,o);e.sendEnvelope(i)}function c3(e,t,n,r){const o={sent_at:new Date().toISOString()};n&&n.sdk&&(o.sdk={name:n.sdk.name,version:n.sdk.version}),r&&t&&(o.dsn=Po(t));const i=f3(e);return lr(o,[i])}function f3(e){const t=t3(e);return[{type:"statsd",length:t.length},t]}class d3{constructor(t){this._value=t}get weight(){return 1}add(t){this._value+=t}toString(){return`${this._value}`}}class p3{constructor(t){this._last=t,this._min=t,this._max=t,this._sum=t,this._count=1}get weight(){return 5}add(t){this._last=t,tthis._max&&(this._max=t),this._sum+=t,this._count++}toString(){return`${this._last}:${this._min}:${this._max}:${this._sum}:${this._count}`}}class h3{constructor(t){this._value=[t]}get weight(){return this._value.length}add(t){this._value.push(t)}toString(){return this._value.join(":")}}class m3{constructor(t){this.first=t,this._value=new Set([t])}get weight(){return this._value.size}add(t){this._value.add(t)}toString(){return Array.from(this._value).map(t=>typeof t=="string"?e3(t):t).join(":")}}const g3={[IT]:d3,[RT]:p3,[$T]:h3,[Tg]:m3};class Ka{constructor(t){this._client=t,this._buckets=new Map,this._interval=setInterval(()=>this.flush(),KD)}add(t,n,r,o="none",i={},s=Re()){const a=Math.floor(s),l=r3(n),u=l3(i),f=n3(o),c=ZD(t,l,f,u);let d=this._buckets.get(c);const h=d&&t===Tg?d.metric.weight:0;d?(d.metric.add(r),d.timestamp0?m.join(","):void 0}}else return{"sentry-trace":f,baggage:c}}function v3(e){try{return new URL(e).href}catch{return}}function S3(e,t){if(t.response){mg(e,t.response.status);const n=t.response&&t.response.headers&&t.response.headers.get("content-length");if(n){const r=parseInt(n);r>0&&e.setAttribute("http.response_content_length",r)}}else t.error&&e.setStatus({code:Ye,message:"internal_error"});e.end()}function AT(e,t={},n=re()){const{message:r,name:o,email:i,url:s,source:a,associatedEventId:l}=e,u={contexts:{feedback:Qe({contact_email:i,name:o,message:r,url:s,source:a,associated_event_id:l})},type:"feedback",level:"info"},f=n&&n.getClient()||z();return f&&f.emit("beforeSendFeedback",u,t),n.captureEvent(u,t)}function E3(){return{bindClient(e){re().setClient(e)},withScope:wn,getClient:()=>z(),getScope:re,getIsolationScope:Ke,captureException:(e,t)=>re().captureException(e,t),captureMessage:(e,t,n)=>re().captureMessage(e,t,n),captureEvent:ls,addBreadcrumb:Sn,setUser:lT,setTags:sT,setTag:aT,setExtra:iT,setExtras:oT,setContext:bg,getIntegration(e){const t=z();return t&&t.getIntegrationByName(e.id)||null},startSession:oc,endSession:ka,captureSession(e){if(e)return ka();b3()}}}const w3=E3;function b3(){const e=re(),t=z(),n=e.getSession();t&&n&&t.captureSession(n)}const U=K;let lh=0;function MT(){return lh>0}function T3(){lh++,setTimeout(()=>{lh--})}function Fi(e,t={},n){if(typeof e!="function")return e;try{const o=e.__sentry_wrapped__;if(o)return o;if(ig(e))return e}catch{return e}const r=function(){const o=Array.prototype.slice.call(arguments);try{n&&typeof n=="function"&&n.apply(this,arguments);const i=o.map(s=>Fi(s,t));return e.apply(this,i)}catch(i){throw T3(),wn(s=>{s.addEventProcessor(a=>(t.mechanism&&(Yp(a,void 0,void 0),ko(a,t.mechanism)),a.extra={...a.extra,arguments:o},a)),as(i)}),i}};try{for(const o in e)Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=e[o])}catch{}bb(r,e),Vt(e,"__sentry_wrapped__",r);try{Object.getOwnPropertyDescriptor(r,"name").configurable&&Object.defineProperty(r,"name",{get(){return e.name}})}catch{}return r}const Z=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__;function nf(e,t){const n=kg(e,t),r={type:t&&t.name,value:R3(t)};return n.length&&(r.stacktrace={frames:n}),r.type===void 0&&r.value===""&&(r.value="Unrecoverable error caught"),r}function C3(e,t,n,r){const o=z(),i=o&&o.getOptions().normalizeDepth,s=A3(t),a={__serialized__:Pb(t,i)};if(s)return{exception:{values:[nf(e,s)]},extra:a};const l={exception:{values:[{type:Yc(t)?t.constructor.name:r?"UnhandledRejection":"Error",value:$3(t,{isUnhandledRejection:r})}]},extra:a};if(n){const u=kg(e,n);u.length&&(l.exception.values[0].stacktrace={frames:u})}return l}function bd(e,t){return{exception:{values:[nf(e,t)]}}}function kg(e,t){const n=t.stacktrace||t.stack||"",r=x3(t),o=I3(t);try{return e(n,r,o)}catch{}return[]}const k3=/Minified React error #\d+;/i;function x3(e){return e&&k3.test(e.message)?1:0}function I3(e){return typeof e.framesToPop=="number"?e.framesToPop:0}function R3(e){const t=e&&e.message;return t?t.error&&typeof t.error.message=="string"?t.error.message:t:"No error message"}function NT(e,t,n,r){const o=n&&n.syntheticException||void 0,i=xg(e,t,o,r);return ko(i),i.level="error",n&&n.event_id&&(i.event_id=n.event_id),or(i)}function PT(e,t,n="info",r,o){const i=r&&r.syntheticException||void 0,s=uh(e,t,i,o);return s.level=n,r&&r.event_id&&(s.event_id=r.event_id),or(s)}function xg(e,t,n,r,o){let i;if(gb(t)&&t.error)return bd(e,t.error);if(hv(t)||uN(t)){const s=t;if("stack"in t)i=bd(e,t);else{const a=s.name||(hv(s)?"DOMError":"DOMException"),l=s.message?`${a}: ${s.message}`:a;i=uh(e,l,n,r),Yp(i,l)}return"code"in s&&(i.tags={...i.tags,"DOMException.code":`${s.code}`}),i}return Pr(t)?bd(e,t):Co(t)||Yc(t)?(i=C3(e,t,n,o),ko(i,{synthetic:!0}),i):(i=uh(e,t,n,r),Yp(i,`${t}`,void 0),ko(i,{synthetic:!0}),i)}function uh(e,t,n,r){const o={};if(r&&n){const i=kg(e,n);i.length&&(o.exception={values:[{value:t,stacktrace:{frames:i}}]})}if(rg(t)){const{__sentry_template_string__:i,__sentry_template_values__:s}=t;return o.logentry={message:i,params:s},o}return o.message=t,o}function $3(e,{isUnhandledRejection:t}){const n=CN(e),r=t?"promise rejection":"exception";return gb(e)?`Event \`ErrorEvent\` captured as ${r} with message \`${e.message}\``:Yc(e)?`Event \`${O3(e)}\` (type=${e.type}) captured as ${r}`:`Object captured as ${r} with keys: ${n}`}function O3(e){try{const t=Object.getPrototypeOf(e);return t?t.constructor.name:void 0}catch{}}function A3(e){for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)){const n=e[t];if(n instanceof Error)return n}}function LT(e,{metadata:t,tunnel:n,dsn:r}){const o={event_id:e.event_id,sent_at:new Date().toISOString(),...t&&t.sdk&&{sdk:{name:t.sdk.name,version:t.sdk.version}},...!!n&&!!r&&{dsn:Po(r)}},i=M3(e);return lr(o,[i])}function M3(e){return[{type:"user_report"},e]}class DT extends LL{constructor(t){const n={parentSpanIsAlwaysRootSpan:!0,...t},r=U.SENTRY_SDK_SOURCE||DN();ET(n,"browser",["browser"],r),super(n),n.sendClientReports&&U.document&&U.document.addEventListener("visibilitychange",()=>{U.document.visibilityState==="hidden"&&this._flushOutcomes()})}eventFromException(t,n){return NT(this._options.stackParser,t,n,this._options.attachStacktrace)}eventFromMessage(t,n="info",r){return PT(this._options.stackParser,t,n,r,this._options.attachStacktrace)}captureUserFeedback(t){if(!this._isEnabled()){Z&&C.warn("SDK not enabled, will not capture user feedback.");return}const n=LT(t,{metadata:this.getSdkMetadata(),dsn:this.getDsn(),tunnel:this.getOptions().tunnel});this.sendEnvelope(n)}_prepareEvent(t,n,r){return t.platform=t.platform||"javascript",super._prepareEvent(t,n,r)}_flushOutcomes(){const t=this._clearOutcomes();if(t.length===0){Z&&C.log("No outcomes to send");return}if(!this._dsn){Z&&C.log("No dsn provided, will not send outcomes");return}Z&&C.log("Sending outcomes:",t);const n=hP(t,this._options.tunnel&&Po(this._dsn));this.sendEnvelope(n)}}const Bt=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,N3=(e,t)=>e>t[1]?"poor":e>t[0]?"needs-improvement":"good",us=(e,t,n,r)=>{let o,i;return s=>{t.value>=0&&(s||r)&&(i=t.value-(o||0),(i||o===void 0)&&(o=t.value,t.delta=i,t.rating=N3(t.value,n),e(t)))}},Y=K,P3=()=>`v3-${Date.now()}-${Math.floor(Math.random()*(9e12-1))+1e12}`,rf=()=>Y.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0],of=()=>{const e=rf();return e&&e.activationStart||0},cs=(e,t)=>{const n=rf();let r="navigate";return n&&(Y.document&&Y.document.prerendering||of()>0?r="prerender":Y.document&&Y.document.wasDiscarded?r="restore":n.type&&(r=n.type.replace(/_/g,"-"))),{name:e,value:typeof t>"u"?-1:t,rating:"good",delta:0,entries:[],id:P3(),navigationType:r}},jo=(e,t,n)=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){const r=new PerformanceObserver(o=>{Promise.resolve().then(()=>{t(o.getEntries())})});return r.observe(Object.assign({type:e,buffered:!0},n||{})),r}}catch{}},sf=e=>{const t=n=>{(n.type==="pagehide"||Y.document&&Y.document.visibilityState==="hidden")&&e(n)};Y.document&&(addEventListener("visibilitychange",t,!0),addEventListener("pagehide",t,!0))},Ig=e=>{let t=!1;return n=>{t||(e(n),t=!0)}};let xa=-1;const L3=()=>{xa=Y.document.visibilityState==="hidden"&&!Y.document.prerendering?0:1/0},sc=e=>{Y.document.visibilityState==="hidden"&&xa>-1&&(xa=e.type==="visibilitychange"?e.timeStamp:0,removeEventListener("visibilitychange",sc,!0),removeEventListener("prerenderingchange",sc,!0))},D3=()=>{addEventListener("visibilitychange",sc,!0),addEventListener("prerenderingchange",sc,!0)},af=()=>(Y.document&&xa<0&&(L3(),D3()),{get firstHiddenTime(){return xa}}),Ya=e=>{Y.document&&Y.document.prerendering?addEventListener("prerenderingchange",()=>e(),!0):e()},F3=[1800,3e3],U3=(e,t={})=>{Ya(()=>{const n=af(),r=cs("FCP");let o;const s=jo("paint",a=>{a.forEach(l=>{l.name==="first-contentful-paint"&&(s.disconnect(),l.startTime{U3(Ig(()=>{const n=cs("CLS",0);let r,o=0,i=[];const s=l=>{l.forEach(u=>{if(!u.hadRecentInput){const f=i[0],c=i[i.length-1];o&&u.startTime-c.startTime<1e3&&u.startTime-f.startTime<5e3?(o+=u.value,i.push(u)):(o=u.value,i=[u])}}),o>n.value&&(n.value=o,n.entries=i,r())},a=jo("layout-shift",s);a&&(r=us(e,n,j3,t.reportAllChanges),sf(()=>{s(a.takeRecords()),r(!0)}),setTimeout(r,0))}))},z3=[100,300],H3=(e,t={})=>{Ya(()=>{const n=af(),r=cs("FID");let o;const i=l=>{l.startTime{l.forEach(i)},a=jo("first-input",s);o=us(e,r,z3,t.reportAllChanges),a&&sf(Ig(()=>{s(a.takeRecords()),a.disconnect()}))})};let FT=0,Td=1/0,Il=0;const W3=e=>{e.forEach(t=>{t.interactionId&&(Td=Math.min(Td,t.interactionId),Il=Math.max(Il,t.interactionId),FT=Il?(Il-Td)/7+1:0)})};let ch;const V3=()=>ch?FT:performance.interactionCount||0,G3=()=>{"interactionCount"in performance||ch||(ch=jo("event",W3,{type:"event",buffered:!0,durationThreshold:0}))},q3=[200,500],K3=0,UT=()=>V3()-K3,e0=10,Gn=[],Cd={},t0=e=>{const t=Gn[Gn.length-1],n=Cd[e.interactionId];if(n||Gn.lengtht.latency){if(n)n.entries.push(e),n.latency=Math.max(n.latency,e.duration);else{const r={id:e.interactionId,latency:e.duration,entries:[e]};Cd[r.id]=r,Gn.push(r)}Gn.sort((r,o)=>o.latency-r.latency),Gn.splice(e0).forEach(r=>{delete Cd[r.id]})}},Y3=()=>{const e=Math.min(Gn.length-1,Math.floor(UT()/50));return Gn[e]},X3=(e,t={})=>{Ya(()=>{G3();const n=cs("INP");let r;const o=s=>{s.forEach(l=>{l.interactionId&&t0(l),l.entryType==="first-input"&&!Gn.some(f=>f.entries.some(c=>l.duration===c.duration&&l.startTime===c.startTime))&&t0(l)});const a=Y3();a&&a.latency!==n.value&&(n.value=a.latency,n.entries=a.entries,r())},i=jo("event",o,{durationThreshold:t.durationThreshold!=null?t.durationThreshold:40});r=us(e,n,q3,t.reportAllChanges),i&&("PerformanceEventTiming"in Y&&"interactionId"in PerformanceEventTiming.prototype&&i.observe({type:"first-input",buffered:!0}),sf(()=>{o(i.takeRecords()),n.value<0&&UT()>0&&(n.value=0,n.entries=[]),r(!0)}))})},J3=[2500,4e3],n0={},Q3=(e,t={})=>{Ya(()=>{const n=af(),r=cs("LCP");let o;const i=a=>{const l=a[a.length-1];l&&l.startTime{n0[r.id]||(i(s.takeRecords()),s.disconnect(),n0[r.id]=!0,o(!0))});["keydown","click"].forEach(l=>{Y.document&&addEventListener(l,()=>setTimeout(a,0),!0)}),sf(a)}})},Z3=[800,1800],fh=e=>{Y.document&&Y.document.prerendering?Ya(()=>fh(e)):Y.document&&Y.document.readyState!=="complete"?addEventListener("load",()=>fh(e),!0):setTimeout(e,0)},e4=(e,t={})=>{const n=cs("TTFB"),r=us(e,n,Z3,t.reportAllChanges);fh(()=>{const o=rf();if(o){const i=o.responseStart;if(i<=0||i>performance.now())return;n.value=Math.max(i-of(),0),n.entries=[o],r(!0)}})},Zs={},ac={};let jT,BT,zT,HT,WT;function t4(e,t=!1){return Xa("cls",e,i4,jT,t)}function VT(e,t=!1){return Xa("lcp",e,a4,zT,t)}function n4(e){return Xa("fid",e,s4,BT)}function r4(e){return Xa("ttfb",e,l4,HT)}function o4(e){return Xa("inp",e,u4,WT)}function lf(e,t){return GT(e,t),ac[e]||(c4(e),ac[e]=!0),qT(e,t)}function fs(e,t){const n=Zs[e];if(!(!n||!n.length))for(const r of n)try{r(t)}catch(o){Bt&&C.error(`Error while triggering instrumentation handler. +Type: ${e} +Name: ${rr(r)} +Error:`,o)}}function i4(){return B3(e=>{fs("cls",{metric:e}),jT=e},{reportAllChanges:!0})}function s4(){return H3(e=>{fs("fid",{metric:e}),BT=e})}function a4(){return Q3(e=>{fs("lcp",{metric:e}),zT=e})}function l4(){return e4(e=>{fs("ttfb",{metric:e}),HT=e})}function u4(){return X3(e=>{fs("inp",{metric:e}),WT=e})}function Xa(e,t,n,r,o=!1){GT(e,t);let i;return ac[e]||(i=n(),ac[e]=!0),r&&t({metric:r}),qT(e,t,o?i:void 0)}function c4(e){const t={};e==="event"&&(t.durationThreshold=0),jo(e,n=>{fs(e,{entries:n})},t)}function GT(e,t){Zs[e]=Zs[e]||[],Zs[e].push(t)}function qT(e,t,n){return()=>{n&&n();const r=Zs[e];if(!r)return;const o=r.indexOf(t);o!==-1&&r.splice(o,1)}}function kd(e){return typeof e=="number"&&isFinite(e)}function Ui(e,t,n,{...r}){const o=J(e).start_timestamp;return o&&o>t&&typeof e.updateStartTime=="function"&&e.updateStartTime(t),Ca(e,()=>{const i=Ht({startTime:t,...r});return i&&i.end(n),i})}function Rg(){return Y&&Y.addEventListener&&Y.performance}function it(e){return e/1e3}const f4=2147483647;let r0=0,je={},In,ea;function d4(){const e=Rg();if(e&&kt){e.mark&&Y.performance.mark("sentry-tracing-init");const t=y4(),n=m4(),r=g4(),o=_4();return()=>{t(),n(),r(),o()}}return()=>{}}function p4(){lf("longtask",({entries:e})=>{for(const t of e){if(!at())return;const n=it(kt+t.startTime),r=it(t.duration),o=Ht({name:"Main UI thread blocked",op:"ui.long-task",startTime:n,attributes:{[ge]:"auto.ui.browser.metrics"}});o&&o.end(n+r)}})}function h4(){lf("event",({entries:e})=>{for(const t of e){if(!at())return;if(t.name==="click"){const n=it(kt+t.startTime),r=it(t.duration),o={name:Br(t.target),op:`ui.interaction.${t.name}`,startTime:n,attributes:{[ge]:"auto.ui.browser.metrics"}},i=vb(t.target);i&&(o.attributes["ui.component_name"]=i);const s=Ht(o);s&&s.end(n+r)}}})}function m4(){return t4(({metric:e})=>{const t=e.entries[e.entries.length-1];t&&(Bt&&C.log("[Measurements] Adding CLS"),je.cls={value:e.value,unit:""},ea=t)},!0)}function g4(){return VT(({metric:e})=>{const t=e.entries[e.entries.length-1];t&&(Bt&&C.log("[Measurements] Adding LCP"),je.lcp={value:e.value,unit:"millisecond"},In=t)},!0)}function y4(){return n4(({metric:e})=>{const t=e.entries[e.entries.length-1];if(!t)return;const n=it(kt),r=it(t.startTime);Bt&&C.log("[Measurements] Adding FID"),je.fid={value:e.value,unit:"millisecond"},je["mark.fid"]={value:n+r,unit:"second"}})}function _4(){return r4(({metric:e})=>{e.entries[e.entries.length-1]&&(Bt&&C.log("[Measurements] Adding TTFB"),je.ttfb={value:e.value,unit:"millisecond"})})}function v4(e){const t=Rg();if(!t||!Y.performance.getEntries||!kt)return;Bt&&C.log("[Tracing] Adding & adjusting spans using Performance API");const n=it(kt),r=t.getEntries(),{op:o,start_timestamp:i}=J(e);if(r.slice(r0).forEach(s=>{const a=it(s.startTime),l=it(s.duration);if(!(o==="navigation"&&i&&n+a{if(!je[a]||!i||n>=i)return;const l=je[a].value,u=n+it(l),f=Math.abs((u-i)*1e3),c=f-l;Bt&&C.log(`[Measurements] Normalized ${a} from ${l} to ${f} (${c})`),je[a].value=f});const s=je["mark.fid"];s&&je.fid&&(Ui(e,s.value,s.value+it(je.fid.value),{name:"first input delay",op:"ui.action",attributes:{[ge]:"auto.ui.browser.metrics"}}),delete je["mark.fid"]),"fcp"in je||delete je.cls,Object.keys(je).forEach(a=>{Zb(a,je[a].value,je[a].unit)}),C4(e)}In=void 0,ea=void 0,je={}}function S4(e,t,n,r,o){const i=o+n,s=i+r;return Ui(e,i,s,{name:t.name,op:t.entryType,attributes:{[ge]:"auto.resource.browser.metrics"}}),i}function E4(e,t,n){["unloadEvent","redirect","domContentLoadedEvent","loadEvent","connect"].forEach(r=>{Rl(e,t,r,n)}),Rl(e,t,"secureConnection",n,"TLS/SSL","connectEnd"),Rl(e,t,"fetch",n,"cache","domainLookupStart"),Rl(e,t,"domainLookup",n,"DNS"),w4(e,t,n)}function Rl(e,t,n,r,o,i){const s=i?t[i]:t[`${n}End`],a=t[`${n}Start`];!a||!s||Ui(e,r+it(a),r+it(s),{op:"browser",name:o||n,attributes:{[ge]:"auto.ui.browser.metrics"}})}function w4(e,t,n){t.responseEnd&&(Ui(e,n+it(t.requestStart),n+it(t.responseEnd),{op:"browser",name:"request",attributes:{[ge]:"auto.ui.browser.metrics"}}),Ui(e,n+it(t.responseStart),n+it(t.responseEnd),{op:"browser",name:"response",attributes:{[ge]:"auto.ui.browser.metrics"}}))}function b4(e,t,n,r,o,i){if(t.initiatorType==="xmlhttprequest"||t.initiatorType==="fetch")return;const s=ho(n),a={[ge]:"auto.resource.browser.metrics"};xd(a,t,"transferSize","http.response_transfer_size"),xd(a,t,"encodedBodySize","http.response_content_length"),xd(a,t,"decodedBodySize","http.decoded_response_content_length"),"renderBlockingStatus"in t&&(a["resource.render_blocking_status"]=t.renderBlockingStatus),s.protocol&&(a["url.scheme"]=s.protocol.split(":").pop()),s.host&&(a["server.address"]=s.host),a["url.same_origin"]=n.includes(Y.location.origin);const l=i+r,u=l+o;Ui(e,l,u,{name:n.replace(Y.location.origin,""),op:t.initiatorType?`resource.${t.initiatorType}`:"resource.other",attributes:a})}function T4(e){const t=Y.navigator;if(!t)return;const n=t.connection;n&&(n.effectiveType&&e.setAttribute("effectiveConnectionType",n.effectiveType),n.type&&e.setAttribute("connectionType",n.type),kd(n.rtt)&&(je["connection.rtt"]={value:n.rtt,unit:"millisecond"})),kd(t.deviceMemory)&&e.setAttribute("deviceMemory",`${t.deviceMemory} GB`),kd(t.hardwareConcurrency)&&e.setAttribute("hardwareConcurrency",String(t.hardwareConcurrency))}function C4(e){In&&(Bt&&C.log("[Measurements] Adding LCP Data"),In.element&&e.setAttribute("lcp.element",Br(In.element)),In.id&&e.setAttribute("lcp.id",In.id),In.url&&e.setAttribute("lcp.url",In.url.trim().slice(0,200)),e.setAttribute("lcp.size",In.size)),ea&&ea.sources&&(Bt&&C.log("[Measurements] Adding CLS Data"),ea.sources.forEach((t,n)=>e.setAttribute(`cls.source.${n+1}`,Br(t.node))))}function xd(e,t,n,r){const o=t[n];o!=null&&o{const r=Y[n]&&Y[n].prototype;!r||!r.hasOwnProperty||!r.hasOwnProperty("addEventListener")||(ct(r,"addEventListener",function(o){return function(i,s,a){if(i==="click"||i=="keypress")try{const l=this,u=l.__sentry_instrumentation_handlers__=l.__sentry_instrumentation_handlers__||{},f=u[i]=u[i]||{refCount:0};if(!f.handler){const c=i0(e);f.handler=c,o.call(this,i,c,a)}f.refCount++}catch{}return o.call(this,i,s,a)}}),ct(r,"removeEventListener",function(o){return function(i,s,a){if(i==="click"||i=="keypress")try{const l=this,u=l.__sentry_instrumentation_handlers__||{},f=u[i];f&&(f.refCount--,f.refCount<=0&&(o.call(this,i,f.handler,a),f.handler=void 0,delete u[i]),Object.keys(u).length===0&&delete l.__sentry_instrumentation_handlers__)}catch{}return o.call(this,i,s,a)}}))})}function R4(e){if(e.type!==dh)return!1;try{if(!e.target||e.target._sentryId!==ph)return!1}catch{}return!0}function $4(e,t){return e!=="keypress"?!1:!t||!t.tagName?!0:!(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable)}function i0(e,t=!1){return n=>{if(!n||n._sentryCaptured)return;const r=O4(n);if($4(n.type,r))return;Vt(n,"_sentryCaptured",!0),r&&!r._sentryId&&Vt(r,"_sentryId",Ce());const o=n.type==="keypress"?"input":n.type;R4(n)||(e({event:n,name:o,global:t}),dh=n.type,ph=r?r._sentryId:void 0),clearTimeout(o0),o0=Y.setTimeout(()=>{ph=void 0,dh=void 0},x4)}}function O4(e){try{return e.target}catch{return null}}let $l;function uf(e){const t="history";Lo(t,e),Do(t,A4)}function A4(){if(!_P())return;const e=Y.onpopstate;Y.onpopstate=function(...n){const r=Y.location.href,o=$l;if($l=r,gn("history",{from:o,to:r}),e)try{return e.apply(this,n)}catch{}};function t(n){return function(...r){const o=r.length>2?r[2]:void 0;if(o){const i=$l,s=String(o);$l=s,gn("history",{from:i,to:s})}return n.apply(this,r)}}ct(Y.history,"pushState",t),ct(Y.history,"replaceState",t)}const ou={};function YT(e){const t=ou[e];if(t)return t;let n=Y[e];if(Gp(n))return ou[e]=n.bind(Y);const r=Y.document;if(r&&typeof r.createElement=="function")try{const o=r.createElement("iframe");o.hidden=!0,r.head.appendChild(o);const i=o.contentWindow;i&&i[e]&&(n=i[e]),r.head.removeChild(o)}catch(o){Bt&&C.warn(`Could not create sandbox iframe for ${e} check, bailing to window.${e}: `,o)}return n&&(ou[e]=n.bind(Y))}function s0(e){ou[e]=void 0}function Io(...e){return YT("setTimeout")(...e)}const Cr="__sentry_xhr_v3__";function $g(e){const t="xhr";Lo(t,e),Do(t,M4)}function M4(){if(!Y.XMLHttpRequest)return;const e=XMLHttpRequest.prototype;ct(e,"open",function(t){return function(...n){const r=Re()*1e3,o=Xn(n[0])?n[0].toUpperCase():void 0,i=N4(n[1]);if(!o||!i)return t.apply(this,n);this[Cr]={method:o,url:i,request_headers:{}},o==="POST"&&i.match(/sentry_key/)&&(this.__sentry_own_request__=!0);const s=()=>{const a=this[Cr];if(a&&this.readyState===4){try{a.status_code=this.status}catch{}const l={endTimestamp:Re()*1e3,startTimestamp:r,xhr:this};gn("xhr",l)}};return"onreadystatechange"in this&&typeof this.onreadystatechange=="function"?ct(this,"onreadystatechange",function(a){return function(...l){return s(),a.apply(this,l)}}):this.addEventListener("readystatechange",s),ct(this,"setRequestHeader",function(a){return function(...l){const[u,f]=l,c=this[Cr];return c&&Xn(u)&&Xn(f)&&(c.request_headers[u.toLowerCase()]=f),a.apply(this,l)}}),t.apply(this,n)}}),ct(e,"send",function(t){return function(...n){const r=this[Cr];if(!r)return t.apply(this,n);n[0]!==void 0&&(r.body=n[0]);const o={startTimestamp:Re()*1e3,xhr:this};return gn("xhr",o),t.apply(this,n)}})}function N4(e){if(Xn(e))return e;try{return e.toString()}catch{}}function P4(){if(Rg()&&kt){const t=L4();return()=>{t()}}return()=>{}}const a0={click:"click",pointerdown:"click",pointerup:"click",mousedown:"click",mouseup:"click",touchstart:"click",touchend:"click",mouseover:"hover",mouseout:"hover",mouseenter:"hover",mouseleave:"hover",pointerover:"hover",pointerout:"hover",pointerenter:"hover",pointerleave:"hover",dragstart:"drag",dragend:"drag",drag:"drag",dragenter:"drag",dragleave:"drag",dragover:"drag",drop:"drag",keydown:"press",keyup:"press",keypress:"press",input:"press"};function L4(){return o4(({metric:e})=>{const t=z();if(!t||e.value==null)return;const n=e.entries.find(y=>y.duration===e.value&&a0[y.name]);if(!n)return;const r=a0[n.name],o=t.getOptions(),i=it(kt+n.startTime),s=it(e.value),a=re(),l=at(),u=l?qe(l):void 0,f=u?J(u).description:void 0,c=a.getUser(),d=t.getIntegrationByName("Replay"),h=d&&d.getReplayId(),m=c!==void 0?c.email||c.id||c.ip_address:void 0;let _;try{_=a.getScopeData().contexts.profile.profile_id}catch{}const v=Br(n.target),g=Qe({release:o.release,environment:o.environment,transaction:f,[Hb]:e.value,user:m||void 0,profile_id:_||void 0,replay_id:h||void 0}),p=Ht({name:v,op:`ui.interaction.${r}`,attributes:g,startTime:i,experimental:{standalone:!0}});p.addEvent("inp",{[pg]:"millisecond",[hg]:e.value}),p.end(i+s)})}function Og(e,t=YT("fetch")){let n=0,r=0;function o(i){const s=i.body.length;n+=s,r++;const a={body:i.body,method:"POST",referrerPolicy:"origin",headers:e.headers,keepalive:n<=6e4&&r<15,...e.fetchOptions};if(!t)return s0("fetch"),Zu("No fetch implementation available");try{return t(e.url,a).then(l=>(n-=s,r--,{statusCode:l.status,headers:{"x-sentry-rate-limits":l.headers.get("X-Sentry-Rate-Limits"),"retry-after":l.headers.get("Retry-After")}}))}catch(l){return s0("fetch"),n-=s,r--,Zu(l)}}return _T(e,o)}const D4=10,F4=20,U4=30,j4=40,B4=50;function Ja(e,t,n,r){const o={filename:e,function:t===""?ar:t,in_app:!0};return n!==void 0&&(o.lineno=n),r!==void 0&&(o.colno=r),o}const z4=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,H4=/\((\S*)(?::(\d+))(?::(\d+))\)/,W4=e=>{const t=z4.exec(e);if(t){if(t[2]&&t[2].indexOf("eval")===0){const i=H4.exec(t[2]);i&&(t[2]=i[1],t[3]=i[2],t[4]=i[3])}const[r,o]=eC(t[1]||ar,t[2]);return Ja(o,r,t[3]?+t[3]:void 0,t[4]?+t[4]:void 0)}},XT=[U4,W4],V4=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,G4=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,q4=e=>{const t=V4.exec(e);if(t){if(t[3]&&t[3].indexOf(" > eval")>-1){const i=G4.exec(t[3]);i&&(t[1]=t[1]||"eval",t[3]=i[1],t[4]=i[2],t[5]="")}let r=t[3],o=t[1]||ar;return[o,r]=eC(o,r),Ja(r,o,t[4]?+t[4]:void 0,t[5]?+t[5]:void 0)}},JT=[B4,q4],K4=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,Y4=e=>{const t=K4.exec(e);return t?Ja(t[2],t[1]||ar,+t[3],t[4]?+t[4]:void 0):void 0},X4=[j4,Y4],J4=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,Q4=e=>{const t=J4.exec(e);return t?Ja(t[2],t[3]||ar,+t[1]):void 0},Z4=[D4,Q4],eF=/ line (\d+), column (\d+)\s*(?:in (?:]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,tF=e=>{const t=eF.exec(e);return t?Ja(t[5],t[3]||t[4]||ar,+t[1],+t[2]):void 0},nF=[F4,tF],QT=[XT,JT],ZT=kb(...QT),eC=(e,t)=>{const n=e.indexOf("safari-extension")!==-1,r=e.indexOf("safari-web-extension")!==-1;return n||r?[e.indexOf("@")!==-1?e.split("@")[0]:ar,n?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]},Ol=1024,rF="Breadcrumbs",oF=(e={})=>{const t={console:!0,dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0,...e};return{name:rF,setup(n){t.console&&xb(aF(n)),t.dom&&KT(sF(n,t.dom)),t.xhr&&$g(lF(n)),t.fetch&&sg(uF(n)),t.history&&uf(cF(n)),t.sentry&&n.on("beforeSendEvent",iF(n))}}},tC=oF;function iF(e){return function(n){z()===e&&Sn({category:`sentry.${n.type==="transaction"?"transaction":"event"}`,event_id:n.event_id,level:n.level,message:to(n)},{event:n})}}function sF(e,t){return function(r){if(z()!==e)return;let o,i,s=typeof t=="object"?t.serializeAttribute:void 0,a=typeof t=="object"&&typeof t.maxStringLength=="number"?t.maxStringLength:void 0;a&&a>Ol&&(Z&&C.warn(`\`dom.maxStringLength\` cannot exceed ${Ol}, but a value of ${a} was configured. Sentry will use ${Ol} instead.`),a=Ol),typeof s=="string"&&(s=[s]);try{const u=r.event,f=fF(u)?u.target:u;o=Br(f,{keyAttrs:s,maxStringLength:a}),i=vb(f)}catch{o=""}if(o.length===0)return;const l={category:`ui.${r.name}`,message:o};i&&(l.data={"ui.component_name":i}),Sn(l,{event:r.event,name:r.name,global:r.global})}}function aF(e){return function(n){if(z()!==e)return;const r={category:"console",data:{arguments:n.args,logger:"console"},level:Lb(n.level),message:Yu(n.args," ")};if(n.level==="assert")if(n.args[0]===!1)r.message=`Assertion failed: ${Yu(n.args.slice(1)," ")||"console.assert"}`,r.data.arguments=n.args.slice(1);else return;Sn(r,{input:n.args,level:n.level})}}function lF(e){return function(n){if(z()!==e)return;const{startTimestamp:r,endTimestamp:o}=n,i=n.xhr[Cr];if(!r||!o||!i)return;const{method:s,url:a,status_code:l,body:u}=i,f={method:s,url:a,status_code:l},c={xhr:n.xhr,input:u,startTimestamp:r,endTimestamp:o};Sn({category:"xhr",data:f,type:"http"},c)}}function uF(e){return function(n){if(z()!==e)return;const{startTimestamp:r,endTimestamp:o}=n;if(o&&!(n.fetchData.url.match(/sentry_key/)&&n.fetchData.method==="POST"))if(n.error){const i=n.fetchData,s={data:n.error,input:n.args,startTimestamp:r,endTimestamp:o};Sn({category:"fetch",data:i,level:"error",type:"http"},s)}else{const i=n.response,s={...n.fetchData,status_code:i&&i.status},a={input:n.args,response:i,startTimestamp:r,endTimestamp:o};Sn({category:"fetch",data:s,type:"http"},a)}}}function cF(e){return function(n){if(z()!==e)return;let r=n.from,o=n.to;const i=ho(U.location.href);let s=r?ho(r):void 0;const a=ho(o);(!s||!s.path)&&(s=i),i.protocol===a.protocol&&i.host===a.host&&(o=a.relative),i.protocol===s.protocol&&i.host===s.host&&(r=s.relative),Sn({category:"navigation",data:{from:r,to:o}})}}function fF(e){return!!e&&!!e.target}const dF=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","BroadcastChannel","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","SharedWorker","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],pF="BrowserApiErrors",hF=(e={})=>{const t={XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0,...e};return{name:pF,setupOnce(){t.setTimeout&&ct(U,"setTimeout",l0),t.setInterval&&ct(U,"setInterval",l0),t.requestAnimationFrame&&ct(U,"requestAnimationFrame",mF),t.XMLHttpRequest&&"XMLHttpRequest"in U&&ct(XMLHttpRequest.prototype,"send",gF);const n=t.eventTarget;n&&(Array.isArray(n)?n:dF).forEach(yF)}}},nC=hF;function l0(e){return function(...t){const n=t[0];return t[0]=Fi(n,{mechanism:{data:{function:rr(e)},handled:!1,type:"instrument"}}),e.apply(this,t)}}function mF(e){return function(t){return e.apply(this,[Fi(t,{mechanism:{data:{function:"requestAnimationFrame",handler:rr(e)},handled:!1,type:"instrument"}})])}}function gF(e){return function(...t){const n=this;return["onload","onerror","onprogress","onreadystatechange"].forEach(o=>{o in n&&typeof n[o]=="function"&&ct(n,o,function(i){const s={mechanism:{data:{function:o,handler:rr(i)},handled:!1,type:"instrument"}},a=ig(i);return a&&(s.mechanism.data.handler=rr(a)),Fi(i,s)})}),e.apply(this,t)}}function yF(e){const t=U,n=t[e]&&t[e].prototype;!n||!n.hasOwnProperty||!n.hasOwnProperty("addEventListener")||(ct(n,"addEventListener",function(r){return function(o,i,s){try{typeof i.handleEvent=="function"&&(i.handleEvent=Fi(i.handleEvent,{mechanism:{data:{function:"handleEvent",handler:rr(i),target:e},handled:!1,type:"instrument"}}))}catch{}return r.apply(this,[o,Fi(i,{mechanism:{data:{function:"addEventListener",handler:rr(i),target:e},handled:!1,type:"instrument"}}),s])}}),ct(n,"removeEventListener",function(r){return function(o,i,s){const a=i;try{const l=a&&a.__sentry_wrapped__;l&&r.call(this,o,l,s)}catch{}return r.call(this,o,a,s)}}))}const _F="GlobalHandlers",vF=(e={})=>{const t={onerror:!0,onunhandledrejection:!0,...e};return{name:_F,setupOnce(){Error.stackTraceLimit=50},setup(n){t.onerror&&(SF(n),u0("onerror")),t.onunhandledrejection&&(EF(n),u0("onunhandledrejection"))}}},rC=vF;function SF(e){Ob(t=>{const{stackParser:n,attachStacktrace:r}=oC();if(z()!==e||MT())return;const{msg:o,url:i,line:s,column:a,error:l}=t,u=TF(xg(n,l||o,void 0,r,!1),i,s,a);u.level="error",ls(u,{originalException:l,mechanism:{handled:!1,type:"onerror"}})})}function EF(e){Ab(t=>{const{stackParser:n,attachStacktrace:r}=oC();if(z()!==e||MT())return;const o=wF(t),i=og(o)?bF(o):xg(n,o,void 0,r,!0);i.level="error",ls(i,{originalException:o,mechanism:{handled:!1,type:"onunhandledrejection"}})})}function wF(e){if(og(e))return e;try{if("reason"in e)return e.reason;if("detail"in e&&"reason"in e.detail)return e.detail.reason}catch{}return e}function bF(e){return{exception:{values:[{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(e)}`}]}}}function TF(e,t,n,r){const o=e.exception=e.exception||{},i=o.values=o.values||[],s=i[0]=i[0]||{},a=s.stacktrace=s.stacktrace||{},l=a.frames=a.frames||[],u=isNaN(parseInt(r,10))?void 0:r,f=isNaN(parseInt(n,10))?void 0:n,c=Xn(t)&&t.length>0?t:_b();return l.length===0&&l.push({colno:u,filename:c,function:ar,in_app:!0,lineno:f}),e}function u0(e){Z&&C.log(`Global Handler attached: ${e}`)}function oC(){const e=z();return e&&e.getOptions()||{stackParser:()=>[],attachStacktrace:!1}}const iC=()=>({name:"HttpContext",preprocessEvent(e){if(!U.navigator&&!U.location&&!U.document)return;const t=e.request&&e.request.url||U.location&&U.location.href,{referrer:n}=U.document||{},{userAgent:r}=U.navigator||{},o={...e.request&&e.request.headers,...n&&{Referer:n},...r&&{"User-Agent":r}},i={...e.request,...t&&{url:t},headers:o};e.request=i}}),CF="cause",kF=5,xF="LinkedErrors",IF=(e={})=>{const t=e.limit||kF,n=e.key||CF;return{name:xF,preprocessEvent(r,o,i){const s=i.getOptions();hN(nf,s.stackParser,s.maxValueLength,n,t,r,o)}}},sC=IF;function aC(e){return[bT(),wT(),nC(),tC(),rC(),sC(),CT(),iC()]}function RF(e={}){return{...{defaultIntegrations:aC(),release:typeof __SENTRY_RELEASE__=="string"?__SENTRY_RELEASE__:U.SENTRY_RELEASE&&U.SENTRY_RELEASE.id?U.SENTRY_RELEASE.id:void 0,autoSessionTracking:!0,sendClientReports:!0},...e}}function $F(){const e=U,t=e.chrome?"chrome":"browser",n=e[t],r=n&&n.runtime&&n.runtime.id,o=U.location&&U.location.href||"",i=["chrome-extension:","moz-extension:","ms-browser-extension:"],s=!!r&&U===U.top&&i.some(a=>o.startsWith(`${a}//`));return!!r&&!s}function OF(e={}){const t=RF(e);if($F()){zr(()=>{console.error("[Sentry] You cannot run Sentry this way in a browser extension, check: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/")});return}Z&&(Ib()||C.warn("No Fetch API detected. The Sentry SDK requires a Fetch API compatible environment to send events. Please add a Fetch API polyfill."));const n={...t,stackParser:xN(t.stackParser||ZT),integrations:AL(t),transport:t.transport||Og};UL(DT,n),t.autoSessionTracking&&NF()}function hh(e={}){if(!U.document){Z&&C.error("Global document not defined in showReportDialog call");return}const t=re(),n=t.getClient(),r=n&&n.getDsn();if(!r){Z&&C.error("DSN not configured for showReportDialog call");return}if(t&&(e.user={...t.getUser(),...e.user}),!e.eventId){const a=uT();a&&(e.eventId=a)}const o=U.document.createElement("script");o.async=!0,o.crossOrigin="anonymous",o.src=$L(r,e),e.onLoad&&(o.onload=e.onLoad);const{onClose:i}=e;if(i){const a=l=>{if(l.data==="__sentry_reportdialog_closed__")try{i()}finally{U.removeEventListener("message",a)}};U.addEventListener("message",a)}const s=U.document.head||U.document.body;s?s.appendChild(o):Z&&C.error("Not injecting report dialog. No injection point found in HTML")}function AF(){}function MF(e){e()}function NF(){if(typeof U.document>"u"){Z&&C.warn("Session tracking in non-browser environment with @sentry/browser is not supported.");return}oc({ignoreDuration:!0}),sh(),uf(({from:e,to:t})=>{e!==void 0&&e!==t&&(oc({ignoreDuration:!0}),sh())})}function PF(e){const t=z();t&&t.captureUserFeedback(e)}const LF={replayIntegration:"replay",replayCanvasIntegration:"replay-canvas",feedbackIntegration:"feedback",feedbackModalIntegration:"feedback-modal",feedbackScreenshotIntegration:"feedback-screenshot",captureConsoleIntegration:"captureconsole",contextLinesIntegration:"contextlines",linkedErrorsIntegration:"linkederrors",debugIntegration:"debug",dedupeIntegration:"dedupe",extraErrorDataIntegration:"extraerrordata",httpClientIntegration:"httpclient",reportingObserverIntegration:"reportingobserver",rewriteFramesIntegration:"rewriteframes",sessionTimingIntegration:"sessiontiming",browserProfilingIntegration:"browserprofiling"},c0=U;async function Ag(e){const t=LF[e],n=c0.Sentry=c0.Sentry||{};if(!t)throw new Error(`Cannot lazy load integration: ${e}`);const r=n[e];if(typeof r=="function")return r;const o=DF(t),i=U.document.createElement("script");i.src=o,i.crossOrigin="anonymous";const s=new Promise((l,u)=>{i.addEventListener("load",()=>l()),i.addEventListener("error",u)});U.document.body.appendChild(i);try{await s}catch{throw new Error(`Error when loading integration: ${e}`)}const a=n[e];if(typeof a!="function")throw new Error(`Could not load integration: ${e}`);return a}function DF(e){const t=z(),n=t&&t.getOptions(),r=n&&n.cdnBaseUrl||"https://browser.sentry-cdn.com";return new URL(`/${Jn}/${e}.min.js`,r).toString()}const FF=K,UF="ReportingObserver",f0=new WeakMap,jF=(e={})=>{const t=e.types||["crash","deprecation","intervention"];function n(r){if(f0.has(z()))for(const o of r)wn(i=>{i.setExtra("url",o.url);const s=`ReportingObserver [${o.type}]`;let a="No details available";if(o.body){const l={};for(const u in o.body)l[u]=o.body[u];if(i.setExtra("body",l),o.type==="crash"){const u=o.body;a=[u.crashId||"",u.reason||""].join(" ").trim()||a}else a=o.body.message||a}rc(`${s}: ${a}`)})}return{name:UF,setupOnce(){if(!$N())return;new FF.ReportingObserver(n,{buffered:!0,types:t}).observe()},setup(r){f0.set(r,!0)}}},BF=jF,zF="HttpClient",HF=(e={})=>{const t={failedRequestStatusCodes:[[500,599]],failedRequestTargets:[/.*/],...e};return{name:zF,setup(n){QF(n,t),ZF(n,t)}}},WF=HF;function VF(e,t,n,r){if(uC(e,n.status,n.url)){const o=e5(t,r);let i,s,a,l;fC()&&([{headers:i,cookies:a},{headers:s,cookies:l}]=[{cookieHeader:"Cookie",obj:o},{cookieHeader:"Set-Cookie",obj:n}].map(({cookieHeader:f,obj:c})=>{const d=KF(c.headers);let h;try{const m=d[f]||d[f.toLowerCase()]||void 0;m&&(h=lC(m))}catch{Z&&C.log(`Could not extract cookies from header ${f}`)}return{headers:d,cookies:h}}));const u=cC({url:o.url,method:o.method,status:n.status,requestHeaders:i,responseHeaders:s,requestCookies:a,responseCookies:l});ls(u)}}function GF(e,t,n,r){if(uC(e,t.status,t.responseURL)){let o,i,s;if(fC()){try{const l=t.getResponseHeader("Set-Cookie")||t.getResponseHeader("set-cookie")||void 0;l&&(i=lC(l))}catch{Z&&C.log("Could not extract cookies from response headers")}try{s=YF(t)}catch{Z&&C.log("Could not extract headers from response")}o=r}const a=cC({url:t.responseURL,method:n,status:t.status,requestHeaders:o,responseHeaders:s,responseCookies:i});ls(a)}}function qF(e){if(e){const t=e["Content-Length"]||e["content-length"];if(t)return parseInt(t,10)}}function lC(e){return e.split("; ").reduce((t,n)=>{const[r,o]=n.split("=");return t[r]=o,t},{})}function KF(e){const t={};return e.forEach((n,r)=>{t[r]=n}),t}function YF(e){const t=e.getAllResponseHeaders();return t?t.split(`\r +`).reduce((n,r)=>{const[o,i]=r.split(": ");return n[o]=i,n},{}):{}}function XF(e,t){return e.some(n=>typeof n=="string"?t.includes(n):n.test(t))}function JF(e,t){return e.some(n=>typeof n=="number"?n===t:t>=n[0]&&t<=n[1])}function QF(e,t){Rb()&&sg(n=>{if(z()!==e)return;const{response:r,args:o}=n,[i,s]=o;r&&VF(t,i,r,s)})}function ZF(e,t){"XMLHttpRequest"in K&&$g(n=>{if(z()!==e)return;const r=n.xhr,o=r[Cr];if(!o)return;const{method:i,request_headers:s}=o;try{GF(t,r,i,s)}catch(a){Z&&C.warn("Error while extracting response event form XHR response",a)}})}function uC(e,t,n){return JF(e.failedRequestStatusCodes,t)&&XF(e.failedRequestTargets,n)&&!ST(n,z())}function cC(e){const t=`HTTP Client Error with status code: ${e.status}`,n={message:t,exception:{values:[{type:"Error",value:t}]},request:{url:e.url,method:e.method,headers:e.requestHeaders,cookies:e.requestCookies},contexts:{response:{status_code:e.status,headers:e.responseHeaders,cookies:e.responseCookies,body_size:qF(e.responseHeaders)}}};return ko(n,{type:"http.client",handled:!1}),n}function e5(e,t){return!t&&e instanceof Request||e instanceof Request&&e.bodyUsed?e:new Request(e,t)}function fC(){const e=z();return e?!!e.getOptions().sendDefaultPii:!1}const Id=K,t5=7,n5="ContextLines",r5=(e={})=>{const t=e.frameContextLines!=null?e.frameContextLines:t5;return{name:n5,processEvent(n){return i5(n,t)}}},o5=r5;function i5(e,t){const n=Id.document,r=Id.location&&QN(Id.location.href);if(!n||!r)return e;const o=e.exception&&e.exception.values;if(!o||!o.length)return e;const i=n.documentElement.innerHTML;if(!i)return e;const s=["","",...i.split(` +`),""];return o.forEach(a=>{const l=a.stacktrace;l&&l.frames&&(l.frames=l.frames.map(u=>s5(u,s,r,t)))}),e}function s5(e,t,n,r){return e.filename!==n||!e.lineno||!t.length||BN(t,e,r),e}const be=K,Mg="sentryReplaySession",a5="replay_event",Ng="Unable to send Replay",l5=3e5,u5=9e5,c5=5e3,f5=5500,d5=6e4,p5=5e3,h5=3,d0=15e4,Al=5e3,m5=3e3,g5=300,Pg=2e7,y5=4999,_5=15e3,p0=36e5;function v5(e,t){return e??t()}function lc(e){let t,n=e[0],r=1;for(;rn.call(t,...s)),t=void 0)}return n}var ot;(function(e){e[e.Document=0]="Document",e[e.DocumentType=1]="DocumentType",e[e.Element=2]="Element",e[e.Text=3]="Text",e[e.CDATA=4]="CDATA",e[e.Comment=5]="Comment"})(ot||(ot={}));function S5(e){return e.nodeType===e.ELEMENT_NODE}function ta(e){const t=lc([e,"optionalAccess",n=>n.host]);return lc([t,"optionalAccess",n=>n.shadowRoot])===e}function na(e){return Object.prototype.toString.call(e)==="[object ShadowRoot]"}function E5(e){return e.includes(" background-clip: text;")&&!e.includes(" -webkit-background-clip: text;")&&(e=e.replace(" background-clip: text;"," -webkit-background-clip: text; background-clip: text;")),e}function w5(e){const{cssText:t}=e;if(t.split('"').length<3)return t;const n=["@import",`url(${JSON.stringify(e.href)})`];return e.layerName===""?n.push("layer"):e.layerName&&n.push(`layer(${e.layerName})`),e.supportsText&&n.push(`supports(${e.supportsText})`),e.media.length&&n.push(e.media.mediaText),n.join(" ")+";"}function uc(e){try{const t=e.rules||e.cssRules;return t?E5(Array.from(t,dC).join("")):null}catch{return null}}function dC(e){let t;if(T5(e))try{t=uc(e.styleSheet)||w5(e)}catch{}else if(C5(e)&&e.selectorText.includes(":"))return b5(e.cssText);return t||e.cssText}function b5(e){const t=/(\[(?:[\w-]+)[^\\])(:(?:[\w-]+)\])/gm;return e.replace(t,"$1\\$2")}function T5(e){return"styleSheet"in e}function C5(e){return"selectorText"in e}class pC{constructor(){this.idNodeMap=new Map,this.nodeMetaMap=new WeakMap}getId(t){if(!t)return-1;const n=lc([this,"access",r=>r.getMeta,"call",r=>r(t),"optionalAccess",r=>r.id]);return v5(n,()=>-1)}getNode(t){return this.idNodeMap.get(t)||null}getIds(){return Array.from(this.idNodeMap.keys())}getMeta(t){return this.nodeMetaMap.get(t)||null}removeNodeFromMap(t){const n=this.getId(t);this.idNodeMap.delete(n),t.childNodes&&t.childNodes.forEach(r=>this.removeNodeFromMap(r))}has(t){return this.idNodeMap.has(t)}hasNode(t){return this.nodeMetaMap.has(t)}add(t,n){const r=n.id;this.idNodeMap.set(r,t),this.nodeMetaMap.set(t,n)}replace(t,n){const r=this.getNode(t);if(r){const o=this.nodeMetaMap.get(r);o&&this.nodeMetaMap.set(n,o)}this.idNodeMap.set(t,n)}reset(){this.idNodeMap=new Map,this.nodeMetaMap=new WeakMap}}function k5(){return new pC}function cf({maskInputOptions:e,tagName:t,type:n}){return t==="OPTION"&&(t="SELECT"),!!(e[t.toLowerCase()]||n&&e[n]||n==="password"||t==="INPUT"&&!n&&e.text)}function Ia({isMasked:e,element:t,value:n,maskInputFn:r}){let o=n||"";return e?(r&&(o=r(o,t)),"*".repeat(o.length)):o}function ji(e){return e.toLowerCase()}function mh(e){return e.toUpperCase()}const h0="__rrweb_original__";function x5(e){const t=e.getContext("2d");if(!t)return!0;const n=50;for(let r=0;rl!==0))return!1}return!0}function Lg(e){const t=e.type;return e.hasAttribute("data-rr-is-password")?"password":t?ji(t):null}function cc(e,t,n){return t==="INPUT"&&(n==="radio"||n==="checkbox")?e.getAttribute("value")||"":e.value}let I5=1;const R5=new RegExp("[^a-z0-9-_:]"),Ra=-2;function Dg(){return I5++}function $5(e){if(e instanceof HTMLFormElement)return"form";const t=ji(e.tagName);return R5.test(t)?"div":t}function O5(e){let t="";return e.indexOf("//")>-1?t=e.split("/").slice(0,3).join("/"):t=e.split("/")[0],t=t.split("?")[0],t}let Vo,m0;const A5=/url\((?:(')([^']*)'|(")(.*?)"|([^)]*))\)/gm,M5=/^(?:[a-z+]+:)?\/\//i,N5=/^www\..*/i,P5=/^(data:)([^,]*),(.*)/i;function fc(e,t){return(e||"").replace(A5,(n,r,o,i,s,a)=>{const l=o||s||a,u=r||i||"";if(!l)return n;if(M5.test(l)||N5.test(l))return`url(${u}${l}${u})`;if(P5.test(l))return`url(${u}${l}${u})`;if(l[0]==="/")return`url(${u}${O5(t)+l}${u})`;const f=t.split("/"),c=l.split("/");f.pop();for(const d of c)d!=="."&&(d===".."?f.pop():f.push(d));return`url(${u}${f.join("/")}${u})`})}const L5=/^[^ \t\n\r\u000c]+/,D5=/^[, \t\n\r\u000c]+/;function F5(e,t){if(t.trim()==="")return t;let n=0;function r(i){let s;const a=i.exec(t.substring(n));return a?(s=a[0],n+=s.length,s):""}const o=[];for(;r(D5),!(n>=t.length);){let i=r(L5);if(i.slice(-1)===",")i=ui(e,i.substring(0,i.length-1)),o.push(i);else{let s="";i=ui(e,i);let a=!1;for(;;){const l=t.charAt(n);if(l===""){o.push((i+s).trim());break}else if(a)l===")"&&(a=!1);else if(l===","){n+=1,o.push((i+s).trim());break}else l==="("&&(a=!0);s+=l,n+=1}}}return o.join(", ")}function ui(e,t){if(!t||t.trim()==="")return t;const n=e.createElement("a");return n.href=t,n.href}function U5(e){return!!(e.tagName==="svg"||e.ownerSVGElement)}function Fg(){const e=document.createElement("a");return e.href="",e.href}function hC(e,t,n,r,o,i){return r&&(n==="src"||n==="href"&&!(t==="use"&&r[0]==="#")||n==="xlink:href"&&r[0]!=="#"||n==="background"&&(t==="table"||t==="td"||t==="th")?ui(e,r):n==="srcset"?F5(e,r):n==="style"?fc(r,Fg()):t==="object"&&n==="data"?ui(e,r):typeof i=="function"?i(n,r,o):r)}function mC(e,t,n){return(e==="video"||e==="audio")&&t==="autoplay"}function j5(e,t,n,r){try{if(r&&e.matches(r))return!1;if(typeof t=="string"){if(e.classList.contains(t))return!0}else for(let o=e.classList.length;o--;){const i=e.classList[o];if(t.test(i))return!0}if(n)return e.matches(n)}catch{}return!1}function B5(e,t){for(let n=e.classList.length;n--;){const r=e.classList[n];if(t.test(r))return!0}return!1}function so(e,t,n=1/0,r=0){return!e||e.nodeType!==e.ELEMENT_NODE||r>n?-1:t(e)?r:so(e.parentNode,t,n,r+1)}function ci(e,t){return n=>{const r=n;if(r===null)return!1;try{if(e){if(typeof e=="string"){if(r.matches(`.${e}`))return!0}else if(B5(r,e))return!0}return!!(t&&r.matches(t))}catch{return!1}}}function Bi(e,t,n,r,o,i){try{const s=e.nodeType===e.ELEMENT_NODE?e:e.parentElement;if(s===null)return!1;if(s.tagName==="INPUT"){const u=s.getAttribute("autocomplete");if(["current-password","new-password","cc-number","cc-exp","cc-exp-month","cc-exp-year","cc-csc"].includes(u))return!0}let a=-1,l=-1;if(i){if(l=so(s,ci(r,o)),l<0)return!0;a=so(s,ci(t,n),l>=0?l:1/0)}else{if(a=so(s,ci(t,n)),a<0)return!1;l=so(s,ci(r,o),a>=0?a:1/0)}return a>=0?l>=0?a<=l:!0:l>=0?!1:!!i}catch{}return!!i}function z5(e,t,n){const r=e.contentWindow;if(!r)return;let o=!1,i;try{i=r.document.readyState}catch{return}if(i!=="complete"){const a=setTimeout(()=>{o||(t(),o=!0)},n);e.addEventListener("load",()=>{clearTimeout(a),o=!0,t()});return}const s="about:blank";if(r.location.href!==s||e.src===s||e.src==="")return setTimeout(t,0),e.addEventListener("load",t);e.addEventListener("load",t)}function H5(e,t,n){let r=!1,o;try{o=e.sheet}catch{return}if(o)return;const i=setTimeout(()=>{r||(t(),r=!0)},n);e.addEventListener("load",()=>{clearTimeout(i),r=!0,t()})}function W5(e,t){const{doc:n,mirror:r,blockClass:o,blockSelector:i,unblockSelector:s,maskAllText:a,maskAttributeFn:l,maskTextClass:u,unmaskTextClass:f,maskTextSelector:c,unmaskTextSelector:d,inlineStylesheet:h,maskInputOptions:m={},maskTextFn:_,maskInputFn:v,dataURLOptions:g={},inlineImages:p,recordCanvas:y,keepIframeSrcFn:S,newlyAddedElement:b=!1}=t,E=V5(n,r);switch(e.nodeType){case e.DOCUMENT_NODE:return e.compatMode!=="CSS1Compat"?{type:ot.Document,childNodes:[],compatMode:e.compatMode}:{type:ot.Document,childNodes:[]};case e.DOCUMENT_TYPE_NODE:return{type:ot.DocumentType,name:e.name,publicId:e.publicId,systemId:e.systemId,rootId:E};case e.ELEMENT_NODE:return q5(e,{doc:n,blockClass:o,blockSelector:i,unblockSelector:s,inlineStylesheet:h,maskAttributeFn:l,maskInputOptions:m,maskInputFn:v,dataURLOptions:g,inlineImages:p,recordCanvas:y,keepIframeSrcFn:S,newlyAddedElement:b,rootId:E,maskAllText:a,maskTextClass:u,unmaskTextClass:f,maskTextSelector:c,unmaskTextSelector:d});case e.TEXT_NODE:return G5(e,{maskAllText:a,maskTextClass:u,unmaskTextClass:f,maskTextSelector:c,unmaskTextSelector:d,maskTextFn:_,maskInputOptions:m,maskInputFn:v,rootId:E});case e.CDATA_SECTION_NODE:return{type:ot.CDATA,textContent:"",rootId:E};case e.COMMENT_NODE:return{type:ot.Comment,textContent:e.textContent||"",rootId:E};default:return!1}}function V5(e,t){if(!t.hasNode(e))return;const n=t.getId(e);return n===1?void 0:n}function G5(e,t){const{maskAllText:n,maskTextClass:r,unmaskTextClass:o,maskTextSelector:i,unmaskTextSelector:s,maskTextFn:a,maskInputOptions:l,maskInputFn:u,rootId:f}=t,c=e.parentNode&&e.parentNode.tagName;let d=e.textContent;const h=c==="STYLE"?!0:void 0,m=c==="SCRIPT"?!0:void 0,_=c==="TEXTAREA"?!0:void 0;if(h&&d){try{e.nextSibling||e.previousSibling||lc([e,"access",g=>g.parentNode,"access",g=>g.sheet,"optionalAccess",g=>g.cssRules])&&(d=uc(e.parentNode.sheet))}catch(g){console.warn(`Cannot get CSS styles from text's parentNode. Error: ${g}`,e)}d=fc(d,Fg())}m&&(d="SCRIPT_PLACEHOLDER");const v=Bi(e,r,i,o,s,n);if(!h&&!m&&!_&&d&&v&&(d=a?a(d,e.parentElement):d.replace(/[\S]/g,"*")),_&&d&&(l.textarea||v)&&(d=u?u(d,e.parentNode):d.replace(/[\S]/g,"*")),c==="OPTION"&&d){const g=cf({type:null,tagName:c,maskInputOptions:l});d=Ia({isMasked:Bi(e,r,i,o,s,g),element:e,value:d,maskInputFn:u})}return{type:ot.Text,textContent:d||"",isStyle:h,rootId:f}}function q5(e,t){const{doc:n,blockClass:r,blockSelector:o,unblockSelector:i,inlineStylesheet:s,maskInputOptions:a={},maskAttributeFn:l,maskInputFn:u,dataURLOptions:f={},inlineImages:c,recordCanvas:d,keepIframeSrcFn:h,newlyAddedElement:m=!1,rootId:_,maskAllText:v,maskTextClass:g,unmaskTextClass:p,maskTextSelector:y,unmaskTextSelector:S}=t,b=j5(e,r,o,i),E=$5(e);let w={};const x=e.attributes.length;for(let I=0;IW.href===e.href);let A=null;I&&(A=uc(I)),A&&(delete w.rel,delete w.href,w._cssText=fc(A,I.href))}if(E==="style"&&e.sheet&&!(e.innerText||e.textContent||"").trim().length){const I=uc(e.sheet);I&&(w._cssText=fc(I,Fg()))}if(E==="input"||E==="textarea"||E==="select"||E==="option"){const I=e,A=Lg(I),W=cc(I,mh(E),A),ee=I.checked;if(A!=="submit"&&A!=="button"&&W){const j=Bi(I,g,y,p,S,cf({type:A,tagName:mh(E),maskInputOptions:a}));w.value=Ia({isMasked:j,element:I,value:W,maskInputFn:u})}ee&&(w.checked=ee)}if(E==="option"&&(e.selected&&!a.select?w.selected=!0:delete w.selected),E==="canvas"&&d){if(e.__context==="2d")x5(e)||(w.rr_dataURL=e.toDataURL(f.type,f.quality));else if(!("__context"in e)){const I=e.toDataURL(f.type,f.quality),A=document.createElement("canvas");A.width=e.width,A.height=e.height;const W=A.toDataURL(f.type,f.quality);I!==W&&(w.rr_dataURL=I)}}if(E==="img"&&c){Vo||(Vo=n.createElement("canvas"),m0=Vo.getContext("2d"));const I=e,A=I.crossOrigin;I.crossOrigin="anonymous";const W=()=>{I.removeEventListener("load",W);try{Vo.width=I.naturalWidth,Vo.height=I.naturalHeight,m0.drawImage(I,0,0),w.rr_dataURL=Vo.toDataURL(f.type,f.quality)}catch(ee){console.warn(`Cannot inline img src=${I.currentSrc}! Error: ${ee}`)}A?w.crossOrigin=A:I.removeAttribute("crossorigin")};I.complete&&I.naturalWidth!==0?W():I.addEventListener("load",W)}if((E==="audio"||E==="video")&&(w.rr_mediaState=e.paused?"paused":"played",w.rr_mediaCurrentTime=e.currentTime),m||(e.scrollLeft&&(w.rr_scrollLeft=e.scrollLeft),e.scrollTop&&(w.rr_scrollTop=e.scrollTop)),b){const{width:I,height:A}=e.getBoundingClientRect();w={class:w.class,rr_width:`${I}px`,rr_height:`${A}px`}}E==="iframe"&&!h(w.src)&&(e.contentDocument||(w.rr_src=w.src),delete w.src);let D;try{customElements.get(E)&&(D=!0)}catch{}return{type:ot.Element,tagName:E,attributes:w,childNodes:[],isSVG:U5(e)||void 0,needBlock:b,rootId:_,isCustom:D}}function Ee(e){return e==null?"":e.toLowerCase()}function K5(e,t){if(t.comment&&e.type===ot.Comment)return!0;if(e.type===ot.Element){if(t.script&&(e.tagName==="script"||e.tagName==="link"&&(e.attributes.rel==="preload"||e.attributes.rel==="modulepreload")&&e.attributes.as==="script"||e.tagName==="link"&&e.attributes.rel==="prefetch"&&typeof e.attributes.href=="string"&&e.attributes.href.endsWith(".js")))return!0;if(t.headFavicon&&(e.tagName==="link"&&e.attributes.rel==="shortcut icon"||e.tagName==="meta"&&(Ee(e.attributes.name).match(/^msapplication-tile(image|color)$/)||Ee(e.attributes.name)==="application-name"||Ee(e.attributes.rel)==="icon"||Ee(e.attributes.rel)==="apple-touch-icon"||Ee(e.attributes.rel)==="shortcut icon")))return!0;if(e.tagName==="meta"){if(t.headMetaDescKeywords&&Ee(e.attributes.name).match(/^description|keywords$/))return!0;if(t.headMetaSocial&&(Ee(e.attributes.property).match(/^(og|twitter|fb):/)||Ee(e.attributes.name).match(/^(og|twitter):/)||Ee(e.attributes.name)==="pinterest"))return!0;if(t.headMetaRobots&&(Ee(e.attributes.name)==="robots"||Ee(e.attributes.name)==="googlebot"||Ee(e.attributes.name)==="bingbot"))return!0;if(t.headMetaHttpEquiv&&e.attributes["http-equiv"]!==void 0)return!0;if(t.headMetaAuthorship&&(Ee(e.attributes.name)==="author"||Ee(e.attributes.name)==="generator"||Ee(e.attributes.name)==="framework"||Ee(e.attributes.name)==="publisher"||Ee(e.attributes.name)==="progid"||Ee(e.attributes.property).match(/^article:/)||Ee(e.attributes.property).match(/^product:/)))return!0;if(t.headMetaVerification&&(Ee(e.attributes.name)==="google-site-verification"||Ee(e.attributes.name)==="yandex-verification"||Ee(e.attributes.name)==="csrf-token"||Ee(e.attributes.name)==="p:domain_verify"||Ee(e.attributes.name)==="verify-v1"||Ee(e.attributes.name)==="verification"||Ee(e.attributes.name)==="shopify-checkout-api-token"))return!0}}return!1}function fi(e,t){const{doc:n,mirror:r,blockClass:o,blockSelector:i,unblockSelector:s,maskAllText:a,maskTextClass:l,unmaskTextClass:u,maskTextSelector:f,unmaskTextSelector:c,skipChild:d=!1,inlineStylesheet:h=!0,maskInputOptions:m={},maskAttributeFn:_,maskTextFn:v,maskInputFn:g,slimDOMOptions:p,dataURLOptions:y={},inlineImages:S=!1,recordCanvas:b=!1,onSerialize:E,onIframeLoad:w,iframeLoadTimeout:x=5e3,onStylesheetLoad:D,stylesheetLoadTimeout:I=5e3,keepIframeSrcFn:A=()=>!1,newlyAddedElement:W=!1}=t;let{preserveWhiteSpace:ee=!0}=t;const j=W5(e,{doc:n,mirror:r,blockClass:o,blockSelector:i,maskAllText:a,unblockSelector:s,maskTextClass:l,unmaskTextClass:u,maskTextSelector:f,unmaskTextSelector:c,inlineStylesheet:h,maskInputOptions:m,maskAttributeFn:_,maskTextFn:v,maskInputFn:g,dataURLOptions:y,inlineImages:S,recordCanvas:b,keepIframeSrcFn:A,newlyAddedElement:W});if(!j)return console.warn(e,"not serialized"),null;let N;r.hasNode(e)?N=r.getId(e):K5(j,p)||!ee&&j.type===ot.Text&&!j.isStyle&&!j.textContent.replace(/^\s+|\s+$/gm,"").length?N=Ra:N=Dg();const R=Object.assign(j,{id:N});if(r.add(e,R),N===Ra)return null;E&&E(e);let L=!d;if(R.type===ot.Element){L=L&&!R.needBlock,delete R.needBlock;const T=e.shadowRoot;T&&na(T)&&(R.isShadowHost=!0)}if((R.type===ot.Document||R.type===ot.Element)&&L){p.headWhitespace&&R.type===ot.Element&&R.tagName==="head"&&(ee=!1);const T={doc:n,mirror:r,blockClass:o,blockSelector:i,maskAllText:a,unblockSelector:s,maskTextClass:l,unmaskTextClass:u,maskTextSelector:f,unmaskTextSelector:c,skipChild:d,inlineStylesheet:h,maskInputOptions:m,maskAttributeFn:_,maskTextFn:v,maskInputFn:g,slimDOMOptions:p,dataURLOptions:y,inlineImages:S,recordCanvas:b,preserveWhiteSpace:ee,onSerialize:E,onIframeLoad:w,iframeLoadTimeout:x,onStylesheetLoad:D,stylesheetLoadTimeout:I,keepIframeSrcFn:A};for(const O of Array.from(e.childNodes)){const $=fi(O,T);$&&R.childNodes.push($)}if(S5(e)&&e.shadowRoot)for(const O of Array.from(e.shadowRoot.childNodes)){const $=fi(O,T);$&&(na(e.shadowRoot)&&($.isShadow=!0),R.childNodes.push($))}}return e.parentNode&&ta(e.parentNode)&&na(e.parentNode)&&(R.isShadow=!0),R.type===ot.Element&&R.tagName==="iframe"&&z5(e,()=>{const T=e.contentDocument;if(T&&w){const O=fi(T,{doc:T,mirror:r,blockClass:o,blockSelector:i,unblockSelector:s,maskAllText:a,maskTextClass:l,unmaskTextClass:u,maskTextSelector:f,unmaskTextSelector:c,skipChild:!1,inlineStylesheet:h,maskInputOptions:m,maskAttributeFn:_,maskTextFn:v,maskInputFn:g,slimDOMOptions:p,dataURLOptions:y,inlineImages:S,recordCanvas:b,preserveWhiteSpace:ee,onSerialize:E,onIframeLoad:w,iframeLoadTimeout:x,onStylesheetLoad:D,stylesheetLoadTimeout:I,keepIframeSrcFn:A});O&&w(e,O)}},x),R.type===ot.Element&&R.tagName==="link"&&R.attributes.rel==="stylesheet"&&H5(e,()=>{if(D){const T=fi(e,{doc:n,mirror:r,blockClass:o,blockSelector:i,unblockSelector:s,maskAllText:a,maskTextClass:l,unmaskTextClass:u,maskTextSelector:f,unmaskTextSelector:c,skipChild:!1,inlineStylesheet:h,maskInputOptions:m,maskAttributeFn:_,maskTextFn:v,maskInputFn:g,slimDOMOptions:p,dataURLOptions:y,inlineImages:S,recordCanvas:b,preserveWhiteSpace:ee,onSerialize:E,onIframeLoad:w,iframeLoadTimeout:x,onStylesheetLoad:D,stylesheetLoadTimeout:I,keepIframeSrcFn:A});T&&D(e,T)}},I),R}function Y5(e,t){const{mirror:n=new pC,blockClass:r="rr-block",blockSelector:o=null,unblockSelector:i=null,maskAllText:s=!1,maskTextClass:a="rr-mask",unmaskTextClass:l=null,maskTextSelector:u=null,unmaskTextSelector:f=null,inlineStylesheet:c=!0,inlineImages:d=!1,recordCanvas:h=!1,maskAllInputs:m=!1,maskAttributeFn:_,maskTextFn:v,maskInputFn:g,slimDOM:p=!1,dataURLOptions:y,preserveWhiteSpace:S,onSerialize:b,onIframeLoad:E,iframeLoadTimeout:w,onStylesheetLoad:x,stylesheetLoadTimeout:D,keepIframeSrcFn:I=()=>!1}=t||{};return fi(e,{doc:e,mirror:n,blockClass:r,blockSelector:o,unblockSelector:i,maskAllText:s,maskTextClass:a,unmaskTextClass:l,maskTextSelector:u,unmaskTextSelector:f,skipChild:!1,inlineStylesheet:c,maskInputOptions:m===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0}:m===!1?{}:m,maskAttributeFn:_,maskTextFn:v,maskInputFn:g,slimDOMOptions:p===!0||p==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaDescKeywords:p==="all",headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaAuthorship:!0,headMetaVerification:!0}:p===!1?{}:p,dataURLOptions:y,inlineImages:d,recordCanvas:h,preserveWhiteSpace:S,onSerialize:b,onIframeLoad:E,iframeLoadTimeout:w,onStylesheetLoad:x,stylesheetLoadTimeout:D,keepIframeSrcFn:I,newlyAddedElement:!1})}function mr(e){let t,n=e[0],r=1;for(;rn.call(t,...s)),t=void 0)}return n}function Tt(e,t,n=document){const r={capture:!0,passive:!0};return n.addEventListener(e,t,r),()=>n.removeEventListener(e,t,r)}const Ko=`Please stop import mirror directly. Instead of that,\r +now you can use replayer.getMirror() to access the mirror instance of a replayer,\r +or you can use record.mirror to access the mirror instance during recording.`;let g0={map:{},getId(){return console.error(Ko),-1},getNode(){return console.error(Ko),null},removeNodeFromMap(){console.error(Ko)},has(){return console.error(Ko),!1},reset(){console.error(Ko)}};typeof window<"u"&&window.Proxy&&window.Reflect&&(g0=new Proxy(g0,{get(e,t,n){return t==="map"&&console.error(Ko),Reflect.get(e,t,n)}}));function $a(e,t,n={}){let r=null,o=0;return function(...i){const s=Date.now();!o&&n.leading===!1&&(o=s);const a=t-(s-o),l=this;a<=0||a>t?(r&&(n6(r),r=null),o=s,e.apply(l,i)):!r&&n.trailing!==!1&&(r=ff(()=>{o=n.leading===!1?0:Date.now(),r=null,e.apply(l,i)},a))}}function gC(e,t,n,r,o=window){const i=o.Object.getOwnPropertyDescriptor(e,t);return o.Object.defineProperty(e,t,r?n:{set(s){ff(()=>{n.set.call(this,s)},0),i&&i.set&&i.set.call(this,s)}}),()=>gC(e,t,i||{},!0)}function Ug(e,t,n){try{if(!(t in e))return()=>{};const r=e[t],o=n(r);return typeof o=="function"&&(o.prototype=o.prototype||{},Object.defineProperties(o,{__rrweb_original__:{enumerable:!1,value:r}})),e[t]=o,()=>{e[t]=r}}catch{return()=>{}}}let dc=Date.now;/[1-9][0-9]{12}/.test(Date.now().toString())||(dc=()=>new Date().getTime());function yC(e){const t=e.document;return{left:t.scrollingElement?t.scrollingElement.scrollLeft:e.pageXOffset!==void 0?e.pageXOffset:mr([t,"optionalAccess",n=>n.documentElement,"access",n=>n.scrollLeft])||mr([t,"optionalAccess",n=>n.body,"optionalAccess",n=>n.parentElement,"optionalAccess",n=>n.scrollLeft])||mr([t,"optionalAccess",n=>n.body,"optionalAccess",n=>n.scrollLeft])||0,top:t.scrollingElement?t.scrollingElement.scrollTop:e.pageYOffset!==void 0?e.pageYOffset:mr([t,"optionalAccess",n=>n.documentElement,"access",n=>n.scrollTop])||mr([t,"optionalAccess",n=>n.body,"optionalAccess",n=>n.parentElement,"optionalAccess",n=>n.scrollTop])||mr([t,"optionalAccess",n=>n.body,"optionalAccess",n=>n.scrollTop])||0}}function _C(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight}function vC(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth}function SC(e){return e?e.nodeType===e.ELEMENT_NODE?e:e.parentElement:null}function dn(e,t,n,r,o){if(!e)return!1;const i=SC(e);if(!i)return!1;const s=ci(t,n);if(!o){const u=r&&i.matches(r);return s(i)&&!u}const a=so(i,s);let l=-1;return a<0?!1:(r&&(l=so(i,ci(null,r))),a>-1&&l<0?!0:a{let n=t[0];if(!(0 in t))throw new TypeError("1 argument is required");do if(this===n)return!0;while(n=n&&n.parentNode);return!1})}function wC(e,t){return!!(e.nodeName==="IFRAME"&&t.getMeta(e))}function bC(e,t){return!!(e.nodeName==="LINK"&&e.nodeType===e.ELEMENT_NODE&&e.getAttribute&&e.getAttribute("rel")==="stylesheet"&&t.getMeta(e))}function yh(e){return!!mr([e,"optionalAccess",t=>t.shadowRoot])}class Q5{constructor(){this.id=1,this.styleIDMap=new WeakMap,this.idStyleMap=new Map}getId(t){return yP(this.styleIDMap.get(t),()=>-1)}has(t){return this.styleIDMap.has(t)}add(t,n){if(this.has(t))return this.getId(t);let r;return n===void 0?r=this.id++:r=n,this.styleIDMap.set(t,r),this.idStyleMap.set(r,t),r}getStyle(t){return this.idStyleMap.get(t)||null}reset(){this.styleIDMap=new WeakMap,this.idStyleMap=new Map,this.id=1}generateId(){return this.id++}}function TC(e){let t=null;return mr([e,"access",n=>n.getRootNode,"optionalCall",n=>n(),"optionalAccess",n=>n.nodeType])===Node.DOCUMENT_FRAGMENT_NODE&&e.getRootNode().host&&(t=e.getRootNode().host),t}function Z5(e){let t=e,n;for(;n=TC(t);)t=n;return t}function e6(e){const t=e.ownerDocument;if(!t)return!1;const n=Z5(e);return t.contains(n)}function CC(e){const t=e.ownerDocument;return t?t.contains(e)||e6(e):!1}const y0={};function jg(e){const t=y0[e];if(t)return t;const n=window.document;let r=window[e];if(n&&typeof n.createElement=="function")try{const o=n.createElement("iframe");o.hidden=!0,n.head.appendChild(o);const i=o.contentWindow;i&&i[e]&&(r=i[e]),n.head.removeChild(o)}catch{}return y0[e]=r.bind(window)}function t6(...e){return jg("requestAnimationFrame")(...e)}function ff(...e){return jg("setTimeout")(...e)}function n6(...e){return jg("clearTimeout")(...e)}var te=(e=>(e[e.DomContentLoaded=0]="DomContentLoaded",e[e.Load=1]="Load",e[e.FullSnapshot=2]="FullSnapshot",e[e.IncrementalSnapshot=3]="IncrementalSnapshot",e[e.Meta=4]="Meta",e[e.Custom=5]="Custom",e[e.Plugin=6]="Plugin",e))(te||{}),ne=(e=>(e[e.Mutation=0]="Mutation",e[e.MouseMove=1]="MouseMove",e[e.MouseInteraction=2]="MouseInteraction",e[e.Scroll=3]="Scroll",e[e.ViewportResize=4]="ViewportResize",e[e.Input=5]="Input",e[e.TouchMove=6]="TouchMove",e[e.MediaInteraction=7]="MediaInteraction",e[e.StyleSheetRule=8]="StyleSheetRule",e[e.CanvasMutation=9]="CanvasMutation",e[e.Font=10]="Font",e[e.Log=11]="Log",e[e.Drag=12]="Drag",e[e.StyleDeclaration=13]="StyleDeclaration",e[e.Selection=14]="Selection",e[e.AdoptedStyleSheet=15]="AdoptedStyleSheet",e[e.CustomElement=16]="CustomElement",e))(ne||{}),Et=(e=>(e[e.MouseUp=0]="MouseUp",e[e.MouseDown=1]="MouseDown",e[e.Click=2]="Click",e[e.ContextMenu=3]="ContextMenu",e[e.DblClick=4]="DblClick",e[e.Focus=5]="Focus",e[e.Blur=6]="Blur",e[e.TouchStart=7]="TouchStart",e[e.TouchMove_Departed=8]="TouchMove_Departed",e[e.TouchEnd=9]="TouchEnd",e[e.TouchCancel=10]="TouchCancel",e))(Et||{}),Bn=(e=>(e[e.Mouse=0]="Mouse",e[e.Pen=1]="Pen",e[e.Touch=2]="Touch",e))(Bn||{});function r6(e){let t,n=e[0],r=1;for(;rn.call(t,...s)),t=void 0)}return n}function _0(e){return"__ln"in e}class o6{constructor(){this.length=0,this.head=null,this.tail=null}get(t){if(t>=this.length)throw new Error("Position outside of list range");let n=this.head;for(let r=0;ro.next])||null;return n}addNode(t){const n={value:t,previous:null,next:null};if(t.__ln=n,t.previousSibling&&_0(t.previousSibling)){const r=t.previousSibling.__ln.next;n.next=r,n.previous=t.previousSibling.__ln,t.previousSibling.__ln.next=n,r&&(r.previous=n)}else if(t.nextSibling&&_0(t.nextSibling)&&t.nextSibling.__ln.previous){const r=t.nextSibling.__ln.previous;n.previous=r,n.next=t.nextSibling.__ln,t.nextSibling.__ln.previous=n,r&&(r.next=n)}else this.head&&(this.head.previous=n),n.next=this.head,this.head=n;n.next===null&&(this.tail=n),this.length++}removeNode(t){const n=t.__ln;this.head&&(n.previous?(n.previous.next=n.next,n.next?n.next.previous=n.previous:this.tail=n.previous):(this.head=n.next,this.head?this.head.previous=null:this.tail=null),t.__ln&&delete t.__ln,this.length--)}}const v0=(e,t)=>`${e}@${t}`;class i6{constructor(){this.frozen=!1,this.locked=!1,this.texts=[],this.attributes=[],this.attributeMap=new WeakMap,this.removes=[],this.mapRemoves=[],this.movedMap={},this.addedSet=new Set,this.movedSet=new Set,this.droppedSet=new Set,this.processMutations=t=>{t.forEach(this.processMutation),this.emit()},this.emit=()=>{if(this.frozen||this.locked)return;const t=[],n=new Set,r=new o6,o=l=>{let u=l,f=Ra;for(;f===Ra;)u=u&&u.nextSibling,f=u&&this.mirror.getId(u);return f},i=l=>{if(!l.parentNode||!CC(l))return;const u=ta(l.parentNode)?this.mirror.getId(TC(l)):this.mirror.getId(l.parentNode),f=o(l);if(u===-1||f===-1)return r.addNode(l);const c=fi(l,{doc:this.doc,mirror:this.mirror,blockClass:this.blockClass,blockSelector:this.blockSelector,maskAllText:this.maskAllText,unblockSelector:this.unblockSelector,maskTextClass:this.maskTextClass,unmaskTextClass:this.unmaskTextClass,maskTextSelector:this.maskTextSelector,unmaskTextSelector:this.unmaskTextSelector,skipChild:!0,newlyAddedElement:!0,inlineStylesheet:this.inlineStylesheet,maskInputOptions:this.maskInputOptions,maskAttributeFn:this.maskAttributeFn,maskTextFn:this.maskTextFn,maskInputFn:this.maskInputFn,slimDOMOptions:this.slimDOMOptions,dataURLOptions:this.dataURLOptions,recordCanvas:this.recordCanvas,inlineImages:this.inlineImages,onSerialize:d=>{wC(d,this.mirror)&&this.iframeManager.addIframe(d),bC(d,this.mirror)&&this.stylesheetManager.trackLinkElement(d),yh(l)&&this.shadowDomManager.addShadowRoot(l.shadowRoot,this.doc)},onIframeLoad:(d,h)=>{this.iframeManager.attachIframe(d,h),this.shadowDomManager.observeAttachShadow(d)},onStylesheetLoad:(d,h)=>{this.stylesheetManager.attachLinkElement(d,h)}});c&&(t.push({parentId:u,nextId:f,node:c}),n.add(c.id))};for(;this.mapRemoves.length;)this.mirror.removeNodeFromMap(this.mapRemoves.shift());for(const l of this.movedSet)S0(this.removes,l,this.mirror)&&!this.movedSet.has(l.parentNode)||i(l);for(const l of this.addedSet)!E0(this.droppedSet,l)&&!S0(this.removes,l,this.mirror)||E0(this.movedSet,l)?i(l):this.droppedSet.add(l);let s=null;for(;r.length;){let l=null;if(s){const u=this.mirror.getId(s.value.parentNode),f=o(s.value);u!==-1&&f!==-1&&(l=s)}if(!l){let u=r.tail;for(;u;){const f=u;if(u=u.previous,f){const c=this.mirror.getId(f.value.parentNode);if(o(f.value)===-1)continue;if(c!==-1){l=f;break}else{const h=f.value;if(h.parentNode&&h.parentNode.nodeType===Node.DOCUMENT_FRAGMENT_NODE){const m=h.parentNode.host;if(this.mirror.getId(m)!==-1){l=f;break}}}}}}if(!l){for(;r.head;)r.removeNode(r.head.value);break}s=l.previous,r.removeNode(l.value),i(l.value)}const a={texts:this.texts.map(l=>({id:this.mirror.getId(l.node),value:l.value})).filter(l=>!n.has(l.id)).filter(l=>this.mirror.has(l.id)),attributes:this.attributes.map(l=>{const{attributes:u}=l;if(typeof u.style=="string"){const f=JSON.stringify(l.styleDiff),c=JSON.stringify(l._unchangedStyles);f.length!n.has(l.id)).filter(l=>this.mirror.has(l.id)),removes:this.removes,adds:t};!a.texts.length&&!a.attributes.length&&!a.removes.length&&!a.adds.length||(this.texts=[],this.attributes=[],this.attributeMap=new WeakMap,this.removes=[],this.addedSet=new Set,this.movedSet=new Set,this.droppedSet=new Set,this.movedMap={},this.mutationCb(a))},this.processMutation=t=>{if(!Rd(t.target,this.mirror))switch(t.type){case"characterData":{const n=t.target.textContent;!dn(t.target,this.blockClass,this.blockSelector,this.unblockSelector,!1)&&n!==t.oldValue&&this.texts.push({value:Bi(t.target,this.maskTextClass,this.maskTextSelector,this.unmaskTextClass,this.unmaskTextSelector,this.maskAllText)&&n?this.maskTextFn?this.maskTextFn(n,SC(t.target)):n.replace(/[\S]/g,"*"):n,node:t.target});break}case"attributes":{const n=t.target;let r=t.attributeName,o=t.target.getAttribute(r);if(r==="value"){const s=Lg(n),a=n.tagName;o=cc(n,a,s);const l=cf({maskInputOptions:this.maskInputOptions,tagName:a,type:s}),u=Bi(t.target,this.maskTextClass,this.maskTextSelector,this.unmaskTextClass,this.unmaskTextSelector,l);o=Ia({isMasked:u,element:n,value:o,maskInputFn:this.maskInputFn})}if(dn(t.target,this.blockClass,this.blockSelector,this.unblockSelector,!1)||o===t.oldValue)return;let i=this.attributeMap.get(t.target);if(n.tagName==="IFRAME"&&r==="src"&&!this.keepIframeSrcFn(o))if(!n.contentDocument)r="rr_src";else return;if(i||(i={node:t.target,attributes:{},styleDiff:{},_unchangedStyles:{}},this.attributes.push(i),this.attributeMap.set(t.target,i)),r==="type"&&n.tagName==="INPUT"&&(t.oldValue||"").toLowerCase()==="password"&&n.setAttribute("data-rr-is-password","true"),!mC(n.tagName,r)&&(i.attributes[r]=hC(this.doc,ji(n.tagName),ji(r),o,n,this.maskAttributeFn),r==="style")){if(!this.unattachedDoc)try{this.unattachedDoc=document.implementation.createHTMLDocument()}catch{this.unattachedDoc=this.doc}const s=this.unattachedDoc.createElement("span");t.oldValue&&s.setAttribute("style",t.oldValue);for(const a of Array.from(n.style)){const l=n.style.getPropertyValue(a),u=n.style.getPropertyPriority(a);l!==s.style.getPropertyValue(a)||u!==s.style.getPropertyPriority(a)?u===""?i.styleDiff[a]=l:i.styleDiff[a]=[l,u]:i._unchangedStyles[a]=[l,u]}for(const a of Array.from(s.style))n.style.getPropertyValue(a)===""&&(i.styleDiff[a]=!1)}break}case"childList":{if(dn(t.target,this.blockClass,this.blockSelector,this.unblockSelector,!0))return;t.addedNodes.forEach(n=>this.genAdds(n,t.target)),t.removedNodes.forEach(n=>{const r=this.mirror.getId(n),o=ta(t.target)?this.mirror.getId(t.target.host):this.mirror.getId(t.target);dn(t.target,this.blockClass,this.blockSelector,this.unblockSelector,!1)||Rd(n,this.mirror)||!X5(n,this.mirror)||(this.addedSet.has(n)?(_h(this.addedSet,n),this.droppedSet.add(n)):this.addedSet.has(t.target)&&r===-1||EC(t.target,this.mirror)||(this.movedSet.has(n)&&this.movedMap[v0(r,o)]?_h(this.movedSet,n):this.removes.push({parentId:o,id:r,isShadow:ta(t.target)&&na(t.target)?!0:void 0})),this.mapRemoves.push(n))});break}}},this.genAdds=(t,n)=>{if(!this.processedNodeManager.inOtherBuffer(t,this)&&!(this.addedSet.has(t)||this.movedSet.has(t))){if(this.mirror.hasNode(t)){if(Rd(t,this.mirror))return;this.movedSet.add(t);let r=null;n&&this.mirror.hasNode(n)&&(r=this.mirror.getId(n)),r&&r!==-1&&(this.movedMap[v0(this.mirror.getId(t),r)]=!0)}else this.addedSet.add(t),this.droppedSet.delete(t);dn(t,this.blockClass,this.blockSelector,this.unblockSelector,!1)||(t.childNodes.forEach(r=>this.genAdds(r)),yh(t)&&t.shadowRoot.childNodes.forEach(r=>{this.processedNodeManager.add(r,this),this.genAdds(r,t)}))}}}init(t){["mutationCb","blockClass","blockSelector","unblockSelector","maskAllText","maskTextClass","unmaskTextClass","maskTextSelector","unmaskTextSelector","inlineStylesheet","maskInputOptions","maskAttributeFn","maskTextFn","maskInputFn","keepIframeSrcFn","recordCanvas","inlineImages","slimDOMOptions","dataURLOptions","doc","mirror","iframeManager","stylesheetManager","shadowDomManager","canvasManager","processedNodeManager"].forEach(n=>{this[n]=t[n]})}freeze(){this.frozen=!0,this.canvasManager.freeze()}unfreeze(){this.frozen=!1,this.canvasManager.unfreeze(),this.emit()}isFrozen(){return this.frozen}lock(){this.locked=!0,this.canvasManager.lock()}unlock(){this.locked=!1,this.canvasManager.unlock(),this.emit()}reset(){this.shadowDomManager.reset(),this.canvasManager.reset()}}function _h(e,t){e.delete(t),t.childNodes.forEach(n=>_h(e,n))}function S0(e,t,n){return e.length===0?!1:kC(e,t,n)}function kC(e,t,n){const{parentNode:r}=t;if(!r)return!1;const o=n.getId(r);return e.some(i=>i.id===o)?!0:kC(e,r,n)}function E0(e,t){return e.size===0?!1:xC(e,t)}function xC(e,t){const{parentNode:n}=t;return n?e.has(n)?!0:xC(e,n):!1}let ra;function s6(e){ra=e}function a6(){ra=void 0}const se=e=>ra?(...n)=>{try{return e(...n)}catch(r){if(ra&&ra(r)===!0)return()=>{};throw r}}:e;function Rn(e){let t,n=e[0],r=1;for(;rn.call(t,...s)),t=void 0)}return n}const di=[];function Qa(e){try{if("composedPath"in e){const t=e.composedPath();if(t.length)return t[0]}else if("path"in e&&e.path.length)return e.path[0]}catch{}return e&&e.target}function IC(e,t){const n=new i6;di.push(n),n.init(e);let r=window.MutationObserver||window.__rrMutationObserver;const o=Rn([window,"optionalAccess",s=>s.Zone,"optionalAccess",s=>s.__symbol__,"optionalCall",s=>s("MutationObserver")]);o&&window[o]&&(r=window[o]);const i=new r(se(s=>{e.onMutation&&e.onMutation(s)===!1||n.processMutations.bind(n)(s)}));return i.observe(t,{attributes:!0,attributeOldValue:!0,characterData:!0,characterDataOldValue:!0,childList:!0,subtree:!0}),i}function l6({mousemoveCb:e,sampling:t,doc:n,mirror:r}){if(t.mousemove===!1)return()=>{};const o=typeof t.mousemove=="number"?t.mousemove:50,i=typeof t.mousemoveCallback=="number"?t.mousemoveCallback:500;let s=[],a;const l=$a(se(c=>{const d=Date.now()-a;e(s.map(h=>(h.timeOffset-=d,h)),c),s=[],a=null}),i),u=se($a(se(c=>{const d=Qa(c),{clientX:h,clientY:m}=gh(c)?c.changedTouches[0]:c;a||(a=dc()),s.push({x:h,y:m,id:r.getId(d),timeOffset:dc()-a}),l(typeof DragEvent<"u"&&c instanceof DragEvent?ne.Drag:c instanceof MouseEvent?ne.MouseMove:ne.TouchMove)}),o,{trailing:!1})),f=[Tt("mousemove",u,n),Tt("touchmove",u,n),Tt("drag",u,n)];return se(()=>{f.forEach(c=>c())})}function u6({mouseInteractionCb:e,doc:t,mirror:n,blockClass:r,blockSelector:o,unblockSelector:i,sampling:s}){if(s.mouseInteraction===!1)return()=>{};const a=s.mouseInteraction===!0||s.mouseInteraction===void 0?{}:s.mouseInteraction,l=[];let u=null;const f=c=>d=>{const h=Qa(d);if(dn(h,r,o,i,!0))return;let m=null,_=c;if("pointerType"in d){switch(d.pointerType){case"mouse":m=Bn.Mouse;break;case"touch":m=Bn.Touch;break;case"pen":m=Bn.Pen;break}m===Bn.Touch?Et[c]===Et.MouseDown?_="TouchStart":Et[c]===Et.MouseUp&&(_="TouchEnd"):Bn.Pen}else gh(d)&&(m=Bn.Touch);m!==null?(u=m,(_.startsWith("Touch")&&m===Bn.Touch||_.startsWith("Mouse")&&m===Bn.Mouse)&&(m=null)):Et[c]===Et.Click&&(m=u,u=null);const v=gh(d)?d.changedTouches[0]:d;if(!v)return;const g=n.getId(h),{clientX:p,clientY:y}=v;se(e)({type:Et[_],id:g,x:p,y,...m!==null&&{pointerType:m}})};return Object.keys(Et).filter(c=>Number.isNaN(Number(c))&&!c.endsWith("_Departed")&&a[c]!==!1).forEach(c=>{let d=ji(c);const h=f(c);if(window.PointerEvent)switch(Et[c]){case Et.MouseDown:case Et.MouseUp:d=d.replace("mouse","pointer");break;case Et.TouchStart:case Et.TouchEnd:return}l.push(Tt(d,h,t))}),se(()=>{l.forEach(c=>c())})}function RC({scrollCb:e,doc:t,mirror:n,blockClass:r,blockSelector:o,unblockSelector:i,sampling:s}){const a=se($a(se(l=>{const u=Qa(l);if(!u||dn(u,r,o,i,!0))return;const f=n.getId(u);if(u===t&&t.defaultView){const c=yC(t.defaultView);e({id:f,x:c.left,y:c.top})}else e({id:f,x:u.scrollLeft,y:u.scrollTop})}),s.scroll||100));return Tt("scroll",a,t)}function c6({viewportResizeCb:e},{win:t}){let n=-1,r=-1;const o=se($a(se(()=>{const i=_C(),s=vC();(n!==i||r!==s)&&(e({width:Number(s),height:Number(i)}),n=i,r=s)}),200));return Tt("resize",o,t)}const f6=["INPUT","TEXTAREA","SELECT"],w0=new WeakMap;function d6({inputCb:e,doc:t,mirror:n,blockClass:r,blockSelector:o,unblockSelector:i,ignoreClass:s,ignoreSelector:a,maskInputOptions:l,maskInputFn:u,sampling:f,userTriggeredOnInput:c,maskTextClass:d,unmaskTextClass:h,maskTextSelector:m,unmaskTextSelector:_}){function v(w){let x=Qa(w);const D=w.isTrusted,I=x&&mh(x.tagName);if(I==="OPTION"&&(x=x.parentElement),!x||!I||f6.indexOf(I)<0||dn(x,r,o,i,!0))return;const A=x;if(A.classList.contains(s)||a&&A.matches(a))return;const W=Lg(x);let ee=cc(A,I,W),j=!1;const N=cf({maskInputOptions:l,tagName:I,type:W}),R=Bi(x,d,m,h,_,N);(W==="radio"||W==="checkbox")&&(j=x.checked),ee=Ia({isMasked:R,element:x,value:ee,maskInputFn:u}),g(x,c?{text:ee,isChecked:j,userTriggered:D}:{text:ee,isChecked:j});const L=x.name;W==="radio"&&L&&j&&t.querySelectorAll(`input[type="radio"][name="${L}"]`).forEach(T=>{if(T!==x){const O=Ia({isMasked:R,element:T,value:cc(T,I,W),maskInputFn:u});g(T,c?{text:O,isChecked:!j,userTriggered:!1}:{text:O,isChecked:!j})}})}function g(w,x){const D=w0.get(w);if(!D||D.text!==x.text||D.isChecked!==x.isChecked){w0.set(w,x);const I=n.getId(w);se(e)({...x,id:I})}}const y=(f.input==="last"?["change"]:["input","change"]).map(w=>Tt(w,se(v),t)),S=t.defaultView;if(!S)return()=>{y.forEach(w=>w())};const b=S.Object.getOwnPropertyDescriptor(S.HTMLInputElement.prototype,"value"),E=[[S.HTMLInputElement.prototype,"value"],[S.HTMLInputElement.prototype,"checked"],[S.HTMLSelectElement.prototype,"value"],[S.HTMLTextAreaElement.prototype,"value"],[S.HTMLSelectElement.prototype,"selectedIndex"],[S.HTMLOptionElement.prototype,"selected"]];return b&&b.set&&y.push(...E.map(w=>gC(w[0],w[1],{set(){se(v)({target:this,isTrusted:!1})}},!1,S))),se(()=>{y.forEach(w=>w())})}function pc(e){const t=[];function n(r,o){if(Ml("CSSGroupingRule")&&r.parentRule instanceof CSSGroupingRule||Ml("CSSMediaRule")&&r.parentRule instanceof CSSMediaRule||Ml("CSSSupportsRule")&&r.parentRule instanceof CSSSupportsRule||Ml("CSSConditionRule")&&r.parentRule instanceof CSSConditionRule){const s=Array.from(r.parentRule.cssRules).indexOf(r);o.unshift(s)}else if(r.parentStyleSheet){const s=Array.from(r.parentStyleSheet.cssRules).indexOf(r);o.unshift(s)}return o}return n(e,t)}function gr(e,t,n){let r,o;return e?(e.ownerNode?r=t.getId(e.ownerNode):o=n.getId(e),{styleId:o,id:r}):{}}function p6({styleSheetRuleCb:e,mirror:t,stylesheetManager:n},{win:r}){if(!r.CSSStyleSheet||!r.CSSStyleSheet.prototype)return()=>{};const o=r.CSSStyleSheet.prototype.insertRule;r.CSSStyleSheet.prototype.insertRule=new Proxy(o,{apply:se((f,c,d)=>{const[h,m]=d,{id:_,styleId:v}=gr(c,t,n.styleMirror);return(_&&_!==-1||v&&v!==-1)&&e({id:_,styleId:v,adds:[{rule:h,index:m}]}),f.apply(c,d)})});const i=r.CSSStyleSheet.prototype.deleteRule;r.CSSStyleSheet.prototype.deleteRule=new Proxy(i,{apply:se((f,c,d)=>{const[h]=d,{id:m,styleId:_}=gr(c,t,n.styleMirror);return(m&&m!==-1||_&&_!==-1)&&e({id:m,styleId:_,removes:[{index:h}]}),f.apply(c,d)})});let s;r.CSSStyleSheet.prototype.replace&&(s=r.CSSStyleSheet.prototype.replace,r.CSSStyleSheet.prototype.replace=new Proxy(s,{apply:se((f,c,d)=>{const[h]=d,{id:m,styleId:_}=gr(c,t,n.styleMirror);return(m&&m!==-1||_&&_!==-1)&&e({id:m,styleId:_,replace:h}),f.apply(c,d)})}));let a;r.CSSStyleSheet.prototype.replaceSync&&(a=r.CSSStyleSheet.prototype.replaceSync,r.CSSStyleSheet.prototype.replaceSync=new Proxy(a,{apply:se((f,c,d)=>{const[h]=d,{id:m,styleId:_}=gr(c,t,n.styleMirror);return(m&&m!==-1||_&&_!==-1)&&e({id:m,styleId:_,replaceSync:h}),f.apply(c,d)})}));const l={};Nl("CSSGroupingRule")?l.CSSGroupingRule=r.CSSGroupingRule:(Nl("CSSMediaRule")&&(l.CSSMediaRule=r.CSSMediaRule),Nl("CSSConditionRule")&&(l.CSSConditionRule=r.CSSConditionRule),Nl("CSSSupportsRule")&&(l.CSSSupportsRule=r.CSSSupportsRule));const u={};return Object.entries(l).forEach(([f,c])=>{u[f]={insertRule:c.prototype.insertRule,deleteRule:c.prototype.deleteRule},c.prototype.insertRule=new Proxy(u[f].insertRule,{apply:se((d,h,m)=>{const[_,v]=m,{id:g,styleId:p}=gr(h.parentStyleSheet,t,n.styleMirror);return(g&&g!==-1||p&&p!==-1)&&e({id:g,styleId:p,adds:[{rule:_,index:[...pc(h),v||0]}]}),d.apply(h,m)})}),c.prototype.deleteRule=new Proxy(u[f].deleteRule,{apply:se((d,h,m)=>{const[_]=m,{id:v,styleId:g}=gr(h.parentStyleSheet,t,n.styleMirror);return(v&&v!==-1||g&&g!==-1)&&e({id:v,styleId:g,removes:[{index:[...pc(h),_]}]}),d.apply(h,m)})})}),se(()=>{r.CSSStyleSheet.prototype.insertRule=o,r.CSSStyleSheet.prototype.deleteRule=i,s&&(r.CSSStyleSheet.prototype.replace=s),a&&(r.CSSStyleSheet.prototype.replaceSync=a),Object.entries(l).forEach(([f,c])=>{c.prototype.insertRule=u[f].insertRule,c.prototype.deleteRule=u[f].deleteRule})})}function $C({mirror:e,stylesheetManager:t},n){let r=null;n.nodeName==="#document"?r=e.getId(n):r=e.getId(n.host);const o=n.nodeName==="#document"?Rn([n,"access",s=>s.defaultView,"optionalAccess",s=>s.Document]):Rn([n,"access",s=>s.ownerDocument,"optionalAccess",s=>s.defaultView,"optionalAccess",s=>s.ShadowRoot]),i=Rn([o,"optionalAccess",s=>s.prototype])?Object.getOwnPropertyDescriptor(Rn([o,"optionalAccess",s=>s.prototype]),"adoptedStyleSheets"):void 0;return r===null||r===-1||!o||!i?()=>{}:(Object.defineProperty(n,"adoptedStyleSheets",{configurable:i.configurable,enumerable:i.enumerable,get(){return Rn([i,"access",s=>s.get,"optionalAccess",s=>s.call,"call",s=>s(this)])},set(s){const a=Rn([i,"access",l=>l.set,"optionalAccess",l=>l.call,"call",l=>l(this,s)]);if(r!==null&&r!==-1)try{t.adoptStyleSheets(s,r)}catch{}return a}}),se(()=>{Object.defineProperty(n,"adoptedStyleSheets",{configurable:i.configurable,enumerable:i.enumerable,get:i.get,set:i.set})}))}function h6({styleDeclarationCb:e,mirror:t,ignoreCSSAttributes:n,stylesheetManager:r},{win:o}){const i=o.CSSStyleDeclaration.prototype.setProperty;o.CSSStyleDeclaration.prototype.setProperty=new Proxy(i,{apply:se((a,l,u)=>{const[f,c,d]=u;if(n.has(f))return i.apply(l,[f,c,d]);const{id:h,styleId:m}=gr(Rn([l,"access",_=>_.parentRule,"optionalAccess",_=>_.parentStyleSheet]),t,r.styleMirror);return(h&&h!==-1||m&&m!==-1)&&e({id:h,styleId:m,set:{property:f,value:c,priority:d},index:pc(l.parentRule)}),a.apply(l,u)})});const s=o.CSSStyleDeclaration.prototype.removeProperty;return o.CSSStyleDeclaration.prototype.removeProperty=new Proxy(s,{apply:se((a,l,u)=>{const[f]=u;if(n.has(f))return s.apply(l,[f]);const{id:c,styleId:d}=gr(Rn([l,"access",h=>h.parentRule,"optionalAccess",h=>h.parentStyleSheet]),t,r.styleMirror);return(c&&c!==-1||d&&d!==-1)&&e({id:c,styleId:d,remove:{property:f},index:pc(l.parentRule)}),a.apply(l,u)})}),se(()=>{o.CSSStyleDeclaration.prototype.setProperty=i,o.CSSStyleDeclaration.prototype.removeProperty=s})}function m6({mediaInteractionCb:e,blockClass:t,blockSelector:n,unblockSelector:r,mirror:o,sampling:i,doc:s}){const a=se(u=>$a(se(f=>{const c=Qa(f);if(!c||dn(c,t,n,r,!0))return;const{currentTime:d,volume:h,muted:m,playbackRate:_}=c;e({type:u,id:o.getId(c),currentTime:d,volume:h,muted:m,playbackRate:_})}),i.media||500)),l=[Tt("play",a(0),s),Tt("pause",a(1),s),Tt("seeked",a(2),s),Tt("volumechange",a(3),s),Tt("ratechange",a(4),s)];return se(()=>{l.forEach(u=>u())})}function g6({fontCb:e,doc:t}){const n=t.defaultView;if(!n)return()=>{};const r=[],o=new WeakMap,i=n.FontFace;n.FontFace=function(l,u,f){const c=new i(l,u,f);return o.set(c,{family:l,buffer:typeof u!="string",descriptors:f,fontSource:typeof u=="string"?u:JSON.stringify(Array.from(new Uint8Array(u)))}),c};const s=Ug(t.fonts,"add",function(a){return function(l){return ff(se(()=>{const u=o.get(l);u&&(e(u),o.delete(l))}),0),a.apply(this,[l])}});return r.push(()=>{n.FontFace=i}),r.push(s),se(()=>{r.forEach(a=>a())})}function y6(e){const{doc:t,mirror:n,blockClass:r,blockSelector:o,unblockSelector:i,selectionCb:s}=e;let a=!0;const l=se(()=>{const u=t.getSelection();if(!u||a&&Rn([u,"optionalAccess",d=>d.isCollapsed]))return;a=u.isCollapsed||!1;const f=[],c=u.rangeCount||0;for(let d=0;d{}:Ug(n.customElements,"define",function(o){return function(i,s,a){try{t({define:{name:i}})}catch{}return o.apply(this,[i,s,a])}})}function v6(e,t={}){const n=e.doc.defaultView;if(!n)return()=>{};const r=IC(e,e.doc),o=l6(e),i=u6(e),s=RC(e),a=c6(e,{win:n}),l=d6(e),u=m6(e),f=p6(e,{win:n}),c=$C(e,e.doc),d=h6(e,{win:n}),h=e.collectFonts?g6(e):()=>{},m=y6(e),_=_6(e),v=[];for(const g of e.plugins)v.push(g.observer(g.callback,n,g.options));return se(()=>{di.forEach(g=>g.reset()),r.disconnect(),o(),i(),s(),a(),l(),u(),f(),c(),d(),h(),m(),_(),v.forEach(g=>g())})}function Ml(e){return typeof window[e]<"u"}function Nl(e){return!!(typeof window[e]<"u"&&window[e].prototype&&"insertRule"in window[e].prototype&&"deleteRule"in window[e].prototype)}class vh{constructor(t){this.generateIdFn=t,this.iframeIdToRemoteIdMap=new WeakMap,this.iframeRemoteIdToIdMap=new WeakMap}getId(t,n,r,o){const i=r||this.getIdToRemoteIdMap(t),s=o||this.getRemoteIdToIdMap(t);let a=i.get(n);return a||(a=this.generateIdFn(),i.set(n,a),s.set(a,n)),a}getIds(t,n){const r=this.getIdToRemoteIdMap(t),o=this.getRemoteIdToIdMap(t);return n.map(i=>this.getId(t,i,r,o))}getRemoteId(t,n,r){const o=r||this.getRemoteIdToIdMap(t);if(typeof n!="number")return n;const i=o.get(n);return i||-1}getRemoteIds(t,n){const r=this.getRemoteIdToIdMap(t);return n.map(o=>this.getRemoteId(t,o,r))}reset(t){if(!t){this.iframeIdToRemoteIdMap=new WeakMap,this.iframeRemoteIdToIdMap=new WeakMap;return}this.iframeIdToRemoteIdMap.delete(t),this.iframeRemoteIdToIdMap.delete(t)}getIdToRemoteIdMap(t){let n=this.iframeIdToRemoteIdMap.get(t);return n||(n=new Map,this.iframeIdToRemoteIdMap.set(t,n)),n}getRemoteIdToIdMap(t){let n=this.iframeRemoteIdToIdMap.get(t);return n||(n=new Map,this.iframeRemoteIdToIdMap.set(t,n)),n}}function b0(e){let t,n=e[0],r=1;for(;rn.call(t,...s)),t=void 0)}return n}class S6{constructor(){this.crossOriginIframeMirror=new vh(Dg),this.crossOriginIframeRootIdMap=new WeakMap}addIframe(){}addLoadListener(){}attachIframe(){}}class E6{constructor(t){this.iframes=new WeakMap,this.crossOriginIframeMap=new WeakMap,this.crossOriginIframeMirror=new vh(Dg),this.crossOriginIframeRootIdMap=new WeakMap,this.mutationCb=t.mutationCb,this.wrappedEmit=t.wrappedEmit,this.stylesheetManager=t.stylesheetManager,this.recordCrossOriginIframes=t.recordCrossOriginIframes,this.crossOriginIframeStyleMirror=new vh(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror)),this.mirror=t.mirror,this.recordCrossOriginIframes&&window.addEventListener("message",this.handleMessage.bind(this))}addIframe(t){this.iframes.set(t,!0),t.contentWindow&&this.crossOriginIframeMap.set(t.contentWindow,t)}addLoadListener(t){this.loadListener=t}attachIframe(t,n){this.mutationCb({adds:[{parentId:this.mirror.getId(t),nextId:null,node:n}],removes:[],texts:[],attributes:[],isAttachIframe:!0}),b0([this,"access",r=>r.loadListener,"optionalCall",r=>r(t)]),t.contentDocument&&t.contentDocument.adoptedStyleSheets&&t.contentDocument.adoptedStyleSheets.length>0&&this.stylesheetManager.adoptStyleSheets(t.contentDocument.adoptedStyleSheets,this.mirror.getId(t.contentDocument))}handleMessage(t){const n=t;if(n.data.type!=="rrweb"||n.origin!==n.data.origin||!t.source)return;const o=this.crossOriginIframeMap.get(t.source);if(!o)return;const i=this.transformCrossOriginEvent(o,n.data.event);i&&this.wrappedEmit(i,n.data.isCheckout)}transformCrossOriginEvent(t,n){switch(n.type){case te.FullSnapshot:{this.crossOriginIframeMirror.reset(t),this.crossOriginIframeStyleMirror.reset(t),this.replaceIdOnNode(n.data.node,t);const r=n.data.node.id;return this.crossOriginIframeRootIdMap.set(t,r),this.patchRootIdOnNode(n.data.node,r),{timestamp:n.timestamp,type:te.IncrementalSnapshot,data:{source:ne.Mutation,adds:[{parentId:this.mirror.getId(t),nextId:null,node:n.data.node}],removes:[],texts:[],attributes:[],isAttachIframe:!0}}}case te.Meta:case te.Load:case te.DomContentLoaded:return!1;case te.Plugin:return n;case te.Custom:return this.replaceIds(n.data.payload,t,["id","parentId","previousId","nextId"]),n;case te.IncrementalSnapshot:switch(n.data.source){case ne.Mutation:return n.data.adds.forEach(r=>{this.replaceIds(r,t,["parentId","nextId","previousId"]),this.replaceIdOnNode(r.node,t);const o=this.crossOriginIframeRootIdMap.get(t);o&&this.patchRootIdOnNode(r.node,o)}),n.data.removes.forEach(r=>{this.replaceIds(r,t,["parentId","id"])}),n.data.attributes.forEach(r=>{this.replaceIds(r,t,["id"])}),n.data.texts.forEach(r=>{this.replaceIds(r,t,["id"])}),n;case ne.Drag:case ne.TouchMove:case ne.MouseMove:return n.data.positions.forEach(r=>{this.replaceIds(r,t,["id"])}),n;case ne.ViewportResize:return!1;case ne.MediaInteraction:case ne.MouseInteraction:case ne.Scroll:case ne.CanvasMutation:case ne.Input:return this.replaceIds(n.data,t,["id"]),n;case ne.StyleSheetRule:case ne.StyleDeclaration:return this.replaceIds(n.data,t,["id"]),this.replaceStyleIds(n.data,t,["styleId"]),n;case ne.Font:return n;case ne.Selection:return n.data.ranges.forEach(r=>{this.replaceIds(r,t,["start","end"])}),n;case ne.AdoptedStyleSheet:return this.replaceIds(n.data,t,["id"]),this.replaceStyleIds(n.data,t,["styleIds"]),b0([n,"access",r=>r.data,"access",r=>r.styles,"optionalAccess",r=>r.forEach,"call",r=>r(o=>{this.replaceStyleIds(o,t,["styleId"])})]),n}}return!1}replace(t,n,r,o){for(const i of o)!Array.isArray(n[i])&&typeof n[i]!="number"||(Array.isArray(n[i])?n[i]=t.getIds(r,n[i]):n[i]=t.getId(r,n[i]));return n}replaceIds(t,n,r){return this.replace(this.crossOriginIframeMirror,t,n,r)}replaceStyleIds(t,n,r){return this.replace(this.crossOriginIframeStyleMirror,t,n,r)}replaceIdOnNode(t,n){this.replaceIds(t,n,["id","rootId"]),"childNodes"in t&&t.childNodes.forEach(r=>{this.replaceIdOnNode(r,n)})}patchRootIdOnNode(t,n){t.type!==ot.Document&&!t.rootId&&(t.rootId=n),"childNodes"in t&&t.childNodes.forEach(r=>{this.patchRootIdOnNode(r,n)})}}class w6{init(){}addShadowRoot(){}observeAttachShadow(){}reset(){}}class b6{constructor(t){this.shadowDoms=new WeakSet,this.restoreHandlers=[],this.mutationCb=t.mutationCb,this.scrollCb=t.scrollCb,this.bypassOptions=t.bypassOptions,this.mirror=t.mirror,this.init()}init(){this.reset(),this.patchAttachShadow(Element,document)}addShadowRoot(t,n){if(!na(t)||this.shadowDoms.has(t))return;this.shadowDoms.add(t);const r=IC({...this.bypassOptions,doc:n,mutationCb:this.mutationCb,mirror:this.mirror,shadowDomManager:this},t);this.restoreHandlers.push(()=>r.disconnect()),this.restoreHandlers.push(RC({...this.bypassOptions,scrollCb:this.scrollCb,doc:t,mirror:this.mirror})),ff(()=>{t.adoptedStyleSheets&&t.adoptedStyleSheets.length>0&&this.bypassOptions.stylesheetManager.adoptStyleSheets(t.adoptedStyleSheets,this.mirror.getId(t.host)),this.restoreHandlers.push($C({mirror:this.mirror,stylesheetManager:this.bypassOptions.stylesheetManager},t))},0)}observeAttachShadow(t){!t.contentWindow||!t.contentDocument||this.patchAttachShadow(t.contentWindow.Element,t.contentDocument)}patchAttachShadow(t,n){const r=this;this.restoreHandlers.push(Ug(t.prototype,"attachShadow",function(o){return function(i){const s=o.call(this,i);return this.shadowRoot&&CC(this)&&r.addShadowRoot(this.shadowRoot,n),s}}))}reset(){this.restoreHandlers.forEach(t=>{try{t()}catch{}}),this.restoreHandlers=[],this.shadowDoms=new WeakSet}}class T0{reset(){}freeze(){}unfreeze(){}lock(){}unlock(){}snapshot(){}}class T6{constructor(t){this.trackedLinkElements=new WeakSet,this.styleMirror=new Q5,this.mutationCb=t.mutationCb,this.adoptedStyleSheetCb=t.adoptedStyleSheetCb}attachLinkElement(t,n){"_cssText"in n.attributes&&this.mutationCb({adds:[],removes:[],texts:[],attributes:[{id:n.id,attributes:n.attributes}]}),this.trackLinkElement(t)}trackLinkElement(t){this.trackedLinkElements.has(t)||(this.trackedLinkElements.add(t),this.trackStylesheetInLinkElement(t))}adoptStyleSheets(t,n){if(t.length===0)return;const r={id:n,styleIds:[]},o=[];for(const i of t){let s;this.styleMirror.has(i)?s=this.styleMirror.getId(i):(s=this.styleMirror.add(i),o.push({styleId:s,rules:Array.from(i.rules||CSSRule,(a,l)=>({rule:dC(a),index:l}))})),r.styleIds.push(s)}o.length>0&&(r.styles=o),this.adoptedStyleSheetCb(r)}reset(){this.styleMirror.reset(),this.trackedLinkElements=new WeakSet}trackStylesheetInLinkElement(t){}}class C6{constructor(){this.nodeMap=new WeakMap,this.loop=!0,this.periodicallyClear()}periodicallyClear(){t6(()=>{this.clear(),this.loop&&this.periodicallyClear()})}inOtherBuffer(t,n){const r=this.nodeMap.get(t);return r&&Array.from(r).some(o=>o!==n)}add(t,n){this.nodeMap.set(t,(this.nodeMap.get(t)||new Set).add(n))}clear(){this.nodeMap=new WeakMap}destroy(){this.loop=!1}}let Ue,hc;const an=k5();function Dr(e={}){const{emit:t,checkoutEveryNms:n,checkoutEveryNth:r,blockClass:o="rr-block",blockSelector:i=null,unblockSelector:s=null,ignoreClass:a="rr-ignore",ignoreSelector:l=null,maskAllText:u=!1,maskTextClass:f="rr-mask",unmaskTextClass:c=null,maskTextSelector:d=null,unmaskTextSelector:h=null,inlineStylesheet:m=!0,maskAllInputs:_,maskInputOptions:v,slimDOMOptions:g,maskAttributeFn:p,maskInputFn:y,maskTextFn:S,maxCanvasSize:b=null,packFn:E,sampling:w={},dataURLOptions:x={},mousemoveWait:D,recordCanvas:I=!1,recordCrossOriginIframes:A=!1,recordAfter:W=e.recordAfter==="DOMContentLoaded"?e.recordAfter:"load",userTriggeredOnInput:ee=!1,collectFonts:j=!1,inlineImages:N=!1,plugins:R,keepIframeSrcFn:L=()=>!1,ignoreCSSAttributes:T=new Set([]),errorHandler:O,onMutation:$,getCanvasManager:H}=e;s6(O);const G=A?window.parent===window:!0;let ue=!1;if(!G)try{window.parent.document&&(ue=!1)}catch{ue=!0}if(G&&!t)throw new Error("emit function is required");D!==void 0&&w.mousemove===void 0&&(w.mousemove=D),an.reset();const ce=_===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,radio:!0,checkbox:!0}:v!==void 0?v:{},Me=g===!0||g==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaVerification:!0,headMetaAuthorship:g==="all",headMetaDescKeywords:g==="all"}:g||{};J5();let He,tt=0;const pe=fe=>{for(const on of R||[])on.eventProcessor&&(fe=on.eventProcessor(fe));return E&&!ue&&(fe=E(fe)),fe};Ue=(fe,on)=>{const le=fe;if(le.timestamp=dc(),nu([di,"access",Ne=>Ne[0],"optionalAccess",Ne=>Ne.isFrozen,"call",Ne=>Ne()])&&le.type!==te.FullSnapshot&&!(le.type===te.IncrementalSnapshot&&le.data.source===ne.Mutation)&&di.forEach(Ne=>Ne.unfreeze()),G)nu([t,"optionalCall",Ne=>Ne(pe(le),on)]);else if(ue){const Ne={type:"rrweb",event:pe(le),origin:window.location.origin,isCheckout:on};window.parent.postMessage(Ne,"*")}if(le.type===te.FullSnapshot)He=le,tt=0;else if(le.type===te.IncrementalSnapshot){if(le.data.source===ne.Mutation&&le.data.isAttachIframe)return;tt++;const Ne=r&&tt>=r,de=n&&He&&le.timestamp-He.timestamp>n;(Ne||de)&&Uf(!0)}};const he=fe=>{Ue({type:te.IncrementalSnapshot,data:{source:ne.Mutation,...fe}})},ie=fe=>Ue({type:te.IncrementalSnapshot,data:{source:ne.Scroll,...fe}}),$e=fe=>Ue({type:te.IncrementalSnapshot,data:{source:ne.CanvasMutation,...fe}}),Fe=fe=>Ue({type:te.IncrementalSnapshot,data:{source:ne.AdoptedStyleSheet,...fe}}),gt=new T6({mutationCb:he,adoptedStyleSheetCb:Fe}),Rt=typeof __RRWEB_EXCLUDE_IFRAME__=="boolean"&&__RRWEB_EXCLUDE_IFRAME__?new S6:new E6({mirror:an,mutationCb:he,stylesheetManager:gt,recordCrossOriginIframes:A,wrappedEmit:Ue});for(const fe of R||[])fe.getMirror&&fe.getMirror({nodeMirror:an,crossOriginIframeMirror:Rt.crossOriginIframeMirror,crossOriginIframeStyleMirror:Rt.crossOriginIframeStyleMirror});const Ss=new C6,Ay=x6(H,{mirror:an,win:window,mutationCb:fe=>Ue({type:te.IncrementalSnapshot,data:{source:ne.CanvasMutation,...fe}}),recordCanvas:I,blockClass:o,blockSelector:i,unblockSelector:s,maxCanvasSize:b,sampling:w.canvas,dataURLOptions:x,errorHandler:O}),il=typeof __RRWEB_EXCLUDE_SHADOW_DOM__=="boolean"&&__RRWEB_EXCLUDE_SHADOW_DOM__?new w6:new b6({mutationCb:he,scrollCb:ie,bypassOptions:{onMutation:$,blockClass:o,blockSelector:i,unblockSelector:s,maskAllText:u,maskTextClass:f,unmaskTextClass:c,maskTextSelector:d,unmaskTextSelector:h,inlineStylesheet:m,maskInputOptions:ce,dataURLOptions:x,maskAttributeFn:p,maskTextFn:S,maskInputFn:y,recordCanvas:I,inlineImages:N,sampling:w,slimDOMOptions:Me,iframeManager:Rt,stylesheetManager:gt,canvasManager:Ay,keepIframeSrcFn:L,processedNodeManager:Ss},mirror:an}),Uf=(fe=!1)=>{Ue({type:te.Meta,data:{href:window.location.href,width:vC(),height:_C()}},fe),gt.reset(),il.init(),di.forEach(le=>le.lock());const on=Y5(document,{mirror:an,blockClass:o,blockSelector:i,unblockSelector:s,maskAllText:u,maskTextClass:f,unmaskTextClass:c,maskTextSelector:d,unmaskTextSelector:h,inlineStylesheet:m,maskAllInputs:ce,maskAttributeFn:p,maskInputFn:y,maskTextFn:S,slimDOM:Me,dataURLOptions:x,recordCanvas:I,inlineImages:N,onSerialize:le=>{wC(le,an)&&Rt.addIframe(le),bC(le,an)&>.trackLinkElement(le),yh(le)&&il.addShadowRoot(le.shadowRoot,document)},onIframeLoad:(le,Ne)=>{Rt.attachIframe(le,Ne),il.observeAttachShadow(le)},onStylesheetLoad:(le,Ne)=>{gt.attachLinkElement(le,Ne)},keepIframeSrcFn:L});if(!on)return console.warn("Failed to snapshot the document");Ue({type:te.FullSnapshot,data:{node:on,initialOffset:yC(window)}}),di.forEach(le=>le.unlock()),document.adoptedStyleSheets&&document.adoptedStyleSheets.length>0&>.adoptStyleSheets(document.adoptedStyleSheets,an.getId(document))};hc=Uf;try{const fe=[],on=Ne=>se(v6)({onMutation:$,mutationCb:he,mousemoveCb:(de,Xr)=>Ue({type:te.IncrementalSnapshot,data:{source:Xr,positions:de}}),mouseInteractionCb:de=>Ue({type:te.IncrementalSnapshot,data:{source:ne.MouseInteraction,...de}}),scrollCb:ie,viewportResizeCb:de=>Ue({type:te.IncrementalSnapshot,data:{source:ne.ViewportResize,...de}}),inputCb:de=>Ue({type:te.IncrementalSnapshot,data:{source:ne.Input,...de}}),mediaInteractionCb:de=>Ue({type:te.IncrementalSnapshot,data:{source:ne.MediaInteraction,...de}}),styleSheetRuleCb:de=>Ue({type:te.IncrementalSnapshot,data:{source:ne.StyleSheetRule,...de}}),styleDeclarationCb:de=>Ue({type:te.IncrementalSnapshot,data:{source:ne.StyleDeclaration,...de}}),canvasMutationCb:$e,fontCb:de=>Ue({type:te.IncrementalSnapshot,data:{source:ne.Font,...de}}),selectionCb:de=>{Ue({type:te.IncrementalSnapshot,data:{source:ne.Selection,...de}})},customElementCb:de=>{Ue({type:te.IncrementalSnapshot,data:{source:ne.CustomElement,...de}})},blockClass:o,ignoreClass:a,ignoreSelector:l,maskAllText:u,maskTextClass:f,unmaskTextClass:c,maskTextSelector:d,unmaskTextSelector:h,maskInputOptions:ce,inlineStylesheet:m,sampling:w,recordCanvas:I,inlineImages:N,userTriggeredOnInput:ee,collectFonts:j,doc:Ne,maskAttributeFn:p,maskInputFn:y,maskTextFn:S,keepIframeSrcFn:L,blockSelector:i,unblockSelector:s,slimDOMOptions:Me,dataURLOptions:x,mirror:an,iframeManager:Rt,stylesheetManager:gt,shadowDomManager:il,processedNodeManager:Ss,canvasManager:Ay,ignoreCSSAttributes:T,plugins:nu([R,"optionalAccess",de=>de.filter,"call",de=>de(Xr=>Xr.observer),"optionalAccess",de=>de.map,"call",de=>de(Xr=>({observer:Xr.observer,options:Xr.options,callback:Jx=>Ue({type:te.Plugin,data:{plugin:Xr.name,payload:Jx}})}))])||[]},{});Rt.addLoadListener(Ne=>{try{fe.push(on(Ne.contentDocument))}catch(de){console.warn(de)}});const le=()=>{Uf(),fe.push(on(document))};return document.readyState==="interactive"||document.readyState==="complete"?le():(fe.push(Tt("DOMContentLoaded",()=>{Ue({type:te.DomContentLoaded,data:{}}),W==="DOMContentLoaded"&&le()})),fe.push(Tt("load",()=>{Ue({type:te.Load,data:{}}),W==="load"&&le()},window))),()=>{fe.forEach(Ne=>Ne()),Ss.destroy(),hc=void 0,a6()}}catch(fe){console.warn(fe)}}function k6(e){if(!hc)throw new Error("please take full snapshot after start recording");hc(e)}Dr.mirror=an;Dr.takeFullSnapshot=k6;function x6(e,t){try{return e?e(t):new T0}catch{return console.warn("Unable to initialize CanvasManager"),new T0}}const I6=3,R6=5;function Bg(e){return e>9999999999?e:e*1e3}function $d(e){return e>9999999999?e/1e3:e}function Za(e,t){t.category!=="sentry.transaction"&&(["ui.click","ui.input"].includes(t.category)?e.triggerUserActivity():e.checkAndHandleExpiredSession(),e.addUpdate(()=>(e.throttledAddEvent({type:te.Custom,timestamp:(t.timestamp||0)*1e3,data:{tag:"breadcrumb",payload:fn(t,10,1e3)}}),t.category==="console")))}const $6="button,a";function OC(e){return e.closest($6)||e}function AC(e){const t=MC(e);return!t||!(t instanceof Element)?t:OC(t)}function MC(e){return O6(e)?e.target:e}function O6(e){return typeof e=="object"&&!!e&&"target"in e}let yr;function A6(e){return yr||(yr=[],M6()),yr.push(e),()=>{const t=yr?yr.indexOf(e):-1;t>-1&&yr.splice(t,1)}}function M6(){ct(be,"open",function(e){return function(...t){if(yr)try{yr.forEach(n=>n())}catch{}return e.apply(be,t)}})}function N6(e,t,n){e.handleClick(t,n)}class P6{constructor(t,n,r=Za){this._lastMutation=0,this._lastScroll=0,this._clicks=[],this._timeout=n.timeout/1e3,this._threshold=n.threshold/1e3,this._scollTimeout=n.scrollTimeout/1e3,this._replay=t,this._ignoreSelector=n.ignoreSelector,this._addBreadcrumbEvent=r}addListeners(){const t=A6(()=>{this._lastMutation=C0()});this._teardown=()=>{t(),this._clicks=[],this._lastMutation=0,this._lastScroll=0}}removeListeners(){this._teardown&&this._teardown(),this._checkClickTimeout&&clearTimeout(this._checkClickTimeout)}handleClick(t,n){if(D6(n,this._ignoreSelector)||!F6(t))return;const r={timestamp:$d(t.timestamp),clickBreadcrumb:t,clickCount:0,node:n};this._clicks.some(o=>o.node===r.node&&Math.abs(o.timestamp-r.timestamp)<1)||(this._clicks.push(r),this._clicks.length===1&&this._scheduleCheckClicks())}registerMutation(t=Date.now()){this._lastMutation=$d(t)}registerScroll(t=Date.now()){this._lastScroll=$d(t)}registerClick(t){const n=OC(t);this._handleMultiClick(n)}_handleMultiClick(t){this._getClicks(t).forEach(n=>{n.clickCount++})}_getClicks(t){return this._clicks.filter(n=>n.node===t)}_checkClicks(){const t=[],n=C0();this._clicks.forEach(r=>{!r.mutationAfter&&this._lastMutation&&(r.mutationAfter=r.timestamp<=this._lastMutation?this._lastMutation-r.timestamp:void 0),!r.scrollAfter&&this._lastScroll&&(r.scrollAfter=r.timestamp<=this._lastScroll?this._lastScroll-r.timestamp:void 0),r.timestamp+this._timeout<=n&&t.push(r)});for(const r of t){const o=this._clicks.indexOf(r);o>-1&&(this._generateBreadcrumbs(r),this._clicks.splice(o,1))}this._clicks.length&&this._scheduleCheckClicks()}_generateBreadcrumbs(t){const n=this._replay,r=t.scrollAfter&&t.scrollAfter<=this._scollTimeout,o=t.mutationAfter&&t.mutationAfter<=this._threshold,i=!r&&!o,{clickCount:s,clickBreadcrumb:a}=t;if(i){const l=Math.min(t.mutationAfter||this._timeout,this._timeout)*1e3,u=l1){const l={type:"default",message:a.message,timestamp:a.timestamp,category:"ui.multiClick",data:{...a.data,url:be.location.href,route:n.getCurrentRoute(),clickCount:s,metric:!0}};this._addBreadcrumbEvent(n,l)}}_scheduleCheckClicks(){this._checkClickTimeout&&clearTimeout(this._checkClickTimeout),this._checkClickTimeout=Io(()=>this._checkClicks(),1e3)}}const L6=["A","BUTTON","INPUT"];function D6(e,t){return!!(!L6.includes(e.tagName)||e.tagName==="INPUT"&&!["submit","button"].includes(e.getAttribute("type")||"")||e.tagName==="A"&&(e.hasAttribute("download")||e.hasAttribute("target")&&e.getAttribute("target")!=="_self")||t&&e.matches(t))}function F6(e){return!!(e.data&&typeof e.data.nodeId=="number"&&e.timestamp)}function C0(){return Date.now()/1e3}function U6(e,t){try{if(!j6(t))return;const{source:n}=t.data;if(n===ne.Mutation&&e.registerMutation(t.timestamp),n===ne.Scroll&&e.registerScroll(t.timestamp),B6(t)){const{type:r,id:o}=t.data,i=Dr.mirror.getNode(o);i instanceof HTMLElement&&r===Et.Click&&e.registerClick(i)}}catch{}}function j6(e){return e.type===I6}function B6(e){return e.data.source===ne.MouseInteraction}function Mn(e){return{timestamp:Date.now()/1e3,type:"default",...e}}var mc;(function(e){e[e.Document=0]="Document",e[e.DocumentType=1]="DocumentType",e[e.Element=2]="Element",e[e.Text=3]="Text",e[e.CDATA=4]="CDATA",e[e.Comment=5]="Comment"})(mc||(mc={}));const z6=new Set(["id","class","aria-label","role","name","alt","title","data-test-id","data-testid","disabled","aria-disabled","data-sentry-component"]);function H6(e){const t={};!e["data-sentry-component"]&&e["data-sentry-element"]&&(e["data-sentry-component"]=e["data-sentry-element"]);for(const n in e)if(z6.has(n)){let r=n;(n==="data-testid"||n==="data-test-id")&&(r="testId"),t[r]=e[n]}return t}const W6=e=>t=>{if(!e.isEnabled())return;const n=V6(t);if(!n)return;const r=t.name==="click",o=r?t.event:void 0;r&&e.clickDetector&&o&&o.target&&!o.altKey&&!o.metaKey&&!o.ctrlKey&&!o.shiftKey&&N6(e.clickDetector,n,AC(t.event)),Za(e,n)};function NC(e,t){const n=Dr.mirror.getId(e),r=n&&Dr.mirror.getNode(n),o=r&&Dr.mirror.getMeta(r),i=o&&q6(o)?o:null;return{message:t,data:i?{nodeId:n,node:{id:n,tagName:i.tagName,textContent:Array.from(i.childNodes).map(s=>s.type===mc.Text&&s.textContent).filter(Boolean).map(s=>s.trim()).join(""),attributes:H6(i.attributes)}}:{}}}function V6(e){const{target:t,message:n}=G6(e);return Mn({category:`ui.${e.name}`,...NC(t,n)})}function G6(e){const t=e.name==="click";let n,r=null;try{r=t?AC(e.event):MC(e.event),n=Br(r,{maxStringLength:200})||""}catch{n=""}return{target:r,message:n}}function q6(e){return e.type===mc.Element}function K6(e,t){if(!e.isEnabled())return;e.updateUserActivity();const n=Y6(t);n&&Za(e,n)}function Y6(e){const{metaKey:t,shiftKey:n,ctrlKey:r,altKey:o,key:i,target:s}=e;if(!s||X6(s)||!i)return null;const a=t||r||o,l=i.length===1;if(!a&&l)return null;const u=Br(s,{maxStringLength:200})||"",f=NC(s,u);return Mn({category:"ui.keyDown",message:u,data:{...f.data,metaKey:t,shiftKey:n,ctrlKey:r,altKey:o,key:i}})}function X6(e){return e.tagName==="INPUT"||e.tagName==="TEXTAREA"||e.isContentEditable}const k0={resource:tU,paint:Z6,navigation:eU};function J6(e){return e.map(Q6).filter(Boolean)}function Q6(e){return k0[e.entryType]?k0[e.entryType](e):null}function zi(e){return((kt||be.performance.timeOrigin)+e)/1e3}function Z6(e){const{duration:t,entryType:n,name:r,startTime:o}=e,i=zi(o);return{type:n,name:r,start:i,end:i+t,data:void 0}}function eU(e){const{entryType:t,name:n,decodedBodySize:r,duration:o,domComplete:i,encodedBodySize:s,domContentLoadedEventStart:a,domContentLoadedEventEnd:l,domInteractive:u,loadEventStart:f,loadEventEnd:c,redirectCount:d,startTime:h,transferSize:m,type:_}=e;return o===0?null:{type:`${t}.${_}`,start:zi(h),end:zi(i),name:n,data:{size:m,decodedBodySize:r,encodedBodySize:s,duration:o,domInteractive:u,domContentLoadedEventStart:a,domContentLoadedEventEnd:l,loadEventStart:f,loadEventEnd:c,domComplete:i,redirectCount:d}}}function tU(e){const{entryType:t,initiatorType:n,name:r,responseEnd:o,startTime:i,decodedBodySize:s,encodedBodySize:a,responseStatus:l,transferSize:u}=e;return["fetch","xmlhttprequest"].includes(n)?null:{type:`${t}.${n}`,start:zi(i),end:zi(o),name:r,data:{size:u,statusCode:l,decodedBodySize:s,encodedBodySize:a}}}function nU(e){const t=e.entries,n=t[t.length-1],r=n?n.element:void 0,o=e.value,i=zi(o);return{type:"largest-contentful-paint",name:"largest-contentful-paint",start:i,end:i,data:{value:o,size:o,nodeId:r?Dr.mirror.getId(r):void 0}}}function rU(e){function t(o){e.performanceEntries.includes(o)||e.performanceEntries.push(o)}function n({entries:o}){o.forEach(t)}const r=[];return["navigation","paint","resource"].forEach(o=>{r.push(lf(o,n))}),r.push(VT(({metric:o})=>{e.replayPerformanceEntries.push(nU(o))})),()=>{r.forEach(o=>o())}}const ve=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,oU='var t=Uint8Array,n=Uint16Array,r=Int32Array,e=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),s=function(t,e){for(var i=new n(31),a=0;a<31;++a)i[a]=e+=1<>1|(21845&c)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,u[c]=((65280&v)>>8|(255&v)<<8)>>1}var d=function(t,r,e){for(var i=t.length,a=0,s=new n(r);a>h]=l}else for(o=new n(i),a=0;a>15-t[a]);return o},g=new t(288);for(c=0;c<144;++c)g[c]=8;for(c=144;c<256;++c)g[c]=9;for(c=256;c<280;++c)g[c]=7;for(c=280;c<288;++c)g[c]=8;var w=new t(32);for(c=0;c<32;++c)w[c]=5;var p=d(g,9,0),y=d(w,5,0),m=function(t){return(t+7)/8|0},b=function(n,r,e){return(null==r||r<0)&&(r=0),(null==e||e>n.length)&&(e=n.length),new t(n.subarray(r,e))},M=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],E=function(t,n,r){var e=new Error(n||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!r)throw e;return e},z=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8},A=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8,t[e+2]|=r>>16},_=function(r,e){for(var i=[],a=0;ad&&(d=o[a].s);var g=new n(d+1),w=x(i[c-1],g,0);if(w>e){a=0;var p=0,y=w-e,m=1<e))break;p+=m-(1<>=y;p>0;){var M=o[a].s;g[M]=0&&p;--a){var E=o[a].s;g[E]==e&&(--g[E],++p)}w=e}return{t:new t(g),l:w}},x=function(t,n,r){return-1==t.s?Math.max(x(t.l,n,r+1),x(t.r,n,r+1)):n[t.s]=r},D=function(t){for(var r=t.length;r&&!t[--r];);for(var e=new n(++r),i=0,a=t[0],s=1,o=function(t){e[i++]=t},f=1;f<=r;++f)if(t[f]==a&&f!=r)++s;else{if(!a&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(a),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(a);s=1,a=t[f]}return{c:e.subarray(0,i),n:r}},T=function(t,n){for(var r=0,e=0;e>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var a=0;a4&&!H[a[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(f,g)+T(h,w)+l,X=T(f,M)+T(h,C)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(r,m,t.subarray(c,c+v));if(z(r,m,1+(X15&&(z(r,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=p,P=g,Q=y,R=w;for(B=0;B255){A(r,m,N[(nt=rt>>18&31)+257]),m+=P[nt+257],nt>7&&(z(r,m,rt>>23&31),m+=e[nt]);var et=31&rt;A(r,m,Q[et]),m+=R[et],et>3&&(A(r,m,rt>>5&8191),m+=i[et])}else A(r,m,N[rt]),m+=P[rt]}return A(r,m,N[256]),m+P[256]},U=new r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var r=n,e=9;--e;)r=(1&r&&-306674912)^r>>>1;t[n]=r}return t}(),S=function(){var t=-1;return{p:function(n){for(var r=t,e=0;e>>8;t=r},d:function(){return~t}}},L=function(){var t=1,n=0;return{p:function(r){for(var e=t,i=n,a=0|r.length,s=0;s!=a;){for(var o=Math.min(s+2655,a);s>16),i=(65535&i)+15*(i>>16)}t=e,n=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(n%=65521))<<8|n>>8}}},O=function(a,s,o,f,u){if(!u&&(u={l:1},s.dictionary)){var c=s.dictionary.subarray(-32768),v=new t(c.length+a.length);v.set(c),v.set(a,c.length),a=v,u.w=c.length}return function(a,s,o,f,u,c){var v=c.z||a.length,d=new t(f+v+5*(1+Math.ceil(v/7e3))+u),g=d.subarray(f,d.length-u),w=c.l,p=7&(c.r||0);if(s){p&&(g[0]=c.r>>3);for(var y=U[s-1],M=y>>13,E=8191&y,z=(1<7e3||q>24576)&&(N>423||!w)){p=C(a,g,0,F,I,S,O,q,G,j-G,p),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(a[j+Q]==a[j+Q-W]){for(var $=0;$Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),nt=0;for(P=0;Pnt&&(nt=et,K=rt)}}}W+=(J=K)-(K=A[J])&32767}if(R){F[q++]=268435456|h[Q]<<18|l[R];var it=31&h[Q],at=31&l[R];O+=e[it]+i[at],++I[257+it],++S[at],B=j+Q,++L}else F[q++]=a[j],++I[a[j]]}}for(j=Math.max(j,B);j=v&&(g[p/8|0]=w,st=v),p=k(g,p+1,a.subarray(j,st))}c.i=v}return b(d,0,f+m(p)+u)}(a,null==s.level?6:s.level,null==s.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(a.length)))):12+s.mem,o,f,u)},j=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},q=function(t,n){var r=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&j(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),r){t[3]=8;for(var e=0;e<=r.length;++e)t[e+10]=r.charCodeAt(e)}},B=function(t){return 10+(t.filename?t.filename.length+1:0)},G=function(){function n(n,r){if("function"==typeof n&&(r=n,n={}),this.ondata=r,this.o=n||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return n.prototype.p=function(t,n){this.ondata(O(t,this.o,0,0,this.s),n)},n.prototype.push=function(n,r){this.ondata||E(5),this.s.l&&E(4);var e=n.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var a=this.b.length-this.s.z;a&&(this.b.set(n.subarray(0,a),this.s.z),this.s.z=this.b.length,this.p(this.b,!1)),this.b.set(this.b.subarray(-32768)),this.b.set(n.subarray(a),32768),this.s.z=n.length-a+32768,this.s.i=32766,this.s.w=32768}else this.b.set(n,this.s.z),this.s.z+=n.length;this.s.l=1&r,(this.s.z>this.s.w+8191||r)&&(this.p(this.b,r||!1),this.s.w=this.s.i,this.s.i-=2)},n}();var H=function(){function t(t,n){this.c=L(),this.v=1,G.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),G.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=O(t,this.o,this.v&&(this.o.dictionary?6:2),n&&4,this.s);this.v&&(function(t,n){var r=n.level,e=0==r?0:r<6?1:9==r?3:2;if(t[0]=120,t[1]=e<<6|(n.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,n.dictionary){var i=L();i.p(n.dictionary),j(t,2,i.d())}}(r,this.o),this.v=0),n&&j(r,r.length-4,this.c.d()),this.ondata(r,n)},t}(),J="undefined"!=typeof TextEncoder&&new TextEncoder,K="undefined"!=typeof TextDecoder&&new TextDecoder;try{K.decode(F,{stream:!0})}catch(t){}var N=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(P(t),this.d=n||!1)},t}();function P(n,r){if(r){for(var e=new t(n.length),i=0;i>1)),o=0,f=function(t){s[o++]=t};for(i=0;is.length){var h=new t(o+8+(a-i<<1));h.set(s),s=h}var l=n.charCodeAt(i);l<128||r?f(l):l<2048?(f(192|l>>6),f(128|63&l)):l>55295&&l<57344?(f(240|(l=65536+(1047552&l)|1023&n.charCodeAt(++i))>>18),f(128|l>>12&63),f(128|l>>6&63),f(128|63&l)):(f(224|l>>12),f(128|l>>6&63),f(128|63&l))}return b(s,0,o)}function Q(t){return function(t,n){n||(n={});var r=S(),e=t.length;r.p(t);var i=O(t,n,B(n),8),a=i.length;return q(i,n),j(i,a-8,r.d()),j(i,a-4,e),i}(P(t))}const R=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error("Adding invalid event");const n=this._hasEvents?",":"";this.stream.push(n+t),this._hasEvents=!0}finish(){this.stream.push("]",!0);const t=function(t){let n=0;for(let r=0,e=t.length;r{this._deflatedData.push(t)},this.stream=new N(((t,n)=>{this.deflate.push(t,n)})),this.stream.push("[")}},V={clear:()=>{R.clear()},addEvent:t=>R.addEvent(t),finish:()=>R.finish(),compress:t=>Q(t)};addEventListener("message",(function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in V&&"function"==typeof V[n])try{const t=V[n](e);postMessage({id:r,method:n,success:!0,response:t})}catch(t){postMessage({id:r,method:n,success:!1,response:t.message}),console.error(t)}})),postMessage({id:void 0,method:"init",success:!0,response:void 0});';function iU(){const e=new Blob([oU]);return URL.createObjectURL(e)}function bt(e,t){ve&&(C.info(e),t&&PC(e))}function bi(e,t){ve&&(C.info(e),t&&Io(()=>{PC(e)},0))}function PC(e){Sn({category:"console",data:{logger:"replay"},level:"info",message:e},{level:"info"})}class zg extends Error{constructor(){super(`Event buffer exceeded maximum size of ${Pg}.`)}}class LC{constructor(){this.events=[],this._totalSize=0,this.hasCheckout=!1}get hasEvents(){return this.events.length>0}get type(){return"sync"}destroy(){this.events=[]}async addEvent(t){const n=JSON.stringify(t).length;if(this._totalSize+=n,this._totalSize>Pg)throw new zg;this.events.push(t)}finish(){return new Promise(t=>{const n=this.events;this.clear(),t(JSON.stringify(n))})}clear(){this.events=[],this._totalSize=0,this.hasCheckout=!1}getEarliestTimestamp(){const t=this.events.map(n=>n.timestamp).sort()[0];return t?Bg(t):null}}class sU{constructor(t){this._worker=t,this._id=0}ensureReady(){return this._ensureReadyPromise?this._ensureReadyPromise:(this._ensureReadyPromise=new Promise((t,n)=>{this._worker.addEventListener("message",({data:r})=>{r.success?t():n()},{once:!0}),this._worker.addEventListener("error",r=>{n(r)},{once:!0})}),this._ensureReadyPromise)}destroy(){bt("[Replay] Destroying compression worker"),this._worker.terminate()}postMessage(t,n){const r=this._getAndIncrementId();return new Promise((o,i)=>{const s=({data:a})=>{const l=a;if(l.method===t&&l.id===r){if(this._worker.removeEventListener("message",s),!l.success){ve&&C.error("[Replay]",l.response),i(new Error("Error in compression worker"));return}o(l.response)}};this._worker.addEventListener("message",s),this._worker.postMessage({id:r,method:t,arg:n})})}_getAndIncrementId(){return this._id++}}class aU{constructor(t){this._worker=new sU(t),this._earliestTimestamp=null,this._totalSize=0,this.hasCheckout=!1}get hasEvents(){return!!this._earliestTimestamp}get type(){return"worker"}ensureReady(){return this._worker.ensureReady()}destroy(){this._worker.destroy()}addEvent(t){const n=Bg(t.timestamp);(!this._earliestTimestamp||nPg?Promise.reject(new zg):this._sendEventToWorker(r)}finish(){return this._finishRequest()}clear(){this._earliestTimestamp=null,this._totalSize=0,this.hasCheckout=!1,this._worker.postMessage("clear").then(null,t=>{ve&&C.warn('[Replay] Sending "clear" message to worker failed',t)})}getEarliestTimestamp(){return this._earliestTimestamp}_sendEventToWorker(t){return this._worker.postMessage("addEvent",t)}async _finishRequest(){const t=await this._worker.postMessage("finish");return this._earliestTimestamp=null,this._totalSize=0,t}}class lU{constructor(t){this._fallback=new LC,this._compression=new aU(t),this._used=this._fallback,this._ensureWorkerIsLoadedPromise=this._ensureWorkerIsLoaded()}get type(){return this._used.type}get hasEvents(){return this._used.hasEvents}get hasCheckout(){return this._used.hasCheckout}set hasCheckout(t){this._used.hasCheckout=t}destroy(){this._fallback.destroy(),this._compression.destroy()}clear(){return this._used.clear()}getEarliestTimestamp(){return this._used.getEarliestTimestamp()}addEvent(t){return this._used.addEvent(t)}async finish(){return await this.ensureWorkerIsLoaded(),this._used.finish()}ensureWorkerIsLoaded(){return this._ensureWorkerIsLoadedPromise}async _ensureWorkerIsLoaded(){try{await this._compression.ensureReady()}catch{bt("[Replay] Failed to load the compression worker, falling back to simple buffer");return}await this._switchToCompressionWorker()}async _switchToCompressionWorker(){const{events:t,hasCheckout:n}=this._fallback,r=[];for(const o of t)r.push(this._compression.addEvent(o));this._compression.hasCheckout=n,this._used=this._compression;try{await Promise.all(r)}catch(o){ve&&C.warn("[Replay] Failed to add events when switching buffers.",o)}}}function uU({useCompression:e,workerUrl:t}){if(e&&window.Worker){const n=cU(t);if(n)return n}return bt("[Replay] Using simple buffer"),new LC}function cU(e){try{const t=e||fU();if(!t)return;bt(`[Replay] Using compression worker${e?` from ${e}`:""}`);const n=new Worker(t);return new lU(n)}catch{bt("[Replay] Failed to create compression worker")}}function fU(){return typeof __SENTRY_EXCLUDE_REPLAY_WORKER__>"u"||!__SENTRY_EXCLUDE_REPLAY_WORKER__?iU():""}function Hg(){try{return"sessionStorage"in be&&!!be.sessionStorage}catch{return!1}}function dU(e){pU(),e.session=void 0}function pU(){if(Hg())try{be.sessionStorage.removeItem(Mg)}catch{}}function DC(e){return e===void 0?!1:Math.random()e.getContext().initialTimestamp+e.getOptions().maxReplayDuration?(bt(`[Replay] Skipping event with timestamp ${n} because it is after maxReplayDuration`,e.getOptions()._experiments.traceInternals),!1):!0}function _U(e,t){try{if(typeof t=="function"&&gU(e))return t(e)}catch(n){return ve&&C.error("[Replay] An error occured in the `beforeAddRecordingEvent` callback, skipping the event...",n),null}return e}function Gg(e){return!e.type}function Eh(e){return e.type==="transaction"}function vU(e){return e.type==="replay_event"}function I0(e){return e.type==="feedback"}function SU(e){return(t,n)=>{if(!e.isEnabled()||!Gg(t)&&!Eh(t))return;const r=n&&n.statusCode;if(!(!r||r<200||r>=300)){if(Eh(t)){EU(e,t);return}wU(e,t)}}}function EU(e,t){const n=e.getContext();t.contexts&&t.contexts.trace&&t.contexts.trace.trace_id&&n.traceIds.size<100&&n.traceIds.add(t.contexts.trace.trace_id)}function wU(e,t){const n=e.getContext();if(t.event_id&&n.errorIds.size<100&&n.errorIds.add(t.event_id),e.recordingMode!=="buffer"||!t.tags||!t.tags.replayId)return;const{beforeErrorSampling:r}=e.getOptions();typeof r=="function"&&!r(t)||Io(()=>{e.sendBufferedReplayOrFlush()})}function bU(e){return t=>{!e.isEnabled()||!Gg(t)||TU(e,t)}}function TU(e,t){const n=t.exception&&t.exception.values&&t.exception.values[0].value;if(typeof n=="string"&&(n.match(/(reactjs\.org\/docs\/error-decoder\.html\?invariant=|react\.dev\/errors\/)(418|419|422|423|425)/)||n.match(/(does not match server-rendered HTML|Hydration failed because)/i))){const r=Mn({category:"replay.hydrate-error"});Za(e,r)}}function CU(e){const t=z();t&&t.on("beforeAddBreadcrumb",n=>kU(e,n))}function kU(e,t){if(!e.isEnabled()||!HC(t))return;const n=xU(t);n&&Za(e,n)}function xU(e){return!HC(e)||["fetch","xhr","sentry.event","sentry.transaction"].includes(e.category)||e.category.startsWith("ui.")?null:e.category==="console"?IU(e):Mn(e)}function IU(e){const t=e.data&&e.data.arguments;if(!Array.isArray(t)||t.length===0)return Mn(e);let n=!1;const r=t.map(o=>{if(!o)return o;if(typeof o=="string")return o.length>Al?(n=!0,`${o.slice(0,Al)}…`):o;if(typeof o=="object")try{const i=fn(o,7);return JSON.stringify(i).length>Al?(n=!0,`${JSON.stringify(i,null,2).slice(0,Al)}…`):i}catch{}return o});return Mn({...e,data:{...e.data,arguments:r,...n?{_meta:{warnings:["CONSOLE_ARG_TRUNCATED"]}}:{}}})}function HC(e){return!!e.category}function RU(e,t){return e.type||!e.exception||!e.exception.values||!e.exception.values.length?!1:!!(t.originalException&&t.originalException.__rrweb__)}function $U(e,t){e.triggerUserActivity(),e.addUpdate(()=>t.timestamp?(e.throttledAddEvent({type:te.Custom,timestamp:t.timestamp*1e3,data:{tag:"breadcrumb",payload:{timestamp:t.timestamp,type:"default",category:"sentry.feedback",data:{feedbackId:t.event_id}}}}),!1):!0)}function OU(e,t){return e.recordingMode!=="buffer"||t.message===Ng||!t.exception||t.type?!1:DC(e.getOptions().errorSampleRate)}function AU(e){return Object.assign((t,n)=>e.isEnabled()?vU(t)?(delete t.breadcrumbs,t):!Gg(t)&&!Eh(t)&&!I0(t)||!e.checkAndHandleExpiredSession()?t:I0(t)?(e.flush(),t.contexts.feedback.replay_id=e.getSessionId(),$U(e,t),t):RU(t,n)&&!e.getOptions()._experiments.captureExceptions?(ve&&C.log("[Replay] Ignoring error from rrweb internals",t),null):((OU(e,t)||e.recordingMode==="session")&&(t.tags={...t.tags,replayId:e.getSessionId()}),t):t,{id:"Replay"})}function df(e,t){return t.map(({type:n,start:r,end:o,name:i,data:s})=>{const a=e.throttledAddEvent({type:te.Custom,timestamp:r,data:{tag:"performanceSpan",payload:{op:n,description:i,startTimestamp:r,endTimestamp:o,data:s}}});return typeof a=="string"?Promise.resolve(null):a})}function MU(e){const{from:t,to:n}=e,r=Date.now()/1e3;return{type:"navigation.push",start:r,end:r,name:n,data:{previous:t}}}function NU(e){return t=>{if(!e.isEnabled())return;const n=MU(t);n!==null&&(e.getContext().urls.push(n.name),e.triggerUserActivity(),e.addUpdate(()=>(df(e,[n]),!1)))}}function PU(e,t){return ve&&e.getOptions()._experiments.traceInternals?!1:ST(t,z())}function WC(e,t){e.isEnabled()&&t!==null&&(PU(e,t.name)||e.addUpdate(()=>(df(e,[t]),!0)))}function pf(e){if(!e)return;const t=new TextEncoder;try{if(typeof e=="string")return t.encode(e).length;if(e instanceof URLSearchParams)return t.encode(e.toString()).length;if(e instanceof FormData){const n=KC(e);return t.encode(n).length}if(e instanceof Blob)return e.size;if(e instanceof ArrayBuffer)return e.byteLength}catch{}}function VC(e){if(!e)return;const t=parseInt(e,10);return isNaN(t)?void 0:t}function GC(e){try{if(typeof e=="string")return[e];if(e instanceof URLSearchParams)return[e.toString()];if(e instanceof FormData)return[KC(e)];if(!e)return[void 0]}catch{return ve&&C.warn("[Replay] Failed to serialize body",e),[void 0,"BODY_PARSE_ERROR"]}return ve&&C.info("[Replay] Skipping network body because of body type",e),[void 0,"UNPARSEABLE_BODY_TYPE"]}function gc(e,t){if(!e)return{headers:{},size:void 0,_meta:{warnings:[t]}};const n={...e._meta},r=n.warnings||[];return n.warnings=[...r,t],e._meta=n,e}function qC(e,t){if(!t)return null;const{startTimestamp:n,endTimestamp:r,url:o,method:i,statusCode:s,request:a,response:l}=t;return{type:e,start:n/1e3,end:r/1e3,name:o,data:Qe({method:i,statusCode:s,request:a,response:l})}}function Oa(e){return{headers:{},size:e,_meta:{warnings:["URL_SKIPPED"]}}}function Fr(e,t,n){if(!t&&Object.keys(e).length===0)return;if(!t)return{headers:e};if(!n)return{headers:e,size:t};const r={headers:e,size:t},{body:o,warnings:i}=LU(n);return r.body=o,i&&i.length>0&&(r._meta={warnings:i}),r}function wh(e,t){return Object.keys(e).reduce((n,r)=>{const o=r.toLowerCase();return t.includes(o)&&e[r]&&(n[o]=e[r]),n},{})}function KC(e){return new URLSearchParams(e).toString()}function LU(e){if(!e||typeof e!="string")return{body:e};const t=e.length>d0,n=DU(e);if(t){const r=e.slice(0,d0);return n?{body:r,warnings:["MAYBE_JSON_TRUNCATED"]}:{body:`${r}…`,warnings:["TEXT_TRUNCATED"]}}if(n)try{return{body:JSON.parse(e)}}catch{}return{body:e}}function DU(e){const t=e[0],n=e[e.length-1];return t==="["&&n==="]"||t==="{"&&n==="}"}function yc(e,t){const n=FU(e);return Lr(n,t)}function FU(e,t=be.document.baseURI){if(e.startsWith("http://")||e.startsWith("https://")||e.startsWith(be.location.origin))return e;const n=new URL(e,t);if(n.origin!==new URL(t).origin)return e;const r=n.href;return!e.endsWith("/")&&r.endsWith("/")?r.slice(0,-1):r}async function UU(e,t,n){try{const r=await BU(e,t,n),o=qC("resource.fetch",r);WC(n.replay,o)}catch(r){ve&&C.error("[Replay] Failed to capture fetch breadcrumb",r)}}function jU(e,t){const{input:n,response:r}=t,o=n?YC(n):void 0,i=pf(o),s=r?VC(r.headers.get("content-length")):void 0;i!==void 0&&(e.data.request_body_size=i),s!==void 0&&(e.data.response_body_size=s)}async function BU(e,t,n){const r=Date.now(),{startTimestamp:o=r,endTimestamp:i=r}=t,{url:s,method:a,status_code:l=0,request_body_size:u,response_body_size:f}=e.data,c=yc(s,n.networkDetailAllowUrls)&&!yc(s,n.networkDetailDenyUrls),d=c?zU(n,t.input,u):Oa(u),h=await HU(c,n,t.response,f);return{startTimestamp:o,endTimestamp:i,url:s,method:a,statusCode:l,request:d,response:h}}function zU({networkCaptureBodies:e,networkRequestHeaders:t},n,r){const o=n?GU(n,t):{};if(!e)return Fr(o,r,void 0);const i=YC(n),[s,a]=GC(i),l=Fr(o,r,s);return a?gc(l,a):l}async function HU(e,{networkCaptureBodies:t,networkResponseHeaders:n},r,o){if(!e&&o!==void 0)return Oa(o);const i=r?XC(r.headers,n):{};if(!r||!t&&o!==void 0)return Fr(i,o,void 0);const[s,a]=await VU(r),l=WU(s,{networkCaptureBodies:t,responseBodySize:o,captureDetails:e,headers:i});return a?gc(l,a):l}function WU(e,{networkCaptureBodies:t,responseBodySize:n,captureDetails:r,headers:o}){try{const i=e&&e.length&&n===void 0?pf(e):n;return r?t?Fr(o,i,e):Fr(o,i,void 0):Oa(i)}catch(i){return ve&&C.warn("[Replay] Failed to serialize response body",i),Fr(o,n,void 0)}}async function VU(e){const t=qU(e);if(!t)return[void 0,"BODY_PARSE_ERROR"];try{return[await KU(t)]}catch(n){return ve&&C.warn("[Replay] Failed to get text body from response",n),[void 0,"BODY_PARSE_ERROR"]}}function YC(e=[]){if(!(e.length!==2||typeof e[1]!="object"))return e[1].body}function XC(e,t){const n={};return t.forEach(r=>{e.get(r)&&(n[r]=e.get(r))}),n}function GU(e,t){return e.length===1&&typeof e[0]!="string"?R0(e[0],t):e.length===2?R0(e[1],t):{}}function R0(e,t){if(!e)return{};const n=e.headers;return n?n instanceof Headers?XC(n,t):Array.isArray(n)?{}:wh(n,t):{}}function qU(e){try{return e.clone()}catch(t){ve&&C.warn("[Replay] Failed to clone response body",t)}}function KU(e){return new Promise((t,n)=>{const r=Io(()=>n(new Error("Timeout while trying to read response body")),500);YU(e).then(o=>t(o),o=>n(o)).finally(()=>clearTimeout(r))})}async function YU(e){return await e.text()}async function XU(e,t,n){try{const r=QU(e,t,n),o=qC("resource.xhr",r);WC(n.replay,o)}catch(r){ve&&C.error("[Replay] Failed to capture xhr breadcrumb",r)}}function JU(e,t){const{xhr:n,input:r}=t;if(!n)return;const o=pf(r),i=n.getResponseHeader("content-length")?VC(n.getResponseHeader("content-length")):n8(n.response,n.responseType);o!==void 0&&(e.data.request_body_size=o),i!==void 0&&(e.data.response_body_size=i)}function QU(e,t,n){const r=Date.now(),{startTimestamp:o=r,endTimestamp:i=r,input:s,xhr:a}=t,{url:l,method:u,status_code:f=0,request_body_size:c,response_body_size:d}=e.data;if(!l)return null;if(!a||!yc(l,n.networkDetailAllowUrls)||yc(l,n.networkDetailDenyUrls)){const E=Oa(c),w=Oa(d);return{startTimestamp:o,endTimestamp:i,url:l,method:u,statusCode:f,request:E,response:w}}const h=a[Cr],m=h?wh(h.request_headers,n.networkRequestHeaders):{},_=wh(ZU(a),n.networkResponseHeaders),[v,g]=n.networkCaptureBodies?GC(s):[void 0],[p,y]=n.networkCaptureBodies?e8(a):[void 0],S=Fr(m,c,v),b=Fr(_,d,p);return{startTimestamp:o,endTimestamp:i,url:l,method:u,statusCode:f,request:g?gc(S,g):S,response:y?gc(b,y):b}}function ZU(e){const t=e.getAllResponseHeaders();return t?t.split(`\r +`).reduce((n,r)=>{const[o,i]=r.split(": ");return n[o.toLowerCase()]=i,n},{}):{}}function e8(e){const t=[];try{return[e.responseText]}catch(n){t.push(n)}try{return t8(e.response,e.responseType)}catch(n){t.push(n)}return ve&&C.warn("[Replay] Failed to get xhr response body",...t),[void 0]}function t8(e,t){try{if(typeof e=="string")return[e];if(e instanceof Document)return[e.body.outerHTML];if(t==="json"&&e&&typeof e=="object")return[JSON.stringify(e)];if(!e)return[void 0]}catch{return ve&&C.warn("[Replay] Failed to serialize body",e),[void 0,"BODY_PARSE_ERROR"]}return ve&&C.info("[Replay] Skipping network body because of body type",e),[void 0,"UNPARSEABLE_BODY_TYPE"]}function n8(e,t){try{const n=t==="json"&&e&&typeof e=="object"?JSON.stringify(e):e;return pf(n)}catch{return}}function r8(e){const t=z();try{const{networkDetailAllowUrls:n,networkDetailDenyUrls:r,networkCaptureBodies:o,networkRequestHeaders:i,networkResponseHeaders:s}=e.getOptions(),a={replay:e,networkDetailAllowUrls:n,networkDetailDenyUrls:r,networkCaptureBodies:o,networkRequestHeaders:i,networkResponseHeaders:s};t&&t.on("beforeAddBreadcrumb",(l,u)=>o8(a,l,u))}catch{}}function o8(e,t,n){if(t.data)try{i8(t)&&a8(n)&&(JU(t,n),XU(t,n,e)),s8(t)&&l8(n)&&(jU(t,n),UU(t,n,e))}catch{ve&&C.warn("Error when enriching network breadcrumb")}}function i8(e){return e.category==="xhr"}function s8(e){return e.category==="fetch"}function a8(e){return e&&e.xhr}function l8(e){return e&&e.response}function u8(e){const t=z();KT(W6(e)),uf(NU(e)),CU(e),r8(e);const n=AU(e);cT(n),t&&(t.on("beforeSendEvent",bU(e)),t.on("afterSendEvent",SU(e)),t.on("createDsc",r=>{const o=e.getSessionId();o&&e.isEnabled()&&e.recordingMode==="session"&&e.checkAndHandleExpiredSession()&&(r.replay_id=o)}),t.on("spanStart",r=>{e.lastActiveSpan=r}),t.on("spanEnd",r=>{e.lastActiveSpan=r}),t.on("beforeSendFeedback",(r,o)=>{const i=e.getSessionId();o&&o.includeReplay&&e.isEnabled()&&i&&r.contexts&&r.contexts.feedback&&(r.contexts.feedback.replay_id=i)}))}async function c8(e){try{return Promise.all(df(e,[f8(be.performance.memory)]))}catch{return[]}}function f8(e){const{jsHeapSizeLimit:t,totalJSHeapSize:n,usedJSHeapSize:r}=e,o=Date.now()/1e3;return{type:"memory",name:"memory",start:o,end:o,data:{memory:{jsHeapSizeLimit:t,totalJSHeapSize:n,usedJSHeapSize:r}}}}function d8(e,t,n){let r,o,i;const s=n&&n.maxWait?Math.max(n.maxWait,t):0;function a(){return l(),r=e(),r}function l(){o!==void 0&&clearTimeout(o),i!==void 0&&clearTimeout(i),o=i=void 0}function u(){return o!==void 0||i!==void 0?a():r}function f(){return o&&clearTimeout(o),o=Io(a,t),s&&i===void 0&&(i=Io(a,s)),r}return f.cancel=l,f.flush=u,f}function p8(e){let t=!1;return(n,r)=>{if(!e.checkAndHandleExpiredSession()){ve&&C.warn("[Replay] Received replay event after session expired.");return}const o=r||!t;t=!0,e.clickDetector&&U6(e.clickDetector,n),e.addUpdate(()=>{if(e.recordingMode==="buffer"&&o&&e.setInitialState(),!Vg(e,n,o))return!0;if(!o)return!1;if(m8(e,o),e.session&&e.session.previousSessionId)return!0;if(e.recordingMode==="buffer"&&e.session&&e.eventBuffer){const i=e.eventBuffer.getEarliestTimestamp();i&&(bt(`[Replay] Updating session start time to earliest event in buffer to ${new Date(i)}`,e.getOptions()._experiments.traceInternals),e.session.started=i,e.getOptions().stickySession&&Wg(e.session))}return e.recordingMode==="session"&&e.flush(),!0})}}function h8(e){const t=e.getOptions();return{type:te.Custom,timestamp:Date.now(),data:{tag:"options",payload:{shouldRecordCanvas:e.isRecordingCanvas(),sessionSampleRate:t.sessionSampleRate,errorSampleRate:t.errorSampleRate,useCompressionOption:t.useCompression,blockAllMedia:t.blockAllMedia,maskAllText:t.maskAllText,maskAllInputs:t.maskAllInputs,useCompression:e.eventBuffer?e.eventBuffer.type==="worker":!1,networkDetailHasUrls:t.networkDetailAllowUrls.length>0,networkCaptureBodies:t.networkCaptureBodies,networkRequestHasHeaders:t.networkRequestHeaders.length>0,networkResponseHasHeaders:t.networkResponseHeaders.length>0}}}}function m8(e,t){!t||!e.session||e.session.segmentId!==0||Vg(e,h8(e),!1)}function g8(e,t,n,r){return lr(Ub(e,ug(e),r,n),[[{type:"replay_event"},e],[{type:"replay_recording",length:typeof t=="string"?new TextEncoder().encode(t).length:t.length},t]])}function y8({recordingData:e,headers:t}){let n;const r=`${JSON.stringify(t)} +`;if(typeof e=="string")n=`${r}${e}`;else{const i=new TextEncoder().encode(r);n=new Uint8Array(i.length+e.length),n.set(i),n.set(e,i.length)}return n}async function _8({client:e,scope:t,replayId:n,event:r}){const o=typeof e._integrations=="object"&&e._integrations!==null&&!Array.isArray(e._integrations)?Object.keys(e._integrations):void 0,i={event_id:n,integrations:o};e.emit("preprocessEvent",r,i);const s=await rT(e.getOptions(),r,i,t,e,Ke());if(!s)return null;s.platform=s.platform||"javascript";const a=e.getSdkMetadata(),{name:l,version:u}=a&&a.sdk||{};return s.sdk={...s.sdk,name:l||"sentry.javascript.unknown",version:u||"0.0.0"},s}async function v8({recordingData:e,replayId:t,segmentId:n,eventContext:r,timestamp:o,session:i}){const s=y8({recordingData:e,headers:{segment_id:n}}),{urls:a,errorIds:l,traceIds:u,initialTimestamp:f}=r,c=z(),d=re(),h=c&&c.getTransport(),m=c&&c.getDsn();if(!c||!h||!m||!i.sampled)return or({});const _={type:a5,replay_start_timestamp:f/1e3,timestamp:o/1e3,error_ids:l,trace_ids:u,urls:a,replay_id:t,segment_id:n,replay_type:i.sampled},v=await _8({scope:d,client:c,replayId:t,event:_});if(!v)return c.recordDroppedEvent("event_processor","replay",_),bt("An event processor returned `null`, will not send event."),or({});delete v.sdkProcessingMetadata;const g=g8(v,s,m,c.getOptions().tunnel);let p;try{p=await h.send(g)}catch(S){const b=new Error(Ng);try{b.cause=S}catch{}throw b}if(typeof p.statusCode=="number"&&(p.statusCode<200||p.statusCode>=300))throw new JC(p.statusCode);const y=zb({},p);if(Bb(y,"replay"))throw new QC(y);return p}class JC extends Error{constructor(t){super(`Transport returned status code ${t}`)}}class QC extends Error{constructor(t){super("Rate limit hit"),this.rateLimits=t}}async function ZC(e,t={count:0,interval:p5}){const{recordingData:n,options:r}=e;if(n.length)try{return await v8(e),!0}catch(o){if(o instanceof JC||o instanceof QC)throw o;if(bg("Replays",{_retryCount:t.count}),ve&&r._experiments&&r._experiments.captureExceptions&&as(o),t.count>=h5){const i=new Error(`${Ng} - max retries exceeded`);try{i.cause=o}catch{}throw i}return t.interval*=++t.count,new Promise((i,s)=>{Io(async()=>{try{await ZC(e,t),i(!0)}catch(a){s(a)}},t.interval)})}}const ek="__THROTTLED",S8="__SKIPPED";function E8(e,t,n){const r=new Map,o=a=>{const l=a-n;r.forEach((u,f)=>{f[...r.values()].reduce((a,l)=>a+l,0);let s=!1;return(...a)=>{const l=Math.floor(Date.now()/1e3);if(o(l),i()>=t){const f=s;return s=!0,f?S8:ek}s=!1;const u=r.get(l)||0;return r.set(l,u+1),e(...a)}}class _r{constructor({options:t,recordingOptions:n}){_r.prototype.__init.call(this),_r.prototype.__init2.call(this),_r.prototype.__init3.call(this),_r.prototype.__init4.call(this),_r.prototype.__init5.call(this),_r.prototype.__init6.call(this),this.eventBuffer=null,this.performanceEntries=[],this.replayPerformanceEntries=[],this.recordingMode="session",this.timeouts={sessionIdlePause:l5,sessionIdleExpire:u5},this._lastActivity=Date.now(),this._isEnabled=!1,this._isPaused=!1,this._hasInitializedCoreListeners=!1,this._context={errorIds:new Set,traceIds:new Set,urls:[],initialTimestamp:Date.now(),initialUrl:""},this._recordingOptions=n,this._options=t,this._debouncedFlush=d8(()=>this._flush(),this._options.flushMinDelay,{maxWait:this._options.flushMaxDelay}),this._throttledAddEvent=E8((s,a)=>yU(this,s,a),300,5);const{slowClickTimeout:r,slowClickIgnoreSelectors:o}=this.getOptions(),i=r?{threshold:Math.min(m5,r),timeout:r,scrollTimeout:g5,ignoreSelector:o?o.join(","):""}:void 0;i&&(this.clickDetector=new P6(this,i))}getContext(){return this._context}isEnabled(){return this._isEnabled}isPaused(){return this._isPaused}isRecordingCanvas(){return!!this._canvas}getOptions(){return this._options}initializeSampling(t){const{errorSampleRate:n,sessionSampleRate:r}=this._options;if(!(n<=0&&r<=0)){if(this._initializeSessionForSampling(t),!this.session){this._handleException(new Error("Unable to initialize and create session"));return}this.session.sampled!==!1&&(this.recordingMode=this.session.sampled==="buffer"&&this.session.segmentId===0?"buffer":"session",bi(`[Replay] Starting replay in ${this.recordingMode} mode`,this._options._experiments.traceInternals),this._initializeRecording())}}start(){if(this._isEnabled&&this.recordingMode==="session")throw new Error("Replay recording is already in progress");if(this._isEnabled&&this.recordingMode==="buffer")throw new Error("Replay buffering is in progress, call `flush()` to save the replay");bi("[Replay] Starting replay in session mode",this._options._experiments.traceInternals),this._updateUserActivity();const t=Od({maxReplayDuration:this._options.maxReplayDuration,sessionIdleExpire:this.timeouts.sessionIdleExpire,traceInternals:this._options._experiments.traceInternals},{stickySession:this._options.stickySession,sessionSampleRate:1,allowBuffering:!1});this.session=t,this._initializeRecording()}startBuffering(){if(this._isEnabled)throw new Error("Replay recording is already in progress");bi("[Replay] Starting replay in buffer mode",this._options._experiments.traceInternals);const t=Od({sessionIdleExpire:this.timeouts.sessionIdleExpire,maxReplayDuration:this._options.maxReplayDuration,traceInternals:this._options._experiments.traceInternals},{stickySession:this._options.stickySession,sessionSampleRate:0,allowBuffering:!0});this.session=t,this.recordingMode="buffer",this._initializeRecording()}startRecording(){try{const t=this._canvas;this._stopRecording=Dr({...this._recordingOptions,...this.recordingMode==="buffer"&&{checkoutEveryNms:d5},emit:p8(this),onMutation:this._onMutationHandler,...t?{recordCanvas:t.recordCanvas,getCanvasManager:t.getCanvasManager,sampling:t.sampling,dataURLOptions:t.dataURLOptions}:{}})}catch(t){this._handleException(t)}}stopRecording(){try{return this._stopRecording&&(this._stopRecording(),this._stopRecording=void 0),!0}catch(t){return this._handleException(t),!1}}async stop({forceFlush:t=!1,reason:n}={}){if(this._isEnabled){this._isEnabled=!1;try{bt(`[Replay] Stopping Replay${n?` triggered by ${n}`:""}`,this._options._experiments.traceInternals),this._removeListeners(),this.stopRecording(),this._debouncedFlush.cancel(),t&&await this._flush({force:!0}),this.eventBuffer&&this.eventBuffer.destroy(),this.eventBuffer=null,dU(this)}catch(r){this._handleException(r)}}}pause(){this._isPaused||(this._isPaused=!0,this.stopRecording(),bt("[Replay] Pausing replay",this._options._experiments.traceInternals))}resume(){!this._isPaused||!this._checkSession()||(this._isPaused=!1,this.startRecording(),bt("[Replay] Resuming replay",this._options._experiments.traceInternals))}async sendBufferedReplayOrFlush({continueRecording:t=!0}={}){if(this.recordingMode==="session")return this.flushImmediate();const n=Date.now();bt("[Replay] Converting buffer to session",this._options._experiments.traceInternals),await this.flushImmediate();const r=this.stopRecording();!t||!r||this.recordingMode!=="session"&&(this.recordingMode="session",this.session&&(this._updateUserActivity(n),this._updateSessionActivity(n),this._maybeSaveSession()),this.startRecording())}addUpdate(t){const n=t();this.recordingMode!=="buffer"&&n!==!0&&this._debouncedFlush()}triggerUserActivity(){if(this._updateUserActivity(),!this._stopRecording){if(!this._checkSession())return;this.resume();return}this.checkAndHandleExpiredSession(),this._updateSessionActivity()}updateUserActivity(){this._updateUserActivity(),this._updateSessionActivity()}conditionalFlush(){return this.recordingMode==="buffer"?Promise.resolve():this.flushImmediate()}flush(){return this._debouncedFlush()}flushImmediate(){return this._debouncedFlush(),this._debouncedFlush.flush()}cancelFlush(){this._debouncedFlush.cancel()}getSessionId(){return this.session&&this.session.id}checkAndHandleExpiredSession(){if(this._lastActivity&&Sh(this._lastActivity,this.timeouts.sessionIdlePause)&&this.session&&this.session.sampled==="session"){this.pause();return}return!!this._checkSession()}setInitialState(){const t=`${be.location.pathname}${be.location.hash}${be.location.search}`,n=`${be.location.origin}${t}`;this.performanceEntries=[],this.replayPerformanceEntries=[],this._clearContext(),this._context.initialUrl=n,this._context.initialTimestamp=Date.now(),this._context.urls.push(n)}throttledAddEvent(t,n){const r=this._throttledAddEvent(t,n);if(r===ek){const o=Mn({category:"replay.throttled"});this.addUpdate(()=>!Vg(this,{type:R6,timestamp:o.timestamp||0,data:{tag:"breadcrumb",payload:o,metric:!0}}))}return r}getCurrentRoute(){const t=this.lastActiveSpan||at(),n=t&&qe(t),o=(n&&J(n).data||{})[Ge];if(!(!n||!o||!["route","custom"].includes(o)))return J(n).description}_initializeRecording(){this.setInitialState(),this._updateSessionActivity(),this.eventBuffer=uU({useCompression:this._options.useCompression,workerUrl:this._options.workerUrl}),this._removeListeners(),this._addListeners(),this._isEnabled=!0,this._isPaused=!1,this.startRecording()}_handleException(t){ve&&C.error("[Replay]",t),ve&&this._options._experiments&&this._options._experiments.captureExceptions&&as(t)}_initializeSessionForSampling(t){const n=this._options.errorSampleRate>0,r=Od({sessionIdleExpire:this.timeouts.sessionIdleExpire,maxReplayDuration:this._options.maxReplayDuration,traceInternals:this._options._experiments.traceInternals,previousSessionId:t},{stickySession:this._options.stickySession,sessionSampleRate:this._options.sessionSampleRate,allowBuffering:n});this.session=r}_checkSession(){if(!this.session)return!1;const t=this.session;return jC(t,{sessionIdleExpire:this.timeouts.sessionIdleExpire,maxReplayDuration:this._options.maxReplayDuration})?(this._refreshSession(t),!1):!0}async _refreshSession(t){this._isEnabled&&(await this.stop({reason:"refresh session"}),this.initializeSampling(t.id))}_addListeners(){try{be.document.addEventListener("visibilitychange",this._handleVisibilityChange),be.addEventListener("blur",this._handleWindowBlur),be.addEventListener("focus",this._handleWindowFocus),be.addEventListener("keydown",this._handleKeyboardEvent),this.clickDetector&&this.clickDetector.addListeners(),this._hasInitializedCoreListeners||(u8(this),this._hasInitializedCoreListeners=!0)}catch(t){this._handleException(t)}this._performanceCleanupCallback=rU(this)}_removeListeners(){try{be.document.removeEventListener("visibilitychange",this._handleVisibilityChange),be.removeEventListener("blur",this._handleWindowBlur),be.removeEventListener("focus",this._handleWindowFocus),be.removeEventListener("keydown",this._handleKeyboardEvent),this.clickDetector&&this.clickDetector.removeListeners(),this._performanceCleanupCallback&&this._performanceCleanupCallback()}catch(t){this._handleException(t)}}__init(){this._handleVisibilityChange=()=>{be.document.visibilityState==="visible"?this._doChangeToForegroundTasks():this._doChangeToBackgroundTasks()}}__init2(){this._handleWindowBlur=()=>{const t=Mn({category:"ui.blur"});this._doChangeToBackgroundTasks(t)}}__init3(){this._handleWindowFocus=()=>{const t=Mn({category:"ui.focus"});this._doChangeToForegroundTasks(t)}}__init4(){this._handleKeyboardEvent=t=>{K6(this,t)}}_doChangeToBackgroundTasks(t){!this.session||UC(this.session,{maxReplayDuration:this._options.maxReplayDuration,sessionIdleExpire:this.timeouts.sessionIdleExpire})||(t&&this._createCustomBreadcrumb(t),this.conditionalFlush())}_doChangeToForegroundTasks(t){if(!this.session)return;if(!this.checkAndHandleExpiredSession()){bt("[Replay] Document has become active, but session has expired");return}t&&this._createCustomBreadcrumb(t)}_updateUserActivity(t=Date.now()){this._lastActivity=t}_updateSessionActivity(t=Date.now()){this.session&&(this.session.lastActivity=t,this._maybeSaveSession())}_createCustomBreadcrumb(t){this.addUpdate(()=>{this.throttledAddEvent({type:te.Custom,timestamp:t.timestamp||0,data:{tag:"breadcrumb",payload:t}})})}_addPerformanceEntries(){const t=J6(this.performanceEntries).concat(this.replayPerformanceEntries);return this.performanceEntries=[],this.replayPerformanceEntries=[],Promise.all(df(this,t))}_clearContext(){this._context.errorIds.clear(),this._context.traceIds.clear(),this._context.urls=[]}_updateInitialTimestampFromEventBuffer(){const{session:t,eventBuffer:n}=this;if(!t||!n||t.segmentId)return;const r=n.getEarliestTimestamp();r&&rthis._options.maxReplayDuration+3e4)throw new Error("Session is too long, not sending replay");const r=this._popEventContext(),o=this.session.segmentId++;this._maybeSaveSession();const i=await this.eventBuffer.finish();await ZC({replayId:t,recordingData:i,segmentId:o,eventContext:r,session:this.session,options:this.getOptions(),timestamp:n})}catch(n){this._handleException(n),this.stop({reason:"sendReplay"});const r=z();r&&r.recordDroppedEvent("send_error","replay")}}__init5(){this._flush=async({force:t=!1}={})=>{if(!this._isEnabled&&!t)return;if(!this.checkAndHandleExpiredSession()){ve&&C.error("[Replay] Attempting to finish replay event after session expired.");return}if(!this.session)return;const n=this.session.started,o=Date.now()-n;this._debouncedFlush.cancel();const i=othis._options.maxReplayDuration+5e3;if(i||s){bt(`[Replay] Session duration (${Math.floor(o/1e3)}s) is too ${i?"short":"long"}, not sending replay.`,this._options._experiments.traceInternals),i&&this._debouncedFlush();return}const a=this.eventBuffer;if(a&&this.session.segmentId===0&&!a.hasCheckout&&bt("[Replay] Flushing initial segment without checkout.",this._options._experiments.traceInternals),!this._flushLock){this._flushLock=this._runFlush(),await this._flushLock,this._flushLock=void 0;return}try{await this._flushLock}catch(l){ve&&C.error(l)}finally{this._debouncedFlush()}}}_maybeSaveSession(){this.session&&this._options.stickySession&&Wg(this.session)}__init6(){this._onMutationHandler=t=>{const n=t.length,r=this._options.mutationLimit,o=this._options.mutationBreadcrumbLimit,i=r&&n>r;if(n>o||i){const s=Mn({category:"replay.mutations",data:{count:n,limit:i}});this._createCustomBreadcrumb(s)}return i?(this.stop({reason:"mutationLimit",forceFlush:this.recordingMode==="session"}),!1):!0}}}function As(e,t){return[...e,...t].join(",")}function w8({mask:e,unmask:t,block:n,unblock:r,ignore:o}){const i=['base[href="/"]'],s=As(e,[".sentry-mask","[data-sentry-mask]"]),a=As(t,[]);return{maskTextSelector:s,unmaskTextSelector:a,blockSelector:As(n,[".sentry-block","[data-sentry-block]",...i]),unblockSelector:As(r,[]),ignoreSelector:As(o,[".sentry-ignore","[data-sentry-ignore]",'input[type="file"]'])}}function b8({el:e,key:t,maskAttributes:n,maskAllText:r,privacyOptions:o,value:i}){return!r||o.unmaskTextSelector&&e.matches(o.unmaskTextSelector)?i:n.includes(t)||t==="value"&&e.tagName==="INPUT"&&["submit","button"].includes(e.getAttribute("type")||"")?i.replace(/[\S]/g,"*"):i}const $0='img,image,svg,video,object,picture,embed,map,audio,link[rel="icon"],link[rel="apple-touch-icon"]',T8=["content-length","content-type","accept"];let O0=!1;const C8=e=>new hf(e);class hf{static __initStatic(){this.id="Replay"}constructor({flushMinDelay:t=c5,flushMaxDelay:n=f5,minReplayDuration:r=y5,maxReplayDuration:o=p0,stickySession:i=!0,useCompression:s=!0,workerUrl:a,_experiments:l={},maskAllText:u=!0,maskAllInputs:f=!0,blockAllMedia:c=!0,mutationBreadcrumbLimit:d=750,mutationLimit:h=1e4,slowClickTimeout:m=7e3,slowClickIgnoreSelectors:_=[],networkDetailAllowUrls:v=[],networkDetailDenyUrls:g=[],networkCaptureBodies:p=!0,networkRequestHeaders:y=[],networkResponseHeaders:S=[],mask:b=[],maskAttributes:E=["title","placeholder"],unmask:w=[],block:x=[],unblock:D=[],ignore:I=[],maskFn:A,beforeAddRecordingEvent:W,beforeErrorSampling:ee}={}){this.name=hf.id;const j=w8({mask:b,unmask:w,block:x,unblock:D,ignore:I});if(this._recordingOptions={maskAllInputs:f,maskAllText:u,maskInputOptions:{password:!0},maskTextFn:A,maskInputFn:A,maskAttributeFn:(N,R,L)=>b8({maskAttributes:E,maskAllText:u,privacyOptions:j,key:N,value:R,el:L}),...j,slimDOMOptions:"all",inlineStylesheet:!0,inlineImages:!1,collectFonts:!0,errorHandler:N=>{try{N.__rrweb__=!0}catch{}}},this._initialOptions={flushMinDelay:t,flushMaxDelay:n,minReplayDuration:Math.min(r,_5),maxReplayDuration:Math.min(o,p0),stickySession:i,useCompression:s,workerUrl:a,blockAllMedia:c,maskAllInputs:f,maskAllText:u,mutationBreadcrumbLimit:d,mutationLimit:h,slowClickTimeout:m,slowClickIgnoreSelectors:_,networkDetailAllowUrls:v,networkDetailDenyUrls:g,networkCaptureBodies:p,networkRequestHeaders:A0(y),networkResponseHeaders:A0(S),beforeAddRecordingEvent:W,beforeErrorSampling:ee,_experiments:l},this._initialOptions.blockAllMedia&&(this._recordingOptions.blockSelector=this._recordingOptions.blockSelector?`${this._recordingOptions.blockSelector},${$0}`:$0),this._isInitialized&&Kp())throw new Error("Multiple Sentry Session Replay instances are not supported");this._isInitialized=!0}get _isInitialized(){return O0}set _isInitialized(t){O0=t}setupOnce(){Kp()&&(this._setup(),setTimeout(()=>this._initialize()))}start(){this._replay&&this._replay.start()}startBuffering(){this._replay&&this._replay.startBuffering()}stop(){return this._replay?this._replay.stop({forceFlush:this._replay.recordingMode==="session"}):Promise.resolve()}flush(t){return!this._replay||!this._replay.isEnabled()?Promise.resolve():this._replay.sendBufferedReplayOrFlush(t)}getReplayId(){if(!(!this._replay||!this._replay.isEnabled()))return this._replay.getSessionId()}_initialize(){this._replay&&(this._maybeLoadFromReplayCanvasIntegration(),this._replay.initializeSampling())}_setup(){const t=k8(this._initialOptions);this._replay=new _r({options:t,recordingOptions:this._recordingOptions})}_maybeLoadFromReplayCanvasIntegration(){try{const n=z().getIntegrationByName("ReplayCanvas");if(!n)return;this._replay._canvas=n.getOptions()}catch{}}}hf.__initStatic();function k8(e){const t=z(),n=t&&t.getOptions(),r={sessionSampleRate:0,errorSampleRate:0,...Qe(e)};if(!n)return zr(()=>{console.warn("SDK client is not available.")}),r;const o=nc(n.replaysSessionSampleRate),i=nc(n.replaysOnErrorSampleRate);return o==null&&i==null&&zr(()=>{console.warn("Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set.")}),o!=null&&(r.sessionSampleRate=o),i!=null&&(r.errorSampleRate=i),r}function A0(e){return[...T8,...e.map(t=>t.toLowerCase())]}function x8(){const e=z();return e&&e.getIntegrationByName("Replay")}var M0;(function(e){e[e.Document=0]="Document",e[e.DocumentType=1]="DocumentType",e[e.Element=2]="Element",e[e.Text=3]="Text",e[e.CDATA=4]="CDATA",e[e.Comment=5]="Comment"})(M0||(M0={}));function I8(e,t){for(let n=e.classList.length;n--;){const r=e.classList[n];if(t.test(r))return!0}return!1}function bh(e,t,n=1/0,r=0){return!e||e.nodeType!==e.ELEMENT_NODE||r>n?-1:t(e)?r:bh(e.parentNode,t,n,r+1)}function N0(e,t){return n=>{const r=n;if(r===null)return!1;try{if(e){if(typeof e=="string"){if(r.matches(`.${e}`))return!0}else if(I8(r,e))return!0}return!!(t&&r.matches(t))}catch{return!1}}}const Yo=`Please stop import mirror directly. Instead of that,\r +now you can use replayer.getMirror() to access the mirror instance of a replayer,\r +or you can use record.mirror to access the mirror instance during recording.`;let P0={map:{},getId(){return console.error(Yo),-1},getNode(){return console.error(Yo),null},removeNodeFromMap(){console.error(Yo)},has(){return console.error(Yo),!1},reset(){console.error(Yo)}};typeof window<"u"&&window.Proxy&&window.Reflect&&(P0=new Proxy(P0,{get(e,t,n){return t==="map"&&console.error(Yo),Reflect.get(e,t,n)}}));function qg(e,t,n,r,o=window){const i=o.Object.getOwnPropertyDescriptor(e,t);return o.Object.defineProperty(e,t,r?n:{set(s){nk(()=>{n.set.call(this,s)},0),i&&i.set&&i.set.call(this,s)}}),()=>qg(e,t,i||{},!0)}function Kg(e,t,n){try{if(!(t in e))return()=>{};const r=e[t],o=n(r);return typeof o=="function"&&(o.prototype=o.prototype||{},Object.defineProperties(o,{__rrweb_original__:{enumerable:!1,value:r}})),e[t]=o,()=>{e[t]=r}}catch{return()=>{}}}/[1-9][0-9]{12}/.test(Date.now().toString());function R8(e){return e?e.nodeType===e.ELEMENT_NODE?e:e.parentElement:null}function mf(e,t,n,r,o){if(!e)return!1;const i=R8(e);if(!i)return!1;const s=N0(t,n);if(!o){const u=r&&i.matches(r);return s(i)&&!u}const a=bh(i,s);let l=-1;return a<0?!1:(r&&(l=bh(i,N0(null,r))),a>-1&&l<0?!0:a(e[e["2D"]=0]="2D",e[e.WebGL=1]="WebGL",e[e.WebGL2=2]="WebGL2",e))(Hi||{});let iu;function $8(e){iu=e}const D0=e=>iu?(...n)=>{try{return e(...n)}catch(r){if(iu&&iu(r)===!0)return()=>{};throw r}}:e;var pi="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",O8=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(var Pl=0;Pl>2],o+=pi[(t[n]&3)<<4|t[n+1]>>4],o+=pi[(t[n+1]&15)<<2|t[n+2]>>6],o+=pi[t[n+2]&63];return r%3===2?o=o.substring(0,o.length-1)+"=":r%3===1&&(o=o.substring(0,o.length-2)+"=="),o};const F0=new Map;function M8(e,t){let n=F0.get(e);return n||(n=new Map,F0.set(e,n)),n.has(t)||n.set(t,[]),n.get(t)}const rk=(e,t,n)=>{if(!e||!(ik(e,t)||typeof e=="object"))return;const r=e.constructor.name,o=M8(n,r);let i=o.indexOf(e);return i===-1&&(i=o.length,o.push(e)),i};function su(e,t,n){if(e instanceof Array)return e.map(r=>su(r,t,n));if(e===null)return e;if(e instanceof Float32Array||e instanceof Float64Array||e instanceof Int32Array||e instanceof Uint32Array||e instanceof Uint8Array||e instanceof Uint16Array||e instanceof Int16Array||e instanceof Int8Array||e instanceof Uint8ClampedArray)return{rr_type:e.constructor.name,args:[Object.values(e)]};if(e instanceof ArrayBuffer){const r=e.constructor.name,o=A8(e);return{rr_type:r,base64:o}}else{if(e instanceof DataView)return{rr_type:e.constructor.name,args:[su(e.buffer,t,n),e.byteOffset,e.byteLength]};if(e instanceof HTMLImageElement){const r=e.constructor.name,{src:o}=e;return{rr_type:r,src:o}}else if(e instanceof HTMLCanvasElement){const r="HTMLImageElement",o=e.toDataURL();return{rr_type:r,src:o}}else{if(e instanceof ImageData)return{rr_type:e.constructor.name,args:[su(e.data,t,n),e.width,e.height]};if(ik(e,t)||typeof e=="object"){const r=e.constructor.name,o=rk(e,t,n);return{rr_type:r,index:o}}}}return e}const ok=(e,t,n)=>e.map(r=>su(r,t,n)),ik=(e,t)=>!!["WebGLActiveInfo","WebGLBuffer","WebGLFramebuffer","WebGLProgram","WebGLRenderbuffer","WebGLShader","WebGLShaderPrecisionFormat","WebGLTexture","WebGLUniformLocation","WebGLVertexArrayObject","WebGLVertexArrayObjectOES"].filter(o=>typeof t[o]=="function").find(o=>e instanceof t[o]);function N8(e,t,n,r,o){const i=[],s=Object.getOwnPropertyNames(t.CanvasRenderingContext2D.prototype);for(const a of s)try{if(typeof t.CanvasRenderingContext2D.prototype[a]!="function")continue;const l=Kg(t.CanvasRenderingContext2D.prototype,a,function(u){return function(...f){return mf(this.canvas,n,r,o,!0)||nk(()=>{const c=ok(f,t,this);e(this.canvas,{type:Hi["2D"],property:a,args:c})},0),u.apply(this,f)}});i.push(l)}catch{const u=qg(t.CanvasRenderingContext2D.prototype,a,{set(f){e(this.canvas,{type:Hi["2D"],property:a,args:[f],setter:!0})}});i.push(u)}return()=>{i.forEach(a=>a())}}function P8(e){return e==="experimental-webgl"?"webgl":e}function U0(e,t,n,r,o){const i=[];try{const s=Kg(e.HTMLCanvasElement.prototype,"getContext",function(a){return function(l,...u){if(!mf(this,t,n,r,!0)){const f=P8(l);if("__context"in this||(this.__context=f),o&&["webgl","webgl2"].includes(f))if(u[0]&&typeof u[0]=="object"){const c=u[0];c.preserveDrawingBuffer||(c.preserveDrawingBuffer=!0)}else u.splice(0,1,{preserveDrawingBuffer:!0})}return a.apply(this,[l,...u])}});i.push(s)}catch{console.error("failed to patch HTMLCanvasElement.prototype.getContext")}return()=>{i.forEach(s=>s())}}function j0(e,t,n,r,o,i,s,a){const l=[],u=Object.getOwnPropertyNames(e);for(const f of u)if(!["isContextLost","canvas","drawingBufferWidth","drawingBufferHeight"].includes(f))try{if(typeof e[f]!="function")continue;const c=Kg(e,f,function(d){return function(...h){const m=d.apply(this,h);if(rk(m,a,this),"tagName"in this.canvas&&!mf(this.canvas,r,o,i,!0)){const _=ok(h,a,this),v={type:t,property:f,args:_};n(this.canvas,v)}return m}});l.push(c)}catch{const d=qg(e,f,{set(h){n(this.canvas,{type:t,property:f,args:[h],setter:!0})}});l.push(d)}return l}function L8(e,t,n,r,o,i){const s=[];return s.push(...j0(t.WebGLRenderingContext.prototype,Hi.WebGL,e,n,r,o,i,t)),typeof t.WebGL2RenderingContext<"u"&&s.push(...j0(t.WebGL2RenderingContext.prototype,Hi.WebGL2,e,n,r,o,i,t)),()=>{s.forEach(a=>a())}}var D8='for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t="undefined"==typeof Uint8Array?[]:new Uint8Array(256),a=0;a<64;a++)t[e.charCodeAt(a)]=a;var n=function(t){var a,n=new Uint8Array(t),r=n.length,s="";for(a=0;a>2],s+=e[(3&n[a])<<4|n[a+1]>>4],s+=e[(15&n[a+1])<<2|n[a+2]>>6],s+=e[63&n[a+2]];return r%3==2?s=s.substring(0,s.length-1)+"=":r%3==1&&(s=s.substring(0,s.length-2)+"=="),s};const r=new Map,s=new Map;const i=self;i.onmessage=async function(e){if(!("OffscreenCanvas"in globalThis))return i.postMessage({id:e.data.id});{const{id:t,bitmap:a,width:o,height:f,maxCanvasSize:c,dataURLOptions:g}=e.data,u=async function(e,t,a){const r=e+"-"+t;if("OffscreenCanvas"in globalThis){if(s.has(r))return s.get(r);const i=new OffscreenCanvas(e,t);i.getContext("2d");const o=await i.convertToBlob(a),f=await o.arrayBuffer(),c=n(f);return s.set(r,c),c}return""}(o,f,g),[h,d]=function(e,t,a){if(!a)return[e,t];const[n,r]=a;if(e<=n&&t<=r)return[e,t];let s=e,i=t;return s>n&&(i=Math.floor(n*t/e),s=n),i>r&&(s=Math.floor(r*e/t),i=r),[s,i]}(o,f,c),l=new OffscreenCanvas(h,d),w=l.getContext("bitmaprenderer"),p=h===o&&d===f?a:await createImageBitmap(a,{resizeWidth:h,resizeHeight:d,resizeQuality:"low"});w.transferFromImageBitmap(p),a.close();const y=await l.convertToBlob(g),v=y.type,b=await y.arrayBuffer(),m=n(b);if(p.close(),!r.has(t)&&await u===m)return r.set(t,m),i.postMessage({id:t});if(r.get(t)===m)return i.postMessage({id:t});i.postMessage({id:t,type:v,base64:m,width:o,height:f}),r.set(t,m)}};';function F8(){const e=new Blob([D8]);return URL.createObjectURL(e)}class U8{reset(){this.pendingCanvasMutations.clear(),this.resetObservers&&this.resetObservers()}freeze(){this.frozen=!0}unfreeze(){this.frozen=!1}lock(){this.locked=!0}unlock(){this.locked=!1}constructor(t){this.pendingCanvasMutations=new Map,this.rafStamps={latestId:0,invokeId:null},this.frozen=!1,this.locked=!1,this.processMutation=(c,d)=>{(this.rafStamps.invokeId&&this.rafStamps.latestId!==this.rafStamps.invokeId||!this.rafStamps.invokeId)&&(this.rafStamps.invokeId=this.rafStamps.latestId),this.pendingCanvasMutations.has(c)||this.pendingCanvasMutations.set(c,[]),this.pendingCanvasMutations.get(c).push(d)};const{sampling:n="all",win:r,blockClass:o,blockSelector:i,unblockSelector:s,maxCanvasSize:a,recordCanvas:l,dataURLOptions:u,errorHandler:f}=t;this.mutationCb=t.mutationCb,this.mirror=t.mirror,this.options=t,f&&$8(f),!t.enableManualSnapshot&&D0(()=>{l&&n==="all"&&this.initCanvasMutationObserver(r,o,i,s),l&&typeof n=="number"&&this.initCanvasFPSObserver(n,r,o,i,s,a,{dataURLOptions:u})})()}initCanvasFPSObserver(t,n,r,o,i,s,a){const l=U0(n,r,o,i,!0),u=this.takeSnapshot(!1,t,n,r,o,i,s,a.dataURLOptions);this.resetObservers=()=>{l(),cancelAnimationFrame(u)}}initCanvasMutationObserver(t,n,r,o){this.startRAFTimestamping(),this.startPendingCanvasMutationFlusher();const i=U0(t,n,r,o,!1),s=N8(this.processMutation.bind(this),t,n,r,o),a=L8(this.processMutation.bind(this),t,n,r,o,this.mirror);this.resetObservers=()=>{i(),s(),a()}}snapshot(t){const{options:n}=this,r=this.takeSnapshot(!0,n.sampling==="all"?2:n.sampling||2,n.win,n.blockClass,n.blockSelector,n.unblockSelector,n.maxCanvasSize,n.dataURLOptions,t);this.resetObservers=()=>{cancelAnimationFrame(r)}}takeSnapshot(t,n,r,o,i,s,a,l,u){const f=new Map,c=new Worker(F8());c.onmessage=g=>{const p=g.data,{id:y}=p;if(f.set(y,!1),!("base64"in p))return;const{base64:S,type:b,width:E,height:w}=p;this.mutationCb({id:y,type:Hi["2D"],commands:[{property:"clearRect",args:[0,0,E,w]},{property:"drawImage",args:[{rr_type:"ImageBitmap",args:[{rr_type:"Blob",data:[{rr_type:"ArrayBuffer",base64:S}],type:b}]},0,0,E,w]}]})};const d=1e3/n;let h=0,m;const _=g=>{if(g)return[g];const p=[];return r.document.querySelectorAll("canvas").forEach(y=>{mf(y,o,i,s,!0)||p.push(y)}),p},v=g=>{if(h&&g-h{const y=this.mirror.getId(p);if(!f.get(y)&&!(!p.width||!p.height)){if(f.set(y,!0),!t&&["webgl","webgl2"].includes(p.__context)){const S=p.getContext(p.__context);nu([S,"optionalAccess",b=>b.getContextAttributes,"call",b=>b(),"optionalAccess",b=>b.preserveDrawingBuffer])===!1&&S.clear(S.COLOR_BUFFER_BIT)}createImageBitmap(p).then(S=>{c.postMessage({id:y,bitmap:S,width:p.width,height:p.height,dataURLOptions:l,maxCanvasSize:a},[S])}).catch(S=>{D0(()=>{throw S})()})}}),m=Jr(v)};return m=Jr(v),m}startPendingCanvasMutationFlusher(){Jr(()=>this.flushPendingCanvasMutations())}startRAFTimestamping(){const t=n=>{this.rafStamps.latestId=n,Jr(t)};Jr(t)}flushPendingCanvasMutations(){this.pendingCanvasMutations.forEach((t,n)=>{const r=this.mirror.getId(n);this.flushPendingCanvasMutationFor(n,r)}),Jr(()=>this.flushPendingCanvasMutations())}flushPendingCanvasMutationFor(t,n){if(this.frozen||this.locked)return;const r=this.pendingCanvasMutations.get(t);if(!r||n===-1)return;const o=r.map(s=>{const{type:a,...l}=s;return l}),{type:i}=r[0];this.mutationCb({id:n,type:i,commands:o}),this.pendingCanvasMutations.delete(t)}}const B0={low:{sampling:{canvas:1},dataURLOptions:{type:"image/webp",quality:.25}},medium:{sampling:{canvas:2},dataURLOptions:{type:"image/webp",quality:.4}},high:{sampling:{canvas:4},dataURLOptions:{type:"image/webp",quality:.5}}},j8="ReplayCanvas",Ll=1280,B8=(e={})=>{const[t,n]=e.maxCanvasSize||[],r={quality:e.quality||"medium",enableManualSnapshot:e.enableManualSnapshot,maxCanvasSize:[t?Math.min(t,Ll):Ll,n?Math.min(n,Ll):Ll]};let o;const i=new Promise(s=>o=s);return{name:j8,getOptions(){const{quality:s,enableManualSnapshot:a,maxCanvasSize:l}=r;return{enableManualSnapshot:a,recordCanvas:!0,getCanvasManager:u=>{const f=new U8({...u,enableManualSnapshot:a,maxCanvasSize:l,errorHandler:c=>{try{typeof c=="object"&&(c.__rrweb__=!0)}catch{}}});return o(f),f},...B0[s||"medium"]||B0.medium}},async snapshot(s){(await i).snapshot(s)}}},z8=B8,Nn=K,ze=Nn.document,sk=Nn.navigator,H8="Report a Bug",W8="Cancel",V8="Send Bug Report",G8="Confirm",q8="Report a Bug",K8="your.email@example.org",Y8="Email",X8="What's the bug? What did you expect?",J8="Description",Q8="Your Name",Z8="Name",ej="Thank you for your report!",tj="(required)",nj="Add a screenshot",rj="Remove screenshot",oj="widget",ij="api",sj=5e3,ak=(e,t={includeReplay:!0})=>{if(!e.message)throw new Error("Unable to submit feedback with empty message");const n=z();if(!n)throw new Error("No client setup, cannot send feedback.");const r=AT({source:ij,url:_b(),...e},t);return new Promise((o,i)=>{const s=setTimeout(()=>i("Unable to determine if Feedback was correctly sent."),5e3);n.on("afterSendEvent",(a,l)=>{if(a.event_id===r){if(clearTimeout(s),l&&typeof l.statusCode=="number"&&(l.statusCode<200||l.statusCode>=300))return l.statusCode===0?i("Unable to send Feedback. This is because of network issues, or because you are using an ad-blocker."):i("Unable to send Feedback. Invalid response from server.");o(r)}})})},au=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__;function aj(){return!(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(sk.userAgent)||!isSecureContext)}function Dl(e,t){return{...e,...t,onFormOpen:()=>{t.onFormOpen&&t.onFormOpen(),e.onFormOpen&&e.onFormOpen()},onFormClose:()=>{t.onFormClose&&t.onFormClose(),e.onFormClose&&e.onFormClose()},onSubmitSuccess:n=>{t.onSubmitSuccess&&t.onSubmitSuccess(n),e.onSubmitSuccess&&e.onSubmitSuccess(n)},onSubmitError:n=>{t.onSubmitError&&t.onSubmitError(n),e.onSubmitError&&e.onSubmitError(n)},onFormSubmitted:()=>{t.onFormSubmitted&&t.onFormSubmitted(),e.onFormSubmitted&&e.onFormSubmitted()},themeDark:{...e.themeDark,...t.themeDark},themeLight:{...e.themeLight,...t.themeLight}}}function lj(){const e=ze.createElement("style");return e.textContent=` +.widget__actor { + position: fixed; + z-index: var(--z-index); + margin: var(--page-margin); + inset: var(--actor-inset); + + display: flex; + align-items: center; + gap: 8px; + padding: 16px; + + font-family: inherit; + font-size: var(--font-size); + font-weight: 600; + line-height: 1.14em; + text-decoration: none; + + background: var(--actor-background, var(--background)); + border-radius: var(--actor-border-radius, 1.7em/50%); + border: var(--actor-border, var(--border)); + box-shadow: var(--actor-box-shadow, var(--box-shadow)); + color: var(--actor-color, var(--foreground)); + fill: var(--actor-color, var(--foreground)); + cursor: pointer; + opacity: 1; + transition: transform 0.2s ease-in-out; + transform: translate(0, 0) scale(1); +} +.widget__actor[aria-hidden="true"] { + opacity: 0; + pointer-events: none; + visibility: hidden; + transform: translate(0, 16px) scale(0.98); +} + +.widget__actor:hover { + background: var(--actor-hover-background, var(--background)); + filter: var(--interactive-filter); +} + +.widget__actor svg { + width: 1.14em; + height: 1.14em; +} + +@media (max-width: 600px) { + .widget__actor span { + display: none; + } +} +`,e}function Ut(e,t){return Object.entries(t).forEach(([n,r])=>{e.setAttributeNS(null,n,r)}),e}const Go=20,uj="http://www.w3.org/2000/svg";function cj(){const e=a=>Nn.document.createElementNS(uj,a),t=Ut(e("svg"),{width:`${Go}`,height:`${Go}`,viewBox:`0 0 ${Go} ${Go}`,fill:"var(--foreground)"}),n=Ut(e("g"),{clipPath:"url(#clip0_57_80)"}),r=Ut(e("path"),{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M15.6622 15H12.3997C12.2129 14.9959 12.031 14.9396 11.8747 14.8375L8.04965 12.2H7.49956V19.1C7.4875 19.3348 7.3888 19.5568 7.22256 19.723C7.05632 19.8892 6.83435 19.9879 6.59956 20H2.04956C1.80193 19.9968 1.56535 19.8969 1.39023 19.7218C1.21511 19.5467 1.1153 19.3101 1.11206 19.0625V12.2H0.949652C0.824431 12.2017 0.700142 12.1783 0.584123 12.1311C0.468104 12.084 0.362708 12.014 0.274155 11.9255C0.185602 11.8369 0.115689 11.7315 0.0685419 11.6155C0.0213952 11.4995 -0.00202913 11.3752 -0.00034808 11.25V3.75C-0.00900498 3.62067 0.0092504 3.49095 0.0532651 3.36904C0.0972798 3.24712 0.166097 3.13566 0.255372 3.04168C0.344646 2.94771 0.452437 2.87327 0.571937 2.82307C0.691437 2.77286 0.82005 2.74798 0.949652 2.75H8.04965L11.8747 0.1625C12.031 0.0603649 12.2129 0.00407221 12.3997 0H15.6622C15.9098 0.00323746 16.1464 0.103049 16.3215 0.278167C16.4966 0.453286 16.5964 0.689866 16.5997 0.9375V3.25269C17.3969 3.42959 18.1345 3.83026 18.7211 4.41679C19.5322 5.22788 19.9878 6.32796 19.9878 7.47502C19.9878 8.62209 19.5322 9.72217 18.7211 10.5333C18.1345 11.1198 17.3969 11.5205 16.5997 11.6974V14.0125C16.6047 14.1393 16.5842 14.2659 16.5395 14.3847C16.4948 14.5035 16.4268 14.6121 16.3394 14.7042C16.252 14.7962 16.147 14.8698 16.0307 14.9206C15.9144 14.9714 15.7891 14.9984 15.6622 15ZM1.89695 10.325H1.88715V4.625H8.33715C8.52423 4.62301 8.70666 4.56654 8.86215 4.4625L12.6872 1.875H14.7247V13.125H12.6872L8.86215 10.4875C8.70666 10.3835 8.52423 10.327 8.33715 10.325H2.20217C2.15205 10.3167 2.10102 10.3125 2.04956 10.3125C1.9981 10.3125 1.94708 10.3167 1.89695 10.325ZM2.98706 12.2V18.1625H5.66206V12.2H2.98706ZM16.5997 9.93612V5.01393C16.6536 5.02355 16.7072 5.03495 16.7605 5.04814C17.1202 5.13709 17.4556 5.30487 17.7425 5.53934C18.0293 5.77381 18.2605 6.06912 18.4192 6.40389C18.578 6.73866 18.6603 7.10452 18.6603 7.47502C18.6603 7.84552 18.578 8.21139 18.4192 8.54616C18.2605 8.88093 18.0293 9.17624 17.7425 9.41071C17.4556 9.64518 17.1202 9.81296 16.7605 9.90191C16.7072 9.91509 16.6536 9.9265 16.5997 9.93612Z"});t.appendChild(n).appendChild(r);const o=e("defs"),i=Ut(e("clipPath"),{id:"clip0_57_80"}),s=Ut(e("rect"),{width:`${Go}`,height:`${Go}`,fill:"white"});return i.appendChild(s),o.appendChild(i),t.appendChild(o).appendChild(i).appendChild(s),t}function fj({triggerLabel:e,shadow:t}){const n=ze.createElement("button");if(n.type="button",n.className="widget__actor",n.ariaHidden="false",n.ariaLabel=e,n.appendChild(cj()),e){const o=ze.createElement("span");o.appendChild(ze.createTextNode(e)),n.appendChild(o)}const r=lj();return{el:n,appendToDom(){t.appendChild(r),t.appendChild(n)},removeFromDom(){t.removeChild(n),t.removeChild(r)},show(){n.ariaHidden="false"},hide(){n.ariaHidden="true"}}}const lk="rgba(88, 74, 192, 1)",dj={foreground:"#2b2233",background:"#ffffff",accentForeground:"white",accentBackground:lk,successColor:"#268d75",errorColor:"#df3338",border:"1.5px solid rgba(41, 35, 47, 0.13)",boxShadow:"0px 4px 24px 0px rgba(43, 34, 51, 0.12)",outline:"1px auto var(--accent-background)",interactiveFilter:"brightness(95%)"},z0={foreground:"#ebe6ef",background:"#29232f",accentForeground:"white",accentBackground:lk,successColor:"#2da98c",errorColor:"#f55459",border:"1.5px solid rgba(235, 230, 239, 0.15)",boxShadow:"0px 4px 24px 0px rgba(43, 34, 51, 0.12)",outline:"1px auto var(--accent-background)",interactiveFilter:"brightness(150%)"};function H0(e){return` + --foreground: ${e.foreground}; + --background: ${e.background}; + --accent-foreground: ${e.accentForeground}; + --accent-background: ${e.accentBackground}; + --success-color: ${e.successColor}; + --error-color: ${e.errorColor}; + --border: ${e.border}; + --box-shadow: ${e.boxShadow}; + --outline: ${e.outline}; + --interactive-filter: ${e.interactiveFilter}; + `}function pj({colorScheme:e,themeDark:t,themeLight:n}){const r=ze.createElement("style");return r.textContent=` +:host { + --font-family: system-ui, 'Helvetica Neue', Arial, sans-serif; + --font-size: 14px; + --z-index: 100000; + + --page-margin: 16px; + --inset: auto 0 0 auto; + --actor-inset: var(--inset); + + font-family: var(--font-family); + font-size: var(--font-size); + + ${e!=="system"?"color-scheme: only light;":""} + + ${H0(e==="dark"?{...z0,...t}:{...dj,...n})} +} + +${e==="system"?` +@media (prefers-color-scheme: dark) { + :host { + ${H0({...z0,...t})} + } +}`:""} +} +`,r}const uk=({lazyLoadIntegration:e,getModalIntegration:t,getScreenshotIntegration:n})=>({id:o="sentry-feedback",showBranding:i=!0,autoInject:s=!0,showEmail:a=!0,showName:l=!0,enableScreenshot:u=!0,useSentryUser:f={email:"email",name:"username"},isNameRequired:c=!1,isEmailRequired:d=!1,colorScheme:h="system",themeLight:m={},themeDark:_={},addScreenshotButtonLabel:v=nj,cancelButtonLabel:g=W8,confirmButtonLabel:p=G8,emailLabel:y=Y8,emailPlaceholder:S=K8,formTitle:b=q8,isRequiredLabel:E=tj,messageLabel:w=J8,messagePlaceholder:x=X8,nameLabel:D=Z8,namePlaceholder:I=Q8,removeScreenshotButtonLabel:A=rj,submitButtonLabel:W=V8,successMessageText:ee=ej,triggerLabel:j=H8,onFormOpen:N,onFormClose:R,onSubmitSuccess:L,onSubmitError:T,onFormSubmitted:O}={})=>{const $={id:o,autoInject:s,showBranding:i,isEmailRequired:d,isNameRequired:c,showEmail:a,showName:l,enableScreenshot:u,useSentryUser:f,colorScheme:h,themeDark:_,themeLight:m,triggerLabel:j,cancelButtonLabel:g,submitButtonLabel:W,confirmButtonLabel:p,formTitle:b,emailLabel:y,emailPlaceholder:S,messageLabel:w,messagePlaceholder:x,nameLabel:D,namePlaceholder:I,successMessageText:ee,isRequiredLabel:E,addScreenshotButtonLabel:v,removeScreenshotButtonLabel:A,onFormClose:R,onFormOpen:N,onSubmitError:T,onSubmitSuccess:L,onFormSubmitted:O};let H=null,G=[];const ue=pe=>{if(!H){const he=ze.createElement("div");he.id=String(pe.id),ze.body.appendChild(he),H=he.attachShadow({mode:"open"}),H.appendChild(pj(pe))}return H},ce=async(pe,he,ie)=>{const $e=z(),Fe=$e&&$e.getIntegrationByName(pe);if(Fe)return Fe;const Rt=(he&&he()||await e(ie))();return $e&&$e.addIntegration(Rt),Rt},Me=async pe=>{const he=pe.enableScreenshot&&aj(),[ie,$e]=await Promise.all([ce("FeedbackModal",t,"feedbackModalIntegration"),he?ce("FeedbackScreenshot",n,"feedbackScreenshotIntegration"):void 0]);if(!ie)throw au&&C.error("[Feedback] Missing feedback modal integration. Try using `feedbackSyncIntegration` in your `Sentry.init`."),new Error("[Feedback] Missing feedback modal integration!");return he&&!$e&&au&&C.error("[Feedback] Missing feedback screenshot integration. Proceeding without screenshots."),ie.createDialog({options:pe,screenshotIntegration:he?$e:void 0,sendFeedback:ak,shadow:ue(pe)})},He=(pe,he={})=>{const ie=Dl($,he),$e=typeof pe=="string"?ze.querySelector(pe):typeof pe.addEventListener=="function"?pe:null;if(!$e)throw au&&C.error("[Feedback] Unable to attach to target element"),new Error("Unable to attach to target element");let Fe=null;const gt=async()=>{Fe||(Fe=await Me({...ie,onFormClose:()=>{Fe&&Fe.close(),ie.onFormClose&&ie.onFormClose()},onFormSubmitted:()=>{Fe&&Fe.removeFromDom(),ie.onFormSubmitted&&ie.onFormSubmitted()}})),Fe.appendToDom(),Fe.open()};$e.addEventListener("click",gt);const Rt=()=>{G=G.filter(Ss=>Ss!==Rt),Fe&&Fe.removeFromDom(),Fe=null,$e.removeEventListener("click",gt)};return G.push(Rt),Rt},tt=(pe={})=>{const he=ue($),ie=fj({triggerLabel:$.triggerLabel,shadow:he}),$e=Dl($,{...pe,onFormOpen(){ie.hide()},onFormClose(){ie.show()},onFormSubmitted(){ie.show()}});return He(ie.el,$e),ie};return{name:"Feedback",setupOnce(){!Kp()||!$.autoInject||tt().appendToDom()},attachTo:He,createWidget(pe={}){const he=tt(Dl($,pe));return he.appendToDom(),he},async createForm(pe={}){return Me(Dl($,pe))},remove(){H&&(H.parentElement&&H.parentElement.remove(),H=null),G.forEach(pe=>pe()),G=[]}}};function hj(){const e=z();return e&&e.getIntegrationByName("Feedback")}var gf,Se,ck,no,W0,fk,Th,Aa={},Yg=[],mj=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,Xg=Array.isArray;function kr(e,t){for(var n in t)e[n]=t[n];return e}function dk(e){var t=e.parentNode;t&&t.removeChild(e)}function V(e,t,n){var r,o,i,s={};for(i in t)i=="key"?r=t[i]:i=="ref"?o=t[i]:s[i]=t[i];if(arguments.length>2&&(s.children=arguments.length>3?gf.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(i in e.defaultProps)s[i]===void 0&&(s[i]=e.defaultProps[i]);return lu(e,s,r,o,null)}function lu(e,t,n,r,o){var i={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:o??++ck,__i:-1,__u:0};return o==null&&Se.vnode!=null&&Se.vnode(i),i}function el(e){return e.children}function uu(e,t){this.props=e,this.context=t}function Wi(e,t){if(t==null)return e.__?Wi(e.__,e.__i+1):null;for(var n;tn?(Ch(r,t,o),o.length=r.length=0,t=void 0,no.sort(Th)):t&&Se.__c&&Se.__c(t,Yg));t&&Ch(r,t,o),_c.__r=0}function hk(e,t,n,r,o,i,s,a,l,u,f){var c,d,h,m,_,v=r&&r.__k||Yg,g=t.length;for(n.__d=l,yj(n,t,v),l=n.__d,c=0;c0?lu(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):o)!=null?(o.__=e,o.__b=e.__b+1,a=_j(o,n,s=r+c,f),o.__i=a,i=null,a!==-1&&(f--,(i=n[a])&&(i.__u|=131072)),i==null||i.__v===null?(a==-1&&c--,typeof o.type!="function"&&(o.__u|=65536)):a!==s&&(a===s+1?c++:a>s?f>l-s?c+=a-s:c--:c=a(l!=null&&!(131072&l.__u)?1:0))for(;s>=0||a=0){if((l=t[s])&&!(131072&l.__u)&&o==l.key&&i===l.type)return s;s--}if(a=n.__.length&&n.__.push({__V:cu}),n.__[e]}function Ti(e){return Na=1,wj(_k,e)}function wj(e,t,n){var r=Zg(Ma++,2);if(r.t=e,!r.__c&&(r.__=[n?n(t):_k(void 0,t),function(a){var l=r.__N?r.__N[0]:r.__[0],u=r.t(l,a);l!==u&&(r.__N=[u,r.__[1]],r.__c.setState({}))}],r.__c=We,!We.u)){var o=function(a,l,u){if(!r.__c.__H)return!0;var f=r.__c.__H.__.filter(function(d){return!!d.__c});if(f.every(function(d){return!d.__N}))return!i||i.call(this,a,l,u);var c=!1;return f.forEach(function(d){if(d.__N){var h=d.__[0];d.__=d.__N,d.__N=void 0,h!==d.__[0]&&(c=!0)}}),!(!c&&r.__c.props===a)&&(!i||i.call(this,a,l,u))};We.u=!0;var i=We.shouldComponentUpdate,s=We.componentWillUpdate;We.componentWillUpdate=function(a,l,u){if(this.__e){var f=i;i=void 0,o(a,l,u),i=f}s&&s.call(this,a,l,u)},We.shouldComponentUpdate=o}return r.__N||r.__}function xh(e,t){var n=Zg(Ma++,3);!Xe.__s&&yk(n.__H,t)&&(n.__=e,n.i=t,We.__H.__h.push(n))}function Md(e){return Na=5,tl(function(){return{current:e}},[])}function tl(e,t){var n=Zg(Ma++,7);return yk(n.__H,t)?(n.__V=e(),n.i=t,n.__h=e,n.__V):n.__}function An(e,t){return Na=8,tl(function(){return e},t)}function bj(){for(var e;e=gk.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(fu),e.__H.__h.forEach(Ih),e.__H.__h=[]}catch(t){e.__H.__h=[],Xe.__e(t,e.__v)}}Xe.__b=function(e){We=null,X0&&X0(e)},Xe.__=function(e,t){t.__k&&t.__k.__m&&(e.__m=t.__k.__m),tS&&tS(e,t)},Xe.__r=function(e){J0&&J0(e),Ma=0;var t=(We=e.__c).__H;t&&(Ad===We?(t.__h=[],We.__h=[],t.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=cu,n.__N=n.i=void 0})):(t.__h.forEach(fu),t.__h.forEach(Ih),t.__h=[],Ma=0)),Ad=We},Xe.diffed=function(e){Q0&&Q0(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(gk.push(t)!==1&&Y0===Xe.requestAnimationFrame||((Y0=Xe.requestAnimationFrame)||Tj)(bj)),t.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==cu&&(n.__=n.__V),n.i=void 0,n.__V=cu})),Ad=We=null},Xe.__c=function(e,t){t.some(function(n){try{n.__h.forEach(fu),n.__h=n.__h.filter(function(r){return!r.__||Ih(r)})}catch(r){t.some(function(o){o.__h&&(o.__h=[])}),t=[],Xe.__e(r,n.__v)}}),Z0&&Z0(e,t)},Xe.unmount=function(e){eS&&eS(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach(function(r){try{fu(r)}catch(o){t=o}}),n.__H=void 0,t&&Xe.__e(t,n.__v))};var nS=typeof requestAnimationFrame=="function";function Tj(e){var t,n=function(){clearTimeout(r),nS&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,100);nS&&(t=requestAnimationFrame(n))}function fu(e){var t=We,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),We=t}function Ih(e){var t=We;e.__c=e.__(),We=t}function yk(e,t){return!e||e.length!==t.length||t.some(function(n,r){return n!==e[r]})}function _k(e,t){return typeof t=="function"?t(e):t}const Cj="http://www.w3.org/2000/svg";function kj(){const e=r=>ze.createElementNS(Cj,r),t=Ut(e("svg"),{width:"32",height:"30",viewBox:"0 0 72 66",fill:"inherit"}),n=Ut(e("path"),{transform:"translate(11, 11)",d:"M29,2.26a4.67,4.67,0,0,0-8,0L14.42,13.53A32.21,32.21,0,0,1,32.17,40.19H27.55A27.68,27.68,0,0,0,12.09,17.47L6,28a15.92,15.92,0,0,1,9.23,12.17H4.62A.76.76,0,0,1,4,39.06l2.94-5a10.74,10.74,0,0,0-3.36-1.9l-2.91,5a4.54,4.54,0,0,0,1.69,6.24A4.66,4.66,0,0,0,4.62,44H19.15a19.4,19.4,0,0,0-8-17.31l2.31-4A23.87,23.87,0,0,1,23.76,44H36.07a35.88,35.88,0,0,0-16.41-31.8l4.67-8a.77.77,0,0,1,1.05-.27c.53.29,20.29,34.77,20.66,35.17a.76.76,0,0,1-.68,1.13H40.6q.09,1.91,0,3.81h4.78A4.59,4.59,0,0,0,50,39.43a4.49,4.49,0,0,0-.62-2.28Z"});return t.appendChild(n),t}const rS="/home/runner/work/sentry-javascript/sentry-javascript/packages/feedback/src/modal/components/DialogHeader.tsx";function xj({options:e}){const t=tl(()=>({__html:kj().outerHTML}),[]);return V("h2",{class:"dialog__header",__self:this,__source:{fileName:rS,lineNumber:16}},e.formTitle,e.showBranding?V("a",{class:"brand-link",target:"_blank",href:"https://sentry.io/welcome/",title:"Powered by Sentry",rel:"noopener noreferrer",dangerouslySetInnerHTML:t,__self:this,__source:{fileName:rS,lineNumber:19}}):null)}function Ij(e,t){const n=[];return t.isNameRequired&&!e.name&&n.push(t.nameLabel),t.isEmailRequired&&!e.email&&n.push(t.emailLabel),e.message||n.push(t.messageLabel),n}const Oe="/home/runner/work/sentry-javascript/sentry-javascript/packages/feedback/src/modal/components/Form.tsx";function Nd(e,t){const n=e.get(t);return typeof n=="string"?n.trim():""}function Rj({options:e,defaultEmail:t,defaultName:n,onFormClose:r,onSubmit:o,onSubmitSuccess:i,onSubmitError:s,showEmail:a,showName:l,screenshotInput:u}){const{addScreenshotButtonLabel:f,removeScreenshotButtonLabel:c,cancelButtonLabel:d,emailLabel:h,emailPlaceholder:m,isEmailRequired:_,isNameRequired:v,messageLabel:g,messagePlaceholder:p,nameLabel:y,namePlaceholder:S,submitButtonLabel:b,isRequiredLabel:E}=e,[w,x]=Ti(null),[D,I]=Ti(!1),A=u&&u.input,[W,ee]=Ti(null),j=An(L=>{ee(L),I(!1)},[]),N=An(L=>{const T=Ij(L,{emailLabel:h,isEmailRequired:_,isNameRequired:v,messageLabel:g,nameLabel:y});return T.length>0?x(`Please enter in the following required fields: ${T.join(", ")}`):x(null),T.length===0},[h,_,v,g,y]),R=An(async L=>{try{if(L.preventDefault(),!(L.target instanceof HTMLFormElement))return;const T=new FormData(L.target),O=await(u&&D?u.value():void 0),$={name:Nd(T,"name"),email:Nd(T,"email"),message:Nd(T,"message"),attachments:O?[O]:void 0};if(!N($))return;try{await o({name:$.name,email:$.email,message:$.message,source:oj},{attachments:$.attachments}),i($)}catch(H){au&&C.error(H),x("There was a problem submitting feedback, please wait and try again."),s(H)}}catch{}},[u&&D,i,s]);return V("form",{class:"form",onSubmit:R,__self:this,__source:{fileName:Oe,lineNumber:142}},A&&D?V(A,{onError:j,__self:this,__source:{fileName:Oe,lineNumber:144}}):null,V("div",{class:"form__right","data-sentry-feedback":!0,__self:this,__source:{fileName:Oe,lineNumber:147}},V("div",{class:"form__top",__self:this,__source:{fileName:Oe,lineNumber:148}},w?V("div",{class:"form__error-container",__self:this,__source:{fileName:Oe,lineNumber:149}},w):null,l?V("label",{for:"name",class:"form__label",__self:this,__source:{fileName:Oe,lineNumber:152}},V(Pd,{label:y,isRequiredLabel:E,isRequired:v,__self:this,__source:{fileName:Oe,lineNumber:153}}),V("input",{class:"form__input",defaultValue:n,id:"name",name:"name",placeholder:S,required:v,type:"text",__self:this,__source:{fileName:Oe,lineNumber:154}})):V("input",{"aria-hidden":!0,value:n,name:"name",type:"hidden",__self:this,__source:{fileName:Oe,lineNumber:165}}),a?V("label",{for:"email",class:"form__label",__self:this,__source:{fileName:Oe,lineNumber:169}},V(Pd,{label:h,isRequiredLabel:E,isRequired:_,__self:this,__source:{fileName:Oe,lineNumber:170}}),V("input",{class:"form__input",defaultValue:t,id:"email",name:"email",placeholder:m,required:_,type:"email",__self:this,__source:{fileName:Oe,lineNumber:171}})):V("input",{"aria-hidden":!0,value:t,name:"email",type:"hidden",__self:this,__source:{fileName:Oe,lineNumber:182}}),V("label",{for:"message",class:"form__label",__self:this,__source:{fileName:Oe,lineNumber:185}},V(Pd,{label:g,isRequiredLabel:E,isRequired:!0,__self:this,__source:{fileName:Oe,lineNumber:186}}),V("textarea",{autoFocus:!0,class:"form__input form__input--textarea",id:"message",name:"message",placeholder:p,required:!0,rows:5,__self:this,__source:{fileName:Oe,lineNumber:187}})),A?V("label",{for:"screenshot",class:"form__label",__self:this,__source:{fileName:Oe,lineNumber:199}},V("button",{class:"btn btn--default",type:"button",onClick:()=>{ee(null),I(L=>!L)},__self:this,__source:{fileName:Oe,lineNumber:200}},D?c:f),W?V("div",{class:"form__error-container",__self:this,__source:{fileName:Oe,lineNumber:210}},W.message):null):null),V("div",{class:"btn-group",__self:this,__source:{fileName:Oe,lineNumber:214}},V("button",{class:"btn btn--primary",type:"submit",__self:this,__source:{fileName:Oe,lineNumber:215}},b),V("button",{class:"btn btn--default",type:"button",onClick:r,__self:this,__source:{fileName:Oe,lineNumber:218}},d))))}function Pd({label:e,isRequired:t,isRequiredLabel:n}){return V("span",{class:"form__label__text",__self:this,__source:{fileName:Oe,lineNumber:233}},e,t&&V("span",{class:"form__label__text--required",__self:this,__source:{fileName:Oe,lineNumber:235}},n))}const Ul=16,oS=17,$j="http://www.w3.org/2000/svg";function Oj(){const e=l=>Nn.document.createElementNS($j,l),t=Ut(e("svg"),{width:`${Ul}`,height:`${oS}`,viewBox:`0 0 ${Ul} ${oS}`,fill:"inherit"}),n=Ut(e("g"),{clipPath:"url(#clip0_57_156)"}),r=Ut(e("path"),{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M3.55544 15.1518C4.87103 16.0308 6.41775 16.5 8 16.5C10.1217 16.5 12.1566 15.6571 13.6569 14.1569C15.1571 12.6566 16 10.6217 16 8.5C16 6.91775 15.5308 5.37103 14.6518 4.05544C13.7727 2.73985 12.5233 1.71447 11.0615 1.10897C9.59966 0.503466 7.99113 0.34504 6.43928 0.653721C4.88743 0.962403 3.46197 1.72433 2.34315 2.84315C1.22433 3.96197 0.462403 5.38743 0.153721 6.93928C-0.15496 8.49113 0.00346625 10.0997 0.608967 11.5615C1.21447 13.0233 2.23985 14.2727 3.55544 15.1518ZM4.40546 3.1204C5.46945 2.40946 6.72036 2.03 8 2.03C9.71595 2.03 11.3616 2.71166 12.575 3.92502C13.7883 5.13838 14.47 6.78405 14.47 8.5C14.47 9.77965 14.0905 11.0306 13.3796 12.0945C12.6687 13.1585 11.6582 13.9878 10.476 14.4775C9.29373 14.9672 7.99283 15.0953 6.73777 14.8457C5.48271 14.596 4.32987 13.9798 3.42502 13.075C2.52018 12.1701 1.90397 11.0173 1.65432 9.76224C1.40468 8.50718 1.5328 7.20628 2.0225 6.02404C2.5122 4.8418 3.34148 3.83133 4.40546 3.1204Z"}),o=Ut(e("path"),{d:"M6.68775 12.4297C6.78586 12.4745 6.89218 12.4984 7 12.5C7.11275 12.4955 7.22315 12.4664 7.32337 12.4145C7.4236 12.3627 7.51121 12.2894 7.58 12.2L12 5.63999C12.0848 5.47724 12.1071 5.28902 12.0625 5.11098C12.0178 4.93294 11.9095 4.77744 11.7579 4.67392C11.6064 4.57041 11.4221 4.52608 11.24 4.54931C11.0579 4.57254 10.8907 4.66173 10.77 4.79999L6.88 10.57L5.13 8.56999C5.06508 8.49566 4.98613 8.43488 4.89768 8.39111C4.80922 8.34735 4.713 8.32148 4.61453 8.31498C4.51605 8.30847 4.41727 8.32147 4.32382 8.35322C4.23038 8.38497 4.14413 8.43484 4.07 8.49999C3.92511 8.63217 3.83692 8.81523 3.82387 9.01092C3.81083 9.2066 3.87393 9.39976 4 9.54999L6.43 12.24C6.50187 12.3204 6.58964 12.385 6.68775 12.4297Z"});t.appendChild(n).append(o,r);const i=e("defs"),s=Ut(e("clipPath"),{id:"clip0_57_156"}),a=Ut(e("rect"),{width:`${Ul}`,height:`${Ul}`,fill:"white",transform:"translate(0 0.5)"});return s.appendChild(a),i.appendChild(s),t.appendChild(i).appendChild(s).appendChild(a),t}const Un="/home/runner/work/sentry-javascript/sentry-javascript/packages/feedback/src/modal/components/Dialog.tsx";function Aj({open:e,onFormSubmitted:t,...n}){const r=n.options,o=tl(()=>({__html:Oj().outerHTML}),[]),[i,s]=Ti(null),a=An(()=>{i&&(clearTimeout(i),s(null)),t()},[i]),l=An(u=>{n.onSubmitSuccess(u),s(setTimeout(()=>{t(),s(null)},sj))},[t]);return V(el,{__self:this,__source:{fileName:Un,lineNumber:47}},i?V("div",{class:"success__position",onClick:a,__self:this,__source:{fileName:Un,lineNumber:49}},V("div",{class:"success__content",__self:this,__source:{fileName:Un,lineNumber:50}},r.successMessageText,V("span",{class:"success__icon",dangerouslySetInnerHTML:o,__self:this,__source:{fileName:Un,lineNumber:52}}))):V("dialog",{class:"dialog",onClick:r.onFormClose,open:e,__self:this,__source:{fileName:Un,lineNumber:56}},V("div",{class:"dialog__position",__self:this,__source:{fileName:Un,lineNumber:57}},V("div",{class:"dialog__content",onClick:u=>{u.stopPropagation()},__self:this,__source:{fileName:Un,lineNumber:58}},V(xj,{options:r,__self:this,__source:{fileName:Un,lineNumber:65}}),V(Rj,{...n,onSubmitSuccess:l,__self:this,__source:{fileName:Un,lineNumber:66}})))))}const Mj=` +.dialog { + position: fixed; + z-index: var(--z-index); + margin: 0; + inset: 0; + + display: flex; + align-items: center; + justify-content: center; + padding: 0; + height: 100vh; + width: 100vw; + + color: var(--dialog-color, var(--foreground)); + fill: var(--dialog-color, var(--foreground)); + line-height: 1.75em; + + background-color: rgba(0, 0, 0, 0.05); + border: none; + inset: 0; + opacity: 1; + transition: opacity 0.2s ease-in-out; +} + +.dialog__position { + position: fixed; + z-index: var(--z-index); + inset: var(--dialog-inset); + padding: var(--page-margin); + display: flex; + max-height: calc(100vh - (2 * var(--page-margin))); +} +@media (max-width: 600px) { + .dialog__position { + inset: var(--page-margin); + padding: 0; + } +} + +.dialog__position:has(.editor) { + inset: var(--page-margin); + padding: 0; +} + +.dialog:not([open]) { + opacity: 0; + pointer-events: none; + visibility: hidden; +} +.dialog:not([open]) .dialog__content { + transform: translate(0, -16px) scale(0.98); +} + +.dialog__content { + display: flex; + flex-direction: column; + gap: 16px; + padding: var(--dialog-padding, 24px); + max-width: 100%; + width: 100%; + max-height: 100%; + overflow: auto; + + background: var(--dialog-background, var(--background)); + border-radius: var(--dialog-border-radius, 20px); + border: var(--dialog-border, var(--border)); + box-shadow: var(--dialog-box-shadow, var(--box-shadow)); + transform: translate(0, 0) scale(1); + transition: transform 0.2s ease-in-out; +} +`,Nj=` +.dialog__header { + display: flex; + align-items: center; + justify-content: space-between; + font-weight: var(--dialog-header-weight, 600); + margin: 0; +} + +.brand-link { + display: inline-flex; +} +.brand-link:focus-visible { + outline: var(--outline); +} +`,Pj=` +.form { + display: flex; + overflow: auto; + flex-direction: row; + gap: 16px; + flex: 1 0; +} + +.form__right { + width: var(--form-width, 272px); + display: flex; + overflow: auto; + flex-direction: column; + justify-content: space-between; + gap: 20px; + flex: 1 0 auto; +} + +@media (max-width: 600px) { + .form__right { + width: auto; + } +} + +.form__top { + display: flex; + flex-direction: column; + gap: 8px; +} + +.form__error-container { + color: var(--error-foreground); + fill: var(--error-foreground); +} + +.form__label { + display: flex; + flex-direction: column; + gap: 4px; + margin: 0px; +} + +.form__label__text { + display: flex; + gap: 4px; + align-items: center; +} + +.form__label__text--required { + font-size: 0.85em; +} + +.form__input { + font-family: inherit; + line-height: inherit; + background: transparent; + box-sizing: border-box; + border: var(--input-border, var(--border)); + border-radius: var(--input-border-radius, 6px); + color: var(--input-color, inherit); + fill: var(--input-color, inherit); + font-size: var(--input-font-size, inherit); + font-weight: var(--input-font-weight, 500); + padding: 6px 12px; +} + +.form__input::placeholder { + opacity: 0.65; + color: var(--input-placeholder-color, inherit); + filter: var(--interactive-filter); +} + +.form__input:focus-visible { + outline: var(--input-focus-outline, var(--outline)); +} + +.form__input--textarea { + font-family: inherit; + resize: vertical; +} + +.error { + color: var(--error-color); + fill: var(--error-color); +} +`,Lj=` +.btn-group { + display: grid; + gap: 8px; +} + +.btn { + line-height: inherit; + border: var(--button-border, var(--border)); + border-radius: var(--button-border-radius, 6px); + cursor: pointer; + font-family: inherit; + font-size: var(--button-font-size, inherit); + font-weight: var(--button-font-weight, 600); + padding: var(--button-padding, 6px 16px); +} +.btn[disabled] { + opacity: 0.6; + pointer-events: none; +} + +.btn--primary { + color: var(--button-primary-color, var(--accent-foreground)); + fill: var(--button-primary-color, var(--accent-foreground)); + background: var(--button-primary-background, var(--accent-background)); + border: var(--button-primary-border, var(--border)); + border-radius: var(--button-primary-border-radius, 6px); + font-weight: var(--button-primary-font-weight, 500); +} +.btn--primary:hover { + color: var(--button-primary-hover-color, var(--accent-foreground)); + fill: var(--button-primary-hover-color, var(--accent-foreground)); + background: var(--button-primary-hover-background, var(--accent-background)); + filter: var(--interactive-filter); +} +.btn--primary:focus-visible { + background: var(--button-primary-hover-background, var(--accent-background)); + filter: var(--interactive-filter); + outline: var(--button-primary-focus-outline, var(--outline)); +} + +.btn--default { + color: var(--button-color, var(--foreground)); + fill: var(--button-color, var(--foreground)); + background: var(--button-background, var(--background)); + border: var(--button-border, var(--border)); + border-radius: var(--button-border-radius, 6px); + font-weight: var(--button-font-weight, 500); +} +.btn--default:hover { + color: var(--button-color, var(--foreground)); + fill: var(--button-color, var(--foreground)); + background: var(--button-hover-background, var(--background)); + filter: var(--interactive-filter); +} +.btn--default:focus-visible { + background: var(--button-hover-background, var(--background)); + filter: var(--interactive-filter); + outline: var(--button-focus-outline, var(--outline)); +} +`,Dj=` +.success__position { + position: fixed; + inset: var(--dialog-inset); + padding: var(--page-margin); + z-index: var(--z-index); +} +.success__content { + background: var(--success-background, var(--background)); + border: var(--success-border, var(--border)); + border-radius: var(--success-border-radius, 1.7em/50%); + box-shadow: var(--success-box-shadow, var(--box-shadow)); + font-weight: var(--success-font-weight, 600); + color: var(--success-color); + fill: var(--success-color); + padding: 12px 24px; + line-height: 1.75em; + + display: grid; + align-items: center; + grid-auto-flow: column; + gap: 6px; + cursor: default; +} + +.success__icon { + display: flex; +} +`;function Fj(){const e=ze.createElement("style");return e.textContent=` +:host { + --dialog-inset: var(--inset); +} + +${Mj} +${Nj} +${Pj} +${Lj} +${Dj} +`,e}const Uj="/home/runner/work/sentry-javascript/sentry-javascript/packages/feedback/src/modal/integration.tsx";function jj(){const e=re().getUser(),t=Ke().getUser(),n=Jc().getUser();return e&&Object.keys(e).length?e:t&&Object.keys(t).length?t:n}const Bj=()=>({name:"FeedbackModal",setupOnce(){},createDialog:({options:e,screenshotIntegration:t,sendFeedback:n,shadow:r})=>{const o=r,i=e.useSentryUser,s=jj(),a=ze.createElement("div"),l=Fj();let u="";const f={get el(){return a},appendToDom(){!o.contains(l)&&!o.contains(a)&&(o.appendChild(l),o.appendChild(a))},removeFromDom(){o.removeChild(a),o.removeChild(l)},open(){d(!0),e.onFormOpen&&e.onFormOpen(),u=ze.body.style.overflow,ze.body.style.overflow="hidden"},close(){d(!1),ze.body.style.overflow=u}},c=t&&t.createInput(V,f,e),d=h=>{Ej(V(Aj,{options:e,screenshotInput:c,showName:e.showName||e.isNameRequired,showEmail:e.showEmail||e.isEmailRequired,defaultName:i&&s&&s[i.name]||"",defaultEmail:i&&s&&s[i.email]||"",onFormClose:()=>{d(!1),e.onFormClose&&e.onFormClose()},onSubmit:n,onSubmitSuccess:m=>{d(!1),e.onSubmitSuccess&&e.onSubmitSuccess(m)},onSubmitError:m=>{e.onSubmitError&&e.onSubmitError(m)},onFormSubmitted:()=>{e.onFormSubmitted&&e.onFormSubmitted()},open:h,__self:void 0,__source:{fileName:Uj,lineNumber:72}}),a)};return f}});function zj(){const e=ze.createElement("style"),t="#1A141F",n="#302735";return e.textContent=` +.editor { + padding: 10px; + padding-top: 65px; + padding-bottom: 65px; + flex-grow: 1; + + background-color: ${t}; + background-image: repeating-linear-gradient( + -145deg, + transparent, + transparent 8px, + ${t} 8px, + ${t} 11px + ), + repeating-linear-gradient( + -45deg, + transparent, + transparent 15px, + ${n} 15px, + ${n} 16px + ); +} + +.editor__canvas-container { + width: 100%; + height: 100%; + position: relative; +} + +.editor__canvas-container canvas { + width: 100%; + height: 100%; + object-fit: contain; +} + +.editor__crop-btn-group { + padding: 8px; + gap: 8px; + border-radius: var(--menu-border-radius, 6px); + background: var(--button-primary-background, var(--background)); + width: 175px; + position: absolute; +} + +.editor__crop-corner { + width: 30px; + height: 30px; + position: absolute; + background: none; + border: 3px solid #ffffff; +} + +.editor__crop-corner--top-left { + cursor: nwse-resize; + border-right: none; + border-bottom: none; +} +.editor__crop-corner--top-right { + cursor: nesw-resize; + border-left: none; + border-bottom: none; +} +.editor__crop-corner--bottom-left { + cursor: nesw-resize; + border-right: none; + border-top: none; +} +.editor__crop-corner--bottom-right { + cursor: nwse-resize; + border-left: none; + border-top: none; +} +`,e}const Hj=({onBeforeScreenshot:e,onScreenshot:t,onAfterScreenshot:n,onError:r})=>{xh(()=>{(async()=>{e();const i=await sk.mediaDevices.getDisplayMedia({video:{width:Nn.innerWidth*Nn.devicePixelRatio,height:Nn.innerHeight*Nn.devicePixelRatio},audio:!1,monitorTypeSurfaces:"exclude",preferCurrentTab:!0,selfBrowserSurface:"include",surfaceSwitching:"exclude"}),s=ze.createElement("video");await new Promise((a,l)=>{s.srcObject=i,s.onloadedmetadata=()=>{t(s),i.getTracks().forEach(u=>u.stop()),a()},s.play().catch(l)}),n()})().catch(r)},[])},Dt="/home/runner/work/sentry-javascript/sentry-javascript/packages/feedback/src/screenshot/components/ScreenshotEditor.tsx",Bs=30,zn=3,cr=Bs+zn,Cn=Nn.devicePixelRatio,Ms=e=>({x:Math.min(e.startX,e.endX),y:Math.min(e.startY,e.endY),width:Math.abs(e.startX-e.endX),height:Math.abs(e.startY-e.endY)}),Ld=e=>{const t=e.clientHeight,n=e.clientWidth,r=e.width/e.height;let o=t*r,i=t;o>n&&(o=n,i=n/r);const s=(n-o)/2,a=(t-i)/2;return{startX:s,startY:a,endX:o+s,endY:i+a}};function Wj({imageBuffer:e,dialog:t,options:n}){return function({onError:o}){const i=tl(()=>({__html:zj().innerText}),[]),s=Md(null),a=Md(null),l=Md(null),[u,f]=Ti({startX:0,startY:0,endX:0,endY:0}),[c,d]=Ti(!1);xh(()=>{Nn.addEventListener("resize",h,!1)},[]);function h(){const g=l.current,p=Ms(Ld(e));if(g){g.width=p.width*Cn,g.height=p.height*Cn,g.style.width=`${p.width}px`,g.style.height=`${p.height}px`;const S=g.getContext("2d");S&&S.scale(Cn,Cn)}const y=a.current;y&&(y.style.width=`${p.width}px`,y.style.height=`${p.height}px`,y.style.left=`${p.x}px`,y.style.top=`${p.y}px`),f({startX:0,startY:0,endX:p.width,endY:p.height})}xh(()=>{const g=l.current;if(!g)return;const p=g.getContext("2d");if(!p)return;const y=Ms(Ld(e)),S=Ms(u);p.clearRect(0,0,y.width,y.height),p.fillStyle="rgba(0, 0, 0, 0.5)",p.fillRect(0,0,y.width,y.height),p.clearRect(S.x,S.y,S.width,S.height),p.strokeStyle="#ffffff",p.lineWidth=3,p.strokeRect(S.x+1,S.y+1,S.width-2,S.height-2),p.strokeStyle="#000000",p.lineWidth=1,p.strokeRect(S.x+3,S.y+3,S.width-6,S.height-6)},[u]);function m(g,p){d(!1);const y=_(p),S=()=>{ze.removeEventListener("mousemove",y),ze.removeEventListener("mouseup",S),d(!0)};ze.addEventListener("mouseup",S),ze.addEventListener("mousemove",y)}const _=An(g=>function(p){if(!l.current)return;const y=l.current,S=y.getBoundingClientRect(),b=p.clientX-S.x,E=p.clientY-S.y;switch(g){case"top-left":f(w=>({...w,startX:Math.min(Math.max(0,b),w.endX-cr),startY:Math.min(Math.max(0,E),w.endY-cr)}));break;case"top-right":f(w=>({...w,endX:Math.max(Math.min(b,y.width/Cn),w.startX+cr),startY:Math.min(Math.max(0,E),w.endY-cr)}));break;case"bottom-left":f(w=>({...w,startX:Math.min(Math.max(0,b),w.endX-cr),endY:Math.max(Math.min(E,y.height/Cn),w.startY+cr)}));break;case"bottom-right":f(w=>({...w,endX:Math.max(Math.min(b,y.width/Cn),w.startX+cr),endY:Math.max(Math.min(E,y.height/Cn),w.startY+cr)}));break}},[]);function v(){const g=ze.createElement("canvas"),p=Ms(Ld(e)),y=Ms(u);g.width=y.width,g.height=y.height;const S=g.getContext("2d");S&&e&&S.drawImage(e,y.x/p.width*e.width,y.y/p.height*e.height,y.width/p.width*e.width,y.height/p.height*e.height,0,0,y.width,y.height);const b=e.getContext("2d");b&&(b.clearRect(0,0,e.width,e.height),e.width=g.width,e.height=g.height,b.drawImage(g,0,0),h())}return Hj({onBeforeScreenshot:An(()=>{t.el.style.display="none"},[]),onScreenshot:An(g=>{const p=e.getContext("2d");if(!p)throw new Error("Could not get canvas context");e.width=g.videoWidth,e.height=g.videoHeight,p.drawImage(g,0,0)},[e]),onAfterScreenshot:An(()=>{t.el.style.display="block";const g=s.current;g&&g.appendChild(e),h()},[]),onError:An(g=>{t.el.style.display="block",o(g)},[])}),V("div",{class:"editor",__self:this,__source:{fileName:Dt,lineNumber:249}},V("style",{dangerouslySetInnerHTML:i,__self:this,__source:{fileName:Dt,lineNumber:250}}),V("div",{class:"editor__canvas-container",ref:s,__self:this,__source:{fileName:Dt,lineNumber:251}},V("div",{class:"editor__crop-container",style:{position:"absolute"},ref:a,__self:this,__source:{fileName:Dt,lineNumber:252}},V("canvas",{style:{position:"absolute"},ref:l,__self:this,__source:{fileName:Dt,lineNumber:253}}),V(jl,{left:u.startX-zn,top:u.startY-zn,onGrabButton:m,corner:"top-left",__self:this,__source:{fileName:Dt,lineNumber:254}}),V(jl,{left:u.endX-Bs+zn,top:u.startY-zn,onGrabButton:m,corner:"top-right",__self:this,__source:{fileName:Dt,lineNumber:260}}),V(jl,{left:u.startX-zn,top:u.endY-Bs+zn,onGrabButton:m,corner:"bottom-left",__self:this,__source:{fileName:Dt,lineNumber:266}}),V(jl,{left:u.endX-Bs+zn,top:u.endY-Bs+zn,onGrabButton:m,corner:"bottom-right",__self:this,__source:{fileName:Dt,lineNumber:272}}),V("div",{style:{left:Math.max(0,u.endX-191),top:Math.max(0,u.endY+8),display:c?"flex":"none"},class:"editor__crop-btn-group",__self:this,__source:{fileName:Dt,lineNumber:278}},V("button",{onClick:g=>{g.preventDefault(),l.current&&f({startX:0,startY:0,endX:l.current.width/Cn,endY:l.current.height/Cn}),d(!1)},class:"btn btn--default",__self:this,__source:{fileName:Dt,lineNumber:286}},n.cancelButtonLabel),V("button",{onClick:g=>{g.preventDefault(),v(),d(!1)},class:"btn btn--primary",__self:this,__source:{fileName:Dt,lineNumber:303}},n.confirmButtonLabel)))))}}function jl({top:e,left:t,corner:n,onGrabButton:r}){return V("button",{class:`editor__crop-corner editor__crop-corner--${n} `,style:{top:e,left:t},onMouseDown:o=>{o.preventDefault(),r(o,n)},onClick:o=>{o.preventDefault()},__self:this,__source:{fileName:Dt,lineNumber:333}})}const Vj=()=>({name:"FeedbackScreenshot",setupOnce(){},createInput:(e,t,n)=>{const r=ze.createElement("canvas");return{input:Wj({h:e,imageBuffer:r,dialog:t,options:n}),value:async()=>{const o=await new Promise(i=>{r.toBlob(i,"image/png")});if(o)return{data:new Uint8Array(await o.arrayBuffer()),filename:"screenshot.png",contentType:"application/png"}}}}}),Gj=uk({lazyLoadIntegration:Ag}),iS=uk({lazyLoadIntegration:Ag,getModalIntegration:()=>Bj,getScreenshotIntegration:()=>Vj});function qj(e,t=1,n){qa.increment(Ka,e,t,n)}function Kj(e,t,n){qa.distribution(Ka,e,t,n)}function Yj(e,t,n){qa.set(Ka,e,t,n)}function Xj(e,t,n){qa.gauge(Ka,e,t,n)}function Jj(e,t,n="second",r){return qa.timing(Ka,e,t,n,r)}const Qj={increment:qj,distribution:Kj,set:Yj,gauge:Xj,timing:Jj},vc={traceFetch:!0,traceXHR:!0,enableHTTPTimings:!0};function vk(e){const{traceFetch:t,traceXHR:n,shouldCreateSpanForRequest:r,enableHTTPTimings:o,tracePropagationTargets:i}={traceFetch:vc.traceFetch,traceXHR:vc.traceXHR,...e},s=typeof r=="function"?r:u=>!0,a=u=>nB(u,i),l={};t&&sg(u=>{const f=y3(u,s,a,l);if(f){const c=Sk(u.fetchData.url),d=c?ho(c).host:void 0;f.setAttributes({"http.url":c,"server.address":d})}o&&f&&sS(f)}),n&&$g(u=>{const f=rB(u,s,a,l);o&&f&&sS(f)})}function Zj(e){return e.entryType==="resource"&&"initiatorType"in e&&typeof e.nextHopProtocol=="string"&&(e.initiatorType==="fetch"||e.initiatorType==="xmlhttprequest")}function sS(e){const{url:t}=J(e).data||{};if(!t||typeof t!="string")return;const n=lf("resource",({entries:r})=>{r.forEach(o=>{Zj(o)&&o.name.endsWith(t)&&(tB(o).forEach(s=>e.setAttribute(...s)),setTimeout(n))})})}function eB(e){let t="unknown",n="unknown",r="";for(const o of e){if(o==="/"){[t,n]=e.split("/");break}if(!isNaN(Number(o))){t=r==="h"?"http":r,n=e.split(r)[1];break}r+=o}return r===e&&(t=r),{name:t,version:n}}function kn(e=0){return((kt||performance.timeOrigin)+e)/1e3}function tB(e){const{name:t,version:n}=eB(e.nextHopProtocol),r=[];return r.push(["network.protocol.version",n],["network.protocol.name",t]),kt?[...r,["http.request.redirect_start",kn(e.redirectStart)],["http.request.fetch_start",kn(e.fetchStart)],["http.request.domain_lookup_start",kn(e.domainLookupStart)],["http.request.domain_lookup_end",kn(e.domainLookupEnd)],["http.request.connect_start",kn(e.connectStart)],["http.request.secure_connection_start",kn(e.secureConnectionStart)],["http.request.connection_end",kn(e.connectEnd)],["http.request.request_start",kn(e.requestStart)],["http.request.response_start",kn(e.responseStart)],["http.request.response_end",kn(e.responseEnd)]]:r}function nB(e,t){const n=U.location&&U.location.href;if(n){let r,o;try{r=new URL(e,n),o=new URL(n).origin}catch{return!1}const i=r.origin===o;return t?Lr(r.toString(),t)||i&&Lr(r.pathname,t):i}else{const r=!!e.match(/^\/(?!\/)/);return t?Lr(e,t):r}}function rB(e,t,n,r){const o=e.xhr,i=o&&o[Cr];if(!o||o.__sentry_own_request__||!i)return;const s=Hr()&&t(i.url);if(e.endTimestamp&&s){const d=o.__sentry_xhr_span_id__;if(!d)return;const h=r[d];h&&i.status_code!==void 0&&(mg(h,i.status_code),h.end(),delete r[d]);return}const a=Sk(i.url),l=a?ho(a).host:void 0,u=!!at(),f=s&&u?Ht({name:`${i.method} ${i.url}`,attributes:{type:"xhr","http.method":i.method,"http.url":a,url:i.url,"server.address":l,[ge]:"auto.http.browser",[Pt]:"http.client"}}):new Kr;o.__sentry_xhr_span_id__=f.spanContext().spanId,r[o.__sentry_xhr_span_id__]=f;const c=z();return o.setRequestHeader&&n(i.url)&&c&&oB(o,c,Hr()&&u?f:void 0),f}function oB(e,t,n){const r=re(),o=Ke(),{traceId:i,spanId:s,sampled:a,dsc:l}={...o.getPropagationContext(),...r.getPropagationContext()},u=n&&Hr()?gg(n):lg(i,s,a),f=ag(l||(n?Yr(n):Zc(i,t)));iB(e,u,f)}function iB(e,t,n){try{e.setRequestHeader("sentry-trace",t),n&&e.setRequestHeader(Jp,n)}catch{}}function Sk(e){try{return new URL(e,U.location.origin).href}catch{return}}function sB(){U&&U.document?U.document.addEventListener("visibilitychange",()=>{const e=at();if(!e)return;const t=qe(e);if(U.document.hidden&&t){const n="cancelled",{op:r,status:o}=J(t);Z&&C.log(`[Tracing] Transaction: ${n} -> since tab moved to the background, op: ${r}`),o||t.setStatus({code:Ye,message:n}),t.setAttribute("sentry.cancellation_reason","document.hidden"),t.end()}}):Z&&C.warn("[Tracing] Could not set up background tab detection due to lack of global document")}const aB="BrowserTracing",lB={...ru,instrumentNavigation:!0,instrumentPageLoad:!0,markBackgroundSpan:!0,enableLongTask:!0,enableInp:!0,_experiments:{},...vc},ds=(e={})=>{yg();const{enableInp:t,enableLongTask:n,_experiments:{enableInteractions:r},beforeStartSpan:o,idleTimeout:i,finalTimeout:s,childSpanTimeout:a,markBackgroundSpan:l,traceFetch:u,traceXHR:f,shouldCreateSpanForRequest:c,enableHTTPTimings:d,instrumentPageLoad:h,instrumentNavigation:m}={...lB,...e},_=d4();t&&P4(),n&&p4(),r&&h4();const v={name:void 0,source:void 0};function g(p,y){const S=y.op==="pageload",b=o?o(y):y,E=b.attributes||{};y.name!==b.name&&(E[Ge]="custom",b.attributes=E),v.name=b.name,v.source=E[Ge];const w=nT(b,{idleTimeout:i,finalTimeout:s,childSpanTimeout:a,disableAutoFinish:S,beforeSpanEnd:D=>{_(),v4(D)}});function x(){["interactive","complete"].includes(U.document.readyState)&&p.emit("idleSpanEnableAutoFinish",w)}return S&&U.document&&(U.document.addEventListener("readystatechange",()=>{x()}),x()),w}return{name:aB,afterAllSetup(p){let y,S=U.location&&U.location.href;p.on("startNavigationSpan",b=>{z()===p&&(y&&(Z&&C.log(`[Tracing] Finishing current root span with op: ${J(y).op}`),y.end()),y=g(p,{op:"navigation",...b}))}),p.on("startPageLoadSpan",(b,E={})=>{if(z()!==p)return;y&&(Z&&C.log(`[Tracing] Finishing current root span with op: ${J(y).op}`),y.end());const w=E.sentryTrace||aS("sentry-trace"),x=E.baggage||aS("baggage"),D=Fb(w,x);re().setPropagationContext(D),y=g(p,{op:"pageload",...b})}),p.on("spanEnd",b=>{const E=J(b).op;if(b!==qe(b)||E!=="navigation"&&E!=="pageload")return;const w=re(),x=w.getPropagationContext();w.setPropagationContext({...x,sampled:x.sampled!==void 0?x.sampled:Uo(b),dsc:x.dsc||Yr(b)})}),U.location&&(h&&ps(p,{name:U.location.pathname,startTime:kt?kt/1e3:void 0,attributes:{[Ge]:"url",[ge]:"auto.pageload.browser"}}),m&&uf(({to:b,from:E})=>{if(E===void 0&&S&&S.indexOf(b)!==-1){S=void 0;return}E!==b&&(S=void 0,hs(p,{name:U.location.pathname,attributes:{[Ge]:"url",[ge]:"auto.navigation.browser"}}))})),l&&sB(),r&&uB(i,s,a,v),vk({traceFetch:u,traceXHR:f,tracePropagationTargets:p.getOptions().tracePropagationTargets,shouldCreateSpanForRequest:c,enableHTTPTimings:d})}}};function ps(e,t,n){e.emit("startPageLoadSpan",t,n),re().setTransactionName(t.name);const r=at();return(r&&J(r).op)==="pageload"?r:void 0}function hs(e,t){Ke().setPropagationContext(Ta()),re().setPropagationContext(Ta()),e.emit("startNavigationSpan",t),re().setTransactionName(t.name);const n=at();return(n&&J(n).op)==="navigation"?n:void 0}function aS(e){const t=_N(`meta[name=${e}]`);return t?t.getAttribute("content"):void 0}function uB(e,t,n,r){let o;const i=()=>{const s="ui.action.click",a=at(),l=a&&qe(a);if(l){const u=J(l).op;if(["navigation","pageload"].includes(u)){Z&&C.warn(`[Tracing] Did not create ${s} span because a pageload or navigation span is in progress.`);return}}if(o&&(o.setAttribute(nh,"interactionInterrupted"),o.end(),o=void 0),!r.name){Z&&C.warn(`[Tracing] Did not create ${s} transaction because _latestRouteName is missing.`);return}o=nT({name:r.name,op:s,attributes:{[Ge]:r.source||"url"}},{idleTimeout:e,finalTimeout:t,childSpanTimeout:n})};U.document&&addEventListener("click",i,{once:!1,capture:!0})}function Vi(e){return new Promise((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)})}function cB(e,t){const n=indexedDB.open(e);n.onupgradeneeded=()=>n.result.createObjectStore(t);const r=Vi(n);return o=>r.then(i=>o(i.transaction(t,"readwrite").objectStore(t)))}function ey(e){return Vi(e.getAllKeys())}function fB(e,t,n){return e(r=>ey(r).then(o=>{if(!(o.length>=n))return r.put(t,Math.max(...o,0)+1),Vi(r.transaction)}))}function dB(e,t,n){return e(r=>ey(r).then(o=>{if(!(o.length>=n))return r.put(t,Math.min(...o,0)-1),Vi(r.transaction)}))}function pB(e){return e(t=>ey(t).then(n=>{if(n.length!==0)return Vi(t.get(n[0])).then(r=>(t.delete(n[0]),Vi(t.transaction).then(()=>r)))}))}function hB(e){let t;function n(){return t==null&&(t=cB(e.dbName||"sentry-offline",e.storeName||"queue")),t}return{push:async r=>{try{const o=await Qp(r);await fB(n(),o,e.maxQueueSize||30)}catch{}},unshift:async r=>{try{const o=await Qp(r);await dB(n(),o,e.maxQueueSize||30)}catch{}},shift:async()=>{try{const r=await pB(n());if(r)return cP(r)}catch{}}}}function mB(e){return t=>e({...t,createStore:hB})}function gB(e=Og){return mB(zL(e))}const lS=1e6,du=String(0),yB="main";let Ek="",wk="",bk="",Rh=U.navigator&&U.navigator.userAgent||"",Tk="";const _B=U.navigator&&U.navigator.language||U.navigator&&U.navigator.languages&&U.navigator.languages[0]||"";function vB(e){return typeof e=="object"&&e!==null&&"getHighEntropyValues"in e}const uS=U.navigator&&U.navigator.userAgentData;vB(uS)&&uS.getHighEntropyValues(["architecture","model","platform","platformVersion","fullVersionList"]).then(e=>{if(Ek=e.platform||"",bk=e.architecture||"",Tk=e.model||"",wk=e.platformVersion||"",e.fullVersionList&&e.fullVersionList.length>0){const t=e.fullVersionList[e.fullVersionList.length-1];Rh=`${t.brand} ${t.version}`}}).catch(e=>{});function SB(e){return!("thread_metadata"in e)}function EB(e){return SB(e)?TB(e):e}function wB(e){const t=e&&e.contexts&&e.contexts.trace&&e.contexts.trace.trace_id;return typeof t=="string"&&t.length!==32&&Z&&C.log(`[Profiling] Invalid traceId: ${t} on profiled event`),typeof t!="string"?"":t}function bB(e,t,n,r){if(r.type!=="transaction")throw new TypeError("Profiling events may only be attached to transactions, this should never occur.");if(n==null)throw new TypeError(`Cannot construct profiling event envelope without a valid profile. Got ${n} instead.`);const o=wB(r),i=EB(n),s=t||(typeof r.start_timestamp=="number"?r.start_timestamp*1e3:Re()*1e3),a=typeof r.timestamp=="number"?r.timestamp*1e3:Re()*1e3;return{event_id:e,timestamp:new Date(s).toISOString(),platform:"javascript",version:"1",release:r.release||"",environment:r.environment||Qc,runtime:{name:"javascript",version:U.navigator.userAgent},os:{name:Ek,version:wk,build_number:Rh},device:{locale:_B,model:Tk,manufacturer:Rh,architecture:bk,is_emulator:!1},debug_meta:{images:xB(n.resources)},profile:i,transactions:[{name:r.transaction||"",id:r.event_id||Ce(),trace_id:o,active_thread_id:du,relative_start_ns:"0",relative_end_ns:((a-s)*1e6).toFixed(0)}]}}function Ck(e){return J(e).op==="pageload"}function TB(e){let t,n=0;const r={samples:[],stacks:[],frames:[],thread_metadata:{[du]:{name:yB}}};if(!e.samples.length)return r;const o=e.samples[0].timestamp,i=typeof performance.timeOrigin=="number"?performance.timeOrigin:kt||0,s=i-(kt||i);for(let a=0;a{if(r==="transaction")for(let o=1;o{let c;const d=i.get(f);d?c=d:(c=o(f),i.set(f,c));for(let h=c.length-1;h>=0;h--){const m=c[h],_=m&&m.filename;if(m&&_){u[_]=t[f];break}}return u},{}),l=[];for(const u of e)u&&a[u]&&l.push({type:"sourcemap",code_file:u,debug_id:a[u]});return l}function IB(e){return typeof e!="number"&&typeof e!="boolean"||typeof e=="number"&&isNaN(e)?(Z&&C.warn(`[Profiling] Invalid sample rate. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(e)} of type ${JSON.stringify(typeof e)}.`),!1):e===!0||e===!1?!0:e<0||e>1?(Z&&C.warn(`[Profiling] Invalid sample rate. Sample rate must be between 0 and 1. Got ${e}.`),!1):!0}function RB(e){return e.samples.length<2?(Z&&C.log("[Profiling] Discarding profile because it contains less than 2 samples"),!1):e.frames.length?!0:(Z&&C.log("[Profiling] Discarding profile because it contains no frames"),!1)}let kk=!1;const xk=3e4;function $B(e){return typeof e=="function"}function OB(){const e=U.Profiler;if(!$B(e)){Z&&C.log("[Profiling] Profiling is not supported by this browser, Profiler interface missing on window object.");return}const t=10,n=Math.floor(xk/t);try{return new e({sampleInterval:t,maxBufferSize:n})}catch{Z&&(C.log("[Profiling] Failed to initialize the Profiling constructor, this is likely due to a missing 'Document-Policy': 'js-profiling' header."),C.log("[Profiling] Disabling profiling for current user session.")),kk=!0}}function fS(e){if(kk)return Z&&C.log("[Profiling] Profiling has been disabled for the duration of the current user session."),!1;if(!e.isRecording())return Z&&C.log("[Profiling] Discarding profile because transaction was not sampled."),!1;const t=z(),n=t&&t.getOptions();if(!n)return Z&&C.log("[Profiling] Profiling disabled, no options found."),!1;const r=n.profilesSampleRate;return IB(r)?r?(r===!0?!0:Math.random()30){const n=ao.keys().next().value;ao.delete(n)}}function dS(e){let t;Ck(e)&&(t=Re()*1e3);const n=OB();if(!n)return;Z&&C.log(`[Profiling] started profiling span: ${J(e).description}`);const r=Ce();re().setContext("profile",{profile_id:r,start_timestamp:t});async function o(){if(e&&n)return n.stop().then(l=>{if(i&&(U.clearTimeout(i),i=void 0),Z&&C.log(`[Profiling] stopped profiling of span: ${J(e).description}`),!l){Z&&C.log(`[Profiling] profiler returned null profile for: ${J(e).description}`,"this may indicate an overlapping span or a call to stopProfiling with a profile title that was never started");return}PB(r,l)}).catch(l=>{Z&&C.log("[Profiling] error while stopping profiler:",l)})}let i=U.setTimeout(()=>{Z&&C.log("[Profiling] max profile duration elapsed, stopping profiling for:",J(e).description),o()},xk);const s=e.end.bind(e);function a(){return e?(o().then(()=>{s()},()=>{s()}),e):s()}e.end=a}const LB="BrowserProfiling",DB=()=>({name:LB,setup(e){const t=at(),n=t&&qe(t);n&&Ck(n)&&fS(n)&&dS(n),e.on("spanStart",r=>{r===qe(r)&&fS(r)&&dS(r)}),e.on("beforeEnvelope",r=>{if(!MB())return;const o=kB(r);if(!o.length)return;const i=[];for(const s of o){const a=s&&s.contexts,l=a&&a.profile&&a.profile.profile_id,u=a&&a.profile&&a.profile.start_timestamp;if(typeof l!="string"){Z&&C.log("[Profiling] cannot find profile for a span without a profile context");continue}if(!l){Z&&C.log("[Profiling] cannot find profile for a span without a profile context");continue}a&&a.profile&&delete a.profile;const f=NB(l);if(!f){Z&&C.log(`[Profiling] Could not retrieve profile for span: ${l}`);continue}const c=AB(l,u,f,s);c&&i.push(c)}CB(r,i)})}}),FB=DB;function Ik(e){const t={...e};ET(t,"react"),OF(t)}function UB(e){const t=e.match(/^([^.]+)/);return t!==null&&parseInt(t[0])>=17}function jB(e,t){const n=new WeakSet;function r(o,i){if(!n.has(o)){if(o.cause)return n.add(o),r(o.cause,i);o.cause=i}}r(e,t)}function Rk(e,{componentStack:t},n){if(UB(P.version)&&Pr(e)&&t){const r=new Error(e.message);r.name=`React ErrorBoundary ${e.name}`,r.stack=t,jB(e,r)}return as(e,{...n,captureContext:{contexts:{react:{componentStack:t}}}})}function BB(e){return(t,n)=>{const r=Rk(t,n);e&&e(t,n,r)}}var $k={exports:{}},ye={};/** @license React v16.13.1 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var dt=typeof Symbol=="function"&&Symbol.for,ty=dt?Symbol.for("react.element"):60103,ny=dt?Symbol.for("react.portal"):60106,yf=dt?Symbol.for("react.fragment"):60107,_f=dt?Symbol.for("react.strict_mode"):60108,vf=dt?Symbol.for("react.profiler"):60114,Sf=dt?Symbol.for("react.provider"):60109,Ef=dt?Symbol.for("react.context"):60110,ry=dt?Symbol.for("react.async_mode"):60111,wf=dt?Symbol.for("react.concurrent_mode"):60111,bf=dt?Symbol.for("react.forward_ref"):60112,Tf=dt?Symbol.for("react.suspense"):60113,zB=dt?Symbol.for("react.suspense_list"):60120,Cf=dt?Symbol.for("react.memo"):60115,kf=dt?Symbol.for("react.lazy"):60116,HB=dt?Symbol.for("react.block"):60121,WB=dt?Symbol.for("react.fundamental"):60117,VB=dt?Symbol.for("react.responder"):60118,GB=dt?Symbol.for("react.scope"):60119;function Kt(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case ty:switch(e=e.type,e){case ry:case wf:case yf:case vf:case _f:case Tf:return e;default:switch(e=e&&e.$$typeof,e){case Ef:case bf:case kf:case Cf:case Sf:return e;default:return t}}case ny:return t}}}function Ok(e){return Kt(e)===wf}ye.AsyncMode=ry;ye.ConcurrentMode=wf;ye.ContextConsumer=Ef;ye.ContextProvider=Sf;ye.Element=ty;ye.ForwardRef=bf;ye.Fragment=yf;ye.Lazy=kf;ye.Memo=Cf;ye.Portal=ny;ye.Profiler=vf;ye.StrictMode=_f;ye.Suspense=Tf;ye.isAsyncMode=function(e){return Ok(e)||Kt(e)===ry};ye.isConcurrentMode=Ok;ye.isContextConsumer=function(e){return Kt(e)===Ef};ye.isContextProvider=function(e){return Kt(e)===Sf};ye.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===ty};ye.isForwardRef=function(e){return Kt(e)===bf};ye.isFragment=function(e){return Kt(e)===yf};ye.isLazy=function(e){return Kt(e)===kf};ye.isMemo=function(e){return Kt(e)===Cf};ye.isPortal=function(e){return Kt(e)===ny};ye.isProfiler=function(e){return Kt(e)===vf};ye.isStrictMode=function(e){return Kt(e)===_f};ye.isSuspense=function(e){return Kt(e)===Tf};ye.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===yf||e===wf||e===vf||e===_f||e===Tf||e===zB||typeof e=="object"&&e!==null&&(e.$$typeof===kf||e.$$typeof===Cf||e.$$typeof===Sf||e.$$typeof===Ef||e.$$typeof===bf||e.$$typeof===WB||e.$$typeof===VB||e.$$typeof===GB||e.$$typeof===HB)};ye.typeOf=Kt;$k.exports=ye;var qB=$k.exports,oy=qB,KB={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},YB={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},XB={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},Ak={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},iy={};iy[oy.ForwardRef]=XB;iy[oy.Memo]=Ak;function pS(e){return oy.isMemo(e)?Ak:iy[e.$$typeof]||KB}var JB=Object.defineProperty,QB=Object.getOwnPropertyNames,hS=Object.getOwnPropertySymbols,ZB=Object.getOwnPropertyDescriptor,ez=Object.getPrototypeOf,mS=Object.prototype;function Mk(e,t,n){if(typeof t!="string"){if(mS){var r=ez(t);r&&r!==mS&&Mk(e,r,n)}var o=QB(t);hS&&(o=o.concat(hS(t)));for(var i=pS(e),s=pS(t),a=0;a`,onlyIfParent:!0,op:Pk,attributes:{[ge]:"auto.ui.react.profiler","ui.component_name":n}}))}componentDidMount(){this._mountSpan&&this._mountSpan.end()}shouldComponentUpdate({updateProps:t,includeUpdates:n=!0}){if(n&&this._mountSpan&&t!==this.props.updateProps){const r=Object.keys(t).filter(o=>t[o]!==this.props.updateProps[o]);if(r.length>0){const o=Re();this._updateSpan=Ca(this._mountSpan,()=>Ht({name:`<${this.props.name}>`,onlyIfParent:!0,op:nz,startTime:o,attributes:{[ge]:"auto.ui.react.profiler","ui.component_name":this.props.name,"ui.react.changed_props":r}}))}}return!0}componentDidUpdate(){this._updateSpan&&(this._updateSpan.end(),this._updateSpan=void 0)}componentWillUnmount(){const t=Re(),{name:n,includeRender:r=!0}=this.props;if(this._mountSpan&&r){const o=J(this._mountSpan).timestamp;Ca(this._mountSpan,()=>{const i=Ht({onlyIfParent:!0,name:`<${n}>`,op:Nk,startTime:o,attributes:{[ge]:"auto.ui.react.profiler","ui.component_name":n}});i&&i.end(t)})}}render(){return this.props.children}}sy.__initStatic();function oz(e,t){const n=t&&t.name||e.displayName||e.name||rz,r=o=>q.jsx(sy,{...t,name:n,updateProps:o,children:q.jsx(e,{...o})});return r.displayName=`profiler(${n})`,xf(r,e),r}function iz(e,t={disabled:!1,hasRenderSpan:!0}){const[n]=P.useState(()=>{if(!(t&&t.disabled))return Ht({name:`<${e}>`,onlyIfParent:!0,op:Pk,attributes:{[ge]:"auto.ui.react.profiler","ui.component_name":e}})});P.useEffect(()=>(n&&n.end(),()=>{if(n&&t.hasRenderSpan){const r=J(n).timestamp,o=Re(),i=Ht({name:`<${e}>`,onlyIfParent:!0,op:Nk,startTime:r,attributes:{[ge]:"auto.ui.react.profiler","ui.component_name":e}});i&&i.end(o)}}),[])}const If=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,sz="unknown",gS={componentStack:null,error:null,eventId:null};class Rf extends P.Component{constructor(t){super(t),Rf.prototype.__init.call(this),this.state=gS,this._openFallbackReportDialog=!0;const n=z();n&&t.showDialog&&(this._openFallbackReportDialog=!1,n.on("afterSendEvent",r=>{!r.type&&this._lastEventId&&r.event_id===this._lastEventId&&hh({...t.dialogOptions,eventId:this._lastEventId})}))}componentDidCatch(t,n){const{componentStack:r}=n,o=r??void 0,{beforeCapture:i,onError:s,showDialog:a,dialogOptions:l}=this.props;wn(u=>{i&&i(u,t,o);const f=Rk(t,n,{mechanism:{handled:!!this.props.fallback}});s&&s(t,o,f),a&&(this._lastEventId=f,this._openFallbackReportDialog&&hh({...l,eventId:f})),this.setState({error:t,componentStack:r,eventId:f})})}componentDidMount(){const{onMount:t}=this.props;t&&t()}componentWillUnmount(){const{error:t,componentStack:n,eventId:r}=this.state,{onUnmount:o}=this.props;o&&o(t,n,r)}__init(){this.resetErrorBoundary=()=>{const{onReset:t}=this.props,{error:n,componentStack:r,eventId:o}=this.state;t&&t(n,r,o),this.setState(gS)}}render(){const{fallback:t,children:n}=this.props,r=this.state;if(r.error){let o;return typeof t=="function"?o=P.createElement(t,{error:r.error,componentStack:r.componentStack,resetError:this.resetErrorBoundary,eventId:r.eventId}):o=t,P.isValidElement(o)?o:(t&&If&&C.warn("fallback did not produce a valid ReactElement"),null)}return typeof n=="function"?n():n}}function az(e,t){const n=e.displayName||e.name||sz,r=o=>q.jsx(Rf,{...t,children:q.jsx(e,{...o})});return r.displayName=`errorBoundary(${n})`,xf(r,e),r}const lz="redux.action",uz="info",cz={attachReduxState:!0,actionTransformer:e=>e,stateTransformer:e=>e||null};function fz(e){const t={...cz,...e};return n=>(r,o)=>(t.attachReduxState&&Jc().addEventProcessor((s,a)=>{try{s.type===void 0&&s.contexts.state.state.type==="redux"&&(a.attachments=[...a.attachments||[],{filename:"redux_state.json",data:JSON.stringify(s.contexts.state.state.value)}])}catch{}return s}),n((s,a)=>{const l=r(s,a),u=re(),f=t.actionTransformer(a);typeof f<"u"&&f!==null&&Sn({category:lz,data:f,type:uz});const c=t.stateTransformer(l);if(typeof c<"u"&&c!==null){const h=z(),m=h&&h.getOptions(),_=m&&m.normalizeDepth||3,v={state:{type:"redux",value:c}};Vt(v,"__sentry_override_normalization_depth__",3+_),u.setContext("state",v)}else u.setContext("state",null);const{configureScopeWithState:d}=t;return typeof d=="function"&&d(u,l),l},o))}function dz(e){const t=ds({...e,instrumentPageLoad:!1,instrumentNavigation:!1}),{history:n,routes:r,match:o,instrumentPageLoad:i=!0,instrumentNavigation:s=!0}=e;return{...t,afterAllSetup(a){t.afterAllSetup(a),i&&U&&U.location&&yS(r,U.location,o,(l,u="url")=>{ps(a,{name:l,attributes:{[Pt]:"pageload",[ge]:"auto.pageload.react.reactrouter_v3",[Ge]:u}})}),s&&n.listen&&n.listen(l=>{(l.action==="PUSH"||l.action==="POP")&&yS(r,l,o,(u,f="url")=>{hs(a,{name:u,attributes:{[Pt]:"navigation",[ge]:"auto.navigation.react.reactrouter_v3",[Ge]:f}})})})}}}function yS(e,t,n,r){let o=t.pathname;n({location:t,routes:e},(i,s,a)=>{if(i||!a)return r(o);const l=pz(a.routes||[]);return l.length===0||l==="/*"?r(o):(o=l,r(o,"route"))})}function pz(e){if(!Array.isArray(e)||e.length===0)return"";const t=e.filter(r=>!!r.path);let n=-1;for(let r=t.length-1;r>=0;r--){const o=t[r];if(o.path&&o.path.startsWith("/")){n=r;break}}return t.slice(n).filter(({path:r})=>!!r).map(({path:r})=>r).join("")}function hz(e,t={}){const n=e,r=ds({...t,instrumentNavigation:!1,instrumentPageLoad:!1}),{instrumentPageLoad:o=!0,instrumentNavigation:i=!0}=t;return{...r,afterAllSetup(s){r.afterAllSetup(s);const a=U.location;if(o&&a){const l=n.matchRoutes(a.pathname,a.search,{preload:!1,throwOnError:!1}),u=l[l.length-1];ps(s,{name:u?u.routeId:a.pathname,attributes:{[Pt]:"pageload",[ge]:"auto.pageload.react.tanstack_router",[Ge]:u?"route":"url",..._S(u)}})}i&&n.subscribe("onBeforeNavigate",l=>{if(l.toLocation.state===l.fromLocation.state)return;const u=n.matchRoutes(l.toLocation.pathname,l.toLocation.search,{preload:!1,throwOnError:!1}),f=u[u.length-1],c=U.location,d=hs(s,{name:f?f.routeId:c.pathname,attributes:{[Pt]:"navigation",[ge]:"auto.navigation.react.tanstack_router",[Ge]:f?"route":"url"}}),h=n.subscribe("onResolved",m=>{if(h(),d){const _=n.matchRoutes(m.toLocation.pathname,m.toLocation.search,{preload:!1,throwOnError:!1}),v=_[_.length-1];v&&(d.updateName(v.routeId),d.setAttribute(Ge,"route"),d.setAttributes(_S(v)))}})})}}}function _S(e){if(!e)return{};const t={};for(const n of Object.keys(e.params))t[`url.path.params.${n}`]=e.params[n];return t}function mz(e){const t=ds({...e,instrumentPageLoad:!1,instrumentNavigation:!1}),{history:n,routes:r,matchPath:o,instrumentPageLoad:i=!0,instrumentNavigation:s=!0}=e;return{...t,afterAllSetup(a){t.afterAllSetup(a),Lk(a,i,s,n,"reactrouter_v4",r,o)}}}function gz(e){const t=ds({...e,instrumentPageLoad:!1,instrumentNavigation:!1}),{history:n,routes:r,matchPath:o,instrumentPageLoad:i=!0,instrumentNavigation:s=!0}=e;return{...t,afterAllSetup(a){t.afterAllSetup(a),Lk(a,i,s,n,"reactrouter_v5",r,o)}}}function Lk(e,t,n,r,o,i=[],s){function a(){if(r&&r.location)return r.location.pathname;if(U&&U.location)return U.location.pathname}function l(u){if(i.length===0||!s)return[u,"url"];const f=Dk(i,u,s);for(let c=0;c{if(f&&(f==="PUSH"||f==="POP")){const[c,d]=l(u.pathname);hs(e,{name:c,attributes:{[Pt]:"navigation",[ge]:`auto.navigation.react.${o}`,[Ge]:d}})}})}function Dk(e,t,n,r=[]){return e.some(o=>{const i=o.path?n(t,o):r.length?r[r.length-1].match:yz(t);return i&&(r.push({route:o,match:i}),o.routes&&Dk(o.routes,t,n,r)),!!i}),r}function yz(e){return{path:"/",url:"/",params:{},isExact:e==="/"}}function _z(e){const t=e.displayName||e.name,n=r=>{if(r&&r.computedMatch&&r.computedMatch.isExact){const o=r.computedMatch.path,i=vz();re().setTransactionName(o),i&&(i.updateName(o),i.setAttribute(Ge,"route"))}return q.jsx(e,{...r})};return n.displayName=`sentryRoute(${t})`,xf(n,e),n}function vz(){const e=at(),t=e&&qe(e);if(!t)return;const n=J(t).op;return n==="navigation"||n==="pageload"?t:void 0}let yo,_o,vo,pu,Ro,Xo=!1;const Fk=new WeakSet;function Sz(e){const t=ds({...e,instrumentPageLoad:!1,instrumentNavigation:!1}),{useEffect:n,useLocation:r,useNavigationType:o,createRoutesFromChildren:i,matchRoutes:s,stripBasename:a,instrumentPageLoad:l=!0,instrumentNavigation:u=!0}=e;return{...t,setup(){yo=n,_o=r,vo=o,Ro=s,pu=i,Xo=a||!1},afterAllSetup(f){t.afterAllSetup(f);const c=U&&U.location&&U.location.pathname;l&&c&&ps(f,{name:c,attributes:{[Ge]:"url",[Pt]:"pageload",[ge]:"auto.pageload.react.reactrouter_v6"}}),u&&Fk.add(f)}}}function Dd(e,t){if(!t||t==="/"||!e.toLowerCase().startsWith(t.toLowerCase()))return e;const n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&r!=="/"?e:e.slice(n)||"/"}function Uk(e,t,n,r=""){if(!e||e.length===0)return[Xo?Dd(t.pathname,r):t.pathname,"url"];let o="";if(n)for(let i=0;i{const o=_o(),i=vo();return yo(()=>{const s=pu(r.children);t?(ay(uy(),o,s),t=!1):ly(o,s,i)},[o,i]),q.jsx(e,{...r})};return xf(n,e),n}function Ez(e){if(!yo||!_o||!vo||!Ro)return If&&C.warn("reactRouterV6Instrumentation was unable to wrap `useRoutes` because of one or more missing parameters."),e;let t=!0;const n=r=>{const{routes:o,locationArg:i}=r,s=e(o,i),a=_o(),l=vo(),u=typeof i=="string"||i&&i.pathname?i:a;return yo(()=>{const f=typeof u=="string"?{pathname:u}:u;t?(ay(uy(),f,o),t=!1):ly(f,o,l)},[l,u]),s};return(r,o)=>q.jsx(n,{routes:r,locationArg:o})}function wz(e){return!yo||!_o||!vo||!Ro?(If&&C.warn("reactRouterV6Instrumentation was unable to wrap the `createRouter` function because of one or more missing parameters."),e):function(t,n){const r=e(t,n),o=n&&n.basename,i=uy();return r.state.historyAction==="POP"&&i&&ay(i,r.state.location,t,void 0,o),r.subscribe(s=>{const a=s.location;(s.historyAction==="PUSH"||s.historyAction==="POP")&&ly(a,t,s.historyAction,void 0,o)}),r}}function uy(){const e=at(),t=e?qe(e):void 0;if(!t)return;const n=J(t).op;return n==="navigation"||n==="pageload"?t:void 0}const vS=Object.freeze(Object.defineProperty({__proto__:null,BrowserClient:DT,ErrorBoundary:Rf,Profiler:sy,SDK_VERSION:Jn,SEMANTIC_ATTRIBUTE_SENTRY_OP:Pt,SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN:ge,SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE:dg,SEMANTIC_ATTRIBUTE_SENTRY_SOURCE:Ge,Scope:ir,WINDOW:U,addBreadcrumb:Sn,addEventProcessor:cT,addIntegration:NL,addTracingExtensions:jP,breadcrumbsIntegration:tC,browserApiErrorsIntegration:nC,browserProfilingIntegration:FB,browserTracingIntegration:ds,captureConsoleIntegration:vD,captureEvent:ls,captureException:as,captureFeedback:AT,captureMessage:rc,captureSession:sh,captureUserFeedback:PF,chromeStackLineParser:XT,close:CL,contextLinesIntegration:o5,continueTrace:eL,createReduxEnhancer:fz,createTransport:_T,createUserFeedbackEnvelope:LT,debugIntegration:bD,dedupeIntegration:CT,defaultRequestInstrumentationOptions:vc,defaultStackLineParsers:QT,defaultStackParser:ZT,endSession:ka,eventFromException:NT,eventFromMessage:PT,exceptionFromError:nf,extraErrorDataIntegration:OD,feedbackAsyncIntegration:Gj,feedbackIntegration:iS,feedbackSyncIntegration:iS,flush:TL,forceLoad:AF,functionToStringIntegration:wT,geckoStackLineParser:JT,getActiveSpan:at,getClient:z,getCurrentHub:w3,getCurrentScope:re,getDefaultIntegrations:aC,getFeedback:hj,getGlobalScope:Jc,getIsolationScope:Ke,getReplay:x8,getRootSpan:qe,getSpanDescendants:Qs,getSpanStatusFromHttpCode:Vb,globalHandlersIntegration:rC,httpClientIntegration:WF,httpContextIntegration:iC,inboundFiltersIntegration:bT,init:Ik,instrumentOutgoingRequests:vk,isInitialized:kL,lastEventId:uT,lazyLoadIntegration:Ag,linkedErrorsIntegration:sC,makeBrowserOfflineTransport:gB,makeFetchTransport:Og,makeMultiplexedTransport:VL,metrics:Qj,moduleMetadataIntegration:gD,onLoad:MF,opera10StackLineParser:Z4,opera11StackLineParser:nF,parameterize:KL,reactErrorHandler:BB,reactRouterV3BrowserTracingIntegration:dz,reactRouterV4BrowserTracingIntegration:mz,reactRouterV5BrowserTracingIntegration:gz,reactRouterV6BrowserTracingIntegration:Sz,registerSpanErrorInstrumentation:yg,replayCanvasIntegration:z8,replayIntegration:C8,reportingObserverIntegration:BF,rewriteFramesIntegration:PD,sendFeedback:ak,sessionTimingIntegration:UD,setContext:bg,setCurrentClient:yT,setExtra:iT,setExtras:oT,setHttpStatus:mg,setMeasurement:Zb,setTag:aT,setTags:sT,setUser:lT,showReportDialog:hh,spanToBaggageHeader:HP,spanToJSON:J,spanToTraceHeader:gg,startBrowserTracingNavigationSpan:hs,startBrowserTracingPageLoadSpan:ps,startInactiveSpan:Ht,startNewTrace:tL,startSession:oc,startSpan:ZP,startSpanManual:tT,tanstackRouterBrowserTracingIntegration:hz,useProfiler:iz,winjsStackLineParser:X4,withActiveSpan:Ca,withErrorBoundary:az,withIsolationScope:RP,withProfiler:oz,withScope:wn,withSentryReactRouterV6Routing:jk,withSentryRouting:_z,wrapCreateBrowserRouter:wz,wrapUseRoutes:Ez,zodErrorsIntegration:qD},Symbol.toStringTag,{value:"Module"}));function $h(e){if(!vS){console.warn("sentry was not available");return}try{e(vS)}catch(t){console.error("Error calling Sentry:",t)}}function bz({dsn:e,release:t,environment:n,...r}){e&&Ik({dsn:e,release:t,environment:n,maxBreadcrumbs:50,sampleRate:1,integrations:[new(void 0)({routingInstrumentation:(void 0)(_e.useEffect,rs,g2,Ku,Vw)}),new(void 0)],...r})}const dr=window.whdbDynamicEnv||{BASE_URL:"/app/",MODE:"production",DEV:!1,PROD:!0,SSR:!1};let zs=dr.VITE_API_ROOT;zs==="/"?zs="":zs||(zs="http://localhost:18001");const hi={apiHost:zs,chaos:dr.VITE_CHAOS||!1,debug:dr.VITE_DEBUG||!1,environment:dr.NODE_ENV||"development",releaseCommit:dr.VITE_RELEASE_COMMIT||"000000",sentryDsn:dr.VITE_SENTRY_DSN||"",sentryTunnel:dr.VITE_SENTRY_TUNNEL||"",styleguide:dr.VITE_STYLEGUIDE||!1};bz({dsn:hi.sentryDsn,debug:hi.debug,application:"webhookdb-web",release:`webhookdb-web@${hi.releaseCommit}`,tunnel:hi.sentryTunnel});class Gi{constructor(t,n){const{tags:r,context:o}=n||{};this.name=t,this._tags=r||{},this._context=o||{}}tags(t){return new Gi(this.name,{tags:{...this._tags,...t},context:this._context})}context(t){return new Gi(this.name,{tags:this._tags,context:{...this._context,...t}})}debug(t,n){console.debug(...this._buildConsoleMsg(t,n))}info(t,n){console.log(...this._buildConsoleMsg(t,n))}error(t,n){console.error(...this._buildConsoleMsg(t,n)),this._withSentry(function(r,o){const i={...n,...o};r.captureMessage(t,i)})}exception(t,n,r){this._withSentry(function(o,i){o.captureException(n,i)}),console.error(...this._buildConsoleMsg(t,r))}_buildConsoleMsg(t,n){n=n||{};const r=[`[${this.name}]`,t];Object.entries(this._tags).forEach(([i,s])=>r.push(`${i}=${SS(s)}`));const o={...this._context,...n};return Object.entries(o).forEach(([i,s])=>r.push(`${i}=${SS(s)}`)),r}_withSentry(t){$h(n=>{t(n,{tags:{logger:this.name,...this._tags},extra:this._context})})}}function SS(e){return typeof e=="string"?e:JSON.stringify(e)}window.CiroLogger=Gi;function Tz(e){return e}var cy=Tz;const Bk=Lt(cy);var Cz=Gc;function kz(){this.__data__=new Cz,this.size=0}var xz=kz;function Iz(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}var Rz=Iz;function $z(e){return this.__data__.get(e)}var Oz=$z;function Az(e){return this.__data__.has(e)}var Mz=Az,Nz=Gc,Pz=qm,Lz=Km,Dz=200;function Fz(e,t){var n=this.__data__;if(n instanceof Nz){var r=n.__data__;if(!Pz||r.length-1&&e%1==0&&e-1&&e%1==0&&e<=EH}var hy=wH,bH=Ji,TH=hy,CH=qr,kH="[object Arguments]",xH="[object Array]",IH="[object Boolean]",RH="[object Date]",$H="[object Error]",OH="[object Function]",AH="[object Map]",MH="[object Number]",NH="[object Object]",PH="[object RegExp]",LH="[object Set]",DH="[object String]",FH="[object WeakMap]",UH="[object ArrayBuffer]",jH="[object DataView]",BH="[object Float32Array]",zH="[object Float64Array]",HH="[object Int8Array]",WH="[object Int16Array]",VH="[object Int32Array]",GH="[object Uint8Array]",qH="[object Uint8ClampedArray]",KH="[object Uint16Array]",YH="[object Uint32Array]",xe={};xe[BH]=xe[zH]=xe[HH]=xe[WH]=xe[VH]=xe[GH]=xe[qH]=xe[KH]=xe[YH]=!0;xe[kH]=xe[xH]=xe[UH]=xe[IH]=xe[jH]=xe[RH]=xe[$H]=xe[OH]=xe[AH]=xe[MH]=xe[NH]=xe[PH]=xe[LH]=xe[DH]=xe[FH]=!1;function XH(e){return CH(e)&&TH(e.length)&&!!xe[bH(e)]}var JH=XH;function QH(e){return function(t){return e(t)}}var my=QH,Ec={exports:{}};Ec.exports;(function(e,t){var n=Pw,r=t&&!t.nodeType&&t,o=r&&!0&&e&&!e.nodeType&&e,i=o&&o.exports===r,s=i&&n.process,a=function(){try{var l=o&&o.require&&o.require("util").types;return l||s&&s.binding&&s.binding("util")}catch{}}();e.exports=a})(Ec,Ec.exports);var gy=Ec.exports,ZH=JH,e9=my,bS=gy,TS=bS&&bS.isTypedArray,t9=TS?e9(TS):ZH,qk=t9,n9=sH,r9=dy,o9=En,i9=py,s9=Gk,a9=qk,l9=Object.prototype,u9=l9.hasOwnProperty;function c9(e,t){var n=o9(e),r=!n&&r9(e),o=!n&&!r&&i9(e),i=!n&&!r&&!o&&a9(e),s=n||r||o||i,a=s?n9(e.length,String):[],l=a.length;for(var u in e)(t||u9.call(e,u))&&!(s&&(u=="length"||o&&(u=="offset"||u=="parent")||i&&(u=="buffer"||u=="byteLength"||u=="byteOffset")||s9(u,l)))&&a.push(u);return a}var Kk=c9,f9=Object.prototype;function d9(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||f9;return e===n}var yy=d9;function p9(e,t){return function(n){return e(t(n))}}var Yk=p9,h9=Yk,m9=h9(Object.keys,Object),g9=m9,y9=yy,_9=g9,v9=Object.prototype,S9=v9.hasOwnProperty;function E9(e){if(!y9(e))return _9(e);var t=[];for(var n in Object(e))S9.call(e,n)&&n!="constructor"&&t.push(n);return t}var w9=E9,b9=Dw,T9=hy;function C9(e){return e!=null&&T9(e.length)&&!b9(e)}var _y=C9,k9=Kk,x9=w9,I9=_y;function R9(e){return I9(e)?k9(e):x9(e)}var rl=R9,$9=nl,O9=rl;function A9(e,t){return e&&$9(t,O9(t),e)}var M9=A9;function N9(e){var t=[];if(e!=null)for(var n in Object(e))t.push(n);return t}var P9=N9,L9=Qi,D9=yy,F9=P9,U9=Object.prototype,j9=U9.hasOwnProperty;function B9(e){if(!L9(e))return F9(e);var t=D9(e),n=[];for(var r in e)r=="constructor"&&(t||!j9.call(e,r))||n.push(r);return n}var z9=B9,H9=Kk,W9=z9,V9=_y;function G9(e){return V9(e)?H9(e,!0):W9(e)}var vy=G9,q9=nl,K9=vy;function Y9(e,t){return e&&q9(t,K9(t),e)}var X9=Y9,wc={exports:{}};wc.exports;(function(e,t){var n=Dn,r=t&&!t.nodeType&&t,o=r&&!0&&e&&!e.nodeType&&e,i=o&&o.exports===r,s=i?n.Buffer:void 0,a=s?s.allocUnsafe:void 0;function l(u,f){if(f)return u.slice();var c=u.length,d=a?a(c):new u.constructor(c);return u.copy(d),d}e.exports=l})(wc,wc.exports);var J9=wc.exports;function Q9(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++no?0:o+t),n=n>o?o:n,n<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var i=Array(o);++r0&&n(a)?t>1?ax(a,t-1,n,r,o):GG(o,a):r||(o[o.length]=a)}return o}var KG=ax,YG=KG;function XG(e){var t=e==null?0:e.length;return t?YG(e,1):[]}var JG=XG;function QG(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}var ZG=QG,eq=ZG,zS=Math.max;function tq(e,t,n){return t=zS(t===void 0?e.length-1:t,0),function(){for(var r=arguments,o=-1,i=zS(r.length-t,0),s=Array(i);++o0){if(++t>=uq)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var pq=dq,hq=lq,mq=pq,gq=mq(hq),yq=gq,_q=JG,vq=nq,Sq=yq;function Eq(e){return Sq(vq(e,void 0,_q),e+"")}var wq=Eq,bq=jw,Tq=hG,Cq=IG,kq=Kc,xq=nl,Iq=BG,Rq=wq,$q=ex,Oq=1,Aq=2,Mq=4,Nq=Rq(function(e,t){var n={};if(e==null)return n;var r=!1;t=bq(t,function(i){return i=kq(i,e),r||(r=i.length>1),i}),xq(e,$q(e),n),r&&(n=Tq(n,Oq|Aq|Mq,Iq));for(var o=t.length;o--;)Cq(n,t[o]);return n}),Pq=Nq;const Lq=Lt(Pq),lx=new Gi("api.requests"),bc=new Gi("api.responses");function Dq(e){return lx.tags({method:Of(e),url:e.url}).debug("api_request"),e}function Fq(e){return lx.error(e),Promise.reject(e)}function ux(e){let t=JSON.stringify(e.data);return t.length>103&&(t=t.slice(0,100)+"..."),bc.tags({method:Of(e.config),url:e.config.url,status:e.status}).context({body:t}).info("api_response"),e}function Uq(e){return e.response?ux(e.response):bc.tags({method:Of(e.config),url:e.config.url,non_http_response_error:!0}).error(e.message),Promise.reject(e)}function Of(e){return e.method.toUpperCase()}const jq=[Dq,Fq],Bq=[ux,Uq];function zq(e){if(Gu(e,"response.status")===401)return Promise.reject(e);let t={method:Of(e.config),url:e.config.url};if(!e.response)return t.non_http_response_error=!0,bc.tags(t).error(e.message),Promise.reject(e);const n=Gu(e,"response.data.error");return n&&(t=Lq({...t,...n},"backtrace")),t.status=e.response.status,bc.tags(t).context({message:e.message}).error(`${t.method} ${t.url} ${t.status}`),Promise.reject(e)}const Hq=[Bk,zq];function cx(e,t){return function(){return e.apply(t,arguments)}}const{toString:Wq}=Object.prototype,{getPrototypeOf:Ty}=Object,Af=(e=>t=>{const n=Wq.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),bn=e=>(e=e.toLowerCase(),t=>Af(t)===e),Mf=e=>t=>typeof t===e,{isArray:ys}=Array,Pa=Mf("undefined");function Vq(e){return e!==null&&!Pa(e)&&e.constructor!==null&&!Pa(e.constructor)&&tn(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const fx=bn("ArrayBuffer");function Gq(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&fx(e.buffer),t}const qq=Mf("string"),tn=Mf("function"),dx=Mf("number"),Nf=e=>e!==null&&typeof e=="object",Kq=e=>e===!0||e===!1,mu=e=>{if(Af(e)!=="object")return!1;const t=Ty(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},Yq=bn("Date"),Xq=bn("File"),Jq=bn("Blob"),Qq=bn("FileList"),Zq=e=>Nf(e)&&tn(e.pipe),eK=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||tn(e.append)&&((t=Af(e))==="formdata"||t==="object"&&tn(e.toString)&&e.toString()==="[object FormData]"))},tK=bn("URLSearchParams"),[nK,rK,oK,iK]=["ReadableStream","Request","Response","Headers"].map(bn),sK=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function ol(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,o;if(typeof e!="object"&&(e=[e]),ys(e))for(r=0,o=e.length;r0;)if(o=n[r],t===o.toLowerCase())return o;return null}const hx=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),mx=e=>!Pa(e)&&e!==hx;function Lh(){const{caseless:e}=mx(this)&&this||{},t={},n=(r,o)=>{const i=e&&px(t,o)||o;mu(t[i])&&mu(r)?t[i]=Lh(t[i],r):mu(r)?t[i]=Lh({},r):ys(r)?t[i]=r.slice():t[i]=r};for(let r=0,o=arguments.length;r(ol(t,(o,i)=>{n&&tn(o)?e[i]=cx(o,n):e[i]=o},{allOwnKeys:r}),e),lK=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),uK=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},cK=(e,t,n,r)=>{let o,i,s;const a={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)s=o[i],(!r||r(s,e,t))&&!a[s]&&(t[s]=e[s],a[s]=!0);e=n!==!1&&Ty(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},fK=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},dK=e=>{if(!e)return null;if(ys(e))return e;let t=e.length;if(!dx(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},pK=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Ty(Uint8Array)),hK=(e,t)=>{const r=(e&&e[Symbol.iterator]).call(e);let o;for(;(o=r.next())&&!o.done;){const i=o.value;t.call(e,i[0],i[1])}},mK=(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},gK=bn("HTMLFormElement"),yK=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,o){return r.toUpperCase()+o}),WS=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),_K=bn("RegExp"),gx=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};ol(n,(o,i)=>{let s;(s=t(o,i,e))!==!1&&(r[i]=s||o)}),Object.defineProperties(e,r)},vK=e=>{gx(e,(t,n)=>{if(tn(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const r=e[n];if(tn(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},SK=(e,t)=>{const n={},r=o=>{o.forEach(i=>{n[i]=!0})};return ys(e)?r(e):r(String(e).split(t)),n},EK=()=>{},wK=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,Fd="abcdefghijklmnopqrstuvwxyz",VS="0123456789",yx={DIGIT:VS,ALPHA:Fd,ALPHA_DIGIT:Fd+Fd.toUpperCase()+VS},bK=(e=16,t=yx.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n};function TK(e){return!!(e&&tn(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const CK=e=>{const t=new Array(10),n=(r,o)=>{if(Nf(r)){if(t.indexOf(r)>=0)return;if(!("toJSON"in r)){t[o]=r;const i=ys(r)?[]:{};return ol(r,(s,a)=>{const l=n(s,o+1);!Pa(l)&&(i[a]=l)}),t[o]=void 0,i}}return r};return n(e,0)},kK=bn("AsyncFunction"),xK=e=>e&&(Nf(e)||tn(e))&&tn(e.then)&&tn(e.catch),k={isArray:ys,isArrayBuffer:fx,isBuffer:Vq,isFormData:eK,isArrayBufferView:Gq,isString:qq,isNumber:dx,isBoolean:Kq,isObject:Nf,isPlainObject:mu,isReadableStream:nK,isRequest:rK,isResponse:oK,isHeaders:iK,isUndefined:Pa,isDate:Yq,isFile:Xq,isBlob:Jq,isRegExp:_K,isFunction:tn,isStream:Zq,isURLSearchParams:tK,isTypedArray:pK,isFileList:Qq,forEach:ol,merge:Lh,extend:aK,trim:sK,stripBOM:lK,inherits:uK,toFlatObject:cK,kindOf:Af,kindOfTest:bn,endsWith:fK,toArray:dK,forEachEntry:hK,matchAll:mK,isHTMLForm:gK,hasOwnProperty:WS,hasOwnProp:WS,reduceDescriptors:gx,freezeMethods:vK,toObjectSet:SK,toCamelCase:yK,noop:EK,toFiniteNumber:wK,findKey:px,global:hx,isContextDefined:mx,ALPHABET:yx,generateString:bK,isSpecCompliantForm:TK,toJSONObject:CK,isAsyncFn:kK,isThenable:xK};function Q(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}k.inherits(Q,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:k.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const _x=Q.prototype,vx={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{vx[e]={value:e}});Object.defineProperties(Q,vx);Object.defineProperty(_x,"isAxiosError",{value:!0});Q.from=(e,t,n,r,o,i)=>{const s=Object.create(_x);return k.toFlatObject(e,s,function(l){return l!==Error.prototype},a=>a!=="isAxiosError"),Q.call(s,e.message,t,n,r,o),s.cause=e,s.name=e.name,i&&Object.assign(s,i),s};const IK=null;function Dh(e){return k.isPlainObject(e)||k.isArray(e)}function Sx(e){return k.endsWith(e,"[]")?e.slice(0,-2):e}function GS(e,t,n){return e?e.concat(t).map(function(o,i){return o=Sx(o),!n&&i?"["+o+"]":o}).join(n?".":""):t}function RK(e){return k.isArray(e)&&!e.some(Dh)}const $K=k.toFlatObject(k,{},null,function(t){return/^is[A-Z]/.test(t)});function Pf(e,t,n){if(!k.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=k.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(_,v){return!k.isUndefined(v[_])});const r=n.metaTokens,o=n.visitor||f,i=n.dots,s=n.indexes,l=(n.Blob||typeof Blob<"u"&&Blob)&&k.isSpecCompliantForm(t);if(!k.isFunction(o))throw new TypeError("visitor must be a function");function u(m){if(m===null)return"";if(k.isDate(m))return m.toISOString();if(!l&&k.isBlob(m))throw new Q("Blob is not supported. Use a Buffer instead.");return k.isArrayBuffer(m)||k.isTypedArray(m)?l&&typeof Blob=="function"?new Blob([m]):Buffer.from(m):m}function f(m,_,v){let g=m;if(m&&!v&&typeof m=="object"){if(k.endsWith(_,"{}"))_=r?_:_.slice(0,-2),m=JSON.stringify(m);else if(k.isArray(m)&&RK(m)||(k.isFileList(m)||k.endsWith(_,"[]"))&&(g=k.toArray(m)))return _=Sx(_),g.forEach(function(y,S){!(k.isUndefined(y)||y===null)&&t.append(s===!0?GS([_],S,i):s===null?_:_+"[]",u(y))}),!1}return Dh(m)?!0:(t.append(GS(v,_,i),u(m)),!1)}const c=[],d=Object.assign($K,{defaultVisitor:f,convertValue:u,isVisitable:Dh});function h(m,_){if(!k.isUndefined(m)){if(c.indexOf(m)!==-1)throw Error("Circular reference detected in "+_.join("."));c.push(m),k.forEach(m,function(g,p){(!(k.isUndefined(g)||g===null)&&o.call(t,g,k.isString(p)?p.trim():p,_,d))===!0&&h(g,_?_.concat(p):[p])}),c.pop()}}if(!k.isObject(e))throw new TypeError("data must be an object");return h(e),t}function qS(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function Cy(e,t){this._pairs=[],e&&Pf(e,this,t)}const Ex=Cy.prototype;Ex.append=function(t,n){this._pairs.push([t,n])};Ex.toString=function(t){const n=t?function(r){return t.call(this,r,qS)}:qS;return this._pairs.map(function(o){return n(o[0])+"="+n(o[1])},"").join("&")};function OK(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function wx(e,t,n){if(!t)return e;const r=n&&n.encode||OK,o=n&&n.serialize;let i;if(o?i=o(t,n):i=k.isURLSearchParams(t)?t.toString():new Cy(t,n).toString(r),i){const s=e.indexOf("#");s!==-1&&(e=e.slice(0,s)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}class AK{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){k.forEach(this.handlers,function(r){r!==null&&t(r)})}}const KS=AK,bx={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},MK=typeof URLSearchParams<"u"?URLSearchParams:Cy,NK=typeof FormData<"u"?FormData:null,PK=typeof Blob<"u"?Blob:null,LK={isBrowser:!0,classes:{URLSearchParams:MK,FormData:NK,Blob:PK},protocols:["http","https","file","blob","url","data"]},ky=typeof window<"u"&&typeof document<"u",DK=(e=>ky&&["ReactNative","NativeScript","NS"].indexOf(e)<0)(typeof navigator<"u"&&navigator.product),FK=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),UK=ky&&window.location.href||"http://localhost",jK=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:ky,hasStandardBrowserEnv:DK,hasStandardBrowserWebWorkerEnv:FK,origin:UK},Symbol.toStringTag,{value:"Module"})),yn={...jK,...LK};function BK(e,t){return Pf(e,new yn.classes.URLSearchParams,Object.assign({visitor:function(n,r,o,i){return yn.isNode&&k.isBuffer(n)?(this.append(r,n.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},t))}function zK(e){return k.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function HK(e){const t={},n=Object.keys(e);let r;const o=n.length;let i;for(r=0;r=n.length;return s=!s&&k.isArray(o)?o.length:s,l?(k.hasOwnProp(o,s)?o[s]=[o[s],r]:o[s]=r,!a):((!o[s]||!k.isObject(o[s]))&&(o[s]=[]),t(n,r,o[s],i)&&k.isArray(o[s])&&(o[s]=HK(o[s])),!a)}if(k.isFormData(e)&&k.isFunction(e.entries)){const n={};return k.forEachEntry(e,(r,o)=>{t(zK(r),o,n,0)}),n}return null}function WK(e,t,n){if(k.isString(e))try{return(t||JSON.parse)(e),k.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}const xy={transitional:bx,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const r=n.getContentType()||"",o=r.indexOf("application/json")>-1,i=k.isObject(t);if(i&&k.isHTMLForm(t)&&(t=new FormData(t)),k.isFormData(t))return o?JSON.stringify(Tx(t)):t;if(k.isArrayBuffer(t)||k.isBuffer(t)||k.isStream(t)||k.isFile(t)||k.isBlob(t)||k.isReadableStream(t))return t;if(k.isArrayBufferView(t))return t.buffer;if(k.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let a;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return BK(t,this.formSerializer).toString();if((a=k.isFileList(t))||r.indexOf("multipart/form-data")>-1){const l=this.env&&this.env.FormData;return Pf(a?{"files[]":t}:t,l&&new l,this.formSerializer)}}return i||o?(n.setContentType("application/json",!1),WK(t)):t}],transformResponse:[function(t){const n=this.transitional||xy.transitional,r=n&&n.forcedJSONParsing,o=this.responseType==="json";if(k.isResponse(t)||k.isReadableStream(t))return t;if(t&&k.isString(t)&&(r&&!this.responseType||o)){const s=!(n&&n.silentJSONParsing)&&o;try{return JSON.parse(t)}catch(a){if(s)throw a.name==="SyntaxError"?Q.from(a,Q.ERR_BAD_RESPONSE,this,null,this.response):a}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:yn.classes.FormData,Blob:yn.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};k.forEach(["delete","get","head","post","put","patch"],e=>{xy.headers[e]={}});const Iy=xy,VK=k.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),GK=e=>{const t={};let n,r,o;return e&&e.split(` +`).forEach(function(s){o=s.indexOf(":"),n=s.substring(0,o).trim().toLowerCase(),r=s.substring(o+1).trim(),!(!n||t[n]&&VK[n])&&(n==="set-cookie"?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t},YS=Symbol("internals");function Ns(e){return e&&String(e).trim().toLowerCase()}function gu(e){return e===!1||e==null?e:k.isArray(e)?e.map(gu):String(e)}function qK(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}const KK=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function Ud(e,t,n,r,o){if(k.isFunction(r))return r.call(this,t,n);if(o&&(t=n),!!k.isString(t)){if(k.isString(r))return t.indexOf(r)!==-1;if(k.isRegExp(r))return r.test(t)}}function YK(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function XK(e,t){const n=k.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(o,i,s){return this[r].call(this,t,o,i,s)},configurable:!0})})}let Lf=class{constructor(t){t&&this.set(t)}set(t,n,r){const o=this;function i(a,l,u){const f=Ns(l);if(!f)throw new Error("header name must be a non-empty string");const c=k.findKey(o,f);(!c||o[c]===void 0||u===!0||u===void 0&&o[c]!==!1)&&(o[c||l]=gu(a))}const s=(a,l)=>k.forEach(a,(u,f)=>i(u,f,l));if(k.isPlainObject(t)||t instanceof this.constructor)s(t,n);else if(k.isString(t)&&(t=t.trim())&&!KK(t))s(GK(t),n);else if(k.isHeaders(t))for(const[a,l]of t.entries())i(l,a,r);else t!=null&&i(n,t,r);return this}get(t,n){if(t=Ns(t),t){const r=k.findKey(this,t);if(r){const o=this[r];if(!n)return o;if(n===!0)return qK(o);if(k.isFunction(n))return n.call(this,o,r);if(k.isRegExp(n))return n.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=Ns(t),t){const r=k.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||Ud(this,this[r],r,n)))}return!1}delete(t,n){const r=this;let o=!1;function i(s){if(s=Ns(s),s){const a=k.findKey(r,s);a&&(!n||Ud(r,r[a],a,n))&&(delete r[a],o=!0)}}return k.isArray(t)?t.forEach(i):i(t),o}clear(t){const n=Object.keys(this);let r=n.length,o=!1;for(;r--;){const i=n[r];(!t||Ud(this,this[i],i,t,!0))&&(delete this[i],o=!0)}return o}normalize(t){const n=this,r={};return k.forEach(this,(o,i)=>{const s=k.findKey(r,i);if(s){n[s]=gu(o),delete n[i];return}const a=t?YK(i):String(i).trim();a!==i&&delete n[i],n[a]=gu(o),r[a]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return k.forEach(this,(r,o)=>{r!=null&&r!==!1&&(n[o]=t&&k.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const r=new this(t);return n.forEach(o=>r.set(o)),r}static accessor(t){const r=(this[YS]=this[YS]={accessors:{}}).accessors,o=this.prototype;function i(s){const a=Ns(s);r[a]||(XK(o,s),r[a]=!0)}return k.isArray(t)?t.forEach(i):i(t),this}};Lf.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);k.reduceDescriptors(Lf.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});k.freezeMethods(Lf);const _n=Lf;function jd(e,t){const n=this||Iy,r=t||n,o=_n.from(r.headers);let i=r.data;return k.forEach(e,function(a){i=a.call(n,i,o.normalize(),t?t.status:void 0)}),o.normalize(),i}function Cx(e){return!!(e&&e.__CANCEL__)}function _s(e,t,n){Q.call(this,e??"canceled",Q.ERR_CANCELED,t,n),this.name="CanceledError"}k.inherits(_s,Q,{__CANCEL__:!0});function kx(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new Q("Request failed with status code "+n.status,[Q.ERR_BAD_REQUEST,Q.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function JK(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function QK(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o=0,i=0,s;return t=t!==void 0?t:1e3,function(l){const u=Date.now(),f=r[i];s||(s=u),n[o]=l,r[o]=u;let c=i,d=0;for(;c!==o;)d+=n[c++],c=c%e;if(o=(o+1)%e,o===i&&(i=(i+1)%e),u-sr)return o&&(clearTimeout(o),o=null),n=a,e.apply(null,arguments);o||(o=setTimeout(()=>(o=null,n=Date.now(),e.apply(null,arguments)),r-(a-n)))}}const Tc=(e,t,n=3)=>{let r=0;const o=QK(50,250);return ZK(i=>{const s=i.loaded,a=i.lengthComputable?i.total:void 0,l=s-r,u=o(l),f=s<=a;r=s;const c={loaded:s,total:a,progress:a?s/a:void 0,bytes:l,rate:u||void 0,estimated:u&&a&&f?(a-s)/u:void 0,event:i,lengthComputable:a!=null};c[t?"download":"upload"]=!0,e(c)},n)},eY=yn.hasStandardBrowserEnv?function(){const t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");let r;function o(i){let s=i;return t&&(n.setAttribute("href",s),s=n.href),n.setAttribute("href",s),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return r=o(window.location.href),function(s){const a=k.isString(s)?o(s):s;return a.protocol===r.protocol&&a.host===r.host}}():function(){return function(){return!0}}(),tY=yn.hasStandardBrowserEnv?{write(e,t,n,r,o,i){const s=[e+"="+encodeURIComponent(t)];k.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),k.isString(r)&&s.push("path="+r),k.isString(o)&&s.push("domain="+o),i===!0&&s.push("secure"),document.cookie=s.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function nY(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function rY(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function xx(e,t){return e&&!nY(t)?rY(e,t):t}const XS=e=>e instanceof _n?{...e}:e;function $o(e,t){t=t||{};const n={};function r(u,f,c){return k.isPlainObject(u)&&k.isPlainObject(f)?k.merge.call({caseless:c},u,f):k.isPlainObject(f)?k.merge({},f):k.isArray(f)?f.slice():f}function o(u,f,c){if(k.isUndefined(f)){if(!k.isUndefined(u))return r(void 0,u,c)}else return r(u,f,c)}function i(u,f){if(!k.isUndefined(f))return r(void 0,f)}function s(u,f){if(k.isUndefined(f)){if(!k.isUndefined(u))return r(void 0,u)}else return r(void 0,f)}function a(u,f,c){if(c in t)return r(u,f);if(c in e)return r(void 0,u)}const l={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a,headers:(u,f)=>o(XS(u),XS(f),!0)};return k.forEach(Object.keys(Object.assign({},e,t)),function(f){const c=l[f]||o,d=c(e[f],t[f],f);k.isUndefined(d)&&c!==a||(n[f]=d)}),n}const Ix=e=>{const t=$o({},e);let{data:n,withXSRFToken:r,xsrfHeaderName:o,xsrfCookieName:i,headers:s,auth:a}=t;t.headers=s=_n.from(s),t.url=wx(xx(t.baseURL,t.url),e.params,e.paramsSerializer),a&&s.set("Authorization","Basic "+btoa((a.username||"")+":"+(a.password?unescape(encodeURIComponent(a.password)):"")));let l;if(k.isFormData(n)){if(yn.hasStandardBrowserEnv||yn.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if((l=s.getContentType())!==!1){const[u,...f]=l?l.split(";").map(c=>c.trim()).filter(Boolean):[];s.setContentType([u||"multipart/form-data",...f].join("; "))}}if(yn.hasStandardBrowserEnv&&(r&&k.isFunction(r)&&(r=r(t)),r||r!==!1&&eY(t.url))){const u=o&&i&&tY.read(i);u&&s.set(o,u)}return t},oY=typeof XMLHttpRequest<"u",iY=oY&&function(e){return new Promise(function(n,r){const o=Ix(e);let i=o.data;const s=_n.from(o.headers).normalize();let{responseType:a}=o,l;function u(){o.cancelToken&&o.cancelToken.unsubscribe(l),o.signal&&o.signal.removeEventListener("abort",l)}let f=new XMLHttpRequest;f.open(o.method.toUpperCase(),o.url,!0),f.timeout=o.timeout;function c(){if(!f)return;const h=_n.from("getAllResponseHeaders"in f&&f.getAllResponseHeaders()),_={data:!a||a==="text"||a==="json"?f.responseText:f.response,status:f.status,statusText:f.statusText,headers:h,config:e,request:f};kx(function(g){n(g),u()},function(g){r(g),u()},_),f=null}"onloadend"in f?f.onloadend=c:f.onreadystatechange=function(){!f||f.readyState!==4||f.status===0&&!(f.responseURL&&f.responseURL.indexOf("file:")===0)||setTimeout(c)},f.onabort=function(){f&&(r(new Q("Request aborted",Q.ECONNABORTED,o,f)),f=null)},f.onerror=function(){r(new Q("Network Error",Q.ERR_NETWORK,o,f)),f=null},f.ontimeout=function(){let m=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded";const _=o.transitional||bx;o.timeoutErrorMessage&&(m=o.timeoutErrorMessage),r(new Q(m,_.clarifyTimeoutError?Q.ETIMEDOUT:Q.ECONNABORTED,o,f)),f=null},i===void 0&&s.setContentType(null),"setRequestHeader"in f&&k.forEach(s.toJSON(),function(m,_){f.setRequestHeader(_,m)}),k.isUndefined(o.withCredentials)||(f.withCredentials=!!o.withCredentials),a&&a!=="json"&&(f.responseType=o.responseType),typeof o.onDownloadProgress=="function"&&f.addEventListener("progress",Tc(o.onDownloadProgress,!0)),typeof o.onUploadProgress=="function"&&f.upload&&f.upload.addEventListener("progress",Tc(o.onUploadProgress)),(o.cancelToken||o.signal)&&(l=h=>{f&&(r(!h||h.type?new _s(null,e,f):h),f.abort(),f=null)},o.cancelToken&&o.cancelToken.subscribe(l),o.signal&&(o.signal.aborted?l():o.signal.addEventListener("abort",l)));const d=JK(o.url);if(d&&yn.protocols.indexOf(d)===-1){r(new Q("Unsupported protocol "+d+":",Q.ERR_BAD_REQUEST,e));return}f.send(i||null)})},sY=(e,t)=>{let n=new AbortController,r;const o=function(l){if(!r){r=!0,s();const u=l instanceof Error?l:this.reason;n.abort(u instanceof Q?u:new _s(u instanceof Error?u.message:u))}};let i=t&&setTimeout(()=>{o(new Q(`timeout ${t} of ms exceeded`,Q.ETIMEDOUT))},t);const s=()=>{e&&(i&&clearTimeout(i),i=null,e.forEach(l=>{l&&(l.removeEventListener?l.removeEventListener("abort",o):l.unsubscribe(o))}),e=null)};e.forEach(l=>l&&l.addEventListener&&l.addEventListener("abort",o));const{signal:a}=n;return a.unsubscribe=s,[a,()=>{i&&clearTimeout(i),i=null}]},aY=sY,lY=function*(e,t){let n=e.byteLength;if(!t||n{const i=uY(e,t,o);let s=0;return new ReadableStream({type:"bytes",async pull(a){const{done:l,value:u}=await i.next();if(l){a.close(),r();return}let f=u.byteLength;n&&n(s+=f),a.enqueue(new Uint8Array(u))},cancel(a){return r(a),i.return()}},{highWaterMark:2})},QS=(e,t)=>{const n=e!=null;return r=>setTimeout(()=>t({lengthComputable:n,total:e,loaded:r}))},Df=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",Rx=Df&&typeof ReadableStream=="function",Fh=Df&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),cY=Rx&&(()=>{let e=!1;const t=new Request(yn.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})(),ZS=64*1024,Uh=Rx&&!!(()=>{try{return k.isReadableStream(new Response("").body)}catch{}})(),Cc={stream:Uh&&(e=>e.body)};Df&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!Cc[t]&&(Cc[t]=k.isFunction(e[t])?n=>n[t]():(n,r)=>{throw new Q(`Response type '${t}' is not supported`,Q.ERR_NOT_SUPPORT,r)})})})(new Response);const fY=async e=>{if(e==null)return 0;if(k.isBlob(e))return e.size;if(k.isSpecCompliantForm(e))return(await new Request(e).arrayBuffer()).byteLength;if(k.isArrayBufferView(e))return e.byteLength;if(k.isURLSearchParams(e)&&(e=e+""),k.isString(e))return(await Fh(e)).byteLength},dY=async(e,t)=>{const n=k.toFiniteNumber(e.getContentLength());return n??fY(t)},pY=Df&&(async e=>{let{url:t,method:n,data:r,signal:o,cancelToken:i,timeout:s,onDownloadProgress:a,onUploadProgress:l,responseType:u,headers:f,withCredentials:c="same-origin",fetchOptions:d}=Ix(e);u=u?(u+"").toLowerCase():"text";let[h,m]=o||i||s?aY([o,i],s):[],_,v;const g=()=>{!_&&setTimeout(()=>{h&&h.unsubscribe()}),_=!0};let p;try{if(l&&cY&&n!=="get"&&n!=="head"&&(p=await dY(f,r))!==0){let E=new Request(t,{method:"POST",body:r,duplex:"half"}),w;k.isFormData(r)&&(w=E.headers.get("content-type"))&&f.setContentType(w),E.body&&(r=JS(E.body,ZS,QS(p,Tc(l)),null,Fh))}k.isString(c)||(c=c?"cors":"omit"),v=new Request(t,{...d,signal:h,method:n.toUpperCase(),headers:f.normalize().toJSON(),body:r,duplex:"half",withCredentials:c});let y=await fetch(v);const S=Uh&&(u==="stream"||u==="response");if(Uh&&(a||S)){const E={};["status","statusText","headers"].forEach(x=>{E[x]=y[x]});const w=k.toFiniteNumber(y.headers.get("content-length"));y=new Response(JS(y.body,ZS,a&&QS(w,Tc(a,!0)),S&&g,Fh),E)}u=u||"text";let b=await Cc[k.findKey(Cc,u)||"text"](y,e);return!S&&g(),m&&m(),await new Promise((E,w)=>{kx(E,w,{data:b,headers:_n.from(y.headers),status:y.status,statusText:y.statusText,config:e,request:v})})}catch(y){throw g(),y&&y.name==="TypeError"&&/fetch/i.test(y.message)?Object.assign(new Q("Network Error",Q.ERR_NETWORK,e,v),{cause:y.cause||y}):Q.from(y,y&&y.code,e,v)}}),jh={http:IK,xhr:iY,fetch:pY};k.forEach(jh,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const e1=e=>`- ${e}`,hY=e=>k.isFunction(e)||e===null||e===!1,$x={getAdapter:e=>{e=k.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let i=0;i`adapter ${a} `+(l===!1?"is not supported by the environment":"is not available in the build"));let s=t?i.length>1?`since : +`+i.map(e1).join(` +`):" "+e1(i[0]):"as no adapter specified";throw new Q("There is no suitable adapter to dispatch the request "+s,"ERR_NOT_SUPPORT")}return r},adapters:jh};function Bd(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new _s(null,e)}function t1(e){return Bd(e),e.headers=_n.from(e.headers),e.data=jd.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),$x.getAdapter(e.adapter||Iy.adapter)(e).then(function(r){return Bd(e),r.data=jd.call(e,e.transformResponse,r),r.headers=_n.from(r.headers),r},function(r){return Cx(r)||(Bd(e),r&&r.response&&(r.response.data=jd.call(e,e.transformResponse,r.response),r.response.headers=_n.from(r.response.headers))),Promise.reject(r)})}const Ox="1.7.2",Ry={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Ry[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const n1={};Ry.transitional=function(t,n,r){function o(i,s){return"[Axios v"+Ox+"] Transitional option '"+i+"'"+s+(r?". "+r:"")}return(i,s,a)=>{if(t===!1)throw new Q(o(s," has been removed"+(n?" in "+n:"")),Q.ERR_DEPRECATED);return n&&!n1[s]&&(n1[s]=!0,console.warn(o(s," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(i,s,a):!0}};function mY(e,t,n){if(typeof e!="object")throw new Q("options must be an object",Q.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const i=r[o],s=t[i];if(s){const a=e[i],l=a===void 0||s(a,i,e);if(l!==!0)throw new Q("option "+i+" must be "+l,Q.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new Q("Unknown option "+i,Q.ERR_BAD_OPTION)}}const Bh={assertOptions:mY,validators:Ry},fr=Bh.validators;let kc=class{constructor(t){this.defaults=t,this.interceptors={request:new KS,response:new KS}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error){let o;Error.captureStackTrace?Error.captureStackTrace(o={}):o=new Error;const i=o.stack?o.stack.replace(/^.+\n/,""):"";try{r.stack?i&&!String(r.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(r.stack+=` +`+i):r.stack=i}catch{}}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=$o(this.defaults,n);const{transitional:r,paramsSerializer:o,headers:i}=n;r!==void 0&&Bh.assertOptions(r,{silentJSONParsing:fr.transitional(fr.boolean),forcedJSONParsing:fr.transitional(fr.boolean),clarifyTimeoutError:fr.transitional(fr.boolean)},!1),o!=null&&(k.isFunction(o)?n.paramsSerializer={serialize:o}:Bh.assertOptions(o,{encode:fr.function,serialize:fr.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let s=i&&k.merge(i.common,i[n.method]);i&&k.forEach(["delete","get","head","post","put","patch","common"],m=>{delete i[m]}),n.headers=_n.concat(s,i);const a=[];let l=!0;this.interceptors.request.forEach(function(_){typeof _.runWhen=="function"&&_.runWhen(n)===!1||(l=l&&_.synchronous,a.unshift(_.fulfilled,_.rejected))});const u=[];this.interceptors.response.forEach(function(_){u.push(_.fulfilled,_.rejected)});let f,c=0,d;if(!l){const m=[t1.bind(this),void 0];for(m.unshift.apply(m,a),m.push.apply(m,u),d=m.length,f=Promise.resolve(n);c{if(!r._listeners)return;let i=r._listeners.length;for(;i-- >0;)r._listeners[i](o);r._listeners=null}),this.promise.then=o=>{let i;const s=new Promise(a=>{r.subscribe(a),i=a}).then(o);return s.cancel=function(){r.unsubscribe(i)},s},t(function(i,s,a){r.reason||(r.reason=new _s(i,s,a),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}static source(){let t;return{token:new Ax(function(o){t=o}),cancel:t}}};const yY=gY;function _Y(e){return function(n){return e.apply(null,n)}}function vY(e){return k.isObject(e)&&e.isAxiosError===!0}const zh={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(zh).forEach(([e,t])=>{zh[t]=e});const SY=zh;function Mx(e){const t=new yu(e),n=cx(yu.prototype.request,t);return k.extend(n,yu.prototype,t,{allOwnKeys:!0}),k.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return Mx($o(e,o))},n}const et=Mx(Iy);et.Axios=yu;et.CanceledError=_s;et.CancelToken=yY;et.isCancel=Cx;et.VERSION=Ox;et.toFormData=Pf;et.AxiosError=Q;et.Cancel=et.CanceledError;et.all=function(t){return Promise.all(t)};et.spread=_Y;et.isAxiosError=vY;et.mergeConfig=$o;et.AxiosHeaders=_n;et.formToJSON=e=>Tx(k.isHTMLForm(e)?new FormData(e):e);et.getAdapter=$x.getAdapter;et.HttpStatusCode=SY;et.default=et;const _u=et,{Axios:kZ,AxiosError:EY,CanceledError:wY,isCancel:xZ,CancelToken:IZ,VERSION:RZ,all:$Z,Cancel:OZ,isAxiosError:AZ,spread:MZ,toFormData:NZ,AxiosHeaders:PZ,HttpStatusCode:LZ,formToJSON:DZ,getAdapter:FZ,mergeConfig:UZ}=_u;var Nx={exports:{}};(function(e){(function(t){var n=function(p,y,S){if(!u(y)||c(y)||h(y)||m(y)||l(y)||d(y))return y;var b,E=0,w=0;if(f(y))for(b=[],w=y.length;EHh.camelizeKeys(s)],transformRequest:[s=>Hh.decamelizeKeys(s),..._u.defaults.transformRequest],...o});return n?(console.log("apiBase: Debug mode enabled, setting up Axios logging for calls to",e),i.interceptors.request.use(...jq),i.interceptors.response.use(...Bq)):i.interceptors.response.use(...Hq),r&&(console.log(`apiBase: Chaos mode enabled (${r}), adding random delays to api calls`),i.interceptors.request.use(IY(r))),i}function IY(e){const t=isNaN(Number(e))?1:Number(e);return n=>{let r=250+Math.random()*1e3;const o=Math.random();return o<.05?r+=3e3+Math.random()*4e3:o<.1&&(r+=1e3+Math.random()*2e3),r*=t,Promise.resolve(n).delay(r)}}function r1(e,t){return n=>{if(Gu(n,"response.data.error.status")===e)return t(n);throw n}}function RY(e,t){return{params:Hh.decamelizeKeys(e||{}),...t}}function $Y(e){return e instanceof wY||e instanceof EY&&e.code==="ECONNABORTED"}const Ff={create:xY,handleStatus:r1,isAxiosTimeout:$Y,mergeParams:RY,pick:e=>t=>Gu(t,e),pickData:e=>e.data,swallow:e=>r1(e,kY)},vs=Ff.create(hi.apiHost,{debug:hi.debug,chaos:!1}),nt=(e,t,n)=>vs.get(e,Ff.mergeParams(t,n)),lt=(e,t,n)=>vs.post(e,t,n),OY=(e,t,n)=>vs.patch(e,t,n),AY=(e,t,n)=>vs.put(e,t,n),MY=(e,t,n)=>vs.delete(e,Ff.mergeParams(t,n)),o1={...Ff,axios:vs,get:nt,post:lt,patch:OY,put:AY,del:MY,getMe:e=>nt("/api/v1/me",e),getDashboard:e=>nt("/api/v1/me/dashboard",e),updateActiveOrganization:e=>lt("/api/v1/me/active_organization",e),register:e=>lt("/api/v1/auth/register",e),login:e=>lt("/api/v1/auth/login",e),verifyEmail:e=>lt("/api/v1/auth/verify_email",e),forgotPassword:e=>lt("/api/v1/auth/forgot_password",e),resetPassword:e=>lt("/api/v1/auth/reset_password/email",e),getInvitation:e=>nt(`/api/v1/auth/invitations/${e.id}`,e),logout:e=>lt("/api/v1/auth/logout",e),uploadFile:e=>lt("/api/v1/organizations/0/uploads",e),getOrganization:e=>nt("/api/v1/organizations/0",e),updateOrganization:e=>lt("/api/v1/organizations/0",e),getOrganizationMembers:e=>nt("/api/v1/organizations/0/members",e),changeOrganizationMemberRole:({userId:e,...t})=>lt(`/api/v1/organizations/0/members/${e}/change_role`,t),removeOrganizationMember:({userId:e,...t})=>lt(`/api/v1/organizations/0/members/${e}/remove`,t),inviteOrganizationMember:e=>lt("/api/v1/organizations/0/members/invite",e),reinviteOrganizationMember:e=>lt("/api/v1/organizations/0/members/reinvite",e),getAwsConnections:e=>nt("/api/v1/organizations/0/aws_connections",e),updateAwsConnection:e=>lt(`/api/v1/organizations/0/aws_connections/${e.id}`,e),verifyAwsConnection:e=>lt(`/api/v1/organizations/0/aws_connections/${e.id}/verify`,e),getContractDashboard:e=>nt("/api/v1/organizations/0/contracts/dashboard",e),getContractDashboardOrgwideSpendHistoryChart:e=>nt("/api/v1/organizations/0/contracts/dashboard/orgwide_spend_history_chart",e),getContractDashboardEffectiveDiscountRateChart:e=>nt("/api/v1/organizations/0/contracts/dashboard/effective_discount_rate_chart",e),getContractDashboardEffectiveDiscountRate:e=>nt("/api/v1/organizations/0/contracts/dashboard/effective_discount_rate",e),getContractDashboardPeriodSpendChart:e=>nt("/api/v1/organizations/0/contracts/dashboard/period_spend_chart",e),getOrganizationContractCommitments:e=>nt("/api/v1/organizations/0/contract_commitments",e),getCommitmentsRelatedToCommitment:e=>nt("/api/v1/organizations/0/commitments_related_to_commitment",e),getCommitmentsRelatedToContract:e=>nt("/api/v1/organizations/0/commitments_related_to_contract",e),getContractCommitment:e=>nt(`/api/v1/organizations/0/${e.type}/${e.id}`,e),getContractCommitmentHistoryChart:e=>nt(`/api/v1/organizations/0/${e.type}/${e.id}/history_chart`,e),getContracts:e=>nt("/api/v1/organizations/0/contracts",e),createContract:e=>lt("/api/v1/organizations/0/contracts",e),getContract:e=>nt(`/api/v1/organizations/0/contracts/${e.id}`,e),joinOrganization:({id:e,...t})=>lt(`/api/v1/organizations/${e}/join`,t)},NY=e=>({getItem:(t,n={})=>i1(e,t,n),setItem:(t,n)=>{s1(e,t,n)},removeItem:t=>{try{e.removeItem(t)}catch(n){console.log("Remove cache error:",n)}},clear:()=>{try{e.clear()}catch(t){console.log("Clear cache error:",t)}},useState:(t,n,r)=>{r=r||Bk;const[o,i]=_e.useState(r(i1(e,t,n)));return[o,a=>(s1(e,t,a),i(a))]}}),vu=NY(window.localStorage);function i1(e,t,n){try{const r=e.getItem(t);return r?JSON.parse(r):n}catch(r){return console.log("Get cache error: ",r),n}}function s1(e,t,n){try{const r=JSON.stringify(n);e.setItem(t,r)}catch(r){console.log("Set cache error: ",r)}}function mi(e,t){return n=>console.error(`${e} must be used within a Provder`)}const Px=_e.createContext({user:{id:0,email:"",activeOrganization:{id:0,name:""}},setUser:mi("User"),userLoading:!1,userError:null,userAuthed:!1,userUnauthed:!1});function PY({children:e}){const[t,n]=_e.useState(vu.getItem(zd,null)),[r,o]=_e.useState(!t),[i,s]=_e.useState(null),a=_e.useCallback(f=>{n(f),vu.setItem(zd,f),o(!1),s(null),$h(c=>{f?c.setUser({id:f.id,email:f.email}):c.setUser(null)})},[]),l=_e.useCallback(()=>o1.getMe().then(o1.pickData).then(a).catch(f=>{n(null),vu.removeItem(zd),o(!1),s(f),$h(c=>c.setUser(null))}),[a]);_e.useEffect(()=>{l().then(()=>null)},[l]);const u=_e.useMemo(()=>({user:t,setUser:a,userLoading:r,userError:i,userAuthed:!!t,userUnauthed:!r&&!t}),[a,t,i,r]);return q.jsx(Px.Provider,{value:u,children:e})}const zd="cirouser";function $y(){return _e.useContext(Px)}function LY(e,t){return n=>function(o){const i=$y();return i.userLoading?null:t(i)?q.jsx(n,{...o}):q.jsx(hb,{to:e})}}const DY=LY("/dashboard",({userUnauthed:e})=>e);function FY(e,t,n,r){var o=e==null?0:e.length;for(r&&o&&(n=e[--o]);o--;)n=t(n,e[o],o,e);return n}var UY=FY;function jY(e){return function(t,n,r){for(var o=-1,i=Object(t),s=r(t),a=s.length;a--;){var l=s[e?a:++o];if(n(i[l],l,i)===!1)break}return t}}var BY=jY,zY=BY,HY=zY(!0),WY=HY,VY=WY,GY=rl;function qY(e,t){return e&&VY(e,t,GY)}var KY=qY,YY=_y;function XY(e,t){return function(n,r){if(n==null)return n;if(!YY(n))return e(n,r);for(var o=n.length,i=t?o:-1,s=Object(n);(t?i--:++ia))return!1;var u=i.get(e),f=i.get(t);if(u&&f)return u==t&&f==e;var c=-1,d=!0,h=n&vX?new mX:void 0;for(i.set(e,t),i.set(t,e);++cn(t),e.pop())}function wQ(e,t){return q.jsx(e,{...t||{}})}var bQ=typeof Element<"u",TQ=typeof Map=="function",CQ=typeof Set=="function",kQ=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function Su(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var n,r,o;if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(!Su(e[r],t[r]))return!1;return!0}var i;if(TQ&&e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(i=e.entries();!(r=i.next()).done;)if(!t.has(r.value[0]))return!1;for(i=e.entries();!(r=i.next()).done;)if(!Su(r.value[1],t.get(r.value[0])))return!1;return!0}if(CQ&&e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(i=e.entries();!(r=i.next()).done;)if(!t.has(r.value[0]))return!1;return!0}if(kQ&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(t)){if(n=e.length,n!=t.length)return!1;for(r=n;r--!==0;)if(e[r]!==t[r])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf&&typeof e.valueOf=="function"&&typeof t.valueOf=="function")return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString&&typeof e.toString=="function"&&typeof t.toString=="function")return e.toString()===t.toString();if(o=Object.keys(e),n=o.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[r]))return!1;if(bQ&&e instanceof Element)return!1;for(r=n;r--!==0;)if(!((o[r]==="_owner"||o[r]==="__v"||o[r]==="__o")&&e.$$typeof)&&!Su(e[o[r]],t[o[r]]))return!1;return!0}return e!==e&&t!==t}var xQ=function(t,n){try{return Su(t,n)}catch(r){if((r.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw r}};const IQ=Lt(xQ);var RQ=function(e,t,n,r,o,i,s,a){if(!e){var l;if(t===void 0)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,i,s,a],f=0;l=new Error(t.replace(/%s/g,function(){return u[f++]})),l.name="Invariant Violation"}throw l.framesToPop=1,l}},$Q=RQ;const _1=Lt($Q);var OQ=function(t,n,r,o){var i=r?r.call(o,t,n):void 0;if(i!==void 0)return!!i;if(t===n)return!0;if(typeof t!="object"||!t||typeof n!="object"||!n)return!1;var s=Object.keys(t),a=Object.keys(n);if(s.length!==a.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(n),u=0;u(e.BASE="base",e.BODY="body",e.HEAD="head",e.HTML="html",e.LINK="link",e.META="meta",e.NOSCRIPT="noscript",e.SCRIPT="script",e.STYLE="style",e.TITLE="title",e.FRAGMENT="Symbol(react.fragment)",e))(Bx||{}),Vd={link:{rel:["amphtml","canonical","alternate"]},script:{type:["application/ld+json"]},meta:{charset:"",name:["generator","robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]}},v1=Object.values(Bx),Oy={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},MQ=Object.entries(Oy).reduce((e,[t,n])=>(e[n]=t,e),{}),pn="data-rh",Ci={DEFAULT_TITLE:"defaultTitle",DEFER:"defer",ENCODE_SPECIAL_CHARACTERS:"encodeSpecialCharacters",ON_CHANGE_CLIENT_STATE:"onChangeClientState",TITLE_TEMPLATE:"titleTemplate",PRIORITIZE_SEO_TAGS:"prioritizeSeoTags"},ki=(e,t)=>{for(let n=e.length-1;n>=0;n-=1){const r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},NQ=e=>{let t=ki(e,"title");const n=ki(e,Ci.TITLE_TEMPLATE);if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,()=>t);const r=ki(e,Ci.DEFAULT_TITLE);return t||r||void 0},PQ=e=>ki(e,Ci.ON_CHANGE_CLIENT_STATE)||(()=>{}),Gd=(e,t)=>t.filter(n=>typeof n[e]<"u").map(n=>n[e]).reduce((n,r)=>({...n,...r}),{}),LQ=(e,t)=>t.filter(n=>typeof n.base<"u").map(n=>n.base).reverse().reduce((n,r)=>{if(!n.length){const o=Object.keys(r);for(let i=0;iconsole&&typeof console.warn=="function"&&console.warn(e),Ps=(e,t,n)=>{const r={};return n.filter(o=>Array.isArray(o[e])?!0:(typeof o[e]<"u"&&DQ(`Helmet: ${e} should be of type "Array". Instead found type "${typeof o[e]}"`),!1)).map(o=>o[e]).reverse().reduce((o,i)=>{const s={};i.filter(l=>{let u;const f=Object.keys(l);for(let d=0;do.push(l));const a=Object.keys(s);for(let l=0;l{if(Array.isArray(e)&&e.length){for(let n=0;n({baseTag:LQ(["href"],e),bodyAttributes:Gd("bodyAttributes",e),defer:ki(e,Ci.DEFER),encode:ki(e,Ci.ENCODE_SPECIAL_CHARACTERS),htmlAttributes:Gd("htmlAttributes",e),linkTags:Ps("link",["rel","href"],e),metaTags:Ps("meta",["name","charset","http-equiv","property","itemprop"],e),noscriptTags:Ps("noscript",["innerHTML"],e),onChangeClientState:PQ(e),scriptTags:Ps("script",["src","innerHTML"],e),styleTags:Ps("style",["cssText"],e),title:NQ(e),titleAttributes:Gd("titleAttributes",e),prioritizeSeoTags:FQ(e,Ci.PRIORITIZE_SEO_TAGS)}),zx=e=>Array.isArray(e)?e.join(""):e,jQ=(e,t)=>{const n=Object.keys(e);for(let r=0;rArray.isArray(e)?e.reduce((n,r)=>(jQ(r,t)?n.priority.push(r):n.default.push(r),n),{priority:[],default:[]}):{default:e,priority:[]},S1=(e,t)=>({...e,[t]:void 0}),BQ=["noscript","script","style"],Wh=(e,t=!0)=>t===!1?String(e):String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"),Hx=e=>Object.keys(e).reduce((t,n)=>{const r=typeof e[n]<"u"?`${n}="${e[n]}"`:`${n}`;return t?`${t} ${r}`:r},""),zQ=(e,t,n,r)=>{const o=Hx(n),i=zx(t);return o?`<${e} ${pn}="true" ${o}>${Wh(i,r)}`:`<${e} ${pn}="true">${Wh(i,r)}`},HQ=(e,t,n=!0)=>t.reduce((r,o)=>{const i=o,s=Object.keys(i).filter(u=>!(u==="innerHTML"||u==="cssText")).reduce((u,f)=>{const c=typeof i[f]>"u"?f:`${f}="${Wh(i[f],n)}"`;return u?`${u} ${c}`:c},""),a=i.innerHTML||i.cssText||"",l=BQ.indexOf(e)===-1;return`${r}<${e} ${pn}="true" ${s}${l?"/>":`>${a}`}`},""),Wx=(e,t={})=>Object.keys(e).reduce((n,r)=>{const o=Oy[r];return n[o||r]=e[r],n},t),WQ=(e,t,n)=>{const r={key:t,[pn]:!0},o=Wx(n,r);return[_e.createElement("title",o,t)]},Eu=(e,t)=>t.map((n,r)=>{const o={key:r,[pn]:!0};return Object.keys(n).forEach(i=>{const a=Oy[i]||i;if(a==="innerHTML"||a==="cssText"){const l=n.innerHTML||n.cssText;o.dangerouslySetInnerHTML={__html:l}}else o[a]=n[i]}),_e.createElement(e,o)}),Yt=(e,t,n=!0)=>{switch(e){case"title":return{toComponent:()=>WQ(e,t.title,t.titleAttributes),toString:()=>zQ(e,t.title,t.titleAttributes,n)};case"bodyAttributes":case"htmlAttributes":return{toComponent:()=>Wx(t),toString:()=>Hx(t)};default:return{toComponent:()=>Eu(e,t),toString:()=>HQ(e,t,n)}}},VQ=({metaTags:e,linkTags:t,scriptTags:n,encode:r})=>{const o=qd(e,Vd.meta),i=qd(t,Vd.link),s=qd(n,Vd.script);return{priorityMethods:{toComponent:()=>[...Eu("meta",o.priority),...Eu("link",i.priority),...Eu("script",s.priority)],toString:()=>`${Yt("meta",o.priority,r)} ${Yt("link",i.priority,r)} ${Yt("script",s.priority,r)}`},metaTags:o.default,linkTags:i.default,scriptTags:s.default}},GQ=e=>{const{baseTag:t,bodyAttributes:n,encode:r=!0,htmlAttributes:o,noscriptTags:i,styleTags:s,title:a="",titleAttributes:l,prioritizeSeoTags:u}=e;let{linkTags:f,metaTags:c,scriptTags:d}=e,h={toComponent:()=>{},toString:()=>""};return u&&({priorityMethods:h,linkTags:f,metaTags:c,scriptTags:d}=VQ(e)),{priority:h,base:Yt("base",t,r),bodyAttributes:Yt("bodyAttributes",n,r),htmlAttributes:Yt("htmlAttributes",o,r),link:Yt("link",f,r),meta:Yt("meta",c,r),noscript:Yt("noscript",i,r),script:Yt("script",d,r),style:Yt("style",s,r),title:Yt("title",{title:a,titleAttributes:l},r)}},Vh=GQ,zl=[],Vx=!!(typeof window<"u"&&window.document&&window.document.createElement),Gh=class{constructor(e,t){Fn(this,"instances",[]);Fn(this,"canUseDOM",Vx);Fn(this,"context");Fn(this,"value",{setHelmet:e=>{this.context.helmet=e},helmetInstances:{get:()=>this.canUseDOM?zl:this.instances,add:e=>{(this.canUseDOM?zl:this.instances).push(e)},remove:e=>{const t=(this.canUseDOM?zl:this.instances).indexOf(e);(this.canUseDOM?zl:this.instances).splice(t,1)}}});this.context=e,this.canUseDOM=t||!1,t||(e.helmet=Vh({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))}},qQ={},Gx=_e.createContext(qQ),xi,qx=(xi=class extends P.Component{constructor(n){super(n);Fn(this,"helmetData");this.helmetData=new Gh(this.props.context||{},xi.canUseDOM)}render(){return _e.createElement(Gx.Provider,{value:this.helmetData.value},this.props.children)}},Fn(xi,"canUseDOM",Vx),xi),qo=(e,t)=>{const n=document.head||document.querySelector("head"),r=n.querySelectorAll(`${e}[${pn}]`),o=[].slice.call(r),i=[];let s;return t&&t.length&&t.forEach(a=>{const l=document.createElement(e);for(const u in a)if(Object.prototype.hasOwnProperty.call(a,u))if(u==="innerHTML")l.innerHTML=a.innerHTML;else if(u==="cssText")l.styleSheet?l.styleSheet.cssText=a.cssText:l.appendChild(document.createTextNode(a.cssText));else{const f=u,c=typeof a[f]>"u"?"":a[f];l.setAttribute(u,c)}l.setAttribute(pn,"true"),o.some((u,f)=>(s=f,l.isEqualNode(u)))?o.splice(s,1):i.push(l)}),o.forEach(a=>{var l;return(l=a.parentNode)==null?void 0:l.removeChild(a)}),i.forEach(a=>n.appendChild(a)),{oldTags:o,newTags:i}},qh=(e,t)=>{const n=document.getElementsByTagName(e)[0];if(!n)return;const r=n.getAttribute(pn),o=r?r.split(","):[],i=[...o],s=Object.keys(t);for(const a of s){const l=t[a]||"";n.getAttribute(a)!==l&&n.setAttribute(a,l),o.indexOf(a)===-1&&o.push(a);const u=i.indexOf(a);u!==-1&&i.splice(u,1)}for(let a=i.length-1;a>=0;a-=1)n.removeAttribute(i[a]);o.length===i.length?n.removeAttribute(pn):n.getAttribute(pn)!==s.join(",")&&n.setAttribute(pn,s.join(","))},KQ=(e,t)=>{typeof e<"u"&&document.title!==e&&(document.title=zx(e)),qh("title",t)},E1=(e,t)=>{const{baseTag:n,bodyAttributes:r,htmlAttributes:o,linkTags:i,metaTags:s,noscriptTags:a,onChangeClientState:l,scriptTags:u,styleTags:f,title:c,titleAttributes:d}=e;qh("body",r),qh("html",o),KQ(c,d);const h={baseTag:qo("base",n),linkTags:qo("link",i),metaTags:qo("meta",s),noscriptTags:qo("noscript",a),scriptTags:qo("script",u),styleTags:qo("style",f)},m={},_={};Object.keys(h).forEach(v=>{const{newTags:g,oldTags:p}=h[v];g.length&&(m[v]=g),p.length&&(_[v]=h[v].oldTags)}),t&&t(),l(e,m,_)},Ls=null,YQ=e=>{Ls&&cancelAnimationFrame(Ls),e.defer?Ls=requestAnimationFrame(()=>{E1(e,()=>{Ls=null})}):(E1(e),Ls=null)},XQ=YQ,w1=class extends P.Component{constructor(){super(...arguments);Fn(this,"rendered",!1)}shouldComponentUpdate(t){return!AQ(t,this.props)}componentDidUpdate(){this.emitChange()}componentWillUnmount(){const{helmetInstances:t}=this.props.context;t.remove(this),this.emitChange()}emitChange(){const{helmetInstances:t,setHelmet:n}=this.props.context;let r=null;const o=UQ(t.get().map(i=>{const s={...i.props};return delete s.context,s}));qx.canUseDOM?XQ(o):Vh&&(r=Vh(o)),n(r)}init(){if(this.rendered)return;this.rendered=!0;const{helmetInstances:t}=this.props.context;t.add(this),this.emitChange()}render(){return this.init(),null}},Kd,JQ=(Kd=class extends P.Component{shouldComponentUpdate(e){return!IQ(S1(this.props,"helmetData"),S1(e,"helmetData"))}mapNestedChildrenToProps(e,t){if(!t)return null;switch(e.type){case"script":case"noscript":return{innerHTML:t};case"style":return{cssText:t};default:throw new Error(`<${e.type} /> elements are self-closing and can not contain children. Refer to our API for more information.`)}}flattenArrayTypeChildren(e,t,n,r){return{...t,[e.type]:[...t[e.type]||[],{...n,...this.mapNestedChildrenToProps(e,r)}]}}mapObjectTypeChildren(e,t,n,r){switch(e.type){case"title":return{...t,[e.type]:r,titleAttributes:{...n}};case"body":return{...t,bodyAttributes:{...n}};case"html":return{...t,htmlAttributes:{...n}};default:return{...t,[e.type]:{...n}}}}mapArrayTypeChildrenToProps(e,t){let n={...t};return Object.keys(e).forEach(r=>{n={...n,[r]:e[r]}}),n}warnOnInvalidChildren(e,t){return _1(v1.some(n=>e.type===n),typeof e.type=="function"?"You may be attempting to nest components within each other, which is not allowed. Refer to our API for more information.":`Only elements types ${v1.join(", ")} are allowed. Helmet does not support rendering <${e.type}> elements. Refer to our API for more information.`),_1(!t||typeof t=="string"||Array.isArray(t)&&!t.some(n=>typeof n!="string"),`Helmet expects a string as a child of <${e.type}>. Did you forget to wrap your children in braces? ( <${e.type}>{\`\`} ) Refer to our API for more information.`),!0}mapChildrenToProps(e,t){let n={};return _e.Children.forEach(e,r=>{if(!r||!r.props)return;const{children:o,...i}=r.props,s=Object.keys(i).reduce((l,u)=>(l[MQ[u]||u]=i[u],l),{});let{type:a}=r;switch(typeof a=="symbol"?a=a.toString():this.warnOnInvalidChildren(r,o),a){case"Symbol(react.fragment)":t=this.mapChildrenToProps(o,t);break;case"link":case"meta":case"noscript":case"script":case"style":n=this.flattenArrayTypeChildren(r,n,s,o);break;default:t=this.mapObjectTypeChildren(r,t,s,o);break}}),this.mapArrayTypeChildrenToProps(n,t)}render(){const{children:e,...t}=this.props;let n={...t},{helmetData:r}=t;if(e&&(n=this.mapChildrenToProps(e,n)),r&&!(r instanceof Gh)){const o=r;r=new Gh(o.context,!0),delete n.helmetData}return r?_e.createElement(w1,{...n,context:r.value}):_e.createElement(Gx.Consumer,null,o=>_e.createElement(w1,{...n,context:o}))}},Fn(Kd,"defaultProps",{defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1}),Kd);function QQ({title:e,exact:t}){const n=e?`${e} | Ciro`:"Ciro";return r=>function(i){return q.jsxs(q.Fragment,{children:[q.jsx(JQ,{children:q.jsx("title",{children:t?e:n})}),q.jsx(r,{...i})]})}}function Kh(e){return e==="light"?"dark":"light"}const Yh="light",ZQ=_e.createContext({colorMode:Yh,invertedColorMode:Kh(Yh),setColorMode:mi("GlobalViewState")});function eZ({children:e}){const[t,n]=vu.useState("color-mode",Yh),r=P.useCallback(s=>{s||(s=Kh(t)),document.querySelector("html").setAttribute("data-bs-theme",s),n(s)},[t,n]),o=Kh(t),i=P.useMemo(()=>({colorMode:t,setColorMode:r,invertedColorMode:o}),[t,r,o]);return q.jsx(ZQ.Provider,{value:i,children:e})}const tZ="/app/assets/loader-ce7ad8bc.svg";function nZ({show:e,scrim:t,height:n}){if(e=z_(e)?!0:e,t=z_(t)?!0:t,n=n||200,!t&&!e)return null;const r=q.jsx("img",{className:"img",src:tZ,alt:"loading",height:n});return t?q.jsxs("div",{className:U2("screen-loader",e?"screen-loader-show":"screen-loader-hide"),children:[q.jsx("div",{className:"screen-loader-scrim"}),q.jsx("div",{className:"screen-loader-centerer",children:r})]}):r}function rZ(e){const[t,n]=_e.useState(e||!1);return _e.useMemo(()=>oZ(t,n),[t])}function oZ(e,t){return{isOn:e,isOff:!e,setState:t,turnOn:()=>t(!0),turnOff:()=>t(!1),toggle:()=>t(!e)}}const Kx=_e.createContext({isOn:!1,isOff:!1,setState:mi(""),turnOn:()=>mi(""),turnOff:()=>mi(""),toggle:()=>mi("")});function iZ({children:e}){const t=rZ(!1);return q.jsxs(Kx.Provider,{value:t,children:[q.jsx(nZ,{show:t.isOn}),e]})}function sZ(){return _e.useContext(Kx)}function aZ(e){return e=e||!1,t=>function(r){const o=sZ();return I$(()=>{o.setState(e)}),q.jsx(t,{...r})}}function lZ(e){e.delay=function(n,r){return r=r||e.resolve(),r.then(o=>new e(i=>{window.setTimeout(()=>i(o),n)}))},e.prototype.delay=function(n){return e.delay(n,this)},e.delayOr=function(n,r,o){o=o||{buffer:100};const i=Date.now();return r.then(s=>{const a=Date.now()-i,l=n-a;return l<=o.buffer?s:e.delay(l,s)})},e.prototype.delayOr=function(n,r){return e.delayOr(n,this,r)},e.prototype.tap=function(n){return this.then(r=>(n(r),r))},e.prototype.tapCatch=function(n){return this.catch(r=>(n(r),e.reject(r)))},e.prototype.tapTap=function(n){return this.tap(n).tapCatch(n)}}var Yx={exports:{}};(function(e,t){(function(n,r){e.exports=r()})(Er,function(){var n=1e3,r=6e4,o=36e5,i="millisecond",s="second",a="minute",l="hour",u="day",f="week",c="month",d="quarter",h="year",m="date",_="Invalid Date",v=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,p={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(j){var N=["th","st","nd","rd"],R=j%100;return"["+j+(N[(R-20)%10]||N[R]||N[0])+"]"}},y=function(j,N,R){var L=String(j);return!L||L.length>=N?j:""+Array(N+1-L.length).join(R)+j},S={s:y,z:function(j){var N=-j.utcOffset(),R=Math.abs(N),L=Math.floor(R/60),T=R%60;return(N<=0?"+":"-")+y(L,2,"0")+":"+y(T,2,"0")},m:function j(N,R){if(N.date()1)return j($[0])}else{var H=N.name;E[H]=N,T=H}return!L&&T&&(b=T),T||!L&&b},I=function(j,N){if(x(j))return j.clone();var R=typeof N=="object"?N:{};return R.date=j,R.args=arguments,new W(R)},A=S;A.l=D,A.i=x,A.w=function(j,N){return I(j,{locale:N.$L,utc:N.$u,x:N.$x,$offset:N.$offset})};var W=function(){function j(R){this.$L=D(R.locale,null,!0),this.parse(R),this.$x=this.$x||R.x||{},this[w]=!0}var N=j.prototype;return N.parse=function(R){this.$d=function(L){var T=L.date,O=L.utc;if(T===null)return new Date(NaN);if(A.u(T))return new Date;if(T instanceof Date)return new Date(T);if(typeof T=="string"&&!/Z$/i.test(T)){var $=T.match(v);if($){var H=$[2]-1||0,G=($[7]||"0").substring(0,3);return O?new Date(Date.UTC($[1],H,$[3]||1,$[4]||0,$[5]||0,$[6]||0,G)):new Date($[1],H,$[3]||1,$[4]||0,$[5]||0,$[6]||0,G)}}return new Date(T)}(R),this.init()},N.init=function(){var R=this.$d;this.$y=R.getFullYear(),this.$M=R.getMonth(),this.$D=R.getDate(),this.$W=R.getDay(),this.$H=R.getHours(),this.$m=R.getMinutes(),this.$s=R.getSeconds(),this.$ms=R.getMilliseconds()},N.$utils=function(){return A},N.isValid=function(){return this.$d.toString()!==_},N.isSame=function(R,L){var T=I(R);return this.startOf(L)<=T&&T<=this.endOf(L)},N.isAfter=function(R,L){return I(R)new URLSearchParams(e),[e])}function mZ(){eb(),$y(),hZ();const{state:e}=rs(),t=e==null?void 0:e.invitation;return P.useState({email:(t==null?void 0:t.email)||"",password:""}),q.jsx("div",{children:"hello"})}lZ(window.Promise);function gZ(){return q.jsx(eZ,{children:q.jsx(PY,{children:q.jsx(iZ,{children:q.jsx(qx,{children:q.jsx(yZ,{})})})})})}function yZ(){return q.jsx(L2,{basename:"/app/",children:q.jsx(_Z,{})})}function _Z(){return q.jsx(SZ,{})}const vZ=jk(M2);function SZ(){var t;const{user:e}=$y();return q.jsxs(vZ,{children:[q.jsx(Hp,{path:"/",exact:!0,element:EZ(DY,aZ(),QQ({title:"Authenticate"}),mZ)}),q.jsx(Hp,{path:"/*",element:q.jsx(hb,{to:"/"})})]},(t=e==null?void 0:e.activeOrganization)==null?void 0:t.id)}function EZ(...e){return wQ(EQ(...e))}const wZ={};Yd.createRoot(document.getElementById("root")).render(q.jsx(_e.StrictMode,{children:q.jsx(pb,{theme:wZ,children:q.jsx(gZ,{})})})); diff --git a/web-dist/assets/index-e6c1a3fc.css b/web-dist/assets/index-e6c1a3fc.css new file mode 100644 index 00000000..df0b2a07 --- /dev/null +++ b/web-dist/assets/index-e6c1a3fc.css @@ -0,0 +1 @@ +.screen-loader{width:100vw;height:100vh;z-index:5000;position:fixed;display:none;top:0;left:0}.screen-loader .screen-loader-scrim{position:absolute;background-color:#fff3;width:100%;height:100%;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}.screen-loader .screen-loader-centerer{position:absolute;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.screen-loader .img{width:100%}.screen-loader-show{display:block}*,*:before,*:after{box-sizing:border-box}input,button,textarea,select{font:inherit}button,select{text-transform:none}body{margin:0;font-family:var(--mantine-font-family);font-size:var(--mantine-font-size-md);line-height:var(--mantine-line-height);background-color:var(--mantine-color-body);color:var(--mantine-color-text);-webkit-font-smoothing:var(--mantine-webkit-font-smoothing);-moz-osx-font-smoothing:var(--mantine-moz-font-smoothing)}@media screen and (max-device-width: 31.25em){body{-webkit-text-size-adjust:100%}}@media (prefers-reduced-motion: reduce){[data-respect-reduced-motion] [data-reduce-motion]{transition:none;animation:none}}[data-mantine-color-scheme=light] .mantine-light-hidden,[data-mantine-color-scheme=dark] .mantine-dark-hidden{display:none}.mantine-focus-auto:focus-visible{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.mantine-focus-always:focus{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.mantine-focus-never:focus{outline:none}.mantine-active:active{transform:translateY(calc(.0625rem * var(--mantine-scale)))}:where([dir=rtl]) .mantine-rotate-rtl{transform:rotate(180deg)}:root{color-scheme:var(--mantine-color-scheme);--mantine-z-index-app: 100;--mantine-z-index-modal: 200;--mantine-z-index-popover: 300;--mantine-z-index-overlay: 400;--mantine-z-index-max: 9999;--mantine-scale: 1;--mantine-cursor-type: default;--mantine-webkit-font-smoothing: antialiased;--mantine-color-scheme: light dark;--mantine-moz-font-smoothing: grayscale;--mantine-color-white: #fff;--mantine-color-black: #000;--mantine-line-height: 1.55;--mantine-font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;--mantine-font-family-monospace: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;--mantine-font-family-headings: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;--mantine-heading-font-weight: 700;--mantine-radius-default: calc(.25rem * var(--mantine-scale));--mantine-primary-color-0: var(--mantine-color-blue-0);--mantine-primary-color-1: var(--mantine-color-blue-1);--mantine-primary-color-2: var(--mantine-color-blue-2);--mantine-primary-color-3: var(--mantine-color-blue-3);--mantine-primary-color-4: var(--mantine-color-blue-4);--mantine-primary-color-5: var(--mantine-color-blue-5);--mantine-primary-color-6: var(--mantine-color-blue-6);--mantine-primary-color-7: var(--mantine-color-blue-7);--mantine-primary-color-8: var(--mantine-color-blue-8);--mantine-primary-color-9: var(--mantine-color-blue-9);--mantine-primary-color-filled: var(--mantine-color-blue-filled);--mantine-primary-color-filled-hover: var(--mantine-color-blue-filled-hover);--mantine-primary-color-light: var(--mantine-color-blue-light);--mantine-primary-color-light-hover: var(--mantine-color-blue-light-hover);--mantine-primary-color-light-color: var(--mantine-color-blue-light-color);--mantine-breakpoint-xs: 36em;--mantine-breakpoint-sm: 48em;--mantine-breakpoint-md: 62em;--mantine-breakpoint-lg: 75em;--mantine-breakpoint-xl: 88em;--mantine-spacing-xs: calc(.625rem * var(--mantine-scale));--mantine-spacing-sm: calc(.75rem * var(--mantine-scale));--mantine-spacing-md: calc(1rem * var(--mantine-scale));--mantine-spacing-lg: calc(1.25rem * var(--mantine-scale));--mantine-spacing-xl: calc(2rem * var(--mantine-scale));--mantine-font-size-xs: calc(.75rem * var(--mantine-scale));--mantine-font-size-sm: calc(.875rem * var(--mantine-scale));--mantine-font-size-md: calc(1rem * var(--mantine-scale));--mantine-font-size-lg: calc(1.125rem * var(--mantine-scale));--mantine-font-size-xl: calc(1.25rem * var(--mantine-scale));--mantine-line-height-xs: 1.4;--mantine-line-height-sm: 1.45;--mantine-line-height-md: 1.55;--mantine-line-height-lg: 1.6;--mantine-line-height-xl: 1.65;--mantine-shadow-xs: 0 calc(.0625rem * var(--mantine-scale)) calc(.1875rem * var(--mantine-scale)) rgba(0, 0, 0, .05), 0 calc(.0625rem * var(--mantine-scale)) calc(.125rem * var(--mantine-scale)) rgba(0, 0, 0, .1);--mantine-shadow-sm: 0 calc(.0625rem * var(--mantine-scale)) calc(.1875rem * var(--mantine-scale)) rgba(0, 0, 0, .05), rgba(0, 0, 0, .05) 0 calc(.625rem * var(--mantine-scale)) calc(.9375rem * var(--mantine-scale)) calc(-.3125rem * var(--mantine-scale)), rgba(0, 0, 0, .04) 0 calc(.4375rem * var(--mantine-scale)) calc(.4375rem * var(--mantine-scale)) calc(-.3125rem * var(--mantine-scale));--mantine-shadow-md: 0 calc(.0625rem * var(--mantine-scale)) calc(.1875rem * var(--mantine-scale)) rgba(0, 0, 0, .05), rgba(0, 0, 0, .05) 0 calc(1.25rem * var(--mantine-scale)) calc(1.5625rem * var(--mantine-scale)) calc(-.3125rem * var(--mantine-scale)), rgba(0, 0, 0, .04) 0 calc(.625rem * var(--mantine-scale)) calc(.625rem * var(--mantine-scale)) calc(-.3125rem * var(--mantine-scale));--mantine-shadow-lg: 0 calc(.0625rem * var(--mantine-scale)) calc(.1875rem * var(--mantine-scale)) rgba(0, 0, 0, .05), rgba(0, 0, 0, .05) 0 calc(1.75rem * var(--mantine-scale)) calc(1.4375rem * var(--mantine-scale)) calc(-.4375rem * var(--mantine-scale)), rgba(0, 0, 0, .04) 0 calc(.75rem * var(--mantine-scale)) calc(.75rem * var(--mantine-scale)) calc(-.4375rem * var(--mantine-scale));--mantine-shadow-xl: 0 calc(.0625rem * var(--mantine-scale)) calc(.1875rem * var(--mantine-scale)) rgba(0, 0, 0, .05), rgba(0, 0, 0, .05) 0 calc(2.25rem * var(--mantine-scale)) calc(1.75rem * var(--mantine-scale)) calc(-.4375rem * var(--mantine-scale)), rgba(0, 0, 0, .04) 0 calc(1.0625rem * var(--mantine-scale)) calc(1.0625rem * var(--mantine-scale)) calc(-.4375rem * var(--mantine-scale));--mantine-radius-xs: calc(.125rem * var(--mantine-scale));--mantine-radius-sm: calc(.25rem * var(--mantine-scale));--mantine-radius-md: calc(.5rem * var(--mantine-scale));--mantine-radius-lg: calc(1rem * var(--mantine-scale));--mantine-radius-xl: calc(2rem * var(--mantine-scale));--mantine-color-dark-0: #c9c9c9;--mantine-color-dark-1: #b8b8b8;--mantine-color-dark-2: #828282;--mantine-color-dark-3: #696969;--mantine-color-dark-4: #424242;--mantine-color-dark-5: #3b3b3b;--mantine-color-dark-6: #2e2e2e;--mantine-color-dark-7: #242424;--mantine-color-dark-8: #1f1f1f;--mantine-color-dark-9: #141414;--mantine-color-gray-0: #f8f9fa;--mantine-color-gray-1: #f1f3f5;--mantine-color-gray-2: #e9ecef;--mantine-color-gray-3: #dee2e6;--mantine-color-gray-4: #ced4da;--mantine-color-gray-5: #adb5bd;--mantine-color-gray-6: #868e96;--mantine-color-gray-7: #495057;--mantine-color-gray-8: #343a40;--mantine-color-gray-9: #212529;--mantine-color-red-0: #fff5f5;--mantine-color-red-1: #ffe3e3;--mantine-color-red-2: #ffc9c9;--mantine-color-red-3: #ffa8a8;--mantine-color-red-4: #ff8787;--mantine-color-red-5: #ff6b6b;--mantine-color-red-6: #fa5252;--mantine-color-red-7: #f03e3e;--mantine-color-red-8: #e03131;--mantine-color-red-9: #c92a2a;--mantine-color-pink-0: #fff0f6;--mantine-color-pink-1: #ffdeeb;--mantine-color-pink-2: #fcc2d7;--mantine-color-pink-3: #faa2c1;--mantine-color-pink-4: #f783ac;--mantine-color-pink-5: #f06595;--mantine-color-pink-6: #e64980;--mantine-color-pink-7: #d6336c;--mantine-color-pink-8: #c2255c;--mantine-color-pink-9: #a61e4d;--mantine-color-grape-0: #f8f0fc;--mantine-color-grape-1: #f3d9fa;--mantine-color-grape-2: #eebefa;--mantine-color-grape-3: #e599f7;--mantine-color-grape-4: #da77f2;--mantine-color-grape-5: #cc5de8;--mantine-color-grape-6: #be4bdb;--mantine-color-grape-7: #ae3ec9;--mantine-color-grape-8: #9c36b5;--mantine-color-grape-9: #862e9c;--mantine-color-violet-0: #f3f0ff;--mantine-color-violet-1: #e5dbff;--mantine-color-violet-2: #d0bfff;--mantine-color-violet-3: #b197fc;--mantine-color-violet-4: #9775fa;--mantine-color-violet-5: #845ef7;--mantine-color-violet-6: #7950f2;--mantine-color-violet-7: #7048e8;--mantine-color-violet-8: #6741d9;--mantine-color-violet-9: #5f3dc4;--mantine-color-indigo-0: #edf2ff;--mantine-color-indigo-1: #dbe4ff;--mantine-color-indigo-2: #bac8ff;--mantine-color-indigo-3: #91a7ff;--mantine-color-indigo-4: #748ffc;--mantine-color-indigo-5: #5c7cfa;--mantine-color-indigo-6: #4c6ef5;--mantine-color-indigo-7: #4263eb;--mantine-color-indigo-8: #3b5bdb;--mantine-color-indigo-9: #364fc7;--mantine-color-blue-0: #e7f5ff;--mantine-color-blue-1: #d0ebff;--mantine-color-blue-2: #a5d8ff;--mantine-color-blue-3: #74c0fc;--mantine-color-blue-4: #4dabf7;--mantine-color-blue-5: #339af0;--mantine-color-blue-6: #228be6;--mantine-color-blue-7: #1c7ed6;--mantine-color-blue-8: #1971c2;--mantine-color-blue-9: #1864ab;--mantine-color-cyan-0: #e3fafc;--mantine-color-cyan-1: #c5f6fa;--mantine-color-cyan-2: #99e9f2;--mantine-color-cyan-3: #66d9e8;--mantine-color-cyan-4: #3bc9db;--mantine-color-cyan-5: #22b8cf;--mantine-color-cyan-6: #15aabf;--mantine-color-cyan-7: #1098ad;--mantine-color-cyan-8: #0c8599;--mantine-color-cyan-9: #0b7285;--mantine-color-teal-0: #e6fcf5;--mantine-color-teal-1: #c3fae8;--mantine-color-teal-2: #96f2d7;--mantine-color-teal-3: #63e6be;--mantine-color-teal-4: #38d9a9;--mantine-color-teal-5: #20c997;--mantine-color-teal-6: #12b886;--mantine-color-teal-7: #0ca678;--mantine-color-teal-8: #099268;--mantine-color-teal-9: #087f5b;--mantine-color-green-0: #ebfbee;--mantine-color-green-1: #d3f9d8;--mantine-color-green-2: #b2f2bb;--mantine-color-green-3: #8ce99a;--mantine-color-green-4: #69db7c;--mantine-color-green-5: #51cf66;--mantine-color-green-6: #40c057;--mantine-color-green-7: #37b24d;--mantine-color-green-8: #2f9e44;--mantine-color-green-9: #2b8a3e;--mantine-color-lime-0: #f4fce3;--mantine-color-lime-1: #e9fac8;--mantine-color-lime-2: #d8f5a2;--mantine-color-lime-3: #c0eb75;--mantine-color-lime-4: #a9e34b;--mantine-color-lime-5: #94d82d;--mantine-color-lime-6: #82c91e;--mantine-color-lime-7: #74b816;--mantine-color-lime-8: #66a80f;--mantine-color-lime-9: #5c940d;--mantine-color-yellow-0: #fff9db;--mantine-color-yellow-1: #fff3bf;--mantine-color-yellow-2: #ffec99;--mantine-color-yellow-3: #ffe066;--mantine-color-yellow-4: #ffd43b;--mantine-color-yellow-5: #fcc419;--mantine-color-yellow-6: #fab005;--mantine-color-yellow-7: #f59f00;--mantine-color-yellow-8: #f08c00;--mantine-color-yellow-9: #e67700;--mantine-color-orange-0: #fff4e6;--mantine-color-orange-1: #ffe8cc;--mantine-color-orange-2: #ffd8a8;--mantine-color-orange-3: #ffc078;--mantine-color-orange-4: #ffa94d;--mantine-color-orange-5: #ff922b;--mantine-color-orange-6: #fd7e14;--mantine-color-orange-7: #f76707;--mantine-color-orange-8: #e8590c;--mantine-color-orange-9: #d9480f;--mantine-h1-font-size: calc(2.125rem * var(--mantine-scale));--mantine-h1-line-height: 1.3;--mantine-h1-font-weight: 700;--mantine-h2-font-size: calc(1.625rem * var(--mantine-scale));--mantine-h2-line-height: 1.35;--mantine-h2-font-weight: 700;--mantine-h3-font-size: calc(1.375rem * var(--mantine-scale));--mantine-h3-line-height: 1.4;--mantine-h3-font-weight: 700;--mantine-h4-font-size: calc(1.125rem * var(--mantine-scale));--mantine-h4-line-height: 1.45;--mantine-h4-font-weight: 700;--mantine-h5-font-size: calc(1rem * var(--mantine-scale));--mantine-h5-line-height: 1.5;--mantine-h5-font-weight: 700;--mantine-h6-font-size: calc(.875rem * var(--mantine-scale));--mantine-h6-line-height: 1.5;--mantine-h6-font-weight: 700}:root[data-mantine-color-scheme=dark]{--mantine-color-scheme: dark;--mantine-primary-color-contrast: var(--mantine-color-white);--mantine-color-bright: var(--mantine-color-white);--mantine-color-text: var(--mantine-color-dark-0);--mantine-color-body: var(--mantine-color-dark-7);--mantine-color-error: var(--mantine-color-red-8);--mantine-color-placeholder: var(--mantine-color-dark-3);--mantine-color-anchor: var(--mantine-color-blue-4);--mantine-color-default: var(--mantine-color-dark-6);--mantine-color-default-hover: var(--mantine-color-dark-5);--mantine-color-default-color: var(--mantine-color-white);--mantine-color-default-border: var(--mantine-color-dark-4);--mantine-color-dimmed: var(--mantine-color-dark-2);--mantine-color-dark-text: var(--mantine-color-dark-4);--mantine-color-dark-filled: var(--mantine-color-dark-8);--mantine-color-dark-filled-hover: var(--mantine-color-dark-7);--mantine-color-dark-light: rgba(36, 36, 36, .15);--mantine-color-dark-light-hover: rgba(36, 36, 36, .2);--mantine-color-dark-light-color: var(--mantine-color-dark-3);--mantine-color-dark-outline: var(--mantine-color-dark-4);--mantine-color-dark-outline-hover: rgba(36, 36, 36, .05);--mantine-color-gray-text: var(--mantine-color-gray-4);--mantine-color-gray-filled: var(--mantine-color-gray-8);--mantine-color-gray-filled-hover: var(--mantine-color-gray-9);--mantine-color-gray-light: rgba(134, 142, 150, .15);--mantine-color-gray-light-hover: rgba(134, 142, 150, .2);--mantine-color-gray-light-color: var(--mantine-color-gray-3);--mantine-color-gray-outline: var(--mantine-color-gray-4);--mantine-color-gray-outline-hover: rgba(206, 212, 218, .05);--mantine-color-red-text: var(--mantine-color-red-4);--mantine-color-red-filled: var(--mantine-color-red-8);--mantine-color-red-filled-hover: var(--mantine-color-red-9);--mantine-color-red-light: rgba(250, 82, 82, .15);--mantine-color-red-light-hover: rgba(250, 82, 82, .2);--mantine-color-red-light-color: var(--mantine-color-red-3);--mantine-color-red-outline: var(--mantine-color-red-4);--mantine-color-red-outline-hover: rgba(255, 135, 135, .05);--mantine-color-pink-text: var(--mantine-color-pink-4);--mantine-color-pink-filled: var(--mantine-color-pink-8);--mantine-color-pink-filled-hover: var(--mantine-color-pink-9);--mantine-color-pink-light: rgba(230, 73, 128, .15);--mantine-color-pink-light-hover: rgba(230, 73, 128, .2);--mantine-color-pink-light-color: var(--mantine-color-pink-3);--mantine-color-pink-outline: var(--mantine-color-pink-4);--mantine-color-pink-outline-hover: rgba(247, 131, 172, .05);--mantine-color-grape-text: var(--mantine-color-grape-4);--mantine-color-grape-filled: var(--mantine-color-grape-8);--mantine-color-grape-filled-hover: var(--mantine-color-grape-9);--mantine-color-grape-light: rgba(190, 75, 219, .15);--mantine-color-grape-light-hover: rgba(190, 75, 219, .2);--mantine-color-grape-light-color: var(--mantine-color-grape-3);--mantine-color-grape-outline: var(--mantine-color-grape-4);--mantine-color-grape-outline-hover: rgba(218, 119, 242, .05);--mantine-color-violet-text: var(--mantine-color-violet-4);--mantine-color-violet-filled: var(--mantine-color-violet-8);--mantine-color-violet-filled-hover: var(--mantine-color-violet-9);--mantine-color-violet-light: rgba(121, 80, 242, .15);--mantine-color-violet-light-hover: rgba(121, 80, 242, .2);--mantine-color-violet-light-color: var(--mantine-color-violet-3);--mantine-color-violet-outline: var(--mantine-color-violet-4);--mantine-color-violet-outline-hover: rgba(151, 117, 250, .05);--mantine-color-indigo-text: var(--mantine-color-indigo-4);--mantine-color-indigo-filled: var(--mantine-color-indigo-8);--mantine-color-indigo-filled-hover: var(--mantine-color-indigo-9);--mantine-color-indigo-light: rgba(76, 110, 245, .15);--mantine-color-indigo-light-hover: rgba(76, 110, 245, .2);--mantine-color-indigo-light-color: var(--mantine-color-indigo-3);--mantine-color-indigo-outline: var(--mantine-color-indigo-4);--mantine-color-indigo-outline-hover: rgba(116, 143, 252, .05);--mantine-color-blue-text: var(--mantine-color-blue-4);--mantine-color-blue-filled: var(--mantine-color-blue-8);--mantine-color-blue-filled-hover: var(--mantine-color-blue-9);--mantine-color-blue-light: rgba(34, 139, 230, .15);--mantine-color-blue-light-hover: rgba(34, 139, 230, .2);--mantine-color-blue-light-color: var(--mantine-color-blue-3);--mantine-color-blue-outline: var(--mantine-color-blue-4);--mantine-color-blue-outline-hover: rgba(77, 171, 247, .05);--mantine-color-cyan-text: var(--mantine-color-cyan-4);--mantine-color-cyan-filled: var(--mantine-color-cyan-8);--mantine-color-cyan-filled-hover: var(--mantine-color-cyan-9);--mantine-color-cyan-light: rgba(21, 170, 191, .15);--mantine-color-cyan-light-hover: rgba(21, 170, 191, .2);--mantine-color-cyan-light-color: var(--mantine-color-cyan-3);--mantine-color-cyan-outline: var(--mantine-color-cyan-4);--mantine-color-cyan-outline-hover: rgba(59, 201, 219, .05);--mantine-color-teal-text: var(--mantine-color-teal-4);--mantine-color-teal-filled: var(--mantine-color-teal-8);--mantine-color-teal-filled-hover: var(--mantine-color-teal-9);--mantine-color-teal-light: rgba(18, 184, 134, .15);--mantine-color-teal-light-hover: rgba(18, 184, 134, .2);--mantine-color-teal-light-color: var(--mantine-color-teal-3);--mantine-color-teal-outline: var(--mantine-color-teal-4);--mantine-color-teal-outline-hover: rgba(56, 217, 169, .05);--mantine-color-green-text: var(--mantine-color-green-4);--mantine-color-green-filled: var(--mantine-color-green-8);--mantine-color-green-filled-hover: var(--mantine-color-green-9);--mantine-color-green-light: rgba(64, 192, 87, .15);--mantine-color-green-light-hover: rgba(64, 192, 87, .2);--mantine-color-green-light-color: var(--mantine-color-green-3);--mantine-color-green-outline: var(--mantine-color-green-4);--mantine-color-green-outline-hover: rgba(105, 219, 124, .05);--mantine-color-lime-text: var(--mantine-color-lime-4);--mantine-color-lime-filled: var(--mantine-color-lime-8);--mantine-color-lime-filled-hover: var(--mantine-color-lime-9);--mantine-color-lime-light: rgba(130, 201, 30, .15);--mantine-color-lime-light-hover: rgba(130, 201, 30, .2);--mantine-color-lime-light-color: var(--mantine-color-lime-3);--mantine-color-lime-outline: var(--mantine-color-lime-4);--mantine-color-lime-outline-hover: rgba(169, 227, 75, .05);--mantine-color-yellow-text: var(--mantine-color-yellow-4);--mantine-color-yellow-filled: var(--mantine-color-yellow-8);--mantine-color-yellow-filled-hover: var(--mantine-color-yellow-9);--mantine-color-yellow-light: rgba(250, 176, 5, .15);--mantine-color-yellow-light-hover: rgba(250, 176, 5, .2);--mantine-color-yellow-light-color: var(--mantine-color-yellow-3);--mantine-color-yellow-outline: var(--mantine-color-yellow-4);--mantine-color-yellow-outline-hover: rgba(255, 212, 59, .05);--mantine-color-orange-text: var(--mantine-color-orange-4);--mantine-color-orange-filled: var(--mantine-color-orange-8);--mantine-color-orange-filled-hover: var(--mantine-color-orange-9);--mantine-color-orange-light: rgba(253, 126, 20, .15);--mantine-color-orange-light-hover: rgba(253, 126, 20, .2);--mantine-color-orange-light-color: var(--mantine-color-orange-3);--mantine-color-orange-outline: var(--mantine-color-orange-4);--mantine-color-orange-outline-hover: rgba(255, 169, 77, .05)}:root[data-mantine-color-scheme=light]{--mantine-color-scheme: light;--mantine-color-bright: var(--mantine-color-black);--mantine-color-text: var(--mantine-color-black);--mantine-color-body: var(--mantine-color-white);--mantine-primary-color-contrast: var(--mantine-color-white);--mantine-color-error: var(--mantine-color-red-6);--mantine-color-placeholder: var(--mantine-color-gray-5);--mantine-color-anchor: var(--mantine-primary-color-filled);--mantine-color-default: var(--mantine-color-white);--mantine-color-default-hover: var(--mantine-color-gray-0);--mantine-color-default-color: var(--mantine-color-gray-9);--mantine-color-default-border: var(--mantine-color-gray-4);--mantine-color-dimmed: var(--mantine-color-gray-6);--mantine-color-dark-text: var(--mantine-color-dark-filled);--mantine-color-dark-filled: var(--mantine-color-dark-6);--mantine-color-dark-filled-hover: var(--mantine-color-dark-7);--mantine-color-dark-light: rgba(56, 56, 56, .1);--mantine-color-dark-light-hover: rgba(56, 56, 56, .12);--mantine-color-dark-light-color: var(--mantine-color-dark-6);--mantine-color-dark-outline: var(--mantine-color-dark-6);--mantine-color-dark-outline-hover: rgba(56, 56, 56, .05);--mantine-color-gray-text: var(--mantine-color-gray-filled);--mantine-color-gray-filled: var(--mantine-color-gray-6);--mantine-color-gray-filled-hover: var(--mantine-color-gray-7);--mantine-color-gray-light: rgba(134, 142, 150, .1);--mantine-color-gray-light-hover: rgba(134, 142, 150, .12);--mantine-color-gray-light-color: var(--mantine-color-gray-6);--mantine-color-gray-outline: var(--mantine-color-gray-6);--mantine-color-gray-outline-hover: rgba(134, 142, 150, .05);--mantine-color-red-text: var(--mantine-color-red-filled);--mantine-color-red-filled: var(--mantine-color-red-6);--mantine-color-red-filled-hover: var(--mantine-color-red-7);--mantine-color-red-light: rgba(250, 82, 82, .1);--mantine-color-red-light-hover: rgba(250, 82, 82, .12);--mantine-color-red-light-color: var(--mantine-color-red-6);--mantine-color-red-outline: var(--mantine-color-red-6);--mantine-color-red-outline-hover: rgba(250, 82, 82, .05);--mantine-color-pink-text: var(--mantine-color-pink-filled);--mantine-color-pink-filled: var(--mantine-color-pink-6);--mantine-color-pink-filled-hover: var(--mantine-color-pink-7);--mantine-color-pink-light: rgba(230, 73, 128, .1);--mantine-color-pink-light-hover: rgba(230, 73, 128, .12);--mantine-color-pink-light-color: var(--mantine-color-pink-6);--mantine-color-pink-outline: var(--mantine-color-pink-6);--mantine-color-pink-outline-hover: rgba(230, 73, 128, .05);--mantine-color-grape-text: var(--mantine-color-grape-filled);--mantine-color-grape-filled: var(--mantine-color-grape-6);--mantine-color-grape-filled-hover: var(--mantine-color-grape-7);--mantine-color-grape-light: rgba(190, 75, 219, .1);--mantine-color-grape-light-hover: rgba(190, 75, 219, .12);--mantine-color-grape-light-color: var(--mantine-color-grape-6);--mantine-color-grape-outline: var(--mantine-color-grape-6);--mantine-color-grape-outline-hover: rgba(190, 75, 219, .05);--mantine-color-violet-text: var(--mantine-color-violet-filled);--mantine-color-violet-filled: var(--mantine-color-violet-6);--mantine-color-violet-filled-hover: var(--mantine-color-violet-7);--mantine-color-violet-light: rgba(121, 80, 242, .1);--mantine-color-violet-light-hover: rgba(121, 80, 242, .12);--mantine-color-violet-light-color: var(--mantine-color-violet-6);--mantine-color-violet-outline: var(--mantine-color-violet-6);--mantine-color-violet-outline-hover: rgba(121, 80, 242, .05);--mantine-color-indigo-text: var(--mantine-color-indigo-filled);--mantine-color-indigo-filled: var(--mantine-color-indigo-6);--mantine-color-indigo-filled-hover: var(--mantine-color-indigo-7);--mantine-color-indigo-light: rgba(76, 110, 245, .1);--mantine-color-indigo-light-hover: rgba(76, 110, 245, .12);--mantine-color-indigo-light-color: var(--mantine-color-indigo-6);--mantine-color-indigo-outline: var(--mantine-color-indigo-6);--mantine-color-indigo-outline-hover: rgba(76, 110, 245, .05);--mantine-color-blue-text: var(--mantine-color-blue-filled);--mantine-color-blue-filled: var(--mantine-color-blue-6);--mantine-color-blue-filled-hover: var(--mantine-color-blue-7);--mantine-color-blue-light: rgba(34, 139, 230, .1);--mantine-color-blue-light-hover: rgba(34, 139, 230, .12);--mantine-color-blue-light-color: var(--mantine-color-blue-6);--mantine-color-blue-outline: var(--mantine-color-blue-6);--mantine-color-blue-outline-hover: rgba(34, 139, 230, .05);--mantine-color-cyan-text: var(--mantine-color-cyan-filled);--mantine-color-cyan-filled: var(--mantine-color-cyan-6);--mantine-color-cyan-filled-hover: var(--mantine-color-cyan-7);--mantine-color-cyan-light: rgba(21, 170, 191, .1);--mantine-color-cyan-light-hover: rgba(21, 170, 191, .12);--mantine-color-cyan-light-color: var(--mantine-color-cyan-6);--mantine-color-cyan-outline: var(--mantine-color-cyan-6);--mantine-color-cyan-outline-hover: rgba(21, 170, 191, .05);--mantine-color-teal-text: var(--mantine-color-teal-filled);--mantine-color-teal-filled: var(--mantine-color-teal-6);--mantine-color-teal-filled-hover: var(--mantine-color-teal-7);--mantine-color-teal-light: rgba(18, 184, 134, .1);--mantine-color-teal-light-hover: rgba(18, 184, 134, .12);--mantine-color-teal-light-color: var(--mantine-color-teal-6);--mantine-color-teal-outline: var(--mantine-color-teal-6);--mantine-color-teal-outline-hover: rgba(18, 184, 134, .05);--mantine-color-green-text: var(--mantine-color-green-filled);--mantine-color-green-filled: var(--mantine-color-green-6);--mantine-color-green-filled-hover: var(--mantine-color-green-7);--mantine-color-green-light: rgba(64, 192, 87, .1);--mantine-color-green-light-hover: rgba(64, 192, 87, .12);--mantine-color-green-light-color: var(--mantine-color-green-6);--mantine-color-green-outline: var(--mantine-color-green-6);--mantine-color-green-outline-hover: rgba(64, 192, 87, .05);--mantine-color-lime-text: var(--mantine-color-lime-filled);--mantine-color-lime-filled: var(--mantine-color-lime-6);--mantine-color-lime-filled-hover: var(--mantine-color-lime-7);--mantine-color-lime-light: rgba(130, 201, 30, .1);--mantine-color-lime-light-hover: rgba(130, 201, 30, .12);--mantine-color-lime-light-color: var(--mantine-color-lime-6);--mantine-color-lime-outline: var(--mantine-color-lime-6);--mantine-color-lime-outline-hover: rgba(130, 201, 30, .05);--mantine-color-yellow-text: var(--mantine-color-yellow-filled);--mantine-color-yellow-filled: var(--mantine-color-yellow-6);--mantine-color-yellow-filled-hover: var(--mantine-color-yellow-7);--mantine-color-yellow-light: rgba(250, 176, 5, .1);--mantine-color-yellow-light-hover: rgba(250, 176, 5, .12);--mantine-color-yellow-light-color: var(--mantine-color-yellow-6);--mantine-color-yellow-outline: var(--mantine-color-yellow-6);--mantine-color-yellow-outline-hover: rgba(250, 176, 5, .05);--mantine-color-orange-text: var(--mantine-color-orange-filled);--mantine-color-orange-filled: var(--mantine-color-orange-6);--mantine-color-orange-filled-hover: var(--mantine-color-orange-7);--mantine-color-orange-light: rgba(253, 126, 20, .1);--mantine-color-orange-light-hover: rgba(253, 126, 20, .12);--mantine-color-orange-light-color: var(--mantine-color-orange-6);--mantine-color-orange-outline: var(--mantine-color-orange-6);--mantine-color-orange-outline-hover: rgba(253, 126, 20, .05)}.m_d57069b5{--scrollarea-scrollbar-size: calc(.75rem * var(--mantine-scale));position:relative;overflow:hidden}.m_c0783ff9{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;width:100%;height:100%}.m_c0783ff9::-webkit-scrollbar{display:none}.m_c0783ff9:where([data-scrollbars=xy],[data-scrollbars=y]):where([data-offset-scrollbars=xy],[data-offset-scrollbars=y]){padding-inline-end:var(--scrollarea-scrollbar-size);padding-inline-start:unset}.m_c0783ff9:where([data-scrollbars=xy],[data-scrollbars=x]):where([data-offset-scrollbars=xy],[data-offset-scrollbars=x]){padding-bottom:var(--scrollarea-scrollbar-size)}.m_f8f631dd{min-width:100%;display:table}.m_c44ba933{-webkit-user-select:none;user-select:none;touch-action:none;box-sizing:border-box;transition:background-color .15s ease,opacity .15s ease;padding:calc(var(--scrollarea-scrollbar-size) / 5);display:flex;background-color:transparent;flex-direction:row}@media (hover: hover){:where([data-mantine-color-scheme=light]) .m_c44ba933:hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=light]) .m_c44ba933:hover>.m_d8b5e363{background-color:#00000080}:where([data-mantine-color-scheme=dark]) .m_c44ba933:hover{background-color:var(--mantine-color-dark-8)}:where([data-mantine-color-scheme=dark]) .m_c44ba933:hover>.m_d8b5e363{background-color:#ffffff80}}@media (hover: none){:where([data-mantine-color-scheme=light]) .m_c44ba933:active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=light]) .m_c44ba933:active>.m_d8b5e363{background-color:#00000080}:where([data-mantine-color-scheme=dark]) .m_c44ba933:active{background-color:var(--mantine-color-dark-8)}:where([data-mantine-color-scheme=dark]) .m_c44ba933:active>.m_d8b5e363{background-color:#ffffff80}}.m_c44ba933:where([data-hidden],[data-state=hidden]){display:none}.m_c44ba933:where([data-orientation=vertical]){width:var(--scrollarea-scrollbar-size);top:0;bottom:var(--sa-corner-width);inset-inline-end:0}.m_c44ba933:where([data-orientation=horizontal]){height:var(--scrollarea-scrollbar-size);flex-direction:column;bottom:0;inset-inline-start:0;inset-inline-end:var(--sa-corner-width)}.m_d8b5e363{flex:1;border-radius:var(--scrollarea-scrollbar-size);position:relative;transition:background-color .15s ease;overflow:hidden}.m_d8b5e363:before{content:'""';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:100%;height:100%;min-width:calc(2.75rem * var(--mantine-scale));min-height:calc(2.75rem * var(--mantine-scale))}:where([data-mantine-color-scheme=light]) .m_d8b5e363{background-color:#0006}:where([data-mantine-color-scheme=dark]) .m_d8b5e363{background-color:#fff6}.m_21657268{position:absolute;opacity:0;transition:opacity .15s ease;display:block;inset-inline-end:0;bottom:0}:where([data-mantine-color-scheme=light]) .m_21657268{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_21657268{background-color:var(--mantine-color-dark-8)}.m_21657268:where([data-hovered]){opacity:1}.m_21657268:where([data-hidden]){display:none}.m_87cf2631{background-color:transparent;cursor:pointer;border:0;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-size:var(--mantine-font-size-md);text-align:left;text-decoration:none;color:inherit;touch-action:manipulation;-webkit-tap-highlight-color:transparent}:where([dir=rtl]) .m_87cf2631{text-align:right}.m_515a97f8{border:0;clip:rect(0 0 0 0);height:calc(.0625rem * var(--mantine-scale));width:calc(.0625rem * var(--mantine-scale));margin:calc(-.0625rem * var(--mantine-scale));overflow:hidden;padding:0;position:absolute;white-space:nowrap}.m_1b7284a3{--paper-radius: var(--mantine-radius-default);outline:0;-webkit-tap-highlight-color:transparent;display:block;touch-action:manipulation;text-decoration:none;border-radius:var(--paper-radius);box-shadow:var(--paper-shadow);background-color:var(--mantine-color-body)}:where([data-mantine-color-scheme=light]) .m_1b7284a3:where([data-with-border]){border:calc(.0625rem * var(--mantine-scale)) solid var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_1b7284a3:where([data-with-border]){border:calc(.0625rem * var(--mantine-scale)) solid var(--mantine-color-dark-4)}.m_38a85659{position:absolute;border:1px solid var(--popover-border-color);padding:var(--mantine-spacing-sm) var(--mantine-spacing-md);box-shadow:var(--popover-shadow, none);border-radius:var(--popover-radius, var(--mantine-radius-default))}.m_38a85659:focus{outline:none}:where([data-mantine-color-scheme=light]) .m_38a85659{--popover-border-color: var(--mantine-color-gray-2);background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_38a85659{--popover-border-color: var(--mantine-color-dark-4);background-color:var(--mantine-color-dark-6)}.m_a31dc6c1{background-color:inherit;border:1px solid var(--popover-border-color);z-index:1}.m_5ae2e3c{--loader-size-xs: calc(1.125rem * var(--mantine-scale));--loader-size-sm: calc(1.375rem * var(--mantine-scale));--loader-size-md: calc(2.25rem * var(--mantine-scale));--loader-size-lg: calc(2.75rem * var(--mantine-scale));--loader-size-xl: calc(3.625rem * var(--mantine-scale));--loader-size: var(--loader-size-md);--loader-color: var(--mantine-primary-color-filled)}@keyframes m_5d2b3b9d{0%{transform:scale(.6);opacity:0}50%,to{transform:scale(1)}}.m_7a2bd4cd{position:relative;width:var(--loader-size);height:var(--loader-size);display:flex;gap:calc(var(--loader-size) / 5)}.m_870bb79{flex:1;background:var(--loader-color);animation:m_5d2b3b9d 1.2s cubic-bezier(0,.5,.5,1) infinite;border-radius:calc(.125rem * var(--mantine-scale))}.m_870bb79:nth-of-type(1){animation-delay:-.24s}.m_870bb79:nth-of-type(2){animation-delay:-.12s}.m_870bb79:nth-of-type(3){animation-delay:0}@keyframes m_aac34a1{0%,to{transform:scale(1);opacity:1}50%{transform:scale(.6);opacity:.5}}.m_4e3f22d7{display:flex;justify-content:center;align-items:center;gap:calc(var(--loader-size) / 10);position:relative;width:var(--loader-size);height:var(--loader-size)}.m_870c4af{width:calc(var(--loader-size) / 3 - var(--loader-size) / 15);height:calc(var(--loader-size) / 3 - var(--loader-size) / 15);border-radius:50%;background:var(--loader-color);animation:m_aac34a1 .8s infinite linear}.m_870c4af:nth-child(2){animation-delay:.4s}@keyframes m_f8e89c4b{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.m_b34414df{display:inline-block;width:var(--loader-size);height:var(--loader-size)}.m_b34414df:after{content:"";display:block;width:var(--loader-size);height:var(--loader-size);border-radius:calc(625rem * var(--mantine-scale));border-width:calc(var(--loader-size) / 8);border-style:solid;border-color:var(--loader-color) var(--loader-color) var(--loader-color) transparent;animation:m_f8e89c4b 1.2s linear infinite}.m_8d3f4000{--ai-size-xs: calc(1.125rem * var(--mantine-scale));--ai-size-sm: calc(1.375rem * var(--mantine-scale));--ai-size-md: calc(1.75rem * var(--mantine-scale));--ai-size-lg: calc(2.125rem * var(--mantine-scale));--ai-size-xl: calc(2.75rem * var(--mantine-scale));--ai-size-input-xs: calc(1.875rem * var(--mantine-scale));--ai-size-input-sm: calc(2.25rem * var(--mantine-scale));--ai-size-input-md: calc(2.625rem * var(--mantine-scale));--ai-size-input-lg: calc(3.125rem * var(--mantine-scale));--ai-size-input-xl: calc(3.75rem * var(--mantine-scale));--ai-size: var(--ai-size-md);--ai-color: var(--mantine-color-white);line-height:1;display:inline-flex;align-items:center;justify-content:center;position:relative;-webkit-user-select:none;user-select:none;overflow:hidden;width:var(--ai-size);height:var(--ai-size);min-width:var(--ai-size);min-height:var(--ai-size);border-radius:var(--ai-radius, var(--mantine-radius-default));background:var(--ai-bg, var(--mantine-primary-color-filled));color:var(--ai-color, var(--mantine-color-white));border:var(--ai-bd, calc(.0625rem * var(--mantine-scale)) solid transparent);cursor:pointer}@media (hover: hover){.m_8d3f4000:hover:where(:not([data-loading],:disabled,[data-disabled])){background-color:var(--ai-hover, var(--mantine-primary-color-filled-hover));color:var(--ai-hover-color, var(--ai-color))}}@media (hover: none){.m_8d3f4000:active:where(:not([data-loading],:disabled,[data-disabled])){background-color:var(--ai-hover, var(--mantine-primary-color-filled-hover));color:var(--ai-hover-color, var(--ai-color))}}.m_8d3f4000[data-loading]{cursor:not-allowed}.m_8d3f4000[data-loading] .m_8d3afb97{opacity:0;transform:translateY(100%)}.m_8d3f4000:where(:disabled:not([data-loading]),[data-disabled]:not([data-loading])){cursor:not-allowed;border:calc(.0625rem * var(--mantine-scale)) solid transparent}:where([data-mantine-color-scheme=light]) .m_8d3f4000:where(:disabled:not([data-loading]),[data-disabled]:not([data-loading])){background-color:var(--mantine-color-gray-1);color:var(--mantine-color-gray-5)}:where([data-mantine-color-scheme=dark]) .m_8d3f4000:where(:disabled:not([data-loading]),[data-disabled]:not([data-loading])){background-color:var(--mantine-color-dark-6);color:var(--mantine-color-dark-3)}.m_8d3f4000:where(:disabled:not([data-loading]),[data-disabled]:not([data-loading])):active{transform:none}.m_302b9fb1{inset:calc(-.0625rem * var(--mantine-scale));position:absolute;border-radius:var(--ai-radius, var(--mantine-radius-default));display:flex;align-items:center;justify-content:center}:where([data-mantine-color-scheme=light]) .m_302b9fb1{background-color:#ffffff59}:where([data-mantine-color-scheme=dark]) .m_302b9fb1{background-color:#00000059}.m_1a0f1b21{--ai-border-width: calc(.0625rem * var(--mantine-scale));display:flex}.m_1a0f1b21 :where(*):focus{position:relative;z-index:1}.m_1a0f1b21[data-orientation=horizontal]{flex-direction:row}.m_1a0f1b21[data-orientation=horizontal] .m_8d3f4000:not(:only-child):first-child{border-end-end-radius:0;border-start-end-radius:0;border-inline-end-width:calc(var(--ai-border-width) / 2)}.m_1a0f1b21[data-orientation=horizontal] .m_8d3f4000:not(:only-child):last-child{border-end-start-radius:0;border-start-start-radius:0;border-inline-start-width:calc(var(--ai-border-width) / 2)}.m_1a0f1b21[data-orientation=horizontal] .m_8d3f4000:not(:only-child):not(:first-child):not(:last-child){border-radius:0;border-inline-width:calc(var(--ai-border-width) / 2)}.m_1a0f1b21[data-orientation=vertical]{flex-direction:column}.m_1a0f1b21[data-orientation=vertical] .m_8d3f4000:not(:only-child):first-child{border-end-start-radius:0;border-end-end-radius:0;border-bottom-width:calc(var(--ai-border-width) / 2)}.m_1a0f1b21[data-orientation=vertical] .m_8d3f4000:not(:only-child):last-child{border-start-start-radius:0;border-start-end-radius:0;border-top-width:calc(var(--ai-border-width) / 2)}.m_1a0f1b21[data-orientation=vertical] .m_8d3f4000:not(:only-child):not(:first-child):not(:last-child){border-radius:0;border-bottom-width:calc(var(--ai-border-width) / 2);border-top-width:calc(var(--ai-border-width) / 2)}.m_8d3afb97{display:flex;align-items:center;justify-content:center;transition:transform .15s ease,opacity .1s ease;width:100%;height:100%}.m_86a44da5{--cb-size-xs: calc(1.125rem * var(--mantine-scale));--cb-size-sm: calc(1.375rem * var(--mantine-scale));--cb-size-md: calc(1.75rem * var(--mantine-scale));--cb-size-lg: calc(2.125rem * var(--mantine-scale));--cb-size-xl: calc(2.75rem * var(--mantine-scale));--cb-size: var(--cb-size-md);--cb-icon-size: 70%;--cb-radius: var(--mantine-radius-default);line-height:1;display:inline-flex;align-items:center;justify-content:center;position:relative;-webkit-user-select:none;user-select:none;width:var(--cb-size);height:var(--cb-size);min-width:var(--cb-size);min-height:var(--cb-size);border-radius:var(--cb-radius)}:where([data-mantine-color-scheme=light]) .m_86a44da5{color:var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=dark]) .m_86a44da5{color:var(--mantine-color-dark-1)}.m_86a44da5[data-disabled],.m_86a44da5:disabled{cursor:not-allowed;opacity:.6}@media (hover: hover){:where([data-mantine-color-scheme=light]) .m_220c80f2:where(:not([data-disabled],:disabled)):hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_220c80f2:where(:not([data-disabled],:disabled)):hover{background-color:var(--mantine-color-dark-6)}}@media (hover: none){:where([data-mantine-color-scheme=light]) .m_220c80f2:where(:not([data-disabled],:disabled)):active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_220c80f2:where(:not([data-disabled],:disabled)):active{background-color:var(--mantine-color-dark-6)}}.m_4081bf90{display:flex;flex-direction:row;flex-wrap:var(--group-wrap, wrap);justify-content:var(--group-justify, flex-start);align-items:var(--group-align, center);gap:var(--group-gap, var(--mantine-spacing-md))}.m_4081bf90:where([data-grow])>*{flex-grow:1;max-width:var(--group-child-width)}.m_9814e45f{top:0;right:0;bottom:0;left:0;position:absolute;background:var(--overlay-bg, rgba(0, 0, 0, .6));backdrop-filter:var(--overlay-filter);-webkit-backdrop-filter:var(--overlay-filter);border-radius:var(--overlay-radius, 0);z-index:var(--overlay-z-index)}.m_9814e45f:where([data-fixed]){position:fixed}.m_9814e45f:where([data-center]){display:flex;align-items:center;justify-content:center}.m_615af6c9{line-height:1;padding:0;margin:0;font-weight:400;font-size:var(--mantine-font-size-md)}.m_b5489c3c{display:flex;justify-content:space-between;align-items:center;padding:var(--mb-padding, var(--mantine-spacing-md));padding-inline-end:calc(var(--mb-padding, var(--mantine-spacing-md)) - calc(.3125rem * var(--mantine-scale)));position:sticky;top:0;background-color:var(--mantine-color-body);z-index:1000;min-height:calc(3.75rem * var(--mantine-scale))}.m_60c222c7{position:fixed;width:100%;top:0;bottom:0;z-index:var(--mb-z-index);pointer-events:none}.m_fd1ab0aa{pointer-events:all;box-shadow:var(--mb-shadow, var(--mantine-shadow-xl))}.m_606cb269{margin-inline-start:auto}.m_5df29311{padding:var(--mb-padding, var(--mantine-spacing-md));padding-top:var(--mb-padding, var(--mantine-spacing-md))}.m_5df29311:where(:not(:only-child)){padding-top:0}.m_6c018570{position:relative;margin-top:var(--input-margin-top, 0rem);margin-bottom:var(--input-margin-bottom, 0rem);--input-height-xs: calc(1.875rem * var(--mantine-scale));--input-height-sm: calc(2.25rem * var(--mantine-scale));--input-height-md: calc(2.625rem * var(--mantine-scale));--input-height-lg: calc(3.125rem * var(--mantine-scale));--input-height-xl: calc(3.75rem * var(--mantine-scale));--input-padding-y-xs: calc(.3125rem * var(--mantine-scale));--input-padding-y-sm: calc(.375rem * var(--mantine-scale));--input-padding-y-md: calc(.5rem * var(--mantine-scale));--input-padding-y-lg: calc(.625rem * var(--mantine-scale));--input-padding-y-xl: calc(.8125rem * var(--mantine-scale));--input-height: var(--input-height-sm);--input-radius: var(--mantine-radius-default);--input-cursor: text;--input-text-align: left;--input-line-height: calc(var(--input-height) - calc(.125rem * var(--mantine-scale)));--input-padding: calc(var(--input-height) / 3);--input-padding-inline-start: var(--input-padding);--input-padding-inline-end: var(--input-padding);--input-placeholder-color: var(--mantine-color-placeholder);--input-color: var(--mantine-color-text);--input-left-section-size: var(--input-left-section-width, calc(var(--input-height) - calc(.125rem * var(--mantine-scale))));--input-right-section-size: var( --input-right-section-width, calc(var(--input-height) - calc(.125rem * var(--mantine-scale))) );--input-size: var(--input-height);--section-y: calc(.0625rem * var(--mantine-scale));--left-section-start: calc(.0625rem * var(--mantine-scale));--left-section-border-radius: var(--input-radius) 0 0 var(--input-radius);--right-section-end: calc(.0625rem * var(--mantine-scale));--right-section-border-radius: 0 var(--input-radius) var(--input-radius) 0}.m_6c018570[data-variant=unstyled]{--input-padding: 0;--input-padding-y: 0;--input-padding-inline-start: 0;--input-padding-inline-end: 0}.m_6c018570[data-pointer]{--input-cursor: pointer}.m_6c018570[data-multiline]{--input-padding-y-xs: calc(.28125rem * var(--mantine-scale));--input-padding-y-sm: calc(.34375rem * var(--mantine-scale));--input-padding-y-md: calc(.4375rem * var(--mantine-scale));--input-padding-y-lg: calc(.59375rem * var(--mantine-scale));--input-padding-y-xl: calc(.8125rem * var(--mantine-scale));--input-size: auto;--input-line-height: var(--mantine-line-height);--input-padding-y: var(--input-padding-y-sm)}.m_6c018570[data-with-left-section]{--input-padding-inline-start: var(--input-left-section-size)}.m_6c018570[data-with-right-section]{--input-padding-inline-end: var(--input-right-section-size)}[data-mantine-color-scheme=light] .m_6c018570{--input-disabled-bg: var(--mantine-color-gray-1);--input-disabled-color: var(--mantine-color-gray-6)}[data-mantine-color-scheme=light] .m_6c018570[data-variant=default]{--input-bd: var(--mantine-color-gray-4);--input-bg: var(--mantine-color-white);--input-bd-focus: var(--mantine-primary-color-filled)}[data-mantine-color-scheme=light] .m_6c018570[data-variant=filled]{--input-bd: transparent;--input-bg: var(--mantine-color-gray-1);--input-bd-focus: var(--mantine-primary-color-filled)}[data-mantine-color-scheme=light] .m_6c018570[data-variant=unstyled]{--input-bd: transparent;--input-bg: transparent;--input-bd-focus: transparent}[data-mantine-color-scheme=dark] .m_6c018570{--input-disabled-bg: var(--mantine-color-dark-6);--input-disabled-color: var(--mantine-color-dark-2)}[data-mantine-color-scheme=dark] .m_6c018570[data-variant=default]{--input-bd: var(--mantine-color-dark-4);--input-bg: var(--mantine-color-dark-6);--input-bd-focus: var(--mantine-primary-color-filled)}[data-mantine-color-scheme=dark] .m_6c018570[data-variant=filled]{--input-bd: transparent;--input-bg: var(--mantine-color-dark-5);--input-bd-focus: var(--mantine-primary-color-filled)}[data-mantine-color-scheme=dark] .m_6c018570[data-variant=unstyled]{--input-bd: transparent;--input-bg: transparent;--input-bd-focus: transparent}[data-mantine-color-scheme] .m_6c018570[data-error]:not([data-variant=unstyled]){--input-bd: var(--mantine-color-error)}[data-mantine-color-scheme] .m_6c018570[data-error]{--input-color: var(--mantine-color-error);--input-placeholder-color: var(--mantine-color-error);--input-section-color: var(--mantine-color-error)}:where([dir=rtl]) .m_6c018570{--input-text-align: right;--left-section-border-radius: 0 var(--input-radius) var(--input-radius) 0;--right-section-border-radius: var(--input-radius) 0 0 var(--input-radius)}.m_8fb7ebe7{-webkit-tap-highlight-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;resize:var(--input-resize, none);display:block;width:100%;transition:border-color .1s ease;text-align:var(--input-text-align);color:var(--input-color);border:calc(.0625rem * var(--mantine-scale)) solid var(--input-bd);background-color:var(--input-bg);font-family:var(--input-font-family, var(--mantine-font-family));height:var(--input-size);min-height:var(--input-height);line-height:var(--input-line-height);font-size:var(--input-fz, var(--input-fz, var(--mantine-font-size-sm)));border-radius:var(--input-radius);padding-inline-start:var(--input-padding-inline-start);padding-inline-end:var(--input-padding-inline-end);padding-top:var(--input-padding-y, 0rem);padding-bottom:var(--input-padding-y, 0rem);cursor:var(--input-cursor);overflow:var(--input-overflow)}.m_8fb7ebe7[data-no-overflow]{--input-overflow: hidden}.m_8fb7ebe7[data-monospace]{--input-font-family: var(--mantine-font-family-monospace);--input-fz: calc(var(--input-fz, var(--mantine-font-size-sm)) - calc(.125rem * var(--mantine-scale)))}.m_8fb7ebe7:focus,.m_8fb7ebe7:focus-within{outline:none;--input-bd: var(--input-bd-focus)}[data-error] .m_8fb7ebe7:focus,[data-error] .m_8fb7ebe7:focus-within{--input-bd: var(--mantine-color-error)}.m_8fb7ebe7::placeholder{color:var(--input-placeholder-color);opacity:1}.m_8fb7ebe7::-webkit-inner-spin-button,.m_8fb7ebe7::-webkit-outer-spin-button,.m_8fb7ebe7::-webkit-search-decoration,.m_8fb7ebe7::-webkit-search-cancel-button,.m_8fb7ebe7::-webkit-search-results-button,.m_8fb7ebe7::-webkit-search-results-decoration{-webkit-appearance:none;-moz-appearance:none;appearance:none}.m_8fb7ebe7[type=number]{-moz-appearance:textfield}.m_8fb7ebe7:disabled,.m_8fb7ebe7[data-disabled]{cursor:not-allowed;opacity:.6;background-color:var(--input-disabled-bg);color:var(--input-disabled-color)}.m_8fb7ebe7:has(input:disabled){cursor:not-allowed;opacity:.6;background-color:var(--input-disabled-bg);color:var(--input-disabled-color)}.m_82577fc2{pointer-events:var(--section-pointer-events);position:absolute;z-index:1;inset-inline-start:var(--section-start);inset-inline-end:var(--section-end);bottom:var(--section-y);top:var(--section-y);display:flex;align-items:center;justify-content:center;width:var(--section-size);border-radius:var(--section-border-radius);color:var(--input-section-color, var(--mantine-color-dimmed))}.m_82577fc2[data-position=right]{--section-pointer-events: var(--input-right-section-pointer-events);--section-end: var(--right-section-end);--section-size: var(--input-right-section-size);--section-border-radius: var(--right-section-border-radius)}.m_82577fc2[data-position=left]{--section-pointer-events: var(--input-left-section-pointer-events);--section-start: var(--left-section-start);--section-size: var(--input-left-section-size);--section-border-radius: var(--left-section-border-radius)}.m_88bacfd0{color:var(--input-placeholder-color, var(--mantine-color-placeholder))}[data-error] .m_88bacfd0{--input-placeholder-color: var(--input-color, var(--mantine-color-placeholder))}.m_46b77525{line-height:var(--mantine-line-height)}.m_8fdc1311{display:inline-block;font-weight:500;word-break:break-word;cursor:default;-webkit-tap-highlight-color:transparent;font-size:var(--input-label-size, var(--mantine-font-size-sm))}.m_78a94662{color:var(--input-asterisk-color, var(--mantine-color-error))}.m_8f816625,.m_fe47ce59{word-wrap:break-word;line-height:1.2;display:block;margin:0;padding:0}.m_8f816625{color:var(--mantine-color-error);font-size:var(--input-error-size, calc(var(--mantine-font-size-sm) - calc(.125rem * var(--mantine-scale))))}.m_fe47ce59{color:var(--mantine-color-dimmed);font-size:var(--input-description-size, calc(var(--mantine-font-size-sm) - calc(.125rem * var(--mantine-scale))))}.m_8bffd616{display:flex}.m_96b553a6{--transition-duration: .15s;top:0;left:0;position:absolute;z-index:0;transition-property:transform,width,height;transition-timing-function:ease;transition-duration:0ms}.m_96b553a6:where([data-initialized]){transition-duration:var(--transition-duration)}.m_96b553a6:where([data-hidden]){background-color:red;display:none}.m_9bdbb667{--accordion-radius: var(--mantine-radius-default)}.m_df78851f{word-break:break-word}.m_4ba554d4{padding:var(--mantine-spacing-md);padding-top:calc(var(--mantine-spacing-xs) / 2)}.m_8fa820a0{margin:0;padding:0}.m_4ba585b8{width:100%;display:flex;align-items:center;flex-direction:row-reverse;padding-inline:var(--mantine-spacing-md);opacity:1;cursor:pointer;background-color:transparent}.m_4ba585b8:where([data-chevron-position=left]){flex-direction:row;padding-inline-start:0}:where([data-mantine-color-scheme=light]) .m_4ba585b8{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_4ba585b8{color:var(--mantine-color-dark-0)}.m_4ba585b8:where(:disabled,[data-disabled]){opacity:.4;cursor:not-allowed}@media (hover: hover){:where([data-mantine-color-scheme=light]) .m_6939a5e9:where(:not(:disabled,[data-disabled])):hover,:where([data-mantine-color-scheme=light]) .m_4271d21b:where(:not(:disabled,[data-disabled])):hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_6939a5e9:where(:not(:disabled,[data-disabled])):hover,:where([data-mantine-color-scheme=dark]) .m_4271d21b:where(:not(:disabled,[data-disabled])):hover{background-color:var(--mantine-color-dark-6)}}@media (hover: none){:where([data-mantine-color-scheme=light]) .m_6939a5e9:where(:not(:disabled,[data-disabled])):active,:where([data-mantine-color-scheme=light]) .m_4271d21b:where(:not(:disabled,[data-disabled])):active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_6939a5e9:where(:not(:disabled,[data-disabled])):active,:where([data-mantine-color-scheme=dark]) .m_4271d21b:where(:not(:disabled,[data-disabled])):active{background-color:var(--mantine-color-dark-6)}}.m_df3ffa0f{color:inherit;font-weight:400;flex:1;overflow:hidden;text-overflow:ellipsis;padding-top:var(--mantine-spacing-sm);padding-bottom:var(--mantine-spacing-sm)}.m_3f35ae96{display:flex;align-items:center;justify-content:flex-start;transition:transform var(--accordion-transition-duration, .2s) ease;width:var(--accordion-chevron-size, calc(.9375rem * var(--mantine-scale)));min-width:var(--accordion-chevron-size, calc(.9375rem * var(--mantine-scale)));transform:rotate(0)}.m_3f35ae96:where([data-rotate]){transform:rotate(180deg)}.m_3f35ae96:where([data-position=left]){margin-inline-end:var(--mantine-spacing-md);margin-inline-start:var(--mantine-spacing-md)}.m_9bd771fe{display:flex;align-items:center;justify-content:center;margin-inline-end:var(--mantine-spacing-sm)}.m_9bd771fe:where([data-chevron-position=left]){margin-inline-end:0;margin-inline-start:var(--mantine-spacing-lg)}:where([data-mantine-color-scheme=light]) .m_9bd7b098{--item-border-color: var(--mantine-color-gray-3);--item-filled-color: var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_9bd7b098{--item-border-color: var(--mantine-color-dark-4);--item-filled-color: var(--mantine-color-dark-6)}.m_fe19b709{border-bottom:1px solid var(--item-border-color)}.m_1f921b3b{border:1px solid var(--item-border-color);transition:background-color .15s ease}.m_1f921b3b:where([data-active]){background-color:var(--item-filled-color)}.m_1f921b3b:first-of-type{border-start-start-radius:var(--accordion-radius);border-start-end-radius:var(--accordion-radius)}.m_1f921b3b:first-of-type>[data-accordion-control]{border-start-start-radius:var(--accordion-radius);border-start-end-radius:var(--accordion-radius)}.m_1f921b3b:last-of-type{border-end-start-radius:var(--accordion-radius);border-end-end-radius:var(--accordion-radius)}.m_1f921b3b:last-of-type>[data-accordion-control]{border-end-start-radius:var(--accordion-radius);border-end-end-radius:var(--accordion-radius)}.m_1f921b3b+.m_1f921b3b{border-top:0}.m_2cdf939a{border-radius:var(--accordion-radius)}.m_2cdf939a:where([data-active]){background-color:var(--item-filled-color)}.m_9f59b069{background-color:var(--item-filled-color);border-radius:var(--accordion-radius);border:calc(.0625rem * var(--mantine-scale)) solid transparent;transition:background-color .15s ease}.m_9f59b069[data-active]{border-color:var(--item-border-color)}:where([data-mantine-color-scheme=light]) .m_9f59b069[data-active]{background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_9f59b069[data-active]{background-color:var(--mantine-color-dark-7)}.m_9f59b069+.m_9f59b069{margin-top:var(--mantine-spacing-md)}.m_7f854edf{position:fixed;z-index:var(--affix-z-index);inset-inline-start:var(--affix-left);inset-inline-end:var(--affix-right);top:var(--affix-top);bottom:var(--affix-bottom)}.m_66836ed3{--alert-radius: var(--mantine-radius-default);--alert-bg: var(--mantine-primary-color-light);--alert-bd: calc(.0625rem * var(--mantine-scale)) solid transparent;--alert-color: var(--mantine-primary-color-light-color);padding:var(--mantine-spacing-md) var(--mantine-spacing-md);border-radius:var(--alert-radius);position:relative;overflow:hidden;background-color:var(--alert-bg);border:var(--alert-bd);color:var(--alert-color)}.m_a5d60502{display:flex}.m_667c2793{flex:1;display:flex;flex-direction:column;gap:var(--mantine-spacing-xs)}.m_6a03f287{display:flex;align-items:center;justify-content:space-between;font-size:var(--mantine-font-size-sm);font-weight:700}.m_6a03f287:where([data-with-close-button]){padding-inline-end:var(--mantine-spacing-md)}.m_698f4f23{display:block;overflow:hidden;text-overflow:ellipsis}.m_667f2a6a{line-height:1;width:calc(1.25rem * var(--mantine-scale));height:calc(1.25rem * var(--mantine-scale));display:flex;align-items:center;justify-content:flex-start;margin-inline-end:var(--mantine-spacing-md);margin-top:calc(.0625rem * var(--mantine-scale))}.m_7fa78076{text-overflow:ellipsis;overflow:hidden;font-size:var(--mantine-font-size-sm)}:where([data-mantine-color-scheme=light]) .m_7fa78076{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_7fa78076{color:var(--mantine-color-white)}.m_7fa78076:where([data-variant=filled]){color:var(--alert-color)}.m_7fa78076:where([data-variant=white]){color:var(--mantine-color-black)}.m_87f54839{width:calc(1.25rem * var(--mantine-scale));height:calc(1.25rem * var(--mantine-scale));color:var(--alert-color)}.m_b6d8b162{-webkit-tap-highlight-color:transparent;text-decoration:none;font-size:var(--text-fz, var(--mantine-font-size-md));line-height:var(--text-lh, var(--mantine-line-height-md));font-weight:400;margin:0;padding:0;color:var(--text-color)}.m_b6d8b162:where([data-truncate]){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m_b6d8b162:where([data-truncate=start]){direction:rtl;text-align:right}:where([dir=rtl]) .m_b6d8b162:where([data-truncate=start]){direction:ltr;text-align:left}.m_b6d8b162:where([data-variant=gradient]){background-image:var(--text-gradient);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.m_b6d8b162:where([data-line-clamp]){overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:var(--text-line-clamp);-webkit-box-orient:vertical}.m_b6d8b162:where([data-inherit]){line-height:inherit;font-weight:inherit;font-size:inherit}.m_b6d8b162:where([data-inline]){line-height:1}.m_849cf0da{color:var(--mantine-color-anchor);text-decoration:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;display:inline;padding:0;margin:0;background-color:transparent;cursor:pointer}@media (hover: hover){.m_849cf0da:where([data-underline=hover]):hover{text-decoration:underline}}@media (hover: none){.m_849cf0da:where([data-underline=hover]):active{text-decoration:underline}}.m_849cf0da:where([data-underline=always]){text-decoration:underline}.m_89ab340[data-resizing]{--app-shell-transition-duration: 0ms !important}.m_89ab340[data-disabled]{--app-shell-header-offset: 0rem !important;--app-shell-navbar-offset: 0rem !important}[data-mantine-color-scheme=light] .m_89ab340{--app-shell-border-color: var(--mantine-color-gray-3)}[data-mantine-color-scheme=dark] .m_89ab340{--app-shell-border-color: var(--mantine-color-dark-4)}.m_45252eee,.m_9cdde9a,.m_3b16f56b,.m_8983817,.m_3840c879{transition-duration:var(--app-shell-transition-duration);transition-timing-function:var(--app-shell-transition-timing-function)}.m_45252eee,.m_9cdde9a{position:fixed;display:flex;flex-direction:column;top:var(--app-shell-header-offset, 0rem);height:calc(100dvh - var(--app-shell-header-offset, 0rem) - var(--app-shell-footer-offset, 0rem));background-color:var(--mantine-color-body);transition-property:transform,top,height}:where([data-layout=alt]) .m_45252eee,:where([data-layout=alt]) .m_9cdde9a{top:0rem;height:100dvh}.m_45252eee{inset-inline-start:0;width:var(--app-shell-navbar-width);transition-property:transform,top,height;transform:var(--app-shell-navbar-transform);z-index:var(--app-shell-navbar-z-index)}:where([dir=rtl]) .m_45252eee{transform:var(--app-shell-navbar-transform-rtl)}.m_45252eee:where([data-with-border]){border-inline-end:1px solid var(--app-shell-border-color)}.m_9cdde9a{inset-inline-end:0;width:var(--app-shell-aside-width);transform:var(--app-shell-aside-transform);z-index:var(--app-shell-aside-z-index)}:where([dir=rtl]) .m_9cdde9a{transform:var(--app-shell-aside-transform-rtl)}.m_9cdde9a:where([data-with-border]){border-inline-start:1px solid var(--app-shell-border-color)}.m_8983817{padding-inline-start:calc(var(--app-shell-navbar-offset, 0rem) + var(--app-shell-padding));padding-inline-end:calc(var(--app-shell-aside-offset, 0rem) + var(--app-shell-padding));padding-top:calc(var(--app-shell-header-offset, 0rem) + var(--app-shell-padding));padding-bottom:calc(var(--app-shell-footer-offset, 0rem) + var(--app-shell-padding));min-height:100dvh;transition-property:padding}.m_3b16f56b,.m_3840c879{position:fixed;inset-inline:0;transition-property:transform,left,right;background-color:var(--mantine-color-body)}:where([data-layout=alt]) .m_3b16f56b,:where([data-layout=alt]) .m_3840c879{inset-inline-start:var(--app-shell-navbar-offset, 0rem);inset-inline-end:var(--app-shell-aside-offset, 0rem)}.m_3b16f56b{top:0;height:var(--app-shell-header-height);background-color:var(--mantine-color-body);transform:var(--app-shell-header-transform);z-index:var(--app-shell-header-z-index)}.m_3b16f56b:where([data-with-border]){border-bottom:1px solid var(--app-shell-border-color)}.m_3840c879{bottom:0;height:calc(var(--app-shell-footer-height) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);transform:var(--app-shell-footer-transform);z-index:var(--app-shell-footer-z-index)}.m_3840c879:where([data-with-border]){border-top:1px solid var(--app-shell-border-color)}.m_6dcfc7c7{flex-grow:0}.m_6dcfc7c7:where([data-grow]){flex-grow:1}.m_71ac47fc{--ar-ratio: 1;max-width:100%}.m_71ac47fc>:where(*:not(style)){aspect-ratio:var(--ar-ratio);width:100%}.m_71ac47fc>:where(img,video){object-fit:cover}.m_88b62a41{--combobox-padding: calc(.25rem * var(--mantine-scale));padding:var(--combobox-padding)}.m_88b62a41[data-hidden]{display:none}.m_88b62a41,.m_b2821a6e{--combobox-option-padding-xs: calc(.25rem * var(--mantine-scale)) calc(.5rem * var(--mantine-scale));--combobox-option-padding-sm: calc(.375rem * var(--mantine-scale)) calc(.625rem * var(--mantine-scale));--combobox-option-padding-md: calc(.5rem * var(--mantine-scale)) calc(.75rem * var(--mantine-scale));--combobox-option-padding-lg: calc(.625rem * var(--mantine-scale)) calc(1rem * var(--mantine-scale));--combobox-option-padding-xl: calc(.875rem * var(--mantine-scale)) calc(1.25rem * var(--mantine-scale));--combobox-option-padding: var(--combobox-option-padding-sm)}.m_92253aa5{padding:var(--combobox-option-padding);font-size:var(--combobox-option-fz, var(--mantine-font-size-sm));border-radius:var(--mantine-radius-default);background-color:transparent;color:inherit;cursor:pointer;word-break:break-word}.m_92253aa5:where([data-combobox-selected]){background-color:var(--mantine-primary-color-filled);color:var(--mantine-color-white)}.m_92253aa5:where([data-combobox-disabled]){cursor:not-allowed;opacity:.35}@media (hover: hover){:where([data-mantine-color-scheme=light]) .m_92253aa5:hover:where(:not([data-combobox-selected],[data-combobox-disabled])){background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_92253aa5:hover:where(:not([data-combobox-selected],[data-combobox-disabled])){background-color:var(--mantine-color-dark-7)}}@media (hover: none){:where([data-mantine-color-scheme=light]) .m_92253aa5:active:where(:not([data-combobox-selected],[data-combobox-disabled])){background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_92253aa5:active:where(:not([data-combobox-selected],[data-combobox-disabled])){background-color:var(--mantine-color-dark-7)}}.m_985517d8{margin-inline:calc(var(--combobox-padding) * -1);margin-top:calc(var(--combobox-padding) * -1);width:calc(100% + var(--combobox-padding) * 2);border-top-width:0;border-inline-width:0;border-end-start-radius:0;border-end-end-radius:0;margin-bottom:var(--combobox-padding);position:relative}:where([data-mantine-color-scheme=light]) .m_985517d8,:where([data-mantine-color-scheme=light]) .m_985517d8:focus{border-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_985517d8,:where([data-mantine-color-scheme=dark]) .m_985517d8:focus{border-color:var(--mantine-color-dark-4)}:where([data-mantine-color-scheme=light]) .m_985517d8{background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_985517d8{background-color:var(--mantine-color-dark-7)}.m_2530cd1d{font-size:var(--combobox-option-fz, var(--mantine-font-size-sm));text-align:center;padding:var(--combobox-option-padding);color:var(--mantine-color-dimmed)}.m_858f94bd,.m_82b967cb{font-size:var(--combobox-option-fz, var(--mantine-font-size-sm));border:0 solid transparent;margin-inline:calc(var(--combobox-padding) * -1);padding:var(--combobox-option-padding)}:where([data-mantine-color-scheme=light]) .m_858f94bd,:where([data-mantine-color-scheme=light]) .m_82b967cb{border-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_858f94bd,:where([data-mantine-color-scheme=dark]) .m_82b967cb{border-color:var(--mantine-color-dark-4)}.m_82b967cb{border-top-width:calc(.0625rem * var(--mantine-scale));margin-top:var(--combobox-padding);margin-bottom:calc(var(--combobox-padding) * -1)}.m_858f94bd{border-bottom-width:calc(.0625rem * var(--mantine-scale));margin-bottom:var(--combobox-padding);margin-top:calc(var(--combobox-padding) * -1)}.m_254f3e4f:has(.m_2bb2e9e5:only-child){display:none}.m_2bb2e9e5{color:var(--mantine-color-dimmed);font-size:calc(var(--combobox-option-fz, var(--mantine-font-size-sm)) * .85);padding:var(--combobox-option-padding);font-weight:500;position:relative;display:flex;align-items:center}.m_2bb2e9e5:after{content:"";flex:1;inset-inline:0;height:calc(.0625rem * var(--mantine-scale));margin-inline-start:var(--mantine-spacing-xs)}:where([data-mantine-color-scheme=light]) .m_2bb2e9e5:after{background-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_2bb2e9e5:after{background-color:var(--mantine-color-dark-4)}.m_2bb2e9e5:only-child{display:none}.m_2943220b{--combobox-chevron-size-xs: calc(.875rem * var(--mantine-scale));--combobox-chevron-size-sm: calc(1.125rem * var(--mantine-scale));--combobox-chevron-size-md: calc(1.25rem * var(--mantine-scale));--combobox-chevron-size-lg: calc(1.5rem * var(--mantine-scale));--combobox-chevron-size-xl: calc(1.75rem * var(--mantine-scale));--combobox-chevron-size: var(--combobox-chevron-size-sm);width:var(--combobox-chevron-size);height:var(--combobox-chevron-size)}:where([data-mantine-color-scheme=light]) .m_2943220b{color:var(--mantine-color-gray-6)}:where([data-mantine-color-scheme=dark]) .m_2943220b{color:var(--mantine-color-dark-3)}.m_2943220b:where([data-error]){color:var(--mantine-color-error)}.m_390b5f4{display:flex;align-items:center;gap:calc(.5rem * var(--mantine-scale))}.m_390b5f4:where([data-reverse]){justify-content:space-between}.m_8ee53fc2{opacity:.4;width:.8em;min-width:.8em;height:.8em}:where([data-combobox-selected]) .m_8ee53fc2{opacity:1}.m_5f75b09e{--label-lh-xs: calc(1rem * var(--mantine-scale));--label-lh-sm: calc(1.25rem * var(--mantine-scale));--label-lh-md: calc(1.5rem * var(--mantine-scale));--label-lh-lg: calc(1.875rem * var(--mantine-scale));--label-lh-xl: calc(2.25rem * var(--mantine-scale));--label-lh: var(--label-lh-sm)}.m_5f75b09e[data-label-position=left]{--label-order: 1;--label-offset-end: var(--mantine-spacing-sm);--label-offset-start: 0}.m_5f75b09e[data-label-position=right]{--label-order: 2;--label-offset-end: 0;--label-offset-start: var(--mantine-spacing-sm)}.m_5f6e695e{display:flex}.m_d3ea56bb{--label-cursor: var(--mantine-cursor-type);-webkit-tap-highlight-color:transparent;display:inline-flex;flex-direction:column;font-size:var(--label-fz, var(--mantine-font-size-sm));line-height:var(--label-lh);cursor:var(--label-cursor);order:var(--label-order)}fieldset:disabled .m_d3ea56bb,.m_d3ea56bb[data-disabled]{--label-cursor: not-allowed}.m_8ee546b8{cursor:var(--label-cursor);color:inherit;padding-inline-start:var(--label-offset-start);padding-inline-end:var(--label-offset-end)}:where([data-mantine-color-scheme=light]) fieldset:disabled .m_8ee546b8,:where([data-mantine-color-scheme=light]) .m_8ee546b8:where([data-disabled]){color:var(--mantine-color-gray-5)}:where([data-mantine-color-scheme=dark]) fieldset:disabled .m_8ee546b8,:where([data-mantine-color-scheme=dark]) .m_8ee546b8:where([data-disabled]){color:var(--mantine-color-dark-3)}.m_328f68c0,.m_8e8a99cc{margin-top:calc(var(--mantine-spacing-xs) / 2);padding-inline-start:var(--label-offset-start);padding-inline-end:var(--label-offset-end)}.m_26775b0a{--card-radius: var(--mantine-radius-default);display:block;width:100%;border-radius:var(--card-radius);cursor:pointer}.m_26775b0a :where(*){cursor:inherit}.m_26775b0a:where([data-with-border]){border:calc(.0625rem * var(--mantine-scale)) solid transparent}:where([data-mantine-color-scheme=light]) .m_26775b0a:where([data-with-border]){border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_26775b0a:where([data-with-border]){border-color:var(--mantine-color-dark-4)}.m_5e5256ee{--checkbox-size-xs: calc(1rem * var(--mantine-scale));--checkbox-size-sm: calc(1.25rem * var(--mantine-scale));--checkbox-size-md: calc(1.5rem * var(--mantine-scale));--checkbox-size-lg: calc(1.875rem * var(--mantine-scale));--checkbox-size-xl: calc(2.25rem * var(--mantine-scale));--checkbox-size: var(--checkbox-size-sm);--checkbox-color: var(--mantine-primary-color-filled);--checkbox-icon-color: var(--mantine-color-white);position:relative;border:calc(.0625rem * var(--mantine-scale)) solid transparent;width:var(--checkbox-size);min-width:var(--checkbox-size);height:var(--checkbox-size);min-height:var(--checkbox-size);border-radius:var(--checkbox-radius, var(--mantine-radius-default));transition:border-color .1s ease,background-color .1s ease;cursor:var(--mantine-cursor-type);-webkit-tap-highlight-color:transparent;display:flex;align-items:center;justify-content:center}:where([data-mantine-color-scheme=light]) .m_5e5256ee{background-color:var(--mantine-color-white);border-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_5e5256ee{background-color:var(--mantine-color-dark-6);border-color:var(--mantine-color-dark-4)}.m_5e5256ee[data-indeterminate],.m_5e5256ee[data-checked]{background-color:var(--checkbox-color);border-color:var(--checkbox-color)}.m_5e5256ee[data-indeterminate]>.m_1b1c543a,.m_5e5256ee[data-checked]>.m_1b1c543a{opacity:1;transform:none;color:var(--checkbox-icon-color)}.m_5e5256ee[data-disabled]{cursor:not-allowed}:where([data-mantine-color-scheme=light]) .m_5e5256ee[data-disabled]{background-color:var(--mantine-color-gray-2);border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_5e5256ee[data-disabled]{background-color:var(--mantine-color-dark-6);border-color:var(--mantine-color-dark-6)}[data-mantine-color-scheme=light] .m_5e5256ee[data-disabled][data-checked]>.m_1b1c543a{color:var(--mantine-color-gray-5)}[data-mantine-color-scheme=dark] .m_5e5256ee[data-disabled][data-checked]>.m_1b1c543a{color:var(--mantine-color-dark-3)}.m_76e20374[data-indeterminate]:not([data-disabled]),.m_76e20374[data-checked]:not([data-disabled]){background-color:transparent;border-color:var(--checkbox-color)}.m_76e20374[data-indeterminate]:not([data-disabled])>.m_1b1c543a,.m_76e20374[data-checked]:not([data-disabled])>.m_1b1c543a{color:var(--checkbox-color);opacity:1;transform:none}.m_1b1c543a{display:block;width:60%;color:transparent;pointer-events:none;transform:translateY(calc(.3125rem * var(--mantine-scale))) scale(.5);opacity:1;transition:transform .1s ease,opacity .1s ease}.m_bf2d988c{--checkbox-size-xs: calc(1rem * var(--mantine-scale));--checkbox-size-sm: calc(1.25rem * var(--mantine-scale));--checkbox-size-md: calc(1.5rem * var(--mantine-scale));--checkbox-size-lg: calc(1.875rem * var(--mantine-scale));--checkbox-size-xl: calc(2.25rem * var(--mantine-scale));--checkbox-size: var(--checkbox-size-sm);--checkbox-color: var(--mantine-primary-color-filled);--checkbox-icon-color: var(--mantine-color-white)}.m_26062bec{position:relative;width:var(--checkbox-size);height:var(--checkbox-size);order:1}.m_26062bec:where([data-label-position=left]){order:2}.m_26063560{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:calc(.0625rem * var(--mantine-scale)) solid transparent;width:var(--checkbox-size);height:var(--checkbox-size);border-radius:var(--checkbox-radius, var(--mantine-radius-default));padding:0;display:block;margin:0;transition:border-color .1s ease,background-color .1s ease;cursor:var(--mantine-cursor-type);-webkit-tap-highlight-color:transparent}:where([data-mantine-color-scheme=light]) .m_26063560{background-color:var(--mantine-color-white);border-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_26063560{background-color:var(--mantine-color-dark-6);border-color:var(--mantine-color-dark-4)}.m_26063560:where([data-error]){border-color:var(--mantine-color-error)}.m_26063560[data-indeterminate],.m_26063560:checked{background-color:var(--checkbox-color);border-color:var(--checkbox-color)}.m_26063560[data-indeterminate]+.m_bf295423,.m_26063560:checked+.m_bf295423{opacity:1;transform:none}.m_26063560:disabled{cursor:not-allowed}:where([data-mantine-color-scheme=light]) .m_26063560:disabled{background-color:var(--mantine-color-gray-2);border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_26063560:disabled{background-color:var(--mantine-color-dark-6);border-color:var(--mantine-color-dark-6)}[data-mantine-color-scheme=light] .m_26063560:disabled+.m_bf295423{color:var(--mantine-color-gray-5)}[data-mantine-color-scheme=dark] .m_26063560:disabled+.m_bf295423{color:var(--mantine-color-dark-3)}.m_215c4542+.m_bf295423{color:var(--checkbox-color)}.m_215c4542[data-indeterminate]:not(:disabled),.m_215c4542:checked:not(:disabled){background-color:transparent;border-color:var(--checkbox-color)}.m_215c4542[data-indeterminate]:not(:disabled)+.m_bf295423,.m_215c4542:checked:not(:disabled)+.m_bf295423{color:var(--checkbox-color);opacity:1;transform:none}.m_bf295423{position:absolute;top:0;right:0;bottom:0;left:0;width:60%;margin:auto;color:var(--checkbox-icon-color);pointer-events:none;transform:translateY(calc(.3125rem * var(--mantine-scale))) scale(.5);opacity:0;transition:transform .1s ease,opacity .1s ease}.m_11def92b{--ag-spacing: var(--mantine-spacing-sm);--ag-offset: calc(var(--ag-spacing) * -1);display:flex;padding-inline-start:var(--ag-spacing)}.m_f85678b6{--avatar-size-xs: calc(1rem * var(--mantine-scale));--avatar-size-sm: calc(1.625rem * var(--mantine-scale));--avatar-size-md: calc(2.375rem * var(--mantine-scale));--avatar-size-lg: calc(3.5rem * var(--mantine-scale));--avatar-size-xl: calc(5.25rem * var(--mantine-scale));--avatar-size: var(--avatar-size-md);--avatar-radius: calc(62.5rem * var(--mantine-scale));--avatar-bg: var(--mantine-color-gray-light);--avatar-bd: calc(.0625rem * var(--mantine-scale)) solid transparent;--avatar-color: var(--mantine-color-gray-light-color);--avatar-placeholder-fz: calc(var(--avatar-size) / 2.5);-webkit-tap-highlight-color:transparent;position:relative;display:block;-webkit-user-select:none;user-select:none;overflow:hidden;border-radius:var(--avatar-radius);text-decoration:none;padding:0;width:var(--avatar-size);height:var(--avatar-size);min-width:var(--avatar-size)}.m_f85678b6:where([data-within-group]){margin-inline-start:var(--ag-offset);border:2px solid var(--mantine-color-body);background:var(--mantine-color-body)}.m_11f8ac07{object-fit:cover;width:100%;height:100%;display:block}.m_104cd71f{font-weight:700;display:flex;align-items:center;justify-content:center;width:100%;height:100%;-webkit-user-select:none;user-select:none;border-radius:var(--avatar-radius);font-size:var(--avatar-placeholder-fz);background:var(--avatar-bg);border:var(--avatar-bd);color:var(--avatar-color)}.m_104cd71f>[data-avatar-placeholder-icon]{width:70%;height:70%}.m_2ce0de02{background-size:cover;background-position:center;display:block;width:100%;border:0;text-decoration:none;border-radius:var(--bi-radius, 0)}.m_347db0ec{--badge-height-xs: calc(1rem * var(--mantine-scale));--badge-height-sm: calc(1.125rem * var(--mantine-scale));--badge-height-md: calc(1.25rem * var(--mantine-scale));--badge-height-lg: calc(1.625rem * var(--mantine-scale));--badge-height-xl: calc(2rem * var(--mantine-scale));--badge-fz-xs: calc(.5625rem * var(--mantine-scale));--badge-fz-sm: calc(.625rem * var(--mantine-scale));--badge-fz-md: calc(.6875rem * var(--mantine-scale));--badge-fz-lg: calc(.8125rem * var(--mantine-scale));--badge-fz-xl: calc(1rem * var(--mantine-scale));--badge-padding-x-xs: calc(.375rem * var(--mantine-scale));--badge-padding-x-sm: calc(.5rem * var(--mantine-scale));--badge-padding-x-md: calc(.625rem * var(--mantine-scale));--badge-padding-x-lg: calc(.75rem * var(--mantine-scale));--badge-padding-x-xl: calc(1rem * var(--mantine-scale));--badge-height: var(--badge-height-md);--badge-fz: var(--badge-fz-md);--badge-padding-x: var(--badge-padding-x-md);--badge-radius: calc(62.5rem * var(--mantine-scale));--badge-lh: calc(var(--badge-height) - calc(.125rem * var(--mantine-scale)));--badge-color: var(--mantine-color-white);--badge-bg: var(--mantine-primary-color-filled);--badge-bd: calc(.0625rem * var(--mantine-scale)) solid transparent;-webkit-tap-highlight-color:transparent;font-size:var(--badge-fz);border-radius:var(--badge-radius);height:var(--badge-height);line-height:var(--badge-lh);text-decoration:none;padding:0 var(--badge-padding-x);display:inline-flex;align-items:center;justify-content:center;width:fit-content;text-transform:uppercase;font-weight:700;letter-spacing:calc(.015625rem * var(--mantine-scale));cursor:inherit;text-overflow:ellipsis;overflow:hidden;color:var(--badge-color);background:var(--badge-bg);border:var(--badge-bd)}.m_347db0ec:where([data-block]){display:flex;width:100%}.m_347db0ec:where([data-circle]){padding-inline:calc(.125rem * var(--mantine-scale));width:var(--badge-height)}.m_fbd81e3d{--badge-dot-size: calc(var(--badge-height) / 3.4)}:where([data-mantine-color-scheme=light]) .m_fbd81e3d{background-color:var(--mantine-color-white);border-color:var(--mantine-color-gray-4);color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_fbd81e3d{background-color:var(--mantine-color-dark-5);border-color:var(--mantine-color-dark-5);color:var(--mantine-color-white)}.m_fbd81e3d:before{content:"";display:block;width:var(--badge-dot-size);height:var(--badge-dot-size);border-radius:var(--badge-dot-size);background-color:var(--badge-dot-color);margin-inline-end:var(--badge-dot-size)}.m_5add502a{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.m_91fdda9b{--badge-section-margin: calc(var(--mantine-spacing-xs) / 2);display:inline-flex;justify-content:center;align-items:center}.m_91fdda9b:where([data-position=left]){margin-inline-end:var(--badge-section-margin)}.m_91fdda9b:where([data-position=right]){margin-inline-start:var(--badge-section-margin)}.m_ddec01c0{--blockquote-border: 3px solid var(--bq-bd);position:relative;margin:0;border-inline-start:var(--blockquote-border);border-start-end-radius:var(--bq-radius);border-end-end-radius:var(--bq-radius);padding:var(--mantine-spacing-xl) calc(2.375rem * var(--mantine-scale))}:where([data-mantine-color-scheme=light]) .m_ddec01c0{background-color:var(--bq-bg-light)}:where([data-mantine-color-scheme=dark]) .m_ddec01c0{background-color:var(--bq-bg-dark)}.m_dde7bd57{--blockquote-icon-offset: calc(var(--bq-icon-size) / -2);position:absolute;color:var(--bq-bd);background-color:var(--mantine-color-body);display:flex;align-items:center;justify-content:center;top:var(--blockquote-icon-offset);inset-inline-start:var(--blockquote-icon-offset);width:var(--bq-icon-size);height:var(--bq-icon-size);border-radius:var(--bq-icon-size)}.m_dde51a35{display:block;margin-top:var(--mantine-spacing-md);opacity:.6;font-size:85%}.m_8b3717df{display:flex;align-items:center}.m_f678d540{line-height:1;white-space:nowrap;-webkit-tap-highlight-color:transparent}.m_3b8f2208{margin-inline:var(--bc-separator-margin, var(--mantine-spacing-xs));line-height:1;display:flex;align-items:center;justify-content:center}:where([data-mantine-color-scheme=light]) .m_3b8f2208{color:var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=dark]) .m_3b8f2208{color:var(--mantine-color-dark-2)}.m_fea6bf1a{--burger-size-xs: calc(.75rem * var(--mantine-scale));--burger-size-sm: calc(1.125rem * var(--mantine-scale));--burger-size-md: calc(1.5rem * var(--mantine-scale));--burger-size-lg: calc(2.125rem * var(--mantine-scale));--burger-size-xl: calc(2.625rem * var(--mantine-scale));--burger-size: var(--burger-size-md);width:calc(var(--burger-size) + var(--mantine-spacing-xs));height:calc(var(--burger-size) + var(--mantine-spacing-xs));padding:calc(var(--mantine-spacing-xs) / 2);cursor:pointer}:where([data-mantine-color-scheme=light]) .m_fea6bf1a{--burger-color: var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_fea6bf1a{--burger-color: var(--mantine-color-white)}.m_d4fb9cad{position:relative;-webkit-user-select:none;user-select:none}.m_d4fb9cad,.m_d4fb9cad:before,.m_d4fb9cad:after{display:block;width:var(--burger-size);height:calc(var(--burger-size) / 12);background-color:var(--burger-color);outline:calc(.0625rem * var(--mantine-scale)) solid transparent;transition-property:background-color,transform;transition-duration:var(--burger-transition-duration, .3s);transition-timing-function:var(--burger-transition-timing-function, ease)}.m_d4fb9cad:before,.m_d4fb9cad:after{position:absolute;content:"";inset-inline-start:0}.m_d4fb9cad:before{top:calc(var(--burger-size) / -3)}.m_d4fb9cad:after{top:calc(var(--burger-size) / 3)}.m_d4fb9cad[data-opened]{background-color:transparent}.m_d4fb9cad[data-opened]:before{transform:translateY(calc(var(--burger-size) / 3)) rotate(45deg)}.m_d4fb9cad[data-opened]:after{transform:translateY(calc(var(--burger-size) / -3)) rotate(-45deg)}.m_77c9d27d{--button-height-xs: calc(1.875rem * var(--mantine-scale));--button-height-sm: calc(2.25rem * var(--mantine-scale));--button-height-md: calc(2.625rem * var(--mantine-scale));--button-height-lg: calc(3.125rem * var(--mantine-scale));--button-height-xl: calc(3.75rem * var(--mantine-scale));--button-height-compact-xs: calc(1.375rem * var(--mantine-scale));--button-height-compact-sm: calc(1.625rem * var(--mantine-scale));--button-height-compact-md: calc(1.875rem * var(--mantine-scale));--button-height-compact-lg: calc(2.125rem * var(--mantine-scale));--button-height-compact-xl: calc(2.5rem * var(--mantine-scale));--button-padding-x-xs: calc(.875rem * var(--mantine-scale));--button-padding-x-sm: calc(1.125rem * var(--mantine-scale));--button-padding-x-md: calc(1.375rem * var(--mantine-scale));--button-padding-x-lg: calc(1.625rem * var(--mantine-scale));--button-padding-x-xl: calc(2rem * var(--mantine-scale));--button-padding-x-compact-xs: calc(.4375rem * var(--mantine-scale));--button-padding-x-compact-sm: calc(.5rem * var(--mantine-scale));--button-padding-x-compact-md: calc(.625rem * var(--mantine-scale));--button-padding-x-compact-lg: calc(.75rem * var(--mantine-scale));--button-padding-x-compact-xl: calc(.875rem * var(--mantine-scale));--button-height: var(--button-height-sm);--button-padding-x: var(--button-padding-x-sm);--button-color: var(--mantine-color-white);-webkit-user-select:none;user-select:none;font-weight:600;position:relative;line-height:1;text-align:center;overflow:hidden;width:auto;cursor:pointer;display:inline-block;border-radius:var(--button-radius, var(--mantine-radius-default));font-size:var(--button-fz, var(--mantine-font-size-sm));background:var(--button-bg, var(--mantine-primary-color-filled));border:var(--button-bd, calc(.0625rem * var(--mantine-scale)) solid transparent);color:var(--button-color, var(--mantine-color-white));height:var(--button-height, var(--button-height-sm));padding-inline:var(--button-padding-x, var(--button-padding-x-sm));vertical-align:middle}.m_77c9d27d:where([data-block]){display:block;width:100%}.m_77c9d27d:where([data-with-left-section]){padding-inline-start:calc(var(--button-padding-x) / 1.5)}.m_77c9d27d:where([data-with-right-section]){padding-inline-end:calc(var(--button-padding-x) / 1.5)}.m_77c9d27d:where(:disabled:not([data-loading]),[data-disabled]:not([data-loading])){cursor:not-allowed;border:calc(.0625rem * var(--mantine-scale)) solid transparent;transform:none}:where([data-mantine-color-scheme=light]) .m_77c9d27d:where(:disabled:not([data-loading]),[data-disabled]:not([data-loading])){color:var(--mantine-color-gray-5);background:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_77c9d27d:where(:disabled:not([data-loading]),[data-disabled]:not([data-loading])){color:var(--mantine-color-dark-3);background:var(--mantine-color-dark-6)}.m_77c9d27d:before{content:"";pointer-events:none;position:absolute;inset:calc(-.0625rem * var(--mantine-scale));border-radius:var(--button-radius, var(--mantine-radius-default));transform:translateY(-100%);opacity:0;filter:blur(12px);transition:transform .15s ease,opacity .1s ease}:where([data-mantine-color-scheme=light]) .m_77c9d27d:before{background-color:#ffffff26}:where([data-mantine-color-scheme=dark]) .m_77c9d27d:before{background-color:#00000026}.m_77c9d27d:where([data-loading]){cursor:not-allowed;transform:none}.m_77c9d27d:where([data-loading]):before{transform:translateY(0);opacity:1}.m_77c9d27d:where([data-loading]) .m_80f1301b{opacity:0;transform:translateY(100%)}@media (hover: hover){.m_77c9d27d:hover:where(:not([data-loading],:disabled,[data-disabled])){background-color:var(--button-hover, var(--mantine-primary-color-filled-hover));color:var(--button-hover-color, var(--button-color))}}@media (hover: none){.m_77c9d27d:active:where(:not([data-loading],:disabled,[data-disabled])){background-color:var(--button-hover, var(--mantine-primary-color-filled-hover));color:var(--button-hover-color, var(--button-color))}}.m_80f1301b{display:flex;align-items:center;justify-content:var(--button-justify, center);height:100%;overflow:visible;transition:transform .15s ease,opacity .1s ease}.m_811560b9{white-space:nowrap;height:100%;overflow:hidden;display:flex;align-items:center;opacity:1}.m_811560b9:where([data-loading]){opacity:.2}.m_a74036a{display:flex;align-items:center}.m_a74036a:where([data-position=left]){margin-inline-end:var(--mantine-spacing-xs)}.m_a74036a:where([data-position=right]){margin-inline-start:var(--mantine-spacing-xs)}.m_a25b86ee{position:absolute;left:50%;top:50%}.m_80d6d844{--button-border-width: calc(.0625rem * var(--mantine-scale));display:flex}.m_80d6d844 :where(*):focus{position:relative;z-index:1}.m_80d6d844[data-orientation=horizontal]{flex-direction:row}.m_80d6d844[data-orientation=horizontal] .m_77c9d27d:not(:only-child):first-child{border-end-end-radius:0;border-start-end-radius:0;border-inline-end-width:calc(var(--button-border-width) / 2)}.m_80d6d844[data-orientation=horizontal] .m_77c9d27d:not(:only-child):last-child{border-end-start-radius:0;border-start-start-radius:0;border-inline-start-width:calc(var(--button-border-width) / 2)}.m_80d6d844[data-orientation=horizontal] .m_77c9d27d:not(:only-child):not(:first-child):not(:last-child){border-radius:0;border-inline-width:calc(var(--button-border-width) / 2)}.m_80d6d844[data-orientation=vertical]{flex-direction:column}.m_80d6d844[data-orientation=vertical] .m_77c9d27d:not(:only-child):first-child{border-end-start-radius:0;border-end-end-radius:0;border-bottom-width:calc(var(--button-border-width) / 2)}.m_80d6d844[data-orientation=vertical] .m_77c9d27d:not(:only-child):last-child{border-start-start-radius:0;border-start-end-radius:0;border-top-width:calc(var(--button-border-width) / 2)}.m_80d6d844[data-orientation=vertical] .m_77c9d27d:not(:only-child):not(:first-child):not(:last-child){border-radius:0;border-bottom-width:calc(var(--button-border-width) / 2);border-top-width:calc(var(--button-border-width) / 2)}.m_e615b15f{--card-padding: var(--mantine-spacing-md);position:relative;overflow:hidden;display:flex;flex-direction:column;padding:var(--card-padding);color:var(--mantine-color-text)}:where([data-mantine-color-scheme=light]) .m_e615b15f{background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_e615b15f{background-color:var(--mantine-color-dark-6)}.m_599a2148{display:block;margin-inline:calc(var(--card-padding) * -1)}.m_599a2148:where(:first-child){margin-top:calc(var(--card-padding) * -1);border-top:none!important}.m_599a2148:where(:last-child){margin-bottom:calc(var(--card-padding) * -1);border-bottom:none!important}.m_599a2148:where([data-inherit-padding]){padding-inline:var(--card-padding)}.m_599a2148:where([data-with-border]){border-top:calc(.0625rem * var(--mantine-scale)) solid;border-bottom:calc(.0625rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_599a2148{border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_599a2148{border-color:var(--mantine-color-dark-4)}.m_599a2148+.m_599a2148{border-top:none!important}.m_4451eb3a{display:flex;align-items:center;justify-content:center}.m_4451eb3a:where([data-inline]){display:inline-flex}.m_f59ffda3{--chip-size-xs: calc(1.4375rem * var(--mantine-scale));--chip-size-sm: calc(1.75rem * var(--mantine-scale));--chip-size-md: calc(2rem * var(--mantine-scale));--chip-size-lg: calc(2.25rem * var(--mantine-scale));--chip-size-xl: calc(2.5rem * var(--mantine-scale));--chip-icon-size-xs: calc(.625rem * var(--mantine-scale));--chip-icon-size-sm: calc(.75rem * var(--mantine-scale));--chip-icon-size-md: calc(.875rem * var(--mantine-scale));--chip-icon-size-lg: calc(1rem * var(--mantine-scale));--chip-icon-size-xl: calc(1.125rem * var(--mantine-scale));--chip-padding-xs: calc(1rem * var(--mantine-scale));--chip-padding-sm: calc(1.25rem * var(--mantine-scale));--chip-padding-md: calc(1.5rem * var(--mantine-scale));--chip-padding-lg: calc(1.75rem * var(--mantine-scale));--chip-padding-xl: calc(2rem * var(--mantine-scale));--chip-checked-padding-xs: calc(.46875rem * var(--mantine-scale));--chip-checked-padding-sm: calc(.625rem * var(--mantine-scale));--chip-checked-padding-md: calc(.73125rem * var(--mantine-scale));--chip-checked-padding-lg: calc(.84375rem * var(--mantine-scale));--chip-checked-padding-xl: calc(.78125rem * var(--mantine-scale));--chip-spacing-xs: calc(.625rem * var(--mantine-scale));--chip-spacing-sm: calc(.75rem * var(--mantine-scale));--chip-spacing-md: calc(1rem * var(--mantine-scale));--chip-spacing-lg: calc(1.25rem * var(--mantine-scale));--chip-spacing-xl: calc(1.375rem * var(--mantine-scale));--chip-size: var(--chip-size-sm);--chip-icon-size: var(--chip-icon-size-sm);--chip-padding: var(--chip-padding-sm);--chip-spacing: var(--chip-spacing-sm);--chip-checked-padding: var(--chip-checked-padding-sm);--chip-bg: var(--mantine-primary-color-filled);--chip-hover: var(--mantine-primary-color-filled-hover);--chip-color: var(--mantine-color-white);--chip-bd: calc(.0625rem * var(--mantine-scale)) solid transparent}.m_be049a53{display:inline-flex;align-items:center;-webkit-user-select:none;user-select:none;border-radius:var(--chip-radius, 1000rem);height:var(--chip-size);font-size:var(--chip-fz, var(--mantine-font-size-sm));line-height:calc(var(--chip-size) - calc(.125rem * var(--mantine-scale)));padding-inline:var(--chip-padding);cursor:pointer;white-space:nowrap;-webkit-tap-highlight-color:transparent;border:calc(.0625rem * var(--mantine-scale)) solid transparent;color:var(--mantine-color-text)}.m_be049a53:where([data-checked]){padding:var(--chip-checked-padding)}.m_be049a53:where([data-disabled]){cursor:not-allowed}:where([data-mantine-color-scheme=light]) .m_be049a53:where([data-disabled]){background-color:var(--mantine-color-gray-2);color:var(--mantine-color-gray-5)}:where([data-mantine-color-scheme=dark]) .m_be049a53:where([data-disabled]){background-color:var(--mantine-color-dark-6);color:var(--mantine-color-dark-3)}:where([data-mantine-color-scheme=light]) .m_3904c1af:not([data-disabled]){background-color:var(--mantine-color-white);border:1px solid var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_3904c1af:not([data-disabled]){background-color:var(--mantine-color-dark-6);border:1px solid var(--mantine-color-dark-4)}@media (hover: hover){:where([data-mantine-color-scheme=light]) .m_3904c1af:not([data-disabled]):hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_3904c1af:not([data-disabled]):hover{background-color:var(--mantine-color-dark-5)}}@media (hover: none){:where([data-mantine-color-scheme=light]) .m_3904c1af:not([data-disabled]):active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_3904c1af:not([data-disabled]):active{background-color:var(--mantine-color-dark-5)}}.m_3904c1af:not([data-disabled]):where([data-checked]){--chip-icon-color: var(--chip-color);border:var(--chip-bd)}@media (hover: hover){.m_3904c1af:not([data-disabled]):where([data-checked]):hover{background-color:var(--chip-hover)}}@media (hover: none){.m_3904c1af:not([data-disabled]):where([data-checked]):active{background-color:var(--chip-hover)}}.m_fa109255:not([data-disabled]),.m_f7e165c3:not([data-disabled]){border:calc(.0625rem * var(--mantine-scale)) solid transparent;color:var(--mantine-color-text)}:where([data-mantine-color-scheme=light]) .m_fa109255:not([data-disabled]),:where([data-mantine-color-scheme=light]) .m_f7e165c3:not([data-disabled]){background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_fa109255:not([data-disabled]),:where([data-mantine-color-scheme=dark]) .m_f7e165c3:not([data-disabled]){background-color:var(--mantine-color-dark-5)}@media (hover: hover){:where([data-mantine-color-scheme=light]) .m_fa109255:not([data-disabled]):hover,:where([data-mantine-color-scheme=light]) .m_f7e165c3:not([data-disabled]):hover{background-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_fa109255:not([data-disabled]):hover,:where([data-mantine-color-scheme=dark]) .m_f7e165c3:not([data-disabled]):hover{background-color:var(--mantine-color-dark-4)}}@media (hover: none){:where([data-mantine-color-scheme=light]) .m_fa109255:not([data-disabled]):active,:where([data-mantine-color-scheme=light]) .m_f7e165c3:not([data-disabled]):active{background-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_fa109255:not([data-disabled]):active,:where([data-mantine-color-scheme=dark]) .m_f7e165c3:not([data-disabled]):active{background-color:var(--mantine-color-dark-4)}}.m_fa109255:not([data-disabled]):where([data-checked]),.m_f7e165c3:not([data-disabled]):where([data-checked]){--chip-icon-color: var(--chip-color);color:var(--chip-color);background-color:var(--chip-bg)}@media (hover: hover){.m_fa109255:not([data-disabled]):where([data-checked]):hover,.m_f7e165c3:not([data-disabled]):where([data-checked]):hover{background-color:var(--chip-hover)}}@media (hover: none){.m_fa109255:not([data-disabled]):where([data-checked]):active,.m_f7e165c3:not([data-disabled]):where([data-checked]):active{background-color:var(--chip-hover)}}.m_9ac86df9{width:calc(var(--chip-icon-size) + (var(--chip-spacing) / 1.5));max-width:calc(var(--chip-icon-size) + (var(--chip-spacing) / 1.5));height:var(--chip-icon-size);display:flex;align-items:center;overflow:hidden}.m_d6d72580{width:var(--chip-icon-size);height:var(--chip-icon-size);display:block;color:var(--chip-icon-color, inherit)}.m_bde07329{width:0;height:0;padding:0;opacity:0;margin:0}.m_bde07329:focus-visible+.m_be049a53{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.m_b183c0a2{font-family:var(--mantine-font-family-monospace);line-height:var(--mantine-line-height);padding:2px calc(var(--mantine-spacing-xs) / 2);border-radius:var(--mantine-radius-sm);font-size:var(--mantine-font-size-xs);margin:0;overflow:auto}:where([data-mantine-color-scheme=light]) .m_b183c0a2{background-color:var(--code-bg, var(--mantine-color-gray-1));color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_b183c0a2{background-color:var(--code-bg, var(--mantine-color-dark-5));color:var(--mantine-color-white)}.m_b183c0a2[data-block]{padding:var(--mantine-spacing-xs)}.m_de3d2490{--cs-size: calc(1.75rem * var(--mantine-scale));--cs-radius: calc(62.5rem * var(--mantine-scale));-webkit-tap-highlight-color:transparent;border:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;display:block;line-height:1;position:relative;width:var(--cs-size);height:var(--cs-size);min-width:var(--cs-size);min-height:var(--cs-size);border-radius:var(--cs-radius);color:inherit;text-decoration:none}[data-mantine-color-scheme=light] .m_de3d2490{--alpha-overlay-color: var(--mantine-color-gray-3);--alpha-overlay-bg: var(--mantine-color-white)}[data-mantine-color-scheme=dark] .m_de3d2490{--alpha-overlay-color: var(--mantine-color-dark-4);--alpha-overlay-bg: var(--mantine-color-dark-7)}.m_862f3d1b{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:var(--cs-radius)}.m_98ae7f22{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:var(--cs-radius);z-index:1;box-shadow:#0000001a 0 0 0 calc(.0625rem * var(--mantine-scale)) inset,#00000026 0 0 calc(.25rem * var(--mantine-scale)) inset}.m_95709ac0{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:var(--cs-radius);background-size:calc(.5rem * var(--mantine-scale)) calc(.5rem * var(--mantine-scale));background-position:0 0,0 calc(.25rem * var(--mantine-scale)),calc(.25rem * var(--mantine-scale)) calc(-.25rem * var(--mantine-scale)),calc(-.25rem * var(--mantine-scale)) 0;background-image:linear-gradient(45deg,var(--alpha-overlay-color) 25%,transparent 25%),linear-gradient(-45deg,var(--alpha-overlay-color) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--alpha-overlay-color) 75%),linear-gradient(-45deg,var(--alpha-overlay-bg) 75%,var(--alpha-overlay-color) 75%)}.m_93e74e3{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:var(--cs-radius);z-index:2;display:flex;align-items:center;justify-content:center}.m_fee9c77{--cp-width-xs: calc(11.25rem * var(--mantine-scale));--cp-width-sm: calc(12.5rem * var(--mantine-scale));--cp-width-md: calc(15rem * var(--mantine-scale));--cp-width-lg: calc(17.5rem * var(--mantine-scale));--cp-width-xl: calc(20rem * var(--mantine-scale));--cp-preview-size-xs: calc(1.625rem * var(--mantine-scale));--cp-preview-size-sm: calc(2.125rem * var(--mantine-scale));--cp-preview-size-md: calc(2.625rem * var(--mantine-scale));--cp-preview-size-lg: calc(3.125rem * var(--mantine-scale));--cp-preview-size-xl: calc(3.375rem * var(--mantine-scale));--cp-thumb-size-xs: calc(.5rem * var(--mantine-scale));--cp-thumb-size-sm: calc(.75rem * var(--mantine-scale));--cp-thumb-size-md: calc(1rem * var(--mantine-scale));--cp-thumb-size-lg: calc(1.25rem * var(--mantine-scale));--cp-thumb-size-xl: calc(1.375rem * var(--mantine-scale));--cp-saturation-height-xs: calc(6.25rem * var(--mantine-scale));--cp-saturation-height-sm: calc(6.875rem * var(--mantine-scale));--cp-saturation-height-md: calc(7.5rem * var(--mantine-scale));--cp-saturation-height-lg: calc(8.75rem * var(--mantine-scale));--cp-saturation-height-xl: calc(10rem * var(--mantine-scale));--cp-preview-size: var(--cp-preview-size-sm);--cp-thumb-size: var(--cp-thumb-size-sm);--cp-saturation-height: var(--cp-saturation-height-sm);--cp-width: var(--cp-width-sm);--cp-body-spacing: var(--mantine-spacing-sm);width:var(--cp-width);padding:calc(.0625rem * var(--mantine-scale))}.m_fee9c77:where([data-full-width]){width:100%}.m_9dddfbac{width:var(--cp-preview-size);height:var(--cp-preview-size)}.m_bffecc3e{display:flex;padding-top:calc(var(--cp-body-spacing) / 2)}.m_3283bb96{flex:1}.m_3283bb96:not(:only-child){margin-inline-end:var(--mantine-spacing-xs)}.m_40d572ba{overflow:hidden;position:absolute;box-shadow:0 0 1px #0009;border:2px solid var(--mantine-color-white);width:var(--cp-thumb-size);height:var(--cp-thumb-size);border-radius:var(--cp-thumb-size);left:calc(var(--thumb-x-offset) - var(--cp-thumb-size) / 2);top:calc(var(--thumb-y-offset) - var(--cp-thumb-size) / 2)}.m_d8ee6fd8{height:unset!important;width:unset!important;min-width:0!important;min-height:0!important;margin:calc(.125rem * var(--mantine-scale));cursor:pointer;padding-bottom:calc(var(--cp-swatch-size) - calc(.25rem * var(--mantine-scale)));flex:0 0 calc(var(--cp-swatch-size) - calc(.25rem * var(--mantine-scale)))}.m_5711e686{margin-top:calc(.3125rem * var(--mantine-scale));margin-inline:calc(-.125rem * var(--mantine-scale));display:flex;flex-wrap:wrap}.m_202a296e{--cp-thumb-size-xs: calc(.5rem * var(--mantine-scale));--cp-thumb-size-sm: calc(.75rem * var(--mantine-scale));--cp-thumb-size-md: calc(1rem * var(--mantine-scale));--cp-thumb-size-lg: calc(1.25rem * var(--mantine-scale));--cp-thumb-size-xl: calc(1.375rem * var(--mantine-scale));-webkit-tap-highlight-color:transparent;position:relative;height:var(--cp-saturation-height);border-radius:var(--mantine-radius-sm);margin:calc(var(--cp-thumb-size) / 2)}.m_202a296e:where([data-focus-ring=auto]):focus:focus-visible .m_40d572ba{outline:2px solid var(--mantine-color-blue-filled)}.m_202a296e:where([data-focus-ring=always]):focus .m_40d572ba{outline:2px solid var(--mantine-color-blue-filled)}.m_11b3db02{position:absolute;border-radius:var(--mantine-radius-sm);inset:calc(var(--cp-thumb-size) * -1 / 2 - calc(.0625rem * var(--mantine-scale)))}.m_d856d47d{--cp-thumb-size-xs: calc(.5rem * var(--mantine-scale));--cp-thumb-size-sm: calc(.75rem * var(--mantine-scale));--cp-thumb-size-md: calc(1rem * var(--mantine-scale));--cp-thumb-size-lg: calc(1.25rem * var(--mantine-scale));--cp-thumb-size-xl: calc(1.375rem * var(--mantine-scale));--cp-thumb-size: var(--cp-thumb-size, calc(.75rem * var(--mantine-scale)));position:relative;height:calc(var(--cp-thumb-size) + calc(.125rem * var(--mantine-scale)));margin-inline:calc(var(--cp-thumb-size) / 2);outline:none}.m_d856d47d+.m_d856d47d{margin-top:calc(.375rem * var(--mantine-scale))}.m_d856d47d:where([data-focus-ring=auto]):focus:focus-visible .m_40d572ba{outline:2px solid var(--mantine-color-blue-filled)}.m_d856d47d:where([data-focus-ring=always]):focus .m_40d572ba{outline:2px solid var(--mantine-color-blue-filled)}:where([data-mantine-color-scheme=light]) .m_d856d47d{--slider-checkers: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_d856d47d{--slider-checkers: var(--mantine-color-dark-4)}.m_8f327113{position:absolute;top:0;bottom:0;inset-inline:calc(var(--cp-thumb-size) * -1 / 2 - calc(.0625rem * var(--mantine-scale)));border-radius:10000rem}.m_b077c2bc{--ci-eye-dropper-icon-size-xs: calc(.875rem * var(--mantine-scale));--ci-eye-dropper-icon-size-sm: calc(1rem * var(--mantine-scale));--ci-eye-dropper-icon-size-md: calc(1.125rem * var(--mantine-scale));--ci-eye-dropper-icon-size-lg: calc(1.25rem * var(--mantine-scale));--ci-eye-dropper-icon-size-xl: calc(1.375rem * var(--mantine-scale));--ci-eye-dropper-icon-size: var(--ci-eye-dropper-icon-size-sm)}.m_c5ccdcab{--ci-preview-size-xs: calc(1rem * var(--mantine-scale));--ci-preview-size-sm: calc(1.125rem * var(--mantine-scale));--ci-preview-size-md: calc(1.375rem * var(--mantine-scale));--ci-preview-size-lg: calc(1.75rem * var(--mantine-scale));--ci-preview-size-xl: calc(2.25rem * var(--mantine-scale));--ci-preview-size: var(--ci-preview-size-sm)}.m_5ece2cd7{padding:calc(.5rem * var(--mantine-scale))}.m_7485cace{--container-size-xs: calc(33.75rem * var(--mantine-scale));--container-size-sm: calc(45rem * var(--mantine-scale));--container-size-md: calc(60rem * var(--mantine-scale));--container-size-lg: calc(71.25rem * var(--mantine-scale));--container-size-xl: calc(82.5rem * var(--mantine-scale));--container-size: var(--container-size-md);max-width:var(--container-size);padding-inline:var(--mantine-spacing-md);margin-inline:auto}.m_7485cace:where([data-fluid]){max-width:100%}.m_e2125a27{--dialog-size-xs: calc(10rem * var(--mantine-scale));--dialog-size-sm: calc(12.5rem * var(--mantine-scale));--dialog-size-md: calc(21.25rem * var(--mantine-scale));--dialog-size-lg: calc(25rem * var(--mantine-scale));--dialog-size-xl: calc(31.25rem * var(--mantine-scale));--dialog-size: var(--dialog-size-md);position:relative;width:var(--dialog-size);max-width:calc(100vw - var(--mantine-spacing-xl) * 2);min-height:calc(3.125rem * var(--mantine-scale))}.m_5abab665{position:absolute;top:calc(var(--mantine-spacing-md) / 2);inset-inline-end:calc(var(--mantine-spacing-md) / 2)}.m_3eebeb36{--divider-size-xs: calc(.0625rem * var(--mantine-scale));--divider-size-sm: calc(.125rem * var(--mantine-scale));--divider-size-md: calc(.1875rem * var(--mantine-scale));--divider-size-lg: calc(.25rem * var(--mantine-scale));--divider-size-xl: calc(.3125rem * var(--mantine-scale));--divider-size: var(--divider-size-xs)}:where([data-mantine-color-scheme=light]) .m_3eebeb36{--divider-color: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_3eebeb36{--divider-color: var(--mantine-color-dark-4)}.m_3eebeb36:where([data-orientation=horizontal]){border-top:var(--divider-size) var(--divider-border-style, solid) var(--divider-color)}.m_3eebeb36:where([data-orientation=vertical]){border-inline-start:var(--divider-size) var(--divider-border-style, solid) var(--divider-color);height:auto;align-self:stretch}.m_3eebeb36:where([data-with-label]){border:0}.m_9e365f20{display:flex;align-items:center;font-size:var(--mantine-font-size-xs);color:var(--mantine-color-dimmed);white-space:nowrap}.m_9e365f20:where([data-position=left]):before{display:none}.m_9e365f20:where([data-position=right]):after{display:none}.m_9e365f20:before{content:"";flex:1;height:calc(.0625rem * var(--mantine-scale));border-top:var(--divider-size) var(--divider-border-style, solid) var(--divider-color);margin-inline-end:var(--mantine-spacing-xs)}.m_9e365f20:after{content:"";flex:1;height:calc(.0625rem * var(--mantine-scale));border-top:var(--divider-size) var(--divider-border-style, solid) var(--divider-color);margin-inline-start:var(--mantine-spacing-xs)}.m_f11b401e{--drawer-size-xs: calc(20rem * var(--mantine-scale));--drawer-size-sm: calc(23.75rem * var(--mantine-scale));--drawer-size-md: calc(27.5rem * var(--mantine-scale));--drawer-size-lg: calc(38.75rem * var(--mantine-scale));--drawer-size-xl: calc(48.75rem * var(--mantine-scale));--drawer-size: var(--drawer-size-md);--drawer-offset: 0rem}.m_5a7c2c9{z-index:1000}.m_b8a05bbd{flex:var(--drawer-flex, 0 0 var(--drawer-size));height:var(--drawer-height, calc(100% - var(--drawer-offset) * 2));margin:var(--drawer-offset);max-width:100%;max-height:100%;overflow-y:auto}.m_31cd769a{display:flex;justify-content:var(--drawer-justify, flex-start);align-items:var(--drawer-align, flex-start)}.m_e9408a47{padding:var(--mantine-spacing-lg);padding-top:var(--mantine-spacing-xs);border-radius:var(--fieldset-radius, var(--mantine-radius-default));min-inline-size:auto}.m_84c9523a{border:calc(.0625rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_84c9523a{border-color:var(--mantine-color-gray-3);background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_84c9523a{border-color:var(--mantine-color-dark-4);background-color:var(--mantine-color-dark-7)}.m_ef274e49{border:calc(.0625rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_ef274e49{border-color:var(--mantine-color-gray-3);background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_ef274e49{border-color:var(--mantine-color-dark-4);background-color:var(--mantine-color-dark-6)}.m_eda993d3{padding:0;border:0;border-radius:0}.m_90794832{font-size:var(--mantine-font-size-sm)}.m_74ca27fe{padding:0;margin-bottom:var(--mantine-spacing-sm)}.m_410352e9{--grid-overflow: visible;--grid-margin: calc(var(--grid-gutter) / -2);--grid-col-padding: calc(var(--grid-gutter) / 2);overflow:var(--grid-overflow)}.m_dee7bd2f{width:calc(100% + var(--grid-gutter));display:flex;flex-wrap:wrap;justify-content:var(--grid-justify);align-items:var(--grid-align);margin:var(--grid-margin)}.m_96bdd299{--col-flex-grow: 0;--col-offset: 0rem;flex-shrink:0;order:var(--col-order);flex-basis:var(--col-flex-basis);width:var(--col-width);max-width:var(--col-max-width);flex-grow:var(--col-flex-grow);margin-inline-start:var(--col-offset);padding:var(--grid-col-padding)}.m_bcb3f3c2{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=light]) .m_bcb3f3c2{background-color:var(--mark-bg-light)}:where([data-mantine-color-scheme=dark]) .m_bcb3f3c2{background-color:var(--mark-bg-dark)}.m_9e117634{display:block;flex:0;object-fit:var(--image-object-fit, cover);width:100%;border-radius:var(--image-radius, 0)}@keyframes m_885901b1{0%{opacity:.6;transform:scale(0)}to{opacity:0;transform:scale(2.8)}}.m_e5262200{--indicator-size: calc(.625rem * var(--mantine-scale));--indicator-color: var(--mantine-primary-color-filled);position:relative;display:block}.m_e5262200:where([data-inline]){display:inline-block}.m_760d1fb1{position:absolute;top:var(--indicator-top);left:var(--indicator-left);right:var(--indicator-right);bottom:var(--indicator-bottom);transform:translate(var(--indicator-translate-x),var(--indicator-translate-y));min-width:var(--indicator-size);height:var(--indicator-size);border-radius:var(--indicator-radius, 1000rem);z-index:var(--indicator-z-index, 200);display:flex;align-items:center;justify-content:center;font-size:var(--mantine-font-size-xs);background-color:var(--indicator-color);color:var(--indicator-text-color, var(--mantine-color-white));white-space:nowrap}.m_760d1fb1:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-color:var(--indicator-color);border-radius:var(--indicator-radius, 1000rem);z-index:-1}.m_760d1fb1:where([data-with-label]){padding-inline:calc(var(--mantine-spacing-xs) / 2)}.m_760d1fb1:where([data-with-border]){border:2px solid var(--mantine-color-body)}.m_760d1fb1[data-processing]:before{animation:m_885901b1 1s linear infinite}.m_dc6f14e2{--kbd-fz-xs: calc(.625rem * var(--mantine-scale));--kbd-fz-sm: calc(.75rem * var(--mantine-scale));--kbd-fz-md: calc(.875rem * var(--mantine-scale));--kbd-fz-lg: calc(1rem * var(--mantine-scale));--kbd-fz-xl: calc(1.25rem * var(--mantine-scale));--kbd-fz: var(--kbd-fz-sm);--kbd-padding-xs: calc(.125rem * var(--mantine-scale)) calc(.25rem * var(--mantine-scale));--kbd-padding-sm: calc(.1875rem * var(--mantine-scale)) calc(.3125rem * var(--mantine-scale));--kbd-padding-md: calc(.25rem * var(--mantine-scale)) calc(.4375rem * var(--mantine-scale));--kbd-padding-lg: calc(.3125rem * var(--mantine-scale)) calc(.5625rem * var(--mantine-scale));--kbd-padding-xl: calc(.5rem * var(--mantine-scale)) calc(.875rem * var(--mantine-scale));--kbd-padding: var(--kbd-padding-sm);font-family:var(--mantine-font-family-monospace);line-height:var(--mantine-line-height);font-weight:700;padding:var(--kbd-padding);font-size:var(--kbd-fz);border-radius:var(--mantine-radius-sm);border:calc(.0625rem * var(--mantine-scale)) solid;border-bottom-width:calc(.1875rem * var(--mantine-scale));unicode-bidi:embed}:where([data-mantine-color-scheme=light]) .m_dc6f14e2{border-color:var(--mantine-color-gray-3);color:var(--mantine-color-gray-7);background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_dc6f14e2{border-color:var(--mantine-color-dark-4);color:var(--mantine-color-dark-0);background-color:var(--mantine-color-dark-6)}.m_abbac491{--list-fz: var(--mantine-font-size-md);--list-lh: var(--mantine-line-height-md);list-style-position:inside;font-size:var(--list-fz);line-height:var(--list-lh);margin:0;padding:0}.m_abbac491:where([data-with-padding]){padding-inline-start:var(--mantine-spacing-md)}.m_abb6bec2{white-space:nowrap;line-height:var(--list-lh)}.m_abb6bec2:where([data-with-icon]){list-style:none}.m_abb6bec2:where([data-with-icon]) .m_75cd9f71{--li-direction: row;--li-align: center}.m_abb6bec2:where(:not(:first-of-type)){margin-top:var(--list-spacing, 0)}.m_abb6bec2:where([data-centered]){line-height:1}.m_75cd9f71{display:inline-flex;flex-direction:var(--li-direction, column);align-items:var(--li-align, flex-start);white-space:normal}.m_60f83e5b{display:inline-block;vertical-align:middle;margin-inline-end:var(--mantine-spacing-sm)}.m_6e45937b{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;overflow:hidden;z-index:var(--lo-z-index)}.m_e8eb006c{position:relative;z-index:calc(var(--lo-z-index) + 1)}.m_df587f17{z-index:var(--lo-z-index)}.m_dc9b7c9f{padding:calc(.25rem * var(--mantine-scale))}.m_9bfac126{color:var(--mantine-color-dimmed);font-weight:500;font-size:var(--mantine-font-size-xs);padding:calc(var(--mantine-spacing-xs) / 2) var(--mantine-spacing-sm);cursor:default}.m_efdf90cb{margin-top:calc(.25rem * var(--mantine-scale));margin-bottom:calc(.25rem * var(--mantine-scale));border-top:calc(.0625rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_efdf90cb{border-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_efdf90cb{border-color:var(--mantine-color-dark-4)}.m_99ac2aa1{font-size:var(--mantine-font-size-sm);width:100%;padding:calc(var(--mantine-spacing-xs) / 1.5) var(--mantine-spacing-sm);border-radius:var(--popover-radius, var(--mantine-radius-default));color:var(--menu-item-color, var(--mantine-color-text));display:flex;align-items:center;-webkit-user-select:none;user-select:none}.m_99ac2aa1:where([data-disabled],:disabled){color:var(--mantine-color-dimmed);opacity:.6;pointer-events:none}:where([data-mantine-color-scheme=light]) .m_99ac2aa1:where([data-hovered]){background-color:var(--menu-item-hover, var(--mantine-color-gray-1))}:where([data-mantine-color-scheme=dark]) .m_99ac2aa1:where([data-hovered]){background-color:var(--menu-item-hover, var(--mantine-color-dark-4))}.m_5476e0d3{flex:1}.m_8b75e504{display:flex;justify-content:center;align-items:center}.m_8b75e504:where([data-position=left]){margin-inline-end:var(--mantine-spacing-xs)}.m_8b75e504:where([data-position=right]){margin-inline-start:var(--mantine-spacing-xs)}.m_9df02822{--modal-size-xs: calc(20rem * var(--mantine-scale));--modal-size-sm: calc(23.75rem * var(--mantine-scale));--modal-size-md: calc(27.5rem * var(--mantine-scale));--modal-size-lg: calc(38.75rem * var(--mantine-scale));--modal-size-xl: calc(48.75rem * var(--mantine-scale));--modal-size: var(--modal-size-md);--modal-y-offset: 5dvh;--modal-x-offset: 5vw}.m_9df02822[data-full-screen]{--modal-border-radius: 0 !important}.m_9df02822[data-full-screen] .m_54c44539{--modal-content-flex: 0 0 100%;--modal-content-max-height: auto;--modal-content-height: 100dvh}.m_9df02822[data-full-screen] .m_1f958f16{--modal-inner-y-offset: 0;--modal-inner-x-offset: 0}.m_9df02822[data-centered] .m_1f958f16{--modal-inner-align: center}.m_d0e2b9cd{border-start-start-radius:var(--modal-radius, var(--mantine-radius-default));border-start-end-radius:var(--modal-radius, var(--mantine-radius-default))}.m_54c44539{flex:var(--modal-content-flex, 0 0 var(--modal-size));max-width:100%;max-height:var(--modal-content-max-height, calc(100dvh - var(--modal-y-offset) * 2));height:var(--modal-content-height, auto);overflow-y:auto}.m_54c44539[data-full-screen]{border-radius:0}.m_1f958f16{display:flex;justify-content:center;align-items:var(--modal-inner-align, flex-start);padding-top:var(--modal-inner-y-offset, var(--modal-y-offset));padding-bottom:var(--modal-inner-y-offset, var(--modal-y-offset));padding-inline:var(--modal-inner-x-offset, var(--modal-x-offset))}.m_7cda1cd6{--pill-fz-xs: calc(.625rem * var(--mantine-scale));--pill-fz-sm: calc(.75rem * var(--mantine-scale));--pill-fz-md: calc(.875rem * var(--mantine-scale));--pill-fz-lg: calc(1rem * var(--mantine-scale));--pill-fz-xl: calc(1.125rem * var(--mantine-scale));--pill-height-xs: calc(1.125rem * var(--mantine-scale));--pill-height-sm: calc(1.375rem * var(--mantine-scale));--pill-height-md: calc(1.5625rem * var(--mantine-scale));--pill-height-lg: calc(1.75rem * var(--mantine-scale));--pill-height-xl: calc(2rem * var(--mantine-scale));--pill-fz: var(--pill-fz-sm);--pill-height: var(--pill-height-sm);font-size:var(--pill-fz);flex:0;height:var(--pill-height);padding-inline:.8em;display:inline-flex;align-items:center;border-radius:var(--pill-radius, 1000rem);line-height:1;white-space:nowrap;user-select:none;-webkit-user-select:none;max-width:100%}:where([data-mantine-color-scheme=dark]) .m_7cda1cd6{background-color:var(--mantine-color-dark-7);color:var(--mantine-color-dark-0)}:where([data-mantine-color-scheme=light]) .m_7cda1cd6{color:var(--mantine-color-black)}.m_7cda1cd6:where([data-with-remove]:not(:has(button:disabled))){padding-inline-end:0}.m_7cda1cd6:where([data-disabled],:has(button:disabled)){cursor:not-allowed}:where([data-mantine-color-scheme=light]) .m_44da308b{background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=light]) .m_44da308b:where([data-disabled],:has(button:disabled)){background-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=light]) .m_e3a01f8{background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=light]) .m_e3a01f8:where([data-disabled],:has(button:disabled)){background-color:var(--mantine-color-gray-3)}.m_1e0e6180{cursor:inherit;overflow:hidden;height:100%;line-height:var(--pill-height);text-overflow:ellipsis}.m_ae386778{color:inherit;font-size:inherit;height:100%;min-height:unset;min-width:2em;width:unset;border-radius:0;padding-inline-start:.1em;padding-inline-end:.3em;flex:0}.m_7cda1cd6[data-disabled]>.m_ae386778,.m_ae386778:disabled{display:none;background-color:transparent;width:.8em;min-width:.8em;padding:0;cursor:not-allowed}.m_7cda1cd6[data-disabled]>.m_ae386778>svg,.m_ae386778:disabled>svg{display:none}.m_ae386778>svg{pointer-events:none}.m_1dcfd90b{--pg-gap-xs: calc(.375rem * var(--mantine-scale));--pg-gap-sm: calc(.5rem * var(--mantine-scale));--pg-gap-md: calc(.625rem * var(--mantine-scale));--pg-gap-lg: calc(.75rem * var(--mantine-scale));--pg-gap-xl: calc(.75rem * var(--mantine-scale));--pg-gap: var(--pg-gap-sm);display:flex;align-items:center;gap:var(--pg-gap);flex-wrap:wrap}.m_45c4369d{background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;min-width:calc(6.25rem * var(--mantine-scale));flex:1;border:0;font-size:inherit;height:1.6em;color:inherit;padding:0}.m_45c4369d::placeholder{color:var(--input-placeholder-color);opacity:1}.m_45c4369d:where([data-type=hidden],[data-type=auto]){height:calc(.0625rem * var(--mantine-scale));width:calc(.0625rem * var(--mantine-scale));top:0;left:0;pointer-events:none;position:absolute;opacity:0}.m_45c4369d:focus{outline:none}.m_45c4369d:where([data-type=auto]:focus){height:1.6em;visibility:visible;opacity:1;position:static}.m_45c4369d:where([data-pointer]:not([data-disabled],:disabled)){cursor:pointer}.m_45c4369d:where([data-disabled],:disabled){cursor:not-allowed}.m_f0824112{--nl-bg: var(--mantine-primary-color-light);--nl-hover: var(--mantine-primary-color-light-hover);--nl-color: var(--mantine-primary-color-light-color);display:flex;align-items:center;width:100%;padding:8px var(--mantine-spacing-sm);-webkit-user-select:none;user-select:none}@media (hover: hover){:where([data-mantine-color-scheme=light]) .m_f0824112:hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_f0824112:hover{background-color:var(--mantine-color-dark-6)}}@media (hover: none){:where([data-mantine-color-scheme=light]) .m_f0824112:active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_f0824112:active{background-color:var(--mantine-color-dark-6)}}.m_f0824112:where([data-disabled]){opacity:.4;pointer-events:none}.m_f0824112:where([data-active],[aria-current=page]){background-color:var(--nl-bg);color:var(--nl-color)}@media (hover: hover){.m_f0824112:where([data-active],[aria-current=page]):hover{background-color:var(--nl-hover)}}@media (hover: none){.m_f0824112:where([data-active],[aria-current=page]):active{background-color:var(--nl-hover)}}.m_f0824112:where([data-active],[aria-current=page]) .m_57492dcc{--description-opacity: .9;--description-color: var(--nl-color)}.m_690090b5{display:flex;align-items:center;justify-content:center;transition:transform .15s ease}.m_690090b5>svg{display:block}.m_690090b5:where([data-position=left]){margin-inline-end:var(--mantine-spacing-sm)}.m_690090b5:where([data-position=right]){margin-inline-start:var(--mantine-spacing-sm)}.m_690090b5:where([data-rotate]){transform:rotate(90deg)}.m_1f6ac4c4{font-size:var(--mantine-font-size-sm)}.m_f07af9d2{flex:1;overflow:hidden;text-overflow:ellipsis}.m_f07af9d2:where([data-no-wrap]){white-space:nowrap}.m_57492dcc{display:block;font-size:var(--mantine-font-size-xs);opacity:var(--description-opacity, 1);color:var(--description-color, var(--mantine-color-dimmed));overflow:hidden;text-overflow:ellipsis}:where([data-no-wrap]) .m_57492dcc{white-space:nowrap}.m_e17b862f{padding-inline-start:var(--nl-offset, var(--mantine-spacing-lg))}.m_1fd8a00b{transform:rotate(-90deg)}.m_a513464{--notification-radius: var(--mantine-radius-default);--notification-color: var(--mantine-primary-color-filled);overflow:hidden;box-sizing:border-box;position:relative;display:flex;align-items:center;padding-inline-start:calc(1.375rem * var(--mantine-scale));padding-inline-end:var(--mantine-spacing-xs);padding-top:var(--mantine-spacing-xs);padding-bottom:var(--mantine-spacing-xs);border-radius:var(--notification-radius);box-shadow:var(--mantine-shadow-lg)}.m_a513464:before{content:"";display:block;position:absolute;width:calc(.375rem * var(--mantine-scale));top:var(--notification-radius);bottom:var(--notification-radius);inset-inline-start:calc(.25rem * var(--mantine-scale));border-radius:var(--notification-radius);background-color:var(--notification-color)}:where([data-mantine-color-scheme=light]) .m_a513464{background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_a513464{background-color:var(--mantine-color-dark-6)}.m_a513464:where([data-with-icon]){padding-inline-start:var(--mantine-spacing-xs)}.m_a513464:where([data-with-icon]):before{display:none}:where([data-mantine-color-scheme=light]) .m_a513464:where([data-with-border]){border:1px solid var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_a513464:where([data-with-border]){border:1px solid var(--mantine-color-dark-4)}.m_a4ceffb{box-sizing:border-box;margin-inline-end:var(--mantine-spacing-md);width:calc(1.75rem * var(--mantine-scale));height:calc(1.75rem * var(--mantine-scale));border-radius:calc(1.75rem * var(--mantine-scale));display:flex;align-items:center;justify-content:center;background-color:var(--notification-color);color:var(--mantine-color-white)}.m_b0920b15{margin-inline-end:var(--mantine-spacing-md)}.m_a49ed24{flex:1;overflow:hidden;margin-inline-end:var(--mantine-spacing-xs)}.m_3feedf16{margin-bottom:calc(.125rem * var(--mantine-scale));overflow:hidden;text-overflow:ellipsis;font-size:var(--mantine-font-size-sm);line-height:var(--mantine-line-height-sm);font-weight:500}:where([data-mantine-color-scheme=light]) .m_3feedf16{color:var(--mantine-color-gray-9)}:where([data-mantine-color-scheme=dark]) .m_3feedf16{color:var(--mantine-color-white)}.m_3d733a3a{font-size:var(--mantine-font-size-sm);line-height:var(--mantine-line-height-sm);overflow:hidden;text-overflow:ellipsis}:where([data-mantine-color-scheme=light]) .m_3d733a3a{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_3d733a3a{color:var(--mantine-color-dark-0)}:where([data-mantine-color-scheme=light]) .m_3d733a3a:where([data-with-title]){color:var(--mantine-color-gray-6)}:where([data-mantine-color-scheme=dark]) .m_3d733a3a:where([data-with-title]){color:var(--mantine-color-dark-2)}@media (hover: hover){:where([data-mantine-color-scheme=light]) .m_919a4d88:hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_919a4d88:hover{background-color:var(--mantine-color-dark-8)}}@media (hover: none){:where([data-mantine-color-scheme=light]) .m_919a4d88:active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_919a4d88:active{background-color:var(--mantine-color-dark-8)}}.m_e2f5cd4e{--ni-right-section-width-xs: calc(1.0625rem * var(--mantine-scale));--ni-right-section-width-sm: calc(1.5rem * var(--mantine-scale));--ni-right-section-width-md: calc(1.6875rem * var(--mantine-scale));--ni-right-section-width-lg: calc(1.9375rem * var(--mantine-scale));--ni-right-section-width-xl: calc(2.125rem * var(--mantine-scale))}.m_95e17d22{--ni-chevron-size-xs: calc(.625rem * var(--mantine-scale));--ni-chevron-size-sm: calc(.875rem * var(--mantine-scale));--ni-chevron-size-md: calc(1rem * var(--mantine-scale));--ni-chevron-size-lg: calc(1.125rem * var(--mantine-scale));--ni-chevron-size-xl: calc(1.25rem * var(--mantine-scale));--ni-chevron-size: var(--ni-chevron-size-sm);display:flex;flex-direction:column;width:100%;height:calc(var(--input-height) - calc(.125rem * var(--mantine-scale)));max-width:calc(var(--ni-chevron-size) * 1.7);margin-inline-start:auto}.m_80b4b171{--control-border: 1px solid var(--input-bd);--control-radius: calc(var(--input-radius) - calc(.0625rem * var(--mantine-scale)));flex:0 0 50%;width:100%;padding:0;height:calc(var(--input-height) / 2 - calc(.0625rem * var(--mantine-scale)));border-inline-start:var(--control-border);display:flex;align-items:center;justify-content:center;color:var(--mantine-color-text);background-color:transparent;cursor:pointer}.m_80b4b171:where(:disabled){background-color:transparent;cursor:not-allowed;opacity:.6}:where([data-mantine-color-scheme=light]) .m_80b4b171:where(:disabled){color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_80b4b171:where(:disabled){color:var(--mantine-color-dark-3)}.m_e2f5cd4e[data-error] :where(.m_80b4b171){color:var(--mantine-color-error)}@media (hover: hover){:where([data-mantine-color-scheme=light]) .m_80b4b171:hover{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_80b4b171:hover{background-color:var(--mantine-color-dark-4)}}@media (hover: none){:where([data-mantine-color-scheme=light]) .m_80b4b171:active{background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_80b4b171:active{background-color:var(--mantine-color-dark-4)}}.m_80b4b171:where(:first-of-type){border-radius:0;border-start-end-radius:var(--control-radius)}.m_80b4b171:last-of-type{border-top:1 solid var(--input-bd);border-radius:0;border-end-end-radius:var(--control-radius)}.m_4addd315{--pagination-control-size-xs: calc(1.375rem * var(--mantine-scale));--pagination-control-size-sm: calc(1.625rem * var(--mantine-scale));--pagination-control-size-md: calc(2rem * var(--mantine-scale));--pagination-control-size-lg: calc(2.375rem * var(--mantine-scale));--pagination-control-size-xl: calc(2.75rem * var(--mantine-scale));--pagination-control-size: var(--pagination-control-size-md);--pagination-control-fz: var(--mantine-font-size-md);--pagination-active-bg: var(--mantine-primary-color-filled)}.m_326d024a{display:flex;align-items:center;justify-content:center;border:calc(.0625rem * var(--mantine-scale)) solid;cursor:pointer;color:var(--mantine-color-text);height:var(--pagination-control-size);min-width:var(--pagination-control-size);font-size:var(--pagination-control-fz);line-height:1;border-radius:var(--pagination-control-radius, var(--mantine-radius-default))}.m_326d024a:where([data-with-padding]){padding:calc(var(--pagination-control-size) / 4)}.m_326d024a:where(:disabled,[data-disabled]){cursor:not-allowed;opacity:.4}:where([data-mantine-color-scheme=light]) .m_326d024a{border-color:var(--mantine-color-gray-4);background-color:var(--mantine-color-white)}@media (hover: hover){:where([data-mantine-color-scheme=light]) .m_326d024a:hover:where(:not(:disabled,[data-disabled])){background-color:var(--mantine-color-gray-0)}}@media (hover: none){:where([data-mantine-color-scheme=light]) .m_326d024a:active:where(:not(:disabled,[data-disabled])){background-color:var(--mantine-color-gray-0)}}:where([data-mantine-color-scheme=dark]) .m_326d024a{border-color:var(--mantine-color-dark-4);background-color:var(--mantine-color-dark-6)}@media (hover: hover){:where([data-mantine-color-scheme=dark]) .m_326d024a:hover:where(:not(:disabled,[data-disabled])){background-color:var(--mantine-color-dark-5)}}@media (hover: none){:where([data-mantine-color-scheme=dark]) .m_326d024a:active:where(:not(:disabled,[data-disabled])){background-color:var(--mantine-color-dark-5)}}.m_326d024a:where([data-active]){background-color:var(--pagination-active-bg);border-color:var(--pagination-active-bg);color:var(--pagination-active-color, var(--mantine-color-white))}@media (hover: hover){.m_326d024a:where([data-active]):hover{background-color:var(--pagination-active-bg)}}@media (hover: none){.m_326d024a:where([data-active]):active{background-color:var(--pagination-active-bg)}}.m_4ad7767d{height:var(--pagination-control-size);min-width:var(--pagination-control-size);display:flex;align-items:center;justify-content:center;pointer-events:none}.m_f61ca620{--psi-button-size-xs: calc(1.375rem * var(--mantine-scale));--psi-button-size-sm: calc(1.625rem * var(--mantine-scale));--psi-button-size-md: calc(1.75rem * var(--mantine-scale));--psi-button-size-lg: calc(2rem * var(--mantine-scale));--psi-button-size-xl: calc(2.5rem * var(--mantine-scale));--psi-icon-size-xs: calc(.75rem * var(--mantine-scale));--psi-icon-size-sm: calc(.9375rem * var(--mantine-scale));--psi-icon-size-md: calc(1.0625rem * var(--mantine-scale));--psi-icon-size-lg: calc(1.1875rem * var(--mantine-scale));--psi-icon-size-xl: calc(1.3125rem * var(--mantine-scale));--psi-button-size: var(--psi-button-size-sm);--psi-icon-size: var(--psi-icon-size-sm)}.m_ccf8da4c{position:relative;overflow:hidden}.m_f2d85dd2{font-family:var(--mantine-font-family);background-color:transparent;border:0;padding-inline-end:var(--input-padding-inline-end);padding-inline-start:var(--input-padding-inline-start);position:absolute;top:0;right:0;bottom:0;left:0;outline:0;font-size:inherit;line-height:var(--mantine-line-height);height:100%;width:100%;color:inherit}.m_ccf8da4c[data-disabled] .m_f2d85dd2,.m_f2d85dd2:disabled{cursor:not-allowed}.m_f2d85dd2::placeholder{color:var(--input-placeholder-color);opacity:1}.m_f2d85dd2::-ms-reveal{display:none}.m_b1072d44{width:var(--psi-button-size);height:var(--psi-button-size);min-width:var(--psi-button-size);min-height:var(--psi-button-size)}.m_b1072d44:disabled{display:none}.m_f1cb205a{--pin-input-size-xs: calc(1.875rem * var(--mantine-scale));--pin-input-size-sm: calc(2.25rem * var(--mantine-scale));--pin-input-size-md: calc(2.625rem * var(--mantine-scale));--pin-input-size-lg: calc(3.125rem * var(--mantine-scale));--pin-input-size-xl: calc(3.75rem * var(--mantine-scale));--pin-input-size: var(--pin-input-size-sm)}.m_cb288ead{width:var(--pin-input-size);height:var(--pin-input-size)}@keyframes m_81a374bd{0%{background-position:0 0}to{background-position:calc(2.5rem * var(--mantine-scale)) 0}}.m_db6d6462{--progress-radius: var(--mantine-radius-default);--progress-size: var(--progress-size-md);--progress-size-xs: calc(.1875rem * var(--mantine-scale));--progress-size-sm: calc(.3125rem * var(--mantine-scale));--progress-size-md: calc(.5rem * var(--mantine-scale));--progress-size-lg: calc(.75rem * var(--mantine-scale));--progress-size-xl: calc(1rem * var(--mantine-scale));position:relative;height:var(--progress-size);border-radius:var(--progress-radius);overflow:hidden;display:flex}:where([data-mantine-color-scheme=light]) .m_db6d6462{background-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_db6d6462{background-color:var(--mantine-color-dark-4)}.m_2242eb65{background-color:var(--progress-section-color);height:100%;width:var(--progress-section-width);display:flex;align-items:center;justify-content:center;overflow:hidden;background-size:calc(1.25rem * var(--mantine-scale)) calc(1.25rem * var(--mantine-scale));transition:width var(--progress-transition-duration, .1s) ease}.m_2242eb65:where([data-striped]){background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.m_2242eb65:where([data-animated]){animation:m_81a374bd 1s linear infinite}.m_2242eb65:where(:last-of-type){border-radius:0;border-start-end-radius:var(--progress-radius);border-end-end-radius:var(--progress-radius)}.m_2242eb65:where(:first-of-type){border-radius:0;border-start-start-radius:var(--progress-radius);border-end-start-radius:var(--progress-radius)}.m_91e40b74{color:var(--progress-label-color, var(--mantine-color-white));font-weight:700;-webkit-user-select:none;user-select:none;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:min(calc(var(--progress-size) * .65),calc(1.125rem * var(--mantine-scale)));line-height:1;padding-inline:calc(.25rem * var(--mantine-scale))}.m_9dc8ae12{--card-radius: var(--mantine-radius-default);display:block;width:100%;border-radius:var(--card-radius);cursor:pointer}.m_9dc8ae12 :where(*){cursor:inherit}.m_9dc8ae12:where([data-with-border]){border:calc(.0625rem * var(--mantine-scale)) solid transparent}:where([data-mantine-color-scheme=light]) .m_9dc8ae12:where([data-with-border]){border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_9dc8ae12:where([data-with-border]){border-color:var(--mantine-color-dark-4)}.m_717d7ff6{--radio-size-xs: calc(1rem * var(--mantine-scale));--radio-size-sm: calc(1.25rem * var(--mantine-scale));--radio-size-md: calc(1.5rem * var(--mantine-scale));--radio-size-lg: calc(1.875rem * var(--mantine-scale));--radio-size-xl: calc(2.25rem * var(--mantine-scale));--radio-icon-size-xs: calc(.375rem * var(--mantine-scale));--radio-icon-size-sm: calc(.5rem * var(--mantine-scale));--radio-icon-size-md: calc(.625rem * var(--mantine-scale));--radio-icon-size-lg: calc(.875rem * var(--mantine-scale));--radio-icon-size-xl: calc(1rem * var(--mantine-scale));--radio-icon-size: var(--radio-icon-size-sm);--radio-size: var(--radio-size-sm);--radio-color: var(--mantine-primary-color-filled);--radio-icon-color: var(--mantine-color-white);position:relative;border:calc(.0625rem * var(--mantine-scale)) solid transparent;width:var(--radio-size);min-width:var(--radio-size);height:var(--radio-size);min-height:var(--radio-size);border-radius:var(--radio-radius, 10000px);transition:border-color .1s ease,background-color .1s ease;cursor:var(--mantine-cursor-type);-webkit-tap-highlight-color:transparent;display:flex;align-items:center;justify-content:center}:where([data-mantine-color-scheme=light]) .m_717d7ff6{background-color:var(--mantine-color-white);border-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_717d7ff6{background-color:var(--mantine-color-dark-6);border-color:var(--mantine-color-dark-4)}.m_717d7ff6[data-indeterminate],.m_717d7ff6[data-checked]{background-color:var(--radio-color);border-color:var(--radio-color)}.m_717d7ff6[data-indeterminate]>.m_3e4da632,.m_717d7ff6[data-checked]>.m_3e4da632{opacity:1;transform:none;color:var(--radio-icon-color)}.m_717d7ff6[data-disabled]{cursor:not-allowed}:where([data-mantine-color-scheme=light]) .m_717d7ff6[data-disabled]{background-color:var(--mantine-color-gray-2);border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_717d7ff6[data-disabled]{background-color:var(--mantine-color-dark-6);border-color:var(--mantine-color-dark-6)}[data-mantine-color-scheme=light] .m_717d7ff6[data-disabled][data-checked]>.m_3e4da632{color:var(--mantine-color-gray-5)}[data-mantine-color-scheme=dark] .m_717d7ff6[data-disabled][data-checked]>.m_3e4da632{color:var(--mantine-color-dark-3)}.m_2980836c[data-indeterminate]:not([data-disabled]),.m_2980836c[data-checked]:not([data-disabled]){background-color:transparent;border-color:var(--radio-color)}.m_2980836c[data-indeterminate]:not([data-disabled])>.m_3e4da632,.m_2980836c[data-checked]:not([data-disabled])>.m_3e4da632{color:var(--radio-color);opacity:1;transform:none}.m_3e4da632{display:block;width:var(--radio-icon-size);height:var(--radio-icon-size);color:transparent;pointer-events:none;transform:translateY(calc(.3125rem * var(--mantine-scale))) scale(.5);opacity:1;transition:transform .1s ease,opacity .1s ease}.m_f3f1af94{--radio-size-xs: calc(1rem * var(--mantine-scale));--radio-size-sm: calc(1.25rem * var(--mantine-scale));--radio-size-md: calc(1.5rem * var(--mantine-scale));--radio-size-lg: calc(1.875rem * var(--mantine-scale));--radio-size-xl: calc(2.25rem * var(--mantine-scale));--radio-size: var(--radio-size-sm);--radio-icon-size-xs: calc(.375rem * var(--mantine-scale));--radio-icon-size-sm: calc(.5rem * var(--mantine-scale));--radio-icon-size-md: calc(.625rem * var(--mantine-scale));--radio-icon-size-lg: calc(.875rem * var(--mantine-scale));--radio-icon-size-xl: calc(1rem * var(--mantine-scale));--radio-icon-size: var(--radio-icon-size-sm);--radio-icon-color: var(--mantine-color-white)}.m_89c4f5e4{position:relative;width:var(--radio-size);height:var(--radio-size);order:1}.m_89c4f5e4:where([data-label-position=left]){order:2}.m_f3ed6b2b{color:var(--radio-icon-color);opacity:var(--radio-icon-opacity, 0);transform:var(--radio-icon-transform, scale(.2) translateY(calc(.625rem * var(--mantine-scale))));transition:opacity .1s ease,transform .2s ease;pointer-events:none;width:var(--radio-icon-size);height:var(--radio-icon-size);position:absolute;top:calc(50% - var(--radio-icon-size) / 2);left:calc(50% - var(--radio-icon-size) / 2)}.m_8a3dbb89{border:calc(.0625rem * var(--mantine-scale)) solid;position:relative;-webkit-appearance:none;-moz-appearance:none;appearance:none;width:var(--radio-size);height:var(--radio-size);border-radius:var(--radio-radius, var(--radio-size));margin:0;display:flex;align-items:center;justify-content:center;transition-property:background-color,border-color;transition-timing-function:ease;transition-duration:.1s;cursor:var(--mantine-cursor-type);-webkit-tap-highlight-color:transparent}:where([data-mantine-color-scheme=light]) .m_8a3dbb89{background-color:var(--mantine-color-white);border-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_8a3dbb89{background-color:var(--mantine-color-dark-6);border-color:var(--mantine-color-dark-4)}.m_8a3dbb89:checked{background-color:var(--radio-color, var(--mantine-primary-color-filled));border-color:var(--radio-color, var(--mantine-primary-color-filled))}.m_8a3dbb89:checked+.m_f3ed6b2b{--radio-icon-opacity: 1;--radio-icon-transform: scale(1)}.m_8a3dbb89:disabled{cursor:not-allowed}:where([data-mantine-color-scheme=light]) .m_8a3dbb89:disabled{background-color:var(--mantine-color-gray-1);border-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=light]) .m_8a3dbb89:disabled+.m_f3ed6b2b{--radio-icon-color: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_8a3dbb89:disabled{background-color:var(--mantine-color-dark-5);border-color:var(--mantine-color-dark-4)}:where([data-mantine-color-scheme=dark]) .m_8a3dbb89:disabled+.m_f3ed6b2b{--radio-icon-color: var(--mantine-color-dark-7)}.m_8a3dbb89:where([data-error]){border-color:var(--mantine-color-error)}.m_1bfe9d39+.m_f3ed6b2b{--radio-icon-color: var(--radio-color)}.m_1bfe9d39:checked:not(:disabled){background-color:transparent;border-color:var(--radio-color)}.m_1bfe9d39:checked:not(:disabled)+.m_f3ed6b2b{--radio-icon-color: var(--radio-color);--radio-icon-opacity: 1;--radio-icon-transform: none}.m_f8d312f2{--rating-size-xs: calc(.875rem * var(--mantine-scale));--rating-size-sm: calc(1.125rem * var(--mantine-scale));--rating-size-md: calc(1.25rem * var(--mantine-scale));--rating-size-lg: calc(1.75rem * var(--mantine-scale));--rating-size-xl: calc(2rem * var(--mantine-scale));display:flex;width:max-content}.m_f8d312f2:where(:has(input:disabled)){pointer-events:none}.m_61734bb7{position:relative;transition:transform .1s ease}.m_61734bb7:where([data-active]){z-index:1;transform:scale(1.1)}.m_5662a89a{width:var(--rating-size);height:var(--rating-size);display:block}:where([data-mantine-color-scheme=light]) .m_5662a89a{fill:var(--mantine-color-gray-3);stroke:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_5662a89a{fill:var(--mantine-color-dark-3);stroke:var(--mantine-color-dark-3)}.m_5662a89a:where([data-filled]){fill:var(--rating-color);stroke:var(--rating-color)}.m_211007ba{height:0;width:0;position:absolute;overflow:hidden;white-space:nowrap;opacity:0;-webkit-tap-highlight-color:transparent}.m_211007ba:focus-visible+label{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.m_21342ee4{display:block;cursor:pointer;position:absolute;top:0;left:0;z-index:var(--rating-item-z-index, 0);-webkit-tap-highlight-color:transparent}.m_21342ee4:where([data-read-only]){cursor:default}.m_21342ee4:where(:last-of-type){position:relative}.m_fae05d6a{clip-path:var(--rating-symbol-clip-path)}.m_1b3c8819{--tooltip-radius: var(--mantine-radius-default);position:absolute;padding:calc(var(--mantine-spacing-xs) / 2) var(--mantine-spacing-xs);pointer-events:none;font-size:var(--mantine-font-size-sm);white-space:nowrap;border-radius:var(--tooltip-radius)}:where([data-mantine-color-scheme=light]) .m_1b3c8819{background-color:var(--tooltip-bg, var(--mantine-color-gray-9));color:var(--tooltip-color, var(--mantine-color-white))}:where([data-mantine-color-scheme=dark]) .m_1b3c8819{background-color:var(--tooltip-bg, var(--mantine-color-gray-2));color:var(--tooltip-color, var(--mantine-color-black))}.m_1b3c8819:where([data-multiline]){white-space:normal}.m_f898399f{background-color:inherit;border:0;z-index:1}.m_b32e4812{position:relative;width:var(--rp-size);height:var(--rp-size);min-width:var(--rp-size);min-height:var(--rp-size)}.m_d43b5134{width:var(--rp-size);height:var(--rp-size);min-width:var(--rp-size);min-height:var(--rp-size);transform:rotate(-90deg)}.m_b1ca1fbf{stroke:var(--curve-color, var(--rp-curve-root-color))}[data-mantine-color-scheme=light] .m_b1ca1fbf{--rp-curve-root-color: var(--mantine-color-gray-2)}[data-mantine-color-scheme=dark] .m_b1ca1fbf{--rp-curve-root-color: var(--mantine-color-dark-4)}.m_b23f9dc4{position:absolute;top:50%;transform:translateY(-50%);inset-inline:var(--rp-label-offset)}.m_cf365364{--sc-padding-xs: calc(.1875rem * var(--mantine-scale)) calc(.375rem * var(--mantine-scale));--sc-padding-sm: calc(.3125rem * var(--mantine-scale)) calc(.625rem * var(--mantine-scale));--sc-padding-md: calc(.4375rem * var(--mantine-scale)) calc(.875rem * var(--mantine-scale));--sc-padding-lg: calc(.5625rem * var(--mantine-scale)) calc(1rem * var(--mantine-scale));--sc-padding-xl: calc(.75rem * var(--mantine-scale)) calc(1.25rem * var(--mantine-scale));--sc-transition-duration: .2s;--sc-padding: var(--sc-padding-sm);--sc-transition-timing-function: ease;--sc-font-size: var(--mantine-font-size-sm);position:relative;display:inline-flex;flex-direction:row;width:auto;border-radius:var(--sc-radius, var(--mantine-radius-default));overflow:hidden;padding:calc(.25rem * var(--mantine-scale))}.m_cf365364:where([data-full-width]){display:flex}.m_cf365364:where([data-orientation=vertical]){display:flex;flex-direction:column;width:max-content}.m_cf365364:where([data-orientation=vertical]):where([data-full-width]){width:auto}:where([data-mantine-color-scheme=light]) .m_cf365364{background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_cf365364{background-color:var(--mantine-color-dark-8)}.m_9e182ccd{position:absolute;display:block;z-index:1;border-radius:var(--sc-radius, var(--mantine-radius-default))}:where([data-mantine-color-scheme=light]) .m_9e182ccd{box-shadow:var(--sc-shadow, none);background-color:var(--sc-color, var(--mantine-color-white))}:where([data-mantine-color-scheme=dark]) .m_9e182ccd{box-shadow:none;background-color:var(--sc-color, var(--mantine-color-dark-5))}.m_1738fcb2{-webkit-tap-highlight-color:transparent;font-weight:500;display:block;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;user-select:none;border-radius:var(--sc-radius, var(--mantine-radius-default));font-size:var(--sc-font-size);padding:var(--sc-padding);transition:color var(--sc-transition-duration) var(--sc-transition-timing-function);cursor:pointer;outline:var(--segmented-control-outline, none)}:where([data-mantine-color-scheme=light]) .m_1738fcb2{color:var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=dark]) .m_1738fcb2{color:var(--mantine-color-dark-1)}.m_1738fcb2:where([data-read-only]){cursor:default}fieldset:disabled .m_1738fcb2,.m_1738fcb2:where([data-disabled]){cursor:not-allowed}:where([data-mantine-color-scheme=light]) fieldset:disabled .m_1738fcb2,:where([data-mantine-color-scheme=light]) .m_1738fcb2:where([data-disabled]){color:var(--mantine-color-gray-5)}:where([data-mantine-color-scheme=dark]) fieldset:disabled .m_1738fcb2,:where([data-mantine-color-scheme=dark]) .m_1738fcb2:where([data-disabled]){color:var(--mantine-color-dark-3)}:where([data-mantine-color-scheme=light]) .m_1738fcb2:where([data-active]){color:var(--sc-label-color, var(--mantine-color-black))}:where([data-mantine-color-scheme=dark]) .m_1738fcb2:where([data-active]){color:var(--sc-label-color, var(--mantine-color-white))}.m_cf365364:where([data-initialized]) .m_1738fcb2:where([data-active]):before{display:none}.m_1738fcb2:where([data-active]):before{content:"";top:0;right:0;bottom:0;left:0;z-index:0;position:absolute;border-radius:var(--sc-radius, var(--mantine-radius-default))}:where([data-mantine-color-scheme=light]) .m_1738fcb2:where([data-active]):before{box-shadow:var(--sc-shadow, none);background-color:var(--sc-color, var(--mantine-color-white))}:where([data-mantine-color-scheme=dark]) .m_1738fcb2:where([data-active]):before{box-shadow:none;background-color:var(--sc-color, var(--mantine-color-dark-5))}@media (hover: hover){:where([data-mantine-color-scheme=light]) .m_1738fcb2:where(:not([data-disabled],[data-active],[data-read-only])):hover{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_1738fcb2:where(:not([data-disabled],[data-active],[data-read-only])):hover{color:var(--mantine-color-white)}}@media (hover: none){:where([data-mantine-color-scheme=light]) .m_1738fcb2:where(:not([data-disabled],[data-active],[data-read-only])):active{color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_1738fcb2:where(:not([data-disabled],[data-active],[data-read-only])):active{color:var(--mantine-color-white)}}@media (hover: hover){:where([data-mantine-color-scheme=light]) fieldset:disabled .m_1738fcb2:hover{color:var(--mantine-color-gray-5)!important}:where([data-mantine-color-scheme=dark]) fieldset:disabled .m_1738fcb2:hover{color:var(--mantine-color-dark-3)!important}}@media (hover: none){:where([data-mantine-color-scheme=light]) fieldset:disabled .m_1738fcb2:active{color:var(--mantine-color-gray-5)!important}:where([data-mantine-color-scheme=dark]) fieldset:disabled .m_1738fcb2:active{color:var(--mantine-color-dark-3)!important}}.m_1714d588{height:0;width:0;position:absolute;overflow:hidden;white-space:nowrap;opacity:0}.m_1714d588[data-focus-ring=auto]:focus:focus-visible+.m_1738fcb2{--segmented-control-outline: 2px solid var(--mantine-primary-color-filled)}.m_1714d588[data-focus-ring=always]:focus+.m_1738fcb2{--segmented-control-outline: 2px solid var(--mantine-primary-color-filled)}.m_69686b9b{position:relative;flex:1;z-index:2;transition:border-color var(--sc-transition-duration) var(--sc-transition-timing-function)}.m_cf365364[data-with-items-borders] :where(.m_69686b9b):before{content:"";position:absolute;top:0;bottom:0;inset-inline-start:0;background-color:var(--separator-color);width:calc(.0625rem * var(--mantine-scale));transition:background-color var(--sc-transition-duration) var(--sc-transition-timing-function)}.m_69686b9b[data-orientation=vertical]:before{top:0;inset-inline:0;bottom:auto;height:calc(.0625rem * var(--mantine-scale));width:auto}:where([data-mantine-color-scheme=light]) .m_69686b9b{--separator-color: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_69686b9b{--separator-color: var(--mantine-color-dark-4)}.m_69686b9b:first-of-type:before{--separator-color: transparent}[data-mantine-color-scheme] .m_69686b9b[data-active]:before,[data-mantine-color-scheme] .m_69686b9b[data-active]+.m_69686b9b:before{--separator-color: transparent}.m_78882f40{position:relative;z-index:2}.m_925c2d2c{container:simple-grid / inline-size}.m_2415a157{display:grid;grid-template-columns:repeat(var(--sg-cols),minmax(0,1fr));gap:var(--sg-spacing-y) var(--sg-spacing-x)}@keyframes m_299c329c{0%,to{opacity:.4}50%{opacity:1}}.m_18320242{height:var(--skeleton-height, auto);width:var(--skeleton-width, 100%);border-radius:var(--skeleton-radius, var(--mantine-radius-default));position:relative;transform:translateZ(0);-webkit-transform:translateZ(0)}.m_18320242:where([data-animate]):after{animation:m_299c329c 1.5s linear infinite}.m_18320242:where([data-visible]){overflow:hidden}.m_18320242:where([data-visible]):before{position:absolute;content:"";top:0;right:0;bottom:0;left:0;z-index:10;background-color:var(--mantine-color-body)}.m_18320242:where([data-visible]):after{position:absolute;content:"";top:0;right:0;bottom:0;left:0;z-index:11}:where([data-mantine-color-scheme=light]) .m_18320242:where([data-visible]):after{background-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_18320242:where([data-visible]):after{background-color:var(--mantine-color-dark-4)}.m_dd36362e{--slider-size-xs: calc(.25rem * var(--mantine-scale));--slider-size-sm: calc(.375rem * var(--mantine-scale));--slider-size-md: calc(.5rem * var(--mantine-scale));--slider-size-lg: calc(.625rem * var(--mantine-scale));--slider-size-xl: calc(.75rem * var(--mantine-scale));--slider-size: var(--slider-size-md);--slider-radius: calc(62.5rem * var(--mantine-scale));--slider-color: var(--mantine-primary-color-filled);-webkit-tap-highlight-color:transparent;outline:none;height:calc(var(--slider-size) * 2);padding-inline:var(--slider-size);display:flex;flex-direction:column;align-items:center;touch-action:none;position:relative}[data-mantine-color-scheme=light] .m_dd36362e{--slider-track-bg: var(--mantine-color-gray-2);--slider-track-disabled-bg: var(--mantine-color-gray-4)}[data-mantine-color-scheme=dark] .m_dd36362e{--slider-track-bg: var(--mantine-color-dark-4);--slider-track-disabled-bg: var(--mantine-color-dark-3)}.m_c9357328{position:absolute;top:calc(-2.25rem * var(--mantine-scale));font-size:var(--mantine-font-size-xs);color:var(--mantine-color-white);padding:calc(var(--mantine-spacing-xs) / 2);border-radius:var(--mantine-radius-sm);white-space:nowrap;pointer-events:none;-webkit-user-select:none;user-select:none;touch-action:none}:where([data-mantine-color-scheme=light]) .m_c9357328{background-color:var(--mantine-color-gray-9)}:where([data-mantine-color-scheme=dark]) .m_c9357328{background-color:var(--mantine-color-dark-4)}.m_c9a9a60a{position:absolute;display:flex;height:var(--slider-thumb-size);width:var(--slider-thumb-size);border:calc(.25rem * var(--mantine-scale)) solid;transform:translate(-50%,-50%);color:var(--slider-color);top:50%;cursor:pointer;border-radius:var(--slider-radius);align-items:center;justify-content:center;transition:box-shadow .1s ease,transform .1s ease;z-index:3;-webkit-user-select:none;user-select:none;touch-action:none;outline-offset:calc(.125rem * var(--mantine-scale));left:var(--slider-thumb-offset)}:where([dir=rtl]) .m_c9a9a60a{left:auto;right:calc(var(--slider-thumb-offset) - var(--slider-thumb-size))}fieldset:disabled .m_c9a9a60a,.m_c9a9a60a:where([data-disabled]){display:none}.m_c9a9a60a:where([data-dragging]){transform:translate(-50%,-50%) scale(1.05);box-shadow:var(--mantine-shadow-sm)}:where([data-mantine-color-scheme=light]) .m_c9a9a60a{border-color:var(--slider-color);background-color:var(--mantine-color-white)}:where([data-mantine-color-scheme=dark]) .m_c9a9a60a{border-color:var(--mantine-color-white);background-color:var(--slider-color)}.m_a8645c2{display:flex;align-items:center;width:100%;height:calc(var(--slider-size) * 2);cursor:pointer}fieldset:disabled .m_a8645c2,.m_a8645c2:where([data-disabled]){cursor:not-allowed}.m_c9ade57f{position:relative;width:100%;height:var(--slider-size)}.m_c9ade57f:where([data-inverted]:not([data-disabled])){--track-bg: var(--slider-color)}fieldset:disabled .m_c9ade57f:where([data-inverted]),.m_c9ade57f:where([data-inverted][data-disabled]){--track-bg: var(--slider-track-disabled-bg)}.m_c9ade57f:before{content:"";position:absolute;top:0;bottom:0;border-radius:var(--slider-radius);inset-inline:calc(var(--slider-size) * -1);background-color:var(--track-bg, var(--slider-track-bg));z-index:0}.m_38aeed47{position:absolute;z-index:1;top:0;bottom:0;background-color:var(--slider-color);border-radius:var(--slider-radius);width:var(--slider-bar-width);inset-inline-start:var(--slider-bar-offset)}.m_38aeed47:where([data-inverted]){background-color:var(--slider-track-bg)}:where([data-mantine-color-scheme=light]) fieldset:disabled .m_38aeed47:where(:not([data-inverted])),:where([data-mantine-color-scheme=light]) .m_38aeed47:where([data-disabled]:not([data-inverted])){background-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) fieldset:disabled .m_38aeed47:where(:not([data-inverted])),:where([data-mantine-color-scheme=dark]) .m_38aeed47:where([data-disabled]:not([data-inverted])){background-color:var(--mantine-color-dark-3)}.m_b7b0423a{position:absolute;inset-inline-start:calc(var(--mark-offset) - var(--slider-size) / 2);top:0;z-index:2;height:0;pointer-events:none}.m_dd33bc19{border:calc(.125rem * var(--mantine-scale)) solid;height:var(--slider-size);width:var(--slider-size);border-radius:calc(62.5rem * var(--mantine-scale));transform:translate((calc(var(--slider-size) / -2)));background-color:var(--mantine-color-white);pointer-events:none}:where([data-mantine-color-scheme=light]) .m_dd33bc19{border-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_dd33bc19{border-color:var(--mantine-color-dark-4)}.m_dd33bc19:where([data-filled]){border-color:var(--slider-color)}:where([data-mantine-color-scheme=light]) .m_dd33bc19:where([data-filled]):where([data-disabled]){border-color:var(--mantine-color-gray-4)}:where([data-mantine-color-scheme=dark]) .m_dd33bc19:where([data-filled]):where([data-disabled]){border-color:var(--mantine-color-dark-3)}.m_68c77a5b{transform:translate(calc(-50% + var(--slider-size) / 2),calc(var(--mantine-spacing-xs) / 2));font-size:var(--mantine-font-size-sm);white-space:nowrap;cursor:pointer;-webkit-user-select:none;user-select:none}:where([data-mantine-color-scheme=light]) .m_68c77a5b{color:var(--mantine-color-gray-6)}:where([data-mantine-color-scheme=dark]) .m_68c77a5b{color:var(--mantine-color-dark-2)}.m_559cce2d{position:relative}.m_559cce2d:where([data-has-spoiler]){margin-bottom:calc(1.5rem * var(--mantine-scale))}.m_b912df4e{display:flex;flex-direction:column;overflow:hidden;transition:max-height var(--spoiler-transition-duration, .2s) ease}.m_b9131032{position:absolute;inset-inline-start:0;top:100%;height:calc(1.5rem * var(--mantine-scale))}.m_6d731127{display:flex;flex-direction:column;align-items:var(--stack-align, stretch);justify-content:var(--stack-justify, flex-start);gap:var(--stack-gap, var(--mantine-spacing-md))}.m_cbb4ea7e{--stepper-icon-size-xs: calc(2.125rem * var(--mantine-scale));--stepper-icon-size-sm: calc(2.25rem * var(--mantine-scale));--stepper-icon-size-md: calc(2.625rem * var(--mantine-scale));--stepper-icon-size-lg: calc(3rem * var(--mantine-scale));--stepper-icon-size-xl: calc(3.25rem * var(--mantine-scale));--stepper-icon-size: var(--stepper-icon-size-md);--stepper-color: var(--mantine-primary-color-filled);--stepper-content-padding: var(--mantine-spacing-md);--stepper-spacing: var(--mantine-spacing-md);--stepper-radius: calc(62.5rem * var(--mantine-scale));--stepper-fz: var(--mantine-font-size-md)}.m_aaf89d0b{display:flex;flex-wrap:nowrap;align-items:center}.m_aaf89d0b:where([data-wrap]){flex-wrap:wrap;gap:var(--mantine-spacing-md) 0}.m_aaf89d0b:where([data-orientation=vertical]){flex-direction:column}.m_aaf89d0b:where([data-orientation=vertical]):where([data-icon-position=left]){align-items:flex-start}.m_aaf89d0b:where([data-orientation=vertical]):where([data-icon-position=right]){align-items:flex-end}.m_aaf89d0b:where([data-orientation=horizontal]){flex-direction:row}.m_2a371ac9{--separator-offset: calc(var(--stepper-icon-size) / 2 - calc(.0625rem * var(--mantine-scale)));transition:background-color .15s ease;flex:1}:where([data-mantine-color-scheme=light]) .m_2a371ac9{background-color:var(--mantine-color-gray-2)}:where([data-mantine-color-scheme=dark]) .m_2a371ac9{background-color:var(--mantine-color-dark-2)}.m_2a371ac9:where([data-active]){background-color:var(--stepper-color)}.m_2a371ac9:where([data-orientation=horizontal]){height:calc(.125rem * var(--mantine-scale));margin-inline:var(--mantine-spacing-md)}.m_2a371ac9:where([data-orientation=vertical]){width:calc(.125rem * var(--mantine-scale));margin-top:calc(var(--mantine-spacing-xs) / 2);margin-bottom:calc(var(--mantine-spacing-xs) - calc(.125rem * var(--mantine-scale)))}.m_2a371ac9:where([data-orientation=vertical]):where([data-icon-position=left]){margin-inline-start:var(--separator-offset)}.m_2a371ac9:where([data-orientation=vertical]):where([data-icon-position=right]){margin-inline-end:var(--separator-offset)}.m_78da155d{padding-top:var(--stepper-content-padding)}.m_cbb57068{--step-color: var(--stepper-color);display:flex;cursor:default}.m_cbb57068:where([data-allow-click]){cursor:pointer}.m_cbb57068:where([data-icon-position=left]){flex-direction:row}.m_cbb57068:where([data-icon-position=right]){flex-direction:row-reverse}.m_f56b1e2c{align-items:center}.m_833edb7e{--separator-spacing: calc(var(--mantine-spacing-xs) / 2);justify-content:flex-start;min-height:calc(var(--stepper-icon-size) + var(--mantine-spacing-xl) + var(--separator-spacing));margin-top:var(--separator-spacing);overflow:hidden}.m_833edb7e:where(:first-of-type){margin-top:0}.m_833edb7e:where(:last-of-type) .m_6496b3f3{display:none}.m_818e70b{position:relative}.m_6496b3f3{top:calc(var(--stepper-icon-size) + var(--separator-spacing));inset-inline-start:calc(var(--stepper-icon-size) / 2);height:100vh;position:absolute;border-inline-start:calc(.125rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_6496b3f3{border-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_6496b3f3{border-color:var(--mantine-color-dark-5)}.m_6496b3f3:where([data-active]){border-color:var(--stepper-color)}.m_1959ad01{height:var(--stepper-icon-size);width:var(--stepper-icon-size);min-height:var(--stepper-icon-size);min-width:var(--stepper-icon-size);border-radius:var(--stepper-radius);font-size:var(--stepper-fz);display:flex;align-items:center;justify-content:center;position:relative;font-weight:700;transition:background-color .15s ease,border-color .15s ease;border:calc(.125rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_1959ad01{background-color:var(--mantine-color-gray-1);border-color:var(--mantine-color-gray-1);color:var(--mantine-color-gray-7)}:where([data-mantine-color-scheme=dark]) .m_1959ad01{background-color:var(--mantine-color-dark-5);border-color:var(--mantine-color-dark-5);color:var(--mantine-color-dark-1)}.m_1959ad01:where([data-progress]){border-color:var(--step-color)}.m_1959ad01:where([data-completed]){color:var(--stepper-icon-color, var(--mantine-color-white));background-color:var(--step-color);border-color:var(--step-color)}.m_a79331dc{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:var(--stepper-icon-color, var(--mantine-color-white))}.m_1956aa2a{display:flex;flex-direction:column}.m_1956aa2a:where([data-icon-position=left]){margin-inline-start:var(--mantine-spacing-sm)}.m_1956aa2a:where([data-icon-position=right]){text-align:right;margin-inline-end:var(--mantine-spacing-sm)}:where([dir=rtl]) .m_1956aa2a:where([data-icon-position=right]){text-align:left}.m_12051f6c{font-weight:500;font-size:var(--stepper-fz);line-height:1}.m_164eea74{margin-top:calc(var(--stepper-spacing) / 3);margin-bottom:calc(var(--stepper-spacing) / 3);font-size:calc(var(--stepper-fz) - calc(.125rem * var(--mantine-scale)));line-height:1;color:var(--mantine-color-dimmed)}.m_5f93f3bb{--switch-height-xs: calc(1rem * var(--mantine-scale));--switch-height-sm: calc(1.25rem * var(--mantine-scale));--switch-height-md: calc(1.5rem * var(--mantine-scale));--switch-height-lg: calc(1.875rem * var(--mantine-scale));--switch-height-xl: calc(2.25rem * var(--mantine-scale));--switch-width-xs: calc(2rem * var(--mantine-scale));--switch-width-sm: calc(2.375rem * var(--mantine-scale));--switch-width-md: calc(2.875rem * var(--mantine-scale));--switch-width-lg: calc(3.5rem * var(--mantine-scale));--switch-width-xl: calc(4.5rem * var(--mantine-scale));--switch-thumb-size-xs: calc(.75rem * var(--mantine-scale));--switch-thumb-size-sm: calc(.875rem * var(--mantine-scale));--switch-thumb-size-md: calc(1.125rem * var(--mantine-scale));--switch-thumb-size-lg: calc(1.375rem * var(--mantine-scale));--switch-thumb-size-xl: calc(1.75rem * var(--mantine-scale));--switch-label-font-size-xs: calc(.3125rem * var(--mantine-scale));--switch-label-font-size-sm: calc(.375rem * var(--mantine-scale));--switch-label-font-size-md: calc(.4375rem * var(--mantine-scale));--switch-label-font-size-lg: calc(.5625rem * var(--mantine-scale));--switch-label-font-size-xl: calc(.6875rem * var(--mantine-scale));--switch-track-label-padding-xs: calc(.0625rem * var(--mantine-scale));--switch-track-label-padding-sm: calc(.125rem * var(--mantine-scale));--switch-track-label-padding-md: calc(.125rem * var(--mantine-scale));--switch-track-label-padding-lg: calc(.1875rem * var(--mantine-scale));--switch-track-label-padding-xl: calc(.1875rem * var(--mantine-scale));--switch-height: var(--switch-height-sm);--switch-width: var(--switch-width-sm);--switch-thumb-size: var(--switch-thumb-size-sm);--switch-label-font-size: var(--switch-label-font-size-sm);--switch-track-label-padding: var(--switch-track-label-padding-sm);--switch-radius: calc(62.5rem * var(--mantine-scale));--switch-color: var(--mantine-primary-color-filled);position:relative}.m_926b4011{height:0;width:0;opacity:0;margin:0;padding:0;position:absolute;overflow:hidden;white-space:nowrap}.m_9307d992{-webkit-tap-highlight-color:transparent;cursor:var(--switch-cursor, var(--mantine-cursor-type));overflow:hidden;position:relative;border-radius:var(--switch-radius);background-color:var(--switch-bg);border:1px solid var(--switch-bd);height:var(--switch-height);min-width:var(--switch-width);margin:0;transition:background-color .15s ease,border-color .15s ease;-webkit-appearance:none;-moz-appearance:none;appearance:none;display:flex;align-items:center;font-size:var(--switch-label-font-size);font-weight:600;order:var(--switch-order, 1);-webkit-user-select:none;user-select:none;z-index:0;line-height:0;color:var(--switch-text-color)}.m_926b4011:focus-visible+.m_9307d992{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.m_926b4011:checked+.m_9307d992{--switch-bg: var(--switch-color);--switch-bd: var(--switch-color);--switch-text-color: var(--mantine-color-white)}.m_926b4011:disabled+.m_9307d992,.m_926b4011[data-disabled]+.m_9307d992{--switch-bg: var(--switch-disabled-color);--switch-bd: var(--switch-disabled-color);--switch-cursor: not-allowed}[data-mantine-color-scheme=light] .m_9307d992{--switch-bg: var(--mantine-color-gray-2);--switch-bd: var(--mantine-color-gray-3);--switch-text-color: var(--mantine-color-gray-6);--switch-disabled-color: var(--mantine-color-gray-2)}[data-mantine-color-scheme=dark] .m_9307d992{--switch-bg: var(--mantine-color-dark-6);--switch-bd: var(--mantine-color-dark-4);--switch-text-color: var(--mantine-color-dark-1);--switch-disabled-color: var(--mantine-color-dark-4)}.m_9307d992[data-error]{--switch-bd: var(--mantine-color-error)}.m_9307d992[data-label-position=left]{--switch-order: 2}.m_93039a1d{position:absolute;z-index:1;border-radius:var(--switch-radius);display:flex;background-color:var(--switch-thumb-bg, var(--mantine-color-white));height:var(--switch-thumb-size);width:var(--switch-thumb-size);border:1px solid var(--switch-thumb-bd);inset-inline-start:var(--switch-thumb-start, var(--switch-track-label-padding));transition:inset-inline-start .15s ease}.m_93039a1d>*{margin:auto}.m_926b4011:checked+*>.m_93039a1d{--switch-thumb-start: calc(100% - var(--switch-thumb-size) - var(--switch-track-label-padding));--switch-thumb-bd: var(--mantine-color-white)}.m_926b4011:disabled+*>.m_93039a1d,.m_926b4011[data-disabled]+*>.m_93039a1d{--switch-thumb-bd: var(--switch-thumb-bg-disabled);--switch-thumb-bg: var(--switch-thumb-bg-disabled)}[data-mantine-color-scheme=light] .m_93039a1d{--switch-thumb-bd: var(--mantine-color-gray-3);--switch-thumb-bg-disabled: var(--mantine-color-gray-0)}[data-mantine-color-scheme=dark] .m_93039a1d{--switch-thumb-bd: var(--mantine-color-white);--switch-thumb-bg-disabled: var(--mantine-color-dark-3)}.m_8277e082{height:100%;display:grid;place-content:center;min-width:calc(var(--switch-width) - var(--switch-thumb-size));padding-inline:var(--switch-track-label-padding);margin-inline-start:calc(var(--switch-thumb-size) + var(--switch-track-label-padding));transition:margin .15s ease}.m_926b4011:checked+*>.m_8277e082{margin-inline-end:calc(var(--switch-thumb-size) + var(--switch-track-label-padding));margin-inline-start:0}.m_b23fa0ef{width:100%;border-collapse:collapse;line-height:var(--mantine-line-height);font-size:var(--mantine-font-size-sm);table-layout:var(--table-layout, auto);caption-side:var(--table-caption-side, bottom);border:none}:where([data-mantine-color-scheme=light]) .m_b23fa0ef{--table-hover-color: var(--mantine-color-gray-1);--table-striped-color: var(--mantine-color-gray-0);--table-border-color: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_b23fa0ef{--table-hover-color: var(--mantine-color-dark-5);--table-striped-color: var(--mantine-color-dark-6);--table-border-color: var(--mantine-color-dark-4)}.m_b23fa0ef:where([data-with-table-border]){border:calc(.0625rem * var(--mantine-scale)) solid var(--table-border-color)}.m_4e7aa4f3{text-align:left}:where([dir=rtl]) .m_4e7aa4f3{text-align:right}.m_4e7aa4fd{border-bottom:none;background-color:transparent}@media (hover: hover){.m_4e7aa4fd:hover:where([data-hover]){background-color:var(--tr-hover-bg)}}@media (hover: none){.m_4e7aa4fd:active:where([data-hover]){background-color:var(--tr-hover-bg)}}.m_4e7aa4fd:where([data-with-row-border]){border-bottom:calc(.0625rem * var(--mantine-scale)) solid var(--table-border-color)}.m_4e7aa4ef,.m_4e7aa4f3{padding:var(--table-vertical-spacing) var(--table-horizontal-spacing, var(--mantine-spacing-xs))}.m_4e7aa4ef:where([data-with-column-border]:not(:last-child)),.m_4e7aa4f3:where([data-with-column-border]:not(:last-child)){border-inline-end:calc(.0625rem * var(--mantine-scale)) solid var(--table-border-color)}.m_b2404537 :where(tr):where([data-with-row-border]:last-of-type){border-bottom:none}.m_b2404537 :where(tr):where([data-striped=odd]:nth-of-type(odd)){background-color:var(--table-striped-color)}.m_b2404537 :where(tr):where([data-striped=even]:nth-of-type(2n)){background-color:var(--table-striped-color)}.m_b2404537 :where(tr)[data-hover]{--tr-hover-bg: var(--table-highlight-on-hover-color, var(--table-hover-color))}.m_b242d975{top:var(--table-sticky-header-offset, 0);z-index:1}.m_b242d975:where([data-sticky]){position:sticky;background-color:var(--mantine-color-body)}.m_9e5a3ac7{color:var(--mantine-color-dimmed)}.m_9e5a3ac7:where([data-side=top]){margin-bottom:var(--mantine-spacing-xs)}.m_9e5a3ac7:where([data-side=bottom]){margin-top:var(--mantine-spacing-xs)}.m_a100c15{overflow-x:var(--table-overflow)}.m_62259741{min-width:var(--table-min-width)}.m_89d60db1{display:var(--tabs-display);flex-direction:var(--tabs-flex-direction);--tab-justify: flex-start;--tabs-list-direction: row;--tabs-panel-grow: unset;--tabs-display: block;--tabs-flex-direction: row;--tabs-list-border-width: 0;--tabs-list-border-size: 0 0 var(--tabs-list-border-width) 0;--tabs-list-gap: unset;--tabs-list-line-bottom: 0;--tabs-list-line-top: unset;--tabs-list-line-start: 0;--tabs-list-line-end: 0;--tab-radius: var(--tabs-radius) var(--tabs-radius) 0 0;--tab-border-width: 0 0 var(--tabs-list-border-width) 0}.m_89d60db1[data-inverted]{--tabs-list-line-bottom: unset;--tabs-list-line-top: 0;--tab-radius: 0 0 var(--tabs-radius) var(--tabs-radius);--tab-border-width: var(--tabs-list-border-width) 0 0 0}.m_89d60db1[data-inverted] .m_576c9d4:before{top:0;bottom:unset}.m_89d60db1[data-orientation=vertical]{--tabs-list-line-start: unset;--tabs-list-line-end: 0;--tabs-list-line-top: 0;--tabs-list-line-bottom: 0;--tabs-list-border-size: 0 var(--tabs-list-border-width) 0 0;--tab-border-width: 0 var(--tabs-list-border-width) 0 0;--tab-radius: var(--tabs-radius) 0 0 var(--tabs-radius);--tabs-list-direction: column;--tabs-panel-grow: 1;--tabs-display: flex}[dir=rtl] .m_89d60db1[data-orientation=vertical]{--tabs-list-border-size: 0 0 0 var(--tabs-list-border-width);--tab-border-width: 0 0 0 var(--tabs-list-border-width);--tab-radius: 0 var(--tabs-radius) var(--tabs-radius) 0}.m_89d60db1[data-orientation=vertical][data-placement=right]{--tabs-flex-direction: row-reverse;--tabs-list-line-start: 0;--tabs-list-line-end: unset;--tabs-list-border-size: 0 0 0 var(--tabs-list-border-width);--tab-border-width: 0 0 0 var(--tabs-list-border-width);--tab-radius: 0 var(--tabs-radius) var(--tabs-radius) 0}[dir=rtl] .m_89d60db1[data-orientation=vertical][data-placement=right]{--tabs-list-border-size: 0 var(--tabs-list-border-width) 0 0;--tab-border-width: 0 var(--tabs-list-border-width) 0 0;--tab-radius: var(--tabs-radius) 0 0 var(--tabs-radius)}[data-mantine-color-scheme=light] .m_89d60db1{--tab-border-color: var(--mantine-color-gray-3)}[data-mantine-color-scheme=dark] .m_89d60db1{--tab-border-color: var(--mantine-color-dark-4)}.m_89d60db1[data-orientation=horizontal]{--tab-justify: center}.m_89d60db1[data-variant=default]{--tabs-list-border-width: calc(.125rem * var(--mantine-scale))}[data-mantine-color-scheme=light] .m_89d60db1[data-variant=default]{--tab-hover-color: var(--mantine-color-gray-0)}[data-mantine-color-scheme=dark] .m_89d60db1[data-variant=default]{--tab-hover-color: var(--mantine-color-dark-6)}.m_89d60db1[data-variant=outline]{--tabs-list-border-width: calc(.0625rem * var(--mantine-scale))}.m_89d60db1[data-variant=pills]{--tabs-list-gap: calc(var(--mantine-spacing-sm) / 2)}[data-mantine-color-scheme=light] .m_89d60db1[data-variant=pills]{--tab-hover-color: var(--mantine-color-gray-0)}[data-mantine-color-scheme=dark] .m_89d60db1[data-variant=pills]{--tab-hover-color: var(--mantine-color-dark-6)}.m_89d33d6d{display:flex;flex-wrap:wrap;justify-content:var(--tabs-justify, flex-start);flex-direction:var(--tabs-list-direction);gap:var(--tabs-list-gap);--tab-grow: unset}.m_89d33d6d[data-grow]{--tab-grow: 1}.m_b0c91715{flex-grow:var(--tabs-panel-grow)}.m_4ec4dce6{position:relative;padding:var(--mantine-spacing-xs) var(--mantine-spacing-md);font-size:var(--mantine-font-size-sm);white-space:nowrap;z-index:0;display:flex;align-items:center;line-height:1;-webkit-user-select:none;user-select:none;flex-grow:var(--tab-grow);justify-content:var(--tab-justify)}.m_4ec4dce6:disabled,.m_4ec4dce6[data-disabled]{opacity:.5;cursor:not-allowed}.m_4ec4dce6:focus{z-index:1}.m_fc420b1f{display:flex;align-items:center;justify-content:center;margin-left:var(--tab-section-margin-left, 0);margin-right:var(--tab-section-margin-right, 0)}.m_fc420b1f[data-position=left]:not(:only-child){--tab-section-margin-right: var(--mantine-spacing-xs)}[dir=rtl] .m_fc420b1f[data-position=left]:not(:only-child){--tab-section-margin-right: 0rem;--tab-section-margin-left: var(--mantine-spacing-xs)}.m_fc420b1f[data-position=right]:not(:only-child){--tab-section-margin-left: var(--mantine-spacing-xs)}[dir=rtl] .m_fc420b1f[data-position=right]:not(:only-child){--tab-section-margin-left: 0rem;--tab-section-margin-right: var(--mantine-spacing-xs)}.m_576c9d4{position:relative}.m_576c9d4:before{content:"";position:absolute;border-color:var(--tab-border-color);border-width:var(--tabs-list-border-size);border-style:solid;bottom:var(--tabs-list-line-bottom);inset-inline-start:var(--tabs-list-line-start);inset-inline-end:var(--tabs-list-line-end);top:var(--tabs-list-line-top)}.m_539e827b{border-radius:var(--tab-radius);border-width:var(--tab-border-width);border-style:solid;border-color:transparent;background-color:var(--tab-bg);--tab-bg: transparent}.m_539e827b:where([data-active]){border-color:var(--tabs-color)}@media (hover: hover){.m_539e827b:hover{--tab-bg: var(--tab-hover-color)}.m_539e827b:hover:where(:not([data-active])){border-color:var(--tab-border-color)}}@media (hover: none){.m_539e827b:active{--tab-bg: var(--tab-hover-color)}.m_539e827b:active:where(:not([data-active])){border-color:var(--tab-border-color)}}@media (hover: hover){.m_539e827b:disabled:hover,.m_539e827b[data-disabled]:hover{--tab-bg: transparent}}@media (hover: none){.m_539e827b:disabled:active,.m_539e827b[data-disabled]:active{--tab-bg: transparent}}.m_6772fbd5{position:relative}.m_6772fbd5:before{content:"";position:absolute;border-color:var(--tab-border-color);border-width:var(--tabs-list-border-size);border-style:solid;bottom:var(--tabs-list-line-bottom);inset-inline-start:var(--tabs-list-line-start);inset-inline-end:var(--tabs-list-line-end);top:var(--tabs-list-line-top)}.m_b59ab47c{border-top:calc(.0625rem * var(--mantine-scale)) solid transparent;border-bottom:calc(.0625rem * var(--mantine-scale)) solid transparent;border-right:calc(.0625rem * var(--mantine-scale)) solid transparent;border-left:calc(.0625rem * var(--mantine-scale)) solid transparent;border-top-color:var(--tab-border-top-color);border-bottom-color:var(--tab-border-bottom-color);border-radius:var(--tab-radius);position:relative;--tab-border-bottom-color: transparent;--tab-border-top-color: transparent;--tab-border-inline-end-color: transparent;--tab-border-inline-start-color: transparent}.m_b59ab47c:where([data-active]):before{content:"";position:absolute;background-color:var(--tab-border-color);bottom:var(--tab-before-bottom, calc(-.0625rem * var(--mantine-scale)));left:var(--tab-before-left, calc(-.0625rem * var(--mantine-scale)));right:var(--tab-before-right, auto);top:var(--tab-before-top, auto);width:calc(.0625rem * var(--mantine-scale));height:calc(.0625rem * var(--mantine-scale))}.m_b59ab47c:where([data-active]):after{content:"";position:absolute;background-color:var(--tab-border-color);bottom:var(--tab-after-bottom, calc(-.0625rem * var(--mantine-scale)));right:var(--tab-after-right, calc(-.0625rem * var(--mantine-scale)));left:var(--tab-after-left, auto);top:var(--tab-after-top, auto);width:calc(.0625rem * var(--mantine-scale));height:calc(.0625rem * var(--mantine-scale))}.m_b59ab47c:where([data-active]){border-top-color:var(--tab-border-top-color);border-bottom-color:var(--tab-border-bottom-color);border-inline-start-color:var(--tab-border-inline-start-color);border-inline-end-color:var(--tab-border-inline-end-color);--tab-border-top-color: var(--tab-border-color);--tab-border-inline-start-color: var(--tab-border-color);--tab-border-inline-end-color: var(--tab-border-color);--tab-border-bottom-color: var(--mantine-color-body)}.m_b59ab47c:where([data-active])[data-inverted]{--tab-border-bottom-color: var(--tab-border-color);--tab-border-top-color: var(--mantine-color-body);--tab-before-bottom: auto;--tab-before-top: calc(-.0625rem * var(--mantine-scale));--tab-after-bottom: auto;--tab-after-top: calc(-.0625rem * var(--mantine-scale))}.m_b59ab47c:where([data-active])[data-orientation=vertical][data-placement=left]{--tab-border-inline-end-color: var(--mantine-color-body);--tab-border-inline-start-color: var(--tab-border-color);--tab-border-bottom-color: var(--tab-border-color);--tab-before-right: calc(-.0625rem * var(--mantine-scale));--tab-before-left: auto;--tab-before-bottom: auto;--tab-before-top: calc(-.0625rem * var(--mantine-scale));--tab-after-left: auto;--tab-after-right: calc(-.0625rem * var(--mantine-scale))}[dir=rtl] .m_b59ab47c:where([data-active])[data-orientation=vertical][data-placement=left]{--tab-before-right: auto;--tab-before-left: calc(-.0625rem * var(--mantine-scale));--tab-after-left: calc(-.0625rem * var(--mantine-scale));--tab-after-right: auto}.m_b59ab47c:where([data-active])[data-orientation=vertical][data-placement=right]{--tab-border-inline-start-color: var(--mantine-color-body);--tab-border-inline-end-color: var(--tab-border-color);--tab-border-bottom-color: var(--tab-border-color);--tab-before-left: calc(-.0625rem * var(--mantine-scale));--tab-before-right: auto;--tab-before-bottom: auto;--tab-before-top: calc(-.0625rem * var(--mantine-scale));--tab-after-right: auto;--tab-after-left: calc(-.0625rem * var(--mantine-scale))}[dir=rtl] .m_b59ab47c:where([data-active])[data-orientation=vertical][data-placement=right]{--tab-before-left: auto;--tab-before-right: calc(-.0625rem * var(--mantine-scale));--tab-after-right: calc(-.0625rem * var(--mantine-scale));--tab-after-left: auto}.m_c3381914{border-radius:var(--tabs-radius);background-color:var(--tab-bg);color:var(--tab-color);--tab-bg: transparent;--tab-color: inherit}@media (hover: hover){.m_c3381914:not([data-disabled]):hover{--tab-bg: var(--tab-hover-color)}}@media (hover: none){.m_c3381914:not([data-disabled]):active{--tab-bg: var(--tab-hover-color)}}.m_c3381914[data-active][data-active]{--tab-bg: var(--tabs-color);--tab-color: var(--tabs-text-color, var(--mantine-color-white))}@media (hover: hover){.m_c3381914[data-active][data-active]:hover{--tab-bg: var(--tabs-color)}}@media (hover: none){.m_c3381914[data-active][data-active]:active{--tab-bg: var(--tabs-color)}}.m_7341320d{--ti-size-xs: calc(1.125rem * var(--mantine-scale));--ti-size-sm: calc(1.375rem * var(--mantine-scale));--ti-size-md: calc(1.75rem * var(--mantine-scale));--ti-size-lg: calc(2.125rem * var(--mantine-scale));--ti-size-xl: calc(2.75rem * var(--mantine-scale));--ti-size: var(--ti-size-md);line-height:1;display:inline-flex;align-items:center;justify-content:center;position:relative;-webkit-user-select:none;user-select:none;width:var(--ti-size);height:var(--ti-size);min-width:var(--ti-size);min-height:var(--ti-size);border-radius:var(--ti-radius, var(--mantine-radius-default));background:var(--ti-bg, var(--mantine-primary-color-filled));color:var(--ti-color, var(--mantine-color-white));border:var(--ti-bd, 1px solid transparent)}.m_43657ece{--offset: calc(var(--tl-bullet-size) / 2 + var(--tl-line-width) / 2);--tl-bullet-size: calc(1.25rem * var(--mantine-scale));--tl-line-width: calc(.25rem * var(--mantine-scale));--tl-radius: calc(62.5rem * var(--mantine-scale));--tl-color: var(--mantine-primary-color-filled)}.m_43657ece:where([data-align=left]){padding-inline-start:var(--offset)}.m_43657ece:where([data-align=right]){padding-inline-end:var(--offset)}.m_2ebe8099{font-weight:500;line-height:1;margin-bottom:calc(var(--mantine-spacing-xs) / 2)}.m_436178ff{--item-border: var(--tl-line-width) var(--tli-border-style, solid) var(--item-border-color);position:relative;color:var(--mantine-color-text)}.m_436178ff:before{content:"";pointer-events:none;position:absolute;top:0;left:var(--timeline-line-left, 0);right:var(--timeline-line-right, 0);bottom:calc(var(--mantine-spacing-xl) * -1);border-inline-start:var(--item-border);display:var(--timeline-line-display, none)}.m_43657ece[data-align=left] .m_436178ff:before{--timeline-line-left: calc(var(--tl-line-width) * -1);--timeline-line-right: auto}[dir=rtl] .m_43657ece[data-align=left] .m_436178ff:before{--timeline-line-left: auto;--timeline-line-right: calc(var(--tl-line-width) * -1)}.m_43657ece[data-align=right] .m_436178ff:before{--timeline-line-left: auto;--timeline-line-right: calc(var(--tl-line-width) * -1)}[dir=rtl] .m_43657ece[data-align=right] .m_436178ff:before{--timeline-line-left: calc(var(--tl-line-width) * -1);--timeline-line-right: auto}.m_43657ece:where([data-align=left]) .m_436178ff{padding-inline-start:var(--offset);text-align:left}.m_43657ece:where([data-align=right]) .m_436178ff{padding-inline-end:var(--offset);text-align:right}:where([data-mantine-color-scheme=light]) .m_436178ff{--item-border-color: var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_436178ff{--item-border-color: var(--mantine-color-dark-4)}.m_436178ff:where([data-line-active]):before{border-color:var(--tli-color, var(--tl-color))}.m_436178ff:where(:not(:last-of-type)){--timeline-line-display: block}.m_436178ff:where(:not(:first-of-type)){margin-top:var(--mantine-spacing-xl)}.m_8affcee1{width:var(--tl-bullet-size);height:var(--tl-bullet-size);border-radius:var(--tli-radius, var(--tl-radius));border:var(--tl-line-width) solid;background-color:var(--mantine-color-body);position:absolute;top:0;display:flex;align-items:center;justify-content:center;color:var(--mantine-color-text)}:where([data-mantine-color-scheme=light]) .m_8affcee1{border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_8affcee1{border-color:var(--mantine-color-dark-4)}.m_43657ece:where([data-align=left]) .m_8affcee1{left:calc((var(--tl-bullet-size) / 2 + var(--tl-line-width) / 2) * -1);right:auto}:where([dir=rtl]) .m_43657ece:where([data-align=left]) .m_8affcee1{left:auto;right:calc((var(--tl-bullet-size) / 2 + var(--tl-line-width) / 2) * -1)}.m_43657ece:where([data-align=right]) .m_8affcee1{left:auto;right:calc((var(--tl-bullet-size) / 2 + var(--tl-line-width) / 2) * -1)}:where([dir=rtl]) .m_43657ece:where([data-align=right]) .m_8affcee1{left:calc((var(--tl-bullet-size) / 2 + var(--tl-line-width) / 2) * -1);right:auto}.m_8affcee1:where([data-with-child]){border-width:var(--tl-line-width)}:where([data-mantine-color-scheme=light]) .m_8affcee1:where([data-with-child]){background-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_8affcee1:where([data-with-child]){background-color:var(--mantine-color-dark-4)}.m_8affcee1:where([data-active]){border-color:var(--tli-color, var(--tl-color));background-color:var(--mantine-color-white);color:var(--tl-icon-color, var(--mantine-color-white))}.m_8affcee1:where([data-active]):where([data-with-child]){background-color:var(--tli-color, var(--tl-color));color:var(--tl-icon-color, var(--mantine-color-white))}.m_43657ece:where([data-align=left]) .m_540e8f41{padding-inline-start:var(--offset);text-align:left}:where([dir=rtl]) .m_43657ece:where([data-align=left]) .m_540e8f41{text-align:right}.m_43657ece:where([data-align=right]) .m_540e8f41{padding-inline-end:var(--offset);text-align:right}:where([dir=rtl]) .m_43657ece:where([data-align=right]) .m_540e8f41{text-align:left}.m_8a5d1357{margin:0;font-weight:var(--title-fw);font-size:var(--title-fz);line-height:var(--title-lh);font-family:var(--mantine-font-family-headings);text-wrap:var(--title-text-wrap, var(--mantine-heading-text-wrap))}.m_8a5d1357:where([data-line-clamp]){overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:var(--title-line-clamp);-webkit-box-orient:vertical}.m_f698e191{--level-offset: var(--mantine-spacing-lg);margin:0;padding:0;-webkit-user-select:none;user-select:none}.m_75f3ecf{margin:0;padding:0}.m_f6970eb1{cursor:pointer;list-style:none;margin:0;padding:0;outline:0}.m_f6970eb1:focus-visible>.m_dc283425{outline:2px solid var(--mantine-primary-color-filled);outline-offset:calc(.125rem * var(--mantine-scale))}.m_dc283425{padding-inline-start:var(--label-offset)}:where([data-mantine-color-scheme=light]) .m_dc283425:where([data-selected]){background-color:var(--mantine-color-gray-1)}:where([data-mantine-color-scheme=dark]) .m_dc283425:where([data-selected]){background-color:var(--mantine-color-dark-5)}.m_d6493fad :first-child{margin-top:0}.m_d6493fad :last-child{margin-bottom:0}.m_d6493fad :where(h1,h2,h3,h4,h5,h6){margin-bottom:var(--mantine-spacing-xs);text-wrap:var(--mantine-heading-text-wrap)}.m_d6493fad :where(h1){margin-top:calc(1.5 * var(--mantine-spacing-xl));font-size:var(--mantine-h1-font-size);line-height:var(--mantine-h1-line-height);font-weight:var(--mantine-h1-font-weight)}.m_d6493fad :where(h2){margin-top:var(--mantine-spacing-xl);font-size:var(--mantine-h2-font-size);line-height:var(--mantine-h2-line-height);font-weight:var(--mantine-h2-font-weight)}.m_d6493fad :where(h3){margin-top:calc(.8 * var(--mantine-spacing-xl));font-size:var(--mantine-h3-font-size);line-height:var(--mantine-h3-line-height);font-weight:var(--mantine-h3-font-weight)}.m_d6493fad :where(h4){margin-top:calc(.8 * var(--mantine-spacing-xl));font-size:var(--mantine-h4-font-size);line-height:var(--mantine-h4-line-height);font-weight:var(--mantine-h4-font-weight)}.m_d6493fad :where(h5){margin-top:calc(.5 * var(--mantine-spacing-xl));font-size:var(--mantine-h5-font-size);line-height:var(--mantine-h5-line-height);font-weight:var(--mantine-h5-font-weight)}.m_d6493fad :where(h6){margin-top:calc(.5 * var(--mantine-spacing-xl));font-size:var(--mantine-h6-font-size);line-height:var(--mantine-h6-line-height);font-weight:var(--mantine-h6-font-weight)}.m_d6493fad :where(img){max-width:100%;margin-bottom:var(--mantine-spacing-xs)}.m_d6493fad :where(p){margin-top:0;margin-bottom:var(--mantine-spacing-lg)}:where([data-mantine-color-scheme=light]) .m_d6493fad :where(mark){background-color:var(--mantine-color-yellow-2);color:inherit}:where([data-mantine-color-scheme=dark]) .m_d6493fad :where(mark){background-color:var(--mantine-color-yellow-5);color:var(--mantine-color-black)}.m_d6493fad :where(a){color:var(--mantine-color-anchor);text-decoration:none}@media (hover: hover){.m_d6493fad :where(a):hover{text-decoration:underline}}@media (hover: none){.m_d6493fad :where(a):active{text-decoration:underline}}.m_d6493fad :where(hr){margin-top:var(--mantine-spacing-md);margin-bottom:var(--mantine-spacing-md);border:0;border-top:calc(.0625rem * var(--mantine-scale)) solid}:where([data-mantine-color-scheme=light]) .m_d6493fad :where(hr){border-color:var(--mantine-color-gray-3)}:where([data-mantine-color-scheme=dark]) .m_d6493fad :where(hr){border-color:var(--mantine-color-dark-3)}.m_d6493fad :where(pre){padding:var(--mantine-spacing-xs);line-height:var(--mantine-line-height);margin:0;margin-top:var(--mantine-spacing-md);margin-bottom:var(--mantine-spacing-md);overflow-x:auto;font-family:var(--mantine-font-family-monospace);font-size:var(--mantine-font-size-xs);border-radius:var(--mantine-radius-sm)}:where([data-mantine-color-scheme=light]) .m_d6493fad :where(pre){background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_d6493fad :where(pre){background-color:var(--mantine-color-dark-8)}.m_d6493fad :where(pre) :where(code){background-color:transparent;padding:0;border-radius:0;color:inherit;border:0}.m_d6493fad :where(kbd){--kbd-fz: calc(.75rem * var(--mantine-scale));--kbd-padding: calc(.1875rem * var(--mantine-scale)) calc(.3125rem * var(--mantine-scale));font-family:var(--mantine-font-family-monospace);line-height:var(--mantine-line-height);font-weight:700;padding:var(--kbd-padding);font-size:var(--kbd-fz);border-radius:var(--mantine-radius-sm);border:calc(.0625rem * var(--mantine-scale)) solid;border-bottom-width:calc(.1875rem * var(--mantine-scale))}:where([data-mantine-color-scheme=light]) .m_d6493fad :where(kbd){border-color:var(--mantine-color-gray-3);color:var(--mantine-color-gray-7);background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_d6493fad :where(kbd){border-color:var(--mantine-color-dark-3);color:var(--mantine-color-dark-0);background-color:var(--mantine-color-dark-5)}.m_d6493fad :where(code){line-height:var(--mantine-line-height);padding:calc(.0625rem * var(--mantine-scale)) calc(.3125rem * var(--mantine-scale));border-radius:var(--mantine-radius-sm);font-family:var(--mantine-font-family-monospace);font-size:var(--mantine-font-size-xs)}:where([data-mantine-color-scheme=light]) .m_d6493fad :where(code){background-color:var(--mantine-color-gray-0);color:var(--mantine-color-black)}:where([data-mantine-color-scheme=dark]) .m_d6493fad :where(code){background-color:var(--mantine-color-dark-5);color:var(--mantine-color-white)}.m_d6493fad :where(ul,ol):not([data-type=taskList]){margin-bottom:var(--mantine-spacing-md);padding-inline-start:calc(2.375rem * var(--mantine-scale))}.m_d6493fad :where(ul,ol):not([data-type=taskList]) :where(li){margin-bottom:var(--mantine-spacing-xs)}.m_d6493fad :where(table){width:100%;border-collapse:collapse;caption-side:bottom;margin-bottom:var(--mantine-spacing-md)}.m_d6493fad :where(table) :where(caption){margin-top:var(--mantine-spacing-xs);font-size:var(--mantine-font-size-sm);color:var(--mantine-color-gray-6)}.m_d6493fad :where(table) :where(th){text-align:left;font-weight:700;color:var(--mantine-color-gray-7);font-size:var(--mantine-font-size-sm);padding:var(--mantine-spacing-xs) var(--mantine-spacing-sm)}.m_d6493fad :where(table) :where(thead th){border-bottom:calc(.0625rem * var(--mantine-scale)) solid;border-color:var(--mantine-color-gray-3)}.m_d6493fad :where(table) :where(tfoot th){border-top:calc(.0625rem * var(--mantine-scale)) solid;border-color:var(--mantine-color-gray-3)}.m_d6493fad :where(table) :where(td){padding:var(--mantine-spacing-xs) var(--mantine-spacing-sm);border-bottom:calc(.0625rem * var(--mantine-scale)) solid;border-color:var(--mantine-color-gray-3);font-size:var(--mantine-font-size-sm)}.m_d6493fad :where(table) :where(tr:last-of-type td){border-bottom:0}.m_d6493fad :where(blockquote){font-size:var(--mantine-font-size-lg);line-height:var(--mantine-line-height);margin:var(--mantine-spacing-md) 0;border-radius:var(--mantine-radius-sm);padding:var(--mantine-spacing-md) var(--mantine-spacing-lg)}:where([data-mantine-color-scheme=light]) .m_d6493fad :where(blockquote){background-color:var(--mantine-color-gray-0)}:where([data-mantine-color-scheme=dark]) .m_d6493fad :where(blockquote){background-color:var(--mantine-color-dark-8)} diff --git a/web-dist/assets/loader-ce7ad8bc.svg b/web-dist/assets/loader-ce7ad8bc.svg new file mode 100644 index 00000000..d93719a4 --- /dev/null +++ b/web-dist/assets/loader-ce7ad8bc.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web-dist/index.html b/web-dist/index.html new file mode 100644 index 00000000..49d8700e --- /dev/null +++ b/web-dist/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + Ciro | Loading + + + + +
+ + + diff --git a/web-dist/manifest.json b/web-dist/manifest.json new file mode 100644 index 00000000..e7a4b190 --- /dev/null +++ b/web-dist/manifest.json @@ -0,0 +1,15 @@ +{ + "short_name": "web", + "name": "{{name}}", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + } + ], + "start_url": "./index.html", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/web/.eslintrc.js b/web/.eslintrc.js new file mode 100644 index 00000000..2a0604ba --- /dev/null +++ b/web/.eslintrc.js @@ -0,0 +1,25 @@ +module.exports = { + root: true, + env: { + browser: true, + es6: true, + node: true, + }, + extends: [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:react/jsx-runtime", + "plugin:react-hooks/recommended", + ], + globals: { + __DEV__: true, + }, + ignorePatterns: ["dist", ".eslintrc.cjs", "vendor"], + parserOptions: { ecmaVersion: "latest", sourceType: "module" }, + settings: { react: { version: "18.2" } }, + plugins: ["react-refresh"], + rules: { + "react-refresh/only-export-components": ["warn", { allowConstantExport: true }], + "react/prop-types": ["off"], + }, +}; diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 00000000..3217a558 --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +.vite/ diff --git a/web/.prettierrc b/web/.prettierrc new file mode 100644 index 00000000..e8e0788f --- /dev/null +++ b/web/.prettierrc @@ -0,0 +1,10 @@ +{ + "arrowParens": "always", + "printWidth": 90, + "trailingComma": "all", + "parser": "flow", + "plugins": ["@trivago/prettier-plugin-sort-imports"], + "importOrder": ["^[./]" ], + "importOrderSeparation": true, + "importOrderSortSpecifiers": true +} \ No newline at end of file diff --git a/web/Makefile b/web/Makefile new file mode 100644 index 00000000..97b5212b --- /dev/null +++ b/web/Makefile @@ -0,0 +1,14 @@ +install: + npm install + +start: + npm run dev +test: + npm test + +fmt: + npm run fmt-fix + npm run lint-fix +check: + npm run fmt-check + npm run lint-check diff --git a/web/README.md b/web/README.md new file mode 100644 index 00000000..1b30d8cf --- /dev/null +++ b/web/README.md @@ -0,0 +1,41 @@ +# WebhookDB Web App + +## Installation + +Install the application dependencies by running: + +```sh +make install +``` + +## Development + +Start the application in development mode by running: + +```sh +make start +``` + +## Production + +Build the application in production mode by running: + +```sh +npm run build +``` + +Or, from the root `webhookdb/Makefile`: + +```sh +make web-build +``` + +## Hosting + +For now, the web app is built manually and checked in. +This isn't ideal, but I don't want to deal with the rigamarole of getting the app building +in both the container and Heroku, like we do with Suma (https://github.com/lithictech/suma). + +Run `make web-build`, and check in the diffs in `web-build`. +This is served as a SPA using [`rack-spa`](https://github.com/lithictech/rack-spa) +set up in `apps.rb`. diff --git a/web/index.html b/web/index.html new file mode 100644 index 00000000..1d187554 --- /dev/null +++ b/web/index.html @@ -0,0 +1,16 @@ + + + + + + + + + + Ciro | Loading + + +
+ + + diff --git a/web/package-lock.json b/web/package-lock.json new file mode 100644 index 00000000..b02c0955 --- /dev/null +++ b/web/package-lock.json @@ -0,0 +1,5463 @@ +{ + "name": "webhookdb-web", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "webhookdb-web", + "dependencies": { + "@mantine/core": "^7.10.1", + "@mantine/hooks": "^7.10.1", + "@sentry/react": "^8.7.0", + "@tabler/icons-react": "^3.5.0", + "axios": "^1.7.2", + "clsx": "^2.1.1", + "dayjs": "^1.11.10", + "humps": "git+https://github.com/lithictech/humps.git#fb9844c8d37cea67ee9c592e2685aee68d05015f", + "lodash": "^4.17.21", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-helmet-async": "^2.0.5", + "react-router-dom": "^6.21.0" + }, + "devDependencies": { + "@trivago/prettier-plugin-sort-imports": "^4.2.1", + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@vitejs/plugin-react-swc": "^3.3.2", + "eslint": "^8.45.0", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.3", + "postcss": "^8.4.38", + "postcss-preset-mantine": "^1.15.0", + "postcss-simple-vars": "^7.0.1", + "prettier": "^3.0.3", + "typescript": "^5.1.6", + "vite": "^4.3.9", + "vitest": "^0.34.6" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", + "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.6", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", + "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz", + "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz", + "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.6", + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name/node_modules/@babel/types": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", + "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz", + "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables/node_modules/@babel/types": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", + "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz", + "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", + "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz", + "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", + "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz", + "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.6", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", + "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", + "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz", + "integrity": "sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/types": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", + "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.6.tgz", + "integrity": "sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/types": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", + "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz", + "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==", + "dependencies": { + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", + "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/react": { + "version": "0.26.16", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.16.tgz", + "integrity": "sha512-HEf43zxZNAI/E781QIVpYSF3K2VH4TTYZpqecjdsFkjsaU1EbaWcM++kw0HXFffj7gDUcBFevX8s0rQGQpxkow==", + "dependencies": { + "@floating-ui/react-dom": "^2.1.0", + "@floating-ui/utils": "^0.2.0", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.0.tgz", + "integrity": "sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", + "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mantine/core": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.10.1.tgz", + "integrity": "sha512-l9ypojKN3PjwO1CSLIsqxi7mA25+7w+xc71Q+JuCCREI0tuGwkZsKbIOpuTATIJOjPh8ycLiW7QxX1LYsRTq6w==", + "dependencies": { + "@floating-ui/react": "^0.26.9", + "clsx": "^2.1.1", + "react-number-format": "^5.3.1", + "react-remove-scroll": "^2.5.7", + "react-textarea-autosize": "8.5.3", + "type-fest": "^4.12.0" + }, + "peerDependencies": { + "@mantine/hooks": "7.10.1", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/core/node_modules/type-fest": { + "version": "4.18.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.18.3.tgz", + "integrity": "sha512-Q08/0IrpvM+NMY9PA2rti9Jb+JejTddwmwmVQGskAlhtcrw1wsRzoR6ode6mR+OAabNa75w/dxedSUY2mlphaQ==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mantine/hooks": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.10.1.tgz", + "integrity": "sha512-0EH9WBWUdtQLGU3Ak+csQ77EtUxI6pPNfwZdRJQWcaA3f8SFOLo9h9CGxiikFExerhvuCeUlaTf3s+TB9Op/rw==", + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@remix-run/router": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz", + "integrity": "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@sentry-internal/browser-utils": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.7.0.tgz", + "integrity": "sha512-RFBK1sYBwV5qGMEwWF0rjOTqQpp4/SvE+qHkOJNRUTVYmfjM+Y9lcxwn4B6lu3aboxePpBw/i1PlP6XwX4UnGA==", + "dependencies": { + "@sentry/core": "8.7.0", + "@sentry/types": "8.7.0", + "@sentry/utils": "8.7.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/feedback": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.7.0.tgz", + "integrity": "sha512-qcGtWCtRB4eP7NVQoxW936oPkU4qu9otMLYELPGmOJPnuAG0lujlJXW7BucaM7ADyJgJTE75hG849bHecfnbmQ==", + "dependencies": { + "@sentry/core": "8.7.0", + "@sentry/types": "8.7.0", + "@sentry/utils": "8.7.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/replay": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.7.0.tgz", + "integrity": "sha512-bQzOkWplaWTe3u+aDBhxWY3Qy0aT7ss2A3VR8iC6N8ZIEP9PxqyJwTNoouhinfgmlnCguI7RDOO4f3r3e2M80Q==", + "dependencies": { + "@sentry-internal/browser-utils": "8.7.0", + "@sentry/core": "8.7.0", + "@sentry/types": "8.7.0", + "@sentry/utils": "8.7.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry-internal/replay-canvas": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.7.0.tgz", + "integrity": "sha512-FOnvBPbq6MJVHPduc0hcsdE3PeeovQ2z5WJnZDGhvp/Obehxqe+XgX7K/595vRIknv4EokRn/3Kw0mFwG8E+ZQ==", + "dependencies": { + "@sentry-internal/replay": "8.7.0", + "@sentry/core": "8.7.0", + "@sentry/types": "8.7.0", + "@sentry/utils": "8.7.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/browser": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.7.0.tgz", + "integrity": "sha512-4EEp+PlcktsMN0p+MdCPl/lghTkq7eOtZjQG9NGhWzfyWrJ3tuL1nsDr2SSivJ1V277F01KtKYo6BFwP2NtBZA==", + "dependencies": { + "@sentry-internal/browser-utils": "8.7.0", + "@sentry-internal/feedback": "8.7.0", + "@sentry-internal/replay": "8.7.0", + "@sentry-internal/replay-canvas": "8.7.0", + "@sentry/core": "8.7.0", + "@sentry/types": "8.7.0", + "@sentry/utils": "8.7.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/core": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.7.0.tgz", + "integrity": "sha512-Sq/46B+5nWmgnCD6dEMZ6HTkKbV/KAdgaSvT8oXDb9OWoPy1jJ/gbLrhLs62KbjuDQk4/vWnOgHiKQbcslSzMw==", + "dependencies": { + "@sentry/types": "8.7.0", + "@sentry/utils": "8.7.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/react": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-8.7.0.tgz", + "integrity": "sha512-JFo8QW8JB4eaFC8RdkOBO96JvlGgstywmyMZ39qWfFbD735vGl8PnOa0AnrC/5Auc86dZ98/I4OEPboqUE9q1w==", + "dependencies": { + "@sentry/browser": "8.7.0", + "@sentry/core": "8.7.0", + "@sentry/types": "8.7.0", + "@sentry/utils": "8.7.0", + "hoist-non-react-statics": "^3.3.2" + }, + "engines": { + "node": ">=14.18" + }, + "peerDependencies": { + "react": "^16.14.0 || 17.x || 18.x || 19.x" + } + }, + "node_modules/@sentry/types": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.7.0.tgz", + "integrity": "sha512-11KLOKumP6akugVGLvSoEig+JlP0ZEzW3nN9P+ppgdIx9HAxMIh6UvumbieG4/DWjAh2kh6NPNfUw3gk2Gfq1A==", + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/utils": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.7.0.tgz", + "integrity": "sha512-aWmcbSoOmrbzll/FkNQFJcCtLAuJLvTYbRKiCSkV3FScA7UaA742HkTZAPFiioALFIESWk/fcGZqtN0s4I281Q==", + "dependencies": { + "@sentry/types": "8.7.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@swc/core": { + "version": "1.5.24", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.5.24.tgz", + "integrity": "sha512-Eph9zvO4xvqWZGVzTdtdEJ0Vqf0VIML/o/e4Qd2RLOqtfgnlRi7avmMu5C0oqciJ0tk+hqdUKVUZ4JPoPaiGvQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.7" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.5.24", + "@swc/core-darwin-x64": "1.5.24", + "@swc/core-linux-arm-gnueabihf": "1.5.24", + "@swc/core-linux-arm64-gnu": "1.5.24", + "@swc/core-linux-arm64-musl": "1.5.24", + "@swc/core-linux-x64-gnu": "1.5.24", + "@swc/core-linux-x64-musl": "1.5.24", + "@swc/core-win32-arm64-msvc": "1.5.24", + "@swc/core-win32-ia32-msvc": "1.5.24", + "@swc/core-win32-x64-msvc": "1.5.24" + }, + "peerDependencies": { + "@swc/helpers": "*" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.5.24", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.24.tgz", + "integrity": "sha512-M7oLOcC0sw+UTyAuL/9uyB9GeO4ZpaBbH76JSH6g1m0/yg7LYJZGRmplhDmwVSDAR5Fq4Sjoi1CksmmGkgihGA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.5.24", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.5.24.tgz", + "integrity": "sha512-MfcFjGGYognpSBSos2pYUNYJSmqEhuw5ceGr6qAdME7ddbjGXliza4W6FggsM+JnWwpqa31+e7/R+GetW4WkaQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.5.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.24.tgz", + "integrity": "sha512-amI2pwtcWV3E/m/nf+AQtn1LWDzKLZyjCmWd3ms7QjEueWYrY8cU1Y4Wp7wNNsxIoPOi8zek1Uj2wwFD/pttNQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.5.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.24.tgz", + "integrity": "sha512-sTSvmqMmgT1ynH/nP75Pc51s+iT4crZagHBiDOf5cq+kudUYjda9lWMs7xkXB/TUKFHPCRK0HGunl8bkwiIbuw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.5.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.24.tgz", + "integrity": "sha512-vd2/hfOBGbrX21FxsFdXCUaffjkHvlZkeE2UMRajdXifwv79jqOHIJg3jXG1F3ZrhCghCzirFts4tAZgcG8XWg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.5.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.24.tgz", + "integrity": "sha512-Zrdzi7NqzQxm2BvAG5KyOSBEggQ7ayrxh599AqqevJmsUXJ8o2nMiWQOBvgCGp7ye+Biz3pvZn1EnRzAp+TpUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.5.24", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.24.tgz", + "integrity": "sha512-1F8z9NRi52jdZQCGc5sflwYSctL6omxiVmIFVp8TC9nngjQKc00TtX/JC2Eo2HwvgupkFVl5YQJidAck9YtmJw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.5.24", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.24.tgz", + "integrity": "sha512-cKpP7KvS6Xr0jFSTBXY53HZX/YfomK5EMQYpCVDOvfsZeYHN20sQSKXfpVLvA/q2igVt1zzy1XJcOhpJcgiKLg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.5.24", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.24.tgz", + "integrity": "sha512-IoPWfi0iwqjZuf7gE223+B97/ZwkKbu7qL5KzGP7g3hJrGSKAvv7eC5Y9r2iKKtLKyv5R/T6Ho0kFR/usi7rHw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.5.24", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.24.tgz", + "integrity": "sha512-zHgF2k1uVJL8KIW+PnVz1To4a3Cz9THbh2z2lbehaF/gKHugH4c3djBozU4das1v35KOqf5jWIEviBLql2wDLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true + }, + "node_modules/@swc/helpers": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.11.tgz", + "integrity": "sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@swc/types": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.7.tgz", + "integrity": "sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ==", + "dev": true, + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@tabler/icons": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.5.0.tgz", + "integrity": "sha512-I53dC3ZSHQ2MZFGvDYJelfXm91L2bTTixS4w5jTAulLhHbCZso5Bih4Rk/NYZxlngLQMKHvEYwZQ+6w/WluKiA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + } + }, + "node_modules/@tabler/icons-react": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.5.0.tgz", + "integrity": "sha512-bn05XKZV3ZfOv5Jr1FCTmVPOQGBVJoA4NefrnR919rqg6WGXAa08NovONHJGSuMxXUMV3b9Cni85diIW/E9yuw==", + "dependencies": { + "@tabler/icons": "3.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + }, + "peerDependencies": { + "react": ">= 16" + } + }, + "node_modules/@trivago/prettier-plugin-sort-imports": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz", + "integrity": "sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==", + "dev": true, + "dependencies": { + "@babel/generator": "7.17.7", + "@babel/parser": "^7.20.5", + "@babel/traverse": "7.23.2", + "@babel/types": "7.17.0", + "javascript-natural-sort": "0.7.1", + "lodash": "^4.17.21" + }, + "peerDependencies": { + "@vue/compiler-sfc": "3.x", + "prettier": "2.x - 3.x" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + } + } + }, + "node_modules/@types/chai": { + "version": "4.3.16", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", + "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", + "dev": true + }, + "node_modules/@types/chai-subset": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.5.tgz", + "integrity": "sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/node": { + "version": "20.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.0.tgz", + "integrity": "sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "devOptional": true + }, + "node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "devOptional": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.0.tgz", + "integrity": "sha512-yrknSb3Dci6svCd/qhHqhFPDSw0QtjumcqdKMoNNzmOl5lMXTTiqzjWtG4Qask2HdvvzaNgSunbQGet8/GrKdA==", + "dev": true, + "dependencies": { + "@swc/core": "^1.5.7" + }, + "peerDependencies": { + "vite": "^4 || ^5" + } + }, + "node_modules/@vitest/expect": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", + "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", + "dev": true, + "dependencies": { + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", + "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", + "dev": true, + "dependencies": { + "@vitest/utils": "0.34.6", + "p-limit": "^4.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vitest/snapshot": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", + "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", + "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", + "dev": true, + "dependencies": { + "tinyspy": "^2.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", + "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chai": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/confbox": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", + "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "devOptional": true + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dayjs": { + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", + "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.34.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz", + "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.7.tgz", + "integrity": "sha512-yrj+KInFmwuQS2UQcg1SF83ha1tuHC1jMQbRNyuWtlEzzKRDgAl7L4Yp4NlDUZTZNlWvHEzOtJhMi40R7JxcSw==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/humps": { + "version": "2.0.1", + "resolved": "git+ssh://git@github.com/lithictech/humps.git#fb9844c8d37cea67ee9c592e2685aee68d05015f", + "integrity": "sha512-C0yCc9mq6OMZOAIMC5hbcFi4d74dtUUOYY+pFgTVtViFNTSTG+cOFxSIv8Mkj9FHZKi+RMRTKFdFFcY072KVdA==", + "license": "MIT" + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/magic-string": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mlly": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.0.tgz", + "integrity": "sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.0", + "ufo": "^1.5.3" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.1.tgz", + "integrity": "sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==", + "dev": true, + "dependencies": { + "confbox": "^0.1.7", + "mlly": "^1.7.0", + "pathe": "^1.1.2" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-mixins": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/postcss-mixins/-/postcss-mixins-9.0.4.tgz", + "integrity": "sha512-XVq5jwQJDRu5M1XGkdpgASqLk37OqkH4JCFDXl/Dn7janOJjCTEKL+36cnRVy7bMtoBzALfO7bV7nTIsFnUWLA==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "postcss-js": "^4.0.0", + "postcss-simple-vars": "^7.0.0", + "sugarss": "^4.0.1" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-preset-mantine": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/postcss-preset-mantine/-/postcss-preset-mantine-1.15.0.tgz", + "integrity": "sha512-OKPs6uoORSXlU/GFH1ZtFaslecHBPwuoSikdL5W3WKJm4ZPAQM0mw9x9m3toa/Mo1JhoBmYMM28i+zEdav5Edg==", + "dev": true, + "dependencies": { + "postcss-mixins": "^9.0.4", + "postcss-nested": "^6.0.1" + }, + "peerDependencies": { + "postcss": ">=8.0.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-simple-vars": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-7.0.1.tgz", + "integrity": "sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A==", + "dev": true, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.1" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.0.tgz", + "integrity": "sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" + }, + "node_modules/react-helmet-async": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-2.0.5.tgz", + "integrity": "sha512-rYUYHeus+i27MvFE+Jaa4WsyBKGkL6qVgbJvSBoX8mbsWoABJXdEO0bZyi0F6i+4f0NuIb8AvqPMj3iXFHkMwg==", + "dependencies": { + "invariant": "^2.2.4", + "react-fast-compare": "^3.2.2", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-number-format": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.0.tgz", + "integrity": "sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==", + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.5.10", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.10.tgz", + "integrity": "sha512-m3zvBRANPBw3qxVVjEIPEQinkcwlFZ4qyomuWVpNJdv4c6MvHfXV0C3L9Jx5rr3HeBHKNRX+1jreB5QloDIJjA==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-router": { + "version": "6.23.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.1.tgz", + "integrity": "sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==", + "dependencies": { + "@remix-run/router": "1.16.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.23.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.1.tgz", + "integrity": "sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==", + "dependencies": { + "@remix-run/router": "1.16.1", + "react-router": "6.23.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-textarea-autosize": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", + "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "node_modules/std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/sugarss": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-4.0.1.tgz", + "integrity": "sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw==", + "dev": true, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/tinybench": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz", + "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", + "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", + "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", + "dev": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", + "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", + "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.4.0", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", + "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", + "dev": true, + "dependencies": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.34.6", + "@vitest/runner": "0.34.6", + "@vitest/snapshot": "0.34.6", + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "acorn": "^8.9.0", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.10", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.3.3", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.7.0", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", + "vite-node": "0.34.6", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/web/package.json b/web/package.json new file mode 100644 index 00000000..0de7c55c --- /dev/null +++ b/web/package.json @@ -0,0 +1,47 @@ +{ + "name": "webhookdb-web", + "private": true, + "scripts": { + "dev": "vite", + "start": "vite", + "build": "vite build --base=/app/", + "lint-check": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", + "lint-fix": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", + "fmt-check": "prettier --no-error-on-unmatched-pattern --check '*.{js,jsx}' './tools/*.{js,jsx}' './src/**/*.{js,jsx}'", + "fmt-fix": "prettier --no-error-on-unmatched-pattern --write '*.{js,jsx}' './tools/*.{js,jsx}' './src/**/*.{js,jsx}'", + "test": "vitest --passWithNoTests --globals", + "preview": "vite preview" + }, + "dependencies": { + "@mantine/core": "^7.10.1", + "@mantine/hooks": "^7.10.1", + "@sentry/react": "^8.7.0", + "@tabler/icons-react": "^3.5.0", + "axios": "^1.7.2", + "clsx": "^2.1.1", + "dayjs": "^1.11.10", + "humps": "git+https://github.com/lithictech/humps.git#fb9844c8d37cea67ee9c592e2685aee68d05015f", + "lodash": "^4.17.21", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-helmet-async": "^2.0.5", + "react-router-dom": "^6.21.0" + }, + "devDependencies": { + "@trivago/prettier-plugin-sort-imports": "^4.2.1", + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@vitejs/plugin-react-swc": "^3.3.2", + "eslint": "^8.45.0", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.3", + "postcss": "^8.4.38", + "postcss-preset-mantine": "^1.15.0", + "postcss-simple-vars": "^7.0.1", + "prettier": "^3.0.3", + "typescript": "^5.1.6", + "vite": "^4.3.9", + "vitest": "^0.34.6" + } +} diff --git a/web/postcss.config.cjs b/web/postcss.config.cjs new file mode 100644 index 00000000..c759b743 --- /dev/null +++ b/web/postcss.config.cjs @@ -0,0 +1,14 @@ +module.exports = { + plugins: { + 'postcss-preset-mantine': {}, + 'postcss-simple-vars': { + variables: { + 'mantine-breakpoint-xs': '36em', + 'mantine-breakpoint-sm': '48em', + 'mantine-breakpoint-md': '62em', + 'mantine-breakpoint-lg': '75em', + 'mantine-breakpoint-xl': '88em', + }, + }, + }, +}; \ No newline at end of file diff --git a/web/prettier.config.js b/web/prettier.config.js new file mode 100644 index 00000000..f053ebf7 --- /dev/null +++ b/web/prettier.config.js @@ -0,0 +1 @@ +module.exports = {}; diff --git a/web/public/manifest.json b/web/public/manifest.json new file mode 100644 index 00000000..e7a4b190 --- /dev/null +++ b/web/public/manifest.json @@ -0,0 +1,15 @@ +{ + "short_name": "web", + "name": "{{name}}", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + } + ], + "start_url": "./index.html", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/web/src/App.jsx b/web/src/App.jsx new file mode 100644 index 00000000..2bcdf325 --- /dev/null +++ b/web/src/App.jsx @@ -0,0 +1,286 @@ +import ErrorScreen from "./components/ErrorScreen"; +import { redirectIfAuthed, redirectIfUnauthed } from "./hocs/authRedirects"; +import applyHocs from "./modules/applyHocs"; +import Redirect from "./components/Redirect"; +import * as Sentry from "@sentry/react"; +import renderComponent from "./modules/renderComponent"; +import withMetatags from "./hocs/withMetatags"; +import { HelmetProvider } from "react-helmet-async"; +import { BrowserRouter, Routes, Route } from "react-router-dom"; +import { UserProvider } from "./state/UserProvider"; +import GlobalViewStateProvider from "./state/GlobalViewStateProvider"; +import { ScreenLoaderProvider } from "./state/ScreenLoaderProvider"; +import { withScreenLoaderMount } from "./state/useScreenLoader"; +import {installPromiseExtras} from "./modules/bluejay.js"; +import "./modules/dayConfig"; +import useUser from "./state/useUser.jsx"; +import config from "./config.js"; +import SigninPage from "./pages/SigninPage"; + +installPromiseExtras(window.Promise); + +export default function App() { + return ( + + + + + + + + + + ); +} + +function AppRouter() { + return ( + + + + ); +} + +function AppRoutes() { + return ( + + + ); +} + +const SentryRoutes = Sentry.withSentryReactRouterV6Routing(Routes); + +function AppRoutesInner() { + const { user } = useUser(); + return ( + + + {/**/} + {/**/} + {/**/} + {/**/} + {/**/} + {/**/} + {/**/} + {/**/} + {/*}*/} + {/*/>*/} + {/**/} + {/**/} + {/**/} + {/**/} + {/**/} + {/**/} + {/**/} + {/**/} + {/**/} + {/**/} + {/**/} + {/* (*/} + {/*
*/} + {/* */} + {/*
*/} + {/* ))}*/} + {/*/>*/} + {/*{config.styleguide && (*/} + {/* */} + {/*)}*/} + } /> +
+ ); +} + +function renderWithHocs(...args) { + return renderComponent(applyHocs(...args)); +} diff --git a/web/src/api.jsx b/web/src/api.jsx new file mode 100644 index 00000000..52a82f91 --- /dev/null +++ b/web/src/api.jsx @@ -0,0 +1,89 @@ +import config from "./config"; +import apiBase from "./modules/apiBase"; + +const instance = apiBase.create(config.apiHost, { + debug: config.debug, + chaos: false, +}); + +const get = (path, params, opts) => { + return instance.get(path, apiBase.mergeParams(params, opts)); +}; +const post = (path, params, opts) => { + return instance.post(path, params, opts); +}; +const patch = (path, params, opts) => { + return instance.patch(path, params, opts); +}; + +const put = (path, params, opts) => { + return instance.put(path, params, opts); +}; + +const del = (path, params, opts) => { + return instance.delete(path, apiBase.mergeParams(params, opts)); +}; + +export default { + ...apiBase, + axios: instance, + get, + post, + patch, + put, + del, + getMe: (data) => get(`/v1/me`, data), + getDashboard: (data) => get(`/v1/me/dashboard`, data), + updateActiveOrganization: (data) => post(`/v1/me/active_organization`, data), + register: (data) => post(`/v1/auth/register`, data), + login: (data) => post(`/v1/auth/login`, data), + verifyEmail: (data) => post(`/v1/auth/verify_email`, data), + forgotPassword: (data) => post(`/v1/auth/forgot_password`, data), + resetPassword: (data) => post(`/v1/auth/reset_password/email`, data), + getInvitation: (data) => get(`/v1/auth/invitations/${data.id}`, data), + logout: (data) => post(`/v1/auth/logout`, data), + + uploadFile: (data) => post(`/v1/organizations/0/uploads`, data), + + getOrganization: (data) => get(`/v1/organizations/0`, data), + updateOrganization: (data) => post(`/v1/organizations/0`, data), + getOrganizationMembers: (data) => get(`/v1/organizations/0/members`, data), + changeOrganizationMemberRole: ({ userId, ...data }) => + post(`/v1/organizations/0/members/${userId}/change_role`, data), + removeOrganizationMember: ({ userId, ...data }) => + post(`/v1/organizations/0/members/${userId}/remove`, data), + inviteOrganizationMember: (data) => post(`/v1/organizations/0/members/invite`, data), + reinviteOrganizationMember: (data) => + post(`/v1/organizations/0/members/reinvite`, data), + + getAwsConnections: (data) => get(`/v1/organizations/0/aws_connections`, data), + updateAwsConnection: (data) => + post(`/v1/organizations/0/aws_connections/${data.id}`, data), + verifyAwsConnection: (data) => + post(`/v1/organizations/0/aws_connections/${data.id}/verify`, data), + + getContractDashboard: (data) => get(`/v1/organizations/0/contracts/dashboard`, data), + getContractDashboardOrgwideSpendHistoryChart: (data) => + get(`/v1/organizations/0/contracts/dashboard/orgwide_spend_history_chart`, data), + getContractDashboardEffectiveDiscountRateChart: (data) => + get(`/v1/organizations/0/contracts/dashboard/effective_discount_rate_chart`, data), + getContractDashboardEffectiveDiscountRate: (data) => + get(`/v1/organizations/0/contracts/dashboard/effective_discount_rate`, data), + getContractDashboardPeriodSpendChart: (data) => + get(`/v1/organizations/0/contracts/dashboard/period_spend_chart`, data), + getOrganizationContractCommitments: (data) => + get(`/v1/organizations/0/contract_commitments`, data), + getCommitmentsRelatedToCommitment: (data) => + get(`/v1/organizations/0/commitments_related_to_commitment`, data), + getCommitmentsRelatedToContract: (data) => + get(`/v1/organizations/0/commitments_related_to_contract`, data), + getContractCommitment: (data) => + get(`/v1/organizations/0/${data.type}/${data.id}`, data), + getContractCommitmentHistoryChart: (data) => + get(`/v1/organizations/0/${data.type}/${data.id}/history_chart`, data), + getContracts: (data) => get(`/v1/organizations/0/contracts`, data), + createContract: (data) => post(`/v1/organizations/0/contracts`, data), + getContract: (data) => get(`/v1/organizations/0/contracts/${data.id}`, data), + + joinOrganization: ({ id, ...data }) => post(`/v1/organizations/${id}/join`, data), +}; diff --git a/web/src/assets/images/dropdown.svg b/web/src/assets/images/dropdown.svg new file mode 100644 index 00000000..6d587382 --- /dev/null +++ b/web/src/assets/images/dropdown.svg @@ -0,0 +1,3 @@ + + + diff --git a/web/src/assets/images/loader.svg b/web/src/assets/images/loader.svg new file mode 100644 index 00000000..d93719a4 --- /dev/null +++ b/web/src/assets/images/loader.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/webhookdb-logo-512.png b/web/src/assets/images/webhookdb-logo-512.png new file mode 100644 index 0000000000000000000000000000000000000000..25fd6aa3c90690665110f1fd3d82ac3473595b48 GIT binary patch literal 20526 zcmXtAby!r-*T1`fbggu|EK*X^3rH=EARyf!f^@BO!7cE|q3`$^_=C`0 z)z}LF*ug<|UC73ssTlZ2dT%8oZ#}oC-agizc7TtM5C1b)CofxTcRPMJPy3u5X$Amb z1JqFRk9~8u7JRbwCuVwAmXN{&BW>O~6qH}0rg@JnY*6v$$?_sS4mNL}soK1~%OK04 zLsu>&^gN#HXfePLr32v}4ali&mnGv`PSZP*+~psBVQz8%*VZMMuzg3scEjSYPscH; zCoSsPI5PY7>`JE6+wM+R+t1>P_(sSa+ScDZ#|CbBO8mNS#a)eSgnQ3oWB4GX#djT2 zr}pA_U%Wj`$?vN4r7EQaH2^=FuMn}rTi_~W9HG{Bo6nY2bSq#SiJa&E`K1w-6>57o zpI)N9=YS*sb(&zf?%i`?BL`+(#P7#I3{`AfdSm%hVrkQ48{z`i{K1f&;@$DoCwKNp z6TV?kR&dckg_px3VQjigJOB#1?pnaiafsg-wtKa}xTz$vvs}T4*(c0T+z%uSRN!M3 z&aIN(B-KE$fs;LdD(k4zp5aKXP7~4*9O9VF-i@nJ!t`NGeHV)}#Oa3+)Ohd~9SB>> z9UtL^_cmt$GeiTd;$#5`7Yl5G8e?fY8nlTg@XG;yNi#~59edF#%pgU zgvv2u%~Fz$F*%qViN%7KnU^j18pt?cV&K|Z}o{7Wgf70b4VIk@bhrhT5y`i`X9|+@(>6y$6z}J+F&#-Z3St5iC;_q@(Y~ zMo408eRr%ywH>_WR@L!BdS14LE~a@R^4UY=YR(hOzVRl#di~)+5^s$0Vc(*OfLJCUa*lgH0clxC0)RBK zPeGkgG$+EY)}r?!(R9hq;KshXuWgd&zT6NQ&G{J<@rBd(N{O)Pk5DKok_aFaHB{4< zmhJSoTOEmJNmd>QhF4qi7UkkxZNYqLa1ErYNfqxwxH)= zl(b2QfQ{Sz1f79p*&sv%NEZpxRi2mqEk{qga!NlkfJ}_Jz?5QCd72FqZy|2;0LAh< z{wBIzeiHnUS)&cgWM$CUGnP)QrCpenx*p<%jDK5Dq$ifZIbk1}kw}Pn!uxpx^QAp3 zv%E-E0~OyTqG5qc!Nn#r_{v+TT*xl+I4@))5wkw&heA9O z#dL(qo)DFoL?^pHg0MAvI49bRRF|S@D7oKLOH>xU?7z4GS^h`I~!nOb(5VFh)ic>q{fe4!LKKfV?u7tKORn0G31rD}S$g0E-GtW2bh zCpXaYBTa8eAXMYga1iCQdDCLLmEmGfi7(dzSJrDyC&ro!Kh39Vqu9kHmt$91@ zv@Xk#f!sCVLpPZ%3U7 zzqVyY)s{lpY~~%lKl{!lgQZPQ%8K96lzl}wDUXoi0pLCQqvXvv72tsTKE}adpI0_a zA2c3eaHuQ(mk85Tk!uhfX2A;KeCAc?@CZWTS(ze+p<70Qn}X9Dg|5M5)0{vCx*r1( zS&aRz5?45fwL@@t3iU9~W8uex;awVdas(})siZGKIut7cl@P5ZD-sjrzx=Rle-(KE zg~H-o*3_v!{8ylnsvr8GnfV zs(8blqaUUDg%Tp4%wE*3S;*Oi88s>bwHk;o$@Q#M+yEEjgLO7?Qiq+uV&*O>w|2 zP@Vr*kISL}ew0iqigUHi(=z_Q0fI@*qX69L#hd-U_jCQCv%>qnHUZ|t0}z3B=A^3$ zh&6%|gi&ha$R1JOt0jZk`{O>6b7jI$TIKNGr=|SXdxg=c)Q$f^q=qLK+U$`VY7ZUh zy&;F|Li%Z)XQmUWYW4vj$ims+X`veC16`>!98Nh&?YpS&*^Ew-7-b3pZd4M9^&n}u zS&Cg0LtxoSIw`-3!jqFT;}{IZ4+$@?i;3wO=dvt(7bdR*p#XfO_>6`WC64NDzVNy( z4x@bV`Ax`Ac|5uN8>6I7T%Ddk#;M*l$?WXqD=;PA93@d_uIJSbuAs?kf;mbLn30WT zcGkbEe%mWj`!%ZfeyZ1{s$)es>NQb_bhA1Vni&4{gZjy#D<1w~NGNk*aKPpylb9nB zpI26PYcbK&DpgwC+q7MCUMrEWf6KZ;K|%5&bd#DEa+Ozb=+d z=Pi_t*p=zUzBK7!^$`5qSQDvPJ26wEkO*ImR%+fm{k=_*=0BI-I&8W?m2R)~6^V#2 z2Y68K|K$0NFHP)S1AbHcBH*N--`&cGE8cfkOWS`4v$Pl;{BSf7LO9=+<{rY@6$ma= z0A<5*in_Fv^SRPR;UK$~d?G)$MfqgOvVwXbeS^_w#qh|mBo%;uKLY2%_+Cu{>^Tp> zu;N-Q+#pTvYz@kz@Dnco68+E|(RaAm_?tMqve8Hk>!SKGD+M8jS7ePXn5VxyJOWhU zt#adyYw7BAG>uwR-C1Y4lwx1Wq}ofjKcn81?sEt%0!EzQXFT{L2)C@fC?cIG#J^d6 z78owLE31o}(-L$( z1#|ujWjxYs+DxziXwtk!Om_t>e^h7qEqcvj*7GgvtEbt{a(I|q|2aHgX?zp=WM5w1 z(46DYR52XdZnYr!tXe9qKq8AAmpl~cUU=S*+)}{mL8{5bU+T7c2;>)4)Tw@QnIU6A z5}ei7Xu*QYoJM)^g3e1ojzoqVg6L$M5-9KT0F&-Tsz1`_LQ~7Z`OMQeJ2G;LS2O-z zWK8=;{(A6arpqsed!|?lYs&pbIONZF{moSYyyt(`_eMHfPd02y;b$h`@LznBnJ((SQucch0+)RMMR=NgEeOjt39|&6 z)yeR$@DT;SUK+JnYtuDSZ_cv5G9eER5?>IPL*Vy^UIyY-nc~-^Z9*|O*Ovug0t(}# z)nB~Xoe@j5zZP2a2D6u0o~nu({8HD(+Pg6+Uyf)5z)(2c!~&<)6r6l^pymDzSU9B} zHBVjXDXq{`MZHiaY~w^96ri-A-r{2~O<0s^gSiVdZecj)u&b61oX)qJcAfGR;Eu!} z{YK(T=8-XxJ=6dg*gf_Vug*i$#8w@gb=ygO?9{Hwt(7$EC`A*+BKj;ue$ixNOk_Op zfCV~ICL3nORj1v`-!6e`&5>?dd3DqmcAQu$m|FfD!33MfgPU&YNngQ6VIZ43c0 zkkjolmm>#Hm)rF;j!C9*X_BT{GvDDe+Z#pNsyFw?zXdO^5peEEI`1AyZNi=XM$iTQ zC;?g18&qF8lL0sU#P8OR^bV6g0+Vu3;2A}s#1&qu7v>$bX}y1%IIqYy$+)6+^k(m^4wo39lR*UB+O7f-*(PZsQtxc_PGqS36VYtpW8V`eFW5dVB_}Gmzj`m%mRv=WS;${`L*$6Bhz^?)?tBw; zRFOGPj9ZXW9L@mOUG>)+k}X&K$zF>W!q{((@tc%H(4RF#%Cs7lCKaSfG&@LvyyKL% zdgMAY!wr+~0rPy$5o>q774ItjJ#ZPNC5=s73&4`1pv&}Yy|pdqS7xZnhC&<_>L#F- zHTA6|j~H)ohoL?(>p-;l({9>0s})BhgS;z~vb!T6p0y@kX)$&hY&+M{D3m^R@3|`& z^b+)4%^4D|UPaS${{=i^a6>>aVJx(}!dBIjX&$FltVxUV6@9NMaBaj}Jt*B<&`HiHNBV-YV)i}mksru7L>~_RyS8hk znWC{}?cL(tBd5O?=>poFcVw)8k_ob{cElbSDD(w`hLvR$X^$`aO1nJ#36F^vAbpJj z{m0wd6o=!);7il#s|ONWI==trE(ETCGRKu*%kBhn%t~VCl*V7#l610%MVH6Cg}Mp0 z<&4yMSjQ(}t?Fcb9-q);Y8mYQC2yit2LCWfY#UFn-SG{!upZLET6aC3{_EQO_j6Zn z5#2b05wxDuoZgigu9wUOOp2J&+2$#xY-|!}UF9@WoGlSI1+xq=2iqDS9y`CS@F})G3fO`>lpBE10`(i{;&?uuW<>|M80Dh)R ziE@HYo}a(_t*fG~YOL?1RLImPH{%X^#J35}n~q1f0tLAmV7hOsdY|;q(>yj|jgQM& zeck^qF0t?2du%7U@6-PK^$MoG{lTst9TOD+`hHtF;9?XRjWFzJoFu&OHJ`dScppn8 zd$@Y$PIf-}t?uLr6k(s2w; zqNg9dCjxG27PKZC6f+V(hp#QOsVi7661Bpq>35_Z-f3t)4@^t)y!aabivmlBCDMlg zW;mNuj|N=E$C2{gy+Mw7Y*PInSK0+C^hC;Ew4kA}GJQ+t9ECIH2ob!HvL}|yMp!0z z(jo`{fW_q`QvT>l{0sQuESNoa&B0DSpko>obb#gnF38m|GWx5D%lGoz<8J$oCp-$> z*G`{l|Hg(?C|>yR*W4eCFHA)f5U4>g&>=`;L&6>CBLgU(qOj_*qT8^Bc6nU3TZVj= zZ6>OCyAEZ+sD2U$&Xx!7r?)bK-)~6g1#rC#O*p?Ulv7U<{-OQb@jNz@YVTMuLU7Hsgwegy?p88s z1@zJ$!8ItflZ2)nLpbKxiXq_+!{8{8iqm6XwNpv z5C&z)ogk^CVxn{Q5SBZ;x<+qc_&E)YS~?we3=j&&V9z4w=k20?WnOEW#JSEMuF1Uv zr28n*kOhUBFo^)>oRUnVsEOR9>(3g_F7o19brLm$pA$CjSAXzDF$jD4HBZePJCatw zC7w6xOJQ+Ib6~3+FJWH!$*v+wyGq7~P>g;p>9ouN#j{tO7u}swDEF1EpoQ|=BF=wp zu(&B!GTin?HQJ6sQ1_M}eoFTnpERJuqL^!9(P3M~Ou4Yug^{V_Q#d%&y~ATlZ=C*t z(r1b`p)C?7g8{FXKW%ir5{Fn{78pmcymgsk5p%K2dmE(Ru=h;?OO@iD$NkIxi?p@J zZVz*2QIshR;-#?YQl(GNG};Y1k0GpEUV*i6hWx_{G!Z4gr}(4#nfpq-z&zda-WtoA zAXj(Bxfj=+M31*q3@)0sK6(EhwmYcmOLln z;YtF5^kLb@NY3^etvj{(mQ+PjR-FRh!9)%yr8<*_%g3qPW_5mE*)TONHL^^ly6}LN0u+X7w*x)e7-Dfh%ytJHlgzamspL3_f{`3hv`}C zZW-X$6BrD$>>#TeBy-JKd-_hWnbxdb*xQM6Kq$_|gW9`URA!VNX45cUoz6OBFVEU6 z$PT2FfW?d0&|zAo10hW7(H2yIm6VkUzw|h=Qj&jALvs2f->X^5l6>5zZN`N-SOkWoijet(&A&F43%l13or2c!=)XTL9HbZjo+u{TBSlH zcX9KEN|q`(U84GWizBPQEKG8vYM1F&qdmQnqDihO<@gjwzF68kL6b_Czq6_NJFH!P zJLbu^gRuf~dI!j|axygPmY-&_VDldwF3i|{p=v8?v+Ei(QF1w{yX}n7SDaf?(2;b- z(1$oOC8`9Uq-ZU2?eY}D+~+p3FE}aFS97h%X%Vc>63K!sdlSnUKVsv*l&y?5foA#h zt5-@}=yQ2y{%R=3e7IMFjP#E$-1^|iY@3l4ZOhs9b^_$pbMh5Ti}a6GXFQO0pM;BW z%NKsfyR+=~J5QJlvBB>hOB-w7M{T&bbZ>%lsQoREd&z?5z7T1#L1g65Rkz*lzXUEj z2;Ib>SJrRX$fyPgj6y3T=b^~tvR_7OA*h02cv9? zUoj*M9#uGGGy-NvCDYhxQeEF;pRIKLg2=gCWZY&Ngt+Q;&q%^7Z z)f*xotwyaox`N#5r)oj?Usd>I?-cxtf$N}qYz28o9wIp`!P3RE;b)6)dKT4AKS?a9 z0DgI92(tC6u(dZ~>DlBIM7(7yn|;xB@yslxQr{uW~lvk^|INh{N}!`0&42zR}bCFicl{e zV4h1C6Wj9105QZLgyWj?BoF@D;*v(o4@@3Zf4FqTZ@um(_F{x=4lE`u{l!UcMy^RV zZ)jktzWtqmNgN6V#De#h}ih*Y?;!}1c03|* zY@HLZ;<2s$Cf!c|(LR*vK%#u4h${K)$v--_HmKb2wbI|lPYh&!R71fWm-f%5?TM|I zFWuKrSOmPVsf|&wRI@{J4J=}mh~~fW>_@;ETX%{MBe!oqd{UNryjP`G{ZD4^_0zMs zCvc^gio)0Hnxelb3hrg1;JQt*#ACG0OC2A6grN1Ox~eRr$KHfHRuocwQ|?WK+!p{m zjcnN9@dp^Y-L8=HW#&QW(pIq-E7x=QlWHjVZ!7WaznbkrMNq4UahOzc-njGXCx4i`;g}G(`Pa z@5u*2ebOLQSap0^v90aWxC5m6>HW@~P!ufr7IVu7G*rq*yHSe`#>j29)_=sv3gNP) zE%2iNR}Zq|sJ1N<4UqO*o_T$2GuL{rj443)~o8Z?!b7% z8P20Li9(dg;qcRQ4>v6C^AdqNkh0VzqZ9GG)qjPKeDm-@Q20C^)xqLes^{$^WU+90 zuVRLL{EFAg4zFUk~TzKpwW%@bilW(k4V6K!uvPTmJPic#5YSN-0iz{2c{STnv&S0IN zzIMlz^SOrOc^SxVf<6d%Fh&*v|DxB2!m!c+jsQZJBEfr&Rc-75)Yo?_+=BdHPsFS0n>;y$&Y9aZWp$+rU`oxGpsG-RZ=&uR%~ut*Ap&L7)qMEA@VNDjQ59H5 z93$E^7*~Z8x)1J*?BK__r(jd@9_fL#L4>vLq3LxudSWE;ut=Sf@M{U*3Kja&beOmG zoVI2}4pQAotAq$%I|?l!+&%3m#Qz5x?Fo}<`T5Ejo*bVkjp!@Y0n#1Pb04s3!5?SP z?IjG}a|m4=ybwJI8!YW9ceAUHjNaUcQ(dQNG=rRTpQv6}?HO(*43jtUJ_BiZ;OSxXeSj2}(LKJLhN));* z3VDRE#QzskcV<#bz)3!T@fwUXBD~PlKsLaYl4)RfVtPwHHtGs{_z&iC%?pE~rJ?TF zV*;AwEimXc6CXUQnz9`O&jvwtEMt26QPnv?L9{VbatvcTHPhr6QmJ|2{x@W33}EN| zPPm*Kn3qW_co>56tVIVjI~s~!Jo`GOu{<~fZsix!Seq zAD<;K21Y$$#!>t{i#&Q^I)xkLcP@GC@x zEYhL^91F*<^j`vp#tV7N`G9d;)nc9W05EC#g8v>iV&Wj8>)l_Y8-enPhN$U7VNLpwm+HR2wnx z`0UNwjK)bxR9A_Hm+uaNgQ064!r%1-*I>e^l&d|+rLY`KjZ{S>W=mCn41rX#>II@R z6T^1+zROnGHQA>5Jgs+shXY;_5f3#CoLFJxQtiRjq(iv%MK&LpgK7-%W zezXSWzdp=>>`wYsv#s8oG~C$1k_dEIYzwo;zu5~qg4jLp+jCs3@L{RGjJ+k4_MqEZ zJUt&y-@LMX+w}pUfQ)Kfu*i};-+q#ZXbn10_T0Ie6aUf?1m=D@|74d?cp<1ruqaU>$9lsD1%y=G_zMBUT8jWKs}3aM1TaA4=@eLlqKqzFFjA(_Vu(6+Y>$m+`eN%;3w*1q+T#u@c`CNXE#8jcl5bF?2VSd3O z6y=6DwN>(z@ANN5+fqyXDz;5eOnaB$HFrFqng&8YP!e?luNHBt(6gtEvUocuT}Y)B zQC_t~8oMH|x~?ab+_;~a)wl8{$a#*VV5O45r)SUca`Tf4udnB1&WZi!JRKH`1^rNA zB~Uq=?ZbA#=h|Eo+Ww0l9l?f+m32Bgr3?EgpXF*e1Lye;oi9^z*vQ=5p2_9KM=hEB zSMsO*ZF}>YplUp3v|0py&$T66K;YJeP0F$FZu@r!ABEpXKPB$*5?&r{0xe7>r*?kl zYHC)8QC$rM@;*&J&v@0~<{x1BZK?d%UQr)7XSk{VccZM&gkk)k<7E2A1hlauWv0&H;V^nd0UN5kINAHtI;0K-4e3Ix#s_k$6 zp!aVYx|Xp2*MCh1kG$F8$}-FExL`f=3mmV$4flz2&|aK+COernA{INDREm>yF)%Cz z{8ZvSzO;Lim<{2ml-J7P2B?@N$U?ZJ)-lcRJ{|a-MjpI@CeZhmUAC19Tn&2flMgiU zE{~`b_L_2XSDH)7M+2s(SAM0-2^_irF<9t&vOPz7RVsBYSMffon>BKV7c`wE!WUsO ziw4`v&VzVKdnWIpa`0zW{DN0j4uy?np&#}IFF1SyD$y`Td~f2btjt}Kitk~vm8t+u z@!mikxOlv|RA+be<|=D_*<$qEUE|Vfoj(O`Im?N2HQX1r$IFSlu#i)3T?RyM1HGrsoMLXUaW`2Fuglq37%Ct`x_)g49t~EHguz^2Z$e)UBMMzdDUKv2-g7t?u z6$P-_p|<+2l}76Y%}sezO~TtXV`(RNM&fCz_W=*3SAHb7x+s)wWi5m-T4AXXoctx= z8Cwc(^%m#r0L)9ypbW)C+mwF^aBA;YdfFmQU*>PN9PHi1;SxVThoK4QmGt&CQE zH9dBnB~m84wTe?vR@QM0?L#OEsX%afLk{=OM9Dk+t#sqPRIrg5p(k_~aDDH`Jzq>1YGcn~e_y;| zJ$$A_2Ngp0YY)>oQZL6mlk%r7(tSDN=k`wKhaqKNO|nf0=V7B{6Jk+>{DC>(OAXlU zCMy=kWt`(V_IgeS1p3ds86W)E5rI>=SmDkWqr|XBDhF2Yd4QftJE<=IKbb7=!8$>K zN=i$En^-ozE9b&zJhO(lg;S22lCIgC3$JGcld#th2CY5)-x(y1)J}}z+Zpv;1Mw|t zIGlAt@(7d|s)qY4|) zaLpyi{A`;CH|e@hxcfJ+@ZCxvt{O#^T8Pd2o_EnQ8j9}6)U?_`IMf10r7`)nNf#u~ zorw&$pMsuL7SoUK3m za5{o;dbMk`;E^Mxq_3vIprq$9GhWE`RZEEK9i}e+3opVp)>$S~+fD zxYX&od50higcH7(-F=eB#$s_Pw(whfwL($y!o?75{7FrqX#sy+HastX%gw1tq|)I- zQzCrX>>ymW)3OG#kr?5|5Q{%)+?~do!*-Lin>(@si`~N(p~oAhoUxf)11d7rD*k<%$$+NW zariEA$V6b2GR-^SsyZAUw%K+n-2BXDZHaRxRsr&8b=k3jAj4{02D&_K$DNJO24S40 zd_MmbytzM1(MElC$b;v1J;1lB_}p3?;1Kik%ak}YsU(1eaGV3Den*z|z_7FMc7d|3 z7v2i{-)qrd%RChXNrCB;;`nUab#Ue6EGPY2(XP&U@K(nc{yrUUV4ESf>f?J72q5JX zcG+fHnnYl#=G1O-e4CL5cmsze5jPqPUk6@n5I66Z^>%1`(k4RyHW^Fnak-oJZ|a5B zMB(3q7FDjcr1{!i`79zXr0QSBA#FNU_SU{FR7qZA_!W3IU zX{uryt50Ws#qvq04=mcCDga=*s;$*golN)Bziw@pulpuCU8>HKql3YS0M@~1jipAd zWF{RmbDh=YLDN!vCRU?*YsI;1S7mQeb8h=FsW_`y>N~QMD)!Twt`!iGOwy>|B2(&%ag# zO|#01N3dww1JQU3U8hAMQ^rK}x|5vr-5u8|K9iVE$wt$MVX58btu4F)&iv2w5taih8wxh|+jBZ`P6pY<&dwv{uNoaoheAd}9$%)OF}7NQnW8a$b24}WjEr$;H+PoI zhUs1b#Y`k~qsYjJ@u@54KMQ*Gh0tYYt7m(Dh=lJN1%|v}c)GtlCHMl&;C?fwzL^OR zFyc%~@^35@m^1~-XXsQ900jHF&)C7W=7jIb7}znzT@``?)k>zDqg^1`gpJox?eo*7 z&%-CeznYw*!R(y5YA{Nh#;BAc#8s%pp@b>7gl4|B5SH(>*&k00Xyaz0R-LU>K$&`g zj|}}BegDAZ`b}~R@5^#izZX<=w>#nUV&c z8O`q$6WOhM`YMu-E7(SpO%jID_Ptg1{2MEq03q>ff~{+5P#mJ zOx1`)IhbvpZFQk~;fqGWg=@<$>r%R1)0!6~8)B+7Ov9%{_h+BpD}rJYt*HG;*w7A( z2$?M|(g6EPG}O546RudC#}d&tNtS!VtKmb_I^$32`|=!;XZ2BZ57bHLO|vgq8Nh_n zPROG1Wvx=|^9>5w?%a+PZhj0ygYQRlke?~aJ zZi{6Z zw%)av+U$KZDQX9iphRuY!-fcF8fwe@y%0K+?1wX8O)a1JbK%Smp$L{(u z{uI%%&S%O$zr-v5`s>~4cr2*%S$sB}vT?b&@h@{6RgdBiEbwbXsjk0WzH90D+acLu zV8d>`TV{M9mp%(*bEDlg!JPNY6o{AA9Vp-%UO!vS4c5Gv2?PR@uvm_}k0Bx-QEt6Y zgBnS_xtg?e0zXRL?(!&Q%{{;S;`Fnqr0X#DAIz_{QFH*3mt#_@T6u80{wUbI?B6su zz2k|`1A*b)%eDxq5t`1}5~=v!54<_?b>|#DP2VRPKp7A`Fc-cfYY)~?ukJlv_PzVY zR<&OLcYKMC`C}mKWa9ZG;g$m~8>MIdMUw#qd$T`Dl2w00Plb;8ct*qKEw@`aO*LB9 z_US|i%?HKJ>`UQ4Edh~VL2{pmVCqiuj7@f6BmCRJIb@R1`PuJh1Ckc|_6Pdy(cjvD zz0z6|U$&(+Rgq`71s<3B0M&$0PM6p=Sm!kPxRbiS-Xa>)jVl~G=b^{em;BYZ1X`f; z+0>L%HRA?Y3ekQeHfuQH3mzm38*wdEAT5@H2Lkdo4YvVcj%zbG_SfU%29fDS{w-Qh#_vimm3O zXrkK0eizI~Ad!<&@S&Rsy<}w*I_%`UFMmYmVJ6@r&ulAjQW(fI-U;Oe0`a`|F9hDN zsfh%B2CqGlt+@%L{3p^a0?uRbPGZqJ44~J3(A*YG(3Sh{Wx_~ z45bBv2oCOa@DXvCh^%l4bK}#xx#hth?98%?scpIjlfEwZlk^a2q`>DJsDEvuT$E>X zd(CSQ=j-(H;>g1`ob~M#2nZdUqi*xy)cW@#|5N~GjgFCT3(-igAG>pe>utAH0ug{ez=UH$_ z?$!jJD}6CX@V^iL_RgHaNUlHj~OK1LmO~dzIMU?SuAc7afRvv&BPRVTA z6i%BE@%$HV;Dto4<)@Xdl@G@+b=2NB#o^pR3pY z&oaOmM3s8t;`0q6;c>P}C60(3lb3doZ5~^8qbs@3wtXHvS8JD8n<>Ff?`a-_!BIw9 z25c|j{v-?LA0v8^5=IMLF+Ig;qB)bc!8S-%zhxuVU){~JaGyy4#ri9IVP*YA!85`k zq{d@S%Uc=-V5|)IG6nO3FpGw)bw{oNq%vW2w#kXv?Ih2m9LQcYGuZiXvLqX3g2;kr zN>b9{8mh=%lu)3$T((=}*l;^2be8<}(OwIGA)(1boKxkd?(*si9d+gT2nuD}`Pbh9M zvJXWje0|yWDr|Z%#8*rf{2pynoi3c}>gN)hRRT#fk_fe^{f%=J$7eug&JoxS!=bqo;Tjq}Vs-iOjm@ zE3#jL2ag@zuFT5~nvit_+;%-1K&rVS)4ExG!i3LyOS1^$IP^!Z4Bk&pJEkqH@k+E$ zbMl?d)yqcvh!Rm)9vF0*nj}y)^AE1{z8Lix;sk^4yIvq5KkvM|K6Pcj!h2sJBGdl& zDyxTRG2Jr{o3itIjUQ$q)2&{$p!1q77rpSgKJ;uMZVLTN(Maj4pD}bal(@3Z+DVx6 z48KF6)wIJ+=U5^f-v>*Rb2F>9WC_pD5(Yf}!DWmMc!T<7bQOb5@a_qsHv?LUFwf^OMBJoa)e zR|5cOu6evl=SU+*w0_v`j%5S8;rdwXKf1ob4+5oGA7tUX4TTD1KJm#-p*nQJnX8Yk znC)z2w!%Iise8wNV(or(@FS0o=U!3vgDbOvBlmhfpm!vXDm7&N>78OWb*2HNen4~d z;2#qsgY+QpY6sDKWfs?14t|;3rCKTzkx((a-@|Gr_e@Bc-NtY+1Z`c0?y+{j*oqGr zi7psbewn$_PFkMuZFah!JGF$2Eib!=XZLHQavmA`6T9-E^+aXbnag7M`fQqfRk9Ly z-MBAl8BG5kPnncb#Ill`9o!%(Ua!F{JK3Sr4Ophcljck zK!9Qr)8}py*9J1k9WDSc8kB`>+fgeTV)>O2?oGk2d2*gV_bb)I6_ai$O0HSFnQwtT;@ zjpBQk7FVHI&MSfk0QtlrJXktd`J8O@w>S`@fm-^*(5#7v7V+ahuovn^_O>eMgLDF+ zuRv64XWP0W*hl;!Zf)Z4S%DgQVsH>Vc}I-uBNPaMDMPcD7=)*SNtQO_H4ydK{ygO?{jX@S)rESYU<~fR&W~|ew%kj#+Tuz~CXE~Z`oqUa%ilY)FBkDE8_9ko zjnDvq$jUKBd{PKu)NL6?JrN)LCI*9J*=@gWzQ&<3fiZ4}&-c$NnuD~A!Zrdy-pjwm ztz6gNdsM8W@zJWM9|Uvb8=ev=bUbAr#{&YV?g*v{b8+}|1QS1)GLKgc=MSd+uL)>; zmTPzM1Btq;U<|Cli$1s`+8W4mKZb0a_1U7^j`fCyc7AS=5Vi66*g!Bu~&I|mQ}73 zzwtyi?8~IQCuIv1z`W`9W}*d8h1H-DS)XjW>kFO~#6*KT2xNQAe81?+KBw#}!wTD< zJSliU2OdbfAHyR#N6(@wLrSvaGa!wpdn=lEC-8}sGs`7*w0KU_aY1Sm%=>)MV zzK@3GIqu|VlNHsU`iM%#?67OZ_#29O)2Sd`TIdpPyAff(9PS5p2Z@||?@R2c zfzZluuS>~57iPF+GCu%Z2wDJ@)u2>N%yG^igc+u?#g_e=a34smc4$DuzKw3The?4C z7Vi87kCbo=RpRr3gx9CM9s#nrUhp6KrU)-lr^)jU$vI@~6Yg4#t3R+fFpVtEHqlbn zz_GReqbso`Wc0C@3&x(=L418R56Y2y^ncR;4EaXk(0&a7kQd$jUjU6|&H7;Ftxux( zTE0XEjD}a78f&s@`z#-i=Gpr333bg^68V`XH?4 zkGRL3tuwZJX7S)dLgTi9n+Hu4kyQOEfRm*AV^93wKY-Z6c9-QDcJK`$2m!(d_^@mV zvt+#gp?xTkU(6S+{CUF7)v#!t1ayKlI<{KdF>E*x~; z4j}=xIJFN!sW=5 zd68a!Tq{1=2yWk7IN4$}di`bA*U>ApX)Ba>$@$*V4(ACHl2>)v4ETz*(Y~l$8PN`vflEp*MjRb)!yO{Vy?XW z3bOL-Zgp9e)kic1Z!8}G%*Q*c@d@B;gU{VoB$q)*PMAx5V#v?+IHkQJ&XuB5@Wqw3 z#s@n$Fy%J+@6j3fn9Z7kn+5+n_=N|_CV|fm{);&i&gA!C6<+8~*RbUeSO?vENWu}d zv<-8Q$trlR4ZjItWJ2;`oDn!dQUL!Vi-|~$7Q6Kkh@bmM?|W(rz9LMbY!3@IiYCCJ z2ArBbNWKWu)c;=-_a4vW{=fnJnb|P2Oj+*NMVtzSqa{W&mxEAFLWl6fIuaohX)d{& zYwl*{AW?K8Q%*LQ#yQcVD0I%)T+RPvdGx5PR>-nzPwK0<(TLhah<&~H#K!M$uzzsu3d{ zzzy*+?)YM!;{S#F%=w0$3hOsxFa}okSCjddki_)*F-l)g*G*C7kGED&fr+$EmJOa2 zC+%%|NFZ-G7N+ehQ+2W0F09QkrTaa)Va@Xc?Kkjhai>DEo2poHH#d4}%I=t}YtQ?{ zw;nJzDY3P{?`Hci9ta2#l!!Xc@$D-wy!H3>9It<3_iahB?CEntuH^7XV|w7V8|KMP z+213R6;P}M7yO~+quSvdtFRquwEv8@yllJ1FJwk?wRygINS(%Ky+=l;3xDJw6T^0vs>Fb7$1niSfBH3V!$NcG0J3mdI>9C@Dt8pmmqQ`FzdfXIE5ifvjn` z>1=V7W&|q+C$mecsvWVNpt|r6rbso`-5J725GmX@NP1OWM|JA zGgyA3gEP3&_G*UNuB9EeUp=O|ogVn>U#|$Yw`=QAlBv|alt0d|kRzK3qqmtQl`sFS z>+i$%rAC;PzU#PNl|#rX%zyW_`uP0D^Q9{5kHVU3HP>FmQ$l49EqDGa_hurfnta)R zH|6Pk$m*?_`~;>1&t`caU&g-+OtYrwFaDp{h-tS4Pf+cVIl^Zn+)rxAdrN)qrGnrp z_&T=q+hT>zCJ3yOk$U&{kG}!rQF6d zp>vkkk3PAVB2-nRo!|!-F|B2J=WRx8xSvwb>T^;9`F$Qk=xDnr)Y$vf?y#izU#Dw> z7fAunRwNjj8~Cl}TA?mz_$o1gzs!7CR~L0vu@@ZPKIWwy*|Nty(i`9~>F z8-=GB_L07KcYk|KMrgr(&CbB0AeSYl(me!=SmUZ=(!&ez**Z5|$~i>*B!3x6T|VLE zx%a@_uNNM;?z<&q<#`xJKe|5N2nA*M3Q?>QZ9W; zJ6{(Oc2bFI@#$b%?}^rWt=aSQ`W(bDpGy8a@*7d4F|T_vwAytwpBt6ZGD8ND=-U$c z=fklLg~1489wEE$)CZmYMzU8l)FyXtsw3g?wjTm4x{TL9E#NG(QOV;N`6=pp|GliC zM*fT%?b=0N1*U$n(mTa(^@)#_>O#kI(vVAQT&(EjkJ&*EvUDfwlr0cv&qWb&tbQ~z zH-vWT9>~xOALv=`-7sXdV-)PX+e#2mlL;s#cvon(9SMK(YpH3i*?LGGideG#@6v5X zB>NnY9Z0Ls2@~t|n!&4J&h=-Yqx`#$3VUG7A{=((>JOATTlMA2YlhI#8QkSVjJnWt zTE;+9+=U2y4EtpG9Y~m8`9fO35`hL$aUBI63ctf@(B*r!UyD1Xu*v(=!$0S{R}cyv z`t0~ESREhUCT+~!HofBZY%Ovs=aEykL)Ys<|2E`x)e4xg5ElWX$G?0GVKZwQXa-i9 z!)d0s0kbd^Xo0XqRt1UIA?3l&#g{Le$zE_mXh}{5IE4nvMBEY&a$o}CyHsR(Nu6{W zvh7U@)IKBVl#%Ad90GjAXPk`Qrqd%YsR9~`IKa9vEU7{ELD=C58WO?lU|**Ugn&i^ zL$lIZUXZgGMHoSBMf%Q%L^Q<6ZyZ*n$w$eSB?oHodd2vG{zWb7Ki$KG47IXhn6!ys z|26zNu60mcBo)WUR4CVRtfx%j`BJ`e{cWr9mgCG3J)P-xxc!Y9&ghtpkbfFl1zYqe zwFLTZA0%-8F$l_PVS*l`a}r(Vu;Ar1Tbel`?(oUa{^p-^M)@^hKTRlOi>V7ed z@W4~ncc!Sh9ivm-piHxz4G~FGTwx_Xz~p%22oAg!0hDJ{H26ZKA0Z2Cle{z{US@ z{Z_3Vs4r;pf>lWzfJUB0lJMQjQi(3gA)%r?4KPYsQ!t($M}0~GO;&RRo|ZSQ1}Ded z@yATz^5?Avy`7YE=TXd;z=jdt$fK3NiYx&`jiQOptSA54Yj;4U62qV@)m4R>AMU%{ z@SvBF6I6pDK4;lgxl~xg^}$b3LB6O9?fbro`WGQfNJkOTop1My)S&p}=qogbs@Kz< zbi?;+oP&u9x`vR++?+dEdwix7wGduyPr6*MSZ1%?y`pG(HXW;K2qpUr7>`V)3DU*5 z$>Pt2e3ajy-lA3jAVjQQCuZ=}+N_B9tZ%vVkH0*$CAG=9S%Ib79M`2~(+-N68Qn)P z&temgl99aFcy)hh@2+ ziJ5?eIeO%szculGMXg_99kTZM>9%`3tL1u}aA)dKErqwHZ z3%?uCIJHv=n}zN39X~k!A1U1NYR{= z+B|HSP~?!YE%ic2ZEYQY>|U>fI=@ks(ObD_iW)(pwl6WvB7ps1?SB{?yt-yKnv=c-h^;5ZFpz}lkJpFjSj z1UkOMy09r=pUHK7W93I z$V=Yo*bPHq`&`T&C;Q3hA1V)#0eOkiaY`r$A>t`5Qd ziORT5n@uE4Hp4T6Qa}%kra3BKicRGoVD_08q`DoX?_Ft@V5~W++ygZLbbOOb!vY|N)KZ(~9Qb?GYDGCZ z`w_Fm9`ka@fQj=;36x`)E&V6AJL~Hhht%VWAPVJKDo&I@JcSI?m2u+8&>p(rC>PoB zY!$v4KL#U^+d1-O;+ewWNie$dOv%gYYP1e#knL!ZCUGJOOSGPhj;ky8XZ}MAJVG(| zU?WGuRvo{bP2Zh~QiKZBB7Rypk#*Sv-D`rj`ijBfeb*7v{uJ6Xdy(Bsdn{Lip!DDrQvdtL)(qJ}<1JZ|vcg&}k6 z%;HGb0NB!851N@Apo^pEqP1hlDy z994xzR+A&1*m?-?9f}IAI=XiFWXKuvHwt#}?hag|7c;1&(y0opKgiL}m2}_MKly*3 CvK+(! literal 0 HcmV?d00001 diff --git a/web/src/assets/images/webhookdb-logo.svg b/web/src/assets/images/webhookdb-logo.svg new file mode 100644 index 00000000..f60473e6 --- /dev/null +++ b/web/src/assets/images/webhookdb-logo.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + diff --git a/web/src/components/ButtonLink.jsx b/web/src/components/ButtonLink.jsx new file mode 100644 index 00000000..5ea491fb --- /dev/null +++ b/web/src/components/ButtonLink.jsx @@ -0,0 +1,5 @@ +import {Button} from "@mantine/core"; + +export default function ButtonLink(props) { + return + + )} + + ); +} diff --git a/web/src/components/ErrorComponent.jsx b/web/src/components/ErrorComponent.jsx new file mode 100644 index 00000000..b74df595 --- /dev/null +++ b/web/src/components/ErrorComponent.jsx @@ -0,0 +1,15 @@ +import Stack from "./uikit/Stack.jsx"; + +/** + * Show this when some subcomponent fails to load. + * Can be used for a chart on a page, for example. + */ +export default function ErrorComponent(props) { + return ( + +

+ Sorry, something went wrong. You can try reloading the page. +

+
+ ); +} diff --git a/web/src/components/ErrorScreen.jsx b/web/src/components/ErrorScreen.jsx index f71e7241..78686c6c 100644 --- a/web/src/components/ErrorScreen.jsx +++ b/web/src/components/ErrorScreen.jsx @@ -1,9 +1,10 @@ -import useMountEffect from "../state/useMountEffect.jsx"; -import isUndefined from "lodash/isUndefined"; import get from "lodash/get"; +import isUndefined from "lodash/isUndefined"; import { useNavigate } from "react-router-dom"; -import {Button, Stack} from "@mantine/core"; -import ButtonLink from "./ButtonLink"; + +import useMountEffect from "../state/useMountEffect.jsx"; +import Button from "./uikit/Button.jsx"; +import Stack from "./uikit/Stack.jsx"; /** * Show this component when an unhandled error has occurred. @@ -25,14 +26,14 @@ export default function ErrorScreen({ error, redirect403 }) { }); return ( - +

Whoops!

-

+

Sorry, something went wrong. You can reload the page or start over.

- +
); } diff --git a/web/src/components/Footer.jsx b/web/src/components/Footer.jsx new file mode 100644 index 00000000..967dda7a --- /dev/null +++ b/web/src/components/Footer.jsx @@ -0,0 +1,18 @@ +import clsx from "clsx"; + +import SafeExternalLink from "./SafeExternalLink.jsx"; + +export default function Footer({ className }) { + return ( +
+

+ Contact Us +

+

+ + © {new Date().getFullYear()} Lithic Technology + +

+
+ ); +} diff --git a/web/src/components/Layout.css b/web/src/components/Layout.css new file mode 100644 index 00000000..636506b8 --- /dev/null +++ b/web/src/components/Layout.css @@ -0,0 +1,41 @@ +.layout-root { + display: flex; + flex-direction: column; +} + +.layout-subroot { + /* min-height: 100vh; */ +} + +.layout-content { + min-height: 100vh; +} + +.layout-base { + /* Ignored */ +} + +.layout-subroot-center-form { + background-color: var(--color-light-grey); + padding-left: var(--spacing-3); + padding-right: var(--spacing-3); + align-items: center; + display: flex; + flex-direction: column; +} + +.layout-center-form { + margin-top: var(--spacing-4); + max-width: 600px; + display: flex; + flex-direction: column; +} + +.layout-subroot-sidebar { + background-color: var(--color-light-grey); +} + +.layout-sidebar { + display: flex; + flex-direction: row; +} \ No newline at end of file diff --git a/web/src/components/Layout.jsx b/web/src/components/Layout.jsx new file mode 100644 index 00000000..1fed615a --- /dev/null +++ b/web/src/components/Layout.jsx @@ -0,0 +1,30 @@ +import clsx from "clsx"; + +import "./Layout.css"; +import ScrollTopOnMount from "./ScrollToTopOnMount"; +import TopNav from "./TopNav.jsx"; + +/** + * Choose the layout associated with the page. + * Note that this puts the content into an outer div which + * gives the given background color to the entire page. + * + * @param children + * @param {('sidebar'|'center-form'|'base')=} variant Name of the layout-* class to style the content root with. + * @param {boolean=} noNav Hide top nav. + * @param {boolean=} noScrollTop By default, scroll to top when the page mounts. + * @param {string} className + */ +export default function Layout({ variant, noNav, noScrollTop, className, children }) { + variant = variant || "base"; + return ( +
+ {!noScrollTop && } + {!noNav && } +
+
{children}
+ {/*
*/} +
+
+ ); +} diff --git a/web/src/components/Number.jsx b/web/src/components/Number.jsx new file mode 100644 index 00000000..1bbdef31 --- /dev/null +++ b/web/src/components/Number.jsx @@ -0,0 +1,11 @@ +export default function Number({ children, format }) { + const fmt = formats[format] || formats.number; + const m = fmt.format(children); + return {m}; +} + +const number = (o) => new Intl.NumberFormat("en-US", o); + +const formats = { + number: number(), +}; diff --git a/web/src/components/SafeExternalLink.jsx b/web/src/components/SafeExternalLink.jsx new file mode 100644 index 00000000..007150bd --- /dev/null +++ b/web/src/components/SafeExternalLink.jsx @@ -0,0 +1,12 @@ +export default function SafeExternalLink({ href, className, children, ...rest }) { + const safe = href && safeHosts.some((h) => href.startsWith(h)); + const rel = safe ? "noopener" : "noreferrer"; + return ( + // eslint-disable-next-line react/jsx-no-target-blank +
+ {children} + + ); +} + +const safeHosts = ["https://webhookdb.com", "https://lithic.tech"]; diff --git a/web/src/components/ScreenLoader.jsx b/web/src/components/ScreenLoader.jsx index 65f5b4aa..eabb2d1e 100644 --- a/web/src/components/ScreenLoader.jsx +++ b/web/src/components/ScreenLoader.jsx @@ -1,8 +1,9 @@ -import "./ScreenLoader.css"; import clsx from "clsx"; -import loader from "../assets/images/loader.svg"; import isUndefined from "lodash/isUndefined"; +import loader from "../assets/images/loader.svg"; +import "./ScreenLoader.css"; + /** * Render the screen loader overlay. * For async work, use the `useScreenLoader` hook. @@ -21,9 +22,7 @@ export default function ScreenLoader({ show, scrim, height }) { if (!scrim && !show) { return null; } - const img = ( - loading - ); + const img = loading; if (!scrim) { return img; } diff --git a/web/src/components/ScrollToTopOnMount.jsx b/web/src/components/ScrollToTopOnMount.jsx new file mode 100644 index 00000000..f284c838 --- /dev/null +++ b/web/src/components/ScrollToTopOnMount.jsx @@ -0,0 +1,11 @@ +import React from "react"; + +export default function ScrollTopOnMount({ top }) { + React.useEffect(() => { + // Not sure when or why this broke, but it seems like we need + // to defer this call. This is just introducing a race condition, + // so doesn't entirely fix the bug, but it's good enough to try for now. + window.setTimeout(() => window.scrollTo(0, top || 0), 0); + }, [top]); + return null; +} diff --git a/web/src/components/TopNav.css b/web/src/components/TopNav.css new file mode 100644 index 00000000..9000f312 --- /dev/null +++ b/web/src/components/TopNav.css @@ -0,0 +1,124 @@ +.top-nav-root { + padding: 16px 24px; + display: flex; + flex-direction: row; + align-items: center; + background-color: var(--color-background); + box-shadow: 0 4px 24px 0 rgb(156 154 180 / 20%); + z-index: 10; +} + +.top-nav-logo { + height: 48px; + width: 48px; + margin-right: var(--spacing-5); +} + +.top-nav-textlink { + border-radius: var(--border-radius); + color: var(--color-foreground); + padding: var(--spacing); + text-decoration: none; + + &.active { + background-color: var(--color-blue-light); + } + + &:hover { + background-color: var(--color-secondary); + } + + &:visited { + color: var(--color-foreground); + text-decoration: none; + } +} + +.top-nav-icongroup { + display: flex; + flex-direction: row; + align-items: center; + gap: var(--spacing-3); + margin-left: auto; +} + +.top-nav-iconlink-root { + padding-left: var(--spacing); + padding-right: var(--spacing); +} + +.top-nav-iconlink { + color: var(--color-grey); + background-color: transparent; + text-decoration: none; + width: 24px; + height: 24px; + font-size: 24px !important; + + &:hover { + color: var(--color-foreground) !important; + } + + &.active { + color: var(--color-blue) !important; + } + + &:focus { + outline: none; + border: var(--nofocus-border); + box-shadow: none; + } + + &:visited { + color: var(--color-grey); + text-decoration: none; + } +} + +.top-nav-orgswitch { + color: var(--color-grey) !important; + + &::before { + content: "\2022"; + font-size: 20px; + margin-right: var(--spacing-2); + } + + &.active::before { + color: var(--color-green); + } + + &.active { + color: var(--color-foreground) !important; + } +} + +.top-nav-sep { + width: 2px; + height: 40px; + background-color: var(--color-light-grey); + margin-left: var(--spacing-4); + margin-right: var(--spacing-4); +} + +.top-nav-avatar-root { + display: flex; + flex-direction: row; + cursor: pointer; + height: unset !important; + background-color: var(--color-background); + border-radius: var(--border-radius); + padding: var(--spacing) !important; + margin: calc(-1 * var(--spacing)) !important; + + &:hover, + &.focused { + filter: brightness(90%); + } + + &:focus { + outline: none; + border: var(--nofocus-border); + box-shadow: none; + } +} diff --git a/web/src/components/TopNav.jsx b/web/src/components/TopNav.jsx new file mode 100644 index 00000000..eb8d2a51 --- /dev/null +++ b/web/src/components/TopNav.jsx @@ -0,0 +1,190 @@ +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import clsx from "clsx"; +import find from "lodash/find"; +import isEmpty from "lodash/isEmpty"; +import { useLocation } from "react-router-dom"; + +import api from "../api"; +import logo from "../assets/images/webhookdb-logo-512.png"; +import signOut from "../modules/signOut"; +import useErrorToast from "../state/useErrorToast.jsx"; +import useGlobalViewState from "../state/useGlobalViewState"; +import useRoleAccess from "../state/useRoleAccess.jsx"; +import useScreenLoader from "../state/useScreenLoader.jsx"; +import useUser from "../state/useUser.jsx"; +import "./TopNav.css"; +import { faArrowRight, faBell, faGear, faUserGroup } from "./icons.jsx"; +import Button from "./uikit/Button.jsx"; +import Dropdown, { + DropdownHeading, + DropdownItem, + DropdownSeperator, +} from "./uikit/Dropdown.jsx"; +import Stack from "./uikit/Stack.jsx"; +import { RelLink } from "./uikit/links.jsx"; + +export default function TopNav({ forceReadAll }) { + const { showErrorToast } = useErrorToast(); + const { setTopNav } = useGlobalViewState(); + const screenLoader = useScreenLoader(); + const { user, setUser } = useUser(); + const { canRead } = useRoleAccess({ forceReadAll }); + + function handleAvatarSelection(actionKey) { + if (actionKey === "logout") { + signOut().catch(showErrorToast); + } else if (actionKey === null) { + // We get this when selecting URLs, don't do anything. + } else { + console.error("unknown actionKey:", actionKey); + } + } + function handleSwitchOrg(orgKey) { + const org = find(user.availableOrganizations, (o) => o.id === orgKey); + if (org.active) { + return; + } + screenLoader.turnOn(); + api + .updateActiveOrganization({ organizationId: org.id }) + .then((r) => setUser(r.data)) + .catch(showErrorToast) + .finally(screenLoader.turnOff); + } + + return ( +
+
+ + WebhookDB Logo + +
+ + Dashboard + {canRead("contractmanager") && ( + Contract Manager + )} + +
+ + {forceReadAll && } + {!isEmpty(user.availableOrganizations) && ( + ( + setOpen(true)} + /> + )} + > + Switch Organization + {user.availableOrganizations?.map(({ id, name, active }) => ( + + {name} + + ))} + + )} +
+
+ ( + + )} + > + {(forceReadAll || user.invitedOrganizations.length > 0) && ( + <> + + View Invitations + + + + )} + Logout + {user.adminUrl && ( + + WebhookDB Admin + + )} + +
+ ); +} + +function NavTextLink({ to, children }) { + return ( + + {children} + + ); +} + +function NavIconButton({ className, icon, onClick }) { + return ( +
+ +
+ ); +} + +function NavIconLink({ to, icon, className }) { + return ( + + + + ); +} + +function NavLink({ to, className, children }) { + const location = useLocation(); + const isAtHref = location.pathname.startsWith(to); + function handleClick(e) { + if (isAtHref) { + e.preventDefault(); + } + } + return ( + + {children} + + ); +} diff --git a/web/src/components/icons.jsx b/web/src/components/icons.jsx index 693da49f..c355b72a 100644 --- a/web/src/components/icons.jsx +++ b/web/src/components/icons.jsx @@ -1 +1,13 @@ -export {} \ No newline at end of file +export { + faInfoCircle, + faThumbsUp, + faExclamationTriangle, + faQuestionCircle, + faChevronLeft, + faChevronRight, + faXmark, + faGear, + faBell, + faUserGroup, + faArrowRight, +} from "@fortawesome/free-solid-svg-icons"; diff --git a/web/src/components/uikit/Alert.css b/web/src/components/uikit/Alert.css new file mode 100644 index 00000000..6fc8074a --- /dev/null +++ b/web/src/components/uikit/Alert.css @@ -0,0 +1,83 @@ +.alert { + display: flex; + border-radius: 20px; + flex-direction: row; + justify-content: space-between; + padding: var(--spacing-3); + align-items: center; + + &.primary { + background-color: var(--color-blurple); + color: var(--color-background); + } + + &.success { + background-color: var(--color-green-light); + color: var(--color-foreground); + } + + &.info { + background-color: rgb(0 0 0 / 5%); + color: var(--color-foreground); + padding-top: var(--spacing-2); + padding-bottom: var(--spacing-2); + } + + &.warning { + background-color: var(--color-orange-light); + color: var(--color-foreground); + } + + &.error { + background-color: var(--color-red-light); + color: var(--color-foreground); + } +} + +.alert-icon { + height: 32px; + width: 32px; + margin-right: var(--spacing-2p5); + + &.primary { + color: var(--color-blue); + } + + &.success { + color: var(--color-green); + } + + &.info { + color: var(--color-blurple); + } + + &.warning { + color: var(--color-orange); + } + + &.error { + color: var(--color-red); + } +} + +.alert-dismiss { + &.primary { + color: var(--color-background); + } + + &.success { + color: var(--color-foreground); + } + + &.info { + color: var(--color-blurple); + } + + &.warning { + color: var(--color-foreground); + } + + &.error { + color: var(--color-foreground); + } +} diff --git a/web/src/components/uikit/Alert.jsx b/web/src/components/uikit/Alert.jsx new file mode 100644 index 00000000..ce5c092f --- /dev/null +++ b/web/src/components/uikit/Alert.jsx @@ -0,0 +1,98 @@ +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import clsx from "clsx"; +import { AnimatePresence } from "framer-motion"; +import isUndefined from "lodash/isUndefined"; +import React from "react"; + +import { faExclamationTriangle, faXmark } from "../icons.jsx"; +import "./Alert.css"; +import Button from "./Button.jsx"; +import ShrinkingDiv from "./animate/ShrinkingDiv.jsx"; +import { variantIcon } from "./theming.js"; + +/** + * @param children + * @param {string=} className + * @param {string=} title Top text. + * @param {string=} subtitle Text under the title. + * @param {*=} icon Icon to show. If undefined, use the variant default. + * @param {string|true=} primary Primary action label. Hide if empty. 'Confirm' if true. + * @param {string|true=}secondary Secondary action label. Hide if empty. 'Deny' if true. + * @param {boolean=} dismissable If true, alert can be dismissed. + * @param {boolean=} show If given, use this value. If undefined, show the alert. + * @param {('success'|'warning'|'error'|'primary')=} variant + * @param onDismiss + * @param onPrimary + * @param onSecondary + */ +export default function Alert({ + children, + className, + title, + subtitle, + icon, + primary, + secondary, + dismissable, + show, + variant, + onDismiss, + onPrimary, + onSecondary, +}) { + variant = variant || "primary"; + if (isUndefined(icon)) { + icon = variantIcon(variant); + } else if (icon === true) { + icon = faExclamationTriangle; + } + + show = isUndefined(show) ? true : show; + const [innerShow, setInnerShow] = React.useState(show); + primary = primary === true ? "Confirm" : primary; + secondary = secondary === true ? "Deny" : secondary; + subtitle = subtitle || children; + + function handleDismiss(e) { + setInnerShow(false); + onDismiss && onDismiss(e); + } + return ( + + {innerShow && ( + +
+ {icon && ( + + )} +
+ {title &&

{title}

} + {subtitle &&

{subtitle}

} +
+
+
+ {primary && ( + + )} + {secondary && ( + + )} + {dismissable && ( + + )} +
+
+ )} +
+ ); +} diff --git a/web/src/components/uikit/Button.css b/web/src/components/uikit/Button.css new file mode 100644 index 00000000..7e854899 --- /dev/null +++ b/web/src/components/uikit/Button.css @@ -0,0 +1,211 @@ +.btn { + align-items: center; + border: var(--nofocus-border); + border-radius: var(--border-radius); + cursor: pointer; + display: inline-flex; + gap: 12px; + justify-content: center; + box-sizing: border-box; + outline: none; + box-shadow: none; + text-decoration: none; + + &:disabled, &[aria-disabled] { + cursor: default; + } +} + +.btn-link { + /* Ignored */ +} + +.btn:focus { + border: var(--focus-border); + box-shadow: var(--focus-box-shadow); +} + +.btn-primary { + color: var(--color-background); + background-color: var(--color-blurple); + + &:disabled, &[aria-disabled] { + filter: brightness(300%) grayscale(70%); + } + + &:hover:enabled, + &.btn-link:not([aria-disabled]):hover, + &.focused { + background-color: var(--color-blurple-hover); + } +} + +.btn-secondary { + background-color: var(--color-light-grey); + color: var(--color-blurple); + + &:disabled, &[aria-disabled] { + filter: contrast(15%) brightness(170%); + } + + &:hover:enabled, + &.btn-link:not([aria-disabled]):hover, + &.focused { + filter: brightness(90%); + } +} + +.btn-hollow { + color: var(--color-blurple); + background-color: transparent; + border: 2px solid var(--color-light-grey); + + &:disabled, &[aria-disabled] { + filter: opacity(40%); + } + + &:hover:enabled, + &.btn-link:not([aria-disabled]):hover, + &.focused { + background-color: rgb(0 0 0 / 8%); + filter: brightness(90%); + } +} + +.btn-free { + color: var(--color-blurple); + background-color: transparent; + + &:disabled, &[aria-disabled] { + filter: opacity(30%); + } + + &:hover:enabled, + &.btn-link:not([aria-disabled]):hover, + &.focused { + filter: brightness(90%); + background-color: rgb(0 0 0 / 8%); + } +} + +.btn-hollow-inverted { + background-color: transparent; + border: 1px solid var(--color-background); + color: var(--color-background); + + &:disabled, &[aria-disabled] { + filter: opacity(50%); + } + + &:hover:enabled, + &.btn-link:not([aria-disabled]):hover, + &.focused { + filter: brightness(110%); + background-color: rgb(255 255 255 / 15%); + } +} + +.btn-free-inverted { + background-color: transparent; + color: var(--color-background); + + &:disabled, &[aria-disabled] { + filter: opacity(50%); + } + + &:hover:enabled, + &.btn-link:not([aria-disabled]):hover, + &.focused { + filter: brightness(110%); + background-color: rgb(255 255 255 / 15%); + } +} + +.btn-light { + background-color: var(--color-background); + color: var(--color-foreground); + + &:disabled, &[aria-disabled] { + filter: brightness(200%) contrast(90%) opacity(80%); + } + + &:hover:enabled, + &.btn-link:not([aria-disabled]):hover, + &.focused { + filter: brightness(90%); + } +} + +.btn-danger { + background-color: var(--color-red-light); + color: var(--color-red); + + &:disabled, &[aria-disabled] { + filter: brightness(110%) grayscale(80%); + } + + &:hover:enabled, + &.btn-link:not([aria-disabled]):hover, + &.focused { + color: var(--color-background); + background-color: var(--color-red); + } +} + +.btn-arrow-info { + color: var(--color-blue); +} + +.btn-info { + background-color: var(--color-blue-light); + color: var(--color-foreground); + + &:disabled, &[aria-disabled] { + filter: brightness(110%) grayscale(80%); + } + + &.focused, + &:hover:enabled, + &.btn-link:not([aria-disabled]):hover + { + filter: brightness(105%) saturate(200%); + color: var(--color-blurple) !important; + + > .btn-arrow-info { + color: var(--color-blurple); + } + } +} + + +.btn-huge { + height: 64px; + min-width: 64px; + font-size: 28px; + border-radius: var(--border-radius-2x); +} + +.btn-lg { + height: 48px; + padding: 14px 16px; +} + +.btn-md { + height: 38px; + padding: 9px 12px; +} + +.btn-sm { + height: 32px; + padding: 6px 12px; +} + +.btn-arrow { + width: 20px; + height: 20px; +} + +.btn-arrow-primary, +.btn-arrow-hollow { + color: var(--color-blue); +} diff --git a/web/src/components/uikit/Button.jsx b/web/src/components/uikit/Button.jsx new file mode 100644 index 00000000..c5445b27 --- /dev/null +++ b/web/src/components/uikit/Button.jsx @@ -0,0 +1,82 @@ +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import clsx from "clsx"; +import { Button as RAButton } from "react-aria-components"; + +import { faChevronLeft, faChevronRight } from "../icons.jsx"; +import "./Button.css"; +import { FlexiLink } from "./links.jsx"; + +/** + * @param {string=} className + * @param {boolean=} disabled + * @param {Size=} size + * @param {('primary'|'secondary'|'hollow'|'free'|'link'|'hollow-inverted'|'free-inverted'|'light'|'danger'|'info')} variant + * @param {boolean|Icon=} leftArrow If true, show the 'left' chevron, if an icon definition use that. + * @param {boolean|Icon=} rightArrow Same as leftArrow but for the right. + * @param {boolean=} href Use an 'a' instead of a button. + * @param children + * @param rest + */ +export default function Button({ + className, + disabled, + size, + variant, + leftArrow, + rightArrow, + href, + children, + ...rest +}) { + variant = variant || "primary"; + const cls = clsx( + "btn", + href && "btn-link", + `btn-${size || "md"}`, + `btn-${variant}`, + className, + ); + + const arrowcls = clsx(`btn-arrow`, !disabled && `btn-arrow-${variant}`); + + let C; + const typeProps = {}; + if (href) { + C = FlexiLink; + typeProps.href = href; + if (disabled) { + typeProps["aria-disabled"] = true; + typeProps.onClick = (e) => e.preventDefault(); + } + } else { + C = RAButton; + if (disabled) { + typeProps.isDisabled = true; + } + } + + return ( + + {leftArrow && ( + + )} + {children} + {rightArrow && ( + + )} + + ); +} + +function chooseIcon(val, fallback) { + if (val?.icon) { + return val; + } + return fallback; +} diff --git a/web/src/components/uikit/Card.css b/web/src/components/uikit/Card.css new file mode 100644 index 00000000..ac926d35 --- /dev/null +++ b/web/src/components/uikit/Card.css @@ -0,0 +1,20 @@ +.card { + background-color: var(--color-background); + border-radius: var(--border-radius); +} + +.card-body { + padding: var(--spacing-3); + display: flex; + flex-direction: column; +} + +.card-v-transparent-white { + background-color: transparent; + border: 2px solid var(--color-background); +} + +.card-v-dashed { + background-color: transparent; + border: 2px dashed var(--color-grey); +} \ No newline at end of file diff --git a/web/src/components/uikit/Card.jsx b/web/src/components/uikit/Card.jsx new file mode 100644 index 00000000..05994211 --- /dev/null +++ b/web/src/components/uikit/Card.jsx @@ -0,0 +1,35 @@ +import clsx from "clsx"; + +import "./Card.css"; + +export default function Card({ className, variant, children, ...rest }) { + return ( +
+ {children} +
+ ); +} + +export function CardBody({ className, children, ...rest }) { + return ( +
+ {children} +
+ ); +} + +export function CardTitle({ className, children, ...rest }) { + return ( +
+ {children} +
+ ); +} + +export function CardText({ className, children, ...rest }) { + return ( +

+ {children} +

+ ); +} diff --git a/web/src/components/uikit/Dropdown.css b/web/src/components/uikit/Dropdown.css new file mode 100644 index 00000000..4cacb16e --- /dev/null +++ b/web/src/components/uikit/Dropdown.css @@ -0,0 +1,88 @@ +.dropdown-button { + --bgcolor: var(--color-light-grey); + + white-space: nowrap; + overflow: hidden; + display: flex; + flex-direction: row; + justify-content: flex-start; + position: relative; + + .dropdown-arrow { + position: absolute; + right: var(--spacing-3); + } + + .dropdown-arrow-scrim { + position: absolute; + right: 16px; + background-color: var(--bgcolor); + width: 10px; + height: 10px; + box-shadow: 0 0 1px 2px var(--bgcolor); + border-radius: 50%; + } + + .dropdown-edge-scrim { + position: absolute; + background-color: var(--bgcolor); + width: 4px; + right: 0; + height: 100%; + } +} + +.dropdown-popover { + /* noinspection CssUnresolvedCustomProperty */ + min-width: var(--trigger-width); + border: var(--nofocus-border); +} + +.dropdown-icon { + vertical-align: middle; + margin-bottom: 3px; +} + +.dropdown-listbox { + border-radius: 12px; + background: var(--color-background); + box-shadow: 0 4px 32px 0 rgb(55 61 113 / 20%); + padding: 4px; + border: var(--nofocus-border); + outline: none; +} + +.dropdown-item { + padding: var(--spacing-2p5); + color: var(--color-foreground); + font-weight: var(--fw-regular); + font-size: 14px; + line-height: 18px; + border-radius: var(--border-radius); + text-decoration: none; + display: block; + cursor: pointer; +} + +.dropdown-item[data-focused], +.dropdown-item:hover { + outline: none; + background-color: var(--color-light-grey); +} + +.dropdown-header { + padding: var(--spacing-2p5); + color: var(--color-foreground); + font-weight: var(--fw-medium); + font-size: 16px; + line-height: 16px; +} + +.dropdown-seperator { + outline: none; + border: none; + height: 3px; + background-color: var(--color-light-grey); + margin-left: var(--spacing); + margin-right: var(--spacing); +} diff --git a/web/src/components/uikit/Dropdown.jsx b/web/src/components/uikit/Dropdown.jsx new file mode 100644 index 00000000..ad7aff63 --- /dev/null +++ b/web/src/components/uikit/Dropdown.jsx @@ -0,0 +1,146 @@ +import clsx from "clsx"; +import React from "react"; +import { + Header, + ListBox, + ListBoxItem, + Popover, + Button as RAButton, + Section, + Select, + SelectValue, +} from "react-aria-components"; + +import dropdownSrc from "../../assets/images/dropdown.svg"; +import useFlexiHref from "../../state/useFlexHref.js"; +import "./Dropdown.css"; + +/** + * @param {string} className + * @param {Array} items + * @param children + * @param {object=} buttonProps Passed to the react-aria-components button select widget. + * @param {function=} renderButton Override the default button. Called with {isOpen, setOpen} + * @param {function=} renderSelectValue Render the button text. + * Called with {selectedItem, selectText, isPlaceholder}, + * as per https://react-spectrum.adobe.com/react-aria/Select.html#selectvalue-1 + * @param {('white'|'grey')} variant + * @param {string} value selectedKey + * @param rest Passed to the react-aria-components Select input. + */ +export default function Dropdown({ + className, + items, + children, + renderButton, + buttonProps, + variant, + value, + renderSelectValue, + ...rest +}) { + let [isOpen, setOpen] = React.useState(false); + let button; + if (renderButton) { + button = renderButton({ isOpen, setOpen }); + } else { + const { bgcolorVar, bgclass } = variants[variant] || variants.grey; + button = ( + + {renderSelectValue || null} +
 
+ +
 
+
+ ); + } + items = items || []; + return ( + + ); +} + +const variants = { + white: { bgcolorVar: "--color-background", bgclass: "bg-background" }, + grey: { bgcolorVar: "--color-light-grey", bgclass: "bg-light-grey" }, +}; + +export function DropdownPopover({ className, ...rest }) { + return ; +} + +export function DropdownListBox({ className, ...rest }) { + return ; +} + +/** + * @typedef DropdownItemProps + * @property {string} value + * @property {string=} label + * @property {*=} children + * @property {string=} className + */ + +export function DropdownItem({ value, label, href, children, className, ...rest }) { + children = children || label; + const flexiref = useFlexiHref(href); + const fixedHref = flexiref.isActuallyRelative ? flexiref.basenameHref : href; + return ( + + {children} + + ); +} + +export function DropdownHeading({ children }) { + return ( +
+
{children}
+
+ ); +} + +export function DropdownSeperator() { + return ( +
+
+
+
+
+ ); +} diff --git a/web/src/components/uikit/Form.css b/web/src/components/uikit/Form.css new file mode 100644 index 00000000..eec8686f --- /dev/null +++ b/web/src/components/uikit/Form.css @@ -0,0 +1,14 @@ +.form { + display: flex; + flex-direction: column; + align-items: flex-start; + border-radius: var(--border-radius); + + &.color-mode-default { + background-color: var(--color-light-grey); + } + + &.color-mode-inverted { + background-color: var(--color-background); + } +} diff --git a/web/src/components/uikit/Form.jsx b/web/src/components/uikit/Form.jsx new file mode 100644 index 00000000..f09deaed --- /dev/null +++ b/web/src/components/uikit/Form.jsx @@ -0,0 +1,21 @@ +import clsx from "clsx"; + +import "./Form.css"; + +export default function Form({ className, colorMode, gap, children, ...rest }) { + const cls = clsx( + "form", + `color-mode-${colorMode || "default"}`, + gap && `gap-${gap}`, + className, + ); + return ( +
+ {children} +
+ ); +} + +/** + * @typedef {('default'|'inverted')} FormColorMode + */ diff --git a/web/src/components/uikit/FormButtons.jsx b/web/src/components/uikit/FormButtons.jsx new file mode 100644 index 00000000..79e14f18 --- /dev/null +++ b/web/src/components/uikit/FormButtons.jsx @@ -0,0 +1,48 @@ +import clsx from "clsx"; + +import Alert from "./Alert.jsx"; +import Button from "./Button.jsx"; + +export default function FormButtons({ + submit, + infoMessage, + successMessage, + errorMessage, + disabled, + submitProps, + wide, + left, + noMargin, + onSubmit, +}) { + return ( +
+ {infoMessage && ( + + {infoMessage} + + )} + {successMessage && ( + + {successMessage} + + )} + {errorMessage && ( + + {errorMessage} + + )} +
+ +
+
+ ); +} diff --git a/web/src/components/uikit/Hr.css b/web/src/components/uikit/Hr.css new file mode 100644 index 00000000..1ddc58a8 --- /dev/null +++ b/web/src/components/uikit/Hr.css @@ -0,0 +1,8 @@ +.hr { + margin: 0; + width: 100%; + color: var(--color-grey); + opacity: 0.25; + border-radius: 1px; + border: 1px solid var(--color-grey);; +} diff --git a/web/src/components/uikit/Hr.jsx b/web/src/components/uikit/Hr.jsx new file mode 100644 index 00000000..ca28a682 --- /dev/null +++ b/web/src/components/uikit/Hr.jsx @@ -0,0 +1,19 @@ +import clsx from "clsx"; + +import { ifEqElse } from "../../modules/fp.js"; +import "./Hr.css"; + +export default function Hr({ className, mt, mb, my, ...rest }) { + return ( +
+ ); +} diff --git a/web/src/components/uikit/InputField.css b/web/src/components/uikit/InputField.css new file mode 100644 index 00000000..d42d6cfe --- /dev/null +++ b/web/src/components/uikit/InputField.css @@ -0,0 +1,89 @@ +.input-field { + display: flex; + flex-direction: column; + + &.disabled { + filter: opacity(50%); + } + + &.readonly { + filter: opacity(80%); + } +} + +.input-field-input { + border-radius: var(--border-radius); + background: var(--color-background); + border: var(--nofocus-border); + color: var(--color-blurple); + font-size: 12px; + font-weight: var(--fw-regular); + line-height: 16px; + padding: 10px; + + &.readonly { + filter: opacity(60%); + } + + &.success { + border: var(--focus-border); + border-color: var(--color-green); + } + + &.error { + border: var(--focus-border); + border-color: var(--color-red); + } + + &:focus { + border: var(--focus-border); + outline-style: none; + box-shadow: none; + } +} + +.color-mode-inverted .input-field-input { + background-color: var(--color-light-grey); +} + +.input-field-tooltip { + display: inline; + background-color: transparent; + border: none; + color: var(--color-blurple); + padding: 0; + margin: 0; + margin-left: var(--spacing-2); +} + +.tooltip a { + color: unset; +} + +.input-field-extra { + font-weight: var(--fw-regular); + font-size: 12px; + line-height: 16px; + color: var(--color-grey); + margin-right: var(--border-radius-half); + + &.success { + color: var(--color-green); + } + + &.error { + color: var(--color-red); + } +} + +.input-field-modal-trigger { + height: unset; + padding: 0 var(--spacing-2); + + &:hover:enabled, + &.btn-link:not([aria-disabled]):hover, + &.focused { + filter: brightness(50%); + background-color: transparent; + } +} diff --git a/web/src/components/uikit/InputField.jsx b/web/src/components/uikit/InputField.jsx new file mode 100644 index 00000000..42f3930f --- /dev/null +++ b/web/src/components/uikit/InputField.jsx @@ -0,0 +1,97 @@ +import clsx from "clsx"; +import { DialogTrigger } from "react-aria-components"; + +import Button from "./Button.jsx"; +import "./InputField.css"; +import InputFieldLabel from "./InputFieldLabel.jsx"; +import InformationModal from "./modals/InformationModal.jsx"; +import useUniqueId from "./useUniqueId.js"; + +/** + * @typedef InputFieldProps + * @param {string=} className + * @param {boolean=} disabled + * @param {string=} extra Helper text (helper, validation, or success message, usually). + * @param {('success'|'error')=} feedback Style for extra text. + * @param {string=} inputClassName Same as (and added to) inputProps.className. + * @param {object=} inputProps Passed through to the inner input. + * @param {string} label + * @param {boolean=} marginTop If true, add a top margin. Useful when stacking inputs. + * @param {boolean=} wide If true, add w-100 to the input. + * @param {boolean=} readOnly + * @param {JSX|string=} tooltip If given, show the tooltip hover with this content. + * @param {JSX|string=} infoModal If given, add 'What is this' helper text + * which pops up an information modal with the given contents. + * @param {function} renderInput Called with props to pass in the input. + * @param {object=} rest Passed to renderInput/the input. + */ + +/** + * @param {InputFieldProps} props + */ +export default function InputField(props) { + const { + className, + disabled, + extra, + feedback, + inputClassName, + inputProps, + label, + marginTop, + readOnly, + tooltip, + infoModal, + wide, + renderInput, + ...rest + } = props; + const feedbackCls = feedback; + const inputCls = clsx( + inputClassName, + feedbackCls, + readOnly && "readonly", + inputProps?.className, + ); + const uid = useUniqueId(); + return ( +
+
+ + {extra &&

{extra}

} + {infoModal && ( + + + {infoModal} + + )} +
+ {renderInput({ + id: uid, + disabled, + name, + readOnly, + ...rest, + ...inputProps, + className: inputCls, + })} +
+ ); +} diff --git a/web/src/components/uikit/InputFieldLabel.css b/web/src/components/uikit/InputFieldLabel.css new file mode 100644 index 00000000..cc568e1f --- /dev/null +++ b/web/src/components/uikit/InputFieldLabel.css @@ -0,0 +1,9 @@ +.input-field-label { + color: var(--color-blurple); + font-size: 14px; + font-style: normal; + font-weight: var(--fw-bold); + line-height: 18px; + margin-left: var(--border-radius-half); + margin-bottom: var(--spacing-1); +} diff --git a/web/src/components/uikit/InputFieldLabel.jsx b/web/src/components/uikit/InputFieldLabel.jsx new file mode 100644 index 00000000..f1d418a5 --- /dev/null +++ b/web/src/components/uikit/InputFieldLabel.jsx @@ -0,0 +1,12 @@ +import clsx from "clsx"; +import { Label } from "react-aria-components"; + +import "./InputFieldLabel.css"; + +export default function InputFieldLabel({ label, children, className, ...rest }) { + return ( + + ); +} diff --git a/web/src/components/uikit/PageHeading.jsx b/web/src/components/uikit/PageHeading.jsx new file mode 100644 index 00000000..63f2f2ba --- /dev/null +++ b/web/src/components/uikit/PageHeading.jsx @@ -0,0 +1,3 @@ +export default function PageHeading({ children }) { + return

{children}

; +} diff --git a/web/src/components/uikit/RadioGroup.css b/web/src/components/uikit/RadioGroup.css new file mode 100644 index 00000000..f5782096 --- /dev/null +++ b/web/src/components/uikit/RadioGroup.css @@ -0,0 +1,54 @@ +.radiogroup { + --label-color: var(--color-foreground); + --deselected-color: var(--color-background); + --deselected-color-pressed: lch(from var(--color-blue) calc(l - 10%) c h); + --background-color: var(--color-background); + --selected-color: var(--color-blue); + --selected-color-pressed: lch(from var(--color-blue) calc(l - 10%) c h); + --invalid-color: var(--color-red); + --invalid-color-pressed: lch(from var(--color-red) calc(l - 10%) c h); + + display: flex; + flex-direction: column; + gap: var(--spacing-2); +} + +.radiogroup-radio { + display: flex; + align-items: center; + gap: var(--spacing-2); + color: var(--label-color); + font-size: 14px; + line-height: 20px; + + &::before { + content: ''; + display: block; + width: 16px; + height: 16px; + box-sizing: border-box; + background-color: var(--deselected-color); + border-radius: 50%; + transition: all 200ms; + } + + &[data-pressed]::before { + background-color: var(--deselected-color-pressed); + } + + &[data-selected] { + font-weight: var(--fw-semi-bold); + + &::before { + background-color: var(--selected-color); + } + + &[data-pressed]::before { + background-color: var(--selected-color-pressed); + } + } + + &[data-focus-visible]::before { + box-shadow: 0 0 0 2px var(--color-blurple) inset; + } +} diff --git a/web/src/components/uikit/RadioGroup.jsx b/web/src/components/uikit/RadioGroup.jsx new file mode 100644 index 00000000..0f81c13f --- /dev/null +++ b/web/src/components/uikit/RadioGroup.jsx @@ -0,0 +1,43 @@ +import clsx from "clsx"; +import { + FieldError, + Radio as RARadio, + RadioGroup as RARadioGroup, + Text, +} from "react-aria-components"; + +import InputFieldLabel from "./InputFieldLabel.jsx"; +import "./RadioGroup.css"; + +export default function RadioGroup({ + label, + labelHidden, + description, + errorMessage, + children, + className, + items, + ...props +}) { + const groupProps = { ...props }; + if (labelHidden) { + groupProps["aria-label"] = label; + } + return ( + + {label && !labelHidden && } + {(items || []).map(({ label, value }) => ( + + {label} + + ))} + {children} + {description && {description}} + {errorMessage} + + ); +} + +export function Radio({ className, ...rest }) { + return ; +} diff --git a/web/src/components/uikit/ScreenLoader.css b/web/src/components/uikit/ScreenLoader.css new file mode 100644 index 00000000..07adebc0 --- /dev/null +++ b/web/src/components/uikit/ScreenLoader.css @@ -0,0 +1,34 @@ +.screen-loader { + width: 100vw; + height: 100vh; + z-index: 5000; + position: fixed; + display: none; + top: 0; + left: 0; + + .screen-loader-scrim { + position: absolute; + background-color: rgb(255 255 255 / 20%); + width: 100%; + height: 100%; + backdrop-filter: blur(1px); + } + + .screen-loader-centerer { + position: absolute; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + } + + .img { + width: 100%; + } +} + +.screen-loader-show { + display: block; +} diff --git a/web/src/components/uikit/ScreenLoader.jsx b/web/src/components/uikit/ScreenLoader.jsx new file mode 100644 index 00000000..8ddd7c0b --- /dev/null +++ b/web/src/components/uikit/ScreenLoader.jsx @@ -0,0 +1,40 @@ +import clsx from "clsx"; +import isUndefined from "lodash/isUndefined"; + +import loader from "../../assets/images/loader.svg"; +import "./ScreenLoader.css"; + +/** + * Render the screen loader overlay. + * For async work, use the `useScreenLoader` hook. + * This is used when there is some async dependency + * a screen has, and you want to render an overlay loader + * while the page loads (ie, `return `). + * @param {boolean=} show True by default. + * @param {boolean=} scrim If false, do not show the blocking scrim (just show the loader element). + * @param {number=} height Override the default height. + * @returns {JSX.Element} + */ +export default function ScreenLoader({ show, scrim, height }) { + show = isUndefined(show) ? true : show; + scrim = isUndefined(scrim) ? true : scrim; + height = height || 200; + if (!scrim && !show) { + return null; + } + const img = loading; + if (!scrim) { + return img; + } + return ( +
+
+
{img}
+
+ ); +} diff --git a/web/src/components/uikit/SelectField.jsx b/web/src/components/uikit/SelectField.jsx new file mode 100644 index 00000000..23e8eaf1 --- /dev/null +++ b/web/src/components/uikit/SelectField.jsx @@ -0,0 +1,25 @@ +import Dropdown from "./Dropdown.jsx"; +import InputField from "./InputField.jsx"; + +/** + * @param {Array} items + * @param {string} value + * @param {InputFieldProps} props + */ +export default function SelectField({ items, ...props }) { + return ( + { + return ( + + ); + }} + /> + ); +} diff --git a/web/src/components/uikit/SidebarNav.css b/web/src/components/uikit/SidebarNav.css new file mode 100644 index 00000000..529496f7 --- /dev/null +++ b/web/src/components/uikit/SidebarNav.css @@ -0,0 +1,64 @@ +.sidebar-nav { + background-color: var(--color-background); + padding-top: var(--spacing-5); + padding-left: var(--spacing-3); + padding-right: var(--spacing-5); + display: flex; + flex-direction: column; + align-items: flex-start; + gap: var(--spacing-3); +} + +.sidebar-nav-item { + display: flex; + flex-direction: row; + align-items: center; + border-radius: var(--border-radius); + padding-right: var(--spacing-3); + + &.disabled { + filter: opacity(50%); + } +} + +.sidebar-nav-icon { + background-color: var(--color-light-grey); + height: 20px; + width: 20px; + padding: var(--spacing-2); + border-radius: var(--border-radius); + margin-right: var(--spacing-2); + + &.active { + background-color: var(--color-blue) + } + + &.disabled { + background-color: transparent; + } +} + +.sidebar-nav-link { + color: var(--color-foreground); + text-decoration: none; + + &:visited { + color: var(--color-foreground); + } + + &:hover { + background-color: var(--color-light-grey); + } + + &.active:hover { + background-color: var(--color-blue-light); + } +} + +.sidebar-nav-text { + font-weight: var(--fw-regular) !important; + + &.active { + font-weight: var(--fw-semi-bold) !important; + } +} \ No newline at end of file diff --git a/web/src/components/uikit/SidebarNav.jsx b/web/src/components/uikit/SidebarNav.jsx new file mode 100644 index 00000000..35442c45 --- /dev/null +++ b/web/src/components/uikit/SidebarNav.jsx @@ -0,0 +1,66 @@ +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import clsx from "clsx"; +import { useLocation } from "react-router-dom"; + +import Hr from "./Hr.jsx"; +import "./SidebarNav.css"; +import { RelLink } from "./links.jsx"; + +/** + * @param {Array} items + */ +export default function SidebarNav({ items }) { + if (!items) { + return null; + } + return ( +
+ {items.map((item) => ( + + ))} +
+
+ ); +} + +function DisabledItem({ icon, label }) { + return ( +
+ + {label} +
+ ); +} + +function PageItem({ active, label, href, icon, disabled }) { + const location = useLocation(); + if (disabled) { + return ; + } + const hrefArray = typeof href === "string" ? [href] : href; + active = active || hrefArray.includes(location.pathname); + return ( + + + + {label} + + + ); +} + +/** + * @typedef SidebarNavPageItem + * @property {string} label + * @property {Icon} icon + * @property {string|Array=} href + * @property {boolean=} disabled + * @property {boolean=} active If true, force this item to be active. + * Use when the href matching won't work. + */ diff --git a/web/src/components/uikit/Stack.jsx b/web/src/components/uikit/Stack.jsx new file mode 100644 index 00000000..78d7ce8c --- /dev/null +++ b/web/src/components/uikit/Stack.jsx @@ -0,0 +1,30 @@ +import clsx from "clsx"; +import isUndefined from "lodash/isUndefined"; + +/** + * Flex div with a gap. + * + * direction='vertical', direction='column', col={true} and column={true} all get a flex-direction: column. + * + * direction='horizontal', direction='row', row={true} all get a flex-direction: row. + * + * Defaults to flex-direction: column since that is most popular. + * + * @param {('vertical'|'horizontal'|'row'|'column')} direction + * @param {boolean=} row + * @param {boolean=} col + * @param {boolean=} column + * @param {Spacing} gap + * @param {string=} className + * @param rest + */ +export default function Stack({ direction, row, col, column, gap, className, ...rest }) { + gap = isUndefined(gap) ? 0 : gap; + let cls = "column"; + if (row || direction === "horizontal" || direction === "row") { + cls = "row"; + } else if (col || column) { + cls = "column"; + } + return
; +} diff --git a/web/src/components/uikit/Tabs.css b/web/src/components/uikit/Tabs.css new file mode 100644 index 00000000..f3134c34 --- /dev/null +++ b/web/src/components/uikit/Tabs.css @@ -0,0 +1,27 @@ +.tabs-list { + display: flex; + flex-direction: row; + gap: var(--spacing-2); +} + +.tabs-tab { + border-radius: var(--border-radius); + padding: var(--spacing); + + &.selected { + background-color: var(--color-secondary); + } + + &:hover { + background-color: var(--color-secondary); + } +} + +.tabs-tab-link { + color: var(--color-foreground); + text-decoration: none; + + &:visited { + color: var(--color-foreground); + } +} diff --git a/web/src/components/uikit/TextField.jsx b/web/src/components/uikit/TextField.jsx new file mode 100644 index 00000000..6a36f8be --- /dev/null +++ b/web/src/components/uikit/TextField.jsx @@ -0,0 +1,14 @@ +import InputField from "./InputField.jsx"; + +/** + * @param {InputFieldProps} props + */ +export default function TextField(props) { + return ( + } + /> + ); +} diff --git a/web/src/components/uikit/Toast.css b/web/src/components/uikit/Toast.css new file mode 100644 index 00000000..d9f9b442 --- /dev/null +++ b/web/src/components/uikit/Toast.css @@ -0,0 +1,99 @@ +.toast { + display: flex; + border-radius: 20px; + flex-direction: row; + justify-content: space-between; + padding: var(--spacing-3); + align-items: center; + border: 1px solid; +} + +.toast-icon { + height: 32px; + width: 32px; + margin-right: var(--spacing-3); +} + +.toast-error { + background-color: var(--color-background); + border-color: var(--color-red); + color: var(--color-red); + + .dismiss { + color: var(--color-red); + } +} + +.toast-warning { + background-color: var(--color-orange-light); + border-color: var(--color-orange); + color: var(--color-foreground); + + .toast-icon { + color: var(--color-orange); + } +} + +.toast-success { + background-color: var(--color-green-light); + border-color: var(--color-green); + color: var(--color-foreground); + + .toast-icon { + color: var(--color-green); + } +} + +.toast-info { + background-color: var(--color-background); + border-color: var(--color-blue); + color: var(--color-foreground); + + .toast-icon { + color: var(--color-blue); + } +} + +/* .toast-color-success { */ + +/* color: var(--color-foreground); */ + +/* .toast-color-warning { */ + +/* color: var(--color-orange); */ + +/* } */ + +/* .toast-color-error { */ + +/* color: var(--color-red); */ + +/* } */ + +/* .toast-color-info { */ + +/* color: var(--color-blue); */ + +/* } */ + +/* } */ + +/* .toast-warning { */ + +/* border-color: var(--color-orange); */ + +/* } */ + +/* .toast-info { */ + +/* border-color: var(--color-blue); */ + +/* } */ + +/* .toast-success { */ + +/* background-color: var(--color-green-light); */ + +/* border-color: var(--color-green); */ + +/* } */ diff --git a/web/src/components/uikit/Toast.jsx b/web/src/components/uikit/Toast.jsx new file mode 100644 index 00000000..2842532b --- /dev/null +++ b/web/src/components/uikit/Toast.jsx @@ -0,0 +1,31 @@ +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import clsx from "clsx"; +import isUndefined from "lodash/isUndefined"; + +import { faXmark } from "../icons.jsx"; +import Button from "./Button.jsx"; +import "./Toast.css"; +import { variantIcon } from "./theming.js"; + +export default function Toast({ title, message, variant, icon, onDismiss }) { + variant = variant || "info"; + icon = isUndefined(icon) ? variantIcon(variant) : icon; + return ( +
+
+ {icon && ( + + )} +
+ {title &&

{title}

} + {message &&

{message}

} +
+
+ {onDismiss && ( + + )} +
+ ); +} diff --git a/web/src/components/uikit/Toaster.jsx b/web/src/components/uikit/Toaster.jsx new file mode 100644 index 00000000..d26c4245 --- /dev/null +++ b/web/src/components/uikit/Toaster.jsx @@ -0,0 +1,14 @@ +import React from "react"; +import toast, { Toaster as RHToaster } from "react-hot-toast"; + +export default function Toaster() { + React.useEffect(() => { + const callback = () => { + toast.remove(); + }; + window.addEventListener("popstate", callback); + return () => window.removeEventListener("popstate", callback); + }, []); + + return ; +} diff --git a/web/src/components/uikit/animate/AnimatedStatefulList.jsx b/web/src/components/uikit/animate/AnimatedStatefulList.jsx new file mode 100644 index 00000000..9fdc6035 --- /dev/null +++ b/web/src/components/uikit/animate/AnimatedStatefulList.jsx @@ -0,0 +1,57 @@ +import { AnimatePresence } from "framer-motion"; +import React from "react"; + +import ShrinkingDiv from "./ShrinkingDiv.jsx"; + +/** + * Visual collection of elements where items can be removed with animation. + * + * @param {Array} items + * @param {function} getItemKey Called for each item to get a unique key. + * @param {function} renderItem Called with (item, {removeFromList}) for each item, + * and should render the inner content. + * Note that the content is always within an animated div. + * removeFromList should be called when the user starts to remove the item from the list. + * The value it is called with is later passed to onItemRemoved. + * @param {string} itemClassName Class to apply to the animated div. This is usually + * a spacing class. + * @param {number} exitDuration Duration of the exit animation. + * @param {function} onItemRemoved Called after the visual item is removed from the DOM. + * Called with the value sent to setItemTempState. + */ +export default function AnimatedStatefulList({ + items, + getItemKey, + renderItem, + itemClassName, + exitDuration, + onItemRemoved, +}) { + const [hidden, setHidden] = React.useState({}); + const states = React.useRef({}); + return ( + + {items.map((item) => { + const key = getItemKey(item); + if (hidden[key]) { + return null; + } + function removeFromList(tempState) { + setHidden({ ...hidden, [key]: true }); + states.current = { ...states, [key]: tempState }; + } + return ( + onItemRemoved(states.current[key])} + > + {renderItem(item, { removeFromList })} + + ); + })} + + ); +} diff --git a/web/src/components/uikit/animate/ShrinkingDiv.jsx b/web/src/components/uikit/animate/ShrinkingDiv.jsx new file mode 100644 index 00000000..9c2db3e8 --- /dev/null +++ b/web/src/components/uikit/animate/ShrinkingDiv.jsx @@ -0,0 +1,32 @@ +import { motion } from "framer-motion"; + +/** + * Div that shrinks out. + * @param {number} duration Exit in seconds. + * @param children + * @param {string} className + * @param {object} style + * @param {('vertical')} direction Direction to shrink (can add more as needed). + * @param rest + * @return {*} + * @constructor + */ +export default function ShrinkingDiv({ duration, children, className, style, ...rest }) { + return ( + + {children} + + ); +} diff --git a/web/src/components/uikit/links.jsx b/web/src/components/uikit/links.jsx new file mode 100644 index 00000000..e52599d4 --- /dev/null +++ b/web/src/components/uikit/links.jsx @@ -0,0 +1,44 @@ +import { Link as RRLink } from "react-router-dom"; + +import useFlexiHref from "../../state/useFlexHref.js"; + +/** + * Render relative links using react-router-dom. + */ +export function RelLink({ href, ...rest }) { + href = href || "#"; + const { isAbsoluteForm, relativeHref } = useFlexiHref(href); + if (isAbsoluteForm) { + console.error("RelLink requires relative links, got", href); + href = "#"; + } + return ; +} + +/** + * Render absolute links using a normal anchor. + */ +export function AbsLink({ href, ...rest }) { + href = href || "#"; + const { isAbsoluteForm } = useFlexiHref(href); + if (!isAbsoluteForm) { + console.error("AbsLink requires absolute links, got", href); + href = "#"; + } + return ; +} + +/** + * Render a link using: + * - RelLink if the path is not absolute, like '/path' or 'path'. + * - RelLink if the path is absolute, but starts with the current path, + * like 'http://localhost:19030/app/foo' being at 'http://localhost:19030'. + * - AbsLink otherwise. + */ +export function FlexiLink({ href, absProps, relProps, ...rest }) { + const { isActuallyRelative, relativeHref } = useFlexiHref(href); + if (isActuallyRelative) { + return ; + } + return ; +} diff --git a/web/src/components/uikit/modals/ConfirmationModal.jsx b/web/src/components/uikit/modals/ConfirmationModal.jsx new file mode 100644 index 00000000..ccf546fc --- /dev/null +++ b/web/src/components/uikit/modals/ConfirmationModal.jsx @@ -0,0 +1,53 @@ +import { defaultUndefined, ifEqElse } from "../../../modules/fp.js"; +import { faCheck, faXmark } from "../../icons.jsx"; +import Button from "../Button.jsx"; +import Modal from "./Modal.jsx"; + +export default function ConfirmationModal({ + isOpen, + heading, + children, + confirm, + reject, + confirmIcon, + rejectIcon, + onConfirm, + onReject, + ...rest +}) { + function handleOpenChange() { + onReject(); + } + return ( + + {reject !== false && ( + + )} + {confirm !== false && ( + + )} + + } + {...rest} + > + {children} + + ); +} diff --git a/web/src/components/uikit/modals/InformationModal.jsx b/web/src/components/uikit/modals/InformationModal.jsx new file mode 100644 index 00000000..15c858b7 --- /dev/null +++ b/web/src/components/uikit/modals/InformationModal.jsx @@ -0,0 +1,36 @@ +import React from "react"; + +import Button from "../Button.jsx"; +import Modal from "./Modal.jsx"; + +export default function InformationModal({ + isOpen, + onOpenChange, + heading, + closeButton, + children, + ...rest +}) { + let renderButtons; + if (closeButton === true) { + renderButtons = ({ close }) => ; + } else if (closeButton && onOpenChange) { + renderButtons = React.cloneElement(closeButton, { + onClick: () => onOpenChange(false), + }); + } else if (closeButton) { + renderButtons = ({ close }) => React.cloneElement(closeButton, { onClick: close }); + } + return ( + + {children} + + ); +} diff --git a/web/src/components/uikit/modals/Modal.css b/web/src/components/uikit/modals/Modal.css new file mode 100644 index 00000000..051276cb --- /dev/null +++ b/web/src/components/uikit/modals/Modal.css @@ -0,0 +1,77 @@ +.modal-dialog { + outline: none; +} + +.modal { + box-shadow: 0 8px 20px rgba(0 0 0 / 10%); + outline: none; + max-width: 500px; + + &[data-entering] { + animation: modal-zoom 300ms cubic-bezier(0.175, 0.885, 0.32, 1.275); + } +} + +.modal-heading { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + padding: var(--spacing-3); +} + +.modal-heading-text { + color: var(--color-blurple); +} + +.modal-heading-dismiss { + margin-left: var(--spacing-4); +} + +.modal-body { + padding: var(--spacing-4); + background-color: var(--color-light-grey); +} + + +/* See note in JSX */ +.react-aria-ModalOverlay { /* stylelint-disable-line selector-class-pattern */ + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: var(--visual-viewport-height, 100vh); + display: flex; + align-items: center; + justify-content: center; + background-color: rgb(0 0 0 / 50%); + backdrop-filter: blur(2px); + + &[data-entering] { + animation: modal-fade 200ms; + } + + &[data-exiting] { + animation: modal-fade 150ms reverse ease-in; + } +} + +@keyframes modal-fade { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes modal-zoom { + from { + transform: scale(0.8); + } + + to { + transform: scale(1); + } +} diff --git a/web/src/components/uikit/modals/Modal.jsx b/web/src/components/uikit/modals/Modal.jsx new file mode 100644 index 00000000..ecadee56 --- /dev/null +++ b/web/src/components/uikit/modals/Modal.jsx @@ -0,0 +1,83 @@ +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import clsx from "clsx"; +import isArray from "lodash/isArray"; +import React from "react"; +import { Dialog, Heading, Modal as RAModal } from "react-aria-components"; + +import { invokeIfFunc } from "../../../modules/fp.js"; +import { faXmark } from "../../icons.jsx"; +import Button from "../Button.jsx"; +import Card from "../Card.jsx"; +import Hr from "../Hr.jsx"; +import Stack from "../Stack.jsx"; +import "./Modal.css"; + +/** + * + * @param {string} heading + * @param {boolean} isOpen + * @param {function} onOpenChange + * @param {JSX.Element|Array|function} buttons + * @param {string} className + * @param children + * @param {import('react-aria-components').ModalOverlayProps} rest + */ +export default function Modal({ + heading, + isOpen, + onOpenChange, + children, + buttons, + className, + ...rest +}) { + // NOTE: Nesting Modal in ModalOverlay does not seem to work. + // This needed for a custom overlay class name, so we use react-aria-ModalOverlay + // class to customize the overlay. + // This code is here to avoid you accidentally using ModalOverlay + // as intended and spending hours figuring out what's up. + // Most likely this is a bug in 1.0.0rc1, so upgrade + // and try to again later. + const ModalOverlay = React.Fragment; + const hasButtons = isArray(buttons) ? buttons.length > 0 : Boolean(buttons); + return ( + + + + {(dprops) => ( + + {heading && ( +
+ + {heading} + + +
+ )} +
+ {children} + {children && hasButtons &&
} + {hasButtons && ( + + {invokeIfFunc(buttons, dprops)} + + )} +
+
+ )} +
+
+
+ ); +} diff --git a/web/src/components/uikit/modals/index.jsx b/web/src/components/uikit/modals/index.jsx new file mode 100644 index 00000000..e69de29b diff --git a/web/src/components/uikit/theming.js b/web/src/components/uikit/theming.js new file mode 100644 index 00000000..038fc284 --- /dev/null +++ b/web/src/components/uikit/theming.js @@ -0,0 +1,21 @@ +import { + faExclamationTriangle, + faInfoCircle, + faQuestionCircle, + faThumbsUp, +} from "../icons.jsx"; + +/** + * @param {ActionVariant} variant + * @return {Icon} + */ +export function variantIcon(variant) { + return variantIcons[variant] || null; +} + +const variantIcons = { + success: faThumbsUp, + info: faInfoCircle, + warning: faQuestionCircle, + error: faExclamationTriangle, +}; diff --git a/web/src/components/uikit/typedefs.js b/web/src/components/uikit/typedefs.js new file mode 100644 index 00000000..190336e9 --- /dev/null +++ b/web/src/components/uikit/typedefs.js @@ -0,0 +1,29 @@ +/** + * @typedef {('sm'|'md'|'lg')} Size + */ + +/** + * @typedef {(1|2|3|4|5|6|7)} Spacing + */ + +/** + * @typedef {('blurple'|'secondary'|'grey'|'orange'|'red'|'green'|'blue')} ThemeColor + */ + +/** + * @typedef {('success'|'warning'|'error'|'info')} ActionVariant + */ + +/** + * @typedef {import('@fortawesome/pro-solid-svg-icons').IconDefinition} Icon + */ + +/** + * @typedef TimeRange + * @property {string} lower + * @property {string} upper + * @property {number} elapsed + * @property {boolean} past + * @property {boolean} future + * @property {boolean} current + */ diff --git a/web/src/components/uikit/useUniqueId.js b/web/src/components/uikit/useUniqueId.js new file mode 100644 index 00000000..8f3f38e7 --- /dev/null +++ b/web/src/components/uikit/useUniqueId.js @@ -0,0 +1,7 @@ +import uniqueId from "lodash/uniqueId"; +import React from "react"; + +export default function useUniqueId() { + const uid = React.useMemo(() => uniqueId(), []); + return uid; +} diff --git a/web/src/hocs/authRedirects.jsx b/web/src/hocs/authRedirects.jsx index 9a16cfad..c988ca39 100644 --- a/web/src/hocs/authRedirects.jsx +++ b/web/src/hocs/authRedirects.jsx @@ -18,7 +18,4 @@ export const redirectIfAuthed = redirectUnless( ({ userUnauthed }) => userUnauthed, ); -export const redirectIfUnauthed = redirectUnless( - "/", - ({ userAuthed }) => userAuthed, -); +export const redirectIfUnauthed = redirectUnless("/", ({ userAuthed }) => userAuthed); diff --git a/web/src/hocs/withMetatags.jsx b/web/src/hocs/withMetatags.jsx index 1c09e392..66f8e921 100644 --- a/web/src/hocs/withMetatags.jsx +++ b/web/src/hocs/withMetatags.jsx @@ -1,7 +1,7 @@ import { Helmet } from "react-helmet-async"; export default function withMetatags({ title, exact }) { - const customTitle = title ? `${title} | Ciro` : "Ciro"; + const customTitle = title ? `${title} | WebhookDB` : "WebhookDB"; return (Wrapped) => { return function WithMetatags(props) { return ( diff --git a/web/src/main.jsx b/web/src/main.jsx index 32feac99..6afb9d65 100644 --- a/web/src/main.jsx +++ b/web/src/main.jsx @@ -1,14 +1,15 @@ import React from "react"; import ReactDOM from "react-dom/client"; + import App from "./App"; -import '@mantine/core/styles.css'; -import {MantineProvider} from "@mantine/core"; -import theme from "./theme.jsx" +import "./assets/styles/content.css"; +import "./assets/styles/main.css"; +import "./assets/styles/reset.css"; +import "./assets/styles/typography.css"; +import "./assets/styles/utilities.css"; ReactDOM.createRoot(document.getElementById("root")).render( - - , ); diff --git a/web/src/modules/apiBase.js b/web/src/modules/apiBase.js index 6b5be25c..6ff1d5c5 100644 --- a/web/src/modules/apiBase.js +++ b/web/src/modules/apiBase.js @@ -1,12 +1,13 @@ +import axios, { AxiosError, CanceledError } from "axios"; +import humps from "humps"; +import get from "lodash/get"; +import noop from "lodash/noop"; + import { debugRequestLogger, debugResponseLogger, errorResponseLogger, } from "./apilogger"; -import axios, { AxiosError, CanceledError } from "axios"; -import humps from "humps"; -import get from "lodash/get"; -import noop from "lodash/noop"; function create(apiHost, config) { const { debug, chaos, ...rest } = config || {}; diff --git a/web/src/modules/apilogger.js b/web/src/modules/apilogger.js index 4d965945..12563fb5 100644 --- a/web/src/modules/apilogger.js +++ b/web/src/modules/apilogger.js @@ -1,16 +1,15 @@ -import { Logger } from "./logger"; import get from "lodash/get"; import identity from "lodash/identity"; import omit from "lodash/omit"; +import { Logger } from "./logger"; + const reqLogger = new Logger("api.requests"); const respLogger = new Logger("api.responses"); function reqSuccessDebug(config) { // https://github.com/axios/axios#request-config - reqLogger - .tags({ method: method(config), url: config.url }) - .debug("api_request"); + reqLogger.tags({ method: method(config), url: config.url }).debug("api_request"); return config; } diff --git a/web/src/modules/badContext.js b/web/src/modules/badContext.js index ed88d364..8f154dd8 100644 --- a/web/src/modules/badContext.js +++ b/web/src/modules/badContext.js @@ -4,6 +4,8 @@ * @param {T} type * @returns {function(T): void} */ +// eslint-disable-next-line no-unused-vars export default function badContext(name, type) { - return (_) => console.error(`${name} must be used within a Provder`); + // eslint-disable-next-line no-unused-vars + return (arg) => console.error(`${name} must be used within a Provder`); } diff --git a/web/src/modules/localStorageHelper.js b/web/src/modules/localStorageHelper.js index 70f2f5f6..7f5f7cfb 100644 --- a/web/src/modules/localStorageHelper.js +++ b/web/src/modules/localStorageHelper.js @@ -41,9 +41,7 @@ const makeCache = (store) => { */ useState: (field, initialValue, convert) => { convert = convert || identity; - const [val, setVal] = React.useState( - convert(getItem(store, field, initialValue)), - ); + const [val, setVal] = React.useState(convert(getItem(store, field, initialValue))); const setValAndCache = (v) => { setItem(store, field, v); return setVal(v); diff --git a/web/src/modules/logger.js b/web/src/modules/logger.js index 4d630fc6..cc49adc8 100644 --- a/web/src/modules/logger.js +++ b/web/src/modules/logger.js @@ -53,9 +53,7 @@ export class Logger { arr.push(`${k}=${stringifyNonString(v)}`), ); const ctx = { ...this._context, ...fields }; - Object.entries(ctx).forEach(([k, v]) => - arr.push(`${k}=${stringifyNonString(v)}`), - ); + Object.entries(ctx).forEach(([k, v]) => arr.push(`${k}=${stringifyNonString(v)}`)); return arr; } @@ -73,4 +71,4 @@ function stringifyNonString(o) { return typeof o === "string" ? o : JSON.stringify(o); } -window.CiroLogger = Logger; +window.WhdbLogger = Logger; diff --git a/web/src/pages/SigninPage.jsx b/web/src/pages/SigninPage.jsx deleted file mode 100644 index 575359ce..00000000 --- a/web/src/pages/SigninPage.jsx +++ /dev/null @@ -1,84 +0,0 @@ -import { Link, useLocation, useNavigate } from "react-router-dom"; -import { useState } from "react"; -import api from "../api"; -import useUser from "../state/useUser.jsx"; -import useQuery from "../state/useQuery.jsx"; - -export default function SigninPage() { - const navigate = useNavigate(); - const { setUser } = useUser(); - const query = useQuery(); - const { state: locationState } = useLocation(); - // const { prepareSubmit, handleSubmitError } = useFormSubmitter(); - const invitation = locationState?.invitation; - const [state, setState] = useState({ - email: invitation?.email || "", - password: "", - }); - - function handleSubmit(e) { - // prepareSubmit(e); - // api - // .login(state) - // .then((r) => { - // setUser(r.data); - // navigate("/dashboard"); - // }) - // .catch(handleSubmitError); - } - - function handleChange(e) { - setState({ ...state, [e.target.name]: e.target.value }); - } - - return (
hello
- // - // {invitation.organizationName} invited you - //
- // to join them on Ciro - // - // ) : ( - // "Please sign in." - // ) - // } - // formButtonProps={{ - // submit: "Sign in", - // successMessage: - // query.get("verified") === "true" && - // "Your email has been verified. Please log in.", - // }} - // footerLink={Or register a new account} - // onSubmit={handleSubmit} - // > - // - // - //

- // Do you need to reset your password? - //

- //
- ); -} diff --git a/web/src/pages/auth/AuthLayout.jsx b/web/src/pages/auth/AuthLayout.jsx new file mode 100644 index 00000000..7d730379 --- /dev/null +++ b/web/src/pages/auth/AuthLayout.jsx @@ -0,0 +1,30 @@ +import logo from "../../assets/images/webhookdb-logo-512.png"; +import Layout from "../../components/Layout"; +import Form from "../../components/uikit/Form"; +import FormButtons from "../../components/uikit/FormButtons"; +import Stack from "../../components/uikit/Stack"; +import { RelLink } from "../../components/uikit/links"; + +export default function AuthLayout({ + heading, + formButtonProps, + footerLink, + children, + onSubmit, +}) { + return ( + + + + logo + +

{heading}

+
+ {children} + + {footerLink &&
{footerLink}
} + +
+
+ ); +} diff --git a/web/src/pages/auth/SigninPage.jsx b/web/src/pages/auth/SigninPage.jsx new file mode 100644 index 00000000..154a4ebc --- /dev/null +++ b/web/src/pages/auth/SigninPage.jsx @@ -0,0 +1,88 @@ +import { useState } from "react"; +import { Link, useLocation, useNavigate } from "react-router-dom"; + +import api from "../../api"; +import TextField from "../../components/uikit/TextField.jsx"; +import useFormSubmitter from "../../state/useFormSubmitter.js"; +import useQuery from "../../state/useQuery.jsx"; +import useUser from "../../state/useUser.jsx"; +import AuthLayout from "./../auth/AuthLayout.jsx"; + +export default function SigninPage() { + const navigate = useNavigate(); + const { setUser } = useUser(); + const query = useQuery(); + const { state: locationState } = useLocation(); + const { prepareSubmit, handleSubmitError } = useFormSubmitter(); + const invitation = locationState?.invitation; + const [state, setState] = useState({ + email: invitation?.email || "", + password: "", + }); + + function handleSubmit(e) { + prepareSubmit(e); + api + .login(state) + .then((r) => { + setUser(r.data); + navigate("/dashboard"); + }) + .catch(handleSubmitError); + } + + function handleChange(e) { + setState({ ...state, [e.target.name]: e.target.value }); + } + + return ( + + {invitation.organizationName} invited you +
+ to join them on WebhookDB + + ) : ( + "Please sign in." + ) + } + formButtonProps={{ + submit: "Sign in", + successMessage: + query.get("verified") === "true" && + "Your email has been verified. Please log in.", + }} + footerLink={Or register a new account} + onSubmit={handleSubmit} + > + + +

+ Do you need to reset your password? +

+
+ ); +} diff --git a/web/src/state/GlobalViewStateProvider.jsx b/web/src/state/GlobalViewStateProvider.jsx index 3ec3f6a6..823f8f9f 100644 --- a/web/src/state/GlobalViewStateProvider.jsx +++ b/web/src/state/GlobalViewStateProvider.jsx @@ -1,8 +1,8 @@ import React, { useCallback, useMemo } from "react"; + import badContext from "../modules/badContext"; import { localStorageCache } from "../modules/localStorageHelper.js"; - function invertColorMode(colorMode) { return colorMode === "light" ? "dark" : "light"; } @@ -12,7 +12,7 @@ const DEFAULT_COLOR_MODE = "light"; export const GlobalViewStateContext = React.createContext({ colorMode: DEFAULT_COLOR_MODE, invertedColorMode: invertColorMode(DEFAULT_COLOR_MODE), - setColorMode: badContext("GlobalViewState", ''), + setColorMode: badContext("GlobalViewState", ""), }); export default function GlobalViewStateProvider({ children }) { diff --git a/web/src/state/ScreenLoaderProvider.jsx b/web/src/state/ScreenLoaderProvider.jsx index ee642394..f49a1667 100644 --- a/web/src/state/ScreenLoaderProvider.jsx +++ b/web/src/state/ScreenLoaderProvider.jsx @@ -1,18 +1,17 @@ -import ScreenLoader from "../components/ScreenLoader.jsx"; -import useToggle, {createToggle} from "./useToggle"; import React from "react"; + +import ScreenLoader from "../components/ScreenLoader.jsx"; import badContext from "../modules/badContext"; +import useToggle from "./useToggle"; -export const ScreenLoaderContext = React.createContext( - { - isOn: false, - isOff: false, - setState: badContext('', true), - turnOn: () => badContext('', true), - turnOff: () => badContext('', true), - toggle: () => badContext('', true), - } -); +export const ScreenLoaderContext = React.createContext({ + isOn: false, + isOff: false, + setState: badContext("", true), + turnOn: () => badContext("", true), + turnOff: () => badContext("", true), + toggle: () => badContext("", true), +}); export function ScreenLoaderProvider({ children }) { const toggle = useToggle(false); diff --git a/web/src/state/UserProvider.jsx b/web/src/state/UserProvider.jsx index 92fe3395..b5c93fd4 100644 --- a/web/src/state/UserProvider.jsx +++ b/web/src/state/UserProvider.jsx @@ -1,11 +1,12 @@ -import api from "../api"; -import { localStorageCache } from "../modules/localStorageHelper"; import React from "react"; + +import api from "../api"; import badContext from "../modules/badContext"; +import { localStorageCache } from "../modules/localStorageHelper"; import { withSentry } from "../modules/sentry.js"; export const UserContext = React.createContext({ - user: {id: 0, email: '', activeOrganization: {id: 0, name: ''}}, + user: { id: 0, email: "", activeOrganization: { id: 0, name: "" } }, setUser: badContext("User", {}), userLoading: false, userError: null, @@ -73,4 +74,4 @@ export function UserProvider({ children }) { return {children}; } -const STORAGE_KEY = "cirouser"; +const STORAGE_KEY = "whdbuser"; diff --git a/web/src/state/useAsyncFetch.jsx b/web/src/state/useAsyncFetch.jsx index 73fc2fb5..0344ff96 100644 --- a/web/src/state/useAsyncFetch.jsx +++ b/web/src/state/useAsyncFetch.jsx @@ -1,10 +1,6 @@ import React from "react"; -import { - arrayAppend, - arrayRemoveAt, - arraySetAt, - mapSetAt, -} from "../modules/fp.js"; + +import { arrayAppend, arrayRemoveAt, arraySetAt, mapSetAt } from "../modules/fp.js"; /** * @param makeRequest @@ -107,9 +103,7 @@ export function useAsyncCollectionFetch(makeRequest, options) { const scratchItems = scratchState.items || emptyArray; const replaceItemAt = React.useCallback( (index, value) => { - replaceState( - mapSetAt(fetchedState, "items", arraySetAt(items, index, value)), - ); + replaceState(mapSetAt(fetchedState, "items", arraySetAt(items, index, value))); }, [fetchedState, items, replaceState], ); diff --git a/web/src/state/useError.jsx b/web/src/state/useError.jsx index 25c0b492..8711534b 100644 --- a/web/src/state/useError.jsx +++ b/web/src/state/useError.jsx @@ -1,8 +1,9 @@ -import { Logger } from "../modules/logger"; import get from "lodash/get"; import isString from "lodash/isString"; import React from "react"; +import { Logger } from "../modules/logger"; + const logger = new Logger("errors"); export function useError(initialState) { diff --git a/web/src/state/useErrorToast.jsx b/web/src/state/useErrorToast.jsx new file mode 100644 index 00000000..6b8bb9f8 --- /dev/null +++ b/web/src/state/useErrorToast.jsx @@ -0,0 +1,39 @@ +import isString from "lodash/isString.js"; +import React from "react"; + +import { faExclamationTriangle } from "../components/icons.jsx"; +import { extractErrorMessage } from "./useError.jsx"; +import useToast from "./useToast.jsx"; + +/** + * @typedef ErrorToastState + * @property {function(*, object=)} showErrorToast Show an error toast with the given string. + * If the value is a React element or string, use it verbatim. + * Otherwise, try to extractErrorMessage, and fall back to stringifying. + */ + +/** + * @returns {ErrorToastState} + */ +export default function useErrorToast() { + const { showToast } = useToast(); + const showErrorToast = React.useCallback( + (e) => { + let st; + if (React.isValidElement(e) || isString(e)) { + st = e; + } else { + st = extractErrorMessage(e); + } + showToast({ + message: st, + variant: "error", + duration: 6000, + title: "Error", + icon: faExclamationTriangle, + }); + }, + [showToast], + ); + return { showErrorToast }; +} diff --git a/web/src/state/useFlexHref.js b/web/src/state/useFlexHref.js new file mode 100644 index 00000000..42fd534a --- /dev/null +++ b/web/src/state/useFlexHref.js @@ -0,0 +1,87 @@ +/** + * Return information about an href. + * Needed because we have FOUR different types of hrefs + * we deal with: + * + * - Absolute, off-origin links. + * - Absolute, on-origin links. Treat these like relative links. + * - Relative links, without a leading basename. + * This is what we normally use, and it works fine with react-router in terms + * of both using its `Link` component and `useNavigate` hook. + * - Relative links, WITH a leading basename. + * We need to use these in some cases, like with react-aria-components + * Item.href prop; react-aria uses the href you give it verbatim + * (so you need a leading basename) but the RouterProvider + * is called with the same href (meaning you pass react-router + * a useNavigate with a leading basename, which is wrong). + * See https://github.com/adobe/react-spectrum/issues/5335 + * for some more context. + * + * To deal with this insane compatibility situation, + * we can do the following: + * + * - Be explicit about the link component/format, + * such as RelLink and AbsLink where possible. + * - Understand we need to use ambiguous links in some places, + * especially at the 'library' level. + * - Ensure the basename doesn't appear as the root of a valid route. + * For example, we can know everything starting with '/app/' is + * rooted in the basename; that is, there is no valid route + * like '/app/app/foo'. + * + * This allows us to interpret the href, + * and then pass the correct form of it (with basename, without, etc) + * to the right library (without basename to react-router, + * with basename to react-aria). + * + * @param href + * @return {FlexiHref} + */ +export default function useFlexiHref(href) { + if (!href) { + return { + isAbsoluteForm: false, + relativeHref: href, + basenameHref: href, + isActuallyRelative: true, + }; + } + const isAbsoluteForm = ABSOLUTE_URL_REGEX.test(href); + const isActuallyRelative = !href || !isAbsoluteForm || href.startsWith(ORIGIN); + let relativeHref = ""; + let basenameHref = ""; + if (isActuallyRelative) { + if (isAbsoluteForm) { + basenameHref = href.slice(ORIGIN_LENGTH); + relativeHref = basenameHref.slice(BASENAME.length); + } else if (href.startsWith(BASENAME_SLASH)) { + basenameHref = href; + relativeHref = basenameHref.slice(BASENAME.length); + } else { + relativeHref = href; + basenameHref = BASENAME + href; + } + } + return { isActuallyRelative, isAbsoluteForm, relativeHref, basenameHref }; +} + +const BASENAME = import.meta.env.BASE_URL.replace(/\/$/, ""); +const BASENAME_SLASH = BASENAME + "/"; +const ORIGIN = window.location.origin; +const ORIGIN_LENGTH = ORIGIN.length; +const ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i; + +/** + * @typedef FlexiHref + * @property {boolean} isActuallyRelative True if the href is empty/relative, + * or points to a frontend-relative path, + * even if the href itself is absolute (has the same origin as the current location). + * @property {boolean} isAbsoluteForm True if the href is of the absolute form + * (ie, same origin as current location is still absolute form). + * @property {string} relativeHref Valid when isActuallyRelative is true. + * Contains a relative href (ie, the leading origin is stripped off if the href + * is absolute, to the current origin). + * This value NEVER includes a leading basename. + * @property {string} basenameHref Valid when isActuallyRelative is true. + * Like relativeHref, but always includes a leading basename. + */ diff --git a/web/src/state/useFlexiNavigate.js b/web/src/state/useFlexiNavigate.js new file mode 100644 index 00000000..6b526850 --- /dev/null +++ b/web/src/state/useFlexiNavigate.js @@ -0,0 +1,28 @@ +import React from "react"; +import { useNavigate } from "react-router-dom"; + +/** + * Like react-router useNavigate, but strips the basename before calling navigate. + * This is necessary because, while react-router-dom Link components + * can get a route like /foo and will prepend the basename to use an actual + * href of '/app/foo', other link components may not. + * Even if they navigate properly using react-router's useNavigate(), + * they will have either 1) an incorrect href like '/foo' that goes to the right route at '/app/foo', + * or 2) a correct href like '/app/foo' that is an invalid route ('/app/app/foo'). + * + * @return {function} + */ +export default function useFlexiNavigate() { + const rrnavigate = useNavigate(); + const navigate = React.useCallback( + (href, options) => { + if (BASENAME && typeof href === "string" && href.startsWith(BASENAME)) { + href = href.slice(BASENAME.length); + } + return rrnavigate(href, options); + }, + [rrnavigate], + ); + return navigate; +} +const BASENAME = import.meta.env.BASE_URL.replace(/\/$/, ""); diff --git a/web/src/state/useFormSubmitter.js b/web/src/state/useFormSubmitter.js new file mode 100644 index 00000000..adcd77e6 --- /dev/null +++ b/web/src/state/useFormSubmitter.js @@ -0,0 +1,55 @@ +import React from "react"; + +import useErrorToast from "./useErrorToast.jsx"; +import useScreenLoader from "./useScreenLoader.jsx"; +import useToast from "./useToast.jsx"; + +export default function useFormSubmitter() { + const screenLoader = useScreenLoader(); + const { showErrorToast } = useErrorToast(); + const { showToast } = useToast(); + + const prepareSubmit = React.useCallback( + (event) => { + if (event) { + event.preventDefault(); + } + screenLoader.turnOn(); + }, + [screenLoader], + ); + + const handleSubmitError = React.useCallback( + (e) => { + showErrorToast(e); + screenLoader.turnOff(); + }, + [screenLoader, showErrorToast], + ); + + /** + * @type {function(string=): void|*} + */ + const showSuccessToast = React.useCallback( + (message) => showToast({ message: message || "Changes saved", variant: "success" }), + [showToast], + ); + + const o = React.useMemo( + () => ({ + prepareSubmit, + handleSubmitError, + showErrorToast, + showSuccessToast, + turnOffScreenLoader: screenLoader.turnOff, + }), + [ + handleSubmitError, + prepareSubmit, + screenLoader.turnOff, + showErrorToast, + showSuccessToast, + ], + ); + return o; +} diff --git a/web/src/state/useGlobalViewState.jsx b/web/src/state/useGlobalViewState.jsx index ada94a7b..487b8444 100644 --- a/web/src/state/useGlobalViewState.jsx +++ b/web/src/state/useGlobalViewState.jsx @@ -1,4 +1,5 @@ import React from "react"; + import { GlobalViewStateContext } from "./GlobalViewStateProvider"; /** diff --git a/web/src/state/useQuery.jsx b/web/src/state/useQuery.jsx index a159da69..d5407f9a 100644 --- a/web/src/state/useQuery.jsx +++ b/web/src/state/useQuery.jsx @@ -1,5 +1,5 @@ -import { useLocation } from "react-router-dom"; import { useMemo } from "react"; +import { useLocation } from "react-router-dom"; /** * @returns {URLSearchParams} diff --git a/web/src/state/useRoleAccess.jsx b/web/src/state/useRoleAccess.jsx index 33ad4e72..3ae6f679 100644 --- a/web/src/state/useRoleAccess.jsx +++ b/web/src/state/useRoleAccess.jsx @@ -1,4 +1,5 @@ import React from "react"; + import useUser from "./useUser.jsx"; export default function useRoleAccess({ forceReadAll } = {}) { @@ -17,14 +18,8 @@ export default function useRoleAccess({ forceReadAll } = {}) { (name) => forceReadAll || canAccess(name, "read"), [forceReadAll, canAccess], ); - const canWrite = React.useCallback( - (name) => canAccess(name, "write"), - [canAccess], - ); - const cannotWrite = React.useCallback( - (name) => !canAccess(name, "write"), - [canAccess], - ); + const canWrite = React.useCallback((name) => canAccess(name, "write"), [canAccess]); + const cannotWrite = React.useCallback((name) => !canAccess(name, "write"), [canAccess]); const result = React.useMemo( () => ({ canAccess, canRead, canWrite, cannotWrite }), diff --git a/web/src/state/useScreenLoader.jsx b/web/src/state/useScreenLoader.jsx index b2b6be67..eb245666 100644 --- a/web/src/state/useScreenLoader.jsx +++ b/web/src/state/useScreenLoader.jsx @@ -1,6 +1,7 @@ -import useMountEffect from "./useMountEffect"; import React from "react"; + import { ScreenLoaderContext } from "./ScreenLoaderProvider"; +import useMountEffect from "./useMountEffect"; /** * @returns {Toggle} diff --git a/web/src/state/useToast.jsx b/web/src/state/useToast.jsx index 5c2086f2..b2b83332 100644 --- a/web/src/state/useToast.jsx +++ b/web/src/state/useToast.jsx @@ -1,7 +1,8 @@ +import isUndefined from "lodash/isUndefined"; import React from "react"; import toast from "react-hot-toast"; + import Toast from "../components/uikit/Toast.jsx"; -import isUndefined from "lodash/isUndefined"; import { ifEqElse } from "../modules/fp.js"; export default function useToast() { diff --git a/web/src/state/useToggle.jsx b/web/src/state/useToggle.jsx index 0aafe0c5..b064497d 100644 --- a/web/src/state/useToggle.jsx +++ b/web/src/state/useToggle.jsx @@ -6,10 +6,7 @@ import React from "react"; */ export default function useToggle(initial) { const [isOn, setState] = React.useState(initial || false); - const toggle = React.useMemo( - () => createToggle(isOn, setState), - [isOn], - ); + const toggle = React.useMemo(() => createToggle(isOn, setState), [isOn]); return toggle; } @@ -27,7 +24,7 @@ export function createToggle(isOn, setState) { turnOn: () => setState(true), turnOff: () => setState(false), toggle: () => setState(!isOn), - } + }; } /** diff --git a/web/src/state/useUser.jsx b/web/src/state/useUser.jsx index f89390ef..087e3fab 100644 --- a/web/src/state/useUser.jsx +++ b/web/src/state/useUser.jsx @@ -1,4 +1,5 @@ import React from "react"; + import { UserContext } from "./UserProvider"; /** diff --git a/web/src/static/site.webmanifest b/web/src/static/site.webmanifest index 258ecd01..45dc8a20 100644 --- a/web/src/static/site.webmanifest +++ b/web/src/static/site.webmanifest @@ -1 +1 @@ -{"name":"","short_name":"","icons":[{"src":"/static/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/static/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/web/src/theme.jsx b/web/src/theme.jsx deleted file mode 100644 index 1c7b96cc..00000000 --- a/web/src/theme.jsx +++ /dev/null @@ -1,6 +0,0 @@ -import { createTheme, MantineProvider } from '@mantine/core'; - -const theme = createTheme({ - // fontFamily: 'Montserrat, sans-serif', -}); -export default theme; diff --git a/web/vite.config.js b/web/vite.config.js index bb56fdcd..a3252f46 100644 --- a/web/vite.config.js +++ b/web/vite.config.js @@ -7,6 +7,7 @@ export default defineConfig({ define: { "process.env": process.env, }, + publicDir: "src/static", server: { host: true, port: 18031, From 88acd1d698777c71e83daaceb7a029cf37e88a94 Mon Sep 17 00:00:00 2001 From: Rob Galanakis Date: Mon, 3 Jun 2024 15:10:23 -0700 Subject: [PATCH 4/5] state machine wip --- web/src/api.jsx | 2 - web/src/assets/styles/layout.css | 7 ++ web/src/assets/styles/main.css | 2 + web/src/main.jsx | 1 + web/src/pages/auth/AuthLayout.jsx | 30 ----- web/src/pages/auth/SigninPage.jsx | 123 +++++++-------------- web/src/stateMachine/index.js | 178 ++++++++++++++++++++++++++++++ 7 files changed, 230 insertions(+), 113 deletions(-) create mode 100644 web/src/assets/styles/layout.css delete mode 100644 web/src/pages/auth/AuthLayout.jsx create mode 100644 web/src/stateMachine/index.js diff --git a/web/src/api.jsx b/web/src/api.jsx index 52a82f91..16c55b2a 100644 --- a/web/src/api.jsx +++ b/web/src/api.jsx @@ -15,11 +15,9 @@ const post = (path, params, opts) => { const patch = (path, params, opts) => { return instance.patch(path, params, opts); }; - const put = (path, params, opts) => { return instance.put(path, params, opts); }; - const del = (path, params, opts) => { return instance.delete(path, apiBase.mergeParams(params, opts)); }; diff --git a/web/src/assets/styles/layout.css b/web/src/assets/styles/layout.css new file mode 100644 index 00000000..15bb5e26 --- /dev/null +++ b/web/src/assets/styles/layout.css @@ -0,0 +1,7 @@ +.max-width-sm { + max-width: var(--size-sm); +} + +.max-width-lg { + max-width: var(--size-lg); +} \ No newline at end of file diff --git a/web/src/assets/styles/main.css b/web/src/assets/styles/main.css index 615f9e58..cce56f8e 100644 --- a/web/src/assets/styles/main.css +++ b/web/src/assets/styles/main.css @@ -8,6 +8,8 @@ --spacing-5: 32px; --spacing-6: 48px; --spacing-7: 80px; + --size-sm: 450px; + --size-lg: 1200px; --color-blurple: #373D71; --color-blurple-hover: #232646; --color-blue: #3AC4FF; diff --git a/web/src/main.jsx b/web/src/main.jsx index 6afb9d65..661f5257 100644 --- a/web/src/main.jsx +++ b/web/src/main.jsx @@ -3,6 +3,7 @@ import ReactDOM from "react-dom/client"; import App from "./App"; import "./assets/styles/content.css"; +import "./assets/styles/layout.css"; import "./assets/styles/main.css"; import "./assets/styles/reset.css"; import "./assets/styles/typography.css"; diff --git a/web/src/pages/auth/AuthLayout.jsx b/web/src/pages/auth/AuthLayout.jsx deleted file mode 100644 index 7d730379..00000000 --- a/web/src/pages/auth/AuthLayout.jsx +++ /dev/null @@ -1,30 +0,0 @@ -import logo from "../../assets/images/webhookdb-logo-512.png"; -import Layout from "../../components/Layout"; -import Form from "../../components/uikit/Form"; -import FormButtons from "../../components/uikit/FormButtons"; -import Stack from "../../components/uikit/Stack"; -import { RelLink } from "../../components/uikit/links"; - -export default function AuthLayout({ - heading, - formButtonProps, - footerLink, - children, - onSubmit, -}) { - return ( - - - - logo - -

{heading}

-
- {children} - - {footerLink &&
{footerLink}
} - -
-
- ); -} diff --git a/web/src/pages/auth/SigninPage.jsx b/web/src/pages/auth/SigninPage.jsx index 154a4ebc..b27e3473 100644 --- a/web/src/pages/auth/SigninPage.jsx +++ b/web/src/pages/auth/SigninPage.jsx @@ -1,88 +1,49 @@ -import { useState } from "react"; -import { Link, useLocation, useNavigate } from "react-router-dom"; - -import api from "../../api"; -import TextField from "../../components/uikit/TextField.jsx"; -import useFormSubmitter from "../../state/useFormSubmitter.js"; -import useQuery from "../../state/useQuery.jsx"; -import useUser from "../../state/useUser.jsx"; -import AuthLayout from "./../auth/AuthLayout.jsx"; +import logo from "../../assets/images/webhookdb-logo-512.png"; +import Layout from "../../components/Layout"; +import Form from "../../components/uikit/Form"; +import FormButtons from "../../components/uikit/FormButtons"; +import Stack from "../../components/uikit/Stack"; +import TextField from "../../components/uikit/TextField"; +import { RelLink } from "../../components/uikit/links"; export default function SigninPage() { - const navigate = useNavigate(); - const { setUser } = useUser(); - const query = useQuery(); - const { state: locationState } = useLocation(); - const { prepareSubmit, handleSubmitError } = useFormSubmitter(); - const invitation = locationState?.invitation; - const [state, setState] = useState({ - email: invitation?.email || "", - password: "", - }); - - function handleSubmit(e) { - prepareSubmit(e); - api - .login(state) - .then((r) => { - setUser(r.data); - navigate("/dashboard"); - }) - .catch(handleSubmitError); - } + // function handleSubmit(e) { + // prepareSubmit(e); + // api + // .login(state) + // .then((r) => { + // setUser(r.data); + // navigate("/dashboard"); + // }) + // .catch(handleSubmitError); + // } - function handleChange(e) { - setState({ ...state, [e.target.name]: e.target.value }); - } + // function handleChange(e) { + // setState({ ...state, [e.target.name]: e.target.value }); + // } return ( - - {invitation.organizationName} invited you -
- to join them on WebhookDB - - ) : ( - "Please sign in." - ) - } - formButtonProps={{ - submit: "Sign in", - successMessage: - query.get("verified") === "true" && - "Your email has been verified. Please log in.", - }} - footerLink={Or register a new account} - onSubmit={handleSubmit} - > - - -

- Do you need to reset your password? -

-
+ + + + logo + +

Welcome to WebhookDB!

+
+
Please sign in to continue.
+ + + +
+
); } diff --git a/web/src/stateMachine/index.js b/web/src/stateMachine/index.js new file mode 100644 index 00000000..a26f73dc --- /dev/null +++ b/web/src/stateMachine/index.js @@ -0,0 +1,178 @@ +import get from "lodash/get"; + +import api from "../api"; + +const AUTH_TOKEN_HEADER = "Whdb-Auth-Token"; + +/** + * @param {StateMachineContext} ctx + * @param {string} postUrl + * @param {object} postParams + * @param {string} postParamsValueKey + * @param {string} value + * @return {StateMachineResponse} + */ +async function transitionStep(ctx, { postUrl, postParams, postParamsValueKey, value }) { + const params = { ...postParams }; + params[postParamsValueKey] = value; + const resp = await makeStepRequest(ctx, params, postUrl); + return new StateMachineResponse(resp.data, resp); +} + +/** + * @param {StateMachineContext} ctx + * @param {object} body + * @param {string} url + * @return {axios.AxiosResponse} + */ +async function makeStepRequest(ctx, body, url) { + const cfg = { + method: "POST", + url, + headers: {}, + validateStatus: (st) => st < 500, + data: body, + }; + if (ctx.authToken) { + cfg.headers[AUTH_TOKEN_HEADER] = ctx.authToken; + } + const req = api.instance.request(cfg); + const resp = await req; + const errorStep = get(resp, "data.error.stateMachineStep"); + if (errorStep) { + const errStepResponse = newStateMachine().run(ctx, errorStep); + return errStepResponse.axiosReponse; + } +} + +class Ask { + feedback(s) { + console.log(s); + } + + ask(prompt, options) { + console.log(prompt, options); + return "hello"; + } +} + +class StateMachine { + /** + * + * @param {StateMachineContext} ctx + * @param {StateMachineStep} startingStep + * @return {StateMachineResponse} + */ + async run(ctx, startingStep) { + if (startingStep.complete) { + // If we pass in a complete step, assume the caller took car of printing the output. + // Otherwise we can end up wish a finished step from a 422 statemachine, and then re-print the result. + return new StateMachineResponse(startingStep, null); + } + let step = startingStep; + while (true) { + if (step.complete) { + ctx.ask.feedback(step.output); + return { step, axiosReponse: null }; + } + if (!step.needsInput) { + // Usually this is because a 422 prompt machine returned success + return { step, axiosReponse: null }; + } + if (step.output) { + // If the step is the first one, so only prompts, this will be blank. + ctx.ask.feedback(step.output); + } + const value = ctx.ask.ask(step.prompt, { secret: step.promptIsSecret }); + const newStep = await transitionStep(ctx, { + postUrl: step.postToUrl, + postParams: step.postParams, + postParamsValueKey: step.postParamsValueKey, + value: value, + }); + const errorResponse = getErrorResponseBody(newStep.axiosReponse); + if (errorResponse?.code === "validation_error") { + // If the field that fails validation is not the one we submitted, it probably means that + // something from the commandline failed. There's no sense re-prompting if the current field is valid, + // since we can't fix the cause of the 400 through this transition. + if (errorResponse.fieldErrors[step.postParamsValueKey]) { + ctx.ask.feedback(errorResponse.message); + ctx.ask.feedback(""); + continue; + } else { + return newStep; + } + } else if (errorResponse) { + return newStep; + } + step = newStep; + // Always print a newline after processing input, so the next step output + // has a blank line after the input. + ctx.ask.feedback(""); + } + } +} + +/** + * @return {StateMachine} + */ +export function newStateMachine() { + return new StateMachine(); +} + +/** + * @typedef StateMachineStep + * @property {string} message + * @property {boolean} needsInput + * @property {string} prompt + * @property {boolean} promptIsSecret + * @property {string} postToUrl + * @property {object} postParams + * @property {string} postParamsValueKey + * @property {boolean} complete + * @property {string} output + * @property {object} extras + */ + +class StateMachineResponse { + /** + * @param {StateMachineStep} step + * @param {axios.AxiosResponse} axiosResponse + */ + constructor(step, axiosResponse) { + this.step = step; + this.axiosReponse = axiosResponse; + } +} + +class StateMachineContext { + /** + * @param {string} authToken + * @param {Ask} ask + */ + constructor({ authToken, ask }) { + this.authToken = authToken || ""; + this.ask = ask; + } +} + +/** + * @param {axios.AxiosResponse} r + * @return {ErrorResponse|null} + */ +function getErrorResponseBody(r) { + if (r && r.data && r.data.error) { + return r.data; + } + return null; +} + +/** + * @typedef ErrorResponse + * @property {string} error.message + * @property {string} error.code + * @property {number} error.status + * @property {Array} error.errors + * @property {Map} error.fieldErrors + * @property {StateMachineStep} error.stateMachineStep + */ From 49ce2d8a27c2a8c159711aedcf1a1bc4f5bceb09 Mon Sep 17 00:00:00 2001 From: Rob Galanakis Date: Mon, 17 Jun 2024 09:26:48 -0700 Subject: [PATCH 5/5] wip --- web/src/App.jsx | 4 +- web/src/components/StateMachineForm.jsx | 41 ++++++++ web/src/pages/AuthPage.jsx | 57 ++++++++++ web/src/pages/auth/SigninPage.jsx | 49 --------- web/src/stateMachine/index.js | 134 +++++++++++------------- 5 files changed, 162 insertions(+), 123 deletions(-) create mode 100644 web/src/components/StateMachineForm.jsx create mode 100644 web/src/pages/AuthPage.jsx delete mode 100644 web/src/pages/auth/SigninPage.jsx diff --git a/web/src/App.jsx b/web/src/App.jsx index 5f78dcea..77cfb40b 100644 --- a/web/src/App.jsx +++ b/web/src/App.jsx @@ -11,7 +11,7 @@ import applyHocs from "./modules/applyHocs"; import { installPromiseExtras } from "./modules/bluejay.js"; import "./modules/dayConfig"; import renderComponent from "./modules/renderComponent"; -import SigninPage from "./pages/auth/SigninPage"; +import AuthPage from "./pages/AuthPage"; import GlobalViewStateProvider from "./state/GlobalViewStateProvider"; import { ScreenLoaderProvider } from "./state/ScreenLoaderProvider"; import { UserProvider } from "./state/UserProvider"; @@ -66,7 +66,7 @@ function AppRoutesInner() { redirectIfAuthed, withScreenLoaderMount(), withMetatags({ title: "Authenticate" }), - SigninPage, + AuthPage, )} /> {/* { + const newState = { ...state, [e.target.name]: e.target.value }; + setState(newState); + }, + [state], + ); + const handleSubmit = React.useCallback( + (e) => { + e.preventDefault(); + const result = new StateMachine(new Asker()).makeRequest(url, state); + console.log("asked", result); + }, + [state, url], + ); + return ( +
+ {children({ onChange: handleChange, state })} + +
+ ); +} + +class FormAsker extends Asker { + feedback(s) { + super.feedback(s); + } + + ask(prompt, options) { + return super.ask(prompt, options); + } +} diff --git a/web/src/pages/AuthPage.jsx b/web/src/pages/AuthPage.jsx new file mode 100644 index 00000000..5a8916f8 --- /dev/null +++ b/web/src/pages/AuthPage.jsx @@ -0,0 +1,57 @@ +import logo from "../assets/images/webhookdb-logo-512.png"; +import Layout from "../components/Layout"; +import StateMachineForm from "../components/StateMachineForm"; +import FormButtons from "../components/uikit/FormButtons"; +import Stack from "../components/uikit/Stack"; +import TextField from "../components/uikit/TextField"; +import { RelLink } from "../components/uikit/links"; + +export default function AuthPage() { + // function handleSubmit(e) { + // prepareSubmit(e); + // api + // .login(state) + // .then((r) => { + // setUser(r.data); + // navigate("/dashboard"); + // }) + // .catch(handleSubmitError); + // } + + // function handleChange(e) { + // setState({ ...state, [e.target.name]: e.target.value }); + // } + + return ( + + + + logo + +

Welcome to WebhookDB!

+ + {({ onChange, state }) => ( + <> +
Please sign in to continue.
+ + + )} +
+
+
+ ); +} diff --git a/web/src/pages/auth/SigninPage.jsx b/web/src/pages/auth/SigninPage.jsx deleted file mode 100644 index b27e3473..00000000 --- a/web/src/pages/auth/SigninPage.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import logo from "../../assets/images/webhookdb-logo-512.png"; -import Layout from "../../components/Layout"; -import Form from "../../components/uikit/Form"; -import FormButtons from "../../components/uikit/FormButtons"; -import Stack from "../../components/uikit/Stack"; -import TextField from "../../components/uikit/TextField"; -import { RelLink } from "../../components/uikit/links"; - -export default function SigninPage() { - // function handleSubmit(e) { - // prepareSubmit(e); - // api - // .login(state) - // .then((r) => { - // setUser(r.data); - // navigate("/dashboard"); - // }) - // .catch(handleSubmitError); - // } - - // function handleChange(e) { - // setState({ ...state, [e.target.name]: e.target.value }); - // } - - return ( - - - - logo - -

Welcome to WebhookDB!

-
-
Please sign in to continue.
- - - -
-
- ); -} diff --git a/web/src/stateMachine/index.js b/web/src/stateMachine/index.js index a26f73dc..27e52fad 100644 --- a/web/src/stateMachine/index.js +++ b/web/src/stateMachine/index.js @@ -2,68 +2,76 @@ import get from "lodash/get"; import api from "../api"; -const AUTH_TOKEN_HEADER = "Whdb-Auth-Token"; - -/** - * @param {StateMachineContext} ctx - * @param {string} postUrl - * @param {object} postParams - * @param {string} postParamsValueKey - * @param {string} value - * @return {StateMachineResponse} - */ -async function transitionStep(ctx, { postUrl, postParams, postParamsValueKey, value }) { - const params = { ...postParams }; - params[postParamsValueKey] = value; - const resp = await makeStepRequest(ctx, params, postUrl); - return new StateMachineResponse(resp.data, resp); -} - -/** - * @param {StateMachineContext} ctx - * @param {object} body - * @param {string} url - * @return {axios.AxiosResponse} - */ -async function makeStepRequest(ctx, body, url) { - const cfg = { - method: "POST", - url, - headers: {}, - validateStatus: (st) => st < 500, - data: body, - }; - if (ctx.authToken) { - cfg.headers[AUTH_TOKEN_HEADER] = ctx.authToken; - } - const req = api.instance.request(cfg); - const resp = await req; - const errorStep = get(resp, "data.error.stateMachineStep"); - if (errorStep) { - const errStepResponse = newStateMachine().run(ctx, errorStep); - return errStepResponse.axiosReponse; - } -} - -class Ask { +export class Asker { + /** + * @param {string} s + */ feedback(s) { console.log(s); } + /** + * + * @param prompt + * @param options + * @returns {string} + */ ask(prompt, options) { console.log(prompt, options); return "hello"; } } -class StateMachine { +export class StateMachine { + /** + * @param {Asker} asker + */ + constructor(asker) { + this.asker = asker; + } + + /** + * @param {string} postUrl + * @param {object} postParams + * @param {string} postParamsValueKey + * @param {string} value + * @return {StateMachineResponse} + */ + async transitionStep({ postUrl, postParams, postParamsValueKey, value }) { + const params = { ...postParams }; + params[postParamsValueKey] = value; + const resp = await this.makeRequest(postUrl, params); + return new StateMachineResponse(resp.data, resp); + } + + /** + * @param {string} url + * @param {object} body + * @return {axios.AxiosResponse} + */ + async makeRequest(url, body) { + const cfg = { + method: "POST", + url, + headers: {}, + validateStatus: (st) => st < 500, + data: body, + }; + const req = api.axios.request(cfg); + const resp = await req; + const errorStep = get(resp, "data.error.stateMachineStep"); + if (errorStep) { + const errStepResponse = this.run(errorStep); + return errStepResponse.axiosReponse; + } + } + /** * - * @param {StateMachineContext} ctx * @param {StateMachineStep} startingStep * @return {StateMachineResponse} */ - async run(ctx, startingStep) { + async run(startingStep) { if (startingStep.complete) { // If we pass in a complete step, assume the caller took car of printing the output. // Otherwise we can end up wish a finished step from a 422 statemachine, and then re-print the result. @@ -72,7 +80,7 @@ class StateMachine { let step = startingStep; while (true) { if (step.complete) { - ctx.ask.feedback(step.output); + this.asker.feedback(step.output); return { step, axiosReponse: null }; } if (!step.needsInput) { @@ -81,10 +89,10 @@ class StateMachine { } if (step.output) { // If the step is the first one, so only prompts, this will be blank. - ctx.ask.feedback(step.output); + this.asker.feedback(step.output); } - const value = ctx.ask.ask(step.prompt, { secret: step.promptIsSecret }); - const newStep = await transitionStep(ctx, { + const value = this.asker.ask(step.prompt, { secret: step.promptIsSecret }); + const newStep = await this.transitionStep({ postUrl: step.postToUrl, postParams: step.postParams, postParamsValueKey: step.postParamsValueKey, @@ -96,8 +104,8 @@ class StateMachine { // something from the commandline failed. There's no sense re-prompting if the current field is valid, // since we can't fix the cause of the 400 through this transition. if (errorResponse.fieldErrors[step.postParamsValueKey]) { - ctx.ask.feedback(errorResponse.message); - ctx.ask.feedback(""); + this.asker.feedback(errorResponse.message); + this.asker.feedback(""); continue; } else { return newStep; @@ -108,18 +116,11 @@ class StateMachine { step = newStep; // Always print a newline after processing input, so the next step output // has a blank line after the input. - ctx.ask.feedback(""); + this.asker.feedback(""); } } } -/** - * @return {StateMachine} - */ -export function newStateMachine() { - return new StateMachine(); -} - /** * @typedef StateMachineStep * @property {string} message @@ -145,17 +146,6 @@ class StateMachineResponse { } } -class StateMachineContext { - /** - * @param {string} authToken - * @param {Ask} ask - */ - constructor({ authToken, ask }) { - this.authToken = authToken || ""; - this.ask = ask; - } -} - /** * @param {axios.AxiosResponse} r * @return {ErrorResponse|null}