@lupinum/better-convex-nuxt 0.8.0-beta.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/LICENSES/Apache-2.0.txt +201 -0
- package/README.md +151 -0
- package/THIRD_PARTY_NOTICES.md +38 -0
- package/dist/module.d.mts +55 -0
- package/dist/module.json +12 -0
- package/dist/module.mjs +309 -0
- package/dist/runtime/auth/auth-identity.d.ts +31 -0
- package/dist/runtime/auth/auth-identity.js +21 -0
- package/dist/runtime/auth/better-auth-browser-adapter.d.ts +33 -0
- package/dist/runtime/auth/better-auth-browser-adapter.js +215 -0
- package/dist/runtime/auth/client-engine-types.d.ts +4 -0
- package/dist/runtime/auth/client-engine-types.js +0 -0
- package/dist/runtime/auth/integrated-client.d.ts +25 -0
- package/dist/runtime/auth/integrated-client.js +132 -0
- package/dist/runtime/auth/operation-tracker.d.ts +7 -0
- package/dist/runtime/auth/operation-tracker.js +14 -0
- package/dist/runtime/auth/session-synchronization.d.ts +23 -0
- package/dist/runtime/auth/session-synchronization.js +156 -0
- package/dist/runtime/auth/token-fetcher.d.ts +66 -0
- package/dist/runtime/auth/token-fetcher.js +131 -0
- package/dist/runtime/auth/validate-auth-client-definition.d.ts +12 -0
- package/dist/runtime/auth/validate-auth-client-definition.js +47 -0
- package/dist/runtime/auth-client/convex-client-plugin.d.ts +31 -0
- package/dist/runtime/auth-client/convex-client-plugin.js +14 -0
- package/dist/runtime/auth-client/definition-types.d.ts +6 -0
- package/dist/runtime/auth-client/definition-types.js +0 -0
- package/dist/runtime/auth-client/empty-definition.d.ts +2 -0
- package/dist/runtime/auth-client/empty-definition.js +2 -0
- package/dist/runtime/auth-client/index.d.ts +71 -0
- package/dist/runtime/auth-client/index.js +3 -0
- package/dist/runtime/cli/auth-schema.d.ts +2 -0
- package/dist/runtime/cli/auth-schema.js +169 -0
- package/dist/runtime/cli/convex.d.ts +11 -0
- package/dist/runtime/cli/convex.js +274 -0
- package/dist/runtime/composables/useConvex.d.ts +4 -0
- package/dist/runtime/composables/useConvex.js +9 -0
- package/dist/runtime/composables/useConvexAction.d.ts +4 -0
- package/dist/runtime/composables/useConvexAction.js +18 -0
- package/dist/runtime/composables/useConvexAttachment.d.ts +9 -0
- package/dist/runtime/composables/useConvexAttachment.js +14 -0
- package/dist/runtime/composables/useConvexAuth.d.ts +10 -0
- package/dist/runtime/composables/useConvexAuth.js +37 -0
- package/dist/runtime/composables/useConvexConfig.d.ts +12 -0
- package/dist/runtime/composables/useConvexConfig.js +7 -0
- package/dist/runtime/composables/useConvexConnectionState.d.ts +33 -0
- package/dist/runtime/composables/useConvexConnectionState.js +24 -0
- package/dist/runtime/composables/useConvexFileUpload.d.ts +169 -0
- package/dist/runtime/composables/useConvexFileUpload.js +198 -0
- package/dist/runtime/composables/useConvexMutation.d.ts +13 -0
- package/dist/runtime/composables/useConvexMutation.js +24 -0
- package/dist/runtime/composables/useConvexPaginatedQuery.d.ts +13 -0
- package/dist/runtime/composables/useConvexPaginatedQuery.js +256 -0
- package/dist/runtime/composables/useConvexQuery.d.ts +19 -0
- package/dist/runtime/composables/useConvexQuery.js +308 -0
- package/dist/runtime/convex-auth/adapter/create-adapter.d.ts +33 -0
- package/dist/runtime/convex-auth/adapter/create-adapter.js +308 -0
- package/dist/runtime/convex-auth/adapter/define-functions.d.ts +160 -0
- package/dist/runtime/convex-auth/adapter/define-functions.js +497 -0
- package/dist/runtime/convex-auth/adapter/generate-schema.d.ts +16 -0
- package/dist/runtime/convex-auth/adapter/generate-schema.js +332 -0
- package/dist/runtime/convex-auth/adapter/metadata.d.ts +44 -0
- package/dist/runtime/convex-auth/adapter/metadata.js +91 -0
- package/dist/runtime/convex-auth/adapter/query.d.ts +32 -0
- package/dist/runtime/convex-auth/adapter/query.js +275 -0
- package/dist/runtime/convex-auth/adapter/relationships.d.ts +20 -0
- package/dist/runtime/convex-auth/adapter/relationships.js +128 -0
- package/dist/runtime/convex-auth/component/_generated/api.js +5 -0
- package/dist/runtime/convex-auth/component/_generated/component.d.ts +116 -0
- package/dist/runtime/convex-auth/component/_generated/component.js +0 -0
- package/dist/runtime/convex-auth/component/_generated/dataModel.js +0 -0
- package/dist/runtime/convex-auth/component/_generated/server.js +16 -0
- package/dist/runtime/convex-auth/component/adapter.d.ts +142 -0
- package/dist/runtime/convex-auth/component/adapter.js +16 -0
- package/dist/runtime/convex-auth/component/convex.config.d.ts +2 -0
- package/dist/runtime/convex-auth/component/convex.config.js +3 -0
- package/dist/runtime/convex-auth/component/schema.d.ts +799 -0
- package/dist/runtime/convex-auth/component/schema.js +180 -0
- package/dist/runtime/convex-auth/component/schemaMetadata.d.ts +2094 -0
- package/dist/runtime/convex-auth/component/schemaMetadata.js +2161 -0
- package/dist/runtime/convex-auth/context.d.ts +5 -0
- package/dist/runtime/convex-auth/context.js +8 -0
- package/dist/runtime/convex-auth/create-auth-component.d.ts +41 -0
- package/dist/runtime/convex-auth/create-auth-component.js +157 -0
- package/dist/runtime/convex-auth/index.d.ts +11 -0
- package/dist/runtime/convex-auth/index.js +7 -0
- package/dist/runtime/convex-auth/internal-session.d.ts +2 -0
- package/dist/runtime/convex-auth/internal-session.js +1 -0
- package/dist/runtime/convex-auth/jwks-rotation.d.ts +58 -0
- package/dist/runtime/convex-auth/jwks-rotation.js +163 -0
- package/dist/runtime/convex-auth/oauth-live-access.d.ts +17 -0
- package/dist/runtime/convex-auth/oauth-live-access.js +78 -0
- package/dist/runtime/convex-auth/oauth-provider-compat.d.ts +10 -0
- package/dist/runtime/convex-auth/oauth-provider-compat.js +170 -0
- package/dist/runtime/convex-auth/oauth-resource.d.ts +39 -0
- package/dist/runtime/convex-auth/oauth-resource.js +118 -0
- package/dist/runtime/convex-auth/oauth-security.d.ts +82 -0
- package/dist/runtime/convex-auth/oauth-security.js +454 -0
- package/dist/runtime/convex-auth/origin.d.ts +4 -0
- package/dist/runtime/convex-auth/origin.js +9 -0
- package/dist/runtime/convex-auth/plugin.d.ts +18 -0
- package/dist/runtime/convex-auth/plugin.js +605 -0
- package/dist/runtime/convex-auth/provider.d.ts +2 -0
- package/dist/runtime/convex-auth/provider.js +11 -0
- package/dist/runtime/convex-auth/test.d.ts +410 -0
- package/dist/runtime/convex-auth/test.js +9 -0
- package/dist/runtime/convex-auth/types.d.ts +18 -0
- package/dist/runtime/convex-auth/types.js +0 -0
- package/dist/runtime/convex-auth/user-projection.d.ts +106 -0
- package/dist/runtime/convex-auth/user-projection.js +128 -0
- package/dist/runtime/devtools/auth-proxy-registry.d.ts +4 -0
- package/dist/runtime/devtools/auth-proxy-registry.js +47 -0
- package/dist/runtime/devtools/bridge-setup.d.ts +21 -0
- package/dist/runtime/devtools/bridge-setup.js +165 -0
- package/dist/runtime/devtools/path-utils.d.ts +2 -0
- package/dist/runtime/devtools/path-utils.js +12 -0
- package/dist/runtime/devtools/server.d.ts +2 -0
- package/dist/runtime/devtools/server.js +108 -0
- package/dist/runtime/devtools/setup-client.d.ts +16 -0
- package/dist/runtime/devtools/setup-client.js +43 -0
- package/dist/runtime/devtools/sink.d.ts +18 -0
- package/dist/runtime/devtools/sink.js +110 -0
- package/dist/runtime/devtools/transport.d.ts +16 -0
- package/dist/runtime/devtools/transport.js +149 -0
- package/dist/runtime/devtools/types.d.ts +167 -0
- package/dist/runtime/devtools/types.js +1 -0
- package/dist/runtime/devtools/ui/dist/200.html +1 -0
- package/dist/runtime/devtools/ui/dist/404.html +1 -0
- package/dist/runtime/devtools/ui/dist/_nuxt/C4MASuCh.js +1 -0
- package/dist/runtime/devtools/ui/dist/_nuxt/DJHkqtZq.js +3 -0
- package/dist/runtime/devtools/ui/dist/_nuxt/DWwrCltl.js +2 -0
- package/dist/runtime/devtools/ui/dist/_nuxt/DZ_UiYoH.js +1 -0
- package/dist/runtime/devtools/ui/dist/_nuxt/_m9ujb-i.js +1 -0
- package/dist/runtime/devtools/ui/dist/_nuxt/builds/latest.json +1 -0
- package/dist/runtime/devtools/ui/dist/_nuxt/builds/meta/better-convex-nuxt-devtools.json +1 -0
- package/dist/runtime/devtools/ui/dist/_nuxt/entry.DpFDKYZ5.css +1 -0
- package/dist/runtime/devtools/ui/dist/_nuxt/error-404.DYUJo5xt.css +1 -0
- package/dist/runtime/devtools/ui/dist/_nuxt/error-500.DQdoJJXg.css +1 -0
- package/dist/runtime/devtools/ui/dist/convex-logo.svg +5 -0
- package/dist/runtime/devtools/ui/dist/index.html +1 -0
- package/dist/runtime/errors/index.d.ts +7 -0
- package/dist/runtime/errors/index.js +5 -0
- package/dist/runtime/middleware/convex-auth.global.d.ts +2 -0
- package/dist/runtime/middleware/convex-auth.global.js +31 -0
- package/dist/runtime/plugin.auth.client.d.ts +3 -0
- package/dist/runtime/plugin.auth.client.js +217 -0
- package/dist/runtime/plugin.client.d.ts +3 -0
- package/dist/runtime/plugin.client.js +43 -0
- package/dist/runtime/plugin.server.d.ts +12 -0
- package/dist/runtime/plugin.server.js +98 -0
- package/dist/runtime/plugins/convex-call-error-payload.d.ts +14 -0
- package/dist/runtime/plugins/convex-call-error-payload.js +12 -0
- package/dist/runtime/runtime-context.d.ts +26 -0
- package/dist/runtime/runtime-context.js +48 -0
- package/dist/runtime/server/api/auth/[...].d.ts +10 -0
- package/dist/runtime/server/api/auth/[...].js +509 -0
- package/dist/runtime/server/api/auth/authorization-server-metadata.d.ts +2 -0
- package/dist/runtime/server/api/auth/authorization-server-metadata.js +6 -0
- package/dist/runtime/server/api/auth/body-size.d.ts +15 -0
- package/dist/runtime/server/api/auth/body-size.js +179 -0
- package/dist/runtime/server/api/auth/headers.d.ts +6 -0
- package/dist/runtime/server/api/auth/headers.js +98 -0
- package/dist/runtime/server/api/auth/jwks.d.ts +2 -0
- package/dist/runtime/server/api/auth/jwks.js +6 -0
- package/dist/runtime/server/api/auth/security.d.ts +14 -0
- package/dist/runtime/server/api/auth/security.js +85 -0
- package/dist/runtime/server/api/release-fingerprint.d.ts +2 -0
- package/dist/runtime/server/api/release-fingerprint.js +36 -0
- package/dist/runtime/server/index.d.ts +1 -0
- package/dist/runtime/server/index.js +3 -0
- package/dist/runtime/server/plugins/runtime-config.d.ts +7 -0
- package/dist/runtime/server/plugins/runtime-config.js +7 -0
- package/dist/runtime/server/utils/auth-snapshot.d.ts +26 -0
- package/dist/runtime/server/utils/auth-snapshot.js +165 -0
- package/dist/runtime/server/utils/http.d.ts +16 -0
- package/dist/runtime/server/utils/http.js +133 -0
- package/dist/runtime/server/utils/server-convex-caller.d.ts +31 -0
- package/dist/runtime/server/utils/server-convex-caller.js +151 -0
- package/dist/runtime/server/utils/server-convex-options.d.ts +83 -0
- package/dist/runtime/server/utils/server-convex-options.js +69 -0
- package/dist/runtime/server/utils/signed-client-ip.d.ts +6 -0
- package/dist/runtime/server/utils/signed-client-ip.js +29 -0
- package/dist/runtime/server/utils/ssr-auth-headers.d.ts +26 -0
- package/dist/runtime/server/utils/ssr-auth-headers.js +49 -0
- package/dist/runtime/server/utils/token-exchange.d.ts +27 -0
- package/dist/runtime/server/utils/token-exchange.js +96 -0
- package/dist/runtime/shared/auth-cookie.d.ts +4 -0
- package/dist/runtime/shared/auth-cookie.js +25 -0
- package/dist/runtime/shared/auth-origin.d.ts +15 -0
- package/dist/runtime/shared/auth-origin.js +42 -0
- package/dist/runtime/shared/bounded-stream.d.ts +2 -0
- package/dist/runtime/shared/bounded-stream.js +50 -0
- package/dist/runtime/shared/client-ip.d.ts +21 -0
- package/dist/runtime/shared/client-ip.js +123 -0
- package/dist/runtime/shared/release-fingerprint.d.ts +5 -0
- package/dist/runtime/shared/release-fingerprint.js +17 -0
- package/dist/runtime/types.d.ts +19 -0
- package/dist/runtime/utils/auth-config.d.ts +24 -0
- package/dist/runtime/utils/auth-config.js +45 -0
- package/dist/runtime/utils/auth-contract.d.ts +22 -0
- package/dist/runtime/utils/auth-contract.js +0 -0
- package/dist/runtime/utils/auth-errors.d.ts +5 -0
- package/dist/runtime/utils/auth-errors.js +22 -0
- package/dist/runtime/utils/auth-identity-state.d.ts +4 -0
- package/dist/runtime/utils/auth-identity-state.js +8 -0
- package/dist/runtime/utils/auth-pending-state.d.ts +13 -0
- package/dist/runtime/utils/auth-pending-state.js +4 -0
- package/dist/runtime/utils/auth-pending.d.ts +10 -0
- package/dist/runtime/utils/auth-pending.js +30 -0
- package/dist/runtime/utils/auth-route-protection.d.ts +16 -0
- package/dist/runtime/utils/auth-route-protection.js +58 -0
- package/dist/runtime/utils/auth-status.d.ts +47 -0
- package/dist/runtime/utils/auth-status.js +8 -0
- package/dist/runtime/utils/bounded-convex-fetch.d.ts +18 -0
- package/dist/runtime/utils/bounded-convex-fetch.js +152 -0
- package/dist/runtime/utils/callable-devtools.d.ts +17 -0
- package/dist/runtime/utils/callable-devtools.js +49 -0
- package/dist/runtime/utils/callable-observer.d.ts +2 -0
- package/dist/runtime/utils/callable-observer.js +1 -0
- package/dist/runtime/utils/composable-scope.d.ts +2 -0
- package/dist/runtime/utils/composable-scope.js +8 -0
- package/dist/runtime/utils/config-defaults.d.ts +8 -0
- package/dist/runtime/utils/config-defaults.js +8 -0
- package/dist/runtime/utils/convex-cache.d.ts +68 -0
- package/dist/runtime/utils/convex-cache.js +47 -0
- package/dist/runtime/utils/convex-config.d.ts +16 -0
- package/dist/runtime/utils/convex-config.js +50 -0
- package/dist/runtime/utils/convex-shared.d.ts +67 -0
- package/dist/runtime/utils/convex-shared.js +134 -0
- package/dist/runtime/utils/identity-changed-error.d.ts +4 -0
- package/dist/runtime/utils/identity-changed-error.js +12 -0
- package/dist/runtime/utils/identity-key.d.ts +19 -0
- package/dist/runtime/utils/identity-key.js +10 -0
- package/dist/runtime/utils/integrated-auth-client.d.ts +5 -0
- package/dist/runtime/utils/integrated-auth-client.js +0 -0
- package/dist/runtime/utils/logger.d.ts +42 -0
- package/dist/runtime/utils/logger.js +190 -0
- package/dist/runtime/utils/mime-type.d.ts +33 -0
- package/dist/runtime/utils/mime-type.js +10 -0
- package/dist/runtime/utils/query-execution-gate.d.ts +47 -0
- package/dist/runtime/utils/query-execution-gate.js +63 -0
- package/dist/runtime/utils/query-execution.d.ts +8 -0
- package/dist/runtime/utils/query-execution.js +19 -0
- package/dist/runtime/utils/query-foundation.d.ts +20 -0
- package/dist/runtime/utils/query-foundation.js +39 -0
- package/dist/runtime/utils/query-state.d.ts +12 -0
- package/dist/runtime/utils/query-state.js +12 -0
- package/dist/runtime/utils/reactive-args.d.ts +5 -0
- package/dist/runtime/utils/reactive-args.js +42 -0
- package/dist/runtime/utils/runtime-config-normalize.d.ts +22 -0
- package/dist/runtime/utils/runtime-config-normalize.js +28 -0
- package/dist/runtime/utils/runtime-config.d.ts +4 -0
- package/dist/runtime/utils/runtime-config.js +8 -0
- package/dist/runtime/utils/sanitize-diagnostic.d.ts +6 -0
- package/dist/runtime/utils/sanitize-diagnostic.js +81 -0
- package/dist/runtime/utils/shared-helpers.d.ts +46 -0
- package/dist/runtime/utils/shared-helpers.js +139 -0
- package/dist/runtime/utils/site-url.d.ts +4 -0
- package/dist/runtime/utils/site-url.js +15 -0
- package/dist/runtime/utils/ssr-pagination-state.d.ts +3 -0
- package/dist/runtime/utils/ssr-pagination-state.js +3 -0
- package/dist/runtime/utils/types.d.ts +29 -0
- package/dist/runtime/utils/types.js +0 -0
- package/dist/runtime/utils/upload-core.d.ts +16 -0
- package/dist/runtime/utils/upload-core.js +116 -0
- package/dist/types.d.mts +21 -0
- package/package.json +253 -0
- package/security/upstream-convex-better-auth.json +477 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./DZ_UiYoH.js","./DJHkqtZq.js","./_m9ujb-i.js","./error-404.DYUJo5xt.css","./C4MASuCh.js","./error-500.DQdoJJXg.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{$ as e,A as t,At as n,B as r,Ct as i,D as a,Dt as o,E as s,Et as c,F as l,Ft as u,G as d,H as f,I as p,L as m,M as h,Mt as g,N as _,Nt as ee,O as te,Ot as v,P as y,Pt as b,Q as x,R as S,S as ne,St as C,T as re,Tt as ie,U as ae,V as oe,W as se,X as w,Y as ce,Z as T,_ as E,_t as le,a as ue,at as de,b as fe,bt as pe,c as me,ct as he,d as ge,dt as D,et as O,f as _e,g as ve,gt as k,h as ye,ht as A,i as be,j,jt as M,k as N,kt as xe,l as Se,m as Ce,nt as we,o as Te,ot as Ee,p as De,pt as Oe,rt as ke,s as Ae,st as je,t as Me,ut as Ne,v as P,vt as Pe,w as Fe,wt as Ie,xt as Le,y as Re,yt as ze,z as F}from"./DJHkqtZq.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var Be=void 0,Ve=typeof window<`u`&&window.trustedTypes;if(Ve)try{Be=Ve.createPolicy(`vue`,{createHTML:e=>e})}catch{}var He=Be?e=>Be.createHTML(e):e=>e,Ue=`http://www.w3.org/2000/svg`,We=`http://www.w3.org/1998/Math/MathML`,I=typeof document<`u`?document:null,Ge=I&&I.createElement(`template`),Ke={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{let t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{let i=t===`svg`?I.createElementNS(Ue,e):t===`mathml`?I.createElementNS(We,e):n?I.createElement(e,{is:n}):I.createElement(e);return e===`select`&&r&&r.multiple!=null&&i.setAttribute(`multiple`,r.multiple),i},createText:e=>I.createTextNode(e),createComment:e=>I.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>I.querySelector(e),setScopeId(e,t){e.setAttribute(t,``)},insertStaticContent(e,t,n,r,i,a){let o=n?n.previousSibling:t.lastChild;if(i&&(i===a||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===a||!(i=i.nextSibling)););else{Ge.innerHTML=He(r===`svg`?`<svg>${e}</svg>`:r===`mathml`?`<math>${e}</math>`:e);let i=Ge.content;if(r===`svg`||r===`mathml`){let e=i.firstChild;for(;e.firstChild;)i.appendChild(e.firstChild);i.removeChild(e)}t.insertBefore(i,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},qe=Symbol(`_vtc`);function Je(e,t,n){let r=e[qe];r&&(t=(t?[t,...r]:[...r]).join(` `)),t==null?e.removeAttribute(`class`):n?e.setAttribute(`class`,t):e.className=t}var L=Symbol(`_vod`),Ye=Symbol(`_vsh`),Xe={name:`show`,beforeMount(e,{value:t},{transition:n}){e[L]=e.style.display===`none`?``:e.style.display,n&&t?n.beforeEnter(e):R(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),R(e,!0),r.enter(e)):r.leave(e,()=>{R(e,!1)}):R(e,t))},beforeUnmount(e,{value:t}){R(e,t)}};function R(e,t){e.style.display=t?e[L]:`none`,e[Ye]=!t}var Ze=Symbol(``),Qe=/(?:^|;)\s*display\s*:/;function $e(e,t,n){let r=e.style,i=c(n),a=!1;if(n&&!i){if(t)if(c(t))for(let e of t.split(`;`)){let t=e.slice(0,e.indexOf(`:`)).trim();n[t]??z(r,t,``)}else for(let e in t)n[e]??z(r,e,``);for(let i in n){i===`display`&&(a=!0);let o=n[i];o==null?z(r,i,``):it(e,i,!c(t)&&t?t[i]:void 0,o)||z(r,i,o)}}else if(i){if(t!==n){let e=r[Ze];e&&(n+=`;`+e),r.cssText=n,a=Qe.test(n)}}else t&&e.removeAttribute(`style`);L in e&&(e[L]=a?r.display:``,e[Ye]&&(r.display=`none`))}var et=/\s*!important$/;function z(e,t,n){if(Le(n))n.forEach(n=>z(e,t,n));else if(n??=``,t.startsWith(`--`))e.setProperty(t,n);else{let r=rt(e,t);et.test(n)?e.setProperty(ze(r),n.replace(et,``),`important`):e[r]=n}}var tt=[`Webkit`,`Moz`,`ms`],nt={};function rt(e,t){let n=nt[t];if(n)return n;let r=k(t);if(r!==`filter`&&r in e)return nt[t]=r;r=le(r);for(let n=0;n<tt.length;n++){let i=tt[n]+r;if(i in e)return nt[t]=i}return t}function it(e,t,n,r){return e.tagName===`TEXTAREA`&&(t===`width`||t===`height`)&&c(r)&&n===r}var at=`http://www.w3.org/1999/xlink`;function ot(e,t,n,r,i,a=ie(t)){r&&t.startsWith(`xlink:`)?n==null?e.removeAttributeNS(at,t.slice(6,t.length)):e.setAttributeNS(at,t,n):n==null||a&&!pe(n)?e.removeAttribute(t):e.setAttribute(t,a?``:o(n)?String(n):n)}function st(e,t,n,r,i){if(t===`innerHTML`||t===`textContent`){n!=null&&(e[t]=t===`innerHTML`?He(n):n);return}let a=e.tagName;if(t===`value`&&a!==`PROGRESS`&&!a.includes(`-`)){let r=a===`OPTION`?e.getAttribute(`value`)||``:e.value,i=n==null?e.type===`checkbox`?`on`:``:String(n);(r!==i||!(`_value`in e))&&(e.value=i),n??e.removeAttribute(t),e._value=n;return}let o=!1;if(n===``||n==null){let r=typeof e[t];r===`boolean`?n=pe(n):n==null&&r===`string`?(n=``,o=!0):r===`number`&&(n=0,o=!0)}try{e[t]=n}catch{}o&&e.removeAttribute(i||t)}function ct(e,t,n,r){e.addEventListener(t,n,r)}function lt(e,t,n,r){e.removeEventListener(t,n,r)}var ut=Symbol(`_vei`);function dt(e,t,n,r,i=null){let a=e[ut]||(e[ut]={}),o=a[t];if(r&&o)o.value=r;else{let[n,s]=mt(t);r?ct(e,n,a[t]=vt(r,i),s):o&&(lt(e,n,o,s),a[t]=void 0)}}var ft=/(Once|Passive|Capture)$/,pt=/^on:?(?:Once|Passive|Capture)$/;function mt(e){let t,n;for(;(n=e.match(ft))&&!pt.test(e);)t||={},e=e.slice(0,e.length-n[1].length),t[n[1].toLowerCase()]=!0;return[e[2]===`:`?e.slice(3):ze(e.slice(2)),t]}var ht=0,gt=Promise.resolve(),_t=()=>ht||=(gt.then(()=>ht=0),Date.now());function vt(e,t){let n=e=>{if(!e._vts)e._vts=Date.now();else if(e._vts<=n.attached)return;let r=n.value;if(Le(r)){let n=e.stopImmediatePropagation;e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0};let i=r.slice(),a=[e];for(let n=0;n<i.length&&!e._stopped;n++){let e=i[n];e&&te(e,t,5,a)}}else te(r,t,5,[e])};return n.value=e,n.attached=_t(),n}var yt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,bt=(e,t,n,r,a,o)=>{let s=a===`svg`;t===`class`?Je(e,r,s):t===`style`?$e(e,n,r):Ie(t)?i(t)||dt(e,t,n,r,o):(t[0]===`.`?(t=t.slice(1),!0):t[0]===`^`?(t=t.slice(1),!1):xt(e,t,r,s))?(st(e,t,r),!e.tagName.includes(`-`)&&(t===`value`||t===`checked`||t===`selected`)&&ot(e,t,r,s,o,t!==`value`)):e._isVueCE&&(St(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!c(r)))?st(e,k(t),r,o,t):(t===`true-value`?e._trueValue=r:t===`false-value`&&(e._falseValue=r),ot(e,t,r,s))};function xt(e,t,n,r){if(r)return!!(t===`innerHTML`||t===`textContent`||t in e&&yt(t)&&C(n));if(t===`spellcheck`||t===`draggable`||t===`translate`||t===`autocorrect`||t===`sandbox`&&e.tagName===`IFRAME`||t===`form`||t===`list`&&e.tagName===`INPUT`||t===`type`&&e.tagName===`TEXTAREA`)return!1;if(t===`width`||t===`height`){let t=e.tagName;if(t===`IMG`||t===`VIDEO`||t===`CANVAS`||t===`SOURCE`)return!1}return yt(t)&&c(n)?!1:t in e}function St(e,t){let n=e._def.props;if(!n)return!1;let r=k(t);return Array.isArray(n)?n.some(e=>k(e)===r):Object.keys(n).some(e=>k(e)===r)}var Ct=Pe({patchProp:bt},Ke),B,wt=!1;function Tt(){return B||=l(Ct)}function Et(){return B=wt?B:y(Ct),wt=!0,B}var Dt=((...e)=>{let t=Tt().createApp(...e),{mount:n}=t;return t.mount=e=>{let r=At(e);if(!r)return;let i=t._component;!C(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent=``);let a=n(r,!1,kt(r));return r instanceof Element&&(r.removeAttribute(`v-cloak`),r.setAttribute(`data-v-app`,``)),a},t}),Ot=((...e)=>{let t=Et().createApp(...e),{mount:n}=t;return t.mount=e=>{let t=At(e);if(t)return n(t,!0,kt(t))},t});function kt(e){if(e instanceof SVGElement)return`svg`;if(typeof MathMLElement==`function`&&e instanceof MathMLElement)return`mathml`}function At(e){return c(e)?document.querySelector(e):e}var jt=/bot\b|chrome-lighthouse|facebookexternalhit|google\b/i;function Mt(e){return jt.test(e)}import.meta.url.replace(/\/app\/.*$/,`/`);var Nt=Symbol(`route`),Pt=u({docsBase:ee,reporters:b});String.fromCharCode;var Ft=/#/g,It=/&/g,Lt=/\//g,Rt=/=/g,zt=/\?/g,V=/\+/g,Bt=/%5e/gi,Vt=/%60/gi,Ht=/%7c/gi,Ut=/%20/gi,Wt=/%2f/gi,Gt=/%252f/gi;function Kt(e){return encodeURI(``+e).replace(Ht,`|`)}function qt(e){return Kt(typeof e==`string`?e:JSON.stringify(e)).replace(V,`%2B`).replace(Ut,`+`).replace(Ft,`%23`).replace(It,`%26`).replace(Vt,"`").replace(Bt,`^`).replace(Lt,`%2F`)}function Jt(e){return qt(e).replace(Rt,`%3D`)}function Yt(e){return Kt(e).replace(Ft,`%23`).replace(zt,`%3F`).replace(Gt,`%2F`).replace(It,`%26`).replace(V,`%2B`)}function H(e=``){try{return decodeURIComponent(``+e)}catch{return``+e}}function Xt(e){return H(e.replace(Wt,`%252F`))}function Zt(e){return H(e.replace(V,` `))}function Qt(e){return H(e.replace(V,` `))}function U(e=``){let t=Object.create(null);e[0]===`?`&&(e=e.slice(1));for(let n of e.split(`&`)){let e=n.match(/([^=]+)=?(.*)/)||[];if(e.length<2)continue;let r=Zt(e[1]);if(r===`__proto__`||r===`constructor`)continue;let i=Qt(e[2]||``);t[r]===void 0?t[r]=i:Array.isArray(t[r])?t[r].push(i):t[r]=[t[r],i]}return t}function $t(e,t){return(typeof t==`number`||typeof t==`boolean`)&&(t=String(t)),t?Array.isArray(t)?t.map(t=>`${Jt(e)}=${qt(t)}`).join(`&`):`${Jt(e)}=${qt(t)}`:Jt(e)}function en(e){return Object.keys(e).filter(t=>e[t]!==void 0).map(t=>$t(t,e[t])).filter(Boolean).join(`&`)}var tn=/^[\s\w\0+.-]{2,}:([/\\]{1,2})/,nn=/^[\s\w\0+.-]{2,}:([/\\]{2})?/,rn=/^([/\\]\s*){2,}[^/\\]/,an=/^[\s\0]*(blob|data|javascript|vbscript):$/i,on=/\/$|\/\?|\/#/,sn=/^\.?\//;function W(e,t={}){return typeof t==`boolean`&&(t={acceptRelative:t}),t.strict?tn.test(e):nn.test(e)||(t.acceptRelative?rn.test(e):!1)}function cn(e){return!!e&&an.test(e)}function ln(e=``,t){return t?on.test(e):e.endsWith(`/`)}function un(e=``,t){if(!t)return(ln(e)?e.slice(0,-1):e)||`/`;if(!ln(e,!0))return e||`/`;let n=e,r=``,i=e.indexOf(`#`);i!==-1&&(n=e.slice(0,i),r=e.slice(i));let[a,...o]=n.split(`?`);return((a.endsWith(`/`)?a.slice(0,-1):a)||`/`)+(o.length>0?`?${o.join(`?`)}`:``)+r}function G(e=``,t){if(!t)return e.endsWith(`/`)?e:e+`/`;if(ln(e,!0))return e||`/`;let n=e,r=``,i=e.indexOf(`#`);if(i!==-1&&(n=e.slice(0,i),r=e.slice(i),!n))return r;let[a,...o]=n.split(`?`);return a+`/`+(o.length>0?`?${o.join(`?`)}`:``)+r}function dn(e=``){return e.startsWith(`/`)}function fn(e=``){return dn(e)?e:`/`+e}function pn(e,t){if(gn(t)||W(e))return e;let n=un(t);if(e.startsWith(n)){let t=e[n.length];if(!t||t===`/`||t===`?`)return e}return vn(n,e)}function mn(e,t){if(gn(t))return e;let n=un(t);if(!e.startsWith(n))return e;let r=e[n.length];return r&&r!==`/`&&r!==`?`?e:`/`+e.slice(n.length).replace(/^\/+/,``)}function hn(e,t){let n=K(e);return n.search=en({...U(n.search),...t}),Cn(n)}function gn(e){return!e||e===`/`}function _n(e){return e&&e!==`/`}function vn(e,...t){let n=e||``;for(let e of t.filter(e=>_n(e)))if(n){let t=e.replace(sn,``);n=G(n)+t}else n=e;return n}function yn(...e){let t=/\/(?!\/)/,n=e.filter(Boolean),r=[],i=0;for(let e of n)if(!(!e||e===`/`)){for(let[n,a]of e.split(t).entries())if(!(!a||a===`.`)){if(a===`..`){if(r.length===1&&W(r[0]))continue;r.pop(),i--;continue}if(n===1&&r[r.length-1]?.endsWith(`:/`)){r[r.length-1]+=`/`+a;continue}r.push(a),i++}}let a=r.join(`/`);return i>=0?n[0]?.startsWith(`/`)&&!a.startsWith(`/`)?a=`/`+a:n[0]?.startsWith(`./`)&&!a.startsWith(`./`)&&(a=`./`+a):a=`../`.repeat(-1*i)+a,n[n.length-1]?.endsWith(`/`)&&!a.endsWith(`/`)&&(a+=`/`),a}function bn(e,t,n={}){return n.trailingSlash||(e=G(e),t=G(t)),n.leadingSlash||(e=fn(e),t=fn(t)),n.encoding||(e=H(e),t=H(t)),e===t}var xn=Symbol.for(`ufo:protocolRelative`);function K(e=``,t){let n=e.match(/^[\s\0]*(blob:|data:|javascript:|vbscript:)(.*)/i);if(n){let[,e,t=``]=n;return{protocol:e.toLowerCase(),pathname:t,href:e+t,auth:``,host:``,search:``,hash:``}}if(!W(e,{acceptRelative:!0}))return t?K(t+e):Sn(e);let[,r=``,i,a=``]=e.replace(/\\/g,`/`).match(/^[\s\0]*([\w+.-]{2,}:)?\/\/([^/@]+@)?(.*)/)||[],[,o=``,s=``]=a.match(/([^#/?]*)(.*)?/)||[];r===`file:`&&(s=s.replace(/\/(?=[A-Za-z]:)/,``));let{pathname:c,search:l,hash:u}=Sn(s);return{protocol:r.toLowerCase(),auth:i?i.slice(0,Math.max(0,i.length-1)):``,host:o,pathname:c,search:l,hash:u,[xn]:!r}}function Sn(e=``){let[t=``,n=``,r=``]=(e.match(/([^#?]*)(\?[^#]*)?(#.*)?/)||[]).splice(1);return{pathname:t,search:n,hash:r}}function Cn(e){let t=e.pathname||``,n=e.search?(e.search.startsWith(`?`)?``:`?`)+e.search:``,r=e.hash||``,i=e.auth?e.auth+`@`:``,a=e.host||``;return(e.protocol||e[xn]?(e.protocol||``)+`//`:``)+i+a+t+n+r}function wn(e){if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null||Symbol.iterator in e?!1:Symbol.toStringTag in e?Object.prototype.toString.call(e)===`[object Module]`:!0}function Tn(e,t,n=`.`,r){if(!wn(t))return Tn(e,{},n,r);let i={...t};for(let t of Object.keys(e)){if(t===`__proto__`||t===`constructor`)continue;let a=e[t];a!=null&&(r&&r(i,t,a,n)||(Array.isArray(a)&&Array.isArray(i[t])?i[t]=[...a,...i[t]]:wn(a)&&wn(i[t])?i[t]=Tn(a,i[t],(n?`${n}.`:``)+t.toString(),r):i[t]=a))}return i}function En(e){return(...t)=>t.reduce((t,n)=>Tn(t,n,``,e),{})}var Dn=En(),On=/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,kn=/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,An=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/;function jn(e,t){if(e===`__proto__`||e===`constructor`&&t&&typeof t==`object`&&`prototype`in t){Mn(e);return}return t}function Mn(e){console.warn(`[destr] Dropping "${e}" key to prevent prototype pollution.`)}function Nn(e,t={}){if(typeof e!=`string`)return e;if(e[0]===`"`&&e[e.length-1]===`"`&&e.indexOf(`\\`)===-1)return e.slice(1,-1);let n=e.trim();if(n.length<=9)switch(n.toLowerCase()){case`true`:return!0;case`false`:return!1;case`undefined`:return;case`null`:return null;case`nan`:return NaN;case`infinity`:return 1/0;case`-infinity`:return-1/0}if(!An.test(e)){if(t.strict)throw SyntaxError(`[destr] Invalid JSON`);return e}try{if(On.test(e)||kn.test(e)){if(t.strict)throw Error(`[destr] Possible prototype pollution`);return JSON.parse(e,jn)}return JSON.parse(e)}catch(n){if(t.strict)throw n;return e}}function Pn(e,t){try{return t in e}catch{return!1}}var Fn=class extends Error{static __h3_error__=!0;statusCode=500;fatal=!1;unhandled=!1;statusMessage;data;cause;constructor(e,t={}){super(e,t),t.cause&&!this.cause&&(this.cause=t.cause)}toJSON(){let e={message:this.message,statusCode:Bn(this.statusCode,500)};return this.statusMessage&&(e.statusMessage=zn(this.statusMessage)),this.data!==void 0&&(e.data=this.data),e}};function In(e){if(typeof e==`string`)return new Fn(e);if(Ln(e))return e;let t=new Fn(e.message??e.statusMessage??``,{cause:e.cause||e});if(Pn(e,`stack`))try{Object.defineProperty(t,"stack",{get(){return e.stack}})}catch{try{t.stack=e.stack}catch{}}if(e.data&&(t.data=e.data),e.statusCode?t.statusCode=Bn(e.statusCode,t.statusCode):e.status&&(t.statusCode=Bn(e.status,t.statusCode)),e.statusMessage?t.statusMessage=e.statusMessage:e.statusText&&(t.statusMessage=e.statusText),t.statusMessage){let e=t.statusMessage;zn(t.statusMessage)!==e&&console.warn("[h3] Please prefer using `message` for longer error messages instead of `statusMessage`. In the future, `statusMessage` will be sanitized by default.")}return e.fatal!==void 0&&(t.fatal=e.fatal),e.unhandled!==void 0&&(t.unhandled=e.unhandled),t}function Ln(e){return e?.constructor?.__h3_error__===!0}var Rn=/[^\u0009\u0020-\u007E]/g;function zn(e=``){return e.replace(Rn,``)}function Bn(e,t=200){return!e||(typeof e==`string`&&(e=Number.parseInt(e,10)),e<100||e>999)?t:e}globalThis.Headers,globalThis.Response;var q=()=>P()?.$router;function Vn(e){let t=e.scope,n=je();for(;n;){if(n===t)return!0;n=n.parent}return!1}var Hn=(()=>{if(ae()){let e=r();if(!e||Vn(e))return se(Nt,P()._route)}return P()._route});function Un(e){return e}var Wn=()=>{try{if(P()._processingMiddleware)return!0}catch{return!1}return!1},Gn=(e,t)=>{e||=`/`;let n=typeof e==`string`?e:`path`in e?Kn(e):q().resolve(e).href;if(t?.open){let{protocol:e}=new URL(n,window.location.href);if(e&&cn(e))throw Pt.NUXT_E2002({toPath:n,protocol:e});let{target:r=`_blank`,windowFeatures:i={}}=t.open,a=[];for(let[e,t]of Object.entries(i))t!==void 0&&a.push(`${e.toLowerCase()}=${t}`);return open(n,r,a.join(`, `)),Promise.resolve()}let r=W(n,{acceptRelative:!0}),i=t?.external||r;if(i){if(!t?.external)throw Pt.NUXT_E2001({toPath:n});let{protocol:e}=new URL(n,window.location.href);if(e&&cn(e))throw Pt.NUXT_E2002({toPath:n,protocol:e})}let a=Wn();if(!i&&a){if(t?.replace){if(typeof e==`string`){let{pathname:t,search:n,hash:r}=K(e);return{path:t,...n&&{query:U(n)},...r&&{hash:r},replace:!0}}return{...e,replace:!0}}return e}let o=q(),s=P();if(i)return s._scope.stop(),t?.replace?location.replace(n):location.href=n,a?s.isHydrating?new Promise(()=>{}):!1:Promise.resolve();let c=typeof e==`string`?qn(e):e;return t?.replace?o.replace(c):o.push(c)};function Kn(e){return hn(e.path||``,e.query||{})+(e.hash||``)}function qn(e){let t=K(e);return Yt(Xt(t.pathname))+t.search+t.hash}var Jn=`__nuxt_error`,Yn=()=>Oe(P().payload,`error`),Xn=e=>{let t=er(e);try{let e=Yn();P().hooks.callHook(`app:error`,t),e.value||=t}catch{throw t}return t},Zn=(e,t)=>{let n=e.callHook(`app:error`,er(t));return g.NUXT_E1012({userAgent:navigator.userAgent,cause:t}),n},Qn=async(e={})=>{let t=P(),n=Yn();t.callHook(`app:error:cleared`,e),e.redirect&&await q().replace(e.redirect),n.value=void 0},$n=e=>!!e&&typeof e==`object`&&`__nuxt_error`in e,er=e=>{typeof e!=`string`&&e.statusText&&(e.message??=e.statusText);let t=In(e);return Object.defineProperty(t,Jn,{value:!0,configurable:!1,writable:!1}),Object.defineProperty(t,"status",{get:()=>t.statusCode,configurable:!0}),Object.defineProperty(t,"statusText",{get:()=>t.statusMessage,configurable:!0}),t},tr=class extends Error{constructor(e,t){super(e,t),this.name=`FetchError`,t?.cause&&!this.cause&&(this.cause=t.cause)}};function nr(e){let t=e.error?.message||e.error?.toString()||``,n=e.request?.method||e.options?.method||`GET`,r=e.request?.url||String(e.request)||`/`,i=new tr(`${`[${n}] ${JSON.stringify(r)}`}: ${e.response?`${e.response.status} ${e.response.statusText}`:`<no response>`}${t?` ${t}`:``}`,e.error?{cause:e.error}:void 0);for(let t of[`request`,`options`,`response`])Object.defineProperty(i,t,{get(){return e[t]}});for(let[t,n]of[[`data`,`_data`],[`status`,`status`],[`statusCode`,`status`],[`statusText`,`statusText`],[`statusMessage`,`statusText`]])Object.defineProperty(i,t,{get(){return e.response&&e.response[n]}});return i}var rr=new Set(Object.freeze([`PATCH`,`POST`,`PUT`,`DELETE`]));function ir(e=`GET`){return rr.has(e.toUpperCase())}function ar(e){if(e===void 0)return!1;let t=typeof e;return t===`string`||t===`number`||t===`boolean`||t===null?!0:t===`object`?Array.isArray(e)?!0:e.buffer||e instanceof FormData||e instanceof URLSearchParams?!1:e.constructor&&e.constructor.name===`Object`||typeof e.toJSON==`function`:!1}var or=new Set([`image/svg`,`application/xml`,`application/xhtml`,`application/html`]),sr=/^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i;function cr(e=``){if(!e)return`json`;let t=e.split(`;`).shift()||``;return sr.test(t)?`json`:t===`text/event-stream`?`stream`:or.has(t)||t.startsWith(`text/`)?`text`:`blob`}function lr(e,t,n,r){let i=ur(t?.headers??e?.headers,n?.headers,r),a;return(n?.query||n?.params||t?.params||t?.query)&&(a={...n?.params,...n?.query,...t?.params,...t?.query}),{...n,...t,query:a,params:a,headers:i}}function ur(e,t,n){if(!t)return new n(e);let r=new n(t);if(e)for(let[t,i]of Symbol.iterator in e||Array.isArray(e)?e:new n(e))r.set(t,i);return r}async function J(e,t){if(t)if(Array.isArray(t))for(let n of t)await n(e);else await t(e)}var dr=new Set([408,409,425,429,500,502,503,504]),fr=new Set([101,204,205,304]);function pr(e={}){let{fetch:t=globalThis.fetch,Headers:n=globalThis.Headers,AbortController:r=globalThis.AbortController}=e;async function i(e){let t=e.error&&e.error.name===`AbortError`&&!e.options.timeout||!1;if(e.options.retry!==!1&&!t){let t;t=typeof e.options.retry==`number`?e.options.retry:+!ir(e.options.method);let n=e.response&&e.response.status||500;if(t>0&&(Array.isArray(e.options.retryStatusCodes)?e.options.retryStatusCodes.includes(n):dr.has(n))){let n=typeof e.options.retryDelay==`function`?e.options.retryDelay(e):e.options.retryDelay||0;return n>0&&await new Promise(e=>setTimeout(e,n)),a(e.request,{...e.options,retry:t-1})}}let n=nr(e);throw Error.captureStackTrace&&Error.captureStackTrace(n,a),n}let a=async function(a,o={}){let s={request:a,options:lr(a,o,e.defaults,n),response:void 0,error:void 0};if(s.options.method&&(s.options.method=s.options.method.toUpperCase()),s.options.onRequest&&(await J(s,s.options.onRequest),s.options.headers instanceof n||(s.options.headers=new n(s.options.headers||{}))),typeof s.request==`string`&&(s.options.baseURL&&(s.request=pn(s.request,s.options.baseURL)),s.options.query&&(s.request=hn(s.request,s.options.query),delete s.options.query),`query`in s.options&&delete s.options.query,`params`in s.options&&delete s.options.params),s.options.body&&ir(s.options.method))if(ar(s.options.body)){let e=s.options.headers.get(`content-type`);typeof s.options.body!=`string`&&(s.options.body=e===`application/x-www-form-urlencoded`?new URLSearchParams(s.options.body).toString():JSON.stringify(s.options.body)),e||s.options.headers.set(`content-type`,`application/json`),s.options.headers.has(`accept`)||s.options.headers.set(`accept`,`application/json`)}else(`pipeTo`in s.options.body&&typeof s.options.body.pipeTo==`function`||typeof s.options.body.pipe==`function`)&&(`duplex`in s.options||(s.options.duplex=`half`));let c;if(!s.options.signal&&s.options.timeout){let e=new r;c=setTimeout(()=>{let t=Error(`[TimeoutError]: The operation was aborted due to timeout`);t.name=`TimeoutError`,t.code=23,e.abort(t)},s.options.timeout),s.options.signal=e.signal}try{s.response=await t(s.request,s.options)}catch(e){return s.error=e,s.options.onRequestError&&await J(s,s.options.onRequestError),await i(s)}finally{c&&clearTimeout(c)}if((s.response.body||s.response._bodyInit)&&!fr.has(s.response.status)&&s.options.method!==`HEAD`){let e=(s.options.parseResponse?`json`:s.options.responseType)||cr(s.response.headers.get(`content-type`)||``);switch(e){case`json`:{let e=await s.response.text(),t=s.options.parseResponse||Nn;s.response._data=t(e);break}case`stream`:s.response._data=s.response.body||s.response._bodyInit;break;default:s.response._data=await s.response[e]()}}return s.options.onResponse&&await J(s,s.options.onResponse),!s.options.ignoreResponseError&&s.response.status>=400&&s.response.status<600?(s.options.onResponseError&&await J(s,s.options.onResponseError),await i(s)):s.response},o=async function(e,t){return(await a(e,t))._data};return o.raw=a,o.native=(...e)=>t(...e),o.create=(t={},n={})=>pr({...e,...n,defaults:{...e.defaults,...n.defaults,...t}}),o}var Y=(function(){if(typeof globalThis<`u`)return globalThis;if(typeof self<`u`)return self;if(typeof window<`u`)return window;if(typeof global<`u`)return global;throw Error(`unable to locate global object`)})(),mr=Y.fetch?(...e)=>Y.fetch(...e):()=>Promise.reject(Error(`[ofetch] global.fetch is not supported!`)),hr=Y.Headers,gr=Y.AbortController,_r=pr({fetch:mr,Headers:hr,AbortController:gr}),vr=()=>window?.__NUXT__?.config||window?.useNuxtApp?.().payload?.config,yr=()=>vr().app,br=()=>yr().baseURL,xr=()=>yr().buildAssetsDir,Sr=(...e)=>yn(Cr(),xr(),...e),Cr=(...e)=>{let t=yr(),n=t.cdnURL||t.baseURL;return e.length?yn(n,...e):n};globalThis.__buildAssetsURL=Sr,globalThis.__publicAssetsURL=Cr,globalThis.$fetch||(globalThis.$fetch=_r.create({baseURL:br()}));var wr=globalThis.$fetch;`global`in globalThis||(globalThis.global=globalThis);function Tr(e,t){t.push(fe),e.vueApp.use(t);let n=!0,r=()=>{n=!1,t.render()};t.hooks?.hook(`dom:beforeRender`,e=>{e.shouldRender=!n}),e.hooks.hook(`page:start`,()=>{n=!0}),e.hooks.hook(`page:finish`,()=>{e.isHydrating||r()}),e.hooks.hook(`app:error`,r),e.hooks.hook(`app:suspense:resolve`,r);let i=t.push.bind(t);t.push=((t,n)=>{let r=i(t,n),a=r.dispose.bind(r);return r.dispose=()=>{let t=e[`~transitionPromise`];t?t.finally(a):a()},r})}function Er(e,t){if(typeof t==`function`&&t.key&&e.plugins.has(t.key))return;let n=typeof t==`function`?t(e):t,r=n.key||String(e.plugins.size+1);if(!e.plugins.get(r)){e.plugins.set(r,n);for(let t in n.hooks||{})e.hooks?.hook(t,n.hooks[t])}}function Dr(e,t={}){let n=!t.document,r=new Map,i={_entryCount:1,_h:0,plugins:new Map,resolvedOptions:t,ssr:n,entries:r,hooks:void 0,render:()=>e(i),use:e=>Er(i,e),push(e,t){let a=t?._index??i._entryCount++,o=t?{...t}:{};delete o.head,delete o.onRendered,delete o._index;let s={_i:a,input:e,options:o};return r.set(a,s),{_i:a,dispose(){r.delete(a)},patch(e){n?(s.input=e,delete s._tags):s._pending=e,r.has(a)||r.set(a,s)}}}};return t.init?.forEach(e=>e&&i.push(e)),i}function Or(e,t,n){let r=e.push,i=e;return i.ssr=!1,i.hooks=t,i.dirty=!!i.dirty,i.use=e=>Er(i,e),i.render=()=>n(i),i.invalidate=()=>{for(let e of i.entries.values())delete e._tags;i.dirty=!0,t.callHook(`entries:updated`,i)},i.push=(n,a)=>{let o=a?.onRendered?t.hook(`dom:rendered`,a.onRendered):void 0,s=r(n,a),c=e.entries.get(s._i);return c&&(c._o=n),i.dirty=!0,t.callHook(`entries:updated`,i),{_i:s._i,patch(e){s.patch(e),i.dirty=!0,t.callHook(`entries:updated`,i)},dispose(){o?.(),e.entries.has(s._i)&&(s.dispose(),i.invalidate())}}},t.hook(`entries:updated`,()=>{i.render()}),i}var kr=/\s+/;function Ar(e={}){return t=>Pr(t,e)}function jr(e){for(let t of e.entries.values())if(t._pending!==void 0)return!0;return!1}function Mr(e){for(let t in e._s)e._s[t]();for(let t in e._p)e._p[t]();e._s={},e._p={},e._e.clear(),e._l.clear()}function Nr(e,t){let n={_d:t,_t:t.title,_e:new Map([[`htmlAttrs`,t.documentElement],[`bodyAttrs`,t.body]]),_p:{},_s:{},_l:new Map};for(let e of[...t.body.children,...t.head.children]){let t=e.tagName.toLowerCase();if(!De.has(t))continue;let r={innerHTML:e.innerHTML};for(let t of e.getAttributeNames())r[t]=e.getAttribute(t);let i=me({tag:t,props:{}},r);i.key=e.getAttribute(`data-hid`)||void 0;let a=ue(i)||Te(i),o=a,s=1;for(;n._e.has(o);)o=`${a}:${s++}`;n._e.set(o,e)}for(let t of e.entries.values())if(t._o!==void 0){let e=t._o;for(let t of[`bodyAttrs`,`htmlAttrs`]){let r=e[t]?.class;if(typeof r==`string`){let e=n._e.get(t);for(let i of r.split(kr))i&&(n._p[`${t}:attr:class:${i}`]=()=>e.classList.remove(i))}}}return n}function Pr(e,t={}){let n=t.document||e.resolvedOptions.document,r=e._dom,i=!!r&&r._d!==n;if(!n||r&&!i&&!e.dirty&&!jr(e)||e._du)return!1;let a=n.defaultView;e._du=!0;let o=!1;try{let r=function(e,t,n,r){let i=`${e}:${t}`;d._s[i]=!r&&d._p[i]||n,delete d._p[i]},i=function(e){let t=d._p[e];return delete d._p[e],t},s=function(e,t,n,i,a,o){let s=`event:${t}`,c=`${e}:${s}`,l=d._l.get(c);if(l&&l[0]===o&&l[1]===n&&l[2]===i){r(e,s,l[4]);return}l?.[4]();let u=`data-${t}`,f=(e=>i.call(a,e)),p=()=>{o.removeEventListener(n,f),a.getAttribute(u)===``&&a.removeAttribute(u),d._l.get(c)?.[3]===f&&d._l.delete(c)};o.addEventListener(n,f),d._l.set(c,[o,n,i,f,p]),a.setAttribute(u,``),r(e,s,p,!0)},c=function({id:e,$el:t,tag:n}){let o=n.tag.endsWith(`Attrs`);if(d._e.set(e,t),!o){let a=n.textContent;a!=null&&a!==``&&(a!==t.textContent&&(t.textContent=a),r(e,`text`,()=>{t.textContent===a&&(t.textContent=``)},!0));let o=n.innerHTML;o!=null&&o!==``&&(o!==t.innerHTML&&(t.innerHTML=o),r(e,`html`,()=>{t.innerHTML===o&&(t.innerHTML=``)},!0));let s=`${e}:el`;d._s[s]=i(s)||(()=>{t?.remove(),d._e.delete(e)})}for(let r in n.props){let o=n.props[r];if(r[0]===`o`&&r[1]===`n`&&typeof o==`function`){let i=r.slice(2);t?.dataset?.[`${r}fired`]&&o.call(t,new((a?.Event)||Event)(i)),s(e,r,i,o,t,n.tag===`bodyAttrs`&&a?a:t);continue}let c=`${e}:attr:${r}`;if(r===`class`&&o)for(let e of o){let n=`${c}:${e}`;d._s[n]=i(n)||(()=>t.classList.remove(e)),t.classList.contains(e)||t.classList.add(e)}else if(r===`style`&&o)for(let[e,n]of o){let r=`${c}:${e}`;d._s[r]=i(r)||(()=>t.style.removeProperty(e)),t.style.setProperty(e,n)}else o!==!1&&o!==null&&(t.getAttribute(r)!==o&&t.setAttribute(r,o===!0?``:String(o)),d._s[c]=i(c)||(()=>t.removeAttribute(r)))}},l={shouldRender:!0,tags:[]};if(ge(e,`dom:beforeRender`,l),!l.shouldRender)return!1;let u=e._dom;u?._d!==n&&(u&&Mr(u),u=void 0),u?u._p=u._s:u=Nr(e,n),u._s={};let d=u,f=[],p={};e.dirty=!1;let m=Se(e,t.tagWeight?{tagWeight:t.tagWeight}:void 0),h=[],g={};for(let e of m){let t=g[e._d]||0,i=(t?`${e._d}:${t}`:e._d)||e._h,a={tag:e,id:i,shouldRender:!0};if(e.tag===`meta`&&e._d&&Ae(e._d)&&(g[e._d]=t+1),h.push(a),e.tag===`title`){n.title=e.textContent,r(`title`,``,()=>n.title=d._t);continue}a.$el=d._e.get(i),a.$el?c(a):De.has(e.tag)&&f.push(a)}for(let e of f)e.$el=n.createElement(e.tag.tag),c(e),(p[e.tag.tagPosition||`head`]??=n.createDocumentFragment()).appendChild(e.$el);p.head&&n.head.appendChild(p.head),p.bodyOpen&&n.body.insertBefore(p.bodyOpen,n.body.firstChild),p.bodyClose&&n.body.appendChild(p.bodyClose);for(let e in d._p)d._p[e]();e._dom=d,o=!0,ge(e,`dom:rendered`,{renders:h})}catch(t){throw e.dirty=!0,t}finally{e._du=!1}return o&&(e.dirty||jr(e))&&Pr(e,t),o}var Fr=e=>typeof e.tagPriority==`number`?e.tagPriority:100+(Ce[e.tagPriority]||0);function Ir(e={}){e.document=e.document||(typeof window<`u`?document:void 0);let t=e.render||Ar({document:e.document}),n=Or(Dr(t,{document:e.document,propResolvers:e.propResolvers,_tagWeight:Fr,init:[]}),_e(e.hooks),t);return e.plugins?.forEach(e=>n.use(e)),e.init?.forEach(e=>e&&n.push(e)),n}function X(e,t){return t&&typeof e==`function`&&(e.key=t),e}var Lr=/\\/g,Rr=/</g,zr=/"/g,Br=/%\w+(?:\.\w+)?/g,Vr=`%separator`;function Hr(e,t,n=!1){let r;if(t===`s`||t===`pageTitle`)r=e.pageTitle;else if(t.includes(`.`)){let n=t.indexOf(`.`);r=e[t.substring(0,n)]?.[t.substring(n+1)]}else r=e[t];if(r!==void 0)return n?(r||``).replace(Lr,`\\\\`).replace(Rr,`\\u003C`).replace(zr,`\\"`):r||``}function Z(e,t,n,r=!1){if(typeof e!=`string`||!e.includes(`%`))return e;let i=e;try{i=decodeURI(e)}catch{}let a=i.match(Br);if(!a)return e;let o=e.includes(Vr);return e=e.replace(Br,e=>{if(e===Vr||!a.includes(e))return e;let n=Hr(t,e.slice(1),r);return n===void 0?e:n}).trim(),o&&(e=e.split(Vr).map(e=>e.trim()).filter(e=>e!==``).join(n?` ${n} `:` `)),e}var Ur=(e,t)=>e._w===t._w?e._p-t._p:e._w-t._w,Wr=e=>e.includes(`:key`)?e:e.split(`:`).join(`:key:`),Gr=X({key:`aliasSorting`,hooks:{"tags:resolve":e=>{let t=!1;for(let n of e.tags){let r=n.tagPriority;if(!r)continue;let i=String(r);if(i.startsWith(`before:`)){let r=Wr(i.slice(7)),a=e.tagMap.get(r);a&&(typeof a.tagPriority==`number`&&(n.tagPriority=a.tagPriority),n._p=a._p-1,t=!0)}else if(i.startsWith(`after:`)){let r=Wr(i.slice(6)),a=e.tagMap.get(r);a&&(typeof a.tagPriority==`number`&&(n.tagPriority=a.tagPriority),n._p=a._p+1,t=!0)}}t&&(e.tags=e.tags.sort(Ur))}}}),Kr=X({key:`deprecations`,hooks:{"entries:normalize":({tags:e})=>{for(let t of e)t.props.children&&(t.innerHTML=t.props.children,delete t.props.children),t.props.hid&&(t.key=t.props.hid,delete t.props.hid),t.props.vmid&&(t.key=t.props.vmid,delete t.props.vmid),`body`in t.props&&(t.props.body&&(t.tagPosition=`bodyClose`),delete t.props.body),t.props.renderPriority!=null&&(t.tagPriority=t.props.renderPriority,delete t.props.renderPriority)}}});function Q(e){return typeof e?.then==`function`}function qr(e){if(typeof e==`function`)return e;if(Q(e))return Promise.resolve(e).then(qr);if(Array.isArray(e)){let t=e.map(qr);return t.some(Q)?Promise.all(t):e}if(e?.constructor===Object){let t=Object.keys(e),n=t.map(t=>qr(e[t]));if(n.some(Q))return Promise.all(n).then(e=>Object.fromEntries(t.map((t,n)=>[t,e[n]])))}return e}var Jr=X(e=>{let t=new WeakMap;return{key:`promises`,hooks:{"entries:resolve":n=>{for(let r=n.entries.length-1;r>=0;r--){let i=n.entries[r],a=i.input;if(t.get(i)===a){n.entries.splice(r,1);continue}let o=qr(a);if(!Q(o)){t.delete(i);continue}t.set(i,a),n.entries.splice(r,1),Promise.resolve(o).then(n=>{t.get(i)===a&&(t.delete(i),i.input=n,delete i._tags,e.invalidate?.())},()=>{t.get(i)===a&&t.delete(i)})}}}}},`promises`),Yr={meta:`content`,link:`href`,htmlAttrs:`lang`},Xr=[`innerHTML`,`textContent`],Zr=X(e=>({key:`template-params`,hooks:{"tags:resolve":({tagMap:t,tags:n})=>{let r=t.get(`templateParams`)?.props||{},i=r.separator||`|`;delete r.separator,r.pageTitle=Z(r.pageTitle||e._title||``,r,i);for(let e of n){if(e.processTemplateParams===!1)continue;let t=Yr[e.tag];if(t&&typeof e.props[t]==`string`)e.props[t]=Z(e.props[t],r,i);else if(e.processTemplateParams||e.tag===`titleTemplate`||e.tag===`title`)for(let t of Xr)typeof e[t]==`string`&&(e[t]=Z(e[t],r,i,e.tag===`script`&&typeof e.props.type==`string`&&e.props.type.endsWith(`json`)))}e._templateParams=r,e._separator=i},"tags:afterResolve":({tagMap:t})=>{let n=t.get(`title`);n?.textContent&&n.processTemplateParams!==!1&&(n.textContent=Z(n.textContent,e._templateParams,e._separator))}}}),`template-params`);function Qr(e={}){let t=Ar(),n,r=0;return n=Ir({render:()=>{let e=++r;setTimeout(()=>{e===r&&t(n)},0)},...e}),n.install=be(n),n}var $r={disableDefaults:!0,plugins:[Kr,Jr,Zr,Gr]},ei=E({name:`nuxt:head`,enforce:`pre`,setup(e){Tr(e,Qr($r))}}),ti=u({docsBase:ee,reporters:b}),ni={},ri=(e,t)=>[],ii=ri,ai=e=>ni.sensitive?Dn({},...ri(``,e).map(e=>e.data).reverse()):Dn({},...ii(``,typeof e==`string`?e.toLowerCase():e).map(e=>e.data).reverse()),oi=`modulepreload`,si=function(e,t){return new URL(e,t).href},ci={},li=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=si(t,n),t=s(t),t in ci)return;ci[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:oi,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},ui=wr,di=ai,fi;function pi(){let e;return e=ui(Sr(`builds/meta/${Re().app.buildId}.json`),{responseType:`json`}).then(e=>{if(!e||typeof e!=`object`||!Array.isArray(e.prerendered))throw ti.NUXT_E5004();return e}),fi=e,e.catch(t=>{fi===e&&(fi=void 0),ti.NUXT_E5002({cause:t})}),e}function mi(){return fi||pi()}function hi(e){let t=typeof e==`string`?e:e.path;try{return di(t)}catch(e){return ti.NUXT_E5003({path:t,cause:e}),{}}}var gi=[Un(e=>{let t=hi({path:e.path});if(t.redirect){let n=t.redirect.includes(`#`)?t.redirect:t.redirect+e.hash;return W(n,{acceptRelative:!0})?(window.location.href=n,!1):n}})];function _i(e){let t=e&&typeof e==`object`?e:{};typeof e==`object`&&(e=Cn({pathname:e.path||``,search:en(e.query||{}),hash:e.hash||``}));let n=new URL(e.toString(),window.location.href);return{path:n.pathname,fullPath:e,query:U(n.search),hash:n.hash,params:t.params||{},name:void 0,matched:t.matched||[],redirectedFrom:void 0,meta:t.meta||{},href:e}}var vi=E({name:`nuxt:router`,enforce:`pre`,setup(e){let t=mn(window.location.pathname,Re().app.baseURL)+window.location.search+window.location.hash,n=[],r={"navigate:before":[],"resolve:before":[],"navigate:after":[],error:[]},i=(e,t)=>(r[e].push(t),()=>{let n=r[e].indexOf(t);n!==-1&&r[e].splice(n,1)}),a=Re().app.baseURL,o=Ne(_i(t)),s=0;async function c(t,n){let i=++s;try{let l=_i(t);for(let e of r[`navigate:before`]){let t=await e(l,o);if(i!==s||t===!1||t instanceof Error)return;if(typeof t==`string`&&t.length)return await c(t,!0)}for(let e of r[`resolve:before`])if(await e(l,o),i!==s)return;Object.assign(o,l),window.history[n?`replaceState`:`pushState`]({},``,vn(a,l.fullPath)),e.isHydrating||await e.runWithContext(Qn);for(let e of r[`navigate:after`])await e(l,o)}catch(e){for(let t of r.error)await t(e)}}let l={currentRoute:N(()=>o),isReady:()=>Promise.resolve(),options:{},install:()=>Promise.resolve(),push:e=>c(e,!1),replace:e=>c(e,!0),back:()=>window.history.go(-1),go:e=>window.history.go(e),forward:()=>window.history.go(1),beforeResolve:e=>i(`resolve:before`,e),beforeEach:e=>i(`navigate:before`,e),afterEach:e=>i(`navigate:after`,e),onError:e=>i(`error`,e),resolve:_i,addRoute:(e,t)=>{n.push(t)},getRoutes:()=>n,hasRoute:e=>n.some(t=>t.name===e),removeRoute:e=>{let t=n.findIndex(t=>t.name===e);t!==-1&&n.splice(t,1)}};e.vueApp.component(`RouterLink`,F({functional:!0,props:{to:{type:String,required:!0},custom:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:String},setup:(e,{slots:t})=>{let n=()=>c(e.to,e.replace);return()=>{let r=l.resolve(e.to);return e.custom?t.default?.({href:e.to,navigate:n,route:r}):f(`a`,{href:e.to,onClick:e=>(e.preventDefault(),n())},t)}}})),window.addEventListener(`popstate`,e=>{let t=e.target.location;l.replace(t.href.replace(t.origin,``))}),e._route=o,e._middleware||={global:[],named:{}};let u=e.payload.state._layout,d=e.payload.state._layoutProps;return e.hooks.hookOnce(`app:created`,async()=>{l.beforeEach(async(t,n)=>{t.meta=Ne(t.meta||{}),e.isHydrating&&u&&!he(t.meta.layout)&&(t.meta.layout=u,t.meta.layoutProps=d),e._processingMiddleware=!0;{let r=new Set([...gi,...e._middleware.global]),i=hi({path:t.path});if(i.appMiddleware)for(let t in i.appMiddleware){let n=e._middleware.named[t];n&&(i.appMiddleware[t]?r.add(n):r.delete(n))}for(let i of r){let r=await e.runWithContext(()=>i(t,n));if(r!==!0&&(r||r===!1))return r}}}),l.afterEach(()=>{delete e._processingMiddleware}),await l.replace(t),bn(o.fullPath,t)||await e.runWithContext(()=>Gn(o.fullPath))}),{provide:{route:o,router:l}}}}),yi=globalThis.requestIdleCallback||(e=>{let t=Date.now(),n={didTimeout:!1,timeRemaining:()=>Math.max(0,50-(Date.now()-t))};return setTimeout(()=>{e(n)},1)}),bi=globalThis.cancelIdleCallback||(e=>{clearTimeout(e)}),xi=e=>{let t=P();t.isHydrating?t.hooks.hookOnce(`app:suspense:resolve`,()=>{yi(()=>e())}):yi(()=>e())},Si=[ei,vi,E(()=>{let e=q();xi(()=>{e.beforeResolve(async()=>{await new Promise(e=>{setTimeout(e,100),requestAnimationFrame(()=>{setTimeout(e,0)})})})})}),E(e=>{let t;async function n(){let r;try{r=await mi()}catch(e){let t=e;if(!(`status`in t&&(t.status===404||t.status===403)))throw t}t&&clearTimeout(t),t=setTimeout(n,Fe);try{let n=await wr(Sr(`builds/latest.json`)+`?${Date.now()}`);n.id!==r?.id&&(e.hooks.callHook(`app:manifest:update`,n),t&&clearTimeout(t))}catch{}}xi(()=>{t=setTimeout(n,Fe)})}),E({name:`nuxt:global-components`})],Ci={class:`master-list`},wi={key:0,class:`empty-state`},Ti=[`onClick`],Ei={class:`list-item-header`},Di={class:`list-item-name`},Oi={class:`list-item-meta`},ki=Object.assign(F({__name:`QueryList`,props:{queries:{},selectedId:{}},emits:[`select`],setup(e,{emit:n}){let r=n;function i(e){return e===`success`?`success`:e===`error`?`error`:`pending`}return(n,a)=>(x(),_(`div`,Ci,[e.queries.length===0?(x(),_(`div`,wi,[...a[0]||=[t(`div`,{class:`empty-state-icon`},`Q`,-1),t(`div`,null,`No active queries`,-1)]])):(x(!0),_(s,{key:1},O(e.queries,n=>(x(),_(`div`,{key:n.id,class:v([`list-item`,{selected:e.selectedId===n.id}]),onClick:e=>r(`select`,n.id)},[t(`div`,Ei,[t(`span`,Di,M(n.name),1),t(`span`,{class:v([`badge`,i(n.status)])},M(n.status),3)]),t(`div`,Oi,[t(`span`,null,M(new Date(n.lastUpdated).toLocaleTimeString()),1)])],10,Ti))),128))]))}}),{__name:`QueryList`}),$=Object.assign(F({__name:`JsonViewer`,props:{data:{},maxHeight:{}},setup(e){let t=e,r=N(()=>{if(t.data===void 0)return`undefined`;if(t.data===null)return`null`;try{return JSON.stringify(t.data,(e,t)=>typeof t==`bigint`?t.toString()+`n`:t,2)}catch{return`[Circular]`}});return(t,i)=>(x(),_(`div`,{class:`json-viewer`,style:n({maxHeight:e.maxHeight||`200px`})},M(r.value),5))}}),{__name:`JsonViewer`}),Ai={class:`detail-panel`},ji={key:0,class:`empty-state`},Mi={class:`detail-section`},Ni={class:`detail-row`},Pi={class:`detail-value`,style:{color:`var(--accent)`}},Fi={class:`detail-row`},Ii={class:`detail-row`},Li={class:`detail-value`},Ri={class:`detail-section`},zi={class:`options-grid`},Bi={class:`option-item`},Vi={key:0,width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},Hi={key:1,width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},Ui={class:`option-item`},Wi={key:0,width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},Gi={key:1,width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},Ki={class:`option-item`},qi={key:0,width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},Ji={key:1,width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},Yi={class:`option-item`},Xi={class:`detail-value`},Zi={class:`detail-section`},Qi={class:`json-viewer`,style:{"max-height":`60px`}},$i={class:`detail-section`},ea={class:`detail-section`},ta={key:1,class:`json-viewer`},na={class:`json-string`},ra=Object.assign(F({__name:`QueryDetail`,props:{query:{}},setup(e){let n=e,r=N(()=>n.query?n.query.status===`success`?`success`:n.query.status===`error`?`error`:`pending`:``),i=N(()=>n.query?new Date(n.query.lastUpdated).toLocaleTimeString():``),a=N(()=>n.query?.options||{});return(n,o)=>(x(),_(`div`,Ai,[e.query?(x(),_(s,{key:1},[t(`div`,Mi,[o[4]||=t(`div`,{class:`detail-title`},`Query Info`,-1),t(`div`,Ni,[o[1]||=t(`span`,{class:`detail-label`},`Name`,-1),t(`span`,Pi,M(e.query.name),1)]),t(`div`,Fi,[o[2]||=t(`span`,{class:`detail-label`},`Status`,-1),t(`span`,{class:v([`badge`,r.value])},M(e.query.status),3)]),t(`div`,Ii,[o[3]||=t(`span`,{class:`detail-label`},`Last Updated`,-1),t(`span`,Li,M(i.value),1)])]),t(`div`,Ri,[o[14]||=t(`div`,{class:`detail-title`},`Options`,-1),t(`div`,zi,[t(`div`,Bi,[t(`span`,{class:v([`option-icon`,a.value.immediate?`enabled`:`disabled`])},[a.value.immediate?(x(),_(`svg`,Vi,[...o[5]||=[t(`polyline`,{points:`20 6 9 17 4 12`},null,-1)]])):(x(),_(`svg`,Hi,[...o[6]||=[t(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`},null,-1),t(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`},null,-1)]]))],2),o[7]||=t(`span`,null,`immediate`,-1)]),t(`div`,Ui,[t(`span`,{class:v([`option-icon`,a.value.server?`enabled`:`disabled`])},[a.value.server?(x(),_(`svg`,Wi,[...o[8]||=[t(`polyline`,{points:`20 6 9 17 4 12`},null,-1)]])):(x(),_(`svg`,Gi,[...o[9]||=[t(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`},null,-1),t(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`},null,-1)]]))],2),o[10]||=t(`span`,null,`server`,-1)]),t(`div`,Ki,[t(`span`,{class:v([`option-icon`,a.value.subscribe?`enabled`:`disabled`])},[a.value.subscribe?(x(),_(`svg`,qi,[...o[11]||=[t(`polyline`,{points:`20 6 9 17 4 12`},null,-1)]])):(x(),_(`svg`,Ji,[...o[12]||=[t(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`},null,-1),t(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`},null,-1)]]))],2),o[13]||=t(`span`,null,`subscribe`,-1)]),t(`div`,Yi,[t(`span`,Xi,`auth: `+M(a.value.auth||`optional`),1)])])]),t(`div`,Zi,[o[15]||=t(`div`,{class:`detail-title`},`Cache Key`,-1),t(`div`,Qi,M(e.query.id),1)]),t(`div`,$i,[o[16]||=t(`div`,{class:`detail-title`},`Arguments`,-1),m($,{data:e.query.args},null,8,[`data`])]),t(`div`,ea,[o[17]||=t(`div`,{class:`detail-title`},`Result`,-1),e.query.error?(x(),_(`div`,ta,[t(`span`,na,M(e.query.error),1)])):(x(),j($,{key:0,data:e.query.data},null,8,[`data`]))])],64)):(x(),_(`div`,ji,[...o[0]||=[t(`div`,null,`Select a query to view details`,-1)]]))]))}}),{__name:`QueryDetail`}),ia={class:`timeline`},aa={key:0,class:`empty-state`},oa=[`onClick`],sa={class:`timeline-header`},ca={class:`timeline-name`},la={class:`timeline-time`},ua={class:`timeline-meta`},da={class:`timeline-state`},fa={key:0,class:`badge optimistic`},pa={class:`timeline-details`},ma={style:{"margin-bottom":`8px`}},ha={key:0},ga={key:1},_a={class:`json-viewer`},va={class:`json-string`},ya=Object.assign(F({__name:`MutationTimeline`,props:{mutations:{},isExpanded:{type:Function}},emits:[`toggle`],setup(e,{emit:n}){let r=n;function i(e){return e===`success`?`success`:e===`error`?`error`:e===`optimistic`?`optimistic`:`pending`}function a(e){return e===void 0?`pending...`:`${e}ms`}function o(e){return new Date(e).toLocaleTimeString()}return(n,c)=>(x(),_(`div`,ia,[e.mutations.length===0?(x(),_(`div`,aa,[...c[0]||=[t(`div`,{class:`empty-state-icon`},`M`,-1),t(`div`,null,`No mutations yet`,-1),t(`div`,{style:{"font-size":`11px`,"margin-top":`4px`}},`Mutations will appear here when triggered`,-1)]])):(x(!0),_(s,{key:1},O(e.mutations,n=>(x(),_(`div`,{key:n.id,class:v([`timeline-item`,{expanded:e.isExpanded(n.id)}]),onClick:e=>r(`toggle`,n.id)},[t(`div`,sa,[t(`span`,ca,[n.type===`action`?(x(),_(s,{key:0},[p(`[Action] `)],64)):h(``,!0),p(` `+M(n.name),1)]),t(`span`,la,M(o(n.startedAt)),1)]),t(`div`,ua,[t(`div`,da,[n.hasOptimisticUpdate?(x(),_(`span`,fa,`OPT`)):h(``,!0),t(`span`,{class:v([`badge`,i(n.state)])},M(n.state),3)]),t(`span`,null,M(a(n.duration)),1)]),t(`div`,pa,[t(`div`,ma,[c[1]||=t(`div`,{class:`detail-title`},`Arguments`,-1),m($,{data:n.args},null,8,[`data`])]),n.state===`success`?(x(),_(`div`,ha,[c[2]||=t(`div`,{class:`detail-title`},`Result`,-1),m($,{data:n.result},null,8,[`data`])])):h(``,!0),n.state===`error`?(x(),_(`div`,ga,[c[3]||=t(`div`,{class:`detail-title`},`Error`,-1),t(`div`,_a,[t(`span`,va,M(n.error||`Unknown error`),1)])])):h(``,!0)])],10,oa))),128))]))}}),{__name:`MutationTimeline`}),ba={class:`waterfall-container`},xa={key:0,class:`waterfall-empty`},Sa={class:`waterfall-summary`},Ca={class:`summary-item`},wa={class:`summary-value`},Ta={class:`summary-item`},Ea={class:`summary-item`},Da={class:`waterfall-chart`},Oa=[`title`],ka={class:`waterfall-legend`},Aa={class:`legend-name`},ja={class:`legend-time`},Ma={key:0,class:`legend-details`},Na={key:0,class:`waterfall-error`},Pa=Object.assign(Me(F({__name:`AuthWaterfall`,props:{waterfall:{}},setup(e){let r=e,i={hit:`var(--success)`,miss:`var(--warning)`,success:`var(--accent)`,error:`var(--error)`,skipped:`var(--text-secondary)`},a={"session-check":`#3b82f6`,"cache-lookup":`#06b6d4`,"token-exchange":`#f59e0b`,"jwt-decode":`#10b981`,"cache-store":`#ec4899`},o={"session-check":`Session`,"cache-lookup":`Cache`,"token-exchange":`Token Exchange`,"jwt-decode":`JWT Decode`,"cache-store":`Cache Store`},c=e=>e.result===`skipped`?i.skipped:e.result===`error`?i.error:a[e.name]||i[e.result],l=N(()=>r.waterfall?r.waterfall.totalDuration:0),u=N(()=>!r.waterfall||l.value===0?[]:r.waterfall.phases.map(e=>({...e,displayName:o[e.name]||e.name,width:Math.max(2,e.duration/l.value*100),color:c(e)}))),d=N(()=>{if(!r.waterfall)return`var(--text-secondary)`;switch(r.waterfall.outcome){case`authenticated`:return`var(--success)`;case`unauthenticated`:return`var(--warning)`;case`error`:return`var(--error)`;default:return`var(--text-secondary)`}}),f=e=>e<1?`<1ms`:e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(2)}s`;return(r,i)=>(x(),_(`div`,ba,[e.waterfall?(x(),_(s,{key:1},[t(`div`,Sa,[t(`div`,Ca,[i[1]||=t(`span`,{class:`summary-label`},`Total`,-1),t(`span`,wa,M(f(e.waterfall.totalDuration)),1)]),t(`div`,Ta,[i[2]||=t(`span`,{class:`summary-label`},`Cache`,-1),t(`span`,{class:`summary-value`,style:n({color:e.waterfall.cacheHit?`var(--success)`:`var(--warning)`})},M(e.waterfall.cacheHit?`HIT`:`MISS`),5)]),t(`div`,Ea,[i[3]||=t(`span`,{class:`summary-label`},`Result`,-1),t(`span`,{class:`summary-value`,style:n({color:d.value})},M(e.waterfall.outcome),5)])]),t(`div`,Da,[(x(!0),_(s,null,O(u.value,(e,t)=>(x(),_(`div`,{key:t,class:`waterfall-bar`,style:n({width:e.width+`%`,backgroundColor:e.color}),title:`${e.displayName}: ${f(e.duration)} (${e.result})`},null,12,Oa))),128))]),t(`div`,ka,[(x(!0),_(s,null,O(u.value,(e,r)=>(x(),_(`div`,{key:r,class:`legend-item`},[t(`span`,{class:`legend-dot`,style:n({backgroundColor:e.color})},null,4),t(`span`,Aa,M(e.displayName),1),t(`span`,ja,M(f(e.duration)),1),e.details?(x(),_(`span`,Ma,M(e.details),1)):h(``,!0)]))),128))]),e.waterfall.error?(x(),_(`div`,Na,M(e.waterfall.error),1)):h(``,!0)],64)):(x(),_(`div`,xa,[...i[0]||=[t(`div`,{style:{opacity:`0.5`,"margin-bottom":`8px`}},`No SSR auth data`,-1),t(`div`,{style:{"font-size":`11px`,color:`var(--text-secondary)`}},` Auth waterfall is only captured during SSR requests `,-1)]]))]))}}),[[`__scopeId`,`data-v-ee870b17`]]),{__name:`AuthWaterfall`}),Fa={id:`auth-content`},Ia={key:0,class:`auth-card`},La={key:1,class:`auth-card`},Ra={class:`auth-user`},za={class:`avatar`},Ba=[`src`],Va={class:`user-details`},Ha={class:`user-name`},Ua={class:`user-email`},Wa={class:`token-info`},Ga={class:`token-stat`},Ka={class:`token-stat-value`},qa={class:`claims-section`},Ja={key:2,class:`auth-card`},Ya=Object.assign(F({__name:`AuthPanel`,props:{authState:{},waterfall:{}},setup(e){let n=e,r=N(()=>n.authState?.user||{}),i=N(()=>(r.value.name||r.value.email||`?`).charAt(0).toUpperCase()),a=N(()=>n.authState?.expiresInSeconds===void 0?`-`:`${Math.floor(n.authState.expiresInSeconds/60)}:${(n.authState.expiresInSeconds%60).toString().padStart(2,`0`)}`);return(n,o)=>(x(),_(`div`,Fa,[e.authState?.isAuthenticated?(x(),_(`div`,La,[t(`div`,Ra,[t(`div`,za,[r.value.image?(x(),_(`img`,{key:0,src:r.value.image,alt:``},null,8,Ba)):(x(),_(s,{key:1},[p(M(i.value),1)],64))]),t(`div`,Va,[t(`div`,Ha,M(r.value.name||`Unknown`),1),t(`div`,Ua,M(r.value.email||`-`),1)])]),t(`div`,Wa,[o[2]||=t(`div`,{class:`token-stat`},[t(`div`,{class:`token-stat-value badge success`},`Valid`),t(`div`,{class:`token-stat-label`},`Token`)],-1),t(`div`,Ga,[t(`div`,Ka,M(a.value),1),o[1]||=t(`div`,{class:`token-stat-label`},`Expires`,-1)])]),t(`div`,qa,[o[3]||=t(`div`,{class:`detail-title`},`JWT Claims`,-1),m($,{data:e.authState.claims,"max-height":`300px`},null,8,[`data`])])])):(x(),_(`div`,Ia,[...o[0]||=[t(`div`,{style:{"text-align":`center`,padding:`20px`}},[t(`div`,{style:{"font-size":`32px`,"margin-bottom":`12px`,opacity:`0.5`}},`A`),t(`div`,{style:{"font-weight":`500`,"margin-bottom":`4px`}},`Not Authenticated`),t(`div`,{style:{color:`var(--text-secondary)`,"font-size":`12px`}},` Log in to see authentication details `)],-1)]])),e.waterfall?(x(),_(`div`,Ja,[o[4]||=t(`div`,{class:`detail-title`},`SSR Auth Waterfall`,-1),m(Pa,{waterfall:e.waterfall},null,8,[`waterfall`])])):h(``,!0)]))}}),{__name:`AuthPanel`}),Xa={class:`auth-card proxy-panel`},Za={class:`proxy-header`},Qa={key:0,class:`loading`},$a={key:1,class:`empty-state`},eo={class:`proxy-stats`},to={class:`proxy-stat`},no={class:`proxy-stat-value`},ro={class:`proxy-stat`},io={class:`proxy-stat-value success-text`},ao={class:`proxy-stat`},oo={class:`proxy-stat-value error-text`},so={class:`proxy-stat`},co={class:`proxy-stat-value`},lo={class:`request-list`},uo={class:`request-path`},fo={class:`request-status`},po={class:`request-duration`},mo={class:`request-time`},ho=Object.assign(Me(F({__name:`AuthProxyPanel`,props:{stats:{},loading:{type:Boolean}},emits:[`clear`],setup(e,{emit:n}){let r=e,i=n;function a(e){return new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function o(e){return e.success?e.status&&e.status>=200&&e.status<300?`success`:e.status&&e.status>=300&&e.status<400?`pending`:e.success?`success`:`error`:`error`}let c=N(()=>r.stats&&r.stats.totalRequests>0);return(n,r)=>(x(),_(`div`,Xa,[t(`div`,Za,[r[1]||=t(`div`,{class:`detail-title`},`Auth Proxy (SSR)`,-1),c.value?(x(),_(`button`,{key:0,class:`btn btn-secondary btn-small`,onClick:r[0]||=e=>i(`clear`)},` Clear `)):h(``,!0)]),e.loading?(x(),_(`div`,Qa,[...r[2]||=[t(`div`,{class:`spinner`},null,-1),t(`span`,null,`Loading...`,-1)]])):c.value?(x(),_(s,{key:2},[t(`div`,eo,[t(`div`,to,[t(`div`,no,M(e.stats.totalRequests),1),r[4]||=t(`div`,{class:`proxy-stat-label`},`Requests`,-1)]),t(`div`,ro,[t(`div`,io,M(e.stats.successCount),1),r[5]||=t(`div`,{class:`proxy-stat-label`},`Success`,-1)]),t(`div`,ao,[t(`div`,oo,M(e.stats.errorCount),1),r[6]||=t(`div`,{class:`proxy-stat-label`},`Errors`,-1)]),t(`div`,so,[t(`div`,co,M(e.stats.avgDuration)+`ms`,1),r[7]||=t(`div`,{class:`proxy-stat-label`},`Avg Time`,-1)])]),t(`div`,lo,[(x(!0),_(s,null,O(e.stats.recentRequests,e=>(x(),_(`div`,{key:e.id,class:`request-row`},[t(`span`,{class:v([`request-method`,e.method.toLowerCase()])},M(e.method),3),t(`span`,uo,M(e.path),1),t(`span`,fo,[t(`span`,{class:v([`badge`,o(e)])},M(e.status||`ERR`),3)]),t(`span`,po,M(e.duration)+`ms`,1),t(`span`,mo,M(a(e.timestamp)),1)]))),128))])],64)):(x(),_(`div`,$a,[...r[3]||=[t(`div`,{class:`empty-state-icon`},`P`,-1),t(`div`,null,`No proxy requests yet`,-1),t(`div`,{style:{"font-size":`11px`,"margin-top":`4px`}},` Auth proxy requests will appear here during SSR `,-1)]]))]))}}),[[`__scopeId`,`data-v-10e1aa28`]]),{__name:`AuthProxyPanel`}),go=Cr(`/convex-logo.svg`),_o=globalThis.setInterval,vo=new Set([`expiresInSeconds`,`expiresAt`,`issuedAt`,`claims`]);function yo(e,t,n=new Set){if(e===null&&t===null)return!1;if(e===null||t===null)return!0;let r=Object.keys(t);for(let i of r){if(n.has(i))continue;let r=e[i],a=t[i];if(typeof a==`object`&&a){if(JSON.stringify(r)!==JSON.stringify(a))return!0}else if(r!==a)return!0}return!1}function bo(e){let t=D(null),n=D(null),r=D(null),i=null;async function a(){try{let t=await e.call(`getConnectionState`);yo(n.value,t)&&(n.value=t)}catch{}}async function o(){try{let n=await e.call(`getEnhancedAuthState`);yo(t.value,n,vo)&&(t.value=n)}catch{}}async function s(){try{r.value=await e.call(`getAuthWaterfall`)}catch{}}return w(async()=>{await Promise.all([a(),o(),s()]),i=_o(()=>{a(),o()},2e3)}),ke(e.boundInstanceId,()=>{t.value=null,n.value=null,r.value=null,e.boundInstanceId.value&&Promise.all([a(),o(),s()])}),T(()=>{i&&=(clearInterval(i),null)}),{authState:t,connectionState:n,authWaterfall:r}}function xo(){let e=D(null),t=D(!1),n=D(null),r=null;async function i(){try{t.value=!0,n.value=null;let r=await fetch(`/__convex_devtools__/proxy-stats`);if(!r.ok)throw Error(`HTTP ${r.status}`);let i=await r.json();e.value=i}catch(e){n.value=e instanceof Error?e.message:`Failed to fetch proxy stats`}finally{t.value=!1}}async function a(){try{await fetch(`/__convex_devtools__/proxy-stats/clear`,{method:`POST`}),await i()}catch{}}return w(async()=>{await i(),r=_o(i,3e3)}),T(()=>{r&&=(clearInterval(r),null)}),{proxyStats:e,isLoading:t,error:n,refresh:i,clear:a}}var So=`__convexDevtoolsBridge`;function Co(e){return{[So]:!0,payload:e}}function wo(e){if(!e||typeof e!=`object`)return{matched:!1};let t=e;return t[So]===!0?{matched:!0,payload:t.payload}:{matched:!1}}function To(e){let t=new BroadcastChannel(e),n=new Map;return{kind:`broadcast-channel`,postMessage(e){t.postMessage(Co(e))},addEventListener(e,r){if(e!==`message`)return;let i=e=>{let t=wo(e.data);t.matched&&r({data:t.payload,source:e.source})};n.set(r,i),t.addEventListener(`message`,i)},removeEventListener(e,r){if(e!==`message`)return;let i=n.get(r);i&&(n.delete(r),t.removeEventListener(`message`,i))},close(){for(let e of n.values())t.removeEventListener(`message`,e);n.clear(),t.close()}}}function Eo(){let e=new Set,t=t=>{if(t.origin!==window.location.origin)return;let n=wo(t.data);if(n.matched)for(let r of e)r({data:n.payload,source:t.source})};return window.addEventListener(`message`,t),{kind:`post-message`,postMessage(e){window.parent?.postMessage(Co(e),window.location.origin)},addEventListener(t,n){t===`message`&&e.add(n)},removeEventListener(t,n){t===`message`&&e.delete(n)},close(){e.clear(),window.removeEventListener(`message`,t)}}}function Do(e=`convex-devtools`){try{if(typeof BroadcastChannel<`u`)return To(e)}catch{}return Eo()}function Oo(){let e=D([]),t=D(null),n=D(!1),r=D(null),i=new Map,a=0,o=null;return w(()=>{let n=Do(`convex-devtools`);r.value=n;let a=n=>{if(!n.data||typeof n.data!=`object`)return;let r=n.data;if(r.type===`CONVEX_DEVTOOLS_READY`&&r.instanceId){e.value.includes(r.instanceId)||(e.value=[...e.value,r.instanceId].sort());return}if(r.type!==`CONVEX_DEVTOOLS_RESPONSE`||typeof r.id!=`number`||r.instanceId!==t.value)return;let a=i.get(r.id);a&&(i.delete(r.id),clearTimeout(a.timeout),r.error?a.reject(Error(r.error)):a.resolve(r.result))};n.addEventListener(`message`,a),o=()=>n.removeEventListener(`message`,a),n.postMessage({type:`CONVEX_DEVTOOLS_INIT`})}),T(()=>{o?.(),o=null;for(let e of i.values())clearTimeout(e.timeout),e.reject(Error(`DevTools bridge disposed`));i.clear(),r.value?.close(),r.value=null,e.value=[],t.value=null,n.value=!1}),{availableInstanceIds:e,boundInstanceId:t,connected:n,call:async(e,...n)=>new Promise((o,s)=>{let c=t.value;if(!r.value||!c){s(Error(`Select an application instance before calling the bridge`));return}let l=++a,u=setTimeout(()=>{let e=i.get(l);e&&(i.delete(l),e.reject(Error(`Request timeout`)))},5e3);i.set(l,{resolve:o,reject:s,timeout:u}),r.value.postMessage({type:`CONVEX_DEVTOOLS_REQUEST`,id:l,method:e,args:n,instanceId:c})}),getTransport:()=>r.value,selectInstance:r=>{if(!e.value.includes(r))throw Error(`Unknown application instance: ${r}`);t.value=r,n.value=!0}}}function ko(e,t){let n=new Map(e.map(e=>[e.id,e]));return t.map(e=>{let t=n.get(e.id);return t?(Object.assign(t,e),t):e})}function Ao(e){let t=D([]),n=D(new Set),r=null,i=async()=>{if(e.boundInstanceId.value)try{let n=await e.call(`getMutations`)||[];t.value=ko(t.value,n)}catch{}};w(()=>{let n=e.getTransport();if(n){let i=n=>{let r=n.data;if(!r||typeof r!=`object`)return;let i=r;if(i.type===`CONVEX_DEVTOOLS_MUTATIONS`){if(i.instanceId!==e.boundInstanceId.value)return;t.value=ko(t.value,i.mutations||[])}};n.addEventListener(`message`,i),r=()=>n.removeEventListener(`message`,i)}}),ke(e.boundInstanceId,()=>{t.value=[],n.value=new Set,i()},{flush:`post`}),T(()=>{r?.()});function a(e){let t=new Set(n.value);t.has(e)?t.delete(e):t.add(e),n.value=t}function o(e){return n.value.has(e)}return{mutations:t,expandedIds:n,toggleExpanded:a,isExpanded:o}}function jo(e,t){let n=new Map(e.map(e=>[e.id,e]));return t.map(e=>{let t=n.get(e.id);return t?(Object.assign(t,e),t):e})}function Mo(e){let t=D([]),n=D(null),r=null,i=async()=>{if(e.boundInstanceId.value)try{let n=await e.call(`getQueries`)||[];t.value=jo(t.value,n)}catch{}};w(()=>{let n=e.getTransport();if(n){let i=n=>{let r=n.data;if(!r||typeof r!=`object`)return;let i=r;if(i.type===`CONVEX_DEVTOOLS_QUERIES`){if(i.instanceId!==e.boundInstanceId.value)return;t.value=jo(t.value,i.queries||[])}};n.addEventListener(`message`,i),r=()=>n.removeEventListener(`message`,i)}}),ke(e.boundInstanceId,()=>{t.value=[],n.value=null,i()},{flush:`post`}),T(()=>{r?.()});function a(e){n.value=e}function o(){if(n.value)return t.value.find(e=>e.id===n.value)}return{queries:t,selectedQueryId:n,selectQuery:a,getSelectedQuery:o}}var No={class:`app-shell`},Po={class:`header`},Fo={class:`status-bar`},Io=[`value`],Lo=[`value`],Ro={class:`status-item`},zo={class:`status-item`},Bo={key:0,class:`loading`},Vo={class:`tabs`},Ho={class:`tab-badge`},Uo={class:`tab-badge`},Wo={class:`tab-content active`},Go={class:`master-detail`},Ko={class:`tab-content active`},qo={class:`tab-content active`,style:{"overflow-y":`auto`}},Jo=F({__name:`app`,setup(e){let n=Oo(),{queries:r,selectedQueryId:i,selectQuery:a,getSelectedQuery:o}=Mo(n),{mutations:c,toggleExpanded:l,isExpanded:u}=Ao(n),{authState:d,connectionState:f,authWaterfall:h}=bo(n),{proxyStats:g,isLoading:ee,clear:te}=xo(),y=D(`queries`),b=D(!0);w(()=>{setTimeout(()=>{b.value=!1},500)});function S(e){y.value=e}function ne(e){n.selectInstance(e.target.value)}return(e,C)=>{let re=ki,ie=ra,ae=ya,oe=Ya,se=ho;return x(),_(`div`,No,[t(`header`,Po,[C[4]||=t(`div`,{class:`header-left`},[t(`div`,{class:`logo`},[t(`img`,{src:go,alt:`Convex`,width:`18`,height:`18`,class:`logo-icon`}),p(` Convex DevTools `)])],-1),t(`div`,Fo,[t(`select`,{class:`instance-select`,value:A(n).boundInstanceId.value||``,"aria-label":`Application instance`,onChange:ne},[C[3]||=t(`option`,{value:``,disabled:``},`Select application`,-1),(x(!0),_(s,null,O(A(n).availableInstanceIds.value,e=>(x(),_(`option`,{key:e,value:e},M(e),9,Lo))),128))],40,Io),t(`div`,Ro,[t(`span`,{class:v([`status-dot`,A(f)?.isConnected?`connected`:`disconnected`])},null,2),t(`span`,null,M(A(f)?.isConnected?`Connected`:`Disconnected`),1)]),t(`div`,zo,[t(`span`,{class:v([`status-dot`,{pending:A(d)?.isPending,connected:A(d)?.isAuthenticated,disconnected:!A(d)?.isPending&&!A(d)?.isAuthenticated}])},null,2),t(`span`,null,M(A(d)?.isPending?`Loading...`:A(d)?.isAuthenticated?A(d).user?.name||`Authenticated`:`Not authenticated`),1)])])]),b.value?(x(),_(`div`,Bo,[...C[5]||=[t(`div`,{class:`spinner`},null,-1),t(`span`,null,`Connecting to application...`,-1)]])):(x(),_(s,{key:1},[t(`nav`,Vo,[t(`button`,{class:v([`tab`,{active:y.value===`queries`}]),onClick:C[0]||=e=>S(`queries`)},[C[6]||=p(` Queries `,-1),t(`span`,Ho,M(A(r).length),1)],2),t(`button`,{class:v([`tab`,{active:y.value===`mutations`}]),onClick:C[1]||=e=>S(`mutations`)},[C[7]||=p(` Mutations `,-1),t(`span`,Uo,M(A(c).length),1)],2),t(`button`,{class:v([`tab`,{active:y.value===`auth`}]),onClick:C[2]||=e=>S(`auth`)},` Auth `,2)]),Ee(t(`div`,Wo,[t(`div`,Go,[m(re,{queries:A(r),"selected-id":A(i),onSelect:A(a)},null,8,[`queries`,`selected-id`,`onSelect`]),m(ie,{query:A(o)()},null,8,[`query`])])],512),[[Xe,y.value===`queries`]]),Ee(t(`div`,Ko,[m(ae,{mutations:A(c),"is-expanded":A(u),onToggle:A(l)},null,8,[`mutations`,`is-expanded`,`onToggle`])],512),[[Xe,y.value===`mutations`]]),Ee(t(`div`,qo,[m(oe,{"auth-state":A(d),waterfall:A(h)},null,8,[`auth-state`,`waterfall`]),m(se,{stats:A(g),loading:A(ee),onClear:A(te)},null,8,[`stats`,`loading`,`onClear`])],512),[[Xe,y.value===`auth`]])],64))])}}}),Yo={__name:`nuxt-error-page`,props:{error:Object},setup(e){let t=e.error,n=Number(t.statusCode||500),r=n===404,i=t.statusMessage??(r?`Page Not Found`:`Internal Server Error`),a=t.message||t.toString(),o=S(()=>li(()=>import(`./DZ_UiYoH.js`),__vite__mapDeps([0,1,2,3]),import.meta.url)),s=S(()=>li(()=>import(`./C4MASuCh.js`),__vite__mapDeps([4,1,2,5]),import.meta.url)),c=r?o:s;return(e,t)=>(x(),j(A(c),xe(oe({status:A(n),statusText:A(i),statusCode:A(n),statusMessage:A(i),description:A(a),stack:A(void 0)})),null,16))}},Xo=()=>null,Zo={key:0},Qo={__name:`nuxt-root`,setup(t){let n=P(),r=n.deferHydration();if(n.isHydrating){let e=n.hooks.hookOnce(`app:error`,r),t=q().beforeEach(()=>{e(),t()})}window.location.pathname,e(Nt,Hn()),n.hooks.callHookWith(e=>e.map(e=>e()),`vue:setup`,[]);let i=Yn();function o(e,t,r){let i=n.vueApp.config.errorHandler;if(i&&!i.__nuxt_default)try{i(e,t,r)}catch(e){console.error("[nuxt] Error in `app.config.errorHandler`",e)}}return ce((e,t,r)=>{if(n.hooks.callHook(`vue:error`,e,t,r)?.catch(e=>console.error("[nuxt] Error in `vue:error` hook",e)),Mt(navigator.userAgent))return Zn(n,e),!1;if($n(e)&&(e.fatal||e.unhandled))return n.runWithContext(()=>Xn(e)),o(e,t,r),!1}),(e,t)=>(x(),j(a,{onResolve:A(r)},{default:de(()=>[A(!1)?(x(),_(`div`,Zo)):A(i)?(x(),j(A(Yo),{key:1,error:A(i)},null,8,[`error`])):A(!1)?(x(),j(A(Xo),{key:2,context:A(!1)},null,8,[`context`])):A(!1)?(x(),j(we(A(!1)),{key:3})):(x(),j(A(Jo),{key:4}))]),_:1},8,[`onResolve`]))}},$o;{let e;$o=async function(){if(e)return e;let t=!!(window.__NUXT__?.serverRendered??document.getElementById(`__NUXT_DATA__`)?.dataset.ssr===`true`),n=t?Ot(Qo):Dt(Qo),r=ve({vueApp:n});async function i(e){await r.callHook(`app:error`,e),r.payload.error||=er(e)}i.__nuxt_default=!0,n.config.errorHandler=i,r.hook(`app:suspense:resolve`,()=>{n.config.errorHandler===i&&(n.config.errorHandler=void 0)}),!t&&ne.id&&r.hook(`app:suspense:resolve`,()=>{document.getElementById(ne.id)?.remove()});try{await ye(r,Si)}catch(e){i(e)}try{await r.hooks.callHook(`app:created`,n),await r.hooks.callHook(`app:beforeMount`,n),n.mount(re),await r.hooks.callHook(`app:mounted`,n),await d()}catch(e){i(e)}return n},e=$o().catch(e=>{throw g.NUXT_E1009({cause:e}),e})}export{Gn as a,W as c,U as d,G as f,qn as i,cn as l,bi as n,Kn as o,un as p,yi as r,q as s,xi as t,vn as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,C as t,H as n,I as r,L as i,N as a,Q as o,X as s,at as c,dt as l,ft as u,ht as d,jt as f,k as p,q as m,t as h,tt as g,v as _,y as v,z as y}from"./DJHkqtZq.js";import{t as b}from"./_m9ujb-i.js";import{a as x,c as S,d as C,f as w,i as T,l as E,n as D,o as O,p as k,r as A,s as j,t as M,u as N}from"#entry";async function P(e,t=j()){let{path:n,matched:r}=t.resolve(e);if(!r.length||(t._routePreloaded||=new Set,t._routePreloaded.has(n)))return;let i=t._preloadPromises||=[];if(i.length>4)return Promise.all(i).then(()=>P(e,t));t._routePreloaded.add(n);for(let e of r){let t=e.components?.default;if(typeof t!=`function`)continue;let n=Promise.resolve(t()).catch(()=>{}).finally(()=>i.splice(i.indexOf(n),1));i.push(n)}await Promise.all(i)}var F=(...e)=>e.find(e=>e!==void 0);function I(e){let t=e.replace(/[\u0000-\u001F\s]+/g,``);for(;t.toLowerCase().startsWith(`view-source:`);)t=t.slice(12);let n=t.indexOf(`:`);return n>0&&E(t.slice(0,n+1))?null:e}function L(e){let t=e.componentName||`NuxtLink`;function r(e){return typeof e==`string`&&e.startsWith(`#`)}function i(t,n,r){let i=r??e.trailingSlash;if(!t||i!==`append`&&i!==`remove`)return t;if(typeof t==`string`)return z(t,i);let a=`path`in t&&t.path!==void 0?t.path:n(t).path;return{...t,name:void 0,path:z(a,i)}}function a(t){let n=j(),a=v(),o=p(()=>!!d(t.target)&&d(t.target)!==`_self`),s=p(()=>{let e=d(t.to)||d(t.href)||``;return typeof e==`string`&&S(e,{acceptRelative:!0})}),c=g(`RouterLink`),l=c&&typeof c!=`string`?c.useLink:void 0,u=p(()=>{if(d(t.external))return!0;let e=d(t.to)||d(t.href)||``;return typeof e==`object`?!1:e===``||s.value}),f=p(()=>{let e=d(t.to)||d(t.href)||``;return u.value?e:i(e,n.resolve,d(t.trailingSlash))}),m=u.value?void 0:l?.({...t,to:f,viewTransition:d(t.viewTransition)}),h=p(()=>{let i=d(t.trailingSlash)??e.trailingSlash;if(!f.value||s.value||r(f.value)){let e=f.value;return typeof e==`string`?I(e):e}if(u.value){let e=typeof f.value==`object`&&`path`in f.value?O(f.value):f.value,t=typeof e==`object`?n.resolve(e).href:e,r=typeof t==`string`?I(t):t;return r===null?null:z(r,i)}return typeof f.value==`object`?n.resolve(f.value)?.href??null:z(N(a.app.baseURL,f.value),i)});return{to:f,hasTarget:o,isAbsoluteUrl:s,isExternal:u,href:h,isActive:m?.isActive??p(()=>f.value===n.currentRoute.value.path),isExactActive:m?.isExactActive??p(()=>f.value===n.currentRoute.value.path),route:m?.route??p(()=>n.resolve(f.value)),async navigate(e){h.value!==null&&await x(h.value,{replace:d(t.replace),external:u.value||o.value})}}}return y({name:t,props:{to:{type:[String,Object],default:void 0,required:!1},href:{type:[String,Object],default:void 0,required:!1},target:{type:String,default:void 0,required:!1},rel:{type:String,default:void 0,required:!1},noRel:{type:Boolean,default:void 0,required:!1},prefetch:{type:Boolean,default:void 0,required:!1},prefetchOn:{type:[String,Object],default:void 0,required:!1},noPrefetch:{type:Boolean,default:void 0,required:!1},activeClass:{type:String,default:void 0,required:!1},exactActiveClass:{type:String,default:void 0,required:!1},prefetchedClass:{type:String,default:void 0,required:!1},replace:{type:Boolean,default:void 0,required:!1},ariaCurrentValue:{type:String,default:void 0,required:!1},external:{type:Boolean,default:void 0,required:!1},custom:{type:Boolean,default:void 0,required:!1},trailingSlash:{type:String,default:void 0,required:!1}},useLink:a,setup(t,{slots:i}){let o=j(),{to:c,href:d,navigate:f,isExternal:p,hasTarget:h,isAbsoluteUrl:v}=a(t),y=u(!1),b=l(null),x=e=>{b.value=t.custom?e?.$el?.nextElementSibling:e?.$el};function S(n){return!!(!y.value&&(typeof t.prefetchOn==`string`?t.prefetchOn===n:t.prefetchOn?.[n]??e.prefetchOn?.[n])&&(t.prefetch??e.prefetch)!==!1&&t.noPrefetch!==!0&&t.target!==`_blank`&&!H())}async function w(e=_()){if(y.value||d.value===null)return;y.value=!0;let t=typeof c.value==`string`?c.value:p.value?O(c.value):o.resolve(c.value).fullPath,n=p.value?new URL(t,window.location.href).href:t;await Promise.all([e.hooks.callHook(`link:prefetch`,n)?.catch(()=>{}),!p.value&&!h.value&&P(c.value,o).catch(()=>{})])}if(!t.custom&&S(`visibility`)){let e=_(),t,n=null;s(()=>{let r=B();M(()=>{t=A(()=>{b?.value?.tagName&&(n=r.observe(b.value,async()=>{n?.(),n=null,await w(e)}))})})}),m(()=>{t&&D(t),n?.(),n=null})}return()=>{let a=t.target||null,s=F(t.noRel?``:t.rel,e.externalRelAttribute,v.value||h.value?`noopener noreferrer`:``)||null,l=e=>({href:d.value,navigate:f,get route(){if(!d.value)return;let e=new URL(d.value,window.location.href);return{path:e.pathname,fullPath:e.pathname,get query(){return C(e.search)},hash:e.hash,params:{},name:void 0,matched:[],redirectedFrom:void 0,meta:{},href:d.value}},rel:s,target:a,isExternal:p.value||h.value,isActive:!1,isExactActive:!1,...e,prefetch:w,prefetched:y.value,shouldPrefetch:S});if(!p.value&&!h.value&&!r(c.value)){let r={ref:x,to:c.value,activeClass:t.activeClass||e.activeClass,exactActiveClass:t.exactActiveClass||e.exactActiveClass,replace:t.replace,ariaCurrentValue:t.ariaCurrentValue,custom:t.custom};return t.custom||(S(`interaction`)&&(r.onPointerenter=w.bind(null,void 0),r.onFocus=w.bind(null,void 0)),y.value&&(r.class=t.prefetchedClass||e.prefetchedClass),r.rel=t.rel||void 0),n(g(`RouterLink`),r,t.custom&&i.default?{default:e=>i.default(l(e))}:i.default)}return t.custom?i.default?i.default(l()):null:n(`a`,{ref:b,href:d.value||null,rel:s,target:a,onClick:async e=>{if(!(p.value||h.value)){e.preventDefault();try{let e=T(d.value??``);return await(t.replace?o.replace(e):o.push(e))}finally{if(r(c.value)){let e=c.value.slice(1),t=e;try{t=decodeURIComponent(e)}catch{}document.getElementById(t)?.focus()}}}}},i.default?.())}}})}var R=L(t);function z(e,t){if(t!==`append`&&t!==`remove`)return e;let n=t===`append`?w:k;return S(e)&&!e.startsWith(`http`)?e:n(e,!0)}function B(){let e=_();if(e._observer)return e._observer;let t=null,n=new Map;return e._observer={observe:(e,r)=>(t||=new IntersectionObserver(e=>{for(let t of e){let e=n.get(t.target);(t.isIntersecting||t.intersectionRatio>0)&&e&&e()}}),n.set(e,r),t.observe(e),()=>{n.delete(e),t?.unobserve(e),n.size===0&&(t?.disconnect(),t=null)})}}var V=/2g/;function H(){let e=navigator.connection;return!!(e&&(e.saveData||V.test(e.effectiveType)))}var U={class:`antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide`},W={class:`max-w-520px text-center`},G=[`textContent`],K=[`textContent`],q=[`textContent`],J={class:`flex items-center justify-center w-full`},Y=h({__name:`error-404`,props:{appName:{type:String,default:`Nuxt`},status:{type:Number,default:404},statusText:{type:String,default:`Page not found`},description:{type:String,default:`Sorry, the page you are looking for could not be found.`},backHome:{type:String,default:`Go back home`}},setup(t){let n=t;return b({title:`${n.status} - ${n.statusText} | ${n.appName}`,script:[{innerHTML:`!function(){let e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(let e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(let t of e)if("childList"===t.type)for(let e of t.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;let r=function(e){let r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:`*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}h1,h2{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset: ;--un-shadow:0 0 #0000;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }`}]}),(n,s)=>{let l=R;return o(),a(`div`,U,[e(`div`,W,[e(`h1`,{class:`font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]`,textContent:f(t.status)},null,8,G),e(`h2`,{class:`font-semibold mb-2 sm:text-3xl text-2xl`,textContent:f(t.statusText)},null,8,K),e(`p`,{class:`mb-4 px-2 text-[#64748B] text-md`,textContent:f(t.description)},null,8,q),e(`div`,J,[i(l,{to:`/`,class:`font-medium hover:text-[#00DC82] text-sm underline underline-offset-3`},{default:c(()=>[r(f(t.backHome),1)]),_:1})])])])}}},[[`__scopeId`,`data-v-c9a8c324`]]);export{Y as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{B as e,Ft as t,J as n,K as r,Nt as i,Pt as a,U as o,W as s,dt as c,it as l,lt as u,mt as d,q as f,r as p,st as m,u as h,v as g}from"./DJHkqtZq.js";var _=Object.assign((e,t)=>u(t)?d(t):t,{_static:!0});function v(e,t={}){let n=t.head||p();return n.ssr?n.push(e||{},t):y(n,e,t)}function y(t,i,a={}){let o=m();if(o&&!o.active)return{patch(){},dispose(){},_i:-1};let s=c(!1);if(a.onRendered&&o){let e=a.onRendered;a={...a,onRendered:t=>o.run(()=>e(t))}}let u;return l(()=>{let e=s.value?{}:h(i,_);u?u.patch(e):u=t.push(e,a)}),e()&&(f(()=>{u.dispose()}),n(()=>{s.value=!0}),r(()=>{s.value=!1})),u}var b=t({docsBase:i,reporters:a});function x(e){let t=e||g();return t.ssrContext?.head||t.runWithContext(()=>{if(o()){let e=s(`usehead`);if(!e)throw b.NUXT_E6001();return e}})}function S(e,t={}){return v(e,{head:t.head||x(t.nuxt),...t})}export{S as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"better-convex-nuxt-devtools","timestamp":0}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"better-convex-nuxt-devtools","timestamp":0,"prerendered":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--color-convex-purple-50:#f4e9f1;--color-convex-purple-100:#e8d4e4;--color-convex-purple-200:#d1a8c8;--color-convex-purple-300:#bb7dad;--color-convex-purple-400:#a45191;--color-convex-purple-500:#8d2676;--color-convex-purple-600:#711e5e;--color-convex-purple-700:#551747;--color-convex-purple-800:#380f2f;--color-convex-purple-900:#1c0818;--bg:#fff;--bg-secondary:#f9fafb;--bg-tertiary:#f3f4f6;--bg-hover:#f3f4f6;--border:#9ca3af33;--border-solid:#e5e7eb;--text:#1f2937;--text-secondary:#6b7280;--accent:var(--color-convex-purple-500);--accent-hover:var(--color-convex-purple-600);--accent-light:var(--color-convex-purple-50);--success:#16a34a;--success-bg:#16a34a1a;--error:#dc2626;--error-bg:#dc26261a;--warning:#ca8a04;--warning-bg:#ca8a041a;--info:#2563eb;--info-bg:#2563eb1a;--scrollbar-bg:#f5f5f5;--scrollbar-thumb:#d1d5db;--json-key:#0451a5;--json-string:#a31515;--json-number:#098658;--json-boolean:#00f;--json-null:#6b7280;--card-shadow:0 1px 2px 0 #0000000d}@media (prefers-color-scheme:dark){:root{--bg:#1e1e1e;--bg-secondary:#252526;--bg-tertiary:#1a1a1a;--bg-hover:#2a2d2e;--border:#ffffff1a;--border-solid:#3c3c3c;--text:#e5e7eb;--text-secondary:#9ca3af;--accent:var(--color-convex-purple-400);--accent-hover:var(--color-convex-purple-300);--accent-light:var(--color-convex-purple-900);--success:#4ade80;--success-bg:#4ade8026;--error:#f87171;--error-bg:#f8717126;--warning:#fbbf24;--warning-bg:#fbbf2426;--info:#60a5fa;--info-bg:#60a5fa26;--scrollbar-bg:#1e1e1e;--scrollbar-thumb:#424242;--json-key:#9cdcfe;--json-string:#ce9178;--json-number:#b5cea8;--json-boolean:#569cd6;--json-null:#6b7280;--card-shadow:0 1px 3px 0 #0000004d}}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;font-size:13px;height:100vh;line-height:1.5;overflow:hidden}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-track{background:var(--scrollbar-bg)}::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}.app-shell{display:flex;flex-direction:column;height:100vh}.header{background:var(--bg);border-bottom:1px solid var(--border);flex-shrink:0;justify-content:space-between;padding:12px 16px}.header,.header-left{align-items:center;display:flex}.header-left{gap:10px}.logo{align-items:center;display:flex;font-size:14px;font-weight:600;gap:8px}.logo-icon{color:var(--accent)}.status-bar{align-items:center;display:flex;font-size:12px;gap:16px}.instance-select{background:var(--bg-secondary);border:1px solid var(--border-solid);border-radius:4px;color:var(--text);font:inherit;height:28px;max-width:180px;padding:0 8px}.status-item{align-items:center;display:flex;gap:6px}.status-dot{border-radius:50%;flex-shrink:0;height:8px;width:8px}.status-dot.connected{background:#22c55e;box-shadow:0 0 0 2px #22c55e33}.status-dot.disconnected{background:#ef4444;box-shadow:0 0 0 2px #ef444433}.status-dot.pending{animation:pulse 1.5s infinite;background:#f59e0b;box-shadow:0 0 0 2px #f59e0b33}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.tabs{background:var(--bg);border-bottom:1px solid var(--border);display:flex;flex-shrink:0;gap:0;overflow-x:auto}.tab{background:0 0;border:none;border-bottom:2px solid #0000;color:var(--text-secondary);cursor:pointer;font-family:inherit;font-size:13px;font-weight:500;padding:10px 20px;transition:all .15s;white-space:nowrap}.tab:hover{background:var(--bg-hover);color:var(--text)}.tab.active{border-bottom-color:var(--accent);color:var(--accent)}.tab-badge{background:var(--bg-tertiary);border-radius:10px;font-size:11px;font-weight:600;margin-left:6px;padding:1px 6px}.tab.active .tab-badge{background:var(--accent);color:#fff}.tab-content{display:none;flex:1;overflow:hidden}.tab-content.active{display:flex;flex-direction:column}.master-detail{display:flex;flex:1;overflow:hidden}.master-list{background:var(--bg);border-right:1px solid var(--border);flex-shrink:0;min-width:200px;overflow-y:auto;width:280px}.detail-panel{background:var(--bg-secondary);flex:1;overflow-y:auto}.list-item{border-bottom:1px solid var(--border);cursor:pointer;padding:12px 14px;transition:background .15s}.list-item:hover{background:var(--bg-hover)}.list-item.selected{background:var(--accent-light);border-left:3px solid var(--accent);padding-left:11px}.list-item-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:4px}.list-item-name{color:var(--accent);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:12px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-item-meta{color:var(--text-secondary);display:flex;font-size:11px;gap:8px}.badge{border-radius:4px;font-size:10px;font-weight:600;letter-spacing:.3px;padding:2px 6px;text-transform:uppercase}.badge.success{background:var(--success-bg);color:var(--success)}.badge.error{background:var(--error-bg);color:var(--error)}.badge.pending{background:var(--warning-bg);color:var(--warning)}.badge.optimistic{background:var(--info-bg);color:var(--info)}.card{background:var(--bg);border:1px solid var(--border);border-radius:6px;box-shadow:var(--card-shadow)}.detail-section{border-bottom:1px solid var(--border);padding:16px}.detail-section:last-child{border-bottom:none}.detail-title{color:var(--text-secondary);font-size:11px;font-weight:600;letter-spacing:.5px;margin-bottom:10px;text-transform:uppercase}.detail-row{display:flex;justify-content:space-between;padding:6px 0}.detail-label{color:var(--text-secondary);font-size:12px}.detail-value{font-size:12px;font-weight:500}.detail-value,.json-viewer{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace}.json-viewer{background:var(--bg);border:1px solid var(--border);border-radius:6px;box-shadow:var(--card-shadow);font-size:11px;max-height:200px;overflow:auto;padding:12px;white-space:pre-wrap;word-break:break-all}.json-key{color:var(--json-key)}.json-string{color:var(--json-string)}.json-number{color:var(--json-number)}.json-boolean{color:var(--json-boolean)}.json-null{color:var(--json-null)}.options-grid{display:grid;gap:8px;grid-template-columns:repeat(2,1fr)}.option-item{font-size:12px;gap:6px}.option-icon,.option-item{align-items:center;display:flex}.option-icon{height:14px;justify-content:center;width:14px}.option-icon.enabled{color:var(--success)}.option-icon.disabled{color:var(--text-secondary)}.timeline{flex:1;overflow-y:auto;padding:0}.timeline-item{border-bottom:1px solid var(--border);cursor:pointer;padding:14px 16px;transition:background .15s}.timeline-item:hover{background:var(--bg-hover)}.timeline-item.expanded{background:var(--bg-secondary)}.timeline-header{align-items:flex-start;display:flex;justify-content:space-between;margin-bottom:6px}.timeline-name{color:var(--accent);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:12px;font-weight:500}.timeline-meta,.timeline-time{color:var(--text-secondary);font-size:11px}.timeline-meta{gap:10px}.timeline-meta,.timeline-state{align-items:center;display:flex}.timeline-state{gap:6px}.timeline-details{display:none;margin-top:12px}.timeline-item.expanded .timeline-details{display:block}.auth-card{background:var(--bg);border:1px solid var(--border);border-radius:8px;box-shadow:var(--card-shadow);margin:16px;padding:20px}.auth-user{gap:14px;margin-bottom:16px}.auth-user,.avatar{align-items:center;display:flex}.avatar{background:var(--accent);border-radius:50%;color:#fff;flex-shrink:0;font-size:18px;font-weight:600;height:48px;justify-content:center;width:48px}.avatar img{border-radius:50%;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.user-details{flex:1;min-width:0}.user-name{font-size:14px;font-weight:600}.user-email,.user-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-email{color:var(--text-secondary);font-size:12px}.token-info{background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;display:flex;gap:16px;margin-bottom:16px;padding:12px}.token-stat{text-align:center}.token-stat-value{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:18px;font-weight:600}.token-stat-label{color:var(--text-secondary);font-size:11px;text-transform:uppercase}.claims-section{margin-top:16px}.event-log{flex:1;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:11px;overflow-y:auto}.event-item{border-bottom:1px solid var(--border);display:flex;gap:12px;padding:8px 14px;transition:background .15s}.event-item:hover{background:var(--bg-hover)}.event-time{color:var(--text-secondary);flex-shrink:0;min-width:70px}.event-type{color:var(--accent);flex-shrink:0;font-weight:500;min-width:130px}.event-details{color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn{align-items:center;background:var(--accent);border:none;border-radius:6px;color:#fff;cursor:pointer;display:inline-flex;font-family:inherit;font-size:12px;font-weight:500;gap:6px;padding:8px 14px;text-decoration:none;transition:background .15s}.btn:hover{background:var(--accent-hover)}.btn-secondary{background:var(--bg);border:1px solid var(--border-solid);color:var(--text)}.btn-secondary:hover{background:var(--bg-hover)}.btn-small{font-size:11px;padding:4px 8px}.empty-state{align-items:center;color:var(--text-secondary);display:flex;flex-direction:column;justify-content:center;padding:40px 20px;text-align:center}.empty-state-icon{font-size:32px;margin-bottom:12px;opacity:.5}.loading{align-items:center;color:var(--text-secondary);display:flex;gap:10px;justify-content:center;padding:32px}.spinner{animation:spin .8s linear infinite;border:2px solid var(--border-solid);border-radius:50%;border-top-color:var(--accent);height:18px;width:18px}@keyframes spin{to{transform:rotate(1turn)}}.actions-bar{background:var(--bg);border-top:1px solid var(--border);display:flex;flex-shrink:0;gap:8px;padding:12px 16px}@media (width<=600px){.master-detail{flex-direction:column}.master-list{border-bottom:1px solid var(--border);border-right:none;max-height:200px;width:100%}.status-bar{display:none}}.waterfall-container[data-v-ee870b17]{padding:12px 0}.waterfall-empty[data-v-ee870b17]{color:var(--text-secondary);padding:20px;text-align:center}.waterfall-summary[data-v-ee870b17]{display:flex;gap:20px;margin-bottom:12px}.summary-item[data-v-ee870b17]{align-items:flex-start;display:flex;flex-direction:column}.summary-label[data-v-ee870b17]{color:var(--text-secondary);font-size:10px;letter-spacing:.5px;margin-bottom:2px;text-transform:uppercase}.summary-value[data-v-ee870b17]{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:14px;font-weight:600}.waterfall-chart[data-v-ee870b17]{background:var(--bg-tertiary);border-radius:4px;display:flex;height:24px;margin-bottom:12px;overflow:hidden}.waterfall-bar[data-v-ee870b17]{cursor:default;height:100%;min-width:4px;transition:opacity .15s}.waterfall-bar[data-v-ee870b17]:hover{opacity:.8}.waterfall-legend[data-v-ee870b17]{display:flex;flex-direction:column;gap:6px}.legend-item[data-v-ee870b17]{align-items:center;display:flex;font-size:11px;gap:8px}.legend-dot[data-v-ee870b17]{border-radius:2px;flex-shrink:0;height:8px;width:8px}.legend-name[data-v-ee870b17]{font-weight:500;min-width:100px}.legend-time[data-v-ee870b17]{color:var(--text-secondary);font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;min-width:50px}.legend-details[data-v-ee870b17]{color:var(--text-secondary);font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.waterfall-error[data-v-ee870b17]{background:var(--error-bg);border-radius:4px;color:var(--error);font-size:12px;margin-top:12px;padding:8px 12px}.proxy-panel[data-v-10e1aa28]{margin-top:0}.proxy-header[data-v-10e1aa28]{align-items:center;display:flex;justify-content:space-between;margin-bottom:12px}.proxy-header .detail-title[data-v-10e1aa28]{margin-bottom:0}.proxy-stats[data-v-10e1aa28]{background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;display:flex;gap:16px;margin-bottom:16px;padding:12px}.proxy-stat[data-v-10e1aa28]{flex:1;text-align:center}.proxy-stat-value[data-v-10e1aa28]{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:18px;font-weight:600}.proxy-stat-value.success-text[data-v-10e1aa28]{color:var(--success)}.proxy-stat-value.error-text[data-v-10e1aa28]{color:var(--error)}.proxy-stat-label[data-v-10e1aa28]{color:var(--text-secondary);font-size:11px;text-transform:uppercase}.request-list[data-v-10e1aa28]{border:1px solid var(--border);border-radius:6px;max-height:200px;overflow-y:auto}.request-row[data-v-10e1aa28]{align-items:center;border-bottom:1px solid var(--border);display:flex;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:12px;gap:12px;padding:8px 12px}.request-row[data-v-10e1aa28]:last-child{border-bottom:none}.request-row[data-v-10e1aa28]:hover{background:var(--bg-hover)}.request-method[data-v-10e1aa28]{color:var(--accent);font-weight:600;min-width:50px}.request-method.get[data-v-10e1aa28]{color:var(--success)}.request-method.post[data-v-10e1aa28]{color:var(--info)}.request-method.delete[data-v-10e1aa28]{color:var(--error)}.request-path[data-v-10e1aa28]{color:var(--text);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.request-duration[data-v-10e1aa28],.request-status[data-v-10e1aa28]{min-width:50px}.request-duration[data-v-10e1aa28],.request-time[data-v-10e1aa28]{color:var(--text-secondary);text-align:right}.request-time[data-v-10e1aa28]{font-size:11px;min-width:70px}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.grid[data-v-c9a8c324]{display:grid}.mb-2[data-v-c9a8c324]{margin-bottom:.5rem}.mb-4[data-v-c9a8c324]{margin-bottom:1rem}.max-w-520px[data-v-c9a8c324]{max-width:520px}.min-h-screen[data-v-c9a8c324]{min-height:100vh}.w-full[data-v-c9a8c324]{width:100%}.flex[data-v-c9a8c324]{display:flex}.place-content-center[data-v-c9a8c324]{place-content:center}.items-center[data-v-c9a8c324]{align-items:center}.justify-center[data-v-c9a8c324]{justify-content:center}.overflow-hidden[data-v-c9a8c324]{overflow:hidden}.bg-white[data-v-c9a8c324]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-c9a8c324]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-c9a8c324]{text-align:center}.text-\[80px\][data-v-c9a8c324]{font-size:80px}.text-2xl[data-v-c9a8c324]{font-size:1.5rem;line-height:2rem}.text-sm[data-v-c9a8c324]{font-size:.875rem;line-height:1.25rem}.text-\[\#020420\][data-v-c9a8c324]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-c9a8c324]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.hover\:text-\[\#00DC82\][data-v-c9a8c324]:hover{--un-text-opacity:1;color:rgb(0 220 130/var(--un-text-opacity))}.font-medium[data-v-c9a8c324]{font-weight:500}.font-semibold[data-v-c9a8c324]{font-weight:600}.leading-none[data-v-c9a8c324]{line-height:1}.tracking-wide[data-v-c9a8c324]{letter-spacing:.025em}.font-sans[data-v-c9a8c324]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-c9a8c324]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.underline[data-v-c9a8c324]{text-decoration-line:underline}.underline-offset-3[data-v-c9a8c324]{text-underline-offset:3px}.antialiased[data-v-c9a8c324]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-c9a8c324]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-c9a8c324]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (width>=640px){.sm\:text-\[110px\][data-v-c9a8c324]{font-size:110px}.sm\:text-3xl[data-v-c9a8c324]{font-size:1.875rem;line-height:2.25rem}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.grid[data-v-430cca22]{display:grid}.mb-2[data-v-430cca22]{margin-bottom:.5rem}.mb-4[data-v-430cca22]{margin-bottom:1rem}.max-w-520px[data-v-430cca22]{max-width:520px}.min-h-screen[data-v-430cca22]{min-height:100vh}.place-content-center[data-v-430cca22]{place-content:center}.overflow-hidden[data-v-430cca22]{overflow:hidden}.bg-white[data-v-430cca22]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-430cca22]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-430cca22]{text-align:center}.text-\[80px\][data-v-430cca22]{font-size:80px}.text-2xl[data-v-430cca22]{font-size:1.5rem;line-height:2rem}.text-\[\#020420\][data-v-430cca22]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-430cca22]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.font-semibold[data-v-430cca22]{font-weight:600}.leading-none[data-v-430cca22]{line-height:1}.tracking-wide[data-v-430cca22]{letter-spacing:.025em}.font-sans[data-v-430cca22]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-430cca22]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.antialiased[data-v-430cca22]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-430cca22]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-430cca22]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (width>=640px){.sm\:text-\[110px\][data-v-430cca22]{font-size:110px}.sm\:text-3xl[data-v-430cca22]{font-size:1.875rem;line-height:2.25rem}}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg width="184" height="188" viewBox="0 0 184 188" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M108.092 130.021C126.258 128.003 143.385 118.323 152.815 102.167C148.349 142.128 104.653 167.385 68.9858 151.878C65.6992 150.453 62.8702 148.082 60.9288 145.034C52.9134 132.448 50.2786 116.433 54.0644 101.899C64.881 120.567 86.8748 132.01 108.092 130.021Z" fill="#F3B01C"/>
|
|
3
|
+
<path d="M53.4012 90.1735C46.0375 107.191 45.7186 127.114 54.7463 143.51C22.9759 119.608 23.3226 68.4578 54.358 44.7949C57.2286 42.6078 60.64 41.3097 64.2178 41.1121C78.9312 40.336 93.8804 46.0225 104.364 56.6193C83.0637 56.831 62.318 70.4756 53.4012 90.1735Z" fill="#8D2676"/>
|
|
4
|
+
<path d="M114.637 61.8552C103.89 46.8701 87.0686 36.6684 68.6387 36.358C104.264 20.1876 148.085 46.4045 152.856 85.1654C153.3 88.7635 152.717 92.4322 151.122 95.6775C144.466 109.195 132.124 119.679 117.702 123.559C128.269 103.96 126.965 80.0151 114.637 61.8552Z" fill="#EE342F"/>
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Convex DevTools</title><script type="importmap">{"imports":{"#entry":"/__convex_devtools__/_nuxt/DWwrCltl.js"}}</script><link rel="stylesheet" href="/__convex_devtools__/_nuxt/entry.DpFDKYZ5.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__convex_devtools__/_nuxt/DWwrCltl.js"><link rel="modulepreload" as="script" crossorigin href="/__convex_devtools__/_nuxt/DJHkqtZq.js"><script type="module" src="/__convex_devtools__/_nuxt/DWwrCltl.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__convex_devtools__/_nuxt/error-404.DYUJo5xt.css"><link rel="prefetch" as="script" crossorigin href="/__convex_devtools__/_nuxt/DZ_UiYoH.js"><link rel="prefetch" as="script" crossorigin href="/__convex_devtools__/_nuxt/_m9ujb-i.js"><link rel="prefetch" as="style" crossorigin href="/__convex_devtools__/_nuxt/error-500.DQdoJJXg.css"><link rel="prefetch" as="script" crossorigin href="/__convex_devtools__/_nuxt/C4MASuCh.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__convex_devtools__",buildId:"better-convex-nuxt-devtools",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},0,false]</script></body></html>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nuxt compatibility entry for the framework-neutral Better Convex error model.
|
|
3
|
+
* The implementation lives in `@lupinum/better-convex-vue`; this package adds no second
|
|
4
|
+
* normalizer or error class.
|
|
5
|
+
*/
|
|
6
|
+
export { ConvexCallError, isSerializedConvexCallError, normalizeConvexError, } from '@lupinum/better-convex-vue/errors';
|
|
7
|
+
export type { ConvexCallErrorInput, ConvexCallErrorKind, SerializedConvexCallError, } from '@lupinum/better-convex-vue/errors';
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { defineNuxtRouteMiddleware, navigateTo, useRuntimeConfig } from "#app";
|
|
2
|
+
import { useConvexAuth } from "../composables/useConvexAuth.js";
|
|
3
|
+
import {
|
|
4
|
+
resolveRouteProtectionDecision
|
|
5
|
+
} from "../utils/auth-route-protection.js";
|
|
6
|
+
import { normalizeConvexRuntimeConfig } from "../utils/runtime-config.js";
|
|
7
|
+
const PROTECTED_ROUTE_AUTH_SETTLE_TIMEOUT_MS = 5e3;
|
|
8
|
+
export default defineNuxtRouteMiddleware(async (to) => {
|
|
9
|
+
const authConfig = normalizeConvexRuntimeConfig(useRuntimeConfig().public.convex).auth;
|
|
10
|
+
if (authConfig === false) return;
|
|
11
|
+
const pageMeta = to.meta;
|
|
12
|
+
const { status, isPending, ready } = useConvexAuth();
|
|
13
|
+
const decision = resolveRouteProtectionDecision({
|
|
14
|
+
meta: pageMeta.convexAuth,
|
|
15
|
+
defaultRedirectTo: authConfig.redirectTo,
|
|
16
|
+
preserveReturnTo: true,
|
|
17
|
+
currentPath: to.path,
|
|
18
|
+
currentFullPath: to.fullPath
|
|
19
|
+
});
|
|
20
|
+
if (!decision) return;
|
|
21
|
+
if (import.meta.client && isPending.value) {
|
|
22
|
+
const settledStatus = await ready({
|
|
23
|
+
timeoutMs: PROTECTED_ROUTE_AUTH_SETTLE_TIMEOUT_MS
|
|
24
|
+
});
|
|
25
|
+
if (settledStatus === "authenticated") return;
|
|
26
|
+
}
|
|
27
|
+
if (import.meta.server && isPending.value) {
|
|
28
|
+
}
|
|
29
|
+
if (status.value === "authenticated") return;
|
|
30
|
+
return navigateTo(decision.redirectTo);
|
|
31
|
+
});
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { createBetterConvex } from "@lupinum/better-convex-vue";
|
|
2
|
+
import { createAuthClient } from "better-auth/vue";
|
|
3
|
+
import { computed } from "vue";
|
|
4
|
+
import { clearNuxtData, defineNuxtPlugin, useRuntimeConfig, useState } from "#app";
|
|
5
|
+
import convexAuthClientDefinition from "#convex/auth-client";
|
|
6
|
+
import { convexClientPlugin } from "./auth-client/convex-client-plugin.js";
|
|
7
|
+
import {
|
|
8
|
+
ANONYMOUS_IDENTITY,
|
|
9
|
+
identityKeyOf,
|
|
10
|
+
identityToken,
|
|
11
|
+
identityUser,
|
|
12
|
+
toAuthenticatedIdentity
|
|
13
|
+
} from "./auth/auth-identity.js";
|
|
14
|
+
import { createBetterAuthBrowserAdapter } from "./auth/better-auth-browser-adapter.js";
|
|
15
|
+
import { createIntegratedAuthClient } from "./auth/integrated-client.js";
|
|
16
|
+
import { createAuthOperationTracker } from "./auth/operation-tracker.js";
|
|
17
|
+
import {
|
|
18
|
+
createSessionSynchronization
|
|
19
|
+
} from "./auth/session-synchronization.js";
|
|
20
|
+
import { validateConvexAuthClientDefinition } from "./auth/validate-auth-client-definition.js";
|
|
21
|
+
import { setupNuxtDevtoolsClient } from "./devtools/setup-client.js";
|
|
22
|
+
import { createConvexRuntimeContext } from "./runtime-context.js";
|
|
23
|
+
import { useConvexIdentityState } from "./utils/auth-identity-state.js";
|
|
24
|
+
import { useConvexAuthPendingState } from "./utils/auth-pending-state.js";
|
|
25
|
+
import {
|
|
26
|
+
purgeConvexIdentityPayloadKeys,
|
|
27
|
+
readAuthMode,
|
|
28
|
+
retainAnonymousConvexQueryErrors
|
|
29
|
+
} from "./utils/convex-cache.js";
|
|
30
|
+
import { createLogger, getLogLevel } from "./utils/logger.js";
|
|
31
|
+
import { getConvexRuntimeConfig } from "./utils/runtime-config.js";
|
|
32
|
+
const SESSION_RECONCILIATION_TIMEOUT_MS = 5e3;
|
|
33
|
+
const INTERNAL_REFRESH_AUTH = Symbol.for("better-convex-vue:internal-refresh-auth");
|
|
34
|
+
export default defineNuxtPlugin({
|
|
35
|
+
name: "convex:auth-client",
|
|
36
|
+
setup(nuxtApp) {
|
|
37
|
+
const config = useRuntimeConfig();
|
|
38
|
+
const convexConfig = getConvexRuntimeConfig();
|
|
39
|
+
if (convexConfig.auth === false) {
|
|
40
|
+
throw new Error("[better-convex-nuxt] auth client plugin loaded in a no-auth build");
|
|
41
|
+
}
|
|
42
|
+
if (!convexConfig.url) return;
|
|
43
|
+
const publicConvex = config.public.convex;
|
|
44
|
+
const logger = createLogger(getLogLevel(publicConvex));
|
|
45
|
+
const definitionOptions = validateConvexAuthClientDefinition(convexAuthClientDefinition);
|
|
46
|
+
const { plugins: consumerPlugins, ...baseOptions } = definitionOptions;
|
|
47
|
+
const authClient = createAuthClient({
|
|
48
|
+
...baseOptions,
|
|
49
|
+
baseURL: `${window.location.origin}/api/auth`,
|
|
50
|
+
plugins: [convexClientPlugin(), ...consumerPlugins ?? []],
|
|
51
|
+
fetchOptions: { credentials: "include" }
|
|
52
|
+
});
|
|
53
|
+
const identity = useConvexIdentityState();
|
|
54
|
+
const authError = useState("convex:authError", () => null);
|
|
55
|
+
const pendingState = useConvexAuthPendingState();
|
|
56
|
+
let synchronization = null;
|
|
57
|
+
let latestProviderSession;
|
|
58
|
+
let publishCurrentSessionAcceptance = () => {
|
|
59
|
+
};
|
|
60
|
+
const adapter = createBetterAuthBrowserAdapter(
|
|
61
|
+
authClient,
|
|
62
|
+
{
|
|
63
|
+
authenticated(token, user) {
|
|
64
|
+
identity.value = toAuthenticatedIdentity(token, user);
|
|
65
|
+
authError.value = null;
|
|
66
|
+
pendingState.value = false;
|
|
67
|
+
},
|
|
68
|
+
anonymous(error) {
|
|
69
|
+
identity.value = ANONYMOUS_IDENTITY;
|
|
70
|
+
authError.value = error;
|
|
71
|
+
pendingState.value = false;
|
|
72
|
+
},
|
|
73
|
+
sessionChanged(sessionToken, errorMessage, revision) {
|
|
74
|
+
latestProviderSession = {
|
|
75
|
+
sessionToken: errorMessage ? null : sessionToken,
|
|
76
|
+
revision,
|
|
77
|
+
failed: errorMessage !== null
|
|
78
|
+
};
|
|
79
|
+
synchronization?.observeProvider(latestProviderSession);
|
|
80
|
+
publishCurrentSessionAcceptance();
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
initialIdentityKey: identity.value.status === "authenticated" ? identity.value.user.id : void 0
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
const vuePlugin = createBetterConvex({
|
|
88
|
+
convexUrl: convexConfig.url,
|
|
89
|
+
auth: adapter
|
|
90
|
+
});
|
|
91
|
+
nuxtApp.vueApp.use(vuePlugin);
|
|
92
|
+
const runtime = createConvexRuntimeContext(vuePlugin.attachment(), logger);
|
|
93
|
+
nuxtApp.provide("convexRuntime", runtime);
|
|
94
|
+
const queryErrors = useState(
|
|
95
|
+
"convex:query-errors",
|
|
96
|
+
() => ({})
|
|
97
|
+
);
|
|
98
|
+
const ssrIdentityKey = identityKeyOf(identity.value);
|
|
99
|
+
const initialSnapshot = runtime.attachment.identity.snapshot();
|
|
100
|
+
let observedIdentityGeneration = initialSnapshot.identityGeneration;
|
|
101
|
+
let runtimeProviderRevision = adapter.snapshot().sessionGeneration;
|
|
102
|
+
let initialHydrationReconciled = false;
|
|
103
|
+
const purgeProtectedPayload = () => {
|
|
104
|
+
purgeConvexIdentityPayloadKeys(nuxtApp);
|
|
105
|
+
queryErrors.value = retainAnonymousConvexQueryErrors(queryErrors.value);
|
|
106
|
+
clearNuxtData((key) => {
|
|
107
|
+
const mode = readAuthMode(key);
|
|
108
|
+
return mode === "required" || mode === "optional";
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
publishCurrentSessionAcceptance = () => {
|
|
112
|
+
const snapshot = runtime.attachment.identity.snapshot();
|
|
113
|
+
if (snapshot.settled && latestProviderSession && latestProviderSession.revision === runtimeProviderRevision) {
|
|
114
|
+
synchronization?.observeAccepted(latestProviderSession, Boolean(snapshot.error));
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const reconcileProtectedPayload = () => {
|
|
118
|
+
const snapshot = runtime.attachment.identity.snapshot();
|
|
119
|
+
const generation = snapshot.identityGeneration;
|
|
120
|
+
runtimeProviderRevision = adapter.snapshot().sessionGeneration;
|
|
121
|
+
if (!initialHydrationReconciled) {
|
|
122
|
+
if (snapshot.identityKey !== ssrIdentityKey) {
|
|
123
|
+
initialHydrationReconciled = true;
|
|
124
|
+
purgeProtectedPayload();
|
|
125
|
+
} else if (snapshot.settled) {
|
|
126
|
+
initialHydrationReconciled = true;
|
|
127
|
+
}
|
|
128
|
+
} else if (generation !== observedIdentityGeneration) {
|
|
129
|
+
purgeProtectedPayload();
|
|
130
|
+
}
|
|
131
|
+
observedIdentityGeneration = generation;
|
|
132
|
+
if (snapshot.error) {
|
|
133
|
+
identity.value = ANONYMOUS_IDENTITY;
|
|
134
|
+
authError.value = snapshot.error.message;
|
|
135
|
+
pendingState.value = false;
|
|
136
|
+
}
|
|
137
|
+
publishCurrentSessionAcceptance();
|
|
138
|
+
};
|
|
139
|
+
const stopProtectedPayloadObservation = runtime.attachment.identity.subscribe(reconcileProtectedPayload);
|
|
140
|
+
reconcileProtectedPayload();
|
|
141
|
+
let disposed = false;
|
|
142
|
+
const operations = createAuthOperationTracker();
|
|
143
|
+
const refreshConvexAuthentication = Reflect.get(vuePlugin, INTERNAL_REFRESH_AUTH);
|
|
144
|
+
if (typeof refreshConvexAuthentication !== "function") {
|
|
145
|
+
throw new TypeError("[better-convex-nuxt] Vue auth refresh seam is unavailable");
|
|
146
|
+
}
|
|
147
|
+
synchronization = createSessionSynchronization({
|
|
148
|
+
timeoutMs: SESSION_RECONCILIATION_TIMEOUT_MS,
|
|
149
|
+
refetchCanonicalSession: () => Reflect.apply(refreshConvexAuthentication, vuePlugin, []),
|
|
150
|
+
failClosed(failure) {
|
|
151
|
+
adapter.failClosed(failure.message);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
if (latestProviderSession) synchronization.observeProvider(latestProviderSession);
|
|
155
|
+
reconcileProtectedPayload();
|
|
156
|
+
const integratedClient = createIntegratedAuthClient(
|
|
157
|
+
authClient,
|
|
158
|
+
synchronization,
|
|
159
|
+
operations.track
|
|
160
|
+
);
|
|
161
|
+
const controller = {
|
|
162
|
+
isPending: computed(() => pendingState.value || operations.isPending.value),
|
|
163
|
+
client: integratedClient,
|
|
164
|
+
async ready(options) {
|
|
165
|
+
const ready = runtime.attachment.identity.waitForInitialSettlement();
|
|
166
|
+
const timeoutMs = options?.timeoutMs ?? 0;
|
|
167
|
+
if (timeoutMs <= 0) await ready;
|
|
168
|
+
else {
|
|
169
|
+
await new Promise((resolve, reject) => {
|
|
170
|
+
const timer = setTimeout(resolve, timeoutMs);
|
|
171
|
+
void ready.then(
|
|
172
|
+
() => {
|
|
173
|
+
clearTimeout(timer);
|
|
174
|
+
resolve();
|
|
175
|
+
},
|
|
176
|
+
(error) => {
|
|
177
|
+
clearTimeout(timer);
|
|
178
|
+
reject(error);
|
|
179
|
+
}
|
|
180
|
+
);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
const snapshot = runtime.attachment.identity.snapshot();
|
|
184
|
+
if (!snapshot.settled) return "loading";
|
|
185
|
+
if (snapshot.error) return "error";
|
|
186
|
+
return snapshot.identityKey === "anonymous" ? "anonymous" : "authenticated";
|
|
187
|
+
},
|
|
188
|
+
dispose() {
|
|
189
|
+
if (disposed) return;
|
|
190
|
+
disposed = true;
|
|
191
|
+
synchronization?.dispose();
|
|
192
|
+
adapter.dispose();
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
runtime.attachAuthController(controller);
|
|
196
|
+
nuxtApp.vueApp.onUnmount(() => {
|
|
197
|
+
stopProtectedPayloadObservation();
|
|
198
|
+
runtime.dispose();
|
|
199
|
+
});
|
|
200
|
+
if (typeof window !== "undefined" && import.meta.dev) {
|
|
201
|
+
const waterfall = useState("convex:authWaterfall", () => null);
|
|
202
|
+
const instanceId = useState(
|
|
203
|
+
"convex:devtoolsInstanceId",
|
|
204
|
+
() => `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`
|
|
205
|
+
);
|
|
206
|
+
setupNuxtDevtoolsClient({
|
|
207
|
+
runtime,
|
|
208
|
+
token: computed(() => identityToken(identity.value)),
|
|
209
|
+
user: computed(() => identityUser(identity.value)),
|
|
210
|
+
waterfall,
|
|
211
|
+
instanceId: instanceId.value,
|
|
212
|
+
logger,
|
|
213
|
+
onDispose: (dispose) => nuxtApp.vueApp.onUnmount(dispose)
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { createBetterConvex } from "@lupinum/better-convex-vue";
|
|
2
|
+
import { computed } from "vue";
|
|
3
|
+
import { defineNuxtPlugin, useRuntimeConfig, useState } from "#app";
|
|
4
|
+
import { identityToken, identityUser } from "./auth/auth-identity.js";
|
|
5
|
+
import { setupNuxtDevtoolsClient } from "./devtools/setup-client.js";
|
|
6
|
+
import { createConvexRuntimeContext, readConvexRuntimeContext } from "./runtime-context.js";
|
|
7
|
+
import { useConvexIdentityState } from "./utils/auth-identity-state.js";
|
|
8
|
+
import { useConvexAuthPendingState } from "./utils/auth-pending-state.js";
|
|
9
|
+
import { createLogger, getLogLevel } from "./utils/logger.js";
|
|
10
|
+
import { getConvexRuntimeConfig } from "./utils/runtime-config.js";
|
|
11
|
+
export default defineNuxtPlugin({
|
|
12
|
+
name: "convex:core-client",
|
|
13
|
+
setup(nuxtApp) {
|
|
14
|
+
const config = useRuntimeConfig();
|
|
15
|
+
const convexConfig = getConvexRuntimeConfig();
|
|
16
|
+
const publicConvex = config.public.convex;
|
|
17
|
+
const logger = createLogger(getLogLevel(publicConvex));
|
|
18
|
+
if (readConvexRuntimeContext(nuxtApp) || !convexConfig.url) return;
|
|
19
|
+
const plugin = createBetterConvex({ convexUrl: convexConfig.url });
|
|
20
|
+
nuxtApp.vueApp.use(plugin);
|
|
21
|
+
const runtime = createConvexRuntimeContext(plugin.attachment(), logger);
|
|
22
|
+
nuxtApp.provide("convexRuntime", runtime);
|
|
23
|
+
nuxtApp.vueApp.onUnmount(runtime.dispose);
|
|
24
|
+
useConvexAuthPendingState().value = false;
|
|
25
|
+
if (typeof window !== "undefined" && import.meta.dev) {
|
|
26
|
+
const identity = useConvexIdentityState();
|
|
27
|
+
const waterfall = useState("convex:authWaterfall", () => null);
|
|
28
|
+
const instanceId = useState(
|
|
29
|
+
"convex:devtoolsInstanceId",
|
|
30
|
+
() => `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`
|
|
31
|
+
);
|
|
32
|
+
setupNuxtDevtoolsClient({
|
|
33
|
+
runtime,
|
|
34
|
+
token: computed(() => identityToken(identity.value)),
|
|
35
|
+
user: computed(() => identityUser(identity.value)),
|
|
36
|
+
waterfall,
|
|
37
|
+
instanceId: instanceId.value,
|
|
38
|
+
logger,
|
|
39
|
+
onDispose: (dispose) => nuxtApp.vueApp.onUnmount(dispose)
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth-enabled-only server plugin. Registered by the module only
|
|
3
|
+
* when auth is enabled. It runs during SSR to:
|
|
4
|
+
* 1. Read the session cookie from the request
|
|
5
|
+
* 2. Exchange the session cookie for a JWT token via Better Auth API
|
|
6
|
+
* (with optional caching to reduce TTFB)
|
|
7
|
+
* 3. Store the token and user data in useState for client hydration
|
|
8
|
+
*
|
|
9
|
+
* This ensures authenticated state is available on first render with zero flash.
|
|
10
|
+
*/
|
|
11
|
+
declare const _default: import("nuxt/app").Plugin<Record<string, unknown>> & import("nuxt/app").ObjectPlugin<Record<string, unknown>>;
|
|
12
|
+
export default _default;
|