vibe64 0.1.37 → 0.1.39
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/bin/upgrade-state.js +3930 -3912
- package/dist/assets/{GithubBrowserTabs-BykoCFfz.js → GithubBrowserTabs-C2NO5l8g.js} +1 -1
- package/dist/assets/{Vibe64AuthSettingsButton-CIwtchKm.js → Vibe64AuthSettingsButton-fY4ZiIFF.js} +1 -1
- package/dist/assets/{Vibe64DashboardShell-DXVDJUAY.js → Vibe64DashboardShell-BSq7uXEW.js} +1 -1
- package/dist/assets/{Vibe64DatabaseWorkspace-Ca8IHSRq.js → Vibe64DatabaseWorkspace-CEml9BWn.js} +1 -1
- package/dist/assets/{Vibe64OutputControls-DngQNTTt.js → Vibe64OutputControls-_zhGX9ne.js} +1 -1
- package/dist/assets/{Vibe64RepositoryWorkspace-BfsZozSJ.js → Vibe64RepositoryWorkspace-obZFXkoG.js} +1 -1
- package/dist/assets/{Vibe64SessionFiles-n87RqqY6.js → Vibe64SessionFiles-CQzs6fee.js} +1 -1
- package/dist/assets/{_sessionId_-B_TTRB4c.js → _sessionId_-CKkGH3Rx.js} +1 -1
- package/dist/assets/{_slug_-DsqilUs_.js → _slug_-BclonbST.js} +7 -7
- package/dist/assets/{_slug_-Buxpw0T4.css → _slug_-CZ1bxO9C.css} +1 -1
- package/dist/assets/{access-tl4ht_d8.js → access-WlhPvPgy.js} +1 -1
- package/dist/assets/{app-DT4_MliP.js → app-BNP_n_Tt.js} +1 -1
- package/dist/assets/{changes-DZWHZguL.js → changes-CHJjrZAc.js} +1 -1
- package/dist/assets/{dashboard-iREwhGqv.js → dashboard-CuutW8iv.js} +1 -1
- package/dist/assets/{definitions-CNu5E87y.js → definitions-BrMvu6yV.js} +1 -1
- package/dist/assets/{env-D5KpTEw7.js → env-D3KQGvRe.js} +1 -1
- package/dist/assets/{history-DVURy45X.js → history-1_NU8azF.js} +1 -1
- package/dist/assets/{index-GBRpNZLy.js → index-dNxr4Lg9.js} +4 -4
- package/dist/assets/{integrations-Dy5jIiJ5.js → integrations-BMzWQQpa.js} +1 -1
- package/dist/assets/{issues-lh7R775d.js → issues-Bywux4s7.js} +1 -1
- package/dist/assets/{learning-_O1PEaam.js → learning-Bdi3XRS7.js} +1 -1
- package/dist/assets/{pull-requests-ByE-Dvk7.js → pull-requests-ncmKT3sS.js} +1 -1
- package/dist/assets/{repository-BUfUAyS9.js → repository-BL_2bgzC.js} +1 -1
- package/dist/assets/{settings-CzhIcn9K.js → settings-1rpuL7eR.js} +1 -1
- package/dist/assets/{useArchivedVibe64Sessions-CLHJOyeW.js → useArchivedVibe64Sessions-_LB2XxEa.js} +1 -1
- package/dist/assets/{useVibe64ConversationLog-B4JgmxUf.js → useVibe64ConversationLog-BqUI0S5n.js} +1 -1
- package/dist/assets/{useVibe64SessionData-YhhE_5pC.js → useVibe64SessionData-B686lToN.js} +1 -1
- package/dist/assets/{useVibe64SessionSelection-CuZCzAcY.js → useVibe64SessionSelection-BzL1y_Vq.js} +1 -1
- package/dist/assets/{vibe64SessionFocus-Cz5Vq1re.js → vibe64SessionFocus-CqZNTvYF.js} +1 -1
- package/dist/index.html +1 -1
- package/docs/colleague-usage/learning-environment.md +1 -2
- package/docs/colleague-usage/lesson-step-bar.md +15 -16
- package/docs/colleague-usage/project-language-tools.md +7 -2
- package/docs/training-content.md +2 -1
- package/node_modules/@local/vibe64-genesis/src/server/index.js +47 -46
- package/package.json +3 -3
- package/server.bundle.mjs +23990 -23879
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pages-DuMgH61T.js","assets/runtime-core.esm-bundler-DGXg_mpN.js","assets/useApi-BPuI6ZR9-CFWU1m37.js","assets/route-block-DbL-SuOj.js","assets/app-
|
|
2
|
-
import{$ as useToggleScope,A as useElevation,At as camelizeProps,B as VDefaultsProvider,Cn as isBoolean,D as makeLocationProps,Dn as isNumber,Dt as CircularBuffer,E as useDensity,En as isNullOrUndefined,Et as toPhysical,F as useBackgroundColor,G as makeThemeProps,Gn as withKeys,Gt as getActiveElement,H as useResizeObserver,J as LocaleSymbol,Jt as isComposingIgnoreKey,K as provideTheme,Kn as withModifiers,L as useTextColor,Ln as consoleWarn,M as useBorder,Mt as chunkArray,N as makeRoundedProps,Nn as range,Nt as clamp,O as useLocation,On as isObject$1,Ot as EventProp,P as useRounded,Pt as convertToUnit,Q as useProxiedModel,Qt as keys,R as makeDimensionProps,Rt as ensureValidVNode,S as useVariant,T as makeDensityProps,U as ThemeSymbol,V as makeTagProps,Vn as createApp,W as createTheme,Wn as vShow,X as useLocale,Xt as isPercentage,Y as createLocale,Yn as __exportAll,Z as useRtl,_ as makeGroupProps,a as useRouter,an as pick$1,at as deepEqual,b as genOverlays,cn as resolveSize,ct as DefaultsSymbol,d as VProgressLinear,dn as IN_BROWSER,dt as injectNestedDefaults,en as mergeDeep,et as IconSymbol,fn as PREFERS_REDUCED_MOTION,ft as provideDefaults,g as makeGroupItemProps,gt as propsFactory,h as VIcon,ht as makeComponentProps,in as padStart,it as useRender,j as makeBorderProps,jt as checkPrintable,k as makeElevationProps,kn as isString,ln as templateRef,lt as RootDefaultsSymbol,nn as omit,nt as VClassIcon,o as makePositionProps,on as pickWithRest,ot as defineComponent,q as useTheme,rt as VSvgIcon,s as usePosition,sn as refElement,st as genericComponent,tn as noop,tt as IconValue,un as wrapInArray,ut as createDefaults,v as useGroup,wn as isFunction,x as makeVariantProps,y as useGroupItem,z as useDimension,zn as Transition,zt as escapeForRegex}from"./ripple-BVltMmyV.js";import{$ as mergeModels,$n as normalizeProps,B as h$1,Cn as toRaw,D as createVNode,E as createTextVNode,En as toValue,Ft as useModel,H as hasInjectionContext,Ht as watch,J as inject$1,L as getCurrentInstance,Lt as useSlots,Nt as useAttrs,On as unref,Pt as useId,T as createStaticVNode,Ut as watchEffect,Wt as watchPostEffect,Yt as withDirectives,Zn as normalizeClass,_ as createBaseVNode,_n as readonly,an as getCurrentScope,b as createElementBlock,bt as renderList,ct as onMounted,er as normalizeStyle,et as mergeProps,ft as onUnmounted,g as computed,gn as reactive,gt as provide,hn as proxyRefs,in as effectScope,it as onBeforeUnmount,k as defineComponent$1,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,tt as nextTick$1,u as Teleport,un as isRef,v as createBlock,vn as ref,w as createSlots,wn as toRef,wt as resolveDynamicComponent,xn as shallowRef,xt as renderSlot,y as createCommentVNode,yn as shallowReactive,z as guardReactiveProps}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{a as normalizeAdditionalActions,c as normalizeNonNegativeInteger,d as createPinia,f as defineStore,i as normalizeAction,l as normalizeSeverity,n as useShellWebErrorRuntime,o as normalizeChannel,p as storeToRefs,r as createDefaultErrorPolicy,s as normalizeErrorIntent,t as useShellErrorPresentationStore,u as normalizeText$2}from"./error-Dug56can.js";import{A as QueryObserver,B as hashKey,C as AUTH_POLICY_AUTHENTICATED,D as useQuery,E as useMutation,F as notifyManager,G as partialMatchKey,H as matchMutation,I as focusManager,J as useQueryClient,K as resolveQueryValue,L as Subscribable,M as hasNextPage,N as hasPreviousPage,O as useBaseQuery,P as onlineManager,R as environmentManager,S as resolveTextRef,T as ROUTE_VISIBILITY_PUBLIC,U as matchQuery,V as hashQueryKeyByOptions,W as noop$1,X as getClientKey,Y as cloneDeepUnref,a as mergeQueryMeta,b as ROUTE_VISIBILITY_WORKSPACE,i as useRealtimeQueryInvalidation,j as Query,k as Mutation,l as asPlainObject,n as resolveOperationRealtimeOptions,o as mergeRequestRecoveryQueryMeta,q as skipToken,s as toQueryErrorMessage,t as useEndpointResource,w as AUTH_POLICY_PUBLIC,x as resolveEnabledRef,y as resolveResourceMessages,z as functionalUpdate}from"./useEndpointResource-DWoQ2keu.js";import{_ as useRouter$1,a as isAbsolutePath,c as isNavigationFailure,d as mergeOptions,f as noop$2,g as useRoute,h as routerViewLocationKey,i as createRouterError,l as isRouteComponent$1,m as routerKey,n as applyToParams,o as isArray,p as routeLocationKey,r as assign,s as isESModule,u as matchedRouteKey,v as viewDepthKey}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{a as normalizeSurfaceId$1,c as normalizePathname$1,i as deriveSurfaceRouteBaseFromPagesRoot,o as normalizeSurfacePagesRoot,r as createSurfaceRegistry,s as createSurfacePathHelpers,t as resolveScopedApiBasePath}from"./surface-DY1u73tB.js";import{_ as resolveLinkPath,a as resolveSurfaceNavigationTargetFromPlacementContext,c as useWebPlacementRuntime,d as normalizePlacementDefinition,f as normalizePlacementTarget,g as isExternalLinkTarget,h as normalizePlacementTopologyDefinition,i as resolveSurfaceIdFromPlacementPathname,m as normalizePlacementLayoutClass,n as readPlacementSurfaceConfig,p as normalizeSurface,r as resolveSurfaceDefinitionFromPlacementContext,s as useWebPlacementContext,t as buildSurfaceConfigContext,u as isRenderableComponent,v as splitPathQueryHash}from"./placement-CwTqWLQH.js";import{A as buildJsonApiFieldsetsToken,D as validateSchemaPayload,E as RECORD_ID_PATTERN,M as resolveFieldErrors,N as appendQueryString,O as createCursorListValidator,P as splitPathQueryAndHash,S as transientQueryRetryDelay,T as encodeJsonApiResourceQueryObject,_ as createCapabilityRuntime,b as createHttpClient,c as projectSlugFromRoute,d as configureHttpWebClient,f as createHttpWebClient,g as validateOperationSection,h as client_exports$12,j as normalizeJsonApiFieldsets,k as createSchema,l as vibe64ProjectQueryScope,m as httpWebClient,n as useRealtimeEvent,o as projectAppPath,p as getHttpWebClient,r as useRealtimeSocket,s as projectSlugFromPathname,t as EMPTY_REALTIME_SOCKET,u as vibe64ProjectScopedStorageKey,v as defineProvider,x as shouldRetryTransientQueryFailure}from"./useRealtimeEvent-Bwapstla.js";import{t as __vitePreload}from"./preload-helper-BvdcsxN9.js";import{a as useFilter,c as useScrolling,d as VVirtualScroll,i as makeFilterProps,l as useFocusRepair,n as makeSelectProps,o as useFocusGroups,r as useMenuActivator,s as useSelectionMenu,t as VSelect,u as VHighlight}from"./VSelect-DL3HaA5m.js";import{a as useFocusTrap,d as getScrollParent,f as animate,i as makeFocusTrapProps,l as forwardRefs,n as makeVOverlayProps,o as makeDelayProps,r as useScopeId,s as useDelay,t as VOverlay}from"./VOverlay-CeMZurIN.js";import{t as createSimpleFunctional}from"./createSimpleFunctional-CZTGuNuR.js";import{a as MaybeTransition,b as standardEasing,f as DisplaySymbol,g as useDisplay,h as makeDisplayProps,i as Intersect,l as VFadeTransition,m as createDisplay,n as VBadge,r as VImg,s as VExpandTransition,t as VAvatar}from"./VAvatar-DPzqDH4r.js";import{a as useItems,i as transformItem,n as VList,o as VListSubheader,s as VListItem,t as VMenu}from"./VMenu-C_x18lwb.js";import{a as GoToSymbol,i as makeVSlideGroupProps,o as createGoTo,r as VSlideGroup,t as VChip}from"./VChip-CcI-Oo2J.js";import{a as makeLayoutProps,i as makeLayoutItemProps,n as VuetifyLayoutKey,o as useLayout,r as createLayout,s as useLayoutItem,t as useVibe64Learning}from"./useVibe64Learning-DyqXkpLw.js";import{g as VCheckboxBtn,h as useInputIcon,n as makeVTextFieldProps,p as useForm,t as VTextField}from"./VTextField-BR2eZeFT.js";import{a as VIBE64_COLLEAGUE_INTEGRATIONS_KEY,c as VIBE64_COLLEAGUE_PLAN_KEY,f as VIBE64_LEARNING_KEY,i as VIBE64_COLLEAGUE_DATABASE_KEY,l as VIBE64_COLLEAGUE_PREVIEW_KEY,m as VIBE64_PAGE_FOCUS_KEY,n as VIBE64_ASSISTANT_VIEWER_KEY,o as VIBE64_COLLEAGUE_LAUNCHER_KEY,p as VIBE64_PAGE_ACTIVITY_KEY,r as VIBE64_BROWSER_NAVIGATION_KEY,s as VIBE64_COLLEAGUE_LAYOUT_KEY,t as VIBE64_ASSISTANT_HOST_KEY,u as VIBE64_COLLEAGUE_VIEW_KEY}from"./vibe64AssistantHost-CP6oxv5b.js";import{a as normalizeCanonicalRecordIdText,c as normalizeObject$1,d as normalizeText$3,i as normalizeBoolean,l as normalizePositiveInteger$1,n as isRecord$2,o as normalizeInteger,p as normalizeUniqueTextList,s as normalizeMobileConfig,u as normalizeRecordId}from"./normalize-CO2KHj_d.js";import{t as deepFreeze}from"./deepFreeze-BgoYkoTa.js";import{n as resolveWebSocketUrl$1,t as resolveStudioRequestUrl}from"./studioUrls-DmMMIScP.js";import{Bt as mdiHeadset,Cn as mdiMicrophoneOff,Gn as mdiRobotOutline,Jn as mdiSend,Pt as mdiFolderOutline,Sn as mdiMicrophone,Sr as mdiVolumeOff,U as mdiClose,Ut as mdiHistory,V as mdiClipboardListOutline,Wt as mdiHomeVariantOutline,X as mdiCog,Xn as mdiShieldCrownOutline,Yn as mdiShieldCheckOutline,Z as mdiCogOutline,_n as mdiLogin,b as mdiArrowTopRight,br as mdiViewListOutline,ct as mdiCreditCardOutline,ft as mdiDeleteOutline,gn as mdiLockOutline,hr as mdiTuneVariant,j as mdiCheck,mn as mdiLinkVariant,n as mdiAccountCogOutline,nt as mdiConsoleNetworkOutline,qn as mdiSchoolOutline,r as mdiAccountGroupOutline,sr as mdiStop,t as mdiAccountCircleOutline,vn as mdiLogout,wn as mdiMinus,xn as mdiMessageTextOutline,xr as mdiVolumeHigh,y as mdiArrowRightCircleOutline,yr as mdiViewDashboardOutline,yt as mdiEyeOutline}from"./mdi-CG9pWOSj.js";import{t as useSsrBoot}from"./ssrBoot-Rlh6kLbD.js";import{a as VBtnToggleSymbol,n as makeVBtnProps,r as VProgressCircular,t as VBtn}from"./VBtn-B2MBK2DL.js";import{t as VAlert}from"./VAlert-P256xaE0.js";import{t as VAutocomplete}from"./VAutocomplete-BDb95qJX.js";import{t as VCheckbox}from"./VCheckbox-C7A1ZW4D.js";import{t as VDivider}from"./VDivider-BMEqUoAB.js";import{n as useLazy,t as makeLazyProps}from"./lazy-NHSwD9FS.js";import{n as makeVSheetProps,t as VSheet}from"./VSheet-DZWsu0kL.js";import{n as makeVDialogProps,t as VDialog}from"./VDialog-Bu3EfKb1.js";import{a as VCardSubtitle,i as VCardTitle,n as VCardText,o as VCardActions,r as VCardItem,t as VCard}from"./VCard-mXy0k4aS.js";import{t as VRow}from"./VRow-Cpw7OHQV.js";import{t as VSpacer}from"./VSpacer-Dhmsvk4t.js";import{i as VExpansionPanelText,n as VExpansionPanel,t as VExpansionPanels}from"./VExpansionPanels-Dgjrop0V.js";import{S as VForm,a as _sfc_main$63,b as VIBE64_CONNECTIONS_CHANGED_EVENT,c as aiOnboardingNeeded,f as registerVibe64ColleagueModel,i as AiOnboardingNudge_default,o as aiOnboardingAvailable,t as client_exports$13,u as requestVibe64AiOnboarding,x as VTooltip,y as VIBE64_ACCOUNTS_CHANGED_EVENT}from"./client-BWV84wi2.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-CttxM1tw.js";import{t as VSwitch}from"./VSwitch-BRHeDJkH.js";import{t as VTextarea}from"./VTextarea-DbqamXJd.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{_ as parseLongTextReviewBlocks,c as AssistantPromptInput_default,d as numberedQuestionSubmissionText,f as parseNumberedQuestionPrompt,g as LongTextPreviewBlocks_default,h as _sfc_main$64,l as AssistantTranscript_default,n as AssistantConversationElement_default,p as parseAnswerChoicePrompt}from"./conversation-B90ERX9h.js";import{t as normalizeThinkingMessageText}from"./thinkingText-DewCOEcu.js";import{c as createAsyncModuleRecoveryState,d as installAsyncModuleRecoveryHandlers,f as isDynamicImportError,i as useShellAsyncModuleRecoveryRuntime,p as notifyAsyncModuleLoadError,r as SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY,u as guardedReloadApp}from"./useVibe64Terminal-Cg3idMcy.js";import{t as resolveRuntimePathname}from"./pathname-Bb895US8.js";import{n as resolveShellLinkPath,r as useSurfaceRouteContext,t as usePaths}from"./usePaths-Db88-HOm.js";import{l as VIBE64_AGENT_PROVIDERS}from"./shared-DpMvYJO3.js";import{s as assistantRoutingFromMetadata}from"./assistantRouting-D4XpXcEf.js";import{a as useOperationScope,c as resolveRouteParamsSource,d as toRouteParamValue,f as useAccess,i as useFieldErrorBag,l as resolveRouteTemplateLocation,n as setupOperationErrorReporting,o as normalizeRouteParamName,p as validateOperationInput,r as setupRouteChangeCleanup,s as resolveRouteParamNamesInOrder,t as useCommand,u as resolveScopedRoutePathname}from"./useCommand-Bqxb-naz.js";import{t as useUiFeedback}from"./useUiFeedback-BPBF_0bp.js";import{r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-Bp1ImZlz.js";import{n as vibe64RealtimeOriginPayload}from"./vibe64BrowserTabOrigin-SF9E31vi.js";import{t as useVibe64DatabaseTools}from"./useVibe64DatabaseTools-4o6S8eXq.js";import{t as useVibe64SystemGraph}from"./useVibe64SystemGraph-B4RmsC9Y.js";(function polyfill(){const relList=document.createElement(`link`).relList;if(relList&&relList.supports&&relList.supports(`modulepreload`))return;for(const link of document.querySelectorAll(`link[rel="modulepreload"]`))processPreload(link);new MutationObserver(mutations=>{for(const mutation of mutations){if(mutation.type!==`childList`)continue;for(const node of mutation.addedNodes)if(node.tagName===`LINK`&&node.rel===`modulepreload`)processPreload(node)}}).observe(document,{childList:true,subtree:true});function getFetchOpts(link){const fetchOpts={};if(link.integrity)fetchOpts.integrity=link.integrity;if(link.referrerPolicy)fetchOpts.referrerPolicy=link.referrerPolicy;if(link.crossOrigin===`use-credentials`)fetchOpts.credentials=`include`;else if(link.crossOrigin===`anonymous`)fetchOpts.credentials=`omit`;else fetchOpts.credentials=`same-origin`;return fetchOpts}function processPreload(link){if(link.ep)return;link.ep=true;const fetchOpts=getFetchOpts(link);fetch(link.href,fetchOpts)}})();var InfiniteQueryObserver=class extends QueryObserver{constructor(client,options){super(client,options)}bindMethods(){super.bindMethods();this.fetchNextPage=this.fetchNextPage.bind(this);this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(options){options._type=`infinite`;super.setOptions(options)}getOptimisticResult(options){options._type=`infinite`;return super.getOptimisticResult(options)}fetchNextPage(options){return this.fetch({...options,meta:{fetchMore:{direction:`forward`}}})}fetchPreviousPage(options){return this.fetch({...options,meta:{fetchMore:{direction:`backward`}}})}createResult(query,options){const{state}=query;const parentResult=super.createResult(query,options);const{isFetching,isRefetching,isError,isRefetchError}=parentResult;const fetchDirection=state.fetchMeta?.fetchMore?.direction;const isFetchNextPageError=isError&&fetchDirection===`forward`;const isFetchingNextPage=isFetching&&fetchDirection===`forward`;const isFetchPreviousPageError=isError&&fetchDirection===`backward`;const isFetchingPreviousPage=isFetching&&fetchDirection===`backward`;return{...parentResult,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:hasNextPage(options,state.data),hasPreviousPage:hasPreviousPage(options,state.data),isFetchNextPageError,isFetchingNextPage,isFetchPreviousPageError,isFetchingPreviousPage,isRefetchError:isRefetchError&&!isFetchNextPageError&&!isFetchPreviousPageError,isRefetching:isRefetching&&!isFetchingNextPage&&!isFetchingPreviousPage}}};var MutationCache$1=class extends Subscribable{#mutations;#scopes;#mutationId;constructor(config={}){super();this.config=config;this.#mutations=new Set;this.#scopes=new Map;this.#mutationId=0}build(client,options,state){const mutation=new Mutation({client,mutationCache:this,mutationId:++this.#mutationId,options:client.defaultMutationOptions(options),state});this.add(mutation);return mutation}add(mutation){this.#mutations.add(mutation);const scope=scopeFor(mutation);if(typeof scope===`string`){const scopedMutations=this.#scopes.get(scope);if(scopedMutations)scopedMutations.push(mutation);else this.#scopes.set(scope,[mutation])}this.notify({type:`added`,mutation})}remove(mutation){if(this.#mutations.delete(mutation)){const scope=scopeFor(mutation);if(typeof scope===`string`){const scopedMutations=this.#scopes.get(scope);if(scopedMutations){if(scopedMutations.length>1){const index=scopedMutations.indexOf(mutation);if(index!==-1)scopedMutations.splice(index,1)}else if(scopedMutations[0]===mutation)this.#scopes.delete(scope)}}}this.notify({type:`removed`,mutation})}canRun(mutation){const scope=scopeFor(mutation);if(typeof scope===`string`){const firstPendingMutation=this.#scopes.get(scope)?.find(m=>m.state.status===`pending`);return!firstPendingMutation||firstPendingMutation===mutation}else return true}runNext(mutation){const scope=scopeFor(mutation);if(typeof scope===`string`)return(this.#scopes.get(scope)?.find(m=>m!==mutation&&m.state.isPaused))?.continue()??Promise.resolve();else return Promise.resolve()}clear(){notifyManager.batch(()=>{this.#mutations.forEach(mutation=>{this.notify({type:`removed`,mutation})});this.#mutations.clear();this.#scopes.clear()})}getAll(){return Array.from(this.#mutations)}find(filters){const defaultedFilters={exact:true,...filters};return this.getAll().find(mutation=>matchMutation(defaultedFilters,mutation))}findAll(filters={}){return this.getAll().filter(mutation=>matchMutation(filters,mutation))}notify(event){notifyManager.batch(()=>{this.listeners.forEach(listener=>{listener(event)})})}resumePausedMutations(){const pausedMutations=this.getAll().filter(x=>x.state.isPaused);return notifyManager.batch(()=>Promise.all(pausedMutations.map(mutation=>mutation.continue().catch(noop$1))))}};function scopeFor(mutation){return mutation.options.scope?.id}var QueryCache$1=class extends Subscribable{#queries;constructor(config={}){super();this.config=config;this.#queries=new Map}build(client,options,state){const queryKey=options.queryKey;const queryHash=options.queryHash??hashQueryKeyByOptions(queryKey,options);let query=this.get(queryHash);if(!query){query=new Query({client,queryKey,queryHash,options:client.defaultQueryOptions(options),state,defaultOptions:client.getQueryDefaults(queryKey)});this.add(query)}return query}add(query){if(!this.#queries.has(query.queryHash)){this.#queries.set(query.queryHash,query);this.notify({type:`added`,query})}}remove(query){const queryInMap=this.#queries.get(query.queryHash);if(queryInMap){query.destroy();if(queryInMap===query)this.#queries.delete(query.queryHash);this.notify({type:`removed`,query})}}clear(){notifyManager.batch(()=>{this.getAll().forEach(query=>{this.remove(query)})})}get(queryHash){return this.#queries.get(queryHash)}getAll(){return[...this.#queries.values()]}find(filters){const defaultedFilters={exact:true,...filters};return this.getAll().find(query=>matchQuery(defaultedFilters,query))}findAll(filters={}){const queries=this.getAll();return Object.keys(filters).length>0?queries.filter(query=>matchQuery(filters,query)):queries}notify(event){notifyManager.batch(()=>{this.listeners.forEach(listener=>{listener(event)})})}onFocus(){notifyManager.batch(()=>{this.getAll().forEach(query=>{query.onFocus()})})}onOnline(){notifyManager.batch(()=>{this.getAll().forEach(query=>{query.onOnline()})})}};var QueryClient$1=class{#queryCache;#mutationCache;#defaultOptions;#queryDefaults;#mutationDefaults;#mountCount;#unsubscribeFocus;#unsubscribeOnline;constructor(config={}){this.#queryCache=config.queryCache||new QueryCache$1;this.#mutationCache=config.mutationCache||new MutationCache$1;this.#defaultOptions=config.defaultOptions||{};this.#queryDefaults=new Map;this.#mutationDefaults=new Map;this.#mountCount=0}mount(){this.#mountCount++;if(this.#mountCount!==1)return;this.#unsubscribeFocus=focusManager.subscribe(async focused=>{if(focused){await this.resumePausedMutations();this.#queryCache.onFocus()}});this.#unsubscribeOnline=onlineManager.subscribe(async online=>{if(online){await this.resumePausedMutations();this.#queryCache.onOnline()}})}unmount(){this.#mountCount--;if(this.#mountCount!==0)return;this.#unsubscribeFocus?.();this.#unsubscribeFocus=void 0;this.#unsubscribeOnline?.();this.#unsubscribeOnline=void 0}isFetching(filters){return this.#queryCache.findAll({...filters,fetchStatus:`fetching`}).length}isMutating(filters){return this.#mutationCache.findAll({...filters,status:`pending`}).length}getQueryData(queryKey){const options=this.defaultQueryOptions({queryKey});return this.#queryCache.get(options.queryHash)?.state.data}ensureQueryData(options){const defaultedOptions=this.defaultQueryOptions(options);const query=this.#queryCache.build(this,defaultedOptions);const cachedData=query.state.data;if(cachedData===void 0)return this.fetchQuery(options);if(options.revalidateIfStale&&query.isStaleByTime(resolveQueryValue(defaultedOptions.staleTime,query)))this.prefetchQuery(defaultedOptions);return Promise.resolve(cachedData)}getQueriesData(filters){return this.#queryCache.findAll(filters).map(({queryKey,state})=>{return[queryKey,state.data]})}setQueryData(queryKey,updater,options){const defaultedOptions=this.defaultQueryOptions({queryKey});const prevData=this.#queryCache.get(defaultedOptions.queryHash)?.state.data;const data=functionalUpdate(updater,prevData);if(data===void 0)return;return this.#queryCache.build(this,defaultedOptions).setData(data,{...options,manual:true})}setQueriesData(filters,updater,options){return notifyManager.batch(()=>this.#queryCache.findAll(filters).map(({queryKey})=>[queryKey,this.setQueryData(queryKey,updater,options)]))}getQueryState(queryKey){const options=this.defaultQueryOptions({queryKey});return this.#queryCache.get(options.queryHash)?.state}removeQueries(filters){const queryCache=this.#queryCache;notifyManager.batch(()=>{queryCache.findAll(filters).forEach(query=>{queryCache.remove(query)})})}resetQueries(filters,options){const queryCache=this.#queryCache;return notifyManager.batch(()=>{const matched=queryCache.findAll(filters);const queriesToRefetch=new Set(matched);matched.forEach(query=>{query.reset()});return this.refetchQueries({type:`active`,predicate:query=>queriesToRefetch.has(query)},options)})}cancelQueries(filters,cancelOptions={}){const defaultedCancelOptions={revert:true,...cancelOptions};const promises=notifyManager.batch(()=>this.#queryCache.findAll(filters).map(query=>query.cancel(defaultedCancelOptions)));return Promise.all(promises).then(noop$1).catch(noop$1)}invalidateQueries(filters,options={}){return notifyManager.batch(()=>{this.#queryCache.findAll(filters).forEach(query=>{query.invalidate()});if(filters?.refetchType===`none`)return Promise.resolve();return this.refetchQueries({...filters,type:filters?.refetchType??filters?.type??`active`},options)})}refetchQueries(filters,options={}){const fetchOptions={...options,cancelRefetch:options.cancelRefetch??true};const promises=notifyManager.batch(()=>this.#queryCache.findAll(filters).filter(query=>!query.isDisabled()&&!query.isStatic()).map(query=>{let promise=query.fetch(void 0,fetchOptions);if(!fetchOptions.throwOnError)promise=promise.catch(noop$1);return query.state.fetchStatus===`paused`?Promise.resolve():promise}));return Promise.all(promises).then(noop$1)}async query(options){const defaultedOptions=this.defaultQueryOptions(options);if(defaultedOptions.retry===void 0)defaultedOptions.retry=false;const query=this.#queryCache.build(this,defaultedOptions);const queryData=query.isStaleByTime(resolveQueryValue(defaultedOptions.staleTime,query))?await query.fetch(defaultedOptions):query.state.data;const select=defaultedOptions.select;if(select)return select(queryData);return queryData}fetchQuery(options){const defaultedOptions=this.defaultQueryOptions(options);if(defaultedOptions.retry===void 0)defaultedOptions.retry=false;const query=this.#queryCache.build(this,defaultedOptions);return query.isStaleByTime(resolveQueryValue(defaultedOptions.staleTime,query))?query.fetch(defaultedOptions):Promise.resolve(query.state.data)}prefetchQuery(options){return this.fetchQuery(options).then(noop$1).catch(noop$1)}infiniteQuery(options){options._type=`infinite`;return this.query(options)}fetchInfiniteQuery(options){options._type=`infinite`;return this.fetchQuery(options)}prefetchInfiniteQuery(options){return this.fetchInfiniteQuery(options).then(noop$1).catch(noop$1)}ensureInfiniteQueryData(options){options._type=`infinite`;return this.ensureQueryData(options)}resumePausedMutations(){if(onlineManager.isOnline())return this.#mutationCache.resumePausedMutations();return Promise.resolve()}getQueryCache(){return this.#queryCache}getMutationCache(){return this.#mutationCache}getDefaultOptions(){return this.#defaultOptions}setDefaultOptions(options){this.#defaultOptions=options}setQueryDefaults(queryKey,options){this.#queryDefaults.set(hashKey(queryKey),{queryKey,defaultOptions:options})}getQueryDefaults(queryKey){const defaults=[...this.#queryDefaults.values()];const result={};defaults.forEach(queryDefault=>{if(partialMatchKey(queryKey,queryDefault.queryKey))Object.assign(result,queryDefault.defaultOptions)});return result}setMutationDefaults(mutationKey,options){this.#mutationDefaults.set(hashKey(mutationKey),{mutationKey,defaultOptions:options})}getMutationDefaults(mutationKey){const defaults=[...this.#mutationDefaults.values()];const result={};defaults.forEach(queryDefault=>{if(partialMatchKey(mutationKey,queryDefault.mutationKey))Object.assign(result,queryDefault.defaultOptions)});return result}defaultQueryOptions(options){if(options._defaulted)return options;const defaultedOptions={...this.#defaultOptions.queries,...this.getQueryDefaults(options.queryKey),...options,_defaulted:true};if(!defaultedOptions.queryHash)defaultedOptions.queryHash=hashQueryKeyByOptions(defaultedOptions.queryKey,defaultedOptions);if(defaultedOptions.refetchOnReconnect===void 0)defaultedOptions.refetchOnReconnect=defaultedOptions.networkMode!==`always`;if(defaultedOptions.throwOnError===void 0)defaultedOptions.throwOnError=!!defaultedOptions.suspense;if(!defaultedOptions.networkMode&&defaultedOptions.persister)defaultedOptions.networkMode=`offlineFirst`;if(defaultedOptions.queryFn===skipToken)defaultedOptions.enabled=false;return defaultedOptions}defaultMutationOptions(options){if(options?._defaulted)return options;return{...this.#defaultOptions.mutations,...options?.mutationKey&&this.getMutationDefaults(options.mutationKey),...options,_defaulted:true}}clear(){this.#queryCache.clear();this.#mutationCache.clear()}};var QueryCache=class extends QueryCache$1{find(filters){return super.find(cloneDeepUnref(filters))}findAll(filters={}){return super.findAll(cloneDeepUnref(filters))}};var MutationCache=class extends MutationCache$1{find(filters){return super.find(cloneDeepUnref(filters))}findAll(filters={}){return super.findAll(cloneDeepUnref(filters))}};var QueryClient=class extends QueryClient$1{constructor(config={}){const vueQueryConfig={defaultOptions:config.defaultOptions,queryCache:config.queryCache||new QueryCache,mutationCache:config.mutationCache||new MutationCache};super(vueQueryConfig);this.isRestoring=ref(false)}isFetching(filters={}){return super.isFetching(cloneDeepUnref(filters))}isMutating(filters={}){return super.isMutating(cloneDeepUnref(filters))}getQueryData(queryKey){return super.getQueryData(cloneDeepUnref(queryKey))}ensureQueryData(options){return super.ensureQueryData(cloneDeepUnref(options))}getQueriesData(filters){return super.getQueriesData(cloneDeepUnref(filters))}setQueryData(queryKey,updater,options={}){return super.setQueryData(cloneDeepUnref(queryKey),updater,cloneDeepUnref(options))}setQueriesData(filters,updater,options={}){return super.setQueriesData(cloneDeepUnref(filters),updater,cloneDeepUnref(options))}getQueryState(queryKey){return super.getQueryState(cloneDeepUnref(queryKey))}removeQueries(filters={}){return super.removeQueries(cloneDeepUnref(filters))}resetQueries(filters={},options={}){return super.resetQueries(cloneDeepUnref(filters),cloneDeepUnref(options))}cancelQueries(filters={},options={}){return super.cancelQueries(cloneDeepUnref(filters),cloneDeepUnref(options))}invalidateQueries(filters={},options={}){const filtersCloned=cloneDeepUnref(filters);const optionsCloned=cloneDeepUnref(options);super.invalidateQueries({...filtersCloned,refetchType:`none`},optionsCloned);if(filtersCloned.refetchType===`none`)return Promise.resolve();const refetchFilters={...filtersCloned,type:filtersCloned.refetchType??filtersCloned.type??`active`};return nextTick$1().then(()=>{return super.refetchQueries(refetchFilters,optionsCloned)})}refetchQueries(filters={},options={}){return super.refetchQueries(cloneDeepUnref(filters),cloneDeepUnref(options))}query(options){return super.query(cloneDeepUnref(options))}fetchQuery(options){return super.fetchQuery(cloneDeepUnref(options))}prefetchQuery(options){return super.prefetchQuery(cloneDeepUnref(options))}infiniteQuery(options){return super.infiniteQuery(cloneDeepUnref(options))}fetchInfiniteQuery(options){return super.fetchInfiniteQuery(cloneDeepUnref(options))}prefetchInfiniteQuery(options){return super.prefetchInfiniteQuery(cloneDeepUnref(options))}setDefaultOptions(options){super.setDefaultOptions(cloneDeepUnref(options))}setQueryDefaults(queryKey,options){super.setQueryDefaults(cloneDeepUnref(queryKey),cloneDeepUnref(options))}getQueryDefaults(queryKey){return super.getQueryDefaults(cloneDeepUnref(queryKey))}setMutationDefaults(mutationKey,options){super.setMutationDefaults(cloneDeepUnref(mutationKey),cloneDeepUnref(options))}getMutationDefaults(mutationKey){return super.getMutationDefaults(cloneDeepUnref(mutationKey))}};var VueQueryPlugin={install:(app,options={})=>{const clientKey=getClientKey(options.queryClientKey);let client;if(`queryClient`in options&&options.queryClient)client=options.queryClient;else{const clientConfig=`queryClientConfig`in options?options.queryClientConfig:void 0;client=new QueryClient(clientConfig)}if(!environmentManager.isServer())client.mount();let persisterUnmount=()=>{};if(options.clientPersister){if(client.isRestoring)client.isRestoring.value=true;const[unmount,promise]=options.clientPersister(client);persisterUnmount=unmount;promise.then(()=>{if(client.isRestoring)client.isRestoring.value=false;options.clientPersisterOnSuccess?.(client)})}const cleanup=()=>{client.unmount();persisterUnmount()};if(app.onUnmount)app.onUnmount(cleanup);else{const originalUnmount=app.unmount;app.unmount=function vueQueryUnmount(){cleanup();originalUnmount()}}if(false)app.mixin({beforeCreate(){if(!this._provided){const provideCache={};Object.defineProperty(this,"_provided",{get:()=>provideCache,set:v=>Object.assign(provideCache,v)})}this._provided[clientKey]=client}});else app.provide(clientKey,client)}};function useInfiniteQuery(options,queryClient){return useBaseQuery(InfiniteQueryObserver,options,queryClient)}var isBrowser=typeof document!==`undefined`;var HASH_RE=/#/g;var AMPERSAND_RE=/&/g;var SLASH_RE=/\//g;var EQUAL_RE=/=/g;var IM_RE=/\?/g;var PLUS_RE=/\+/g;var ENC_BRACKET_OPEN_RE=/%5B/g;var ENC_BRACKET_CLOSE_RE=/%5D/g;var ENC_CARET_RE=/%5E/g;var ENC_BACKTICK_RE=/%60/g;var ENC_CURLY_OPEN_RE=/%7B/g;var ENC_PIPE_RE=/%7C/g;var ENC_CURLY_CLOSE_RE=/%7D/g;var ENC_SPACE_RE=/%20/g;function commonEncode(text){return text==null?``:encodeURI(``+text).replace(ENC_PIPE_RE,`|`).replace(ENC_BRACKET_OPEN_RE,`[`).replace(ENC_BRACKET_CLOSE_RE,`]`)}function encodeHash(text){return commonEncode(text).replace(ENC_CURLY_OPEN_RE,`{`).replace(ENC_CURLY_CLOSE_RE,`}`).replace(ENC_CARET_RE,`^`)}function encodeQueryValue(text){return commonEncode(text).replace(PLUS_RE,`%2B`).replace(ENC_SPACE_RE,`+`).replace(HASH_RE,`%23`).replace(AMPERSAND_RE,`%26`).replace(ENC_BACKTICK_RE,"`").replace(ENC_CURLY_OPEN_RE,`{`).replace(ENC_CURLY_CLOSE_RE,`}`).replace(ENC_CARET_RE,`^`)}function encodeQueryKey(text){return encodeQueryValue(text).replace(EQUAL_RE,`%3D`)}function encodePath(text){return commonEncode(text).replace(HASH_RE,`%23`).replace(IM_RE,`%3F`)}function encodeParam(text){return encodePath(text).replace(SLASH_RE,`%2F`)}function decode$2(text){if(text==null)return null;try{return decodeURIComponent(``+text)}catch{}return``+text}var TRAILING_SLASH_RE=/\/$/;var removeTrailingSlash=path=>path.replace(TRAILING_SLASH_RE,``);function parseURL(parseQuery,location,currentLocation=`/`){let path,query={},searchString=``,hash=``;const hashPos=location.indexOf(`#`);let searchPos=location.indexOf(`?`);searchPos=hashPos>=0&&searchPos>hashPos?-1:searchPos;if(searchPos>=0){path=location.slice(0,searchPos);searchString=location.slice(searchPos,hashPos>0?hashPos:location.length);query=parseQuery(searchString.slice(1))}if(hashPos>=0){path=path||location.slice(0,hashPos);hash=location.slice(hashPos,location.length)}path=resolveRelativePath(path!=null?path:location,currentLocation);return{fullPath:path+searchString+hash,path,query,hash:decode$2(hash)}}function stringifyURL(stringifyQuery,location){const query=location.query?stringifyQuery(location.query):``;return location.path+(query&&`?`)+query+(location.hash||``)}function stripBase(pathname,base){if(!base||!pathname.toLowerCase().startsWith(base.toLowerCase()))return pathname;return pathname.slice(base.length)||`/`}function isSameRouteLocation(stringifyQuery,a,b){const aLastIndex=a.matched.length-1;const bLastIndex=b.matched.length-1;return aLastIndex>-1&&aLastIndex===bLastIndex&&isSameRouteRecord(a.matched[aLastIndex],b.matched[bLastIndex])&&isSameRouteLocationParams(a.params,b.params)&&stringifyQuery(a.query)===stringifyQuery(b.query)&&a.hash===b.hash}function isSameRouteRecord(a,b){return(a.aliasOf||a)===(b.aliasOf||b)}function isSameRouteLocationParams(a,b){if(Object.keys(a).length!==Object.keys(b).length)return false;for(var key in a)if(!isSameRouteLocationParamsValue(a[key],b[key]))return false;return true}function isSameRouteLocationParamsValue(a,b){return isArray(a)?isEquivalentArray(a,b):isArray(b)?isEquivalentArray(b,a):(a&&a.valueOf())===(b&&b.valueOf())}function isEquivalentArray(a,b){return isArray(b)?a.length===b.length&&a.every((value,i)=>value===b[i]):a.length===1&&a[0]===b}function resolveRelativePath(to,from){if(isAbsolutePath(to))return to;if(!to)return from;const fromSegments=from.split(`/`);const toSegments=to.split(`/`);const lastToSegment=toSegments[toSegments.length-1];if(lastToSegment===`..`||lastToSegment===`.`)toSegments.push(``);let position=fromSegments.length-1;let toPosition;let segment;for(toPosition=0;toPosition<toSegments.length;toPosition++){segment=toSegments[toPosition];if(segment===`.`)continue;if(segment===`..`){if(position>1)position--}else break}return fromSegments.slice(0,position).join(`/`)+`/`+toSegments.slice(toPosition).join(`/`)}var START_LOCATION_NORMALIZED={path:`/`,name:void 0,params:{},query:{},hash:``,fullPath:`/`,matched:[],meta:{},redirectedFrom:void 0};function normalizeBase(base){if(!base){if(isBrowser){const baseEl=document.querySelector(`base`);base=baseEl&&baseEl.getAttribute(`href`)||`/`;base=base.replace(/^\w+:\/\/[^/]+/,``)}else base=`/`}if(base[0]!==`/`&&base[0]!==`#`)base=`/`+base;return removeTrailingSlash(base)}var BEFORE_HASH_RE=/^[^#]+#/;function createHref(base,location){return base.replace(BEFORE_HASH_RE,`#`)+location}function getElementPosition(el,offset){const docRect=document.documentElement.getBoundingClientRect();const elRect=el.getBoundingClientRect();return{behavior:offset.behavior,left:elRect.left-docRect.left-(offset.left||0),top:elRect.top-docRect.top-(offset.top||0)}}var computeScrollPosition=()=>history.scrollRestoration===`manual`?{left:window.scrollX,top:window.scrollY}:null;function scrollToPosition(position){let scrollToOptions;if(`el`in position){const positionEl=position.el;const isIdSelector=typeof positionEl===`string`&&positionEl.startsWith(`#`);const el=typeof positionEl===`string`?isIdSelector?document.getElementById(positionEl.slice(1)):document.querySelector(positionEl):positionEl;if(!el)return;scrollToOptions=getElementPosition(el,position)}else scrollToOptions=position;if(`scrollBehavior`in document.documentElement.style)window.scrollTo(scrollToOptions);else window.scrollTo(scrollToOptions.left!=null?scrollToOptions.left:window.scrollX,scrollToOptions.top!=null?scrollToOptions.top:window.scrollY)}function getScrollKey(path,delta){return(history.state?history.state.position-delta:-1)+path}var scrollPositions=new Map;function saveScrollPosition(key){scrollPositions.set(key,computeScrollPosition())}function getSavedScrollPosition(key){const scroll=scrollPositions.get(key);scrollPositions.delete(key);return scroll}function isRouteLocation(route){return typeof route===`string`||route&&typeof route===`object`}function isRouteName(name){return typeof name===`string`||typeof name===`symbol`}function parseQuery(search){const query={};if(search===``||search===`?`)return query;const searchParams=(search[0]===`?`?search.slice(1):search).split(`&`);for(let i=0;i<searchParams.length;++i){const searchParam=searchParams[i].replace(PLUS_RE,` `);const eqPos=searchParam.indexOf(`=`);const key=decode$2(eqPos<0?searchParam:searchParam.slice(0,eqPos));const value=eqPos<0?null:decode$2(searchParam.slice(eqPos+1));if(key in query){let currentValue=query[key];if(!isArray(currentValue))currentValue=query[key]=[currentValue];currentValue.push(value)}else query[key]=value}return query}function stringifyQuery(query){let search=``;for(let key in query){const value=query[key];key=encodeQueryKey(key);if(value==null){if(value!==void 0)search+=(search.length?`&`:``)+key;continue}(isArray(value)?value.map(v=>v&&encodeQueryValue(v)):[value&&encodeQueryValue(value)]).forEach(value=>{if(value!==void 0){search+=(search.length?`&`:``)+key;if(value!=null)search+=`=`+value}})}return search}function normalizeQuery(query){const normalizedQuery={};for(const key in query){const value=query[key];if(value!==void 0)normalizedQuery[key]=isArray(value)?value.map(v=>v==null?null:``+v):value==null?value:``+value}return normalizedQuery}function useCallbacks(){let handlers=[];function add(handler){handlers.push(handler);return()=>{const i=handlers.indexOf(handler);if(i>-1)handlers.splice(i,1)}}function reset(){handlers=[]}return{add,list:()=>handlers.slice(),reset}}function guardToPromiseFn(guard,to,from,record,name,runWithContext=fn=>fn()){const enterCallbackArray=record&&(record.enterCallbacks[name]=record.enterCallbacks[name]||[]);return()=>new Promise((resolve,reject)=>{const next=valid=>{if(valid===false)reject(createRouterError(4,{from,to}));else if(valid instanceof Error)reject(valid);else if(isRouteLocation(valid))reject(createRouterError(2,{from:to,to:valid}));else{if(enterCallbackArray&&record.enterCallbacks[name]===enterCallbackArray&&typeof valid===`function`)enterCallbackArray.push(valid);resolve()}};const guardReturn=runWithContext(()=>guard.call(record&&record.instances[name],to,from,next));let guardCall=Promise.resolve(guardReturn);if(guard.length<3)guardCall=guardCall.then(next);guardCall.catch(err=>reject(err))})}function extractComponentsGuards(matched,guardType,to,from,runWithContext=fn=>fn()){const guards=[];for(const record of matched)for(const name in record.components){let rawComponent=record.components[name];if(guardType!==`beforeRouteEnter`&&!record.instances[name])continue;if(isRouteComponent$1(rawComponent)){const guard=(rawComponent.__vccOpts||rawComponent)[guardType];guard&&guards.push(guardToPromiseFn(guard,to,from,record,name,runWithContext))}else{let componentPromise=rawComponent();guards.push(()=>componentPromise.then(resolved=>{if(!resolved)throw new Error(`Couldn't resolve component "${name}" at "${record.path}"`);const resolvedComponent=isESModule(resolved)?resolved.default:resolved;record.mods[name]=resolved;record.components[name]=resolvedComponent;const guard=(resolvedComponent.__vccOpts||resolvedComponent)[guardType];return guard&&guardToPromiseFn(guard,to,from,record,name,runWithContext)()}))}}return guards}function extractChangingRecords(to,from){const leavingRecords=[];const updatingRecords=[];const enteringRecords=[];const len=Math.max(from.matched.length,to.matched.length);for(let i=0;i<len;i++){const recordFrom=from.matched[i];if(recordFrom){if(to.matched.find(record=>isSameRouteRecord(record,recordFrom)))updatingRecords.push(recordFrom);else leavingRecords.push(recordFrom)}const recordTo=to.matched[i];if(recordTo){if(!from.matched.find(record=>isSameRouteRecord(record,recordTo)))enteringRecords.push(recordTo)}}return[leavingRecords,updatingRecords,enteringRecords]}var createBaseLocation=()=>location.protocol+`//`+location.host;function createCurrentLocation(base,location){const{pathname,search,hash}=location;const hashPos=base.indexOf(`#`);if(hashPos>-1){let slicePos=hash.includes(base.slice(hashPos))?base.slice(hashPos).length:1;let pathFromHash=hash.slice(slicePos);if(pathFromHash[0]!==`/`)pathFromHash=`/`+pathFromHash;return stripBase(pathFromHash,``)}return stripBase(pathname,base)+search+hash}function useHistoryListeners(base,historyState,currentLocation,replace){let listeners=[];let teardowns=[];let pauseState=null;const popStateHandler=({state})=>{const to=createCurrentLocation(base,location);const from=currentLocation.value;const fromState=historyState.value;let delta=0;if(state){currentLocation.value=to;historyState.value=state;if(pauseState&&pauseState===from){pauseState=null;return}delta=fromState?state.position-fromState.position:0}else replace(to);listeners.forEach(listener=>{listener(currentLocation.value,from,{delta,type:`pop`,direction:delta?delta>0?`forward`:`back`:``})})};function pauseListeners(){pauseState=currentLocation.value}function listen(callback){listeners.push(callback);const teardown=()=>{const index=listeners.indexOf(callback);if(index>-1)listeners.splice(index,1)};teardowns.push(teardown);return teardown}function beforeUnloadListener(){const{history}=window;if(!history.state)return;history.replaceState(assign({},history.state,{scroll:computeScrollPosition()}),``)}function destroy(){for(const teardown of teardowns)teardown();teardowns=[];window.removeEventListener(`popstate`,popStateHandler);window.removeEventListener(`pagehide`,beforeUnloadListener)}window.addEventListener(`popstate`,popStateHandler);window.addEventListener(`pagehide`,beforeUnloadListener);return{pauseListeners,listen,destroy}}function buildState(back,current,forward,replaced=false){return{back,current,forward,replaced,position:window.history.length,scroll:null}}function useHistoryStateNavigation(base){const{history,location}=window;const currentLocation={value:createCurrentLocation(base,location)};const historyState={value:history.state};if(!historyState.value)changeLocation(currentLocation.value,{back:null,current:currentLocation.value,forward:null,position:history.length-1,replaced:true,scroll:null},true);function changeLocation(to,state,replace){const hashIndex=base.indexOf(`#`);const url=hashIndex>-1?(location.host&&document.querySelector(`base`)?base:base.slice(hashIndex))+to:createBaseLocation()+base+to;try{history[replace?`replaceState`:`pushState`](state,``,url);historyState.value=state}catch(err){console.error(err);location[replace?`replace`:`assign`](url)}}function replace(to,data){changeLocation(to,assign({},history.state,buildState(historyState.value.back,to,historyState.value.forward,true),data,{position:historyState.value.position}),true);currentLocation.value=to}function push(to,data){const currentState=assign({},historyState.value,history.state,{forward:to,scroll:computeScrollPosition()});changeLocation(currentState.current,currentState,true);changeLocation(to,assign({},buildState(currentLocation.value,to,null),{position:currentState.position+1},data),false);currentLocation.value=to}return{location:currentLocation,state:historyState,push,replace}}function createWebHistory(base){base=normalizeBase(base);const historyNavigation=useHistoryStateNavigation(base);const historyListeners=useHistoryListeners(base,historyNavigation.state,historyNavigation.location,historyNavigation.replace);function go(delta,triggerListeners=true){if(!triggerListeners)historyListeners.pauseListeners();history.go(delta)}const routerHistory=assign({location:``,base,go,createHref:createHref.bind(null,base)},historyNavigation,historyListeners);Object.defineProperty(routerHistory,"location",{enumerable:true,get:()=>historyNavigation.location.value});Object.defineProperty(routerHistory,"state",{enumerable:true,get:()=>historyNavigation.state.value});return routerHistory}var ROOT_TOKEN={type:0,value:``};var VALID_PARAM_RE=/[a-zA-Z0-9_]/;function tokenizePath(path){if(!path)return[[]];if(path===`/`)return[[ROOT_TOKEN]];if(!isAbsolutePath(path))throw new Error(`Invalid path "${path}"`);function crash(message){throw new Error(`ERR (${state})/"${buffer}": ${message}`)}let state=0;let previousState=state;const tokens=[];let segment;function finalizeSegment(){if(segment)tokens.push(segment);segment=[]}let i=0;let char;let buffer=``;let customRe=``;function consumeBuffer(){if(!buffer)return;if(state===0)segment.push({type:0,value:buffer});else if(state===1||state===2||state===3){if(segment.length>1&&(char===`*`||char===`+`))crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);segment.push({type:1,value:buffer,regexp:customRe,repeatable:char===`*`||char===`+`,optional:char===`*`||char===`?`})}else crash(`Invalid state to consume buffer`);buffer=``}function addCharToBuffer(){buffer+=char}while(i<path.length){char=path[i++];switch(state){case 0:if(char===`\\`){previousState=state;state=4}else if(char===`/`){if(buffer)consumeBuffer();finalizeSegment()}else if(char===`:`){consumeBuffer();state=1}else addCharToBuffer();break;case 4:addCharToBuffer();state=previousState;break;case 1:if(char===`(`)state=2;else if(VALID_PARAM_RE.test(char))addCharToBuffer();else{consumeBuffer();state=0;if(char!==`*`&&char!==`?`&&char!==`+`)i--}break;case 2:if(char===`)`){if(customRe[customRe.length-1]==`\\`)customRe=customRe.slice(0,-1)+char;else state=3}else customRe+=char;break;case 3:consumeBuffer();state=0;if(char!==`*`&&char!==`?`&&char!==`+`)i--;customRe=``;break;default:crash(`Unknown state`)}}if(state===2)crash(`Unfinished custom RegExp for param "${buffer}"`);consumeBuffer();finalizeSegment();return tokens}var BASE_PARAM_PATTERN=`[^/]+?`;var BASE_PATH_PARSER_OPTIONS={sensitive:false,strict:false,start:true,end:true};var REGEX_CHARS_RE=/[.+*?^${}()[\]/\\]/g;function tokensToParser(segments,extraOptions){const options=assign({},BASE_PATH_PARSER_OPTIONS,extraOptions);const score=[];let pattern=options.start?`^`:``;const keys=[];for(const segment of segments){const segmentScores=segment.length?[]:[90];if(options.strict&&!segment.length)pattern+=`/`;for(let tokenIndex=0;tokenIndex<segment.length;tokenIndex++){const token=segment[tokenIndex];let subSegmentScore=40+(options.sensitive?.25:0);if(token.type===0){if(!tokenIndex)pattern+=`/`;pattern+=token.value.replace(REGEX_CHARS_RE,`\\$&`);subSegmentScore+=40}else if(token.type===1){const{value,repeatable,optional,regexp}=token;keys.push({name:value,repeatable,optional});const re=regexp?regexp:BASE_PARAM_PATTERN;if(re!==BASE_PARAM_PATTERN){subSegmentScore+=10;try{new RegExp(`(${re})`)}catch(err){throw new Error(`Invalid custom RegExp for param "${value}" (${re}): `+err.message)}}let subPattern=repeatable?`((?:${re})(?:/(?:${re}))*)`:`(${re})`;if(!tokenIndex)subPattern=optional&&segment.length<2?`(?:/${subPattern})`:`/`+subPattern;if(optional)subPattern+=`?`;pattern+=subPattern;subSegmentScore+=20;if(optional)subSegmentScore+=-8;if(repeatable)subSegmentScore+=-20;if(re===`.*`)subSegmentScore+=-50}segmentScores.push(subSegmentScore)}score.push(segmentScores)}if(options.strict&&options.end){const i=score.length-1;score[i][score[i].length-1]+=.7000000000000001}if(!options.strict)pattern+=`/?`;if(options.end)pattern+=`$`;else if(options.strict&&!pattern.endsWith(`/`))pattern+=`(?:/|$)`;const re=new RegExp(pattern,options.sensitive?``:`i`);function parse(path){const match=path.match(re);const params={};if(!match)return null;for(let i=1;i<match.length;i++){const value=match[i]||``;const key=keys[i-1];params[key.name]=value&&key.repeatable?value.split(`/`):value}return params}function stringify(params){let path=``;let avoidDuplicatedSlash=false;for(const segment of segments){if(!avoidDuplicatedSlash||!path.endsWith(`/`))path+=`/`;avoidDuplicatedSlash=false;for(const token of segment)if(token.type===0)path+=token.value;else if(token.type===1){const{value,repeatable,optional}=token;const param=value in params?params[value]:``;if(isArray(param)&&!repeatable)throw new Error(`Provided param "${value}" is an array but it is not repeatable (* or + modifiers)`);const text=isArray(param)?param.join(`/`):param;if(!text){if(optional){if(segment.length<2){if(path.endsWith(`/`))path=path.slice(0,-1);else avoidDuplicatedSlash=true}}else throw new Error(`Missing required param "${value}"`)}path+=text}}return path||`/`}return{re,score,keys,parse,stringify}}function compareScoreArray(a,b){let i=0;while(i<a.length&&i<b.length){const diff=b[i]-a[i];if(diff)return diff;i++}if(a.length<b.length)return a.length===1&&a[0]===80?-1:1;else if(a.length>b.length)return b.length===1&&b[0]===80?1:-1;return 0}function comparePathParserScore(a,b){let i=0;const aScore=a.score;const bScore=b.score;while(i<aScore.length&&i<bScore.length){const comp=compareScoreArray(aScore[i],bScore[i]);if(comp)return comp;i++}if(Math.abs(bScore.length-aScore.length)===1){if(isLastScoreNegative(aScore))return 1;if(isLastScoreNegative(bScore))return-1}return bScore.length-aScore.length}function isLastScoreNegative(score){const last=score[score.length-1];return score.length>0&&last[last.length-1]<0}var PATH_PARSER_OPTIONS_DEFAULTS={strict:false,end:true,sensitive:false};function createRouteRecordMatcher(record,parent,options){const parser=tokensToParser(tokenizePath(record.path),options);const matcher=assign(parser,{record,parent,children:[],alias:[]});if(parent){if(!matcher.record.aliasOf===!parent.record.aliasOf)parent.children.push(matcher)}return matcher}function createRouterMatcher(routes,globalOptions){const matchers=[];const matcherMap=new Map;globalOptions=mergeOptions(PATH_PARSER_OPTIONS_DEFAULTS,globalOptions);function getRecordMatcher(name){return matcherMap.get(name)}function addRoute(record,parent,originalRecord){const isRootAdd=!originalRecord;const mainNormalizedRecord=normalizeRouteRecord(record);mainNormalizedRecord.aliasOf=originalRecord&&originalRecord.record;const options=mergeOptions(globalOptions,record);const normalizedRecords=[mainNormalizedRecord];if(`alias`in record){const aliases=typeof record.alias===`string`?[record.alias]:record.alias;for(const alias of aliases)normalizedRecords.push(normalizeRouteRecord(assign({},mainNormalizedRecord,{components:originalRecord?originalRecord.record.components:mainNormalizedRecord.components,path:alias,aliasOf:originalRecord?originalRecord.record:mainNormalizedRecord})))}let matcher;let originalMatcher;for(const normalizedRecord of normalizedRecords){const{path}=normalizedRecord;if(parent&&!isAbsolutePath(path)){const parentPath=parent.record.path;const connectingSlash=parentPath[parentPath.length-1]===`/`?``:`/`;normalizedRecord.path=parent.record.path+(path&&connectingSlash+path)}matcher=createRouteRecordMatcher(normalizedRecord,parent,options);if(originalRecord)originalRecord.alias.push(matcher);else{originalMatcher=originalMatcher||matcher;if(originalMatcher!==matcher)originalMatcher.alias.push(matcher);if(isRootAdd&&record.name&&!isAliasRecord(matcher))removeRoute(record.name)}if(isMatchable(matcher))insertMatcher(matcher);if(mainNormalizedRecord.children){const children=mainNormalizedRecord.children;for(let i=0;i<children.length;i++)addRoute(children[i],matcher,originalRecord&&originalRecord.children[i])}originalRecord=originalRecord||matcher}return originalMatcher?()=>{removeRoute(originalMatcher)}:noop$2}function removeRoute(matcherRef){if(isRouteName(matcherRef)){const matcher=matcherMap.get(matcherRef);if(matcher){matcherMap.delete(matcherRef);matchers.splice(matchers.indexOf(matcher),1);matcher.children.forEach(removeRoute);matcher.alias.forEach(removeRoute)}}else{const index=matchers.indexOf(matcherRef);if(index>-1){matchers.splice(index,1);if(matcherRef.record.name)matcherMap.delete(matcherRef.record.name);matcherRef.children.forEach(removeRoute);matcherRef.alias.forEach(removeRoute)}}}function getRoutes(){return matchers}function insertMatcher(matcher){const index=findInsertionIndex(matcher,matchers);matchers.splice(index,0,matcher);if(matcher.record.name&&!isAliasRecord(matcher))matcherMap.set(matcher.record.name,matcher)}function resolve(location,currentLocation){let matcher;let params={};let path;let name;if(`name`in location&&location.name){matcher=matcherMap.get(location.name);if(!matcher)throw createRouterError(1,{location});name=matcher.record.name;params=assign(pickParams(currentLocation.params,matcher.keys.filter(k=>!k.optional).concat(matcher.parent?matcher.parent.keys.filter(k=>k.optional):[]).map(k=>k.name)),location.params&&pickParams(location.params,matcher.keys.map(k=>k.name)));path=matcher.stringify(params)}else if(location.path!=null){path=location.path;matcher=matchers.find(m=>m.re.test(path));if(matcher){params=matcher.parse(path);name=matcher.record.name;matcher.keys.forEach(key=>{if(key.optional&&!params[key.name])delete params[key.name]})}}else{matcher=currentLocation.name?matcherMap.get(currentLocation.name):matchers.find(m=>m.re.test(currentLocation.path));if(!matcher)throw createRouterError(1,{location,currentLocation});name=matcher.record.name;params=assign({},currentLocation.params,location.params);path=matcher.stringify(params)}const matched=[];let parentMatcher=matcher;while(parentMatcher){matched.unshift(parentMatcher.record);parentMatcher=parentMatcher.parent}return{name,path,params,matched,meta:mergeMetaFields(matched)}}routes.forEach(route=>addRoute(route));function clearRoutes(){matchers.length=0;matcherMap.clear()}return{addRoute,resolve,removeRoute,clearRoutes,getRoutes,getRecordMatcher}}function pickParams(params,keys){const newParams={};for(const key of keys)if(key in params)newParams[key]=params[key];return newParams}function normalizeRouteRecord(record){const normalized={path:record.path,redirect:record.redirect,name:record.name,meta:record.meta||{},aliasOf:record.aliasOf,beforeEnter:record.beforeEnter,props:normalizeRecordProps(record),children:record.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in record?record.components||null:record.component&&{default:record.component}};Object.defineProperty(normalized,"mods",{value:{}});return normalized}function normalizeRecordProps(record){const propsObject={};const props=record.props||false;if(`component`in record)propsObject.default=props;else for(const name in record.components)propsObject[name]=typeof props===`object`?props[name]:props;return propsObject}function isAliasRecord(record){while(record){if(record.record.aliasOf)return true;record=record.parent}return false}function mergeMetaFields(matched){return matched.reduce((meta,record)=>assign(meta,record.meta),{})}function findInsertionIndex(matcher,matchers){let lower=0;let upper=matchers.length;while(lower!==upper){const mid=lower+upper>>1;if(comparePathParserScore(matcher,matchers[mid])<0)upper=mid;else lower=mid+1}const insertionAncestor=getInsertionAncestor(matcher);if(insertionAncestor)upper=matchers.lastIndexOf(insertionAncestor,upper-1);return upper}function getInsertionAncestor(matcher){let ancestor=matcher;while(ancestor=ancestor.parent)if(isMatchable(ancestor)&&comparePathParserScore(matcher,ancestor)===0)return ancestor}function isMatchable({record}){return!!(record.name||record.components&&Object.keys(record.components).length||record.redirect)}function useLink(props){const router=inject$1(routerKey);const currentRoute=inject$1(routeLocationKey);const route=computed(()=>{const to=unref(props.to);return router.resolve(to)});const activeRecordIndex=computed(()=>{const{matched}=route.value;const{length}=matched;const routeMatched=matched[length-1];const currentMatched=currentRoute.matched;if(!routeMatched||!currentMatched.length)return-1;const index=currentMatched.findIndex(isSameRouteRecord.bind(null,routeMatched));if(index>-1)return index;const parentRecordPath=getOriginalPath(matched[length-2]);return length>1&&getOriginalPath(routeMatched)===parentRecordPath&¤tMatched[currentMatched.length-1].path!==parentRecordPath?currentMatched.findIndex(isSameRouteRecord.bind(null,matched[length-2])):index});const isActive=computed(()=>activeRecordIndex.value>-1&&includesParams(currentRoute.params,route.value.params));const isExactActive=computed(()=>activeRecordIndex.value>-1&&activeRecordIndex.value===currentRoute.matched.length-1&&isSameRouteLocationParams(currentRoute.params,route.value.params));function navigate(e={}){if(guardEvent(e)){const p=router[unref(props.replace)?`replace`:`push`](unref(props.to)).catch(noop$2);if(props.viewTransition&&typeof document!==`undefined`&&`startViewTransition`in document)document.startViewTransition(()=>p);return p}return Promise.resolve()}return{route,href:computed(()=>route.value.href),isActive,isExactActive,navigate}}function preferSingleVNode(vnodes){return vnodes.length===1?vnodes[0]:vnodes}var RouterLink=defineComponent$1({name:`RouterLink`,compatConfig:{MODE:3},props:{to:{type:[String,Object],required:true},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:`page`},viewTransition:Boolean},useLink,setup(props,{slots}){const link=reactive(useLink(props));const{options}=inject$1(routerKey);const elClass=computed(()=>({[getLinkClass(props.activeClass,options.linkActiveClass,`router-link-active`)]:link.isActive,[getLinkClass(props.exactActiveClass,options.linkExactActiveClass,`router-link-exact-active`)]:link.isExactActive}));return()=>{const children=slots.default&&preferSingleVNode(slots.default(link));return props.custom?children:h$1(`a`,{"aria-current":link.isExactActive?props.ariaCurrentValue:null,href:link.href,onClick:link.navigate,class:elClass.value},children)}}});function guardEvent(e){if(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)return;if(e.defaultPrevented)return;if(e.button!==void 0&&e.button!==0)return;if(e.currentTarget&&e.currentTarget.getAttribute){const target=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(target))return}if(e.preventDefault)e.preventDefault();return true}function includesParams(outer,inner){for(const key in inner){const innerValue=inner[key];const outerValue=outer[key];if(isArray(innerValue)){if(!isArray(outerValue)||outerValue.length!==innerValue.length||innerValue.some((value,i)=>value.valueOf()!==outerValue[i].valueOf()))return false}else if(innerValue!==outerValue)return false}return true}function getOriginalPath(record){return record?record.aliasOf?record.aliasOf.path:record.path:``}var getLinkClass=(propClass,globalClass,defaultClass)=>propClass!=null?propClass:globalClass!=null?globalClass:defaultClass;var RouterViewImpl=defineComponent$1({name:`RouterView`,inheritAttrs:false,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(props,{attrs,slots}){const injectedRoute=inject$1(routerViewLocationKey);const routeToDisplay=computed(()=>props.route||injectedRoute.value);const injectedDepth=inject$1(viewDepthKey,0);const depth=computed(()=>{let initialDepth=unref(injectedDepth);const{matched}=routeToDisplay.value;let matchedRoute;while((matchedRoute=matched[initialDepth])&&!matchedRoute.components)initialDepth++;return initialDepth});const matchedRouteRef=computed(()=>routeToDisplay.value.matched[depth.value]);provide(viewDepthKey,computed(()=>depth.value+1));provide(matchedRouteKey,matchedRouteRef);provide(routerViewLocationKey,routeToDisplay);const viewRef=ref();watch(()=>[viewRef.value,matchedRouteRef.value,props.name],([instance,to,name],[oldInstance,from,_oldName])=>{if(to){to.instances[name]=instance;if(from&&from!==to&&instance&&instance===oldInstance){if(!to.leaveGuards.size)to.leaveGuards=from.leaveGuards;if(!to.updateGuards.size)to.updateGuards=from.updateGuards}}if(instance&&to&&(!from||!isSameRouteRecord(to,from)||!oldInstance))(to.enterCallbacks[name]||[]).forEach(callback=>callback(instance))},{flush:`post`});return()=>{const route=routeToDisplay.value;const currentName=props.name;const matchedRoute=matchedRouteRef.value;const ViewComponent=matchedRoute&&matchedRoute.components[currentName];if(!ViewComponent)return normalizeSlot(slots.default,{Component:ViewComponent,route});const routePropsOption=matchedRoute.props[currentName];const routeProps=routePropsOption?routePropsOption===true?route.params:typeof routePropsOption===`function`?routePropsOption(route):routePropsOption:null;const onVnodeUnmounted=vnode=>{if(vnode.component.isUnmounted)matchedRoute.instances[currentName]=null};const component=h$1(ViewComponent,assign({},routeProps,attrs,{onVnodeUnmounted,ref:viewRef}));return normalizeSlot(slots.default,{Component:component,route})||component}}});function normalizeSlot(slot,data){if(!slot)return null;const slotContent=slot(data);return slotContent.length===1?slotContent[0]:slotContent}var RouterView=RouterViewImpl;function createRouter(options){const matcher=createRouterMatcher(options.routes,options);const parseQuery$1=options.parseQuery||parseQuery;const stringifyQuery$1=options.stringifyQuery||stringifyQuery;const routerHistory=options.history;const beforeGuards=useCallbacks();const beforeResolveGuards=useCallbacks();const afterGuards=useCallbacks();const currentRoute=shallowRef(START_LOCATION_NORMALIZED);const routesVersion=shallowRef(0);let pendingLocation=START_LOCATION_NORMALIZED;if(isBrowser&&options.scrollBehavior&&`scrollRestoration`in history)history.scrollRestoration=`manual`;const normalizeParams=applyToParams.bind(null,paramValue=>``+paramValue);const encodeParams=applyToParams.bind(null,encodeParam);const decodeParams=applyToParams.bind(null,decode$2);function addRoute(parentOrRoute,route){let parent;let record;if(isRouteName(parentOrRoute)){parent=matcher.getRecordMatcher(parentOrRoute);record=route}else record=parentOrRoute;const removeRoute=matcher.addRoute(record,parent);routesVersion.value++;return()=>{removeRoute();routesVersion.value++}}function removeRoute(name){const recordMatcher=matcher.getRecordMatcher(name);if(recordMatcher){matcher.removeRoute(recordMatcher);routesVersion.value++}}function clearRoutes(){matcher.clearRoutes();routesVersion.value++}function getRoutes(){return matcher.getRoutes().map(routeMatcher=>routeMatcher.record)}function hasRoute(name){return!!matcher.getRecordMatcher(name)}function resolve(rawLocation,currentLocation){routesVersion.value;if(typeof rawLocation===`string`){currentLocation=currentLocation||(rawLocation.startsWith(`/`)?START_LOCATION_NORMALIZED:currentRoute.value);const locationNormalized=parseURL(parseQuery$1,rawLocation,currentLocation.path);const matchedRoute=matcher.resolve({path:locationNormalized.path},currentLocation);const href=routerHistory.createHref(locationNormalized.fullPath);return assign(locationNormalized,matchedRoute,{params:decodeParams(matchedRoute.params),redirectedFrom:void 0,href})}currentLocation=assign({},currentLocation||(rawLocation.path!=null&&rawLocation.path.startsWith(`/`)&&!(`name`in rawLocation&&rawLocation.name)?START_LOCATION_NORMALIZED:currentRoute.value));let matcherLocation;if(rawLocation.path!=null)matcherLocation=assign({},rawLocation,{path:parseURL(parseQuery$1,rawLocation.path,currentLocation.path).path});else{const targetParams=assign({},rawLocation.params);for(const key in targetParams)if(targetParams[key]==null)delete targetParams[key];matcherLocation=assign({},rawLocation,{params:encodeParams(targetParams)});currentLocation.params=encodeParams(currentLocation.params)}const matchedRoute=matcher.resolve(matcherLocation,currentLocation);const hash=rawLocation.hash||``;matchedRoute.params=normalizeParams(decodeParams(matchedRoute.params));const fullPath=stringifyURL(stringifyQuery$1,assign({},rawLocation,{hash:encodeHash(hash),path:matchedRoute.path}));const href=routerHistory.createHref(fullPath);return assign({fullPath,hash,query:stringifyQuery$1===stringifyQuery?normalizeQuery(rawLocation.query):rawLocation.query||{}},matchedRoute,{redirectedFrom:void 0,href})}function locationAsObject(to){return typeof to===`string`?parseURL(parseQuery$1,to,currentRoute.value.path):assign({},to)}function checkCanceledNavigation(to,from){if(pendingLocation!==to)return createRouterError(8,{from,to})}function push(to){return pushWithRedirect(to)}function replace(to){return push(assign(locationAsObject(to),{replace:true}))}function handleRedirectRecord(to,from){const lastMatched=to.matched[to.matched.length-1];if(lastMatched&&lastMatched.redirect){const{redirect}=lastMatched;let newTargetLocation=typeof redirect===`function`?redirect(to,from):redirect;if(typeof newTargetLocation===`string`){newTargetLocation=newTargetLocation.includes(`?`)||newTargetLocation.includes(`#`)?newTargetLocation=locationAsObject(newTargetLocation):{path:newTargetLocation};newTargetLocation.params={}}return assign({query:to.query,hash:to.hash,params:newTargetLocation.path!=null?{}:to.params},newTargetLocation)}}function pushWithRedirect(to,redirectedFrom){const targetLocation=pendingLocation=resolve(to);const from=currentRoute.value;const data=to.state;const force=to.force;const replace=to.replace===true;const shouldRedirect=handleRedirectRecord(targetLocation,from);if(shouldRedirect)return pushWithRedirect(assign(locationAsObject(shouldRedirect),{state:typeof shouldRedirect===`object`?assign({},data,shouldRedirect.state):data,force,replace}),redirectedFrom||targetLocation);const toLocation=targetLocation;toLocation.redirectedFrom=redirectedFrom;let failure;if(!force&&isSameRouteLocation(stringifyQuery$1,from,targetLocation)){failure=createRouterError(16,{to:toLocation,from});handleScroll(from,from,true,false)}return(failure?Promise.resolve(failure):navigate(toLocation,from)).catch(error=>isNavigationFailure(error)?isNavigationFailure(error,2)?error:markAsReady(error):triggerError(error,toLocation,from)).then(failure=>{if(failure){if(isNavigationFailure(failure,2))return pushWithRedirect(assign({replace},locationAsObject(failure.to),{state:typeof failure.to===`object`?assign({},data,failure.to.state):data,force}),redirectedFrom||toLocation)}else failure=finalizeNavigation(toLocation,from,true,replace,data);triggerAfterEach(toLocation,from,failure);return failure})}function checkCanceledNavigationAndReject(to,from){const error=checkCanceledNavigation(to,from);return error?Promise.reject(error):Promise.resolve()}function runWithContext(fn){const app=installedApps.values().next().value;return app&&typeof app.runWithContext===`function`?app.runWithContext(fn):fn()}function navigate(to,from){let guards;const[leavingRecords,updatingRecords,enteringRecords]=extractChangingRecords(to,from);guards=extractComponentsGuards(leavingRecords.reverse(),`beforeRouteLeave`,to,from);for(const record of leavingRecords)record.leaveGuards.forEach(guard=>{guards.push(guardToPromiseFn(guard,to,from))});const canceledNavigationCheck=checkCanceledNavigationAndReject.bind(null,to,from);guards.push(canceledNavigationCheck);return runGuardQueue(guards).then(()=>{guards=[];for(const guard of beforeGuards.list())guards.push(guardToPromiseFn(guard,to,from));guards.push(canceledNavigationCheck);return runGuardQueue(guards)}).then(()=>{guards=extractComponentsGuards(updatingRecords,`beforeRouteUpdate`,to,from);for(const record of updatingRecords)record.updateGuards.forEach(guard=>{guards.push(guardToPromiseFn(guard,to,from))});guards.push(canceledNavigationCheck);return runGuardQueue(guards)}).then(()=>{guards=[];for(const record of enteringRecords)if(record.beforeEnter){if(isArray(record.beforeEnter))for(const beforeEnter of record.beforeEnter)guards.push(guardToPromiseFn(beforeEnter,to,from));else guards.push(guardToPromiseFn(record.beforeEnter,to,from))}guards.push(canceledNavigationCheck);return runGuardQueue(guards)}).then(()=>{to.matched.forEach(record=>record.enterCallbacks={});guards=extractComponentsGuards(enteringRecords,`beforeRouteEnter`,to,from,runWithContext);guards.push(canceledNavigationCheck);return runGuardQueue(guards)}).then(()=>{guards=[];for(const guard of beforeResolveGuards.list())guards.push(guardToPromiseFn(guard,to,from));guards.push(canceledNavigationCheck);return runGuardQueue(guards)}).catch(err=>isNavigationFailure(err,8)?err:Promise.reject(err))}function triggerAfterEach(to,from,failure){afterGuards.list().forEach(guard=>runWithContext(()=>guard(to,from,failure)))}function finalizeNavigation(toLocation,from,isPush,replace,data){const error=checkCanceledNavigation(toLocation,from);if(error)return error;const isFirstNavigation=from===START_LOCATION_NORMALIZED;const state=!isBrowser?{}:history.state;if(isPush){if(replace||isFirstNavigation)routerHistory.replace(toLocation.fullPath,assign({scroll:isFirstNavigation&&state&&state.scroll},data));else routerHistory.push(toLocation.fullPath,data)}currentRoute.value=toLocation;handleScroll(toLocation,from,isPush,isFirstNavigation);markAsReady()}let removeHistoryListener;function setupListeners(){if(removeHistoryListener)return;removeHistoryListener=routerHistory.listen((to,_from,info)=>{if(!router.listening)return;const toLocation=resolve(to);const shouldRedirect=handleRedirectRecord(toLocation,router.currentRoute.value);if(shouldRedirect){pushWithRedirect(assign(shouldRedirect,{replace:true,force:true}),toLocation).catch(noop$2);return}pendingLocation=toLocation;const from=currentRoute.value;if(isBrowser&&info.delta)saveScrollPosition(getScrollKey(from.fullPath,info.delta));navigate(toLocation,from).catch(error=>{if(isNavigationFailure(error,12))return error;if(isNavigationFailure(error,2)){pushWithRedirect(assign(locationAsObject(error.to),{force:true}),toLocation).then(failure=>{if(isNavigationFailure(failure,20)&&!info.delta&&info.type===`pop`)routerHistory.go(-1,false)}).catch(noop$2);return Promise.reject()}if(info.delta)routerHistory.go(-info.delta,false);return triggerError(error,toLocation,from)}).then(failure=>{failure=failure||finalizeNavigation(toLocation,from,false);if(failure){if(info.delta&&!isNavigationFailure(failure,8))routerHistory.go(-info.delta,false);else if(info.type===`pop`&&isNavigationFailure(failure,20))routerHistory.go(-1,false)}triggerAfterEach(toLocation,from,failure)}).catch(noop$2)})}let readyHandlers=useCallbacks();let errorListeners=useCallbacks();let ready;function triggerError(error,to,from){markAsReady(error);const list=errorListeners.list();if(list.length)list.forEach(handler=>handler(error,to,from));else console.error(error);return Promise.reject(error)}function isReady(){if(ready&¤tRoute.value!==START_LOCATION_NORMALIZED)return Promise.resolve();return new Promise((resolve,reject)=>{readyHandlers.add([resolve,reject])})}function markAsReady(err){if(!ready){ready=!err;setupListeners();readyHandlers.list().forEach(([resolve,reject])=>err?reject(err):resolve());readyHandlers.reset()}return err}function handleScroll(to,from,isPush,isFirstNavigation){const{scrollBehavior}=options;if(!isBrowser||!scrollBehavior)return Promise.resolve();const scrollPosition=!isPush&&getSavedScrollPosition(getScrollKey(to.fullPath,0))||(isFirstNavigation||!isPush)&&history.state&&history.state.scroll||null;return nextTick$1().then(()=>scrollBehavior(to,from,scrollPosition)).then(position=>to===currentRoute.value&&position&&scrollToPosition(position)).catch(err=>to===currentRoute.value&&triggerError(err,to,from))}const go=delta=>routerHistory.go(delta);let started;const installedApps=new Set;const router={currentRoute,listening:true,addRoute,removeRoute,clearRoutes,hasRoute,getRoutes,resolve,options,push,replace,go,back:()=>go(-1),forward:()=>go(1),beforeEach:beforeGuards.add,beforeResolve:beforeResolveGuards.add,afterEach:afterGuards.add,onError:errorListeners.add,isReady,install(app){app.component(`RouterLink`,RouterLink);app.component(`RouterView`,RouterView);app.config.globalProperties.$router=router;Object.defineProperty(app.config.globalProperties,"$route",{enumerable:true,get:()=>unref(currentRoute)});if(isBrowser&&!started&¤tRoute.value===START_LOCATION_NORMALIZED){started=true;push(routerHistory.location).catch(err=>{})}const reactiveRoute={};for(const key in START_LOCATION_NORMALIZED)Object.defineProperty(reactiveRoute,key,{get:()=>currentRoute.value[key],enumerable:true});app.provide(routerKey,router);app.provide(routeLocationKey,shallowReactive(reactiveRoute));app.provide(routerViewLocationKey,currentRoute);const unmountApp=app.unmount;installedApps.add(app);app.unmount=function(){installedApps.delete(app);if(installedApps.size<1){pendingLocation=START_LOCATION_NORMALIZED;removeHistoryListener&&removeHistoryListener();removeHistoryListener=null;currentRoute.value=START_LOCATION_NORMALIZED;started=false;ready=false}unmountApp()}}};function runGuardQueue(guards){return guards.reduce((promise,guard)=>promise.then(()=>runWithContext(guard)),Promise.resolve())}return router}function queryStringToObject(queryString=``){const normalizedQueryString=String(queryString||``).trim().replace(/^\?+/,``);if(!normalizedQueryString)return;const params=new URLSearchParams(normalizedQueryString);const query={};for(const[key,value]of params.entries()){if(!Object.prototype.hasOwnProperty.call(query,key)){query[key]=value;continue}if(Array.isArray(query[key])){query[key].push(value);continue}query[key]=[query[key],value]}return query}function redirectToChild(childTarget=``){const normalizedChildTarget=String(childTarget||``).trim();return function redirectToChildRoute(to={}){const resolvedTarget=resolveLinkPath(String(to?.path||`/`),normalizedChildTarget);const{pathname,queryString,hash}=splitPathQueryAndHash(resolvedTarget);return{path:pathname||`/`,query:queryStringToObject(queryString)??to?.query,hash:hash||String(to?.hash||``)}}}var dashboard_vue_definePage_vue_lang_default={redirect:redirectToChild(`env`)};function _mergeRouteRecord(main,...routeRecords){return routeRecords.reduce((acc,routeRecord)=>{const meta=Object.assign({},acc.meta,routeRecord.meta);const alias=[].concat(acc.alias||[],routeRecord.alias||[]);Object.assign(acc,routeRecord);acc.meta=meta;acc.alias=alias;return acc},main)}var routes=[{path:`/`,name:`/`,component:()=>__vitePreload(()=>import(`./pages-DuMgH61T.js`),__vite__mapDeps([0,1,2,3])),meta:{"jskit":{"scope":`global`}}},{path:`/app`,children:[{path:``,name:`/app/`,component:()=>__vitePreload(()=>import(`./app-DT4_MliP.js`),__vite__mapDeps([4,1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,3,79])),meta:{"jskit":{"surface":`app`}}},{path:`learning`,name:`/app/learning`,component:()=>__vitePreload(()=>import(`./learning-_O1PEaam.js`),__vite__mapDeps([80,1,81,6,7,70,44,42,43,45,2,63,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,5,8,48,49,19,9,10,50,51,54,55,35,36,82,37,38,39,40,11,12,83,84,13,85,52,53,86,87,72,71,73,67,68,69,74,64,65,75,76,88,89,90,91,92,93,94,95,58,59,41,56,57,60,61,62,14,22,66,77,96,97,23,78,3,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120])),meta:{"jskit":{"surface":`app`}}},{path:`project`,children:[{path:`:slug`,name:`/app/project/[slug]`,component:()=>__vitePreload(()=>import(`./_slug_-DsqilUs_.js`).then(n=>n.n),__vite__mapDeps([81,6,1,7,70,44,42,43,45,2,63,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,5,8,48,49,19,9,10,50,51,54,55,35,36,82,37,38,39,40,11,12,83,84,13,85,52,53,86,87,72,71,73,67,68,69,74,64,65,75,76,88,89,90,91,92,93,94,95,58,59,41,56,57,60,61,62,14,22,66,77,96,97,23,78,3,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120])),children:[_mergeRouteRecord({path:`dashboard`,name:`/app/project/[slug]/dashboard`,component:()=>__vitePreload(()=>import(`./dashboard-iREwhGqv.js`),__vite__mapDeps([121,1,109,42,43,6,7,44,45,2,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,48,49,13,110,71,19,101,111,112])),children:[{path:`:sessionTool`,name:`/app/project/[slug]/dashboard/[sessionTool]`,component:()=>__vitePreload(()=>import(`./_sessionTool_-1V-z6Pbp.js`),__vite__mapDeps([122,1,2,13,111,45,19,123]))},{path:`access`,children:[{path:``,name:`/app/project/[slug]/dashboard/access/`,component:()=>__vitePreload(()=>import(`./access-tl4ht_d8.js`),__vite__mapDeps([124,1,42,43,6,7,44,45,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,9,10,13,69,70,49,71,72,2,73,74,90,98,48,106,19,11,12,107,114,125]))}]},{path:`changes`,children:[{path:``,name:`/app/project/[slug]/dashboard/changes/`,component:()=>__vitePreload(()=>import(`./changes-DZWHZguL.js`),__vite__mapDeps([126,1,127,6,7,43,44,45,17,15,16,18,19,9,10,50,28,51,30,31,20,21,35,25,26,27,36,37,38,39,40,13,14,22,64,75,76,96,97,94,119,128,129,130]))}]},{path:`env`,children:[{path:``,name:`/app/project/[slug]/dashboard/env/`,component:()=>__vitePreload(()=>import(`./env-D5KpTEw7.js`),__vite__mapDeps([131,1,42,43,6,7,44,45,2,17,15,16,18,33,25,26,27,34,19,9,10,50,28,51,54,55,35,36,37,38,39,40,58,59,13,69,70,49,71,72,73,74,90,98,48,106,11,12,107,114,128,129,132]))}]},{path:`health`,children:[{path:``,name:`/app/project/[slug]/dashboard/health/`,component:()=>__vitePreload(()=>import(`./health-BhoO1d4h.js`),__vite__mapDeps([133,6,1,7,42,43,44,45,19,9,10,50,28,51,11,12,13,76,98,48,49,128,129,134]))}]},{path:`history`,children:[{path:``,name:`/app/project/[slug]/dashboard/history/`,component:()=>__vitePreload(()=>import(`./history-DVURy45X.js`),__vite__mapDeps([135,6,1,7,17,15,16,18,19,9,10,50,28,51,20,21,37,38,11,12,13,117,58,26,59,74,70,44,42,43,45,65,90,2,118,128,129,136,72,49,71,73,92,75,93,115,67,116,137]))},{path:`:sessionId`,name:`/app/project/[slug]/dashboard/history/[sessionId]`,component:()=>__vitePreload(()=>import(`./_sessionId_-B_TTRB4c.js`),__vite__mapDeps([138,6,1,7,19,9,10,50,28,51,20,21,82,42,43,44,45,15,16,24,25,26,27,29,30,31,32,17,18,33,34,48,49,35,36,37,38,39,40,11,12,83,84,13,85,46,47,52,53,86,87,72,2,71,73,67,68,69,70,74,64,65,75,76,88,89,90,91,92,93,94,95,136,115,116,139]))}]},{path:`incoming`,children:[{path:``,name:`/app/project/[slug]/dashboard/incoming/`,component:()=>__vitePreload(()=>import(`./incoming-DzADFGqp.js`),__vite__mapDeps([140,1,42,43,6,7,44,45,2,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,48,49,19,9,10,50,51,35,36,37,38,39,40,11,12,13,74,70,76,96,97,141]))}]},{path:`integrations`,children:[{path:``,name:`/app/project/[slug]/dashboard/integrations/`,component:()=>__vitePreload(()=>import(`./integrations-Dy5jIiJ5.js`),__vite__mapDeps([142,6,1,7,42,43,44,45,2,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,8,19,9,10,50,51,54,55,35,36,37,38,56,57,58,59,11,12,83,84,13,69,70,49,71,72,73,74,64,90,88,106,107,116,143]))}]},{path:`issues`,children:[{path:``,name:`/app/project/[slug]/dashboard/issues/`,component:()=>__vitePreload(()=>import(`./issues-lh7R775d.js`),__vite__mapDeps([144,6,1,7,42,43,44,45,2,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,48,49,19,9,10,50,51,52,46,20,21,47,53,35,36,37,38,39,40,11,12,83,84,13,74,70,88,99,100,101,145,146]))}]},{path:`pull-requests`,children:[{path:``,name:`/app/project/[slug]/dashboard/pull-requests/`,component:()=>__vitePreload(()=>import(`./pull-requests-ByE-Dvk7.js`),__vite__mapDeps([147,6,1,7,42,43,44,45,2,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,48,49,19,9,10,50,51,35,36,37,38,39,40,11,12,13,85,52,53,83,84,86,87,74,70,93,99,100,101,102,41,8,54,55,56,57,58,59,60,61,62,63,14,22,64,65,66,67,68,69,71,72,73,75,76,77,103,104,105,145,148]))}]},{path:`repository`,children:[{path:``,name:`/app/project/[slug]/dashboard/repository/`,component:()=>__vitePreload(()=>import(`./repository-BUfUAyS9.js`),__vite__mapDeps([149,1,127,6,7,43,44,45,17,15,16,18,19,9,10,50,28,51,30,31,20,21,35,25,26,27,36,37,38,39,40,13,14,22,64,75,76,96,97,94,119,128,129,130]))}]},{path:`session`,children:[{path:``,name:`/app/project/[slug]/dashboard/session/`,component:()=>__vitePreload(()=>import(`./session-BdhKrcX4.js`),__vite__mapDeps([150,6,1,7,17,15,16,18,19,9,10,20,21,13,108,93,128,129,151]))}]},{path:`settings`,children:[{path:``,name:`/app/project/[slug]/dashboard/settings/`,component:()=>__vitePreload(()=>import(`./settings-CzhIcn9K.js`),__vite__mapDeps([152,1,42,43,6,7,44,45,2,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,48,49,9,10,50,51,54,55,103,104,60,61,83,84,13,69,70,71,72,73,74,90,98,106,19,11,12,107,113,88,92,75,93,114,153]))}]}]},dashboard_vue_definePage_vue_lang_default)],meta:{"jskit":{"surface":`app`}}}]}]}];var aliases$1={collapse:`mdi-chevron-up`,complete:`mdi-check`,cancel:`mdi-close-circle`,close:`mdi-close`,delete:`mdi-close-circle`,clear:`mdi-close-circle`,success:`mdi-check-circle`,info:`mdi-information`,warning:`mdi-alert-circle`,error:`mdi-close-circle`,prev:`mdi-chevron-left`,next:`mdi-chevron-right`,checkboxOn:`mdi-checkbox-marked`,checkboxOff:`mdi-checkbox-blank-outline`,checkboxIndeterminate:`mdi-minus-box`,delimiter:`mdi-circle`,sortAsc:`mdi-arrow-up`,sortDesc:`mdi-arrow-down`,expand:`mdi-chevron-down`,menu:`mdi-menu`,subgroup:`mdi-menu-down`,dropdown:`mdi-menu-down`,radioOn:`mdi-radiobox-marked`,radioOff:`mdi-radiobox-blank`,edit:`mdi-pencil`,ratingEmpty:`mdi-star-outline`,ratingFull:`mdi-star`,ratingHalf:`mdi-star-half-full`,loading:`mdi-cached`,first:`mdi-page-first`,last:`mdi-page-last`,unfold:`mdi-unfold-more-horizontal`,file:`mdi-paperclip`,plus:`mdi-plus`,minus:`mdi-minus`,calendar:`mdi-calendar`,treeviewCollapse:`mdi-menu-down`,treeviewExpand:`mdi-menu-right`,tableGroupCollapse:`mdi-chevron-down`,tableGroupExpand:`mdi-chevron-right`,eyeDropper:`mdi-eyedropper`,upload:`mdi-cloud-upload`,color:`mdi-palette`,command:`mdi-apple-keyboard-command`,ctrl:`mdi-apple-keyboard-control`,space:`mdi-keyboard-space`,shift:`mdi-apple-keyboard-shift`,alt:`mdi-apple-keyboard-option`,enter:`mdi-keyboard-return`,arrowup:`mdi-arrow-up`,arrowdown:`mdi-arrow-down`,arrowleft:`mdi-arrow-left`,arrowright:`mdi-arrow-right`,backspace:`mdi-backspace`,play:`mdi-play`,pause:`mdi-pause`,fullscreen:`mdi-fullscreen`,fullscreenExit:`mdi-fullscreen-exit`,volumeHigh:`mdi-volume-high`,volumeMedium:`mdi-volume-medium`,volumeLow:`mdi-volume-low`,volumeOff:`mdi-volume-variant-off`,search:`mdi-magnify`};var mdi$1={component:props=>h$1(VClassIcon,{...props,class:`mdi`})};function genDefaults(){return{svg:{component:VSvgIcon},class:{component:VClassIcon}}}function createIcons(options){const sets=genDefaults();const defaultSet=options?.defaultSet??`mdi`;if(defaultSet===`mdi`&&!sets.mdi)sets.mdi=mdi$1;return mergeDeep({defaultSet,sets,aliases:{...aliases$1,vuetify:[`M8.2241 14.2009L12 21L22 3H14.4459L8.2241 14.2009Z`,[`M7.26303 12.4733L7.00113 12L2 3H12.5261C12.5261 3 12.5261 3 12.5261 3L7.26303 12.4733Z`,.6]],"vuetify-outline":`svg:M7.26 12.47 12.53 3H2L7.26 12.47ZM14.45 3 8.22 14.2 12 21 22 3H14.45ZM18.6 5 12 16.88 10.51 14.2 15.62 5ZM7.26 8.35 5.4 5H9.13L7.26 8.35Z`,"vuetify-play":[`m6.376 13.184-4.11-7.192C1.505 4.66 2.467 3 4.003 3h8.532l-.953 1.576-.006.01-.396.677c-.429.732-.214 1.507.194 2.015.404.503 1.092.878 1.869.806a3.72 3.72 0 0 1 1.005.022c.276.053.434.143.523.237.138.146.38.635-.25 2.09-.893 1.63-1.553 1.722-1.847 1.677-.213-.033-.468-.158-.756-.406a4.95 4.95 0 0 1-.8-.927c-.39-.564-1.04-.84-1.66-.846-.625-.006-1.316.27-1.693.921l-.478.826-.911 1.506Z`,[`M9.093 11.552c.046-.079.144-.15.32-.148a.53.53 0 0 1 .43.207c.285.414.636.847 1.046 1.2.405.35.914.662 1.516.754 1.334.205 2.502-.698 3.48-2.495l.014-.028.013-.03c.687-1.574.774-2.852-.005-3.675-.37-.391-.861-.586-1.333-.676a5.243 5.243 0 0 0-1.447-.044c-.173.016-.393-.073-.54-.257-.145-.18-.127-.316-.082-.392l.393-.672L14.287 3h5.71c1.536 0 2.499 1.659 1.737 2.992l-7.997 13.996c-.768 1.344-2.706 1.344-3.473 0l-3.037-5.314 1.377-2.278.004-.006.004-.007.481-.831Z`,.6]]}},options)}function weekInfo(locale){const code=locale.slice(-2).toUpperCase();switch(true){case locale===`GB-alt-variant`:return{firstDay:0,firstWeekSize:4};case locale===`001`:return{firstDay:1,firstWeekSize:1};case`AG AS BD BR BS BT BW BZ CA CO DM DO ET GT GU HK HN ID IL IN JM JP KE
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pages-DuMgH61T.js","assets/runtime-core.esm-bundler-DGXg_mpN.js","assets/useApi-BPuI6ZR9-CFWU1m37.js","assets/route-block-DbL-SuOj.js","assets/app-BNP_n_Tt.js","assets/useVibe64Learning-DyqXkpLw.js","assets/ripple-BVltMmyV.js","assets/ripple-DqhAt1Ze.css","assets/vibe64AssistantHost-CP6oxv5b.js","assets/VBtn-B2MBK2DL.js","assets/VBtn-uSpaN2Ha.css","assets/VSkeletonLoader-CttxM1tw.js","assets/VSkeletonLoader-LCPSxykp.css","assets/_plugin-vue_export-helper-DNW4j-dv.js","assets/StudioErrorNotice-CSrUw1QV.js","assets/VAvatar-DPzqDH4r.js","assets/VAvatar-9ilDR2r2.css","assets/VChip-CcI-Oo2J.js","assets/VChip-PprDbmQn.css","assets/mdi-CG9pWOSj.js","assets/VSheet-DZWsu0kL.js","assets/VSheet-BbLSwuzR.css","assets/StudioErrorNotice-1K8E_MXD.css","assets/Vibe64AuthSettingsButton-fY4ZiIFF.js","assets/VMenu-C_x18lwb.js","assets/VOverlay-CeMZurIN.js","assets/lazy-NHSwD9FS.js","assets/VOverlay-DG-PukqI.css","assets/createSimpleFunctional-CZTGuNuR.js","assets/ssrBoot-Rlh6kLbD.js","assets/VDivider-BMEqUoAB.js","assets/VDivider-DvkP_iX7.css","assets/VMenu-D_W8zRGm.css","assets/VTextField-BR2eZeFT.js","assets/VTextField-BiatYyd3.css","assets/VDialog-Bu3EfKb1.js","assets/VDialog-DP-kc9Gx.css","assets/VCard-mXy0k4aS.js","assets/VCard-dv-Dc592.css","assets/VSpacer-Dhmsvk4t.js","assets/VSpacer-DfbUir7X.css","assets/client-BWV84wi2.js","assets/useEndpointResource-DWoQ2keu.js","assets/useRealtimeEvent-Bwapstla.js","assets/normalize-CO2KHj_d.js","assets/deepFreeze-BgoYkoTa.js","assets/VSelect-DL3HaA5m.js","assets/VSelect-y7fezdfU.css","assets/studioUrls-DmMMIScP.js","assets/surface-DY1u73tB.js","assets/VAlert-P256xaE0.js","assets/VAlert-DVXMoK42.css","assets/VAutocomplete-BDb95qJX.js","assets/VAutocomplete-D48FgPMA.css","assets/VCheckbox-C7A1ZW4D.js","assets/VCheckbox-ChRKi1kj.css","assets/VRow-Cpw7OHQV.js","assets/VRow-DIr3-SqU.css","assets/VExpansionPanels-Dgjrop0V.js","assets/VExpansionPanels-cvCWEkWz.css","assets/VSwitch-BRHeDJkH.js","assets/VSwitch-FGoTnWb6.css","assets/useVibe64Terminal-Cg3idMcy.js","assets/preload-helper-BvdcsxN9.js","assets/browserLocalStorage-B4C7rHrs.js","assets/clipboard-CZs9aH3L.js","assets/useVibe64Terminal-Bk2QOSDO.css","assets/shared-DpMvYJO3.js","assets/assistantRouting-D4XpXcEf.js","assets/useCommand-Bqxb-naz.js","assets/error-Dug56can.js","assets/placement-CwTqWLQH.js","assets/usePaths-Db88-HOm.js","assets/pathname-Bb895US8.js","assets/useUiFeedback-BPBF_0bp.js","assets/shared-BEwrtWSp.js","assets/vibe64ApiResponses-DNLY1Kel.js","assets/client-DGrP-2AJ.css","assets/Vibe64AuthSettingsButton-M44SSmZ9.css","assets/app-CZu7oxUO.css","assets/learning-Bdi3XRS7.js","assets/_slug_-BclonbST.js","assets/Vibe64SessionFiles-CQzs6fee.js","assets/VTextarea-DbqamXJd.js","assets/VTextarea-DDl63AeD.css","assets/conversation-B90ERX9h.js","assets/thinkingText-DewCOEcu.js","assets/conversation-vxJGwmtW.css","assets/vibe64BrowserTabOrigin-SF9E31vi.js","assets/useVibe64SystemGraph-B4RmsC9Y.js","assets/useVibe64ProjectScope-Bp1ImZlz.js","assets/dist-CDa9Iec1.js","assets/vibe64SessionPanelModel-DDorOuiL.js","assets/vibe64SessionViewModel-DR4tOlGM.js","assets/libesm-CR-iGldz.js","assets/Vibe64SessionFiles-Bl8wJ5Sk.css","assets/Vibe64TemporaryAiFixAction-BiuIE9mC.js","assets/Vibe64TemporaryAiFixAction-D_mq1dFE.css","assets/studioGateApi-DcCqiD9V.js","assets/Vibe64DashboardBackButton-BH_8j_VR.js","assets/Vibe64DashboardBackButton-DD9UR77P.css","assets/vibe64GithubProject-CdFrbVHp.js","assets/vibe64SessionFocus-CqZNTvYF.js","assets/VRadioGroup-CUu2-KIP.js","assets/VRadioGroup-C9f4tbih.css","assets/vibe64SessionFocus-OJ2toBd9.css","assets/Vibe64AsyncModuleState-Do9EqX3S.js","assets/Vibe64AsyncModuleState-CgINkpFP.css","assets/vibe64SessionInfo-BuBUdL-e.js","assets/Vibe64DashboardShell-BSq7uXEW.js","assets/placement-BF-zIEhA.js","assets/vibe64SessionToolDefinitions-BJaJH5LR.js","assets/Vibe64DashboardShell-De2mbdpI.css","assets/useVibe64SessionData-B686lToN.js","assets/useVibe64SessionSelection-BzL1y_Vq.js","assets/useVibe64ConversationLog-BqUI0S5n.js","assets/definitions-BrMvu6yV.js","assets/Vibe64UnavailableSessions-Ca5nC7KH.js","assets/Vibe64UnavailableSessions-CUzfo5Hr.css","assets/vibe64RepositoryRealtime-DXk0Jai3.js","assets/_slug_-CZ1bxO9C.css","assets/dashboard-CuutW8iv.js","assets/_sessionTool_-1V-z6Pbp.js","assets/_sessionTool_-DiYoi-BF.css","assets/access-WlhPvPgy.js","assets/access-CeQCLDjt.css","assets/changes-CHJjrZAc.js","assets/Vibe64RepositoryWorkspace-obZFXkoG.js","assets/Vibe64DashboardPageHeader-BXQR00HK.js","assets/Vibe64DashboardPageHeader-Gm1IvlHx.css","assets/Vibe64RepositoryWorkspace-Agyt4O-V.css","assets/env-D3KQGvRe.js","assets/env-BzRtyO0w.css","assets/health-BhoO1d4h.js","assets/health-BJvooRnJ.css","assets/history-1_NU8azF.js","assets/useArchivedVibe64Sessions-_LB2XxEa.js","assets/history-BOwbCRQP.css","assets/_sessionId_-CKkGH3Rx.js","assets/_sessionId_-C5Jvmuf5.css","assets/incoming-DzADFGqp.js","assets/incoming-DWDrmxyH.css","assets/integrations-BMzWQQpa.js","assets/integrations-Cq1x-Di9.css","assets/issues-Bywux4s7.js","assets/GithubBrowserTabs-C2NO5l8g.js","assets/issues-XnpGgdmn.css","assets/pull-requests-ncmKT3sS.js","assets/pull-requests-CdbhyFOv.css","assets/repository-BL_2bgzC.js","assets/session-BdhKrcX4.js","assets/session-5qADMzDP.css","assets/settings-1rpuL7eR.js","assets/settings-BopLnpB0.css","assets/error-DgrgRbJJ.js","assets/Vibe64DatabaseWorkspace-CEml9BWn.js","assets/useVibe64DatabaseTools-4o6S8eXq.js","assets/vue-flow-core-BlVEnES8.js","assets/Vibe64DatabaseWorkspace-DPDMxhAW.css","assets/Vibe64UiStoryboardView-BhKRpL0N.js","assets/Vibe64UiStoryboardView-3WXph5bz.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{$ as useToggleScope,A as useElevation,At as camelizeProps,B as VDefaultsProvider,Cn as isBoolean,D as makeLocationProps,Dn as isNumber,Dt as CircularBuffer,E as useDensity,En as isNullOrUndefined,Et as toPhysical,F as useBackgroundColor,G as makeThemeProps,Gn as withKeys,Gt as getActiveElement,H as useResizeObserver,J as LocaleSymbol,Jt as isComposingIgnoreKey,K as provideTheme,Kn as withModifiers,L as useTextColor,Ln as consoleWarn,M as useBorder,Mt as chunkArray,N as makeRoundedProps,Nn as range,Nt as clamp,O as useLocation,On as isObject$1,Ot as EventProp,P as useRounded,Pt as convertToUnit,Q as useProxiedModel,Qt as keys,R as makeDimensionProps,Rt as ensureValidVNode,S as useVariant,T as makeDensityProps,U as ThemeSymbol,V as makeTagProps,Vn as createApp,W as createTheme,Wn as vShow,X as useLocale,Xt as isPercentage,Y as createLocale,Yn as __exportAll,Z as useRtl,_ as makeGroupProps,a as useRouter,an as pick$1,at as deepEqual,b as genOverlays,cn as resolveSize,ct as DefaultsSymbol,d as VProgressLinear,dn as IN_BROWSER,dt as injectNestedDefaults,en as mergeDeep,et as IconSymbol,fn as PREFERS_REDUCED_MOTION,ft as provideDefaults,g as makeGroupItemProps,gt as propsFactory,h as VIcon,ht as makeComponentProps,in as padStart,it as useRender,j as makeBorderProps,jt as checkPrintable,k as makeElevationProps,kn as isString,ln as templateRef,lt as RootDefaultsSymbol,nn as omit,nt as VClassIcon,o as makePositionProps,on as pickWithRest,ot as defineComponent,q as useTheme,rt as VSvgIcon,s as usePosition,sn as refElement,st as genericComponent,tn as noop,tt as IconValue,un as wrapInArray,ut as createDefaults,v as useGroup,wn as isFunction,x as makeVariantProps,y as useGroupItem,z as useDimension,zn as Transition,zt as escapeForRegex}from"./ripple-BVltMmyV.js";import{$ as mergeModels,$n as normalizeProps,B as h$1,Cn as toRaw,D as createVNode,E as createTextVNode,En as toValue,Ft as useModel,H as hasInjectionContext,Ht as watch,J as inject$1,L as getCurrentInstance,Lt as useSlots,Nt as useAttrs,On as unref,Pt as useId,T as createStaticVNode,Ut as watchEffect,Wt as watchPostEffect,Yt as withDirectives,Zn as normalizeClass,_ as createBaseVNode,_n as readonly,an as getCurrentScope,b as createElementBlock,bt as renderList,ct as onMounted,er as normalizeStyle,et as mergeProps,ft as onUnmounted,g as computed,gn as reactive,gt as provide,hn as proxyRefs,in as effectScope,it as onBeforeUnmount,k as defineComponent$1,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,tt as nextTick$1,u as Teleport,un as isRef,v as createBlock,vn as ref,w as createSlots,wn as toRef,wt as resolveDynamicComponent,xn as shallowRef,xt as renderSlot,y as createCommentVNode,yn as shallowReactive,z as guardReactiveProps}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{a as normalizeAdditionalActions,c as normalizeNonNegativeInteger,d as createPinia,f as defineStore,i as normalizeAction,l as normalizeSeverity,n as useShellWebErrorRuntime,o as normalizeChannel,p as storeToRefs,r as createDefaultErrorPolicy,s as normalizeErrorIntent,t as useShellErrorPresentationStore,u as normalizeText$2}from"./error-Dug56can.js";import{A as QueryObserver,B as hashKey,C as AUTH_POLICY_AUTHENTICATED,D as useQuery,E as useMutation,F as notifyManager,G as partialMatchKey,H as matchMutation,I as focusManager,J as useQueryClient,K as resolveQueryValue,L as Subscribable,M as hasNextPage,N as hasPreviousPage,O as useBaseQuery,P as onlineManager,R as environmentManager,S as resolveTextRef,T as ROUTE_VISIBILITY_PUBLIC,U as matchQuery,V as hashQueryKeyByOptions,W as noop$1,X as getClientKey,Y as cloneDeepUnref,a as mergeQueryMeta,b as ROUTE_VISIBILITY_WORKSPACE,i as useRealtimeQueryInvalidation,j as Query,k as Mutation,l as asPlainObject,n as resolveOperationRealtimeOptions,o as mergeRequestRecoveryQueryMeta,q as skipToken,s as toQueryErrorMessage,t as useEndpointResource,w as AUTH_POLICY_PUBLIC,x as resolveEnabledRef,y as resolveResourceMessages,z as functionalUpdate}from"./useEndpointResource-DWoQ2keu.js";import{_ as useRouter$1,a as isAbsolutePath,c as isNavigationFailure,d as mergeOptions,f as noop$2,g as useRoute,h as routerViewLocationKey,i as createRouterError,l as isRouteComponent$1,m as routerKey,n as applyToParams,o as isArray,p as routeLocationKey,r as assign,s as isESModule,u as matchedRouteKey,v as viewDepthKey}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{a as normalizeSurfaceId$1,c as normalizePathname$1,i as deriveSurfaceRouteBaseFromPagesRoot,o as normalizeSurfacePagesRoot,r as createSurfaceRegistry,s as createSurfacePathHelpers,t as resolveScopedApiBasePath}from"./surface-DY1u73tB.js";import{_ as resolveLinkPath,a as resolveSurfaceNavigationTargetFromPlacementContext,c as useWebPlacementRuntime,d as normalizePlacementDefinition,f as normalizePlacementTarget,g as isExternalLinkTarget,h as normalizePlacementTopologyDefinition,i as resolveSurfaceIdFromPlacementPathname,m as normalizePlacementLayoutClass,n as readPlacementSurfaceConfig,p as normalizeSurface,r as resolveSurfaceDefinitionFromPlacementContext,s as useWebPlacementContext,t as buildSurfaceConfigContext,u as isRenderableComponent,v as splitPathQueryHash}from"./placement-CwTqWLQH.js";import{A as buildJsonApiFieldsetsToken,D as validateSchemaPayload,E as RECORD_ID_PATTERN,M as resolveFieldErrors,N as appendQueryString,O as createCursorListValidator,P as splitPathQueryAndHash,S as transientQueryRetryDelay,T as encodeJsonApiResourceQueryObject,_ as createCapabilityRuntime,b as createHttpClient,c as projectSlugFromRoute,d as configureHttpWebClient,f as createHttpWebClient,g as validateOperationSection,h as client_exports$12,j as normalizeJsonApiFieldsets,k as createSchema,l as vibe64ProjectQueryScope,m as httpWebClient,n as useRealtimeEvent,o as projectAppPath,p as getHttpWebClient,r as useRealtimeSocket,s as projectSlugFromPathname,t as EMPTY_REALTIME_SOCKET,u as vibe64ProjectScopedStorageKey,v as defineProvider,x as shouldRetryTransientQueryFailure}from"./useRealtimeEvent-Bwapstla.js";import{t as __vitePreload}from"./preload-helper-BvdcsxN9.js";import{a as useFilter,c as useScrolling,d as VVirtualScroll,i as makeFilterProps,l as useFocusRepair,n as makeSelectProps,o as useFocusGroups,r as useMenuActivator,s as useSelectionMenu,t as VSelect,u as VHighlight}from"./VSelect-DL3HaA5m.js";import{a as useFocusTrap,d as getScrollParent,f as animate,i as makeFocusTrapProps,l as forwardRefs,n as makeVOverlayProps,o as makeDelayProps,r as useScopeId,s as useDelay,t as VOverlay}from"./VOverlay-CeMZurIN.js";import{t as createSimpleFunctional}from"./createSimpleFunctional-CZTGuNuR.js";import{a as MaybeTransition,b as standardEasing,f as DisplaySymbol,g as useDisplay,h as makeDisplayProps,i as Intersect,l as VFadeTransition,m as createDisplay,n as VBadge,r as VImg,s as VExpandTransition,t as VAvatar}from"./VAvatar-DPzqDH4r.js";import{a as useItems,i as transformItem,n as VList,o as VListSubheader,s as VListItem,t as VMenu}from"./VMenu-C_x18lwb.js";import{a as GoToSymbol,i as makeVSlideGroupProps,o as createGoTo,r as VSlideGroup,t as VChip}from"./VChip-CcI-Oo2J.js";import{a as makeLayoutProps,i as makeLayoutItemProps,n as VuetifyLayoutKey,o as useLayout,r as createLayout,s as useLayoutItem,t as useVibe64Learning}from"./useVibe64Learning-DyqXkpLw.js";import{g as VCheckboxBtn,h as useInputIcon,n as makeVTextFieldProps,p as useForm,t as VTextField}from"./VTextField-BR2eZeFT.js";import{a as VIBE64_COLLEAGUE_INTEGRATIONS_KEY,c as VIBE64_COLLEAGUE_PLAN_KEY,f as VIBE64_LEARNING_KEY,i as VIBE64_COLLEAGUE_DATABASE_KEY,l as VIBE64_COLLEAGUE_PREVIEW_KEY,m as VIBE64_PAGE_FOCUS_KEY,n as VIBE64_ASSISTANT_VIEWER_KEY,o as VIBE64_COLLEAGUE_LAUNCHER_KEY,p as VIBE64_PAGE_ACTIVITY_KEY,r as VIBE64_BROWSER_NAVIGATION_KEY,s as VIBE64_COLLEAGUE_LAYOUT_KEY,t as VIBE64_ASSISTANT_HOST_KEY,u as VIBE64_COLLEAGUE_VIEW_KEY}from"./vibe64AssistantHost-CP6oxv5b.js";import{a as normalizeCanonicalRecordIdText,c as normalizeObject$1,d as normalizeText$3,i as normalizeBoolean,l as normalizePositiveInteger$1,n as isRecord$2,o as normalizeInteger,p as normalizeUniqueTextList,s as normalizeMobileConfig,u as normalizeRecordId}from"./normalize-CO2KHj_d.js";import{t as deepFreeze}from"./deepFreeze-BgoYkoTa.js";import{n as resolveWebSocketUrl$1,t as resolveStudioRequestUrl}from"./studioUrls-DmMMIScP.js";import{Bt as mdiHeadset,Cn as mdiMicrophoneOff,Gn as mdiRobotOutline,Jn as mdiSend,Pt as mdiFolderOutline,Sn as mdiMicrophone,Sr as mdiVolumeOff,U as mdiClose,Ut as mdiHistory,V as mdiClipboardListOutline,Wt as mdiHomeVariantOutline,X as mdiCog,Xn as mdiShieldCrownOutline,Yn as mdiShieldCheckOutline,Z as mdiCogOutline,_n as mdiLogin,b as mdiArrowTopRight,br as mdiViewListOutline,ct as mdiCreditCardOutline,ft as mdiDeleteOutline,gn as mdiLockOutline,hr as mdiTuneVariant,j as mdiCheck,mn as mdiLinkVariant,n as mdiAccountCogOutline,nt as mdiConsoleNetworkOutline,qn as mdiSchoolOutline,r as mdiAccountGroupOutline,sr as mdiStop,t as mdiAccountCircleOutline,vn as mdiLogout,wn as mdiMinus,xn as mdiMessageTextOutline,xr as mdiVolumeHigh,y as mdiArrowRightCircleOutline,yr as mdiViewDashboardOutline,yt as mdiEyeOutline}from"./mdi-CG9pWOSj.js";import{t as useSsrBoot}from"./ssrBoot-Rlh6kLbD.js";import{a as VBtnToggleSymbol,n as makeVBtnProps,r as VProgressCircular,t as VBtn}from"./VBtn-B2MBK2DL.js";import{t as VAlert}from"./VAlert-P256xaE0.js";import{t as VAutocomplete}from"./VAutocomplete-BDb95qJX.js";import{t as VCheckbox}from"./VCheckbox-C7A1ZW4D.js";import{t as VDivider}from"./VDivider-BMEqUoAB.js";import{n as useLazy,t as makeLazyProps}from"./lazy-NHSwD9FS.js";import{n as makeVSheetProps,t as VSheet}from"./VSheet-DZWsu0kL.js";import{n as makeVDialogProps,t as VDialog}from"./VDialog-Bu3EfKb1.js";import{a as VCardSubtitle,i as VCardTitle,n as VCardText,o as VCardActions,r as VCardItem,t as VCard}from"./VCard-mXy0k4aS.js";import{t as VRow}from"./VRow-Cpw7OHQV.js";import{t as VSpacer}from"./VSpacer-Dhmsvk4t.js";import{i as VExpansionPanelText,n as VExpansionPanel,t as VExpansionPanels}from"./VExpansionPanels-Dgjrop0V.js";import{S as VForm,a as _sfc_main$63,b as VIBE64_CONNECTIONS_CHANGED_EVENT,c as aiOnboardingNeeded,f as registerVibe64ColleagueModel,i as AiOnboardingNudge_default,o as aiOnboardingAvailable,t as client_exports$13,u as requestVibe64AiOnboarding,x as VTooltip,y as VIBE64_ACCOUNTS_CHANGED_EVENT}from"./client-BWV84wi2.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-CttxM1tw.js";import{t as VSwitch}from"./VSwitch-BRHeDJkH.js";import{t as VTextarea}from"./VTextarea-DbqamXJd.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{_ as parseLongTextReviewBlocks,c as AssistantPromptInput_default,d as numberedQuestionSubmissionText,f as parseNumberedQuestionPrompt,g as LongTextPreviewBlocks_default,h as _sfc_main$64,l as AssistantTranscript_default,n as AssistantConversationElement_default,p as parseAnswerChoicePrompt}from"./conversation-B90ERX9h.js";import{t as normalizeThinkingMessageText}from"./thinkingText-DewCOEcu.js";import{c as createAsyncModuleRecoveryState,d as installAsyncModuleRecoveryHandlers,f as isDynamicImportError,i as useShellAsyncModuleRecoveryRuntime,p as notifyAsyncModuleLoadError,r as SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY,u as guardedReloadApp}from"./useVibe64Terminal-Cg3idMcy.js";import{t as resolveRuntimePathname}from"./pathname-Bb895US8.js";import{n as resolveShellLinkPath,r as useSurfaceRouteContext,t as usePaths}from"./usePaths-Db88-HOm.js";import{l as VIBE64_AGENT_PROVIDERS}from"./shared-DpMvYJO3.js";import{s as assistantRoutingFromMetadata}from"./assistantRouting-D4XpXcEf.js";import{a as useOperationScope,c as resolveRouteParamsSource,d as toRouteParamValue,f as useAccess,i as useFieldErrorBag,l as resolveRouteTemplateLocation,n as setupOperationErrorReporting,o as normalizeRouteParamName,p as validateOperationInput,r as setupRouteChangeCleanup,s as resolveRouteParamNamesInOrder,t as useCommand,u as resolveScopedRoutePathname}from"./useCommand-Bqxb-naz.js";import{t as useUiFeedback}from"./useUiFeedback-BPBF_0bp.js";import{r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-Bp1ImZlz.js";import{n as vibe64RealtimeOriginPayload}from"./vibe64BrowserTabOrigin-SF9E31vi.js";import{t as useVibe64DatabaseTools}from"./useVibe64DatabaseTools-4o6S8eXq.js";import{t as useVibe64SystemGraph}from"./useVibe64SystemGraph-B4RmsC9Y.js";(function polyfill(){const relList=document.createElement(`link`).relList;if(relList&&relList.supports&&relList.supports(`modulepreload`))return;for(const link of document.querySelectorAll(`link[rel="modulepreload"]`))processPreload(link);new MutationObserver(mutations=>{for(const mutation of mutations){if(mutation.type!==`childList`)continue;for(const node of mutation.addedNodes)if(node.tagName===`LINK`&&node.rel===`modulepreload`)processPreload(node)}}).observe(document,{childList:true,subtree:true});function getFetchOpts(link){const fetchOpts={};if(link.integrity)fetchOpts.integrity=link.integrity;if(link.referrerPolicy)fetchOpts.referrerPolicy=link.referrerPolicy;if(link.crossOrigin===`use-credentials`)fetchOpts.credentials=`include`;else if(link.crossOrigin===`anonymous`)fetchOpts.credentials=`omit`;else fetchOpts.credentials=`same-origin`;return fetchOpts}function processPreload(link){if(link.ep)return;link.ep=true;const fetchOpts=getFetchOpts(link);fetch(link.href,fetchOpts)}})();var InfiniteQueryObserver=class extends QueryObserver{constructor(client,options){super(client,options)}bindMethods(){super.bindMethods();this.fetchNextPage=this.fetchNextPage.bind(this);this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(options){options._type=`infinite`;super.setOptions(options)}getOptimisticResult(options){options._type=`infinite`;return super.getOptimisticResult(options)}fetchNextPage(options){return this.fetch({...options,meta:{fetchMore:{direction:`forward`}}})}fetchPreviousPage(options){return this.fetch({...options,meta:{fetchMore:{direction:`backward`}}})}createResult(query,options){const{state}=query;const parentResult=super.createResult(query,options);const{isFetching,isRefetching,isError,isRefetchError}=parentResult;const fetchDirection=state.fetchMeta?.fetchMore?.direction;const isFetchNextPageError=isError&&fetchDirection===`forward`;const isFetchingNextPage=isFetching&&fetchDirection===`forward`;const isFetchPreviousPageError=isError&&fetchDirection===`backward`;const isFetchingPreviousPage=isFetching&&fetchDirection===`backward`;return{...parentResult,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:hasNextPage(options,state.data),hasPreviousPage:hasPreviousPage(options,state.data),isFetchNextPageError,isFetchingNextPage,isFetchPreviousPageError,isFetchingPreviousPage,isRefetchError:isRefetchError&&!isFetchNextPageError&&!isFetchPreviousPageError,isRefetching:isRefetching&&!isFetchingNextPage&&!isFetchingPreviousPage}}};var MutationCache$1=class extends Subscribable{#mutations;#scopes;#mutationId;constructor(config={}){super();this.config=config;this.#mutations=new Set;this.#scopes=new Map;this.#mutationId=0}build(client,options,state){const mutation=new Mutation({client,mutationCache:this,mutationId:++this.#mutationId,options:client.defaultMutationOptions(options),state});this.add(mutation);return mutation}add(mutation){this.#mutations.add(mutation);const scope=scopeFor(mutation);if(typeof scope===`string`){const scopedMutations=this.#scopes.get(scope);if(scopedMutations)scopedMutations.push(mutation);else this.#scopes.set(scope,[mutation])}this.notify({type:`added`,mutation})}remove(mutation){if(this.#mutations.delete(mutation)){const scope=scopeFor(mutation);if(typeof scope===`string`){const scopedMutations=this.#scopes.get(scope);if(scopedMutations){if(scopedMutations.length>1){const index=scopedMutations.indexOf(mutation);if(index!==-1)scopedMutations.splice(index,1)}else if(scopedMutations[0]===mutation)this.#scopes.delete(scope)}}}this.notify({type:`removed`,mutation})}canRun(mutation){const scope=scopeFor(mutation);if(typeof scope===`string`){const firstPendingMutation=this.#scopes.get(scope)?.find(m=>m.state.status===`pending`);return!firstPendingMutation||firstPendingMutation===mutation}else return true}runNext(mutation){const scope=scopeFor(mutation);if(typeof scope===`string`)return(this.#scopes.get(scope)?.find(m=>m!==mutation&&m.state.isPaused))?.continue()??Promise.resolve();else return Promise.resolve()}clear(){notifyManager.batch(()=>{this.#mutations.forEach(mutation=>{this.notify({type:`removed`,mutation})});this.#mutations.clear();this.#scopes.clear()})}getAll(){return Array.from(this.#mutations)}find(filters){const defaultedFilters={exact:true,...filters};return this.getAll().find(mutation=>matchMutation(defaultedFilters,mutation))}findAll(filters={}){return this.getAll().filter(mutation=>matchMutation(filters,mutation))}notify(event){notifyManager.batch(()=>{this.listeners.forEach(listener=>{listener(event)})})}resumePausedMutations(){const pausedMutations=this.getAll().filter(x=>x.state.isPaused);return notifyManager.batch(()=>Promise.all(pausedMutations.map(mutation=>mutation.continue().catch(noop$1))))}};function scopeFor(mutation){return mutation.options.scope?.id}var QueryCache$1=class extends Subscribable{#queries;constructor(config={}){super();this.config=config;this.#queries=new Map}build(client,options,state){const queryKey=options.queryKey;const queryHash=options.queryHash??hashQueryKeyByOptions(queryKey,options);let query=this.get(queryHash);if(!query){query=new Query({client,queryKey,queryHash,options:client.defaultQueryOptions(options),state,defaultOptions:client.getQueryDefaults(queryKey)});this.add(query)}return query}add(query){if(!this.#queries.has(query.queryHash)){this.#queries.set(query.queryHash,query);this.notify({type:`added`,query})}}remove(query){const queryInMap=this.#queries.get(query.queryHash);if(queryInMap){query.destroy();if(queryInMap===query)this.#queries.delete(query.queryHash);this.notify({type:`removed`,query})}}clear(){notifyManager.batch(()=>{this.getAll().forEach(query=>{this.remove(query)})})}get(queryHash){return this.#queries.get(queryHash)}getAll(){return[...this.#queries.values()]}find(filters){const defaultedFilters={exact:true,...filters};return this.getAll().find(query=>matchQuery(defaultedFilters,query))}findAll(filters={}){const queries=this.getAll();return Object.keys(filters).length>0?queries.filter(query=>matchQuery(filters,query)):queries}notify(event){notifyManager.batch(()=>{this.listeners.forEach(listener=>{listener(event)})})}onFocus(){notifyManager.batch(()=>{this.getAll().forEach(query=>{query.onFocus()})})}onOnline(){notifyManager.batch(()=>{this.getAll().forEach(query=>{query.onOnline()})})}};var QueryClient$1=class{#queryCache;#mutationCache;#defaultOptions;#queryDefaults;#mutationDefaults;#mountCount;#unsubscribeFocus;#unsubscribeOnline;constructor(config={}){this.#queryCache=config.queryCache||new QueryCache$1;this.#mutationCache=config.mutationCache||new MutationCache$1;this.#defaultOptions=config.defaultOptions||{};this.#queryDefaults=new Map;this.#mutationDefaults=new Map;this.#mountCount=0}mount(){this.#mountCount++;if(this.#mountCount!==1)return;this.#unsubscribeFocus=focusManager.subscribe(async focused=>{if(focused){await this.resumePausedMutations();this.#queryCache.onFocus()}});this.#unsubscribeOnline=onlineManager.subscribe(async online=>{if(online){await this.resumePausedMutations();this.#queryCache.onOnline()}})}unmount(){this.#mountCount--;if(this.#mountCount!==0)return;this.#unsubscribeFocus?.();this.#unsubscribeFocus=void 0;this.#unsubscribeOnline?.();this.#unsubscribeOnline=void 0}isFetching(filters){return this.#queryCache.findAll({...filters,fetchStatus:`fetching`}).length}isMutating(filters){return this.#mutationCache.findAll({...filters,status:`pending`}).length}getQueryData(queryKey){const options=this.defaultQueryOptions({queryKey});return this.#queryCache.get(options.queryHash)?.state.data}ensureQueryData(options){const defaultedOptions=this.defaultQueryOptions(options);const query=this.#queryCache.build(this,defaultedOptions);const cachedData=query.state.data;if(cachedData===void 0)return this.fetchQuery(options);if(options.revalidateIfStale&&query.isStaleByTime(resolveQueryValue(defaultedOptions.staleTime,query)))this.prefetchQuery(defaultedOptions);return Promise.resolve(cachedData)}getQueriesData(filters){return this.#queryCache.findAll(filters).map(({queryKey,state})=>{return[queryKey,state.data]})}setQueryData(queryKey,updater,options){const defaultedOptions=this.defaultQueryOptions({queryKey});const prevData=this.#queryCache.get(defaultedOptions.queryHash)?.state.data;const data=functionalUpdate(updater,prevData);if(data===void 0)return;return this.#queryCache.build(this,defaultedOptions).setData(data,{...options,manual:true})}setQueriesData(filters,updater,options){return notifyManager.batch(()=>this.#queryCache.findAll(filters).map(({queryKey})=>[queryKey,this.setQueryData(queryKey,updater,options)]))}getQueryState(queryKey){const options=this.defaultQueryOptions({queryKey});return this.#queryCache.get(options.queryHash)?.state}removeQueries(filters){const queryCache=this.#queryCache;notifyManager.batch(()=>{queryCache.findAll(filters).forEach(query=>{queryCache.remove(query)})})}resetQueries(filters,options){const queryCache=this.#queryCache;return notifyManager.batch(()=>{const matched=queryCache.findAll(filters);const queriesToRefetch=new Set(matched);matched.forEach(query=>{query.reset()});return this.refetchQueries({type:`active`,predicate:query=>queriesToRefetch.has(query)},options)})}cancelQueries(filters,cancelOptions={}){const defaultedCancelOptions={revert:true,...cancelOptions};const promises=notifyManager.batch(()=>this.#queryCache.findAll(filters).map(query=>query.cancel(defaultedCancelOptions)));return Promise.all(promises).then(noop$1).catch(noop$1)}invalidateQueries(filters,options={}){return notifyManager.batch(()=>{this.#queryCache.findAll(filters).forEach(query=>{query.invalidate()});if(filters?.refetchType===`none`)return Promise.resolve();return this.refetchQueries({...filters,type:filters?.refetchType??filters?.type??`active`},options)})}refetchQueries(filters,options={}){const fetchOptions={...options,cancelRefetch:options.cancelRefetch??true};const promises=notifyManager.batch(()=>this.#queryCache.findAll(filters).filter(query=>!query.isDisabled()&&!query.isStatic()).map(query=>{let promise=query.fetch(void 0,fetchOptions);if(!fetchOptions.throwOnError)promise=promise.catch(noop$1);return query.state.fetchStatus===`paused`?Promise.resolve():promise}));return Promise.all(promises).then(noop$1)}async query(options){const defaultedOptions=this.defaultQueryOptions(options);if(defaultedOptions.retry===void 0)defaultedOptions.retry=false;const query=this.#queryCache.build(this,defaultedOptions);const queryData=query.isStaleByTime(resolveQueryValue(defaultedOptions.staleTime,query))?await query.fetch(defaultedOptions):query.state.data;const select=defaultedOptions.select;if(select)return select(queryData);return queryData}fetchQuery(options){const defaultedOptions=this.defaultQueryOptions(options);if(defaultedOptions.retry===void 0)defaultedOptions.retry=false;const query=this.#queryCache.build(this,defaultedOptions);return query.isStaleByTime(resolveQueryValue(defaultedOptions.staleTime,query))?query.fetch(defaultedOptions):Promise.resolve(query.state.data)}prefetchQuery(options){return this.fetchQuery(options).then(noop$1).catch(noop$1)}infiniteQuery(options){options._type=`infinite`;return this.query(options)}fetchInfiniteQuery(options){options._type=`infinite`;return this.fetchQuery(options)}prefetchInfiniteQuery(options){return this.fetchInfiniteQuery(options).then(noop$1).catch(noop$1)}ensureInfiniteQueryData(options){options._type=`infinite`;return this.ensureQueryData(options)}resumePausedMutations(){if(onlineManager.isOnline())return this.#mutationCache.resumePausedMutations();return Promise.resolve()}getQueryCache(){return this.#queryCache}getMutationCache(){return this.#mutationCache}getDefaultOptions(){return this.#defaultOptions}setDefaultOptions(options){this.#defaultOptions=options}setQueryDefaults(queryKey,options){this.#queryDefaults.set(hashKey(queryKey),{queryKey,defaultOptions:options})}getQueryDefaults(queryKey){const defaults=[...this.#queryDefaults.values()];const result={};defaults.forEach(queryDefault=>{if(partialMatchKey(queryKey,queryDefault.queryKey))Object.assign(result,queryDefault.defaultOptions)});return result}setMutationDefaults(mutationKey,options){this.#mutationDefaults.set(hashKey(mutationKey),{mutationKey,defaultOptions:options})}getMutationDefaults(mutationKey){const defaults=[...this.#mutationDefaults.values()];const result={};defaults.forEach(queryDefault=>{if(partialMatchKey(mutationKey,queryDefault.mutationKey))Object.assign(result,queryDefault.defaultOptions)});return result}defaultQueryOptions(options){if(options._defaulted)return options;const defaultedOptions={...this.#defaultOptions.queries,...this.getQueryDefaults(options.queryKey),...options,_defaulted:true};if(!defaultedOptions.queryHash)defaultedOptions.queryHash=hashQueryKeyByOptions(defaultedOptions.queryKey,defaultedOptions);if(defaultedOptions.refetchOnReconnect===void 0)defaultedOptions.refetchOnReconnect=defaultedOptions.networkMode!==`always`;if(defaultedOptions.throwOnError===void 0)defaultedOptions.throwOnError=!!defaultedOptions.suspense;if(!defaultedOptions.networkMode&&defaultedOptions.persister)defaultedOptions.networkMode=`offlineFirst`;if(defaultedOptions.queryFn===skipToken)defaultedOptions.enabled=false;return defaultedOptions}defaultMutationOptions(options){if(options?._defaulted)return options;return{...this.#defaultOptions.mutations,...options?.mutationKey&&this.getMutationDefaults(options.mutationKey),...options,_defaulted:true}}clear(){this.#queryCache.clear();this.#mutationCache.clear()}};var QueryCache=class extends QueryCache$1{find(filters){return super.find(cloneDeepUnref(filters))}findAll(filters={}){return super.findAll(cloneDeepUnref(filters))}};var MutationCache=class extends MutationCache$1{find(filters){return super.find(cloneDeepUnref(filters))}findAll(filters={}){return super.findAll(cloneDeepUnref(filters))}};var QueryClient=class extends QueryClient$1{constructor(config={}){const vueQueryConfig={defaultOptions:config.defaultOptions,queryCache:config.queryCache||new QueryCache,mutationCache:config.mutationCache||new MutationCache};super(vueQueryConfig);this.isRestoring=ref(false)}isFetching(filters={}){return super.isFetching(cloneDeepUnref(filters))}isMutating(filters={}){return super.isMutating(cloneDeepUnref(filters))}getQueryData(queryKey){return super.getQueryData(cloneDeepUnref(queryKey))}ensureQueryData(options){return super.ensureQueryData(cloneDeepUnref(options))}getQueriesData(filters){return super.getQueriesData(cloneDeepUnref(filters))}setQueryData(queryKey,updater,options={}){return super.setQueryData(cloneDeepUnref(queryKey),updater,cloneDeepUnref(options))}setQueriesData(filters,updater,options={}){return super.setQueriesData(cloneDeepUnref(filters),updater,cloneDeepUnref(options))}getQueryState(queryKey){return super.getQueryState(cloneDeepUnref(queryKey))}removeQueries(filters={}){return super.removeQueries(cloneDeepUnref(filters))}resetQueries(filters={},options={}){return super.resetQueries(cloneDeepUnref(filters),cloneDeepUnref(options))}cancelQueries(filters={},options={}){return super.cancelQueries(cloneDeepUnref(filters),cloneDeepUnref(options))}invalidateQueries(filters={},options={}){const filtersCloned=cloneDeepUnref(filters);const optionsCloned=cloneDeepUnref(options);super.invalidateQueries({...filtersCloned,refetchType:`none`},optionsCloned);if(filtersCloned.refetchType===`none`)return Promise.resolve();const refetchFilters={...filtersCloned,type:filtersCloned.refetchType??filtersCloned.type??`active`};return nextTick$1().then(()=>{return super.refetchQueries(refetchFilters,optionsCloned)})}refetchQueries(filters={},options={}){return super.refetchQueries(cloneDeepUnref(filters),cloneDeepUnref(options))}query(options){return super.query(cloneDeepUnref(options))}fetchQuery(options){return super.fetchQuery(cloneDeepUnref(options))}prefetchQuery(options){return super.prefetchQuery(cloneDeepUnref(options))}infiniteQuery(options){return super.infiniteQuery(cloneDeepUnref(options))}fetchInfiniteQuery(options){return super.fetchInfiniteQuery(cloneDeepUnref(options))}prefetchInfiniteQuery(options){return super.prefetchInfiniteQuery(cloneDeepUnref(options))}setDefaultOptions(options){super.setDefaultOptions(cloneDeepUnref(options))}setQueryDefaults(queryKey,options){super.setQueryDefaults(cloneDeepUnref(queryKey),cloneDeepUnref(options))}getQueryDefaults(queryKey){return super.getQueryDefaults(cloneDeepUnref(queryKey))}setMutationDefaults(mutationKey,options){super.setMutationDefaults(cloneDeepUnref(mutationKey),cloneDeepUnref(options))}getMutationDefaults(mutationKey){return super.getMutationDefaults(cloneDeepUnref(mutationKey))}};var VueQueryPlugin={install:(app,options={})=>{const clientKey=getClientKey(options.queryClientKey);let client;if(`queryClient`in options&&options.queryClient)client=options.queryClient;else{const clientConfig=`queryClientConfig`in options?options.queryClientConfig:void 0;client=new QueryClient(clientConfig)}if(!environmentManager.isServer())client.mount();let persisterUnmount=()=>{};if(options.clientPersister){if(client.isRestoring)client.isRestoring.value=true;const[unmount,promise]=options.clientPersister(client);persisterUnmount=unmount;promise.then(()=>{if(client.isRestoring)client.isRestoring.value=false;options.clientPersisterOnSuccess?.(client)})}const cleanup=()=>{client.unmount();persisterUnmount()};if(app.onUnmount)app.onUnmount(cleanup);else{const originalUnmount=app.unmount;app.unmount=function vueQueryUnmount(){cleanup();originalUnmount()}}if(false)app.mixin({beforeCreate(){if(!this._provided){const provideCache={};Object.defineProperty(this,"_provided",{get:()=>provideCache,set:v=>Object.assign(provideCache,v)})}this._provided[clientKey]=client}});else app.provide(clientKey,client)}};function useInfiniteQuery(options,queryClient){return useBaseQuery(InfiniteQueryObserver,options,queryClient)}var isBrowser=typeof document!==`undefined`;var HASH_RE=/#/g;var AMPERSAND_RE=/&/g;var SLASH_RE=/\//g;var EQUAL_RE=/=/g;var IM_RE=/\?/g;var PLUS_RE=/\+/g;var ENC_BRACKET_OPEN_RE=/%5B/g;var ENC_BRACKET_CLOSE_RE=/%5D/g;var ENC_CARET_RE=/%5E/g;var ENC_BACKTICK_RE=/%60/g;var ENC_CURLY_OPEN_RE=/%7B/g;var ENC_PIPE_RE=/%7C/g;var ENC_CURLY_CLOSE_RE=/%7D/g;var ENC_SPACE_RE=/%20/g;function commonEncode(text){return text==null?``:encodeURI(``+text).replace(ENC_PIPE_RE,`|`).replace(ENC_BRACKET_OPEN_RE,`[`).replace(ENC_BRACKET_CLOSE_RE,`]`)}function encodeHash(text){return commonEncode(text).replace(ENC_CURLY_OPEN_RE,`{`).replace(ENC_CURLY_CLOSE_RE,`}`).replace(ENC_CARET_RE,`^`)}function encodeQueryValue(text){return commonEncode(text).replace(PLUS_RE,`%2B`).replace(ENC_SPACE_RE,`+`).replace(HASH_RE,`%23`).replace(AMPERSAND_RE,`%26`).replace(ENC_BACKTICK_RE,"`").replace(ENC_CURLY_OPEN_RE,`{`).replace(ENC_CURLY_CLOSE_RE,`}`).replace(ENC_CARET_RE,`^`)}function encodeQueryKey(text){return encodeQueryValue(text).replace(EQUAL_RE,`%3D`)}function encodePath(text){return commonEncode(text).replace(HASH_RE,`%23`).replace(IM_RE,`%3F`)}function encodeParam(text){return encodePath(text).replace(SLASH_RE,`%2F`)}function decode$2(text){if(text==null)return null;try{return decodeURIComponent(``+text)}catch{}return``+text}var TRAILING_SLASH_RE=/\/$/;var removeTrailingSlash=path=>path.replace(TRAILING_SLASH_RE,``);function parseURL(parseQuery,location,currentLocation=`/`){let path,query={},searchString=``,hash=``;const hashPos=location.indexOf(`#`);let searchPos=location.indexOf(`?`);searchPos=hashPos>=0&&searchPos>hashPos?-1:searchPos;if(searchPos>=0){path=location.slice(0,searchPos);searchString=location.slice(searchPos,hashPos>0?hashPos:location.length);query=parseQuery(searchString.slice(1))}if(hashPos>=0){path=path||location.slice(0,hashPos);hash=location.slice(hashPos,location.length)}path=resolveRelativePath(path!=null?path:location,currentLocation);return{fullPath:path+searchString+hash,path,query,hash:decode$2(hash)}}function stringifyURL(stringifyQuery,location){const query=location.query?stringifyQuery(location.query):``;return location.path+(query&&`?`)+query+(location.hash||``)}function stripBase(pathname,base){if(!base||!pathname.toLowerCase().startsWith(base.toLowerCase()))return pathname;return pathname.slice(base.length)||`/`}function isSameRouteLocation(stringifyQuery,a,b){const aLastIndex=a.matched.length-1;const bLastIndex=b.matched.length-1;return aLastIndex>-1&&aLastIndex===bLastIndex&&isSameRouteRecord(a.matched[aLastIndex],b.matched[bLastIndex])&&isSameRouteLocationParams(a.params,b.params)&&stringifyQuery(a.query)===stringifyQuery(b.query)&&a.hash===b.hash}function isSameRouteRecord(a,b){return(a.aliasOf||a)===(b.aliasOf||b)}function isSameRouteLocationParams(a,b){if(Object.keys(a).length!==Object.keys(b).length)return false;for(var key in a)if(!isSameRouteLocationParamsValue(a[key],b[key]))return false;return true}function isSameRouteLocationParamsValue(a,b){return isArray(a)?isEquivalentArray(a,b):isArray(b)?isEquivalentArray(b,a):(a&&a.valueOf())===(b&&b.valueOf())}function isEquivalentArray(a,b){return isArray(b)?a.length===b.length&&a.every((value,i)=>value===b[i]):a.length===1&&a[0]===b}function resolveRelativePath(to,from){if(isAbsolutePath(to))return to;if(!to)return from;const fromSegments=from.split(`/`);const toSegments=to.split(`/`);const lastToSegment=toSegments[toSegments.length-1];if(lastToSegment===`..`||lastToSegment===`.`)toSegments.push(``);let position=fromSegments.length-1;let toPosition;let segment;for(toPosition=0;toPosition<toSegments.length;toPosition++){segment=toSegments[toPosition];if(segment===`.`)continue;if(segment===`..`){if(position>1)position--}else break}return fromSegments.slice(0,position).join(`/`)+`/`+toSegments.slice(toPosition).join(`/`)}var START_LOCATION_NORMALIZED={path:`/`,name:void 0,params:{},query:{},hash:``,fullPath:`/`,matched:[],meta:{},redirectedFrom:void 0};function normalizeBase(base){if(!base){if(isBrowser){const baseEl=document.querySelector(`base`);base=baseEl&&baseEl.getAttribute(`href`)||`/`;base=base.replace(/^\w+:\/\/[^/]+/,``)}else base=`/`}if(base[0]!==`/`&&base[0]!==`#`)base=`/`+base;return removeTrailingSlash(base)}var BEFORE_HASH_RE=/^[^#]+#/;function createHref(base,location){return base.replace(BEFORE_HASH_RE,`#`)+location}function getElementPosition(el,offset){const docRect=document.documentElement.getBoundingClientRect();const elRect=el.getBoundingClientRect();return{behavior:offset.behavior,left:elRect.left-docRect.left-(offset.left||0),top:elRect.top-docRect.top-(offset.top||0)}}var computeScrollPosition=()=>history.scrollRestoration===`manual`?{left:window.scrollX,top:window.scrollY}:null;function scrollToPosition(position){let scrollToOptions;if(`el`in position){const positionEl=position.el;const isIdSelector=typeof positionEl===`string`&&positionEl.startsWith(`#`);const el=typeof positionEl===`string`?isIdSelector?document.getElementById(positionEl.slice(1)):document.querySelector(positionEl):positionEl;if(!el)return;scrollToOptions=getElementPosition(el,position)}else scrollToOptions=position;if(`scrollBehavior`in document.documentElement.style)window.scrollTo(scrollToOptions);else window.scrollTo(scrollToOptions.left!=null?scrollToOptions.left:window.scrollX,scrollToOptions.top!=null?scrollToOptions.top:window.scrollY)}function getScrollKey(path,delta){return(history.state?history.state.position-delta:-1)+path}var scrollPositions=new Map;function saveScrollPosition(key){scrollPositions.set(key,computeScrollPosition())}function getSavedScrollPosition(key){const scroll=scrollPositions.get(key);scrollPositions.delete(key);return scroll}function isRouteLocation(route){return typeof route===`string`||route&&typeof route===`object`}function isRouteName(name){return typeof name===`string`||typeof name===`symbol`}function parseQuery(search){const query={};if(search===``||search===`?`)return query;const searchParams=(search[0]===`?`?search.slice(1):search).split(`&`);for(let i=0;i<searchParams.length;++i){const searchParam=searchParams[i].replace(PLUS_RE,` `);const eqPos=searchParam.indexOf(`=`);const key=decode$2(eqPos<0?searchParam:searchParam.slice(0,eqPos));const value=eqPos<0?null:decode$2(searchParam.slice(eqPos+1));if(key in query){let currentValue=query[key];if(!isArray(currentValue))currentValue=query[key]=[currentValue];currentValue.push(value)}else query[key]=value}return query}function stringifyQuery(query){let search=``;for(let key in query){const value=query[key];key=encodeQueryKey(key);if(value==null){if(value!==void 0)search+=(search.length?`&`:``)+key;continue}(isArray(value)?value.map(v=>v&&encodeQueryValue(v)):[value&&encodeQueryValue(value)]).forEach(value=>{if(value!==void 0){search+=(search.length?`&`:``)+key;if(value!=null)search+=`=`+value}})}return search}function normalizeQuery(query){const normalizedQuery={};for(const key in query){const value=query[key];if(value!==void 0)normalizedQuery[key]=isArray(value)?value.map(v=>v==null?null:``+v):value==null?value:``+value}return normalizedQuery}function useCallbacks(){let handlers=[];function add(handler){handlers.push(handler);return()=>{const i=handlers.indexOf(handler);if(i>-1)handlers.splice(i,1)}}function reset(){handlers=[]}return{add,list:()=>handlers.slice(),reset}}function guardToPromiseFn(guard,to,from,record,name,runWithContext=fn=>fn()){const enterCallbackArray=record&&(record.enterCallbacks[name]=record.enterCallbacks[name]||[]);return()=>new Promise((resolve,reject)=>{const next=valid=>{if(valid===false)reject(createRouterError(4,{from,to}));else if(valid instanceof Error)reject(valid);else if(isRouteLocation(valid))reject(createRouterError(2,{from:to,to:valid}));else{if(enterCallbackArray&&record.enterCallbacks[name]===enterCallbackArray&&typeof valid===`function`)enterCallbackArray.push(valid);resolve()}};const guardReturn=runWithContext(()=>guard.call(record&&record.instances[name],to,from,next));let guardCall=Promise.resolve(guardReturn);if(guard.length<3)guardCall=guardCall.then(next);guardCall.catch(err=>reject(err))})}function extractComponentsGuards(matched,guardType,to,from,runWithContext=fn=>fn()){const guards=[];for(const record of matched)for(const name in record.components){let rawComponent=record.components[name];if(guardType!==`beforeRouteEnter`&&!record.instances[name])continue;if(isRouteComponent$1(rawComponent)){const guard=(rawComponent.__vccOpts||rawComponent)[guardType];guard&&guards.push(guardToPromiseFn(guard,to,from,record,name,runWithContext))}else{let componentPromise=rawComponent();guards.push(()=>componentPromise.then(resolved=>{if(!resolved)throw new Error(`Couldn't resolve component "${name}" at "${record.path}"`);const resolvedComponent=isESModule(resolved)?resolved.default:resolved;record.mods[name]=resolved;record.components[name]=resolvedComponent;const guard=(resolvedComponent.__vccOpts||resolvedComponent)[guardType];return guard&&guardToPromiseFn(guard,to,from,record,name,runWithContext)()}))}}return guards}function extractChangingRecords(to,from){const leavingRecords=[];const updatingRecords=[];const enteringRecords=[];const len=Math.max(from.matched.length,to.matched.length);for(let i=0;i<len;i++){const recordFrom=from.matched[i];if(recordFrom){if(to.matched.find(record=>isSameRouteRecord(record,recordFrom)))updatingRecords.push(recordFrom);else leavingRecords.push(recordFrom)}const recordTo=to.matched[i];if(recordTo){if(!from.matched.find(record=>isSameRouteRecord(record,recordTo)))enteringRecords.push(recordTo)}}return[leavingRecords,updatingRecords,enteringRecords]}var createBaseLocation=()=>location.protocol+`//`+location.host;function createCurrentLocation(base,location){const{pathname,search,hash}=location;const hashPos=base.indexOf(`#`);if(hashPos>-1){let slicePos=hash.includes(base.slice(hashPos))?base.slice(hashPos).length:1;let pathFromHash=hash.slice(slicePos);if(pathFromHash[0]!==`/`)pathFromHash=`/`+pathFromHash;return stripBase(pathFromHash,``)}return stripBase(pathname,base)+search+hash}function useHistoryListeners(base,historyState,currentLocation,replace){let listeners=[];let teardowns=[];let pauseState=null;const popStateHandler=({state})=>{const to=createCurrentLocation(base,location);const from=currentLocation.value;const fromState=historyState.value;let delta=0;if(state){currentLocation.value=to;historyState.value=state;if(pauseState&&pauseState===from){pauseState=null;return}delta=fromState?state.position-fromState.position:0}else replace(to);listeners.forEach(listener=>{listener(currentLocation.value,from,{delta,type:`pop`,direction:delta?delta>0?`forward`:`back`:``})})};function pauseListeners(){pauseState=currentLocation.value}function listen(callback){listeners.push(callback);const teardown=()=>{const index=listeners.indexOf(callback);if(index>-1)listeners.splice(index,1)};teardowns.push(teardown);return teardown}function beforeUnloadListener(){const{history}=window;if(!history.state)return;history.replaceState(assign({},history.state,{scroll:computeScrollPosition()}),``)}function destroy(){for(const teardown of teardowns)teardown();teardowns=[];window.removeEventListener(`popstate`,popStateHandler);window.removeEventListener(`pagehide`,beforeUnloadListener)}window.addEventListener(`popstate`,popStateHandler);window.addEventListener(`pagehide`,beforeUnloadListener);return{pauseListeners,listen,destroy}}function buildState(back,current,forward,replaced=false){return{back,current,forward,replaced,position:window.history.length,scroll:null}}function useHistoryStateNavigation(base){const{history,location}=window;const currentLocation={value:createCurrentLocation(base,location)};const historyState={value:history.state};if(!historyState.value)changeLocation(currentLocation.value,{back:null,current:currentLocation.value,forward:null,position:history.length-1,replaced:true,scroll:null},true);function changeLocation(to,state,replace){const hashIndex=base.indexOf(`#`);const url=hashIndex>-1?(location.host&&document.querySelector(`base`)?base:base.slice(hashIndex))+to:createBaseLocation()+base+to;try{history[replace?`replaceState`:`pushState`](state,``,url);historyState.value=state}catch(err){console.error(err);location[replace?`replace`:`assign`](url)}}function replace(to,data){changeLocation(to,assign({},history.state,buildState(historyState.value.back,to,historyState.value.forward,true),data,{position:historyState.value.position}),true);currentLocation.value=to}function push(to,data){const currentState=assign({},historyState.value,history.state,{forward:to,scroll:computeScrollPosition()});changeLocation(currentState.current,currentState,true);changeLocation(to,assign({},buildState(currentLocation.value,to,null),{position:currentState.position+1},data),false);currentLocation.value=to}return{location:currentLocation,state:historyState,push,replace}}function createWebHistory(base){base=normalizeBase(base);const historyNavigation=useHistoryStateNavigation(base);const historyListeners=useHistoryListeners(base,historyNavigation.state,historyNavigation.location,historyNavigation.replace);function go(delta,triggerListeners=true){if(!triggerListeners)historyListeners.pauseListeners();history.go(delta)}const routerHistory=assign({location:``,base,go,createHref:createHref.bind(null,base)},historyNavigation,historyListeners);Object.defineProperty(routerHistory,"location",{enumerable:true,get:()=>historyNavigation.location.value});Object.defineProperty(routerHistory,"state",{enumerable:true,get:()=>historyNavigation.state.value});return routerHistory}var ROOT_TOKEN={type:0,value:``};var VALID_PARAM_RE=/[a-zA-Z0-9_]/;function tokenizePath(path){if(!path)return[[]];if(path===`/`)return[[ROOT_TOKEN]];if(!isAbsolutePath(path))throw new Error(`Invalid path "${path}"`);function crash(message){throw new Error(`ERR (${state})/"${buffer}": ${message}`)}let state=0;let previousState=state;const tokens=[];let segment;function finalizeSegment(){if(segment)tokens.push(segment);segment=[]}let i=0;let char;let buffer=``;let customRe=``;function consumeBuffer(){if(!buffer)return;if(state===0)segment.push({type:0,value:buffer});else if(state===1||state===2||state===3){if(segment.length>1&&(char===`*`||char===`+`))crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);segment.push({type:1,value:buffer,regexp:customRe,repeatable:char===`*`||char===`+`,optional:char===`*`||char===`?`})}else crash(`Invalid state to consume buffer`);buffer=``}function addCharToBuffer(){buffer+=char}while(i<path.length){char=path[i++];switch(state){case 0:if(char===`\\`){previousState=state;state=4}else if(char===`/`){if(buffer)consumeBuffer();finalizeSegment()}else if(char===`:`){consumeBuffer();state=1}else addCharToBuffer();break;case 4:addCharToBuffer();state=previousState;break;case 1:if(char===`(`)state=2;else if(VALID_PARAM_RE.test(char))addCharToBuffer();else{consumeBuffer();state=0;if(char!==`*`&&char!==`?`&&char!==`+`)i--}break;case 2:if(char===`)`){if(customRe[customRe.length-1]==`\\`)customRe=customRe.slice(0,-1)+char;else state=3}else customRe+=char;break;case 3:consumeBuffer();state=0;if(char!==`*`&&char!==`?`&&char!==`+`)i--;customRe=``;break;default:crash(`Unknown state`)}}if(state===2)crash(`Unfinished custom RegExp for param "${buffer}"`);consumeBuffer();finalizeSegment();return tokens}var BASE_PARAM_PATTERN=`[^/]+?`;var BASE_PATH_PARSER_OPTIONS={sensitive:false,strict:false,start:true,end:true};var REGEX_CHARS_RE=/[.+*?^${}()[\]/\\]/g;function tokensToParser(segments,extraOptions){const options=assign({},BASE_PATH_PARSER_OPTIONS,extraOptions);const score=[];let pattern=options.start?`^`:``;const keys=[];for(const segment of segments){const segmentScores=segment.length?[]:[90];if(options.strict&&!segment.length)pattern+=`/`;for(let tokenIndex=0;tokenIndex<segment.length;tokenIndex++){const token=segment[tokenIndex];let subSegmentScore=40+(options.sensitive?.25:0);if(token.type===0){if(!tokenIndex)pattern+=`/`;pattern+=token.value.replace(REGEX_CHARS_RE,`\\$&`);subSegmentScore+=40}else if(token.type===1){const{value,repeatable,optional,regexp}=token;keys.push({name:value,repeatable,optional});const re=regexp?regexp:BASE_PARAM_PATTERN;if(re!==BASE_PARAM_PATTERN){subSegmentScore+=10;try{new RegExp(`(${re})`)}catch(err){throw new Error(`Invalid custom RegExp for param "${value}" (${re}): `+err.message)}}let subPattern=repeatable?`((?:${re})(?:/(?:${re}))*)`:`(${re})`;if(!tokenIndex)subPattern=optional&&segment.length<2?`(?:/${subPattern})`:`/`+subPattern;if(optional)subPattern+=`?`;pattern+=subPattern;subSegmentScore+=20;if(optional)subSegmentScore+=-8;if(repeatable)subSegmentScore+=-20;if(re===`.*`)subSegmentScore+=-50}segmentScores.push(subSegmentScore)}score.push(segmentScores)}if(options.strict&&options.end){const i=score.length-1;score[i][score[i].length-1]+=.7000000000000001}if(!options.strict)pattern+=`/?`;if(options.end)pattern+=`$`;else if(options.strict&&!pattern.endsWith(`/`))pattern+=`(?:/|$)`;const re=new RegExp(pattern,options.sensitive?``:`i`);function parse(path){const match=path.match(re);const params={};if(!match)return null;for(let i=1;i<match.length;i++){const value=match[i]||``;const key=keys[i-1];params[key.name]=value&&key.repeatable?value.split(`/`):value}return params}function stringify(params){let path=``;let avoidDuplicatedSlash=false;for(const segment of segments){if(!avoidDuplicatedSlash||!path.endsWith(`/`))path+=`/`;avoidDuplicatedSlash=false;for(const token of segment)if(token.type===0)path+=token.value;else if(token.type===1){const{value,repeatable,optional}=token;const param=value in params?params[value]:``;if(isArray(param)&&!repeatable)throw new Error(`Provided param "${value}" is an array but it is not repeatable (* or + modifiers)`);const text=isArray(param)?param.join(`/`):param;if(!text){if(optional){if(segment.length<2){if(path.endsWith(`/`))path=path.slice(0,-1);else avoidDuplicatedSlash=true}}else throw new Error(`Missing required param "${value}"`)}path+=text}}return path||`/`}return{re,score,keys,parse,stringify}}function compareScoreArray(a,b){let i=0;while(i<a.length&&i<b.length){const diff=b[i]-a[i];if(diff)return diff;i++}if(a.length<b.length)return a.length===1&&a[0]===80?-1:1;else if(a.length>b.length)return b.length===1&&b[0]===80?1:-1;return 0}function comparePathParserScore(a,b){let i=0;const aScore=a.score;const bScore=b.score;while(i<aScore.length&&i<bScore.length){const comp=compareScoreArray(aScore[i],bScore[i]);if(comp)return comp;i++}if(Math.abs(bScore.length-aScore.length)===1){if(isLastScoreNegative(aScore))return 1;if(isLastScoreNegative(bScore))return-1}return bScore.length-aScore.length}function isLastScoreNegative(score){const last=score[score.length-1];return score.length>0&&last[last.length-1]<0}var PATH_PARSER_OPTIONS_DEFAULTS={strict:false,end:true,sensitive:false};function createRouteRecordMatcher(record,parent,options){const parser=tokensToParser(tokenizePath(record.path),options);const matcher=assign(parser,{record,parent,children:[],alias:[]});if(parent){if(!matcher.record.aliasOf===!parent.record.aliasOf)parent.children.push(matcher)}return matcher}function createRouterMatcher(routes,globalOptions){const matchers=[];const matcherMap=new Map;globalOptions=mergeOptions(PATH_PARSER_OPTIONS_DEFAULTS,globalOptions);function getRecordMatcher(name){return matcherMap.get(name)}function addRoute(record,parent,originalRecord){const isRootAdd=!originalRecord;const mainNormalizedRecord=normalizeRouteRecord(record);mainNormalizedRecord.aliasOf=originalRecord&&originalRecord.record;const options=mergeOptions(globalOptions,record);const normalizedRecords=[mainNormalizedRecord];if(`alias`in record){const aliases=typeof record.alias===`string`?[record.alias]:record.alias;for(const alias of aliases)normalizedRecords.push(normalizeRouteRecord(assign({},mainNormalizedRecord,{components:originalRecord?originalRecord.record.components:mainNormalizedRecord.components,path:alias,aliasOf:originalRecord?originalRecord.record:mainNormalizedRecord})))}let matcher;let originalMatcher;for(const normalizedRecord of normalizedRecords){const{path}=normalizedRecord;if(parent&&!isAbsolutePath(path)){const parentPath=parent.record.path;const connectingSlash=parentPath[parentPath.length-1]===`/`?``:`/`;normalizedRecord.path=parent.record.path+(path&&connectingSlash+path)}matcher=createRouteRecordMatcher(normalizedRecord,parent,options);if(originalRecord)originalRecord.alias.push(matcher);else{originalMatcher=originalMatcher||matcher;if(originalMatcher!==matcher)originalMatcher.alias.push(matcher);if(isRootAdd&&record.name&&!isAliasRecord(matcher))removeRoute(record.name)}if(isMatchable(matcher))insertMatcher(matcher);if(mainNormalizedRecord.children){const children=mainNormalizedRecord.children;for(let i=0;i<children.length;i++)addRoute(children[i],matcher,originalRecord&&originalRecord.children[i])}originalRecord=originalRecord||matcher}return originalMatcher?()=>{removeRoute(originalMatcher)}:noop$2}function removeRoute(matcherRef){if(isRouteName(matcherRef)){const matcher=matcherMap.get(matcherRef);if(matcher){matcherMap.delete(matcherRef);matchers.splice(matchers.indexOf(matcher),1);matcher.children.forEach(removeRoute);matcher.alias.forEach(removeRoute)}}else{const index=matchers.indexOf(matcherRef);if(index>-1){matchers.splice(index,1);if(matcherRef.record.name)matcherMap.delete(matcherRef.record.name);matcherRef.children.forEach(removeRoute);matcherRef.alias.forEach(removeRoute)}}}function getRoutes(){return matchers}function insertMatcher(matcher){const index=findInsertionIndex(matcher,matchers);matchers.splice(index,0,matcher);if(matcher.record.name&&!isAliasRecord(matcher))matcherMap.set(matcher.record.name,matcher)}function resolve(location,currentLocation){let matcher;let params={};let path;let name;if(`name`in location&&location.name){matcher=matcherMap.get(location.name);if(!matcher)throw createRouterError(1,{location});name=matcher.record.name;params=assign(pickParams(currentLocation.params,matcher.keys.filter(k=>!k.optional).concat(matcher.parent?matcher.parent.keys.filter(k=>k.optional):[]).map(k=>k.name)),location.params&&pickParams(location.params,matcher.keys.map(k=>k.name)));path=matcher.stringify(params)}else if(location.path!=null){path=location.path;matcher=matchers.find(m=>m.re.test(path));if(matcher){params=matcher.parse(path);name=matcher.record.name;matcher.keys.forEach(key=>{if(key.optional&&!params[key.name])delete params[key.name]})}}else{matcher=currentLocation.name?matcherMap.get(currentLocation.name):matchers.find(m=>m.re.test(currentLocation.path));if(!matcher)throw createRouterError(1,{location,currentLocation});name=matcher.record.name;params=assign({},currentLocation.params,location.params);path=matcher.stringify(params)}const matched=[];let parentMatcher=matcher;while(parentMatcher){matched.unshift(parentMatcher.record);parentMatcher=parentMatcher.parent}return{name,path,params,matched,meta:mergeMetaFields(matched)}}routes.forEach(route=>addRoute(route));function clearRoutes(){matchers.length=0;matcherMap.clear()}return{addRoute,resolve,removeRoute,clearRoutes,getRoutes,getRecordMatcher}}function pickParams(params,keys){const newParams={};for(const key of keys)if(key in params)newParams[key]=params[key];return newParams}function normalizeRouteRecord(record){const normalized={path:record.path,redirect:record.redirect,name:record.name,meta:record.meta||{},aliasOf:record.aliasOf,beforeEnter:record.beforeEnter,props:normalizeRecordProps(record),children:record.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in record?record.components||null:record.component&&{default:record.component}};Object.defineProperty(normalized,"mods",{value:{}});return normalized}function normalizeRecordProps(record){const propsObject={};const props=record.props||false;if(`component`in record)propsObject.default=props;else for(const name in record.components)propsObject[name]=typeof props===`object`?props[name]:props;return propsObject}function isAliasRecord(record){while(record){if(record.record.aliasOf)return true;record=record.parent}return false}function mergeMetaFields(matched){return matched.reduce((meta,record)=>assign(meta,record.meta),{})}function findInsertionIndex(matcher,matchers){let lower=0;let upper=matchers.length;while(lower!==upper){const mid=lower+upper>>1;if(comparePathParserScore(matcher,matchers[mid])<0)upper=mid;else lower=mid+1}const insertionAncestor=getInsertionAncestor(matcher);if(insertionAncestor)upper=matchers.lastIndexOf(insertionAncestor,upper-1);return upper}function getInsertionAncestor(matcher){let ancestor=matcher;while(ancestor=ancestor.parent)if(isMatchable(ancestor)&&comparePathParserScore(matcher,ancestor)===0)return ancestor}function isMatchable({record}){return!!(record.name||record.components&&Object.keys(record.components).length||record.redirect)}function useLink(props){const router=inject$1(routerKey);const currentRoute=inject$1(routeLocationKey);const route=computed(()=>{const to=unref(props.to);return router.resolve(to)});const activeRecordIndex=computed(()=>{const{matched}=route.value;const{length}=matched;const routeMatched=matched[length-1];const currentMatched=currentRoute.matched;if(!routeMatched||!currentMatched.length)return-1;const index=currentMatched.findIndex(isSameRouteRecord.bind(null,routeMatched));if(index>-1)return index;const parentRecordPath=getOriginalPath(matched[length-2]);return length>1&&getOriginalPath(routeMatched)===parentRecordPath&¤tMatched[currentMatched.length-1].path!==parentRecordPath?currentMatched.findIndex(isSameRouteRecord.bind(null,matched[length-2])):index});const isActive=computed(()=>activeRecordIndex.value>-1&&includesParams(currentRoute.params,route.value.params));const isExactActive=computed(()=>activeRecordIndex.value>-1&&activeRecordIndex.value===currentRoute.matched.length-1&&isSameRouteLocationParams(currentRoute.params,route.value.params));function navigate(e={}){if(guardEvent(e)){const p=router[unref(props.replace)?`replace`:`push`](unref(props.to)).catch(noop$2);if(props.viewTransition&&typeof document!==`undefined`&&`startViewTransition`in document)document.startViewTransition(()=>p);return p}return Promise.resolve()}return{route,href:computed(()=>route.value.href),isActive,isExactActive,navigate}}function preferSingleVNode(vnodes){return vnodes.length===1?vnodes[0]:vnodes}var RouterLink=defineComponent$1({name:`RouterLink`,compatConfig:{MODE:3},props:{to:{type:[String,Object],required:true},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:`page`},viewTransition:Boolean},useLink,setup(props,{slots}){const link=reactive(useLink(props));const{options}=inject$1(routerKey);const elClass=computed(()=>({[getLinkClass(props.activeClass,options.linkActiveClass,`router-link-active`)]:link.isActive,[getLinkClass(props.exactActiveClass,options.linkExactActiveClass,`router-link-exact-active`)]:link.isExactActive}));return()=>{const children=slots.default&&preferSingleVNode(slots.default(link));return props.custom?children:h$1(`a`,{"aria-current":link.isExactActive?props.ariaCurrentValue:null,href:link.href,onClick:link.navigate,class:elClass.value},children)}}});function guardEvent(e){if(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)return;if(e.defaultPrevented)return;if(e.button!==void 0&&e.button!==0)return;if(e.currentTarget&&e.currentTarget.getAttribute){const target=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(target))return}if(e.preventDefault)e.preventDefault();return true}function includesParams(outer,inner){for(const key in inner){const innerValue=inner[key];const outerValue=outer[key];if(isArray(innerValue)){if(!isArray(outerValue)||outerValue.length!==innerValue.length||innerValue.some((value,i)=>value.valueOf()!==outerValue[i].valueOf()))return false}else if(innerValue!==outerValue)return false}return true}function getOriginalPath(record){return record?record.aliasOf?record.aliasOf.path:record.path:``}var getLinkClass=(propClass,globalClass,defaultClass)=>propClass!=null?propClass:globalClass!=null?globalClass:defaultClass;var RouterViewImpl=defineComponent$1({name:`RouterView`,inheritAttrs:false,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(props,{attrs,slots}){const injectedRoute=inject$1(routerViewLocationKey);const routeToDisplay=computed(()=>props.route||injectedRoute.value);const injectedDepth=inject$1(viewDepthKey,0);const depth=computed(()=>{let initialDepth=unref(injectedDepth);const{matched}=routeToDisplay.value;let matchedRoute;while((matchedRoute=matched[initialDepth])&&!matchedRoute.components)initialDepth++;return initialDepth});const matchedRouteRef=computed(()=>routeToDisplay.value.matched[depth.value]);provide(viewDepthKey,computed(()=>depth.value+1));provide(matchedRouteKey,matchedRouteRef);provide(routerViewLocationKey,routeToDisplay);const viewRef=ref();watch(()=>[viewRef.value,matchedRouteRef.value,props.name],([instance,to,name],[oldInstance,from,_oldName])=>{if(to){to.instances[name]=instance;if(from&&from!==to&&instance&&instance===oldInstance){if(!to.leaveGuards.size)to.leaveGuards=from.leaveGuards;if(!to.updateGuards.size)to.updateGuards=from.updateGuards}}if(instance&&to&&(!from||!isSameRouteRecord(to,from)||!oldInstance))(to.enterCallbacks[name]||[]).forEach(callback=>callback(instance))},{flush:`post`});return()=>{const route=routeToDisplay.value;const currentName=props.name;const matchedRoute=matchedRouteRef.value;const ViewComponent=matchedRoute&&matchedRoute.components[currentName];if(!ViewComponent)return normalizeSlot(slots.default,{Component:ViewComponent,route});const routePropsOption=matchedRoute.props[currentName];const routeProps=routePropsOption?routePropsOption===true?route.params:typeof routePropsOption===`function`?routePropsOption(route):routePropsOption:null;const onVnodeUnmounted=vnode=>{if(vnode.component.isUnmounted)matchedRoute.instances[currentName]=null};const component=h$1(ViewComponent,assign({},routeProps,attrs,{onVnodeUnmounted,ref:viewRef}));return normalizeSlot(slots.default,{Component:component,route})||component}}});function normalizeSlot(slot,data){if(!slot)return null;const slotContent=slot(data);return slotContent.length===1?slotContent[0]:slotContent}var RouterView=RouterViewImpl;function createRouter(options){const matcher=createRouterMatcher(options.routes,options);const parseQuery$1=options.parseQuery||parseQuery;const stringifyQuery$1=options.stringifyQuery||stringifyQuery;const routerHistory=options.history;const beforeGuards=useCallbacks();const beforeResolveGuards=useCallbacks();const afterGuards=useCallbacks();const currentRoute=shallowRef(START_LOCATION_NORMALIZED);const routesVersion=shallowRef(0);let pendingLocation=START_LOCATION_NORMALIZED;if(isBrowser&&options.scrollBehavior&&`scrollRestoration`in history)history.scrollRestoration=`manual`;const normalizeParams=applyToParams.bind(null,paramValue=>``+paramValue);const encodeParams=applyToParams.bind(null,encodeParam);const decodeParams=applyToParams.bind(null,decode$2);function addRoute(parentOrRoute,route){let parent;let record;if(isRouteName(parentOrRoute)){parent=matcher.getRecordMatcher(parentOrRoute);record=route}else record=parentOrRoute;const removeRoute=matcher.addRoute(record,parent);routesVersion.value++;return()=>{removeRoute();routesVersion.value++}}function removeRoute(name){const recordMatcher=matcher.getRecordMatcher(name);if(recordMatcher){matcher.removeRoute(recordMatcher);routesVersion.value++}}function clearRoutes(){matcher.clearRoutes();routesVersion.value++}function getRoutes(){return matcher.getRoutes().map(routeMatcher=>routeMatcher.record)}function hasRoute(name){return!!matcher.getRecordMatcher(name)}function resolve(rawLocation,currentLocation){routesVersion.value;if(typeof rawLocation===`string`){currentLocation=currentLocation||(rawLocation.startsWith(`/`)?START_LOCATION_NORMALIZED:currentRoute.value);const locationNormalized=parseURL(parseQuery$1,rawLocation,currentLocation.path);const matchedRoute=matcher.resolve({path:locationNormalized.path},currentLocation);const href=routerHistory.createHref(locationNormalized.fullPath);return assign(locationNormalized,matchedRoute,{params:decodeParams(matchedRoute.params),redirectedFrom:void 0,href})}currentLocation=assign({},currentLocation||(rawLocation.path!=null&&rawLocation.path.startsWith(`/`)&&!(`name`in rawLocation&&rawLocation.name)?START_LOCATION_NORMALIZED:currentRoute.value));let matcherLocation;if(rawLocation.path!=null)matcherLocation=assign({},rawLocation,{path:parseURL(parseQuery$1,rawLocation.path,currentLocation.path).path});else{const targetParams=assign({},rawLocation.params);for(const key in targetParams)if(targetParams[key]==null)delete targetParams[key];matcherLocation=assign({},rawLocation,{params:encodeParams(targetParams)});currentLocation.params=encodeParams(currentLocation.params)}const matchedRoute=matcher.resolve(matcherLocation,currentLocation);const hash=rawLocation.hash||``;matchedRoute.params=normalizeParams(decodeParams(matchedRoute.params));const fullPath=stringifyURL(stringifyQuery$1,assign({},rawLocation,{hash:encodeHash(hash),path:matchedRoute.path}));const href=routerHistory.createHref(fullPath);return assign({fullPath,hash,query:stringifyQuery$1===stringifyQuery?normalizeQuery(rawLocation.query):rawLocation.query||{}},matchedRoute,{redirectedFrom:void 0,href})}function locationAsObject(to){return typeof to===`string`?parseURL(parseQuery$1,to,currentRoute.value.path):assign({},to)}function checkCanceledNavigation(to,from){if(pendingLocation!==to)return createRouterError(8,{from,to})}function push(to){return pushWithRedirect(to)}function replace(to){return push(assign(locationAsObject(to),{replace:true}))}function handleRedirectRecord(to,from){const lastMatched=to.matched[to.matched.length-1];if(lastMatched&&lastMatched.redirect){const{redirect}=lastMatched;let newTargetLocation=typeof redirect===`function`?redirect(to,from):redirect;if(typeof newTargetLocation===`string`){newTargetLocation=newTargetLocation.includes(`?`)||newTargetLocation.includes(`#`)?newTargetLocation=locationAsObject(newTargetLocation):{path:newTargetLocation};newTargetLocation.params={}}return assign({query:to.query,hash:to.hash,params:newTargetLocation.path!=null?{}:to.params},newTargetLocation)}}function pushWithRedirect(to,redirectedFrom){const targetLocation=pendingLocation=resolve(to);const from=currentRoute.value;const data=to.state;const force=to.force;const replace=to.replace===true;const shouldRedirect=handleRedirectRecord(targetLocation,from);if(shouldRedirect)return pushWithRedirect(assign(locationAsObject(shouldRedirect),{state:typeof shouldRedirect===`object`?assign({},data,shouldRedirect.state):data,force,replace}),redirectedFrom||targetLocation);const toLocation=targetLocation;toLocation.redirectedFrom=redirectedFrom;let failure;if(!force&&isSameRouteLocation(stringifyQuery$1,from,targetLocation)){failure=createRouterError(16,{to:toLocation,from});handleScroll(from,from,true,false)}return(failure?Promise.resolve(failure):navigate(toLocation,from)).catch(error=>isNavigationFailure(error)?isNavigationFailure(error,2)?error:markAsReady(error):triggerError(error,toLocation,from)).then(failure=>{if(failure){if(isNavigationFailure(failure,2))return pushWithRedirect(assign({replace},locationAsObject(failure.to),{state:typeof failure.to===`object`?assign({},data,failure.to.state):data,force}),redirectedFrom||toLocation)}else failure=finalizeNavigation(toLocation,from,true,replace,data);triggerAfterEach(toLocation,from,failure);return failure})}function checkCanceledNavigationAndReject(to,from){const error=checkCanceledNavigation(to,from);return error?Promise.reject(error):Promise.resolve()}function runWithContext(fn){const app=installedApps.values().next().value;return app&&typeof app.runWithContext===`function`?app.runWithContext(fn):fn()}function navigate(to,from){let guards;const[leavingRecords,updatingRecords,enteringRecords]=extractChangingRecords(to,from);guards=extractComponentsGuards(leavingRecords.reverse(),`beforeRouteLeave`,to,from);for(const record of leavingRecords)record.leaveGuards.forEach(guard=>{guards.push(guardToPromiseFn(guard,to,from))});const canceledNavigationCheck=checkCanceledNavigationAndReject.bind(null,to,from);guards.push(canceledNavigationCheck);return runGuardQueue(guards).then(()=>{guards=[];for(const guard of beforeGuards.list())guards.push(guardToPromiseFn(guard,to,from));guards.push(canceledNavigationCheck);return runGuardQueue(guards)}).then(()=>{guards=extractComponentsGuards(updatingRecords,`beforeRouteUpdate`,to,from);for(const record of updatingRecords)record.updateGuards.forEach(guard=>{guards.push(guardToPromiseFn(guard,to,from))});guards.push(canceledNavigationCheck);return runGuardQueue(guards)}).then(()=>{guards=[];for(const record of enteringRecords)if(record.beforeEnter){if(isArray(record.beforeEnter))for(const beforeEnter of record.beforeEnter)guards.push(guardToPromiseFn(beforeEnter,to,from));else guards.push(guardToPromiseFn(record.beforeEnter,to,from))}guards.push(canceledNavigationCheck);return runGuardQueue(guards)}).then(()=>{to.matched.forEach(record=>record.enterCallbacks={});guards=extractComponentsGuards(enteringRecords,`beforeRouteEnter`,to,from,runWithContext);guards.push(canceledNavigationCheck);return runGuardQueue(guards)}).then(()=>{guards=[];for(const guard of beforeResolveGuards.list())guards.push(guardToPromiseFn(guard,to,from));guards.push(canceledNavigationCheck);return runGuardQueue(guards)}).catch(err=>isNavigationFailure(err,8)?err:Promise.reject(err))}function triggerAfterEach(to,from,failure){afterGuards.list().forEach(guard=>runWithContext(()=>guard(to,from,failure)))}function finalizeNavigation(toLocation,from,isPush,replace,data){const error=checkCanceledNavigation(toLocation,from);if(error)return error;const isFirstNavigation=from===START_LOCATION_NORMALIZED;const state=!isBrowser?{}:history.state;if(isPush){if(replace||isFirstNavigation)routerHistory.replace(toLocation.fullPath,assign({scroll:isFirstNavigation&&state&&state.scroll},data));else routerHistory.push(toLocation.fullPath,data)}currentRoute.value=toLocation;handleScroll(toLocation,from,isPush,isFirstNavigation);markAsReady()}let removeHistoryListener;function setupListeners(){if(removeHistoryListener)return;removeHistoryListener=routerHistory.listen((to,_from,info)=>{if(!router.listening)return;const toLocation=resolve(to);const shouldRedirect=handleRedirectRecord(toLocation,router.currentRoute.value);if(shouldRedirect){pushWithRedirect(assign(shouldRedirect,{replace:true,force:true}),toLocation).catch(noop$2);return}pendingLocation=toLocation;const from=currentRoute.value;if(isBrowser&&info.delta)saveScrollPosition(getScrollKey(from.fullPath,info.delta));navigate(toLocation,from).catch(error=>{if(isNavigationFailure(error,12))return error;if(isNavigationFailure(error,2)){pushWithRedirect(assign(locationAsObject(error.to),{force:true}),toLocation).then(failure=>{if(isNavigationFailure(failure,20)&&!info.delta&&info.type===`pop`)routerHistory.go(-1,false)}).catch(noop$2);return Promise.reject()}if(info.delta)routerHistory.go(-info.delta,false);return triggerError(error,toLocation,from)}).then(failure=>{failure=failure||finalizeNavigation(toLocation,from,false);if(failure){if(info.delta&&!isNavigationFailure(failure,8))routerHistory.go(-info.delta,false);else if(info.type===`pop`&&isNavigationFailure(failure,20))routerHistory.go(-1,false)}triggerAfterEach(toLocation,from,failure)}).catch(noop$2)})}let readyHandlers=useCallbacks();let errorListeners=useCallbacks();let ready;function triggerError(error,to,from){markAsReady(error);const list=errorListeners.list();if(list.length)list.forEach(handler=>handler(error,to,from));else console.error(error);return Promise.reject(error)}function isReady(){if(ready&¤tRoute.value!==START_LOCATION_NORMALIZED)return Promise.resolve();return new Promise((resolve,reject)=>{readyHandlers.add([resolve,reject])})}function markAsReady(err){if(!ready){ready=!err;setupListeners();readyHandlers.list().forEach(([resolve,reject])=>err?reject(err):resolve());readyHandlers.reset()}return err}function handleScroll(to,from,isPush,isFirstNavigation){const{scrollBehavior}=options;if(!isBrowser||!scrollBehavior)return Promise.resolve();const scrollPosition=!isPush&&getSavedScrollPosition(getScrollKey(to.fullPath,0))||(isFirstNavigation||!isPush)&&history.state&&history.state.scroll||null;return nextTick$1().then(()=>scrollBehavior(to,from,scrollPosition)).then(position=>to===currentRoute.value&&position&&scrollToPosition(position)).catch(err=>to===currentRoute.value&&triggerError(err,to,from))}const go=delta=>routerHistory.go(delta);let started;const installedApps=new Set;const router={currentRoute,listening:true,addRoute,removeRoute,clearRoutes,hasRoute,getRoutes,resolve,options,push,replace,go,back:()=>go(-1),forward:()=>go(1),beforeEach:beforeGuards.add,beforeResolve:beforeResolveGuards.add,afterEach:afterGuards.add,onError:errorListeners.add,isReady,install(app){app.component(`RouterLink`,RouterLink);app.component(`RouterView`,RouterView);app.config.globalProperties.$router=router;Object.defineProperty(app.config.globalProperties,"$route",{enumerable:true,get:()=>unref(currentRoute)});if(isBrowser&&!started&¤tRoute.value===START_LOCATION_NORMALIZED){started=true;push(routerHistory.location).catch(err=>{})}const reactiveRoute={};for(const key in START_LOCATION_NORMALIZED)Object.defineProperty(reactiveRoute,key,{get:()=>currentRoute.value[key],enumerable:true});app.provide(routerKey,router);app.provide(routeLocationKey,shallowReactive(reactiveRoute));app.provide(routerViewLocationKey,currentRoute);const unmountApp=app.unmount;installedApps.add(app);app.unmount=function(){installedApps.delete(app);if(installedApps.size<1){pendingLocation=START_LOCATION_NORMALIZED;removeHistoryListener&&removeHistoryListener();removeHistoryListener=null;currentRoute.value=START_LOCATION_NORMALIZED;started=false;ready=false}unmountApp()}}};function runGuardQueue(guards){return guards.reduce((promise,guard)=>promise.then(()=>runWithContext(guard)),Promise.resolve())}return router}function queryStringToObject(queryString=``){const normalizedQueryString=String(queryString||``).trim().replace(/^\?+/,``);if(!normalizedQueryString)return;const params=new URLSearchParams(normalizedQueryString);const query={};for(const[key,value]of params.entries()){if(!Object.prototype.hasOwnProperty.call(query,key)){query[key]=value;continue}if(Array.isArray(query[key])){query[key].push(value);continue}query[key]=[query[key],value]}return query}function redirectToChild(childTarget=``){const normalizedChildTarget=String(childTarget||``).trim();return function redirectToChildRoute(to={}){const resolvedTarget=resolveLinkPath(String(to?.path||`/`),normalizedChildTarget);const{pathname,queryString,hash}=splitPathQueryAndHash(resolvedTarget);return{path:pathname||`/`,query:queryStringToObject(queryString)??to?.query,hash:hash||String(to?.hash||``)}}}var dashboard_vue_definePage_vue_lang_default={redirect:redirectToChild(`env`)};function _mergeRouteRecord(main,...routeRecords){return routeRecords.reduce((acc,routeRecord)=>{const meta=Object.assign({},acc.meta,routeRecord.meta);const alias=[].concat(acc.alias||[],routeRecord.alias||[]);Object.assign(acc,routeRecord);acc.meta=meta;acc.alias=alias;return acc},main)}var routes=[{path:`/`,name:`/`,component:()=>__vitePreload(()=>import(`./pages-DuMgH61T.js`),__vite__mapDeps([0,1,2,3])),meta:{"jskit":{"scope":`global`}}},{path:`/app`,children:[{path:``,name:`/app/`,component:()=>__vitePreload(()=>import(`./app-BNP_n_Tt.js`),__vite__mapDeps([4,1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,3,79])),meta:{"jskit":{"surface":`app`}}},{path:`learning`,name:`/app/learning`,component:()=>__vitePreload(()=>import(`./learning-Bdi3XRS7.js`),__vite__mapDeps([80,1,81,6,7,70,44,42,43,45,2,63,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,5,8,48,49,19,9,10,50,51,54,55,35,36,82,37,38,39,40,11,12,83,84,13,85,52,53,86,87,72,71,73,67,68,69,74,64,65,75,76,88,89,90,91,92,93,94,95,58,59,41,56,57,60,61,62,14,22,66,77,96,97,23,78,3,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120])),meta:{"jskit":{"surface":`app`}}},{path:`project`,children:[{path:`:slug`,name:`/app/project/[slug]`,component:()=>__vitePreload(()=>import(`./_slug_-BclonbST.js`).then(n=>n.n),__vite__mapDeps([81,6,1,7,70,44,42,43,45,2,63,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,5,8,48,49,19,9,10,50,51,54,55,35,36,82,37,38,39,40,11,12,83,84,13,85,52,53,86,87,72,71,73,67,68,69,74,64,65,75,76,88,89,90,91,92,93,94,95,58,59,41,56,57,60,61,62,14,22,66,77,96,97,23,78,3,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120])),children:[_mergeRouteRecord({path:`dashboard`,name:`/app/project/[slug]/dashboard`,component:()=>__vitePreload(()=>import(`./dashboard-CuutW8iv.js`),__vite__mapDeps([121,1,109,42,43,6,7,44,45,2,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,48,49,13,110,71,19,101,111,112])),children:[{path:`:sessionTool`,name:`/app/project/[slug]/dashboard/[sessionTool]`,component:()=>__vitePreload(()=>import(`./_sessionTool_-1V-z6Pbp.js`),__vite__mapDeps([122,1,2,13,111,45,19,123]))},{path:`access`,children:[{path:``,name:`/app/project/[slug]/dashboard/access/`,component:()=>__vitePreload(()=>import(`./access-WlhPvPgy.js`),__vite__mapDeps([124,1,42,43,6,7,44,45,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,9,10,13,69,70,49,71,72,2,73,74,90,98,48,106,19,11,12,107,114,125]))}]},{path:`changes`,children:[{path:``,name:`/app/project/[slug]/dashboard/changes/`,component:()=>__vitePreload(()=>import(`./changes-CHJjrZAc.js`),__vite__mapDeps([126,1,127,6,7,43,44,45,17,15,16,18,19,9,10,50,28,51,30,31,20,21,35,25,26,27,36,37,38,39,40,13,14,22,64,75,76,96,97,94,119,128,129,130]))}]},{path:`env`,children:[{path:``,name:`/app/project/[slug]/dashboard/env/`,component:()=>__vitePreload(()=>import(`./env-D3KQGvRe.js`),__vite__mapDeps([131,1,42,43,6,7,44,45,2,17,15,16,18,33,25,26,27,34,19,9,10,50,28,51,54,55,35,36,37,38,39,40,58,59,13,69,70,49,71,72,73,74,90,98,48,106,11,12,107,114,128,129,132]))}]},{path:`health`,children:[{path:``,name:`/app/project/[slug]/dashboard/health/`,component:()=>__vitePreload(()=>import(`./health-BhoO1d4h.js`),__vite__mapDeps([133,6,1,7,42,43,44,45,19,9,10,50,28,51,11,12,13,76,98,48,49,128,129,134]))}]},{path:`history`,children:[{path:``,name:`/app/project/[slug]/dashboard/history/`,component:()=>__vitePreload(()=>import(`./history-1_NU8azF.js`),__vite__mapDeps([135,6,1,7,17,15,16,18,19,9,10,50,28,51,20,21,37,38,11,12,13,117,58,26,59,74,70,44,42,43,45,65,90,2,118,128,129,136,72,49,71,73,92,75,93,115,67,116,137]))},{path:`:sessionId`,name:`/app/project/[slug]/dashboard/history/[sessionId]`,component:()=>__vitePreload(()=>import(`./_sessionId_-CKkGH3Rx.js`),__vite__mapDeps([138,6,1,7,19,9,10,50,28,51,20,21,82,42,43,44,45,15,16,24,25,26,27,29,30,31,32,17,18,33,34,48,49,35,36,37,38,39,40,11,12,83,84,13,85,46,47,52,53,86,87,72,2,71,73,67,68,69,70,74,64,65,75,76,88,89,90,91,92,93,94,95,136,115,116,139]))}]},{path:`incoming`,children:[{path:``,name:`/app/project/[slug]/dashboard/incoming/`,component:()=>__vitePreload(()=>import(`./incoming-DzADFGqp.js`),__vite__mapDeps([140,1,42,43,6,7,44,45,2,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,48,49,19,9,10,50,51,35,36,37,38,39,40,11,12,13,74,70,76,96,97,141]))}]},{path:`integrations`,children:[{path:``,name:`/app/project/[slug]/dashboard/integrations/`,component:()=>__vitePreload(()=>import(`./integrations-BMzWQQpa.js`),__vite__mapDeps([142,6,1,7,42,43,44,45,2,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,8,19,9,10,50,51,54,55,35,36,37,38,56,57,58,59,11,12,83,84,13,69,70,49,71,72,73,74,64,90,88,106,107,116,143]))}]},{path:`issues`,children:[{path:``,name:`/app/project/[slug]/dashboard/issues/`,component:()=>__vitePreload(()=>import(`./issues-Bywux4s7.js`),__vite__mapDeps([144,6,1,7,42,43,44,45,2,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,48,49,19,9,10,50,51,52,46,20,21,47,53,35,36,37,38,39,40,11,12,83,84,13,74,70,88,99,100,101,145,146]))}]},{path:`pull-requests`,children:[{path:``,name:`/app/project/[slug]/dashboard/pull-requests/`,component:()=>__vitePreload(()=>import(`./pull-requests-ncmKT3sS.js`),__vite__mapDeps([147,6,1,7,42,43,44,45,2,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,48,49,19,9,10,50,51,35,36,37,38,39,40,11,12,13,85,52,53,83,84,86,87,74,70,93,99,100,101,102,41,8,54,55,56,57,58,59,60,61,62,63,14,22,64,65,66,67,68,69,71,72,73,75,76,77,103,104,105,145,148]))}]},{path:`repository`,children:[{path:``,name:`/app/project/[slug]/dashboard/repository/`,component:()=>__vitePreload(()=>import(`./repository-BL_2bgzC.js`),__vite__mapDeps([149,1,127,6,7,43,44,45,17,15,16,18,19,9,10,50,28,51,30,31,20,21,35,25,26,27,36,37,38,39,40,13,14,22,64,75,76,96,97,94,119,128,129,130]))}]},{path:`session`,children:[{path:``,name:`/app/project/[slug]/dashboard/session/`,component:()=>__vitePreload(()=>import(`./session-BdhKrcX4.js`),__vite__mapDeps([150,6,1,7,17,15,16,18,19,9,10,20,21,13,108,93,128,129,151]))}]},{path:`settings`,children:[{path:``,name:`/app/project/[slug]/dashboard/settings/`,component:()=>__vitePreload(()=>import(`./settings-1rpuL7eR.js`),__vite__mapDeps([152,1,42,43,6,7,44,45,2,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,48,49,9,10,50,51,54,55,103,104,60,61,83,84,13,69,70,71,72,73,74,90,98,106,19,11,12,107,113,88,92,75,93,114,153]))}]}]},dashboard_vue_definePage_vue_lang_default)],meta:{"jskit":{"surface":`app`}}}]}]}];var aliases$1={collapse:`mdi-chevron-up`,complete:`mdi-check`,cancel:`mdi-close-circle`,close:`mdi-close`,delete:`mdi-close-circle`,clear:`mdi-close-circle`,success:`mdi-check-circle`,info:`mdi-information`,warning:`mdi-alert-circle`,error:`mdi-close-circle`,prev:`mdi-chevron-left`,next:`mdi-chevron-right`,checkboxOn:`mdi-checkbox-marked`,checkboxOff:`mdi-checkbox-blank-outline`,checkboxIndeterminate:`mdi-minus-box`,delimiter:`mdi-circle`,sortAsc:`mdi-arrow-up`,sortDesc:`mdi-arrow-down`,expand:`mdi-chevron-down`,menu:`mdi-menu`,subgroup:`mdi-menu-down`,dropdown:`mdi-menu-down`,radioOn:`mdi-radiobox-marked`,radioOff:`mdi-radiobox-blank`,edit:`mdi-pencil`,ratingEmpty:`mdi-star-outline`,ratingFull:`mdi-star`,ratingHalf:`mdi-star-half-full`,loading:`mdi-cached`,first:`mdi-page-first`,last:`mdi-page-last`,unfold:`mdi-unfold-more-horizontal`,file:`mdi-paperclip`,plus:`mdi-plus`,minus:`mdi-minus`,calendar:`mdi-calendar`,treeviewCollapse:`mdi-menu-down`,treeviewExpand:`mdi-menu-right`,tableGroupCollapse:`mdi-chevron-down`,tableGroupExpand:`mdi-chevron-right`,eyeDropper:`mdi-eyedropper`,upload:`mdi-cloud-upload`,color:`mdi-palette`,command:`mdi-apple-keyboard-command`,ctrl:`mdi-apple-keyboard-control`,space:`mdi-keyboard-space`,shift:`mdi-apple-keyboard-shift`,alt:`mdi-apple-keyboard-option`,enter:`mdi-keyboard-return`,arrowup:`mdi-arrow-up`,arrowdown:`mdi-arrow-down`,arrowleft:`mdi-arrow-left`,arrowright:`mdi-arrow-right`,backspace:`mdi-backspace`,play:`mdi-play`,pause:`mdi-pause`,fullscreen:`mdi-fullscreen`,fullscreenExit:`mdi-fullscreen-exit`,volumeHigh:`mdi-volume-high`,volumeMedium:`mdi-volume-medium`,volumeLow:`mdi-volume-low`,volumeOff:`mdi-volume-variant-off`,search:`mdi-magnify`};var mdi$1={component:props=>h$1(VClassIcon,{...props,class:`mdi`})};function genDefaults(){return{svg:{component:VSvgIcon},class:{component:VClassIcon}}}function createIcons(options){const sets=genDefaults();const defaultSet=options?.defaultSet??`mdi`;if(defaultSet===`mdi`&&!sets.mdi)sets.mdi=mdi$1;return mergeDeep({defaultSet,sets,aliases:{...aliases$1,vuetify:[`M8.2241 14.2009L12 21L22 3H14.4459L8.2241 14.2009Z`,[`M7.26303 12.4733L7.00113 12L2 3H12.5261C12.5261 3 12.5261 3 12.5261 3L7.26303 12.4733Z`,.6]],"vuetify-outline":`svg:M7.26 12.47 12.53 3H2L7.26 12.47ZM14.45 3 8.22 14.2 12 21 22 3H14.45ZM18.6 5 12 16.88 10.51 14.2 15.62 5ZM7.26 8.35 5.4 5H9.13L7.26 8.35Z`,"vuetify-play":[`m6.376 13.184-4.11-7.192C1.505 4.66 2.467 3 4.003 3h8.532l-.953 1.576-.006.01-.396.677c-.429.732-.214 1.507.194 2.015.404.503 1.092.878 1.869.806a3.72 3.72 0 0 1 1.005.022c.276.053.434.143.523.237.138.146.38.635-.25 2.09-.893 1.63-1.553 1.722-1.847 1.677-.213-.033-.468-.158-.756-.406a4.95 4.95 0 0 1-.8-.927c-.39-.564-1.04-.84-1.66-.846-.625-.006-1.316.27-1.693.921l-.478.826-.911 1.506Z`,[`M9.093 11.552c.046-.079.144-.15.32-.148a.53.53 0 0 1 .43.207c.285.414.636.847 1.046 1.2.405.35.914.662 1.516.754 1.334.205 2.502-.698 3.48-2.495l.014-.028.013-.03c.687-1.574.774-2.852-.005-3.675-.37-.391-.861-.586-1.333-.676a5.243 5.243 0 0 0-1.447-.044c-.173.016-.393-.073-.54-.257-.145-.18-.127-.316-.082-.392l.393-.672L14.287 3h5.71c1.536 0 2.499 1.659 1.737 2.992l-7.997 13.996c-.768 1.344-2.706 1.344-3.473 0l-3.037-5.314 1.377-2.278.004-.006.004-.007.481-.831Z`,.6]]}},options)}function weekInfo(locale){const code=locale.slice(-2).toUpperCase();switch(true){case locale===`GB-alt-variant`:return{firstDay:0,firstWeekSize:4};case locale===`001`:return{firstDay:1,firstWeekSize:1};case`AG AS BD BR BS BT BW BZ CA CO DM DO ET GT GU HK HN ID IL IN JM JP KE
|
|
3
3
|
KH KR LA MH MM MO MT MX MZ NI NP PA PE PH PK PR PY SA SG SV TH TT TW UM US
|
|
4
4
|
VE VI WS YE ZA ZW`.includes(code):return{firstDay:0,firstWeekSize:1};case`AI AL AM AR AU AZ BA BM BN BY CL CM CN CR CY EC GE HR KG KZ LB LK LV
|
|
5
5
|
MD ME MK MN MY NZ RO RS SI TJ TM TR UA UY UZ VN XK`.includes(code):return{firstDay:1,firstWeekSize:1};case`AD AN AT AX BE BG CH CZ DE DK EE ES FI FJ FO FR GB GF GP GR HU IE IS
|
|
6
|
-
IT LI LT LU MC MQ NL NO PL RE RU SE SK SM VA`.includes(code):return{firstDay:1,firstWeekSize:4};case`AE AF BH DJ DZ EG IQ IR JO KW LY OM QA SD SY`.includes(code):return{firstDay:6,firstWeekSize:1};case code===`MV`:return{firstDay:5,firstWeekSize:1};case code===`PT`:return{firstDay:0,firstWeekSize:4};default:return null}}function getWeekArray(date,locale,firstDayOfWeek){const weeks=[];let currentWeek=[];const firstDayOfMonth=startOfMonth(date);const lastDayOfMonth=endOfMonth(date);const first=firstDayOfWeek??weekInfo(locale)?.firstDay??0;const firstDayWeekIndex=(firstDayOfMonth.getDay()-first+7)%7;const lastDayWeekIndex=(lastDayOfMonth.getDay()-first+7)%7;for(let i=0;i<firstDayWeekIndex;i++){const adjacentDay=new Date(firstDayOfMonth);adjacentDay.setDate(adjacentDay.getDate()-(firstDayWeekIndex-i));currentWeek.push(adjacentDay)}for(let i=1;i<=lastDayOfMonth.getDate();i++){const day=new Date(date.getFullYear(),date.getMonth(),i);currentWeek.push(day);if(currentWeek.length===7){weeks.push(currentWeek);currentWeek=[]}}for(let i=1;i<7-lastDayWeekIndex;i++){const adjacentDay=new Date(lastDayOfMonth);adjacentDay.setDate(adjacentDay.getDate()+i);currentWeek.push(adjacentDay)}if(currentWeek.length>0)weeks.push(currentWeek);return weeks}function startOfWeek(date,locale,firstDayOfWeek){let day=(firstDayOfWeek??weekInfo(locale)?.firstDay??0)%7;if(![0,1,2,3,4,5,6].includes(day)){consoleWarn(`Invalid firstDayOfWeek, expected discrete number in range [0-6]`);day=0}const d=new Date(date);while(d.getDay()!==day)d.setDate(d.getDate()-1);return d}function endOfWeek(date,locale){const d=new Date(date);const lastDay=((weekInfo(locale)?.firstDay??0)+6)%7;while(d.getDay()!==lastDay)d.setDate(d.getDate()+1);return d}function startOfMonth(date){return new Date(date.getFullYear(),date.getMonth(),1)}function endOfMonth(date){return new Date(date.getFullYear(),date.getMonth()+1,0)}function parseLocalDate(value){const parts=value.split(`-`).map(Number);return new Date(parts[0],parts[1]-1,parts[2])}var _YYYMMDD=/^([12]\d{3}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12]\d|3[01]))$/;function date(value){if(value==null)return new Date;if(value instanceof Date)return value;if(typeof value===`string`){let parsed;if(_YYYMMDD.test(value))return parseLocalDate(value);else parsed=Date.parse(value);if(!isNaN(parsed))return new Date(parsed)}return null}var sundayJanuarySecond2000=new Date(2e3,0,2);function getWeekdays(locale,firstDayOfWeek,weekdayFormat){const daysFromSunday=firstDayOfWeek??weekInfo(locale)?.firstDay??0;return range(7).map(i=>{const weekday=new Date(sundayJanuarySecond2000);weekday.setDate(sundayJanuarySecond2000.getDate()+daysFromSunday+i);return new Intl.DateTimeFormat(locale,{weekday:weekdayFormat??`narrow`}).format(weekday)})}function format(value,formatString,locale,formats){const newDate=date(value)??new Date;const customFormat=formats?.[formatString];if(typeof customFormat===`function`)return customFormat(newDate,formatString,locale);let options={};switch(formatString){case`fullDate`:options={year:`numeric`,month:`short`,day:`numeric`};break;case`fullDateWithWeekday`:options={weekday:`long`,year:`numeric`,month:`long`,day:`numeric`};break;case`normalDate`:return`${newDate.getDate()} ${new Intl.DateTimeFormat(locale,{month:`long`}).format(newDate)}`;case`normalDateWithWeekday`:options={weekday:`short`,day:`numeric`,month:`short`};break;case`shortDate`:options={month:`short`,day:`numeric`};break;case`year`:options={year:`numeric`};break;case`month`:options={month:`long`};break;case`monthShort`:options={month:`short`};break;case`monthAndYear`:options={month:`long`,year:`numeric`};break;case`monthAndDate`:options={month:`long`,day:`numeric`};break;case`weekday`:options={weekday:`long`};break;case`weekdayShort`:options={weekday:`short`};break;case`dayOfMonth`:return new Intl.NumberFormat(locale).format(newDate.getDate());case`hours12h`:options={hour:`numeric`,hour12:true};break;case`hours24h`:options={hour:`numeric`,hour12:false};break;case`minutes`:options={minute:`numeric`};break;case`seconds`:options={second:`numeric`};break;case`fullTime`:options={hour:`numeric`,minute:`numeric`};break;case`fullTime12h`:options={hour:`numeric`,minute:`numeric`,hour12:true};break;case`fullTime24h`:options={hour:`numeric`,minute:`numeric`,hour12:false};break;case`fullDateTime`:options={year:`numeric`,month:`short`,day:`numeric`,hour:`numeric`,minute:`numeric`};break;case`fullDateTime12h`:options={year:`numeric`,month:`short`,day:`numeric`,hour:`numeric`,minute:`numeric`,hour12:true};break;case`fullDateTime24h`:options={year:`numeric`,month:`short`,day:`numeric`,hour:`numeric`,minute:`numeric`,hour12:false};break;case`keyboardDate`:options={year:`numeric`,month:`2-digit`,day:`2-digit`};break;case`keyboardDateTime`:options={year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`numeric`,minute:`numeric`};return new Intl.DateTimeFormat(locale,options).format(newDate).replace(/, /g,` `);case`keyboardDateTime12h`:options={year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`numeric`,minute:`numeric`,hour12:true};return new Intl.DateTimeFormat(locale,options).format(newDate).replace(/, /g,` `);case`keyboardDateTime24h`:options={year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`numeric`,minute:`numeric`,hour12:false};return new Intl.DateTimeFormat(locale,options).format(newDate).replace(/, /g,` `);default:options=customFormat??{timeZone:`UTC`,timeZoneName:`short`}}return new Intl.DateTimeFormat(locale,options).format(newDate)}function toISO(adapter,value){const date=adapter.toJsDate(value);return`${date.getFullYear()}-${padStart(String(date.getMonth()+1),2,`0`)}-${padStart(String(date.getDate()),2,`0`)}`}function parseISO(value){const[year,month,day]=value.split(`-`).map(Number);return new Date(year,month-1,day)}function addMinutes(date,amount){const d=new Date(date);d.setMinutes(d.getMinutes()+amount);return d}function addHours(date,amount){const d=new Date(date);d.setHours(d.getHours()+amount);return d}function addDays(date,amount){const d=new Date(date);d.setDate(d.getDate()+amount);return d}function addWeeks(date,amount){const d=new Date(date);d.setDate(d.getDate()+amount*7);return d}function addMonths(date,amount){const d=new Date(date);d.setDate(1);d.setMonth(d.getMonth()+amount);return d}function getYear(date){return date.getFullYear()}function getMonth(date){return date.getMonth()}function getWeek(date,locale,firstDayOfWeek,firstDayOfYear){const weekInfoFromLocale=weekInfo(locale);const weekStart=firstDayOfWeek??weekInfoFromLocale?.firstDay??0;const minWeekSize=weekInfoFromLocale?.firstWeekSize??1;return firstDayOfYear!==void 0?calculateWeekWithFirstDayOfYear(date,locale,weekStart,firstDayOfYear):calculateWeekWithMinWeekSize(date,locale,weekStart,minWeekSize)}function calculateWeekWithFirstDayOfYear(date,locale,weekStart,firstDayOfYear){const firstDayOfYearOffset=(7+firstDayOfYear-weekStart)%7;const currentWeekStart=startOfWeek(date,locale,weekStart);const currentWeekEnd=addDays(currentWeekStart,6);function yearStartWeekdayOffset(year){return(7+new Date(year,0,1).getDay()-weekStart)%7}let year=getYear(currentWeekStart);if(year<getYear(currentWeekEnd)&&yearStartWeekdayOffset(year+1)<=firstDayOfYearOffset)year++;const yearStart=new Date(year,0,1);const offset=yearStartWeekdayOffset(year);const d1w1=offset<=firstDayOfYearOffset?addDays(yearStart,-offset):addDays(yearStart,7-offset);return 1+getDiff(endOfDay(currentWeekStart),startOfDay(d1w1),`weeks`)}function calculateWeekWithMinWeekSize(date,locale,weekStart,minWeekSize){const currentWeekStart=startOfWeek(date,locale,weekStart);const currentWeekEnd=addDays(startOfWeek(date,locale,weekStart),6);function firstWeekSize(year){const yearStart=new Date(year,0,1);return 7-getDiff(yearStart,startOfWeek(yearStart,locale,weekStart),`days`)}let year=getYear(currentWeekStart);if(year<getYear(currentWeekEnd)&&firstWeekSize(year+1)>=minWeekSize)year++;const yearStart=new Date(year,0,1);const size=firstWeekSize(year);const d1w1=size>=minWeekSize?addDays(yearStart,size-7):addDays(yearStart,size);return 1+getDiff(endOfDay(currentWeekStart),startOfDay(d1w1),`weeks`)}function getDate(date){return date.getDate()}function getNextMonth(date){return new Date(date.getFullYear(),date.getMonth()+1,1)}function getPreviousMonth(date){return new Date(date.getFullYear(),date.getMonth()-1,1)}function getHours(date){return date.getHours()}function getMinutes(date){return date.getMinutes()}function startOfYear(date){return new Date(date.getFullYear(),0,1)}function endOfYear(date){return new Date(date.getFullYear(),11,31)}function isWithinRange(date,range){return isEqual(date,range[0])||isEqual(date,range[1])||isAfter(date,range[0])&&isBefore(date,range[1])}function isValid(date){const d=new Date(date);return d instanceof Date&&!isNaN(d.getTime())}function isAfter(date,comparing){return date.getTime()>comparing.getTime()}function isAfterDay(date,comparing){return isAfter(startOfDay(date),startOfDay(comparing))}function isBefore(date,comparing){return date.getTime()<comparing.getTime()}function isEqual(date,comparing){return date.getTime()===comparing.getTime()}function isSameDay(date,comparing){return date.getDate()===comparing.getDate()&&date.getMonth()===comparing.getMonth()&&date.getFullYear()===comparing.getFullYear()}function isSameMonth(date,comparing){return date.getMonth()===comparing.getMonth()&&date.getFullYear()===comparing.getFullYear()}function isSameYear(date,comparing){return date.getFullYear()===comparing.getFullYear()}function getDiff(date,comparing,unit){const d=new Date(date);const c=new Date(comparing);switch(unit){case`years`:return d.getFullYear()-c.getFullYear();case`quarters`:return Math.floor((d.getMonth()-c.getMonth()+(d.getFullYear()-c.getFullYear())*12)/4);case`months`:return d.getMonth()-c.getMonth()+(d.getFullYear()-c.getFullYear())*12;case`weeks`:return Math.floor((d.getTime()-c.getTime())/6048e5);case`days`:return Math.floor((d.getTime()-c.getTime())/864e5);case`hours`:return Math.floor((d.getTime()-c.getTime())/36e5);case`minutes`:return Math.floor((d.getTime()-c.getTime())/6e4);case`seconds`:return Math.floor((d.getTime()-c.getTime())/1e3);default:return d.getTime()-c.getTime()}}function setHours(date,count){const d=new Date(date);d.setHours(count);return d}function setMinutes(date,count){const d=new Date(date);d.setMinutes(count);return d}function setMonth(date,count){const d=new Date(date);d.setMonth(count);return d}function setDate(date,day){const d=new Date(date);d.setDate(day);return d}function setYear(date,year){const d=new Date(date);d.setFullYear(year);return d}function startOfDay(date){return new Date(date.getFullYear(),date.getMonth(),date.getDate(),0,0,0,0)}function endOfDay(date){return new Date(date.getFullYear(),date.getMonth(),date.getDate(),23,59,59,999)}var VuetifyDateAdapter=class{constructor(options){this.locale=options.locale;this.formats=options.formats}date(value){return date(value)}toJsDate(date){return date}toISO(date){return toISO(this,date)}parseISO(date){return parseISO(date)}addMinutes(date,amount){return addMinutes(date,amount)}addHours(date,amount){return addHours(date,amount)}addDays(date,amount){return addDays(date,amount)}addWeeks(date,amount){return addWeeks(date,amount)}addMonths(date,amount){return addMonths(date,amount)}getWeekArray(date,firstDayOfWeek){const firstDay=firstDayOfWeek!==void 0?Number(firstDayOfWeek):void 0;return getWeekArray(date,this.locale,firstDay)}startOfWeek(date,firstDayOfWeek){const firstDay=firstDayOfWeek!==void 0?Number(firstDayOfWeek):void 0;return startOfWeek(date,this.locale,firstDay)}endOfWeek(date){return endOfWeek(date,this.locale)}startOfMonth(date){return startOfMonth(date)}endOfMonth(date){return endOfMonth(date)}format(date,formatString){return format(date,formatString,this.locale,this.formats)}isEqual(date,comparing){return isEqual(date,comparing)}isValid(date){return isValid(date)}isWithinRange(date,range){return isWithinRange(date,range)}isAfter(date,comparing){return isAfter(date,comparing)}isAfterDay(date,comparing){return isAfterDay(date,comparing)}isBefore(date,comparing){return!isAfter(date,comparing)&&!isEqual(date,comparing)}isSameDay(date,comparing){return isSameDay(date,comparing)}isSameMonth(date,comparing){return isSameMonth(date,comparing)}isSameYear(date,comparing){return isSameYear(date,comparing)}setMinutes(date,count){return setMinutes(date,count)}setHours(date,count){return setHours(date,count)}setMonth(date,count){return setMonth(date,count)}setDate(date,day){return setDate(date,day)}setYear(date,year){return setYear(date,year)}getDiff(date,comparing,unit){return getDiff(date,comparing,unit)}getWeekdays(firstDayOfWeek,weekdayFormat){const firstDay=firstDayOfWeek!==void 0?Number(firstDayOfWeek):void 0;return getWeekdays(this.locale,firstDay,weekdayFormat)}getYear(date){return getYear(date)}getMonth(date){return getMonth(date)}getWeek(date,firstDayOfWeek,firstDayOfYear){const firstDay=firstDayOfWeek!==void 0?Number(firstDayOfWeek):void 0;const firstWeekStart=firstDayOfYear!==void 0?Number(firstDayOfYear):void 0;return getWeek(date,this.locale,firstDay,firstWeekStart)}getDate(date){return getDate(date)}getNextMonth(date){return getNextMonth(date)}getPreviousMonth(date){return getPreviousMonth(date)}getHours(date){return getHours(date)}getMinutes(date){return getMinutes(date)}startOfDay(date){return startOfDay(date)}endOfDay(date){return endOfDay(date)}startOfYear(date){return startOfYear(date)}endOfYear(date){return endOfYear(date)}};var DateOptionsSymbol=Symbol.for(`vuetify:date-options`);var DateAdapterSymbol=Symbol.for(`vuetify:date-adapter`);function createDate(options,locale){const _options=mergeDeep({adapter:VuetifyDateAdapter,locale:{af:`af-ZA`,bg:`bg-BG`,ca:`ca-ES`,ckb:``,cs:`cs-CZ`,de:`de-DE`,el:`el-GR`,en:`en-US`,et:`et-EE`,fa:`fa-IR`,fi:`fi-FI`,hr:`hr-HR`,hu:`hu-HU`,he:`he-IL`,id:`id-ID`,it:`it-IT`,ja:`ja-JP`,ko:`ko-KR`,lv:`lv-LV`,lt:`lt-LT`,nl:`nl-NL`,no:`no-NO`,pl:`pl-PL`,pt:`pt-PT`,ro:`ro-RO`,ru:`ru-RU`,sk:`sk-SK`,sl:`sl-SI`,srCyrl:`sr-SP`,srLatn:`sr-SP`,sv:`sv-SE`,th:`th-TH`,tr:`tr-TR`,az:`az-AZ`,uk:`uk-UA`,vi:`vi-VN`,zhHans:`zh-CN`,zhHant:`zh-TW`}},options);return{options:_options,instance:createInstance(_options,locale)}}function daysDiff(adapter,start,stop){const iso=[`${adapter.toISO(stop??start).split(`T`)[0]}T00:00:00Z`,`${adapter.toISO(start).split(`T`)[0]}T00:00:00Z`];return isString(adapter.date())?adapter.getDiff(iso[0],iso[1],`days`):adapter.getDiff(adapter.date(iso[0]),adapter.date(iso[1]),`days`)}function createInstance(options,locale){const instance=reactive(isFunction(options.adapter)?new options.adapter({locale:options.locale[locale.current.value]??locale.current.value,formats:options.formats}):options.adapter);watch(locale.current,value=>{instance.locale=options.locale[value]??value??instance.locale});return instance}function useDate(){const options=inject$1(DateOptionsSymbol);if(!options)throw new Error(`[Vuetify] Could not find injected date options`);return createInstance(options,useLocale())}function createVuetify(vuetify={}){const{blueprint,...rest}=vuetify;const options=mergeDeep(blueprint,rest);const{aliases={},components={},directives={}}=options;const scope=effectScope();return scope.run(()=>{const defaults=createDefaults(options.defaults);const display=createDisplay(options.display,options.ssr);const theme=createTheme(options.theme);const icons=createIcons(options.icons);const locale=createLocale(options.locale);const date=createDate(options.date,locale);const goTo=createGoTo(options.goTo,locale);function install(app){for(const key in directives)app.directive(key,directives[key]);for(const key in components)app.component(key,components[key]);for(const key in aliases)app.component(key,defineComponent({...aliases[key],name:key,aliasName:aliases[key].name}));const appScope=effectScope();appScope.run(()=>{theme.install(app)});app.onUnmount(()=>appScope.stop());app.provide(DefaultsSymbol,defaults);app.provide(RootDefaultsSymbol,defaults);app.provide(DisplaySymbol,display);app.provide(ThemeSymbol,theme);app.provide(IconSymbol,icons);app.provide(LocaleSymbol,locale);app.provide(DateOptionsSymbol,date.options);app.provide(DateAdapterSymbol,date.instance);app.provide(GoToSymbol,goTo);if(IN_BROWSER&&options.ssr){if(app.$nuxt)app.$nuxt.hook(`app:suspense:resolve`,()=>{display.update()});else{const{mount}=app;app.mount=(...args)=>{const vm=mount(...args);nextTick$1(()=>display.update());app.mount=mount;return vm}}}app.mixin({computed:{$vuetify(){return reactive({defaults:inject.call(this,DefaultsSymbol),display:inject.call(this,DisplaySymbol),theme:inject.call(this,ThemeSymbol),icons:inject.call(this,IconSymbol),locale:inject.call(this,LocaleSymbol),date:inject.call(this,DateAdapterSymbol)})}}})}function unmount(){scope.stop()}return{install,unmount,defaults,display,theme,icons,locale,date,goTo}})}var version=`4.2.1`;createVuetify.version=version;function inject(key){const vm=this.$;const provides=vm.parent?.provides??vm.vnode.appContext?.provides;if(provides&&key in provides)return provides[key]}var aliases={collapse:`svg:M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z`,complete:`svg:M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z`,cancel:`svg:M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z`,close:`svg:M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z`,delete:`svg:M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z`,clear:`svg:M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z`,success:`svg:M12,2C17.52,2 22,6.48 22,12C22,17.52 17.52,22 12,22C6.48,22 2,17.52 2,12C2,6.48 6.48,2 12,2M11,16.5L18,9.5L16.59,8.09L11,13.67L7.91,10.59L6.5,12L11,16.5Z`,info:`svg:M13,9H11V7H13M13,17H11V11H13M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z`,warning:`svg:M13,13H11V7H13M13,17H11V15H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z`,error:`svg:M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z`,prev:`svg:M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z`,next:`svg:M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z`,checkboxOn:`svg:M10,17L5,12L6.41,10.58L10,14.17L17.59,6.58L19,8M19,3H5C3.89,3 3,3.89 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.89 20.1,3 19,3Z`,checkboxOff:`svg:M19,3H5C3.89,3 3,3.89 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.89 20.1,3 19,3M19,5V19H5V5H19Z`,checkboxIndeterminate:`svg:M17,13H7V11H17M19,3H5C3.89,3 3,3.89 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.89 20.1,3 19,3Z`,delimiter:`svg:M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z`,sortAsc:`svg:M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z`,sortDesc:`svg:M11,4H13V16L18.5,10.5L19.92,11.92L12,19.84L4.08,11.92L5.5,10.5L11,16V4Z`,expand:`svg:M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z`,menu:`svg:M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z`,subgroup:`svg:M7,10L12,15L17,10H7Z`,dropdown:`svg:M7,10L12,15L17,10H7Z`,radioOn:`svg:M12,20C7.58,20 4,16.42 4,12C4,7.58 7.58,4 12,4C16.42,4 20,7.58 20,12C20,16.42 16.42,20 12,20M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2M12,7C9.24,7 7,9.24 7,12C7,14.76 9.24,17 12,17C14.76,17 17,14.76 17,12C17,9.24 14.76,7 12,7Z`,radioOff:`svg:M12,20C7.58,20 4,16.42 4,12C4,7.58 7.58,4 12,4C16.42,4 20,7.58 20,12C20,16.42 16.42,20 12,20M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z`,edit:`svg:M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z`,ratingEmpty:`svg:M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z`,ratingFull:`svg:M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z`,ratingHalf:`svg:M12,15.4V6.1L13.71,10.13L18.09,10.5L14.77,13.39L15.76,17.67M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z`,loading:`svg:M19,8L15,12H18C18,15.31 15.31,18 12,18C11,18 10.03,17.75 9.2,17.3L7.74,18.76C8.97,19.54 10.43,20 12,20C16.42,20 20,16.42 20,12H23M6,12C6,8.69 8.69,6 12,6C13,6 13.97,6.25 14.8,6.7L16.26,5.24C15.03,4.46 13.57,4 12,4C7.58,4 4,7.58 4,12H1L5,16L9,12`,first:`svg:M18.41,16.59L13.82,12L18.41,7.41L17,6L11,12L17,18L18.41,16.59M6,6H8V18H6V6Z`,last:`svg:M5.59,7.41L10.18,12L5.59,16.59L7,18L13,12L7,6L5.59,7.41M16,6H18V18H16V6Z`,unfold:`svg:M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z`,file:`svg:M16.5,6V17.5C16.5,19.71 14.71,21.5 12.5,21.5C10.29,21.5 8.5,19.71 8.5,17.5V5C8.5,3.62 9.62,2.5 11,2.5C12.38,2.5 13.5,3.62 13.5,5V15.5C13.5,16.05 13.05,16.5 12.5,16.5C11.95,16.5 11.5,16.05 11.5,15.5V6H10V15.5C10,16.88 11.12,18 12.5,18C13.88,18 15,16.88 15,15.5V5C15,2.79 13.21,1 11,1C8.79,1 7,2.79 7,5V17.5C7,20.54 9.46,23 12.5,23C15.54,23 18,20.54 18,17.5V6H16.5Z`,plus:`svg:M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z`,minus:`svg:M19,13H5V11H19V13Z`,calendar:`svg:M19,19H5V8H19M16,1V3H8V1H6V3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3H18V1M17,12H12V17H17V12Z`,treeviewCollapse:`svg:M7,10L12,15L17,10H7Z`,treeviewExpand:`svg:M10,17L15,12L10,7V17Z`,tableGroupExpand:`svg:M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z`,tableGroupCollapse:`svg:M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z`,eyeDropper:`svg:M19.35,11.72L17.22,13.85L15.81,12.43L8.1,20.14L3.5,22L2,20.5L3.86,15.9L11.57,8.19L10.15,6.78L12.28,4.65L19.35,11.72M16.76,3C17.93,1.83 19.83,1.83 21,3C22.17,4.17 22.17,6.07 21,7.24L19.08,9.16L14.84,4.92L16.76,3M5.56,17.03L4.5,19.5L6.97,18.44L14.4,11L13,9.6L5.56,17.03Z`,upload:`svg:M11 20H6.5q-2.28 0-3.89-1.57Q1 16.85 1 14.58q0-1.95 1.17-3.48q1.18-1.53 3.08-1.95q.63-2.3 2.5-3.72Q9.63 4 12 4q2.93 0 4.96 2.04Q19 8.07 19 11q1.73.2 2.86 1.5q1.14 1.28 1.14 3q0 1.88-1.31 3.19T18.5 20H13v-7.15l1.6 1.55L16 13l-4-4l-4 4l1.4 1.4l1.6-1.55Z`,color:`svg:M17.5 12a1.5 1.5 0 0 1-1.5-1.5A1.5 1.5 0 0 1 17.5 9a1.5 1.5 0 0 1 1.5 1.5a1.5 1.5 0 0 1-1.5 1.5m-3-4A1.5 1.5 0 0 1 13 6.5A1.5 1.5 0 0 1 14.5 5A1.5 1.5 0 0 1 16 6.5A1.5 1.5 0 0 1 14.5 8m-5 0A1.5 1.5 0 0 1 8 6.5A1.5 1.5 0 0 1 9.5 5A1.5 1.5 0 0 1 11 6.5A1.5 1.5 0 0 1 9.5 8m-3 4A1.5 1.5 0 0 1 5 10.5A1.5 1.5 0 0 1 6.5 9A1.5 1.5 0 0 1 8 10.5A1.5 1.5 0 0 1 6.5 12M12 3a9 9 0 0 0-9 9a9 9 0 0 0 9 9a1.5 1.5 0 0 0 1.5-1.5c0-.39-.15-.74-.39-1c-.23-.27-.38-.62-.38-1a1.5 1.5 0 0 1 1.5-1.5H16a5 5 0 0 0 5-5c0-4.42-4.03-8-9-8`,command:`svg:M6,2A4,4 0 0,1 10,6V8H14V6A4,4 0 0,1 18,2A4,4 0 0,1 22,6A4,4 0 0,1 18,10H16V14H18A4,4 0 0,1 22,18A4,4 0 0,1 18,22A4,4 0 0,1 14,18V16H10V18A4,4 0 0,1 6,22A4,4 0 0,1 2,18A4,4 0 0,1 6,14H8V10H6A4,4 0 0,1 2,6A4,4 0 0,1 6,2M16,18A2,2 0 0,0 18,20A2,2 0 0,0 20,18A2,2 0 0,0 18,16H16V18M14,10H10V14H14V10M6,16A2,2 0 0,0 4,18A2,2 0 0,0 6,20A2,2 0 0,0 8,18V16H6M8,6A2,2 0 0,0 6,4A2,2 0 0,0 4,6A2,2 0 0,0 6,8H8V6M18,8A2,2 0 0,0 20,6A2,2 0 0,0 18,4A2,2 0 0,0 16,6V8H18Z`,ctrl:`svg:M19.78,11.78L18.36,13.19L12,6.83L5.64,13.19L4.22,11.78L12,4L19.78,11.78Z`,space:`svg:M3 15H5V19H19V15H21V19C21 20.1 20.1 21 19 21H5C3.9 21 3 20.1 3 19V15Z`,shift:`svg:M15 18v-6h2.17L12 6.83L6.83 12H9v6zM12 4l10 10h-5v6H7v-6H2z`,alt:`svg:M3 4h6.11l7.04 14H21v2h-6.12L7.84 6H3zm11 0h7v2h-7z`,enter:`svg:M19 7v4H5.83l3.58-3.59L8 6l-6 6l6 6l1.41-1.42L5.83 13H21V7z`,arrowup:`svg:M13 20h-2V8l-5.5 5.5l-1.42-1.42L12 4.16l7.92 7.92l-1.42 1.42L13 8z`,arrowdown:`svg:M11 4h2v12l5.5-5.5l1.42 1.42L12 19.84l-7.92-7.92L5.5 10.5L11 16z`,arrowleft:`svg:M20 11v2H8l5.5 5.5l-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5L8 11z`,arrowright:`svg:M4 11v2h12l-5.5 5.5l1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5L16 11z`,backspace:`svg:M19 15.59L17.59 17L14 13.41L10.41 17L9 15.59L12.59 12L9 8.41L10.41 7L14 10.59L17.59 7L19 8.41L15.41 12zM22 3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H7c-.69 0-1.23-.36-1.59-.89L0 12l5.41-8.12C5.77 3.35 6.31 3 7 3zm0 2H7l-4.72 7L7 19h15z`,play:`svg:M8,5.14V19.14L19,12.14L8,5.14Z`,pause:`svg:M14,19H18V5H14M6,19H10V5H6V19Z`,fullscreen:`svg:M5,5H10V7H7V10H5V5M14,5H19V10H17V7H14V5M17,14H19V19H14V17H17V14M10,17V19H5V14H7V17H10Z`,fullscreenExit:`svg:M14,14H19V16H16V19H14V14M5,14H10V19H8V16H5V14M8,5H10V10H5V8H8V5M19,8V10H14V5H16V8H19Z`,volumeHigh:`svg:M14,3.23V5.29C16.89,6.15 19,8.83 19,12C19,15.17 16.89,17.84 14,18.7V20.77C18,19.86 21,16.28 21,12C21,7.72 18,4.14 14,3.23M16.5,12C16.5,10.23 15.5,8.71 14,7.97V16C15.5,15.29 16.5,13.76 16.5,12M3,9V15H7L12,20V4L7,9H3Z`,volumeMedium:`svg:M5,9V15H9L14,20V4L9,9M18.5,12C18.5,10.23 17.5,8.71 16,7.97V16C17.5,15.29 18.5,13.76 18.5,12Z`,volumeLow:`svg:M7,9V15H11L16,20V4L11,9H7Z`,volumeOff:`svg:M5.64,3.64L21.36,19.36L19.95,20.78L16,16.83V20L11,15H7V9H8.17L4.22,5.05L5.64,3.64M16,4V11.17L12.41,7.58L16,4Z`,search:`svg:M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z`};var mdi={component:VSvgIcon};var TRAINING_GUIDE_DURATION_MS=8e3;var trainingGuide=shallowRef(null);var overlays=0;var sequence=0;function registerTrainingGuideOverlay(){overlays+=1;let registered=true;return()=>{if(!registered)return;registered=false;overlays-=1;if(overlays===0)trainingGuide.value=null}}function cssString(value){return String(value).replace(/["\\]/gu,`\\$&`)}function stepSelectors(step){if(step.id===`file`)return[`[data-vibe64-guide-path="${cssString(step.path)}"]`];const id=cssString(step.id);return[`[data-vibe64-guide="${id}"]`,`[data-vibe64-guide-pane="${id}"]`]}function visibleStepElement(step,root){for(const selector of stepSelectors(step)){const element=[...root.querySelectorAll(selector)].find(guideElementVisible);if(element)return element}return null}function guideElementVisible(element){if(!element?.isConnected||element.closest(`[inert], [aria-hidden='true']`))return false;if(typeof element.checkVisibility===`function`&&!element.checkVisibility({visibilityProperty:true}))return false;const rect=element.getBoundingClientRect();return rect.width>0&&rect.height>0}function findTrainingGuideStep(steps=[],root=globalThis.document){if(!root)return null;for(let index=steps.length-1;index>=0;index-=1){const element=visibleStepElement(steps[index],root);if(element)return{step:steps[index],element,final:index===steps.length-1}}return null}var PANE_SWITCH=`pane-switch`;function findPaneSwitch(root=globalThis.document){if(!root)return null;return[...root.querySelectorAll(`[data-vibe64-guide="${PANE_SWITCH}"]`)].filter(guideElementVisible).at(-1)||null}function currentTrainingGuideElement(guide){const element=guide?.element;if(!element||guideElementVisible(element))return element||null;if(element.isConnected||!guide.target)return null;return guide.target.id===PANE_SWITCH?findPaneSwitch():visibleStepElement(guide.target,globalThis.document)}function clearTrainingGuide(id){if(!id||trainingGuide.value?.id===id)trainingGuide.value=null}async function showTrainingGuide(guide,{settleMs=0,durationMs=TRAINING_GUIDE_DURATION_MS}={}){if(!guide?.highlight)return{shown:false,reason:`highlight-off`};if(overlays===0)return{shown:false,reason:`overlay-unavailable`};const deadline=Date.now()+settleMs;let found=findTrainingGuideStep(guide.steps);while(!found?.final&&Date.now()<deadline){await new Promise(resolve=>setTimeout(resolve,50));found=findTrainingGuideStep(guide.steps)}if(!found){const element=findPaneSwitch();if(element)found={step:{id:PANE_SWITCH},element}}if(!found)return{shown:false,reason:`target-hidden`};if(overlays===0)return{shown:false,reason:`overlay-unavailable`};sequence+=1;trainingGuide.value=Object.freeze({id:`guide-${sequence}`,element:found.element,step:found.step.id,target:found.step,caption:String(guide.caption||``),expiresAt:Date.now()+durationMs});return{shown:true,step:found.step.id}}async function runTrainingGuideCommand(command,{navigateBrowser,view}={}){const{guide,...navigation}=command;let focus=null;if(guide.navigate){if(typeof navigateBrowser!==`function`)throw new Error(`Lesson workspace navigation is unavailable in this installation.`);focus=await navigateBrowser(navigation);if(guide.filePath&&(typeof view?.openFile!==`function`||view.openFile(guide.filePath)!==true))throw new Error(`This lesson's Files view could not open that practice project file.`)}const receipt=await showTrainingGuide(guide,{settleMs:guide.navigate?1500:0});return{...focus?{focus}:{},guide:receipt}}var PRACTICE_SLUG_PATTERN=/^training-[a-f0-9]{32}$/u;function isPracticeProjectSlug(slug=``){return PRACTICE_SLUG_PATTERN.test(String(slug||``))}function practiceProjectName({lessonTitle=``,lessonCode=``}={}){const lesson=String(lessonTitle||``).trim()||String(lessonCode||``).trim();return lesson?`Practice: ${lesson}`:`Practice project`}function projectDisplayName(project=null,{lessonTitle=``}={}){const slug=String(project?.slug||``);return isPracticeProjectSlug(slug)?practiceProjectName({lessonTitle}):slug}var step=(id,label)=>Object.freeze({id,label});var PREVIEW=step(`preview`,`Preview`);var DASHBOARD=step(`dashboard`,`Dashboard`);var DATABASE=step(`database`,`Database`);var TRAINING_GUIDE_PLACES=Object.freeze({preview:Object.freeze({pane:`preview`,steps:[PREVIEW]}),dashboard:Object.freeze({pointOnly:true,steps:[DASHBOARD]}),"database-erd":Object.freeze({pane:`database`,databaseView:`erd`,steps:[DASHBOARD,DATABASE,step(`database-erd`,`ERD`)]}),"database-data":Object.freeze({pane:`database`,databaseView:`data`,steps:[DASHBOARD,DATABASE,step(`database-data`,`Data`)]}),files:Object.freeze({pane:`files`,steps:[DASHBOARD,step(`files`,`Files`)]}),changes:Object.freeze({pane:`changes`,steps:[DASHBOARD,step(`changes`,`Current changes`)]}),"git-log":Object.freeze({pane:`repository`,steps:[DASHBOARD,step(`git-log`,`Git log`)]}),"session-info":Object.freeze({pane:`session`,steps:[DASHBOARD,step(`session-info`,`Session info`)]}),architecture:Object.freeze({pane:`system`,steps:[DASHBOARD,step(`architecture`,`Architecture`)]}),learning:Object.freeze({project:false,event:`learn-toggled`,steps:[step(`learning`,`Learning`)]}),lesson:Object.freeze({pane:`lesson`,pointOnly:true,project:false,steps:[step(`lesson`,`Lesson`)]}),chat:Object.freeze({pointOnly:true,steps:[step(`chat`,`Coding chat`)]}),colleague:Object.freeze({pointOnly:true,project:false,event:`colleague-opened`,steps:[step(`colleague`,`Colleague`)]}),courses:Object.freeze({pointOnly:true,project:false,steps:[step(`courses`,`Courses`)]}),"lesson-bar":Object.freeze({pointOnly:true,project:false,steps:[step(`lesson-bar`,`Lesson step bar`)]}),save:Object.freeze({pointOnly:true,event:`saved`,steps:[step(`save`,`Save`)]}),"reload-preview":Object.freeze({pointOnly:true,event:`preview-reloaded`,steps:[PREVIEW,step(`reload-preview`,`Reload preview`)]})});var TRAINING_GUIDE_ALIASES=Object.freeze({"workspace-preview":`preview`,"workspace-erd":`database-erd`});var TRAINING_GUIDE_TARGETS=Object.freeze([...Object.keys(TRAINING_GUIDE_PLACES),...Object.keys(TRAINING_GUIDE_ALIASES)]);var filePathExpression=/^(?!\/)(?!.*(?:^|\/)\.\.(?:\/|$))[^\u0000-\u001f\\]{1,512}$/u;var TRAINING_GUIDE_CAPTION_LIMIT=256;function guideFailure(message){return Object.assign(new Error(message),{code:`VIBE64_TRAINING_GUIDE_INVALID`,statusCode:422})}function trainingGuideRequest(input={}){const alias=TRAINING_GUIDE_ALIASES[input.target];const target=alias||input.target;const place=TRAINING_GUIDE_PLACES[target];if(!place)throw guideFailure(`Use one of the declared Vibe64 guide places.`);const navigate=input.navigate??Boolean(alias);const highlight=input.highlight??true;if(typeof navigate!==`boolean`||typeof highlight!==`boolean`)throw guideFailure(`navigate and highlight are booleans.`);if(!navigate&&!highlight)throw guideFailure(`Point at the place (highlight) or open it (navigate); this request does neither.`);if(navigate&&target===`dashboard`)throw guideFailure(`Dashboard has no single view to open. Point at it, or open one Dashboard section such as files or database-erd.`);if(navigate&&place.pointOnly)throw guideFailure(`${place.steps.at(-1).label} has no view to open; point at it instead.`);const request={target,navigate,highlight};if(input.filePath!==void 0){if(target!==`files`)throw guideFailure(`filePath is only for the files place.`);if(typeof input.filePath!==`string`||!filePathExpression.test(input.filePath))throw guideFailure(`Use a relative practice project file path without '..'.`);request.filePath=input.filePath}if(input.caption!==void 0){if(typeof input.caption!==`string`||!input.caption.trim()||input.caption.length>256)throw guideFailure(`Use a caption of 1 to ${256} characters.`);request.caption=input.caption.trim()}return request}function trainingGuideSteps(request){const steps=TRAINING_GUIDE_PLACES[request.target].steps.map(value=>({...value}));if(request.filePath)steps.push({id:`file`,path:request.filePath,label:request.filePath});return steps}var TRAINING_BEAT_EVENTS=Object.freeze([`app-pressed`,`message-sent`,`agent-finished`,`saved`,`preview-reloaded`,`file-opened`,`colleague-opened`,`colleague-minimised`,`learn-toggled`]);var TRAINING_BEAT_ACTIONS=Object.freeze({"send-message":Object.freeze({event:`message-sent`,place:`chat`}),"agent-finished":Object.freeze({event:`agent-finished`}),"file-opened":Object.freeze({event:`file-opened`,place:`files`}),"app-pressed":Object.freeze({event:`app-pressed`,place:`preview`}),"colleague-minimised":Object.freeze({event:`colleague-minimised`,place:`colleague`})});function trainingPlaceShown(target,focus={}){const place=TRAINING_GUIDE_PLACES[target];if(target===`chat`)return focus.pane===`chat`||focus.chatVisible===true;if(target===`courses`)return focus.learningOpen===true;if(!place?.pane)return null;return focus.pane===place.pane&&(!place.databaseView||focus.databaseView===place.databaseView)}var SHOW_MIN_MS=5e3;var SHOW_MAX_MS=12e3;var SHOW_PER_CHARACTER_MS=50;var TICK_MS=100;var DO_RING_MS=15e3;var POINT_SETTLE_MS=1500;var CONFIRM_MS=1500;var showDuration=text=>Math.min(SHOW_MAX_MS,Math.max(SHOW_MIN_MS,SHOW_MIN_MS+SHOW_PER_CHARACTER_MS*String(text||``).length));function reducedMotion(){try{return Boolean(globalThis.matchMedia?.(`(prefers-reduced-motion: reduce)`)?.matches)}catch{return false}}function documentHidden(){return globalThis.document?.visibilityState===`hidden`}function beatEvent(beat){return TRAINING_BEAT_ACTIONS[beat.target]?.event||TRAINING_GUIDE_PLACES[beat.target]?.event||``}function beatPlace(beat){if(!beat||beat.kind===`check`)return``;return TRAINING_BEAT_ACTIONS[beat.target]?TRAINING_BEAT_ACTIONS[beat.target].place||``:beat.target}function createLessonPlayer({state,steps,currentStep,active,selectStep,remember,focus=()=>null,activity=null,practiceSlug=()=>``,allDone=()=>{},showGuide=showTrainingGuide,clearGuide=clearTrainingGuide,shownGuide=()=>trainingGuide.value?.id||``,motionReduced=reducedMotion,hidden=documentHidden}={}){const local=reactive({remaining:0,duration:0,held:false,ring:``,confirmed:``});const detected=new Set;const beats=computed(()=>Array.isArray(currentStep.value?.beats)?currentStep.value.beats:[]);const end=computed(()=>beats.value.length?beats.value.length-(beats.value.at(-1).kind===`check`?1:0):0);const index=computed(()=>Math.max(0,Math.min(Number.isSafeInteger(state.beat)?state.beat:0,end.value)));const beat=computed(()=>beats.value[index.value]||null);const stepIndex=computed(()=>steps.value.findIndex(step=>step.id===currentStep.value?.id));const playing=computed(()=>Boolean(active()&&beat.value?.kind===`show`&&!state.beatPaused&&!local.held&&!state.open&&!state.stepBarCollapsed));function moveTo(value){local.confirmed=``;state.beat=value;remember()}function next(){if(index.value<end.value)return moveTo(index.value+1);const following=steps.value[stepIndex.value+1];if(following)selectStep(following.id,0)}function back(){if(index.value>0)return moveTo(index.value-1);const previous=steps.value[stepIndex.value-1];if(!previous)return;const previousBeats=Array.isArray(previous.beats)?previous.beats:[];selectStep(previous.id,previousBeats.length-(previousBeats.at(-1)?.kind===`check`?1:0))}function start(stepId=currentStep.value?.id){state.beatPaused=false;if(stepId===currentStep.value?.id)moveTo(0);else selectStep(stepId,0)}function togglePause(){state.beatPaused=!state.beatPaused;remember()}function hold(value){local.held=value===true}let timer=null;let confirmTimer=null;function stopTimer(){clearInterval(timer);timer=null}function tick(){if(!playing.value||hidden()||motionReduced())return;local.remaining=Math.max(0,local.remaining-TICK_MS);if(local.remaining>0)return;stopTimer();next()}watch(()=>[active(),currentStep.value?.id,index.value,beat.value],([shown,,,value])=>{stopTimer();clearTimeout(confirmTimer);local.confirmed=``;if(local.ring)clearGuide(local.ring);local.ring=``;local.duration=value?.kind===`show`?showDuration(value.text):0;local.remaining=local.duration;if(!shown||!value)return;if(value.kind===`show`)timer=setInterval(tick,TICK_MS);if(value.kind===`do`&&placeShown(value))return confirm(value,`✓ You're already here.`);point(value)},{immediate:true});function placeShown(value){const current=focus();return Boolean(current&&!TRAINING_BEAT_ACTIONS[value.target]&&trainingPlaceShown(value.target,{...current,learningOpen:state.open})===true)}function confirm(value,line=`✓ Done.`){const stepId=currentStep.value?.id;const at=index.value;detected.add(`${stepId}:${at}`);if(local.ring)clearGuide(local.ring);local.ring=``;local.confirmed=line;clearTimeout(confirmTimer);if(beats.value.map((item,position)=>[item,position]).filter(([item])=>item.kind===`do`).every(([,position])=>detected.has(`${stepId}:${position}`)))allDone(stepId);confirmTimer=setTimeout(()=>{local.confirmed=``;if(currentStep.value?.id===stepId&&index.value===at&&beat.value===value)next()},CONFIRM_MS)}watch(()=>beat.value?.kind===`do`&&active()&&!local.confirmed&&placeShown(beat.value),shown=>{if(shown)confirm(beat.value)});activity?.subscribe(event=>{const value=beat.value;if(value?.kind!==`do`||local.confirmed||!active()||beatEvent(value)!==event.name)return;if(practiceSlug()&&event.projectSlug&&event.projectSlug!==practiceSlug())return;if(value.path&&event.path!==value.path)return;confirm(value)});watch(()=>state.stepBarCollapsed||state.open,covered=>{if(covered&&local.ring)clearGuide(local.ring)});async function point(value){const place=beatPlace(value);if(!place||state.stepBarCollapsed||state.open)return null;const request={target:place,...value.path?{filePath:value.path}:{}};const guideSteps=trainingGuideSteps(request);const receipt=await showGuide({...request,highlight:true,navigate:false,steps:guideSteps,caption:guideSteps.map(item=>item.label).join(` → `)},{settleMs:POINT_SETTLE_MS,durationMs:value.kind===`show`?local.duration:DO_RING_MS});if(receipt?.shown){if(beat.value===value&&!state.open&&!state.stepBarCollapsed)local.ring=shownGuide();else clearGuide(shownGuide())}return receipt}return Object.freeze({beats,beat,index,end,get final(){return Boolean(beats.value.length)&&index.value===end.value},get paused(){return Boolean(state.beatPaused)},get playing(){return playing.value&&!motionReduced()},get progress(){return local.duration?1-local.remaining/local.duration:0},get atStart(){return index.value===0&&stepIndex.value<=0},get atEnd(){return index.value>=end.value&&stepIndex.value>=steps.value.length-1},get confirmed(){return local.confirmed},next,back,start,togglePause,hold,point:()=>beat.value&&point(beat.value)})}var TRAINING_PATH$1=`/api/vibe64/training`;var attemptPath=(attemptId,suffix=``)=>`${TRAINING_PATH$1}/attempts/${encodeURIComponent(attemptId)}${suffix}`;var VIBE64_LEARNING_ROUTES=Object.freeze({lessonRead:attemptId=>attemptPath(attemptId,`/lesson`),stepObserve:attemptId=>attemptPath(attemptId,`/steps/observe`),stepCheck:attemptId=>attemptPath(attemptId,`/steps/check`),stepAnswer:attemptId=>attemptPath(attemptId,`/steps/answer`),stepDone:attemptId=>attemptPath(attemptId,`/steps/done`),stepReview:attemptId=>attemptPath(attemptId,`/steps/review`),readerSave:attemptId=>attemptPath(attemptId,`/reader`),visual:(attemptId,visualId)=>attemptPath(attemptId,`/visuals/${encodeURIComponent(visualId)}`),lessonRestart:attemptId=>attemptPath(attemptId,`/restart`),lessonFinish:attemptId=>attemptPath(attemptId,`/finish`),lessonDelete:attemptId=>attemptPath(attemptId,`/delete`),learning:`${TRAINING_PATH$1}/learning`,notes:`${TRAINING_PATH$1}/teacher-notes`,notesClear:`${TRAINING_PATH$1}/teacher-notes/clear`,learningMode:`${TRAINING_PATH$1}/learning-mode`,practice:`${TRAINING_PATH$1}/practice`,archiveDelete:attemptId=>`${TRAINING_PATH$1}/archives/${encodeURIComponent(attemptId)}/delete`});var VIBE64_LEARNING_PAGE_PATH=`/app/learning`;var DEVELOP_HOME_PATH=`/app`;var VIBE64_LEARNING_MODE_NOTE=`You're in Learn mode. Press L to go back to your projects.`;var VIBE64_DEVELOP_MODE_NOTE=`This is a practice project. Press L to switch to Learn.`;var VIBE64_LEARNING_MODE_PROJECT_CODE=`vibe64_learning_mode_project`;var VIBE64_LESSON_IN_PROGRESS_CODE=`VIBE64_TRAINING_LESSON_IN_PROGRESS`;var VIBE64_LEARNING_AI_REQUIRED_CODE=`VIBE64_TRAINING_PRACTICE_AI_REQUIRED`;var VIBE64_LEARNING_NOTES_MAX=4e3;var SURFACES=Object.freeze([`courses`,`progress`,`archived`]);var STORAGE_PREFIX=`vibe64:learning-environment:v2:`;var MODE_PLACE_PREFIX=`vibe64:mode-place:v1:`;var READER_SAVE_DELAY_MS=800;var PROJECT_VIEW_WAIT_MS=5e3;var MAX_EXERCISE_OBSERVATIONS=8;var VIBE64_LEARNING_TEACH_MESSAGE=`Teach me this step.`;var VIBE64_LEARNING_STUCK_MESSAGE=`I'm stuck on this step.`;var EMPTY_PRACTICE=Object.freeze({current:null,archived:Object.freeze([]),loaded:false});var text$2=value=>typeof value===`string`&&value.length>0;function storage(kind){try{return globalThis.window?.[kind]||null}catch{return null}}function readJson(kind,key){try{const value=JSON.parse(storage(kind)?.getItem(key)||`null`);return value&&typeof value===`object`?value:null}catch{return null}}function writeJson(kind,key,value){try{storage(kind)?.setItem(key,JSON.stringify(value))}catch{}}function readPlace(actorKey){const value=readJson(`sessionStorage`,`${STORAGE_PREFIX}${actorKey}`);if(!value)return null;return{surface:SURFACES.includes(value.surface)?value.surface:`courses`,attemptId:text$2(value.attemptId)?value.attemptId:``,stepId:text$2(value.stepId)?value.stepId:``,trialAttemptId:text$2(value.trialAttemptId)&&value.trialAttemptId===value.attemptId?value.trialAttemptId:``,scroll:Number.isSafeInteger(value.scroll)&&value.scroll>=0?value.scroll:0,stepBarCollapsed:value.stepBarCollapsed===true,beat:Number.isSafeInteger(value.beat)&&value.beat>=0?value.beat:0,beatPaused:value.beatPaused===true,stepTextOpen:value.stepTextOpen===true}}var modePlaceKey=(actorKey,side)=>`${MODE_PLACE_PREFIX}${actorKey}:${side}`;var modeSide=on=>on?`learn`:`develop`;function normalizeLesson(result){if(!result||result.ok===false||result.available===false)return null;const lesson=result.lesson||{};const steps=Array.isArray(lesson.steps)?lesson.steps.filter(step=>text$2(step?.id)):[];const attempt=result.attempt||null;return Object.freeze({schemaVersion:lesson.schemaVersion??(steps.length?2:1),code:lesson.code||attempt?.pin?.lesson?.code||``,title:lesson.title||``,notesText:text$2(lesson.notesText)?lesson.notesText:``,visuals:Array.isArray(lesson.visuals)?lesson.visuals:[],steps,attempt,practiceProjectSlug:attempt?.practiceSlug||``,reader:result.reader&&text$2(result.reader.stepId)?result.reader:null,results:Array.isArray(result.results)?result.results:[],passedStepIds:Array.isArray(result.passedStepIds)?result.passedStepIds.filter(text$2):[]})}function normalizeLearningMode(result){const mode=result?.ok===true&&result.available!==false?result.learningMode:null;if(!mode||typeof mode!==`object`)return null;const value=key=>text$2(mode[key])?mode[key]:``;return Object.freeze({on:mode.on===true,currentAttemptId:value(`currentAttemptId`),lessonCode:value(`lessonCode`),lessonTitle:value(`lessonTitle`),practiceSlug:value(`practiceSlug`)})}function normalizePractice(result){if(result?.ok!==true)return EMPTY_PRACTICE;const lessonName=lesson=>String(lesson?.title||lesson?.code||``)||`Lesson`;const current=result.current&&text$2(result.current.attemptId)?Object.freeze({attemptId:result.current.attemptId,name:lessonName(result.current.lesson),projectName:text$2(result.current.slug)?practiceProjectName({lessonTitle:result.current.lesson?.title,lessonCode:result.current.lesson?.code}):``,slug:text$2(result.current.slug)?result.current.slug:``,status:result.current.status===`deleting`?`deleting`:`in-progress`}):null;const archived=(Array.isArray(result.archived)?result.archived:[]).filter(entry=>text$2(entry?.attemptId)).map(entry=>Object.freeze({attemptId:entry.attemptId,name:lessonName(entry.lesson),reason:entry.reason===`finished`?`finished`:`archived`,archivedAt:String(entry.archivedAt||``),hasProject:entry.hasProject===true}));return Object.freeze({current,archived:Object.freeze(archived),loaded:true})}function learnHomePath(mode){return mode?.practiceSlug?projectAppPath(mode.practiceSlug):VIBE64_LEARNING_PAGE_PATH}function modeRedirect({mode=null,slug=``,path=``}={}){if(!mode)return null;const projectSlug=String(slug||``).trim();const atLearnPage=String(path||``).replace(/\/+$/u,``)===VIBE64_LEARNING_PAGE_PATH;if(mode.on){if(projectSlug?projectSlug===mode.practiceSlug:!(atLearnPage&&mode.practiceSlug))return null;return Object.freeze({path:learnHomePath(mode),note:projectSlug?VIBE64_LEARNING_MODE_NOTE:``})}if(atLearnPage)return Object.freeze({path:DEVELOP_HOME_PATH,note:``});if(projectSlug&&projectSlug===mode.practiceSlug)return Object.freeze({path:DEVELOP_HOME_PATH,note:VIBE64_DEVELOP_MODE_NOTE});return null}function reviewNote(result){if(!result)return``;if(result.alreadyPassed)return`You already passed this step, so your work was not reviewed again. Your earlier pass counts.`;const comment=String(result.review?.comment||``).trim();const hint=String(result.review?.hint||``).trim();if(result.outcome===`passed`)return comment?`Passed ✓ ${comment}`:`Passed ✓`;if(!comment)return String(result.reason||``).trim();return`Not yet: ${comment}${hint?` Hint: ${hint}`:``}`}function stepStatus(results,stepId,passedStepIds=[]){const own=results.filter(result=>result?.stepId===stepId);if(passedStepIds.includes(stepId)||own.some(result=>result.outcome===`passed`))return`passed`;return own.length?own.at(-1).outcome||`not-yet-passed`:`not-started`}function showMeCommand(guide,{projectSlug=``,sessionId=``}={}){const request=trainingGuideRequest({target:guide?.target,...guide?.navigate!==void 0?{navigate:guide.navigate}:{},...guide?.filePath!==void 0?{filePath:guide.filePath}:{}});const steps=trainingGuideSteps(request);const caption=text$2(guide?.caption)?guide.caption.slice(0,256):steps.map(value=>value.label).join(` → `);const navigate=request.navigate&&request.target!==`learning`&&Boolean(projectSlug);const command={guide:{...request,navigate,highlight:true,steps,caption}};if(!navigate)return command;const place=TRAINING_GUIDE_PLACES[request.target];return{...command,projectSlug,...text$2(sessionId)?{sessionId}:{},...place.pane?{pane:place.pane}:{},...place.databaseView?{databaseView:place.databaseView}:{}}}function createVibe64Learning({request:requestOverride=null,browserNavigation=null,colleagueView=null,layout=null,pageFocus=null,pageActivity=null,router=null,runGuide=null,now=()=>Date.now()}={}){const state=reactive({open:false,minimised:false,surface:`courses`,attemptId:``,stepId:``,scroll:0,loading:false,error:``,actorKey:``,busy:``,hiddenBy:``,finished:false,notice:``,modeBusy:``,modeRead:false,stepBarCollapsed:false,trialAttemptId:``,beat:0,beatPaused:false,stepTextOpen:false});const lesson=shallowRef(null);const mode=shallowRef(null);const practice=shallowRef(EMPTY_PRACTICE);const confirmArchive=shallowRef(null);const colleagueRequest=shallowRef(null);const notes=shallowRef(null);const notesState=reactive({loading:false,saving:false,error:``});const pending=new Map;const exerciseObservations=new Set;let viewer=0;let reads=0;let modeReads=0;let modeLoad=null;let practiceReads=0;let saveTimer=null;let lastSaved=``;let finishRun=null;let lessonLoad=null;function pendingRequestId(key){const requestId=pending.get(key)||globalThis.crypto.randomUUID();pending.set(key,requestId);return requestId}async function request(url,options={}){if(requestOverride)return requestOverride(url,options);return getHttpWebClient().request(resolveStudioRequestUrl(url),options)}const learnMode=computed(()=>Boolean(state.actorKey&&mode.value?.on));const results=computed(()=>lesson.value?.results||[]);const steps=computed(()=>lesson.value?.steps||[]);const currentStep=computed(()=>steps.value.find(step=>step.id===state.stepId)||steps.value[0]||null);const focus=computed(()=>({learningOpen:state.open,learningSurface:state.surface,...state.attemptId?{learningAttemptId:state.attemptId}:{},...state.attemptId&¤tStep.value?{learningStepId:currentStep.value.id}:{}}));const complete=computed(()=>Boolean(lesson.value?.schemaVersion===2&&steps.value.length&&steps.value.filter(step=>step.required).every(step=>stepStatus(results.value,step.id,lesson.value.passedStepIds)===`passed`)));const lessonAttemptId=computed(()=>state.finished?state.attemptId:state.trialAttemptId||mode.value?.currentAttemptId||``);const stepBarVisible=computed(()=>Boolean(learnMode.value&&!state.finished&&lessonAttemptId.value&&state.attemptId===lessonAttemptId.value&¤tStep.value));const aiRequired=computed(()=>!lesson.value?.attempt?.ended&&lesson.value?.attempt?.preparation?.failure?.code===`VIBE64_TRAINING_PRACTICE_AI_REQUIRED`);const player=createLessonPlayer({state,steps,currentStep,selectStep:(...value)=>selectStep(...value),remember:()=>remember(),active:()=>stepBarVisible.value&&!lesson.value?.attempt?.ended&&!aiRequired.value,activity:pageActivity,focus:()=>pageFocus?.value?{...pageFocus.value,chatVisible:Boolean(layout?.value?.chatVisible)}:null,practiceSlug:()=>lesson.value?.practiceProjectSlug||``,allDone:stepId=>{if(steps.value.find(value=>value.id===stepId)?.check?.kind===`self`&&stepStatus(results.value,stepId,lesson.value?.passedStepIds)!==`passed`)done(stepId)}});function remember(){if(!state.actorKey)return;writeJson(`sessionStorage`,`${STORAGE_PREFIX}${state.actorKey}`,{surface:state.surface,attemptId:state.attemptId,stepId:state.stepId,scroll:state.scroll,stepBarCollapsed:state.stepBarCollapsed,trialAttemptId:state.trialAttemptId,beat:state.beat,beatPaused:state.beatPaused,stepTextOpen:state.stepTextOpen})}function setViewer(actorKey){const next=String(actorKey||``);if(next===state.actorKey)return;viewer+=1;reads+=1;modeReads+=1;practiceReads+=1;clearTimeout(saveTimer);pending.clear();exerciseObservations.clear();lesson.value=null;mode.value=null;practice.value=EMPTY_PRACTICE;confirmArchive.value=null;colleagueRequest.value=null;notes.value=null;Object.assign(notesState,{loading:false,saving:false,error:``});Object.assign(state,{open:false,minimised:false,surface:`courses`,attemptId:``,stepId:``,scroll:0,loading:false,error:``,busy:``,hiddenBy:``,finished:false,notice:``,modeBusy:``,modeRead:false,stepBarCollapsed:false,trialAttemptId:``,beat:0,beatPaused:false,stepTextOpen:false,actorKey:next});finishRun=null;const place=next?readPlace(next):null;if(place)Object.assign(state,place);if(state.attemptId)loadLesson();if(next)readLearningMode()}function acceptMode(value){mode.value=value;state.modeRead=true;const current=state.trialAttemptId||value?.currentAttemptId||``;if(!value||state.finished||current===state.attemptId)return;selectAttempt(current);remember();if(current)loadLesson()}async function readLearningMode(){if(!state.actorKey)return null;const expected=++modeReads;let value=null;const load=request(VIBE64_LEARNING_ROUTES.learningMode,{method:`GET`});modeLoad=load;try{value=normalizeLearningMode(await load)}catch{value=null}finally{if(modeLoad===load)modeLoad=null}if(expected!==modeReads)return mode.value;acceptMode(value);return value}async function modeWith(attemptId){if(modeLoad)await modeLoad.catch(()=>null);await Promise.resolve();return mode.value?.on&&mode.value.currentAttemptId===attemptId?mode.value:readLearningMode()}function currentPath(){return String(router?.currentRoute?.value?.fullPath||``)}function readModePlace(side){const path=readJson(`localStorage`,modePlaceKey(state.actorKey,side))?.path;return text$2(path)&&path.startsWith(`/app`)?path:``}function modePlace(value=mode.value){const saved=readModePlace(modeSide(value?.on));const pathname=saved.split(/[?#]/u)[0];if(saved&&!modeRedirect({mode:value,slug:projectSlugFromPathname(pathname),path:pathname}))return saved;return value?.on?learnHomePath(value):DEVELOP_HOME_PATH}async function setMode(on){if(!state.actorKey||state.modeBusy)return null;const expected=viewer;const path=currentPath();if(path.startsWith(`/app`))writeJson(`localStorage`,modePlaceKey(state.actorKey,modeSide(learnMode.value)),{path});state.modeBusy=`set`;state.error=``;try{const value=normalizeLearningMode(await request(VIBE64_LEARNING_ROUTES.learningMode,{method:`POST`,body:{on:on===true}}));if(!value)throw new Error(`The switch was not confirmed. Press L again.`);if(expected!==viewer)return null;modeReads+=1;acceptMode(value);if(!value.on)minimise();const target=modePlace(value);if(router&&target!==path)await router.push(target);if(value.on&&!value.currentAttemptId)openCourses(`courses`);pageActivity?.report(`learn-toggled`,{projectSlug:projectSlugFromPathname(currentPath())});return value}catch(cause){if(expected===viewer)state.error=String(cause?.message||`The switch was not confirmed. Press L again.`);return null}finally{if(state.modeBusy===`set`)state.modeBusy=``}}const toggleMode=()=>setMode(!learnMode.value);function selectAttempt(attemptId,stepId=``){lesson.value=null;state.attemptId=attemptId;state.stepId=text$2(stepId)?stepId:``;state.scroll=0;state.beat=0;lastSaved=``}function showNotice(value){state.notice=String(value||``)}function clearNotice(){state.notice=``}async function readAllPages(attemptId){const first=await request(VIBE64_LEARNING_ROUTES.lessonRead(attemptId),{method:`GET`});const count=Number.isSafeInteger(first?.page?.count)?Math.min(first.page.count,32):1;const steps=Array.isArray(first?.lesson?.steps)?first.lesson.steps:null;if(count<=1||!steps)return first;const bodies=new Map;for(let index=1;index<count;index++){const page=await request(`${VIBE64_LEARNING_ROUTES.lessonRead(attemptId)}?page=${index}`,{method:`GET`});for(const step of page?.lesson?.steps||[])if(typeof step?.bodyText===`string`)bodies.set(step.id,step.bodyText)}return{...first,lesson:{...first.lesson,steps:steps.map(step=>typeof step?.bodyText===`string`||!bodies.has(step?.id)?step:{...step,bodyText:bodies.get(step.id)})}}}function loadLesson(attemptId=state.attemptId){lessonLoad=readLesson(attemptId);return lessonLoad}async function readLesson(attemptId){if(!attemptId||!state.actorKey)return null;const expected=++reads;state.loading=true;state.error=``;try{const result=await readAllPages(attemptId);if(expected!==reads||attemptId!==state.attemptId)return null;const value=normalizeLesson(result);if(!value)throw new Error(result?.error||`This lesson could not be read. Refresh and try again.`);lesson.value=value;const known=id=>value.steps.some(step=>step.id===id);if(!known(state.stepId)){const saved=value.reader?.attemptId===void 0||value.reader?.attemptId===attemptId?value.reader:null;const passed=step=>stepStatus(value.results,step.id,value.passedStepIds)===`passed`;const unpassed=value.steps.some(passed)?value.steps.find(step=>step.required&&!passed(step)):null;state.stepId=saved&&known(saved.stepId)?saved.stepId:(unpassed||value.steps[0])?.id||``;state.scroll=saved&&known(saved.stepId)&&Number.isSafeInteger(saved.scroll)?saved.scroll:0;state.beat=0}remember();return value}catch(cause){if(expected===reads)state.error=String(cause?.message||`This lesson could not be read.`);return null}finally{if(expected===reads)state.loading=false}}async function show({surface,attemptId,stepId}={}){if(!state.actorKey)throw new Error(`Sign in before opening Courses.`);if(text$2(attemptId)||text$2(stepId))return openLesson({attemptId,stepId});state.open=true;state.minimised=false;state.hiddenBy=``;if(SURFACES.includes(surface))state.surface=surface;if(state.finished){state.finished=false;if(mode.value)acceptMode(mode.value)}remember();if(state.surface===`progress`||state.surface===`archived`)readPractice();return focus.value}const openCourses=surface=>show({surface});async function openLesson({attemptId,stepId}={}){if(!state.actorKey)throw new Error(`Sign in before opening a lesson.`);let value=state.modeRead?mode.value:await readLearningMode();if(!value?.on)value=await setMode(true);if(!value?.on)return null;minimise();const changed=text$2(attemptId)&&attemptId!==state.attemptId;if(text$2(attemptId)&&attemptId!==state.trialAttemptId)state.trialAttemptId=``;if(changed){state.finished=false;selectAttempt(attemptId,stepId)}else if(text$2(stepId)&&stepId!==state.stepId){if(steps.value.length)selectStep(stepId);else Object.assign(state,{stepId,beat:0})}remember();const target=`${learnHomePath(value)}?pane=lesson`;if(router&¤tPath()!==target)await router.push(target);await nextTick$1();layout?.value?.showProject?.();if(changed||!lesson.value&&!state.loading)await loadLesson();else if(!lesson.value)await lessonLoad;return focus.value}function minimise(by=``){if(!state.open)return;state.hiddenBy=by===`learner`?`learner`:``;state.open=false;state.minimised=true;flushReader()}const closeCourses=()=>minimise(`learner`);function toggleStepBar(){state.stepBarCollapsed=!state.stepBarCollapsed;remember()}function setStepText(open){state.stepTextOpen=open===true;remember()}async function showFinished(){if(!state.attemptId)return null;state.finished=Boolean(complete.value);return openLesson()}function finishedBy(before,attemptId){if(!before&&complete.value&&attemptId===state.attemptId)showFinished().catch(()=>{})}function selectStep(stepId,beat=0){if(!steps.value.some(step=>step.id===stepId)||stepId===state.stepId)return;state.stepId=stepId;state.scroll=0;state.beat=beat;remember();scheduleReaderSave()}function setScroll(scroll){const value=Math.max(0,Math.round(Number(scroll)||0));if(value===state.scroll)return;state.scroll=value;remember();scheduleReaderSave()}function scheduleReaderSave(){clearTimeout(saveTimer);saveTimer=setTimeout(flushReader,READER_SAVE_DELAY_MS)}function flushReader(){clearTimeout(saveTimer);saveTimer=null;if(!state.actorKey||!state.attemptId||!state.stepId||lesson.value?.attempt?.ended)return null;const body={stepId:state.stepId,scroll:state.scroll};const key=JSON.stringify([state.attemptId,body]);if(key===lastSaved)return null;lastSaved=key;return Promise.resolve(request(VIBE64_LEARNING_ROUTES.readerSave(state.attemptId),{method:`POST`,body})).catch(()=>{if(lastSaved===key)lastSaved=``})}async function stepAction(kind,route,stepId,extra={}){if(!state.attemptId||state.busy)return null;const attemptId=state.attemptId;const key=JSON.stringify([attemptId,kind,stepId,extra]);const requestId=pendingRequestId(key);const expected=viewer;const before=complete.value;state.busy=`${kind}:${stepId}`;state.error=``;try{const result=await request(route(attemptId),{method:`POST`,body:{stepId,...extra,requestId}});if(result?.ok===false)throw new Error(result.error||`The step result was not confirmed. Try again.`);pending.delete(key);if(expected===viewer&&attemptId===state.attemptId){await loadLesson(attemptId);finishedBy(before,attemptId)}return result}catch(cause){if(expected===viewer)state.error=String(cause?.message||`The step result was not confirmed. Try again.`);return null}finally{if(state.busy===`${kind}:${stepId}`)state.busy=``}}function exerciseStep(projectSlug){const value=lesson.value;const step=currentStep.value;const attempt=value?.attempt;if(!state.actorKey||!state.attemptId||state.open||!text$2(projectSlug)||value?.schemaVersion!==2||attempt?.attemptId!==state.attemptId||attempt.ended||attempt.preparation?.phase!==`ready`||value.practiceProjectSlug!==projectSlug||step?.check?.kind!==`auto`||step.check.files?.length)return null;return{attemptId:state.attemptId,stepId:step.id}}function beginExercise(projectSlug){const target=exerciseStep(projectSlug);if(!target||exerciseObservations.size>=MAX_EXERCISE_OBSERVATIONS)return null;return Object.freeze({...target,projectSlug,actorKey:state.actorKey,viewer})}function exerciseCurrent(ticket){const target=ticket&&ticket.viewer===viewer&&ticket.actorKey===state.actorKey?exerciseStep(ticket.projectSlug):null;return Boolean(target&&target.attemptId===ticket.attemptId&&target.stepId===ticket.stepId)}async function finishExercise(ticket,{sessionId,instanceId,interactionId,requestId}={}){if(!exerciseCurrent(ticket)||!text$2(sessionId)||exerciseObservations.has(requestId))return null;exerciseObservations.add(requestId);const expected=viewer;const before=complete.value;try{const result=await request(VIBE64_LEARNING_ROUTES.stepObserve(ticket.attemptId),{method:`POST`,body:{stepId:ticket.stepId,observation:{control:`exercise-response`,exercise:{instanceId,interactionId,requestId},workspace:{projectSlug:ticket.projectSlug,sessionId,projectVisible:true,pane:`preview`,ready:true}}}});if(result?.ok===false)throw new Error(result.error||`The App press was not recorded. Press the App's button again.`);if(expected===viewer&&ticket.attemptId===state.attemptId){await loadLesson(ticket.attemptId);finishedBy(before,ticket.attemptId)}return result}catch(cause){if(expected===viewer)state.error=String(cause?.message||`The App press was not recorded. Press the App's button again.`);return null}finally{exerciseObservations.delete(requestId)}}function prepareExercise(projectSlug){if(!text$2(projectSlug)||!state.actorKey||!state.attemptId||lesson.value||state.loading)return null;return loadLesson(state.attemptId)}const runCheck=stepId=>stepAction(`check`,VIBE64_LEARNING_ROUTES.stepCheck,stepId);const answer=(stepId,selected)=>stepAction(`answer`,VIBE64_LEARNING_ROUTES.stepAnswer,stepId,{selected:[...selected].map(Number).sort((left,right)=>left-right)});const done=stepId=>stepAction(`done`,VIBE64_LEARNING_ROUTES.stepDone,stepId);const review=stepId=>stepAction(`review`,VIBE64_LEARNING_ROUTES.stepReview,stepId);const savedReview=stepId=>results.value.filter(result=>result?.stepId===stepId&&result.review).at(-1)||null;async function showMe(stepId=currentStep.value?.id){const step=steps.value.find(value=>value.id===stepId);if(state.stepTextOpen)setStepText(false);if(step?.beats?.length){minimise();player.start(stepId);return{beats:true}}if(!step?.guide)throw new Error(`This step has nothing to show.`);minimise();return goTo(step.guide)}async function goTo(guide){let command=showMeCommand(guide,{projectSlug:lesson.value?.practiceProjectSlug||``});const navigator=browserNavigation?.value||null;if(navigator&&command.databaseView){if(!selectedSession(command.projectSlug)){await navigator({projectSlug:command.projectSlug});await waitForProjectView(command.projectSlug,selectedSession)}const sessionId=selectedSession(command.projectSlug);if(sessionId)command={...command,sessionId}}const navigateBrowser=navigator&&command.guide.filePath?async navigation=>{const focus=await navigator(navigation);await waitForProjectView(command.projectSlug);return focus}:navigator;return(runGuide||runTrainingGuideCommand)(command,{navigateBrowser,view:{openFile(path){const handle=projectView(command.projectSlug);return handle?handle.openFile(path)===true:false}}})}function projectView(projectSlug){const handle=colleagueView?.value;return projectSlug&&handle?.projectSlug===projectSlug&&handle.ready!==false&&typeof handle.openFile===`function`?handle:null}function selectedSession(projectSlug){const handle=colleagueView?.value;return projectSlug&&handle?.projectSlug===projectSlug&&text$2(handle.sessionId)?handle.sessionId:``}async function waitForProjectView(projectSlug,published=projectView){const deadline=now()+PROJECT_VIEW_WAIT_MS;while(!published(projectSlug)&&now()<deadline)await new Promise(resolve=>setTimeout(resolve,50))}function teachMe(stepId=currentStep.value?.id){if(!state.attemptId||!stepId)throw new Error(`Open a lesson step before asking Colleague to teach it.`);selectStep(stepId);colleagueRequest.value=Object.freeze({id:`teach-${now()}-${Math.random().toString(36).slice(2,8)}`,kind:`teach`,message:VIBE64_LEARNING_TEACH_MESSAGE,actorKey:state.actorKey,attemptId:state.attemptId,stepId});return colleagueRequest.value}function doItForMeKind(beat=player.beat.value){if(beat?.kind!==`do`)return``;if(beat.target===`send-message`)return`send`;if(beat.target===`file-opened`)return beat.path?`navigate`:``;if([`agent-finished`,`app-pressed`,`colleague-minimised`].includes(beat.target))return``;if(beat.target===`learning`)return`point`;if([`chat`,`courses`,`colleague`,`lesson`,`reload-preview`].includes(beat.target))return beat.target;const place=TRAINING_GUIDE_PLACES[beat.target];return place&&!place.pointOnly&&place.project!==false?`navigate`:`point`}async function doItForMe(){const beat=player.beat.value;const kind=doItForMeKind(beat);const projectSlug=lesson.value?.practiceProjectSlug||``;if(kind===`send`){const view=colleagueView?.value;if(!projectSlug||view?.projectSlug!==projectSlug||typeof view.sendLessonMessage!==`function`)return false;return await view.sendLessonMessage(beat.prompt)===true}if(kind===`navigate`)return goTo({target:beat.target===`file-opened`?`files`:beat.target,navigate:true,...beat.path?{filePath:beat.path}:{}});if(kind===`chat`){layout?.value?.showChat?.();await nextTick$1();globalThis.document?.querySelector?.(`[data-vibe64-guide="chat"] textarea`)?.focus();return true}if(kind===`courses`)return show();if(kind===`lesson`)return openLesson({stepId:currentStep.value?.id});if(kind===`colleague`){colleagueRequest.value=Object.freeze({id:`open-${now()}-${Math.random().toString(36).slice(2,8)}`,kind:`open`,actorKey:state.actorKey,attemptId:state.attemptId,stepId:currentStep.value?.id||``});return true}if(kind===`reload-preview`){await goTo({target:`preview`,navigate:true});await nextTick$1();const reload=globalThis.document?.querySelector?.(`[data-vibe64-guide="reload-preview"]`);if(!reload)return false;reload.click();return true}if(kind===`point`)return player.point();return false}function stuck(stepId=currentStep.value?.id){if(!state.attemptId||!stepId)throw new Error(`Open a lesson step before asking Colleague for help.`);colleagueRequest.value=Object.freeze({id:`stuck-${now()}-${Math.random().toString(36).slice(2,8)}`,kind:`stuck`,message:VIBE64_LEARNING_STUCK_MESSAGE,actorKey:state.actorKey,attemptId:state.attemptId,stepId});return colleagueRequest.value}function consumeColleagueRequest(id){if(colleagueRequest.value?.id!==id)return null;const value=colleagueRequest.value;colleagueRequest.value=null;return value}const openCurrent=()=>openLesson();async function opened(outcome){if(!outcome?.attemptId||outcome.current===false)return outcome;const value=await modeWith(outcome.attemptId);state.trialAttemptId=value&&value.currentAttemptId!==outcome.attemptId?outcome.attemptId:``;await openLesson({attemptId:outcome.attemptId});readPractice();return outcome}function admitted(attemptId){minimise();(async()=>{if(modeLoad)await modeLoad.catch(()=>null);await Promise.resolve();if(mode.value?.on&&mode.value.currentAttemptId===attemptId)await openLesson({attemptId})})().catch(()=>{})}async function startLesson(selection,start){confirmArchive.value=null;try{return await opened(await start(selection,{onAdmitted:admitted}))}catch(cause){if(cause?.code!==`VIBE64_TRAINING_LESSON_IN_PROGRESS`)throw cause;confirmArchive.value=Object.freeze({next:selection,start,current:Object.freeze({attemptId:String(cause.details?.attemptId||mode.value?.currentAttemptId||``),lessonTitle:String(cause.details?.lessonTitle||mode.value?.lessonTitle||mode.value?.lessonCode||``)})});return null}}async function confirmArchiveAndStart(){const value=confirmArchive.value;if(!value)return null;confirmArchive.value=null;return opened(await value.start({...value.next,archiveCurrent:true},{onAdmitted:admitted}))}function cancelArchive(){confirmArchive.value=null}async function readRevision(){const result=await request(VIBE64_LEARNING_ROUTES.learning,{method:`GET`});if(result?.ok!==true||!Number.isSafeInteger(result.revision))throw new Error(result?.error||`Your saved lessons could not be read. Try again.`);return result.revision}async function attemptAction(kind,url,body=()=>({}),fallback=`The change was not confirmed. Try again.`){if(!state.actorKey||state.busy)return null;const expected=viewer;state.busy=kind;state.error=``;try{const result=await request(url,{method:`POST`,body:await body()});if(result?.ok!==true)throw new Error(result?.error||fallback);if(expected===viewer)await Promise.all([readLearningMode(),readPractice()]);return result}catch(cause){if(expected===viewer)state.error=String(cause?.message||fallback);return null}finally{if(state.busy===kind)state.busy=``}}const currentAttemptId=()=>mode.value?.currentAttemptId||``;function finish(){const attemptId=state.attemptId;if(!attemptId)return Promise.resolve(null);if(finishRun?.attemptId===attemptId)return finishRun.promise;const run={attemptId,promise:attemptAction(`finish`,VIBE64_LEARNING_ROUTES.lessonFinish(attemptId),async()=>({expectedRevision:await readRevision()}),`Finishing the lesson was not confirmed. Try again.`).then(result=>{if(finishRun===run&&!result)finishRun=null;if(result&&state.trialAttemptId===attemptId)state.trialAttemptId=``;return result})};finishRun=run;return run.promise}async function restart(){const attemptId=currentAttemptId();if(!attemptId)return null;const key=JSON.stringify([attemptId,`restart`]);const result=await attemptAction(`restart`,VIBE64_LEARNING_ROUTES.lessonRestart(attemptId),async()=>({requestId:pendingRequestId(key),expectedRevision:await readRevision()}),`Restarting the lesson was not confirmed. Try again.`);if(!result)return null;pending.delete(key);await opened({attemptId:mode.value?.currentAttemptId||result.active?.attemptId||``});return result}async function deleteAttempt(){const attemptId=currentAttemptId();if(!attemptId)return null;return attemptAction(`delete`,VIBE64_LEARNING_ROUTES.lessonDelete(attemptId),()=>({confirmed:true}),`Deleting the lesson was not confirmed. Try again.`)}const deleteArchived=attemptId=>attemptAction(`archive-delete:${attemptId}`,VIBE64_LEARNING_ROUTES.archiveDelete(attemptId),()=>({confirmed:true}),`Deleting the archived lesson was not confirmed. Try again.`);async function readPractice(){if(!state.actorKey)return null;const expected=++practiceReads;try{const value=normalizePractice(await request(VIBE64_LEARNING_ROUTES.practice,{method:`GET`}));if(expected===practiceReads)practice.value=value}catch(cause){if(expected===practiceReads)state.error=String(cause?.message||`Your lessons could not be read. Try again.`)}return practice.value}async function readNotes(){if(!state.actorKey)return null;const expected=viewer;notesState.loading=true;notesState.error=``;try{const result=await request(VIBE64_LEARNING_ROUTES.notes,{method:`GET`});if(result?.ok!==true||!result.notes)throw new Error(result?.error||`The notes could not be read.`);if(expected===viewer&&!(result.notes.revision<(notes.value?.revision??0)))notes.value=Object.freeze({...result.notes});return expected===viewer?notes.value:null}catch(cause){if(expected===viewer)notesState.error=String(cause?.message||`The notes could not be read.`);return null}finally{if(expected===viewer)notesState.loading=false}}async function writeNotes(kind,route,body){if(!state.actorKey||notesState.saving)return null;const expected=viewer;const expectedRevision=notes.value?.revision??0;const key=JSON.stringify([`notes`,kind,body.text??``,expectedRevision]);const requestId=pendingRequestId(key);notesState.saving=true;notesState.error=``;try{const result=await request(route,{method:`POST`,body:{...body,requestId,expectedRevision}});if(result?.ok!==true||!result.notes)throw new Error(result?.error||`The notes save was not confirmed. Try again.`);pending.delete(key);if(expected===viewer)notes.value=Object.freeze({...result.notes});return result}catch(cause){if(expected===viewer){notesState.error=String(cause?.message||`The notes save was not confirmed. Try again.`);if(cause?.code===`VIBE64_TRAINING_NOTES_CHANGED`){pending.delete(key);const message=notesState.error;await readNotes();notesState.error=message}}return null}finally{if(expected===viewer)notesState.saving=false}}function saveNotes(text){const value=String(text??``);if(!value||value.length>4e3){notesState.error=`Write between 1 and ${VIBE64_LEARNING_NOTES_MAX} characters, or clear the notes.`;return Promise.resolve(null)}return writeNotes(`update`,VIBE64_LEARNING_ROUTES.notes,{text:value})}const clearNotes=()=>writeNotes(`clear`,VIBE64_LEARNING_ROUTES.notesClear,{});function learnerChanged(payload={}){if(payload.reason===`notes`)return notes.value?readNotes():null;if(!state.actorKey)return null;if(payload.reason!==`steps`){readLearningMode();if(practice.value.loaded)readPractice()}if(state.attemptId&&(!payload.attemptId||payload.attemptId===state.attemptId)&&lesson.value)return loadLesson(state.attemptId);return null}return Object.freeze({state:readonly(state),get open(){return state.open},get coursesOpen(){return state.open},get minimised(){return state.minimised},get hiddenBy(){return state.hiddenBy},get surface(){return state.surface},get attemptId(){return state.attemptId},get stepId(){return currentStep.value?.id||``},get scroll(){return state.scroll},get complete(){return complete.value},get finished(){return state.finished},get mode(){return mode.value},get learnMode(){return learnMode.value},get lessonAttemptId(){return lessonAttemptId.value},get stepBarVisible(){return stepBarVisible.value},get aiRequired(){return aiRequired.value},get lessonTitle(){return mode.value?.currentAttemptId?mode.value.lessonTitle||mode.value.lessonCode||``:``},get practice(){return practice.value},get confirmArchive(){return confirmArchive.value},get stepBarCollapsed(){return state.stepBarCollapsed},get stepTextOpen(){return state.stepTextOpen},get notice(){return state.notice},lesson,results,steps,currentStep,focus,colleagueRequest,notes,notesState:readonly(notesState),player,stepStatus:stepId=>stepStatus(results.value,stepId,lesson.value?.passedStepIds||[]),setViewer,show,openCourses,openLesson,closeCourses,showFinished,minimise,selectStep,setScroll,flushReader,loadLesson,runCheck,answer,done,review,savedReview,reviewNote,showMe,teachMe,stuck,doItForMe,doItForMeKind,consumeColleagueRequest,learnerChanged,exerciseStep,beginExercise,exerciseCurrent,finishExercise,prepareExercise,readNotes,saveNotes,clearNotes,readLearningMode,setMode,toggleMode,modePlace,openCurrent,toggleStepBar,setStepText,showNotice,clearNotice,startLesson,admitted,opened,confirmArchiveAndStart,cancelArchive,restart,finish,deleteAttempt,readPractice,deleteArchived})}function openLessonLink(event,browser=globalThis){const link=event?.target?.closest?.(`a[href]`);if(!link||event.defaultPrevented||event.button>0||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey)return false;let url;try{url=new URL(link.getAttribute(`href`),browser.location?.href)}catch{return false}if(!/^https?:$/u.test(url.protocol)||url.origin===browser.location?.origin)return false;event.preventDefault();browser.open?.(url.href,`_blank`,`noopener,noreferrer`);return true}function revealCurrentStep(list){const current=list?.querySelector?.(`[aria-current="step"]`);if(!current||!(list.scrollWidth>list.clientWidth))return false;const row=list.getBoundingClientRect();const item=current.getBoundingClientRect();if(item.left<row.left)list.scrollLeft-=row.left-item.left;else if(item.right>row.right)list.scrollLeft+=item.right-row.right;else return false;return true}function createPageActivity(){const listeners=new Set;return Object.freeze({report(name,detail={}){if(!TRAINING_BEAT_EVENTS.includes(name))throw new TypeError(`Unknown page activity: ${name}`);const event=Object.freeze({name,projectSlug:String(detail.projectSlug||``),sessionId:String(detail.sessionId||``),path:String(detail.path||``)});for(const listener of[...listeners])listener(event)},subscribe(listener){listeners.add(listener);return()=>listeners.delete(listener)}})}function usePageActivity(){const activity=inject$1(VIBE64_PAGE_ACTIVITY_KEY,null);return(name,detail)=>activity?.report(name,detail)}var _sfc_main$62={__name:`Vibe64AssistantShellContext`,props:{local:Boolean},setup(__props){if(__props.local)provide(VIBE64_ASSISTANT_VIEWER_KEY,Object.freeze({actorKey:`local`}));provide(VIBE64_ASSISTANT_HOST_KEY,shallowRef(null));const colleagueView=shallowRef(null);provide(VIBE64_COLLEAGUE_VIEW_KEY,colleagueView);provide(VIBE64_COLLEAGUE_PREVIEW_KEY,shallowRef(null));provide(VIBE64_COLLEAGUE_INTEGRATIONS_KEY,shallowRef(null));provide(VIBE64_COLLEAGUE_DATABASE_KEY,shallowRef(null));provide(VIBE64_COLLEAGUE_PLAN_KEY,shallowRef(null));const layout=shallowRef(null);provide(VIBE64_COLLEAGUE_LAYOUT_KEY,layout);const browserNavigation=shallowRef(null);provide(VIBE64_BROWSER_NAVIGATION_KEY,browserNavigation);const pageFocus=shallowRef(null);provide(VIBE64_PAGE_FOCUS_KEY,pageFocus);const pageActivity=createPageActivity();provide(VIBE64_PAGE_ACTIVITY_KEY,pageActivity);provide(VIBE64_LEARNING_KEY,createVibe64Learning({browserNavigation,colleagueView,layout,pageFocus,pageActivity,router:useRouter$1()}));provide(VIBE64_COLLEAGUE_LAUNCHER_KEY,shallowRef(null));return(_ctx,_cache)=>{return renderSlot(_ctx.$slots,`default`)}}};function projectConversationVoiceState({turns=[],status=`ready`,interimReply=null}={}){const messages=[];let streamingReply=null;for(const turn of turns){if(turn.user)messages.push({...turn.user,role:`user`,id:turn.user.messageId||`${turn.turnId}:user`});if(turn.assistant?.text){const reply={...turn.assistant,role:`assistant`,id:turn.assistant.outputId||`${turn.turnId}:assistant`};if(turn.pending||[`starting`,`inProgress`].includes(reply.status)){if(reply.origin===`application`)Object.assign(reply,{id:`${reply.id}:stream`,autonomous:true});streamingReply=reply}else messages.push(reply)}}return{messages,streamingReply:interimReply?{...interimReply,id:interimReply.outputId||interimReply.id}:streamingReply,status}}var VOICE_MAX_SYNTHESIS_TIMEOUT_MS=12e4;var VOICE_MAX_SPEECH_TEXT_CHARACTERS=4e3;var VOICE_MAX_SPEECH_CHUNK_CHARACTERS=280;var VOICE_SPEECH_EM_DASH_PAUSE_MS=140;var VOICE_SPEECH_SENTENCE_PAUSE_MS=220;var VOICE_SPEECH_LINE_PAUSE_MS=350;var VOICE_SPEECH_PARAGRAPH_PAUSE_MS=650;function speechTextFromAssistant(value=``,maximumCharacters=VOICE_MAX_SPEECH_TEXT_CHARACTERS){let omittedCode=false;let omittedTable=false;let text=String(value||``).slice(0,maximumCharacters*2);text=text.replace(/```([a-z0-9_-]*)[^\n]*\n[\s\S]*?```/giu,(_match,language)=>{omittedCode=true;return String(language||``).toLowerCase()===`sql`?` I put the SQL on screen. `:` I put the code on screen. `});text=text.replace(/(?:^|\n)\s*\|[^\n]+\|\s*(?=\n|$)/gu,()=>{omittedTable=true;return`
|
|
6
|
+
IT LI LT LU MC MQ NL NO PL RE RU SE SK SM VA`.includes(code):return{firstDay:1,firstWeekSize:4};case`AE AF BH DJ DZ EG IQ IR JO KW LY OM QA SD SY`.includes(code):return{firstDay:6,firstWeekSize:1};case code===`MV`:return{firstDay:5,firstWeekSize:1};case code===`PT`:return{firstDay:0,firstWeekSize:4};default:return null}}function getWeekArray(date,locale,firstDayOfWeek){const weeks=[];let currentWeek=[];const firstDayOfMonth=startOfMonth(date);const lastDayOfMonth=endOfMonth(date);const first=firstDayOfWeek??weekInfo(locale)?.firstDay??0;const firstDayWeekIndex=(firstDayOfMonth.getDay()-first+7)%7;const lastDayWeekIndex=(lastDayOfMonth.getDay()-first+7)%7;for(let i=0;i<firstDayWeekIndex;i++){const adjacentDay=new Date(firstDayOfMonth);adjacentDay.setDate(adjacentDay.getDate()-(firstDayWeekIndex-i));currentWeek.push(adjacentDay)}for(let i=1;i<=lastDayOfMonth.getDate();i++){const day=new Date(date.getFullYear(),date.getMonth(),i);currentWeek.push(day);if(currentWeek.length===7){weeks.push(currentWeek);currentWeek=[]}}for(let i=1;i<7-lastDayWeekIndex;i++){const adjacentDay=new Date(lastDayOfMonth);adjacentDay.setDate(adjacentDay.getDate()+i);currentWeek.push(adjacentDay)}if(currentWeek.length>0)weeks.push(currentWeek);return weeks}function startOfWeek(date,locale,firstDayOfWeek){let day=(firstDayOfWeek??weekInfo(locale)?.firstDay??0)%7;if(![0,1,2,3,4,5,6].includes(day)){consoleWarn(`Invalid firstDayOfWeek, expected discrete number in range [0-6]`);day=0}const d=new Date(date);while(d.getDay()!==day)d.setDate(d.getDate()-1);return d}function endOfWeek(date,locale){const d=new Date(date);const lastDay=((weekInfo(locale)?.firstDay??0)+6)%7;while(d.getDay()!==lastDay)d.setDate(d.getDate()+1);return d}function startOfMonth(date){return new Date(date.getFullYear(),date.getMonth(),1)}function endOfMonth(date){return new Date(date.getFullYear(),date.getMonth()+1,0)}function parseLocalDate(value){const parts=value.split(`-`).map(Number);return new Date(parts[0],parts[1]-1,parts[2])}var _YYYMMDD=/^([12]\d{3}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12]\d|3[01]))$/;function date(value){if(value==null)return new Date;if(value instanceof Date)return value;if(typeof value===`string`){let parsed;if(_YYYMMDD.test(value))return parseLocalDate(value);else parsed=Date.parse(value);if(!isNaN(parsed))return new Date(parsed)}return null}var sundayJanuarySecond2000=new Date(2e3,0,2);function getWeekdays(locale,firstDayOfWeek,weekdayFormat){const daysFromSunday=firstDayOfWeek??weekInfo(locale)?.firstDay??0;return range(7).map(i=>{const weekday=new Date(sundayJanuarySecond2000);weekday.setDate(sundayJanuarySecond2000.getDate()+daysFromSunday+i);return new Intl.DateTimeFormat(locale,{weekday:weekdayFormat??`narrow`}).format(weekday)})}function format(value,formatString,locale,formats){const newDate=date(value)??new Date;const customFormat=formats?.[formatString];if(typeof customFormat===`function`)return customFormat(newDate,formatString,locale);let options={};switch(formatString){case`fullDate`:options={year:`numeric`,month:`short`,day:`numeric`};break;case`fullDateWithWeekday`:options={weekday:`long`,year:`numeric`,month:`long`,day:`numeric`};break;case`normalDate`:return`${newDate.getDate()} ${new Intl.DateTimeFormat(locale,{month:`long`}).format(newDate)}`;case`normalDateWithWeekday`:options={weekday:`short`,day:`numeric`,month:`short`};break;case`shortDate`:options={month:`short`,day:`numeric`};break;case`year`:options={year:`numeric`};break;case`month`:options={month:`long`};break;case`monthShort`:options={month:`short`};break;case`monthAndYear`:options={month:`long`,year:`numeric`};break;case`monthAndDate`:options={month:`long`,day:`numeric`};break;case`weekday`:options={weekday:`long`};break;case`weekdayShort`:options={weekday:`short`};break;case`dayOfMonth`:return new Intl.NumberFormat(locale).format(newDate.getDate());case`hours12h`:options={hour:`numeric`,hour12:true};break;case`hours24h`:options={hour:`numeric`,hour12:false};break;case`minutes`:options={minute:`numeric`};break;case`seconds`:options={second:`numeric`};break;case`fullTime`:options={hour:`numeric`,minute:`numeric`};break;case`fullTime12h`:options={hour:`numeric`,minute:`numeric`,hour12:true};break;case`fullTime24h`:options={hour:`numeric`,minute:`numeric`,hour12:false};break;case`fullDateTime`:options={year:`numeric`,month:`short`,day:`numeric`,hour:`numeric`,minute:`numeric`};break;case`fullDateTime12h`:options={year:`numeric`,month:`short`,day:`numeric`,hour:`numeric`,minute:`numeric`,hour12:true};break;case`fullDateTime24h`:options={year:`numeric`,month:`short`,day:`numeric`,hour:`numeric`,minute:`numeric`,hour12:false};break;case`keyboardDate`:options={year:`numeric`,month:`2-digit`,day:`2-digit`};break;case`keyboardDateTime`:options={year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`numeric`,minute:`numeric`};return new Intl.DateTimeFormat(locale,options).format(newDate).replace(/, /g,` `);case`keyboardDateTime12h`:options={year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`numeric`,minute:`numeric`,hour12:true};return new Intl.DateTimeFormat(locale,options).format(newDate).replace(/, /g,` `);case`keyboardDateTime24h`:options={year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`numeric`,minute:`numeric`,hour12:false};return new Intl.DateTimeFormat(locale,options).format(newDate).replace(/, /g,` `);default:options=customFormat??{timeZone:`UTC`,timeZoneName:`short`}}return new Intl.DateTimeFormat(locale,options).format(newDate)}function toISO(adapter,value){const date=adapter.toJsDate(value);return`${date.getFullYear()}-${padStart(String(date.getMonth()+1),2,`0`)}-${padStart(String(date.getDate()),2,`0`)}`}function parseISO(value){const[year,month,day]=value.split(`-`).map(Number);return new Date(year,month-1,day)}function addMinutes(date,amount){const d=new Date(date);d.setMinutes(d.getMinutes()+amount);return d}function addHours(date,amount){const d=new Date(date);d.setHours(d.getHours()+amount);return d}function addDays(date,amount){const d=new Date(date);d.setDate(d.getDate()+amount);return d}function addWeeks(date,amount){const d=new Date(date);d.setDate(d.getDate()+amount*7);return d}function addMonths(date,amount){const d=new Date(date);d.setDate(1);d.setMonth(d.getMonth()+amount);return d}function getYear(date){return date.getFullYear()}function getMonth(date){return date.getMonth()}function getWeek(date,locale,firstDayOfWeek,firstDayOfYear){const weekInfoFromLocale=weekInfo(locale);const weekStart=firstDayOfWeek??weekInfoFromLocale?.firstDay??0;const minWeekSize=weekInfoFromLocale?.firstWeekSize??1;return firstDayOfYear!==void 0?calculateWeekWithFirstDayOfYear(date,locale,weekStart,firstDayOfYear):calculateWeekWithMinWeekSize(date,locale,weekStart,minWeekSize)}function calculateWeekWithFirstDayOfYear(date,locale,weekStart,firstDayOfYear){const firstDayOfYearOffset=(7+firstDayOfYear-weekStart)%7;const currentWeekStart=startOfWeek(date,locale,weekStart);const currentWeekEnd=addDays(currentWeekStart,6);function yearStartWeekdayOffset(year){return(7+new Date(year,0,1).getDay()-weekStart)%7}let year=getYear(currentWeekStart);if(year<getYear(currentWeekEnd)&&yearStartWeekdayOffset(year+1)<=firstDayOfYearOffset)year++;const yearStart=new Date(year,0,1);const offset=yearStartWeekdayOffset(year);const d1w1=offset<=firstDayOfYearOffset?addDays(yearStart,-offset):addDays(yearStart,7-offset);return 1+getDiff(endOfDay(currentWeekStart),startOfDay(d1w1),`weeks`)}function calculateWeekWithMinWeekSize(date,locale,weekStart,minWeekSize){const currentWeekStart=startOfWeek(date,locale,weekStart);const currentWeekEnd=addDays(startOfWeek(date,locale,weekStart),6);function firstWeekSize(year){const yearStart=new Date(year,0,1);return 7-getDiff(yearStart,startOfWeek(yearStart,locale,weekStart),`days`)}let year=getYear(currentWeekStart);if(year<getYear(currentWeekEnd)&&firstWeekSize(year+1)>=minWeekSize)year++;const yearStart=new Date(year,0,1);const size=firstWeekSize(year);const d1w1=size>=minWeekSize?addDays(yearStart,size-7):addDays(yearStart,size);return 1+getDiff(endOfDay(currentWeekStart),startOfDay(d1w1),`weeks`)}function getDate(date){return date.getDate()}function getNextMonth(date){return new Date(date.getFullYear(),date.getMonth()+1,1)}function getPreviousMonth(date){return new Date(date.getFullYear(),date.getMonth()-1,1)}function getHours(date){return date.getHours()}function getMinutes(date){return date.getMinutes()}function startOfYear(date){return new Date(date.getFullYear(),0,1)}function endOfYear(date){return new Date(date.getFullYear(),11,31)}function isWithinRange(date,range){return isEqual(date,range[0])||isEqual(date,range[1])||isAfter(date,range[0])&&isBefore(date,range[1])}function isValid(date){const d=new Date(date);return d instanceof Date&&!isNaN(d.getTime())}function isAfter(date,comparing){return date.getTime()>comparing.getTime()}function isAfterDay(date,comparing){return isAfter(startOfDay(date),startOfDay(comparing))}function isBefore(date,comparing){return date.getTime()<comparing.getTime()}function isEqual(date,comparing){return date.getTime()===comparing.getTime()}function isSameDay(date,comparing){return date.getDate()===comparing.getDate()&&date.getMonth()===comparing.getMonth()&&date.getFullYear()===comparing.getFullYear()}function isSameMonth(date,comparing){return date.getMonth()===comparing.getMonth()&&date.getFullYear()===comparing.getFullYear()}function isSameYear(date,comparing){return date.getFullYear()===comparing.getFullYear()}function getDiff(date,comparing,unit){const d=new Date(date);const c=new Date(comparing);switch(unit){case`years`:return d.getFullYear()-c.getFullYear();case`quarters`:return Math.floor((d.getMonth()-c.getMonth()+(d.getFullYear()-c.getFullYear())*12)/4);case`months`:return d.getMonth()-c.getMonth()+(d.getFullYear()-c.getFullYear())*12;case`weeks`:return Math.floor((d.getTime()-c.getTime())/6048e5);case`days`:return Math.floor((d.getTime()-c.getTime())/864e5);case`hours`:return Math.floor((d.getTime()-c.getTime())/36e5);case`minutes`:return Math.floor((d.getTime()-c.getTime())/6e4);case`seconds`:return Math.floor((d.getTime()-c.getTime())/1e3);default:return d.getTime()-c.getTime()}}function setHours(date,count){const d=new Date(date);d.setHours(count);return d}function setMinutes(date,count){const d=new Date(date);d.setMinutes(count);return d}function setMonth(date,count){const d=new Date(date);d.setMonth(count);return d}function setDate(date,day){const d=new Date(date);d.setDate(day);return d}function setYear(date,year){const d=new Date(date);d.setFullYear(year);return d}function startOfDay(date){return new Date(date.getFullYear(),date.getMonth(),date.getDate(),0,0,0,0)}function endOfDay(date){return new Date(date.getFullYear(),date.getMonth(),date.getDate(),23,59,59,999)}var VuetifyDateAdapter=class{constructor(options){this.locale=options.locale;this.formats=options.formats}date(value){return date(value)}toJsDate(date){return date}toISO(date){return toISO(this,date)}parseISO(date){return parseISO(date)}addMinutes(date,amount){return addMinutes(date,amount)}addHours(date,amount){return addHours(date,amount)}addDays(date,amount){return addDays(date,amount)}addWeeks(date,amount){return addWeeks(date,amount)}addMonths(date,amount){return addMonths(date,amount)}getWeekArray(date,firstDayOfWeek){const firstDay=firstDayOfWeek!==void 0?Number(firstDayOfWeek):void 0;return getWeekArray(date,this.locale,firstDay)}startOfWeek(date,firstDayOfWeek){const firstDay=firstDayOfWeek!==void 0?Number(firstDayOfWeek):void 0;return startOfWeek(date,this.locale,firstDay)}endOfWeek(date){return endOfWeek(date,this.locale)}startOfMonth(date){return startOfMonth(date)}endOfMonth(date){return endOfMonth(date)}format(date,formatString){return format(date,formatString,this.locale,this.formats)}isEqual(date,comparing){return isEqual(date,comparing)}isValid(date){return isValid(date)}isWithinRange(date,range){return isWithinRange(date,range)}isAfter(date,comparing){return isAfter(date,comparing)}isAfterDay(date,comparing){return isAfterDay(date,comparing)}isBefore(date,comparing){return!isAfter(date,comparing)&&!isEqual(date,comparing)}isSameDay(date,comparing){return isSameDay(date,comparing)}isSameMonth(date,comparing){return isSameMonth(date,comparing)}isSameYear(date,comparing){return isSameYear(date,comparing)}setMinutes(date,count){return setMinutes(date,count)}setHours(date,count){return setHours(date,count)}setMonth(date,count){return setMonth(date,count)}setDate(date,day){return setDate(date,day)}setYear(date,year){return setYear(date,year)}getDiff(date,comparing,unit){return getDiff(date,comparing,unit)}getWeekdays(firstDayOfWeek,weekdayFormat){const firstDay=firstDayOfWeek!==void 0?Number(firstDayOfWeek):void 0;return getWeekdays(this.locale,firstDay,weekdayFormat)}getYear(date){return getYear(date)}getMonth(date){return getMonth(date)}getWeek(date,firstDayOfWeek,firstDayOfYear){const firstDay=firstDayOfWeek!==void 0?Number(firstDayOfWeek):void 0;const firstWeekStart=firstDayOfYear!==void 0?Number(firstDayOfYear):void 0;return getWeek(date,this.locale,firstDay,firstWeekStart)}getDate(date){return getDate(date)}getNextMonth(date){return getNextMonth(date)}getPreviousMonth(date){return getPreviousMonth(date)}getHours(date){return getHours(date)}getMinutes(date){return getMinutes(date)}startOfDay(date){return startOfDay(date)}endOfDay(date){return endOfDay(date)}startOfYear(date){return startOfYear(date)}endOfYear(date){return endOfYear(date)}};var DateOptionsSymbol=Symbol.for(`vuetify:date-options`);var DateAdapterSymbol=Symbol.for(`vuetify:date-adapter`);function createDate(options,locale){const _options=mergeDeep({adapter:VuetifyDateAdapter,locale:{af:`af-ZA`,bg:`bg-BG`,ca:`ca-ES`,ckb:``,cs:`cs-CZ`,de:`de-DE`,el:`el-GR`,en:`en-US`,et:`et-EE`,fa:`fa-IR`,fi:`fi-FI`,hr:`hr-HR`,hu:`hu-HU`,he:`he-IL`,id:`id-ID`,it:`it-IT`,ja:`ja-JP`,ko:`ko-KR`,lv:`lv-LV`,lt:`lt-LT`,nl:`nl-NL`,no:`no-NO`,pl:`pl-PL`,pt:`pt-PT`,ro:`ro-RO`,ru:`ru-RU`,sk:`sk-SK`,sl:`sl-SI`,srCyrl:`sr-SP`,srLatn:`sr-SP`,sv:`sv-SE`,th:`th-TH`,tr:`tr-TR`,az:`az-AZ`,uk:`uk-UA`,vi:`vi-VN`,zhHans:`zh-CN`,zhHant:`zh-TW`}},options);return{options:_options,instance:createInstance(_options,locale)}}function daysDiff(adapter,start,stop){const iso=[`${adapter.toISO(stop??start).split(`T`)[0]}T00:00:00Z`,`${adapter.toISO(start).split(`T`)[0]}T00:00:00Z`];return isString(adapter.date())?adapter.getDiff(iso[0],iso[1],`days`):adapter.getDiff(adapter.date(iso[0]),adapter.date(iso[1]),`days`)}function createInstance(options,locale){const instance=reactive(isFunction(options.adapter)?new options.adapter({locale:options.locale[locale.current.value]??locale.current.value,formats:options.formats}):options.adapter);watch(locale.current,value=>{instance.locale=options.locale[value]??value??instance.locale});return instance}function useDate(){const options=inject$1(DateOptionsSymbol);if(!options)throw new Error(`[Vuetify] Could not find injected date options`);return createInstance(options,useLocale())}function createVuetify(vuetify={}){const{blueprint,...rest}=vuetify;const options=mergeDeep(blueprint,rest);const{aliases={},components={},directives={}}=options;const scope=effectScope();return scope.run(()=>{const defaults=createDefaults(options.defaults);const display=createDisplay(options.display,options.ssr);const theme=createTheme(options.theme);const icons=createIcons(options.icons);const locale=createLocale(options.locale);const date=createDate(options.date,locale);const goTo=createGoTo(options.goTo,locale);function install(app){for(const key in directives)app.directive(key,directives[key]);for(const key in components)app.component(key,components[key]);for(const key in aliases)app.component(key,defineComponent({...aliases[key],name:key,aliasName:aliases[key].name}));const appScope=effectScope();appScope.run(()=>{theme.install(app)});app.onUnmount(()=>appScope.stop());app.provide(DefaultsSymbol,defaults);app.provide(RootDefaultsSymbol,defaults);app.provide(DisplaySymbol,display);app.provide(ThemeSymbol,theme);app.provide(IconSymbol,icons);app.provide(LocaleSymbol,locale);app.provide(DateOptionsSymbol,date.options);app.provide(DateAdapterSymbol,date.instance);app.provide(GoToSymbol,goTo);if(IN_BROWSER&&options.ssr){if(app.$nuxt)app.$nuxt.hook(`app:suspense:resolve`,()=>{display.update()});else{const{mount}=app;app.mount=(...args)=>{const vm=mount(...args);nextTick$1(()=>display.update());app.mount=mount;return vm}}}app.mixin({computed:{$vuetify(){return reactive({defaults:inject.call(this,DefaultsSymbol),display:inject.call(this,DisplaySymbol),theme:inject.call(this,ThemeSymbol),icons:inject.call(this,IconSymbol),locale:inject.call(this,LocaleSymbol),date:inject.call(this,DateAdapterSymbol)})}}})}function unmount(){scope.stop()}return{install,unmount,defaults,display,theme,icons,locale,date,goTo}})}var version=`4.2.1`;createVuetify.version=version;function inject(key){const vm=this.$;const provides=vm.parent?.provides??vm.vnode.appContext?.provides;if(provides&&key in provides)return provides[key]}var aliases={collapse:`svg:M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z`,complete:`svg:M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z`,cancel:`svg:M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z`,close:`svg:M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z`,delete:`svg:M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z`,clear:`svg:M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z`,success:`svg:M12,2C17.52,2 22,6.48 22,12C22,17.52 17.52,22 12,22C6.48,22 2,17.52 2,12C2,6.48 6.48,2 12,2M11,16.5L18,9.5L16.59,8.09L11,13.67L7.91,10.59L6.5,12L11,16.5Z`,info:`svg:M13,9H11V7H13M13,17H11V11H13M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z`,warning:`svg:M13,13H11V7H13M13,17H11V15H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z`,error:`svg:M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z`,prev:`svg:M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z`,next:`svg:M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z`,checkboxOn:`svg:M10,17L5,12L6.41,10.58L10,14.17L17.59,6.58L19,8M19,3H5C3.89,3 3,3.89 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.89 20.1,3 19,3Z`,checkboxOff:`svg:M19,3H5C3.89,3 3,3.89 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.89 20.1,3 19,3M19,5V19H5V5H19Z`,checkboxIndeterminate:`svg:M17,13H7V11H17M19,3H5C3.89,3 3,3.89 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.89 20.1,3 19,3Z`,delimiter:`svg:M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z`,sortAsc:`svg:M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z`,sortDesc:`svg:M11,4H13V16L18.5,10.5L19.92,11.92L12,19.84L4.08,11.92L5.5,10.5L11,16V4Z`,expand:`svg:M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z`,menu:`svg:M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z`,subgroup:`svg:M7,10L12,15L17,10H7Z`,dropdown:`svg:M7,10L12,15L17,10H7Z`,radioOn:`svg:M12,20C7.58,20 4,16.42 4,12C4,7.58 7.58,4 12,4C16.42,4 20,7.58 20,12C20,16.42 16.42,20 12,20M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2M12,7C9.24,7 7,9.24 7,12C7,14.76 9.24,17 12,17C14.76,17 17,14.76 17,12C17,9.24 14.76,7 12,7Z`,radioOff:`svg:M12,20C7.58,20 4,16.42 4,12C4,7.58 7.58,4 12,4C16.42,4 20,7.58 20,12C20,16.42 16.42,20 12,20M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z`,edit:`svg:M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z`,ratingEmpty:`svg:M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z`,ratingFull:`svg:M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z`,ratingHalf:`svg:M12,15.4V6.1L13.71,10.13L18.09,10.5L14.77,13.39L15.76,17.67M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z`,loading:`svg:M19,8L15,12H18C18,15.31 15.31,18 12,18C11,18 10.03,17.75 9.2,17.3L7.74,18.76C8.97,19.54 10.43,20 12,20C16.42,20 20,16.42 20,12H23M6,12C6,8.69 8.69,6 12,6C13,6 13.97,6.25 14.8,6.7L16.26,5.24C15.03,4.46 13.57,4 12,4C7.58,4 4,7.58 4,12H1L5,16L9,12`,first:`svg:M18.41,16.59L13.82,12L18.41,7.41L17,6L11,12L17,18L18.41,16.59M6,6H8V18H6V6Z`,last:`svg:M5.59,7.41L10.18,12L5.59,16.59L7,18L13,12L7,6L5.59,7.41M16,6H18V18H16V6Z`,unfold:`svg:M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z`,file:`svg:M16.5,6V17.5C16.5,19.71 14.71,21.5 12.5,21.5C10.29,21.5 8.5,19.71 8.5,17.5V5C8.5,3.62 9.62,2.5 11,2.5C12.38,2.5 13.5,3.62 13.5,5V15.5C13.5,16.05 13.05,16.5 12.5,16.5C11.95,16.5 11.5,16.05 11.5,15.5V6H10V15.5C10,16.88 11.12,18 12.5,18C13.88,18 15,16.88 15,15.5V5C15,2.79 13.21,1 11,1C8.79,1 7,2.79 7,5V17.5C7,20.54 9.46,23 12.5,23C15.54,23 18,20.54 18,17.5V6H16.5Z`,plus:`svg:M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z`,minus:`svg:M19,13H5V11H19V13Z`,calendar:`svg:M19,19H5V8H19M16,1V3H8V1H6V3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3H18V1M17,12H12V17H17V12Z`,treeviewCollapse:`svg:M7,10L12,15L17,10H7Z`,treeviewExpand:`svg:M10,17L15,12L10,7V17Z`,tableGroupExpand:`svg:M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z`,tableGroupCollapse:`svg:M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z`,eyeDropper:`svg:M19.35,11.72L17.22,13.85L15.81,12.43L8.1,20.14L3.5,22L2,20.5L3.86,15.9L11.57,8.19L10.15,6.78L12.28,4.65L19.35,11.72M16.76,3C17.93,1.83 19.83,1.83 21,3C22.17,4.17 22.17,6.07 21,7.24L19.08,9.16L14.84,4.92L16.76,3M5.56,17.03L4.5,19.5L6.97,18.44L14.4,11L13,9.6L5.56,17.03Z`,upload:`svg:M11 20H6.5q-2.28 0-3.89-1.57Q1 16.85 1 14.58q0-1.95 1.17-3.48q1.18-1.53 3.08-1.95q.63-2.3 2.5-3.72Q9.63 4 12 4q2.93 0 4.96 2.04Q19 8.07 19 11q1.73.2 2.86 1.5q1.14 1.28 1.14 3q0 1.88-1.31 3.19T18.5 20H13v-7.15l1.6 1.55L16 13l-4-4l-4 4l1.4 1.4l1.6-1.55Z`,color:`svg:M17.5 12a1.5 1.5 0 0 1-1.5-1.5A1.5 1.5 0 0 1 17.5 9a1.5 1.5 0 0 1 1.5 1.5a1.5 1.5 0 0 1-1.5 1.5m-3-4A1.5 1.5 0 0 1 13 6.5A1.5 1.5 0 0 1 14.5 5A1.5 1.5 0 0 1 16 6.5A1.5 1.5 0 0 1 14.5 8m-5 0A1.5 1.5 0 0 1 8 6.5A1.5 1.5 0 0 1 9.5 5A1.5 1.5 0 0 1 11 6.5A1.5 1.5 0 0 1 9.5 8m-3 4A1.5 1.5 0 0 1 5 10.5A1.5 1.5 0 0 1 6.5 9A1.5 1.5 0 0 1 8 10.5A1.5 1.5 0 0 1 6.5 12M12 3a9 9 0 0 0-9 9a9 9 0 0 0 9 9a1.5 1.5 0 0 0 1.5-1.5c0-.39-.15-.74-.39-1c-.23-.27-.38-.62-.38-1a1.5 1.5 0 0 1 1.5-1.5H16a5 5 0 0 0 5-5c0-4.42-4.03-8-9-8`,command:`svg:M6,2A4,4 0 0,1 10,6V8H14V6A4,4 0 0,1 18,2A4,4 0 0,1 22,6A4,4 0 0,1 18,10H16V14H18A4,4 0 0,1 22,18A4,4 0 0,1 18,22A4,4 0 0,1 14,18V16H10V18A4,4 0 0,1 6,22A4,4 0 0,1 2,18A4,4 0 0,1 6,14H8V10H6A4,4 0 0,1 2,6A4,4 0 0,1 6,2M16,18A2,2 0 0,0 18,20A2,2 0 0,0 20,18A2,2 0 0,0 18,16H16V18M14,10H10V14H14V10M6,16A2,2 0 0,0 4,18A2,2 0 0,0 6,20A2,2 0 0,0 8,18V16H6M8,6A2,2 0 0,0 6,4A2,2 0 0,0 4,6A2,2 0 0,0 6,8H8V6M18,8A2,2 0 0,0 20,6A2,2 0 0,0 18,4A2,2 0 0,0 16,6V8H18Z`,ctrl:`svg:M19.78,11.78L18.36,13.19L12,6.83L5.64,13.19L4.22,11.78L12,4L19.78,11.78Z`,space:`svg:M3 15H5V19H19V15H21V19C21 20.1 20.1 21 19 21H5C3.9 21 3 20.1 3 19V15Z`,shift:`svg:M15 18v-6h2.17L12 6.83L6.83 12H9v6zM12 4l10 10h-5v6H7v-6H2z`,alt:`svg:M3 4h6.11l7.04 14H21v2h-6.12L7.84 6H3zm11 0h7v2h-7z`,enter:`svg:M19 7v4H5.83l3.58-3.59L8 6l-6 6l6 6l1.41-1.42L5.83 13H21V7z`,arrowup:`svg:M13 20h-2V8l-5.5 5.5l-1.42-1.42L12 4.16l7.92 7.92l-1.42 1.42L13 8z`,arrowdown:`svg:M11 4h2v12l5.5-5.5l1.42 1.42L12 19.84l-7.92-7.92L5.5 10.5L11 16z`,arrowleft:`svg:M20 11v2H8l5.5 5.5l-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5L8 11z`,arrowright:`svg:M4 11v2h12l-5.5 5.5l1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5L16 11z`,backspace:`svg:M19 15.59L17.59 17L14 13.41L10.41 17L9 15.59L12.59 12L9 8.41L10.41 7L14 10.59L17.59 7L19 8.41L15.41 12zM22 3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H7c-.69 0-1.23-.36-1.59-.89L0 12l5.41-8.12C5.77 3.35 6.31 3 7 3zm0 2H7l-4.72 7L7 19h15z`,play:`svg:M8,5.14V19.14L19,12.14L8,5.14Z`,pause:`svg:M14,19H18V5H14M6,19H10V5H6V19Z`,fullscreen:`svg:M5,5H10V7H7V10H5V5M14,5H19V10H17V7H14V5M17,14H19V19H14V17H17V14M10,17V19H5V14H7V17H10Z`,fullscreenExit:`svg:M14,14H19V16H16V19H14V14M5,14H10V19H8V16H5V14M8,5H10V10H5V8H8V5M19,8V10H14V5H16V8H19Z`,volumeHigh:`svg:M14,3.23V5.29C16.89,6.15 19,8.83 19,12C19,15.17 16.89,17.84 14,18.7V20.77C18,19.86 21,16.28 21,12C21,7.72 18,4.14 14,3.23M16.5,12C16.5,10.23 15.5,8.71 14,7.97V16C15.5,15.29 16.5,13.76 16.5,12M3,9V15H7L12,20V4L7,9H3Z`,volumeMedium:`svg:M5,9V15H9L14,20V4L9,9M18.5,12C18.5,10.23 17.5,8.71 16,7.97V16C17.5,15.29 18.5,13.76 18.5,12Z`,volumeLow:`svg:M7,9V15H11L16,20V4L11,9H7Z`,volumeOff:`svg:M5.64,3.64L21.36,19.36L19.95,20.78L16,16.83V20L11,15H7V9H8.17L4.22,5.05L5.64,3.64M16,4V11.17L12.41,7.58L16,4Z`,search:`svg:M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z`};var mdi={component:VSvgIcon};var TRAINING_GUIDE_DURATION_MS=8e3;var trainingGuide=shallowRef(null);var overlays=0;var sequence=0;function registerTrainingGuideOverlay(){overlays+=1;let registered=true;return()=>{if(!registered)return;registered=false;overlays-=1;if(overlays===0)trainingGuide.value=null}}function cssString(value){return String(value).replace(/["\\]/gu,`\\$&`)}function stepSelectors(step){if(step.id===`file`)return[`[data-vibe64-guide-path="${cssString(step.path)}"]`];const id=cssString(step.id);return[`[data-vibe64-guide="${id}"]`,`[data-vibe64-guide-pane="${id}"]`]}function visibleStepElement(step,root){for(const selector of stepSelectors(step)){const element=[...root.querySelectorAll(selector)].find(guideElementVisible);if(element)return element}return null}function guideElementVisible(element){if(!element?.isConnected||element.closest(`[inert], [aria-hidden='true']`))return false;if(typeof element.checkVisibility===`function`&&!element.checkVisibility({visibilityProperty:true}))return false;const rect=element.getBoundingClientRect();return rect.width>0&&rect.height>0}function findTrainingGuideStep(steps=[],root=globalThis.document){if(!root)return null;for(let index=steps.length-1;index>=0;index-=1){const element=visibleStepElement(steps[index],root);if(element)return{step:steps[index],element,final:index===steps.length-1}}return null}var PANE_SWITCH=`pane-switch`;function findPaneSwitch(root=globalThis.document){if(!root)return null;return[...root.querySelectorAll(`[data-vibe64-guide="${PANE_SWITCH}"]`)].filter(guideElementVisible).at(-1)||null}function currentTrainingGuideElement(guide){const element=guide?.element;if(!element||guideElementVisible(element))return element||null;if(element.isConnected||!guide.target)return null;return guide.target.id===PANE_SWITCH?findPaneSwitch():visibleStepElement(guide.target,globalThis.document)}function clearTrainingGuide(id){if(!id||trainingGuide.value?.id===id)trainingGuide.value=null}async function showTrainingGuide(guide,{settleMs=0,durationMs=TRAINING_GUIDE_DURATION_MS}={}){if(!guide?.highlight)return{shown:false,reason:`highlight-off`};if(overlays===0)return{shown:false,reason:`overlay-unavailable`};const deadline=Date.now()+settleMs;let found=findTrainingGuideStep(guide.steps);while(!found?.final&&Date.now()<deadline){await new Promise(resolve=>setTimeout(resolve,50));found=findTrainingGuideStep(guide.steps)}if(!found){const element=findPaneSwitch();if(element)found={step:{id:PANE_SWITCH},element}}if(!found)return{shown:false,reason:`target-hidden`};if(overlays===0)return{shown:false,reason:`overlay-unavailable`};sequence+=1;trainingGuide.value=Object.freeze({id:`guide-${sequence}`,element:found.element,step:found.step.id,target:found.step,caption:String(guide.caption||``),expiresAt:Date.now()+durationMs});return{shown:true,step:found.step.id}}async function runTrainingGuideCommand(command,{navigateBrowser,view}={}){const{guide,...navigation}=command;let focus=null;if(guide.navigate){if(typeof navigateBrowser!==`function`)throw new Error(`Lesson workspace navigation is unavailable in this installation.`);focus=await navigateBrowser(navigation);if(guide.filePath&&(typeof view?.openFile!==`function`||view.openFile(guide.filePath)!==true))throw new Error(`This lesson's Files view could not open that practice project file.`)}const receipt=await showTrainingGuide(guide,{settleMs:guide.navigate?1500:0});return{...focus?{focus}:{},guide:receipt}}var PRACTICE_SLUG_PATTERN=/^training-[a-f0-9]{32}$/u;function isPracticeProjectSlug(slug=``){return PRACTICE_SLUG_PATTERN.test(String(slug||``))}function practiceProjectName({lessonTitle=``,lessonCode=``}={}){const lesson=String(lessonTitle||``).trim()||String(lessonCode||``).trim();return lesson?`Practice: ${lesson}`:`Practice project`}function projectDisplayName(project=null,{lessonTitle=``}={}){const slug=String(project?.slug||``);return isPracticeProjectSlug(slug)?practiceProjectName({lessonTitle}):slug}var step=(id,label)=>Object.freeze({id,label});var PREVIEW=step(`preview`,`Preview`);var DASHBOARD=step(`dashboard`,`Dashboard`);var DATABASE=step(`database`,`Database`);var TRAINING_GUIDE_PLACES=Object.freeze({preview:Object.freeze({pane:`preview`,steps:[PREVIEW]}),dashboard:Object.freeze({pointOnly:true,steps:[DASHBOARD]}),"database-erd":Object.freeze({pane:`database`,databaseView:`erd`,steps:[DASHBOARD,DATABASE,step(`database-erd`,`ERD`)]}),"database-data":Object.freeze({pane:`database`,databaseView:`data`,steps:[DASHBOARD,DATABASE,step(`database-data`,`Data`)]}),files:Object.freeze({pane:`files`,steps:[DASHBOARD,step(`files`,`Files`)]}),changes:Object.freeze({pane:`changes`,steps:[DASHBOARD,step(`changes`,`Current changes`)]}),"git-log":Object.freeze({pane:`repository`,steps:[DASHBOARD,step(`git-log`,`Git log`)]}),"session-info":Object.freeze({pane:`session`,steps:[DASHBOARD,step(`session-info`,`Session info`)]}),architecture:Object.freeze({pane:`system`,steps:[DASHBOARD,step(`architecture`,`Architecture`)]}),learning:Object.freeze({project:false,event:`learn-toggled`,steps:[step(`learning`,`Learning`)]}),lesson:Object.freeze({pane:`lesson`,pointOnly:true,project:false,steps:[step(`lesson`,`Lesson`)]}),chat:Object.freeze({pointOnly:true,steps:[step(`chat`,`Coding chat`)]}),colleague:Object.freeze({pointOnly:true,project:false,event:`colleague-opened`,steps:[step(`colleague`,`Colleague`)]}),courses:Object.freeze({pointOnly:true,project:false,steps:[step(`courses`,`Courses`)]}),"lesson-bar":Object.freeze({pointOnly:true,project:false,steps:[step(`lesson-bar`,`Lesson step bar`)]}),save:Object.freeze({pointOnly:true,event:`saved`,steps:[step(`save`,`Save`)]}),"reload-preview":Object.freeze({pointOnly:true,event:`preview-reloaded`,steps:[PREVIEW,step(`reload-preview`,`Reload preview`)]})});var TRAINING_GUIDE_ALIASES=Object.freeze({"workspace-preview":`preview`,"workspace-erd":`database-erd`});var TRAINING_GUIDE_TARGETS=Object.freeze([...Object.keys(TRAINING_GUIDE_PLACES),...Object.keys(TRAINING_GUIDE_ALIASES)]);var filePathExpression=/^(?!\/)(?!.*(?:^|\/)\.\.(?:\/|$))[^\u0000-\u001f\\]{1,512}$/u;var TRAINING_GUIDE_CAPTION_LIMIT=256;function guideFailure(message){return Object.assign(new Error(message),{code:`VIBE64_TRAINING_GUIDE_INVALID`,statusCode:422})}function trainingGuideRequest(input={}){const alias=TRAINING_GUIDE_ALIASES[input.target];const target=alias||input.target;const place=TRAINING_GUIDE_PLACES[target];if(!place)throw guideFailure(`Use one of the declared Vibe64 guide places.`);const navigate=input.navigate??Boolean(alias);const highlight=input.highlight??true;if(typeof navigate!==`boolean`||typeof highlight!==`boolean`)throw guideFailure(`navigate and highlight are booleans.`);if(!navigate&&!highlight)throw guideFailure(`Point at the place (highlight) or open it (navigate); this request does neither.`);if(navigate&&target===`dashboard`)throw guideFailure(`Dashboard has no single view to open. Point at it, or open one Dashboard section such as files or database-erd.`);if(navigate&&place.pointOnly)throw guideFailure(`${place.steps.at(-1).label} has no view to open; point at it instead.`);const request={target,navigate,highlight};if(input.filePath!==void 0){if(target!==`files`)throw guideFailure(`filePath is only for the files place.`);if(typeof input.filePath!==`string`||!filePathExpression.test(input.filePath))throw guideFailure(`Use a relative practice project file path without '..'.`);request.filePath=input.filePath}if(input.caption!==void 0){if(typeof input.caption!==`string`||!input.caption.trim()||input.caption.length>256)throw guideFailure(`Use a caption of 1 to ${256} characters.`);request.caption=input.caption.trim()}return request}function trainingGuideSteps(request){const steps=TRAINING_GUIDE_PLACES[request.target].steps.map(value=>({...value}));if(request.filePath)steps.push({id:`file`,path:request.filePath,label:request.filePath});return steps}var TRAINING_BEAT_EVENTS=Object.freeze([`app-pressed`,`message-sent`,`agent-finished`,`saved`,`preview-reloaded`,`file-opened`,`colleague-opened`,`colleague-minimised`,`learn-toggled`]);var TRAINING_BEAT_ACTIONS=Object.freeze({"send-message":Object.freeze({event:`message-sent`,place:`chat`}),"agent-finished":Object.freeze({event:`agent-finished`}),"file-opened":Object.freeze({event:`file-opened`,place:`files`}),"app-pressed":Object.freeze({event:`app-pressed`,place:`preview`}),"colleague-minimised":Object.freeze({event:`colleague-minimised`,place:`colleague`})});function trainingPlaceShown(target,focus={}){const place=TRAINING_GUIDE_PLACES[target];if(target===`chat`)return focus.pane===`chat`||focus.chatVisible===true;if(target===`courses`)return focus.learningOpen===true;if(!place?.pane)return null;return focus.pane===place.pane&&(!place.databaseView||focus.databaseView===place.databaseView)}var SHOW_MIN_MS=5e3;var SHOW_MAX_MS=12e3;var SHOW_PER_CHARACTER_MS=50;var TICK_MS=100;var DO_RING_MS=15e3;var POINT_SETTLE_MS=1500;var CONFIRM_MS=1500;var showDuration=text=>Math.min(SHOW_MAX_MS,Math.max(SHOW_MIN_MS,SHOW_MIN_MS+SHOW_PER_CHARACTER_MS*String(text||``).length));function reducedMotion(){try{return Boolean(globalThis.matchMedia?.(`(prefers-reduced-motion: reduce)`)?.matches)}catch{return false}}function documentHidden(){return globalThis.document?.visibilityState===`hidden`}function beatEvent(beat){return TRAINING_BEAT_ACTIONS[beat.target]?.event||TRAINING_GUIDE_PLACES[beat.target]?.event||``}function beatPlace(beat){if(!beat||beat.kind===`check`)return``;return TRAINING_BEAT_ACTIONS[beat.target]?TRAINING_BEAT_ACTIONS[beat.target].place||``:beat.target}function createLessonPlayer({state,steps,currentStep,active,selectStep,remember,focus=()=>null,activity=null,practiceSlug=()=>``,allDone=()=>{},showGuide=showTrainingGuide,clearGuide=clearTrainingGuide,shownGuide=()=>trainingGuide.value?.id||``,motionReduced=reducedMotion,hidden=documentHidden}={}){const local=reactive({remaining:0,duration:0,held:false,ring:``,confirmed:``});const detected=new Set;const heard={stepId:``,events:[],used:-1};function stepActivity(){const stepId=currentStep.value?.id||``;if(heard.stepId!==stepId)Object.assign(heard,{stepId,events:[],used:-1});return heard}const activityMatches=(value,event)=>value?.kind===`do`&&beatEvent(value)===event.name&&(!value.path||event.path===value.path);const beats=computed(()=>Array.isArray(currentStep.value?.beats)?currentStep.value.beats:[]);const end=computed(()=>beats.value.length?beats.value.length-(beats.value.at(-1).kind===`check`?1:0):0);const index=computed(()=>Math.max(0,Math.min(Number.isSafeInteger(state.beat)?state.beat:0,end.value)));const beat=computed(()=>beats.value[index.value]||null);const stepIndex=computed(()=>steps.value.findIndex(step=>step.id===currentStep.value?.id));const playing=computed(()=>Boolean(active()&&beat.value?.kind===`show`&&!state.beatPaused&&!local.held&&!state.open));function moveTo(value){local.confirmed=``;state.beat=value;remember()}function next(){if(index.value<end.value)return moveTo(index.value+1);const following=steps.value[stepIndex.value+1];if(following)selectStep(following.id,0)}function back(){if(index.value>0)return moveTo(index.value-1);const previous=steps.value[stepIndex.value-1];if(!previous)return;const previousBeats=Array.isArray(previous.beats)?previous.beats:[];selectStep(previous.id,previousBeats.length-(previousBeats.at(-1)?.kind===`check`?1:0))}function start(stepId=currentStep.value?.id){state.beatPaused=false;if(stepId===currentStep.value?.id)moveTo(0);else selectStep(stepId,0)}function togglePause(){state.beatPaused=!state.beatPaused;remember()}function hold(value){local.held=value===true}let timer=null;let confirmTimer=null;function stopTimer(){clearInterval(timer);timer=null}function tick(){if(!playing.value||hidden()||motionReduced())return;local.remaining=Math.max(0,local.remaining-TICK_MS);if(local.remaining>0)return;stopTimer();next()}watch(()=>[active(),currentStep.value?.id,index.value,beat.value],([shown,,,value])=>{stopTimer();clearTimeout(confirmTimer);local.confirmed=``;if(local.ring)clearGuide(local.ring);local.ring=``;local.duration=value?.kind===`show`?showDuration(value.text):0;local.remaining=local.duration;if(!shown||!value)return;if(value.kind===`show`)timer=setInterval(tick,TICK_MS);if(value.kind===`do`&&placeShown(value))return confirm(value,`✓ You're already here.`);if(value.kind===`do`&&!detected.has(`${currentStep.value?.id}:${index.value}`)){const history=stepActivity();const position=history.events.findIndex((event,at)=>at>history.used&&activityMatches(value,event));if(position>=0)return confirm(value,`✓ Done.`,position)}point(value)},{immediate:true});function placeShown(value){const current=focus();return Boolean(current&&!TRAINING_BEAT_ACTIONS[value.target]&&trainingPlaceShown(value.target,{...current,learningOpen:state.open})===true)}function confirm(value,line=`✓ Done.`,position=-1){const stepId=currentStep.value?.id;const at=index.value;detected.add(`${stepId}:${at}`);if(position>=0)stepActivity().used=position;if(local.ring)clearGuide(local.ring);local.ring=``;local.confirmed=line;clearTimeout(confirmTimer);if(beats.value.map((item,position)=>[item,position]).filter(([item])=>item.kind===`do`).every(([,position])=>detected.has(`${stepId}:${position}`)))allDone(stepId);confirmTimer=setTimeout(()=>{local.confirmed=``;if(currentStep.value?.id===stepId&&index.value===at&&beat.value===value)next()},CONFIRM_MS)}watch(()=>beat.value?.kind===`do`&&active()&&!local.confirmed&&placeShown(beat.value),shown=>{if(shown)confirm(beat.value)});activity?.subscribe(event=>{if(practiceSlug()&&event.projectSlug&&event.projectSlug!==practiceSlug())return;const history=stepActivity();history.events.push(event);const value=beat.value;if(local.confirmed||!active()||!activityMatches(value,event))return;confirm(value,`✓ Done.`,history.events.length-1)});watch(()=>state.open,covered=>{if(covered&&local.ring)clearGuide(local.ring)});async function point(value){const place=beatPlace(value);if(!place||state.open)return null;const request={target:place,...value.path?{filePath:value.path}:{}};const guideSteps=trainingGuideSteps(request);const receipt=await showGuide({...request,highlight:true,navigate:false,steps:guideSteps,caption:guideSteps.map(item=>item.label).join(` → `)},{settleMs:POINT_SETTLE_MS,durationMs:value.kind===`show`?local.duration:DO_RING_MS});if(receipt?.shown){if(beat.value===value&&!state.open)local.ring=shownGuide();else clearGuide(shownGuide())}return receipt}return Object.freeze({beats,beat,index,end,get final(){return Boolean(beats.value.length)&&index.value===end.value},get paused(){return Boolean(state.beatPaused)},get playing(){return playing.value&&!motionReduced()},get progress(){return local.duration?1-local.remaining/local.duration:0},get atStart(){return index.value===0&&stepIndex.value<=0},get atEnd(){return index.value>=end.value&&stepIndex.value>=steps.value.length-1},get confirmed(){return local.confirmed},next,back,start,togglePause,hold,point:()=>beat.value&&point(beat.value)})}var TRAINING_PATH$1=`/api/vibe64/training`;var attemptPath=(attemptId,suffix=``)=>`${TRAINING_PATH$1}/attempts/${encodeURIComponent(attemptId)}${suffix}`;var VIBE64_LEARNING_ROUTES=Object.freeze({lessonRead:attemptId=>attemptPath(attemptId,`/lesson`),stepObserve:attemptId=>attemptPath(attemptId,`/steps/observe`),stepCheck:attemptId=>attemptPath(attemptId,`/steps/check`),stepAnswer:attemptId=>attemptPath(attemptId,`/steps/answer`),stepDone:attemptId=>attemptPath(attemptId,`/steps/done`),stepReview:attemptId=>attemptPath(attemptId,`/steps/review`),readerSave:attemptId=>attemptPath(attemptId,`/reader`),visual:(attemptId,visualId)=>attemptPath(attemptId,`/visuals/${encodeURIComponent(visualId)}`),lessonRestart:attemptId=>attemptPath(attemptId,`/restart`),lessonFinish:attemptId=>attemptPath(attemptId,`/finish`),lessonDelete:attemptId=>attemptPath(attemptId,`/delete`),learning:`${TRAINING_PATH$1}/learning`,notes:`${TRAINING_PATH$1}/teacher-notes`,notesClear:`${TRAINING_PATH$1}/teacher-notes/clear`,learningMode:`${TRAINING_PATH$1}/learning-mode`,practice:`${TRAINING_PATH$1}/practice`,archiveDelete:attemptId=>`${TRAINING_PATH$1}/archives/${encodeURIComponent(attemptId)}/delete`});var VIBE64_LEARNING_PAGE_PATH=`/app/learning`;var DEVELOP_HOME_PATH=`/app`;var VIBE64_LEARNING_MODE_NOTE=`You're in Learn mode. Press L to go back to your projects.`;var VIBE64_DEVELOP_MODE_NOTE=`This is a practice project. Press L to switch to Learn.`;var VIBE64_LEARNING_MODE_PROJECT_CODE=`vibe64_learning_mode_project`;var VIBE64_LESSON_IN_PROGRESS_CODE=`VIBE64_TRAINING_LESSON_IN_PROGRESS`;var VIBE64_LEARNING_AI_REQUIRED_CODE=`VIBE64_TRAINING_PRACTICE_AI_REQUIRED`;var VIBE64_LEARNING_NOTES_MAX=4e3;var SURFACES=Object.freeze([`courses`,`progress`,`archived`]);var STORAGE_PREFIX=`vibe64:learning-environment:v2:`;var MODE_PLACE_PREFIX=`vibe64:mode-place:v1:`;var READER_SAVE_DELAY_MS=800;var PROJECT_VIEW_WAIT_MS=5e3;var MAX_EXERCISE_OBSERVATIONS=8;var VIBE64_LEARNING_TEACH_MESSAGE=`Teach me this step.`;var VIBE64_LEARNING_STUCK_MESSAGE=`I'm stuck on this step.`;var EMPTY_PRACTICE=Object.freeze({current:null,archived:Object.freeze([]),loaded:false});var text$2=value=>typeof value===`string`&&value.length>0;function storage(kind){try{return globalThis.window?.[kind]||null}catch{return null}}function readJson(kind,key){try{const value=JSON.parse(storage(kind)?.getItem(key)||`null`);return value&&typeof value===`object`?value:null}catch{return null}}function writeJson(kind,key,value){try{storage(kind)?.setItem(key,JSON.stringify(value))}catch{}}function readPlace(actorKey){const value=readJson(`sessionStorage`,`${STORAGE_PREFIX}${actorKey}`);if(!value)return null;return{surface:SURFACES.includes(value.surface)?value.surface:`courses`,attemptId:text$2(value.attemptId)?value.attemptId:``,stepId:text$2(value.stepId)?value.stepId:``,trialAttemptId:text$2(value.trialAttemptId)&&value.trialAttemptId===value.attemptId?value.trialAttemptId:``,scroll:Number.isSafeInteger(value.scroll)&&value.scroll>=0?value.scroll:0,beat:Number.isSafeInteger(value.beat)&&value.beat>=0?value.beat:0,beatPaused:value.beatPaused===true,stepTextOpen:value.stepTextOpen===true}}var modePlaceKey=(actorKey,side)=>`${MODE_PLACE_PREFIX}${actorKey}:${side}`;var modeSide=on=>on?`learn`:`develop`;function normalizeLesson(result){if(!result||result.ok===false||result.available===false)return null;const lesson=result.lesson||{};const steps=Array.isArray(lesson.steps)?lesson.steps.filter(step=>text$2(step?.id)):[];const attempt=result.attempt||null;return Object.freeze({schemaVersion:lesson.schemaVersion??(steps.length?2:1),code:lesson.code||attempt?.pin?.lesson?.code||``,title:lesson.title||``,notesText:text$2(lesson.notesText)?lesson.notesText:``,visuals:Array.isArray(lesson.visuals)?lesson.visuals:[],steps,attempt,practiceProjectSlug:attempt?.practiceSlug||``,reader:result.reader&&text$2(result.reader.stepId)?result.reader:null,results:Array.isArray(result.results)?result.results:[],passedStepIds:Array.isArray(result.passedStepIds)?result.passedStepIds.filter(text$2):[]})}function normalizeLearningMode(result){const mode=result?.ok===true&&result.available!==false?result.learningMode:null;if(!mode||typeof mode!==`object`)return null;const value=key=>text$2(mode[key])?mode[key]:``;return Object.freeze({on:mode.on===true,currentAttemptId:value(`currentAttemptId`),lessonCode:value(`lessonCode`),lessonTitle:value(`lessonTitle`),practiceSlug:value(`practiceSlug`)})}function normalizePractice(result){if(result?.ok!==true)return EMPTY_PRACTICE;const lessonName=lesson=>String(lesson?.title||lesson?.code||``)||`Lesson`;const current=result.current&&text$2(result.current.attemptId)?Object.freeze({attemptId:result.current.attemptId,name:lessonName(result.current.lesson),projectName:text$2(result.current.slug)?practiceProjectName({lessonTitle:result.current.lesson?.title,lessonCode:result.current.lesson?.code}):``,slug:text$2(result.current.slug)?result.current.slug:``,status:result.current.status===`deleting`?`deleting`:`in-progress`}):null;const archived=(Array.isArray(result.archived)?result.archived:[]).filter(entry=>text$2(entry?.attemptId)).map(entry=>Object.freeze({attemptId:entry.attemptId,name:lessonName(entry.lesson),reason:entry.reason===`finished`?`finished`:`archived`,archivedAt:String(entry.archivedAt||``),hasProject:entry.hasProject===true}));return Object.freeze({current,archived:Object.freeze(archived),loaded:true})}function learnHomePath(mode){return mode?.practiceSlug?projectAppPath(mode.practiceSlug):VIBE64_LEARNING_PAGE_PATH}function modeRedirect({mode=null,slug=``,path=``}={}){if(!mode)return null;const projectSlug=String(slug||``).trim();const atLearnPage=String(path||``).replace(/\/+$/u,``)===VIBE64_LEARNING_PAGE_PATH;if(mode.on){if(projectSlug?projectSlug===mode.practiceSlug:!(atLearnPage&&mode.practiceSlug))return null;return Object.freeze({path:learnHomePath(mode),note:projectSlug?VIBE64_LEARNING_MODE_NOTE:``})}if(atLearnPage)return Object.freeze({path:DEVELOP_HOME_PATH,note:``});if(projectSlug&&projectSlug===mode.practiceSlug)return Object.freeze({path:DEVELOP_HOME_PATH,note:VIBE64_DEVELOP_MODE_NOTE});return null}function reviewNote(result){if(!result)return``;if(result.alreadyPassed)return`You already passed this step, so your work was not reviewed again. Your earlier pass counts.`;const comment=String(result.review?.comment||``).trim();const hint=String(result.review?.hint||``).trim();if(result.outcome===`passed`)return comment?`Passed ✓ ${comment}`:`Passed ✓`;if(!comment)return String(result.reason||``).trim();return`Not yet: ${comment}${hint?` Hint: ${hint}`:``}`}function stepStatus(results,stepId,passedStepIds=[]){const own=results.filter(result=>result?.stepId===stepId);if(passedStepIds.includes(stepId)||own.some(result=>result.outcome===`passed`))return`passed`;return own.length?own.at(-1).outcome||`not-yet-passed`:`not-started`}function showMeCommand(guide,{projectSlug=``,sessionId=``}={}){const request=trainingGuideRequest({target:guide?.target,...guide?.navigate!==void 0?{navigate:guide.navigate}:{},...guide?.filePath!==void 0?{filePath:guide.filePath}:{}});const steps=trainingGuideSteps(request);const caption=text$2(guide?.caption)?guide.caption.slice(0,256):steps.map(value=>value.label).join(` → `);const navigate=request.navigate&&request.target!==`learning`&&Boolean(projectSlug);const command={guide:{...request,navigate,highlight:true,steps,caption}};if(!navigate)return command;const place=TRAINING_GUIDE_PLACES[request.target];return{...command,projectSlug,...text$2(sessionId)?{sessionId}:{},...place.pane?{pane:place.pane}:{},...place.databaseView?{databaseView:place.databaseView}:{}}}function createVibe64Learning({request:requestOverride=null,browserNavigation=null,colleagueView=null,layout=null,pageFocus=null,pageActivity=null,router=null,runGuide=null,now=()=>Date.now()}={}){const state=reactive({open:false,minimised:false,surface:`courses`,attemptId:``,stepId:``,scroll:0,loading:false,error:``,actorKey:``,busy:``,hiddenBy:``,finished:false,notice:``,modeBusy:``,modeRead:false,trialAttemptId:``,beat:0,beatPaused:false,stepTextOpen:false});const lesson=shallowRef(null);const mode=shallowRef(null);const practice=shallowRef(EMPTY_PRACTICE);const confirmArchive=shallowRef(null);const colleagueRequest=shallowRef(null);const notes=shallowRef(null);const notesState=reactive({loading:false,saving:false,error:``});const pending=new Map;const exerciseObservations=new Set;let viewer=0;let reads=0;let modeReads=0;let modeLoad=null;let practiceReads=0;let saveTimer=null;let lastSaved=``;let finishRun=null;let lessonLoad=null;function pendingRequestId(key){const requestId=pending.get(key)||globalThis.crypto.randomUUID();pending.set(key,requestId);return requestId}async function request(url,options={}){if(requestOverride)return requestOverride(url,options);return getHttpWebClient().request(resolveStudioRequestUrl(url),options)}const learnMode=computed(()=>Boolean(state.actorKey&&mode.value?.on));const results=computed(()=>lesson.value?.results||[]);const steps=computed(()=>lesson.value?.steps||[]);const currentStep=computed(()=>steps.value.find(step=>step.id===state.stepId)||steps.value[0]||null);const focus=computed(()=>({learningOpen:state.open,learningSurface:state.surface,...state.attemptId?{learningAttemptId:state.attemptId}:{},...state.attemptId&¤tStep.value?{learningStepId:currentStep.value.id}:{}}));const complete=computed(()=>Boolean(lesson.value?.schemaVersion===2&&steps.value.length&&steps.value.filter(step=>step.required).every(step=>stepStatus(results.value,step.id,lesson.value.passedStepIds)===`passed`)));const lessonAttemptId=computed(()=>state.finished?state.attemptId:state.trialAttemptId||mode.value?.currentAttemptId||``);const stepBarVisible=computed(()=>Boolean(learnMode.value&&!state.finished&&lessonAttemptId.value&&state.attemptId===lessonAttemptId.value&¤tStep.value));const aiRequired=computed(()=>!lesson.value?.attempt?.ended&&lesson.value?.attempt?.preparation?.failure?.code===`VIBE64_TRAINING_PRACTICE_AI_REQUIRED`);const player=createLessonPlayer({state,steps,currentStep,selectStep:(...value)=>selectStep(...value),remember:()=>remember(),active:()=>stepBarVisible.value&&!lesson.value?.attempt?.ended&&!aiRequired.value,activity:pageActivity,focus:()=>pageFocus?.value?{...pageFocus.value,chatVisible:Boolean(layout?.value?.chatVisible)}:null,practiceSlug:()=>lesson.value?.practiceProjectSlug||``,allDone:stepId=>{if(steps.value.find(value=>value.id===stepId)?.check?.kind===`self`&&stepStatus(results.value,stepId,lesson.value?.passedStepIds)!==`passed`)done(stepId)}});function remember(){if(!state.actorKey)return;writeJson(`sessionStorage`,`${STORAGE_PREFIX}${state.actorKey}`,{surface:state.surface,attemptId:state.attemptId,stepId:state.stepId,scroll:state.scroll,trialAttemptId:state.trialAttemptId,beat:state.beat,beatPaused:state.beatPaused,stepTextOpen:state.stepTextOpen})}function setViewer(actorKey){const next=String(actorKey||``);if(next===state.actorKey)return;viewer+=1;reads+=1;modeReads+=1;practiceReads+=1;clearTimeout(saveTimer);pending.clear();exerciseObservations.clear();lesson.value=null;mode.value=null;practice.value=EMPTY_PRACTICE;confirmArchive.value=null;colleagueRequest.value=null;notes.value=null;Object.assign(notesState,{loading:false,saving:false,error:``});Object.assign(state,{open:false,minimised:false,surface:`courses`,attemptId:``,stepId:``,scroll:0,loading:false,error:``,busy:``,hiddenBy:``,finished:false,notice:``,modeBusy:``,modeRead:false,trialAttemptId:``,beat:0,beatPaused:false,stepTextOpen:false,actorKey:next});finishRun=null;const place=next?readPlace(next):null;if(place)Object.assign(state,place);if(state.attemptId)loadLesson();if(next)readLearningMode()}function acceptMode(value){mode.value=value;state.modeRead=true;const current=state.trialAttemptId||value?.currentAttemptId||``;if(!value||state.finished||current===state.attemptId)return;selectAttempt(current);remember();if(current)loadLesson()}async function readLearningMode(){if(!state.actorKey)return null;const expected=++modeReads;let value=null;const load=request(VIBE64_LEARNING_ROUTES.learningMode,{method:`GET`});modeLoad=load;try{value=normalizeLearningMode(await load)}catch{value=null}finally{if(modeLoad===load)modeLoad=null}if(expected!==modeReads)return mode.value;acceptMode(value);return value}async function modeWith(attemptId){if(modeLoad)await modeLoad.catch(()=>null);await Promise.resolve();return mode.value?.on&&mode.value.currentAttemptId===attemptId?mode.value:readLearningMode()}function currentPath(){return String(router?.currentRoute?.value?.fullPath||``)}function readModePlace(side){const path=readJson(`localStorage`,modePlaceKey(state.actorKey,side))?.path;return text$2(path)&&path.startsWith(`/app`)?path:``}function modePlace(value=mode.value){const saved=readModePlace(modeSide(value?.on));const pathname=saved.split(/[?#]/u)[0];if(saved&&!modeRedirect({mode:value,slug:projectSlugFromPathname(pathname),path:pathname}))return saved;return value?.on?learnHomePath(value):DEVELOP_HOME_PATH}async function setMode(on){if(!state.actorKey||state.modeBusy)return null;const expected=viewer;const path=currentPath();if(path.startsWith(`/app`))writeJson(`localStorage`,modePlaceKey(state.actorKey,modeSide(learnMode.value)),{path});state.modeBusy=`set`;state.error=``;try{const value=normalizeLearningMode(await request(VIBE64_LEARNING_ROUTES.learningMode,{method:`POST`,body:{on:on===true}}));if(!value)throw new Error(`The switch was not confirmed. Press L again.`);if(expected!==viewer)return null;modeReads+=1;acceptMode(value);if(!value.on)minimise();const target=modePlace(value);if(router&&target!==path)await router.push(target);if(value.on&&!value.currentAttemptId)openCourses(`courses`);pageActivity?.report(`learn-toggled`,{projectSlug:projectSlugFromPathname(currentPath())});return value}catch(cause){if(expected===viewer)state.error=String(cause?.message||`The switch was not confirmed. Press L again.`);return null}finally{if(state.modeBusy===`set`)state.modeBusy=``}}const toggleMode=()=>setMode(!learnMode.value);function selectAttempt(attemptId,stepId=``){lesson.value=null;state.attemptId=attemptId;state.stepId=text$2(stepId)?stepId:``;state.scroll=0;state.beat=0;lastSaved=``}function showNotice(value){state.notice=String(value||``)}function clearNotice(){state.notice=``}async function readAllPages(attemptId){const first=await request(VIBE64_LEARNING_ROUTES.lessonRead(attemptId),{method:`GET`});const count=Number.isSafeInteger(first?.page?.count)?Math.min(first.page.count,32):1;const steps=Array.isArray(first?.lesson?.steps)?first.lesson.steps:null;if(count<=1||!steps)return first;const bodies=new Map;for(let index=1;index<count;index++){const page=await request(`${VIBE64_LEARNING_ROUTES.lessonRead(attemptId)}?page=${index}`,{method:`GET`});for(const step of page?.lesson?.steps||[])if(typeof step?.bodyText===`string`)bodies.set(step.id,step.bodyText)}return{...first,lesson:{...first.lesson,steps:steps.map(step=>typeof step?.bodyText===`string`||!bodies.has(step?.id)?step:{...step,bodyText:bodies.get(step.id)})}}}function loadLesson(attemptId=state.attemptId){lessonLoad=readLesson(attemptId);return lessonLoad}async function readLesson(attemptId){if(!attemptId||!state.actorKey)return null;const expected=++reads;state.loading=true;state.error=``;try{const result=await readAllPages(attemptId);if(expected!==reads||attemptId!==state.attemptId)return null;const value=normalizeLesson(result);if(!value)throw new Error(result?.error||`This lesson could not be read. Refresh and try again.`);lesson.value=value;const known=id=>value.steps.some(step=>step.id===id);if(!known(state.stepId)){const saved=value.reader?.attemptId===void 0||value.reader?.attemptId===attemptId?value.reader:null;const passed=step=>stepStatus(value.results,step.id,value.passedStepIds)===`passed`;const unpassed=value.steps.some(passed)?value.steps.find(step=>step.required&&!passed(step)):null;state.stepId=saved&&known(saved.stepId)?saved.stepId:(unpassed||value.steps[0])?.id||``;state.scroll=saved&&known(saved.stepId)&&Number.isSafeInteger(saved.scroll)?saved.scroll:0;state.beat=0}remember();return value}catch(cause){if(expected===reads)state.error=String(cause?.message||`This lesson could not be read.`);return null}finally{if(expected===reads)state.loading=false}}async function show({surface,attemptId,stepId}={}){if(!state.actorKey)throw new Error(`Sign in before opening Courses.`);if(text$2(attemptId)||text$2(stepId))return openLesson({attemptId,stepId});state.open=true;state.minimised=false;state.hiddenBy=``;if(SURFACES.includes(surface))state.surface=surface;if(state.finished){state.finished=false;if(mode.value)acceptMode(mode.value)}remember();if(state.surface===`progress`||state.surface===`archived`)readPractice();return focus.value}const openCourses=surface=>show({surface});async function openLesson({attemptId,stepId}={}){if(!state.actorKey)throw new Error(`Sign in before opening a lesson.`);let value=state.modeRead?mode.value:await readLearningMode();if(!value?.on)value=await setMode(true);if(!value?.on)return null;minimise();const changed=text$2(attemptId)&&attemptId!==state.attemptId;if(text$2(attemptId)&&attemptId!==state.trialAttemptId)state.trialAttemptId=``;if(changed){state.finished=false;selectAttempt(attemptId,stepId)}else if(text$2(stepId)&&stepId!==state.stepId){if(steps.value.length)selectStep(stepId);else Object.assign(state,{stepId,beat:0})}remember();const target=`${learnHomePath(value)}?pane=lesson`;if(router&¤tPath()!==target)await router.push(target);await nextTick$1();layout?.value?.showProject?.();if(changed||!lesson.value&&!state.loading)await loadLesson();else if(!lesson.value)await lessonLoad;return focus.value}function minimise(by=``){if(!state.open)return;state.hiddenBy=by===`learner`?`learner`:``;state.open=false;state.minimised=true;flushReader()}const closeCourses=()=>minimise(`learner`);function setStepText(open){state.stepTextOpen=open===true;remember()}async function showFinished(){if(!state.attemptId)return null;state.finished=Boolean(complete.value);return openLesson()}function finishedBy(before,attemptId){if(!before&&complete.value&&attemptId===state.attemptId)showFinished().catch(()=>{})}function selectStep(stepId,beat=0){if(!steps.value.some(step=>step.id===stepId)||stepId===state.stepId)return;state.stepId=stepId;state.scroll=0;state.beat=beat;remember();scheduleReaderSave()}function setScroll(scroll){const value=Math.max(0,Math.round(Number(scroll)||0));if(value===state.scroll)return;state.scroll=value;remember();scheduleReaderSave()}function scheduleReaderSave(){clearTimeout(saveTimer);saveTimer=setTimeout(flushReader,READER_SAVE_DELAY_MS)}function flushReader(){clearTimeout(saveTimer);saveTimer=null;if(!state.actorKey||!state.attemptId||!state.stepId||lesson.value?.attempt?.ended)return null;const body={stepId:state.stepId,scroll:state.scroll};const key=JSON.stringify([state.attemptId,body]);if(key===lastSaved)return null;lastSaved=key;return Promise.resolve(request(VIBE64_LEARNING_ROUTES.readerSave(state.attemptId),{method:`POST`,body})).catch(()=>{if(lastSaved===key)lastSaved=``})}async function stepAction(kind,route,stepId,extra={}){if(!state.attemptId||state.busy)return null;const attemptId=state.attemptId;const key=JSON.stringify([attemptId,kind,stepId,extra]);const requestId=pendingRequestId(key);const expected=viewer;const before=complete.value;state.busy=`${kind}:${stepId}`;state.error=``;try{const result=await request(route(attemptId),{method:`POST`,body:{stepId,...extra,requestId}});if(result?.ok===false)throw new Error(result.error||`The step result was not confirmed. Try again.`);pending.delete(key);if(expected===viewer&&attemptId===state.attemptId){await loadLesson(attemptId);finishedBy(before,attemptId)}return result}catch(cause){if(expected===viewer)state.error=String(cause?.message||`The step result was not confirmed. Try again.`);return null}finally{if(state.busy===`${kind}:${stepId}`)state.busy=``}}function exerciseStep(projectSlug){const value=lesson.value;const step=currentStep.value;const attempt=value?.attempt;if(!state.actorKey||!state.attemptId||state.open||!text$2(projectSlug)||value?.schemaVersion!==2||attempt?.attemptId!==state.attemptId||attempt.ended||attempt.preparation?.phase!==`ready`||value.practiceProjectSlug!==projectSlug||step?.check?.kind!==`auto`||step.check.files?.length)return null;return{attemptId:state.attemptId,stepId:step.id}}function beginExercise(projectSlug){const target=exerciseStep(projectSlug);if(!target||exerciseObservations.size>=MAX_EXERCISE_OBSERVATIONS)return null;return Object.freeze({...target,projectSlug,actorKey:state.actorKey,viewer})}function exerciseCurrent(ticket){const target=ticket&&ticket.viewer===viewer&&ticket.actorKey===state.actorKey?exerciseStep(ticket.projectSlug):null;return Boolean(target&&target.attemptId===ticket.attemptId&&target.stepId===ticket.stepId)}async function finishExercise(ticket,{sessionId,instanceId,interactionId,requestId}={}){if(!exerciseCurrent(ticket)||!text$2(sessionId)||exerciseObservations.has(requestId))return null;exerciseObservations.add(requestId);const expected=viewer;const before=complete.value;try{const result=await request(VIBE64_LEARNING_ROUTES.stepObserve(ticket.attemptId),{method:`POST`,body:{stepId:ticket.stepId,observation:{control:`exercise-response`,exercise:{instanceId,interactionId,requestId},workspace:{projectSlug:ticket.projectSlug,sessionId,projectVisible:true,pane:`preview`,ready:true}}}});if(result?.ok===false)throw new Error(result.error||`The App press was not recorded. Press the App's button again.`);if(expected===viewer&&ticket.attemptId===state.attemptId){await loadLesson(ticket.attemptId);finishedBy(before,ticket.attemptId)}return result}catch(cause){if(expected===viewer)state.error=String(cause?.message||`The App press was not recorded. Press the App's button again.`);return null}finally{exerciseObservations.delete(requestId)}}function prepareExercise(projectSlug){if(!text$2(projectSlug)||!state.actorKey||!state.attemptId||lesson.value||state.loading)return null;return loadLesson(state.attemptId)}const runCheck=stepId=>stepAction(`check`,VIBE64_LEARNING_ROUTES.stepCheck,stepId);const answer=(stepId,selected)=>stepAction(`answer`,VIBE64_LEARNING_ROUTES.stepAnswer,stepId,{selected:[...selected].map(Number).sort((left,right)=>left-right)});const done=stepId=>stepAction(`done`,VIBE64_LEARNING_ROUTES.stepDone,stepId);const review=stepId=>stepAction(`review`,VIBE64_LEARNING_ROUTES.stepReview,stepId);const savedReview=stepId=>results.value.filter(result=>result?.stepId===stepId&&result.review).at(-1)||null;async function showMe(stepId=currentStep.value?.id){const step=steps.value.find(value=>value.id===stepId);if(state.stepTextOpen)setStepText(false);if(step?.beats?.length){minimise();player.start(stepId);return{beats:true}}if(!step?.guide)throw new Error(`This step has nothing to show.`);minimise();return goTo(step.guide)}async function goTo(guide){let command=showMeCommand(guide,{projectSlug:lesson.value?.practiceProjectSlug||``});const navigator=browserNavigation?.value||null;if(navigator&&command.databaseView){if(!selectedSession(command.projectSlug)){await navigator({projectSlug:command.projectSlug});await waitForProjectView(command.projectSlug,selectedSession)}const sessionId=selectedSession(command.projectSlug);if(sessionId)command={...command,sessionId}}const navigateBrowser=navigator&&command.guide.filePath?async navigation=>{const focus=await navigator(navigation);await waitForProjectView(command.projectSlug);return focus}:navigator;return(runGuide||runTrainingGuideCommand)(command,{navigateBrowser,view:{openFile(path){const handle=projectView(command.projectSlug);return handle?handle.openFile(path)===true:false}}})}function projectView(projectSlug){const handle=colleagueView?.value;return projectSlug&&handle?.projectSlug===projectSlug&&handle.ready!==false&&typeof handle.openFile===`function`?handle:null}function selectedSession(projectSlug){const handle=colleagueView?.value;return projectSlug&&handle?.projectSlug===projectSlug&&text$2(handle.sessionId)?handle.sessionId:``}async function waitForProjectView(projectSlug,published=projectView){const deadline=now()+PROJECT_VIEW_WAIT_MS;while(!published(projectSlug)&&now()<deadline)await new Promise(resolve=>setTimeout(resolve,50))}function teachMe(stepId=currentStep.value?.id){if(!state.attemptId||!stepId)throw new Error(`Open a lesson step before asking Colleague to teach it.`);selectStep(stepId);colleagueRequest.value=Object.freeze({id:`teach-${now()}-${Math.random().toString(36).slice(2,8)}`,kind:`teach`,message:VIBE64_LEARNING_TEACH_MESSAGE,actorKey:state.actorKey,attemptId:state.attemptId,stepId});return colleagueRequest.value}function doItForMeKind(beat=player.beat.value){if(beat?.kind!==`do`)return``;if(beat.target===`send-message`)return`send`;if(beat.target===`file-opened`)return beat.path?`navigate`:``;if([`agent-finished`,`app-pressed`,`colleague-minimised`].includes(beat.target))return``;if(beat.target===`learning`)return`point`;if([`chat`,`courses`,`colleague`,`lesson`,`reload-preview`].includes(beat.target))return beat.target;const place=TRAINING_GUIDE_PLACES[beat.target];return place&&!place.pointOnly&&place.project!==false?`navigate`:`point`}async function doItForMe(){const beat=player.beat.value;const kind=doItForMeKind(beat);const projectSlug=lesson.value?.practiceProjectSlug||``;if(kind===`send`){const view=colleagueView?.value;if(!projectSlug||view?.projectSlug!==projectSlug||typeof view.sendLessonMessage!==`function`)return false;return await view.sendLessonMessage(beat.prompt)===true}if(kind===`navigate`)return goTo({target:beat.target===`file-opened`?`files`:beat.target,navigate:true,...beat.path?{filePath:beat.path}:{}});if(kind===`chat`){layout?.value?.showChat?.();await nextTick$1();globalThis.document?.querySelector?.(`[data-vibe64-guide="chat"] textarea`)?.focus();return true}if(kind===`courses`)return show();if(kind===`lesson`)return openLesson({stepId:currentStep.value?.id});if(kind===`colleague`){colleagueRequest.value=Object.freeze({id:`open-${now()}-${Math.random().toString(36).slice(2,8)}`,kind:`open`,actorKey:state.actorKey,attemptId:state.attemptId,stepId:currentStep.value?.id||``});return true}if(kind===`reload-preview`){await goTo({target:`preview`,navigate:true});await nextTick$1();const reload=globalThis.document?.querySelector?.(`[data-vibe64-guide="reload-preview"]`);if(!reload)return false;reload.click();return true}if(kind===`point`)return player.point();return false}function stuck(stepId=currentStep.value?.id){if(!state.attemptId||!stepId)throw new Error(`Open a lesson step before asking Colleague for help.`);colleagueRequest.value=Object.freeze({id:`stuck-${now()}-${Math.random().toString(36).slice(2,8)}`,kind:`stuck`,message:VIBE64_LEARNING_STUCK_MESSAGE,actorKey:state.actorKey,attemptId:state.attemptId,stepId});return colleagueRequest.value}function consumeColleagueRequest(id){if(colleagueRequest.value?.id!==id)return null;const value=colleagueRequest.value;colleagueRequest.value=null;return value}const openCurrent=()=>openLesson();async function opened(outcome){if(!outcome?.attemptId||outcome.current===false)return outcome;const value=await modeWith(outcome.attemptId);state.trialAttemptId=value&&value.currentAttemptId!==outcome.attemptId?outcome.attemptId:``;await openLesson({attemptId:outcome.attemptId});readPractice();return outcome}function admitted(attemptId){minimise();(async()=>{if(modeLoad)await modeLoad.catch(()=>null);await Promise.resolve();if(mode.value?.on&&mode.value.currentAttemptId===attemptId)await openLesson({attemptId})})().catch(()=>{})}async function startLesson(selection,start){confirmArchive.value=null;try{return await opened(await start(selection,{onAdmitted:admitted}))}catch(cause){if(cause?.code!==`VIBE64_TRAINING_LESSON_IN_PROGRESS`)throw cause;confirmArchive.value=Object.freeze({next:selection,start,current:Object.freeze({attemptId:String(cause.details?.attemptId||mode.value?.currentAttemptId||``),lessonTitle:String(cause.details?.lessonTitle||mode.value?.lessonTitle||mode.value?.lessonCode||``)})});return null}}async function confirmArchiveAndStart(){const value=confirmArchive.value;if(!value)return null;confirmArchive.value=null;return opened(await value.start({...value.next,archiveCurrent:true},{onAdmitted:admitted}))}function cancelArchive(){confirmArchive.value=null}async function readRevision(){const result=await request(VIBE64_LEARNING_ROUTES.learning,{method:`GET`});if(result?.ok!==true||!Number.isSafeInteger(result.revision))throw new Error(result?.error||`Your saved lessons could not be read. Try again.`);return result.revision}async function attemptAction(kind,url,body=()=>({}),fallback=`The change was not confirmed. Try again.`){if(!state.actorKey||state.busy)return null;const expected=viewer;state.busy=kind;state.error=``;try{const result=await request(url,{method:`POST`,body:await body()});if(result?.ok!==true)throw new Error(result?.error||fallback);if(expected===viewer)await Promise.all([readLearningMode(),readPractice()]);return result}catch(cause){if(expected===viewer)state.error=String(cause?.message||fallback);return null}finally{if(state.busy===kind)state.busy=``}}const currentAttemptId=()=>mode.value?.currentAttemptId||``;function finish(){const attemptId=state.attemptId;if(!attemptId)return Promise.resolve(null);if(finishRun?.attemptId===attemptId)return finishRun.promise;const run={attemptId,promise:attemptAction(`finish`,VIBE64_LEARNING_ROUTES.lessonFinish(attemptId),async()=>({expectedRevision:await readRevision()}),`Finishing the lesson was not confirmed. Try again.`).then(result=>{if(finishRun===run&&!result)finishRun=null;if(result&&state.trialAttemptId===attemptId)state.trialAttemptId=``;return result})};finishRun=run;return run.promise}async function restart(){const attemptId=currentAttemptId();if(!attemptId)return null;const key=JSON.stringify([attemptId,`restart`]);const result=await attemptAction(`restart`,VIBE64_LEARNING_ROUTES.lessonRestart(attemptId),async()=>({requestId:pendingRequestId(key),expectedRevision:await readRevision()}),`Restarting the lesson was not confirmed. Try again.`);if(!result)return null;pending.delete(key);await opened({attemptId:mode.value?.currentAttemptId||result.active?.attemptId||``});return result}async function deleteAttempt(){const attemptId=currentAttemptId();if(!attemptId)return null;return attemptAction(`delete`,VIBE64_LEARNING_ROUTES.lessonDelete(attemptId),()=>({confirmed:true}),`Deleting the lesson was not confirmed. Try again.`)}const deleteArchived=attemptId=>attemptAction(`archive-delete:${attemptId}`,VIBE64_LEARNING_ROUTES.archiveDelete(attemptId),()=>({confirmed:true}),`Deleting the archived lesson was not confirmed. Try again.`);async function readPractice(){if(!state.actorKey)return null;const expected=++practiceReads;try{const value=normalizePractice(await request(VIBE64_LEARNING_ROUTES.practice,{method:`GET`}));if(expected===practiceReads)practice.value=value}catch(cause){if(expected===practiceReads)state.error=String(cause?.message||`Your lessons could not be read. Try again.`)}return practice.value}async function readNotes(){if(!state.actorKey)return null;const expected=viewer;notesState.loading=true;notesState.error=``;try{const result=await request(VIBE64_LEARNING_ROUTES.notes,{method:`GET`});if(result?.ok!==true||!result.notes)throw new Error(result?.error||`The notes could not be read.`);if(expected===viewer&&!(result.notes.revision<(notes.value?.revision??0)))notes.value=Object.freeze({...result.notes});return expected===viewer?notes.value:null}catch(cause){if(expected===viewer)notesState.error=String(cause?.message||`The notes could not be read.`);return null}finally{if(expected===viewer)notesState.loading=false}}async function writeNotes(kind,route,body){if(!state.actorKey||notesState.saving)return null;const expected=viewer;const expectedRevision=notes.value?.revision??0;const key=JSON.stringify([`notes`,kind,body.text??``,expectedRevision]);const requestId=pendingRequestId(key);notesState.saving=true;notesState.error=``;try{const result=await request(route,{method:`POST`,body:{...body,requestId,expectedRevision}});if(result?.ok!==true||!result.notes)throw new Error(result?.error||`The notes save was not confirmed. Try again.`);pending.delete(key);if(expected===viewer)notes.value=Object.freeze({...result.notes});return result}catch(cause){if(expected===viewer){notesState.error=String(cause?.message||`The notes save was not confirmed. Try again.`);if(cause?.code===`VIBE64_TRAINING_NOTES_CHANGED`){pending.delete(key);const message=notesState.error;await readNotes();notesState.error=message}}return null}finally{if(expected===viewer)notesState.saving=false}}function saveNotes(text){const value=String(text??``);if(!value||value.length>4e3){notesState.error=`Write between 1 and ${VIBE64_LEARNING_NOTES_MAX} characters, or clear the notes.`;return Promise.resolve(null)}return writeNotes(`update`,VIBE64_LEARNING_ROUTES.notes,{text:value})}const clearNotes=()=>writeNotes(`clear`,VIBE64_LEARNING_ROUTES.notesClear,{});function learnerChanged(payload={}){if(payload.reason===`notes`)return notes.value?readNotes():null;if(!state.actorKey)return null;if(payload.reason!==`steps`){readLearningMode();if(practice.value.loaded)readPractice()}if(state.attemptId&&(!payload.attemptId||payload.attemptId===state.attemptId)&&lesson.value)return loadLesson(state.attemptId);return null}return Object.freeze({state:readonly(state),get open(){return state.open},get coursesOpen(){return state.open},get minimised(){return state.minimised},get hiddenBy(){return state.hiddenBy},get surface(){return state.surface},get attemptId(){return state.attemptId},get stepId(){return currentStep.value?.id||``},get scroll(){return state.scroll},get complete(){return complete.value},get finished(){return state.finished},get mode(){return mode.value},get learnMode(){return learnMode.value},get lessonAttemptId(){return lessonAttemptId.value},get stepBarVisible(){return stepBarVisible.value},get aiRequired(){return aiRequired.value},get lessonTitle(){return mode.value?.currentAttemptId?mode.value.lessonTitle||mode.value.lessonCode||``:``},get practice(){return practice.value},get confirmArchive(){return confirmArchive.value},get stepTextOpen(){return state.stepTextOpen},get notice(){return state.notice},lesson,results,steps,currentStep,focus,colleagueRequest,notes,notesState:readonly(notesState),player,stepStatus:stepId=>stepStatus(results.value,stepId,lesson.value?.passedStepIds||[]),setViewer,show,openCourses,openLesson,closeCourses,showFinished,minimise,selectStep,setScroll,flushReader,loadLesson,runCheck,answer,done,review,savedReview,reviewNote,showMe,teachMe,stuck,doItForMe,doItForMeKind,consumeColleagueRequest,learnerChanged,exerciseStep,beginExercise,exerciseCurrent,finishExercise,prepareExercise,readNotes,saveNotes,clearNotes,readLearningMode,setMode,toggleMode,modePlace,openCurrent,setStepText,showNotice,clearNotice,startLesson,admitted,opened,confirmArchiveAndStart,cancelArchive,restart,finish,deleteAttempt,readPractice,deleteArchived})}function openLessonLink(event,browser=globalThis){const link=event?.target?.closest?.(`a[href]`);if(!link||event.defaultPrevented||event.button>0||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey)return false;let url;try{url=new URL(link.getAttribute(`href`),browser.location?.href)}catch{return false}if(!/^https?:$/u.test(url.protocol)||url.origin===browser.location?.origin)return false;event.preventDefault();browser.open?.(url.href,`_blank`,`noopener,noreferrer`);return true}function revealCurrentStep(list){const current=list?.querySelector?.(`[aria-current="step"]`);if(!current||!(list.scrollWidth>list.clientWidth))return false;const row=list.getBoundingClientRect();const item=current.getBoundingClientRect();if(item.left<row.left)list.scrollLeft-=row.left-item.left;else if(item.right>row.right)list.scrollLeft+=item.right-row.right;else return false;return true}function createPageActivity(){const listeners=new Set;return Object.freeze({report(name,detail={}){if(!TRAINING_BEAT_EVENTS.includes(name))throw new TypeError(`Unknown page activity: ${name}`);const event=Object.freeze({name,projectSlug:String(detail.projectSlug||``),sessionId:String(detail.sessionId||``),path:String(detail.path||``)});for(const listener of[...listeners])listener(event)},subscribe(listener){listeners.add(listener);return()=>listeners.delete(listener)}})}function usePageActivity(){const activity=inject$1(VIBE64_PAGE_ACTIVITY_KEY,null);return(name,detail)=>activity?.report(name,detail)}var _sfc_main$62={__name:`Vibe64AssistantShellContext`,props:{local:Boolean},setup(__props){if(__props.local)provide(VIBE64_ASSISTANT_VIEWER_KEY,Object.freeze({actorKey:`local`}));provide(VIBE64_ASSISTANT_HOST_KEY,shallowRef(null));const colleagueView=shallowRef(null);provide(VIBE64_COLLEAGUE_VIEW_KEY,colleagueView);provide(VIBE64_COLLEAGUE_PREVIEW_KEY,shallowRef(null));provide(VIBE64_COLLEAGUE_INTEGRATIONS_KEY,shallowRef(null));provide(VIBE64_COLLEAGUE_DATABASE_KEY,shallowRef(null));provide(VIBE64_COLLEAGUE_PLAN_KEY,shallowRef(null));const layout=shallowRef(null);provide(VIBE64_COLLEAGUE_LAYOUT_KEY,layout);const browserNavigation=shallowRef(null);provide(VIBE64_BROWSER_NAVIGATION_KEY,browserNavigation);const pageFocus=shallowRef(null);provide(VIBE64_PAGE_FOCUS_KEY,pageFocus);const pageActivity=createPageActivity();provide(VIBE64_PAGE_ACTIVITY_KEY,pageActivity);provide(VIBE64_LEARNING_KEY,createVibe64Learning({browserNavigation,colleagueView,layout,pageFocus,pageActivity,router:useRouter$1()}));provide(VIBE64_COLLEAGUE_LAUNCHER_KEY,shallowRef(null));return(_ctx,_cache)=>{return renderSlot(_ctx.$slots,`default`)}}};function projectConversationVoiceState({turns=[],status=`ready`,interimReply=null}={}){const messages=[];let streamingReply=null;for(const turn of turns){if(turn.user)messages.push({...turn.user,role:`user`,id:turn.user.messageId||`${turn.turnId}:user`});if(turn.assistant?.text){const reply={...turn.assistant,role:`assistant`,id:turn.assistant.outputId||`${turn.turnId}:assistant`};if(turn.pending||[`starting`,`inProgress`].includes(reply.status)){if(reply.origin===`application`)Object.assign(reply,{id:`${reply.id}:stream`,autonomous:true});streamingReply=reply}else messages.push(reply)}}return{messages,streamingReply:interimReply?{...interimReply,id:interimReply.outputId||interimReply.id}:streamingReply,status}}var VOICE_MAX_SYNTHESIS_TIMEOUT_MS=12e4;var VOICE_MAX_SPEECH_TEXT_CHARACTERS=4e3;var VOICE_MAX_SPEECH_CHUNK_CHARACTERS=280;var VOICE_SPEECH_EM_DASH_PAUSE_MS=140;var VOICE_SPEECH_SENTENCE_PAUSE_MS=220;var VOICE_SPEECH_LINE_PAUSE_MS=350;var VOICE_SPEECH_PARAGRAPH_PAUSE_MS=650;function speechTextFromAssistant(value=``,maximumCharacters=VOICE_MAX_SPEECH_TEXT_CHARACTERS){let omittedCode=false;let omittedTable=false;let text=String(value||``).slice(0,maximumCharacters*2);text=text.replace(/```([a-z0-9_-]*)[^\n]*\n[\s\S]*?```/giu,(_match,language)=>{omittedCode=true;return String(language||``).toLowerCase()===`sql`?` I put the SQL on screen. `:` I put the code on screen. `});text=text.replace(/(?:^|\n)\s*\|[^\n]+\|\s*(?=\n|$)/gu,()=>{omittedTable=true;return`
|
|
7
7
|
`});text=text.replace(/!\[[^\]]*\]\([^)]*\)/gu,` an image `).replace(/\[([^\]]+)\]\([^)]*\)/gu,`$1`).replace(/https?:\/\/\S+/giu,` a link `).replace(/`([^`\n]+)`/gu,`$1`).replace(/^[\t ]{0,3}#{1,6}[\t ]+/gmu,``);text=text.split(/\r?\n/u).map((line,index)=>{const marker=line.match(/^[\t ]*(?:[-*+]|\d+[.)])[\t ]+/u);return(index?marker?`
|
|
8
8
|
|
|
9
9
|
`:`
|
|
@@ -135,4 +135,4 @@ ${e}</tr>
|
|
|
135
135
|
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${O(e,!0)}</code>`}br(e){return`<br>`}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,text:n,tokens:s,autolink:r}){let o=r?O(n,!0):this.parser.parseInline(s),i=re$1(e);if(i===null)return o;e=O(i,r);let u=`<a href="`+e+`"`;return t&&(u+=` title="`+O(t)+`"`),u+=`>`+o+`</a>`,u}image({href:e,title:t,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let r=re$1(e);if(r===null)return O(n);e=r;let o=`<img src="${O(e)}" alt="${O(n)}"`;return t&&(o+=` title="${O(t)}"`),o+=`>`,o}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:O(e.text)}};var z=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return``+e}image({text:e}){return``+e}br(){return``}checkbox({raw:e}){return e}};var T=class l{options;renderer;textRenderer;constructor(e){this.options=e||y,this.options.renderer=this.options.renderer||new S,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new z}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e){this.renderer.parser=this;let t=``;for(let n=0;n<e.length;n++){let s=e[n];if(this.options.extensions?.renderers?.[s.type]){let o=s,i=this.options.extensions.renderers[o.type].call({parser:this},o);if(i!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`checkbox`,`html`,`def`,`paragraph`,`text`].includes(o.type)){t+=i||``;continue}}let r=s;switch(r.type){case`space`:t+=this.renderer.space(r);break;case`hr`:t+=this.renderer.hr(r);break;case`heading`:t+=this.renderer.heading(r);break;case`code`:t+=this.renderer.code(r);break;case`table`:t+=this.renderer.table(r);break;case`blockquote`:t+=this.renderer.blockquote(r);break;case`list`:t+=this.renderer.list(r);break;case`checkbox`:t+=this.renderer.checkbox(r);break;case`html`:t+=this.renderer.html(r);break;case`def`:t+=this.renderer.def(r);break;case`paragraph`:t+=this.renderer.paragraph(r);break;case`text`:t+=this.renderer.text(r);break;default:{let o=`Token with "`+r.type+`" type was not found.`;if(this.options.silent)return console.error(o),``;throw new Error(o)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=``;for(let s=0;s<e.length;s++){let r=e[s];if(this.options.extensions?.renderers?.[r.type]){let i=this.options.extensions.renderers[r.type].call({parser:this},r);if(i!==!1||![`escape`,`html`,`link`,`image`,`checkbox`,`strong`,`em`,`codespan`,`br`,`del`,`text`].includes(r.type)){n+=i||``;continue}}let o=r;switch(o.type){case`escape`:n+=t.text(o);break;case`html`:n+=t.html(o);break;case`link`:n+=t.link(o);break;case`image`:n+=t.image(o);break;case`checkbox`:n+=t.checkbox(o);break;case`strong`:n+=t.strong(o);break;case`em`:n+=t.em(o);break;case`codespan`:n+=t.codespan(o);break;case`br`:n+=t.br(o);break;case`del`:n+=t.del(o);break;case`text`:n+=t.text(o);break;default:{let i=`Token with "`+o.type+`" type was not found.`;if(this.options.silent)return console.error(i),``;throw new Error(i)}}}return n}};var _=class{options;block;constructor(e){this.options=e||y}static passThroughHooks=new Set([`preprocess`,`postprocess`,`processAllTokens`,`emStrongMask`]);static passThroughHooksRespectAsync=new Set([`preprocess`,`postprocess`,`processAllTokens`]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?R.lex:R.lexInline}provideParser(e=this.block){return e?T.parse:T.parseInline}};var F=class{defaults=I();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=T;Renderer=S;TextRenderer=z;Lexer=R;Tokenizer=P;Hooks=_;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let s of e)switch(n=n.concat(t.call(this,s)),s.type){case`table`:{let r=s;for(let o of r.header)n=n.concat(this.walkTokens(o.tokens,t));for(let o of r.rows)for(let i of o)n=n.concat(this.walkTokens(i.tokens,t));break}case`list`:{let r=s;n=n.concat(this.walkTokens(r.items,t));break}default:{let r=s;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(o=>{let i=r[o].flat(1/0);n=n.concat(this.walkTokens(i,t))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let s={...n};if(s.async=this.defaults.async||s.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error(`extension name required`);if(`renderer`in r){let o=t.renderers[r.name];o?t.renderers[r.name]=function(...i){let u=r.renderer.apply(this,i);return u===!1&&(u=o.apply(this,i)),u}:t.renderers[r.name]=r.renderer}if(`tokenizer`in r){if(!r.level||r.level!==`block`&&r.level!==`inline`)throw new Error(`extension level must be 'block' or 'inline'`);let o=t[r.level];o?o.unshift(r.tokenizer):t[r.level]=[r.tokenizer],r.start&&(r.level===`block`?t.startBlock?t.startBlock.push(r.start):t.startBlock=[r.start]:r.level===`inline`&&(t.startInline?t.startInline.push(r.start):t.startInline=[r.start]))}`childTokens`in r&&r.childTokens&&(t.childTokens[r.name]=r.childTokens)}),s.extensions=t),n.renderer){let r=this.defaults.renderer||new S(this.defaults);for(let o in n.renderer){if(!(o in r))throw new Error(`renderer '${o}' does not exist`);if([`options`,`parser`].includes(o))continue;let i=o,u=n.renderer[i],a=r[i];r[i]=(...p)=>{let c=u.apply(r,p);return c===!1&&(c=a.apply(r,p)),c||``}}s.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new P(this.defaults);for(let o in n.tokenizer){if(!(o in r))throw new Error(`tokenizer '${o}' does not exist`);if([`options`,`rules`,`lexer`].includes(o))continue;let i=o,u=n.tokenizer[i],a=r[i];r[i]=(...p)=>{let c=u.apply(r,p);return c===!1&&(c=a.apply(r,p)),c}}s.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new _;for(let o in n.hooks){if(!(o in r))throw new Error(`hook '${o}' does not exist`);if([`options`,`block`].includes(o))continue;let i=o,u=n.hooks[i],a=r[i];_.passThroughHooks.has(o)?r[i]=p=>{if(this.defaults.async&&_.passThroughHooksRespectAsync.has(o))return(async()=>{let d=await u.call(r,p);return a.call(r,d)})();let c=u.call(r,p);return a.call(r,c)}:r[i]=(...p)=>{if(this.defaults.async)return(async()=>{let d=await u.apply(r,p);return d===!1&&(d=await a.apply(r,p)),d})();let c=u.apply(r,p);return c===!1&&(c=a.apply(r,p)),c}}s.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,o=n.walkTokens;s.walkTokens=function(i){let u=[];return u.push(o.call(this,i)),r&&(u=u.concat(r.call(this,i))),u}}this.defaults={...this.defaults,...s}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return R.lex(e,t??this.defaults)}parser(e,t){return T.parse(e,t??this.defaults)}parseMarkdown(e){return(n,s)=>{let r={...s},o={...this.defaults,...r},i=this.onError(!!o.silent,!!o.async);if(this.defaults.async===!0&&r.async===!1)return i(new Error(`marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.`));if(typeof n>`u`||n===null)return i(new Error(`marked(): input parameter is undefined or null`));if(typeof n!=`string`)return i(new Error(`marked(): input parameter is of type `+Object.prototype.toString.call(n)+`, string expected`));if(o.hooks&&(o.hooks.options=o,o.hooks.block=e),o.async)return(async()=>{let u=o.hooks?await o.hooks.preprocess(n):n,p=await(o.hooks?await o.hooks.provideLexer(e):e?R.lex:R.lexInline)(u,o),c=o.hooks?await o.hooks.processAllTokens(p):p;o.walkTokens&&await Promise.all(this.walkTokens(c,o.walkTokens));let m=await(o.hooks?await o.hooks.provideParser(e):e?T.parse:T.parseInline)(c,o);return o.hooks?await o.hooks.postprocess(m):m})().catch(i);try{o.hooks&&(n=o.hooks.preprocess(n));let a=(o.hooks?o.hooks.provideLexer(e):e?R.lex:R.lexInline)(n,o);o.hooks&&(a=o.hooks.processAllTokens(a)),o.walkTokens&&this.walkTokens(a,o.walkTokens);let c=(o.hooks?o.hooks.provideParser(e):e?T.parse:T.parseInline)(a,o);return o.hooks&&(c=o.hooks.postprocess(c)),c}catch(u){return i(u)}}}onError(e,t){return n=>{if(n.message+=`
|
|
136
136
|
Please report this to https://github.com/markedjs/marked.`,e){let s=`<p>An error occurred:</p><pre>`+O(n.message+``,!0)+`</pre>`;return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}};var E=new F;function k(l,e){return E.parse(l,e)}k.options=k.setOptions=function(l){return E.setOptions(l),k.defaults=E.defaults,W(k.defaults),k};k.getDefaults=I;k.defaults=y;function Pt(...l){return E.use(...l),k.defaults=E.defaults,W(k.defaults),k}k.use=Pt;k.walkTokens=function(l,e){return E.walkTokens(l,e)};k.parseInline=E.parseInline;k.Parser=T;k.parser=T.parse;k.Renderer=S;k.TextRenderer=z;k.Lexer=R;k.lexer=R.lex;k.Tokenizer=P;k.Hooks=_;k.parse=k;var gn=k.options;var fn=k.setOptions;var mn=k.walkTokens;var xn=k.parseInline;var Rn=T.parse;var Tn=R.lex;function _OverloadYield(e,d){this.v=e,this.k=d}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _iterableToArrayLimit(r,l){var t=null==r?null:`undefined`!=typeof Symbol&&r[Symbol.iterator]||r[`@@iterator`];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t.return&&(u=t.return(),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _nonIterableRest(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
137
137
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _unsupportedIterableToArray(r,a){if(r){if(`string`==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return`Object`===t&&r.constructor&&(t=r.constructor.name),`Map`===t||`Set`===t?Array.from(r):`Arguments`===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function AsyncGenerator(e){var t,n;function resume(t,n){try{var r=e[t](n),o=r.value,u=o instanceof _OverloadYield;Promise.resolve(u?o.v:o).then(function(n){if(u){var i=`return`===t&&o.k?t:`next`;if(!o.k||n.done)return resume(i,n);n=e[i](n).value}settle(!!r.done,n)},function(e){resume(`throw`,e)})}catch(e){settle(2,e)}}function settle(e,r){2===e?t.reject(r):t.resolve({value:r,done:e}),(t=t.next)?resume(t.key,t.arg):n=null}this._invoke=function(e,r){return new Promise(function(o,u){var i={key:e,arg:r,resolve:o,reject:u,next:null};n?n=n.next=i:(t=n=i,resume(e,r))})},`function`!=typeof e.return&&(this.return=void 0)}AsyncGenerator.prototype[`function`==typeof Symbol&&Symbol.asyncIterator||`@@asyncIterator`]=function(){return this},AsyncGenerator.prototype.next=function(e){return this._invoke(`next`,e)},AsyncGenerator.prototype.throw=function(e){return this._invoke(`throw`,e)},AsyncGenerator.prototype.return=function(e){return this._invoke(`return`,e)};var entries=Object.entries;var setPrototypeOf=Object.setPrototypeOf;var isFrozen=Object.isFrozen;var getPrototypeOf=Object.getPrototypeOf;var getOwnPropertyDescriptor=Object.getOwnPropertyDescriptor;var freeze=Object.freeze;var seal=Object.seal;var create=Object.create;var _ref=typeof Reflect!==`undefined`&&Reflect;var apply=_ref.apply;var construct=_ref.construct;if(!freeze)freeze=function freeze(x){return x};if(!seal)seal=function seal(x){return x};if(!apply)apply=function apply(func,thisArg){for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return func.apply(thisArg,args)};if(!construct)construct=function construct(Func){for(var _len2=arguments.length,args=new Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++)args[_key2-1]=arguments[_key2];return new Func(...args)};var arrayForEach=unapply(Array.prototype.forEach);Array.prototype.indexOf;var arrayLastIndexOf=unapply(Array.prototype.lastIndexOf);var arrayPop=unapply(Array.prototype.pop);var arrayPush=unapply(Array.prototype.push);Array.prototype.slice;var arraySplice=unapply(Array.prototype.splice);var arrayIsArray=Array.isArray;var stringToLowerCase=unapply(String.prototype.toLowerCase);var stringToString=unapply(String.prototype.toString);var stringMatch=unapply(String.prototype.match);var stringReplace=unapply(String.prototype.replace);var stringIndexOf=unapply(String.prototype.indexOf);var stringTrim=unapply(String.prototype.trim);var numberToString=unapply(Number.prototype.toString);var booleanToString=unapply(Boolean.prototype.toString);var bigintToString=typeof BigInt===`undefined`?null:unapply(BigInt.prototype.toString);var symbolToString=typeof Symbol===`undefined`?null:unapply(Symbol.prototype.toString);var objectHasOwnProperty=unapply(Object.prototype.hasOwnProperty);var objectToString=unapply(Object.prototype.toString);var regExpTest=unapply(RegExp.prototype.test);var typeErrorCreate=unconstruct(TypeError);function unapply(func){return function(thisArg){if(thisArg instanceof RegExp)thisArg.lastIndex=0;for(var _len3=arguments.length,args=new Array(_len3>1?_len3-1:0),_key3=1;_key3<_len3;_key3++)args[_key3-1]=arguments[_key3];return apply(func,thisArg,args)}}function unconstruct(Func){return function(){for(var _len4=arguments.length,args=new Array(_len4),_key4=0;_key4<_len4;_key4++)args[_key4]=arguments[_key4];return construct(Func,args)}}function addToSet(set,array){let transformCaseFunc=arguments.length>2&&arguments[2]!==void 0?arguments[2]:stringToLowerCase;if(setPrototypeOf)setPrototypeOf(set,null);if(!arrayIsArray(array))return set;let l=array.length;while(l--){let element=array[l];if(typeof element===`string`){const lcElement=transformCaseFunc(element);if(lcElement!==element){if(!isFrozen(array))array[l]=lcElement;element=lcElement}}set[element]=true}return set}function cleanArray(array){for(let index=0;index<array.length;index++)if(!objectHasOwnProperty(array,index))array[index]=null;return array}function clone(object){const newObject=create(null);for(const _ref2 of entries(object)){var _ref3=_slicedToArray(_ref2,2);const property=_ref3[0];const value=_ref3[1];if(objectHasOwnProperty(object,property)){if(arrayIsArray(value))newObject[property]=cleanArray(value);else if(value&&typeof value===`object`&&value.constructor===Object)newObject[property]=clone(value);else newObject[property]=value}}return newObject}function stringifyValue(value){switch(typeof value){case`string`:return value;case`number`:return numberToString(value);case`boolean`:return booleanToString(value);case`bigint`:return bigintToString?bigintToString(value):`0`;case`symbol`:return symbolToString?symbolToString(value):`Symbol()`;case`undefined`:return objectToString(value);case`function`:case`object`:{if(value===null)return objectToString(value);const valueAsRecord=value;const valueToString=lookupGetter(valueAsRecord,`toString`);if(typeof valueToString===`function`){const stringified=valueToString(valueAsRecord);return typeof stringified===`string`?stringified:objectToString(stringified)}return objectToString(value)}default:return objectToString(value)}}function lookupGetter(object,prop){while(object!==null){const desc=getOwnPropertyDescriptor(object,prop);if(desc){if(desc.get)return unapply(desc.get);if(typeof desc.value===`function`)return unapply(desc.value)}object=getPrototypeOf(object)}function fallbackValue(){return null}return fallbackValue}function isRegex(value){try{regExpTest(value,``);return true}catch(_unused){return false}}var html$1=freeze([`a`,`abbr`,`acronym`,`address`,`area`,`article`,`aside`,`audio`,`b`,`bdi`,`bdo`,`big`,`blink`,`blockquote`,`body`,`br`,`button`,`canvas`,`caption`,`center`,`cite`,`code`,`col`,`colgroup`,`content`,`data`,`datalist`,`dd`,`decorator`,`del`,`details`,`dfn`,`dialog`,`dir`,`div`,`dl`,`dt`,`element`,`em`,`fieldset`,`figcaption`,`figure`,`font`,`footer`,`form`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`head`,`header`,`hgroup`,`hr`,`html`,`i`,`img`,`input`,`ins`,`kbd`,`label`,`legend`,`li`,`main`,`map`,`mark`,`marquee`,`menu`,`menuitem`,`meter`,`nav`,`nobr`,`ol`,`optgroup`,`option`,`output`,`p`,`picture`,`pre`,`progress`,`q`,`rp`,`rt`,`ruby`,`s`,`samp`,`search`,`section`,`select`,`shadow`,`slot`,`small`,`source`,`spacer`,`span`,`strike`,`strong`,`style`,`sub`,`summary`,`sup`,`table`,`tbody`,`td`,`template`,`textarea`,`tfoot`,`th`,`thead`,`time`,`tr`,`track`,`tt`,`u`,`ul`,`var`,`video`,`wbr`]);var svg$1=freeze([`svg`,`a`,`altglyph`,`altglyphdef`,`altglyphitem`,`animatecolor`,`animatemotion`,`animatetransform`,`circle`,`clippath`,`defs`,`desc`,`ellipse`,`enterkeyhint`,`exportparts`,`filter`,`font`,`g`,`glyph`,`glyphref`,`hkern`,`image`,`inputmode`,`line`,`lineargradient`,`marker`,`mask`,`metadata`,`mpath`,`part`,`path`,`pattern`,`polygon`,`polyline`,`radialgradient`,`rect`,`stop`,`style`,`switch`,`symbol`,`text`,`textpath`,`title`,`tref`,`tspan`,`view`,`vkern`]);var svgFilters=freeze([`feBlend`,`feColorMatrix`,`feComponentTransfer`,`feComposite`,`feConvolveMatrix`,`feDiffuseLighting`,`feDisplacementMap`,`feDistantLight`,`feDropShadow`,`feFlood`,`feFuncA`,`feFuncB`,`feFuncG`,`feFuncR`,`feGaussianBlur`,`feImage`,`feMerge`,`feMergeNode`,`feMorphology`,`feOffset`,`fePointLight`,`feSpecularLighting`,`feSpotLight`,`feTile`,`feTurbulence`]);var svgDisallowed=freeze([`animate`,`color-profile`,`cursor`,`discard`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`foreignobject`,`hatch`,`hatchpath`,`mesh`,`meshgradient`,`meshpatch`,`meshrow`,`missing-glyph`,`script`,`set`,`solidcolor`,`unknown`,`use`]);var mathMl$1=freeze([`math`,`menclose`,`merror`,`mfenced`,`mfrac`,`mglyph`,`mi`,`mlabeledtr`,`mmultiscripts`,`mn`,`mo`,`mover`,`mpadded`,`mphantom`,`mroot`,`mrow`,`ms`,`mspace`,`msqrt`,`mstyle`,`msub`,`msup`,`msubsup`,`mtable`,`mtd`,`mtext`,`mtr`,`munder`,`munderover`,`mprescripts`]);var mathMlDisallowed=freeze([`maction`,`maligngroup`,`malignmark`,`mlongdiv`,`mscarries`,`mscarry`,`msgroup`,`mstack`,`msline`,`msrow`,`semantics`,`annotation`,`annotation-xml`,`mprescripts`,`none`]);var text=freeze([`#text`]);var html=freeze([`accept`,`action`,`align`,`alt`,`autocapitalize`,`autocomplete`,`autopictureinpicture`,`autoplay`,`background`,`bgcolor`,`border`,`capture`,`cellpadding`,`cellspacing`,`checked`,`cite`,`class`,`clear`,`color`,`cols`,`colspan`,`command`,`commandfor`,`controls`,`controlslist`,`coords`,`crossorigin`,`datetime`,`decoding`,`default`,`dir`,`disabled`,`disablepictureinpicture`,`disableremoteplayback`,`download`,`draggable`,`enctype`,`enterkeyhint`,`exportparts`,`face`,`for`,`headers`,`height`,`hidden`,`high`,`href`,`hreflang`,`id`,`inert`,`inputmode`,`integrity`,`ismap`,`kind`,`label`,`lang`,`list`,`loading`,`loop`,`low`,`max`,`maxlength`,`media`,`method`,`min`,`minlength`,`multiple`,`muted`,`name`,`nonce`,`noshade`,`novalidate`,`nowrap`,`open`,`optimum`,`part`,`pattern`,`placeholder`,`playsinline`,`popover`,`popovertarget`,`popovertargetaction`,`poster`,`preload`,`pubdate`,`radiogroup`,`readonly`,`rel`,`required`,`rev`,`reversed`,`role`,`rows`,`rowspan`,`spellcheck`,`scope`,`selected`,`shape`,`size`,`sizes`,`slot`,`span`,`srclang`,`start`,`src`,`srcset`,`step`,`style`,`summary`,`tabindex`,`title`,`translate`,`type`,`usemap`,`valign`,`value`,`width`,`wrap`,`xmlns`]);var svg=freeze([`accent-height`,`accumulate`,`additive`,`alignment-baseline`,`amplitude`,`ascent`,`attributename`,`attributetype`,`azimuth`,`basefrequency`,`baseline-shift`,`begin`,`bias`,`by`,`class`,`clip`,`clippathunits`,`clip-path`,`clip-rule`,`color`,`color-interpolation`,`color-interpolation-filters`,`color-profile`,`color-rendering`,`cx`,`cy`,`d`,`dx`,`dy`,`diffuseconstant`,`direction`,`display`,`divisor`,`dominant-baseline`,`dur`,`edgemode`,`elevation`,`end`,`exponent`,`fill`,`fill-opacity`,`fill-rule`,`filter`,`filterunits`,`flood-color`,`flood-opacity`,`font-family`,`font-size`,`font-size-adjust`,`font-stretch`,`font-style`,`font-variant`,`font-weight`,`fx`,`fy`,`g1`,`g2`,`glyph-name`,`glyphref`,`gradientunits`,`gradienttransform`,`height`,`href`,`id`,`image-rendering`,`in`,`in2`,`intercept`,`k`,`k1`,`k2`,`k3`,`k4`,`kerning`,`keypoints`,`keysplines`,`keytimes`,`lang`,`lengthadjust`,`letter-spacing`,`kernelmatrix`,`kernelunitlength`,`lighting-color`,`local`,`marker-end`,`marker-mid`,`marker-start`,`markerheight`,`markerunits`,`markerwidth`,`maskcontentunits`,`maskunits`,`max`,`mask`,`mask-type`,`media`,`method`,`mode`,`min`,`name`,`numoctaves`,`offset`,`operator`,`opacity`,`order`,`orient`,`orientation`,`origin`,`overflow`,`paint-order`,`path`,`pathlength`,`patterncontentunits`,`patterntransform`,`patternunits`,`pointer-events`,`points`,`preservealpha`,`preserveaspectratio`,`primitiveunits`,`r`,`rx`,`ry`,`radius`,`refx`,`refy`,`repeatcount`,`repeatdur`,`restart`,`result`,`rotate`,`scale`,`seed`,`shape-rendering`,`slope`,`specularconstant`,`specularexponent`,`spreadmethod`,`startoffset`,`stddeviation`,`stitchtiles`,`stop-color`,`stop-opacity`,`stroke-dasharray`,`stroke-dashoffset`,`stroke-linecap`,`stroke-linejoin`,`stroke-miterlimit`,`stroke-opacity`,`stroke`,`stroke-width`,`style`,`surfacescale`,`systemlanguage`,`tabindex`,`tablevalues`,`targetx`,`targety`,`transform`,`transform-origin`,`text-anchor`,`text-decoration`,`text-orientation`,`text-rendering`,`textlength`,`type`,`u1`,`u2`,`unicode`,`values`,`vector-effect`,`viewbox`,`visibility`,`version`,`vert-adv-y`,`vert-origin-x`,`vert-origin-y`,`width`,`word-spacing`,`wrap`,`writing-mode`,`xchannelselector`,`ychannelselector`,`x`,`x1`,`x2`,`xmlns`,`y`,`y1`,`y2`,`z`,`zoomandpan`]);var mathMl=freeze([`accent`,`accentunder`,`align`,`bevelled`,`close`,`columnalign`,`columnlines`,`columnspacing`,`columnspan`,`denomalign`,`depth`,`dir`,`display`,`displaystyle`,`encoding`,`fence`,`frame`,`height`,`href`,`id`,`largeop`,`length`,`linethickness`,`lquote`,`lspace`,`mathbackground`,`mathcolor`,`mathsize`,`mathvariant`,`maxsize`,`minsize`,`movablelimits`,`notation`,`numalign`,`open`,`rowalign`,`rowlines`,`rowspacing`,`rowspan`,`rspace`,`rquote`,`scriptlevel`,`scriptminsize`,`scriptsizemultiplier`,`selection`,`separator`,`separators`,`stretchy`,`subscriptshift`,`supscriptshift`,`symmetric`,`voffset`,`width`,`xmlns`]);var xml=freeze([`xlink:href`,`xml:id`,`xlink:title`,`xml:space`,`xmlns:xlink`]);var MUSTACHE_EXPR=seal(/{{[\w\W]*|^[\w\W]*}}/g);var ERB_EXPR=seal(/<%[\w\W]*|^[\w\W]*%>/g);var TMPLIT_EXPR=seal(/\${[\w\W]*/g);var DATA_ATTR=seal(/^data-[\-\w.\u00B7-\uFFFF]+$/);var ARIA_ATTR=seal(/^aria-[\-\w]+$/);var IS_ALLOWED_URI=seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i);var IS_SCRIPT_OR_DATA=seal(/^(?:\w+script|data):/i);var ATTR_WHITESPACE=seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g);var DOCTYPE_NAME=seal(/^html$/i);var CUSTOM_ELEMENT=seal(/^[a-z][.\w]*(-[.\w]+)+$/i);var ELEMENT_MARKUP_PROBE=seal(/<[/\w!]/g);var COMMENT_MARKUP_PROBE=seal(/<[/\w]/g);var FALLBACK_TAG_CLOSE=seal(/<\/no(script|embed|frames)/i);var SELF_CLOSING_TAG=seal(/\/>/i);var NODE_TYPE={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12};var LITERAL_TEXT_ELEMENT_NAMES=[`style`,`script`,`xmp`,`iframe`,`noembed`,`noframes`,`plaintext`,`noscript`];var LITERAL_TEXT_ELEMENTS=freeze(addToSet({},LITERAL_TEXT_ELEMENT_NAMES));var LITERAL_TEXT_CLOSE=function(){const map={};arrayForEach(LITERAL_TEXT_ELEMENT_NAMES,name=>{map[name]=seal(new RegExp(`</`+name+`(?=[\\t\\n\\f\\r />])`,`i`))});return freeze(map)}();var getGlobal=function getGlobal(){return typeof window===`undefined`?null:window};var _createTrustedTypesPolicy=function _createTrustedTypesPolicy(trustedTypes,purifyHostElement){if(typeof trustedTypes!==`object`||typeof trustedTypes.createPolicy!==`function`)return null;let suffix=null;const ATTR_NAME=`data-tt-policy-suffix`;if(purifyHostElement&&purifyHostElement.hasAttribute(ATTR_NAME))suffix=purifyHostElement.getAttribute(ATTR_NAME);const policyName=`dompurify`+(suffix?`#`+suffix:``);try{return trustedTypes.createPolicy(policyName,{createHTML(html){return html},createScriptURL(scriptUrl){return scriptUrl}})}catch(_){console.warn(`TrustedTypes policy `+policyName+` could not be created.`);return null}};var _createHooksMap=function _createHooksMap(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};var _resolveSetOption=function _resolveSetOption(cfg,key,fallback,options){return objectHasOwnProperty(cfg,key)&&arrayIsArray(cfg[key])?addToSet(options.base?clone(options.base):{},cfg[key],options.transform):fallback};var _resolveObjectOption=function _resolveObjectOption(cfg,key,makeFallback){const value=objectHasOwnProperty(cfg,key)?cfg[key]:void 0;return value&&typeof value===`object`?clone(value):makeFallback()};function createDOMPurify(){let window=arguments.length>0&&arguments[0]!==void 0?arguments[0]:getGlobal();const DOMPurify=root=>createDOMPurify(root);DOMPurify.version=`3.4.16`;DOMPurify.removed=[];if(!window||!window.document||window.document.nodeType!==NODE_TYPE.document||!window.Element){DOMPurify.isSupported=false;return DOMPurify}let document=window.document;const originalDocument=document;const currentScript=originalDocument.currentScript;window.DocumentFragment;const HTMLTemplateElement=window.HTMLTemplateElement,Node=window.Node,Element=window.Element,NodeFilter=window.NodeFilter;window.NamedNodeMap===void 0&&(window.NamedNodeMap||window.MozNamedAttrMap);window.HTMLFormElement;const DOMParser=window.DOMParser,trustedTypes=window.trustedTypes;const ElementPrototype=Element.prototype;const cloneNode=lookupGetter(ElementPrototype,`cloneNode`);const remove=lookupGetter(ElementPrototype,`remove`);const removeAttributeNode=lookupGetter(ElementPrototype,`removeAttributeNode`);const getNextSibling=lookupGetter(ElementPrototype,`nextSibling`);const getChildNodes=lookupGetter(ElementPrototype,`childNodes`);const getParentNode=lookupGetter(ElementPrototype,`parentNode`);const getShadowRoot=lookupGetter(ElementPrototype,`shadowRoot`);const getAttributes=lookupGetter(ElementPrototype,`attributes`);const getNodeType=Node&&Node.prototype?lookupGetter(Node.prototype,`nodeType`):null;const getNodeName=Node&&Node.prototype?lookupGetter(Node.prototype,`nodeName`):null;const getOwnerDocument=Node&&Node.prototype?lookupGetter(Node.prototype,`ownerDocument`):null;const _readNodeType=function _readNodeType(node){return getNodeType?getNodeType(node):node.nodeType};const _readNodeName=function _readNodeName(node){return getNodeName?getNodeName(node):node.nodeName};if(typeof HTMLTemplateElement===`function`){const template=document.createElement(`template`);if(template.content&&template.content.ownerDocument)document=template.content.ownerDocument}let trustedTypesPolicy;let emptyHTML=``;let defaultTrustedTypesPolicy;let defaultTrustedTypesPolicyResolved=false;let IN_TRUSTED_TYPES_POLICY=0;const _assertNotInTrustedTypesPolicy=function _assertNotInTrustedTypesPolicy(){if(IN_TRUSTED_TYPES_POLICY>0)throw typeErrorCreate(`A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.`)};const _createTrustedHTML=function _createTrustedHTML(html){_assertNotInTrustedTypesPolicy();IN_TRUSTED_TYPES_POLICY++;try{return trustedTypesPolicy.createHTML(html)}finally{IN_TRUSTED_TYPES_POLICY--}};const _createTrustedScriptURL=function _createTrustedScriptURL(scriptUrl){_assertNotInTrustedTypesPolicy();IN_TRUSTED_TYPES_POLICY++;try{return trustedTypesPolicy.createScriptURL(scriptUrl)}finally{IN_TRUSTED_TYPES_POLICY--}};const _getDefaultTrustedTypesPolicy=function _getDefaultTrustedTypesPolicy(){if(!defaultTrustedTypesPolicyResolved){defaultTrustedTypesPolicy=_createTrustedTypesPolicy(trustedTypes,currentScript);defaultTrustedTypesPolicyResolved=true}return defaultTrustedTypesPolicy};const _document=document,implementation=_document.implementation,createNodeIterator=_document.createNodeIterator,createDocumentFragment=_document.createDocumentFragment,getElementsByTagName=_document.getElementsByTagName;const importNode=originalDocument.importNode;let hooks=_createHooksMap();DOMPurify.isSupported=typeof entries===`function`&&typeof getParentNode===`function`&&implementation&&implementation.createHTMLDocument!==void 0;const MUSTACHE_EXPR$1=MUSTACHE_EXPR,ERB_EXPR$1=ERB_EXPR,TMPLIT_EXPR$1=TMPLIT_EXPR,DATA_ATTR$1=DATA_ATTR,ARIA_ATTR$1=ARIA_ATTR,IS_SCRIPT_OR_DATA$1=IS_SCRIPT_OR_DATA,ATTR_WHITESPACE$1=ATTR_WHITESPACE,CUSTOM_ELEMENT$1=CUSTOM_ELEMENT;let IS_ALLOWED_URI$1=IS_ALLOWED_URI;let ALLOWED_TAGS=null;const DEFAULT_ALLOWED_TAGS=addToSet({},[...html$1,...svg$1,...svgFilters,...mathMl$1,...text]);let ALLOWED_ATTR=null;const DEFAULT_ALLOWED_ATTR=addToSet({},[...html,...svg,...mathMl,...xml]);let CUSTOM_ELEMENT_HANDLING=Object.seal(create(null,{tagNameCheck:{writable:true,configurable:false,enumerable:true,value:null},attributeNameCheck:{writable:true,configurable:false,enumerable:true,value:null},allowCustomizedBuiltInElements:{writable:true,configurable:false,enumerable:true,value:false}}));let FORBID_TAGS=null;let FORBID_ATTR=null;const EXTRA_ELEMENT_HANDLING=Object.seal(create(null,{tagCheck:{writable:true,configurable:false,enumerable:true,value:null},attributeCheck:{writable:true,configurable:false,enumerable:true,value:null}}));let ALLOW_ARIA_ATTR=true;let ALLOW_DATA_ATTR=true;let ALLOW_UNKNOWN_PROTOCOLS=false;let ALLOW_SELF_CLOSE_IN_ATTR=true;let SAFE_FOR_TEMPLATES=false;let SAFE_FOR_XML=true;let WHOLE_DOCUMENT=false;let SET_CONFIG=false;let SET_CONFIG_ALLOWED_TAGS=null;let SET_CONFIG_ALLOWED_ATTR=null;let FORCE_BODY=false;let RETURN_DOM=false;let RETURN_DOM_FRAGMENT=false;let RETURN_TRUSTED_TYPE=false;let SANITIZE_DOM=true;let SANITIZE_NAMED_PROPS=false;const SANITIZE_NAMED_PROPS_PREFIX=`user-content-`;let KEEP_CONTENT=true;let IN_PLACE=false;let USE_PROFILES={};let FORBID_CONTENTS=null;const DEFAULT_FORBID_CONTENTS=addToSet({},[`annotation-xml`,`audio`,`colgroup`,`desc`,`foreignobject`,`head`,`iframe`,`math`,`mi`,`mn`,`mo`,`ms`,`mtext`,`noembed`,`noframes`,`noscript`,`plaintext`,`script`,`selectedcontent`,`style`,`svg`,`template`,`thead`,`title`,`video`,`xmp`]);let DATA_URI_TAGS=null;const DEFAULT_DATA_URI_TAGS=addToSet({},[`audio`,`video`,`img`,`source`,`image`,`track`]);let URI_SAFE_ATTRIBUTES=null;const DEFAULT_URI_SAFE_ATTRIBUTES=addToSet({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]);const MATHML_NAMESPACE=`http://www.w3.org/1998/Math/MathML`;const SVG_NAMESPACE=`http://www.w3.org/2000/svg`;const HTML_NAMESPACE=`http://www.w3.org/1999/xhtml`;let NAMESPACE=HTML_NAMESPACE;let IS_EMPTY_INPUT=false;let ALLOWED_NAMESPACES=null;const DEFAULT_ALLOWED_NAMESPACES=addToSet({},[MATHML_NAMESPACE,SVG_NAMESPACE,HTML_NAMESPACE],stringToString);const DEFAULT_MATHML_TEXT_INTEGRATION_POINTS=freeze([`mi`,`mo`,`mn`,`ms`,`mtext`]);let MATHML_TEXT_INTEGRATION_POINTS=addToSet({},DEFAULT_MATHML_TEXT_INTEGRATION_POINTS);const DEFAULT_HTML_INTEGRATION_POINTS=freeze([`annotation-xml`]);let HTML_INTEGRATION_POINTS=addToSet({},DEFAULT_HTML_INTEGRATION_POINTS);const COMMON_SVG_AND_HTML_ELEMENTS=addToSet({},[`title`,`style`,`font`,`a`,`script`]);let PARSER_MEDIA_TYPE=null;const SUPPORTED_PARSER_MEDIA_TYPES=[`application/xhtml+xml`,`text/html`];const DEFAULT_PARSER_MEDIA_TYPE=`text/html`;let transformCaseFunc=null;let CONFIG=null;const formElement=document.createElement(`form`);const isRegexOrFunction=function isRegexOrFunction(testValue){return testValue instanceof RegExp||testValue instanceof Function};const _parseConfig=function _parseConfig(){let cfg=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(CONFIG&&CONFIG===cfg)return;if(!cfg||typeof cfg!==`object`)cfg={};cfg=clone(cfg);PARSER_MEDIA_TYPE=SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE)===-1?DEFAULT_PARSER_MEDIA_TYPE:cfg.PARSER_MEDIA_TYPE;transformCaseFunc=PARSER_MEDIA_TYPE===`application/xhtml+xml`?stringToString:stringToLowerCase;ALLOWED_TAGS=_resolveSetOption(cfg,`ALLOWED_TAGS`,DEFAULT_ALLOWED_TAGS,{transform:transformCaseFunc});ALLOWED_ATTR=_resolveSetOption(cfg,`ALLOWED_ATTR`,DEFAULT_ALLOWED_ATTR,{transform:transformCaseFunc});ALLOWED_NAMESPACES=_resolveSetOption(cfg,`ALLOWED_NAMESPACES`,DEFAULT_ALLOWED_NAMESPACES,{transform:stringToString});URI_SAFE_ATTRIBUTES=_resolveSetOption(cfg,`ADD_URI_SAFE_ATTR`,DEFAULT_URI_SAFE_ATTRIBUTES,{transform:transformCaseFunc,base:DEFAULT_URI_SAFE_ATTRIBUTES});DATA_URI_TAGS=_resolveSetOption(cfg,`ADD_DATA_URI_TAGS`,DEFAULT_DATA_URI_TAGS,{transform:transformCaseFunc,base:DEFAULT_DATA_URI_TAGS});FORBID_CONTENTS=_resolveSetOption(cfg,`FORBID_CONTENTS`,DEFAULT_FORBID_CONTENTS,{transform:transformCaseFunc});FORBID_TAGS=_resolveSetOption(cfg,`FORBID_TAGS`,clone({}),{transform:transformCaseFunc});FORBID_ATTR=_resolveSetOption(cfg,`FORBID_ATTR`,clone({}),{transform:transformCaseFunc});USE_PROFILES=objectHasOwnProperty(cfg,`USE_PROFILES`)?cfg.USE_PROFILES&&typeof cfg.USE_PROFILES===`object`?clone(cfg.USE_PROFILES):cfg.USE_PROFILES:false;ALLOW_ARIA_ATTR=cfg.ALLOW_ARIA_ATTR!==false;ALLOW_DATA_ATTR=cfg.ALLOW_DATA_ATTR!==false;ALLOW_UNKNOWN_PROTOCOLS=cfg.ALLOW_UNKNOWN_PROTOCOLS||false;ALLOW_SELF_CLOSE_IN_ATTR=cfg.ALLOW_SELF_CLOSE_IN_ATTR!==false;SAFE_FOR_TEMPLATES=cfg.SAFE_FOR_TEMPLATES||false;SAFE_FOR_XML=cfg.SAFE_FOR_XML!==false;WHOLE_DOCUMENT=cfg.WHOLE_DOCUMENT||false;RETURN_DOM=cfg.RETURN_DOM||false;RETURN_DOM_FRAGMENT=cfg.RETURN_DOM_FRAGMENT||false;RETURN_TRUSTED_TYPE=cfg.RETURN_TRUSTED_TYPE||false;FORCE_BODY=cfg.FORCE_BODY||false;SANITIZE_DOM=cfg.SANITIZE_DOM!==false;SANITIZE_NAMED_PROPS=cfg.SANITIZE_NAMED_PROPS||false;KEEP_CONTENT=cfg.KEEP_CONTENT!==false;IN_PLACE=cfg.IN_PLACE||false;IS_ALLOWED_URI$1=isRegex(cfg.ALLOWED_URI_REGEXP)?cfg.ALLOWED_URI_REGEXP:IS_ALLOWED_URI;NAMESPACE=typeof cfg.NAMESPACE===`string`?cfg.NAMESPACE:HTML_NAMESPACE;MATHML_TEXT_INTEGRATION_POINTS=_resolveObjectOption(cfg,`MATHML_TEXT_INTEGRATION_POINTS`,()=>addToSet({},DEFAULT_MATHML_TEXT_INTEGRATION_POINTS));HTML_INTEGRATION_POINTS=_resolveObjectOption(cfg,`HTML_INTEGRATION_POINTS`,()=>addToSet({},DEFAULT_HTML_INTEGRATION_POINTS));const customElementHandling=_resolveObjectOption(cfg,`CUSTOM_ELEMENT_HANDLING`,()=>create(null));CUSTOM_ELEMENT_HANDLING=create(null);if(objectHasOwnProperty(customElementHandling,`tagNameCheck`)&&isRegexOrFunction(customElementHandling.tagNameCheck))CUSTOM_ELEMENT_HANDLING.tagNameCheck=customElementHandling.tagNameCheck;if(objectHasOwnProperty(customElementHandling,`attributeNameCheck`)&&isRegexOrFunction(customElementHandling.attributeNameCheck))CUSTOM_ELEMENT_HANDLING.attributeNameCheck=customElementHandling.attributeNameCheck;if(objectHasOwnProperty(customElementHandling,`allowCustomizedBuiltInElements`)&&typeof customElementHandling.allowCustomizedBuiltInElements===`boolean`)CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=customElementHandling.allowCustomizedBuiltInElements;seal(CUSTOM_ELEMENT_HANDLING);if(SAFE_FOR_TEMPLATES)ALLOW_DATA_ATTR=false;if(RETURN_DOM_FRAGMENT)RETURN_DOM=true;if(USE_PROFILES){ALLOWED_TAGS=addToSet({},text);ALLOWED_ATTR=create(null);if(USE_PROFILES.html===true){addToSet(ALLOWED_TAGS,html$1);addToSet(ALLOWED_ATTR,html)}if(USE_PROFILES.svg===true){addToSet(ALLOWED_TAGS,svg$1);addToSet(ALLOWED_ATTR,svg);addToSet(ALLOWED_ATTR,xml)}if(USE_PROFILES.svgFilters===true){addToSet(ALLOWED_TAGS,svgFilters);addToSet(ALLOWED_ATTR,svg);addToSet(ALLOWED_ATTR,xml)}if(USE_PROFILES.mathMl===true){addToSet(ALLOWED_TAGS,mathMl$1);addToSet(ALLOWED_ATTR,mathMl);addToSet(ALLOWED_ATTR,xml)}}EXTRA_ELEMENT_HANDLING.tagCheck=null;EXTRA_ELEMENT_HANDLING.attributeCheck=null;if(objectHasOwnProperty(cfg,`ADD_TAGS`)){if(typeof cfg.ADD_TAGS===`function`)EXTRA_ELEMENT_HANDLING.tagCheck=cfg.ADD_TAGS;else if(arrayIsArray(cfg.ADD_TAGS)){if(ALLOWED_TAGS===DEFAULT_ALLOWED_TAGS)ALLOWED_TAGS=clone(ALLOWED_TAGS);addToSet(ALLOWED_TAGS,cfg.ADD_TAGS,transformCaseFunc)}}if(objectHasOwnProperty(cfg,`ADD_ATTR`)){if(typeof cfg.ADD_ATTR===`function`)EXTRA_ELEMENT_HANDLING.attributeCheck=cfg.ADD_ATTR;else if(arrayIsArray(cfg.ADD_ATTR)){if(ALLOWED_ATTR===DEFAULT_ALLOWED_ATTR)ALLOWED_ATTR=clone(ALLOWED_ATTR);addToSet(ALLOWED_ATTR,cfg.ADD_ATTR,transformCaseFunc)}}if(objectHasOwnProperty(cfg,`ADD_FORBID_CONTENTS`)&&arrayIsArray(cfg.ADD_FORBID_CONTENTS)){if(FORBID_CONTENTS===DEFAULT_FORBID_CONTENTS)FORBID_CONTENTS=clone(FORBID_CONTENTS);addToSet(FORBID_CONTENTS,cfg.ADD_FORBID_CONTENTS,transformCaseFunc)}if(KEEP_CONTENT)ALLOWED_TAGS[`#text`]=true;if(WHOLE_DOCUMENT)addToSet(ALLOWED_TAGS,[`html`,`head`,`body`]);if(ALLOWED_TAGS.table){addToSet(ALLOWED_TAGS,[`tbody`]);delete FORBID_TAGS.tbody}if(cfg.TRUSTED_TYPES_POLICY){if(typeof cfg.TRUSTED_TYPES_POLICY.createHTML!==`function`)throw typeErrorCreate(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL!==`function`)throw typeErrorCreate(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);const previousTrustedTypesPolicy=trustedTypesPolicy;trustedTypesPolicy=cfg.TRUSTED_TYPES_POLICY;try{emptyHTML=_createTrustedHTML(``)}catch(error){trustedTypesPolicy=previousTrustedTypesPolicy;throw error}}else if(cfg.TRUSTED_TYPES_POLICY===null){trustedTypesPolicy=void 0;emptyHTML=``}else{if(trustedTypesPolicy===void 0)trustedTypesPolicy=_getDefaultTrustedTypesPolicy();if(trustedTypesPolicy&&typeof emptyHTML===`string`)emptyHTML=_createTrustedHTML(``)}if(freeze)freeze(cfg);CONFIG=cfg};const ALL_SVG_TAGS=addToSet({},[...svg$1,...svgFilters,...svgDisallowed]);const ALL_MATHML_TAGS=addToSet({},[...mathMl$1,...mathMlDisallowed]);const _checkSvgNamespace=function _checkSvgNamespace(tagName,parent,parentTagName){if(parent.namespaceURI===HTML_NAMESPACE)return tagName===`svg`;if(parent.namespaceURI===MATHML_NAMESPACE)return tagName===`svg`&&(parentTagName===`annotation-xml`||MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);return Boolean(ALL_SVG_TAGS[tagName])};const _checkMathMlNamespace=function _checkMathMlNamespace(tagName,parent,parentTagName){if(parent.namespaceURI===HTML_NAMESPACE)return tagName===`math`;if(parent.namespaceURI===SVG_NAMESPACE)return tagName===`math`&&HTML_INTEGRATION_POINTS[parentTagName];return Boolean(ALL_MATHML_TAGS[tagName])};const _checkHtmlNamespace=function _checkHtmlNamespace(tagName,parent,parentTagName){if(parent.namespaceURI===SVG_NAMESPACE&&!HTML_INTEGRATION_POINTS[parentTagName])return false;if(parent.namespaceURI===MATHML_NAMESPACE&&!MATHML_TEXT_INTEGRATION_POINTS[parentTagName])return false;return!ALL_MATHML_TAGS[tagName]&&(COMMON_SVG_AND_HTML_ELEMENTS[tagName]||!ALL_SVG_TAGS[tagName])};const _checkValidNamespace=function _checkValidNamespace(element){let parent=getParentNode(element);if(!parent||!parent.tagName)parent={namespaceURI:NAMESPACE,tagName:`template`};const tagName=stringToLowerCase(element.tagName);const parentTagName=stringToLowerCase(parent.tagName);if(!ALLOWED_NAMESPACES[element.namespaceURI])return false;if(element.namespaceURI===SVG_NAMESPACE)return _checkSvgNamespace(tagName,parent,parentTagName);if(element.namespaceURI===MATHML_NAMESPACE)return _checkMathMlNamespace(tagName,parent,parentTagName);if(element.namespaceURI===HTML_NAMESPACE)return _checkHtmlNamespace(tagName,parent,parentTagName);if(PARSER_MEDIA_TYPE===`application/xhtml+xml`&&ALLOWED_NAMESPACES[element.namespaceURI])return true;return false};const _forceRemove=function _forceRemove(node){arrayPush(DOMPurify.removed,{element:node});try{getParentNode(node).removeChild(node)}catch(_){remove(node);if(!getParentNode(node))throw typeErrorCreate(`a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place`)}};const _stripAttributeNode=function _stripAttributeNode(element,attribute,name){try{removeAttributeNode(element,attribute)}catch(_){try{element.removeAttribute(name)}catch(_){}}};const _neutralizeRoot=function _neutralizeRoot(root){_neutralizeSubtree(root);const childNodes=getChildNodes(root);if(childNodes){const snapshot=[];arrayForEach(childNodes,child=>{arrayPush(snapshot,child)});arrayForEach(snapshot,child=>{try{remove(child)}catch(_){}})}const attributes=getAttributes(root);if(attributes)for(let i=attributes.length-1;i>=0;--i){const attribute=attributes[i];const name=attribute&&attribute.name;if(typeof name===`string`)_stripAttributeNode(root,attribute,name)}};const _removeAttribute=function _removeAttribute(name,element,attr){if(!attr)try{attr=element.getAttributeNode(name)}catch(_){attr=null}arrayPush(DOMPurify.removed,{attribute:attr||null,from:element});try{if(attr)removeAttributeNode(element,attr);else element.removeAttribute(name)}catch(_){try{element.removeAttribute(name)}catch(_){}}if(name===`is`){if(RETURN_DOM||RETURN_DOM_FRAGMENT)try{_forceRemove(element)}catch(_){}else try{element.setAttribute(name,``)}catch(_){}}};const _stripDisallowedAttributes=function _stripDisallowedAttributes(element){const attributes=getAttributes(element);if(!attributes)return;for(let i=attributes.length-1;i>=0;--i){const attribute=attributes[i];const name=attribute&&attribute.name;if(typeof name!==`string`||ALLOWED_ATTR[transformCaseFunc(name)])continue;_stripAttributeNode(element,attribute,name)}};const _neutralizeSubtree=function _neutralizeSubtree(root){const stack=[root];while(stack.length>0){const node=stack.pop();if(_readNodeType(node)===NODE_TYPE.element)_stripDisallowedAttributes(node);const childNodes=getChildNodes(node);if(childNodes)for(let i=childNodes.length-1;i>=0;--i)stack.push(childNodes[i])}};const _isPatchLinkageAttribute=function _isPatchLinkageAttribute(lcName,lcTag){if(!SAFE_FOR_XML)return false;if(lcName===`patchsrc`)return true;return lcName===`for`&&lcTag!==`label`&&lcTag!==`output`};const _neutralizePatchLinkage=function _neutralizePatchLinkage(root){if(!SAFE_FOR_XML)return;const stack=[root];while(stack.length>0){const node=stack.pop();const nodeType=_readNodeType(node);if(nodeType===NODE_TYPE.processingInstruction||nodeType===NODE_TYPE.comment&®ExpTest(COMMENT_MARKUP_PROBE,node.data)){try{remove(node)}catch(_){}continue}if(nodeType===NODE_TYPE.element){const element=node;const lcTag=transformCaseFunc(_readNodeName(node));try{if(element.hasAttribute&&element.hasAttribute(`patchsrc`))element.removeAttribute(`patchsrc`);if(element.hasAttribute&&element.hasAttribute(`for`)&&_isPatchLinkageAttribute(`for`,lcTag))element.removeAttribute(`for`)}catch(_){}}const childNodes=getChildNodes(node);if(childNodes)for(let i=childNodes.length-1;i>=0;--i)stack.push(childNodes[i])}};const _initDocument=function _initDocument(dirty){let doc=null;let leadingWhitespace=null;if(FORCE_BODY)dirty=`<remove></remove>`+dirty;else{const matches=stringMatch(dirty,/^[\r\n\t ]+/);leadingWhitespace=matches&&matches[0]}if(PARSER_MEDIA_TYPE===`application/xhtml+xml`&&NAMESPACE===HTML_NAMESPACE)dirty=`<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>`+dirty+`</body></html>`;const dirtyPayload=trustedTypesPolicy?_createTrustedHTML(dirty):dirty;if(NAMESPACE===HTML_NAMESPACE)try{doc=new DOMParser().parseFromString(dirtyPayload,PARSER_MEDIA_TYPE)}catch(_){}if(!doc||!doc.documentElement){doc=implementation.createDocument(NAMESPACE,`template`,null);try{doc.documentElement.innerHTML=IS_EMPTY_INPUT?emptyHTML:dirtyPayload}catch(_){}}const body=doc.body||doc.documentElement;if(dirty&&leadingWhitespace)body.insertBefore(document.createTextNode(leadingWhitespace),body.childNodes[0]||null);if(NAMESPACE===HTML_NAMESPACE)return getElementsByTagName.call(doc,WHOLE_DOCUMENT?`html`:`body`)[0];return WHOLE_DOCUMENT?doc.documentElement:body};const _createNodeIterator=function _createNodeIterator(root){const doc=getOwnerDocument?getOwnerDocument(root):root.ownerDocument;return createNodeIterator.call(doc||root,root,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_COMMENT|NodeFilter.SHOW_TEXT|NodeFilter.SHOW_PROCESSING_INSTRUCTION|NodeFilter.SHOW_CDATA_SECTION,null)};const _stripTemplateExpressions=function _stripTemplateExpressions(value){value=stringReplace(value,MUSTACHE_EXPR$1,` `);value=stringReplace(value,ERB_EXPR$1,` `);value=stringReplace(value,TMPLIT_EXPR$1,` `);return value};const _scrubTemplateExpressions2=function _scrubTemplateExpressions(node){var _node$querySelectorAl;node.normalize();const doc=getOwnerDocument?getOwnerDocument(node):node.ownerDocument;const walker=createNodeIterator.call(doc||node,node,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_COMMENT|NodeFilter.SHOW_CDATA_SECTION|NodeFilter.SHOW_PROCESSING_INSTRUCTION,null);let currentNode=walker.nextNode();while(currentNode){currentNode.data=_stripTemplateExpressions(currentNode.data);currentNode=walker.nextNode()}const templates=(_node$querySelectorAl=node.querySelectorAll)===null||_node$querySelectorAl===void 0?void 0:_node$querySelectorAl.call(node,`template`);if(templates)arrayForEach(templates,tmpl=>{if(_isDocumentFragment(tmpl.content))_scrubTemplateExpressions2(tmpl.content)})};const _isClobbered=function _isClobbered(element){const realTagName=getNodeName?getNodeName(element):null;if(typeof realTagName!==`string`)return false;if(transformCaseFunc(realTagName)!==`form`)return false;return typeof element.nodeName!==`string`||typeof element.textContent!==`string`||typeof element.removeChild!==`function`||element.attributes!==getAttributes(element)||typeof element.removeAttribute!==`function`||typeof element.removeAttributeNode!==`function`||typeof element.getAttributeNode!==`function`||typeof element.setAttribute!==`function`||typeof element.namespaceURI!==`string`||typeof element.insertBefore!==`function`||typeof element.hasChildNodes!==`function`||element.nodeType!==getNodeType(element)||element.childNodes!==getChildNodes(element)};const _isDocumentFragment=function _isDocumentFragment(value){if(!getNodeType||typeof value!==`object`||value===null)return false;try{return getNodeType(value)===NODE_TYPE.documentFragment}catch(_){return false}};const _isNode=function _isNode(value){if(!getNodeType||typeof value!==`object`||value===null)return false;try{return typeof getNodeType(value)===`number`}catch(_){return false}};function _executeHooks(hooks,currentNode,data){if(hooks.length===0)return;arrayForEach(hooks,hook=>{hook.call(DOMPurify,currentNode,data,CONFIG)})}const _isUnsafeNode=function _isUnsafeNode(currentNode,tagName){if(SAFE_FOR_XML&¤tNode.hasChildNodes()&&!_isNode(currentNode.firstElementChild)&®ExpTest(ELEMENT_MARKUP_PROBE,currentNode.textContent)&®ExpTest(ELEMENT_MARKUP_PROBE,currentNode.innerHTML))return true;if(SAFE_FOR_XML&¤tNode.namespaceURI===HTML_NAMESPACE&&LITERAL_TEXT_ELEMENTS[tagName]&&(_isNode(currentNode.firstElementChild)||typeof currentNode.textContent===`string`&®ExpTest(LITERAL_TEXT_CLOSE[tagName],currentNode.textContent)))return true;if(currentNode.nodeType===NODE_TYPE.processingInstruction)return true;if(SAFE_FOR_XML&¤tNode.nodeType===NODE_TYPE.comment&®ExpTest(COMMENT_MARKUP_PROBE,currentNode.data))return true;return false};const _matchesNameCheck=function _matchesNameCheck(check,name){if(check instanceof RegExp)return regExpTest(check,name);if(check instanceof Function){for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return Boolean(check(name,...args))}return false};const _sanitizeDisallowedNode=function _sanitizeDisallowedNode(currentNode,tagName,root){if(!FORBID_TAGS[tagName]&&_isBasicCustomElement(tagName)&&_matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck,tagName))return false;if(KEEP_CONTENT&&!FORBID_CONTENTS[tagName]){const parentNode=getParentNode(currentNode);const childNodes=getChildNodes(currentNode);if(childNodes&&parentNode){const childCount=childNodes.length;for(let i=childCount-1;i>=0;--i){const hoisted=currentNode===root?cloneNode(childNodes[i],true):childNodes[i];parentNode.insertBefore(hoisted,getNextSibling(currentNode))}}}_forceRemove(currentNode);return true};const _forkSharedAllowlist=function _forkSharedAllowlist(hookList,set,defaultSet,setConfigSet){if(hookList.length===0)return set;return set===defaultSet||set===setConfigSet?clone(set):set};const _handleHookDetachedNode=function _handleHookDetachedNode(currentNode,root){if(currentNode===root||getParentNode(currentNode)!==null)return false;if(IN_PLACE)_neutralizeSubtree(currentNode);return true};const _sanitizeElements=function _sanitizeElements(currentNode,root){_executeHooks(hooks.beforeSanitizeElements,currentNode,null);if(_handleHookDetachedNode(currentNode,root))return true;if(_isClobbered(currentNode)){_forceRemove(currentNode);return true}const tagName=transformCaseFunc(_readNodeName(currentNode));ALLOWED_TAGS=_forkSharedAllowlist(hooks.uponSanitizeElement,ALLOWED_TAGS,DEFAULT_ALLOWED_TAGS,SET_CONFIG_ALLOWED_TAGS);_executeHooks(hooks.uponSanitizeElement,currentNode,{tagName,allowedTags:ALLOWED_TAGS});if(_handleHookDetachedNode(currentNode,root))return true;if(_isUnsafeNode(currentNode,tagName)){_forceRemove(currentNode);return true}if(FORBID_TAGS[tagName]||!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function&&EXTRA_ELEMENT_HANDLING.tagCheck(tagName))&&!ALLOWED_TAGS[tagName]){const removed=_sanitizeDisallowedNode(currentNode,tagName,root);if(removed===false){_executeHooks(hooks.afterSanitizeElements,currentNode,null);if(_handleHookDetachedNode(currentNode,root))return true}return removed}if(_readNodeType(currentNode)===NODE_TYPE.element&&!_checkValidNamespace(currentNode)){_forceRemove(currentNode);return true}if((tagName===`noscript`||tagName===`noembed`||tagName===`noframes`)&®ExpTest(FALLBACK_TAG_CLOSE,currentNode.innerHTML)){_forceRemove(currentNode);return true}if(SAFE_FOR_TEMPLATES&¤tNode.nodeType===NODE_TYPE.text){const content=_stripTemplateExpressions(currentNode.textContent);if(currentNode.textContent!==content){arrayPush(DOMPurify.removed,{element:currentNode.cloneNode()});currentNode.textContent=content}}_executeHooks(hooks.afterSanitizeElements,currentNode,null);return _handleHookDetachedNode(currentNode,root)};const _isValidAttribute=function _isValidAttribute(lcTag,lcName,value){if(FORBID_ATTR[lcName])return false;if(_isPatchLinkageAttribute(lcName,lcTag))return false;if(SANITIZE_DOM&&(lcName===`id`||lcName===`name`)&&(value in document||value in formElement))return false;const nameIsPermitted=ALLOWED_ATTR[lcName]||EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function&&EXTRA_ELEMENT_HANDLING.attributeCheck(lcName,lcTag);if(ALLOW_DATA_ATTR&®ExpTest(DATA_ATTR$1,lcName))return true;if(ALLOW_ARIA_ATTR&®ExpTest(ARIA_ATTR$1,lcName))return true;if(!nameIsPermitted)return _isBasicCustomElement(lcTag)&&_matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck,lcTag)&&_matchesNameCheck(CUSTOM_ELEMENT_HANDLING.attributeNameCheck,lcName,lcTag)||lcName===`is`&&CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&_matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck,value);if(URI_SAFE_ATTRIBUTES[lcName])return true;if(regExpTest(IS_ALLOWED_URI$1,stringReplace(value,ATTR_WHITESPACE$1,``)))return true;if((lcName===`src`||lcName===`xlink:href`||lcName===`href`)&&lcTag!==`script`&&stringIndexOf(value,`data:`)===0&&DATA_URI_TAGS[lcTag])return true;if(ALLOW_UNKNOWN_PROTOCOLS&&!regExpTest(IS_SCRIPT_OR_DATA$1,stringReplace(value,ATTR_WHITESPACE$1,``)))return true;return!value};const RESERVED_CUSTOM_ELEMENT_NAMES=addToSet({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]);const _isBasicCustomElement=function _isBasicCustomElement(tagName){return!RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)]&®ExpTest(CUSTOM_ELEMENT$1,tagName)};const _applyTrustedTypesToAttribute=function _applyTrustedTypesToAttribute(lcTag,lcName,namespaceURI,value){if(trustedTypesPolicy&&typeof trustedTypes===`object`&&typeof trustedTypes.getAttributeType===`function`&&!namespaceURI)switch(trustedTypes.getAttributeType(lcTag,lcName)){case`TrustedHTML`:return _createTrustedHTML(value);case`TrustedScriptURL`:return _createTrustedScriptURL(value)}return value};const _setAttributeValue=function _setAttributeValue(currentNode,name,namespaceURI,value){try{if(namespaceURI)currentNode.setAttributeNS(namespaceURI,name,value);else currentNode.setAttribute(name,value);if(_isClobbered(currentNode)){_forceRemove(currentNode);return false}return true}catch(_){_removeAttribute(name,currentNode);return false}};const _sanitizeAttributes=function _sanitizeAttributes(currentNode,root){_executeHooks(hooks.beforeSanitizeAttributes,currentNode,null);if(_handleHookDetachedNode(currentNode,root))return;const attributes=currentNode.attributes;if(!attributes||_isClobbered(currentNode))return;ALLOWED_ATTR=_forkSharedAllowlist(hooks.uponSanitizeAttribute,ALLOWED_ATTR,DEFAULT_ALLOWED_ATTR,SET_CONFIG_ALLOWED_ATTR);const hookEvent={attrName:``,attrValue:``,keepAttr:true,allowedAttributes:ALLOWED_ATTR,forceKeepAttr:void 0};let l=attributes.length;const lcTag=transformCaseFunc(currentNode.nodeName);while(l--){const attr=attributes[l];const name=attr.name,namespaceURI=attr.namespaceURI,attrValue=attr.value;const lcName=transformCaseFunc(name);const initValue=attrValue;let value=name===`value`?initValue:stringTrim(initValue);let recreatedNamedProp=false;hookEvent.attrName=lcName;hookEvent.attrValue=value;hookEvent.keepAttr=true;hookEvent.forceKeepAttr=void 0;_executeHooks(hooks.uponSanitizeAttribute,currentNode,hookEvent);value=hookEvent.attrValue;if(SANITIZE_NAMED_PROPS&&(lcName===`id`||lcName===`name`)&&stringIndexOf(value,SANITIZE_NAMED_PROPS_PREFIX)!==0){_removeAttribute(name,currentNode,attr);value=SANITIZE_NAMED_PROPS_PREFIX+value;recreatedNamedProp=true}if(SAFE_FOR_XML&®ExpTest(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,value)){_removeAttribute(name,currentNode,attr);continue}if(lcName===`attributename`&&stringMatch(value,`href`)){_removeAttribute(name,currentNode,attr);continue}if(hookEvent.forceKeepAttr)continue;if(!hookEvent.keepAttr){_removeAttribute(name,currentNode,attr);continue}if(!ALLOW_SELF_CLOSE_IN_ATTR&®ExpTest(SELF_CLOSING_TAG,value)){_removeAttribute(name,currentNode,attr);continue}if(SAFE_FOR_TEMPLATES)value=_stripTemplateExpressions(value);if(!_isValidAttribute(lcTag,lcName,value)){_removeAttribute(name,currentNode,attr);continue}value=_applyTrustedTypesToAttribute(lcTag,lcName,namespaceURI,value);if(value!==initValue){if(_setAttributeValue(currentNode,name,namespaceURI,value)&&recreatedNamedProp)arrayPop(DOMPurify.removed)}}_executeHooks(hooks.afterSanitizeAttributes,currentNode,null);_handleHookDetachedNode(currentNode,root)};const _sanitizeShadowDOM2=function _sanitizeShadowDOM(fragment){let shadowNode=null;const shadowIterator=_createNodeIterator(fragment);_executeHooks(hooks.beforeSanitizeShadowDOM,fragment,null);while(shadowNode=shadowIterator.nextNode()){_executeHooks(hooks.uponSanitizeShadowNode,shadowNode,null);_sanitizeElements(shadowNode,fragment);_sanitizeAttributes(shadowNode,fragment);if(_isDocumentFragment(shadowNode.content))_sanitizeShadowDOM2(shadowNode.content);if(_readNodeType(shadowNode)===NODE_TYPE.element){const innerSr=getShadowRoot(shadowNode);if(_isDocumentFragment(innerSr)){_sanitizeAttachedShadowRoots(innerSr);_sanitizeShadowDOM2(innerSr)}}}_executeHooks(hooks.afterSanitizeShadowDOM,fragment,null)};const _sanitizeAttachedShadowRoots=function _sanitizeAttachedShadowRoots(root){const stack=[{node:root,shadow:null}];while(stack.length>0){const item=stack.pop();if(item.shadow){_sanitizeShadowDOM2(item.shadow);continue}const node=item.node;const isElement=_readNodeType(node)===NODE_TYPE.element;const childNodes=getChildNodes(node);if(childNodes)for(let i=childNodes.length-1;i>=0;--i)stack.push({node:childNodes[i],shadow:null});if(isElement){const rootName=getNodeName?getNodeName(node):null;if(typeof rootName===`string`&&transformCaseFunc(rootName)===`template`){const content=node.content;if(_isDocumentFragment(content))stack.push({node:content,shadow:null})}}if(isElement){const sr=getShadowRoot(node);if(_isDocumentFragment(sr))stack.push({node:null,shadow:sr},{node:sr,shadow:null})}}};DOMPurify.sanitize=function(dirty){let cfg=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};let body=null;let importedNode=null;let currentNode=null;let returnNode=null;IS_EMPTY_INPUT=!dirty;if(IS_EMPTY_INPUT)dirty=`<!-->`;if(typeof dirty!==`string`&&!_isNode(dirty)){dirty=stringifyValue(dirty);if(typeof dirty!==`string`)throw typeErrorCreate(`dirty is not a string, aborting`)}if(!DOMPurify.isSupported)return dirty;if(SET_CONFIG){ALLOWED_TAGS=SET_CONFIG_ALLOWED_TAGS;ALLOWED_ATTR=SET_CONFIG_ALLOWED_ATTR}else _parseConfig(cfg);if(hooks.uponSanitizeElement.length>0||hooks.uponSanitizeAttribute.length>0)ALLOWED_TAGS=clone(ALLOWED_TAGS);if(hooks.uponSanitizeAttribute.length>0)ALLOWED_ATTR=clone(ALLOWED_ATTR);DOMPurify.removed=[];const inPlace=IN_PLACE&&typeof dirty!==`string`&&_isNode(dirty);if(inPlace){_neutralizePatchLinkage(dirty);const nn=_readNodeName(dirty);if(typeof nn===`string`){const tagName=transformCaseFunc(nn);if(!ALLOWED_TAGS[tagName]||FORBID_TAGS[tagName]){_neutralizeRoot(dirty);throw typeErrorCreate(`root node is forbidden and cannot be sanitized in-place`)}}if(_isClobbered(dirty)){_neutralizeRoot(dirty);throw typeErrorCreate(`root node is clobbered and cannot be sanitized in-place`)}try{_sanitizeAttachedShadowRoots(dirty)}catch(error){_neutralizeRoot(dirty);throw error}}else if(_isNode(dirty)){body=_initDocument(`<!---->`);importedNode=body.ownerDocument.importNode(dirty,true);if(importedNode.nodeType===NODE_TYPE.element&&importedNode.nodeName===`BODY`)body=importedNode;else if(importedNode.nodeName===`HTML`)body=importedNode;else body.appendChild(importedNode);_sanitizeAttachedShadowRoots(body)}else{if(!RETURN_DOM&&!SAFE_FOR_TEMPLATES&&!WHOLE_DOCUMENT&&dirty.indexOf(`<`)===-1)return trustedTypesPolicy&&RETURN_TRUSTED_TYPE?_createTrustedHTML(dirty):dirty;body=_initDocument(dirty);if(!body)return RETURN_DOM?null:RETURN_TRUSTED_TYPE?emptyHTML:``}if(body&&FORCE_BODY)_forceRemove(body.firstChild);const walkRoot=inPlace?dirty:body;try{const nodeIterator=_createNodeIterator(walkRoot);while(currentNode=nodeIterator.nextNode()){_sanitizeElements(currentNode,walkRoot);_sanitizeAttributes(currentNode,walkRoot);if(_isDocumentFragment(currentNode.content))_sanitizeShadowDOM2(currentNode.content)}}catch(error){if(inPlace){_neutralizeRoot(dirty);arrayForEach(DOMPurify.removed,entry=>{if(entry.element)_neutralizeSubtree(entry.element)})}throw error}if(inPlace){let rootWasRemoved=false;arrayForEach(DOMPurify.removed,entry=>{if(entry.element){if(entry.element===dirty)rootWasRemoved=true;_neutralizeSubtree(entry.element)}});if(rootWasRemoved)throw typeErrorCreate(`a node selected for removal could not be safely returned; refusing to sanitize in place`);if(SAFE_FOR_TEMPLATES)_scrubTemplateExpressions2(dirty);return dirty}if(RETURN_DOM){if(SAFE_FOR_TEMPLATES)_scrubTemplateExpressions2(body);if(RETURN_DOM_FRAGMENT){returnNode=createDocumentFragment.call(body.ownerDocument);while(body.firstChild)returnNode.appendChild(body.firstChild)}else returnNode=body;if(ALLOWED_ATTR.shadowroot||ALLOWED_ATTR.shadowrootmode)returnNode=importNode.call(originalDocument,returnNode,true);return returnNode}let serializedHTML=WHOLE_DOCUMENT?body.outerHTML:body.innerHTML;if(WHOLE_DOCUMENT&&ALLOWED_TAGS[`!doctype`]&&body.ownerDocument&&body.ownerDocument.doctype&&body.ownerDocument.doctype.name&®ExpTest(DOCTYPE_NAME,body.ownerDocument.doctype.name))serializedHTML=`<!DOCTYPE `+body.ownerDocument.doctype.name+`>
|
|
138
|
-
`+serializedHTML;if(SAFE_FOR_TEMPLATES)serializedHTML=_stripTemplateExpressions(serializedHTML);return trustedTypesPolicy&&RETURN_TRUSTED_TYPE?_createTrustedHTML(serializedHTML):serializedHTML};DOMPurify.setConfig=function(){let cfg=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};_parseConfig(cfg);SET_CONFIG=true;SET_CONFIG_ALLOWED_TAGS=ALLOWED_TAGS;SET_CONFIG_ALLOWED_ATTR=ALLOWED_ATTR};DOMPurify.clearConfig=function(){CONFIG=null;SET_CONFIG=false;SET_CONFIG_ALLOWED_TAGS=null;SET_CONFIG_ALLOWED_ATTR=null;trustedTypesPolicy=defaultTrustedTypesPolicy;emptyHTML=``};DOMPurify.isValidAttribute=function(tag,attr,value){if(!CONFIG)_parseConfig({});const lcTag=transformCaseFunc(tag);const lcName=transformCaseFunc(attr);return _isValidAttribute(lcTag,lcName,value)};DOMPurify.addHook=function(entryPoint,hookFunction){if(typeof hookFunction!==`function`)return;if(!objectHasOwnProperty(hooks,entryPoint))return;arrayPush(hooks[entryPoint],hookFunction)};DOMPurify.removeHook=function(entryPoint,hookFunction){if(!objectHasOwnProperty(hooks,entryPoint))return;if(hookFunction!==void 0){const index=arrayLastIndexOf(hooks[entryPoint],hookFunction);return index===-1?void 0:arraySplice(hooks[entryPoint],index,1)[0]}return arrayPop(hooks[entryPoint])};DOMPurify.removeHooks=function(entryPoint){if(!objectHasOwnProperty(hooks,entryPoint))return;hooks[entryPoint]=[]};DOMPurify.removeAllHooks=function(){hooks=_createHooksMap()};return DOMPurify}var purify_default=createDOMPurify();var _hoisted_1$14=[`innerHTML`];var _sfc_main$29={__name:`GithubMarkdown`,props:{html:{type:String,default:``},text:{type:String,default:``}},setup(__props){const props=__props;const sanitizedHtml=computed(()=>purify_default.sanitize(props.html,{ALLOWED_TAGS:[`a`,`b`,`blockquote`,`br`,`code`,`del`,`details`,`div`,`em`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`hr`,`img`,`li`,`ol`,`p`,`pre`,`s`,`span`,`strong`,`sub`,`summary`,`sup`,`table`,`tbody`,`td`,`th`,`thead`,`tr`,`ul`],ALLOWED_ATTR:[`href`,`src`,`alt`,`title`,`width`,`height`,`colspan`,`rowspan`,`start`],ALLOW_DATA_ATTR:false,ALLOW_ARIA_ATTR:false}));const blocks=computed(()=>parseLongTextReviewBlocks(props.text));return(_ctx,_cache)=>{return __props.html?(openBlock(),createElementBlock(`div`,{key:0,class:`github-markdown`,innerHTML:sanitizedHtml.value},null,8,_hoisted_1$14)):(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:1,blocks:blocks.value},null,8,[`blocks`]))}}};var GithubMarkdown_default=_plugin_vue_export_helper_default(_sfc_main$29,[[`__scopeId`,`data-v-3636cce2`]]);var _sfc_main$28={__name:`Vibe64LearningMarkdown`,props:{text:{type:String,default:``}},setup(__props){const props=__props;const renderer=new F({async:false,gfm:true,walkTokens(token){if(token.type!==`image`)return;token.type=`text`;token.raw=token.text=token.text||``;delete token.tokens}});const html=computed(()=>props.text?renderer.parse(props.text):``);return(_ctx,_cache)=>{return openBlock(),createBlock(GithubMarkdown_default,{class:`vibe64-learning-markdown`,html:html.value,onClick:unref(openLessonLink)},null,8,[`html`,`onClick`])}}};var Vibe64LearningMarkdown_default=_plugin_vue_export_helper_default(_sfc_main$28,[[`__scopeId`,`data-v-47420e75`]]);var _hoisted_1$13=[`aria-busy`];var _hoisted_2$10={class:`vibe64-teacher-notes__actions`};var _hoisted_3$9={key:1,class:`vibe64-teacher-notes__empty`,"data-test":`teacher-notes-empty`};var _hoisted_4$8={key:2,class:`vibe64-teacher-notes__updated`};var _hoisted_5$8={class:`vibe64-teacher-notes__actions`};var _sfc_main$27={__name:`Vibe64LearningTeacherNotes`,props:{learning:{type:Object,required:true}},setup(__props){const props=__props;const notes=computed(()=>props.learning.notes.value);const status=computed(()=>props.learning.notesState);const editing=ref(false);const confirmingClear=ref(false);const draft=ref(``);const updated=computed(()=>{const value=notes.value;if(!value?.updatedAt)return``;const when=new Date(value.updatedAt);const date=Number.isNaN(when.getTime())?``:when.toLocaleString();return`${value.updatedBy===`colleague`?`Updated by Colleague`:`Updated by you`}${date?`, ${date}`:``}`});onMounted(()=>{if(!props.learning.notes.value)props.learning.readNotes()});function edit(){draft.value=notes.value?.text||``;confirmingClear.value=false;editing.value=true}async function save(){if(await props.learning.saveNotes(draft.value))editing.value=false}async function clear(){if(await props.learning.clearNotes()){confirmingClear.value=false;editing.value=false}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:`vibe64-teacher-notes`,"aria-labelledby":`vibe64-teacher-notes-title`,"aria-busy":status.value.loading||status.value.saving,"data-test":`teacher-notes`},[_cache[9]||(_cache[9]=createBaseVNode(`h2`,{id:`vibe64-teacher-notes-title`,class:`vibe64-teacher-notes__title`},`What my teacher knows about me`,-1)),_cache[10]||(_cache[10]=createBaseVNode(`p`,{class:`vibe64-teacher-notes__intro`},` Colleague keeps a short private summary of how you learn, so it can teach you better. Only you can see it, and it never changes your lesson results. `,-1)),status.value.error?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,density:`compact`,class:`vibe64-teacher-notes__error`,"data-test":`teacher-notes-error`},{default:withCtx(()=>[createTextVNode(toDisplayString(status.value.error),1)]),_:1})):createCommentVNode(``,true),editing.value?(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VTextarea,{modelValue:draft.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>draft.value=$event),label:`Your notes (Markdown)`,variant:`outlined`,rows:`8`,"auto-grow":``,counter:unref(VIBE64_LEARNING_NOTES_MAX),maxlength:unref(VIBE64_LEARNING_NOTES_MAX),disabled:status.value.saving,"data-test":`teacher-notes-draft`},null,8,[`modelValue`,`counter`,`maxlength`,`disabled`]),createBaseVNode(`div`,_hoisted_2$10,[createVNode(VBtn,{color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`48`,loading:status.value.saving,disabled:status.value.saving||!draft.value.trim(),"data-test":`teacher-notes-save`,onClick:save},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Save`,-1)])]),_:1},8,[`loading`,`disabled`]),createVNode(VBtn,{variant:`text`,rounded:`pill`,"min-height":`48`,disabled:status.value.saving,"data-test":`teacher-notes-cancel`,onClick:_cache[1]||(_cache[1]=$event=>editing.value=false)},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`])])],64)):(openBlock(),createElementBlock(Fragment,{key:2},[notes.value?.text?(openBlock(),createBlock(Vibe64LearningMarkdown_default,{key:0,class:`vibe64-teacher-notes__text`,text:notes.value.text},null,8,[`text`])):!status.value.loading?(openBlock(),createElementBlock(`p`,_hoisted_3$9,` Nothing yet. Colleague adds notes as it teaches you. `)):createCommentVNode(``,true),notes.value?.text&&updated.value?(openBlock(),createElementBlock(`p`,_hoisted_4$8,toDisplayString(updated.value),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_5$8,[createVNode(VBtn,{variant:`tonal`,rounded:`pill`,"min-height":`48`,disabled:status.value.loading||status.value.saving,"data-test":`teacher-notes-edit`,onClick:edit},{default:withCtx(()=>[createTextVNode(toDisplayString(notes.value?.text?`Edit`:`Write notes`),1)]),_:1},8,[`disabled`]),notes.value?.text?(openBlock(),createElementBlock(Fragment,{key:0},[!confirmingClear.value?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,rounded:`pill`,"min-height":`48`,disabled:status.value.saving,"data-test":`teacher-notes-clear`,onClick:_cache[2]||(_cache[2]=$event=>confirmingClear.value=true)},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Clear`,-1)])]),_:1},8,[`disabled`])):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VBtn,{color:`error`,variant:`flat`,rounded:`pill`,"min-height":`48`,loading:status.value.saving,disabled:status.value.saving,"data-test":`teacher-notes-clear-confirm`,onClick:clear},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Clear all notes`,-1)])]),_:1},8,[`loading`,`disabled`]),createVNode(VBtn,{variant:`text`,rounded:`pill`,"min-height":`48`,disabled:status.value.saving,"data-test":`teacher-notes-clear-cancel`,onClick:_cache[3]||(_cache[3]=$event=>confirmingClear.value=false)},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Keep them`,-1)])]),_:1},8,[`disabled`])],64))],64)):createCommentVNode(``,true)])],64))],8,_hoisted_1$13)}}};var Vibe64LearningTeacherNotes_default=_plugin_vue_export_helper_default(_sfc_main$27,[[`__scopeId`,`data-v-6857364d`]]);var _hoisted_1$12={class:`vibe64-learning__bar`};var _hoisted_2$9={class:`vibe64-learning__tabs`,"aria-label":`Courses`};var _hoisted_3$8=[`aria-current`,`data-test`,`onClick`];var _hoisted_4$7={class:`vibe64-learning__content`};var _hoisted_5$7={key:0,class:`vibe64-learning__scroll`};var _hoisted_6$4={key:1,class:`vibe64-learning__scroll`};var LEARN_MODE_CLASS=`vibe64-learn-mode`;var _sfc_main$26={__name:`Vibe64LearningOverlay`,props:{authorPreview:{type:[Boolean,Object],default:false}},setup(__props){const props=__props;const learning=useVibe64Learning();const viewer=inject$1(VIBE64_ASSISTANT_VIEWER_KEY,null);const actorKey=computed(()=>String(toValue(viewer)?.actorKey||``));watch(actorKey,value=>learning?.setViewer(value),{immediate:true});onBeforeUnmount(()=>learning?.setViewer(``));watch(()=>Boolean(learning?.learnMode),value=>globalThis.document?.body?.classList.toggle(LEARN_MODE_CLASS,value),{immediate:true});onBeforeUnmount(()=>globalThis.document?.body?.classList.remove(LEARN_MODE_CLASS));const route=useRoute();const router=useRouter$1();watch(()=>[learning?.mode,route?.fullPath,learning?.state.modeBusy],(_value,previous)=>{if(!route||!router||!learning||learning.state.modeBusy)return;const target=modeRedirect({mode:learning.mode,slug:projectSlugFromRoute(route),path:route.path});if(!target||target.path===route.path)return;const modeChanged=Boolean(previous?.[0])&&previous[0]!==learning.mode;if(target.note&&!modeChanged)learning.showNotice(target.note);router.replace(target.path)},{immediate:true});watch(()=>learning?.mode?.on,(_on,wasOn)=>{if(typeof wasOn===`boolean`)learning.clearNotice()});function noticeShown(value){if(!value)learning.clearNotice()}const open=computed(()=>Boolean(learning?.state.open));const built=ref(false);watch(open,value=>{if(value)built.value=true},{immediate:true});watch(actorKey,()=>{built.value=open.value});const layer=ref(null);watch(open,async value=>{if(!value)return;await nextTick$1();const element=layer.value;if(typeof element?.focus===`function`&&!element.contains?.(globalThis.document?.activeElement))element.focus({preventScroll:true})});const courses=useVibe64LearningCourses({authorPreview:computed(()=>toValue(props.authorPreview)===true),active:open});const surface=computed(()=>learning?.state.surface||`courses`);const tabs=Object.freeze([{id:`courses`,label:`Courses`},{id:`progress`,label:`In progress`},{id:`archived`,label:`Archived`}]);useRealtimeEvent({event:VIBE64_TRAINING_LEARNER_CHANGED_EVENT,enabled:computed(()=>Boolean(actorKey.value)),onEvent:({payload}={})=>{learning?.learnerChanged(payload||{});if(open.value&&payload?.reason!==`notes`)courses.learningResource.reload()}});const confirm=computed(()=>learning?.confirmArchive||null);async function archiveAndStart(){try{await learning.confirmArchiveAndStart()}catch(cause){learning.showNotice(String(cause?.message||`The lesson did not start. Try again from Courses.`))}}function keydown(event){if(event.key===`Escape`&&!event.defaultPrevented&&!confirm.value){event.stopPropagation();learning.closeCourses()}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(unref(TrainingGuideOverlay_default)),unref(learning)&&actorKey.value&&built.value?withDirectives((openBlock(),createElementBlock(`div`,{key:0,class:`vibe64-learning`,role:`dialog`,"aria-modal":`true`,"aria-label":`Courses`,"data-pane-swipe-ignore":``,tabindex:`-1`,ref_key:`layer`,ref:layer,onKeydown:keydown},[createBaseVNode(`header`,_hoisted_1$12,[createBaseVNode(`nav`,_hoisted_2$9,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(tabs),tab=>{return openBlock(),createElementBlock(`button`,{key:tab.id,type:`button`,class:`vibe64-learning__tab`,"aria-current":surface.value===tab.id?`page`:void 0,"data-test":`learning-${tab.id}-tab`,onClick:$event=>unref(learning).show({surface:tab.id})},toDisplayString(tab.label),9,_hoisted_3$8)}),128))]),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,"min-width":`48`,"min-height":`48`,"aria-label":`Close Courses`,title:`Close Courses (your place is kept)`,"data-test":`learning-hide`,onClick:_cache[0]||(_cache[0]=$event=>unref(learning).closeCourses())},null,8,[`icon`])]),createBaseVNode(`div`,_hoisted_4$7,[surface.value===`courses`?(openBlock(),createElementBlock(`div`,_hoisted_5$7,[createVNode(Vibe64LearningCourses_default,{learning:unref(courses)},null,8,[`learning`]),createVNode(Vibe64LearningTeacherNotes_default,{learning:unref(learning)},null,8,[`learning`])])):(openBlock(),createElementBlock(`div`,_hoisted_6$4,[createVNode(Vibe64LearningAttempts_default,{learning:unref(learning),archived:surface.value===`archived`},null,8,[`learning`,`archived`])]))])],544)),[[vShow,open.value]]):createCommentVNode(``,true),unref(learning)&&actorKey.value?(openBlock(),createBlock(VDialog,{key:1,"model-value":Boolean(confirm.value),"max-width":`28rem`,style:{"z-index":`2410`},"onUpdate:modelValue":_cache[2]||(_cache[2]=value=>value||unref(learning).cancelArchive())},{default:withCtx(()=>[confirm.value?(openBlock(),createBlock(VCard,{key:0,rounded:`xl`,"data-test":`learning-archive-confirm`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-wrap`},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Archive your lesson in progress?`,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[_cache[4]||(_cache[4]=createTextVNode(` You can have one lesson in progress. Starting this one archives `,-1)),createBaseVNode(`strong`,null,toDisplayString(confirm.value.current.lessonTitle||`the lesson in progress`),1),_cache[5]||(_cache[5]=createTextVNode(` with its practice project and conversation; it stays under Archived. `,-1))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,"min-height":`48`,"data-test":`learning-archive-cancel`,onClick:_cache[1]||(_cache[1]=$event=>unref(learning).cancelArchive())},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Keep it`,-1)])]),_:1}),createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,"data-test":`learning-archive-start`,onClick:archiveAndStart},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Archive and start`,-1)])]),_:1})]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`])):createCommentVNode(``,true),unref(learning)&&actorKey.value?(openBlock(),createBlock(VSnackbar,{key:2,"model-value":Boolean(unref(learning).notice),timeout:8e3,location:`bottom`,"data-test":`learning-mode-notice`,"onUpdate:modelValue":noticeShown},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(learning).notice),1)]),_:1},8,[`model-value`])):createCommentVNode(``,true)],64)}}};var Vibe64LearningOverlay_default=_plugin_vue_export_helper_default(_sfc_main$26,[[`__scopeId`,`data-v-b721510e`]]);var _sfc_main$25={__name:`Vibe64LearningRouteHold`,setup(__props){const learning=useVibe64Learning();const viewer=inject$1(VIBE64_ASSISTANT_VIEWER_KEY,null);const route=useRoute();const queryClient=useQueryClient();const held=computed(()=>{const slug=projectSlugFromRoute(route);const actorKey=String(toValue(viewer)?.actorKey||``);if(!learning||!actorKey||!slug)return false;return learning.state.actorKey!==actorKey||!learning.state.modeRead||learning.state.modeBusy===`set`||Boolean(modeRedirect({mode:learning.mode,slug,path:route.path}))});function leaveProject(slug){const queryKey=[`vibe64`,...vibe64ProjectQueryScope(slug)];queryClient.cancelQueries({queryKey}).then(()=>queryClient.removeQueries({queryKey,predicate:query=>query.state.error?.code===VIBE64_LEARNING_MODE_PROJECT_CODE}))}watch(()=>[held.value,projectSlugFromRoute(route)],([isHeld],[wasHeld,shownSlug]=[])=>{if(isHeld&&wasHeld===false&&shownSlug)leaveProject(shownSlug)});return(_ctx,_cache)=>{return!held.value?renderSlot(_ctx.$slots,`default`,{},void 0,void 0,0):createCommentVNode(``,true)}}};var _hoisted_1$11={class:`shell-error-host`,"aria-live":`polite`};var _hoisted_2$8={key:0,class:`shell-error-host__banners`};var _hoisted_3$7={class:`shell-error-host__banner-stack`};var _hoisted_4$6={class:`d-flex align-center ga-3 flex-wrap`};var _hoisted_5$6={key:0};var _sfc_main$24={__name:`ShellErrorHost`,setup(__props){const runtime=useShellWebErrorRuntime();const store=useShellErrorPresentationStore();const snackbarEntries=computed(()=>store.channels.snackbar||[]);const bannerEntries=computed(()=>store.channels.banner||[]);const dialogEntry=computed(()=>store.channels.dialog[0]||null);const displayedSnackbarEntry=ref(null);const snackbarOpen=ref(false);function isSameSnackbarEntry(left=null,right=null){return Boolean(left?.id&&right?.id&&left.id===right.id)}function hasSnackbarEntry(entry=null){if(!entry?.id)return false;return snackbarEntries.value.some(candidate=>isSameSnackbarEntry(candidate,entry))}function openNextSnackbarEntry(){const nextEntry=snackbarEntries.value[0]||null;if(!nextEntry){displayedSnackbarEntry.value=null;snackbarOpen.value=false;return}displayedSnackbarEntry.value=nextEntry;snackbarOpen.value=true}watch(snackbarEntries,entries=>{const currentEntry=displayedSnackbarEntry.value;if(!currentEntry){openNextSnackbarEntry();return}const matchingEntry=entries.find(entry=>isSameSnackbarEntry(entry,currentEntry))||null;if(matchingEntry){displayedSnackbarEntry.value=matchingEntry;return}snackbarOpen.value=false},{immediate:true});function resolveSeverityColor(severity=`error`){const normalized=String(severity||`error`).trim().toLowerCase();if(normalized===`info`)return`info`;if(normalized===`success`)return`success`;if(normalized===`warning`)return`warning`;return`error`}function resolveSeverityIcon(severity=`error`){const normalized=String(severity||`error`).trim().toLowerCase();if(normalized===`info`)return`mdi-information-outline`;if(normalized===`success`)return`mdi-check-circle-outline`;if(normalized===`warning`)return`mdi-alert-outline`;return`mdi-alert-outline`}function resolveTimeout(entry){if(!entry)return-1;if(entry.persist)return-1;return 5e3}function dismiss(entry){if(!entry||!entry.channel||!entry.id)return;store.dismiss(entry.channel,entry.id)}function actionsFor(entry){return entry?[entry.action,...entry.additionalActions].filter(Boolean):[]}async function runAction(entry,action){if(!entry||typeof action?.handler!==`function`)return;try{await action.handler(entry)}catch(error){runtime.report({source:`shell-web.error-host.action`,message:`Error action failed.`,cause:error,intent:`blocking`,severity:`error`})}if(action.dismissOnRun!==false)dismiss(entry)}function onSnackbarModelValue(nextValue){if(nextValue===false&&displayedSnackbarEntry.value){snackbarOpen.value=false;dismiss(displayedSnackbarEntry.value)}}function onDialogModelValue(nextValue){if(nextValue===false&&dialogEntry.value&&dialogEntry.value.persist!==true)dismiss(dialogEntry.value)}function onSnackbarAfterLeave(){if(hasSnackbarEntry(displayedSnackbarEntry.value))return;openNextSnackbarEntry()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$11,[bannerEntries.value.length>0?(openBlock(),createElementBlock(`div`,_hoisted_2$8,[createBaseVNode(`div`,_hoisted_3$7,[(openBlock(true),createElementBlock(Fragment,null,renderList(bannerEntries.value,entry=>{return openBlock(),createBlock(VAlert,{key:entry.id,type:resolveSeverityColor(entry.severity),icon:resolveSeverityIcon(entry.severity),variant:`elevated`,density:`comfortable`,rounded:`lg`,border:`start`,class:`shell-error-host__banner`,closable:``,"onClick:close":$event=>dismiss(entry)},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_4$6,[createBaseVNode(`span`,null,toDisplayString(entry.message),1),createVNode(VSpacer),(openBlock(true),createElementBlock(Fragment,null,renderList(actionsFor(entry),(action,index)=>{return openBlock(),createBlock(VBtn,{key:index,variant:`text`,size:`small`,class:`text-none`,onClick:$event=>runAction(entry,action)},{default:withCtx(()=>[createTextVNode(toDisplayString(action.label),1)]),_:2},1032,[`onClick`])}),128))])]),_:2},1032,[`type`,`icon`,`onClick:close`])}),128))])])):createCommentVNode(``,true),createVNode(VSnackbar,{"model-value":snackbarOpen.value,location:`bottom end`,timeout:resolveTimeout(displayedSnackbarEntry.value),vertical:actionsFor(displayedSnackbarEntry.value).length>1,color:displayedSnackbarEntry.value?resolveSeverityColor(displayedSnackbarEntry.value.severity):void 0,"onUpdate:modelValue":onSnackbarModelValue,onAfterLeave:onSnackbarAfterLeave},{actions:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(actionsFor(displayedSnackbarEntry.value),(action,index)=>{return openBlock(),createBlock(VBtn,{key:index,variant:`text`,"min-height":`48`,onClick:$event=>runAction(displayedSnackbarEntry.value,action)},{default:withCtx(()=>[createTextVNode(toDisplayString(action.label),1)]),_:2},1032,[`onClick`])}),128)),displayedSnackbarEntry.value?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,size:`small`,onClick:_cache[0]||(_cache[0]=$event=>dismiss(displayedSnackbarEntry.value))},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(` Dismiss `,-1)])]),_:1})):createCommentVNode(``,true)]),default:withCtx(()=>[displayedSnackbarEntry.value?(openBlock(),createElementBlock(`span`,_hoisted_5$6,toDisplayString(displayedSnackbarEntry.value.message),1)):createCommentVNode(``,true)]),_:1},8,[`model-value`,`timeout`,`vertical`,`color`]),createVNode(VDialog,{"model-value":Boolean(dialogEntry.value),"max-width":`560`,persistent:Boolean(dialogEntry.value?.persist),"onUpdate:modelValue":onDialogModelValue},{default:withCtx(()=>[dialogEntry.value?(openBlock(),createBlock(VCard,{key:0},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-subtitle-1`},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Attention required`,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createTextVNode(toDisplayString(dialogEntry.value.message),1)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),(openBlock(true),createElementBlock(Fragment,null,renderList(actionsFor(dialogEntry.value),(action,index)=>{return openBlock(),createBlock(VBtn,{key:index,variant:`text`,onClick:$event=>runAction(dialogEntry.value,action)},{default:withCtx(()=>[createTextVNode(toDisplayString(action.label),1)]),_:2},1032,[`onClick`])}),128)),createVNode(VBtn,{color:`primary`,variant:`tonal`,onClick:_cache[1]||(_cache[1]=$event=>dismiss(dialogEntry.value))},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Close `,-1)])]),_:1})]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`,`persistent`])])}}};var ShellErrorHost_default=_plugin_vue_export_helper_default(_sfc_main$24,[[`__scopeId`,`data-v-d461d84d`]]);function useVibe64InAppLinks(){const router=useRouter$1();function navigateAppLink(event){if(event.defaultPrevented||event.button!==0||event.ctrlKey||event.metaKey||event.shiftKey||event.altKey)return;const anchor=event.target?.closest?.(`a[href]`);if(!anchor||anchor.hasAttribute(`download`)||anchor.relList.contains(`external`))return;const target=anchor.getAttribute(`target`);if(target&&target.toLowerCase()!==`_self`)return;const href=anchor.getAttribute(`href`);if(!href||href.startsWith(`#`))return;let url;try{url=new URL(anchor.href)}catch{return}if(url.origin!==window.location.origin||![`http:`,`https:`].includes(url.protocol)||url.username||url.password)return;const path=`${url.pathname}${url.search}${url.hash}`;const route=router.resolve(path);if(!route.matched.length||route.name===`not-found`)return;event.preventDefault();router.push(path)}onMounted(()=>document.addEventListener(`click`,navigateAppLink));onUnmounted(()=>document.removeEventListener(`click`,navigateAppLink))}var _sfc_main$23={__name:`App`,setup(__props){useVibe64InAppLinks();return(_ctx,_cache)=>{return openBlock(),createBlock(VApp,null,{default:withCtx(()=>[createVNode(_sfc_main$62,{local:``},{default:withCtx(()=>[createVNode(_sfc_main$39,null,{default:withCtx(()=>[createVNode(_sfc_main$25,null,{default:withCtx(()=>[createVNode(unref(RouterView))]),_:1}),createVNode(_sfc_main$41),createVNode(Vibe64LearningOverlay_default)]),_:1}),createVNode(_sfc_main$25,null,{default:withCtx(()=>[createVNode(unref(_sfc_main$63),{"can-configure":``,"actor-key":`local`})]),_:1})]),_:1}),createVNode(unref(ShellErrorHost_default))]),_:1})}}};var title=`Not Found`;var message=`The page you requested does not exist.`;var _sfc_main$22={__name:`NotFound`,setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(VContainer,{class:`fill-height d-flex align-center justify-center`},{default:withCtx(()=>[createVNode(VCard,{class:`pa-6 text-center`,"max-width":`560`,rounded:`lg`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-h4`},{default:withCtx(()=>[createTextVNode(toDisplayString(title))]),_:1}),createVNode(VCardText,{class:`text-medium-emphasis`},{default:withCtx(()=>[createTextVNode(toDisplayString(message))]),_:1})]),_:1})]),_:1})}}};var name={type:`string`,required:true,minLength:1,maxLength:200};var secretReference={...name,pattern:`^(?!https?:)[a-z][a-z0-9-]*:[^\\s]+$`};var authenticationSchema=createSchema({method:{...name,enum:[`oauth2`,`api-key`,`service-account`,`none`]},registrationRef:{...name,required:false},secretRef:{...secretReference,required:false}});var assistantPermission={type:`string`,enum:[`ask`,`always`,`never`]};var assistantPolicySchema=createSchema({enabled:{type:`boolean`,strictBoolean:true,defaultTo:true},defaultPermission:{...assistantPermission,defaultTo:`ask`},actions:{type:`object`,values:assistantPermission,defaultTo:{}}});var integrationSchema=createSchema({provider:name,displayName:{...name,required:false},accountMode:{...name,enum:[`shared`,`per-user`,`assistant`]},scopes:{type:`array`,items:{...name,maxLength:2048},required:true},authentication:{type:`object`,schema:authenticationSchema,required:true},settings:{type:`object`,additionalProperties:true,required:false},assistantPolicy:{type:`object`,schema:assistantPolicySchema,required:false},extensions:{type:`object`,additionalProperties:true,required:false}});var registrationSchema=createSchema({source:{...name,enum:[`own`]},grantType:{...name,enum:[`authorization_code`,`client_credentials`],required:false},clientId:{...name,maxLength:2048,required:false},clientSecretRef:{...secretReference,required:false},tokenEndpointAuthMethod:{...name,enum:[`client_secret_post`,`client_secret_basic`,`none`],required:false},callbackUrlRef:{...secretReference,required:false}});var integrationsSchema=createSchema({schemaVersion:{type:`integer`,enum:[1],required:true},integrations:{type:`object`,values:integrationSchema,required:true},registrations:{type:`object`,values:registrationSchema,required:true},extensions:{type:`object`,additionalProperties:true,required:false}});var IntegrationConfigurationError=class extends Error{constructor(fieldErrors){super(`Integration configuration is invalid.`);this.name=`IntegrationConfigurationError`;this.code=`integration_configuration_invalid`;this.statusCode=422;this.fieldErrors=fieldErrors}};function getProviderSettingsSchema(provider,settings={}){return typeof provider.settingsSchema===`function`?provider.settingsSchema(settings):provider.settingsSchema}function getProviderAuthenticationMethods(provider,settings={}){return provider.authenticationMethodsForSettings?provider.authenticationMethodsForSettings(settings):provider.authenticationMethods}function getProviderAccountModes(provider,settings={}){return provider.accountModesForSettings?provider.accountModesForSettings(settings):provider.accountModes}function getProviderScopes(provider,settings={},grantType=`authorization_code`,authenticationMethod){const scopes=provider.scopesForGrantType?provider.scopesForGrantType(grantType,settings):provider.scopesForSettings?provider.scopesForSettings(settings):provider.scopes;return authenticationMethod?scopes.filter(scope=>!scope.authenticationMethods||scope.authenticationMethods.includes(authenticationMethod)):scopes}function getProviderClientAuthenticationMethods(provider,grantType=`authorization_code`,settings={}){const methods=provider.oauthClientAuthenticationMethods;return typeof methods===`function`?methods(grantType,settings):methods||[`client_secret_post`]}function validateIntegrationConfiguration(input,{providers=[],allowUnknownProviders=false}={}){if(input?.schemaVersion!==1)throw new IntegrationConfigurationError({schemaVersion:`Use numeric schemaVersion 1; other versions require an explicit migration.`});let config;try{config=validateSchemaPayload({schema:integrationsSchema,mode:`replace`},input)}catch(error){throw new IntegrationConfigurationError(error.fieldErrors||{configuration:`Invalid configuration.`})}const fieldErrors={};const definitions=new Map(providers.map(provider=>[provider.id,provider]));const requireValue=(record,key,path)=>{if(!record[key])fieldErrors[`${path}.${key}`]=`This value is required.`};for(const field of[`integrations`,`registrations`])for(const id of Object.keys(config[field]))if(!/^[a-z][a-z0-9-]*$/u.test(id)||[`constructor`,`prototype`].includes(id))fieldErrors[`${field}.${id}`]=`Use a stable lowercase name containing letters, digits and hyphens.`;for(const[id,registration]of Object.entries(config.registrations)){const path=`registrations.${id}`;const clientCredentials=registration.grantType===`client_credentials`;const required=[`clientId`,...clientCredentials?[]:[`callbackUrlRef`],...registration.tokenEndpointAuthMethod===`none`?[]:[`clientSecretRef`]];for(const key of required)requireValue(registration,key,path);const forbidden=[...clientCredentials?[`callbackUrlRef`]:[],...registration.tokenEndpointAuthMethod===`none`?[`clientSecretRef`]:[]];for(const key of forbidden)if(Object.hasOwn(registration,key))fieldErrors[`${path}.${key}`]=`This field belongs to another credential mode.`;if(clientCredentials&®istration.tokenEndpointAuthMethod===`none`)fieldErrors[`${path}.tokenEndpointAuthMethod`]=`Client credentials require a confidential client.`}for(const[id,integration]of Object.entries(config.integrations)){const path=`integrations.${id}`;const auth=integration.authentication;const provider=definitions.get(integration.provider);const registration=config.registrations[auth.registrationRef];const grantType=registration?.grantType||`authorization_code`;if(auth.method===`oauth2`){if(!auth.registrationRef||!Object.hasOwn(config.registrations,auth.registrationRef))fieldErrors[`${path}.authentication.registrationRef`]=`Select a registration defined in this file.`;if(auth.secretRef)fieldErrors[`${path}.authentication.secretRef`]=`Use the registration's secret reference.`;if(grantType===`client_credentials`&&integration.accountMode===`per-user`)fieldErrors[`${path}.accountMode`]=`A service account cannot connect as each app user.`}else if(auth.method===`api-key`){if(!provider?.apiKeySecretOptional)requireValue(auth,`secretRef`,`${path}.authentication`);if(auth.registrationRef)fieldErrors[`${path}.authentication.registrationRef`]=`API keys do not use an OAuth registration.`}else if(auth.method===`service-account`){requireValue(auth,`secretRef`,`${path}.authentication`);if(auth.registrationRef)fieldErrors[`${path}.authentication.registrationRef`]=`Service-account credentials do not use a browser OAuth registration.`;if(integration.accountMode===`per-user`)fieldErrors[`${path}.accountMode`]=`A service account cannot connect as each app user.`}else for(const field of[`secretRef`,`registrationRef`])if(Object.hasOwn(auth,field))fieldErrors[`${path}.authentication.${field}`]=`This mode does not use credentials.`;if(new Set(integration.scopes).size!==integration.scopes.length)fieldErrors[`${path}.scopes`]=`Select each permission only once.`;if(providers.length){if(!provider){if(!allowUnknownProviders)fieldErrors[`${path}.provider`]=`Install and register this provider before using it.`;continue}for(const action of Object.keys(integration.assistantPolicy?.actions||{}))if(!provider.assistantActions?.some(item=>item.value===action))fieldErrors[`${path}.assistantPolicy.actions.${action}`]=`This provider does not declare this assistant action.`;if(provider.settingsSchema)try{integration.settings=validateSchemaPayload({schema:getProviderSettingsSchema(provider,integration.settings),mode:`replace`},integration.settings||{})}catch(error){for(const[field,message]of Object.entries(error.fieldErrors||{settings:`Check this provider's settings.`}))fieldErrors[`${path}.settings.${field}`]=message}for(const field of provider.settingsFields||[])if(field.authenticationMethods&&!field.authenticationMethods.includes(auth.method)&&Object.hasOwn(integration.settings||{},field.name))fieldErrors[`${path}.settings.${field.name}`]=`This setting belongs to another credential mode.`;if(!getProviderAccountModes(provider,integration.settings||{}).includes(integration.accountMode))fieldErrors[`${path}.accountMode`]=`This provider does not support this account mode.`;if(!getProviderAuthenticationMethods(provider,integration.settings).includes(auth.method))fieldErrors[`${path}.authentication.method`]=`This provider configuration does not support this credential mode.`;if(auth.method===`oauth2`&®istration?.source===`own`){const registrationPath=`registrations.${auth.registrationRef}`;if(!(provider.oauthGrantTypes||[`authorization_code`]).includes(grantType))fieldErrors[`${registrationPath}.grantType`]=`This provider does not support this OAuth flow.`;if(!getProviderClientAuthenticationMethods(provider,grantType,integration.settings||{}).includes(registration.tokenEndpointAuthMethod||`client_secret_post`))fieldErrors[`${registrationPath}.tokenEndpointAuthMethod`]=`This provider does not support this client authentication method.`;if(registration.clientId&&provider.validateClientId){const result=provider.validateClientId(registration.clientId);if(result!==true)fieldErrors[`${registrationPath}.clientId`]=result||`Check this provider's client identifier.`}}const scopes=getProviderScopes(provider,integration.settings||{},grantType,auth.method);const allowedScopes=new Set(scopes.map(scope=>scope.value));if(scopes.some(scope=>scope.required&&!integration.scopes.includes(scope.value)))fieldErrors[`${path}.scopes`]=`Include this provider's required permissions.`;if(integration.scopes.some(scope=>!allowedScopes.has(scope)))fieldErrors[`${path}.scopes`]=`A selected permission is not supported by this provider configuration.`;if([`oauth2`,`service-account`].includes(auth.method)&&scopes.length&&!integration.scopes.length)fieldErrors[`${path}.scopes`]=`Select at least one permission.`}}if(Object.keys(fieldErrors).length)throw new IntegrationConfigurationError(fieldErrors);return config}var _hoisted_1$10={class:`text-body-medium mb-3`};var _hoisted_2$7={key:0,role:`alert`,class:`text-error text-body-small mt-2`};var _sfc_main$21={__name:`IntegrationConfigurationFields`,props:{modelValue:{type:Object,required:true},integrationId:{type:String,required:true},provider:{type:Object,required:true},fieldErrors:{type:Object,default:()=>({})},disabled:Boolean,callbackUrl:{type:String,default:``}},emits:[`update:modelValue`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const panels=ref([`details`,`credentials`]);const integration=computed(()=>props.modelValue.integrations[props.integrationId]);const registrationId=computed(()=>integration.value?.authentication.registrationRef);const registration=computed(()=>props.modelValue.registrations[registrationId.value]);const grantType=computed(()=>registration.value?.grantType||`authorization_code`);const grantOptions=computed(()=>(props.provider.oauthGrantTypes||[`authorization_code`]).map(value=>({value,title:{authorization_code:`User consent`,client_credentials:`Service account`}[value]||value})));const modes=computed(()=>getProviderAccountModes(props.provider,integration.value.settings||{}).filter(mode=>integration.value?.authentication.method!==`oauth2`||grantType.value!==`client_credentials`||mode!==`per-user`).map(value=>({value,title:{shared:`One shared account`,"per-user":`Each app user's own account`,assistant:`Assistant access`}[value]||value})));const registrationOptions=computed(()=>Object.keys(props.modelValue.registrations));const integrationPath=computed(()=>`integrations.${props.integrationId}`);const registrationPath=computed(()=>`registrations.${registrationId.value}`);const settingProperties=computed(()=>getProviderSettingsSchema(props.provider,integration.value?.settings)?.getFieldDefinitions()||{});const authenticationOptions=computed(()=>getProviderAuthenticationMethods(props.provider,integration.value.settings).map(value=>({value,title:props.provider.authenticationLabels?.[value]||{"api-key":`API key`,"service-account":`Service account`,oauth2:`OAuth`,none:`No credentials`}[value]||value})));const visibleSettings=computed(()=>(props.provider.settingsFields||[]).filter(field=>Object.hasOwn(settingProperties.value,field.name)&&(!field.authenticationMethods||field.authenticationMethods.includes(integration.value.authentication.method))));const visibleScopes=computed(()=>getProviderScopes(props.provider,integration.value.settings||{},grantType.value,integration.value.authentication.method));const assistantPermissions=[{value:`ask`,title:`Ask each time`},{value:`always`,title:`Always allow`},{value:`never`,title:`Never allow`}];function editAssistantPolicy(changes){editIntegration({assistantPolicy:{enabled:true,defaultPermission:`ask`,actions:{},...integration.value.assistantPolicy,...changes}})}function editIntegration(changes){const next={...integration.value,...changes};for(const key of Object.keys(changes))if(changes[key]===void 0)delete next[key];const registrations={...props.modelValue.registrations};const previousRegistration=registrationId.value;if(changes.authentication&&next.authentication.method!==`oauth2`&&previousRegistration&®istrations[previousRegistration]?.source===`own`&®istrations[previousRegistration]?.clientId===``&&!Object.entries(props.modelValue.integrations).some(([id,value])=>id!==props.integrationId&&value.authentication.registrationRef===previousRegistration))delete registrations[previousRegistration];emit(`update:modelValue`,{...props.modelValue,registrations,integrations:{...props.modelValue.integrations,[props.integrationId]:next}})}function editSetting(field,value){const settings={...integration.value.settings};if(value===void 0||value===``)delete settings[field];else settings[field]=value;if(typeof props.provider.settingsSchema===`function`){const fields=getProviderSettingsSchema(props.provider,settings).getFieldDefinitions();for(const key of Object.keys(settings))if(!Object.hasOwn(fields,key))delete settings[key]}const available=getProviderScopes(props.provider,settings,grantType.value,integration.value.authentication.method);const scopes=integration.value.scopes.filter(value=>available.some(scope=>scope.value===value));for(const scope of available)if(scope.required&&!scopes.includes(scope.value))scopes.push(scope.value);const methods=getProviderAuthenticationMethods(props.provider,settings);const credentialScope=props.provider.settingsFields?.find(item=>item.name===field)?.credentialScope;const authentication=credentialScope&&credentialScope(value)!==credentialScope(integration.value.settings?.[field]??settingProperties.value[field]?.defaultTo)||!methods.includes(integration.value.authentication.method)?{method:methods[0]}:integration.value.authentication;const accountModes=getProviderAccountModes(props.provider,settings);const accountMode=accountModes.includes(integration.value.accountMode)?integration.value.accountMode:accountModes[0];if(authentication.method===`oauth2`&&!authentication.registrationRef)editAuthentication(`oauth2`,{...integration.value,settings,scopes,authentication,accountMode});else editIntegration({settings,scopes,authentication,accountMode})}function editAuthentication(method,current=integration.value){const settings={...current.settings};for(const field of props.provider.settingsFields||[])if(field.authenticationMethods&&!field.authenticationMethods.includes(method))delete settings[field.name];const scopes=getProviderScopes(props.provider,settings,`authorization_code`,method).filter(scope=>current.scopes.includes(scope.value)||scope.required||scope.authenticationMethods&&scope.recommended).map(scope=>scope.value);if(method===`oauth2`){let id=props.integrationId;let suffix=2;while(Object.hasOwn(props.modelValue.registrations,id))id=`${props.integrationId}-${suffix++}`;const prefix=id.toUpperCase().replaceAll(`-`,`_`);const grant=props.provider.oauthGrantTypes?.[0]||`authorization_code`;const clientAuthentication=getProviderClientAuthenticationMethods(props.provider,grant,settings)[0];emit(`update:modelValue`,{...props.modelValue,integrations:{...props.modelValue.integrations,[props.integrationId]:{...current,scopes,authentication:{method,registrationRef:id},...current.settings?{settings}:{}}},registrations:{...props.modelValue.registrations,[id]:{source:`own`,clientId:``,...grant===`authorization_code`?{callbackUrlRef:`env:${prefix}_CALLBACK_URL`}:{grantType:grant},...clientAuthentication!==`client_secret_post`?{tokenEndpointAuthMethod:clientAuthentication}:{},...clientAuthentication!==`none`?{clientSecretRef:`env:${prefix}_CLIENT_SECRET`}:{}}}});return}editIntegration({scopes,authentication:{method},...current.settings?{settings}:{}})}function editSecretReference(value){const authentication={...integration.value.authentication,secretRef:value};if(!value&&props.provider.apiKeySecretOptional)delete authentication.secretRef;editIntegration({authentication})}function editRegistration(field,value){emit(`update:modelValue`,{...props.modelValue,registrations:{...props.modelValue.registrations,[registrationId.value]:{...registration.value,[field]:value}}})}function editGrantType(value){const nextRegistration={...registration.value,grantType:value};const methods=getProviderClientAuthenticationMethods(props.provider,value,integration.value.settings||{});if(!methods.includes(nextRegistration.tokenEndpointAuthMethod||`client_secret_post`))nextRegistration.tokenEndpointAuthMethod=methods[0];if(nextRegistration.tokenEndpointAuthMethod===`none`)delete nextRegistration.clientSecretRef;if(value===`client_credentials`)delete nextRegistration.callbackUrlRef;const allowed=getProviderScopes(props.provider,integration.value.settings||{},value,integration.value.authentication.method).map(scope=>scope.value);emit(`update:modelValue`,{...props.modelValue,registrations:{...props.modelValue.registrations,[registrationId.value]:nextRegistration},integrations:{...props.modelValue.integrations,[props.integrationId]:{...integration.value,accountMode:value===`client_credentials`&&integration.value.accountMode===`per-user`?props.provider.accountModes.find(mode=>mode!==`per-user`):integration.value.accountMode,scopes:integration.value.scopes.filter(scope=>allowed.includes(scope))}}})}return(_ctx,_cache)=>{return integration.value?(openBlock(),createBlock(VSheet,{key:0,class:`integration-fields`,"aria-label":`${__props.provider.name} configuration`},{default:withCtx(()=>[createVNode(VExpansionPanels,{modelValue:panels.value,"onUpdate:modelValue":_cache[9]||(_cache[9]=$event=>panels.value=$event),multiple:``,variant:`accordion`,disabled:__props.disabled},{default:withCtx(()=>[createVNode(VExpansionPanel,{value:`details`,title:`Details`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createVNode(VTextField,{label:`Display name`,"model-value":integration.value.displayName||``,disabled:__props.disabled,placeholder:__props.provider.name,"error-messages":__props.fieldErrors[`${integrationPath.value}.displayName`],"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>editIntegration({displayName:$event||void 0}))},null,8,[`model-value`,`disabled`,`placeholder`,`error-messages`]),createVNode(VSelect,{label:`Account used by the application`,items:modes.value,"model-value":integration.value.accountMode,disabled:__props.disabled,"error-messages":__props.fieldErrors[`${integrationPath.value}.accountMode`],"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>editIntegration({accountMode:$event}))},null,8,[`items`,`model-value`,`disabled`,`error-messages`])]),_:1})]),_:1}),createVNode(VExpansionPanel,{value:`credentials`,title:`Credentials`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[authenticationOptions.value.length>1?(openBlock(),createBlock(VSelect,{key:0,label:`Authentication`,items:authenticationOptions.value,"model-value":integration.value.authentication.method,disabled:__props.disabled,hint:__props.provider.authenticationHint,"persistent-hint":Boolean(__props.provider.authenticationHint),"error-messages":__props.fieldErrors[`${integrationPath.value}.authentication.method`],"onUpdate:modelValue":editAuthentication},null,8,[`items`,`model-value`,`disabled`,`hint`,`persistent-hint`,`error-messages`])):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(visibleSettings.value,field=>{return openBlock(),createElementBlock(Fragment,{key:field.name},[field.searchable?(openBlock(),createBlock(VAutocomplete,{key:0,label:field.label,items:field.items,disabled:__props.disabled,"auto-select-first":``,"model-value":integration.value.settings?.[field.name]??settingProperties.value[field.name]?.defaultTo,hint:typeof field.hint===`function`?field.hint(integration.value.settings):field.hint,"persistent-hint":``,"error-messages":__props.fieldErrors[`${integrationPath.value}.settings.${field.name}`],"onUpdate:modelValue":$event=>editSetting(field.name,$event)},null,8,[`label`,`items`,`disabled`,`model-value`,`hint`,`error-messages`,`onUpdate:modelValue`])):field.items?(openBlock(),createBlock(VSelect,{key:1,label:field.label,items:field.items,disabled:__props.disabled,"model-value":integration.value.settings?.[field.name]??settingProperties.value[field.name]?.defaultTo,hint:field.hint,"persistent-hint":``,"error-messages":__props.fieldErrors[`${integrationPath.value}.settings.${field.name}`],"onUpdate:modelValue":$event=>editSetting(field.name,$event)},null,8,[`label`,`items`,`disabled`,`model-value`,`hint`,`error-messages`,`onUpdate:modelValue`])):(openBlock(),createBlock(VTextField,{key:2,label:field.label,disabled:__props.disabled,placeholder:field.placeholder,"model-value":integration.value.settings?.[field.name]??settingProperties.value[field.name]?.defaultTo??``,hint:field.hint,"persistent-hint":``,"error-messages":__props.fieldErrors[`${integrationPath.value}.settings.${field.name}`],"onUpdate:modelValue":$event=>editSetting(field.name,$event)},null,8,[`label`,`disabled`,`placeholder`,`model-value`,`hint`,`error-messages`,`onUpdate:modelValue`]))],64)}),128)),[`api-key`,`service-account`].includes(integration.value.authentication.method)?renderSlot(_ctx.$slots,`credential`,{reference:integration.value.authentication.secretRef,disabled:__props.disabled},()=>[createVNode(VTextField,{label:integration.value.authentication.method===`service-account`?__props.provider.serviceAccountReferenceLabel||`Service-account credential reference`:__props.provider.apiKeyReferenceLabel||`API key reference`,"model-value":integration.value.authentication.secretRef,disabled:__props.disabled,hint:integration.value.authentication.method===`service-account`?__props.provider.serviceAccountReferenceHint||`Store the service credential in your environment or secret store and enter its reference here.`:__props.provider.apiKeyReferenceHint||`Store the API key in your environment or secret store. Enter its reference here, such as env:SERVICE_API_KEY.`,"persistent-hint":``,"error-messages":__props.fieldErrors[`${integrationPath.value}.authentication.secretRef`],"onUpdate:modelValue":editSecretReference},null,8,[`label`,`model-value`,`disabled`,`hint`,`error-messages`])],true,1):integration.value.authentication.method===`oauth2`?(openBlock(),createElementBlock(Fragment,{key:2},[createVNode(VSelect,{label:`App registration`,items:registrationOptions.value,"model-value":registrationId.value,disabled:__props.disabled,"error-messages":__props.fieldErrors[`${integrationPath.value}.authentication.registrationRef`],"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>editIntegration({authentication:{...integration.value.authentication,registrationRef:$event}}))},null,8,[`items`,`model-value`,`disabled`,`error-messages`]),registration.value?.source===`own`?(openBlock(),createElementBlock(Fragment,{key:0},[grantOptions.value.length>1?(openBlock(),createBlock(VSelect,{key:0,label:`OAuth flow`,items:grantOptions.value,"model-value":grantType.value,disabled:__props.disabled,hint:__props.provider.oauthGrantHint,"persistent-hint":Boolean(__props.provider.oauthGrantHint),"error-messages":__props.fieldErrors[`${registrationPath.value}.grantType`],"onUpdate:modelValue":editGrantType},null,8,[`items`,`model-value`,`disabled`,`hint`,`persistent-hint`,`error-messages`])):createCommentVNode(``,true),createVNode(VTextField,{label:__props.provider.clientIdLabel||`Client ID`,hint:__props.provider.clientIdHint,"persistent-hint":Boolean(__props.provider.clientIdHint),"model-value":registration.value.clientId,autocomplete:`off`,disabled:__props.disabled,"error-messages":__props.fieldErrors[`${registrationPath.value}.clientId`],"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>editRegistration(`clientId`,$event))},null,8,[`label`,`hint`,`persistent-hint`,`model-value`,`disabled`,`error-messages`]),registration.value.tokenEndpointAuthMethod!==`none`?renderSlot(_ctx.$slots,`credential`,{reference:registration.value.clientSecretRef,disabled:__props.disabled},()=>[createVNode(VTextField,{label:`Client secret reference`,"model-value":registration.value.clientSecretRef,disabled:__props.disabled,hint:`Use an environment reference such as env:GOOGLE_CLIENT_SECRET. Keep the value outside this file.`,"persistent-hint":``,"error-messages":__props.fieldErrors[`${registrationPath.value}.clientSecretRef`],"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>editRegistration(`clientSecretRef`,$event))},null,8,[`model-value`,`disabled`,`error-messages`])],true,1):createCommentVNode(``,true),grantType.value===`authorization_code`?(openBlock(),createBlock(VTextField,{key:2,hint:`Reference the callback route implemented by your application and registered with the provider.`,"persistent-hint":``,class:`mt-4`,label:`Callback URL reference`,"model-value":registration.value.callbackUrlRef,disabled:__props.disabled,"error-messages":__props.fieldErrors[`${registrationPath.value}.callbackUrlRef`],"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>editRegistration(`callbackUrlRef`,$event))},null,8,[`model-value`,`disabled`,`error-messages`])):createCommentVNode(``,true),__props.callbackUrl&&grantType.value===`authorization_code`?(openBlock(),createBlock(VTextField,{key:3,label:`Callback URL`,"model-value":__props.callbackUrl,readonly:``},null,8,[`model-value`])):createCommentVNode(``,true)],64)):createCommentVNode(``,true)],64)):createCommentVNode(``,true)]),_:3})]),_:3}),visibleScopes.value.length&&(__props.provider.scopes.length||__props.provider.permissionsHint||[`oauth2`,`service-account`].includes(integration.value.authentication.method))?(openBlock(),createBlock(VExpansionPanel,{key:0,value:`permissions`,title:`Permissions`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_1$10,toDisplayString(__props.provider.permissionsHint||`Choose what the application needs. The account owner approves these permissions when connecting.`),1),(openBlock(true),createElementBlock(Fragment,null,renderList(visibleScopes.value,permission=>{return openBlock(),createBlock(VCheckbox,{key:permission.value,label:permission.label,value:permission.value,"model-value":integration.value.scopes,disabled:__props.disabled||permission.required,"hide-details":``,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>editIntegration({scopes:$event}))},null,8,[`label`,`value`,`model-value`,`disabled`])}),128)),__props.fieldErrors[`${integrationPath.value}.scopes`]?(openBlock(),createElementBlock(`p`,_hoisted_2$7,toDisplayString(__props.fieldErrors[`${integrationPath.value}.scopes`]),1)):createCommentVNode(``,true)]),_:1})]),_:1})):createCommentVNode(``,true),__props.provider.assistantActions?.length?(openBlock(),createBlock(VExpansionPanel,{key:1,value:`assistant`,title:`Assistant permissions`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[_cache[10]||(_cache[10]=createBaseVNode(`p`,{class:`text-body-medium mb-3`},`These choices control assistant actions for this integration. They do not grant access to the provider or replace your application's permissions.`,-1)),createVNode(VSwitch,{label:`Allow assistant access`,"model-value":integration.value.assistantPolicy?.enabled??true,disabled:__props.disabled,"error-messages":__props.fieldErrors[`${integrationPath.value}.assistantPolicy.enabled`],"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>editAssistantPolicy({enabled:$event}))},null,8,[`model-value`,`disabled`,`error-messages`]),createVNode(VSelect,{label:`Manage all permissions`,items:assistantPermissions,"model-value":integration.value.assistantPolicy?.defaultPermission||`ask`,disabled:__props.disabled||integration.value.assistantPolicy?.enabled===false,hint:`Changing this sets every assistant action below to the same choice.`,"persistent-hint":``,"error-messages":__props.fieldErrors[`${integrationPath.value}.assistantPolicy.defaultPermission`],"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>editAssistantPolicy({defaultPermission:$event,actions:{}}))},null,8,[`model-value`,`disabled`,`error-messages`]),(openBlock(true),createElementBlock(Fragment,null,renderList(__props.provider.assistantActions,action=>{return openBlock(),createBlock(VSelect,{key:action.value,label:action.label,items:assistantPermissions,"model-value":integration.value.assistantPolicy?.actions?.[action.value]||integration.value.assistantPolicy?.defaultPermission||`ask`,disabled:__props.disabled||integration.value.assistantPolicy?.enabled===false,"error-messages":__props.fieldErrors[`${integrationPath.value}.assistantPolicy.actions.${action.value}`],"onUpdate:modelValue":$event=>editAssistantPolicy({actions:{...integration.value.assistantPolicy?.actions,[action.value]:$event}})},null,8,[`label`,`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`])}),128))]),_:1})]),_:1})):createCommentVNode(``,true)]),_:3},8,[`modelValue`,`disabled`]),renderSlot(_ctx.$slots,`access`,{integration:integration.value},void 0,true)]),_:3},8,[`aria-label`])):createCommentVNode(``,true)}}};var IntegrationConfigurationFields_default=_plugin_vue_export_helper_default(_sfc_main$21,[[`__scopeId`,`data-v-5cec349f`]]);var client_exports$6=__exportAll({IntegrationConfigurationFields:()=>IntegrationConfigurationFields_default});var _hoisted_1$9={class:`crud-screen crud-screen--operator crud-add-edit-form d-flex flex-column ga-4`};var _hoisted_2$6={class:`crud-add-edit-form__actions`};var _hoisted_3$6={key:0,class:`crud-add-edit-form__state`};var _hoisted_4$5={class:`text-body-2 text-medium-emphasis mb-4`};var _hoisted_5$5={key:1,class:`pa-4`};var _sfc_main$20={__name:`CrudAddEditScreen`,props:{screen:{type:Object,required:true},resolveLookupItems:{type:Function,default:null},resolveLookupLoading:{type:Function,default:null},resolveLookupSearch:{type:Function,default:null},setLookupSearch:{type:Function,default:null}},setup(__props){const props=__props;const formRuntime=computed(()=>props.screen?.formRuntime||{});const addEdit=computed(()=>props.screen?.addEdit||formRuntime.value?.addEdit||{});const formState=computed(()=>props.screen?.formState||formRuntime.value?.form||{});const mode=computed(()=>String(unref(props.screen?.mode)||`new`).trim()||`new`);const saveLabel=computed(()=>String(unref(props.screen?.saveLabel)||`Save`).trim()||`Save`);const cancelTo=computed(()=>unref(props.screen?.cancelTo)||``);function resolveFieldErrors(fieldKey){if(typeof props.screen?.resolveFieldErrors===`function`)return props.screen.resolveFieldErrors(fieldKey);if(typeof formRuntime.value?.resolveFieldErrors===`function`)return formRuntime.value.resolveFieldErrors(fieldKey);return[]}function resolveCancelTo(target=cancelTo.value){if(typeof props.screen?.resolveCancelTo===`function`)return props.screen.resolveCancelTo(target);return target||``}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$9,[createBaseVNode(`div`,_hoisted_2$6,[renderSlot(_ctx.$slots,`actions`,{screen:__props.screen,mode:mode.value,formRuntime:formRuntime.value,formState:formState.value,addEdit:addEdit.value,saveLabel:saveLabel.value,cancelTo:resolveCancelTo(),submit:addEdit.value.submit},()=>[cancelTo.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`outlined`,to:resolveCancelTo(cancelTo.value)},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`to`])):createCommentVNode(``,true),createVNode(VBtn,{color:`primary`,variant:`flat`,disabled:addEdit.value.isSubmitDisabled,onClick:addEdit.value.submit},{default:withCtx(()=>[createTextVNode(toDisplayString(addEdit.value.isSaving?`Saving…`:saveLabel.value),1)]),_:1},8,[`disabled`,`onClick`])],true)]),createVNode(VSheet,{rounded:`lg`,border:``,class:`crud-add-edit-form__panel`},{default:withCtx(()=>[addEdit.value.loadError?(openBlock(),createElementBlock(`div`,_hoisted_3$6,[createBaseVNode(`p`,_hoisted_4$5,toDisplayString(addEdit.value.loadError),1),addEdit.value.canRetryLoad?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`tonal`,disabled:addEdit.value.isFetching,onClick:addEdit.value.refresh},{default:withCtx(()=>[createTextVNode(toDisplayString(addEdit.value.isFetching?`Retrying…`:`Retry`),1)]),_:1},8,[`disabled`,`onClick`])):createCommentVNode(``,true)])):formRuntime.value.showFormSkeleton?(openBlock(),createElementBlock(`div`,_hoisted_5$5,[createVNode(VSkeletonLoader,{type:`text@2, article`})])):(openBlock(),createBlock(VForm,{key:2,class:`pa-4`,onSubmit:withModifiers(addEdit.value.submit,[`prevent`]),novalidate:``},{default:withCtx(()=>[createVNode(VRow,{class:`crud-add-edit-form__fields`},{default:withCtx(()=>[renderSlot(_ctx.$slots,`fields`,{mode:mode.value,formRuntime:formRuntime.value,formState:formState.value,addEdit:addEdit.value,resolveFieldErrors,resolveLookupItems:__props.resolveLookupItems,resolveLookupLoading:__props.resolveLookupLoading,resolveLookupSearch:__props.resolveLookupSearch,setLookupSearch:__props.setLookupSearch},void 0,true)]),_:3})]),_:3},8,[`onSubmit`]))]),_:3})])}}};var CrudAddEditScreen_default=_plugin_vue_export_helper_default(_sfc_main$20,[[`__scopeId`,`data-v-24dfd81e`]]);var _sfc_main$19={__name:`CrudDeleteAction`,props:{action:{type:Object,required:true},resourceSingularTitle:{type:String,default:`Record`}},setup(__props){const props=__props;const resourceLabel=computed(()=>String(props.resourceSingularTitle||`Record`).trim()||`Record`);const componentId=useId();const titleId=`${componentId}-delete-title`;const descriptionId=`${componentId}-delete-description`;function closeDialog(){props.action.cancel()}function handleDialogModelUpdate(isOpen){if(!isOpen)closeDialog()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VBtn,{color:`error`,variant:`tonal`,"prepend-icon":unref(mdiDeleteOutline),"min-height":`48`,disabled:!__props.action.canDelete,onClick:__props.action.request},{default:withCtx(()=>[createTextVNode(` Delete `+toDisplayString(resourceLabel.value),1)]),_:1},8,[`prepend-icon`,`disabled`,`onClick`]),createVNode(VDialog,{"model-value":__props.action.isOpen,"max-width":`32rem`,role:`alertdialog`,"aria-modal":`true`,"aria-labelledby":titleId,"aria-describedby":descriptionId,persistent:__props.action.isDeleting,"onUpdate:modelValue":handleDialogModelUpdate},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardTitle,{id:titleId},{default:withCtx(()=>[createTextVNode(`Delete `+toDisplayString(resourceLabel.value)+`?`,1)]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`p`,{id:descriptionId,class:`mb-0`},` This permanently deletes this `+toDisplayString(resourceLabel.value.toLowerCase())+`. This action cannot be undone. `,1),__props.action.error?(openBlock(),createBlock(VAlert,{key:0,class:`mt-4`,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.action.error),1)]),_:1})):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{autofocus:``,variant:`text`,disabled:__props.action.isDeleting,onClick:closeDialog},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(` Cancel `,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`error`,variant:`flat`,disabled:!__props.action.canDelete,onClick:__props.action.confirm},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.action.isDeleting?`Deleting…`:`Delete`),1)]),_:1},8,[`disabled`,`onClick`])]),_:1})]),_:1})]),_:1},8,[`model-value`,`persistent`])],64)}}};var _hoisted_1$8={key:0,class:`crud-list-bulk-action-surface`};var _hoisted_2$5={class:`crud-list-bulk-action-surface__summary`};var _hoisted_3$5={class:`crud-list-bulk-action-surface__copy`};var _hoisted_4$4={class:`text-overline text-medium-emphasis`};var _hoisted_5$4={key:0,class:`crud-list-bulk-action-surface__actions`};var _sfc_main$18={__name:`CrudListBulkActionSurface`,props:{runtime:{type:Object,default:null},title:{type:String,default:`Selection`}},setup(__props){const props=__props;const display=useDisplay();const isCompactLayout=computed(()=>{const displayName=String(display?.name?.value||``).trim().toLowerCase();return displayName===`xs`||displayName===`sm`});const actions=computed(()=>Array.isArray(props.runtime?.actions)?props.runtime.actions:[]);const selectedCount=computed(()=>Number(props.runtime?.selectedCount?.value||0));const shouldRender=computed(()=>Boolean(props.runtime?.hasActions?.value)&&Boolean(props.runtime?.hasSelection?.value)&&selectedCount.value>0);function clearSelection(){props.runtime?.clearSelection?.()}function execute(action={}){props.runtime?.execute?.(action)}function isActionDisabled(action={}){return Boolean(props.runtime?.isActionDisabled?.(action))}function isActionExecuting(action={}){return Boolean(props.runtime?.isActionExecuting?.(action))}return(_ctx,_cache)=>{return shouldRender.value?(openBlock(),createElementBlock(`section`,_hoisted_1$8,[createBaseVNode(`div`,_hoisted_2$5,[createBaseVNode(`div`,_hoisted_3$5,[createBaseVNode(`span`,_hoisted_4$4,toDisplayString(__props.title),1),createBaseVNode(`strong`,null,toDisplayString(selectedCount.value)+` selected`,1)]),createVNode(VBtn,{size:`small`,variant:`text`,onClick:clearSelection},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(`Clear`,-1)])]),_:1})]),!isCompactLayout.value?(openBlock(),createElementBlock(`div`,_hoisted_5$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(actions.value,action=>{return openBlock(),createBlock(VBtn,{key:action.key,color:action.color,variant:action.variant,"prepend-icon":action.icon||void 0,disabled:isActionDisabled(action),onClick:$event=>execute(action)},{default:withCtx(()=>[createTextVNode(toDisplayString(isActionExecuting(action)?`${action.label}…`:action.label),1)]),_:2},1032,[`color`,`variant`,`prepend-icon`,`disabled`,`onClick`])}),128))])):(openBlock(),createBlock(VMenu,{key:1,location:`bottom end`},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{color:`primary`,variant:`tonal`}),{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(`Bulk actions`,-1)])]),_:1},16)]),default:withCtx(()=>[createVNode(VList,{density:`compact`,"min-width":`180`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(actions.value,action=>{return openBlock(),createBlock(VListItem,{key:action.key,title:isActionExecuting(action)?`${action.label}…`:action.label,"prepend-icon":action.icon||void 0,disabled:isActionDisabled(action),onClick:$event=>execute(action)},null,8,[`title`,`prepend-icon`,`disabled`,`onClick`])}),128))]),_:1})]),_:1}))])):createCommentVNode(``,true)}}};var CrudListBulkActionSurface_default=_plugin_vue_export_helper_default(_sfc_main$18,[[`__scopeId`,`data-v-03d079ce`]]);var DATE_ONLY_PATTERN=/^(\d{4})-(\d{2})-(\d{2})$/u;function parseDateOnlyValue(value=``){const match=DATE_ONLY_PATTERN.exec(String(value||``).trim());if(!match)return null;const year=Number(match[1]);const month=Number(match[2]);const day=Number(match[3]);const date=new Date(0);date.setHours(12,0,0,0);date.setFullYear(year,month-1,day);if(date.getFullYear()!==year||date.getMonth()!==month-1||date.getDate()!==day)return null;return date}function formatDateOnlyValue(value=null){const source=Array.isArray(value)?value[0]:value;const date=source instanceof Date?source:parseDateOnlyValue(source);if(!(date instanceof Date)||Number.isNaN(date.getTime()))return``;const year=date.getFullYear();if(year<0||year>9999)return``;return[String(year).padStart(4,`0`),String(date.getMonth()+1).padStart(2,`0`),String(date.getDate()).padStart(2,`0`)].join(`-`)}function formatDateOnlyDisplay(value=``,{locale=void 0}={}){const date=parseDateOnlyValue(value);if(!date)return``;try{return new Intl.DateTimeFormat(locale||void 0,{year:`numeric`,month:`short`,day:`numeric`}).format(date)}catch{return formatDateOnlyValue(date)}}var _sfc_main$17=Object.assign({inheritAttrs:false},{__name:`CrudListDateFilterControl`,props:{modelValue:{type:String,default:``},label:{type:String,required:true},controlId:{type:String,default:``},placeholder:{type:String,default:`Select date`},disabled:{type:Boolean,default:false},readonly:{type:Boolean,default:false}},emits:[`update:modelValue`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const attrs=useAttrs();const{current:currentLocale}=useLocale();const generatedId=useId();const menuOpen=ref(false);const textFieldRef=ref(null);const resolvedControlId=computed(()=>props.controlId||`crud-list-date-${generatedId}`);const pickerId=computed(()=>`${resolvedControlId.value}-picker`);const pickerValue=computed(()=>parseDateOnlyValue(props.modelValue));const displayValue=computed(()=>formatDateOnlyDisplay(props.modelValue,{locale:currentLocale?.value}));const pickerTitle=computed(()=>`${props.label} calendar`);function restoreFocus(){nextTick$1(()=>{textFieldRef.value?.focus?.()})}function openMenu(){if(props.disabled||props.readonly)return;menuOpen.value=true}function closeMenu(){menuOpen.value=false;restoreFocus()}function clearDate(){if(props.disabled||props.readonly)return;emit(`update:modelValue`,``);closeMenu()}function selectDate(value){const nextValue=formatDateOnlyValue(value);if(!nextValue)return;emit(`update:modelValue`,nextValue);closeMenu()}function handleActivatorKeydown(event){if(![`Enter`,` `,`ArrowDown`].includes(event.key))return;event.preventDefault();openMenu()}return(_ctx,_cache)=>{return openBlock(),createBlock(VMenu,{modelValue:menuOpen.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>menuOpen.value=$event),"close-on-content-click":false,"open-on-click":false,location:`bottom start`,offset:6,"min-width":`0`},{activator:withCtx(({props:activatorProps})=>[createVNode(VTextField,mergeProps({...unref(attrs),...activatorProps},{id:resolvedControlId.value,ref_key:`textFieldRef`,ref:textFieldRef,"model-value":displayValue.value,label:__props.label,placeholder:__props.placeholder,"aria-label":__props.label,"aria-controls":pickerId.value,"aria-expanded":String(menuOpen.value),"aria-haspopup":`dialog`,"data-date-filter-control":resolvedControlId.value,"append-inner-icon":`$calendar`,disabled:__props.disabled,clearable:Boolean(__props.modelValue)&&!__props.disabled&&!__props.readonly,"persistent-clear":``,"persistent-placeholder":``,readonly:``,inputmode:`none`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,class:`crud-list-date-filter-control`,"onClick:control":openMenu,"onClick:appendInner":openMenu,"onClick:clear":withModifiers(clearDate,[`stop`]),onKeydown:handleActivatorKeydown}),null,16,[`id`,`model-value`,`label`,`placeholder`,`aria-label`,`aria-controls`,`aria-expanded`,`data-date-filter-control`,`disabled`,`clearable`])]),default:withCtx(()=>[createVNode(VCard,{id:pickerId.value,"aria-label":pickerTitle.value,role:`dialog`,class:`crud-list-date-filter-control__picker`,onKeydown:withKeys(withModifiers(closeMenu,[`stop`,`prevent`]),[`esc`])},{default:withCtx(()=>[createVNode(VDatePicker,{"model-value":pickerValue.value,title:pickerTitle.value,header:__props.label,disabled:__props.disabled||__props.readonly,color:`primary`,"show-adjacent-months":``,width:`100%`,"onUpdate:modelValue":selectDate},null,8,[`model-value`,`title`,`header`,`disabled`]),createVNode(VDivider),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{variant:`text`,disabled:__props.disabled||__props.readonly||!__props.modelValue,onClick:clearDate},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Clear `,-1)])]),_:1},8,[`disabled`]),createVNode(VSpacer),createVNode(VBtn,{color:`primary`,variant:`text`,onClick:closeMenu},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Close`,-1)])]),_:1})]),_:1})]),_:1},8,[`id`,`aria-label`,`onKeydown`])]),_:1},8,[`modelValue`])}}});var CrudListDateFilterControl_default=_plugin_vue_export_helper_default(_sfc_main$17,[[`__scopeId`,`data-v-75e78026`]]);var _hoisted_1$7={key:0,class:`crud-list-filter-surface`};var _hoisted_2$4={class:`crud-list-filter-surface__summary`};var _hoisted_3$4={key:1,class:`crud-list-filter-surface__chips`};var _hoisted_4$3={class:`crud-list-filter-surface__controls`};var _hoisted_5$3=[`aria-label`,`data-filter-key`];var _hoisted_6$3={key:5,class:`crud-list-filter-surface__range`};var _hoisted_7$3={class:`crud-list-filter-surface__controls crud-list-filter-surface__controls--stacked`};var _hoisted_8$3=[`aria-label`,`data-filter-key`];var _hoisted_9$1={key:5,class:`crud-list-filter-surface__range`};var _sfc_main$16={__name:`CrudListFilterSurface`,props:{filters:{type:Object,default:()=>({})},runtime:{type:Object,default:null},title:{type:String,default:`Filters`}},setup(__props){const props=__props;const display=useDisplay();const sheetOpen=ref(false);const filterEntries=computed(()=>Object.values(props.filters&&typeof props.filters===`object`&&!Array.isArray(props.filters)?props.filters:{}).filter(filter=>filter?.key&&filter?.type));const runtimeValues=computed(()=>props.runtime?.values||{});const activeChips=computed(()=>Array.isArray(props.runtime?.activeChips?.value)?props.runtime.activeChips.value:[]);const hasActiveFilters=computed(()=>Boolean(props.runtime?.hasActiveFilters?.value));const shouldRender=computed(()=>filterEntries.value.length>0&&Boolean(props.runtime?.values));const isCompactLayout=computed(()=>{const displayName=String(display?.name?.value||``).trim().toLowerCase();return displayName===`xs`||displayName===`sm`});function optionItems(filter={}){return Array.isArray(filter.options)?filter.options:[]}function placeholder(filter={},fallback=``){return String(filter?.ui?.placeholder||fallback||``).trim()}function clearChip(chip={}){props.runtime?.clearChip?.(chip)}function clearFilters(){props.runtime?.clearFilters?.()}return(_ctx,_cache)=>{return shouldRender.value?(openBlock(),createElementBlock(`section`,_hoisted_1$7,[createBaseVNode(`div`,_hoisted_2$4,[isCompactLayout.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`tonal`,class:`crud-list-filter-surface__open`,onClick:_cache[0]||(_cache[0]=$event=>sheetOpen.value=true)},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.title)+` `,1),activeChips.value.length>0?(openBlock(),createBlock(VChip,{key:0,class:`ml-2`,size:`x-small`,color:`primary`,variant:`flat`},{default:withCtx(()=>[createTextVNode(toDisplayString(activeChips.value.length),1)]),_:1})):createCommentVNode(``,true)]),_:1})):createCommentVNode(``,true),hasActiveFilters.value?(openBlock(),createElementBlock(`div`,_hoisted_3$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(activeChips.value,chip=>{return openBlock(),createBlock(VChip,{key:chip.id,closable:``,size:`small`,variant:`tonal`,"onClick:close":$event=>clearChip(chip)},{default:withCtx(()=>[createTextVNode(toDisplayString(chip.label),1)]),_:2},1032,[`onClick:close`])}),128)),createVNode(VBtn,{size:`small`,variant:`text`,onClick:clearFilters},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Clear all`,-1)])]),_:1})])):createCommentVNode(``,true)]),!isCompactLayout.value?(openBlock(),createBlock(VSheet,{key:0,rounded:`lg`,border:``,class:`crud-list-filter-surface__panel`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_4$3,[(openBlock(true),createElementBlock(Fragment,null,renderList(filterEntries.value,filter=>{return openBlock(),createElementBlock(Fragment,{key:filter.key},[filter.type===`flag`?(openBlock(),createBlock(VSwitch,{key:0,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,color:`primary`,density:`comfortable`,"hide-details":``,class:`crud-list-filter-surface__control`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`])):filter.type===`enum`||filter.type===`enumMany`||filter.type===`presence`?(openBlock(),createBlock(VSelect,{key:1,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,items:optionItems(filter),label:filter.label,placeholder:placeholder(filter),multiple:filter.type===`enumMany`,chips:filter.type===`enumMany`,"closable-chips":filter.type===`enumMany`,clearable:``,"item-title":`label`,"item-value":`value`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,class:`crud-list-filter-surface__control`},null,8,[`modelValue`,`onUpdate:modelValue`,`items`,`label`,`placeholder`,`multiple`,`chips`,`closable-chips`])):filter.type===`recordIdMany`?(openBlock(),createBlock(VCombobox,{key:2,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,placeholder:placeholder(filter,`Enter ids`),multiple:``,chips:``,"closable-chips":``,clearable:``,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,class:`crud-list-filter-surface__control`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`placeholder`])):filter.type===`recordId`?(openBlock(),createBlock(VTextField,{key:3,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,placeholder:placeholder(filter,`Enter id`),clearable:``,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,class:`crud-list-filter-surface__control`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`placeholder`])):filter.type===`dateRange`?(openBlock(),createElementBlock(`div`,{key:4,class:`crud-list-filter-surface__range crud-list-filter-surface__range--date`,role:`group`,"aria-label":`${filter.label} date range`,"data-filter-key":filter.key,"data-filter-type":`date-range`},[createVNode(CrudListDateFilterControl_default,{modelValue:runtimeValues.value[filter.key].from,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].from=$event,label:`${filter.label} from`,"control-id":`${filter.key}-from`,placeholder:placeholder(filter,`Select start date`)},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`]),createVNode(CrudListDateFilterControl_default,{modelValue:runtimeValues.value[filter.key].to,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].to=$event,label:`${filter.label} to`,"control-id":`${filter.key}-to`,placeholder:placeholder(filter,`Select end date`)},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`])],8,_hoisted_5$3)):filter.type===`numberRange`?(openBlock(),createElementBlock(`div`,_hoisted_6$3,[createVNode(VTextField,{modelValue:runtimeValues.value[filter.key].min,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].min=$event,label:`${filter.label} min`,type:`number`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`]),createVNode(VTextField,{modelValue:runtimeValues.value[filter.key].max,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].max=$event,label:`${filter.label} max`,type:`number`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`])])):filter.type===`date`?(openBlock(),createBlock(CrudListDateFilterControl_default,{key:6,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,"control-id":filter.key,placeholder:placeholder(filter,`Select date`),class:`crud-list-filter-surface__control`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`])):createCommentVNode(``,true)],64)}),128))])]),_:1})):createCommentVNode(``,true),createVNode(VDialog,{modelValue:sheetOpen.value,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>sheetOpen.value=$event),"max-width":`640`,location:`bottom`},{default:withCtx(()=>[createVNode(VCard,{rounded:`lg`,class:`crud-list-filter-surface__sheet`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`d-flex align-center justify-space-between`},{default:withCtx(()=>[createBaseVNode(`span`,null,toDisplayString(__props.title),1),createVNode(VBtn,{variant:`text`,onClick:_cache[1]||(_cache[1]=$event=>sheetOpen.value=false)},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Close`,-1)])]),_:1})]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_7$3,[(openBlock(true),createElementBlock(Fragment,null,renderList(filterEntries.value,filter=>{return openBlock(),createElementBlock(Fragment,{key:filter.key},[filter.type===`flag`?(openBlock(),createBlock(VSwitch,{key:0,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,color:`primary`,density:`comfortable`,"hide-details":``},null,8,[`modelValue`,`onUpdate:modelValue`,`label`])):filter.type===`enum`||filter.type===`enumMany`||filter.type===`presence`?(openBlock(),createBlock(VSelect,{key:1,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,items:optionItems(filter),label:filter.label,placeholder:placeholder(filter),multiple:filter.type===`enumMany`,chips:filter.type===`enumMany`,"closable-chips":filter.type===`enumMany`,clearable:``,"item-title":`label`,"item-value":`value`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`items`,`label`,`placeholder`,`multiple`,`chips`,`closable-chips`])):filter.type===`recordIdMany`?(openBlock(),createBlock(VCombobox,{key:2,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,placeholder:placeholder(filter,`Enter ids`),multiple:``,chips:``,"closable-chips":``,clearable:``,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`placeholder`])):filter.type===`recordId`?(openBlock(),createBlock(VTextField,{key:3,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,placeholder:placeholder(filter,`Enter id`),clearable:``,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`placeholder`])):filter.type===`dateRange`?(openBlock(),createElementBlock(`div`,{key:4,class:`crud-list-filter-surface__range crud-list-filter-surface__range--date`,role:`group`,"aria-label":`${filter.label} date range`,"data-filter-key":filter.key,"data-filter-type":`date-range`},[createVNode(CrudListDateFilterControl_default,{modelValue:runtimeValues.value[filter.key].from,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].from=$event,label:`${filter.label} from`,"control-id":`${filter.key}-from`,placeholder:placeholder(filter,`Select start date`)},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`]),createVNode(CrudListDateFilterControl_default,{modelValue:runtimeValues.value[filter.key].to,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].to=$event,label:`${filter.label} to`,"control-id":`${filter.key}-to`,placeholder:placeholder(filter,`Select end date`)},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`])],8,_hoisted_8$3)):filter.type===`numberRange`?(openBlock(),createElementBlock(`div`,_hoisted_9$1,[createVNode(VTextField,{modelValue:runtimeValues.value[filter.key].min,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].min=$event,label:`${filter.label} min`,type:`number`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`]),createVNode(VTextField,{modelValue:runtimeValues.value[filter.key].max,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].max=$event,label:`${filter.label} max`,type:`number`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`])])):filter.type===`date`?(openBlock(),createBlock(CrudListDateFilterControl_default,{key:6,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,"control-id":filter.key,placeholder:placeholder(filter,`Select date`)},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`])):createCommentVNode(``,true)],64)}),128))])]),_:1}),createVNode(VCardActions,{class:`justify-space-between`},{default:withCtx(()=>[createVNode(VBtn,{variant:`text`,onClick:clearFilters},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Clear all`,-1)])]),_:1}),createVNode(VBtn,{color:`primary`,variant:`flat`,onClick:_cache[2]||(_cache[2]=$event=>sheetOpen.value=false)},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Apply`,-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`])])):createCommentVNode(``,true)}}};var CrudListFilterSurface_default=_plugin_vue_export_helper_default(_sfc_main$16,[[`__scopeId`,`data-v-5dc35e87`]]);var _sfc_main$15={__name:`CrudListRecordActionMenu`,props:{record:{type:Object,default:()=>({})},index:{type:Number,default:0},rowActions:{type:Object,default:null},viewLocation:{type:Object,default:null},editLocation:{type:Object,default:null},showView:{type:Boolean,default:false},showEdit:{type:Boolean,default:false},buttonLabel:{type:String,default:`Actions`},buttonVariant:{type:String,default:`text`},buttonSize:{type:String,default:`small`}},setup(__props){const props=__props;const visibleRowActions=computed(()=>{if(typeof props.rowActions?.visibleActionsFor!==`function`)return[];return props.rowActions.visibleActionsFor(props.record,props.index)});const hasViewAction=computed(()=>Boolean(props.showView&&props.viewLocation));const hasEditAction=computed(()=>Boolean(props.showEdit&&props.editLocation));const hasActions=computed(()=>hasViewAction.value||hasEditAction.value||visibleRowActions.value.length>0);function isRowActionLoading(action={}){return typeof props.rowActions?.isActionLoading===`function`&&props.rowActions.isActionLoading(action,props.record,props.index)}function isRowActionDisabled(action={}){return typeof props.rowActions?.isActionDisabled!==`function`||props.rowActions.isActionDisabled(action,props.record,props.index)}function runRowAction(action={}){if(typeof props.rowActions?.execute!==`function`)return;props.rowActions.execute(action,props.record,props.index)}return(_ctx,_cache)=>{return hasActions.value?(openBlock(),createBlock(VMenu,{key:0,location:`bottom end`},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{variant:__props.buttonVariant,size:__props.buttonSize}),{default:withCtx(()=>[createTextVNode(toDisplayString(__props.buttonLabel),1)]),_:1},16,[`variant`,`size`])]),default:withCtx(()=>[createVNode(VList,{density:`compact`,"min-width":`150`},{default:withCtx(()=>[hasViewAction.value?(openBlock(),createBlock(VListItem,{key:0,title:`Open`,to:__props.viewLocation},null,8,[`to`])):createCommentVNode(``,true),hasEditAction.value?(openBlock(),createBlock(VListItem,{key:1,title:`Edit`,to:__props.editLocation},null,8,[`to`])):createCommentVNode(``,true),(hasViewAction.value||hasEditAction.value)&&visibleRowActions.value.length>0?(openBlock(),createBlock(VDivider,{key:2})):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(visibleRowActions.value,action=>{return openBlock(),createBlock(VListItem,{key:action.key,title:isRowActionLoading(action)?`${action.label}…`:action.label,"base-color":action.color,disabled:isRowActionDisabled(action),onClick:$event=>runRowAction(action)},createSlots({_:2},[action.icon?{name:`prepend`,fn:withCtx(()=>[createVNode(VIcon,{icon:action.icon},null,8,[`icon`])]),key:`0`}:void 0]),1032,[`title`,`base-color`,`disabled`,`onClick`])}),128))]),_:1})]),_:1})):createCommentVNode(``,true)}}};var _hoisted_1$6={class:`crud-screen crud-screen--operator crud-list-element d-flex flex-column ga-4`};var _hoisted_2$3={class:`crud-list-actions`};var _hoisted_3$3={class:`crud-list-toolbar`};var _hoisted_4$2={key:0,class:`pa-4`};var _hoisted_5$2={key:0,class:`crud-list-state`};var _hoisted_6$2={class:`text-body-2 text-medium-emphasis mb-4`};var _hoisted_7$2={key:1,class:`crud-list-state`};var _hoisted_8$2={class:`text-body-2 text-medium-emphasis mb-4`};var _hoisted_9={class:`crud-list-cards`};var _hoisted_10={class:`crud-list-card__header`};var _hoisted_11={class:`min-w-0`};var _hoisted_12={class:`crud-list-card__title`};var _hoisted_13={class:`text-caption text-medium-emphasis`};var _hoisted_14={class:`crud-list-card__fields`};var _hoisted_15={class:`crud-list-table`};var _hoisted_16={key:0,class:`crud-list-table__select`};var _hoisted_17={key:1,class:`text-right`};var _hoisted_18={key:2,class:`text-right`};var _hoisted_19={key:3,class:`text-right`};var _hoisted_20={key:0,class:`crud-list-table__select`};var _hoisted_21={key:1,class:`text-right`};var _hoisted_22={key:2,class:`text-right`};var _hoisted_23={key:3,class:`text-right`};var _hoisted_24={key:3,class:`d-flex justify-center pa-4`};var _sfc_main$14={__name:`CrudListScreen`,props:{screen:{type:Object,required:true},createLabel:{type:String,default:`New record`},loadErrorBody:{type:String,default:`Check the connection and try again.`},emptyBody:{type:String,default:`Create the first record to start using this workflow.`}},setup(__props){const props=__props;const route=useRoute();const records=computed(()=>props.screen?.records||{});const bulkActions=computed(()=>props.screen?.bulkActions||{});const rowActions=computed(()=>props.screen?.rowActions||{});const listFilters=computed(()=>props.screen?.listFilters||{});const filterRuntime=computed(()=>props.screen?.filterRuntime||null);const displayRows=computed(()=>unref(props.screen?.displayRows)||[]);const selectableRows=computed(()=>unref(props.screen?.selectableRows)||[]);const listPrimaryAction=computed(()=>unref(props.screen?.listPrimaryAction)||``);const hasBulkActions=computed(()=>Boolean(unref(bulkActions.value?.hasActions)));const hasRowActions=computed(()=>Boolean(unref(rowActions.value?.hasActions)));const hasViewUrl=computed(()=>Boolean(props.screen?.hasViewUrl));const hasEditUrl=computed(()=>Boolean(props.screen?.hasEditUrl));function resolveListRecordTitle(record){if(typeof props.screen?.resolveRecordTitle===`function`)return props.screen.resolveRecordTitle(record);return`Record`}function formatListCardValue(value){if(typeof props.screen?.formatListCardValue===`function`)return props.screen.formatListCardValue(value);return value}function resolveViewLocation(record){const path=typeof records.value?.resolveViewUrl===`function`?records.value.resolveViewUrl(record):``;return path?{path,query:route.query}:null}function resolveEditLocation(record){const path=typeof records.value?.resolveEditUrl===`function`?records.value.resolveEditUrl(record):``;return path?{path,query:route.query}:null}function hasRowActionsFor(record,index){return typeof rowActions.value?.hasVisibleActionsFor===`function`&&rowActions.value.hasVisibleActionsFor(record,index)}function isBulkRowSelected(row={}){return typeof bulkActions.value?.isRecordSelected===`function`&&bulkActions.value.isRecordSelected(row.record,row.index)}function setBulkRowSelected(row={},selected=true){if(typeof bulkActions.value?.setRecordSelected!==`function`)return;bulkActions.value.setRecordSelected(row.record,row.index,selected)}function allSelectableRowsSelected(){return selectableRows.value.length>0&&selectableRows.value.every(row=>isBulkRowSelected(row))}function someSelectableRowsSelected(){return selectableRows.value.some(row=>isBulkRowSelected(row))}function setSelectableRowsSelected(selected=true){if(typeof bulkActions.value?.setRecordSelected!==`function`)return;for(const row of selectableRows.value)bulkActions.value.setRecordSelected(row.record,row.index,selected)}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$6,[createBaseVNode(`div`,_hoisted_2$3,[createVNode(VBtn,{color:`primary`,variant:`tonal`,disabled:records.value.isFetching,onClick:records.value.reload},{default:withCtx(()=>[createTextVNode(toDisplayString(records.value.isFetching?`Refreshing…`:`Refresh`),1)]),_:1},8,[`disabled`,`onClick`]),listPrimaryAction.value?(openBlock(),createBlock(VBtn,{key:0,class:`crud-list-primary-action`,color:`primary`,variant:`flat`,to:listPrimaryAction.value},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.createLabel),1)]),_:1},8,[`to`])):createCommentVNode(``,true)]),createVNode(VSheet,{rounded:`lg`,border:``,class:`crud-list-panel`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_3$3,[records.value.searchEnabled?(openBlock(),createBlock(VTextField,{key:0,modelValue:records.value.searchQuery,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>records.value.searchQuery=$event),label:records.value.searchLabel,placeholder:records.value.searchPlaceholder,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,clearable:``,class:`crud-list-search`,"aria-busy":records.value.isSearchDebouncing?`true`:void 0},null,8,[`modelValue`,`label`,`placeholder`,`aria-busy`])):createCommentVNode(``,true),createVNode(CrudListFilterSurface_default,{filters:listFilters.value,runtime:filterRuntime.value},null,8,[`filters`,`runtime`])]),createVNode(CrudListBulkActionSurface_default,{runtime:bulkActions.value},null,8,[`runtime`]),records.value.showListSkeleton?(openBlock(),createElementBlock(`div`,_hoisted_4$2,[createVNode(VSkeletonLoader,{type:`text@2, list-item-two-line@5`})])):(openBlock(),createElementBlock(Fragment,{key:1},[records.value.loadError?(openBlock(),createElementBlock(`div`,_hoisted_5$2,[createBaseVNode(`p`,_hoisted_6$2,toDisplayString(__props.loadErrorBody),1),createVNode(VBtn,{color:`primary`,variant:`tonal`,disabled:records.value.isFetching,onClick:records.value.reload},{default:withCtx(()=>[createTextVNode(toDisplayString(records.value.isFetching?`Retrying…`:`Retry`),1)]),_:1},8,[`disabled`,`onClick`])])):displayRows.value.length<1?(openBlock(),createElementBlock(`div`,_hoisted_7$2,[createBaseVNode(`p`,_hoisted_8$2,toDisplayString(__props.emptyBody),1),listPrimaryAction.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`flat`,to:listPrimaryAction.value},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.createLabel),1)]),_:1},8,[`to`])):createCommentVNode(``,true)])):(openBlock(),createElementBlock(Fragment,{key:2},[createBaseVNode(`div`,_hoisted_9,[(openBlock(true),createElementBlock(Fragment,null,renderList(displayRows.value,row=>{return openBlock(),createBlock(VSheet,{key:row.key,rounded:`lg`,border:``,class:`crud-list-card`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_10,[hasBulkActions.value&&row.selectable!==false?(openBlock(),createBlock(VCheckboxBtn,{key:0,"model-value":isBulkRowSelected(row),"aria-label":`Select ${resolveListRecordTitle(row.record)}`,class:`crud-list-card__select`,"onUpdate:modelValue":$event=>setBulkRowSelected(row,$event)},null,8,[`model-value`,`aria-label`,`onUpdate:modelValue`])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_11,[createBaseVNode(`div`,_hoisted_12,toDisplayString(resolveListRecordTitle(row.record)),1),createBaseVNode(`div`,_hoisted_13,toDisplayString(row.recordKey),1)]),hasViewUrl.value||hasEditUrl.value||hasRowActionsFor(row.record,row.index)?(openBlock(),createBlock(_sfc_main$15,{key:1,record:row.record,index:row.index,"row-actions":rowActions.value,"show-view":hasViewUrl.value&&!row.synthetic,"show-edit":hasEditUrl.value&&!row.synthetic,"view-location":resolveViewLocation(row.record),"edit-location":resolveEditLocation(row.record)},null,8,[`record`,`index`,`row-actions`,`show-view`,`show-edit`,`view-location`,`edit-location`])):createCommentVNode(``,true)]),createBaseVNode(`div`,_hoisted_14,[renderSlot(_ctx.$slots,`card-fields`,{record:row.record,records:records.value,index:row.index,row,formatListCardValue},void 0,true)])]),_:2},1024)}),128))]),createBaseVNode(`div`,_hoisted_15,[createVNode(VTable,{density:`comfortable`},{default:withCtx(()=>[createBaseVNode(`thead`,null,[createBaseVNode(`tr`,null,[hasBulkActions.value?(openBlock(),createElementBlock(`th`,_hoisted_16,[createVNode(VCheckboxBtn,{"model-value":allSelectableRowsSelected(),indeterminate:someSelectableRowsSelected()&&!allSelectableRowsSelected(),"aria-label":`Select visible rows`,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>setSelectableRowsSelected($event))},null,8,[`model-value`,`indeterminate`])])):createCommentVNode(``,true),renderSlot(_ctx.$slots,`table-header`,{},void 0,true),hasViewUrl.value?(openBlock(),createElementBlock(`th`,_hoisted_17)):createCommentVNode(``,true),hasEditUrl.value?(openBlock(),createElementBlock(`th`,_hoisted_18)):createCommentVNode(``,true),hasRowActions.value?(openBlock(),createElementBlock(`th`,_hoisted_19)):createCommentVNode(``,true)])]),createBaseVNode(`tbody`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(displayRows.value,row=>{return openBlock(),createElementBlock(`tr`,{key:row.key},[hasBulkActions.value?(openBlock(),createElementBlock(`td`,_hoisted_20,[row.selectable!==false?(openBlock(),createBlock(VCheckboxBtn,{key:0,"model-value":isBulkRowSelected(row),"aria-label":`Select ${resolveListRecordTitle(row.record)}`,"onUpdate:modelValue":$event=>setBulkRowSelected(row,$event)},null,8,[`model-value`,`aria-label`,`onUpdate:modelValue`])):createCommentVNode(``,true)])):createCommentVNode(``,true),renderSlot(_ctx.$slots,`table-row`,{record:row.record,records:records.value,index:row.index,row},void 0,true),hasViewUrl.value?(openBlock(),createElementBlock(`td`,_hoisted_21,[!row.synthetic?(openBlock(),createBlock(VBtn,{key:0,size:`small`,color:`primary`,variant:`outlined`,to:resolveViewLocation(row.record),disabled:!resolveViewLocation(row.record)},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(` Open `,-1)])]),_:1},8,[`to`,`disabled`])):createCommentVNode(``,true)])):createCommentVNode(``,true),hasEditUrl.value?(openBlock(),createElementBlock(`td`,_hoisted_22,[!row.synthetic?(openBlock(),createBlock(VBtn,{key:0,size:`small`,color:`primary`,variant:`tonal`,to:resolveEditLocation(row.record),disabled:!resolveEditLocation(row.record)},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Edit `,-1)])]),_:1},8,[`to`,`disabled`])):createCommentVNode(``,true)])):createCommentVNode(``,true),hasRowActions.value?(openBlock(),createElementBlock(`td`,_hoisted_23,[hasRowActionsFor(row.record,row.index)?(openBlock(),createBlock(_sfc_main$15,{key:0,record:row.record,index:row.index,"row-actions":rowActions.value,"button-label":`More`,"button-variant":`outlined`},null,8,[`record`,`index`,`row-actions`])):createCommentVNode(``,true)])):createCommentVNode(``,true)])}),128))])]),_:3})])],64)),records.value.hasMore?(openBlock(),createElementBlock(`div`,_hoisted_24,[createVNode(VBtn,{color:`primary`,variant:`outlined`,disabled:records.value.isLoadingMore,onClick:records.value.loadMore},{default:withCtx(()=>[createTextVNode(toDisplayString(records.value.isLoadingMore?`Loading more…`:`Load more`),1)]),_:1},8,[`disabled`,`onClick`])])):createCommentVNode(``,true)],64))]),_:3}),listPrimaryAction.value?(openBlock(),createBlock(VBtn,{key:0,class:`crud-list-fab`,color:`primary`,variant:`flat`,to:listPrimaryAction.value},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.createLabel),1)]),_:1},8,[`to`])):createCommentVNode(``,true)])}}};var CrudListScreen_default=_plugin_vue_export_helper_default(_sfc_main$14,[[`__scopeId`,`data-v-0a597f2b`]]);var _hoisted_1$5={class:`crud-screen crud-screen--operator crud-view-element d-flex flex-column ga-4`};var _hoisted_2$2={class:`crud-view-actions`};var _hoisted_3$2={key:0,class:`crud-view-state`};var _hoisted_4$1={class:`text-body-2 text-medium-emphasis mb-4`};var _hoisted_5$1={class:`crud-view-state__actions`};var _hoisted_6$1={key:1,class:`pa-4`};var _hoisted_7$1={key:2,class:`pa-4`};var _hoisted_8$1={key:0,class:`crud-view-supporting-content`};var _sfc_main$13={__name:`CrudViewScreen`,props:{screen:{type:Object,required:true},resourceSingularTitle:{type:String,default:`Record`},resourcePluralTitle:{type:String,default:`Records`}},setup(__props){const props=__props;const view=computed(()=>props.screen?.view||{});const listLocation=computed(()=>unref(props.screen?.listLocation)||null);const editLocation=computed(()=>unref(props.screen?.editLocation)||null);return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$5,[createBaseVNode(`div`,_hoisted_2$2,[listLocation.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`outlined`,to:listLocation.value},{default:withCtx(()=>[createTextVNode(` Back to `+toDisplayString(__props.resourcePluralTitle),1)]),_:1},8,[`to`])):createCommentVNode(``,true),renderSlot(_ctx.$slots,`actions`,{screen:__props.screen,view:view.value},void 0,true),editLocation.value?(openBlock(),createBlock(VBtn,{key:1,color:`primary`,variant:`flat`,to:editLocation.value},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(` Edit `,-1)])]),_:1},8,[`to`])):createCommentVNode(``,true)]),createVNode(VSheet,{rounded:`lg`,border:``,class:`crud-view-panel`},{default:withCtx(()=>[view.value.loadError||view.value.isNotFound?(openBlock(),createElementBlock(`div`,_hoisted_3$2,[createBaseVNode(`p`,_hoisted_4$1,toDisplayString(view.value.loadError||`This ${__props.resourceSingularTitle} could not be found.`),1),createBaseVNode(`div`,_hoisted_5$1,[view.value.loadError?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`tonal`,disabled:view.value.isFetching,onClick:view.value.refresh},{default:withCtx(()=>[createTextVNode(toDisplayString(view.value.isFetching?`Retrying…`:`Retry`),1)]),_:1},8,[`disabled`,`onClick`])):listLocation.value?(openBlock(),createBlock(VBtn,{key:1,color:`primary`,variant:`tonal`,to:listLocation.value},{default:withCtx(()=>[createTextVNode(` Back to `+toDisplayString(__props.resourcePluralTitle),1)]),_:1},8,[`to`])):createCommentVNode(``,true)])])):view.value.isLoading?(openBlock(),createElementBlock(`div`,_hoisted_6$1,[createVNode(VSkeletonLoader,{type:`text@2, list-item-two-line@5`})])):(openBlock(),createElementBlock(`div`,_hoisted_7$1,[renderSlot(_ctx.$slots,`before-fields`,{view:view.value},void 0,true),createVNode(VRow,{class:`crud-view-fields`},{default:withCtx(()=>[renderSlot(_ctx.$slots,`fields`,{view:view.value},void 0,true)]),_:3}),renderSlot(_ctx.$slots,`after-fields`,{view:view.value},void 0,true)]))]),_:3}),_ctx.$slots[`supporting-content`]?(openBlock(),createElementBlock(`div`,_hoisted_8$1,[renderSlot(_ctx.$slots,`supporting-content`,{view:view.value},void 0,true)])):createCommentVNode(``,true)])}}};var CrudViewScreen_default=_plugin_vue_export_helper_default(_sfc_main$13,[[`__scopeId`,`data-v-5a3a2569`]]);function normalizeCrudListBulkAction(rawAction={},index=0){if(!rawAction||typeof rawAction!==`object`||Array.isArray(rawAction))return null;const key=normalizeText$3(rawAction.key||rawAction.id||`action-${index+1}`);const label=normalizeText$3(rawAction.label||rawAction.title);if(!key||!label)return null;return Object.freeze({key,label,icon:normalizeText$3(rawAction.icon),color:normalizeText$3(rawAction.color,{fallback:`primary`}),variant:normalizeText$3(rawAction.variant,{fallback:`tonal`}),confirmLabel:normalizeText$3(rawAction.confirmLabel),run:typeof rawAction.run===`function`?rawAction.run:null,disabled:rawAction.disabled})}function defineCrudListBulkActions(actions=[]){if(!Array.isArray(actions))throw new TypeError(`defineCrudListBulkActions requires an array.`);const normalizedActions=[];const seenKeys=new Set;actions.forEach((rawAction,index)=>{const action=normalizeCrudListBulkAction(rawAction,index);if(!action||seenKeys.has(action.key))return;seenKeys.add(action.key);normalizedActions.push(action)});return Object.freeze(normalizedActions)}function normalizeCrudLookupApiPath(value=``){const normalized=normalizePathname$1(normalizeText$3(value));if(!normalized||normalized===`/`)return``;return normalized}function normalizeCrudLookupNamespace(value=``){const normalizedApiPath=normalizeCrudLookupApiPath(value);if(!normalizedApiPath)return``;return normalizedApiPath.slice(1)}function resolveCrudLookupApiPathFromNamespace(value=``){const normalizedNamespace=normalizeCrudLookupNamespace(value);if(!normalizedNamespace)return``;return`/${normalizedNamespace}`}var CRUD_LIST_FILTER_TYPE_FLAG=`flag`;var CRUD_LIST_FILTER_TYPE_ENUM=`enum`;var CRUD_LIST_FILTER_TYPE_ENUM_MANY=`enumMany`;var CRUD_LIST_FILTER_TYPE_RECORD_ID=`recordId`;var CRUD_LIST_FILTER_TYPE_RECORD_ID_MANY=`recordIdMany`;var CRUD_LIST_FILTER_TYPE_DATE=`date`;var CRUD_LIST_FILTER_TYPE_DATE_RANGE=`dateRange`;var CRUD_LIST_FILTER_TYPE_NUMBER_RANGE=`numberRange`;var CRUD_LIST_FILTER_TYPE_PRESENCE=`presence`;var CRUD_LIST_FILTER_TYPES=Object.freeze([CRUD_LIST_FILTER_TYPE_FLAG,CRUD_LIST_FILTER_TYPE_ENUM,CRUD_LIST_FILTER_TYPE_ENUM_MANY,CRUD_LIST_FILTER_TYPE_RECORD_ID,CRUD_LIST_FILTER_TYPE_RECORD_ID_MANY,CRUD_LIST_FILTER_TYPE_DATE,CRUD_LIST_FILTER_TYPE_DATE_RANGE,CRUD_LIST_FILTER_TYPE_NUMBER_RANGE,CRUD_LIST_FILTER_TYPE_PRESENCE]);var CRUD_LIST_FILTER_PRESENCE_PRESENT=`present`;var CRUD_LIST_FILTER_PRESENCE_MISSING=`missing`;var CRUD_LIST_FILTER_PRESENCE_OPTIONS=Object.freeze([Object.freeze({value:CRUD_LIST_FILTER_PRESENCE_PRESENT,label:`Present`}),Object.freeze({value:CRUD_LIST_FILTER_PRESENCE_MISSING,label:`Missing`})]);var CRUD_LIST_FILTER_INVALID_VALUES_REJECT=`reject`;var CRUD_LIST_FILTER_INVALID_VALUES_DISCARD=`discard`;var CRUD_LIST_FILTER_INVALID_VALUES_MODES=Object.freeze([CRUD_LIST_FILTER_INVALID_VALUES_REJECT,CRUD_LIST_FILTER_INVALID_VALUES_DISCARD]);var DATE_FILTER_PATTERN=/^\d{4}-\d{2}-\d{2}$/u;function parseCrudListRangeQueryExpression(value=null){const sourceValue=Array.isArray(value)?value[0]:value;if(sourceValue==null)return null;const normalized=typeof sourceValue===`number`?String(sourceValue):normalizeText$3(sourceValue);if(!normalized)return null;const separatorIndex=normalized.indexOf(`..`);if(separatorIndex<0)return deepFreeze({exact:true,start:normalized,end:normalized});const start=normalizeText$3(normalized.slice(0,separatorIndex));const end=normalizeText$3(normalized.slice(separatorIndex+2));if(!start&&!end)return null;return deepFreeze({exact:false,start,end})}function firstCrudListFilterValue(value){return Array.isArray(value)?value[0]:value}function normalizeDateFilterText(value){const normalized=normalizeText$3(firstCrudListFilterValue(value));if(!normalized||!DATE_FILTER_PATTERN.test(normalized))return``;return normalized}function normalizeCanonicalRecordIdList(value){return normalizeUniqueTextList(value,{acceptSingle:true}).map(entry=>normalizeCanonicalRecordIdText(entry,{fallback:``})).filter(Boolean)}function normalizeAllowedFilterTextValue(value,allowedValues=new Set){const normalized=normalizeText$3(firstCrudListFilterValue(value));if(!normalized||!allowedValues.has(normalized))return``;return normalized}function normalizeAllowedFilterTextValues(value,allowedValues=new Set){return normalizeUniqueTextList(value,{acceptSingle:true}).filter(entry=>allowedValues.has(entry))}function resolveCrudListFilterAllowedValues(filter={}){return new Set((Array.isArray(filter.options)?filter.options:[]).map(entry=>normalizeText$3(entry?.value)).filter(Boolean))}function normalizeCrudListDateRangeUiValue(rawValue){const source=rawValue&&typeof rawValue===`object`&&!Array.isArray(rawValue)?rawValue:null;if(source)return{from:normalizeDateFilterText(source.from),to:normalizeDateFilterText(source.to)};const parsed=parseCrudListRangeQueryExpression(rawValue);return{from:normalizeDateFilterText(parsed?.start),to:normalizeDateFilterText(parsed?.end)}}function normalizeCrudListNumberRangeUiValue(rawValue){const source=rawValue&&typeof rawValue===`object`&&!Array.isArray(rawValue)?rawValue:null;if(source)return{min:normalizeText$3(source.min),max:normalizeText$3(source.max)};const parsed=parseCrudListRangeQueryExpression(rawValue);return{min:normalizeText$3(parsed?.start),max:normalizeText$3(parsed?.end)}}function normalizeCrudListFilterUiValue(filter={},rawValue){const type=normalizeCrudListFilterType(filter.type);if(type===`flag`)return rawValue===true;if(type===`enum`)return normalizeAllowedFilterTextValue(rawValue,resolveCrudListFilterAllowedValues(filter));if(type===`presence`)return normalizeAllowedFilterTextValue(rawValue,new Set([CRUD_LIST_FILTER_PRESENCE_PRESENT,CRUD_LIST_FILTER_PRESENCE_MISSING]));if(type===`enumMany`)return normalizeAllowedFilterTextValues(rawValue,resolveCrudListFilterAllowedValues(filter));if(type===`recordId`)return normalizeCanonicalRecordIdText(rawValue,{fallback:``})||``;if(type===`recordIdMany`)return normalizeCanonicalRecordIdList(rawValue);if(type===`date`)return normalizeDateFilterText(rawValue);if(type===`dateRange`)return normalizeCrudListDateRangeUiValue(rawValue);if(type===`numberRange`)return normalizeCrudListNumberRangeUiValue(rawValue);return normalizeText$3(rawValue)}function normalizeCrudListFilterType(value=``){const normalized=normalizeText$3(value);if(CRUD_LIST_FILTER_TYPES.includes(normalized))return normalized;throw new TypeError(`Unsupported CRUD list filter type "${value}".`)}function normalizeCrudListFilterOption(rawOption=null,{context=`filter option`}={}){const source=typeof rawOption===`string`?{value:rawOption}:normalizeObject$1(rawOption);const value=normalizeText$3(source.value);if(!value)throw new TypeError(`${context} requires value.`);return Object.freeze({value,label:normalizeText$3(source.label)||value})}function normalizeCrudListFilterOptions(rawOptions=[],{context=`filter options`}={}){const source=Array.isArray(rawOptions)?rawOptions:[];const options=[];const seenValues=new Set;for(const rawOption of source){const option=normalizeCrudListFilterOption(rawOption,{context});if(seenValues.has(option.value))continue;seenValues.add(option.value);options.push(option)}return Object.freeze(options)}function normalizeCrudListFilterPresenceOptions(rawOptions=[]){const sourceOptions=normalizeCrudListFilterOptions(rawOptions,{context:`presence filter options`});if(sourceOptions.length<1)return CRUD_LIST_FILTER_PRESENCE_OPTIONS;const optionMap=new Map(sourceOptions.map(entry=>[entry.value,entry]));const presentOption=optionMap.get(CRUD_LIST_FILTER_PRESENCE_PRESENT);const missingOption=optionMap.get(CRUD_LIST_FILTER_PRESENCE_MISSING);if(!presentOption||!missingOption)throw new TypeError(`Presence filter options must contain both "present" and "missing" values.`);return Object.freeze([presentOption,missingOption])}function normalizeCrudListFilterLookup(rawLookup=null){if(rawLookup==null)return null;if(!rawLookup||typeof rawLookup!==`object`||Array.isArray(rawLookup))throw new TypeError(`CRUD list filter lookup must be an object.`);const source=normalizeObject$1(rawLookup);const namespace=normalizeCrudLookupNamespace(source.namespace);const apiSuffix=normalizeCrudLookupApiPath(source.apiSuffix||source.apiPath)||resolveCrudLookupApiPathFromNamespace(namespace);const labelKey=normalizeText$3(source.labelKey);const valueKey=normalizeText$3(source.valueKey)||`id`;return Object.freeze({...namespace?{namespace}:{},...apiSuffix?{apiSuffix}:{},...labelKey?{labelKey}:{},valueKey})}function resolveCrudListFilterOptionSet(rawDefinition={},type=``){if(type===`enum`||type===`enumMany`){const options=normalizeCrudListFilterOptions(rawDefinition.options,{context:`${type} filter options`});if(options.length<1)throw new TypeError(`${type} filters require at least one option.`);return options}if(type===`presence`)return normalizeCrudListFilterPresenceOptions(rawDefinition.options);return Object.freeze([])}function resolveCrudListFilterQueryKeys(definition={}){return Object.freeze([normalizeText$3(definition.queryKey)].filter(Boolean))}function normalizeCrudListFilterDefinition(rawKey=``,rawDefinition=null){const key=normalizeText$3(rawKey);if(!key)throw new TypeError(`CRUD list filter definitions require non-empty keys.`);if(!rawDefinition||typeof rawDefinition!==`object`||Array.isArray(rawDefinition))throw new TypeError(`CRUD list filter "${key}" must be an object.`);const source=normalizeObject$1(rawDefinition);const type=normalizeCrudListFilterType(source.type);const label=normalizeText$3(source.label)||key;const options=resolveCrudListFilterOptionSet(source,type);const lookup=normalizeCrudListFilterLookup(source.lookup);const chipLabel=typeof source.chipLabel===`function`?source.chipLabel:null;const ui=source.ui&&typeof source.ui===`object`&&!Array.isArray(source.ui)?deepFreeze({...source.ui}):null;const meta=source.meta&&typeof source.meta===`object`&&!Array.isArray(source.meta)?deepFreeze({...source.meta}):null;const hasDefaultValue=Object.hasOwn(source,`defaultValue`);const defaultValue=hasDefaultValue?deepFreeze(normalizeCrudListFilterUiValue({type,options},source.defaultValue)):void 0;if(type===`dateRange`){if(normalizeText$3(source.fromKey)||normalizeText$3(source.toKey))throw new TypeError(`CRUD list filter "${key}" uses unsupported split range keys. Use queryKey.`)}if(type===`numberRange`){if(normalizeText$3(source.minKey)||normalizeText$3(source.maxKey))throw new TypeError(`CRUD list filter "${key}" uses unsupported split range keys. Use queryKey.`)}return Object.freeze({key,type,label,queryKey:normalizeText$3(source.queryKey)||key,options,lookup,chipLabel,ui,meta,...hasDefaultValue?{defaultValue}:{}})}function defineCrudListFilters(definitions={}){if(!definitions||typeof definitions!==`object`||Array.isArray(definitions))throw new TypeError(`defineCrudListFilters requires an object.`);const source=normalizeObject$1(definitions);const normalized={};const seenFilterKeys=new Set;const seenQueryKeys=new Map;for(const[rawKey,rawDefinition]of Object.entries(source)){const filter=normalizeCrudListFilterDefinition(rawKey,rawDefinition);if(seenFilterKeys.has(filter.key))throw new TypeError(`Duplicate CRUD list filter key "${filter.key}".`);seenFilterKeys.add(filter.key);for(const queryKey of resolveCrudListFilterQueryKeys(filter)){const seenBy=seenQueryKeys.get(queryKey);if(seenBy)throw new TypeError(`CRUD list filters "${seenBy}" and "${filter.key}" both use query key "${queryKey}".`);seenQueryKeys.set(queryKey,filter.key)}normalized[filter.key]=filter}return deepFreeze(normalized)}function normalizeCrudListRowAction(rawAction={},index=0){if(!rawAction||typeof rawAction!==`object`||Array.isArray(rawAction))return null;const key=normalizeText$3(rawAction.key||rawAction.id||`action-${index+1}`);const label=normalizeText$3(rawAction.label||rawAction.title);if(!key||!label)return null;return Object.freeze({key,label,icon:normalizeText$3(rawAction.icon),color:normalizeText$3(rawAction.color,{fallback:`primary`}),run:typeof rawAction.run===`function`?rawAction.run:null,visible:rawAction.visible,disabled:rawAction.disabled,loading:rawAction.loading})}function defineCrudListRowActions(actions=[]){if(!Array.isArray(actions))throw new TypeError(`defineCrudListRowActions requires an array.`);const normalizedActions=[];const seenKeys=new Set;actions.forEach((rawAction,index)=>{const action=normalizeCrudListRowAction(rawAction,index);if(!action||seenKeys.has(action.key))return;seenKeys.add(action.key);normalizedActions.push(action)});return Object.freeze(normalizedActions)}function isObjectLike(value){return value!==null&&typeof value===`object`}function deepClone(value){try{return JSON.parse(JSON.stringify(value))}catch{return null}}function captureModelSnapshot(model){if(!isObjectLike(model))return null;return deepClone(model)}function restoreModelSnapshot(model,snapshot){if(!isObjectLike(model)||!isObjectLike(snapshot))return;if(Array.isArray(model)&&Array.isArray(snapshot)){model.splice(0,model.length,...snapshot);return}if(Array.isArray(model)||Array.isArray(snapshot))return;for(const key of Object.keys(model))if(!Object.prototype.hasOwnProperty.call(snapshot,key))delete model[key];for(const[key,value]of Object.entries(snapshot))model[key]=value}function watchResourceModelState({resource,model,mapLoadedToModel,resolveMapContext=null}={}){const modelSnapshot=captureModelSnapshot(model);watch(()=>resource?.query?.isPending?.value,isPending=>{if(!isPending||!modelSnapshot)return;restoreModelSnapshot(model,modelSnapshot)},{immediate:true});watch(()=>resource?.data?.value,payload=>{if(!payload||typeof mapLoadedToModel!==`function`)return;mapLoadedToModel(model,payload,typeof resolveMapContext===`function`?resolveMapContext():{})},{immediate:true})}function useAddEditCore({model,resource,queryKey,canSave,fieldBag,feedback,input,mapLoadedToModel,buildRawPayload,buildSavePayload,onSaveSuccess,validationFeedback=true,messages={}}={}){const queryClient=useQueryClient();watchResourceModelState({resource,model,mapLoadedToModel,resolveMapContext(){return{queryClient,resource}}});const submitting=ref(false);const saving=computed(()=>Boolean(submitting.value||resource?.isSaving?.value));const fieldErrors=fieldBag?.errors;const message=feedback?.message;const messageType=feedback?.messageType;const validationAttempted=ref(false);const validationErrors=computed(()=>{if(!validationAttempted.value||!input)return{};const result=validateOperationInput({input,rawPayload:resolveRawPayload()});return result.ok?{}:resolveFieldErrors(result.failure)});function resolveRawPayload(){return typeof buildRawPayload===`function`?buildRawPayload(model,{queryClient,resource}):{}}function resetValidation(){validationAttempted.value=false;fieldBag?.clear?.()}async function submit(){if(!canSave?.value||saving.value)return;feedback?.clear?.();fieldBag?.clear?.();validationAttempted.value=true;const rawPayload=resolveRawPayload();const validationResult=validateOperationInput({input,rawPayload,fieldBag,feedback:validationFeedback===false?null:feedback,validationMessage:String(messages.validation||`Validation failed.`)});if(!validationResult.ok)return;const{parsedInput}=validationResult;const savePayload=typeof buildSavePayload===`function`?buildSavePayload(parsedInput,{rawPayload,queryClient,resource}):parsedInput;try{submitting.value=true;const queryKeySnapshot=queryKey?.value;const payload=await resource.save(savePayload);if(typeof mapLoadedToModel===`function`)mapLoadedToModel(model,payload,{queryClient,resource});if(queryKeySnapshot!==void 0)queryClient.setQueryData(queryKeySnapshot,payload);if(typeof onSaveSuccess===`function`)await onSaveSuccess(payload,{queryClient,parsed:parsedInput,rawPayload,savePayload,resource});feedback?.success?.(String(messages.saveSuccess||`Saved.`))}catch(error){fieldBag?.apply?.(resolveFieldErrors(error));feedback?.error?.(error,String(messages.saveError||`Unable to save.`))}finally{submitting.value=false}}return Object.freeze({saving,fieldErrors,message,messageType,validationAttempted,validationErrors,resetValidation,submit})}var WEB_OPERATION_ADAPTER_ID=`http-web-default`;function createWebOperationAdapter(){return Object.freeze({id:WEB_OPERATION_ADAPTER_ID,useOperationScope(options={}){return useOperationScope(options)}})}var defaultWebOperationAdapter=createWebOperationAdapter();function resolveOperationAdapter(adapter,{context=`http-web operation adapter`}={}){if(adapter==null)return defaultWebOperationAdapter;if(!adapter||typeof adapter!==`object`||Array.isArray(adapter))throw new TypeError(`${context} must be an object when provided.`);if(typeof adapter.useOperationScope!==`function`)throw new TypeError(`${context} must expose useOperationScope(options).`);return adapter}function toResolvedRecordId({routeParams,recordIdParam,routeRecordId}){const explicitRecordId=toRouteParamValue(typeof routeRecordId===`function`?routeRecordId():unref(routeRecordId));if(explicitRecordId)return explicitRecordId;return toRouteParamValue(routeParams[recordIdParam])}function resolveSavedRecordId(payload,saveRecordIdSelector){const sourcePayload=asPlainObject(payload);if(typeof saveRecordIdSelector===`function`)return toRouteParamValue(saveRecordIdSelector(sourcePayload));return toRouteParamValue(sourcePayload.id)}function createAddEditUiRuntime({recordIdParam=`recordId`,routeParams=null,routeParamNames=null,routePath=``,routeRecordId=null,apiUrlTemplate=``,viewUrlTemplate=``,listUrlTemplate=``,saveRecordIdSelector=null}={}){const normalizedRecordIdParam=normalizeRouteParamName(recordIdParam,{context:`useAddEdit recordIdParam`});const normalizedApiUrlTemplate=String(apiUrlTemplate||``).trim();const normalizedViewUrlTemplate=String(viewUrlTemplate||``).trim();const normalizedListUrlTemplate=String(listUrlTemplate||``).trim();function resolveTemplatePath(urlTemplate=``,extraParams={}){const normalizedTemplate=String(urlTemplate||``).trim();if(!normalizedTemplate)return``;const currentRouteParams=resolveRouteParamsSource(routeParams);const sourceParams={...currentRouteParams,...asPlainObject(extraParams)};const currentRouteRecordId=toResolvedRecordId({routeParams:currentRouteParams,recordIdParam:normalizedRecordIdParam,routeRecordId});const resolvedRecordId=toRouteParamValue(sourceParams[normalizedRecordIdParam])||currentRouteRecordId;sourceParams[normalizedRecordIdParam]=resolvedRecordId;const currentPathname=resolveScopedRoutePathname({currentPathname:routePath,params:currentRouteParams,orderedParamNames:routeParamNames,anchorParamName:normalizedRecordIdParam,anchorParamValue:currentRouteRecordId,anchorMode:`after`});return resolveRouteTemplateLocation(normalizedTemplate,{params:sourceParams,currentPathname})}const recordId=computed(()=>toResolvedRecordId({routeParams:resolveRouteParamsSource(routeParams),recordIdParam:normalizedRecordIdParam,routeRecordId}));const apiSuffix=computed(()=>resolveTemplatePath(normalizedApiUrlTemplate));const listUrl=computed(()=>resolveTemplatePath(normalizedListUrlTemplate));const cancelUrl=computed(()=>resolveTemplatePath(normalizedViewUrlTemplate)||listUrl.value);function resolveParams(urlTemplate=``,extraParams={}){return resolveTemplatePath(urlTemplate,extraParams)}function resolveViewUrl(recordIdLike=``){const targetRecordId=toRouteParamValue(recordIdLike);if(!targetRecordId)return``;return resolveTemplatePath(normalizedViewUrlTemplate,{[normalizedRecordIdParam]:targetRecordId})}function resolveSavedViewUrl(payload={}){const targetRecordId=resolveSavedRecordId(payload,saveRecordIdSelector);if(!targetRecordId)return``;return resolveViewUrl(targetRecordId)}return Object.freeze({recordId,apiSuffix,listUrl,cancelUrl,resolveParams,resolveViewUrl,resolveSavedViewUrl})}var QUERY_PARAM_BINDING_TYPE_TEXT=`text`;var QUERY_PARAM_BINDING_TYPE_BOOLEAN=`boolean`;var QUERY_PARAM_BINDING_TYPE_NUMBER=`number`;var QUERY_PARAM_BINDING_TYPE_ARRAY=`array`;var QUERY_PARAM_BINDING_TYPE_DATE=`date`;function normalizeListSyncToRouteConfig(syncToRoute=false,{defaultSearchParam=`q`}={}){const source=syncToRoute===true?{}:asPlainObject(syncToRoute);const requested=syncToRoute===true||Object.keys(source).length>0;const queryParamBlacklist=Object.freeze(normalizeUniqueTextList(source.queryParamBlacklist));if(!requested||source.enabled===false)return Object.freeze({enabled:false,mode:`replace`,syncSearch:false,syncQueryParams:false,hydrateFromRoute:false,searchParam:normalizeText$3(defaultSearchParam)||`q`,queryParamBlacklist});const mode=normalizeText$3(source.mode).toLowerCase()===`push`?`push`:`replace`;const searchParam=normalizeText$3(source.searchParam)||normalizeText$3(defaultSearchParam)||`q`;return Object.freeze({enabled:true,mode,syncSearch:source.search!==false,syncQueryParams:source.queryParams!==false,hydrateFromRoute:source.hydrateFromRoute!==false,searchParam,queryParamBlacklist})}function normalizeQueryParamKey(value){return normalizeText$3(value)}function normalizeQueryParamValues(value){const list=Array.isArray(value)?value:[value];const normalizedValues=[];for(const entry of list){const resolvedEntry=unref(entry);if(resolvedEntry==null)continue;if(typeof resolvedEntry===`boolean`){if(resolvedEntry)normalizedValues.push(`1`);continue}if(typeof resolvedEntry===`number`){if(Number.isFinite(resolvedEntry))normalizedValues.push(String(resolvedEntry));continue}if(resolvedEntry instanceof Date){if(!Number.isNaN(resolvedEntry.getTime()))normalizedValues.push(resolvedEntry.toISOString());continue}const normalizedText=normalizeText$3(resolvedEntry);if(normalizedText)normalizedValues.push(normalizedText)}return normalizedValues}function resolveQueryParamsInput(queryParams,context={}){if(typeof queryParams===`function`)return asPlainObject(queryParams(context));return asPlainObject(unref(queryParams))}function resolveQueryParamBindingType(value){if(Array.isArray(value))return QUERY_PARAM_BINDING_TYPE_ARRAY;if(typeof value===`boolean`)return QUERY_PARAM_BINDING_TYPE_BOOLEAN;if(typeof value===`number`)return QUERY_PARAM_BINDING_TYPE_NUMBER;if(value instanceof Date)return QUERY_PARAM_BINDING_TYPE_DATE;return QUERY_PARAM_BINDING_TYPE_TEXT}function resolveArrayQueryParamItemType(values=[]){const list=Array.isArray(values)?values:[];for(const entry of list){if(entry==null)continue;if(typeof entry===`boolean`)return QUERY_PARAM_BINDING_TYPE_BOOLEAN;if(typeof entry===`number`)return QUERY_PARAM_BINDING_TYPE_NUMBER;if(entry instanceof Date)return QUERY_PARAM_BINDING_TYPE_DATE;return QUERY_PARAM_BINDING_TYPE_TEXT}return QUERY_PARAM_BINDING_TYPE_TEXT}function createWritableQueryParamBinding({source={},rawKey=``,rawValue=null,key=``,resolveRouteValue=null}={}){const valueSourceIsRef=isRef(rawValue);const read=valueSourceIsRef?()=>rawValue.value:()=>source[rawKey];const write=valueSourceIsRef?nextValue=>{rawValue.value=nextValue}:nextValue=>{source[rawKey]=nextValue};const currentValue=read();const valueType=resolveQueryParamBindingType(currentValue);return{key,valueType,arrayItemType:valueType===QUERY_PARAM_BINDING_TYPE_ARRAY?resolveArrayQueryParamItemType(currentValue):QUERY_PARAM_BINDING_TYPE_TEXT,get:read,set:write,resolveRouteValue}}function resolveQueryParamDescriptors(queryParams,context={},{routeValueResolvers=null}={}){const source=resolveQueryParamsInput(queryParams,context);const resolvers=asPlainObject(unref(routeValueResolvers));const descriptorsByKey=new Map;const canWriteToSource=typeof queryParams!==`function`;for(const[rawKey,rawValue]of Object.entries(source)){const key=normalizeQueryParamKey(rawKey);if(!key)continue;const values=normalizeQueryParamValues(rawValue);const current=descriptorsByKey.get(key)||{key,values:[],binding:null};if(values.length>0)current.values.push(...values);if(!current.binding&&canWriteToSource)current.binding=createWritableQueryParamBinding({source,rawKey,rawValue,key,resolveRouteValue:typeof resolvers[key]===`function`?resolvers[key]:null});descriptorsByKey.set(key,current)}return[...descriptorsByKey.values()].sort((left,right)=>left.key.localeCompare(right.key))}function resolveActiveQueryParamEntries(descriptors=[]){return(Array.isArray(descriptors)?descriptors:[]).filter(descriptor=>Array.isArray(descriptor?.values)&&descriptor.values.length>0).map(descriptor=>({key:descriptor.key,values:[...descriptor.values]}))}function resolveWritableQueryParamBindings(descriptors=[]){return(Array.isArray(descriptors)?descriptors:[]).map(descriptor=>descriptor?.binding||null).filter(Boolean)}function buildQueryParamEntriesToken(entries=[]){const normalizedEntries=Array.isArray(entries)?entries:[];if(normalizedEntries.length<1)return``;return normalizedEntries.map(entry=>{const key=normalizeQueryParamKey(entry?.key);const values=Array.isArray(entry?.values)?entry.values.map(value=>normalizeText$3(value)).filter(Boolean):[];if(!key||values.length<1)return``;return`${key}=${values.join(`,`)}`}).filter(Boolean).join(`&`)}function firstRouteQueryValue(value){if(Array.isArray(value))return value[0];return value}function normalizeRouteQueryValues(value){return(Array.isArray(value)?value:[value]).map(entry=>normalizeText$3(entry)).filter(Boolean)}function parseRouteBooleanValue(value,fallback=false){if(value===void 0)return fallback;if(value===null||value===``)return true;try{return normalizeBoolean(firstRouteQueryValue(value))}catch{return fallback}}function parseRouteNumberValue(value,fallback=null){if(value===void 0)return null;const normalized=normalizeText$3(firstRouteQueryValue(value));if(!normalized)return null;const parsed=Number(normalized);if(!Number.isFinite(parsed))return fallback;return parsed}function parseRouteDateValue(value,fallback=null){if(value===void 0)return null;const normalized=normalizeText$3(firstRouteQueryValue(value));if(!normalized)return null;const parsed=new Date(normalized);if(Number.isNaN(parsed.getTime()))return fallback;return parsed}function parseRouteQueryItemValue(value,itemType=QUERY_PARAM_BINDING_TYPE_TEXT,fallback=null){if(itemType===QUERY_PARAM_BINDING_TYPE_BOOLEAN)try{return normalizeBoolean(value)}catch{return fallback}if(itemType===QUERY_PARAM_BINDING_TYPE_NUMBER){const numeric=Number(value);return Number.isFinite(numeric)?numeric:fallback}if(itemType===QUERY_PARAM_BINDING_TYPE_DATE){const date=new Date(value);return Number.isNaN(date.getTime())?fallback:date}return normalizeText$3(value)||fallback}function parseRouteBindingValue(binding,routeQueryValue,context={}){if(typeof binding?.resolveRouteValue===`function`)return binding.resolveRouteValue(routeQueryValue,context);const valueType=normalizeText$3(binding?.valueType).toLowerCase();if(valueType===QUERY_PARAM_BINDING_TYPE_BOOLEAN)return parseRouteBooleanValue(routeQueryValue,false);if(valueType===QUERY_PARAM_BINDING_TYPE_NUMBER)return parseRouteNumberValue(routeQueryValue,typeof binding?.get===`function`?binding.get():null);if(valueType===QUERY_PARAM_BINDING_TYPE_DATE)return parseRouteDateValue(routeQueryValue,typeof binding?.get===`function`?binding.get():null);if(valueType===QUERY_PARAM_BINDING_TYPE_ARRAY){const itemType=normalizeText$3(binding?.arrayItemType).toLowerCase()||QUERY_PARAM_BINDING_TYPE_TEXT;return normalizeRouteQueryValues(routeQueryValue).map(value=>parseRouteQueryItemValue(value,itemType,null)).filter(value=>value!=null&&!(typeof value===`string`&&!value))}return normalizeText$3(firstRouteQueryValue(routeQueryValue))}function areQueryParamBindingItemsEqual(left,right){if(left===right)return true;if(left instanceof Date&&right instanceof Date)return left.getTime()===right.getTime();return Object.is(left,right)}function areQueryParamBindingValuesEqual(left,right){if(left===right)return true;if(left instanceof Date&&right instanceof Date)return left.getTime()===right.getTime();if(!Array.isArray(left)||!Array.isArray(right))return Object.is(left,right);if(left.length!==right.length)return false;for(let index=0;index<left.length;index+=1)if(!areQueryParamBindingItemsEqual(left[index],right[index]))return false;return true}function buildRouteQueryCompareToken(query={}){const source=asPlainObject(query);const keys=Object.keys(source).sort();const parts=[];for(const key of keys){const normalizedKey=normalizeQueryParamKey(key);if(!normalizedKey)continue;const normalizedValues=normalizeRouteQueryValues(source[key]);if(normalizedValues.length<1)continue;parts.push(`${normalizedKey}=${normalizedValues.join(`,`)}`)}return parts.join(`&`)}function mergeManagedQueryParamKeyHistory(history=[],keys=[]){const merged=new Set;for(const key of Array.isArray(history)?history:[]){const normalized=normalizeQueryParamKey(key);if(normalized)merged.add(normalized)}for(const key of Array.isArray(keys)?keys:[]){const normalized=normalizeQueryParamKey(key);if(normalized)merged.add(normalized)}return[...merged].sort((left,right)=>left.localeCompare(right))}function resolveRouteSyncManagedKeys({searchEnabled=false,searchParam=`q`,syncSearch=false,syncQueryParams=false,declaredKeys=[],keyHistory=[]}={}){const managed=new Set;if(syncSearch===true&&searchEnabled===true){const normalizedSearchParam=normalizeQueryParamKey(searchParam);if(normalizedSearchParam)managed.add(normalizedSearchParam)}if(syncQueryParams===true)for(const key of mergeManagedQueryParamKeyHistory(keyHistory,declaredKeys))managed.add(key);return[...managed].sort((left,right)=>left.localeCompare(right))}function resolveRequestQueryContext(context=null){const source=unref(context);return source&&typeof source===`object`&&!Array.isArray(source)?source:{}}function resolveRequestQueryBaseKey(sourceQueryKey=null){const source=unref(sourceQueryKey);if(Array.isArray(source))return[...source];if(source==null)return[];return[source]}function resolveRequestFieldsets(requestFieldsets=null,context={}){const source=typeof requestFieldsets===`function`?requestFieldsets(context):unref(requestFieldsets);return normalizeJsonApiFieldsets(source)}function appendRequestQueryValue(target={},key=``,values=[]){const normalizedKey=String(key||``).trim();const normalizedValues=(Array.isArray(values)?values:[]).map(value=>String(value??``).trim()).filter(Boolean);if(!normalizedKey||normalizedValues.length<1)return;const currentValue=target[normalizedKey];if(currentValue===void 0){target[normalizedKey]=normalizedValues.length===1?normalizedValues[0]:[...normalizedValues];return}target[normalizedKey]=[...Array.isArray(currentValue)?[...currentValue]:[currentValue],...normalizedValues]}function buildRequestQueryObject(entries=[],{fieldsets=null}={}){const sourceEntries=Array.isArray(entries)?entries:[];const query={};for(const entry of sourceEntries)appendRequestQueryValue(query,entry?.key,entry?.values);const normalizedFieldsets=normalizeJsonApiFieldsets(fieldsets);return Object.freeze({...query,...Object.keys(normalizedFieldsets).length>0?{fields:normalizedFieldsets}:{}})}function createRequestQueryRuntime({requestQueryParams=null,requestFieldsets=null,context=null,sourceQueryKey=null}={}){const requestQueryParamDescriptors=computed(()=>{return resolveQueryParamDescriptors(requestQueryParams,resolveRequestQueryContext(context))});const activeRequestQueryParamEntries=computed(()=>{return resolveActiveQueryParamEntries(requestQueryParamDescriptors.value)});const activeRequestQueryParamsToken=computed(()=>{return buildQueryParamEntriesToken(activeRequestQueryParamEntries.value)});const activeRequestFieldsets=computed(()=>{return resolveRequestFieldsets(requestFieldsets,resolveRequestQueryContext(context))});const activeRequestFieldsetsToken=computed(()=>{return buildJsonApiFieldsetsToken(activeRequestFieldsets.value)});const queryKeyParts=computed(()=>{const parts=[];if(activeRequestQueryParamsToken.value)parts.push(`__request_query__`,activeRequestQueryParamsToken.value);if(activeRequestFieldsetsToken.value)parts.push(`__request_fieldsets__`,activeRequestFieldsetsToken.value);return Object.freeze(parts)});const queryKey=computed(()=>{if(queryKeyParts.value.length<1)return unref(sourceQueryKey);return[...resolveRequestQueryBaseKey(sourceQueryKey),...queryKeyParts.value]});const requestQuery=computed(()=>{const query=buildRequestQueryObject(activeRequestQueryParamEntries.value,{fieldsets:activeRequestFieldsets.value});if(Object.keys(query).length<1)return null;return query});return Object.freeze({requestQueryParamDescriptors,activeRequestQueryParamEntries,activeRequestQueryParamsToken,activeRequestFieldsets,activeRequestFieldsetsToken,queryKeyParts,queryKey,requestQuery})}function useAddEdit({ownershipFilter=ROUTE_VISIBILITY_WORKSPACE,surfaceId=``,access=`auto`,resource=null,apiSuffix=``,queryKeyFactory=null,viewPermissions=[],savePermissions=[],readMethod=`GET`,readEnabled=true,writeMethod=`PATCH`,client=null,transport=null,requestRecovery=null,requestRecoveryLabel=`Resource`,placementSource=`http-web.add-edit`,fallbackLoadError=`Unable to load resource.`,fallbackSaveError=`Unable to save resource.`,fieldErrorKeys=[],clearOnRouteChange=true,model,input,mapLoadedToModel,buildRawPayload,buildSavePayload,onSaveSuccess,validationFeedback=true,requestQueryParams=null,recordIdParam=`recordId`,routeParams=null,routeRecordId=null,apiUrlTemplate=``,viewUrlTemplate=``,listUrlTemplate=``,saveRecordIdSelector=null,messages={},realtime=null,adapter=null}={}){const route=useRoute();const addEditUiRuntime=createAddEditUiRuntime({recordIdParam,routeParams:routeParams??computed(()=>route?.params||{}),routeParamNames:computed(()=>resolveRouteParamNamesInOrder(route)),routePath:computed(()=>route?.path||``),routeRecordId,apiUrlTemplate,viewUrlTemplate,listUrlTemplate,saveRecordIdSelector});const effectiveApiSuffix=String(apiUrlTemplate||``).trim()?addEditUiRuntime.apiSuffix:apiSuffix;const operationScope=resolveOperationAdapter(adapter,{context:`useAddEdit adapter`}).useOperationScope({ownershipFilter,surfaceId,access,placementSource,apiSuffix:effectiveApiSuffix,model,readEnabled,queryKeyFactory,permissionSets:{view:viewPermissions,save:savePermissions},realtime});const routeContext=operationScope.routeContext;const effectiveMessages={...resolveResourceMessages(resource,{validation:`Fix invalid values and try again.`,saveSuccess:`Saved.`,saveError:`Unable to save.`}),...messages&&typeof messages===`object`?messages:{}};const canView=operationScope.permissionGate(`view`);const canSave=operationScope.permissionGate(`save`);const queryCanRun=operationScope.queryCanRun(canView);const queryParamsContext=computed(()=>{return Object.freeze({surfaceId:operationScope.routeContext.currentSurfaceId.value,scopeParamValue:operationScope.scopeParamValue.value,ownershipFilter:operationScope.normalizedOwnershipFilter,recordId:addEditUiRuntime.recordId.value,model})});const requestQueryRuntime=createRequestQueryRuntime({requestQueryParams,context:queryParamsContext,sourceQueryKey:operationScope.queryKey});const endpointResource=useEndpointResource({queryKey:requestQueryRuntime.queryKey,path:operationScope.apiPath,enabled:queryCanRun,client,readMethod,writeMethod,readQuery:requestQueryRuntime.requestQuery,transport,requestRecovery,requestRecoveryLabel,fallbackLoadError,fallbackSaveError:String(fallbackSaveError||effectiveMessages.saveError||`Unable to save resource.`)});const feedback=useUiFeedback({source:`${placementSource}.feedback`});const fieldBag=useFieldErrorBag(fieldErrorKeys);const addEdit=useAddEditCore({model,resource:endpointResource,queryKey:requestQueryRuntime.queryKey,canSave,fieldBag,feedback,input,mapLoadedToModel,buildRawPayload,buildSavePayload,onSaveSuccess,validationFeedback,messages:effectiveMessages});setupRouteChangeCleanup({enabled:clearOnRouteChange,route:routeContext.route,feedback,onClear:addEdit.resetValidation});const isInitialLoading=operationScope.isLoading(endpointResource.isInitialLoading);const isFetching=operationScope.isLoading(endpointResource.isFetching);const isRefetching=computed(()=>Boolean(isFetching.value&&!isInitialLoading.value));const isFieldLocked=computed(()=>Boolean(!canSave.value||addEdit.saving.value||isRefetching.value));const isSubmitDisabled=computed(()=>Boolean(isInitialLoading.value||isRefetching.value||!canSave.value||addEdit.saving.value));const loadError=operationScope.loadError(endpointResource.loadError);const isLoading=operationScope.isLoading(endpointResource.isLoading);const canRetryLoad=computed(()=>Boolean(readEnabled!==false&&endpointResource?.reload));async function refresh(){if(!canRetryLoad.value)return null;return endpointResource.reload()}setupOperationErrorReporting({source:`${placementSource}.load`,loadError,dedupeWindowMs:0,loadActionFactory:()=>canRetryLoad.value?{label:`Retry`,dismissOnRun:true,handler(){refresh()}}:null});return proxyRefs({canView,canSave,loadError,isInitialLoading,isFetching,isRefetching,isFieldLocked,isSubmitDisabled,canRetryLoad,isLoading,isSaving:addEdit.saving,fieldErrors:addEdit.fieldErrors,validationAttempted:addEdit.validationAttempted,validationErrors:addEdit.validationErrors,resetValidation:addEdit.resetValidation,message:addEdit.message,messageType:addEdit.messageType,submit:addEdit.submit,refresh,resource:endpointResource,recordId:addEditUiRuntime.recordId,listUrl:addEditUiRuntime.listUrl,cancelUrl:addEditUiRuntime.cancelUrl,resolveParams:addEditUiRuntime.resolveParams,resolveViewUrl:addEditUiRuntime.resolveViewUrl,resolveSavedViewUrl:addEditUiRuntime.resolveSavedViewUrl})}var DEFAULT_LIST_LIMIT=20;function buildListRequestOptions({requestOptions=null,transport=null,pageParam=null}={}){const resolvedOptions={method:`GET`,...resolveRequestOptionsObject(requestOptions)};const sourceQuery=resolvedOptions.query&&typeof resolvedOptions.query===`object`&&!Array.isArray(resolvedOptions.query)?{...resolvedOptions.query}:{};if(!Object.hasOwn(sourceQuery,`limit`)&&!Object.hasOwn(sourceQuery,`page[limit]`))sourceQuery.limit=DEFAULT_LIST_LIMIT;if(pageParam!==null&&pageParam!==void 0&&pageParam!==``)sourceQuery.cursor=String(pageParam);if(Object.keys(sourceQuery).length>0)resolvedOptions.query=sourceQuery;else delete resolvedOptions.query;if(transport&&typeof transport===`object`)resolvedOptions.transport=transport;return resolvedOptions}function resolveRequestOptionsObject(value=null){const source=unref(value);return asPlainObject(source)}function resolveListRequestMethod(requestOptions=null){return String(resolveRequestOptionsObject(requestOptions).method||`GET`).toUpperCase()}function useListCore({queryKey,path=``,enabled=true,client=null,transport=null,initialPageParam=null,getNextPageParam,selectItems,requestOptions=null,queryOptions=null,requestRecovery=null,requestRecoveryLabel=`List`,fallbackLoadError=`Unable to load list.`}={}){const activeClient=client||getHttpWebClient();if(!activeClient||typeof activeClient.request!==`function`)throw new TypeError(`useListCore requires a client with request().`);const normalizedPath=computed(()=>resolveTextRef(path));const queryEnabled=computed(()=>resolveEnabledRef(enabled)&&Boolean(normalizedPath.value));return usePagedCollection({queryKey,initialPageParam,enabled:queryEnabled,queryFn:async({pageParam,signal})=>{const requestPath=normalizedPath.value;if(!requestPath)throw new Error(`List path is required.`);const options=buildListRequestOptions({requestOptions,transport,pageParam});options.signal=options.signal?AbortSignal.any([signal,options.signal]):signal;return activeClient.request(requestPath,options)},getNextPageParam,selectItems,queryOptions:mergeRequestRecoveryQueryMeta(queryOptions,requestRecovery,{label:requestRecoveryLabel,method:resolveListRequestMethod(requestOptions)}),fallbackLoadError})}function resolveRecordId$1(record,recordIdSelector){const item=asPlainObject(record);if(typeof recordIdSelector===`function`)return toRouteParamValue(recordIdSelector(item));return toRouteParamValue(item.id)}function createListUiRuntime({items,isInitialLoading,recordIdParam=`recordId`,recordIdSelector=null,routeParams=null,routeParamNames=null,routePath=``,viewUrlTemplate=``,editUrlTemplate=``}={}){const normalizedRecordIdParam=normalizeRouteParamName(recordIdParam,{context:`useList recordIdParam`});const normalizedViewUrlTemplate=String(viewUrlTemplate||``).trim();const normalizedEditUrlTemplate=String(editUrlTemplate||``).trim();const hasViewUrl=Boolean(normalizedViewUrlTemplate);const hasEditUrl=Boolean(normalizedEditUrlTemplate);const actionColumnCount=(hasViewUrl?1:0)+(hasEditUrl?1:0);const normalizedItems=computed(()=>Array.isArray(items?.value)?items.value:[]);const showListSkeleton=computed(()=>Boolean(isInitialLoading?.value&&normalizedItems.value.length<1));function resolveTemplatePath(urlTemplate=``,extraParams={}){const normalizedTemplate=String(urlTemplate||``).trim();if(!normalizedTemplate)return``;const currentRouteParams=resolveRouteParamsSource(routeParams);const sourceParams={...currentRouteParams,...asPlainObject(extraParams)};const currentPathname=resolveScopedRoutePathname({currentPathname:routePath,params:currentRouteParams,orderedParamNames:routeParamNames,anchorParamName:normalizedRecordIdParam,anchorParamValue:currentRouteParams[normalizedRecordIdParam],anchorMode:`before`});return resolveRouteTemplateLocation(normalizedTemplate,{params:sourceParams,currentPathname})}function resolveParams(urlTemplate=``,extraParams={}){return resolveTemplatePath(urlTemplate,extraParams)}function resolveRowKey(record,index){const recordId=resolveRecordId$1(record,recordIdSelector);if(recordId)return recordId;return`row-${index}`}function resolveViewUrl(record){if(!hasViewUrl)return``;const recordId=resolveRecordId$1(record,recordIdSelector);if(!recordId)return``;return resolveTemplatePath(normalizedViewUrlTemplate,{[normalizedRecordIdParam]:recordId})}function resolveEditUrl(record){if(!hasEditUrl)return``;const recordId=resolveRecordId$1(record,recordIdSelector);if(!recordId)return``;return resolveTemplatePath(normalizedEditUrlTemplate,{[normalizedRecordIdParam]:recordId})}return Object.freeze({hasViewUrl,hasEditUrl,actionColumnCount,showListSkeleton,resolveParams,resolveRowKey,resolveViewUrl,resolveEditUrl})}var DEFAULT_LIST_SEARCH_DEBOUNCE_MS=250;var DEFAULT_LIST_SEARCH_MIN_LENGTH=1;var LIST_SEARCH_MODE_LOCAL=`local`;var LIST_SEARCH_MODE_QUERY=`query`;function normalizeListSearchConfig(value={}){const source=asPlainObject(value);const mode=normalizeText$3(source.mode).toLowerCase()===LIST_SEARCH_MODE_LOCAL?LIST_SEARCH_MODE_LOCAL:LIST_SEARCH_MODE_QUERY;return Object.freeze({enabled:source.enabled===true,mode,queryParam:normalizeText$3(source.queryParam)||`q`,label:normalizeText$3(source.label)||`Search`,placeholder:normalizeText$3(source.placeholder),initialQuery:normalizeText$3(source.initialQuery),debounceMs:normalizeInteger(source.debounceMs,{fallback:DEFAULT_LIST_SEARCH_DEBOUNCE_MS,min:0}),minLength:normalizeInteger(source.minLength,{fallback:DEFAULT_LIST_SEARCH_MIN_LENGTH,min:DEFAULT_LIST_SEARCH_MIN_LENGTH}),fields:Object.freeze(normalizeUniqueTextList(source.fields))})}function normalizeSearchableValue(value){if(value==null)return``;if(typeof value===`string`)return normalizeText$3(value).toLowerCase();if(typeof value===`number`||typeof value===`boolean`)return String(value).toLowerCase();return``}function matchesLocalSearch(item={},query=``,searchFields=[]){const source=asPlainObject(item);const normalizedQuery=normalizeText$3(query).toLowerCase();if(!normalizedQuery)return true;const fields=Array.isArray(searchFields)?searchFields:[];if(fields.length>0)return fields.some(field=>normalizeSearchableValue(source[field]).includes(normalizedQuery));return Object.values(source).some(value=>normalizeSearchableValue(value).includes(normalizedQuery))}var EMPTY_ROUTE_SYNC_QUERY_PARAM_BLACKLIST=Object.freeze([]);function useList({ownershipFilter=ROUTE_VISIBILITY_WORKSPACE,surfaceId=``,access=`auto`,apiSuffix=``,queryKeyFactory=null,viewPermissions=[],readEnabled=true,placementSource=`http-web.list`,fallbackLoadError=`Unable to load list.`,initialPageParam=null,getNextPageParam,selectItems,client=null,transport=null,requestOptions,queryOptions,requestRecovery,requestRecoveryLabel=`List`,realtime=null,adapter=null,recordIdParam=`recordId`,recordIdSelector=null,viewUrlTemplate=``,editUrlTemplate=``,search=null,queryParams=null,routeQueryValueResolvers=null,requestQueryParams=null,requestFieldsets=null,syncToRoute=false}={}){const searchConfig=normalizeListSearchConfig(search);const routeSyncConfig=normalizeListSyncToRouteConfig(syncToRoute,{defaultSearchParam:searchConfig.queryParam});const routeSyncHydrated=ref(routeSyncConfig.enabled!==true||routeSyncConfig.hydrateFromRoute!==true);const router=routeSyncConfig.enabled===true?useRouter$1():null;const searchQuery=ref(searchConfig.initialQuery);const debouncedSearchQuery=ref(searchConfig.initialQuery);let searchDebounceTimer=null;const isSearchDebouncing=ref(false);watch(searchQuery,value=>{const normalizedValue=normalizeText$3(value);if(searchDebounceTimer)clearTimeout(searchDebounceTimer);if(searchConfig.enabled!==true){debouncedSearchQuery.value=normalizedValue;isSearchDebouncing.value=false;return}isSearchDebouncing.value=true;searchDebounceTimer=setTimeout(()=>{debouncedSearchQuery.value=normalizedValue;isSearchDebouncing.value=false;searchDebounceTimer=null},searchConfig.debounceMs)},{immediate:true});onScopeDispose(()=>{if(!searchDebounceTimer)return;clearTimeout(searchDebounceTimer);searchDebounceTimer=null});const operationScope=resolveOperationAdapter(adapter,{context:`useList adapter`}).useOperationScope({ownershipFilter,surfaceId,access,placementSource,apiSuffix,readEnabled,queryKeyFactory,permissionSets:{view:viewPermissions},realtime});if(routeSyncConfig.enabled===true&&routeSyncConfig.hydrateFromRoute===true&&routeSyncConfig.syncSearch===true&&searchConfig.enabled===true){const routeSearchValue=asPlainObject(operationScope.routeContext.route?.query||{})[routeSyncConfig.searchParam];const hydratedSearch=normalizeText$3(Array.isArray(routeSearchValue)?routeSearchValue[0]:routeSearchValue);if(searchDebounceTimer){clearTimeout(searchDebounceTimer);searchDebounceTimer=null}searchQuery.value=hydratedSearch;debouncedSearchQuery.value=hydratedSearch;isSearchDebouncing.value=false}const canView=operationScope.permissionGate(`view`);const queryParamsContext=computed(()=>{return Object.freeze({surfaceId:operationScope.routeContext.currentSurfaceId.value,scopeParamValue:operationScope.scopeParamValue.value,ownershipFilter:operationScope.normalizedOwnershipFilter})});const queryParamDescriptors=computed(()=>{return resolveQueryParamDescriptors(queryParams,queryParamsContext.value,{routeValueResolvers:routeQueryValueResolvers})});const{activeRequestQueryParamEntries,activeRequestQueryParamsToken,activeRequestFieldsets,activeRequestFieldsetsToken,queryKeyParts:requestQueryKeyParts}=createRequestQueryRuntime({requestQueryParams,requestFieldsets,context:queryParamsContext});const declaredQueryParamKeys=computed(()=>{return queryParamDescriptors.value.map(descriptor=>descriptor.key)});const activeQueryParamEntries=computed(()=>{return resolveActiveQueryParamEntries(queryParamDescriptors.value)});const activeQueryParamsToken=computed(()=>buildQueryParamEntriesToken(activeQueryParamEntries.value));const writableQueryParamBindings=computed(()=>{return resolveWritableQueryParamBindings(queryParamDescriptors.value)});const activeSearchQuery=computed(()=>{if(searchConfig.enabled!==true)return``;const normalized=normalizeText$3(debouncedSearchQuery.value);if(!normalized||normalized.length<searchConfig.minLength)return``;return normalized});const querySearchEnabled=computed(()=>searchConfig.enabled===true&&searchConfig.mode===`query`);const listPath=computed(()=>{return normalizeText$3(operationScope.apiPath.value)});const listRequestOptions=computed(()=>{const entries=[];if(querySearchEnabled.value){const queryValue=activeSearchQuery.value;if(queryValue)entries.push({key:searchConfig.queryParam,values:[queryValue]})}entries.push(...activeRequestQueryParamEntries.value);entries.push(...activeQueryParamEntries.value);const query=buildRequestQueryObject(entries,{fieldsets:activeRequestFieldsets.value});const baseOptions=asPlainObject(requestOptions);if(Object.keys(query).length<1)return baseOptions;return{...baseOptions,query}});const listQueryKey=computed(()=>{const sourceQueryKey=operationScope.queryKey.value;const baseQueryKey=Array.isArray(sourceQueryKey)?[...sourceQueryKey]:sourceQueryKey==null?[]:[sourceQueryKey];baseQueryKey.push(...requestQueryKeyParts.value);if(querySearchEnabled.value)baseQueryKey.push(`__search__`,searchConfig.queryParam,activeSearchQuery.value);if(activeQueryParamsToken.value)baseQueryKey.push(`__query__`,activeQueryParamsToken.value);return baseQueryKey});const listReadEnabled=computed(()=>canView.value&&routeSyncHydrated.value);const list=useListCore({queryKey:listQueryKey,path:listPath,enabled:operationScope.queryCanRun(listReadEnabled),client,transport,initialPageParam,getNextPageParam,selectItems,requestOptions:listRequestOptions,queryOptions,requestRecovery,requestRecoveryLabel,fallbackLoadError});const routeSyncApplying=ref(false);const routeSyncManagedKeyHistory=ref([]);const routeSyncQueryParamBlacklist=computed(()=>{if(routeSyncConfig.enabled!==true||routeSyncConfig.syncQueryParams!==true)return EMPTY_ROUTE_SYNC_QUERY_PARAM_BLACKLIST;return routeSyncConfig.queryParamBlacklist});const routeSyncQueryParamBlacklistSet=computed(()=>{return new Set(routeSyncQueryParamBlacklist.value)});if(routeSyncConfig.enabled===true&&routeSyncConfig.syncQueryParams===true)watch(declaredQueryParamKeys,nextKeys=>{routeSyncManagedKeyHistory.value=mergeManagedQueryParamKeyHistory(routeSyncManagedKeyHistory.value,nextKeys)},{immediate:true});const routeSyncManagedKeys=computed(()=>{const managedKeys=resolveRouteSyncManagedKeys({searchEnabled:searchConfig.enabled,searchParam:routeSyncConfig.searchParam,syncSearch:routeSyncConfig.enabled===true&&routeSyncConfig.syncSearch===true,syncQueryParams:routeSyncConfig.enabled===true&&routeSyncConfig.syncQueryParams===true,declaredKeys:declaredQueryParamKeys.value,keyHistory:routeSyncManagedKeyHistory.value});if(routeSyncConfig.enabled!==true||routeSyncConfig.syncQueryParams!==true)return managedKeys;const output=new Set(managedKeys);for(const key of routeSyncQueryParamBlacklist.value)output.add(key);return[...output].sort((left,right)=>left.localeCompare(right))});const routeSyncDesiredQuery=computed(()=>{if(routeSyncConfig.enabled!==true)return{};const desiredQuery={};if(routeSyncConfig.syncSearch===true&&searchConfig.enabled===true){const normalizedSearch=normalizeText$3(searchQuery.value);if(normalizedSearch)desiredQuery[routeSyncConfig.searchParam]=normalizedSearch}if(routeSyncConfig.syncQueryParams===true)for(const entry of activeQueryParamEntries.value){if(routeSyncQueryParamBlacklistSet.value.has(entry.key))continue;if(entry.values.length===1){desiredQuery[entry.key]=entry.values[0];continue}desiredQuery[entry.key]=[...entry.values]}return desiredQuery});if(routeSyncConfig.enabled===true){watch(()=>operationScope.routeContext.route?.query||{},routeQuery=>{const initialHydration=routeSyncHydrated.value!==true;if(routeSyncConfig.hydrateFromRoute!==true||routeSyncApplying.value===true){routeSyncHydrated.value=true;return}const routeQuerySource=asPlainObject(routeQuery);if(routeSyncConfig.syncSearch===true&&searchConfig.enabled===true){const routeSearchValue=routeQuerySource[routeSyncConfig.searchParam];const nextSearch=normalizeText$3(Array.isArray(routeSearchValue)?routeSearchValue[0]:routeSearchValue);if(nextSearch!==searchQuery.value)searchQuery.value=nextSearch}if(routeSyncConfig.syncQueryParams===true)for(const binding of writableQueryParamBindings.value){if(routeSyncQueryParamBlacklistSet.value.has(binding.key))continue;const nextValue=parseRouteBindingValue(binding,routeQuerySource[binding.key],{initial:initialHydration});const currentValue=typeof binding.get===`function`?binding.get():void 0;if(areQueryParamBindingValuesEqual(currentValue,nextValue))continue;try{binding.set(nextValue)}catch{}}routeSyncHydrated.value=true},{immediate:true});watch([routeSyncDesiredQuery,routeSyncManagedKeys],async([desiredQuery,managedKeys])=>{if(routeSyncHydrated.value!==true||routeSyncApplying.value===true)return;const managedKeySet=new Set(Array.isArray(managedKeys)?managedKeys:[]);const currentQuery=asPlainObject(operationScope.routeContext.route?.query||{});const nextQuery={};for(const[key,value]of Object.entries(currentQuery)){if(managedKeySet.has(key))continue;nextQuery[key]=value}for(const[key,value]of Object.entries(asPlainObject(desiredQuery)))nextQuery[key]=value;if(buildRouteQueryCompareToken(currentQuery)===buildRouteQueryCompareToken(nextQuery))return;routeSyncApplying.value=true;try{if(routeSyncConfig.mode===`push`)await router.push({query:nextQuery});else await router.replace({query:nextQuery})}finally{routeSyncApplying.value=false}})}watch(activeSearchQuery,(nextValue,previousValue)=>{if(!querySearchEnabled.value)return;if(nextValue===previousValue)return;list.trimToFirstPage()});watch([activeQueryParamsToken,activeRequestQueryParamsToken,activeRequestFieldsetsToken],()=>{list.trimToFirstPage()});const filteredItems=computed(()=>{const sourceItems=Array.isArray(list.items.value)?list.items.value:[];if(searchConfig.enabled!==true||searchConfig.mode!==`local`)return sourceItems;const queryValue=activeSearchQuery.value;if(!queryValue)return sourceItems;return sourceItems.filter(item=>matchesLocalSearch(item,queryValue,searchConfig.fields))});const isInitialLoading=operationScope.isLoading(list.isInitialLoading);const isFetching=operationScope.isLoading(list.isFetching);const isRefetching=computed(()=>Boolean(isFetching.value&&!isInitialLoading.value));const loadError=operationScope.loadError(list.loadError);const isLoading=operationScope.isLoading(list.isLoading);const listUiRuntime=createListUiRuntime({items:filteredItems,isInitialLoading,recordIdParam,recordIdSelector,routeParams:computed(()=>operationScope.routeContext.route?.params||{}),routeParamNames:computed(()=>resolveRouteParamNamesInOrder(operationScope.routeContext.route)),routePath:computed(()=>operationScope.routeContext.route?.path||``),viewUrlTemplate,editUrlTemplate});setupOperationErrorReporting({source:`${placementSource}.load`,loadError,dedupeWindowMs:0,loadActionFactory:()=>({label:`Retry`,dismissOnRun:true,handler(){list.reload()}})});return proxyRefs({canView,isInitialLoading,isFetching,isRefetching,isLoading,isLoadingMore:list.isLoadingMore,hasMore:list.hasMore,loadError,pages:list.pages,items:filteredItems,reload:list.reload,loadMore:list.loadMore,hasViewUrl:listUiRuntime.hasViewUrl,hasEditUrl:listUiRuntime.hasEditUrl,actionColumnCount:listUiRuntime.actionColumnCount,showListSkeleton:listUiRuntime.showListSkeleton,resolveRowKey:listUiRuntime.resolveRowKey,resolveParams:listUiRuntime.resolveParams,resolveViewUrl:listUiRuntime.resolveViewUrl,resolveEditUrl:listUiRuntime.resolveEditUrl,searchEnabled:searchConfig.enabled,searchMode:searchConfig.mode,searchQuery,searchLabel:searchConfig.label,searchPlaceholder:searchConfig.placeholder,isSearchDebouncing,activeQueryParamsToken})}function normalizeStatusList(value){if(Array.isArray(value))return value.map(entry=>Number(entry)).filter(entry=>Number.isInteger(entry)&&entry>0);return[404]}function useViewCore({resource,model,canView,mapLoadedToModel,notFoundStatuses=[404],notFoundMessage=`Record not found.`}={}){const statusList=normalizeStatusList(notFoundStatuses);watchResourceModelState({resource,model,mapLoadedToModel,resolveMapContext(){return{resource}}});const data=resource?.data;const record=computed(()=>model!==void 0?model:data?.value);const isLoading=computed(()=>{if(resource?.isInitialLoading?.value!==void 0)return Boolean(resource.isInitialLoading.value);return Boolean(resource?.query?.isPending?.value)});const isFetching=computed(()=>{if(resource?.isFetching?.value!==void 0)return Boolean(resource.isFetching.value);return Boolean(resource?.query?.isFetching?.value)});const error=computed(()=>resource?.query?.error?.value||null);const isNotFound=computed(()=>{const status=Number(error.value?.status||0);return statusList.includes(status)});const notFoundError=computed(()=>{if(!isNotFound.value)return``;return String(notFoundMessage||`Record not found.`)});const loadError=computed(()=>{if(isNotFound.value)return``;return String(resource?.loadError?.value||``).trim()});const resolvedCanView=computed(()=>{if(canView===void 0)return true;return Boolean(canView?.value)});async function refresh(){return resource?.reload?.()}return Object.freeze({record,isLoading,isFetching,isNotFound,notFoundError,loadError,canView:resolvedCanView,refresh})}function resolveRecordId({routeParams,recordIdParam,routeRecordId}){const explicitRecordId=toRouteParamValue(typeof routeRecordId===`function`?routeRecordId():unref(routeRecordId));if(explicitRecordId)return explicitRecordId;return toRouteParamValue(routeParams[recordIdParam])}function createViewUiRuntime({recordIdParam=`recordId`,routeParams=null,routeParamNames=null,routePath=``,routeRecordId=null,apiUrlTemplate=``,listUrlTemplate=``,editUrlTemplate=``}={}){const normalizedRecordIdParam=normalizeRouteParamName(recordIdParam,{context:`useView recordIdParam`});const normalizedApiUrlTemplate=String(apiUrlTemplate||``).trim();const normalizedListUrlTemplate=String(listUrlTemplate||``).trim();const normalizedEditUrlTemplate=String(editUrlTemplate||``).trim();function resolveTemplatePath(urlTemplate=``,extraParams={}){const normalizedTemplate=String(urlTemplate||``).trim();if(!normalizedTemplate)return``;const currentRouteParams=resolveRouteParamsSource(routeParams);const sourceParams={...currentRouteParams,...asPlainObject(extraParams)};const resolvedRecordId=toRouteParamValue(sourceParams[normalizedRecordIdParam])||resolveRecordId({routeParams:currentRouteParams,recordIdParam:normalizedRecordIdParam,routeRecordId});sourceParams[normalizedRecordIdParam]=resolvedRecordId;const currentPathname=resolveScopedRoutePathname({currentPathname:routePath,params:currentRouteParams,orderedParamNames:routeParamNames,anchorParamName:normalizedRecordIdParam,anchorParamValue:resolvedRecordId,anchorMode:`at`});return resolveRouteTemplateLocation(normalizedTemplate,{params:sourceParams,currentPathname})}const recordId=computed(()=>resolveRecordId({routeParams:resolveRouteParamsSource(routeParams),recordIdParam:normalizedRecordIdParam,routeRecordId}));const apiSuffix=computed(()=>resolveTemplatePath(normalizedApiUrlTemplate));const listUrl=computed(()=>resolveTemplatePath(normalizedListUrlTemplate));const editUrl=computed(()=>resolveTemplatePath(normalizedEditUrlTemplate));function resolveParams(urlTemplate=``,extraParams={}){return resolveTemplatePath(urlTemplate,extraParams)}return Object.freeze({recordId,apiSuffix,listUrl,editUrl,resolveParams})}function useView({resource=null,ownershipFilter=ROUTE_VISIBILITY_WORKSPACE,surfaceId=``,access=`auto`,apiSuffix=``,queryKeyFactory=null,viewPermissions=[],readMethod=`GET`,readEnabled=true,client=null,transport=null,requestRecovery=null,requestRecoveryLabel=`Resource`,placementSource=`http-web.view`,fallbackLoadError=`Unable to load resource.`,notFoundStatuses=[404],notFoundMessage=`Record not found.`,model,mapLoadedToModel,requestQueryParams=null,requestFieldsets=null,recordIdParam=`recordId`,routeParams=null,routeRecordId=null,apiUrlTemplate=``,listUrlTemplate=``,editUrlTemplate=``,includeRecordIdInQueryKey=false,realtime=void 0,adapter=null}={}){const route=useRoute();const viewUiRuntime=createViewUiRuntime({recordIdParam,routeParams:routeParams??computed(()=>route?.params||{}),routeParamNames:computed(()=>resolveRouteParamNamesInOrder(route)),routePath:computed(()=>route?.path||``),routeRecordId,apiUrlTemplate,listUrlTemplate,editUrlTemplate});const effectiveApiSuffix=String(apiUrlTemplate||``).trim()?viewUiRuntime.apiSuffix:apiSuffix;const operationScope=resolveOperationAdapter(adapter,{context:`useView adapter`}).useOperationScope({ownershipFilter,surfaceId,access,placementSource,apiSuffix:effectiveApiSuffix,readEnabled,queryKeyFactory,permissionSets:{view:viewPermissions},realtime:resolveOperationRealtimeOptions({realtime,fallbackRealtime:resource?.operations?.view?.realtime||resource?.operations?.list?.realtime||null})});const queryParamsContext=computed(()=>{return Object.freeze({surfaceId:operationScope.routeContext.currentSurfaceId.value,scopeParamValue:operationScope.scopeParamValue.value,ownershipFilter:operationScope.normalizedOwnershipFilter,recordId:viewUiRuntime.recordId.value})});const baseQueryKey=computed(()=>{const next=[...Array.isArray(operationScope.queryKey.value)?operationScope.queryKey.value:[]];if(!includeRecordIdInQueryKey)return next;const recordIdToken=String(viewUiRuntime.recordId.value||``).trim();return[...next,recordIdToken]});const requestQueryRuntime=createRequestQueryRuntime({requestQueryParams,requestFieldsets,context:queryParamsContext,sourceQueryKey:baseQueryKey});const canView=operationScope.permissionGate(`view`);const endpointResource=useEndpointResource({queryKey:requestQueryRuntime.queryKey,path:operationScope.apiPath,enabled:operationScope.queryCanRun(canView),client,readMethod,readQuery:requestQueryRuntime.requestQuery,transport,requestRecovery,requestRecoveryLabel,refreshOnPull:true,fallbackLoadError});const view=useViewCore({resource:endpointResource,model,canView,mapLoadedToModel,notFoundStatuses,notFoundMessage});const loadError=operationScope.loadError(view.loadError);const isLoading=operationScope.isLoading(view.isLoading);const isFetching=operationScope.isLoading(view.isFetching);const isRefetching=computed(()=>Boolean(isFetching.value&&!isLoading.value));setupOperationErrorReporting({source:`${placementSource}.load`,loadError,notFoundError:view.notFoundError,dedupeWindowMs:0,loadActionFactory:()=>({label:`Retry`,dismissOnRun:true,handler(){view.refresh()}})});return proxyRefs({record:view.record,recordId:viewUiRuntime.recordId,listUrl:viewUiRuntime.listUrl,editUrl:viewUiRuntime.editUrl,resolveParams:viewUiRuntime.resolveParams,canView,isLoading,isFetching,isRefetching,isNotFound:view.isNotFound,notFoundError:view.notFoundError,loadError,refresh:view.refresh,resource:endpointResource})}var client_exports$5=__exportAll({CrudAddEditScreen:()=>CrudAddEditScreen_default,CrudDeleteAction:()=>_sfc_main$19,CrudListBulkActionSurface:()=>CrudListBulkActionSurface_default,CrudListFilterSurface:()=>CrudListFilterSurface_default,CrudListScreen:()=>CrudListScreen_default,CrudViewScreen:()=>CrudViewScreen_default,configureHttpWebClient:()=>configureHttpWebClient,createHttpWebClient:()=>createHttpWebClient,defineCrudListBulkActions:()=>defineCrudListBulkActions,defineCrudListFilters:()=>defineCrudListFilters,defineCrudListRowActions:()=>defineCrudListRowActions,getHttpWebClient:()=>getHttpWebClient,httpWebClient:()=>httpWebClient,useAccess:()=>useAccess,useAddEdit:()=>useAddEdit,useCommand:()=>useCommand,useEndpointResource:()=>useEndpointResource,useList:()=>useList,usePagedCollection:()=>usePagedCollection,useRealtimeQueryInvalidation:()=>useRealtimeQueryInvalidation,useUiFeedback:()=>useUiFeedback,useView:()=>useView});function asLogger(value){if(!value||typeof value!==`object`||Array.isArray(value))return null;return value}function callLoggerMethod(logger,methodName,fallbackMethodName,args){if(logger&&typeof logger[methodName]===`function`){logger[methodName](...args);return}if(typeof console[fallbackMethodName]===`function`)console[fallbackMethodName](...args)}function createProviderLogger(loggerLike=null,{debugEnabled=false,debugMethod=`info`}={}){const logger=asLogger(loggerLike);const resolvedDebugMethod=String(debugMethod||`info`).trim()||`info`;return Object.freeze({debug:(...args)=>{if(debugEnabled!==true)return;callLoggerMethod(logger,resolvedDebugMethod,`info`,args)},info:(...args)=>{callLoggerMethod(logger,`info`,`info`,args)},warn:(...args)=>{callLoggerMethod(logger,`warn`,`warn`,args)},error:(...args)=>{callLoggerMethod(logger,`error`,`error`,args)}})}var ROOT_STYLE=Object.freeze({alignItems:`center`,background:`transparent`,border:`0`,borderRadius:`50%`,display:`inline-flex`,height:`48px`,justifyContent:`center`,padding:`0`,width:`48px`});var DOT_STYLE=Object.freeze({borderRadius:`9999px`,boxShadow:`0 0 0 2px rgba(255, 255, 255, 0.82)`,display:`block`,height:`10px`,width:`10px`});var SR_ONLY_STYLE=Object.freeze({border:`0`,clip:`rect(0, 0, 0, 0)`,clipPath:`inset(50%)`,height:`1px`,margin:`-1px`,overflow:`hidden`,padding:`0`,position:`absolute`,whiteSpace:`nowrap`,width:`1px`});function resolveTooltipText({realtimeAvailable,connected}){if(!realtimeAvailable)return`Realtime is unavailable. Live updates are disabled for this page.`;if(connected)return`Realtime is connected. Live updates are active.`;return`Live updates are disconnected. Click to reconnect. If your session expired, sign in again.`}var RealtimeConnectionIndicator=defineComponent$1({name:`RealtimeConnectionIndicator`,setup(){const socket=useRealtimeSocket({required:false});const connected=ref(Boolean(socket?.connected));const realtimeAvailable=socket!==EMPTY_REALTIME_SOCKET;let detach=null;const tooltipText=computed(()=>{return resolveTooltipText({realtimeAvailable,connected:connected.value})});const statusLabel=computed(()=>connected.value?`Realtime connected`:`Realtime disconnected`);const dotStyle=computed(()=>({...DOT_STYLE,backgroundColor:connected.value?`#22c55e`:`#ef4444`}));function syncConnected(nextState){connected.value=Boolean(nextState)}function bindSocketStatusListeners(){if(!realtimeAvailable||typeof socket.on!==`function`){syncConnected(false);return}syncConnected(socket.connected);const onConnect=()=>syncConnected(true);const onDisconnect=()=>syncConnected(false);const onConnectError=()=>syncConnected(false);socket.on(`connect`,onConnect);socket.on(`disconnect`,onDisconnect);socket.on(`connect_error`,onConnectError);detach=()=>{if(typeof socket.off===`function`){socket.off(`connect`,onConnect);socket.off(`disconnect`,onDisconnect);socket.off(`connect_error`,onConnectError)}}}onMounted(()=>{bindSocketStatusListeners()});onBeforeUnmount(()=>{if(typeof detach===`function`)detach();detach=null});return()=>h$1(`button`,{disabled:!realtimeAvailable||connected.value,onClick:()=>socket.connect?.(),style:{...ROOT_STYLE,cursor:realtimeAvailable&&!connected.value?`pointer`:`default`},title:tooltipText.value,type:`button`,"aria-label":realtimeAvailable&&!connected.value?`Reconnect live updates`:statusLabel.value},[h$1(`span`,{style:dotStyle.value,"aria-hidden":`true`}),h$1(`span`,{style:SR_ONLY_STYLE},statusLabel.value)])}});var PACKET_TYPES=Object.create(null);PACKET_TYPES[`open`]=`0`;PACKET_TYPES[`close`]=`1`;PACKET_TYPES[`ping`]=`2`;PACKET_TYPES[`pong`]=`3`;PACKET_TYPES[`message`]=`4`;PACKET_TYPES[`upgrade`]=`5`;PACKET_TYPES[`noop`]=`6`;var PACKET_TYPES_REVERSE=Object.create(null);Object.keys(PACKET_TYPES).forEach(key=>{PACKET_TYPES_REVERSE[PACKET_TYPES[key]]=key});var ERROR_PACKET={type:`error`,data:`parser error`};var withNativeBlob$1=typeof Blob===`function`||typeof Blob!==`undefined`&&Object.prototype.toString.call(Blob)===`[object BlobConstructor]`;var withNativeArrayBuffer$2=typeof ArrayBuffer===`function`;var isView$1=obj=>{return typeof ArrayBuffer.isView===`function`?ArrayBuffer.isView(obj):obj&&obj.buffer instanceof ArrayBuffer};var encodePacket=({type,data},supportsBinary,callback)=>{if(withNativeBlob$1&&data instanceof Blob){if(supportsBinary)return callback(data);else return encodeBlobAsBase64(data,callback)}else if(withNativeArrayBuffer$2&&(data instanceof ArrayBuffer||isView$1(data))){if(supportsBinary)return callback(data);else return encodeBlobAsBase64(new Blob([data]),callback)}return callback(PACKET_TYPES[type]+(data||``))};var encodeBlobAsBase64=(data,callback)=>{const fileReader=new FileReader;fileReader.onload=function(){const content=fileReader.result.split(`,`)[1];callback(`b`+(content||``))};return fileReader.readAsDataURL(data)};function toArray(data){if(data instanceof Uint8Array)return data;else if(data instanceof ArrayBuffer)return new Uint8Array(data);else return new Uint8Array(data.buffer,data.byteOffset,data.byteLength)}var TEXT_ENCODER;function encodePacketToBinary(packet,callback){if(withNativeBlob$1&&packet.data instanceof Blob)return packet.data.arrayBuffer().then(toArray).then(callback);else if(withNativeArrayBuffer$2&&(packet.data instanceof ArrayBuffer||isView$1(packet.data)))return callback(toArray(packet.data));encodePacket(packet,false,encoded=>{if(!TEXT_ENCODER)TEXT_ENCODER=new TextEncoder;callback(TEXT_ENCODER.encode(encoded))})}var chars=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`;var lookup$1=typeof Uint8Array===`undefined`?[]:new Uint8Array(256);for(let i=0;i<64;i++)lookup$1[chars.charCodeAt(i)]=i;var decode$1=base64=>{let bufferLength=base64.length*.75,len=base64.length,i,p=0,encoded1,encoded2,encoded3,encoded4;if(base64[base64.length-1]===`=`){bufferLength--;if(base64[base64.length-2]===`=`)bufferLength--}const arraybuffer=new ArrayBuffer(bufferLength),bytes=new Uint8Array(arraybuffer);for(i=0;i<len;i+=4){encoded1=lookup$1[base64.charCodeAt(i)];encoded2=lookup$1[base64.charCodeAt(i+1)];encoded3=lookup$1[base64.charCodeAt(i+2)];encoded4=lookup$1[base64.charCodeAt(i+3)];bytes[p++]=encoded1<<2|encoded2>>4;bytes[p++]=(encoded2&15)<<4|encoded3>>2;bytes[p++]=(encoded3&3)<<6|encoded4&63}return arraybuffer};var withNativeArrayBuffer$1=typeof ArrayBuffer===`function`;var decodePacket=(encodedPacket,binaryType)=>{if(typeof encodedPacket!==`string`)return{type:`message`,data:mapBinary(encodedPacket,binaryType)};const type=encodedPacket.charAt(0);if(type===`b`)return{type:`message`,data:decodeBase64Packet(encodedPacket.substring(1),binaryType)};if(!PACKET_TYPES_REVERSE[type])return ERROR_PACKET;return encodedPacket.length>1?{type:PACKET_TYPES_REVERSE[type],data:encodedPacket.substring(1)}:{type:PACKET_TYPES_REVERSE[type]}};var decodeBase64Packet=(data,binaryType)=>{if(withNativeArrayBuffer$1){const decoded=decode$1(data);return mapBinary(decoded,binaryType)}else return{base64:true,data}};var mapBinary=(data,binaryType)=>{switch(binaryType){case`blob`:if(data instanceof Blob)return data;else return new Blob([data]);default:if(data instanceof ArrayBuffer)return data;else return data.buffer}};var SEPARATOR=String.fromCharCode(30);var encodePayload=(packets,callback)=>{const length=packets.length;const encodedPackets=new Array(length);let count=0;packets.forEach((packet,i)=>{encodePacket(packet,false,encodedPacket=>{encodedPackets[i]=encodedPacket;if(++count===length)callback(encodedPackets.join(SEPARATOR))})})};var decodePayload=(encodedPayload,binaryType)=>{const encodedPackets=encodedPayload.split(SEPARATOR);const packets=[];for(let i=0;i<encodedPackets.length;i++){const decodedPacket=decodePacket(encodedPackets[i],binaryType);packets.push(decodedPacket);if(decodedPacket.type===`error`)break}return packets};function createPacketEncoderStream(){return new TransformStream({transform(packet,controller){encodePacketToBinary(packet,encodedPacket=>{const payloadLength=encodedPacket.length;let header;if(payloadLength<126){header=new Uint8Array(1);new DataView(header.buffer).setUint8(0,payloadLength)}else if(payloadLength<65536){header=new Uint8Array(3);const view=new DataView(header.buffer);view.setUint8(0,126);view.setUint16(1,payloadLength)}else{header=new Uint8Array(9);const view=new DataView(header.buffer);view.setUint8(0,127);view.setBigUint64(1,BigInt(payloadLength))}if(packet.data&&typeof packet.data!==`string`)header[0]|=128;controller.enqueue(header);controller.enqueue(encodedPacket)})}})}var TEXT_DECODER;function totalLength(chunks){return chunks.reduce((acc,chunk)=>acc+chunk.length,0)}function concatChunks(chunks,size){if(chunks[0].length===size)return chunks.shift();const buffer=new Uint8Array(size);let j=0;for(let i=0;i<size;i++){buffer[i]=chunks[0][j++];if(j===chunks[0].length){chunks.shift();j=0}}if(chunks.length&&j<chunks[0].length)chunks[0]=chunks[0].slice(j);return buffer}function createPacketDecoderStream(maxPayload,binaryType){if(!TEXT_DECODER)TEXT_DECODER=new TextDecoder;const chunks=[];let state=0;let expectedLength=-1;let isBinary=false;return new TransformStream({transform(chunk,controller){chunks.push(chunk);while(true){if(state===0){if(totalLength(chunks)<1)break;const header=concatChunks(chunks,1);isBinary=(header[0]&128)===128;expectedLength=header[0]&127;if(expectedLength<126)state=3;else if(expectedLength===126)state=1;else state=2}else if(state===1){if(totalLength(chunks)<2)break;const headerArray=concatChunks(chunks,2);expectedLength=new DataView(headerArray.buffer,headerArray.byteOffset,headerArray.length).getUint16(0);state=3}else if(state===2){if(totalLength(chunks)<8)break;const headerArray=concatChunks(chunks,8);const view=new DataView(headerArray.buffer,headerArray.byteOffset,headerArray.length);const n=view.getUint32(0);if(n>Math.pow(2,21)-1){controller.enqueue(ERROR_PACKET);break}expectedLength=n*Math.pow(2,32)+view.getUint32(4);state=3}else{if(totalLength(chunks)<expectedLength)break;const data=concatChunks(chunks,expectedLength);controller.enqueue(decodePacket(isBinary?data:TEXT_DECODER.decode(data),binaryType));state=0}if(expectedLength===0||expectedLength>maxPayload){controller.enqueue(ERROR_PACKET);break}}}})}function Emitter(obj){if(obj)return mixin(obj)}function mixin(obj){for(var key in Emitter.prototype)obj[key]=Emitter.prototype[key];return obj}Emitter.prototype.on=Emitter.prototype.addEventListener=function(event,fn){this._callbacks=this._callbacks||{};(this._callbacks[`$`+event]=this._callbacks[`$`+event]||[]).push(fn);return this};Emitter.prototype.once=function(event,fn){function on(){this.off(event,on);fn.apply(this,arguments)}on.fn=fn;this.on(event,on);return this};Emitter.prototype.off=Emitter.prototype.removeListener=Emitter.prototype.removeAllListeners=Emitter.prototype.removeEventListener=function(event,fn){this._callbacks=this._callbacks||{};if(0==arguments.length){this._callbacks={};return this}var callbacks=this._callbacks[`$`+event];if(!callbacks)return this;if(1==arguments.length){delete this._callbacks[`$`+event];return this}var cb;for(var i=0;i<callbacks.length;i++){cb=callbacks[i];if(cb===fn||cb.fn===fn){callbacks.splice(i,1);break}}if(callbacks.length===0)delete this._callbacks[`$`+event];return this};Emitter.prototype.emit=function(event){this._callbacks=this._callbacks||{};var args=new Array(arguments.length-1),callbacks=this._callbacks[`$`+event];for(var i=1;i<arguments.length;i++)args[i-1]=arguments[i];if(callbacks){callbacks=callbacks.slice(0);for(var i=0,len=callbacks.length;i<len;++i)callbacks[i].apply(this,args)}return this};Emitter.prototype.emitReserved=Emitter.prototype.emit;Emitter.prototype.listeners=function(event){this._callbacks=this._callbacks||{};return this._callbacks[`$`+event]||[]};Emitter.prototype.hasListeners=function(event){return!!this.listeners(event).length};var nextTick=(()=>{if(typeof Promise===`function`&&typeof Promise.resolve===`function`)return cb=>Promise.resolve().then(cb);else return(cb,setTimeoutFn)=>setTimeoutFn(cb,0)})();var globalThisShim=(()=>{if(typeof self!==`undefined`)return self;else if(typeof window!==`undefined`)return window;else return Function(`return this`)()})();var defaultBinaryType=`arraybuffer`;function createCookieJar(){}function pick(obj,...attr){return attr.reduce((acc,k)=>{if(obj.hasOwnProperty(k))acc[k]=obj[k];return acc},{})}var NATIVE_SET_TIMEOUT=globalThisShim.setTimeout;var NATIVE_CLEAR_TIMEOUT=globalThisShim.clearTimeout;function installTimerFunctions(obj,opts){if(opts.useNativeTimers){obj.setTimeoutFn=NATIVE_SET_TIMEOUT.bind(globalThisShim);obj.clearTimeoutFn=NATIVE_CLEAR_TIMEOUT.bind(globalThisShim)}else{obj.setTimeoutFn=globalThisShim.setTimeout.bind(globalThisShim);obj.clearTimeoutFn=globalThisShim.clearTimeout.bind(globalThisShim)}}var BASE64_OVERHEAD=1.33;function byteLength(obj){if(typeof obj===`string`)return utf8Length(obj);return Math.ceil((obj.byteLength||obj.size)*BASE64_OVERHEAD)}function utf8Length(str){let c=0,length=0;for(let i=0,l=str.length;i<l;i++){c=str.charCodeAt(i);if(c<128)length+=1;else if(c<2048)length+=2;else if(c<55296||c>=57344)length+=3;else{i++;length+=4}}return length}function randomString(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function encode(obj){let str=``;for(let i in obj)if(obj.hasOwnProperty(i)){if(str.length)str+=`&`;str+=encodeURIComponent(i)+`=`+encodeURIComponent(obj[i])}return str}function decode(qs){let qry={};let pairs=qs.split(`&`);for(let i=0,l=pairs.length;i<l;i++){let pair=pairs[i].split(`=`);qry[decodeURIComponent(pair[0])]=decodeURIComponent(pair[1])}return qry}var TransportError=class extends Error{constructor(reason,description,context){super(reason);this.description=description;this.context=context;this.type=`TransportError`}};var Transport=class extends Emitter{constructor(opts){super();this.writable=false;installTimerFunctions(this,opts);this.opts=opts;this.query=opts.query;this.socket=opts.socket;this.supportsBinary=!opts.forceBase64}onError(reason,description,context){super.emitReserved(`error`,new TransportError(reason,description,context));return this}open(){this.readyState=`opening`;this.doOpen();return this}close(){if(this.readyState===`opening`||this.readyState===`open`){this.doClose();this.onClose()}return this}send(packets){if(this.readyState===`open`)this.write(packets)}onOpen(){this.readyState=`open`;this.writable=true;super.emitReserved(`open`)}onData(data){const packet=decodePacket(data,this.socket.binaryType);this.onPacket(packet)}onPacket(packet){super.emitReserved(`packet`,packet)}onClose(details){this.readyState=`closed`;super.emitReserved(`close`,details)}pause(onPause){}createUri(schema,query={}){return schema+`://`+this._hostname()+this._port()+this.opts.path+this._query(query)}_hostname(){const hostname=this.opts.hostname;return hostname.indexOf(`:`)===-1?hostname:`[`+hostname+`]`}_port(){if(this.opts.port&&(this.opts.secure&&Number(this.opts.port)!==443||!this.opts.secure&&Number(this.opts.port)!==80))return`:`+this.opts.port;else return``}_query(query){const encodedQuery=encode(query);return encodedQuery.length?`?`+encodedQuery:``}};var Polling=class extends Transport{constructor(){super(...arguments);this._polling=false}get name(){return`polling`}doOpen(){this._poll()}pause(onPause){this.readyState=`pausing`;const pause=()=>{this.readyState=`paused`;onPause()};if(this._polling||!this.writable){let total=0;if(this._polling){total++;this.once(`pollComplete`,function(){--total||pause()})}if(!this.writable){total++;this.once(`drain`,function(){--total||pause()})}}else pause()}_poll(){this._polling=true;this.doPoll();this.emitReserved(`poll`)}onData(data){const callback=packet=>{if(`opening`===this.readyState&&packet.type===`open`)this.onOpen();if(`close`===packet.type){this.onClose({description:`transport closed by the server`});return false}this.onPacket(packet)};decodePayload(data,this.socket.binaryType).forEach(callback);if(`closed`!==this.readyState){this._polling=false;this.emitReserved(`pollComplete`);if(`open`===this.readyState)this._poll()}}doClose(){const close=()=>{this.write([{type:`close`}])};if(`open`===this.readyState)close();else this.once(`open`,close)}write(packets){this.writable=false;encodePayload(packets,data=>{this.doWrite(data,()=>{this.writable=true;this.emitReserved(`drain`)})})}uri(){const schema=this.opts.secure?`https`:`http`;const query=this.query||{};if(false!==this.opts.timestampRequests)query[this.opts.timestampParam]=randomString();if(!this.supportsBinary&&!query.sid)query.b64=1;return this.createUri(schema,query)}};var value=false;try{value=typeof XMLHttpRequest!==`undefined`&&`withCredentials`in new XMLHttpRequest}catch(err){}var hasCORS=value;function empty(){}var BaseXHR=class extends Polling{constructor(opts){super(opts);if(typeof location!==`undefined`){const isSSL=`https:`===location.protocol;let port=location.port;if(!port)port=isSSL?`443`:`80`;this.xd=typeof location!==`undefined`&&opts.hostname!==location.hostname||port!==opts.port}}doWrite(data,fn){const req=this.request({method:`POST`,data});req.on(`success`,fn);req.on(`error`,(xhrStatus,context)=>{this.onError(`xhr post error`,xhrStatus,context)})}doPoll(){const req=this.request();req.on(`data`,this.onData.bind(this));req.on(`error`,(xhrStatus,context)=>{this.onError(`xhr poll error`,xhrStatus,context)});this.pollXhr=req}};var Request=class Request extends Emitter{constructor(createRequest,uri,opts){super();this.createRequest=createRequest;installTimerFunctions(this,opts);this._opts=opts;this._method=opts.method||`GET`;this._uri=uri;this._data=void 0!==opts.data?opts.data:null;this._create()}_create(){var _a;const opts=pick(this._opts,`agent`,`pfx`,`key`,`passphrase`,`cert`,`ca`,`ciphers`,`rejectUnauthorized`,`autoUnref`);opts.xdomain=!!this._opts.xd;const xhr=this._xhr=this.createRequest(opts);try{xhr.open(this._method,this._uri,true);try{if(this._opts.extraHeaders){xhr.setDisableHeaderCheck&&xhr.setDisableHeaderCheck(true);for(let i in this._opts.extraHeaders)if(this._opts.extraHeaders.hasOwnProperty(i))xhr.setRequestHeader(i,this._opts.extraHeaders[i])}}catch(e){}if(`POST`===this._method)try{xhr.setRequestHeader(`Content-type`,`text/plain;charset=UTF-8`)}catch(e){}try{xhr.setRequestHeader(`Accept`,`*/*`)}catch(e){}(_a=this._opts.cookieJar)===null||_a===void 0||_a.addCookies(xhr);if(`withCredentials`in xhr)xhr.withCredentials=this._opts.withCredentials;if(this._opts.requestTimeout)xhr.timeout=this._opts.requestTimeout;xhr.onreadystatechange=()=>{var _a;if(xhr.readyState===3)(_a=this._opts.cookieJar)===null||_a===void 0||_a.parseCookies(xhr.getResponseHeader(`set-cookie`));if(4!==xhr.readyState)return;if(200===xhr.status||1223===xhr.status)this._onLoad();else this.setTimeoutFn(()=>{this._onError(typeof xhr.status===`number`?xhr.status:0)},0)};xhr.send(this._data)}catch(e){this.setTimeoutFn(()=>{this._onError(e)},0);return}if(typeof document!==`undefined`){this._index=Request.requestsCount++;Request.requests[this._index]=this}}_onError(err){this.emitReserved(`error`,err,this._xhr);this._cleanup(true)}_cleanup(fromError){if(`undefined`===typeof this._xhr||null===this._xhr)return;this._xhr.onreadystatechange=empty;if(fromError)try{this._xhr.abort()}catch(e){}if(typeof document!==`undefined`)delete Request.requests[this._index];this._xhr=null}_onLoad(){const data=this._xhr.responseText;if(data!==null){this.emitReserved(`data`,data);this.emitReserved(`success`);this._cleanup()}}abort(){this._cleanup()}};Request.requestsCount=0;Request.requests={};if(typeof document!==`undefined`){if(typeof attachEvent===`function`)attachEvent(`onunload`,unloadHandler);else if(typeof addEventListener===`function`){const terminationEvent=`onpagehide`in globalThisShim?`pagehide`:`unload`;addEventListener(terminationEvent,unloadHandler,false)}}function unloadHandler(){for(let i in Request.requests)if(Request.requests.hasOwnProperty(i))Request.requests[i].abort()}var hasXHR2=(function(){const xhr=newRequest({xdomain:false});return xhr&&xhr.responseType!==null})();var XHR=class extends BaseXHR{constructor(opts){super(opts);const forceBase64=opts&&opts.forceBase64;this.supportsBinary=hasXHR2&&!forceBase64}request(opts={}){Object.assign(opts,{xd:this.xd},this.opts);return new Request(newRequest,this.uri(),opts)}};function newRequest(opts){const xdomain=opts.xdomain;try{if(`undefined`!==typeof XMLHttpRequest&&(!xdomain||hasCORS))return new XMLHttpRequest}catch(e){}if(!xdomain)try{return new globalThisShim[[`Active`].concat(`Object`).join(`X`)](`Microsoft.XMLHTTP`)}catch(e){}}var isReactNative=typeof navigator!==`undefined`&&typeof navigator.product===`string`&&navigator.product.toLowerCase()===`reactnative`;var BaseWS=class extends Transport{get name(){return`websocket`}doOpen(){const uri=this.uri();const protocols=this.opts.protocols;const opts=isReactNative?{}:pick(this.opts,`agent`,`perMessageDeflate`,`pfx`,`key`,`passphrase`,`cert`,`ca`,`ciphers`,`rejectUnauthorized`,`localAddress`,`protocolVersion`,`origin`,`maxPayload`,`family`,`checkServerIdentity`);if(this.opts.extraHeaders)opts.headers=this.opts.extraHeaders;try{this.ws=this.createSocket(uri,protocols,opts)}catch(err){return this.emitReserved(`error`,err)}this.ws.binaryType=this.socket.binaryType;this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{if(this.opts.autoUnref)this.ws._socket.unref();this.onOpen()};this.ws.onclose=closeEvent=>this.onClose({description:`websocket connection closed`,context:closeEvent});this.ws.onmessage=ev=>this.onData(ev.data);this.ws.onerror=e=>this.onError(`websocket error`,e)}write(packets){this.writable=false;for(let i=0;i<packets.length;i++){const packet=packets[i];const lastPacket=i===packets.length-1;encodePacket(packet,this.supportsBinary,data=>{try{this.doWrite(packet,data)}catch(e){}if(lastPacket)nextTick(()=>{this.writable=true;this.emitReserved(`drain`)},this.setTimeoutFn)})}}doClose(){if(typeof this.ws!==`undefined`){this.ws.onerror=()=>{};this.ws.close();this.ws=null}}uri(){const schema=this.opts.secure?`wss`:`ws`;const query=this.query||{};if(this.opts.timestampRequests)query[this.opts.timestampParam]=randomString();if(!this.supportsBinary)query.b64=1;return this.createUri(schema,query)}};var WebSocketCtor=globalThisShim.WebSocket||globalThisShim.MozWebSocket;var WS=class extends BaseWS{createSocket(uri,protocols,opts){return!isReactNative?protocols?new WebSocketCtor(uri,protocols):new WebSocketCtor(uri):new WebSocketCtor(uri,protocols,opts)}doWrite(_packet,data){this.ws.send(data)}};var WT=class extends Transport{get name(){return`webtransport`}doOpen(){try{this._transport=new WebTransport(this.createUri(`https`),this.opts.transportOptions[this.name])}catch(err){return this.emitReserved(`error`,err)}this._transport.closed.then(()=>{this.onClose()}).catch(err=>{this.onError(`webtransport error`,err)});this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(stream=>{const decoderStream=createPacketDecoderStream(Number.MAX_SAFE_INTEGER,this.socket.binaryType);const reader=stream.readable.pipeThrough(decoderStream).getReader();const encoderStream=createPacketEncoderStream();encoderStream.readable.pipeTo(stream.writable);this._writer=encoderStream.writable.getWriter();const read=()=>{reader.read().then(({done,value})=>{if(done)return;this.onPacket(value);read()}).catch(err=>{})};read();const packet={type:`open`};if(this.query.sid)packet.data=`{"sid":"${this.query.sid}"}`;this._writer.write(packet).then(()=>this.onOpen())})})}write(packets){this.writable=false;for(let i=0;i<packets.length;i++){const packet=packets[i];const lastPacket=i===packets.length-1;this._writer.write(packet).then(()=>{if(lastPacket)nextTick(()=>{this.writable=true;this.emitReserved(`drain`)},this.setTimeoutFn)})}}doClose(){var _a;(_a=this._transport)===null||_a===void 0||_a.close()}};var transports={websocket:WS,webtransport:WT,polling:XHR};var re=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;var parts=[`source`,`protocol`,`authority`,`userInfo`,`user`,`password`,`host`,`port`,`relative`,`path`,`directory`,`file`,`query`,`anchor`];function parse(str){if(str.length>8e3)throw`URI too long`;const src=str,b=str.indexOf(`[`),e=str.indexOf(`]`);if(b!=-1&&e!=-1)str=str.substring(0,b)+str.substring(b,e).replace(/:/g,`;`)+str.substring(e,str.length);let m=re.exec(str||``),uri={},i=14;while(i--)uri[parts[i]]=m[i]||``;if(b!=-1&&e!=-1){uri.source=src;uri.host=uri.host.substring(1,uri.host.length-1).replace(/;/g,`:`);uri.authority=uri.authority.replace(`[`,``).replace(`]`,``).replace(/;/g,`:`);uri.ipv6uri=true}uri.pathNames=pathNames(uri,uri[`path`]);uri.queryKey=queryKey(uri,uri[`query`]);return uri}function pathNames(obj,path){const names=path.replace(/\/{2,9}/g,`/`).split(`/`);if(path.slice(0,1)==`/`||path.length===0)names.splice(0,1);if(path.slice(-1)==`/`)names.splice(names.length-1,1);return names}function queryKey(uri,query){const data={};query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function($0,$1,$2){if($1)data[$1]=$2});return data}var withEventListeners=typeof addEventListener===`function`&&typeof removeEventListener===`function`;var OFFLINE_EVENT_LISTENERS=[];if(withEventListeners)addEventListener(`offline`,()=>{OFFLINE_EVENT_LISTENERS.forEach(listener=>listener())},false);var SocketWithoutUpgrade=class SocketWithoutUpgrade extends Emitter{constructor(uri,opts){super();this.binaryType=defaultBinaryType;this.writeBuffer=[];this._prevBufferLen=0;this._pingInterval=-1;this._pingTimeout=-1;this._maxPayload=-1;this._pingTimeoutTime=Infinity;if(uri&&`object`===typeof uri){opts=uri;uri=null}if(uri){const parsedUri=parse(uri);opts.hostname=parsedUri.host;opts.secure=parsedUri.protocol===`https`||parsedUri.protocol===`wss`;opts.port=parsedUri.port;if(parsedUri.query)opts.query=parsedUri.query}else if(opts.host)opts.hostname=parse(opts.host).host;installTimerFunctions(this,opts);this.secure=null!=opts.secure?opts.secure:typeof location!==`undefined`&&`https:`===location.protocol;if(opts.hostname&&!opts.port)opts.port=this.secure?`443`:`80`;this.hostname=opts.hostname||(typeof location!==`undefined`?location.hostname:`localhost`);this.port=opts.port||(typeof location!==`undefined`&&location.port?location.port:this.secure?`443`:`80`);this.transports=[];this._transportsByName={};opts.transports.forEach(t=>{const transportName=t.prototype.name;this.transports.push(transportName);this._transportsByName[transportName]=t});this.opts=Object.assign({path:`/engine.io`,agent:false,withCredentials:false,upgrade:true,timestampParam:`t`,rememberUpgrade:false,addTrailingSlash:true,rejectUnauthorized:true,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:false},opts);this.opts.path=this.opts.path.replace(/\/$/,``)+(this.opts.addTrailingSlash?`/`:``);if(typeof this.opts.query===`string`)this.opts.query=decode(this.opts.query);if(withEventListeners){if(this.opts.closeOnBeforeunload){this._beforeunloadEventListener=()=>{if(this.transport){this.transport.removeAllListeners();this.transport.close()}};addEventListener(`beforeunload`,this._beforeunloadEventListener,false)}if(this.hostname!==`localhost`){this._offlineEventListener=()=>{this._onClose(`transport close`,{description:`network connection lost`})};OFFLINE_EVENT_LISTENERS.push(this._offlineEventListener)}}if(this.opts.withCredentials)this._cookieJar=createCookieJar();this._open()}createTransport(name){const query=Object.assign({},this.opts.query);query.EIO=4;query.transport=name;if(this.id)query.sid=this.id;const opts=Object.assign({},this.opts,{query,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[name]);return new this._transportsByName[name](opts)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved(`error`,`No transports available`)},0);return}const transportName=this.opts.rememberUpgrade&&SocketWithoutUpgrade.priorWebsocketSuccess&&this.transports.indexOf(`websocket`)!==-1?`websocket`:this.transports[0];this.readyState=`opening`;const transport=this.createTransport(transportName);transport.open();this.setTransport(transport)}setTransport(transport){if(this.transport)this.transport.removeAllListeners();this.transport=transport;transport.on(`drain`,this._onDrain.bind(this)).on(`packet`,this._onPacket.bind(this)).on(`error`,this._onError.bind(this)).on(`close`,reason=>this._onClose(`transport close`,reason))}onOpen(){this.readyState=`open`;SocketWithoutUpgrade.priorWebsocketSuccess=`websocket`===this.transport.name;this.emitReserved(`open`);this.flush()}_onPacket(packet){if(`opening`===this.readyState||`open`===this.readyState||`closing`===this.readyState){this.emitReserved(`packet`,packet);this.emitReserved(`heartbeat`);switch(packet.type){case`open`:this.onHandshake(JSON.parse(packet.data));break;case`ping`:this._sendPacket(`pong`);this.emitReserved(`ping`);this.emitReserved(`pong`);this._resetPingTimeout();break;case`error`:const err=new Error(`server error`);err.code=packet.data;this._onError(err);break;case`message`:this.emitReserved(`data`,packet.data);this.emitReserved(`message`,packet.data)}}}onHandshake(data){this.emitReserved(`handshake`,data);this.id=data.sid;this.transport.query.sid=data.sid;this._pingInterval=data.pingInterval;this._pingTimeout=data.pingTimeout;this._maxPayload=data.maxPayload;this.onOpen();if(`closed`===this.readyState)return;this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);const delay=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+delay;this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose(`ping timeout`)},delay);if(this.opts.autoUnref)this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen);this._prevBufferLen=0;if(0===this.writeBuffer.length)this.emitReserved(`drain`);else this.flush()}flush(){if(`closed`!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const packets=this._getWritablePackets();this.transport.send(packets);this._prevBufferLen=packets.length;this.emitReserved(`flush`)}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name===`polling`&&this.writeBuffer.length>1))return this.writeBuffer;let payloadSize=1;for(let i=0;i<this.writeBuffer.length;i++){const data=this.writeBuffer[i].data;if(data)payloadSize+=byteLength(data);if(i>0&&payloadSize>this._maxPayload)return this.writeBuffer.slice(0,i);payloadSize+=2}return this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return true;const hasExpired=Date.now()>this._pingTimeoutTime;if(hasExpired){this._pingTimeoutTime=0;nextTick(()=>{this._onClose(`ping timeout`)},this.setTimeoutFn)}return hasExpired}write(msg,options,fn){this._sendPacket(`message`,msg,options,fn);return this}send(msg,options,fn){this._sendPacket(`message`,msg,options,fn);return this}_sendPacket(type,data,options,fn){if(`function`===typeof data){fn=data;data=void 0}if(`function`===typeof options){fn=options;options=null}if(`closing`===this.readyState||`closed`===this.readyState)return;options=options||{};options.compress=false!==options.compress;const packet={type,data,options};this.emitReserved(`packetCreate`,packet);this.writeBuffer.push(packet);if(fn)this.once(`flush`,fn);this.flush()}close(){const close=()=>{this._onClose(`forced close`);this.transport.close()};const cleanupAndClose=()=>{this.off(`upgrade`,cleanupAndClose);this.off(`upgradeError`,cleanupAndClose);close()};const waitForUpgrade=()=>{this.once(`upgrade`,cleanupAndClose);this.once(`upgradeError`,cleanupAndClose)};if(`opening`===this.readyState||`open`===this.readyState){this.readyState=`closing`;if(this.writeBuffer.length)this.once(`drain`,()=>{if(this.upgrading)waitForUpgrade();else close()});else if(this.upgrading)waitForUpgrade();else close()}return this}_onError(err){SocketWithoutUpgrade.priorWebsocketSuccess=false;if(this.opts.tryAllTransports&&this.transports.length>1&&this.readyState===`opening`){this.transports.shift();return this._open()}this.emitReserved(`error`,err);this._onClose(`transport error`,err)}_onClose(reason,description){if(`opening`===this.readyState||`open`===this.readyState||`closing`===this.readyState){this.clearTimeoutFn(this._pingTimeoutTimer);this.transport.removeAllListeners(`close`);this.transport.close();this.transport.removeAllListeners();if(withEventListeners){if(this._beforeunloadEventListener)removeEventListener(`beforeunload`,this._beforeunloadEventListener,false);if(this._offlineEventListener){const i=OFFLINE_EVENT_LISTENERS.indexOf(this._offlineEventListener);if(i!==-1)OFFLINE_EVENT_LISTENERS.splice(i,1)}}this.readyState=`closed`;this.id=null;this.emitReserved(`close`,reason,description);this.writeBuffer=[];this._prevBufferLen=0}}};SocketWithoutUpgrade.protocol=4;var SocketWithUpgrade=class extends SocketWithoutUpgrade{constructor(){super(...arguments);this._upgrades=[]}onOpen(){super.onOpen();if(`open`===this.readyState&&this.opts.upgrade)for(let i=0;i<this._upgrades.length;i++)this._probe(this._upgrades[i])}_probe(name){let transport=this.createTransport(name);let failed=false;SocketWithoutUpgrade.priorWebsocketSuccess=false;const onTransportOpen=()=>{if(failed)return;transport.send([{type:`ping`,data:`probe`}]);transport.once(`packet`,msg=>{if(failed)return;if(`pong`===msg.type&&`probe`===msg.data){this.upgrading=true;this.emitReserved(`upgrading`,transport);if(!transport)return;SocketWithoutUpgrade.priorWebsocketSuccess=`websocket`===transport.name;this.transport.pause(()=>{if(failed)return;if(`closed`===this.readyState)return;cleanup();this.setTransport(transport);transport.send([{type:`upgrade`}]);this.emitReserved(`upgrade`,transport);transport=null;this.upgrading=false;this.flush()})}else{const err=new Error(`probe error`);err.transport=transport.name;this.emitReserved(`upgradeError`,err)}})};function freezeTransport(){if(failed)return;failed=true;cleanup();transport.close();transport=null}const onerror=err=>{const error=new Error(`probe error: `+err);error.transport=transport.name;freezeTransport();this.emitReserved(`upgradeError`,error)};function onTransportClose(){onerror(`transport closed`)}function onclose(){onerror(`socket closed`)}function onupgrade(to){if(transport&&to.name!==transport.name)freezeTransport()}const cleanup=()=>{transport.removeListener(`open`,onTransportOpen);transport.removeListener(`error`,onerror);transport.removeListener(`close`,onTransportClose);this.off(`close`,onclose);this.off(`upgrading`,onupgrade)};transport.once(`open`,onTransportOpen);transport.once(`error`,onerror);transport.once(`close`,onTransportClose);this.once(`close`,onclose);this.once(`upgrading`,onupgrade);if(this._upgrades.indexOf(`webtransport`)!==-1&&name!==`webtransport`)this.setTimeoutFn(()=>{if(!failed)transport.open()},200);else transport.open()}onHandshake(data){this._upgrades=this._filterUpgrades(data.upgrades);super.onHandshake(data)}_filterUpgrades(upgrades){const filteredUpgrades=[];for(let i=0;i<upgrades.length;i++)if(~this.transports.indexOf(upgrades[i]))filteredUpgrades.push(upgrades[i]);return filteredUpgrades}};var Socket$1=class extends SocketWithUpgrade{constructor(uri,opts={}){const isOptionsOnly=typeof uri===`object`;const o=isOptionsOnly?{...uri}:{...opts};if(!o.transports||o.transports&&typeof o.transports[0]===`string`)o.transports=(o.transports||[`polling`,`websocket`,`webtransport`]).map(transportName=>transports[transportName]).filter(t=>!!t);super(isOptionsOnly?o:uri,o)}};var protocol$1=Socket$1.protocol;function url(uri,path=``,loc){let obj=uri;loc=loc||typeof location!==`undefined`&&location;if(null==uri)uri=loc.protocol+`//`+loc.host;if(typeof uri===`string`){if(`/`===uri.charAt(0)){if(`/`===uri.charAt(1))uri=loc.protocol+uri;else uri=loc.host+uri}if(!/^(https?|wss?):\/\//.test(uri)){if(`undefined`!==typeof loc)uri=loc.protocol+`//`+uri;else uri=`https://`+uri}obj=parse(uri)}if(!obj.port){if(/^(http|ws)$/.test(obj.protocol))obj.port=`80`;else if(/^(http|ws)s$/.test(obj.protocol))obj.port=`443`}obj.path=obj.path||`/`;const host=obj.host.indexOf(`:`)!==-1?`[`+obj.host+`]`:obj.host;obj.id=obj.protocol+`://`+host+`:`+obj.port+path;obj.href=obj.protocol+`://`+host+(loc&&loc.port===obj.port?``:`:`+obj.port);return obj}var withNativeArrayBuffer=typeof ArrayBuffer===`function`;var isView=obj=>{return typeof ArrayBuffer.isView===`function`?ArrayBuffer.isView(obj):obj.buffer instanceof ArrayBuffer};var toString=Object.prototype.toString;var withNativeBlob=typeof Blob===`function`||typeof Blob!==`undefined`&&toString.call(Blob)===`[object BlobConstructor]`;var withNativeFile=typeof File===`function`||typeof File!==`undefined`&&toString.call(File)===`[object FileConstructor]`;function isBinary(obj){return withNativeArrayBuffer&&(obj instanceof ArrayBuffer||isView(obj))||withNativeBlob&&obj instanceof Blob||withNativeFile&&obj instanceof File}function hasBinary(obj,toJSON){if(!obj||typeof obj!==`object`)return false;if(Array.isArray(obj)){for(let i=0,l=obj.length;i<l;i++)if(hasBinary(obj[i]))return true;return false}if(isBinary(obj))return true;if(obj.toJSON&&typeof obj.toJSON===`function`&&arguments.length===1)return hasBinary(obj.toJSON(),true);for(const key in obj)if(Object.prototype.hasOwnProperty.call(obj,key)&&hasBinary(obj[key]))return true;return false}function deconstructPacket(packet){const buffers=[];const packetData=packet.data;const pack=packet;pack.data=_deconstructPacket(packetData,buffers);pack.attachments=buffers.length;return{packet:pack,buffers}}function _deconstructPacket(data,buffers,toJSON){if(!data)return data;if(isBinary(data)){const placeholder={_placeholder:true,num:buffers.length};buffers.push(data);return placeholder}else if(Array.isArray(data)){const newData=new Array(data.length);for(let i=0;i<data.length;i++)newData[i]=_deconstructPacket(data[i],buffers);return newData}else if(typeof data===`object`&&!(data instanceof Date)){if(data.toJSON&&typeof data.toJSON===`function`&&!toJSON)return _deconstructPacket(data.toJSON(),buffers,true);const newData={};for(const key in data)if(Object.prototype.hasOwnProperty.call(data,key))newData[key]=_deconstructPacket(data[key],buffers);return newData}return data}function reconstructPacket(packet,buffers){packet.data=_reconstructPacket(packet.data,buffers);delete packet.attachments;return packet}function _reconstructPacket(data,buffers){if(!data)return data;if(data&&data._placeholder===true){if(typeof data.num===`number`&&data.num>=0&&data.num<buffers.length)return buffers[data.num];else throw new Error(`illegal attachments`)}else if(Array.isArray(data))for(let i=0;i<data.length;i++)data[i]=_reconstructPacket(data[i],buffers);else if(typeof data===`object`){for(const key in data)if(Object.prototype.hasOwnProperty.call(data,key))data[key]=_reconstructPacket(data[key],buffers)}return data}var esm_exports=__exportAll({Decoder:()=>Decoder,Encoder:()=>Encoder,PacketType:()=>PacketType,isPacketValid:()=>isPacketValid,protocol:()=>5});var RESERVED_EVENTS$1=[`connect`,`connect_error`,`disconnect`,`disconnecting`,`newListener`,`removeListener`];var protocol=5;var PacketType;(function(PacketType){PacketType[PacketType[`CONNECT`]=0]=`CONNECT`;PacketType[PacketType[`DISCONNECT`]=1]=`DISCONNECT`;PacketType[PacketType[`EVENT`]=2]=`EVENT`;PacketType[PacketType[`ACK`]=3]=`ACK`;PacketType[PacketType[`CONNECT_ERROR`]=4]=`CONNECT_ERROR`;PacketType[PacketType[`BINARY_EVENT`]=5]=`BINARY_EVENT`;PacketType[PacketType[`BINARY_ACK`]=6]=`BINARY_ACK`})(PacketType||(PacketType={}));var Encoder=class{constructor(replacer){this.replacer=replacer}encode(obj){if(obj.type===PacketType.EVENT||obj.type===PacketType.ACK){if(hasBinary(obj))return this.encodeAsBinary({type:obj.type===PacketType.EVENT?PacketType.BINARY_EVENT:PacketType.BINARY_ACK,nsp:obj.nsp,data:obj.data,id:obj.id})}return[this.encodeAsString(obj)]}encodeAsString(obj){let str=``+obj.type;if(obj.type===PacketType.BINARY_EVENT||obj.type===PacketType.BINARY_ACK)str+=obj.attachments+`-`;if(obj.nsp&&`/`!==obj.nsp)str+=obj.nsp+`,`;if(null!=obj.id)str+=obj.id;if(null!=obj.data)str+=JSON.stringify(obj.data,this.replacer);return str}encodeAsBinary(obj){const deconstruction=deconstructPacket(obj);const pack=this.encodeAsString(deconstruction.packet);const buffers=deconstruction.buffers;buffers.unshift(pack);return buffers}};var Decoder=class Decoder extends Emitter{constructor(opts){super();this.opts=Object.assign({reviver:void 0,maxAttachments:10},typeof opts===`function`?{reviver:opts}:opts)}add(obj){let packet;if(typeof obj===`string`){if(this.reconstructor)throw new Error(`got plaintext data when reconstructing a packet`);packet=this.decodeString(obj);const isBinaryEvent=packet.type===PacketType.BINARY_EVENT;if(isBinaryEvent||packet.type===PacketType.BINARY_ACK){packet.type=isBinaryEvent?PacketType.EVENT:PacketType.ACK;this.reconstructor=new BinaryReconstructor(packet)}else super.emitReserved(`decoded`,packet)}else if(isBinary(obj)||obj.base64){if(!this.reconstructor)throw new Error(`got binary data when not reconstructing a packet`);else{packet=this.reconstructor.takeBinaryData(obj);if(packet){this.reconstructor=null;super.emitReserved(`decoded`,packet)}}}else throw new Error(`Unknown type: `+obj)}decodeString(str){let i=0;const p={type:Number(str.charAt(0))};if(PacketType[p.type]===void 0)throw new Error(`unknown packet type `+p.type);if(p.type===PacketType.BINARY_EVENT||p.type===PacketType.BINARY_ACK){const start=i+1;while(str.charAt(++i)!==`-`&&i!=str.length);const buf=str.substring(start,i);if(buf!=Number(buf)||str.charAt(i)!==`-`)throw new Error(`Illegal attachments`);const n=Number(buf);if(!isInteger(n)||n<1)throw new Error(`Illegal attachments`);else if(n>this.opts.maxAttachments)throw new Error(`too many attachments`);p.attachments=n}if(`/`===str.charAt(i+1)){const start=i+1;while(++i){if(`,`===str.charAt(i))break;if(i===str.length)break}p.nsp=str.substring(start,i)}else p.nsp=`/`;const next=str.charAt(i+1);if(``!==next&&Number(next)==next){const start=i+1;while(++i){const c=str.charAt(i);if(null==c||Number(c)!=c){--i;break}if(i===str.length)break}p.id=Number(str.substring(start,i+1))}if(str.charAt(++i)){const payload=this.tryParse(str.substr(i));if(Decoder.isPayloadValid(p.type,payload))p.data=payload;else throw new Error(`invalid payload`)}return p}tryParse(str){try{return JSON.parse(str,this.opts.reviver)}catch(e){return false}}static isPayloadValid(type,payload){switch(type){case PacketType.CONNECT:return isObject(payload);case PacketType.DISCONNECT:return payload===void 0;case PacketType.CONNECT_ERROR:return typeof payload===`string`||isObject(payload);case PacketType.EVENT:case PacketType.BINARY_EVENT:return Array.isArray(payload)&&(typeof payload[0]===`number`||typeof payload[0]===`string`&&RESERVED_EVENTS$1.indexOf(payload[0])===-1);case PacketType.ACK:case PacketType.BINARY_ACK:return Array.isArray(payload)}}destroy(){if(this.reconstructor){this.reconstructor.finishedReconstruction();this.reconstructor=null}}};var BinaryReconstructor=class{constructor(packet){this.packet=packet;this.buffers=[];this.reconPack=packet}takeBinaryData(binData){this.buffers.push(binData);if(this.buffers.length===this.reconPack.attachments){const packet=reconstructPacket(this.reconPack,this.buffers);this.finishedReconstruction();return packet}return null}finishedReconstruction(){this.reconPack=null;this.buffers=[]}};function isNamespaceValid(nsp){return typeof nsp===`string`}var isInteger=Number.isInteger||function(value){return typeof value===`number`&&isFinite(value)&&Math.floor(value)===value};function isAckIdValid(id){return id===void 0||isInteger(id)}function isObject(value){return Object.prototype.toString.call(value)===`[object Object]`}function isDataValid(type,payload){switch(type){case PacketType.CONNECT:return payload===void 0||isObject(payload);case PacketType.DISCONNECT:return payload===void 0;case PacketType.EVENT:return Array.isArray(payload)&&(typeof payload[0]===`number`||typeof payload[0]===`string`&&RESERVED_EVENTS$1.indexOf(payload[0])===-1);case PacketType.ACK:return Array.isArray(payload);case PacketType.CONNECT_ERROR:return typeof payload===`string`||isObject(payload);default:return false}}function isPacketValid(packet){return isNamespaceValid(packet.nsp)&&isAckIdValid(packet.id)&&isDataValid(packet.type,packet.data)}function on(obj,ev,fn){obj.on(ev,fn);return function subDestroy(){obj.off(ev,fn)}}var RESERVED_EVENTS=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});var Socket=class extends Emitter{constructor(io,nsp,opts){super();this.connected=false;this.recovered=false;this.receiveBuffer=[];this.sendBuffer=[];this._queue=[];this._queueSeq=0;this.ids=0;this.acks={};this.flags={};this.io=io;this.nsp=nsp;if(opts&&opts.auth)this.auth=opts.auth;this._opts=Object.assign({},opts);if(this.io._autoConnect)this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const io=this.io;this.subs=[on(io,`open`,this.onopen.bind(this)),on(io,`packet`,this.onpacket.bind(this)),on(io,`error`,this.onerror.bind(this)),on(io,`close`,this.onclose.bind(this))]}get active(){return!!this.subs}connect(){if(this.connected)return this;this.subEvents();if(!this.io[`_reconnecting`])this.io.open();if(`open`===this.io._readyState)this.onopen();return this}open(){return this.connect()}send(...args){args.unshift(`message`);this.emit.apply(this,args);return this}emit(ev,...args){var _a,_b,_c;if(RESERVED_EVENTS.hasOwnProperty(ev))throw new Error(`"`+ev.toString()+`" is a reserved event name`);args.unshift(ev);if(this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile){this._addToQueue(args);return this}const packet={type:PacketType.EVENT,data:args};packet.options={};packet.options.compress=this.flags.compress!==false;if(`function`===typeof args[args.length-1]){const id=this.ids++;const ack=args.pop();this._registerAckCallback(id,ack);packet.id=id}const isTransportWritable=(_b=(_a=this.io.engine)===null||_a===void 0?void 0:_a.transport)===null||_b===void 0?void 0:_b.writable;const isConnected=this.connected&&!((_c=this.io.engine)===null||_c===void 0?void 0:_c._hasPingExpired());if(this.flags.volatile&&!isTransportWritable){}else if(isConnected){this.notifyOutgoingListeners(packet);this.packet(packet)}else this.sendBuffer.push(packet);this.flags={};return this}_registerAckCallback(id,ack){var _a;const timeout=(_a=this.flags.timeout)!==null&&_a!==void 0?_a:this._opts.ackTimeout;if(timeout===void 0){this.acks[id]=ack;return}const timer=this.io.setTimeoutFn(()=>{delete this.acks[id];for(let i=0;i<this.sendBuffer.length;i++)if(this.sendBuffer[i].id===id)this.sendBuffer.splice(i,1);ack.call(this,new Error(`operation has timed out`))},timeout);const fn=(...args)=>{this.io.clearTimeoutFn(timer);ack.apply(this,args)};fn.withError=true;this.acks[id]=fn}emitWithAck(ev,...args){return new Promise((resolve,reject)=>{const fn=(arg1,arg2)=>{return arg1?reject(arg1):resolve(arg2)};fn.withError=true;args.push(fn);this.emit(ev,...args)})}_addToQueue(args){let ack;if(typeof args[args.length-1]===`function`)ack=args.pop();const packet={id:this._queueSeq++,tryCount:0,pending:false,args,flags:Object.assign({fromQueue:true},this.flags)};args.push((err,...responseArgs)=>{if(packet!==this._queue[0]){}if(err!==null){if(packet.tryCount>this._opts.retries){this._queue.shift();if(ack)ack(err)}}else{this._queue.shift();if(ack)ack(null,...responseArgs)}packet.pending=false;return this._drainQueue()});this._queue.push(packet);this._drainQueue()}_drainQueue(force=false){if(!this.connected||this._queue.length===0)return;const packet=this._queue[0];if(packet.pending&&!force)return;packet.pending=true;packet.tryCount++;this.flags=packet.flags;this.emit.apply(this,packet.args)}packet(packet){packet.nsp=this.nsp;this.io._packet(packet)}onopen(){if(typeof this.auth==`function`)this.auth(data=>{this._sendConnectPacket(data)});else this._sendConnectPacket(this.auth)}_sendConnectPacket(data){this.packet({type:PacketType.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},data):data})}onerror(err){if(!this.connected)this.emitReserved(`connect_error`,err)}onclose(reason,description){this.connected=false;delete this.id;this.emitReserved(`disconnect`,reason,description);this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(id=>{if(!this.sendBuffer.some(packet=>String(packet.id)===id)){const ack=this.acks[id];delete this.acks[id];if(ack.withError)ack.call(this,new Error(`socket has been disconnected`))}})}onpacket(packet){if(!(packet.nsp===this.nsp))return;switch(packet.type){case PacketType.CONNECT:if(packet.data&&packet.data.sid)this.onconnect(packet.data.sid,packet.data.pid);else this.emitReserved(`connect_error`,new Error(`It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)`));break;case PacketType.EVENT:case PacketType.BINARY_EVENT:this.onevent(packet);break;case PacketType.ACK:case PacketType.BINARY_ACK:this.onack(packet);break;case PacketType.DISCONNECT:this.ondisconnect();break;case PacketType.CONNECT_ERROR:this.destroy();const err=new Error(packet.data.message);err.data=packet.data.data;this.emitReserved(`connect_error`,err)}}onevent(packet){const args=packet.data||[];if(null!=packet.id)args.push(this.ack(packet.id));if(this.connected)this.emitEvent(args);else this.receiveBuffer.push(Object.freeze(args))}emitEvent(args){if(this._anyListeners&&this._anyListeners.length){const listeners=this._anyListeners.slice();for(const listener of listeners)listener.apply(this,args)}super.emit.apply(this,args);if(this._pid&&args.length&&typeof args[args.length-1]===`string`)this._lastOffset=args[args.length-1]}ack(id){const self=this;let sent=false;return function(...args){if(sent)return;sent=true;self.packet({type:PacketType.ACK,id,data:args})}}onack(packet){const ack=this.acks[packet.id];if(typeof ack!==`function`)return;delete this.acks[packet.id];if(ack.withError)packet.data.unshift(null);ack.apply(this,packet.data)}onconnect(id,pid){this.id=id;this.recovered=pid&&this._pid===pid;this._pid=pid;this.connected=true;this.emitBuffered();this._drainQueue(true);this.emitReserved(`connect`)}emitBuffered(){this.receiveBuffer.forEach(args=>this.emitEvent(args));this.receiveBuffer=[];this.sendBuffer.forEach(packet=>{this.notifyOutgoingListeners(packet);this.packet(packet)});this.sendBuffer=[]}ondisconnect(){this.destroy();this.onclose(`io server disconnect`)}destroy(){if(this.subs){this.subs.forEach(subDestroy=>subDestroy());this.subs=void 0}this.io[`_destroy`](this)}disconnect(){if(this.connected)this.packet({type:PacketType.DISCONNECT});this.destroy();if(this.connected)this.onclose(`io client disconnect`);return this}close(){return this.disconnect()}compress(compress){this.flags.compress=compress;return this}get volatile(){this.flags.volatile=true;return this}timeout(timeout){this.flags.timeout=timeout;return this}onAny(listener){this._anyListeners=this._anyListeners||[];this._anyListeners.push(listener);return this}prependAny(listener){this._anyListeners=this._anyListeners||[];this._anyListeners.unshift(listener);return this}offAny(listener){if(!this._anyListeners)return this;if(listener){const listeners=this._anyListeners;for(let i=0;i<listeners.length;i++)if(listener===listeners[i]){listeners.splice(i,1);return this}}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(listener){this._anyOutgoingListeners=this._anyOutgoingListeners||[];this._anyOutgoingListeners.push(listener);return this}prependAnyOutgoing(listener){this._anyOutgoingListeners=this._anyOutgoingListeners||[];this._anyOutgoingListeners.unshift(listener);return this}offAnyOutgoing(listener){if(!this._anyOutgoingListeners)return this;if(listener){const listeners=this._anyOutgoingListeners;for(let i=0;i<listeners.length;i++)if(listener===listeners[i]){listeners.splice(i,1);return this}}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(packet){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){const listeners=this._anyOutgoingListeners.slice();for(const listener of listeners)listener.apply(this,packet.data)}}};function Backoff(opts){opts=opts||{};this.ms=opts.min||100;this.max=opts.max||1e4;this.factor=opts.factor||2;this.jitter=opts.jitter>0&&opts.jitter<=1?opts.jitter:0;this.attempts=0}Backoff.prototype.duration=function(){var ms=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var rand=Math.random();var deviation=Math.floor(rand*this.jitter*ms);ms=(Math.floor(rand*10)&1)==0?ms-deviation:ms+deviation}return Math.min(ms,this.max)|0};Backoff.prototype.reset=function(){this.attempts=0};Backoff.prototype.setMin=function(min){this.ms=min};Backoff.prototype.setMax=function(max){this.max=max};Backoff.prototype.setJitter=function(jitter){this.jitter=jitter};var Manager=class extends Emitter{constructor(uri,opts){var _a;super();this.nsps={};this.subs=[];if(uri&&`object`===typeof uri){opts=uri;uri=void 0}opts=opts||{};opts.path=opts.path||`/socket.io`;this.opts=opts;installTimerFunctions(this,opts);this.reconnection(opts.reconnection!==false);this.reconnectionAttempts(opts.reconnectionAttempts||Infinity);this.reconnectionDelay(opts.reconnectionDelay||1e3);this.reconnectionDelayMax(opts.reconnectionDelayMax||5e3);this.randomizationFactor((_a=opts.randomizationFactor)!==null&&_a!==void 0?_a:.5);this.backoff=new Backoff({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()});this.timeout(null==opts.timeout?2e4:opts.timeout);this._readyState=`closed`;this.uri=uri;const _parser=opts.parser||esm_exports;this.encoder=new _parser.Encoder;this.decoder=new _parser.Decoder;this._autoConnect=opts.autoConnect!==false;if(this._autoConnect)this.open()}reconnection(v){if(!arguments.length)return this._reconnection;this._reconnection=!!v;if(!v)this.skipReconnect=true;return this}reconnectionAttempts(v){if(v===void 0)return this._reconnectionAttempts;this._reconnectionAttempts=v;return this}reconnectionDelay(v){var _a;if(v===void 0)return this._reconnectionDelay;this._reconnectionDelay=v;(_a=this.backoff)===null||_a===void 0||_a.setMin(v);return this}randomizationFactor(v){var _a;if(v===void 0)return this._randomizationFactor;this._randomizationFactor=v;(_a=this.backoff)===null||_a===void 0||_a.setJitter(v);return this}reconnectionDelayMax(v){var _a;if(v===void 0)return this._reconnectionDelayMax;this._reconnectionDelayMax=v;(_a=this.backoff)===null||_a===void 0||_a.setMax(v);return this}timeout(v){if(!arguments.length)return this._timeout;this._timeout=v;return this}maybeReconnectOnOpen(){if(!this._reconnecting&&this._reconnection&&this.backoff.attempts===0)this.reconnect()}open(fn){if(~this._readyState.indexOf(`open`))return this;this.engine=new Socket$1(this.uri,this.opts);const socket=this.engine;const self=this;this._readyState=`opening`;this.skipReconnect=false;const openSubDestroy=on(socket,`open`,function(){self.onopen();fn&&fn()});const onError=err=>{this.cleanup();this._readyState=`closed`;this.emitReserved(`error`,err);if(fn)fn(err);else this.maybeReconnectOnOpen()};const errorSub=on(socket,`error`,onError);if(false!==this._timeout){const timeout=this._timeout;const timer=this.setTimeoutFn(()=>{openSubDestroy();onError(new Error(`timeout`));socket.close()},timeout);if(this.opts.autoUnref)timer.unref();this.subs.push(()=>{this.clearTimeoutFn(timer)})}this.subs.push(openSubDestroy);this.subs.push(errorSub);return this}connect(fn){return this.open(fn)}onopen(){this.cleanup();this._readyState=`open`;this.emitReserved(`open`);const socket=this.engine;this.subs.push(on(socket,`ping`,this.onping.bind(this)),on(socket,`data`,this.ondata.bind(this)),on(socket,`error`,this.onerror.bind(this)),on(socket,`close`,this.onclose.bind(this)),on(this.decoder,`decoded`,this.ondecoded.bind(this)))}onping(){this.emitReserved(`ping`)}ondata(data){try{this.decoder.add(data)}catch(e){this.onclose(`parse error`,e)}}ondecoded(packet){nextTick(()=>{this.emitReserved(`packet`,packet)},this.setTimeoutFn)}onerror(err){this.emitReserved(`error`,err)}socket(nsp,opts){let socket=this.nsps[nsp];if(!socket){socket=new Socket(this,nsp,opts);this.nsps[nsp]=socket}else if(this._autoConnect&&!socket.active)socket.connect();return socket}_destroy(socket){const nsps=Object.keys(this.nsps);for(const nsp of nsps)if(this.nsps[nsp].active)return;this._close()}_packet(packet){const encodedPackets=this.encoder.encode(packet);for(let i=0;i<encodedPackets.length;i++)this.engine.write(encodedPackets[i],packet.options)}cleanup(){this.subs.forEach(subDestroy=>subDestroy());this.subs.length=0;this.decoder.destroy()}_close(){this.skipReconnect=true;this._reconnecting=false;this.onclose(`forced close`)}disconnect(){return this._close()}onclose(reason,description){var _a;this.cleanup();(_a=this.engine)===null||_a===void 0||_a.close();this.backoff.reset();this._readyState=`closed`;this.emitReserved(`close`,reason,description);if(this._reconnection&&!this.skipReconnect)this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const self=this;if(this.backoff.attempts>=this._reconnectionAttempts){this.backoff.reset();this.emitReserved(`reconnect_failed`);this._reconnecting=false}else{const delay=this.backoff.duration();this._reconnecting=true;const timer=this.setTimeoutFn(()=>{if(self.skipReconnect)return;this.emitReserved(`reconnect_attempt`,self.backoff.attempts);if(self.skipReconnect)return;self.open(err=>{if(err){self._reconnecting=false;self.reconnect();this.emitReserved(`reconnect_error`,err)}else self.onreconnect()})},delay);if(this.opts.autoUnref)timer.unref();this.subs.push(()=>{this.clearTimeoutFn(timer)})}}onreconnect(){const attempt=this.backoff.attempts;this._reconnecting=false;this.backoff.reset();this.emitReserved(`reconnect`,attempt)}};var cache={};function lookup(uri,opts){if(typeof uri===`object`){opts=uri;uri=void 0}opts=opts||{};const parsed=url(uri,opts.path||`/socket.io`);const source=parsed.source;const id=parsed.id;const path=parsed.path;const sameNamespace=cache[id]&&path in cache[id][`nsps`];const newConnection=opts.forceNew||opts[`force new connection`]||false===opts.multiplex||sameNamespace;let io;if(newConnection)io=new Manager(source,opts);else{if(!cache[id])cache[id]=new Manager(source,opts);io=cache[id]}if(parsed.query&&!opts.query)opts.query=parsed.queryKey;return io.socket(parsed.path,opts)}Object.assign(lookup,{Manager,Socket,io:lookup,connect:lookup});var SOCKET_IO_PATH=`/socket.io`;function createSocketIoClient({url=``,options={},connect=lookup}={}){if(typeof connect!==`function`)throw new Error(`createSocketIoClient requires a valid socket.io client connect function.`);const normalizedUrl=normalizeText$3(url);const normalizedOptions={...options&&typeof options===`object`&&!Array.isArray(options)?options:{},path:SOCKET_IO_PATH};if(normalizedUrl)return connect(normalizedUrl,normalizedOptions);return connect(normalizedOptions)}function disconnectSocketIoClient(socket){if(!socket||typeof socket.disconnect!==`function`)return;socket.disconnect()}function attachSocketConnectionRecovery(socket){let timer=null;let delay=1e3;let recovering=false;const document=globalThis.document;const window=globalThis.window;function clearRetry(){clearTimeout(timer);timer=null}function canRetry(){return recovering&&!socket.connected&&!socket.active&&socket.io.reconnection()&&!document?.hidden&&window?.navigator?.onLine!==false}function scheduleRetry(){if(timer!==null||!canRetry())return;timer=setTimeout(()=>{timer=null;if(canRetry())socket.connect()},delay);delay=Math.min(delay*2,3e4)}function onConnect(){clearRetry();recovering=false;delay=1e3}function onDisconnect(reason){clearRetry();recovering=reason===`io server disconnect`;scheduleRetry()}function onConnectError(){recovering=true;scheduleRetry()}function onAvailable(){if(!canRetry())return;clearRetry();socket.connect()}socket.on(`connect`,onConnect);socket.on(`disconnect`,onDisconnect);socket.on(`connect_error`,onConnectError);document?.addEventListener(`visibilitychange`,onAvailable);window?.addEventListener(`online`,onAvailable);return()=>{recovering=false;clearRetry();socket.off(`connect`,onConnect);socket.off(`disconnect`,onDisconnect);socket.off(`connect_error`,onConnectError);document?.removeEventListener(`visibilitychange`,onAvailable);window?.removeEventListener(`online`,onAvailable)}}var RealtimeClientProvider_exports=__exportAll({RealtimeClientProvider:()=>RealtimeClientProvider,resolveRealtimeClientConfig:()=>resolveRealtimeClientConfig});var REALTIME_RUNTIME_CLIENT_API=Object.freeze({createSocketIoClient,disconnectSocketIoClient});function resolveRealtimeClientConfig({env={},mobile=null}={}){const appConfig=normalizeObject$1(getClientAppConfig());const realtime=normalizeObject$1(appConfig.realtime);const realtimeClient=normalizeObject$1(appConfig.realtimeClient);const mobileConfig=resolveMobileConfig({mobile:normalizeObject$1(appConfig.mobile)});const url=normalizeText$3(realtimeClient.url||(mobileConfig.enabled===true&&mobile?.adapter?.available===true?mobileConfig.apiBaseUrl:``));const options=normalizeObject$1(realtimeClient.options);const explicitDebugEnabled=typeof realtimeClient.debug===`boolean`?realtimeClient.debug:typeof realtime.debug===`boolean`?realtime.debug:void 0;const debugEnabled=Object.hasOwn(normalizeObject$1(env),`VITE_REALTIME_DEBUG`)?resolveClientBootstrapDebugEnabled({env,debugEnabled:void 0,debugEnvKey:`VITE_REALTIME_DEBUG`}):resolveClientBootstrapDebugEnabled({env,debugEnabled:explicitDebugEnabled,debugEnvKey:`VITE_REALTIME_DEBUG`});return Object.freeze({url,options,debugEnabled})}function createRealtimeClient({config,loggerInput}={}){const logger=createProviderLogger(loggerInput,{debugEnabled:config.debugEnabled});const socket=createSocketIoClient({url:config.url,options:config.options});const detach=[];let initialized=false;function initialize(vueApp=null){if(initialized)return;initialized=true;if(typeof socket.on===`function`){detach.push(attachSocketConnectionRecovery(socket));const onConnect=()=>logger.debug({socketConnected:true},`Realtime client socket connected.`);const onDisconnect=reason=>logger.debug({socketConnected:false,reason:String(reason||``)},`Realtime client socket disconnected.`);const onConnectError=error=>logger.warn({error:String(error?.message||error||`unknown error`)},`Realtime client socket connect error.`);socket.on(`connect`,onConnect);socket.on(`disconnect`,onDisconnect);socket.on(`connect_error`,onConnectError);detach.push(()=>{socket.off?.(`connect`,onConnect);socket.off?.(`disconnect`,onDisconnect);socket.off?.(`connect_error`,onConnectError)});if(config.debugEnabled===true&&typeof socket.onAny===`function`){const onAny=(eventName,payload)=>logger.debug({event:String(eventName||``),payloadScope:payload?.scope||null,payloadEntityId:payload?.entityId||null},`Realtime client received socket event.`);socket.onAny(onAny);detach.push(()=>socket.offAny?.(onAny))}}vueApp?.provide?.(`jskit.realtime.runtime.client.socket`,socket)}function dispose(){for(const release of detach.splice(0,detach.length))try{release()}catch{}disconnectSocketIoClient(socket);initialized=false}return Object.freeze({...REALTIME_RUNTIME_CLIENT_API,config,dispose,initialize,socket})}var RealtimeClientProvider=defineProvider({id:`runtime.realtime.client`,requires:{components:`client.components`,env:`client.env`,logger:`client.logger`,vueApp:`client.vue`},optional:{mobile:`client.mobile`},provides:{realtime:`client.realtime`},setup({components,env,logger,mobile}){components.register(`realtime.web.connection.indicator`,RealtimeConnectionIndicator);return{realtime:createRealtimeClient({config:resolveRealtimeClientConfig({env,mobile}),loggerInput:logger})}},boot({vueApp},{outputs}){outputs.realtime.initialize(vueApp)},shutdown(_dependencies,{outputs}){outputs.realtime.dispose()}});function isMissingDynamicModule(error,moduleSpecifier){const message=String(error?.message||error||``);return message.includes(moduleSpecifier)&&(message.includes(`Cannot find module`)||message.includes(`ERR_MODULE_NOT_FOUND`))}function notifyDynamicImportFailure(asyncModuleRecoveryRuntime,error,{label=`App module`}={}){if(!isDynamicImportError(error)||typeof asyncModuleRecoveryRuntime?.notify!==`function`)return;asyncModuleRecoveryRuntime.notify(error,{label})}var SHELL_REQUEST_RECOVERY_RUNTIME_KEY=`jskit.shell-web.runtime.web-request-recovery.client`;function isShellRequestRecoveryRuntime(value){return Boolean(value&&typeof value.report===`function`&&typeof value.reload===`function`)}function useShellRequestRecoveryRuntime(){if(!hasInjectionContext())return null;const runtime=inject$1(SHELL_REQUEST_RECOVERY_RUNTIME_KEY,null);return isShellRequestRecoveryRuntime(runtime)?runtime:null}var REQUEST_RECOVERY_RELOAD_FAILURE_MESSAGE=`The app cannot reload because the app server is not reachable. Restart the server, then click Reload.`;var RECOVERABLE_REQUEST_ERROR_MESSAGES=Object.freeze([/Failed to fetch/iu,/Load failed/iu,/Network request failed/iu,/NetworkError when attempting to fetch resource/iu,/The Internet connection appears to be offline/iu]);var RECOVERABLE_REQUEST_ERROR_CODES=Object.freeze(new Set([`EAI_AGAIN`,`ECONNABORTED`,`ECONNREFUSED`,`ECONNRESET`,`ENETDOWN`,`ENETUNREACH`,`ENOTFOUND`,`ERR_NETWORK`,`ETIMEDOUT`]));var CANCELED_REQUEST_ERROR_CODES=Object.freeze(new Set([`ABORT_ERR`,`ERR_ABORTED`,`ERR_CANCELED`]));var SAFE_REQUEST_RECOVERY_METHODS=Object.freeze(new Set([`GET`,`HEAD`]));function normalizeText$1(value,fallback=``){return String(value||``).trim()||String(fallback||``).trim()}function errorMessage(error=null){return normalizeText$1(error?.message||error?.cause?.message||error)}function errorCode(error=null){return normalizeText$1(error?.code||error?.cause?.code).toUpperCase()}function errorName(error=null){return normalizeText$1(error?.name||error?.cause?.name)}function normalizeRequestErrorStatus(error=null){if(!isRecord$2(error))return null;const hasStatus=Object.prototype.hasOwnProperty.call(error,`status`);const hasStatusCode=Object.prototype.hasOwnProperty.call(error,`statusCode`);if(!hasStatus&&!hasStatusCode)return null;const status=Number(hasStatus?error.status:error.statusCode);return Number.isInteger(status)?status:null}function isCanceledRequestError(error=null){const name=errorName(error).toLowerCase();if(name===`aborterror`||name===`cancelederror`)return true;return CANCELED_REQUEST_ERROR_CODES.has(errorCode(error))}function isRecoverableRequestError(error=null){if(!error||isCanceledRequestError(error))return false;if(normalizeRequestErrorStatus(error)===0)return true;if(RECOVERABLE_REQUEST_ERROR_CODES.has(errorCode(error)))return true;const message=errorMessage(error);return Boolean(message&&RECOVERABLE_REQUEST_ERROR_MESSAGES.some(pattern=>pattern.test(message)))}function requestRecoveryMessage(error=null,{label=`Request`,message=``}={}){const explicitMessage=normalizeText$1(message);if(explicitMessage)return explicitMessage;const requestLabel=normalizeText$1(label,`Request`);if(requestLabel===`Request`)return`The app could not reach the server or network. Check the connection and try again.`;return`${requestLabel} could not reach the server or network. Check the connection and try again.`}function resolveQueryMeta(query=null){if(isRecord$2(query?.meta))return query.meta;if(isRecord$2(query?.options?.meta))return query.options.meta;return{}}function isRequestRecoveryDisabled(query=null){const meta=resolveQueryMeta(query);return(isRecord$2(meta.jskit)?meta.jskit:{}).requestRecovery===false}function resolveQueryRecoveryLabel(query=null){const meta=resolveQueryMeta(query);return normalizeText$1((isRecord$2(meta.jskit)?meta.jskit:{}).requestRecoveryLabel,`Request`)}function resolveQueryRecoverySource(query=null){const meta=resolveQueryMeta(query);return normalizeText$1((isRecord$2(meta.jskit)?meta.jskit:{}).requestRecoverySource,`shell-web.request-recovery.query`)}function resolveQueryRecoveryDedupeKey(query=null,fallback=``){const meta=resolveQueryMeta(query);return normalizeText$1((isRecord$2(meta.jskit)?meta.jskit:{}).requestRecoveryDedupeKey,fallback)}function resolveQueryRecoveryDedupeWindowMs(query=null){const meta=resolveQueryMeta(query);const value=(isRecord$2(meta.jskit)?meta.jskit:{}).requestRecoveryDedupeWindowMs;return Number.isFinite(Number(value))?Math.max(0,Number(value)):null}function resolveQueryRecoveryMethod(query=null){const meta=resolveQueryMeta(query);return normalizeText$1((isRecord$2(meta.jskit)?meta.jskit:{}).requestRecoveryMethod).toUpperCase()}function isSafeQueryRecoveryMethod(query=null){return SAFE_REQUEST_RECOVERY_METHODS.has(resolveQueryRecoveryMethod(query))}function isActiveQuery(query=null){if(typeof query?.isActive===`function`)return Boolean(query.isActive());if(typeof query?.getObserversCount===`function`)return Number(query.getObserversCount())>0;return true}function recoverableQueryError(query=null){const state=isRecord$2(query?.state)?query.state:{};if(state.status!==`error`||state.fetchStatus!==`idle`)return null;const error=state.error||state.fetchFailureReason||null;return isRecoverableRequestError(error)?error:null}function createQueryRetry(queryClient,query=null){if(!queryClient||typeof queryClient.refetchQueries!==`function`)return null;const queryKey=query?.queryKey;if(!Array.isArray(queryKey))return null;return()=>queryClient.refetchQueries({queryKey,exact:true,type:`active`},{throwOnError:false})}function resolveQueryHash(query=null){const explicitHash=normalizeText$1(query?.queryHash);if(explicitHash)return explicitHash;try{return normalizeText$1(JSON.stringify(query?.queryKey||[]))}catch{return normalizeText$1(String(query?.queryKey||``))}}function installRecoverableQueryObserver({queryClient,runtime,logger}={}){const queryCache=queryClient&&typeof queryClient.getQueryCache===`function`?queryClient.getQueryCache():null;if(!queryCache||typeof queryCache.subscribe!==`function`)return Object.freeze({dispose(){}});const reportedErrorUpdateByQueryHash=new Map;function dismissReportedQueryRecovery(queryHash=``){const reported=reportedErrorUpdateByQueryHash.get(queryHash);if(!reported)return;reportedErrorUpdateByQueryHash.delete(queryHash);if(reported.presentationId&&typeof runtime.dismiss===`function`)runtime.dismiss(reported.presentationId,{presenterId:reported.presenterId})}function dismissReportedQueryRecoveries(){for(const queryHash of[...reportedErrorUpdateByQueryHash.keys()])dismissReportedQueryRecovery(queryHash)}function inspectQuery(query=null){const queryHash=resolveQueryHash(query);if(!query||isRequestRecoveryDisabled(query)||!isSafeQueryRecoveryMethod(query)||!isActiveQuery(query)){if(queryHash)dismissReportedQueryRecovery(queryHash);return}const error=recoverableQueryError(query);if(!error||!queryHash){if(queryHash)dismissReportedQueryRecovery(queryHash);return}const errorUpdateCount=Number(query?.state?.errorUpdateCount||0);const reportKey=`${errorUpdateCount}:${errorMessage(error)}`;const reported=reportedErrorUpdateByQueryHash.get(queryHash);if(reported?.reportKey===reportKey)return;const source=resolveQueryRecoverySource(query);const dedupeKey=resolveQueryRecoveryDedupeKey(query,`shell-web.request-recovery.query.${queryHash}.${errorUpdateCount}`);const dedupeWindowMs=resolveQueryRecoveryDedupeWindowMs(query);const result=runtime.report(error,{label:resolveQueryRecoveryLabel(query),retry:createQueryRetry(queryClient,query),source,stale:query?.state?.data!==void 0,dedupeKey,...dedupeWindowMs!==null?{dedupeWindowMs}:{}});const presentationId=normalizeText$1(result?.presentationId||reported?.presentationId);const presenterId=normalizeText$1(result?.decision?.presenterId||reported?.presenterId);if(reported?.presentationId&&reported.presentationId!==presentationId)dismissReportedQueryRecovery(queryHash);reportedErrorUpdateByQueryHash.set(queryHash,{reportKey,presentationId,presenterId})}try{if(typeof queryCache.getAll===`function`)for(const query of queryCache.getAll())inspectQuery(query)}catch(error){logger.warn({error:errorMessage(error)||`unknown error`},`Shell request recovery could not inspect existing queries.`)}const unsubscribe=queryCache.subscribe((event={})=>{try{inspectQuery(event?.query)}catch(error){logger.warn({error:errorMessage(error)||`unknown error`},`Shell request recovery query observer failed.`)}});return Object.freeze({dispose(){dismissReportedQueryRecoveries();if(typeof unsubscribe===`function`)unsubscribe()}})}function createShellRequestRecoveryRuntime({queryClient=null,errorRuntime=null,logger=null}={}){const runtimeLogger=createProviderLogger(logger);let installedQueryObserver=null;let reloadAttempt=0;async function reload({label=`App`,message=REQUEST_RECOVERY_RELOAD_FAILURE_MESSAGE}={}){const reloaded=await guardedReloadApp({label,message});if(!reloaded){reloadAttempt+=1;report(new Error(`Network request failed.`),{label,message,reload:true,force:true,source:`shell-web.request-recovery.reload`,dedupeKey:`shell-web.request-recovery.reload.${reloadAttempt}`})}return reloaded}function retryAction(error,options,retry){return{label:normalizeText$1(options.actionLabel,`Retry`),dismissOnRun:true,async handler(){try{return await retry()}catch(retryError){if(isRecoverableRequestError(retryError))return report(retryError,options);throw retryError}}}}function reloadAction(options){return{label:normalizeText$1(options.actionLabel,`Reload`),dismissOnRun:true,handler(){return reload({label:options.label,message:options.reloadFailureMessage||REQUEST_RECOVERY_RELOAD_FAILURE_MESSAGE})}}}function dismiss(presentationId=``,options={}){if(!errorRuntime||typeof errorRuntime.dismiss!==`function`)return 0;return errorRuntime.dismiss(presentationId,options)}function report(error=null,options={}){if(!isRecoverableRequestError(error)&&options.force!==true)return null;const source=normalizeText$1(options.source,`shell-web.request-recovery`);if(!errorRuntime||typeof errorRuntime.report!==`function`){runtimeLogger.warn({source,error:errorMessage(error)||`unknown error`},`Shell request recovery could not report because the shell error runtime is unavailable.`);return null}const retry=typeof options.retry===`function`?options.retry:null;const action=retry?retryAction(error,options,retry):options.reload===true?reloadAction(options):null;try{return errorRuntime.report({source,message:requestRecoveryMessage(error,options),cause:error||null,intent:`app-recoverable`,severity:normalizeText$1(options.severity,options.stale?`warning`:`error`),dedupeKey:normalizeText$1(options.dedupeKey),dedupeWindowMs:Number.isFinite(Number(options.dedupeWindowMs))?Math.max(0,Number(options.dedupeWindowMs)):2e3,action})}catch(reportError){runtimeLogger.error({source,error:errorMessage(reportError)||`unknown error`},`Shell request recovery could not report through the shell error runtime.`);return null}}function install(){if(installedQueryObserver)return installedQueryObserver;installedQueryObserver=installRecoverableQueryObserver({queryClient,runtime:api,logger:runtimeLogger});return installedQueryObserver}function dispose(){installedQueryObserver?.dispose?.();installedQueryObserver=null}const api=Object.freeze({dismiss,dispose,install,isRecoverableRequestError,reload,report});return api}function createStoreBackedPresenter({id,channel,store,defaultPersist=false}={}){const normalizedId=normalizeText$2(id);const normalizedChannel=normalizeText$2(channel).toLowerCase();if(!normalizedId)throw new Error(`createStoreBackedPresenter requires id.`);if(!normalizedChannel)throw new Error(`createStoreBackedPresenter("${normalizedId}") requires channel.`);if(!store||typeof store.present!==`function`||typeof store.dismiss!==`function`)throw new Error(`createStoreBackedPresenter("${normalizedId}") requires a presentation store.`);return Object.freeze({id:normalizedId,supports(requestedChannel=``){return String(requestedChannel||``).trim().toLowerCase()===normalizedChannel},present(payload={}){return store.present(normalizedChannel,{...payload,persist:typeof payload.persist===`boolean`?payload.persist:defaultPersist,presenterId:normalizedId})},dismiss(presentationId=``){return store.dismiss(normalizedChannel,String(presentationId||``))}})}function createMaterialSnackbarPresenter({store}={}){return createStoreBackedPresenter({id:`material.snackbar`,channel:`snackbar`,store,defaultPersist:false})}function createMaterialBannerPresenter({store}={}){return createStoreBackedPresenter({id:`material.banner`,channel:`banner`,store,defaultPersist:true})}function createMaterialDialogPresenter({store}={}){return createStoreBackedPresenter({id:`material.dialog`,channel:`dialog`,store,defaultPersist:true})}function createDefaultMaterialErrorPresenters({store}={}){return Object.freeze([createMaterialSnackbarPresenter({store}),createMaterialBannerPresenter({store}),createMaterialDialogPresenter({store})])}function subscribeListener(listeners,listener){if(!(listeners instanceof Set))throw new TypeError(`subscribeListener requires a Set.`);if(typeof listener!==`function`)return()=>{};listeners.add(listener);return()=>{listeners.delete(listener)}}function createListenerSubscription(listeners){if(!(listeners instanceof Set))throw new TypeError(`createListenerSubscription requires a Set.`);return function subscribe(listener){return subscribeListener(listeners,listener)}}function createRuntimeLogger$1(logger=null){const source=isRecord$2(logger)?logger:null;return Object.freeze({warn:typeof source?.warn===`function`?source.warn.bind(source):()=>{},error:typeof source?.error===`function`?source.error.bind(source):()=>{}})}function normalizeErrorEvent(rawEvent={}){const source=isRecord$2(rawEvent)?rawEvent:{message:rawEvent};const cause=source.cause!==void 0?source.cause:source.error;const statusCandidate=Number(source.status||source.statusCode||cause?.status||cause?.statusCode||0);const status=Number.isFinite(statusCandidate)?Math.trunc(statusCandidate):0;const fieldErrors=isRecord$2(source.fieldErrors)?Object.freeze({...source.fieldErrors}):isRecord$2(source.details?.fieldErrors)?Object.freeze({...source.details.fieldErrors}):null;const details=isRecord$2(source.details)?Object.freeze({...source.details}):null;const userMessage=normalizeText$2(source.userMessage);const runtimeMessage=normalizeText$2(source.message||cause?.message);return Object.freeze({code:normalizeText$2(source.code||cause?.code),status,source:normalizeText$2(source.source,`app`),message:normalizeText$2(userMessage||runtimeMessage,`Request failed.`),userMessage,intent:normalizeErrorIntent(source.intent||source.kind),severity:normalizeSeverity(source.severity,`error`),channel:normalizeChannel(source.channel),presenterId:normalizeText$2(source.presenterId),action:normalizeAction(source.action),additionalActions:normalizeAdditionalActions(source.additionalActions),persist:typeof source.persist===`boolean`?source.persist:null,blocking:source.blocking===true,dedupeKey:normalizeText$2(source.dedupeKey),dedupeWindowMs:normalizeNonNegativeInteger(source.dedupeWindowMs,0),traceId:normalizeText$2(source.traceId),fieldErrors,details,cause:cause||null,timestamp:Number(Date.now())})}function normalizePolicyDecision(policyDecision={},event={}){const source=isRecord$2(policyDecision)?policyDecision:{};const channel=normalizeChannel(source.channel||event.channel,`snackbar`)||`snackbar`;return Object.freeze({channel,presenterId:normalizeText$2(source.presenterId||event.presenterId),message:normalizeText$2(source.message||event.userMessage||event.message,`Request failed.`),severity:normalizeSeverity(source.severity||event.severity,`error`),action:normalizeAction(source.action||event.action),additionalActions:normalizeAdditionalActions(source.additionalActions??event.additionalActions),persist:typeof source.persist===`boolean`?source.persist:typeof event.persist===`boolean`?event.persist:channel!==`snackbar`,dedupeKey:normalizeText$2(source.dedupeKey||event.dedupeKey),dedupeWindowMs:normalizeNonNegativeInteger(source.dedupeWindowMs,event.dedupeWindowMs||0)})}function normalizePresenter(candidate={}){const source=isRecord$2(candidate)?candidate:{};const id=normalizeText$2(source.id);if(!id)throw new Error(`Error presenter requires id.`);if(typeof source.present!==`function`)throw new Error(`Error presenter "${id}" requires present(payload).`);return Object.freeze({id,supports:typeof source.supports===`function`?source.supports.bind(source):()=>true,present:source.present.bind(source),dismiss:typeof source.dismiss===`function`?source.dismiss.bind(source):null})}function createErrorRuntime({presenters=[],policy=null,defaultPresenterId=``,moduleDefaultPresenterId=``,logger=null}={}){const runtimeLogger=createRuntimeLogger$1(logger);const byPresenterId=new Map;const listeners=new Set;const subscribe=createListenerSubscription(listeners);const dedupeWindowByKey=new Map;let activePolicy=typeof policy===`function`?policy:createDefaultErrorPolicy();let activeAppDefaultPresenterId=normalizeText$2(defaultPresenterId);const activeModuleDefaultPresenterId=normalizeText$2(moduleDefaultPresenterId);function getPresenterIds(){return Object.freeze([...byPresenterId.keys()].sort((left,right)=>left.localeCompare(right)))}function assertPresenterExists(presenterId,label){if(!byPresenterId.has(presenterId))throw new Error(`${label} presenter "${presenterId}" is not registered.`)}function resolveDefaultPresenterId(){if(activeAppDefaultPresenterId){assertPresenterExists(activeAppDefaultPresenterId,`App default error`);return activeAppDefaultPresenterId}if(activeModuleDefaultPresenterId){assertPresenterExists(activeModuleDefaultPresenterId,`Module default error`);return activeModuleDefaultPresenterId}throw new Error(`Error runtime requires app default presenter or module default presenter.`)}function assertBootReady(){resolveDefaultPresenterId()}function registerPresenter(presenter){const normalized=normalizePresenter(presenter);if(byPresenterId.has(normalized.id))throw new Error(`Error presenter "${normalized.id}" is already registered.`);byPresenterId.set(normalized.id,normalized);return normalized.id}function registerPresenters(nextPresenters=[]){const source=Array.isArray(nextPresenters)?nextPresenters:[];const ids=[];for(const presenter of source)ids.push(registerPresenter(presenter));return Object.freeze(ids)}function setPolicy(nextPolicy){if(typeof nextPolicy!==`function`)throw new TypeError(`Error policy must be a function.`);activePolicy=nextPolicy}function setAppDefaultPresenterId(nextDefaultPresenterId=``){const normalized=normalizeText$2(nextDefaultPresenterId);if(normalized)assertPresenterExists(normalized,`App default error`);activeAppDefaultPresenterId=normalized;return activeAppDefaultPresenterId}function notify(event={}){const payload=Object.freeze({...event});for(const listener of listeners)try{listener(payload)}catch(error){runtimeLogger.warn({error:String(error?.message||error||`unknown error`)},`Error runtime subscriber failed.`)}}function resolveChannelCompatiblePresenter(channel=``){for(const presenter of byPresenterId.values())if(presenter.supports(channel))return presenter;return null}function resolvePresenterForDecision(decision){const explicitPresenterId=normalizeText$2(decision.presenterId);if(explicitPresenterId){assertPresenterExists(explicitPresenterId,`Policy-selected error`);return byPresenterId.get(explicitPresenterId)}const defaultPresenterId=resolveDefaultPresenterId();const defaultPresenter=byPresenterId.get(defaultPresenterId);if(defaultPresenter?.supports(decision.channel))return defaultPresenter;const compatiblePresenter=resolveChannelCompatiblePresenter(decision.channel);if(!compatiblePresenter)throw new Error(`No error presenter supports channel "${decision.channel}".`);return compatiblePresenter}function shouldSkipByDedupe(decision){if(!decision.dedupeKey||decision.dedupeWindowMs<1)return false;const now=Number(Date.now());if(now-Number(dedupeWindowByKey.get(decision.dedupeKey)||0)<decision.dedupeWindowMs)return true;dedupeWindowByKey.set(decision.dedupeKey,now);return false}function report(rawEvent={},rawContext={}){const event=normalizeErrorEvent(rawEvent);const context=isRecord$2(rawContext)?Object.freeze({...rawContext}):Object.freeze({});let policyDecision;try{policyDecision=activePolicy(event,Object.freeze({context,runtime:Object.freeze({presenterIds:getPresenterIds(),appDefaultPresenterId:activeAppDefaultPresenterId,moduleDefaultPresenterId:activeModuleDefaultPresenterId})}))}catch(error){runtimeLogger.error({source:event.source,error:String(error?.message||error||`unknown error`)},`Error policy threw while evaluating error event.`);throw error}const decision=normalizePolicyDecision(policyDecision,event);if(decision.channel===`silent`){const silentResult=Object.freeze({event,decision,skipped:true,reason:`silent`});notify({type:`reported.silent`,result:silentResult});return silentResult}if(shouldSkipByDedupe(decision)){const dedupedResult=Object.freeze({event,decision,skipped:true,reason:`dedupe`});notify({type:`reported.deduped`,result:dedupedResult});return dedupedResult}const presenter=resolvePresenterForDecision(decision);if(!presenter.supports(decision.channel))throw new Error(`Error presenter "${presenter.id}" does not support channel "${decision.channel}".`);const payload=Object.freeze({...decision,presenterId:presenter.id,event,context});const presentationId=normalizeText$2(presenter.present(payload));const result=Object.freeze({event,decision:Object.freeze({...decision,presenterId:presenter.id}),presentationId,skipped:false});notify({type:`reported`,result});return result}function dismiss(presentationId=``,options={}){const normalizedPresentationId=normalizeText$2(presentationId);const source=isRecord$2(options)?options:{};const presenterId=normalizeText$2(source.presenterId);if(presenterId){const presenter=byPresenterId.get(presenterId);if(!presenter||typeof presenter.dismiss!==`function`)return 0;return Number(presenter.dismiss(normalizedPresentationId)||0)}let total=0;for(const presenter of byPresenterId.values()){if(typeof presenter.dismiss!==`function`)continue;total+=Number(presenter.dismiss(normalizedPresentationId)||0)}return total}function configure(options={}){const source=isRecord$2(options)?options:{};if(Array.isArray(source.presenters)&&source.presenters.length>0)registerPresenters(source.presenters);if(Object.prototype.hasOwnProperty.call(source,`policy`))setPolicy(source.policy);if(Object.prototype.hasOwnProperty.call(source,`defaultPresenterId`))setAppDefaultPresenterId(source.defaultPresenterId);assertBootReady();return getSnapshot()}function getSnapshot(){return Object.freeze({presenterIds:getPresenterIds(),appDefaultPresenterId:activeAppDefaultPresenterId,moduleDefaultPresenterId:activeModuleDefaultPresenterId,resolvedDefaultPresenterId:resolveDefaultPresenterId()})}registerPresenters(presenters);assertBootReady();return Object.freeze({report,dismiss,configure,registerPresenter,registerPresenters,setPolicy,setAppDefaultPresenterId,assertBootReady,getSnapshot,subscribe,normalizeErrorEvent})}var PRESENTATION_CHANNELS=Object.freeze([`snackbar`,`banner`,`dialog`]);var SINGLETON_CHANNELS=new Set([`banner`]);function createEmptyChannelState(){return{snackbar:[],banner:[],dialog:[]}}function cloneEntry(entry={}){return Object.freeze({id:String(entry.id||``).trim(),channel:String(entry.channel||``).trim(),message:String(entry.message||``).trim(),severity:String(entry.severity||`error`).trim(),persist:Boolean(entry.persist),action:entry.action||null,additionalActions:entry.additionalActions,presenterId:String(entry.presenterId||``).trim(),dedupeKey:String(entry.dedupeKey||``).trim(),timestamp:Number(entry.timestamp||0)})}function createErrorPresentationStore({now=()=>Date.now()}={}){const listeners=new Set;const subscribe=createListenerSubscription(listeners);const channelState=createEmptyChannelState();let sequence=0;let revision=0;function getChannelEntries(channel){if(!PRESENTATION_CHANNELS.includes(channel))throw new Error(`Unknown presentation channel "${channel}".`);return channelState[channel]}function getState(){return Object.freeze({revision,channels:Object.freeze({snackbar:Object.freeze(channelState.snackbar.map(cloneEntry)),banner:Object.freeze(channelState.banner.map(cloneEntry)),dialog:Object.freeze(channelState.dialog.map(cloneEntry))})})}function notify(event={}){const snapshot=getState();for(const listener of listeners)try{listener(snapshot,Object.freeze({...event}))}catch{}}function present(channel,payload={}){const normalizedChannel=String(channel||``).trim();const entries=getChannelEntries(normalizedChannel);sequence+=1;const entry=Object.freeze({id:normalizeText$2(payload.id,`${normalizedChannel}-${sequence}`),channel:normalizedChannel,message:normalizeText$2(payload.message,`Request failed.`),severity:normalizeSeverity(payload.severity,`error`),persist:typeof payload.persist===`boolean`?payload.persist:normalizedChannel!==`snackbar`,action:normalizeAction(payload.action),additionalActions:normalizeAdditionalActions(payload.additionalActions),presenterId:normalizeText$2(payload.presenterId),dedupeKey:normalizeText$2(payload.dedupeKey),timestamp:Number(now())});if(SINGLETON_CHANNELS.has(normalizedChannel)&&entries.length>0)entries.splice(0,entries.length);entries.push(entry);revision+=1;notify({type:`presented`,channel:normalizedChannel,id:entry.id});return entry.id}function dismiss(channel,presentationId=``){const normalizedChannel=String(channel||``).trim();const entries=getChannelEntries(normalizedChannel);const normalizedPresentationId=normalizeText$2(presentationId);if(!normalizedPresentationId){if(entries.length<1)return 0;const removed=entries.length;entries.splice(0,entries.length);revision+=1;notify({type:`dismissed`,channel:normalizedChannel,id:``,count:removed});return removed}const index=entries.findIndex(entry=>entry.id===normalizedPresentationId);if(index<0)return 0;entries.splice(index,1);revision+=1;notify({type:`dismissed`,channel:normalizedChannel,id:normalizedPresentationId,count:1});return 1}function clear(channel=``){const normalizedChannel=normalizeText$2(channel).toLowerCase();if(!normalizedChannel){let removedCount=0;for(const candidateChannel of PRESENTATION_CHANNELS)removedCount+=dismiss(candidateChannel,``);return removedCount}return dismiss(normalizedChannel,``)}return Object.freeze({getState,subscribe,present,dismiss,clear})}var DEFAULT_DEBUG_DEPTH=4;function describeFunction(fn){return`[Function ${fn?.name||`anonymous`}]`}function describeSymbol(value){return value?.toString?value.toString():`[Symbol]`}function explodePayload(value,depth=4){const visited=new WeakSet;function walk(node,remaining){if(node===null||typeof node!==`object`){if(typeof node===`function`)return describeFunction(node);if(typeof node===`symbol`)return describeSymbol(node);return node}if(visited.has(node))return`[Circular]`;visited.add(node);if(remaining<=0)return Array.isArray(node)?`[Array]`:`[Object]`;if(Array.isArray(node))return node.map(entry=>walk(entry,remaining-1));if(node instanceof Date)return node.toISOString();const next={};for(const[key,child]of Object.entries(node))next[key]=walk(child,remaining-1);return next}return walk(value,depth)}function ensureArray(value){if(Array.isArray(value))return value;if(value===void 0||value===null)return[];return[value]}var PLACEMENT_DEBUG_PREFIX=`[placement-debug]`;var PLACEMENT_DEBUG_FLAG=`__JSKIT_PLACEMENT_DEBUG__`;var WEB_PLACEMENT_SURFACE_ANY=`*`;var NOOP=()=>{};function isPlacementDebugEnabled(){if(typeof globalThis!==`object`||!globalThis)return false;return globalThis[PLACEMENT_DEBUG_FLAG]===true}function debugLog(message,payload=null){if(!isPlacementDebugEnabled())return;if(payload===null||payload===void 0){console.log(`${PLACEMENT_DEBUG_PREFIX} ${message}`);return}const terminalPayload=explodePayload(payload,4);const rendered=JSON.stringify(terminalPayload,null,2);console.log(`${PLACEMENT_DEBUG_PREFIX} ${message}\n${rendered}`)}function createRuntimeLogger(logger){const runtimeLogger=isRecord$2(logger)?logger:{};let warn=NOOP;let error=NOOP;if(typeof runtimeLogger.warn===`function`)warn=runtimeLogger.warn.bind(runtimeLogger);if(typeof runtimeLogger.error===`function`)error=runtimeLogger.error.bind(runtimeLogger);return Object.freeze({warn,error})}function normalizePlacementList(placements,context={}){const normalized=[];for(const candidate of ensureArray(placements)){const placement=normalizePlacementDefinition(candidate,{strict:false,source:`app placement`});if(!placement||placement.enabled===false)continue;normalized.push(placement)}const byId=new Map;for(const placement of normalized){if(byId.has(placement.id))throw new Error(`Duplicate placement id "${placement.id}" in ${context.source||`placement list`}.`);byId.set(placement.id,placement)}return[...byId.values()].map((placement,index)=>({placement,index})).sort((left,right)=>{const orderCompare=left.placement.order-right.placement.order;if(orderCompare!==0)return orderCompare;return left.index-right.index}).map(entry=>entry.placement)}function normalizeTopologyList(topology,context={}){if(Array.isArray(topology))return normalizeTopologyList(normalizePlacementTopologyDefinition({placements:topology},{context:context.source||`placement topology`}),context);const candidates=ensureArray(topology);const entries=[];for(const candidate of candidates){const normalized=normalizePlacementTopologyDefinition(candidate,{context:context.source||`placement topology`});entries.push(...normalized.placements)}const byKey=new Map;for(const entry of entries){const key=`${entry.id}::${entry.owner||``}`;if(byKey.has(key))throw new Error(`Duplicate semantic placement "${entry.id}"${entry.owner?` for owner "${entry.owner}"`:``} in ${context.source||`placement topology`}.`);byKey.set(key,entry)}return Object.freeze([...byKey.values()])}function matchesSurface(placementSurfaces,requestedSurface){if(requestedSurface===WEB_PLACEMENT_SURFACE_ANY)return true;const surfaces=Array.isArray(placementSurfaces)?placementSurfaces:[WEB_PLACEMENT_SURFACE_ANY];return surfaces.includes(WEB_PLACEMENT_SURFACE_ANY)||surfaces.includes(requestedSurface)}function resolveTopologyPlacement(topologyEntries=[],placement={},requestedSurface=WEB_PLACEMENT_SURFACE_ANY){const semanticTarget=String(placement.target||``).trim();const owner=String(placement.owner||``).trim();const matches=topologyEntries.filter(entry=>{if(entry.id!==semanticTarget)return false;if(owner&&entry.owner!==owner)return false;if(!owner&&entry.owner)return false;return matchesSurface(entry.surfaces,requestedSurface)});if(matches.length===1)return matches[0];return null}function resolveRenderablePlacement({placement={},topologyEntries=[],requestedSurface=WEB_PLACEMENT_SURFACE_ANY,requestedTarget=``,requestedLayoutClass=`compact`}={}){if(placement.targetType===`concrete`){if(placement.target!==requestedTarget)return null;return placement}const topologyPlacement=resolveTopologyPlacement(topologyEntries,placement,requestedSurface);if(!topologyPlacement)return null;const variant=topologyPlacement.variants?.[requestedLayoutClass]||null;if(!variant||variant.outlet!==requestedTarget)return null;const componentToken=String(placement.componentToken||variant.renderers?.[placement.kind]||``).trim();if(!componentToken)return null;return Object.freeze({...placement,target:requestedTarget,semanticTarget:placement.target,topologyOwner:topologyPlacement.owner||``,layoutClass:requestedLayoutClass,componentToken})}function resolveContextContributors(contributors,baseContext={},logger){let merged={};for(const contributor of ensureArray(contributors))try{const resolved=typeof contributor===`function`?contributor(Object.freeze({...baseContext})):contributor;if(isRecord$2(resolved))merged={...merged,...resolved}}catch(error){logger.warn({contributor,error:String(error?.message||error||`unknown error`)},`Failed to evaluate web placement context contributor.`)}return merged}function resolvePlacementComponent(components,placement,logger,missingTokens,invalidComponentTokens,failedTokens){const componentToken=String(placement.componentToken||``).trim();if(!componentToken)return null;if(invalidComponentTokens.has(componentToken)||failedTokens.has(componentToken))return null;if(!components.has(componentToken)){if(!missingTokens.has(componentToken)){missingTokens.add(componentToken);logger.warn({placementId:placement.id,componentToken},`Skipping placement because component token is not bound.`)}return null}let component=null;try{component=components.get(componentToken)}catch(error){if(!failedTokens.has(componentToken)){failedTokens.add(componentToken);logger.error({placementId:placement.id,componentToken,error:String(error?.message||error||`unknown error`)},`Skipping placement because component token resolution threw.`)}return null}if(!isRenderableComponent(component)){if(!invalidComponentTokens.has(componentToken)){invalidComponentTokens.add(componentToken);logger.warn({placementId:placement.id,componentToken},`Skipping placement because component token did not resolve to a Vue component.`)}return null}return component}function shouldIncludePlacement(placement,placementContext,logger){if(typeof placement.when!==`function`)return true;try{return placement.when(Object.freeze({...placementContext}))===true}catch(error){logger.warn({placementId:placement.id,error:String(error?.message||error||`unknown error`)},`Placement when() predicate failed; placement was skipped.`);return false}}function createWebPlacementRuntime({components,contextContributors=[],logger=null}={}){if(!components||typeof components.has!==`function`||typeof components.get!==`function`)throw new Error(`createWebPlacementRuntime requires a client component registry.`);const runtimeLogger=createRuntimeLogger(logger);const missingTokens=new Set;const invalidComponentTokens=new Set;const failedTokens=new Set;const listeners=new Set;const subscribe=createListenerSubscription(listeners);let placementDefinitions=Object.freeze([]);let placementTopology=Object.freeze([]);let sharedContext=Object.freeze({});let revision=0;function notify(event={}){revision+=1;debugLog(`notify`,{revision,event});for(const listener of listeners)try{listener(Object.freeze({revision,...event}))}catch(error){runtimeLogger.warn({error:String(error?.message||error||`unknown error`)},`Web placement runtime listener threw during notification.`)}}function replacePlacements(entries=[],{source=`app placement registry`}={}){missingTokens.clear();invalidComponentTokens.clear();failedTokens.clear();placementDefinitions=Object.freeze(normalizePlacementList(entries,{source}));debugLog(`replacePlacements`,{source,count:placementDefinitions.length,ids:placementDefinitions.map(entry=>entry.id)});notify({type:`placements.replaced`,source})}function replacePlacementTopology(topology=[],{source=`app placement topology`}={}){missingTokens.clear();invalidComponentTokens.clear();failedTokens.clear();placementTopology=normalizeTopologyList(topology,{source});debugLog(`replacePlacementTopology`,{source,count:placementTopology.length,ids:placementTopology.map(entry=>entry.owner?`${entry.id}#${entry.owner}`:entry.id)});notify({type:`placement-topology.replaced`,source})}function getContext(){return sharedContext}function setContext(value={},{replace=false,source=`placement-context`}={}){const next=isRecord$2(value)?{...value}:{};let nextContext=next;if(!replace)nextContext={...sharedContext,...next};sharedContext=Object.freeze(nextContext);debugLog(`setContext`,{replace,source,keys:Object.keys(sharedContext)});notify({type:`context.updated`,source});return sharedContext}function getRevision(){return revision}function getPlacements({surface=WEB_PLACEMENT_SURFACE_ANY,target=``,layoutClass=``,context={}}={}){const normalizedTarget=normalizePlacementTarget(target,{strict:false});if(!normalizedTarget)return Object.freeze([]);const normalizedSurface=normalizeSurface(surface);const normalizedLayoutClass=normalizePlacementLayoutClass(layoutClass)||normalizePlacementLayoutClass(sharedContext?.layoutClass)||`compact`;const baseContext=isRecord$2(context)?{...context}:{};const contextFromRuntime=isRecord$2(sharedContext)?sharedContext:{};const placementContext={...resolveContextContributors(contextContributors,{surface:normalizedSurface,target:normalizedTarget,layoutClass:normalizedLayoutClass,context:{...contextFromRuntime,...baseContext}},runtimeLogger),...contextFromRuntime,...baseContext,surface:normalizedSurface,target:normalizedTarget,layoutClass:normalizedLayoutClass};debugLog(`getPlacements:start`,{surface:normalizedSurface,target:normalizedTarget,layoutClass:normalizedLayoutClass,contextKeys:Object.keys(baseContext),sharedContextKeys:Object.keys(contextFromRuntime),placementCount:placementDefinitions.length,topologyCount:placementTopology.length});const matches=[];for(const placement of placementDefinitions){const renderablePlacement=resolveRenderablePlacement({placement,topologyEntries:placementTopology,requestedSurface:normalizedSurface,requestedTarget:normalizedTarget,requestedLayoutClass:normalizedLayoutClass});if(!renderablePlacement)continue;const placementSurfaces=Array.isArray(renderablePlacement.surfaces)?renderablePlacement.surfaces:[WEB_PLACEMENT_SURFACE_ANY];if(!matchesSurface(placementSurfaces,normalizedSurface)){debugLog(`getPlacements:skip-surfaces`,{placementId:renderablePlacement.id,placementSurfaces,requestedSurface:normalizedSurface});continue}if(!shouldIncludePlacement(renderablePlacement,placementContext,runtimeLogger)){debugLog(`getPlacements:skip-when`,{placementId:renderablePlacement.id});continue}const component=resolvePlacementComponent(components,renderablePlacement,runtimeLogger,missingTokens,invalidComponentTokens,failedTokens);if(!component){debugLog(`getPlacements:skip-component`,{placementId:renderablePlacement.id,componentToken:renderablePlacement.componentToken});continue}debugLog(`getPlacements:include`,{placementId:renderablePlacement.id,componentToken:renderablePlacement.componentToken,placementSurfaces,order:renderablePlacement.order});matches.push(Object.freeze({...renderablePlacement,component}))}debugLog(`getPlacements:done`,{surface:normalizedSurface,target:normalizedTarget,layoutClass:normalizedLayoutClass,resultIds:matches.map(entry=>entry.id)});return Object.freeze(matches)}return Object.freeze({replacePlacements,replacePlacementTopology,getPlacements,getContext,setContext,subscribe,getRevision})}var DEFAULT_BOOTSTRAP_PATH=`/api/bootstrap`;function normalizeObject(value){return value&&typeof value===`object`&&!Array.isArray(value)?value:{}}function buildBootstrapUrl({path=DEFAULT_BOOTSTRAP_PATH,query={}}={}){const normalizedPath=String(path||DEFAULT_BOOTSTRAP_PATH).trim()||DEFAULT_BOOTSTRAP_PATH;const params=new URLSearchParams;for(const[key,value]of Object.entries(normalizeObject(query))){const normalizedKey=String(key||``).trim();const normalizedValue=String(value||``).trim();if(!normalizedKey||!normalizedValue)continue;params.set(normalizedKey,normalizedValue)}const queryString=params.toString();return queryString?`${normalizedPath}?${queryString}`:normalizedPath}function normalizeBootstrapResponseError(response,url){const error=new Error(`Bootstrap payload request failed with status ${response.status}.`);error.statusCode=Number(response.status||0);error.url=url;return error}function createShellBootstrapRuntime({handlers,placementRuntime,requestRecoveryRuntime=null,router=null,logger,fetchImplementation=globalThis.fetch,bootstrapPath=DEFAULT_BOOTSTRAP_PATH}={}){if(!handlers||typeof handlers.list!==`function`)throw new Error(`createShellBootstrapRuntime requires a bootstrap handler registry.`);if(!placementRuntime||typeof placementRuntime.setContext!==`function`)throw new Error(`createShellBootstrapRuntime requires a placement runtime.`);const runtimeLogger=createProviderLogger(logger);let initialized=false;let refreshQueue=Promise.resolve();async function resolveBootstrapRequest(reason=`manual`){const payloadHandlers=handlers.list();let request={path:bootstrapPath,query:{},meta:{}};for(const handler of payloadHandlers){if(typeof handler.resolveBootstrapRequest!==`function`)continue;const contribution=normalizeObject(await handler.resolveBootstrapRequest({router,placementRuntime,reason,request:Object.freeze({path:request.path,query:Object.freeze({...request.query}),meta:Object.freeze({...request.meta})})}));request={path:String(contribution.path||request.path||bootstrapPath).trim()||bootstrapPath,query:{...request.query,...normalizeObject(contribution.query)},meta:{...request.meta,...normalizeObject(contribution.meta)}}}return Object.freeze({path:request.path,query:Object.freeze({...request.query}),meta:Object.freeze({...request.meta})})}async function applyBootstrapPayload(payload,reason=`manual`,request=Object.freeze({})){const payloadHandlers=handlers.list();const source=`shell-web.bootstrap.${String(reason||`manual`).trim()||`manual`}`;for(const handler of payloadHandlers)await handler.applyBootstrapPayload({router,placementRuntime,payload,request,reason,source});return payload}async function applyBootstrapError(error,reason=`manual`,request=Object.freeze({})){const payloadHandlers=handlers.list();const source=`shell-web.bootstrap.${String(reason||`manual`).trim()||`manual`}`;for(const handler of payloadHandlers){if(typeof handler.handleBootstrapError!==`function`)continue;await handler.handleBootstrapError({router,placementRuntime,error,request,reason,source})}}async function performRefresh(reason=`manual`){if(typeof fetchImplementation!==`function`)throw new Error(`Bootstrap payload fetch requires a fetch implementation.`);const request=await resolveBootstrapRequest(reason);const url=buildBootstrapUrl(request);try{const response=await fetchImplementation(url,{method:`GET`,credentials:`include`,headers:{accept:`application/json`}});if(!response.ok)throw normalizeBootstrapResponseError(response,url);return applyBootstrapPayload(await response.json(),reason,request)}catch(error){await applyBootstrapError(error,reason,request);requestRecoveryRuntime?.report?.(error,{label:`App data`,retry:()=>refresh(reason),source:`shell-web.bootstrap`,dedupeKey:`shell-web.bootstrap.${String(reason||`manual`).trim()||`manual`}.request-failed`});runtimeLogger.warn({reason,error:String(error?.message||error||`unknown error`)},`shell-web bootstrap refresh failed.`);return null}}function refresh(reason=`manual`){refreshQueue=refreshQueue.then(()=>performRefresh(reason));return refreshQueue}async function initialize(){if(initialized)return null;initialized=true;return refresh(`init`)}return Object.freeze({initialize,refresh})}function normalizeBootstrapPayloadHandler(entry){if(typeof entry===`function`)return Object.freeze({handlerId:String(entry.name||`anonymous`),order:0,applyBootstrapPayload:entry});if(!entry||typeof entry!==`object`||typeof entry.applyBootstrapPayload!==`function`)throw new TypeError(`Bootstrap payload handlers require applyBootstrapPayload().`);const handlerId=String(entry.handlerId||``).trim();if(!handlerId)throw new TypeError(`Bootstrap payload handlers require handlerId.`);return Object.freeze({...entry,handlerId,order:Number.isFinite(entry.order)?Number(entry.order):0})}function createBootstrapPayloadHandlerRegistry(){const handlers=new Map;function register(entry){const handler=normalizeBootstrapPayloadHandler(entry);if(handlers.has(handler.handlerId))throw new Error(`Bootstrap payload handler "${handler.handlerId}" is duplicated.`);handlers.set(handler.handlerId,handler);return api}function list(){return Object.freeze([...handlers.values()].sort((left,right)=>{if(left.order!==right.order)return left.order-right.order;return left.handlerId.localeCompare(right.handlerId)}))}const api=Object.freeze({register,list});return api}function resolveBootstrapErrorStatusCode(error){const statusCode=Number(error?.statusCode||error?.status||0);return Number.isInteger(statusCode)&&statusCode>0?statusCode:0}var APP_PLACEMENT_MODULE_SPECIFIER=`/src/placement.js`;var APP_PLACEMENT_TOPOLOGY_MODULE_SPECIFIER=`/src/placementTopology.js`;var APP_ERROR_MODULE_SPECIFIER=`/src/error.js`;var ASYNC_MODULE_RELOAD_FAILURE_MESSAGE=`The app cannot reload because the app server is not reachable. Restart the server, then click Reload.`;async function loadAppPlacementDefinitions(logger,asyncModuleRecoveryRuntime=null){try{const exported=(await __vitePreload(()=>import(`./placement-BF-zIEhA.js`).then(n=>n.n),__vite__mapDeps([110,6,1,7,71,49,44,19,101,111,45])))?.default;const resolved=typeof exported===`function`?exported():exported;if(Array.isArray(resolved))return resolved;logger.warn({module:APP_PLACEMENT_MODULE_SPECIFIER,exportedType:typeof exported},`App placement module default export did not resolve to an array; using empty list.`)}catch(error){if(isMissingDynamicModule(error,APP_PLACEMENT_MODULE_SPECIFIER))return[];notifyDynamicImportFailure(asyncModuleRecoveryRuntime,error,{label:`Placement config`});logger.warn({module:APP_PLACEMENT_MODULE_SPECIFIER,error:String(error?.message||error||`unknown error`)},`Failed to load app placement module; using empty list.`)}return[]}async function loadAppPlacementTopology(logger,asyncModuleRecoveryRuntime=null){try{const exported=(await __vitePreload(()=>import(`./placementTopology-CDhUIK6L.js`),[]))?.default;return resolveAppPlacementTopologyExport(exported,logger)}catch(error){if(isMissingDynamicModule(error,APP_PLACEMENT_TOPOLOGY_MODULE_SPECIFIER))return[];notifyDynamicImportFailure(asyncModuleRecoveryRuntime,error,{label:`Placement topology`});logger.warn({module:APP_PLACEMENT_TOPOLOGY_MODULE_SPECIFIER,error:String(error?.message||error||`unknown error`)},`Failed to load app placement topology module; using empty topology.`)}return[]}function resolveAppPlacementTopologyExport(exported,logger){const resolved=typeof exported===`function`?exported():exported;if(Array.isArray(resolved))return resolved;if(resolved&&typeof resolved===`object`)return resolved;logger.warn({module:APP_PLACEMENT_TOPOLOGY_MODULE_SPECIFIER,exportedType:typeof exported},`App placement topology module default export did not resolve to an object or array; using empty topology.`);return[]}function createErrorConfigToolkit(errorRuntime){return Object.freeze({createDefaultErrorPolicy,moduleDefaultPresenterId:`material.snackbar`,presenterFactories:Object.freeze({createMaterialSnackbarPresenter,createMaterialBannerPresenter,createMaterialDialogPresenter}),runtime:errorRuntime})}async function loadAppErrorConfig(logger,errorRuntime,asyncModuleRecoveryRuntime=null){try{const exported=(await __vitePreload(()=>import(`./error-DgrgRbJJ.js`),__vite__mapDeps([154,70,1,44])))?.default;const toolkit=createErrorConfigToolkit(errorRuntime);const resolved=typeof exported===`function`?await exported(toolkit):exported;if(isRecord$2(resolved))return resolved;logger.warn({module:APP_ERROR_MODULE_SPECIFIER,exportedType:typeof exported},`App error module default export did not resolve to an object; using shell-web defaults.`)}catch(error){if(isMissingDynamicModule(error,APP_ERROR_MODULE_SPECIFIER))return{};notifyDynamicImportFailure(asyncModuleRecoveryRuntime,error,{label:`Error config`});logger.warn({module:APP_ERROR_MODULE_SPECIFIER,error:String(error?.message||error||`unknown error`)},`Failed to load app error module; using shell-web defaults.`)}return{}}function applyAppErrorConfig(errorRuntime,errorConfig={}){const source=isRecord$2(errorConfig)?errorConfig:{};const configPayload={};if(Array.isArray(source.presenters)&&source.presenters.length>0)configPayload.presenters=source.presenters;if(Object.prototype.hasOwnProperty.call(source,`policy`))configPayload.policy=source.policy;if(Object.prototype.hasOwnProperty.call(source,`defaultPresenterId`))configPayload.defaultPresenterId=source.defaultPresenterId;if(Object.keys(configPayload).length>0){errorRuntime.configure(configPayload);return}errorRuntime.assertBootReady()}function isPullRefreshQuery(query=null){const meta=isRecord$2(query?.meta)?query.meta:{};if(meta.jskitRefresh===`pull`)return true;if(meta.jskitRefresh===false)return false;return(isRecord$2(meta.jskit)?meta.jskit:{}).refreshOnPull!==false}function createShellRefreshRuntime({bootstrapRuntime=null,queryClient=null,errorRuntime=null,logger=null}={}){const runtimeLogger=createProviderLogger(logger);let refreshQueue=Promise.resolve(null);async function refreshBootstrap(reason){if(!bootstrapRuntime||typeof bootstrapRuntime.refresh!==`function`)return false;await bootstrapRuntime.refresh(reason);return true}async function refetchPullQueries(){if(!queryClient||typeof queryClient.refetchQueries!==`function`)return false;await queryClient.refetchQueries({type:`active`,predicate:isPullRefreshQuery},{throwOnError:false});return true}function reportRefreshFailure(error){runtimeLogger.warn({error:String(error?.message||error||`unknown error`)},`Shell refresh failed.`);if(!errorRuntime||typeof errorRuntime.report!==`function`)return;errorRuntime.report({source:`shell-web.refresh`,message:`Unable to refresh. Check the connection and try again.`,intent:`app-recoverable`,severity:`error`,dedupeKey:`shell-web.refresh.failed`,dedupeWindowMs:2e3,action:{label:`Retry`,dismissOnRun:true,handler(){refresh(`retry`)}}})}async function performRefresh(reason=`manual`){const normalizedReason=String(reason||`manual`).trim()||`manual`;try{const[bootstrapRefreshed,queriesRefetched]=await Promise.all([refreshBootstrap(normalizedReason),refetchPullQueries()]);return Object.freeze({reason:normalizedReason,bootstrapRefreshed,queriesRefetched})}catch(error){reportRefreshFailure(error);return Object.freeze({reason:normalizedReason,bootstrapRefreshed:false,queriesRefetched:false,error})}}function refresh(reason=`manual`){refreshQueue=refreshQueue.catch(()=>null).then(()=>performRefresh(reason));return refreshQueue}return Object.freeze({refresh})}function installVueErrorBridge(vueApp,errorRuntime,logger){if(!vueApp||!isRecord$2(vueApp.config))return;const previousHandler=typeof vueApp.config.errorHandler===`function`?vueApp.config.errorHandler:null;vueApp.config.errorHandler=(error,instance,info)=>{try{errorRuntime.report({source:`shell-web.vue.error-handler`,message:String(error?.message||`Unexpected UI error.`),cause:error,intent:`blocking`,severity:`error`,details:{info:String(info||``)}})}catch(reportError){logger.error({source:`shell-web.vue.error-handler`,error:String(reportError?.message||reportError||`unknown error`)},`Shell web error runtime failed to report a Vue error.`)}if(previousHandler)previousHandler(error,instance,info)}}function installRouterErrorBridge(router,errorRuntime,logger){if(!router||typeof router.onError!==`function`)return;router.onError(error=>{if(isDynamicImportError(error))return;try{errorRuntime.report({source:`shell-web.router.on-error`,message:String(error?.message||`Navigation failed.`),cause:error,intent:`app-recoverable`,severity:`error`,dedupeKey:String(error?.message||`navigation-failed`),dedupeWindowMs:2e3})}catch(reportError){logger.error({source:`shell-web.router.on-error`,error:String(reportError?.message||reportError||`unknown error`)},`Shell web error runtime failed to report a router error.`)}})}function createShellAsyncModuleRecoveryRuntime({router=null,errorRuntime=null,logger=null}={}){const runtimeLogger=createProviderLogger(logger);const state=createAsyncModuleRecoveryState();let installedRecovery=null;function report(nextState=state){if(!errorRuntime||typeof errorRuntime.report!==`function`){runtimeLogger.warn({label:String(nextState?.label||``)},`Async module recovery could not report because the shell error runtime is unavailable.`);return null}try{return errorRuntime.report({source:`shell-web.async-module-recovery`,message:String(nextState?.message||`A required app module could not load.`),cause:nextState?.error||null,intent:`app-recoverable`,severity:`warning`,dedupeKey:`shell-web.async-module-recovery.${Number(nextState?.attempt||0)}`,action:{label:`Reload`,dismissOnRun:true,handler(){return reload()}}})}catch(error){runtimeLogger.error({label:String(nextState?.label||``),error:String(error?.message||error||`unknown error`)},`Async module recovery could not report through the shell error runtime.`);return null}}async function reload(){const reloaded=await guardedReloadApp({state,label:`App`,message:ASYNC_MODULE_RELOAD_FAILURE_MESSAGE});if(!reloaded)report(state);return reloaded}function notify(error=null,{label=`App module`,message=``,stale=isDynamicImportError(error)}={}){notifyAsyncModuleLoadError(state,error,{label,message,retry:state.retry,stale});return report(state)}function install(){if(installedRecovery)return installedRecovery;installedRecovery=installAsyncModuleRecoveryHandlers({state,label:`App module`,router,onNotify:report});return installedRecovery}function dispose(){installedRecovery?.dispose?.();installedRecovery=null}return Object.freeze({dispose,install,notify,reload,report,state})}var ShellWebClientProvider=defineProvider({id:`shell.web.client`,requires:{components:`client.components`,loggerInput:`client.logger`,pinia:`client.pinia`,queryClient:`client.query`,router:`client.router`,surfaceRuntime:`client.surface`,vueApp:`client.vue`},provides:{shell:`client.shell`},setup({components,loggerInput,queryClient,router}){const logger=createProviderLogger(loggerInput);const bootstrapHandlers=createBootstrapPayloadHandlerRegistry();bootstrapHandlers.register(Object.freeze({handlerId:`shell.web.bootstrap.surface-access`,order:0,applyBootstrapPayload({payload={},placementRuntime,source}={}){placementRuntime.setContext({surfaceAccess:payload?.surfaceAccess&&typeof payload.surfaceAccess===`object`?payload.surfaceAccess:{}},{source})},handleBootstrapError({error,placementRuntime,source}={}){if(resolveBootstrapErrorStatusCode(error)!==401)return;placementRuntime.setContext({surfaceAccess:{}},{source})}}));const errorPresentationStore=createErrorPresentationStore();const errorRuntime=createErrorRuntime({presenters:createDefaultMaterialErrorPresenters({store:errorPresentationStore}),policy:createDefaultErrorPolicy(),moduleDefaultPresenterId:`material.snackbar`,logger});const placementRuntime=createWebPlacementRuntime({components,logger});const asyncModuleRecoveryRuntime=createShellAsyncModuleRecoveryRuntime({router,errorRuntime,logger});const requestRecoveryRuntime=createShellRequestRecoveryRuntime({queryClient,errorRuntime,logger});const bootstrapRuntime=createShellBootstrapRuntime({handlers:bootstrapHandlers,placementRuntime,requestRecoveryRuntime,router,logger});const refreshRuntime=createShellRefreshRuntime({bootstrapRuntime,queryClient,errorRuntime,logger});return{shell:Object.freeze({asyncModuleRecovery:asyncModuleRecoveryRuntime,bootstrap:bootstrapRuntime,bootstrapHandlers,error:errorRuntime,errorPresentationStore,placement:placementRuntime,refresh:refreshRuntime,requestRecovery:requestRecoveryRuntime})}},async boot({loggerInput,pinia,router,surfaceRuntime,vueApp},{outputs}){const logger=createProviderLogger(loggerInput);const{asyncModuleRecovery:asyncModuleRecoveryRuntime,bootstrap:bootstrapRuntime,error:errorRuntime,errorPresentationStore,placement:placementRuntime,refresh:refreshRuntime,requestRecovery:requestRecoveryRuntime}=outputs.shell;asyncModuleRecoveryRuntime.install();if(placementRuntime&&typeof placementRuntime.replacePlacements===`function`){const placementTopology=await loadAppPlacementTopology(logger,asyncModuleRecoveryRuntime);if(typeof placementRuntime.replacePlacementTopology===`function`)placementRuntime.replacePlacementTopology(placementTopology,{source:APP_PLACEMENT_TOPOLOGY_MODULE_SPECIFIER});const placements=await loadAppPlacementDefinitions(logger,asyncModuleRecoveryRuntime);placementRuntime.replacePlacements(placements,{source:APP_PLACEMENT_MODULE_SPECIFIER});const appConfig=getClientAppConfig();const surfaceConfig=buildSurfaceConfigContext(surfaceRuntime,{tenancyMode:appConfig?.tenancyMode});const surfaceAccessPolicies=appConfig?.surfaceAccessPolicies&&typeof appConfig.surfaceAccessPolicies===`object`?appConfig.surfaceAccessPolicies:{};placementRuntime.setContext({surfaceConfig,surfaceAccessPolicies},{source:`shell-web.surface-config`})}applyAppErrorConfig(errorRuntime,await loadAppErrorConfig(logger,errorRuntime,asyncModuleRecoveryRuntime));requestRecoveryRuntime.install();if(bootstrapRuntime&&typeof bootstrapRuntime.initialize===`function`)await bootstrapRuntime.initialize();if(!vueApp||typeof vueApp.provide!==`function`||typeof vueApp.use!==`function`)return;if(!pinia)throw new Error(`ShellWebClientProvider requires Pinia installed in the client app.`);useShellErrorPresentationStore(pinia).attachRuntimeStore(errorPresentationStore);vueApp.provide(`jskit.shell-web.runtime.web-placement.client`,placementRuntime);vueApp.provide(`jskit.shell-web.runtime.web-refresh.client`,refreshRuntime);vueApp.provide(`jskit.shell-web.runtime.web-error.client`,errorRuntime);vueApp.provide(SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY,asyncModuleRecoveryRuntime);vueApp.provide(SHELL_REQUEST_RECOVERY_RUNTIME_KEY,requestRecoveryRuntime);vueApp.provide(`jskit.shell-web.runtime.web-error.presentation-store.client`,errorPresentationStore);installVueErrorBridge(vueApp,errorRuntime,logger);installRouterErrorBridge(router,errorRuntime,logger)},shutdown(_dependencies,{outputs}){outputs.shell.requestRecovery.dispose();outputs.shell.asyncModuleRecovery.dispose()}});var SHELL_LAYOUT_DRAWER_DEFAULT_OPEN_STORAGE_KEY=`jskit.shell-web.drawer-default-open`;function readDrawerDefaultOpenPreference({storage=typeof window===`object`?window?.localStorage:null}={}){if(!storage||typeof storage.getItem!==`function`)return true;try{const storedValue=String(storage.getItem(`jskit.shell-web.drawer-default-open`)||``).trim().toLowerCase();if(storedValue===`false`)return false;if(storedValue===`true`)return true}catch{return true}return true}function writeDrawerDefaultOpenPreference(open,{storage=typeof window===`object`?window?.localStorage:null}={}){if(!storage||typeof storage.setItem!==`function`)return;try{storage.setItem(SHELL_LAYOUT_DRAWER_DEFAULT_OPEN_STORAGE_KEY,open?`true`:`false`)}catch{}}var useShellLayoutStore=defineStore(`jskit.shell-web.layout`,()=>{const drawerDefaultOpen=ref(readDrawerDefaultOpenPreference());const drawerOpen=ref(drawerDefaultOpen.value);const supportingContentOpen=ref(false);const supportingContentTitle=ref(``);function setDrawerDefaultOpen(open){const normalized=Boolean(open);drawerDefaultOpen.value=normalized;drawerOpen.value=normalized;writeDrawerDefaultOpenPreference(normalized)}function setDrawerOpen(open){drawerOpen.value=Boolean(open)}function toggleDrawer(){drawerOpen.value=!drawerOpen.value}function openSupportingContent({title=``}={}){supportingContentTitle.value=String(title||``).trim();supportingContentOpen.value=true}function closeSupportingContent(){supportingContentOpen.value=false}function setSupportingContentOpen(open){supportingContentOpen.value=Boolean(open)}return{drawerDefaultOpen,drawerOpen,supportingContentOpen,supportingContentTitle,setDrawerDefaultOpen,setDrawerOpen,toggleDrawer,openSupportingContent,closeSupportingContent,setSupportingContentOpen}});function toSurfaceLabel(surfaceId=``){const normalizedSurfaceId=String(surfaceId||``).trim().toLowerCase();if(!normalizedSurfaceId)return`Surface`;return normalizedSurfaceId.split(/[^a-z0-9]+/g).filter(Boolean).map(segment=>`${segment.slice(0,1).toUpperCase()}${segment.slice(1)}`).join(` `)}function useShellLayoutState(props={}){const shellLayoutStore=useShellLayoutStore();const{drawerDefaultOpen,drawerOpen,supportingContentOpen,supportingContentTitle}=storeToRefs(shellLayoutStore);let route=null;try{route=useRoute()}catch{route=null}const{context:placementContext}=useWebPlacementContext();function toggleDrawer(){shellLayoutStore.toggleDrawer()}const resolvedSurface=computed(()=>{const explicitSurface=normalizeSurfaceId$1(props?.surface);if(explicitSurface)return explicitSurface;const pathname=String(route?.path||``).trim()||(typeof window===`object`&&window?.location?.pathname?String(window.location.pathname).trim():`/`);const contextValue=placementContext?.value||null;const resolvedSurfaceFromPath=resolveSurfaceIdFromPlacementPathname(contextValue,pathname);if(resolvedSurfaceFromPath)return resolvedSurfaceFromPath;const surfaceConfig=readPlacementSurfaceConfig(contextValue);if(surfaceConfig.defaultSurfaceId)return surfaceConfig.defaultSurfaceId;return`surface`});const resolvedSurfaceLabel=computed(()=>{const explicitLabel=String(props?.surfaceLabel||``).trim();if(explicitLabel)return explicitLabel;const surfaceDefinition=resolveSurfaceDefinitionFromPlacementContext(placementContext?.value||null,resolvedSurface.value);const configuredLabel=String(surfaceDefinition?.label||``).trim();if(configuredLabel)return configuredLabel;return toSurfaceLabel(resolvedSurface.value)});return Object.freeze({drawerDefaultOpen,drawerOpen,supportingContentOpen,supportingContentTitle,setDrawerDefaultOpen:shellLayoutStore.setDrawerDefaultOpen,setDrawerOpen:shellLayoutStore.setDrawerOpen,setSupportingContentOpen:shellLayoutStore.setSupportingContentOpen,openSupportingContent:shellLayoutStore.openSupportingContent,closeSupportingContent:shellLayoutStore.closeSupportingContent,toggleDrawer,resolvedSurface,resolvedSurfaceLabel})}var DESKTOP_DRAWER_CLOSED_MODES=Object.freeze([`rail`,`hidden`]);function normalizeDesktopDrawerClosedMode(value=`rail`){const normalized=String(value||`rail`).trim().toLowerCase();return DESKTOP_DRAWER_CLOSED_MODES.includes(normalized)?normalized:`rail`}function resolveShellDrawerPresentation({compact=false,open=false,desktopClosedMode=`rail`}={}){const closedMode=normalizeDesktopDrawerClosedMode(desktopClosedMode);if(compact)return Object.freeze({visible:Boolean(open),rail:false,kind:`modal`,closedMode});if(open)return Object.freeze({visible:true,rail:false,kind:`drawer`,closedMode});if(closedMode===`hidden`)return Object.freeze({visible:false,rail:false,kind:`hidden`,closedMode});return Object.freeze({visible:true,rail:true,kind:`rail`,closedMode})}function resolveShellDrawerToggleLabel({compact=false,open=false}={}){if(compact)return open?`Close navigation menu`:`Open navigation menu`;return open?`Collapse navigation drawer`:`Expand navigation drawer`}var DEFAULT_SHELL_DRAWER_WIDTH=248;var DEFAULT_SHELL_RAIL_WIDTH=80;var MINIMUM_SHELL_DRAWER_WIDTH=120;var MAXIMUM_SHELL_DRAWER_WIDTH=360;var MINIMUM_SHELL_RAIL_WIDTH=48;var MAXIMUM_SHELL_RAIL_WIDTH=160;var DEFAULT_SHELL_NAVIGATION_ITEM_SPACING=12;var MINIMUM_SHELL_NAVIGATION_ITEM_SPACING=8;var MAXIMUM_SHELL_NAVIGATION_ITEM_SPACING=24;function clampNumber(value,minimum,maximum){return Math.min(maximum,Math.max(minimum,value))}function normalizeShellDrawerWidth(value,fallback=248){const parsed=Number(value);if(!Number.isFinite(parsed)||parsed<=0)return fallback;return clampNumber(parsed,120,360)}function normalizeShellRailWidth(value,fallback=80){const parsed=Number(value);if(!Number.isFinite(parsed)||parsed<=0)return fallback;return clampNumber(Math.round(parsed),MINIMUM_SHELL_RAIL_WIDTH,MAXIMUM_SHELL_RAIL_WIDTH)}function normalizeShellNavigationItemSpacing(value,fallback=12){const parsed=Number(value);if(!Number.isFinite(parsed)||parsed<=0)return fallback;return clampNumber(Math.round(parsed),MINIMUM_SHELL_NAVIGATION_ITEM_SPACING,MAXIMUM_SHELL_NAVIGATION_ITEM_SPACING)}function resolveContentAwareDrawerWidth(measurements=[],{endGap=12,minimum=120,maximum=360,fallback=248}={}){let requiredWidth=0;for(const measurement of measurements){const logicalStart=Number(measurement?.logicalStart);const textWidth=Number(measurement?.textWidth);if(!Number.isFinite(logicalStart)||logicalStart<0||!Number.isFinite(textWidth)||textWidth<=0)continue;requiredWidth=Math.max(requiredWidth,logicalStart+textWidth+Number(endGap||0))}if(requiredWidth<=0)return normalizeShellDrawerWidth(fallback);return clampNumber(Math.ceil(requiredWidth*4)/4,minimum,maximum)}var _sfc_main$12={__name:`ShellOutlet`,props:{target:{type:String,default:``},default:{type:Boolean,default:false},context:{type:Object,default:()=>({})}},setup(__props){const props=__props;let route=null;try{route=useRoute()}catch{route=null}let display=null;try{display=useDisplay()}catch{display=null}const placementRuntime=useWebPlacementRuntime();const{context:placementContext}=useWebPlacementContext();const revision=ref(typeof placementRuntime.getRevision===`function`?placementRuntime.getRevision():0);let unsubscribe=null;onMounted(()=>{if(typeof placementRuntime.subscribe!==`function`)return;unsubscribe=placementRuntime.subscribe(event=>{const next=Number(event?.revision);revision.value=Number.isInteger(next)?next:revision.value+1})});onBeforeUnmount(()=>{if(typeof unsubscribe===`function`){unsubscribe();unsubscribe=null}});const resolvedSurface=computed(()=>{const contextValue=placementContext?.value||null;const pathname=resolveRuntimePathname(route?.path);const surfaceFromPathname=resolveSurfaceIdFromPlacementPathname(contextValue,pathname);if(surfaceFromPathname)return surfaceFromPathname;const surfaceConfig=readPlacementSurfaceConfig(contextValue);if(surfaceConfig.defaultSurfaceId)return surfaceConfig.defaultSurfaceId;return`*`});const resolvedTargetId=computed(()=>{return String(props.target||``).trim()});const resolvedLayoutClass=computed(()=>{const displayName=String(display?.name?.value||``).trim().toLowerCase();if(displayName===`xs`||displayName===`sm`)return`compact`;if(displayName===`md`)return`medium`;if(displayName===`lg`||displayName===`xl`||displayName===`xxl`)return`expanded`;const viewportWidth=typeof window===`object`&&window?.innerWidth?Number(window.innerWidth):0;if(viewportWidth>0&&viewportWidth<600)return`compact`;if(viewportWidth>0&&viewportWidth<1280)return`medium`;return`expanded`});const placements=computed(()=>{revision.value;return placementRuntime.getPlacements({surface:resolvedSurface.value,target:resolvedTargetId.value,layoutClass:resolvedLayoutClass.value,context:props.context})});return(_ctx,_cache)=>{return openBlock(true),createElementBlock(Fragment,null,renderList(placements.value,entry=>{return openBlock(),createBlock(resolveDynamicComponent(entry.component),mergeProps({key:entry.id},{ref_for:true},entry.props),null,16)}),128)}}};function normalizeMenuLinkPathname(pathname=``){const source=String(pathname||``).trim();if(!source)return``;const queryIndex=source.indexOf(`?`);const hashIndex=source.indexOf(`#`);const cutoff=queryIndex<0?hashIndex:hashIndex<0?queryIndex:Math.min(queryIndex,hashIndex);return cutoff<0?source:source.slice(0,cutoff)}function resolveMenuLinkSurfaceId(surface=``,fallbackSurfaceId=``){const explicitSurface=normalizeText$3(surface).toLowerCase();if(explicitSurface&&explicitSurface!==`*`)return explicitSurface;return normalizeText$3(fallbackSurfaceId).toLowerCase()}function interpolateBracketParams(pathTemplate=``,params={}){const source=String(pathTemplate||``).trim();if(!source)return``;return source.replace(/\[([^\]]+)\]/g,(_match,rawKey)=>{const key=String(rawKey||``).trim();if(!key)return``;const value=params?.[key];return value==null?`[${key}]`:encodeURIComponent(String(value))})}function isRelativeMenuLinkTarget(target=``){const normalizedTarget=normalizeText$3(target);return normalizedTarget.startsWith(`./`)||normalizedTarget.startsWith(`../`)}function surfaceRequiresWorkspaceFromPlacementContext(contextValue=null,surfaceId=``){return Boolean(resolveSurfaceDefinitionFromPlacementContext(contextValue,surfaceId)?.requiresWorkspace)}function resolveMenuLinkTarget({to=``,surface=``,currentSurfaceId=``,placementContext=null,scopedSuffix=`/`,unscopedSuffix=`/`,routeParams={},resolvePagePath=null}={}){const explicitTarget=normalizeText$3(to);const targetSurfaceId=resolveMenuLinkSurfaceId(surface,currentSurfaceId);const scopedRouteRequired=surfaceRequiresWorkspaceFromPlacementContext(placementContext,targetSurfaceId);const interpolatedSuffix=interpolateBracketParams(normalizeText$3(scopedRouteRequired?scopedSuffix:unscopedSuffix)||`/`,routeParams);const resolvedSuffixTarget=typeof resolvePagePath===`function`&&targetSurfaceId&&interpolatedSuffix&&!interpolatedSuffix.includes(`[`)?normalizeText$3(resolvePagePath(interpolatedSuffix,{surface:targetSurfaceId,mode:`auto`})):``;if(!explicitTarget)return resolvedSuffixTarget;if(isRelativeMenuLinkTarget(explicitTarget))return resolvedSuffixTarget;return explicitTarget}function normalizeText(value=``){return String(value||``).trim()}function resolveShellRouteTransitionKey({routePathKey=``,routeTransitionName=``,surfaceId=``}={}){if(normalizeText(routeTransitionName))return normalizeText(routePathKey)||`/`;const surfaceKey=normalizeText(surfaceId);if(surfaceKey&&surfaceKey!==`*`)return`surface:${surfaceKey}`;return`stable`}var _hoisted_1$4={class:`shell-route-transition`};var SWIPE_MIN_DISTANCE=36;var SWIPE_MAX_VERTICAL_DRIFT=120;var SWIPE_MIN_VELOCITY=.08;var _sfc_main$11={__name:`ShellRouteTransition`,props:{enabled:{type:Boolean,default:true},target:{type:String,default:`shell-layout:primary-bottom-nav`},semanticTarget:{type:String,default:`shell.primary-nav`},swipeEnabled:{type:Boolean,default:true}},setup(__props){const props=__props;const route=useRoute();const router=useRouter$1();const display=useDisplay();const placementRuntime=useWebPlacementRuntime();const{context:placementContext}=useWebPlacementContext();const revision=ref(typeof placementRuntime.getRevision===`function`?placementRuntime.getRevision():0);const transitionDirection=ref(`none`);let unsubscribe=null;let activeSwipe=null;let stopSwipeClassWatch=null;onMounted(()=>{if(typeof placementRuntime.subscribe!==`function`)unsubscribe=null;else unsubscribe=placementRuntime.subscribe(event=>{const next=Number(event?.revision);revision.value=Number.isInteger(next)?next:revision.value+1});if(typeof window===`object`){window.addEventListener(`pointerdown`,handlePointerDown,{capture:true,passive:true});window.addEventListener(`pointermove`,handlePointerMove,{capture:true,passive:false});window.addEventListener(`pointerup`,handlePointerEnd,{capture:true,passive:true});window.addEventListener(`pointercancel`,handlePointerCancel,{capture:true,passive:true})}stopSwipeClassWatch=watch(swipeNavigationEnabled,enabled=>{if(typeof document!==`object`)return;document.documentElement.classList.toggle(`shell-route-swipe-enabled`,enabled)},{immediate:true})});onBeforeUnmount(()=>{if(typeof unsubscribe===`function`){unsubscribe();unsubscribe=null}if(typeof stopSwipeClassWatch===`function`){stopSwipeClassWatch();stopSwipeClassWatch=null}if(typeof document===`object`)document.documentElement.classList.remove(`shell-route-swipe-enabled`);if(typeof window===`object`){window.removeEventListener(`pointerdown`,handlePointerDown,{capture:true});window.removeEventListener(`pointermove`,handlePointerMove,{capture:true});window.removeEventListener(`pointerup`,handlePointerEnd,{capture:true});window.removeEventListener(`pointercancel`,handlePointerCancel,{capture:true})}});const resolvedLayoutClass=computed(()=>{const displayName=String(display?.name?.value||``).trim().toLowerCase();if(displayName===`xs`||displayName===`sm`)return`compact`;if(displayName===`md`)return`medium`;return`expanded`});const currentPathname=computed(()=>normalizeComparablePathname(resolveRuntimePathname(route?.path||route?.fullPath||`/`)));const currentSurfaceId=computed(()=>{const contextValue=placementContext?.value||null;const surfaceFromPathname=resolveSurfaceIdFromPlacementPathname(contextValue,currentPathname.value);if(surfaceFromPathname)return surfaceFromPathname;return readPlacementSurfaceConfig(contextValue).defaultSurfaceId||`*`});const primaryNavEntries=computed(()=>{revision.value;const contextValue=placementContext?.value||null;const routeParams=route?.params||{};return placementRuntime.getPlacements({surface:currentSurfaceId.value,target:props.target,layoutClass:`compact`}).filter(entry=>String(entry.semanticTarget||entry.target||``).trim()===props.semanticTarget).map((entry,index)=>{const entryProps=entry?.props&&typeof entry.props===`object`?entry.props:{};const target=resolveMenuLinkTarget({to:entryProps.to,surface:entryProps.surface,currentSurfaceId:currentSurfaceId.value,placementContext:contextValue,scopedSuffix:entryProps.scopedSuffix,unscopedSuffix:entryProps.unscopedSuffix,routeParams,resolvePagePath(relativePath,options={}){return resolveShellLinkPath({context:contextValue,surface:options.surface,relativePath,params:routeParams,strictParams:options.strictParams!==false})}});const navigationTarget=resolveSurfaceNavigationTargetFromPlacementContext(contextValue,{path:target,surfaceId:entryProps.surface||currentSurfaceId.value});return Object.freeze({id:entry.id,index,exact:entryProps.exact===true,href:navigationTarget.href,pathname:normalizeComparablePathname(navigationTarget.href),sameOrigin:navigationTarget.sameOrigin})}).filter(entry=>entry.pathname&&entry.sameOrigin)});const activePrimaryNavIndex=computed(()=>{const pathname=currentPathname.value;let bestMatch=null;for(const entry of primaryNavEntries.value){if(!pathMatchesNavigationEntry(pathname,entry))continue;if(!bestMatch||entry.pathname.length>bestMatch.pathname.length)bestMatch=entry}return bestMatch?bestMatch.index:-1});watch(activePrimaryNavIndex,(nextIndex,previousIndex)=>{if(!Number.isInteger(previousIndex)||previousIndex<0||nextIndex<0||nextIndex===previousIndex){transitionDirection.value=`none`;return}transitionDirection.value=nextIndex>previousIndex?`forward`:`reverse`},{flush:`sync`});const routeTransitionName=computed(()=>{if(!props.enabled||resolvedLayoutClass.value!==`compact`)return``;if(transitionDirection.value===`forward`)return`shell-route-slide-forward`;if(transitionDirection.value===`reverse`)return`shell-route-slide-reverse`;return``});const routeTransitionKey=ref(``);watch([()=>normalizeComparablePathname(route?.path||route?.fullPath||`/`),currentSurfaceId],([routePathKey,surfaceId])=>{routeTransitionKey.value=resolveShellRouteTransitionKey({routePathKey,routeTransitionName:routeTransitionName.value,surfaceId})},{immediate:true,flush:`sync`});const swipeNavigationEnabled=computed(()=>Boolean(props.enabled&&props.swipeEnabled&&resolvedLayoutClass.value===`compact`&&primaryNavEntries.value.length>1&&activePrimaryNavIndex.value>=0));function handlePointerDown(event){if(!swipeNavigationEnabled.value||!isPrimaryPointerEvent(event)||isSwipeIgnoredTarget(event.target)){activeSwipe=null;return}activeSwipe={pointerId:event.pointerId,startX:event.clientX,startY:event.clientY,startTime:performance.now(),cancelled:false};try{event.target?.setPointerCapture?.(event.pointerId)}catch{}}function handlePointerMove(event){if(!activeSwipe||event.pointerId!==activeSwipe.pointerId)return;const deltaX=event.clientX-activeSwipe.startX;const deltaY=event.clientY-activeSwipe.startY;const absX=Math.abs(deltaX);const absY=Math.abs(deltaY);if(absY>SWIPE_MAX_VERTICAL_DRIFT||absY>28&&absY>absX*1.3){activeSwipe.cancelled=true;return}if(absX>10&&absX>absY)event.preventDefault();if(isAcceptedSwipe({deltaX,deltaY,elapsed:Math.max(performance.now()-activeSwipe.startTime,1)})){const offset=deltaX<0?1:-1;activeSwipe=null;navigateBySwipe(offset)}}function handlePointerEnd(event){if(!activeSwipe||event.pointerId!==activeSwipe.pointerId)return;const swipe=activeSwipe;activeSwipe=null;if(swipe.cancelled||!swipeNavigationEnabled.value)return;const deltaX=event.clientX-swipe.startX;const deltaY=event.clientY-swipe.startY;const elapsed=Math.max(performance.now()-swipe.startTime,1);if(!isAcceptedSwipe({deltaX,deltaY,elapsed,velocity:Math.abs(deltaX)/elapsed}))return;navigateBySwipe(deltaX<0?1:-1)}function handlePointerCancel(event){if(activeSwipe&&event.pointerId===activeSwipe.pointerId)activeSwipe=null}function navigateBySwipe(offset=0){const currentIndex=activePrimaryNavIndex.value;const nextEntry=primaryNavEntries.value[currentIndex+offset];if(!nextEntry?.href||normalizeComparablePathname(nextEntry.href)===currentPathname.value)return;router.push(nextEntry.href).catch(()=>{})}function isAcceptedSwipe({deltaX=0,deltaY=0,elapsed=1,velocity=null}={}){const absX=Math.abs(deltaX);const absY=Math.abs(deltaY);const resolvedVelocity=velocity==null?absX/Math.max(elapsed,1):velocity;return Boolean(absX>=SWIPE_MIN_DISTANCE&&absY<=SWIPE_MAX_VERTICAL_DRIFT&&absX>absY&&resolvedVelocity>=SWIPE_MIN_VELOCITY)}function normalizeComparablePathname(value=``){const raw=String(value||``).trim();if(!raw)return``;try{const parsed=new URL(raw,window.location.href);if(parsed.origin!==window.location.origin)return``;return normalizePathname$1(parsed.pathname)}catch{return normalizePathname$1(normalizeMenuLinkPathname(raw))}}function pathMatchesNavigationEntry(pathname=``,entry={}){const target=String(entry.pathname||``).trim();if(!target)return false;if(entry.exact||target===`/`)return pathname===target;return pathname===target||pathname.startsWith(`${target}/`)}function isPrimaryPointerEvent(event){return event?.isPrimary!==false&&event?.button===0&&event?.pointerType!==`mouse`}function isSwipeIgnoredTarget(target){return Boolean(target?.closest?.([`a`,`button`,`input`,`select`,`textarea`,`summary`,`[role='button']`,`[role='link']`,`[role='slider']`,`[contenteditable='true']`,`[data-shell-swipe-ignore]`].join(`,`)))}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$4,[createVNode(Transition,{name:routeTransitionName.value,css:Boolean(routeTransitionName.value)},{default:withCtx(()=>[(openBlock(),createElementBlock(`div`,{key:routeTransitionKey.value,class:`shell-route-transition__pane`},[renderSlot(_ctx.$slots,`default`,{},void 0,true)]))]),_:3},8,[`name`,`css`])])}}};var ShellRouteTransition_default=_plugin_vue_export_helper_default(_sfc_main$11,[[`__scopeId`,`data-v-d1a1f5bc`]]);var _hoisted_1$3={class:`shell-layout__top-left d-flex align-center ga-2`};var _hoisted_2$1={class:`shell-layout__surface-label`};var _hoisted_3$1={class:`shell-layout__top-right d-flex align-center ga-2`};var _hoisted_4={class:`shell-layout__pull-refresh-label`};var _hoisted_5={key:0,class:`shell-layout__title text-h5`};var _hoisted_6={key:1,class:`shell-layout__subtitle text-body-2 text-medium-emphasis`};var _hoisted_7={class:`shell-layout__supporting-side-panel`};var _hoisted_8={class:`shell-layout__supporting-title`};var PULL_REFRESH_TRIGGER_DISTANCE=72;var PULL_REFRESH_MAX_DISTANCE=112;var _sfc_main$10={__name:`ShellLayout`,props:{surface:{type:String,default:``},surfaceLabel:{type:String,default:``},title:{type:String,default:``},subtitle:{type:String,default:``},desktopDrawerClosedMode:{type:String,default:`rail`},drawerWidth:{type:Number,default:null},railWidth:{type:Number,default:80},navigationItemSpacing:{type:Number,default:12}},setup(__props){const props=__props;const{drawerDefaultOpen,drawerOpen,setDrawerOpen,supportingContentOpen,supportingContentTitle,setSupportingContentOpen,closeSupportingContent,toggleDrawer,resolvedSurface,resolvedSurfaceLabel}=useShellLayoutState(props);const display=useDisplay();const refreshRuntime=inject$1(`jskit.shell-web.runtime.web-refresh.client`,null);const pullDistance=ref(0);const pullRefreshing=ref(false);const wideDrawerOpen=ref(Boolean(drawerDefaultOpen.value));const navigationToggle=ref(null);const navigationDrawer=ref(null);const measuredDrawerWidth=ref(248);let activePull=null;let drawerContentObserver=null;let drawerMeasurementFrame=null;let shellMounted=false;const layoutClass=computed(()=>{const displayName=String(display?.name?.value||``).trim().toLowerCase();if(displayName===`xs`||displayName===`sm`)return`compact`;if(displayName===`md`)return`medium`;return`expanded`});const isCompactLayout=computed(()=>layoutClass.value===`compact`);const drawerPresentation=computed(()=>resolveShellDrawerPresentation({compact:isCompactLayout.value,open:drawerOpen.value,desktopClosedMode:props.desktopDrawerClosedMode}));const drawerToggleLabel=computed(()=>resolveShellDrawerToggleLabel({compact:isCompactLayout.value,open:drawerOpen.value}));const resolvedDrawerWidth=computed(()=>{if(props.drawerWidth!==null&&props.drawerWidth!==void 0)return normalizeShellDrawerWidth(props.drawerWidth);return normalizeShellDrawerWidth(measuredDrawerWidth.value)});const resolvedRailWidth=computed(()=>normalizeShellRailWidth(props.railWidth));const resolvedNavigationItemSpacing=computed(()=>normalizeShellNavigationItemSpacing(props.navigationItemSpacing));const pullProgress=computed(()=>Math.min(100,Math.round(pullDistance.value/PULL_REFRESH_TRIGGER_DISTANCE*100)));const pullIndicatorVisible=computed(()=>Boolean(isCompactLayout.value&&(pullDistance.value>0||pullRefreshing.value)));const pullRefreshLabel=computed(()=>{if(pullRefreshing.value)return`Refreshing`;return pullProgress.value>=100?`Release to refresh`:`Pull to refresh`});const pullRefreshStyle=computed(()=>({"--shell-pull-refresh-distance":`${Math.round(Math.min(pullDistance.value,PULL_REFRESH_MAX_DISTANCE))}px`}));watch(drawerOpen,handleDrawerOpenChange);watch(isCompactLayout,handleLayoutClassChange,{immediate:true});watch(drawerPresentation,scheduleDrawerWidthMeasurement,{flush:`post`});watch(resolvedSurface,scheduleDrawerWidthMeasurement,{flush:`post`});watch(resolvedNavigationItemSpacing,scheduleDrawerWidthMeasurement,{flush:`post`});onMounted(attachShellListeners);onBeforeUnmount(detachShellListeners);function attachShellListeners(){shellMounted=true;if(typeof window!==`object`)return;window.addEventListener(`keydown`,handleShellKeydown);window.addEventListener(`resize`,scheduleDrawerWidthMeasurement,{passive:true});window.addEventListener(`pointerdown`,handlePullPointerDown,{capture:true,passive:true});window.addEventListener(`pointermove`,handlePullPointerMove,{capture:true,passive:false});window.addEventListener(`pointerup`,handlePullPointerEnd,{capture:true,passive:true});window.addEventListener(`pointercancel`,handlePullPointerCancel,{capture:true,passive:true});window.addEventListener(`touchstart`,handlePullTouchStart,{capture:true,passive:true});window.addEventListener(`touchmove`,handlePullTouchMove,{capture:true,passive:false});window.addEventListener(`touchend`,handlePullTouchEnd,{capture:true,passive:true});window.addEventListener(`touchcancel`,handlePullTouchCancel,{capture:true,passive:true});if(document?.fonts){document.fonts.ready.then(scheduleDrawerWidthMeasurement);document.fonts.addEventListener?.(`loadingdone`,scheduleDrawerWidthMeasurement)}nextTick$1().then(initializeDrawerMeasurement)}function detachShellListeners(){shellMounted=false;if(typeof window!==`object`)return;window.removeEventListener(`keydown`,handleShellKeydown);window.removeEventListener(`resize`,scheduleDrawerWidthMeasurement);window.removeEventListener(`pointerdown`,handlePullPointerDown,{capture:true});window.removeEventListener(`pointermove`,handlePullPointerMove,{capture:true});window.removeEventListener(`pointerup`,handlePullPointerEnd,{capture:true});window.removeEventListener(`pointercancel`,handlePullPointerCancel,{capture:true});window.removeEventListener(`touchstart`,handlePullTouchStart,{capture:true});window.removeEventListener(`touchmove`,handlePullTouchMove,{capture:true});window.removeEventListener(`touchend`,handlePullTouchEnd,{capture:true});window.removeEventListener(`touchcancel`,handlePullTouchCancel,{capture:true});document?.fonts?.removeEventListener?.(`loadingdone`,scheduleDrawerWidthMeasurement);drawerContentObserver?.disconnect();drawerContentObserver=null;if(drawerMeasurementFrame!==null){window.cancelAnimationFrame(drawerMeasurementFrame);drawerMeasurementFrame=null}}function handleDrawerOpenChange(open){if(!isCompactLayout.value)wideDrawerOpen.value=Boolean(open)}function handleLayoutClassChange(compact){setDrawerOpen(compact?false:wideDrawerOpen.value)}function handleShellKeydown(event){if(event?.defaultPrevented||event?.key!==`Escape`||!isCompactLayout.value||!drawerOpen.value)return;event.preventDefault();setDrawerOpen(false);nextTick$1().then(focusNavigationToggle)}function focusNavigationToggle(){(navigationToggle.value?.$el||navigationToggle.value)?.focus?.({preventScroll:true})}function initializeDrawerMeasurement(){const drawerElement=resolveNavigationDrawerElement();const drawerContent=drawerElement?.querySelector?.(`.v-navigation-drawer__content`)||drawerElement;if(typeof MutationObserver===`function`&&drawerContent){drawerContentObserver?.disconnect();drawerContentObserver=new MutationObserver(scheduleDrawerWidthMeasurement);drawerContentObserver.observe(drawerContent,{childList:true,characterData:true,subtree:true})}scheduleDrawerWidthMeasurement()}function resolveNavigationDrawerElement(){const exposedElement=navigationDrawer.value?.$el||navigationDrawer.value||null;if(typeof exposedElement?.getBoundingClientRect===`function`)return exposedElement;if(typeof document===`object`)return document.getElementById(`jskit-shell-drawer`);return null}function scheduleDrawerWidthMeasurement(){if(!shellMounted||props.drawerWidth!==null&&props.drawerWidth!==void 0||!drawerPresentation.value.visible||drawerPresentation.value.rail||typeof window!==`object`)return;if(drawerMeasurementFrame!==null)window.cancelAnimationFrame(drawerMeasurementFrame);drawerMeasurementFrame=window.requestAnimationFrame(measureDrawerContentWidth)}function measureDrawerContentWidth(){drawerMeasurementFrame=null;const drawerElement=resolveNavigationDrawerElement();if(!drawerElement||typeof document!==`object`)return;const drawerRect=drawerElement.getBoundingClientRect();const drawerStyle=window.getComputedStyle(drawerElement);const rightToLeft=drawerStyle.direction===`rtl`;const endBorderWidth=Number.parseFloat(rightToLeft?drawerStyle.borderLeftWidth:drawerStyle.borderRightWidth)||0;const measurements=[];for(const label of drawerElement.querySelectorAll(`.v-list-item-title`)){const labelStyle=window.getComputedStyle(label);if(labelStyle.display===`none`||labelStyle.visibility===`hidden`)continue;const textRect=measureRenderedText(label);if(!textRect||textRect.width<=0)continue;measurements.push({logicalStart:rightToLeft?drawerRect.right-textRect.right:textRect.left-drawerRect.left,textWidth:textRect.width})}const nextWidth=resolveContentAwareDrawerWidth(measurements,{endGap:resolvedNavigationItemSpacing.value+endBorderWidth});if(Math.abs(nextWidth-measuredDrawerWidth.value)>=.25)measuredDrawerWidth.value=nextWidth}function measureRenderedText(element){const range=document.createRange();range.selectNodeContents(element);const rect=range.getBoundingClientRect();range.detach?.();return rect}function handlePullPointerDown(event){if(!canStartPullRefresh(event)){activePull=null;return}activePull={pointerId:event.pointerId,touchIdentifier:null,startX:event.clientX,startY:event.clientY,pointerCancelled:false}}function handleDrawerVisibilityChange(open){if(isCompactLayout.value||drawerPresentation.value.closedMode===`hidden`||open===false)setDrawerOpen(open)}function handlePullPointerMove(event){if(!activePull||event.pointerId!==activePull.pointerId)return;updatePullGesture(event.clientX,event.clientY,event)}function handlePullPointerEnd(event){if(!activePull||event.pointerId!==activePull.pointerId)return;finishPullGesture()}function handlePullPointerCancel(event){if(!activePull||event.pointerId!==activePull.pointerId)return;activePull.pointerId=null;activePull.pointerCancelled=true}function handlePullTouchStart(event){if(activePull||!canStartTouchPullRefresh(event))return;const touch=event.touches?.[0]||null;if(!touch)return;activePull={pointerId:null,touchIdentifier:touch.identifier,startX:touch.clientX,startY:touch.clientY,pointerCancelled:false}}function handlePullTouchMove(event){const touch=findActiveTouch(event.touches);if(!activePull||!touch)return;updatePullGesture(touch.clientX,touch.clientY,event)}function handlePullTouchEnd(event){if(!activePull||!touchListIncludesActiveTouch(event.changedTouches))return;finishPullGesture()}function handlePullTouchCancel(event){if(activePull&&touchListIncludesActiveTouch(event.changedTouches))cancelPullRefresh()}function updatePullGesture(clientX,clientY,event){if(!activePull)return;const deltaX=clientX-activePull.startX;const deltaY=clientY-activePull.startY;const absX=Math.abs(deltaX);if(deltaY<-4||absX>24&&absX>deltaY*1.15){cancelPullRefresh();return}if(deltaY<=6||!isAtPageTop())return;if(event?.cancelable)event.preventDefault();pullDistance.value=Math.min(PULL_REFRESH_MAX_DISTANCE,Math.round(deltaY*.55))}function finishPullGesture(){const shouldRefresh=pullDistance.value>=PULL_REFRESH_TRIGGER_DISTANCE;activePull=null;if(!shouldRefresh){pullDistance.value=0;return}refreshFromPullGesture()}function cancelPullRefresh(){activePull=null;if(!pullRefreshing.value)pullDistance.value=0}async function refreshFromPullGesture(){if(!refreshRuntime||typeof refreshRuntime.refresh!==`function`||pullRefreshing.value){pullDistance.value=0;return}pullRefreshing.value=true;pullDistance.value=PULL_REFRESH_TRIGGER_DISTANCE;try{await refreshRuntime.refresh(`pull-to-refresh`)}finally{pullRefreshing.value=false;pullDistance.value=0}}function canStartPullRefresh(event){return Boolean(canStartPullRefreshFromTarget(event.target)&&isPrimaryTouchPointer(event))}function canStartTouchPullRefresh(event){return Boolean(event?.touches?.length===1&&canStartPullRefreshFromTarget(event.target))}function canStartPullRefreshFromTarget(target){return Boolean(isCompactLayout.value&&refreshRuntime&&typeof refreshRuntime.refresh===`function`&&!pullRefreshing.value&&isAtPageTop()&&!isPullRefreshIgnoredTarget(target))}function isPrimaryTouchPointer(event){return event?.isPrimary!==false&&event?.button===0&&event?.pointerType!==`mouse`}function isAtPageTop(){if(typeof window!==`object`||typeof document!==`object`)return false;const documentScrollTop=Number(document.documentElement?.scrollTop||0);const bodyScrollTop=Number(document.body?.scrollTop||0);return Math.max(Number(window.scrollY||0),documentScrollTop,bodyScrollTop)<=0}function isPullRefreshIgnoredTarget(target){return Boolean(target?.closest?.([`a`,`button`,`input`,`select`,`textarea`,`summary`,`[role='button']`,`[role='link']`,`[role='slider']`,`[contenteditable='true']`,`[data-shell-pull-refresh-ignore]`,`[data-shell-swipe-ignore]`].join(`,`)))}function findActiveTouch(touchList){if(!activePull||!touchList||touchList.length<1)return null;if(activePull.touchIdentifier===null&&touchList.length===1)return touchList[0];for(const touch of touchList)if(touch.identifier===activePull.touchIdentifier)return touch;return null}function touchListIncludesActiveTouch(touchList){if(!activePull)return false;if(activePull.touchIdentifier===null)return!touchList||touchList.length<=1;return Boolean(findActiveTouch(touchList))}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VAppBar,{border:``,density:isCompactLayout.value?`compact`:`comfortable`,elevation:`0`,class:`shell-layout__app-bar bg-surface`,"data-testid":`jskit-shell-app-bar`},{default:withCtx(()=>[createVNode(VAppBarNavIcon,{ref_key:`navigationToggle`,ref:navigationToggle,class:`shell-layout__nav-toggle`,"data-testid":`jskit-shell-nav-toggle`,"aria-label":drawerToggleLabel.value,"aria-expanded":unref(drawerOpen),"aria-controls":`jskit-shell-drawer`,onClick:unref(toggleDrawer)},null,8,[`aria-label`,`aria-expanded`,`onClick`]),renderSlot(_ctx.$slots,`top-left`,{surface:unref(resolvedSurface)},()=>[createBaseVNode(`div`,_hoisted_1$3,[createBaseVNode(`span`,_hoisted_2$1,toDisplayString(unref(resolvedSurfaceLabel)),1),createVNode(_sfc_main$12,{target:`shell-layout:top-left`})])],true),createVNode(VSpacer),renderSlot(_ctx.$slots,`top-right`,{surface:unref(resolvedSurface)},()=>[createBaseVNode(`div`,_hoisted_3$1,[createVNode(_sfc_main$12,{target:`shell-layout:top-right`})])],true)]),_:3},8,[`density`]),pullIndicatorVisible.value?(openBlock(),createElementBlock(`div`,{key:0,class:normalizeClass([`shell-layout__pull-refresh`,{"shell-layout__pull-refresh--refreshing":pullRefreshing.value}]),style:normalizeStyle(pullRefreshStyle.value),"data-testid":`jskit-shell-pull-refresh`,"aria-live":`polite`},[createVNode(VProgressCircular,{"model-value":pullProgress.value,indeterminate:pullRefreshing.value,color:`primary`,size:`22`,width:`3`},null,8,[`model-value`,`indeterminate`]),createBaseVNode(`span`,_hoisted_4,toDisplayString(pullRefreshLabel.value),1)],6)):createCommentVNode(``,true),createVNode(VNavigationDrawer,{ref_key:`navigationDrawer`,ref:navigationDrawer,id:`jskit-shell-drawer`,"model-value":drawerPresentation.value.visible,border:``,class:`shell-layout__drawer bg-surface`,"data-testid":`jskit-shell-drawer`,"data-layout":layoutClass.value,"data-presentation":drawerPresentation.value.kind,"data-drawer-width-mode":props.drawerWidth===null||props.drawerWidth===void 0?`content`:`fixed`,"data-drawer-width":resolvedDrawerWidth.value,"data-navigation-item-spacing":resolvedNavigationItemSpacing.value,"data-rail-width":resolvedRailWidth.value,style:normalizeStyle({"--shell-navigation-item-spacing":`${resolvedNavigationItemSpacing.value}px`,"--shell-navigation-rail-width":`${resolvedRailWidth.value}px`}),temporary:isCompactLayout.value,permanent:!isCompactLayout.value,width:resolvedDrawerWidth.value,rail:drawerPresentation.value.rail,"rail-width":resolvedRailWidth.value,"onUpdate:modelValue":handleDrawerVisibilityChange},{default:withCtx(()=>[renderSlot(_ctx.$slots,`menu`,{surface:unref(resolvedSurface),rail:drawerPresentation.value.rail},()=>[createVNode(VList,{nav:``,density:`comfortable`,class:`pt-2`,"prepend-gap":resolvedNavigationItemSpacing.value},{default:withCtx(()=>[createVNode(_sfc_main$12,{target:`shell-layout:primary-menu`,default:``}),createVNode(VDivider,{class:`my-2`}),createVNode(_sfc_main$12,{target:`shell-layout:secondary-menu`})]),_:1},8,[`prepend-gap`])],true)]),_:3},8,[`model-value`,`data-layout`,`data-presentation`,`data-drawer-width-mode`,`data-drawer-width`,`data-navigation-item-spacing`,`data-rail-width`,`style`,`temporary`,`permanent`,`width`,`rail`,`rail-width`]),createVNode(VMain,{class:`bg-background`},{default:withCtx(()=>[createVNode(VContainer,{fluid:``,class:`shell-layout__content`},{default:withCtx(()=>[__props.title?(openBlock(),createElementBlock(`h1`,_hoisted_5,toDisplayString(__props.title),1)):createCommentVNode(``,true),__props.subtitle?(openBlock(),createElementBlock(`p`,_hoisted_6,toDisplayString(__props.subtitle),1)):createCommentVNode(``,true),createVNode(ShellRouteTransition_default,null,{default:withCtx(()=>[renderSlot(_ctx.$slots,`default`,{},void 0,true)]),_:3})]),_:3})]),_:3}),isCompactLayout.value?(openBlock(),createBlock(VBottomNavigation,{key:1,class:`shell-layout__bottom-nav`,"data-testid":`jskit-shell-bottom-nav`,"bg-color":`surface`,color:`primary`,density:`comfortable`,grow:``,mandatory:``},{default:withCtx(()=>[createVNode(_sfc_main$12,{target:`shell-layout:primary-bottom-nav`})]),_:1})):createCommentVNode(``,true),isCompactLayout.value?(openBlock(),createBlock(VBottomSheet,{key:2,"model-value":unref(supportingContentOpen),"onUpdate:modelValue":unref(setSupportingContentOpen)},{default:withCtx(()=>[createVNode(VCard,{rounded:`t-xl`,class:`shell-layout__supporting-sheet`,"data-testid":`jskit-shell-supporting-bottom-sheet`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`shell-layout__supporting-title`},{default:withCtx(()=>[createBaseVNode(`span`,null,toDisplayString(unref(supportingContentTitle)||`Details`),1),createVNode(VBtn,{variant:`text`,onClick:unref(closeSupportingContent)},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(`Close`,-1)])]),_:1},8,[`onClick`])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createVNode(_sfc_main$12,{target:`shell-layout:supporting-bottom-sheet`})]),_:1})]),_:1})]),_:1},8,[`model-value`,`onUpdate:modelValue`])):createCommentVNode(``,true),!isCompactLayout.value?(openBlock(),createBlock(VNavigationDrawer,{key:3,"model-value":unref(supportingContentOpen),border:``,temporary:``,location:`right`,width:384,"data-testid":`jskit-shell-supporting-side-panel`,"onUpdate:modelValue":unref(setSupportingContentOpen)},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_7,[createBaseVNode(`div`,_hoisted_8,[createBaseVNode(`strong`,null,toDisplayString(unref(supportingContentTitle)||`Details`),1),createVNode(VBtn,{variant:`text`,onClick:unref(closeSupportingContent)},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(`Close`,-1)])]),_:1},8,[`onClick`])]),createVNode(_sfc_main$12,{target:`shell-layout:supporting-side-panel`})])]),_:1},8,[`model-value`,`onUpdate:modelValue`])):createCommentVNode(``,true)],64)}}};var ShellLayout_default=_plugin_vue_export_helper_default(_sfc_main$10,[[`__scopeId`,`data-v-d57fd366`]]);var _sfc_main$9={__name:`ShellOutletMenuWidget`,props:{target:{type:String,required:true},icon:{type:String,default:mdiCogOutline},ariaLabel:{type:String,default:`Tools`},location:{type:String,default:`bottom end`},offset:{type:[Number,String],default:10},minWidth:{type:[Number,String],default:220}},setup(__props){const props=__props;return(_ctx,_cache)=>{return openBlock(),createBlock(VMenu,{location:props.location,offset:props.offset,eager:``},{activator:withCtx(({props:activatorProps})=>[createVNode(VBtn,mergeProps(activatorProps,{icon:``,variant:`text`,"aria-label":props.ariaLabel}),{default:withCtx(()=>[createVNode(VIcon,{icon:props.icon},null,8,[`icon`])]),_:1},16,[`aria-label`])]),default:withCtx(()=>[createVNode(VList,{"min-width":props.minWidth,density:`comfortable`,class:`py-1`},{default:withCtx(()=>[createVNode(_sfc_main$12,{target:props.target},null,8,[`target`])]),_:1},8,[`min-width`])]),_:1},8,[`location`,`offset`])}}};var SURFACE_SWITCH_ICON_BY_ID=Object.freeze({home:mdiHomeVariantOutline,app:mdiViewDashboardOutline,admin:mdiShieldCrownOutline,console:mdiConsoleNetworkOutline});var SUPPORTED_EXPLICIT_MDI_ICON_BY_NAME=Object.freeze({"mdi-account-circle-outline":mdiAccountCircleOutline,"mdi-account-cog-outline":mdiAccountCogOutline,"mdi-account-group-outline":mdiAccountGroupOutline,"mdi-arrow-right-circle-outline":mdiArrowRightCircleOutline,"mdi-clipboard-list-outline":mdiClipboardListOutline,"mdi-cog-outline":mdiCogOutline,"mdi-console-network-outline":mdiConsoleNetworkOutline,"mdi-folder-outline":mdiFolderOutline,"mdi-home-variant-outline":mdiHomeVariantOutline,"mdi-login":mdiLogin,"mdi-logout":mdiLogout,"mdi-robot-outline":mdiRobotOutline,"mdi-shield-crown-outline":mdiShieldCrownOutline,"mdi-view-dashboard-outline":mdiViewDashboardOutline,"mdi-view-list-outline":mdiViewListOutline});function resolveExplicitIconValue(explicitIcon=``){const normalizedExplicitIcon=normalizeText$3(explicitIcon);if(!normalizedExplicitIcon)return``;if(!normalizedExplicitIcon.startsWith(`mdi-`))return normalizedExplicitIcon;const resolvedIcon=SUPPORTED_EXPLICIT_MDI_ICON_BY_NAME[normalizedExplicitIcon];return typeof resolvedIcon===`string`&&resolvedIcon?resolvedIcon:normalizedExplicitIcon}function normalizePathname(value=``){const normalizedValue=normalizeText$3(value);if(!normalizedValue)return``;if(isExternalLinkTarget(normalizedValue)){if(!(normalizedValue.startsWith(`http://`)||normalizedValue.startsWith(`https://`)))return``;let parsedPathname=``;try{parsedPathname=String(new URL(normalizedValue).pathname||``)}catch{return``}const normalizedPathname=normalizeText$3(parsedPathname);if(!normalizedPathname)return``;return normalizePathname$1(normalizedPathname).toLowerCase()}const{pathname}=splitPathQueryHash(normalizedValue);const normalizedPathname=normalizeText$3(pathname);if(!normalizedPathname)return``;return normalizePathname$1(normalizedPathname).toLowerCase()}function resolveSurfaceSwitchIdFromLabel(label=``){const normalizedLabel=normalizeText$3(label).toLowerCase();if(!normalizedLabel.startsWith(`go to `))return``;return normalizeText$3(normalizedLabel.slice(6))}function resolveSurfaceSwitchIcon(surfaceId=``,explicitIcon=``){const resolvedExplicitIcon=resolveExplicitIconValue(explicitIcon);if(resolvedExplicitIcon)return resolvedExplicitIcon;const normalizedSurfaceId=normalizeText$3(surfaceId).toLowerCase();return SURFACE_SWITCH_ICON_BY_ID[normalizedSurfaceId]||`M6,13V11H14L10.5,7.5L11.92,6.08L17.84,12L11.92,17.92L10.5,16.5L14,13H6M22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12M20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12Z`}function resolveMenuLinkIcon({icon=``,label=``,to=``}={}){const resolvedExplicitIcon=resolveExplicitIconValue(icon);if(resolvedExplicitIcon)return resolvedExplicitIcon;const normalizedLabel=normalizeText$3(label).toLowerCase();const normalizedPathname=normalizePathname(to);if(!normalizedLabel&&!normalizedPathname)return``;const surfaceSwitchSurfaceId=resolveSurfaceSwitchIdFromLabel(normalizedLabel);if(surfaceSwitchSurfaceId)return resolveSurfaceSwitchIcon(surfaceSwitchSurfaceId);if(normalizedLabel.includes(`sign in`)||normalizedPathname.includes(`/auth/login`))return mdiLogin;if(normalizedLabel.includes(`sign out`)||normalizedPathname.includes(`/auth/signout`))return mdiLogout;if(normalizedLabel.includes(`account`)||normalizedPathname.includes(`/account`)){if(normalizedLabel.includes(`settings`)||normalizedPathname.includes(`/settings`)||normalizedPathname===`/account`)return mdiAccountCogOutline;return mdiAccountCircleOutline}if(normalizedLabel.includes(`members`)||normalizedLabel.includes(`team`)||normalizedPathname.includes(`/members`))return mdiAccountGroupOutline;if(normalizedLabel.includes(`assistant`)||normalizedPathname.includes(`/assistant`))return mdiRobotOutline;if(normalizedLabel.includes(`console`)||normalizedPathname.startsWith(`/console`))return mdiConsoleNetworkOutline;if(normalizedLabel.includes(`admin`)||normalizedPathname.includes(`/admin`))return mdiShieldCrownOutline;if(normalizedLabel.includes(`settings`)||normalizedPathname.includes(`/settings`))return mdiCogOutline;if(normalizedLabel.includes(`home`)||normalizedPathname===`/`)return mdiHomeVariantOutline;if(normalizedLabel.includes(`workspace`)||normalizedLabel.includes(`dashboard`)||normalizedPathname.includes(`/w/`))return mdiViewDashboardOutline;if(normalizedPathname){if(normalizedPathname.split(`/`).filter(Boolean).length===1)return mdiFolderOutline}if(normalizedLabel.includes(`list`))return mdiClipboardListOutline;return mdiViewListOutline}function activateShellNavigationLinkOnSpace(event){if(event?.key!==` `||typeof event.currentTarget?.click!==`function`)return;event.preventDefault();event.stopPropagation();event.currentTarget.click()}var _sfc_main$8={__name:`ShellNavigationTooltip`,props:{label:{type:String,default:``}},setup(__props){const props=__props;const theme=useTheme();return(_ctx,_cache)=>{return openBlock(),createBlock(VTooltip,{text:props.label,theme:unref(theme).name.value,location:`end`,"content-class":`shell-navigation-tooltip`,"open-delay":400,"open-on-focus":true,"open-on-hover":true},{activator:withCtx(({props:activatorProps})=>[renderSlot(_ctx.$slots,`default`,{activatorProps})]),_:3},8,[`text`,`theme`])}}};var _sfc_main$7={__name:`ShellMenuLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false}},setup(__props){const props=__props;const{context:placementContext}=useWebPlacementContext();const resolvedTarget=computed(()=>{const target=String(props.to||``).trim();if(!target)return{href:``,sameOrigin:true};const navigationTarget=resolveSurfaceNavigationTargetFromPlacementContext(placementContext.value,{path:target});return{href:navigationTarget.href,sameOrigin:navigationTarget.sameOrigin}});const resolvedIcon=computed(()=>resolveMenuLinkIcon({icon:props.icon,label:props.label,to:resolvedTarget.value.href||props.to}));return(_ctx,_cache)=>{return resolvedTarget.value.href?(openBlock(),createBlock(_sfc_main$8,{key:0,label:props.label},{default:withCtx(({activatorProps})=>[createVNode(VListItem,mergeProps(activatorProps,{class:`shell-menu-link-item`,title:props.label,to:resolvedTarget.value.sameOrigin?resolvedTarget.value.href:void 0,href:resolvedTarget.value.sameOrigin?void 0:resolvedTarget.value.href,"prepend-icon":resolvedIcon.value||void 0,disabled:props.disabled,exact:props.exact,"aria-label":props.label,onKeydown:withKeys(unref(activateShellNavigationLinkOnSpace),[`space`])}),null,16,[`title`,`to`,`href`,`prepend-icon`,`disabled`,`exact`,`aria-label`,`onKeydown`])]),_:1},8,[`label`])):createCommentVNode(``,true)}}};var ShellMenuLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$7,[[`__scopeId`,`data-v-aa34cf36`]]);var _sfc_main$6={__name:`ShellSurfaceAwareMenuLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},surface:{type:String,default:``},scopedSuffix:{type:String,default:`/`},unscopedSuffix:{type:String,default:`/`},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false}},setup(__props){const props=__props;const route=useRoute();const{context:placementContext}=useWebPlacementContext();const currentSurfaceId=computed(()=>{return resolveSurfaceIdFromPlacementPathname(placementContext.value,String(route?.path||route?.fullPath||``).trim())});const resolvedTo=computed(()=>{return resolveMenuLinkTarget({to:props.to,surface:props.surface,currentSurfaceId:currentSurfaceId.value,placementContext:placementContext.value,scopedSuffix:props.scopedSuffix,unscopedSuffix:props.unscopedSuffix,routeParams:route.params||{},resolvePagePath(relativePath,options={}){return resolveShellLinkPath({context:placementContext.value,surface:options.surface,relativePath,params:route.params||{},strictParams:options.strictParams!==false})}})});const resolvedTarget=computed(()=>{const target=String(resolvedTo.value||``).trim();if(!target)return{href:``,sameOrigin:true};const navigationTarget=resolveSurfaceNavigationTargetFromPlacementContext(placementContext.value,{path:target});return{href:navigationTarget.href,sameOrigin:navigationTarget.sameOrigin}});const resolvedIcon=computed(()=>resolveMenuLinkIcon({icon:props.icon,label:props.label,to:resolvedTarget.value.href||resolvedTo.value}));return(_ctx,_cache)=>{return resolvedTarget.value.href?(openBlock(),createBlock(_sfc_main$8,{key:0,label:props.label},{default:withCtx(({activatorProps})=>[createVNode(VListItem,mergeProps(activatorProps,{class:`shell-menu-link-item`,title:props.label,to:resolvedTarget.value.sameOrigin?resolvedTarget.value.href:void 0,href:resolvedTarget.value.sameOrigin?void 0:resolvedTarget.value.href,"prepend-icon":resolvedIcon.value||void 0,disabled:props.disabled,exact:props.exact,"aria-label":props.label,onKeydown:withKeys(unref(activateShellNavigationLinkOnSpace),[`space`])}),null,16,[`title`,`to`,`href`,`prepend-icon`,`disabled`,`exact`,`aria-label`,`onKeydown`])]),_:1},8,[`label`])):createCommentVNode(``,true)}}};var ShellSurfaceAwareMenuLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$6,[[`__scopeId`,`data-v-8e70b4dd`]]);var _hoisted_1$2={class:`tab-link-item__label`};var _sfc_main$5={__name:`ShellTabLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},surface:{type:String,default:``},scopedSuffix:{type:String,default:`/`},unscopedSuffix:{type:String,default:`/`},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false}},setup(__props){const props=__props;const route=useRoute();const{context:placementContext}=useWebPlacementContext();const currentSurfaceId=computed(()=>{return resolveSurfaceIdFromPlacementPathname(placementContext.value,String(route?.path||route?.fullPath||``).trim())});const resolvedTo=computed(()=>{return resolveMenuLinkTarget({to:props.to,surface:props.surface,currentSurfaceId:currentSurfaceId.value,placementContext:placementContext.value,scopedSuffix:props.scopedSuffix,unscopedSuffix:props.unscopedSuffix,routeParams:route.params||{},resolvePagePath(relativePath,options={}){return resolveShellLinkPath({context:placementContext.value,surface:options.surface,relativePath,params:route.params||{},strictParams:options.strictParams!==false})}})});const resolvedTarget=computed(()=>{const target=String(resolvedTo.value||``).trim();if(!target)return{href:``,sameOrigin:true};const navigationTarget=resolveSurfaceNavigationTargetFromPlacementContext(placementContext.value,{path:target});return{href:navigationTarget.href,sameOrigin:navigationTarget.sameOrigin}});const resolvedIcon=computed(()=>resolveMenuLinkIcon({icon:props.icon,label:props.label,to:resolvedTarget.value.href||resolvedTo.value}));return(_ctx,_cache)=>{return resolvedTarget.value.href?(openBlock(),createBlock(VBtn,{key:0,class:`tab-link-item text-none`,to:resolvedTarget.value.sameOrigin?resolvedTarget.value.href:void 0,href:resolvedTarget.value.sameOrigin?void 0:resolvedTarget.value.href,disabled:props.disabled,exact:props.exact,"min-width":`72`,stacked:``},{default:withCtx(()=>[resolvedIcon.value?(openBlock(),createBlock(VIcon,{key:0,icon:resolvedIcon.value},null,8,[`icon`])):createCommentVNode(``,true),createBaseVNode(`span`,_hoisted_1$2,toDisplayString(props.label||`Tab`),1)]),_:1},8,[`to`,`href`,`disabled`,`exact`])):createCommentVNode(``,true)}}};var ShellTabLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$5,[[`__scopeId`,`data-v-1c3e59c0`]]);var client_exports$4=__exportAll({SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY:()=>SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY,SHELL_REQUEST_RECOVERY_RUNTIME_KEY:()=>SHELL_REQUEST_RECOVERY_RUNTIME_KEY,ShellErrorHost:()=>ShellErrorHost_default,ShellLayout:()=>ShellLayout_default,ShellMenuLinkItem:()=>ShellMenuLinkItem_default,ShellOutlet:()=>_sfc_main$12,ShellOutletMenuWidget:()=>_sfc_main$9,ShellRouteTransition:()=>ShellRouteTransition_default,ShellSurfaceAwareMenuLinkItem:()=>ShellSurfaceAwareMenuLinkItem_default,ShellTabLinkItem:()=>ShellTabLinkItem_default,ShellWebClientProvider:()=>ShellWebClientProvider,createBootstrapPayloadHandlerRegistry:()=>createBootstrapPayloadHandlerRegistry,isRecoverableRequestError:()=>isRecoverableRequestError,normalizeBootstrapPayloadHandler:()=>normalizeBootstrapPayloadHandler,requestRecoveryMessage:()=>requestRecoveryMessage,useShellAsyncModuleRecoveryRuntime:()=>useShellAsyncModuleRecoveryRuntime,useShellErrorPresentationStore:()=>useShellErrorPresentationStore,useShellLayoutState:()=>useShellLayoutState,useShellLayoutStore:()=>useShellLayoutStore,useShellRequestRecoveryRuntime:()=>useShellRequestRecoveryRuntime});var client_exports$3=__exportAll({});var _sfc_main$4={__name:`MenuLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false}},setup(__props){const props=__props;return(_ctx,_cache)=>{return openBlock(),createBlock(unref(ShellMenuLinkItem_default),normalizeProps(guardReactiveProps(props)),null,16)}}};var MenuLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$4,[[`__scopeId`,`data-v-8cffb0ff`]]);var _hoisted_1$1=[`data-vibe64-guide`];var _sfc_main$3={__name:`SurfaceAwareMenuLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},surface:{type:String,default:``},scopedSuffix:{type:String,default:`/`},unscopedSuffix:{type:String,default:`/`},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false},guideId:{type:String,default:``}},setup(__props){const props=__props;const linkProps=computed(()=>{const{guideId,...value}=props;return value});const incomingCount=inject$1(`vibe64.incoming.pendingCount`,null);const incomingLink=computed(()=>props.scopedSuffix.endsWith(`/dashboard/incoming`));return(_ctx,_cache)=>{return incomingLink.value?(openBlock(),createBlock(VBadge,{key:0,class:`incoming-menu-link`,"model-value":unref(incomingCount)>0,content:unref(incomingCount),max:`99`,inline:``},{default:withCtx(()=>[createVNode(unref(ShellSurfaceAwareMenuLinkItem_default),normalizeProps(guardReactiveProps(linkProps.value)),null,16)]),_:1},8,[`model-value`,`content`])):__props.guideId?(openBlock(),createElementBlock(`div`,{key:1,class:`surface-aware-menu-link-guide`,"data-vibe64-guide":__props.guideId},[createVNode(unref(ShellSurfaceAwareMenuLinkItem_default),normalizeProps(guardReactiveProps(linkProps.value)),null,16)],8,_hoisted_1$1)):(openBlock(),createBlock(unref(ShellSurfaceAwareMenuLinkItem_default),normalizeProps(mergeProps({key:2},linkProps.value)),null,16))}}};var SurfaceAwareMenuLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$3,[[`__scopeId`,`data-v-3bac1736`]]);var _sfc_main$2={__name:`TabLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},surface:{type:String,default:``},scopedSuffix:{type:String,default:`/`},unscopedSuffix:{type:String,default:`/`},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false}},setup(__props){const props=__props;return(_ctx,_cache)=>{return openBlock(),createBlock(unref(ShellTabLinkItem_default),normalizeProps(guardReactiveProps(props)),null,16)}}};var TabLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-49a92b2f`]]);var _sfc_main$1={__name:`TopActionLinkItem`,props:{disabled:{default:false,type:Boolean},exact:{default:false,type:Boolean},icon:{default:``,type:String},label:{default:``,type:String},returnToCurrent:{default:false,type:Boolean},to:{default:``,type:String}},setup(__props){const props=__props;const route=useRoute();const resolvedIcon=computed(()=>mdiLinkVariant);const active=computed(()=>{const target=String(props.to||``).trim();const path=String(route.path||``).trim();if(!target||!path)return false;return props.exact?path===target:path===target||path.startsWith(`${target}/`)});const resolvedTo=computed(()=>{const target=String(props.to||``).trim();if(!target||!props.returnToCurrent||active.value)return target;return{path:target,query:{returnTo:route.fullPath||route.path||`/app`}}});return(_ctx,_cache)=>{return props.to?(openBlock(),createBlock(VBtn,{key:0,class:normalizeClass([`top-action-link-item text-none`,{"top-action-link-item--active":active.value}]),disabled:props.disabled,"prepend-icon":resolvedIcon.value||void 0,to:resolvedTo.value,variant:`tonal`,color:`primary`,density:`comfortable`},{default:withCtx(()=>[createTextVNode(toDisplayString(props.label||`Open`),1)]),_:1},8,[`class`,`disabled`,`prepend-icon`,`to`])):createCommentVNode(``,true)}}};var TopActionLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-3900100a`]]);var VIBE64_ACTIVE_SESSION_NAV_KEY=Symbol(`vibe64.activeSessionNav`);var _hoisted_1={key:0,class:`vibe64-active-session-nav-item vibe64-active-session-nav-item--heading`,"aria-label":`Active session navigation`};var _hoisted_2=[`title`];var _hoisted_3={class:`vibe64-active-session-nav-item__label`};var _sfc_main={__name:`Vibe64ActiveSessionNavItem`,props:{disabled:{default:false,type:Boolean},icon:{default:``,type:String},guideId:{default:``,type:String},label:{default:``,type:String},role:{default:``,type:String},title:{default:``,type:String},to:{default:``,type:String},toolId:{default:``,type:String}},setup(__props){const props=__props;const injectedSessionNav=inject$1(VIBE64_ACTIVE_SESSION_NAV_KEY,null);const sessionNav=computed(()=>{const value=unref(injectedSessionNav);return value&&typeof value===`object`?value:{}});const tools=computed(()=>Array.isArray(sessionNav.value.tools)?sessionNav.value.tools:[]);const tool=computed(()=>{const toolId=String(props.toolId||``).trim();return tools.value.find(candidate=>String(candidate?.id||``)===toolId)||{}});const navVisible=computed(()=>Boolean(sessionNav.value.visible!==false&&sessionNav.value.label));const headerVisible=computed(()=>Boolean(navVisible.value&&props.role===`heading`));const itemVisible=computed(()=>Boolean(navVisible.value&&props.role!==`heading`&&props.toolId));const itemLabel=computed(()=>String(tool.value.label||props.label||``));const itemIcon=computed(()=>String(tool.value.icon||props.icon||``));const itemTitle=computed(()=>String(tool.value.title||props.title||``));const itemTo=computed(()=>String(tool.value.to||props.to||``).trim());const itemDisabled=computed(()=>Boolean(props.disabled||tool.value.disabled));const itemDisabledReason=computed(()=>String(tool.value.disabledReason||itemTitle.value||``));const statusClass=computed(()=>`vibe64-active-session-nav-item__status--${String(sessionNav.value.status||`unknown`).trim()||`unknown`}`);function selectTool(){if(itemDisabled.value||typeof sessionNav.value.selectTool!==`function`)return;if(itemTo.value)return;sessionNav.value.selectTool(String(props.toolId||``))}return(_ctx,_cache)=>{return headerVisible.value?(openBlock(),createElementBlock(`div`,_hoisted_1,[createVNode(VDivider,{class:`vibe64-active-session-nav-item__divider`}),_cache[0]||(_cache[0]=createBaseVNode(`span`,{class:`vibe64-dashboard-nav-group-label`},`Session`,-1)),createBaseVNode(`div`,{class:`vibe64-active-session-nav-item__heading`,title:sessionNav.value.label},[createBaseVNode(`span`,{class:normalizeClass([`vibe64-active-session-nav-item__status`,statusClass.value])},null,2),createBaseVNode(`span`,_hoisted_3,toDisplayString(sessionNav.value.label),1)],8,_hoisted_2)])):itemVisible.value?(openBlock(),createBlock(VListItem,{key:1,class:`vibe64-active-session-nav-item`,active:tool.value.active,disabled:itemDisabled.value,"prepend-icon":itemIcon.value,title:itemLabel.value,"data-vibe64-guide":props.guideId||void 0,subtitle:itemDisabled.value?itemDisabledReason.value:``,to:itemTo.value||void 0,onClick:selectTool},null,8,[`active`,`disabled`,`prepend-icon`,`title`,`data-vibe64-guide`,`subtitle`,`to`])):createCommentVNode(``,true)}}};var Vibe64ActiveSessionNavItem_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-e4e39c7a`]]);function isVibe64LiveQuery(query={}){return(Array.isArray(query?.queryKey)?query.queryKey:[])[0]===`vibe64`}function invalidateVibe64LiveQueries(queryClient){if(!queryClient||typeof queryClient.invalidateQueries!==`function`)return null;return queryClient.invalidateQueries({predicate:isVibe64LiveQuery,refetchType:`active`})}function attachVibe64RealtimeQueryRecovery({queryClient,realtime}={}){const socket=realtime?.socket;if(!socket||typeof socket.on!==`function`)throw new TypeError(`Vibe64 realtime query recovery requires a realtime socket.`);const recoverQueries=()=>invalidateVibe64LiveQueries(queryClient);socket.on(`connect`,recoverQueries);return()=>socket.off?.(`connect`,recoverQueries)}var detachQueryRecoveryByRealtime=new WeakMap;var MainClientProvider=defineProvider({id:`local.main.client`,requires:{components:`client.components`,queryClient:`client.query`,realtime:`client.realtime`},setup({components,queryClient,realtime}){components.register(`local.main.ui.menu-link-item`,MenuLinkItem_default);components.register(`local.main.ui.surface-aware-menu-link-item`,SurfaceAwareMenuLinkItem_default);components.register(`local.main.ui.tab-link-item`,TabLinkItem_default);components.register(`local.main.ui.top-action-link-item`,TopActionLinkItem_default);components.register(`local.main.vibe64.active-session-nav-item`,Vibe64ActiveSessionNavItem_default);detachQueryRecoveryByRealtime.set(realtime,attachVibe64RealtimeQueryRecovery({queryClient,realtime}))},shutdown({realtime}){detachQueryRecoveryByRealtime.get(realtime)?.();detachQueryRecoveryByRealtime.delete(realtime)}});var client_exports$2=__exportAll({MainClientProvider:()=>MainClientProvider});var client_exports$1=__exportAll({loadVibe64DatabaseWorkspace:()=>loadVibe64DatabaseWorkspace,useVibe64DatabaseTools:()=>useVibe64DatabaseTools});async function loadVibe64DatabaseWorkspace(){return(await __vitePreload(()=>import(`./Vibe64DatabaseWorkspace-Ca8IHSRq.js`),__vite__mapDeps([155,6,1,7,2,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,8,19,9,10,50,51,52,53,54,55,35,36,37,38,39,40,103,104,11,12,60,61,83,84,13,85,86,87,67,74,70,44,42,43,45,156,41,48,49,56,57,58,59,62,63,14,22,64,65,66,68,69,71,72,73,75,76,77,91,157,158]))).default}var client_exports=__exportAll({loadVibe64ArchitectureView:()=>loadVibe64ArchitectureView,useVibe64SystemGraph:()=>useVibe64SystemGraph});async function loadVibe64ArchitectureView(){return(await __vitePreload(async()=>{const{default:__vite_default__}=await import(`./Vibe64UiStoryboardView-BhKRpL0N.js`);return{default:__vite_default__}},__vite__mapDeps([159,6,1,7,24,25,15,16,26,27,28,29,30,31,32,19,9,10,50,51,35,36,37,38,13,89,42,43,44,45,72,2,49,71,73,90,157,160]))).default}function normalizeComponentId(value){const id=String(value||``).trim();if(!id)throw new TypeError(`Client component id is required.`);return id}function createClientComponentRegistry(){const components=new Map;function register(id,component){const componentId=normalizeComponentId(id);if(component==null)throw new TypeError(`Client component "${componentId}" is required.`);if(components.has(componentId))throw new Error(`Client component "${componentId}" is duplicated.`);components.set(componentId,component);return api}function has(id){return components.has(normalizeComponentId(id))}function get(id){const componentId=normalizeComponentId(id);if(!components.has(componentId))throw new Error(`Client component "${componentId}" is not registered.`);return components.get(componentId)}function ids(){return Object.freeze([...components.keys()].sort())}const api=Object.freeze({register,has,get,ids});return api}function normalizePackageMetadataUiRoutes(value){const routeEntries=Array.isArray(value)?value:[];const normalizedRoutes=[];for(const routeEntry of routeEntries){if(!isRecord$2(routeEntry))continue;try{normalizedRoutes.push(Object.freeze(JSON.parse(JSON.stringify(routeEntry))))}catch{}}return Object.freeze(normalizedRoutes)}function normalizePackageMetadataClientProviders(value){const entries=Array.isArray(value)?value:[];const providers=[];for(const entry of entries){if(!isRecord$2(entry))continue;const exportName=String(entry.export||``).trim();if(!exportName)continue;providers.push(Object.freeze({export:exportName,entrypoint:String(entry.entrypoint||``).trim()}))}return Object.freeze(providers)}function normalizePackageId(value){return String(value||``).trim()}function toRouteSnapshot(route){const metaJskit=isRecord$2(route?.meta?.jskit)?route.meta.jskit:{};return Object.freeze({id:String(route?.id||``).trim(),name:String(route?.name||``).trim(),path:String(route?.path||``).trim(),scope:String(route?.scope||``).trim(),surface:String(route?.surface||``).trim(),metaScope:String(metaJskit.scope||``).trim(),metaSurface:String(metaJskit.surface||``).trim()})}function isRouteComponent(value){if(typeof value===`function`)return true;return Boolean(value&&typeof value===`object`&&!Array.isArray(value))}function normalizeRoute(route,{packageId,index}){if(!isRecord$2(route))throw new TypeError(`Client route #${index} from ${packageId} must be an object.`);const id=String(route.id||``).trim();const path=String(route.path||``).trim();if(!id)throw new Error(`Client route #${index} from ${packageId} requires id.`);if(!path||!path.startsWith(`/`)||path.startsWith(`//`))throw new Error(`Client route "${id}" from ${packageId} must use an absolute path.`);if(!isRouteComponent(route.component))throw new Error(`Client route "${id}" from ${packageId} requires component.`);const scope=String(route.scope||`surface`).trim().toLowerCase();if(scope!==`global`&&scope!==`surface`)throw new Error(`Client route "${id}" from ${packageId} has invalid scope "${scope}".`);const surface=String(route.surface||``).trim().toLowerCase();const baseMeta=isRecord$2(route.meta)?route.meta:{};const baseMetaJskit=isRecord$2(baseMeta.jskit)?baseMeta.jskit:{};return Object.freeze({...route,id,path,scope,...surface?{surface}:{},meta:{...baseMeta,jskit:{...baseMetaJskit,packageId,routeId:id,scope,...surface?{surface}:{}}}})}function normalizeRouteList(routes,{packageId}){return Object.freeze((Array.isArray(routes)?routes:[]).map((route,index)=>normalizeRoute(route,{packageId,index:index+1})))}function toVueRouteRecord(route){const nextMeta=isRecord$2(route.meta)?{...route.meta}:void 0;const routeRecord={path:route.path,component:route.component,...route.name?{name:route.name}:{},...route.props!==void 0?{props:route.props}:{},...route.redirect!==void 0?{redirect:route.redirect}:{},...route.children!==void 0?{children:route.children}:{},...nextMeta?{meta:nextMeta}:{}};return Object.freeze(routeRecord)}function registerClientModuleRoutes({packageId,routes=[],router,surfaceRuntime,surfaceMode,seenRoutePaths,seenRouteNames,logger=null,source=`module`,packageMetadataRouteDeclarations=null}={}){const normalizedPackageId=normalizePackageId(packageId);if(!normalizedPackageId)throw new TypeError(`registerClientModuleRoutes requires packageId.`);if(!router||typeof router.addRoute!==`function`)throw new TypeError(`registerClientModuleRoutes requires router.addRoute().`);if(!surfaceRuntime||typeof surfaceRuntime!==`object`)throw new TypeError(`registerClientModuleRoutes requires surfaceRuntime.`);const normalizedRoutes=normalizeRouteList(routes,{packageId:normalizedPackageId});assertRoutesDeclaredInPackageMetadata({packageId:normalizedPackageId,source,normalizedRoutes,packageMetadataRouteDeclarations});const activeRoutes=filterRoutesBySurface(normalizedRoutes,{surfaceRuntime,surfaceMode});const log=createStructuredLogger(logger);log.debug({packageId:normalizedPackageId,source,surfaceMode:String(surfaceMode||``).trim(),declaredRoutes:normalizedRoutes.map(toRouteSnapshot),activeRoutes:activeRoutes.map(toRouteSnapshot)},`Client route registration analysis.`);const declaredPaths=normalizedRoutes.map(route=>route.path);const activePaths=activeRoutes.map(route=>route.path);let registeredCount=0;for(const route of activeRoutes){const normalizedPath=String(route.path||``).trim();if(seenRoutePaths.has(normalizedPath))throw new Error(`Client route path "${normalizedPath}" is duplicated (package ${normalizedPackageId}).`);const normalizedName=String(route.name||``).trim();if(normalizedName){if(seenRouteNames.has(normalizedName))throw new Error(`Client route name "${normalizedName}" is duplicated (package ${normalizedPackageId}).`);seenRouteNames.add(normalizedName)}seenRoutePaths.add(normalizedPath);router.addRoute(toVueRouteRecord(route));log.debug({packageId:normalizedPackageId,source,route:toRouteSnapshot(route)},`Added client route to router.`);registeredCount+=1}return Object.freeze({packageId:normalizedPackageId,source,declaredCount:normalizedRoutes.length,registeredCount,declaredPaths:Object.freeze(declaredPaths),activePaths:Object.freeze(activePaths)})}function resolvePackageMetadataProviders(moduleNamespace,packageId,packageMetadataClientProviders=[]){const providers=[];const seenProviderIds=new Set;for(const providerDeclaration of packageMetadataClientProviders){const exportName=String(providerDeclaration?.export||``).trim();if(!exportName)continue;const providerValue=moduleNamespace?.[exportName];let provider=null;try{provider=defineProvider(providerValue)}catch(error){throw new TypeError(`Client module ${packageId} packageMetadata provider export "${exportName}" must be a capability provider: ${error.message}`,{cause:error})}const providerId=provider.id;if(seenProviderIds.has(providerId))continue;seenProviderIds.add(providerId);providers.push(provider)}return providers}function resolveModuleProviders(moduleNamespace,packageId,packageMetadataClientProviders=[]){if(!isRecord$2(moduleNamespace))return[];return resolvePackageMetadataProviders(moduleNamespace,packageId,packageMetadataClientProviders)}function buildPackageMetadataRouteDeclarationIndex({packageId,packageMetadataUiRoutes=[]}={}){const normalizedPackageId=normalizePackageId(packageId);const packageMetadataRoutes=normalizePackageMetadataUiRoutes(packageMetadataUiRoutes);const byId=new Map;for(const packageMetadataRoute of packageMetadataRoutes){const routeId=String(packageMetadataRoute.id||``).trim();const routePath=String(packageMetadataRoute.path||``).trim();const routeScope=String(packageMetadataRoute.scope||`surface`).trim().toLowerCase();if(!routeId||!routePath)continue;if(byId.has(routeId)){const existingRoute=byId.get(routeId);if(existingRoute.path!==routePath||existingRoute.scope!==routeScope)throw new Error(`PackageMetadata ui routes for ${normalizedPackageId} define duplicate id "${routeId}" with conflicting declarations.`);continue}byId.set(routeId,Object.freeze({id:routeId,path:routePath,scope:routeScope}))}return Object.freeze({byId})}function assertRoutesDeclaredInPackageMetadata({packageId,source,normalizedRoutes=[],packageMetadataRouteDeclarations=null}={}){if(String(source||``).trim()!==`clientRoutes`)return;const byId=packageMetadataRouteDeclarations?.byId instanceof Map?packageMetadataRouteDeclarations.byId:new Map;const normalizedPackageId=normalizePackageId(packageId);for(const route of normalizedRoutes){const routeId=String(route?.id||``).trim();const routePath=String(route?.path||``).trim();if(String(route?.scope||`surface`).trim().toLowerCase()!==`global`)continue;const declaredRoute=byId.get(routeId);if(!declaredRoute)throw new Error(`Global client route "${routeId}" from ${normalizedPackageId} (${source}) must be declared in metadata.ui.routes (id "${routeId}", path "${routePath}") with scope:"global" and autoRegister:false.`);if(String(declaredRoute.path||``).trim()!==routePath)throw new Error(`Global client route "${routeId}" from ${normalizedPackageId} (${source}) path "${routePath}" does not match packageMetadata metadata.ui.routes path "${declaredRoute.path}".`);if(String(declaredRoute.scope||``).trim().toLowerCase()!==`global`)throw new Error(`Global client route "${routeId}" from ${normalizedPackageId} (${source}) must be declared with scope:"global" in metadata.ui.routes.`)}}function resolvePackageMetadataClientRoutes({packageId,packageMetadataUiRoutes=[],routeComponents={},logger=null}={}){const normalizedPackageId=normalizePackageId(packageId);const packageMetadataRoutes=normalizePackageMetadataUiRoutes(packageMetadataUiRoutes);if(packageMetadataRoutes.length<1)return Object.freeze([]);if(!isRecord$2(routeComponents))throw new TypeError(`Client module ${normalizedPackageId} declares packageMetadata ui routes but does not export a routeComponents map.`);const log=createStructuredLogger(logger);const routes=[];const skippedRoutes=[];for(const packageMetadataRoute of packageMetadataRoutes){const routeId=String(packageMetadataRoute.id||``).trim();const routePath=String(packageMetadataRoute.path||``).trim();if(!(packageMetadataRoute.autoRegister!==false)){skippedRoutes.push(Object.freeze({id:routeId,path:routePath,reason:`autoRegister=false`}));continue}if(!routeId||!routePath)throw new Error(`PackageMetadata ui route from ${normalizedPackageId} requires id and path when autoRegister is enabled.`);const componentKey=String(packageMetadataRoute.componentKey||``).trim();if(!componentKey)throw new Error(`PackageMetadata ui route "${routeId}" from ${normalizedPackageId} requires componentKey when autoRegister is enabled.`);const routeComponent=routeComponents[componentKey];if(!isRouteComponent(routeComponent))throw new Error(`PackageMetadata ui route "${routeId}" from ${normalizedPackageId} references unknown routeComponents key "${componentKey}".`);const scope=String(packageMetadataRoute.scope||`surface`).trim().toLowerCase();const surface=String(packageMetadataRoute.surface||``).trim().toLowerCase();const guard=isRecord$2(packageMetadataRoute.guard)?{...packageMetadataRoute.guard}:{};const baseMeta=isRecord$2(packageMetadataRoute.meta)?{...packageMetadataRoute.meta}:{};const baseMetaJskit=isRecord$2(baseMeta.jskit)?{...baseMeta.jskit}:{};routes.push(Object.freeze({id:routeId,path:routePath,scope,...surface?{surface}:{},...String(packageMetadataRoute.name||``).trim()?{name:String(packageMetadataRoute.name||``).trim()}:{},component:routeComponent,meta:{...baseMeta,...Object.keys(guard).length>0?{guard}:{},jskit:{...baseMetaJskit,packageId:normalizedPackageId,routeId,scope,componentKey,source:`packageMetadata.ui.routes`,...surface?{surface}:{}}}}))}log.debug({packageId:normalizedPackageId,packageMetadataRouteCount:packageMetadataRoutes.length,autoRegisterRouteCount:routes.length,skippedRoutes},`Processed packageMetadata ui routes.`);return Object.freeze(routes)}function normalizeClientModuleEntries(clientModules){if(!Array.isArray(clientModules))return[];return clientModules.map(entry=>{const packageId=normalizePackageId(entry?.packageId);const moduleNamespace=isRecord$2(entry?.module)?entry.module:null;if(!packageId||!moduleNamespace)return null;return Object.freeze({packageId,module:moduleNamespace,packageMetadataUiRoutes:normalizePackageMetadataUiRoutes(entry?.packageMetadataUiRoutes),packageMetadataClientProviders:normalizePackageMetadataClientProviders(entry?.packageMetadataClientProviders)})}).filter(Boolean).sort((left,right)=>left.packageId.localeCompare(right.packageId))}function createClientRuntime({profile=`client`,providers=[],app,pinia=null,queryClient=null,router,env,logger,surfaceRuntime,surfaceMode}={}){const components=createClientComponentRegistry();const runtime=createCapabilityRuntime({profile,providers,inputs:{"client.vue":app||null,"client.router":router||null,"client.pinia":pinia,"client.query":queryClient,"client.env":Object.freeze({...isRecord$2(env)?env:{}}),"client.surface":surfaceRuntime||null,"client.surface-mode":String(surfaceMode||``).trim(),"client.logger":logger,"client.components":components}});return Object.freeze({runtime,components})}async function bootClientModules({clientModules=[],app,pinia=null,queryClient=null,router,surfaceRuntime,surfaceMode,env,logger=console}={}){if(!router||typeof router.addRoute!==`function`)throw new TypeError(`bootClientModules requires router.addRoute().`);if(!surfaceRuntime||typeof surfaceRuntime.normalizeSurfaceMode!==`function`)throw new TypeError(`bootClientModules requires surfaceRuntime.normalizeSurfaceMode().`);const log=createStructuredLogger(logger);const moduleEntries=normalizeClientModuleEntries(clientModules);const providers=[];const seenProviderIds=new Set;log.debug({surfaceMode:String(surfaceMode||``).trim(),normalizedSurfaceMode:String(surfaceRuntime.normalizeSurfaceMode(surfaceMode)||``).trim(),moduleCount:moduleEntries.length,modules:moduleEntries.map(entry=>entry.packageId)},`Starting JSKIT client module bootstrap.`);for(const entry of moduleEntries){const moduleProviders=resolveModuleProviders(entry.module,entry.packageId,entry.packageMetadataClientProviders);log.debug({packageId:entry.packageId,providerExports:moduleProviders.map(provider=>provider.id),hasClientRoutes:Array.isArray(entry.module.clientRoutes)&&entry.module.clientRoutes.length>0},`Discovered client module capabilities.`);for(const provider of moduleProviders){const providerId=provider.id;if(seenProviderIds.has(providerId))throw new Error(`Client provider id "${providerId}" is duplicated.`);seenProviderIds.add(providerId);providers.push(provider)}}const clientRuntime=createClientRuntime({profile:String(surfaceRuntime.normalizeSurfaceMode(surfaceMode)||`client`),providers,app,pinia,queryClient,router,env,logger:log,surfaceRuntime,surfaceMode});await clientRuntime.runtime.start();const seenRoutePaths=new Set;const seenRouteNames=new Set;const routeResults=[];const registerRoutesForEntry=(routeList,packageId,source=`module`,packageMetadataRouteDeclarations=null)=>{if(!routeList||routeList.length===0)return null;const result=registerClientModuleRoutes({packageId,routes:routeList,router,surfaceRuntime,surfaceMode,seenRoutePaths,seenRouteNames,logger:log,source,packageMetadataRouteDeclarations});log.debug({packageId,source,declaredPaths:result.declaredPaths,activePaths:result.activePaths,registeredCount:result.registeredCount},`Registered client module routes.`);log.debug({packageId,source,routerRoutes:summarizeRouterRoutes(router)},`Router route table after client route registration.`);routeResults.push(result);return result};for(const entry of moduleEntries){const packageMetadataRouteDeclarations=buildPackageMetadataRouteDeclarationIndex({packageId:entry.packageId,packageMetadataUiRoutes:entry.packageMetadataUiRoutes});registerRoutesForEntry(resolvePackageMetadataClientRoutes({packageId:entry.packageId,packageMetadataUiRoutes:entry.packageMetadataUiRoutes,routeComponents:entry.module.routeComponents,logger:log}),entry.packageId,`packageMetadata.ui.routes`,packageMetadataRouteDeclarations);registerRoutesForEntry(Array.isArray(entry.module.clientRoutes)?entry.module.clientRoutes:[],entry.packageId,`clientRoutes`,packageMetadataRouteDeclarations)}const registeredRouteCount=routeResults.reduce((sum,result)=>sum+result.registeredCount,0);if(moduleEntries.length>0){log.debug({modules:moduleEntries.map(entry=>entry.packageId),providerCount:providers.length,routeCount:registeredRouteCount},`Booted JSKIT client modules.`);log.debug({routerRoutes:summarizeRouterRoutes(router),currentPath:typeof window!==`undefined`?String(window.location?.pathname||``):``},`JSKIT client bootstrap final route table.`)}return Object.freeze({runtime:clientRuntime.runtime,components:clientRuntime.components,modules:Object.freeze(moduleEntries.map(entry=>entry.packageId)),providerCount:providers.length,routeResults:Object.freeze(routeResults),routeCount:registeredRouteCount})}var installedClientModules=Object.freeze([{packageId:`@jskit-ai/assistant-core`,module:client_exports$9,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@jskit-ai/assistant-runtime`,module:client_exports$8,packageMetadataUiRoutes:[],packageMetadataClientProviders:[{"export":`AssistantClientProvider`,"entrypoint":`src/client/providers/AssistantClientProvider.js`}]},{packageId:`@jskit-ai/assistant-voice`,module:client_exports$11,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@jskit-ai/connectors-web`,module:client_exports$6,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@jskit-ai/http-runtime`,module:client_exports$12,packageMetadataUiRoutes:[],packageMetadataClientProviders:[{"export":`HttpValidatorsClientProvider`,"entrypoint":`src/client/providers/HttpValidatorsClientProvider.js`},{"export":`HttpClientRuntimeClientProvider`,"entrypoint":`src/client/providers/HttpClientRuntimeClientProvider.js`}]},{packageId:`@jskit-ai/http-web`,module:client_exports$5,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@jskit-ai/realtime`,module:RealtimeClientProvider_exports,packageMetadataUiRoutes:[],packageMetadataClientProviders:[{"export":`RealtimeClientProvider`,"entrypoint":`src/client/RealtimeClientProvider.js`}]},{packageId:`@jskit-ai/shell-web`,module:client_exports$4,packageMetadataUiRoutes:[],packageMetadataClientProviders:[{"export":`ShellWebClientProvider`,"entrypoint":`src/client/providers/ShellWebClientProvider.js`}]},{packageId:`@jskit-ai/uploads-runtime`,module:client_exports$3,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@local/main`,module:client_exports$2,packageMetadataUiRoutes:[],packageMetadataClientProviders:[{"export":`MainClientProvider`,"entrypoint":`src/client/providers/MainClientProvider.js`}]},{packageId:`@local/vibe64-accounts`,module:client_exports$13,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@local/vibe64-colleague`,module:client_exports$7,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@local/vibe64-database-tools`,module:client_exports$1,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@local/vibe64-system-graph`,module:client_exports,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@local/vibe64-voice`,module:client_exports$10,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]}]);async function bootInstalledClientModules(context={}){return bootClientModules({...context,clientModules:installedClientModules})}var surfaceAccessPolicies={};surfaceAccessPolicies.public={};var config={};config.tenancyMode=`none`;config.realtimeClient={options:{transports:[`websocket`]}};config.surfaceModeAll=`all`;config.surfaceDefaultId=`app`;config.webRootAllowed=`yes`;config.surfaceAccessPolicies=surfaceAccessPolicies;config.mobile={enabled:false,strategy:``,appId:``,appName:``,assetMode:`bundled`,devServerUrl:``,apiBaseUrl:``,auth:{callbackPath:`/auth/login`,customScheme:``,appLinkDomains:[]},android:{packageName:``,minSdk:26,targetSdk:35,versionCode:1,versionName:`1.0.0`}};config.surfaceDefinitions={};config.surfaceDefinitions.app={id:`app`,label:`Sessions`,pagesRoot:`app`,enabled:true,requiresAuth:false,requiresWorkspace:false,accessPolicyId:`public`,origin:``};config.assistantSurfaces={app:{settingsSurfaceId:`app`,configScope:`global`}};var BROWSER_LIFECYCLE_WEBSOCKET_PATH=`/api/studio/browser-lifecycle/ws`;var BROWSER_LIFECYCLE_DISCONNECTED_EVENT=`vibe64:browser-lifecycle-disconnected`;function noopLifecycleConnection(){return{close(){}}}function createBrowserLifecycleDisconnectedEvent(browserWindow,detail={}){const CustomEventCtor=browserWindow?.CustomEvent||globalThis.CustomEvent;if(typeof CustomEventCtor===`function`)return new CustomEventCtor(BROWSER_LIFECYCLE_DISCONNECTED_EVENT,{detail});const EventCtor=browserWindow?.Event||globalThis.Event;if(typeof EventCtor===`function`){const event=new EventCtor(BROWSER_LIFECYCLE_DISCONNECTED_EVENT);event.detail=detail;return event}return{detail,type:BROWSER_LIFECYCLE_DISCONNECTED_EVENT}}function connectBrowserLifecycleSocket({browserWindow=typeof window!==`undefined`?window:null,WebSocketCtor=typeof WebSocket!==`undefined`?WebSocket:null}={}){if(!browserWindow||typeof WebSocketCtor!==`function`)return noopLifecycleConnection();let socket=null;let connected=false;let closeBrowserOnDisconnect=false;let pageUnloading=false;let stopped=false;const markPageUnloading=()=>{pageUnloading=true};const removeUnloadListeners=()=>{browserWindow.removeEventListener?.(`beforeunload`,markPageUnloading);browserWindow.removeEventListener?.(`pagehide`,markPageUnloading)};const closeWindowIfServerDisconnected=()=>{removeUnloadListeners();if(connected&&!stopped&&!pageUnloading)browserWindow.dispatchEvent?.(createBrowserLifecycleDisconnectedEvent(browserWindow,{closeBrowserOnDisconnect}));if(connected&&closeBrowserOnDisconnect&&!stopped&&!pageUnloading)browserWindow.close?.()};const receiveLifecycleState=event=>{try{const message=JSON.parse(String(event?.data||``));if(message?.type===`browser-lifecycle-state`)closeBrowserOnDisconnect=message.closeBrowserOnDisconnect===true}catch{}};browserWindow.addEventListener?.(`beforeunload`,markPageUnloading);browserWindow.addEventListener?.(`pagehide`,markPageUnloading);try{socket=new WebSocketCtor(resolveWebSocketUrl$1(BROWSER_LIFECYCLE_WEBSOCKET_PATH,browserWindow))}catch{removeUnloadListeners();return noopLifecycleConnection()}socket.addEventListener?.(`open`,()=>{connected=true});socket.addEventListener?.(`message`,receiveLifecycleState);socket.addEventListener?.(`close`,closeWindowIfServerDisconnected);return{close(){stopped=true;removeUnloadListeners();socket?.close?.()}}}function bootBrowserLifecycle(options={}){return connectBrowserLifecycleSocket(options)}var APPEARANCE_STORAGE_KEY=`vibe64.appearance`;var APPEARANCE_CHOICES=Object.freeze([`light`,`dark`,`system`]);function readAppearance(){const value=readLocalStorageJson(APPEARANCE_STORAGE_KEY,`light`);return APPEARANCE_CHOICES.includes(value)?value:`light`}function writeAppearance(value){if(APPEARANCE_CHOICES.includes(value))writeLocalStorageJson(APPEARANCE_STORAGE_KEY,value)}configureHttpWebClient({csrf:{enabled:false},resolveRequestUrl(url){return resolveStudioRequestUrl(url)}});bootBrowserLifecycle();var surfaceRuntime=createSurfaceRuntime({allMode:config.surfaceModeAll,surfaces:config.surfaceDefinitions,defaultSurfaceId:config.surfaceDefaultId});var surfaceMode=surfaceRuntime.normalizeSurfaceMode(void 0);var{router,fallbackRoute}=createSurfaceShellRouter({createRouter,history:createWebHistory(),routes,surfaceRuntime,surfaceMode,notFoundComponent:_sfc_main$22,guard:{surfaceDefinitions:config.surfaceDefinitions,defaultSurfaceId:config.surfaceDefaultId,webRootAllowed:config.webRootAllowed}});var vuetify=createVuetify({theme:{defaultTheme:readAppearance(),themes:{light:{colors:{"surface-variant":`#EEF3FA`,"on-surface-variant":`#1F2937`,warning:`#725C0C`,"on-warning":`#FFFFFF`,"warning-container":`#F5F0E3`,"on-warning-container":`#252117`}},dark:{colors:{background:`#111318`,surface:`#1A1C21`,"surface-bright":`#37393F`,"surface-light":`#2A2D33`,"surface-variant":`#243342`,"on-surface-variant":`#EDF4FC`,warning:`#DFC477`,"on-warning":`#3D2F00`,"warning-container":`#353126`,"on-warning-container":`#EAE1CF`}}}},defaults:{VCard:{rounded:`lg`},VAlert:{rounded:`lg`}},icons:{defaultSet:`mdi`,aliases,sets:{mdi}}});var pinia=createPinia();var queryClient=new QueryClient({defaultOptions:{queries:{refetchOnWindowFocus:false,refetchOnReconnect:true,retry:shouldRetryTransientQueryFailure,retryDelay:transientQueryRetryDelay}}});bootstrapClientShellApp({createApp,rootComponent:_sfc_main$23,appConfig:config,appPlugins:[pinia,[VueQueryPlugin,{queryClient}],vuetify],pinia,queryClient,router,bootClientModules:bootInstalledClientModules,surfaceRuntime,surfaceMode,env:{"BASE_URL":`/`,"DEV":false,"MODE":`production`,"PROD":true,"SSR":false},fallbackRoute}).catch(error=>{console.error(`Failed to bootstrap client app.`,error);const status=document.getElementById(`startup-status`);if(status)status.textContent=`Vibe64 could not open. Reload the page to try again.`});export{vibe64SessionPath as $,VBottomSheet as $t,VIBE64_SOURCE_EDITOR_SYNC_READY_EVENT as A,normalizeConversationLogPagination as At,vibe64OutputResultPath as B,VoiceConversationSettings_default as Bt,VIBE64_API_SUFFIX as C,createAssistantApi as Ct,VIBE64_SESSION_CHANGED_EVENT as D,conversationLogReadQuery as Dt,VIBE64_SESSIONS_API_SUFFIX as E,normalizeConversationTurn as Et,vibe64AgentTerminalControlTextPath as F,mainConversationId as Ft,vibe64PreviewIdentityPath as G,useAssistantQuestions as Gt,vibe64OutputRunStopPath as H,useVoiceLauncher as Ht,vibe64AgentTerminalPath as I,mainConversationTarget as It,vibe64RepositoryVersionFilesPath as J,VSnackbar as Jt,vibe64RepositoryHistoryPath as K,VTabs as Kt,vibe64ConversationLogPath as L,temporaryConversationId as Lt,selectedSessionStorageKey as M,mergeConversationStream as Mt,vibe64AgentAttachmentFilePath as N,VIBE64_TRAINING_LEARNER_CHANGED_EVENT as Nt,VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT as O,mergeConversationLogPages as Ot,vibe64AgentAttachmentPath as P,createProjectVoiceBinding as Pt,vibe64SessionEventMatchesScope as Q,VCombobox as Qt,vibe64ConversationLogQueryKey as R,useVibe64Voice as Rt,useVibe64AssistantCatalog as S,useAssistantConversationFactory as St,VIBE64_CURRENT_SESSION_API_SUFFIX as T,normalizeConversationMessage as Tt,vibe64OutputsPath as U,VoiceAvatar_default as Ut,vibe64OutputRunPath as V,VoiceConversationControls_default as Vt,vibe64OutputsQueryKey as W,unmatchedOptimisticMessages as Wt,vibe64SessionChangesPath as X,VContainer as Xt,vibe64SessionChangeDiffPath as Y,VMain as Yt,vibe64SessionCheckUpdatesPath as Z,VTable as Zt,useVibe64LearningCourses as _,vibe64SourceEditorStarsPath as _t,VIBE64_ACTIVE_SESSION_NAV_KEY as a,revealCurrentStep as an,vibe64SourceEditorChangesStreamPath as at,onVibe64AccountConnectionsDialogRequested as b,vibe64TemporaryConversationsPath as bt,IntegrationConfigurationFields_default as c,RouterView as cn,vibe64SourceEditorExplanationFollowupsStreamPath as ct,secretReference as d,vibe64SourceEditorExplanationsCleanupPath as dt,VAppBar as en,vibe64SessionPreviewStatePath as et,validateIntegrationConfiguration as f,vibe64SourceEditorExplanationsStreamPath as ft,courseProgress as g,vibe64SourceEditorSearchPath as gt,F as h,vibe64SourceEditorResolvePathPath as ht,client_exports$1 as i,VIBE64_LEARNING_ROUTES as in,vibe64SessionsQueryKey as it,agentTurnControlPayloadFromContext as j,latestAssistantMessageAwaitingUserReply as jt,VIBE64_SOURCE_EDITOR_SYNC_ERROR_EVENT as k,normalizeConversationLogPage as kt,getProviderClientAuthenticationMethods as l,vibe64SourceEditorExplanationPath as lt,GithubMarkdown_default as m,vibe64SourceEditorFilesPath as mt,writeAppearance as n,VIBE64_LEARNING_MODE_NOTE as nn,vibe64SessionPromptHintsPath as nt,_sfc_main$12 as o,isPracticeProjectSlug as on,vibe64SourceEditorCreateFilePath as ot,Vibe64LearningMarkdown_default as p,vibe64SourceEditorFilePath as pt,vibe64RepositoryVersionDiffPath as q,VTab as qt,client_exports as r,VIBE64_LEARNING_MODE_PROJECT_CODE as rn,vibe64SessionQueryKey as rt,useShellLayoutState as s,projectDisplayName as sn,vibe64SourceEditorDownloadPath as st,readAppearance as t,usePageActivity as tn,vibe64SessionPromptHintsCancelPath as tt,getProviderScopes as u,vibe64SourceEditorExplanationStopPath as ut,Vibe64SessionAssistantMenu_default as v,vibe64SourceEditorTreePath as vt,VIBE64_ARCHIVED_SESSIONS_API_SUFFIX as w,applyConversationLogPatch as wt,requestVibe64AccountConnectionsDialog as x,useAssistantConversation as xt,readRefOrGetterValue as y,vibe64TemporaryConversationPath as yt,vibe64GlobalCodexTerminalPath as z,VoiceConversationHost_default as zt};
|
|
138
|
+
`+serializedHTML;if(SAFE_FOR_TEMPLATES)serializedHTML=_stripTemplateExpressions(serializedHTML);return trustedTypesPolicy&&RETURN_TRUSTED_TYPE?_createTrustedHTML(serializedHTML):serializedHTML};DOMPurify.setConfig=function(){let cfg=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};_parseConfig(cfg);SET_CONFIG=true;SET_CONFIG_ALLOWED_TAGS=ALLOWED_TAGS;SET_CONFIG_ALLOWED_ATTR=ALLOWED_ATTR};DOMPurify.clearConfig=function(){CONFIG=null;SET_CONFIG=false;SET_CONFIG_ALLOWED_TAGS=null;SET_CONFIG_ALLOWED_ATTR=null;trustedTypesPolicy=defaultTrustedTypesPolicy;emptyHTML=``};DOMPurify.isValidAttribute=function(tag,attr,value){if(!CONFIG)_parseConfig({});const lcTag=transformCaseFunc(tag);const lcName=transformCaseFunc(attr);return _isValidAttribute(lcTag,lcName,value)};DOMPurify.addHook=function(entryPoint,hookFunction){if(typeof hookFunction!==`function`)return;if(!objectHasOwnProperty(hooks,entryPoint))return;arrayPush(hooks[entryPoint],hookFunction)};DOMPurify.removeHook=function(entryPoint,hookFunction){if(!objectHasOwnProperty(hooks,entryPoint))return;if(hookFunction!==void 0){const index=arrayLastIndexOf(hooks[entryPoint],hookFunction);return index===-1?void 0:arraySplice(hooks[entryPoint],index,1)[0]}return arrayPop(hooks[entryPoint])};DOMPurify.removeHooks=function(entryPoint){if(!objectHasOwnProperty(hooks,entryPoint))return;hooks[entryPoint]=[]};DOMPurify.removeAllHooks=function(){hooks=_createHooksMap()};return DOMPurify}var purify_default=createDOMPurify();var _hoisted_1$14=[`innerHTML`];var _sfc_main$29={__name:`GithubMarkdown`,props:{html:{type:String,default:``},text:{type:String,default:``}},setup(__props){const props=__props;const sanitizedHtml=computed(()=>purify_default.sanitize(props.html,{ALLOWED_TAGS:[`a`,`b`,`blockquote`,`br`,`code`,`del`,`details`,`div`,`em`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`hr`,`img`,`li`,`ol`,`p`,`pre`,`s`,`span`,`strong`,`sub`,`summary`,`sup`,`table`,`tbody`,`td`,`th`,`thead`,`tr`,`ul`],ALLOWED_ATTR:[`href`,`src`,`alt`,`title`,`width`,`height`,`colspan`,`rowspan`,`start`],ALLOW_DATA_ATTR:false,ALLOW_ARIA_ATTR:false}));const blocks=computed(()=>parseLongTextReviewBlocks(props.text));return(_ctx,_cache)=>{return __props.html?(openBlock(),createElementBlock(`div`,{key:0,class:`github-markdown`,innerHTML:sanitizedHtml.value},null,8,_hoisted_1$14)):(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:1,blocks:blocks.value},null,8,[`blocks`]))}}};var GithubMarkdown_default=_plugin_vue_export_helper_default(_sfc_main$29,[[`__scopeId`,`data-v-3636cce2`]]);var _sfc_main$28={__name:`Vibe64LearningMarkdown`,props:{text:{type:String,default:``}},setup(__props){const props=__props;const renderer=new F({async:false,gfm:true,walkTokens(token){if(token.type!==`image`)return;token.type=`text`;token.raw=token.text=token.text||``;delete token.tokens}});const html=computed(()=>props.text?renderer.parse(props.text):``);return(_ctx,_cache)=>{return openBlock(),createBlock(GithubMarkdown_default,{class:`vibe64-learning-markdown`,html:html.value,onClick:unref(openLessonLink)},null,8,[`html`,`onClick`])}}};var Vibe64LearningMarkdown_default=_plugin_vue_export_helper_default(_sfc_main$28,[[`__scopeId`,`data-v-47420e75`]]);var _hoisted_1$13=[`aria-busy`];var _hoisted_2$10={class:`vibe64-teacher-notes__actions`};var _hoisted_3$9={key:1,class:`vibe64-teacher-notes__empty`,"data-test":`teacher-notes-empty`};var _hoisted_4$8={key:2,class:`vibe64-teacher-notes__updated`};var _hoisted_5$8={class:`vibe64-teacher-notes__actions`};var _sfc_main$27={__name:`Vibe64LearningTeacherNotes`,props:{learning:{type:Object,required:true}},setup(__props){const props=__props;const notes=computed(()=>props.learning.notes.value);const status=computed(()=>props.learning.notesState);const editing=ref(false);const confirmingClear=ref(false);const draft=ref(``);const updated=computed(()=>{const value=notes.value;if(!value?.updatedAt)return``;const when=new Date(value.updatedAt);const date=Number.isNaN(when.getTime())?``:when.toLocaleString();return`${value.updatedBy===`colleague`?`Updated by Colleague`:`Updated by you`}${date?`, ${date}`:``}`});onMounted(()=>{if(!props.learning.notes.value)props.learning.readNotes()});function edit(){draft.value=notes.value?.text||``;confirmingClear.value=false;editing.value=true}async function save(){if(await props.learning.saveNotes(draft.value))editing.value=false}async function clear(){if(await props.learning.clearNotes()){confirmingClear.value=false;editing.value=false}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:`vibe64-teacher-notes`,"aria-labelledby":`vibe64-teacher-notes-title`,"aria-busy":status.value.loading||status.value.saving,"data-test":`teacher-notes`},[_cache[9]||(_cache[9]=createBaseVNode(`h2`,{id:`vibe64-teacher-notes-title`,class:`vibe64-teacher-notes__title`},`What my teacher knows about me`,-1)),_cache[10]||(_cache[10]=createBaseVNode(`p`,{class:`vibe64-teacher-notes__intro`},` Colleague keeps a short private summary of how you learn, so it can teach you better. Only you can see it, and it never changes your lesson results. `,-1)),status.value.error?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,density:`compact`,class:`vibe64-teacher-notes__error`,"data-test":`teacher-notes-error`},{default:withCtx(()=>[createTextVNode(toDisplayString(status.value.error),1)]),_:1})):createCommentVNode(``,true),editing.value?(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VTextarea,{modelValue:draft.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>draft.value=$event),label:`Your notes (Markdown)`,variant:`outlined`,rows:`8`,"auto-grow":``,counter:unref(VIBE64_LEARNING_NOTES_MAX),maxlength:unref(VIBE64_LEARNING_NOTES_MAX),disabled:status.value.saving,"data-test":`teacher-notes-draft`},null,8,[`modelValue`,`counter`,`maxlength`,`disabled`]),createBaseVNode(`div`,_hoisted_2$10,[createVNode(VBtn,{color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`48`,loading:status.value.saving,disabled:status.value.saving||!draft.value.trim(),"data-test":`teacher-notes-save`,onClick:save},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Save`,-1)])]),_:1},8,[`loading`,`disabled`]),createVNode(VBtn,{variant:`text`,rounded:`pill`,"min-height":`48`,disabled:status.value.saving,"data-test":`teacher-notes-cancel`,onClick:_cache[1]||(_cache[1]=$event=>editing.value=false)},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`])])],64)):(openBlock(),createElementBlock(Fragment,{key:2},[notes.value?.text?(openBlock(),createBlock(Vibe64LearningMarkdown_default,{key:0,class:`vibe64-teacher-notes__text`,text:notes.value.text},null,8,[`text`])):!status.value.loading?(openBlock(),createElementBlock(`p`,_hoisted_3$9,` Nothing yet. Colleague adds notes as it teaches you. `)):createCommentVNode(``,true),notes.value?.text&&updated.value?(openBlock(),createElementBlock(`p`,_hoisted_4$8,toDisplayString(updated.value),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_5$8,[createVNode(VBtn,{variant:`tonal`,rounded:`pill`,"min-height":`48`,disabled:status.value.loading||status.value.saving,"data-test":`teacher-notes-edit`,onClick:edit},{default:withCtx(()=>[createTextVNode(toDisplayString(notes.value?.text?`Edit`:`Write notes`),1)]),_:1},8,[`disabled`]),notes.value?.text?(openBlock(),createElementBlock(Fragment,{key:0},[!confirmingClear.value?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,rounded:`pill`,"min-height":`48`,disabled:status.value.saving,"data-test":`teacher-notes-clear`,onClick:_cache[2]||(_cache[2]=$event=>confirmingClear.value=true)},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Clear`,-1)])]),_:1},8,[`disabled`])):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VBtn,{color:`error`,variant:`flat`,rounded:`pill`,"min-height":`48`,loading:status.value.saving,disabled:status.value.saving,"data-test":`teacher-notes-clear-confirm`,onClick:clear},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Clear all notes`,-1)])]),_:1},8,[`loading`,`disabled`]),createVNode(VBtn,{variant:`text`,rounded:`pill`,"min-height":`48`,disabled:status.value.saving,"data-test":`teacher-notes-clear-cancel`,onClick:_cache[3]||(_cache[3]=$event=>confirmingClear.value=false)},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Keep them`,-1)])]),_:1},8,[`disabled`])],64))],64)):createCommentVNode(``,true)])],64))],8,_hoisted_1$13)}}};var Vibe64LearningTeacherNotes_default=_plugin_vue_export_helper_default(_sfc_main$27,[[`__scopeId`,`data-v-6857364d`]]);var _hoisted_1$12={class:`vibe64-learning__bar`};var _hoisted_2$9={class:`vibe64-learning__tabs`,"aria-label":`Courses`};var _hoisted_3$8=[`aria-current`,`data-test`,`onClick`];var _hoisted_4$7={class:`vibe64-learning__content`};var _hoisted_5$7={key:0,class:`vibe64-learning__scroll`};var _hoisted_6$4={key:1,class:`vibe64-learning__scroll`};var LEARN_MODE_CLASS=`vibe64-learn-mode`;var _sfc_main$26={__name:`Vibe64LearningOverlay`,props:{authorPreview:{type:[Boolean,Object],default:false}},setup(__props){const props=__props;const learning=useVibe64Learning();const viewer=inject$1(VIBE64_ASSISTANT_VIEWER_KEY,null);const actorKey=computed(()=>String(toValue(viewer)?.actorKey||``));watch(actorKey,value=>learning?.setViewer(value),{immediate:true});onBeforeUnmount(()=>learning?.setViewer(``));watch(()=>Boolean(learning?.learnMode),value=>globalThis.document?.body?.classList.toggle(LEARN_MODE_CLASS,value),{immediate:true});onBeforeUnmount(()=>globalThis.document?.body?.classList.remove(LEARN_MODE_CLASS));const route=useRoute();const router=useRouter$1();watch(()=>[learning?.mode,route?.fullPath,learning?.state.modeBusy],(_value,previous)=>{if(!route||!router||!learning||learning.state.modeBusy)return;const target=modeRedirect({mode:learning.mode,slug:projectSlugFromRoute(route),path:route.path});if(!target||target.path===route.path)return;const modeChanged=Boolean(previous?.[0])&&previous[0]!==learning.mode;if(target.note&&!modeChanged)learning.showNotice(target.note);router.replace(target.path)},{immediate:true});watch(()=>learning?.mode?.on,(_on,wasOn)=>{if(typeof wasOn===`boolean`)learning.clearNotice()});function noticeShown(value){if(!value)learning.clearNotice()}const open=computed(()=>Boolean(learning?.state.open));const built=ref(false);watch(open,value=>{if(value)built.value=true},{immediate:true});watch(actorKey,()=>{built.value=open.value});const layer=ref(null);watch(open,async value=>{if(!value)return;await nextTick$1();const element=layer.value;if(typeof element?.focus===`function`&&!element.contains?.(globalThis.document?.activeElement))element.focus({preventScroll:true})});const courses=useVibe64LearningCourses({authorPreview:computed(()=>toValue(props.authorPreview)===true),active:open});const surface=computed(()=>learning?.state.surface||`courses`);const tabs=Object.freeze([{id:`courses`,label:`Courses`},{id:`progress`,label:`In progress`},{id:`archived`,label:`Archived`}]);useRealtimeEvent({event:VIBE64_TRAINING_LEARNER_CHANGED_EVENT,enabled:computed(()=>Boolean(actorKey.value)),onEvent:({payload}={})=>{learning?.learnerChanged(payload||{});if(open.value&&payload?.reason!==`notes`)courses.learningResource.reload()}});const confirm=computed(()=>learning?.confirmArchive||null);async function archiveAndStart(){try{await learning.confirmArchiveAndStart()}catch(cause){learning.showNotice(String(cause?.message||`The lesson did not start. Try again from Courses.`))}}function keydown(event){if(event.key===`Escape`&&!event.defaultPrevented&&!confirm.value){event.stopPropagation();learning.closeCourses()}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(unref(TrainingGuideOverlay_default)),unref(learning)&&actorKey.value&&built.value?withDirectives((openBlock(),createElementBlock(`div`,{key:0,class:`vibe64-learning`,role:`dialog`,"aria-modal":`true`,"aria-label":`Courses`,"data-pane-swipe-ignore":``,tabindex:`-1`,ref_key:`layer`,ref:layer,onKeydown:keydown},[createBaseVNode(`header`,_hoisted_1$12,[createBaseVNode(`nav`,_hoisted_2$9,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(tabs),tab=>{return openBlock(),createElementBlock(`button`,{key:tab.id,type:`button`,class:`vibe64-learning__tab`,"aria-current":surface.value===tab.id?`page`:void 0,"data-test":`learning-${tab.id}-tab`,onClick:$event=>unref(learning).show({surface:tab.id})},toDisplayString(tab.label),9,_hoisted_3$8)}),128))]),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,"min-width":`48`,"min-height":`48`,"aria-label":`Close Courses`,title:`Close Courses (your place is kept)`,"data-test":`learning-hide`,onClick:_cache[0]||(_cache[0]=$event=>unref(learning).closeCourses())},null,8,[`icon`])]),createBaseVNode(`div`,_hoisted_4$7,[surface.value===`courses`?(openBlock(),createElementBlock(`div`,_hoisted_5$7,[createVNode(Vibe64LearningCourses_default,{learning:unref(courses)},null,8,[`learning`]),createVNode(Vibe64LearningTeacherNotes_default,{learning:unref(learning)},null,8,[`learning`])])):(openBlock(),createElementBlock(`div`,_hoisted_6$4,[createVNode(Vibe64LearningAttempts_default,{learning:unref(learning),archived:surface.value===`archived`},null,8,[`learning`,`archived`])]))])],544)),[[vShow,open.value]]):createCommentVNode(``,true),unref(learning)&&actorKey.value?(openBlock(),createBlock(VDialog,{key:1,"model-value":Boolean(confirm.value),"max-width":`28rem`,style:{"z-index":`2410`},"onUpdate:modelValue":_cache[2]||(_cache[2]=value=>value||unref(learning).cancelArchive())},{default:withCtx(()=>[confirm.value?(openBlock(),createBlock(VCard,{key:0,rounded:`xl`,"data-test":`learning-archive-confirm`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-wrap`},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Archive your lesson in progress?`,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[_cache[4]||(_cache[4]=createTextVNode(` You can have one lesson in progress. Starting this one archives `,-1)),createBaseVNode(`strong`,null,toDisplayString(confirm.value.current.lessonTitle||`the lesson in progress`),1),_cache[5]||(_cache[5]=createTextVNode(` with its practice project and conversation; it stays under Archived. `,-1))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,"min-height":`48`,"data-test":`learning-archive-cancel`,onClick:_cache[1]||(_cache[1]=$event=>unref(learning).cancelArchive())},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Keep it`,-1)])]),_:1}),createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,"data-test":`learning-archive-start`,onClick:archiveAndStart},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Archive and start`,-1)])]),_:1})]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`])):createCommentVNode(``,true),unref(learning)&&actorKey.value?(openBlock(),createBlock(VSnackbar,{key:2,"model-value":Boolean(unref(learning).notice),timeout:8e3,location:`bottom`,"data-test":`learning-mode-notice`,"onUpdate:modelValue":noticeShown},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(learning).notice),1)]),_:1},8,[`model-value`])):createCommentVNode(``,true)],64)}}};var Vibe64LearningOverlay_default=_plugin_vue_export_helper_default(_sfc_main$26,[[`__scopeId`,`data-v-b721510e`]]);var _sfc_main$25={__name:`Vibe64LearningRouteHold`,setup(__props){const learning=useVibe64Learning();const viewer=inject$1(VIBE64_ASSISTANT_VIEWER_KEY,null);const route=useRoute();const queryClient=useQueryClient();const held=computed(()=>{const slug=projectSlugFromRoute(route);const actorKey=String(toValue(viewer)?.actorKey||``);if(!learning||!actorKey||!slug)return false;return learning.state.actorKey!==actorKey||!learning.state.modeRead||learning.state.modeBusy===`set`||Boolean(modeRedirect({mode:learning.mode,slug,path:route.path}))});function leaveProject(slug){const queryKey=[`vibe64`,...vibe64ProjectQueryScope(slug)];queryClient.cancelQueries({queryKey}).then(()=>queryClient.removeQueries({queryKey,predicate:query=>query.state.error?.code===VIBE64_LEARNING_MODE_PROJECT_CODE}))}watch(()=>[held.value,projectSlugFromRoute(route)],([isHeld],[wasHeld,shownSlug]=[])=>{if(isHeld&&wasHeld===false&&shownSlug)leaveProject(shownSlug)});return(_ctx,_cache)=>{return!held.value?renderSlot(_ctx.$slots,`default`,{},void 0,void 0,0):createCommentVNode(``,true)}}};var _hoisted_1$11={class:`shell-error-host`,"aria-live":`polite`};var _hoisted_2$8={key:0,class:`shell-error-host__banners`};var _hoisted_3$7={class:`shell-error-host__banner-stack`};var _hoisted_4$6={class:`d-flex align-center ga-3 flex-wrap`};var _hoisted_5$6={key:0};var _sfc_main$24={__name:`ShellErrorHost`,setup(__props){const runtime=useShellWebErrorRuntime();const store=useShellErrorPresentationStore();const snackbarEntries=computed(()=>store.channels.snackbar||[]);const bannerEntries=computed(()=>store.channels.banner||[]);const dialogEntry=computed(()=>store.channels.dialog[0]||null);const displayedSnackbarEntry=ref(null);const snackbarOpen=ref(false);function isSameSnackbarEntry(left=null,right=null){return Boolean(left?.id&&right?.id&&left.id===right.id)}function hasSnackbarEntry(entry=null){if(!entry?.id)return false;return snackbarEntries.value.some(candidate=>isSameSnackbarEntry(candidate,entry))}function openNextSnackbarEntry(){const nextEntry=snackbarEntries.value[0]||null;if(!nextEntry){displayedSnackbarEntry.value=null;snackbarOpen.value=false;return}displayedSnackbarEntry.value=nextEntry;snackbarOpen.value=true}watch(snackbarEntries,entries=>{const currentEntry=displayedSnackbarEntry.value;if(!currentEntry){openNextSnackbarEntry();return}const matchingEntry=entries.find(entry=>isSameSnackbarEntry(entry,currentEntry))||null;if(matchingEntry){displayedSnackbarEntry.value=matchingEntry;return}snackbarOpen.value=false},{immediate:true});function resolveSeverityColor(severity=`error`){const normalized=String(severity||`error`).trim().toLowerCase();if(normalized===`info`)return`info`;if(normalized===`success`)return`success`;if(normalized===`warning`)return`warning`;return`error`}function resolveSeverityIcon(severity=`error`){const normalized=String(severity||`error`).trim().toLowerCase();if(normalized===`info`)return`mdi-information-outline`;if(normalized===`success`)return`mdi-check-circle-outline`;if(normalized===`warning`)return`mdi-alert-outline`;return`mdi-alert-outline`}function resolveTimeout(entry){if(!entry)return-1;if(entry.persist)return-1;return 5e3}function dismiss(entry){if(!entry||!entry.channel||!entry.id)return;store.dismiss(entry.channel,entry.id)}function actionsFor(entry){return entry?[entry.action,...entry.additionalActions].filter(Boolean):[]}async function runAction(entry,action){if(!entry||typeof action?.handler!==`function`)return;try{await action.handler(entry)}catch(error){runtime.report({source:`shell-web.error-host.action`,message:`Error action failed.`,cause:error,intent:`blocking`,severity:`error`})}if(action.dismissOnRun!==false)dismiss(entry)}function onSnackbarModelValue(nextValue){if(nextValue===false&&displayedSnackbarEntry.value){snackbarOpen.value=false;dismiss(displayedSnackbarEntry.value)}}function onDialogModelValue(nextValue){if(nextValue===false&&dialogEntry.value&&dialogEntry.value.persist!==true)dismiss(dialogEntry.value)}function onSnackbarAfterLeave(){if(hasSnackbarEntry(displayedSnackbarEntry.value))return;openNextSnackbarEntry()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$11,[bannerEntries.value.length>0?(openBlock(),createElementBlock(`div`,_hoisted_2$8,[createBaseVNode(`div`,_hoisted_3$7,[(openBlock(true),createElementBlock(Fragment,null,renderList(bannerEntries.value,entry=>{return openBlock(),createBlock(VAlert,{key:entry.id,type:resolveSeverityColor(entry.severity),icon:resolveSeverityIcon(entry.severity),variant:`elevated`,density:`comfortable`,rounded:`lg`,border:`start`,class:`shell-error-host__banner`,closable:``,"onClick:close":$event=>dismiss(entry)},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_4$6,[createBaseVNode(`span`,null,toDisplayString(entry.message),1),createVNode(VSpacer),(openBlock(true),createElementBlock(Fragment,null,renderList(actionsFor(entry),(action,index)=>{return openBlock(),createBlock(VBtn,{key:index,variant:`text`,size:`small`,class:`text-none`,onClick:$event=>runAction(entry,action)},{default:withCtx(()=>[createTextVNode(toDisplayString(action.label),1)]),_:2},1032,[`onClick`])}),128))])]),_:2},1032,[`type`,`icon`,`onClick:close`])}),128))])])):createCommentVNode(``,true),createVNode(VSnackbar,{"model-value":snackbarOpen.value,location:`bottom end`,timeout:resolveTimeout(displayedSnackbarEntry.value),vertical:actionsFor(displayedSnackbarEntry.value).length>1,color:displayedSnackbarEntry.value?resolveSeverityColor(displayedSnackbarEntry.value.severity):void 0,"onUpdate:modelValue":onSnackbarModelValue,onAfterLeave:onSnackbarAfterLeave},{actions:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(actionsFor(displayedSnackbarEntry.value),(action,index)=>{return openBlock(),createBlock(VBtn,{key:index,variant:`text`,"min-height":`48`,onClick:$event=>runAction(displayedSnackbarEntry.value,action)},{default:withCtx(()=>[createTextVNode(toDisplayString(action.label),1)]),_:2},1032,[`onClick`])}),128)),displayedSnackbarEntry.value?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,size:`small`,onClick:_cache[0]||(_cache[0]=$event=>dismiss(displayedSnackbarEntry.value))},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(` Dismiss `,-1)])]),_:1})):createCommentVNode(``,true)]),default:withCtx(()=>[displayedSnackbarEntry.value?(openBlock(),createElementBlock(`span`,_hoisted_5$6,toDisplayString(displayedSnackbarEntry.value.message),1)):createCommentVNode(``,true)]),_:1},8,[`model-value`,`timeout`,`vertical`,`color`]),createVNode(VDialog,{"model-value":Boolean(dialogEntry.value),"max-width":`560`,persistent:Boolean(dialogEntry.value?.persist),"onUpdate:modelValue":onDialogModelValue},{default:withCtx(()=>[dialogEntry.value?(openBlock(),createBlock(VCard,{key:0},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-subtitle-1`},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Attention required`,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createTextVNode(toDisplayString(dialogEntry.value.message),1)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),(openBlock(true),createElementBlock(Fragment,null,renderList(actionsFor(dialogEntry.value),(action,index)=>{return openBlock(),createBlock(VBtn,{key:index,variant:`text`,onClick:$event=>runAction(dialogEntry.value,action)},{default:withCtx(()=>[createTextVNode(toDisplayString(action.label),1)]),_:2},1032,[`onClick`])}),128)),createVNode(VBtn,{color:`primary`,variant:`tonal`,onClick:_cache[1]||(_cache[1]=$event=>dismiss(dialogEntry.value))},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Close `,-1)])]),_:1})]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`,`persistent`])])}}};var ShellErrorHost_default=_plugin_vue_export_helper_default(_sfc_main$24,[[`__scopeId`,`data-v-d461d84d`]]);function useVibe64InAppLinks(){const router=useRouter$1();function navigateAppLink(event){if(event.defaultPrevented||event.button!==0||event.ctrlKey||event.metaKey||event.shiftKey||event.altKey)return;const anchor=event.target?.closest?.(`a[href]`);if(!anchor||anchor.hasAttribute(`download`)||anchor.relList.contains(`external`))return;const target=anchor.getAttribute(`target`);if(target&&target.toLowerCase()!==`_self`)return;const href=anchor.getAttribute(`href`);if(!href||href.startsWith(`#`))return;let url;try{url=new URL(anchor.href)}catch{return}if(url.origin!==window.location.origin||![`http:`,`https:`].includes(url.protocol)||url.username||url.password)return;const path=`${url.pathname}${url.search}${url.hash}`;const route=router.resolve(path);if(!route.matched.length||route.name===`not-found`)return;event.preventDefault();router.push(path)}onMounted(()=>document.addEventListener(`click`,navigateAppLink));onUnmounted(()=>document.removeEventListener(`click`,navigateAppLink))}var _sfc_main$23={__name:`App`,setup(__props){useVibe64InAppLinks();return(_ctx,_cache)=>{return openBlock(),createBlock(VApp,null,{default:withCtx(()=>[createVNode(_sfc_main$62,{local:``},{default:withCtx(()=>[createVNode(_sfc_main$39,null,{default:withCtx(()=>[createVNode(_sfc_main$25,null,{default:withCtx(()=>[createVNode(unref(RouterView))]),_:1}),createVNode(_sfc_main$41),createVNode(Vibe64LearningOverlay_default)]),_:1}),createVNode(_sfc_main$25,null,{default:withCtx(()=>[createVNode(unref(_sfc_main$63),{"can-configure":``,"actor-key":`local`})]),_:1})]),_:1}),createVNode(unref(ShellErrorHost_default))]),_:1})}}};var title=`Not Found`;var message=`The page you requested does not exist.`;var _sfc_main$22={__name:`NotFound`,setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(VContainer,{class:`fill-height d-flex align-center justify-center`},{default:withCtx(()=>[createVNode(VCard,{class:`pa-6 text-center`,"max-width":`560`,rounded:`lg`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-h4`},{default:withCtx(()=>[createTextVNode(toDisplayString(title))]),_:1}),createVNode(VCardText,{class:`text-medium-emphasis`},{default:withCtx(()=>[createTextVNode(toDisplayString(message))]),_:1})]),_:1})]),_:1})}}};var name={type:`string`,required:true,minLength:1,maxLength:200};var secretReference={...name,pattern:`^(?!https?:)[a-z][a-z0-9-]*:[^\\s]+$`};var authenticationSchema=createSchema({method:{...name,enum:[`oauth2`,`api-key`,`service-account`,`none`]},registrationRef:{...name,required:false},secretRef:{...secretReference,required:false}});var assistantPermission={type:`string`,enum:[`ask`,`always`,`never`]};var assistantPolicySchema=createSchema({enabled:{type:`boolean`,strictBoolean:true,defaultTo:true},defaultPermission:{...assistantPermission,defaultTo:`ask`},actions:{type:`object`,values:assistantPermission,defaultTo:{}}});var integrationSchema=createSchema({provider:name,displayName:{...name,required:false},accountMode:{...name,enum:[`shared`,`per-user`,`assistant`]},scopes:{type:`array`,items:{...name,maxLength:2048},required:true},authentication:{type:`object`,schema:authenticationSchema,required:true},settings:{type:`object`,additionalProperties:true,required:false},assistantPolicy:{type:`object`,schema:assistantPolicySchema,required:false},extensions:{type:`object`,additionalProperties:true,required:false}});var registrationSchema=createSchema({source:{...name,enum:[`own`]},grantType:{...name,enum:[`authorization_code`,`client_credentials`],required:false},clientId:{...name,maxLength:2048,required:false},clientSecretRef:{...secretReference,required:false},tokenEndpointAuthMethod:{...name,enum:[`client_secret_post`,`client_secret_basic`,`none`],required:false},callbackUrlRef:{...secretReference,required:false}});var integrationsSchema=createSchema({schemaVersion:{type:`integer`,enum:[1],required:true},integrations:{type:`object`,values:integrationSchema,required:true},registrations:{type:`object`,values:registrationSchema,required:true},extensions:{type:`object`,additionalProperties:true,required:false}});var IntegrationConfigurationError=class extends Error{constructor(fieldErrors){super(`Integration configuration is invalid.`);this.name=`IntegrationConfigurationError`;this.code=`integration_configuration_invalid`;this.statusCode=422;this.fieldErrors=fieldErrors}};function getProviderSettingsSchema(provider,settings={}){return typeof provider.settingsSchema===`function`?provider.settingsSchema(settings):provider.settingsSchema}function getProviderAuthenticationMethods(provider,settings={}){return provider.authenticationMethodsForSettings?provider.authenticationMethodsForSettings(settings):provider.authenticationMethods}function getProviderAccountModes(provider,settings={}){return provider.accountModesForSettings?provider.accountModesForSettings(settings):provider.accountModes}function getProviderScopes(provider,settings={},grantType=`authorization_code`,authenticationMethod){const scopes=provider.scopesForGrantType?provider.scopesForGrantType(grantType,settings):provider.scopesForSettings?provider.scopesForSettings(settings):provider.scopes;return authenticationMethod?scopes.filter(scope=>!scope.authenticationMethods||scope.authenticationMethods.includes(authenticationMethod)):scopes}function getProviderClientAuthenticationMethods(provider,grantType=`authorization_code`,settings={}){const methods=provider.oauthClientAuthenticationMethods;return typeof methods===`function`?methods(grantType,settings):methods||[`client_secret_post`]}function validateIntegrationConfiguration(input,{providers=[],allowUnknownProviders=false}={}){if(input?.schemaVersion!==1)throw new IntegrationConfigurationError({schemaVersion:`Use numeric schemaVersion 1; other versions require an explicit migration.`});let config;try{config=validateSchemaPayload({schema:integrationsSchema,mode:`replace`},input)}catch(error){throw new IntegrationConfigurationError(error.fieldErrors||{configuration:`Invalid configuration.`})}const fieldErrors={};const definitions=new Map(providers.map(provider=>[provider.id,provider]));const requireValue=(record,key,path)=>{if(!record[key])fieldErrors[`${path}.${key}`]=`This value is required.`};for(const field of[`integrations`,`registrations`])for(const id of Object.keys(config[field]))if(!/^[a-z][a-z0-9-]*$/u.test(id)||[`constructor`,`prototype`].includes(id))fieldErrors[`${field}.${id}`]=`Use a stable lowercase name containing letters, digits and hyphens.`;for(const[id,registration]of Object.entries(config.registrations)){const path=`registrations.${id}`;const clientCredentials=registration.grantType===`client_credentials`;const required=[`clientId`,...clientCredentials?[]:[`callbackUrlRef`],...registration.tokenEndpointAuthMethod===`none`?[]:[`clientSecretRef`]];for(const key of required)requireValue(registration,key,path);const forbidden=[...clientCredentials?[`callbackUrlRef`]:[],...registration.tokenEndpointAuthMethod===`none`?[`clientSecretRef`]:[]];for(const key of forbidden)if(Object.hasOwn(registration,key))fieldErrors[`${path}.${key}`]=`This field belongs to another credential mode.`;if(clientCredentials&®istration.tokenEndpointAuthMethod===`none`)fieldErrors[`${path}.tokenEndpointAuthMethod`]=`Client credentials require a confidential client.`}for(const[id,integration]of Object.entries(config.integrations)){const path=`integrations.${id}`;const auth=integration.authentication;const provider=definitions.get(integration.provider);const registration=config.registrations[auth.registrationRef];const grantType=registration?.grantType||`authorization_code`;if(auth.method===`oauth2`){if(!auth.registrationRef||!Object.hasOwn(config.registrations,auth.registrationRef))fieldErrors[`${path}.authentication.registrationRef`]=`Select a registration defined in this file.`;if(auth.secretRef)fieldErrors[`${path}.authentication.secretRef`]=`Use the registration's secret reference.`;if(grantType===`client_credentials`&&integration.accountMode===`per-user`)fieldErrors[`${path}.accountMode`]=`A service account cannot connect as each app user.`}else if(auth.method===`api-key`){if(!provider?.apiKeySecretOptional)requireValue(auth,`secretRef`,`${path}.authentication`);if(auth.registrationRef)fieldErrors[`${path}.authentication.registrationRef`]=`API keys do not use an OAuth registration.`}else if(auth.method===`service-account`){requireValue(auth,`secretRef`,`${path}.authentication`);if(auth.registrationRef)fieldErrors[`${path}.authentication.registrationRef`]=`Service-account credentials do not use a browser OAuth registration.`;if(integration.accountMode===`per-user`)fieldErrors[`${path}.accountMode`]=`A service account cannot connect as each app user.`}else for(const field of[`secretRef`,`registrationRef`])if(Object.hasOwn(auth,field))fieldErrors[`${path}.authentication.${field}`]=`This mode does not use credentials.`;if(new Set(integration.scopes).size!==integration.scopes.length)fieldErrors[`${path}.scopes`]=`Select each permission only once.`;if(providers.length){if(!provider){if(!allowUnknownProviders)fieldErrors[`${path}.provider`]=`Install and register this provider before using it.`;continue}for(const action of Object.keys(integration.assistantPolicy?.actions||{}))if(!provider.assistantActions?.some(item=>item.value===action))fieldErrors[`${path}.assistantPolicy.actions.${action}`]=`This provider does not declare this assistant action.`;if(provider.settingsSchema)try{integration.settings=validateSchemaPayload({schema:getProviderSettingsSchema(provider,integration.settings),mode:`replace`},integration.settings||{})}catch(error){for(const[field,message]of Object.entries(error.fieldErrors||{settings:`Check this provider's settings.`}))fieldErrors[`${path}.settings.${field}`]=message}for(const field of provider.settingsFields||[])if(field.authenticationMethods&&!field.authenticationMethods.includes(auth.method)&&Object.hasOwn(integration.settings||{},field.name))fieldErrors[`${path}.settings.${field.name}`]=`This setting belongs to another credential mode.`;if(!getProviderAccountModes(provider,integration.settings||{}).includes(integration.accountMode))fieldErrors[`${path}.accountMode`]=`This provider does not support this account mode.`;if(!getProviderAuthenticationMethods(provider,integration.settings).includes(auth.method))fieldErrors[`${path}.authentication.method`]=`This provider configuration does not support this credential mode.`;if(auth.method===`oauth2`&®istration?.source===`own`){const registrationPath=`registrations.${auth.registrationRef}`;if(!(provider.oauthGrantTypes||[`authorization_code`]).includes(grantType))fieldErrors[`${registrationPath}.grantType`]=`This provider does not support this OAuth flow.`;if(!getProviderClientAuthenticationMethods(provider,grantType,integration.settings||{}).includes(registration.tokenEndpointAuthMethod||`client_secret_post`))fieldErrors[`${registrationPath}.tokenEndpointAuthMethod`]=`This provider does not support this client authentication method.`;if(registration.clientId&&provider.validateClientId){const result=provider.validateClientId(registration.clientId);if(result!==true)fieldErrors[`${registrationPath}.clientId`]=result||`Check this provider's client identifier.`}}const scopes=getProviderScopes(provider,integration.settings||{},grantType,auth.method);const allowedScopes=new Set(scopes.map(scope=>scope.value));if(scopes.some(scope=>scope.required&&!integration.scopes.includes(scope.value)))fieldErrors[`${path}.scopes`]=`Include this provider's required permissions.`;if(integration.scopes.some(scope=>!allowedScopes.has(scope)))fieldErrors[`${path}.scopes`]=`A selected permission is not supported by this provider configuration.`;if([`oauth2`,`service-account`].includes(auth.method)&&scopes.length&&!integration.scopes.length)fieldErrors[`${path}.scopes`]=`Select at least one permission.`}}if(Object.keys(fieldErrors).length)throw new IntegrationConfigurationError(fieldErrors);return config}var _hoisted_1$10={class:`text-body-medium mb-3`};var _hoisted_2$7={key:0,role:`alert`,class:`text-error text-body-small mt-2`};var _sfc_main$21={__name:`IntegrationConfigurationFields`,props:{modelValue:{type:Object,required:true},integrationId:{type:String,required:true},provider:{type:Object,required:true},fieldErrors:{type:Object,default:()=>({})},disabled:Boolean,callbackUrl:{type:String,default:``}},emits:[`update:modelValue`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const panels=ref([`details`,`credentials`]);const integration=computed(()=>props.modelValue.integrations[props.integrationId]);const registrationId=computed(()=>integration.value?.authentication.registrationRef);const registration=computed(()=>props.modelValue.registrations[registrationId.value]);const grantType=computed(()=>registration.value?.grantType||`authorization_code`);const grantOptions=computed(()=>(props.provider.oauthGrantTypes||[`authorization_code`]).map(value=>({value,title:{authorization_code:`User consent`,client_credentials:`Service account`}[value]||value})));const modes=computed(()=>getProviderAccountModes(props.provider,integration.value.settings||{}).filter(mode=>integration.value?.authentication.method!==`oauth2`||grantType.value!==`client_credentials`||mode!==`per-user`).map(value=>({value,title:{shared:`One shared account`,"per-user":`Each app user's own account`,assistant:`Assistant access`}[value]||value})));const registrationOptions=computed(()=>Object.keys(props.modelValue.registrations));const integrationPath=computed(()=>`integrations.${props.integrationId}`);const registrationPath=computed(()=>`registrations.${registrationId.value}`);const settingProperties=computed(()=>getProviderSettingsSchema(props.provider,integration.value?.settings)?.getFieldDefinitions()||{});const authenticationOptions=computed(()=>getProviderAuthenticationMethods(props.provider,integration.value.settings).map(value=>({value,title:props.provider.authenticationLabels?.[value]||{"api-key":`API key`,"service-account":`Service account`,oauth2:`OAuth`,none:`No credentials`}[value]||value})));const visibleSettings=computed(()=>(props.provider.settingsFields||[]).filter(field=>Object.hasOwn(settingProperties.value,field.name)&&(!field.authenticationMethods||field.authenticationMethods.includes(integration.value.authentication.method))));const visibleScopes=computed(()=>getProviderScopes(props.provider,integration.value.settings||{},grantType.value,integration.value.authentication.method));const assistantPermissions=[{value:`ask`,title:`Ask each time`},{value:`always`,title:`Always allow`},{value:`never`,title:`Never allow`}];function editAssistantPolicy(changes){editIntegration({assistantPolicy:{enabled:true,defaultPermission:`ask`,actions:{},...integration.value.assistantPolicy,...changes}})}function editIntegration(changes){const next={...integration.value,...changes};for(const key of Object.keys(changes))if(changes[key]===void 0)delete next[key];const registrations={...props.modelValue.registrations};const previousRegistration=registrationId.value;if(changes.authentication&&next.authentication.method!==`oauth2`&&previousRegistration&®istrations[previousRegistration]?.source===`own`&®istrations[previousRegistration]?.clientId===``&&!Object.entries(props.modelValue.integrations).some(([id,value])=>id!==props.integrationId&&value.authentication.registrationRef===previousRegistration))delete registrations[previousRegistration];emit(`update:modelValue`,{...props.modelValue,registrations,integrations:{...props.modelValue.integrations,[props.integrationId]:next}})}function editSetting(field,value){const settings={...integration.value.settings};if(value===void 0||value===``)delete settings[field];else settings[field]=value;if(typeof props.provider.settingsSchema===`function`){const fields=getProviderSettingsSchema(props.provider,settings).getFieldDefinitions();for(const key of Object.keys(settings))if(!Object.hasOwn(fields,key))delete settings[key]}const available=getProviderScopes(props.provider,settings,grantType.value,integration.value.authentication.method);const scopes=integration.value.scopes.filter(value=>available.some(scope=>scope.value===value));for(const scope of available)if(scope.required&&!scopes.includes(scope.value))scopes.push(scope.value);const methods=getProviderAuthenticationMethods(props.provider,settings);const credentialScope=props.provider.settingsFields?.find(item=>item.name===field)?.credentialScope;const authentication=credentialScope&&credentialScope(value)!==credentialScope(integration.value.settings?.[field]??settingProperties.value[field]?.defaultTo)||!methods.includes(integration.value.authentication.method)?{method:methods[0]}:integration.value.authentication;const accountModes=getProviderAccountModes(props.provider,settings);const accountMode=accountModes.includes(integration.value.accountMode)?integration.value.accountMode:accountModes[0];if(authentication.method===`oauth2`&&!authentication.registrationRef)editAuthentication(`oauth2`,{...integration.value,settings,scopes,authentication,accountMode});else editIntegration({settings,scopes,authentication,accountMode})}function editAuthentication(method,current=integration.value){const settings={...current.settings};for(const field of props.provider.settingsFields||[])if(field.authenticationMethods&&!field.authenticationMethods.includes(method))delete settings[field.name];const scopes=getProviderScopes(props.provider,settings,`authorization_code`,method).filter(scope=>current.scopes.includes(scope.value)||scope.required||scope.authenticationMethods&&scope.recommended).map(scope=>scope.value);if(method===`oauth2`){let id=props.integrationId;let suffix=2;while(Object.hasOwn(props.modelValue.registrations,id))id=`${props.integrationId}-${suffix++}`;const prefix=id.toUpperCase().replaceAll(`-`,`_`);const grant=props.provider.oauthGrantTypes?.[0]||`authorization_code`;const clientAuthentication=getProviderClientAuthenticationMethods(props.provider,grant,settings)[0];emit(`update:modelValue`,{...props.modelValue,integrations:{...props.modelValue.integrations,[props.integrationId]:{...current,scopes,authentication:{method,registrationRef:id},...current.settings?{settings}:{}}},registrations:{...props.modelValue.registrations,[id]:{source:`own`,clientId:``,...grant===`authorization_code`?{callbackUrlRef:`env:${prefix}_CALLBACK_URL`}:{grantType:grant},...clientAuthentication!==`client_secret_post`?{tokenEndpointAuthMethod:clientAuthentication}:{},...clientAuthentication!==`none`?{clientSecretRef:`env:${prefix}_CLIENT_SECRET`}:{}}}});return}editIntegration({scopes,authentication:{method},...current.settings?{settings}:{}})}function editSecretReference(value){const authentication={...integration.value.authentication,secretRef:value};if(!value&&props.provider.apiKeySecretOptional)delete authentication.secretRef;editIntegration({authentication})}function editRegistration(field,value){emit(`update:modelValue`,{...props.modelValue,registrations:{...props.modelValue.registrations,[registrationId.value]:{...registration.value,[field]:value}}})}function editGrantType(value){const nextRegistration={...registration.value,grantType:value};const methods=getProviderClientAuthenticationMethods(props.provider,value,integration.value.settings||{});if(!methods.includes(nextRegistration.tokenEndpointAuthMethod||`client_secret_post`))nextRegistration.tokenEndpointAuthMethod=methods[0];if(nextRegistration.tokenEndpointAuthMethod===`none`)delete nextRegistration.clientSecretRef;if(value===`client_credentials`)delete nextRegistration.callbackUrlRef;const allowed=getProviderScopes(props.provider,integration.value.settings||{},value,integration.value.authentication.method).map(scope=>scope.value);emit(`update:modelValue`,{...props.modelValue,registrations:{...props.modelValue.registrations,[registrationId.value]:nextRegistration},integrations:{...props.modelValue.integrations,[props.integrationId]:{...integration.value,accountMode:value===`client_credentials`&&integration.value.accountMode===`per-user`?props.provider.accountModes.find(mode=>mode!==`per-user`):integration.value.accountMode,scopes:integration.value.scopes.filter(scope=>allowed.includes(scope))}}})}return(_ctx,_cache)=>{return integration.value?(openBlock(),createBlock(VSheet,{key:0,class:`integration-fields`,"aria-label":`${__props.provider.name} configuration`},{default:withCtx(()=>[createVNode(VExpansionPanels,{modelValue:panels.value,"onUpdate:modelValue":_cache[9]||(_cache[9]=$event=>panels.value=$event),multiple:``,variant:`accordion`,disabled:__props.disabled},{default:withCtx(()=>[createVNode(VExpansionPanel,{value:`details`,title:`Details`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createVNode(VTextField,{label:`Display name`,"model-value":integration.value.displayName||``,disabled:__props.disabled,placeholder:__props.provider.name,"error-messages":__props.fieldErrors[`${integrationPath.value}.displayName`],"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>editIntegration({displayName:$event||void 0}))},null,8,[`model-value`,`disabled`,`placeholder`,`error-messages`]),createVNode(VSelect,{label:`Account used by the application`,items:modes.value,"model-value":integration.value.accountMode,disabled:__props.disabled,"error-messages":__props.fieldErrors[`${integrationPath.value}.accountMode`],"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>editIntegration({accountMode:$event}))},null,8,[`items`,`model-value`,`disabled`,`error-messages`])]),_:1})]),_:1}),createVNode(VExpansionPanel,{value:`credentials`,title:`Credentials`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[authenticationOptions.value.length>1?(openBlock(),createBlock(VSelect,{key:0,label:`Authentication`,items:authenticationOptions.value,"model-value":integration.value.authentication.method,disabled:__props.disabled,hint:__props.provider.authenticationHint,"persistent-hint":Boolean(__props.provider.authenticationHint),"error-messages":__props.fieldErrors[`${integrationPath.value}.authentication.method`],"onUpdate:modelValue":editAuthentication},null,8,[`items`,`model-value`,`disabled`,`hint`,`persistent-hint`,`error-messages`])):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(visibleSettings.value,field=>{return openBlock(),createElementBlock(Fragment,{key:field.name},[field.searchable?(openBlock(),createBlock(VAutocomplete,{key:0,label:field.label,items:field.items,disabled:__props.disabled,"auto-select-first":``,"model-value":integration.value.settings?.[field.name]??settingProperties.value[field.name]?.defaultTo,hint:typeof field.hint===`function`?field.hint(integration.value.settings):field.hint,"persistent-hint":``,"error-messages":__props.fieldErrors[`${integrationPath.value}.settings.${field.name}`],"onUpdate:modelValue":$event=>editSetting(field.name,$event)},null,8,[`label`,`items`,`disabled`,`model-value`,`hint`,`error-messages`,`onUpdate:modelValue`])):field.items?(openBlock(),createBlock(VSelect,{key:1,label:field.label,items:field.items,disabled:__props.disabled,"model-value":integration.value.settings?.[field.name]??settingProperties.value[field.name]?.defaultTo,hint:field.hint,"persistent-hint":``,"error-messages":__props.fieldErrors[`${integrationPath.value}.settings.${field.name}`],"onUpdate:modelValue":$event=>editSetting(field.name,$event)},null,8,[`label`,`items`,`disabled`,`model-value`,`hint`,`error-messages`,`onUpdate:modelValue`])):(openBlock(),createBlock(VTextField,{key:2,label:field.label,disabled:__props.disabled,placeholder:field.placeholder,"model-value":integration.value.settings?.[field.name]??settingProperties.value[field.name]?.defaultTo??``,hint:field.hint,"persistent-hint":``,"error-messages":__props.fieldErrors[`${integrationPath.value}.settings.${field.name}`],"onUpdate:modelValue":$event=>editSetting(field.name,$event)},null,8,[`label`,`disabled`,`placeholder`,`model-value`,`hint`,`error-messages`,`onUpdate:modelValue`]))],64)}),128)),[`api-key`,`service-account`].includes(integration.value.authentication.method)?renderSlot(_ctx.$slots,`credential`,{reference:integration.value.authentication.secretRef,disabled:__props.disabled},()=>[createVNode(VTextField,{label:integration.value.authentication.method===`service-account`?__props.provider.serviceAccountReferenceLabel||`Service-account credential reference`:__props.provider.apiKeyReferenceLabel||`API key reference`,"model-value":integration.value.authentication.secretRef,disabled:__props.disabled,hint:integration.value.authentication.method===`service-account`?__props.provider.serviceAccountReferenceHint||`Store the service credential in your environment or secret store and enter its reference here.`:__props.provider.apiKeyReferenceHint||`Store the API key in your environment or secret store. Enter its reference here, such as env:SERVICE_API_KEY.`,"persistent-hint":``,"error-messages":__props.fieldErrors[`${integrationPath.value}.authentication.secretRef`],"onUpdate:modelValue":editSecretReference},null,8,[`label`,`model-value`,`disabled`,`hint`,`error-messages`])],true,1):integration.value.authentication.method===`oauth2`?(openBlock(),createElementBlock(Fragment,{key:2},[createVNode(VSelect,{label:`App registration`,items:registrationOptions.value,"model-value":registrationId.value,disabled:__props.disabled,"error-messages":__props.fieldErrors[`${integrationPath.value}.authentication.registrationRef`],"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>editIntegration({authentication:{...integration.value.authentication,registrationRef:$event}}))},null,8,[`items`,`model-value`,`disabled`,`error-messages`]),registration.value?.source===`own`?(openBlock(),createElementBlock(Fragment,{key:0},[grantOptions.value.length>1?(openBlock(),createBlock(VSelect,{key:0,label:`OAuth flow`,items:grantOptions.value,"model-value":grantType.value,disabled:__props.disabled,hint:__props.provider.oauthGrantHint,"persistent-hint":Boolean(__props.provider.oauthGrantHint),"error-messages":__props.fieldErrors[`${registrationPath.value}.grantType`],"onUpdate:modelValue":editGrantType},null,8,[`items`,`model-value`,`disabled`,`hint`,`persistent-hint`,`error-messages`])):createCommentVNode(``,true),createVNode(VTextField,{label:__props.provider.clientIdLabel||`Client ID`,hint:__props.provider.clientIdHint,"persistent-hint":Boolean(__props.provider.clientIdHint),"model-value":registration.value.clientId,autocomplete:`off`,disabled:__props.disabled,"error-messages":__props.fieldErrors[`${registrationPath.value}.clientId`],"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>editRegistration(`clientId`,$event))},null,8,[`label`,`hint`,`persistent-hint`,`model-value`,`disabled`,`error-messages`]),registration.value.tokenEndpointAuthMethod!==`none`?renderSlot(_ctx.$slots,`credential`,{reference:registration.value.clientSecretRef,disabled:__props.disabled},()=>[createVNode(VTextField,{label:`Client secret reference`,"model-value":registration.value.clientSecretRef,disabled:__props.disabled,hint:`Use an environment reference such as env:GOOGLE_CLIENT_SECRET. Keep the value outside this file.`,"persistent-hint":``,"error-messages":__props.fieldErrors[`${registrationPath.value}.clientSecretRef`],"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>editRegistration(`clientSecretRef`,$event))},null,8,[`model-value`,`disabled`,`error-messages`])],true,1):createCommentVNode(``,true),grantType.value===`authorization_code`?(openBlock(),createBlock(VTextField,{key:2,hint:`Reference the callback route implemented by your application and registered with the provider.`,"persistent-hint":``,class:`mt-4`,label:`Callback URL reference`,"model-value":registration.value.callbackUrlRef,disabled:__props.disabled,"error-messages":__props.fieldErrors[`${registrationPath.value}.callbackUrlRef`],"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>editRegistration(`callbackUrlRef`,$event))},null,8,[`model-value`,`disabled`,`error-messages`])):createCommentVNode(``,true),__props.callbackUrl&&grantType.value===`authorization_code`?(openBlock(),createBlock(VTextField,{key:3,label:`Callback URL`,"model-value":__props.callbackUrl,readonly:``},null,8,[`model-value`])):createCommentVNode(``,true)],64)):createCommentVNode(``,true)],64)):createCommentVNode(``,true)]),_:3})]),_:3}),visibleScopes.value.length&&(__props.provider.scopes.length||__props.provider.permissionsHint||[`oauth2`,`service-account`].includes(integration.value.authentication.method))?(openBlock(),createBlock(VExpansionPanel,{key:0,value:`permissions`,title:`Permissions`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_1$10,toDisplayString(__props.provider.permissionsHint||`Choose what the application needs. The account owner approves these permissions when connecting.`),1),(openBlock(true),createElementBlock(Fragment,null,renderList(visibleScopes.value,permission=>{return openBlock(),createBlock(VCheckbox,{key:permission.value,label:permission.label,value:permission.value,"model-value":integration.value.scopes,disabled:__props.disabled||permission.required,"hide-details":``,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>editIntegration({scopes:$event}))},null,8,[`label`,`value`,`model-value`,`disabled`])}),128)),__props.fieldErrors[`${integrationPath.value}.scopes`]?(openBlock(),createElementBlock(`p`,_hoisted_2$7,toDisplayString(__props.fieldErrors[`${integrationPath.value}.scopes`]),1)):createCommentVNode(``,true)]),_:1})]),_:1})):createCommentVNode(``,true),__props.provider.assistantActions?.length?(openBlock(),createBlock(VExpansionPanel,{key:1,value:`assistant`,title:`Assistant permissions`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[_cache[10]||(_cache[10]=createBaseVNode(`p`,{class:`text-body-medium mb-3`},`These choices control assistant actions for this integration. They do not grant access to the provider or replace your application's permissions.`,-1)),createVNode(VSwitch,{label:`Allow assistant access`,"model-value":integration.value.assistantPolicy?.enabled??true,disabled:__props.disabled,"error-messages":__props.fieldErrors[`${integrationPath.value}.assistantPolicy.enabled`],"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>editAssistantPolicy({enabled:$event}))},null,8,[`model-value`,`disabled`,`error-messages`]),createVNode(VSelect,{label:`Manage all permissions`,items:assistantPermissions,"model-value":integration.value.assistantPolicy?.defaultPermission||`ask`,disabled:__props.disabled||integration.value.assistantPolicy?.enabled===false,hint:`Changing this sets every assistant action below to the same choice.`,"persistent-hint":``,"error-messages":__props.fieldErrors[`${integrationPath.value}.assistantPolicy.defaultPermission`],"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>editAssistantPolicy({defaultPermission:$event,actions:{}}))},null,8,[`model-value`,`disabled`,`error-messages`]),(openBlock(true),createElementBlock(Fragment,null,renderList(__props.provider.assistantActions,action=>{return openBlock(),createBlock(VSelect,{key:action.value,label:action.label,items:assistantPermissions,"model-value":integration.value.assistantPolicy?.actions?.[action.value]||integration.value.assistantPolicy?.defaultPermission||`ask`,disabled:__props.disabled||integration.value.assistantPolicy?.enabled===false,"error-messages":__props.fieldErrors[`${integrationPath.value}.assistantPolicy.actions.${action.value}`],"onUpdate:modelValue":$event=>editAssistantPolicy({actions:{...integration.value.assistantPolicy?.actions,[action.value]:$event}})},null,8,[`label`,`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`])}),128))]),_:1})]),_:1})):createCommentVNode(``,true)]),_:3},8,[`modelValue`,`disabled`]),renderSlot(_ctx.$slots,`access`,{integration:integration.value},void 0,true)]),_:3},8,[`aria-label`])):createCommentVNode(``,true)}}};var IntegrationConfigurationFields_default=_plugin_vue_export_helper_default(_sfc_main$21,[[`__scopeId`,`data-v-5cec349f`]]);var client_exports$6=__exportAll({IntegrationConfigurationFields:()=>IntegrationConfigurationFields_default});var _hoisted_1$9={class:`crud-screen crud-screen--operator crud-add-edit-form d-flex flex-column ga-4`};var _hoisted_2$6={class:`crud-add-edit-form__actions`};var _hoisted_3$6={key:0,class:`crud-add-edit-form__state`};var _hoisted_4$5={class:`text-body-2 text-medium-emphasis mb-4`};var _hoisted_5$5={key:1,class:`pa-4`};var _sfc_main$20={__name:`CrudAddEditScreen`,props:{screen:{type:Object,required:true},resolveLookupItems:{type:Function,default:null},resolveLookupLoading:{type:Function,default:null},resolveLookupSearch:{type:Function,default:null},setLookupSearch:{type:Function,default:null}},setup(__props){const props=__props;const formRuntime=computed(()=>props.screen?.formRuntime||{});const addEdit=computed(()=>props.screen?.addEdit||formRuntime.value?.addEdit||{});const formState=computed(()=>props.screen?.formState||formRuntime.value?.form||{});const mode=computed(()=>String(unref(props.screen?.mode)||`new`).trim()||`new`);const saveLabel=computed(()=>String(unref(props.screen?.saveLabel)||`Save`).trim()||`Save`);const cancelTo=computed(()=>unref(props.screen?.cancelTo)||``);function resolveFieldErrors(fieldKey){if(typeof props.screen?.resolveFieldErrors===`function`)return props.screen.resolveFieldErrors(fieldKey);if(typeof formRuntime.value?.resolveFieldErrors===`function`)return formRuntime.value.resolveFieldErrors(fieldKey);return[]}function resolveCancelTo(target=cancelTo.value){if(typeof props.screen?.resolveCancelTo===`function`)return props.screen.resolveCancelTo(target);return target||``}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$9,[createBaseVNode(`div`,_hoisted_2$6,[renderSlot(_ctx.$slots,`actions`,{screen:__props.screen,mode:mode.value,formRuntime:formRuntime.value,formState:formState.value,addEdit:addEdit.value,saveLabel:saveLabel.value,cancelTo:resolveCancelTo(),submit:addEdit.value.submit},()=>[cancelTo.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`outlined`,to:resolveCancelTo(cancelTo.value)},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`to`])):createCommentVNode(``,true),createVNode(VBtn,{color:`primary`,variant:`flat`,disabled:addEdit.value.isSubmitDisabled,onClick:addEdit.value.submit},{default:withCtx(()=>[createTextVNode(toDisplayString(addEdit.value.isSaving?`Saving…`:saveLabel.value),1)]),_:1},8,[`disabled`,`onClick`])],true)]),createVNode(VSheet,{rounded:`lg`,border:``,class:`crud-add-edit-form__panel`},{default:withCtx(()=>[addEdit.value.loadError?(openBlock(),createElementBlock(`div`,_hoisted_3$6,[createBaseVNode(`p`,_hoisted_4$5,toDisplayString(addEdit.value.loadError),1),addEdit.value.canRetryLoad?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`tonal`,disabled:addEdit.value.isFetching,onClick:addEdit.value.refresh},{default:withCtx(()=>[createTextVNode(toDisplayString(addEdit.value.isFetching?`Retrying…`:`Retry`),1)]),_:1},8,[`disabled`,`onClick`])):createCommentVNode(``,true)])):formRuntime.value.showFormSkeleton?(openBlock(),createElementBlock(`div`,_hoisted_5$5,[createVNode(VSkeletonLoader,{type:`text@2, article`})])):(openBlock(),createBlock(VForm,{key:2,class:`pa-4`,onSubmit:withModifiers(addEdit.value.submit,[`prevent`]),novalidate:``},{default:withCtx(()=>[createVNode(VRow,{class:`crud-add-edit-form__fields`},{default:withCtx(()=>[renderSlot(_ctx.$slots,`fields`,{mode:mode.value,formRuntime:formRuntime.value,formState:formState.value,addEdit:addEdit.value,resolveFieldErrors,resolveLookupItems:__props.resolveLookupItems,resolveLookupLoading:__props.resolveLookupLoading,resolveLookupSearch:__props.resolveLookupSearch,setLookupSearch:__props.setLookupSearch},void 0,true)]),_:3})]),_:3},8,[`onSubmit`]))]),_:3})])}}};var CrudAddEditScreen_default=_plugin_vue_export_helper_default(_sfc_main$20,[[`__scopeId`,`data-v-24dfd81e`]]);var _sfc_main$19={__name:`CrudDeleteAction`,props:{action:{type:Object,required:true},resourceSingularTitle:{type:String,default:`Record`}},setup(__props){const props=__props;const resourceLabel=computed(()=>String(props.resourceSingularTitle||`Record`).trim()||`Record`);const componentId=useId();const titleId=`${componentId}-delete-title`;const descriptionId=`${componentId}-delete-description`;function closeDialog(){props.action.cancel()}function handleDialogModelUpdate(isOpen){if(!isOpen)closeDialog()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VBtn,{color:`error`,variant:`tonal`,"prepend-icon":unref(mdiDeleteOutline),"min-height":`48`,disabled:!__props.action.canDelete,onClick:__props.action.request},{default:withCtx(()=>[createTextVNode(` Delete `+toDisplayString(resourceLabel.value),1)]),_:1},8,[`prepend-icon`,`disabled`,`onClick`]),createVNode(VDialog,{"model-value":__props.action.isOpen,"max-width":`32rem`,role:`alertdialog`,"aria-modal":`true`,"aria-labelledby":titleId,"aria-describedby":descriptionId,persistent:__props.action.isDeleting,"onUpdate:modelValue":handleDialogModelUpdate},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardTitle,{id:titleId},{default:withCtx(()=>[createTextVNode(`Delete `+toDisplayString(resourceLabel.value)+`?`,1)]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`p`,{id:descriptionId,class:`mb-0`},` This permanently deletes this `+toDisplayString(resourceLabel.value.toLowerCase())+`. This action cannot be undone. `,1),__props.action.error?(openBlock(),createBlock(VAlert,{key:0,class:`mt-4`,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.action.error),1)]),_:1})):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{autofocus:``,variant:`text`,disabled:__props.action.isDeleting,onClick:closeDialog},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(` Cancel `,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`error`,variant:`flat`,disabled:!__props.action.canDelete,onClick:__props.action.confirm},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.action.isDeleting?`Deleting…`:`Delete`),1)]),_:1},8,[`disabled`,`onClick`])]),_:1})]),_:1})]),_:1},8,[`model-value`,`persistent`])],64)}}};var _hoisted_1$8={key:0,class:`crud-list-bulk-action-surface`};var _hoisted_2$5={class:`crud-list-bulk-action-surface__summary`};var _hoisted_3$5={class:`crud-list-bulk-action-surface__copy`};var _hoisted_4$4={class:`text-overline text-medium-emphasis`};var _hoisted_5$4={key:0,class:`crud-list-bulk-action-surface__actions`};var _sfc_main$18={__name:`CrudListBulkActionSurface`,props:{runtime:{type:Object,default:null},title:{type:String,default:`Selection`}},setup(__props){const props=__props;const display=useDisplay();const isCompactLayout=computed(()=>{const displayName=String(display?.name?.value||``).trim().toLowerCase();return displayName===`xs`||displayName===`sm`});const actions=computed(()=>Array.isArray(props.runtime?.actions)?props.runtime.actions:[]);const selectedCount=computed(()=>Number(props.runtime?.selectedCount?.value||0));const shouldRender=computed(()=>Boolean(props.runtime?.hasActions?.value)&&Boolean(props.runtime?.hasSelection?.value)&&selectedCount.value>0);function clearSelection(){props.runtime?.clearSelection?.()}function execute(action={}){props.runtime?.execute?.(action)}function isActionDisabled(action={}){return Boolean(props.runtime?.isActionDisabled?.(action))}function isActionExecuting(action={}){return Boolean(props.runtime?.isActionExecuting?.(action))}return(_ctx,_cache)=>{return shouldRender.value?(openBlock(),createElementBlock(`section`,_hoisted_1$8,[createBaseVNode(`div`,_hoisted_2$5,[createBaseVNode(`div`,_hoisted_3$5,[createBaseVNode(`span`,_hoisted_4$4,toDisplayString(__props.title),1),createBaseVNode(`strong`,null,toDisplayString(selectedCount.value)+` selected`,1)]),createVNode(VBtn,{size:`small`,variant:`text`,onClick:clearSelection},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(`Clear`,-1)])]),_:1})]),!isCompactLayout.value?(openBlock(),createElementBlock(`div`,_hoisted_5$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(actions.value,action=>{return openBlock(),createBlock(VBtn,{key:action.key,color:action.color,variant:action.variant,"prepend-icon":action.icon||void 0,disabled:isActionDisabled(action),onClick:$event=>execute(action)},{default:withCtx(()=>[createTextVNode(toDisplayString(isActionExecuting(action)?`${action.label}…`:action.label),1)]),_:2},1032,[`color`,`variant`,`prepend-icon`,`disabled`,`onClick`])}),128))])):(openBlock(),createBlock(VMenu,{key:1,location:`bottom end`},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{color:`primary`,variant:`tonal`}),{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(`Bulk actions`,-1)])]),_:1},16)]),default:withCtx(()=>[createVNode(VList,{density:`compact`,"min-width":`180`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(actions.value,action=>{return openBlock(),createBlock(VListItem,{key:action.key,title:isActionExecuting(action)?`${action.label}…`:action.label,"prepend-icon":action.icon||void 0,disabled:isActionDisabled(action),onClick:$event=>execute(action)},null,8,[`title`,`prepend-icon`,`disabled`,`onClick`])}),128))]),_:1})]),_:1}))])):createCommentVNode(``,true)}}};var CrudListBulkActionSurface_default=_plugin_vue_export_helper_default(_sfc_main$18,[[`__scopeId`,`data-v-03d079ce`]]);var DATE_ONLY_PATTERN=/^(\d{4})-(\d{2})-(\d{2})$/u;function parseDateOnlyValue(value=``){const match=DATE_ONLY_PATTERN.exec(String(value||``).trim());if(!match)return null;const year=Number(match[1]);const month=Number(match[2]);const day=Number(match[3]);const date=new Date(0);date.setHours(12,0,0,0);date.setFullYear(year,month-1,day);if(date.getFullYear()!==year||date.getMonth()!==month-1||date.getDate()!==day)return null;return date}function formatDateOnlyValue(value=null){const source=Array.isArray(value)?value[0]:value;const date=source instanceof Date?source:parseDateOnlyValue(source);if(!(date instanceof Date)||Number.isNaN(date.getTime()))return``;const year=date.getFullYear();if(year<0||year>9999)return``;return[String(year).padStart(4,`0`),String(date.getMonth()+1).padStart(2,`0`),String(date.getDate()).padStart(2,`0`)].join(`-`)}function formatDateOnlyDisplay(value=``,{locale=void 0}={}){const date=parseDateOnlyValue(value);if(!date)return``;try{return new Intl.DateTimeFormat(locale||void 0,{year:`numeric`,month:`short`,day:`numeric`}).format(date)}catch{return formatDateOnlyValue(date)}}var _sfc_main$17=Object.assign({inheritAttrs:false},{__name:`CrudListDateFilterControl`,props:{modelValue:{type:String,default:``},label:{type:String,required:true},controlId:{type:String,default:``},placeholder:{type:String,default:`Select date`},disabled:{type:Boolean,default:false},readonly:{type:Boolean,default:false}},emits:[`update:modelValue`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const attrs=useAttrs();const{current:currentLocale}=useLocale();const generatedId=useId();const menuOpen=ref(false);const textFieldRef=ref(null);const resolvedControlId=computed(()=>props.controlId||`crud-list-date-${generatedId}`);const pickerId=computed(()=>`${resolvedControlId.value}-picker`);const pickerValue=computed(()=>parseDateOnlyValue(props.modelValue));const displayValue=computed(()=>formatDateOnlyDisplay(props.modelValue,{locale:currentLocale?.value}));const pickerTitle=computed(()=>`${props.label} calendar`);function restoreFocus(){nextTick$1(()=>{textFieldRef.value?.focus?.()})}function openMenu(){if(props.disabled||props.readonly)return;menuOpen.value=true}function closeMenu(){menuOpen.value=false;restoreFocus()}function clearDate(){if(props.disabled||props.readonly)return;emit(`update:modelValue`,``);closeMenu()}function selectDate(value){const nextValue=formatDateOnlyValue(value);if(!nextValue)return;emit(`update:modelValue`,nextValue);closeMenu()}function handleActivatorKeydown(event){if(![`Enter`,` `,`ArrowDown`].includes(event.key))return;event.preventDefault();openMenu()}return(_ctx,_cache)=>{return openBlock(),createBlock(VMenu,{modelValue:menuOpen.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>menuOpen.value=$event),"close-on-content-click":false,"open-on-click":false,location:`bottom start`,offset:6,"min-width":`0`},{activator:withCtx(({props:activatorProps})=>[createVNode(VTextField,mergeProps({...unref(attrs),...activatorProps},{id:resolvedControlId.value,ref_key:`textFieldRef`,ref:textFieldRef,"model-value":displayValue.value,label:__props.label,placeholder:__props.placeholder,"aria-label":__props.label,"aria-controls":pickerId.value,"aria-expanded":String(menuOpen.value),"aria-haspopup":`dialog`,"data-date-filter-control":resolvedControlId.value,"append-inner-icon":`$calendar`,disabled:__props.disabled,clearable:Boolean(__props.modelValue)&&!__props.disabled&&!__props.readonly,"persistent-clear":``,"persistent-placeholder":``,readonly:``,inputmode:`none`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,class:`crud-list-date-filter-control`,"onClick:control":openMenu,"onClick:appendInner":openMenu,"onClick:clear":withModifiers(clearDate,[`stop`]),onKeydown:handleActivatorKeydown}),null,16,[`id`,`model-value`,`label`,`placeholder`,`aria-label`,`aria-controls`,`aria-expanded`,`data-date-filter-control`,`disabled`,`clearable`])]),default:withCtx(()=>[createVNode(VCard,{id:pickerId.value,"aria-label":pickerTitle.value,role:`dialog`,class:`crud-list-date-filter-control__picker`,onKeydown:withKeys(withModifiers(closeMenu,[`stop`,`prevent`]),[`esc`])},{default:withCtx(()=>[createVNode(VDatePicker,{"model-value":pickerValue.value,title:pickerTitle.value,header:__props.label,disabled:__props.disabled||__props.readonly,color:`primary`,"show-adjacent-months":``,width:`100%`,"onUpdate:modelValue":selectDate},null,8,[`model-value`,`title`,`header`,`disabled`]),createVNode(VDivider),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{variant:`text`,disabled:__props.disabled||__props.readonly||!__props.modelValue,onClick:clearDate},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Clear `,-1)])]),_:1},8,[`disabled`]),createVNode(VSpacer),createVNode(VBtn,{color:`primary`,variant:`text`,onClick:closeMenu},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Close`,-1)])]),_:1})]),_:1})]),_:1},8,[`id`,`aria-label`,`onKeydown`])]),_:1},8,[`modelValue`])}}});var CrudListDateFilterControl_default=_plugin_vue_export_helper_default(_sfc_main$17,[[`__scopeId`,`data-v-75e78026`]]);var _hoisted_1$7={key:0,class:`crud-list-filter-surface`};var _hoisted_2$4={class:`crud-list-filter-surface__summary`};var _hoisted_3$4={key:1,class:`crud-list-filter-surface__chips`};var _hoisted_4$3={class:`crud-list-filter-surface__controls`};var _hoisted_5$3=[`aria-label`,`data-filter-key`];var _hoisted_6$3={key:5,class:`crud-list-filter-surface__range`};var _hoisted_7$3={class:`crud-list-filter-surface__controls crud-list-filter-surface__controls--stacked`};var _hoisted_8$3=[`aria-label`,`data-filter-key`];var _hoisted_9$1={key:5,class:`crud-list-filter-surface__range`};var _sfc_main$16={__name:`CrudListFilterSurface`,props:{filters:{type:Object,default:()=>({})},runtime:{type:Object,default:null},title:{type:String,default:`Filters`}},setup(__props){const props=__props;const display=useDisplay();const sheetOpen=ref(false);const filterEntries=computed(()=>Object.values(props.filters&&typeof props.filters===`object`&&!Array.isArray(props.filters)?props.filters:{}).filter(filter=>filter?.key&&filter?.type));const runtimeValues=computed(()=>props.runtime?.values||{});const activeChips=computed(()=>Array.isArray(props.runtime?.activeChips?.value)?props.runtime.activeChips.value:[]);const hasActiveFilters=computed(()=>Boolean(props.runtime?.hasActiveFilters?.value));const shouldRender=computed(()=>filterEntries.value.length>0&&Boolean(props.runtime?.values));const isCompactLayout=computed(()=>{const displayName=String(display?.name?.value||``).trim().toLowerCase();return displayName===`xs`||displayName===`sm`});function optionItems(filter={}){return Array.isArray(filter.options)?filter.options:[]}function placeholder(filter={},fallback=``){return String(filter?.ui?.placeholder||fallback||``).trim()}function clearChip(chip={}){props.runtime?.clearChip?.(chip)}function clearFilters(){props.runtime?.clearFilters?.()}return(_ctx,_cache)=>{return shouldRender.value?(openBlock(),createElementBlock(`section`,_hoisted_1$7,[createBaseVNode(`div`,_hoisted_2$4,[isCompactLayout.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`tonal`,class:`crud-list-filter-surface__open`,onClick:_cache[0]||(_cache[0]=$event=>sheetOpen.value=true)},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.title)+` `,1),activeChips.value.length>0?(openBlock(),createBlock(VChip,{key:0,class:`ml-2`,size:`x-small`,color:`primary`,variant:`flat`},{default:withCtx(()=>[createTextVNode(toDisplayString(activeChips.value.length),1)]),_:1})):createCommentVNode(``,true)]),_:1})):createCommentVNode(``,true),hasActiveFilters.value?(openBlock(),createElementBlock(`div`,_hoisted_3$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(activeChips.value,chip=>{return openBlock(),createBlock(VChip,{key:chip.id,closable:``,size:`small`,variant:`tonal`,"onClick:close":$event=>clearChip(chip)},{default:withCtx(()=>[createTextVNode(toDisplayString(chip.label),1)]),_:2},1032,[`onClick:close`])}),128)),createVNode(VBtn,{size:`small`,variant:`text`,onClick:clearFilters},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Clear all`,-1)])]),_:1})])):createCommentVNode(``,true)]),!isCompactLayout.value?(openBlock(),createBlock(VSheet,{key:0,rounded:`lg`,border:``,class:`crud-list-filter-surface__panel`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_4$3,[(openBlock(true),createElementBlock(Fragment,null,renderList(filterEntries.value,filter=>{return openBlock(),createElementBlock(Fragment,{key:filter.key},[filter.type===`flag`?(openBlock(),createBlock(VSwitch,{key:0,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,color:`primary`,density:`comfortable`,"hide-details":``,class:`crud-list-filter-surface__control`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`])):filter.type===`enum`||filter.type===`enumMany`||filter.type===`presence`?(openBlock(),createBlock(VSelect,{key:1,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,items:optionItems(filter),label:filter.label,placeholder:placeholder(filter),multiple:filter.type===`enumMany`,chips:filter.type===`enumMany`,"closable-chips":filter.type===`enumMany`,clearable:``,"item-title":`label`,"item-value":`value`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,class:`crud-list-filter-surface__control`},null,8,[`modelValue`,`onUpdate:modelValue`,`items`,`label`,`placeholder`,`multiple`,`chips`,`closable-chips`])):filter.type===`recordIdMany`?(openBlock(),createBlock(VCombobox,{key:2,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,placeholder:placeholder(filter,`Enter ids`),multiple:``,chips:``,"closable-chips":``,clearable:``,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,class:`crud-list-filter-surface__control`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`placeholder`])):filter.type===`recordId`?(openBlock(),createBlock(VTextField,{key:3,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,placeholder:placeholder(filter,`Enter id`),clearable:``,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,class:`crud-list-filter-surface__control`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`placeholder`])):filter.type===`dateRange`?(openBlock(),createElementBlock(`div`,{key:4,class:`crud-list-filter-surface__range crud-list-filter-surface__range--date`,role:`group`,"aria-label":`${filter.label} date range`,"data-filter-key":filter.key,"data-filter-type":`date-range`},[createVNode(CrudListDateFilterControl_default,{modelValue:runtimeValues.value[filter.key].from,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].from=$event,label:`${filter.label} from`,"control-id":`${filter.key}-from`,placeholder:placeholder(filter,`Select start date`)},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`]),createVNode(CrudListDateFilterControl_default,{modelValue:runtimeValues.value[filter.key].to,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].to=$event,label:`${filter.label} to`,"control-id":`${filter.key}-to`,placeholder:placeholder(filter,`Select end date`)},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`])],8,_hoisted_5$3)):filter.type===`numberRange`?(openBlock(),createElementBlock(`div`,_hoisted_6$3,[createVNode(VTextField,{modelValue:runtimeValues.value[filter.key].min,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].min=$event,label:`${filter.label} min`,type:`number`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`]),createVNode(VTextField,{modelValue:runtimeValues.value[filter.key].max,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].max=$event,label:`${filter.label} max`,type:`number`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`])])):filter.type===`date`?(openBlock(),createBlock(CrudListDateFilterControl_default,{key:6,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,"control-id":filter.key,placeholder:placeholder(filter,`Select date`),class:`crud-list-filter-surface__control`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`])):createCommentVNode(``,true)],64)}),128))])]),_:1})):createCommentVNode(``,true),createVNode(VDialog,{modelValue:sheetOpen.value,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>sheetOpen.value=$event),"max-width":`640`,location:`bottom`},{default:withCtx(()=>[createVNode(VCard,{rounded:`lg`,class:`crud-list-filter-surface__sheet`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`d-flex align-center justify-space-between`},{default:withCtx(()=>[createBaseVNode(`span`,null,toDisplayString(__props.title),1),createVNode(VBtn,{variant:`text`,onClick:_cache[1]||(_cache[1]=$event=>sheetOpen.value=false)},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Close`,-1)])]),_:1})]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_7$3,[(openBlock(true),createElementBlock(Fragment,null,renderList(filterEntries.value,filter=>{return openBlock(),createElementBlock(Fragment,{key:filter.key},[filter.type===`flag`?(openBlock(),createBlock(VSwitch,{key:0,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,color:`primary`,density:`comfortable`,"hide-details":``},null,8,[`modelValue`,`onUpdate:modelValue`,`label`])):filter.type===`enum`||filter.type===`enumMany`||filter.type===`presence`?(openBlock(),createBlock(VSelect,{key:1,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,items:optionItems(filter),label:filter.label,placeholder:placeholder(filter),multiple:filter.type===`enumMany`,chips:filter.type===`enumMany`,"closable-chips":filter.type===`enumMany`,clearable:``,"item-title":`label`,"item-value":`value`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`items`,`label`,`placeholder`,`multiple`,`chips`,`closable-chips`])):filter.type===`recordIdMany`?(openBlock(),createBlock(VCombobox,{key:2,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,placeholder:placeholder(filter,`Enter ids`),multiple:``,chips:``,"closable-chips":``,clearable:``,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`placeholder`])):filter.type===`recordId`?(openBlock(),createBlock(VTextField,{key:3,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,placeholder:placeholder(filter,`Enter id`),clearable:``,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`placeholder`])):filter.type===`dateRange`?(openBlock(),createElementBlock(`div`,{key:4,class:`crud-list-filter-surface__range crud-list-filter-surface__range--date`,role:`group`,"aria-label":`${filter.label} date range`,"data-filter-key":filter.key,"data-filter-type":`date-range`},[createVNode(CrudListDateFilterControl_default,{modelValue:runtimeValues.value[filter.key].from,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].from=$event,label:`${filter.label} from`,"control-id":`${filter.key}-from`,placeholder:placeholder(filter,`Select start date`)},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`]),createVNode(CrudListDateFilterControl_default,{modelValue:runtimeValues.value[filter.key].to,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].to=$event,label:`${filter.label} to`,"control-id":`${filter.key}-to`,placeholder:placeholder(filter,`Select end date`)},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`])],8,_hoisted_8$3)):filter.type===`numberRange`?(openBlock(),createElementBlock(`div`,_hoisted_9$1,[createVNode(VTextField,{modelValue:runtimeValues.value[filter.key].min,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].min=$event,label:`${filter.label} min`,type:`number`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`]),createVNode(VTextField,{modelValue:runtimeValues.value[filter.key].max,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].max=$event,label:`${filter.label} max`,type:`number`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`])])):filter.type===`date`?(openBlock(),createBlock(CrudListDateFilterControl_default,{key:6,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,"control-id":filter.key,placeholder:placeholder(filter,`Select date`)},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`])):createCommentVNode(``,true)],64)}),128))])]),_:1}),createVNode(VCardActions,{class:`justify-space-between`},{default:withCtx(()=>[createVNode(VBtn,{variant:`text`,onClick:clearFilters},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Clear all`,-1)])]),_:1}),createVNode(VBtn,{color:`primary`,variant:`flat`,onClick:_cache[2]||(_cache[2]=$event=>sheetOpen.value=false)},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Apply`,-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`])])):createCommentVNode(``,true)}}};var CrudListFilterSurface_default=_plugin_vue_export_helper_default(_sfc_main$16,[[`__scopeId`,`data-v-5dc35e87`]]);var _sfc_main$15={__name:`CrudListRecordActionMenu`,props:{record:{type:Object,default:()=>({})},index:{type:Number,default:0},rowActions:{type:Object,default:null},viewLocation:{type:Object,default:null},editLocation:{type:Object,default:null},showView:{type:Boolean,default:false},showEdit:{type:Boolean,default:false},buttonLabel:{type:String,default:`Actions`},buttonVariant:{type:String,default:`text`},buttonSize:{type:String,default:`small`}},setup(__props){const props=__props;const visibleRowActions=computed(()=>{if(typeof props.rowActions?.visibleActionsFor!==`function`)return[];return props.rowActions.visibleActionsFor(props.record,props.index)});const hasViewAction=computed(()=>Boolean(props.showView&&props.viewLocation));const hasEditAction=computed(()=>Boolean(props.showEdit&&props.editLocation));const hasActions=computed(()=>hasViewAction.value||hasEditAction.value||visibleRowActions.value.length>0);function isRowActionLoading(action={}){return typeof props.rowActions?.isActionLoading===`function`&&props.rowActions.isActionLoading(action,props.record,props.index)}function isRowActionDisabled(action={}){return typeof props.rowActions?.isActionDisabled!==`function`||props.rowActions.isActionDisabled(action,props.record,props.index)}function runRowAction(action={}){if(typeof props.rowActions?.execute!==`function`)return;props.rowActions.execute(action,props.record,props.index)}return(_ctx,_cache)=>{return hasActions.value?(openBlock(),createBlock(VMenu,{key:0,location:`bottom end`},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{variant:__props.buttonVariant,size:__props.buttonSize}),{default:withCtx(()=>[createTextVNode(toDisplayString(__props.buttonLabel),1)]),_:1},16,[`variant`,`size`])]),default:withCtx(()=>[createVNode(VList,{density:`compact`,"min-width":`150`},{default:withCtx(()=>[hasViewAction.value?(openBlock(),createBlock(VListItem,{key:0,title:`Open`,to:__props.viewLocation},null,8,[`to`])):createCommentVNode(``,true),hasEditAction.value?(openBlock(),createBlock(VListItem,{key:1,title:`Edit`,to:__props.editLocation},null,8,[`to`])):createCommentVNode(``,true),(hasViewAction.value||hasEditAction.value)&&visibleRowActions.value.length>0?(openBlock(),createBlock(VDivider,{key:2})):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(visibleRowActions.value,action=>{return openBlock(),createBlock(VListItem,{key:action.key,title:isRowActionLoading(action)?`${action.label}…`:action.label,"base-color":action.color,disabled:isRowActionDisabled(action),onClick:$event=>runRowAction(action)},createSlots({_:2},[action.icon?{name:`prepend`,fn:withCtx(()=>[createVNode(VIcon,{icon:action.icon},null,8,[`icon`])]),key:`0`}:void 0]),1032,[`title`,`base-color`,`disabled`,`onClick`])}),128))]),_:1})]),_:1})):createCommentVNode(``,true)}}};var _hoisted_1$6={class:`crud-screen crud-screen--operator crud-list-element d-flex flex-column ga-4`};var _hoisted_2$3={class:`crud-list-actions`};var _hoisted_3$3={class:`crud-list-toolbar`};var _hoisted_4$2={key:0,class:`pa-4`};var _hoisted_5$2={key:0,class:`crud-list-state`};var _hoisted_6$2={class:`text-body-2 text-medium-emphasis mb-4`};var _hoisted_7$2={key:1,class:`crud-list-state`};var _hoisted_8$2={class:`text-body-2 text-medium-emphasis mb-4`};var _hoisted_9={class:`crud-list-cards`};var _hoisted_10={class:`crud-list-card__header`};var _hoisted_11={class:`min-w-0`};var _hoisted_12={class:`crud-list-card__title`};var _hoisted_13={class:`text-caption text-medium-emphasis`};var _hoisted_14={class:`crud-list-card__fields`};var _hoisted_15={class:`crud-list-table`};var _hoisted_16={key:0,class:`crud-list-table__select`};var _hoisted_17={key:1,class:`text-right`};var _hoisted_18={key:2,class:`text-right`};var _hoisted_19={key:3,class:`text-right`};var _hoisted_20={key:0,class:`crud-list-table__select`};var _hoisted_21={key:1,class:`text-right`};var _hoisted_22={key:2,class:`text-right`};var _hoisted_23={key:3,class:`text-right`};var _hoisted_24={key:3,class:`d-flex justify-center pa-4`};var _sfc_main$14={__name:`CrudListScreen`,props:{screen:{type:Object,required:true},createLabel:{type:String,default:`New record`},loadErrorBody:{type:String,default:`Check the connection and try again.`},emptyBody:{type:String,default:`Create the first record to start using this workflow.`}},setup(__props){const props=__props;const route=useRoute();const records=computed(()=>props.screen?.records||{});const bulkActions=computed(()=>props.screen?.bulkActions||{});const rowActions=computed(()=>props.screen?.rowActions||{});const listFilters=computed(()=>props.screen?.listFilters||{});const filterRuntime=computed(()=>props.screen?.filterRuntime||null);const displayRows=computed(()=>unref(props.screen?.displayRows)||[]);const selectableRows=computed(()=>unref(props.screen?.selectableRows)||[]);const listPrimaryAction=computed(()=>unref(props.screen?.listPrimaryAction)||``);const hasBulkActions=computed(()=>Boolean(unref(bulkActions.value?.hasActions)));const hasRowActions=computed(()=>Boolean(unref(rowActions.value?.hasActions)));const hasViewUrl=computed(()=>Boolean(props.screen?.hasViewUrl));const hasEditUrl=computed(()=>Boolean(props.screen?.hasEditUrl));function resolveListRecordTitle(record){if(typeof props.screen?.resolveRecordTitle===`function`)return props.screen.resolveRecordTitle(record);return`Record`}function formatListCardValue(value){if(typeof props.screen?.formatListCardValue===`function`)return props.screen.formatListCardValue(value);return value}function resolveViewLocation(record){const path=typeof records.value?.resolveViewUrl===`function`?records.value.resolveViewUrl(record):``;return path?{path,query:route.query}:null}function resolveEditLocation(record){const path=typeof records.value?.resolveEditUrl===`function`?records.value.resolveEditUrl(record):``;return path?{path,query:route.query}:null}function hasRowActionsFor(record,index){return typeof rowActions.value?.hasVisibleActionsFor===`function`&&rowActions.value.hasVisibleActionsFor(record,index)}function isBulkRowSelected(row={}){return typeof bulkActions.value?.isRecordSelected===`function`&&bulkActions.value.isRecordSelected(row.record,row.index)}function setBulkRowSelected(row={},selected=true){if(typeof bulkActions.value?.setRecordSelected!==`function`)return;bulkActions.value.setRecordSelected(row.record,row.index,selected)}function allSelectableRowsSelected(){return selectableRows.value.length>0&&selectableRows.value.every(row=>isBulkRowSelected(row))}function someSelectableRowsSelected(){return selectableRows.value.some(row=>isBulkRowSelected(row))}function setSelectableRowsSelected(selected=true){if(typeof bulkActions.value?.setRecordSelected!==`function`)return;for(const row of selectableRows.value)bulkActions.value.setRecordSelected(row.record,row.index,selected)}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$6,[createBaseVNode(`div`,_hoisted_2$3,[createVNode(VBtn,{color:`primary`,variant:`tonal`,disabled:records.value.isFetching,onClick:records.value.reload},{default:withCtx(()=>[createTextVNode(toDisplayString(records.value.isFetching?`Refreshing…`:`Refresh`),1)]),_:1},8,[`disabled`,`onClick`]),listPrimaryAction.value?(openBlock(),createBlock(VBtn,{key:0,class:`crud-list-primary-action`,color:`primary`,variant:`flat`,to:listPrimaryAction.value},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.createLabel),1)]),_:1},8,[`to`])):createCommentVNode(``,true)]),createVNode(VSheet,{rounded:`lg`,border:``,class:`crud-list-panel`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_3$3,[records.value.searchEnabled?(openBlock(),createBlock(VTextField,{key:0,modelValue:records.value.searchQuery,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>records.value.searchQuery=$event),label:records.value.searchLabel,placeholder:records.value.searchPlaceholder,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,clearable:``,class:`crud-list-search`,"aria-busy":records.value.isSearchDebouncing?`true`:void 0},null,8,[`modelValue`,`label`,`placeholder`,`aria-busy`])):createCommentVNode(``,true),createVNode(CrudListFilterSurface_default,{filters:listFilters.value,runtime:filterRuntime.value},null,8,[`filters`,`runtime`])]),createVNode(CrudListBulkActionSurface_default,{runtime:bulkActions.value},null,8,[`runtime`]),records.value.showListSkeleton?(openBlock(),createElementBlock(`div`,_hoisted_4$2,[createVNode(VSkeletonLoader,{type:`text@2, list-item-two-line@5`})])):(openBlock(),createElementBlock(Fragment,{key:1},[records.value.loadError?(openBlock(),createElementBlock(`div`,_hoisted_5$2,[createBaseVNode(`p`,_hoisted_6$2,toDisplayString(__props.loadErrorBody),1),createVNode(VBtn,{color:`primary`,variant:`tonal`,disabled:records.value.isFetching,onClick:records.value.reload},{default:withCtx(()=>[createTextVNode(toDisplayString(records.value.isFetching?`Retrying…`:`Retry`),1)]),_:1},8,[`disabled`,`onClick`])])):displayRows.value.length<1?(openBlock(),createElementBlock(`div`,_hoisted_7$2,[createBaseVNode(`p`,_hoisted_8$2,toDisplayString(__props.emptyBody),1),listPrimaryAction.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`flat`,to:listPrimaryAction.value},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.createLabel),1)]),_:1},8,[`to`])):createCommentVNode(``,true)])):(openBlock(),createElementBlock(Fragment,{key:2},[createBaseVNode(`div`,_hoisted_9,[(openBlock(true),createElementBlock(Fragment,null,renderList(displayRows.value,row=>{return openBlock(),createBlock(VSheet,{key:row.key,rounded:`lg`,border:``,class:`crud-list-card`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_10,[hasBulkActions.value&&row.selectable!==false?(openBlock(),createBlock(VCheckboxBtn,{key:0,"model-value":isBulkRowSelected(row),"aria-label":`Select ${resolveListRecordTitle(row.record)}`,class:`crud-list-card__select`,"onUpdate:modelValue":$event=>setBulkRowSelected(row,$event)},null,8,[`model-value`,`aria-label`,`onUpdate:modelValue`])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_11,[createBaseVNode(`div`,_hoisted_12,toDisplayString(resolveListRecordTitle(row.record)),1),createBaseVNode(`div`,_hoisted_13,toDisplayString(row.recordKey),1)]),hasViewUrl.value||hasEditUrl.value||hasRowActionsFor(row.record,row.index)?(openBlock(),createBlock(_sfc_main$15,{key:1,record:row.record,index:row.index,"row-actions":rowActions.value,"show-view":hasViewUrl.value&&!row.synthetic,"show-edit":hasEditUrl.value&&!row.synthetic,"view-location":resolveViewLocation(row.record),"edit-location":resolveEditLocation(row.record)},null,8,[`record`,`index`,`row-actions`,`show-view`,`show-edit`,`view-location`,`edit-location`])):createCommentVNode(``,true)]),createBaseVNode(`div`,_hoisted_14,[renderSlot(_ctx.$slots,`card-fields`,{record:row.record,records:records.value,index:row.index,row,formatListCardValue},void 0,true)])]),_:2},1024)}),128))]),createBaseVNode(`div`,_hoisted_15,[createVNode(VTable,{density:`comfortable`},{default:withCtx(()=>[createBaseVNode(`thead`,null,[createBaseVNode(`tr`,null,[hasBulkActions.value?(openBlock(),createElementBlock(`th`,_hoisted_16,[createVNode(VCheckboxBtn,{"model-value":allSelectableRowsSelected(),indeterminate:someSelectableRowsSelected()&&!allSelectableRowsSelected(),"aria-label":`Select visible rows`,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>setSelectableRowsSelected($event))},null,8,[`model-value`,`indeterminate`])])):createCommentVNode(``,true),renderSlot(_ctx.$slots,`table-header`,{},void 0,true),hasViewUrl.value?(openBlock(),createElementBlock(`th`,_hoisted_17)):createCommentVNode(``,true),hasEditUrl.value?(openBlock(),createElementBlock(`th`,_hoisted_18)):createCommentVNode(``,true),hasRowActions.value?(openBlock(),createElementBlock(`th`,_hoisted_19)):createCommentVNode(``,true)])]),createBaseVNode(`tbody`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(displayRows.value,row=>{return openBlock(),createElementBlock(`tr`,{key:row.key},[hasBulkActions.value?(openBlock(),createElementBlock(`td`,_hoisted_20,[row.selectable!==false?(openBlock(),createBlock(VCheckboxBtn,{key:0,"model-value":isBulkRowSelected(row),"aria-label":`Select ${resolveListRecordTitle(row.record)}`,"onUpdate:modelValue":$event=>setBulkRowSelected(row,$event)},null,8,[`model-value`,`aria-label`,`onUpdate:modelValue`])):createCommentVNode(``,true)])):createCommentVNode(``,true),renderSlot(_ctx.$slots,`table-row`,{record:row.record,records:records.value,index:row.index,row},void 0,true),hasViewUrl.value?(openBlock(),createElementBlock(`td`,_hoisted_21,[!row.synthetic?(openBlock(),createBlock(VBtn,{key:0,size:`small`,color:`primary`,variant:`outlined`,to:resolveViewLocation(row.record),disabled:!resolveViewLocation(row.record)},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(` Open `,-1)])]),_:1},8,[`to`,`disabled`])):createCommentVNode(``,true)])):createCommentVNode(``,true),hasEditUrl.value?(openBlock(),createElementBlock(`td`,_hoisted_22,[!row.synthetic?(openBlock(),createBlock(VBtn,{key:0,size:`small`,color:`primary`,variant:`tonal`,to:resolveEditLocation(row.record),disabled:!resolveEditLocation(row.record)},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Edit `,-1)])]),_:1},8,[`to`,`disabled`])):createCommentVNode(``,true)])):createCommentVNode(``,true),hasRowActions.value?(openBlock(),createElementBlock(`td`,_hoisted_23,[hasRowActionsFor(row.record,row.index)?(openBlock(),createBlock(_sfc_main$15,{key:0,record:row.record,index:row.index,"row-actions":rowActions.value,"button-label":`More`,"button-variant":`outlined`},null,8,[`record`,`index`,`row-actions`])):createCommentVNode(``,true)])):createCommentVNode(``,true)])}),128))])]),_:3})])],64)),records.value.hasMore?(openBlock(),createElementBlock(`div`,_hoisted_24,[createVNode(VBtn,{color:`primary`,variant:`outlined`,disabled:records.value.isLoadingMore,onClick:records.value.loadMore},{default:withCtx(()=>[createTextVNode(toDisplayString(records.value.isLoadingMore?`Loading more…`:`Load more`),1)]),_:1},8,[`disabled`,`onClick`])])):createCommentVNode(``,true)],64))]),_:3}),listPrimaryAction.value?(openBlock(),createBlock(VBtn,{key:0,class:`crud-list-fab`,color:`primary`,variant:`flat`,to:listPrimaryAction.value},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.createLabel),1)]),_:1},8,[`to`])):createCommentVNode(``,true)])}}};var CrudListScreen_default=_plugin_vue_export_helper_default(_sfc_main$14,[[`__scopeId`,`data-v-0a597f2b`]]);var _hoisted_1$5={class:`crud-screen crud-screen--operator crud-view-element d-flex flex-column ga-4`};var _hoisted_2$2={class:`crud-view-actions`};var _hoisted_3$2={key:0,class:`crud-view-state`};var _hoisted_4$1={class:`text-body-2 text-medium-emphasis mb-4`};var _hoisted_5$1={class:`crud-view-state__actions`};var _hoisted_6$1={key:1,class:`pa-4`};var _hoisted_7$1={key:2,class:`pa-4`};var _hoisted_8$1={key:0,class:`crud-view-supporting-content`};var _sfc_main$13={__name:`CrudViewScreen`,props:{screen:{type:Object,required:true},resourceSingularTitle:{type:String,default:`Record`},resourcePluralTitle:{type:String,default:`Records`}},setup(__props){const props=__props;const view=computed(()=>props.screen?.view||{});const listLocation=computed(()=>unref(props.screen?.listLocation)||null);const editLocation=computed(()=>unref(props.screen?.editLocation)||null);return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$5,[createBaseVNode(`div`,_hoisted_2$2,[listLocation.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`outlined`,to:listLocation.value},{default:withCtx(()=>[createTextVNode(` Back to `+toDisplayString(__props.resourcePluralTitle),1)]),_:1},8,[`to`])):createCommentVNode(``,true),renderSlot(_ctx.$slots,`actions`,{screen:__props.screen,view:view.value},void 0,true),editLocation.value?(openBlock(),createBlock(VBtn,{key:1,color:`primary`,variant:`flat`,to:editLocation.value},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(` Edit `,-1)])]),_:1},8,[`to`])):createCommentVNode(``,true)]),createVNode(VSheet,{rounded:`lg`,border:``,class:`crud-view-panel`},{default:withCtx(()=>[view.value.loadError||view.value.isNotFound?(openBlock(),createElementBlock(`div`,_hoisted_3$2,[createBaseVNode(`p`,_hoisted_4$1,toDisplayString(view.value.loadError||`This ${__props.resourceSingularTitle} could not be found.`),1),createBaseVNode(`div`,_hoisted_5$1,[view.value.loadError?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`tonal`,disabled:view.value.isFetching,onClick:view.value.refresh},{default:withCtx(()=>[createTextVNode(toDisplayString(view.value.isFetching?`Retrying…`:`Retry`),1)]),_:1},8,[`disabled`,`onClick`])):listLocation.value?(openBlock(),createBlock(VBtn,{key:1,color:`primary`,variant:`tonal`,to:listLocation.value},{default:withCtx(()=>[createTextVNode(` Back to `+toDisplayString(__props.resourcePluralTitle),1)]),_:1},8,[`to`])):createCommentVNode(``,true)])])):view.value.isLoading?(openBlock(),createElementBlock(`div`,_hoisted_6$1,[createVNode(VSkeletonLoader,{type:`text@2, list-item-two-line@5`})])):(openBlock(),createElementBlock(`div`,_hoisted_7$1,[renderSlot(_ctx.$slots,`before-fields`,{view:view.value},void 0,true),createVNode(VRow,{class:`crud-view-fields`},{default:withCtx(()=>[renderSlot(_ctx.$slots,`fields`,{view:view.value},void 0,true)]),_:3}),renderSlot(_ctx.$slots,`after-fields`,{view:view.value},void 0,true)]))]),_:3}),_ctx.$slots[`supporting-content`]?(openBlock(),createElementBlock(`div`,_hoisted_8$1,[renderSlot(_ctx.$slots,`supporting-content`,{view:view.value},void 0,true)])):createCommentVNode(``,true)])}}};var CrudViewScreen_default=_plugin_vue_export_helper_default(_sfc_main$13,[[`__scopeId`,`data-v-5a3a2569`]]);function normalizeCrudListBulkAction(rawAction={},index=0){if(!rawAction||typeof rawAction!==`object`||Array.isArray(rawAction))return null;const key=normalizeText$3(rawAction.key||rawAction.id||`action-${index+1}`);const label=normalizeText$3(rawAction.label||rawAction.title);if(!key||!label)return null;return Object.freeze({key,label,icon:normalizeText$3(rawAction.icon),color:normalizeText$3(rawAction.color,{fallback:`primary`}),variant:normalizeText$3(rawAction.variant,{fallback:`tonal`}),confirmLabel:normalizeText$3(rawAction.confirmLabel),run:typeof rawAction.run===`function`?rawAction.run:null,disabled:rawAction.disabled})}function defineCrudListBulkActions(actions=[]){if(!Array.isArray(actions))throw new TypeError(`defineCrudListBulkActions requires an array.`);const normalizedActions=[];const seenKeys=new Set;actions.forEach((rawAction,index)=>{const action=normalizeCrudListBulkAction(rawAction,index);if(!action||seenKeys.has(action.key))return;seenKeys.add(action.key);normalizedActions.push(action)});return Object.freeze(normalizedActions)}function normalizeCrudLookupApiPath(value=``){const normalized=normalizePathname$1(normalizeText$3(value));if(!normalized||normalized===`/`)return``;return normalized}function normalizeCrudLookupNamespace(value=``){const normalizedApiPath=normalizeCrudLookupApiPath(value);if(!normalizedApiPath)return``;return normalizedApiPath.slice(1)}function resolveCrudLookupApiPathFromNamespace(value=``){const normalizedNamespace=normalizeCrudLookupNamespace(value);if(!normalizedNamespace)return``;return`/${normalizedNamespace}`}var CRUD_LIST_FILTER_TYPE_FLAG=`flag`;var CRUD_LIST_FILTER_TYPE_ENUM=`enum`;var CRUD_LIST_FILTER_TYPE_ENUM_MANY=`enumMany`;var CRUD_LIST_FILTER_TYPE_RECORD_ID=`recordId`;var CRUD_LIST_FILTER_TYPE_RECORD_ID_MANY=`recordIdMany`;var CRUD_LIST_FILTER_TYPE_DATE=`date`;var CRUD_LIST_FILTER_TYPE_DATE_RANGE=`dateRange`;var CRUD_LIST_FILTER_TYPE_NUMBER_RANGE=`numberRange`;var CRUD_LIST_FILTER_TYPE_PRESENCE=`presence`;var CRUD_LIST_FILTER_TYPES=Object.freeze([CRUD_LIST_FILTER_TYPE_FLAG,CRUD_LIST_FILTER_TYPE_ENUM,CRUD_LIST_FILTER_TYPE_ENUM_MANY,CRUD_LIST_FILTER_TYPE_RECORD_ID,CRUD_LIST_FILTER_TYPE_RECORD_ID_MANY,CRUD_LIST_FILTER_TYPE_DATE,CRUD_LIST_FILTER_TYPE_DATE_RANGE,CRUD_LIST_FILTER_TYPE_NUMBER_RANGE,CRUD_LIST_FILTER_TYPE_PRESENCE]);var CRUD_LIST_FILTER_PRESENCE_PRESENT=`present`;var CRUD_LIST_FILTER_PRESENCE_MISSING=`missing`;var CRUD_LIST_FILTER_PRESENCE_OPTIONS=Object.freeze([Object.freeze({value:CRUD_LIST_FILTER_PRESENCE_PRESENT,label:`Present`}),Object.freeze({value:CRUD_LIST_FILTER_PRESENCE_MISSING,label:`Missing`})]);var CRUD_LIST_FILTER_INVALID_VALUES_REJECT=`reject`;var CRUD_LIST_FILTER_INVALID_VALUES_DISCARD=`discard`;var CRUD_LIST_FILTER_INVALID_VALUES_MODES=Object.freeze([CRUD_LIST_FILTER_INVALID_VALUES_REJECT,CRUD_LIST_FILTER_INVALID_VALUES_DISCARD]);var DATE_FILTER_PATTERN=/^\d{4}-\d{2}-\d{2}$/u;function parseCrudListRangeQueryExpression(value=null){const sourceValue=Array.isArray(value)?value[0]:value;if(sourceValue==null)return null;const normalized=typeof sourceValue===`number`?String(sourceValue):normalizeText$3(sourceValue);if(!normalized)return null;const separatorIndex=normalized.indexOf(`..`);if(separatorIndex<0)return deepFreeze({exact:true,start:normalized,end:normalized});const start=normalizeText$3(normalized.slice(0,separatorIndex));const end=normalizeText$3(normalized.slice(separatorIndex+2));if(!start&&!end)return null;return deepFreeze({exact:false,start,end})}function firstCrudListFilterValue(value){return Array.isArray(value)?value[0]:value}function normalizeDateFilterText(value){const normalized=normalizeText$3(firstCrudListFilterValue(value));if(!normalized||!DATE_FILTER_PATTERN.test(normalized))return``;return normalized}function normalizeCanonicalRecordIdList(value){return normalizeUniqueTextList(value,{acceptSingle:true}).map(entry=>normalizeCanonicalRecordIdText(entry,{fallback:``})).filter(Boolean)}function normalizeAllowedFilterTextValue(value,allowedValues=new Set){const normalized=normalizeText$3(firstCrudListFilterValue(value));if(!normalized||!allowedValues.has(normalized))return``;return normalized}function normalizeAllowedFilterTextValues(value,allowedValues=new Set){return normalizeUniqueTextList(value,{acceptSingle:true}).filter(entry=>allowedValues.has(entry))}function resolveCrudListFilterAllowedValues(filter={}){return new Set((Array.isArray(filter.options)?filter.options:[]).map(entry=>normalizeText$3(entry?.value)).filter(Boolean))}function normalizeCrudListDateRangeUiValue(rawValue){const source=rawValue&&typeof rawValue===`object`&&!Array.isArray(rawValue)?rawValue:null;if(source)return{from:normalizeDateFilterText(source.from),to:normalizeDateFilterText(source.to)};const parsed=parseCrudListRangeQueryExpression(rawValue);return{from:normalizeDateFilterText(parsed?.start),to:normalizeDateFilterText(parsed?.end)}}function normalizeCrudListNumberRangeUiValue(rawValue){const source=rawValue&&typeof rawValue===`object`&&!Array.isArray(rawValue)?rawValue:null;if(source)return{min:normalizeText$3(source.min),max:normalizeText$3(source.max)};const parsed=parseCrudListRangeQueryExpression(rawValue);return{min:normalizeText$3(parsed?.start),max:normalizeText$3(parsed?.end)}}function normalizeCrudListFilterUiValue(filter={},rawValue){const type=normalizeCrudListFilterType(filter.type);if(type===`flag`)return rawValue===true;if(type===`enum`)return normalizeAllowedFilterTextValue(rawValue,resolveCrudListFilterAllowedValues(filter));if(type===`presence`)return normalizeAllowedFilterTextValue(rawValue,new Set([CRUD_LIST_FILTER_PRESENCE_PRESENT,CRUD_LIST_FILTER_PRESENCE_MISSING]));if(type===`enumMany`)return normalizeAllowedFilterTextValues(rawValue,resolveCrudListFilterAllowedValues(filter));if(type===`recordId`)return normalizeCanonicalRecordIdText(rawValue,{fallback:``})||``;if(type===`recordIdMany`)return normalizeCanonicalRecordIdList(rawValue);if(type===`date`)return normalizeDateFilterText(rawValue);if(type===`dateRange`)return normalizeCrudListDateRangeUiValue(rawValue);if(type===`numberRange`)return normalizeCrudListNumberRangeUiValue(rawValue);return normalizeText$3(rawValue)}function normalizeCrudListFilterType(value=``){const normalized=normalizeText$3(value);if(CRUD_LIST_FILTER_TYPES.includes(normalized))return normalized;throw new TypeError(`Unsupported CRUD list filter type "${value}".`)}function normalizeCrudListFilterOption(rawOption=null,{context=`filter option`}={}){const source=typeof rawOption===`string`?{value:rawOption}:normalizeObject$1(rawOption);const value=normalizeText$3(source.value);if(!value)throw new TypeError(`${context} requires value.`);return Object.freeze({value,label:normalizeText$3(source.label)||value})}function normalizeCrudListFilterOptions(rawOptions=[],{context=`filter options`}={}){const source=Array.isArray(rawOptions)?rawOptions:[];const options=[];const seenValues=new Set;for(const rawOption of source){const option=normalizeCrudListFilterOption(rawOption,{context});if(seenValues.has(option.value))continue;seenValues.add(option.value);options.push(option)}return Object.freeze(options)}function normalizeCrudListFilterPresenceOptions(rawOptions=[]){const sourceOptions=normalizeCrudListFilterOptions(rawOptions,{context:`presence filter options`});if(sourceOptions.length<1)return CRUD_LIST_FILTER_PRESENCE_OPTIONS;const optionMap=new Map(sourceOptions.map(entry=>[entry.value,entry]));const presentOption=optionMap.get(CRUD_LIST_FILTER_PRESENCE_PRESENT);const missingOption=optionMap.get(CRUD_LIST_FILTER_PRESENCE_MISSING);if(!presentOption||!missingOption)throw new TypeError(`Presence filter options must contain both "present" and "missing" values.`);return Object.freeze([presentOption,missingOption])}function normalizeCrudListFilterLookup(rawLookup=null){if(rawLookup==null)return null;if(!rawLookup||typeof rawLookup!==`object`||Array.isArray(rawLookup))throw new TypeError(`CRUD list filter lookup must be an object.`);const source=normalizeObject$1(rawLookup);const namespace=normalizeCrudLookupNamespace(source.namespace);const apiSuffix=normalizeCrudLookupApiPath(source.apiSuffix||source.apiPath)||resolveCrudLookupApiPathFromNamespace(namespace);const labelKey=normalizeText$3(source.labelKey);const valueKey=normalizeText$3(source.valueKey)||`id`;return Object.freeze({...namespace?{namespace}:{},...apiSuffix?{apiSuffix}:{},...labelKey?{labelKey}:{},valueKey})}function resolveCrudListFilterOptionSet(rawDefinition={},type=``){if(type===`enum`||type===`enumMany`){const options=normalizeCrudListFilterOptions(rawDefinition.options,{context:`${type} filter options`});if(options.length<1)throw new TypeError(`${type} filters require at least one option.`);return options}if(type===`presence`)return normalizeCrudListFilterPresenceOptions(rawDefinition.options);return Object.freeze([])}function resolveCrudListFilterQueryKeys(definition={}){return Object.freeze([normalizeText$3(definition.queryKey)].filter(Boolean))}function normalizeCrudListFilterDefinition(rawKey=``,rawDefinition=null){const key=normalizeText$3(rawKey);if(!key)throw new TypeError(`CRUD list filter definitions require non-empty keys.`);if(!rawDefinition||typeof rawDefinition!==`object`||Array.isArray(rawDefinition))throw new TypeError(`CRUD list filter "${key}" must be an object.`);const source=normalizeObject$1(rawDefinition);const type=normalizeCrudListFilterType(source.type);const label=normalizeText$3(source.label)||key;const options=resolveCrudListFilterOptionSet(source,type);const lookup=normalizeCrudListFilterLookup(source.lookup);const chipLabel=typeof source.chipLabel===`function`?source.chipLabel:null;const ui=source.ui&&typeof source.ui===`object`&&!Array.isArray(source.ui)?deepFreeze({...source.ui}):null;const meta=source.meta&&typeof source.meta===`object`&&!Array.isArray(source.meta)?deepFreeze({...source.meta}):null;const hasDefaultValue=Object.hasOwn(source,`defaultValue`);const defaultValue=hasDefaultValue?deepFreeze(normalizeCrudListFilterUiValue({type,options},source.defaultValue)):void 0;if(type===`dateRange`){if(normalizeText$3(source.fromKey)||normalizeText$3(source.toKey))throw new TypeError(`CRUD list filter "${key}" uses unsupported split range keys. Use queryKey.`)}if(type===`numberRange`){if(normalizeText$3(source.minKey)||normalizeText$3(source.maxKey))throw new TypeError(`CRUD list filter "${key}" uses unsupported split range keys. Use queryKey.`)}return Object.freeze({key,type,label,queryKey:normalizeText$3(source.queryKey)||key,options,lookup,chipLabel,ui,meta,...hasDefaultValue?{defaultValue}:{}})}function defineCrudListFilters(definitions={}){if(!definitions||typeof definitions!==`object`||Array.isArray(definitions))throw new TypeError(`defineCrudListFilters requires an object.`);const source=normalizeObject$1(definitions);const normalized={};const seenFilterKeys=new Set;const seenQueryKeys=new Map;for(const[rawKey,rawDefinition]of Object.entries(source)){const filter=normalizeCrudListFilterDefinition(rawKey,rawDefinition);if(seenFilterKeys.has(filter.key))throw new TypeError(`Duplicate CRUD list filter key "${filter.key}".`);seenFilterKeys.add(filter.key);for(const queryKey of resolveCrudListFilterQueryKeys(filter)){const seenBy=seenQueryKeys.get(queryKey);if(seenBy)throw new TypeError(`CRUD list filters "${seenBy}" and "${filter.key}" both use query key "${queryKey}".`);seenQueryKeys.set(queryKey,filter.key)}normalized[filter.key]=filter}return deepFreeze(normalized)}function normalizeCrudListRowAction(rawAction={},index=0){if(!rawAction||typeof rawAction!==`object`||Array.isArray(rawAction))return null;const key=normalizeText$3(rawAction.key||rawAction.id||`action-${index+1}`);const label=normalizeText$3(rawAction.label||rawAction.title);if(!key||!label)return null;return Object.freeze({key,label,icon:normalizeText$3(rawAction.icon),color:normalizeText$3(rawAction.color,{fallback:`primary`}),run:typeof rawAction.run===`function`?rawAction.run:null,visible:rawAction.visible,disabled:rawAction.disabled,loading:rawAction.loading})}function defineCrudListRowActions(actions=[]){if(!Array.isArray(actions))throw new TypeError(`defineCrudListRowActions requires an array.`);const normalizedActions=[];const seenKeys=new Set;actions.forEach((rawAction,index)=>{const action=normalizeCrudListRowAction(rawAction,index);if(!action||seenKeys.has(action.key))return;seenKeys.add(action.key);normalizedActions.push(action)});return Object.freeze(normalizedActions)}function isObjectLike(value){return value!==null&&typeof value===`object`}function deepClone(value){try{return JSON.parse(JSON.stringify(value))}catch{return null}}function captureModelSnapshot(model){if(!isObjectLike(model))return null;return deepClone(model)}function restoreModelSnapshot(model,snapshot){if(!isObjectLike(model)||!isObjectLike(snapshot))return;if(Array.isArray(model)&&Array.isArray(snapshot)){model.splice(0,model.length,...snapshot);return}if(Array.isArray(model)||Array.isArray(snapshot))return;for(const key of Object.keys(model))if(!Object.prototype.hasOwnProperty.call(snapshot,key))delete model[key];for(const[key,value]of Object.entries(snapshot))model[key]=value}function watchResourceModelState({resource,model,mapLoadedToModel,resolveMapContext=null}={}){const modelSnapshot=captureModelSnapshot(model);watch(()=>resource?.query?.isPending?.value,isPending=>{if(!isPending||!modelSnapshot)return;restoreModelSnapshot(model,modelSnapshot)},{immediate:true});watch(()=>resource?.data?.value,payload=>{if(!payload||typeof mapLoadedToModel!==`function`)return;mapLoadedToModel(model,payload,typeof resolveMapContext===`function`?resolveMapContext():{})},{immediate:true})}function useAddEditCore({model,resource,queryKey,canSave,fieldBag,feedback,input,mapLoadedToModel,buildRawPayload,buildSavePayload,onSaveSuccess,validationFeedback=true,messages={}}={}){const queryClient=useQueryClient();watchResourceModelState({resource,model,mapLoadedToModel,resolveMapContext(){return{queryClient,resource}}});const submitting=ref(false);const saving=computed(()=>Boolean(submitting.value||resource?.isSaving?.value));const fieldErrors=fieldBag?.errors;const message=feedback?.message;const messageType=feedback?.messageType;const validationAttempted=ref(false);const validationErrors=computed(()=>{if(!validationAttempted.value||!input)return{};const result=validateOperationInput({input,rawPayload:resolveRawPayload()});return result.ok?{}:resolveFieldErrors(result.failure)});function resolveRawPayload(){return typeof buildRawPayload===`function`?buildRawPayload(model,{queryClient,resource}):{}}function resetValidation(){validationAttempted.value=false;fieldBag?.clear?.()}async function submit(){if(!canSave?.value||saving.value)return;feedback?.clear?.();fieldBag?.clear?.();validationAttempted.value=true;const rawPayload=resolveRawPayload();const validationResult=validateOperationInput({input,rawPayload,fieldBag,feedback:validationFeedback===false?null:feedback,validationMessage:String(messages.validation||`Validation failed.`)});if(!validationResult.ok)return;const{parsedInput}=validationResult;const savePayload=typeof buildSavePayload===`function`?buildSavePayload(parsedInput,{rawPayload,queryClient,resource}):parsedInput;try{submitting.value=true;const queryKeySnapshot=queryKey?.value;const payload=await resource.save(savePayload);if(typeof mapLoadedToModel===`function`)mapLoadedToModel(model,payload,{queryClient,resource});if(queryKeySnapshot!==void 0)queryClient.setQueryData(queryKeySnapshot,payload);if(typeof onSaveSuccess===`function`)await onSaveSuccess(payload,{queryClient,parsed:parsedInput,rawPayload,savePayload,resource});feedback?.success?.(String(messages.saveSuccess||`Saved.`))}catch(error){fieldBag?.apply?.(resolveFieldErrors(error));feedback?.error?.(error,String(messages.saveError||`Unable to save.`))}finally{submitting.value=false}}return Object.freeze({saving,fieldErrors,message,messageType,validationAttempted,validationErrors,resetValidation,submit})}var WEB_OPERATION_ADAPTER_ID=`http-web-default`;function createWebOperationAdapter(){return Object.freeze({id:WEB_OPERATION_ADAPTER_ID,useOperationScope(options={}){return useOperationScope(options)}})}var defaultWebOperationAdapter=createWebOperationAdapter();function resolveOperationAdapter(adapter,{context=`http-web operation adapter`}={}){if(adapter==null)return defaultWebOperationAdapter;if(!adapter||typeof adapter!==`object`||Array.isArray(adapter))throw new TypeError(`${context} must be an object when provided.`);if(typeof adapter.useOperationScope!==`function`)throw new TypeError(`${context} must expose useOperationScope(options).`);return adapter}function toResolvedRecordId({routeParams,recordIdParam,routeRecordId}){const explicitRecordId=toRouteParamValue(typeof routeRecordId===`function`?routeRecordId():unref(routeRecordId));if(explicitRecordId)return explicitRecordId;return toRouteParamValue(routeParams[recordIdParam])}function resolveSavedRecordId(payload,saveRecordIdSelector){const sourcePayload=asPlainObject(payload);if(typeof saveRecordIdSelector===`function`)return toRouteParamValue(saveRecordIdSelector(sourcePayload));return toRouteParamValue(sourcePayload.id)}function createAddEditUiRuntime({recordIdParam=`recordId`,routeParams=null,routeParamNames=null,routePath=``,routeRecordId=null,apiUrlTemplate=``,viewUrlTemplate=``,listUrlTemplate=``,saveRecordIdSelector=null}={}){const normalizedRecordIdParam=normalizeRouteParamName(recordIdParam,{context:`useAddEdit recordIdParam`});const normalizedApiUrlTemplate=String(apiUrlTemplate||``).trim();const normalizedViewUrlTemplate=String(viewUrlTemplate||``).trim();const normalizedListUrlTemplate=String(listUrlTemplate||``).trim();function resolveTemplatePath(urlTemplate=``,extraParams={}){const normalizedTemplate=String(urlTemplate||``).trim();if(!normalizedTemplate)return``;const currentRouteParams=resolveRouteParamsSource(routeParams);const sourceParams={...currentRouteParams,...asPlainObject(extraParams)};const currentRouteRecordId=toResolvedRecordId({routeParams:currentRouteParams,recordIdParam:normalizedRecordIdParam,routeRecordId});const resolvedRecordId=toRouteParamValue(sourceParams[normalizedRecordIdParam])||currentRouteRecordId;sourceParams[normalizedRecordIdParam]=resolvedRecordId;const currentPathname=resolveScopedRoutePathname({currentPathname:routePath,params:currentRouteParams,orderedParamNames:routeParamNames,anchorParamName:normalizedRecordIdParam,anchorParamValue:currentRouteRecordId,anchorMode:`after`});return resolveRouteTemplateLocation(normalizedTemplate,{params:sourceParams,currentPathname})}const recordId=computed(()=>toResolvedRecordId({routeParams:resolveRouteParamsSource(routeParams),recordIdParam:normalizedRecordIdParam,routeRecordId}));const apiSuffix=computed(()=>resolveTemplatePath(normalizedApiUrlTemplate));const listUrl=computed(()=>resolveTemplatePath(normalizedListUrlTemplate));const cancelUrl=computed(()=>resolveTemplatePath(normalizedViewUrlTemplate)||listUrl.value);function resolveParams(urlTemplate=``,extraParams={}){return resolveTemplatePath(urlTemplate,extraParams)}function resolveViewUrl(recordIdLike=``){const targetRecordId=toRouteParamValue(recordIdLike);if(!targetRecordId)return``;return resolveTemplatePath(normalizedViewUrlTemplate,{[normalizedRecordIdParam]:targetRecordId})}function resolveSavedViewUrl(payload={}){const targetRecordId=resolveSavedRecordId(payload,saveRecordIdSelector);if(!targetRecordId)return``;return resolveViewUrl(targetRecordId)}return Object.freeze({recordId,apiSuffix,listUrl,cancelUrl,resolveParams,resolveViewUrl,resolveSavedViewUrl})}var QUERY_PARAM_BINDING_TYPE_TEXT=`text`;var QUERY_PARAM_BINDING_TYPE_BOOLEAN=`boolean`;var QUERY_PARAM_BINDING_TYPE_NUMBER=`number`;var QUERY_PARAM_BINDING_TYPE_ARRAY=`array`;var QUERY_PARAM_BINDING_TYPE_DATE=`date`;function normalizeListSyncToRouteConfig(syncToRoute=false,{defaultSearchParam=`q`}={}){const source=syncToRoute===true?{}:asPlainObject(syncToRoute);const requested=syncToRoute===true||Object.keys(source).length>0;const queryParamBlacklist=Object.freeze(normalizeUniqueTextList(source.queryParamBlacklist));if(!requested||source.enabled===false)return Object.freeze({enabled:false,mode:`replace`,syncSearch:false,syncQueryParams:false,hydrateFromRoute:false,searchParam:normalizeText$3(defaultSearchParam)||`q`,queryParamBlacklist});const mode=normalizeText$3(source.mode).toLowerCase()===`push`?`push`:`replace`;const searchParam=normalizeText$3(source.searchParam)||normalizeText$3(defaultSearchParam)||`q`;return Object.freeze({enabled:true,mode,syncSearch:source.search!==false,syncQueryParams:source.queryParams!==false,hydrateFromRoute:source.hydrateFromRoute!==false,searchParam,queryParamBlacklist})}function normalizeQueryParamKey(value){return normalizeText$3(value)}function normalizeQueryParamValues(value){const list=Array.isArray(value)?value:[value];const normalizedValues=[];for(const entry of list){const resolvedEntry=unref(entry);if(resolvedEntry==null)continue;if(typeof resolvedEntry===`boolean`){if(resolvedEntry)normalizedValues.push(`1`);continue}if(typeof resolvedEntry===`number`){if(Number.isFinite(resolvedEntry))normalizedValues.push(String(resolvedEntry));continue}if(resolvedEntry instanceof Date){if(!Number.isNaN(resolvedEntry.getTime()))normalizedValues.push(resolvedEntry.toISOString());continue}const normalizedText=normalizeText$3(resolvedEntry);if(normalizedText)normalizedValues.push(normalizedText)}return normalizedValues}function resolveQueryParamsInput(queryParams,context={}){if(typeof queryParams===`function`)return asPlainObject(queryParams(context));return asPlainObject(unref(queryParams))}function resolveQueryParamBindingType(value){if(Array.isArray(value))return QUERY_PARAM_BINDING_TYPE_ARRAY;if(typeof value===`boolean`)return QUERY_PARAM_BINDING_TYPE_BOOLEAN;if(typeof value===`number`)return QUERY_PARAM_BINDING_TYPE_NUMBER;if(value instanceof Date)return QUERY_PARAM_BINDING_TYPE_DATE;return QUERY_PARAM_BINDING_TYPE_TEXT}function resolveArrayQueryParamItemType(values=[]){const list=Array.isArray(values)?values:[];for(const entry of list){if(entry==null)continue;if(typeof entry===`boolean`)return QUERY_PARAM_BINDING_TYPE_BOOLEAN;if(typeof entry===`number`)return QUERY_PARAM_BINDING_TYPE_NUMBER;if(entry instanceof Date)return QUERY_PARAM_BINDING_TYPE_DATE;return QUERY_PARAM_BINDING_TYPE_TEXT}return QUERY_PARAM_BINDING_TYPE_TEXT}function createWritableQueryParamBinding({source={},rawKey=``,rawValue=null,key=``,resolveRouteValue=null}={}){const valueSourceIsRef=isRef(rawValue);const read=valueSourceIsRef?()=>rawValue.value:()=>source[rawKey];const write=valueSourceIsRef?nextValue=>{rawValue.value=nextValue}:nextValue=>{source[rawKey]=nextValue};const currentValue=read();const valueType=resolveQueryParamBindingType(currentValue);return{key,valueType,arrayItemType:valueType===QUERY_PARAM_BINDING_TYPE_ARRAY?resolveArrayQueryParamItemType(currentValue):QUERY_PARAM_BINDING_TYPE_TEXT,get:read,set:write,resolveRouteValue}}function resolveQueryParamDescriptors(queryParams,context={},{routeValueResolvers=null}={}){const source=resolveQueryParamsInput(queryParams,context);const resolvers=asPlainObject(unref(routeValueResolvers));const descriptorsByKey=new Map;const canWriteToSource=typeof queryParams!==`function`;for(const[rawKey,rawValue]of Object.entries(source)){const key=normalizeQueryParamKey(rawKey);if(!key)continue;const values=normalizeQueryParamValues(rawValue);const current=descriptorsByKey.get(key)||{key,values:[],binding:null};if(values.length>0)current.values.push(...values);if(!current.binding&&canWriteToSource)current.binding=createWritableQueryParamBinding({source,rawKey,rawValue,key,resolveRouteValue:typeof resolvers[key]===`function`?resolvers[key]:null});descriptorsByKey.set(key,current)}return[...descriptorsByKey.values()].sort((left,right)=>left.key.localeCompare(right.key))}function resolveActiveQueryParamEntries(descriptors=[]){return(Array.isArray(descriptors)?descriptors:[]).filter(descriptor=>Array.isArray(descriptor?.values)&&descriptor.values.length>0).map(descriptor=>({key:descriptor.key,values:[...descriptor.values]}))}function resolveWritableQueryParamBindings(descriptors=[]){return(Array.isArray(descriptors)?descriptors:[]).map(descriptor=>descriptor?.binding||null).filter(Boolean)}function buildQueryParamEntriesToken(entries=[]){const normalizedEntries=Array.isArray(entries)?entries:[];if(normalizedEntries.length<1)return``;return normalizedEntries.map(entry=>{const key=normalizeQueryParamKey(entry?.key);const values=Array.isArray(entry?.values)?entry.values.map(value=>normalizeText$3(value)).filter(Boolean):[];if(!key||values.length<1)return``;return`${key}=${values.join(`,`)}`}).filter(Boolean).join(`&`)}function firstRouteQueryValue(value){if(Array.isArray(value))return value[0];return value}function normalizeRouteQueryValues(value){return(Array.isArray(value)?value:[value]).map(entry=>normalizeText$3(entry)).filter(Boolean)}function parseRouteBooleanValue(value,fallback=false){if(value===void 0)return fallback;if(value===null||value===``)return true;try{return normalizeBoolean(firstRouteQueryValue(value))}catch{return fallback}}function parseRouteNumberValue(value,fallback=null){if(value===void 0)return null;const normalized=normalizeText$3(firstRouteQueryValue(value));if(!normalized)return null;const parsed=Number(normalized);if(!Number.isFinite(parsed))return fallback;return parsed}function parseRouteDateValue(value,fallback=null){if(value===void 0)return null;const normalized=normalizeText$3(firstRouteQueryValue(value));if(!normalized)return null;const parsed=new Date(normalized);if(Number.isNaN(parsed.getTime()))return fallback;return parsed}function parseRouteQueryItemValue(value,itemType=QUERY_PARAM_BINDING_TYPE_TEXT,fallback=null){if(itemType===QUERY_PARAM_BINDING_TYPE_BOOLEAN)try{return normalizeBoolean(value)}catch{return fallback}if(itemType===QUERY_PARAM_BINDING_TYPE_NUMBER){const numeric=Number(value);return Number.isFinite(numeric)?numeric:fallback}if(itemType===QUERY_PARAM_BINDING_TYPE_DATE){const date=new Date(value);return Number.isNaN(date.getTime())?fallback:date}return normalizeText$3(value)||fallback}function parseRouteBindingValue(binding,routeQueryValue,context={}){if(typeof binding?.resolveRouteValue===`function`)return binding.resolveRouteValue(routeQueryValue,context);const valueType=normalizeText$3(binding?.valueType).toLowerCase();if(valueType===QUERY_PARAM_BINDING_TYPE_BOOLEAN)return parseRouteBooleanValue(routeQueryValue,false);if(valueType===QUERY_PARAM_BINDING_TYPE_NUMBER)return parseRouteNumberValue(routeQueryValue,typeof binding?.get===`function`?binding.get():null);if(valueType===QUERY_PARAM_BINDING_TYPE_DATE)return parseRouteDateValue(routeQueryValue,typeof binding?.get===`function`?binding.get():null);if(valueType===QUERY_PARAM_BINDING_TYPE_ARRAY){const itemType=normalizeText$3(binding?.arrayItemType).toLowerCase()||QUERY_PARAM_BINDING_TYPE_TEXT;return normalizeRouteQueryValues(routeQueryValue).map(value=>parseRouteQueryItemValue(value,itemType,null)).filter(value=>value!=null&&!(typeof value===`string`&&!value))}return normalizeText$3(firstRouteQueryValue(routeQueryValue))}function areQueryParamBindingItemsEqual(left,right){if(left===right)return true;if(left instanceof Date&&right instanceof Date)return left.getTime()===right.getTime();return Object.is(left,right)}function areQueryParamBindingValuesEqual(left,right){if(left===right)return true;if(left instanceof Date&&right instanceof Date)return left.getTime()===right.getTime();if(!Array.isArray(left)||!Array.isArray(right))return Object.is(left,right);if(left.length!==right.length)return false;for(let index=0;index<left.length;index+=1)if(!areQueryParamBindingItemsEqual(left[index],right[index]))return false;return true}function buildRouteQueryCompareToken(query={}){const source=asPlainObject(query);const keys=Object.keys(source).sort();const parts=[];for(const key of keys){const normalizedKey=normalizeQueryParamKey(key);if(!normalizedKey)continue;const normalizedValues=normalizeRouteQueryValues(source[key]);if(normalizedValues.length<1)continue;parts.push(`${normalizedKey}=${normalizedValues.join(`,`)}`)}return parts.join(`&`)}function mergeManagedQueryParamKeyHistory(history=[],keys=[]){const merged=new Set;for(const key of Array.isArray(history)?history:[]){const normalized=normalizeQueryParamKey(key);if(normalized)merged.add(normalized)}for(const key of Array.isArray(keys)?keys:[]){const normalized=normalizeQueryParamKey(key);if(normalized)merged.add(normalized)}return[...merged].sort((left,right)=>left.localeCompare(right))}function resolveRouteSyncManagedKeys({searchEnabled=false,searchParam=`q`,syncSearch=false,syncQueryParams=false,declaredKeys=[],keyHistory=[]}={}){const managed=new Set;if(syncSearch===true&&searchEnabled===true){const normalizedSearchParam=normalizeQueryParamKey(searchParam);if(normalizedSearchParam)managed.add(normalizedSearchParam)}if(syncQueryParams===true)for(const key of mergeManagedQueryParamKeyHistory(keyHistory,declaredKeys))managed.add(key);return[...managed].sort((left,right)=>left.localeCompare(right))}function resolveRequestQueryContext(context=null){const source=unref(context);return source&&typeof source===`object`&&!Array.isArray(source)?source:{}}function resolveRequestQueryBaseKey(sourceQueryKey=null){const source=unref(sourceQueryKey);if(Array.isArray(source))return[...source];if(source==null)return[];return[source]}function resolveRequestFieldsets(requestFieldsets=null,context={}){const source=typeof requestFieldsets===`function`?requestFieldsets(context):unref(requestFieldsets);return normalizeJsonApiFieldsets(source)}function appendRequestQueryValue(target={},key=``,values=[]){const normalizedKey=String(key||``).trim();const normalizedValues=(Array.isArray(values)?values:[]).map(value=>String(value??``).trim()).filter(Boolean);if(!normalizedKey||normalizedValues.length<1)return;const currentValue=target[normalizedKey];if(currentValue===void 0){target[normalizedKey]=normalizedValues.length===1?normalizedValues[0]:[...normalizedValues];return}target[normalizedKey]=[...Array.isArray(currentValue)?[...currentValue]:[currentValue],...normalizedValues]}function buildRequestQueryObject(entries=[],{fieldsets=null}={}){const sourceEntries=Array.isArray(entries)?entries:[];const query={};for(const entry of sourceEntries)appendRequestQueryValue(query,entry?.key,entry?.values);const normalizedFieldsets=normalizeJsonApiFieldsets(fieldsets);return Object.freeze({...query,...Object.keys(normalizedFieldsets).length>0?{fields:normalizedFieldsets}:{}})}function createRequestQueryRuntime({requestQueryParams=null,requestFieldsets=null,context=null,sourceQueryKey=null}={}){const requestQueryParamDescriptors=computed(()=>{return resolveQueryParamDescriptors(requestQueryParams,resolveRequestQueryContext(context))});const activeRequestQueryParamEntries=computed(()=>{return resolveActiveQueryParamEntries(requestQueryParamDescriptors.value)});const activeRequestQueryParamsToken=computed(()=>{return buildQueryParamEntriesToken(activeRequestQueryParamEntries.value)});const activeRequestFieldsets=computed(()=>{return resolveRequestFieldsets(requestFieldsets,resolveRequestQueryContext(context))});const activeRequestFieldsetsToken=computed(()=>{return buildJsonApiFieldsetsToken(activeRequestFieldsets.value)});const queryKeyParts=computed(()=>{const parts=[];if(activeRequestQueryParamsToken.value)parts.push(`__request_query__`,activeRequestQueryParamsToken.value);if(activeRequestFieldsetsToken.value)parts.push(`__request_fieldsets__`,activeRequestFieldsetsToken.value);return Object.freeze(parts)});const queryKey=computed(()=>{if(queryKeyParts.value.length<1)return unref(sourceQueryKey);return[...resolveRequestQueryBaseKey(sourceQueryKey),...queryKeyParts.value]});const requestQuery=computed(()=>{const query=buildRequestQueryObject(activeRequestQueryParamEntries.value,{fieldsets:activeRequestFieldsets.value});if(Object.keys(query).length<1)return null;return query});return Object.freeze({requestQueryParamDescriptors,activeRequestQueryParamEntries,activeRequestQueryParamsToken,activeRequestFieldsets,activeRequestFieldsetsToken,queryKeyParts,queryKey,requestQuery})}function useAddEdit({ownershipFilter=ROUTE_VISIBILITY_WORKSPACE,surfaceId=``,access=`auto`,resource=null,apiSuffix=``,queryKeyFactory=null,viewPermissions=[],savePermissions=[],readMethod=`GET`,readEnabled=true,writeMethod=`PATCH`,client=null,transport=null,requestRecovery=null,requestRecoveryLabel=`Resource`,placementSource=`http-web.add-edit`,fallbackLoadError=`Unable to load resource.`,fallbackSaveError=`Unable to save resource.`,fieldErrorKeys=[],clearOnRouteChange=true,model,input,mapLoadedToModel,buildRawPayload,buildSavePayload,onSaveSuccess,validationFeedback=true,requestQueryParams=null,recordIdParam=`recordId`,routeParams=null,routeRecordId=null,apiUrlTemplate=``,viewUrlTemplate=``,listUrlTemplate=``,saveRecordIdSelector=null,messages={},realtime=null,adapter=null}={}){const route=useRoute();const addEditUiRuntime=createAddEditUiRuntime({recordIdParam,routeParams:routeParams??computed(()=>route?.params||{}),routeParamNames:computed(()=>resolveRouteParamNamesInOrder(route)),routePath:computed(()=>route?.path||``),routeRecordId,apiUrlTemplate,viewUrlTemplate,listUrlTemplate,saveRecordIdSelector});const effectiveApiSuffix=String(apiUrlTemplate||``).trim()?addEditUiRuntime.apiSuffix:apiSuffix;const operationScope=resolveOperationAdapter(adapter,{context:`useAddEdit adapter`}).useOperationScope({ownershipFilter,surfaceId,access,placementSource,apiSuffix:effectiveApiSuffix,model,readEnabled,queryKeyFactory,permissionSets:{view:viewPermissions,save:savePermissions},realtime});const routeContext=operationScope.routeContext;const effectiveMessages={...resolveResourceMessages(resource,{validation:`Fix invalid values and try again.`,saveSuccess:`Saved.`,saveError:`Unable to save.`}),...messages&&typeof messages===`object`?messages:{}};const canView=operationScope.permissionGate(`view`);const canSave=operationScope.permissionGate(`save`);const queryCanRun=operationScope.queryCanRun(canView);const queryParamsContext=computed(()=>{return Object.freeze({surfaceId:operationScope.routeContext.currentSurfaceId.value,scopeParamValue:operationScope.scopeParamValue.value,ownershipFilter:operationScope.normalizedOwnershipFilter,recordId:addEditUiRuntime.recordId.value,model})});const requestQueryRuntime=createRequestQueryRuntime({requestQueryParams,context:queryParamsContext,sourceQueryKey:operationScope.queryKey});const endpointResource=useEndpointResource({queryKey:requestQueryRuntime.queryKey,path:operationScope.apiPath,enabled:queryCanRun,client,readMethod,writeMethod,readQuery:requestQueryRuntime.requestQuery,transport,requestRecovery,requestRecoveryLabel,fallbackLoadError,fallbackSaveError:String(fallbackSaveError||effectiveMessages.saveError||`Unable to save resource.`)});const feedback=useUiFeedback({source:`${placementSource}.feedback`});const fieldBag=useFieldErrorBag(fieldErrorKeys);const addEdit=useAddEditCore({model,resource:endpointResource,queryKey:requestQueryRuntime.queryKey,canSave,fieldBag,feedback,input,mapLoadedToModel,buildRawPayload,buildSavePayload,onSaveSuccess,validationFeedback,messages:effectiveMessages});setupRouteChangeCleanup({enabled:clearOnRouteChange,route:routeContext.route,feedback,onClear:addEdit.resetValidation});const isInitialLoading=operationScope.isLoading(endpointResource.isInitialLoading);const isFetching=operationScope.isLoading(endpointResource.isFetching);const isRefetching=computed(()=>Boolean(isFetching.value&&!isInitialLoading.value));const isFieldLocked=computed(()=>Boolean(!canSave.value||addEdit.saving.value||isRefetching.value));const isSubmitDisabled=computed(()=>Boolean(isInitialLoading.value||isRefetching.value||!canSave.value||addEdit.saving.value));const loadError=operationScope.loadError(endpointResource.loadError);const isLoading=operationScope.isLoading(endpointResource.isLoading);const canRetryLoad=computed(()=>Boolean(readEnabled!==false&&endpointResource?.reload));async function refresh(){if(!canRetryLoad.value)return null;return endpointResource.reload()}setupOperationErrorReporting({source:`${placementSource}.load`,loadError,dedupeWindowMs:0,loadActionFactory:()=>canRetryLoad.value?{label:`Retry`,dismissOnRun:true,handler(){refresh()}}:null});return proxyRefs({canView,canSave,loadError,isInitialLoading,isFetching,isRefetching,isFieldLocked,isSubmitDisabled,canRetryLoad,isLoading,isSaving:addEdit.saving,fieldErrors:addEdit.fieldErrors,validationAttempted:addEdit.validationAttempted,validationErrors:addEdit.validationErrors,resetValidation:addEdit.resetValidation,message:addEdit.message,messageType:addEdit.messageType,submit:addEdit.submit,refresh,resource:endpointResource,recordId:addEditUiRuntime.recordId,listUrl:addEditUiRuntime.listUrl,cancelUrl:addEditUiRuntime.cancelUrl,resolveParams:addEditUiRuntime.resolveParams,resolveViewUrl:addEditUiRuntime.resolveViewUrl,resolveSavedViewUrl:addEditUiRuntime.resolveSavedViewUrl})}var DEFAULT_LIST_LIMIT=20;function buildListRequestOptions({requestOptions=null,transport=null,pageParam=null}={}){const resolvedOptions={method:`GET`,...resolveRequestOptionsObject(requestOptions)};const sourceQuery=resolvedOptions.query&&typeof resolvedOptions.query===`object`&&!Array.isArray(resolvedOptions.query)?{...resolvedOptions.query}:{};if(!Object.hasOwn(sourceQuery,`limit`)&&!Object.hasOwn(sourceQuery,`page[limit]`))sourceQuery.limit=DEFAULT_LIST_LIMIT;if(pageParam!==null&&pageParam!==void 0&&pageParam!==``)sourceQuery.cursor=String(pageParam);if(Object.keys(sourceQuery).length>0)resolvedOptions.query=sourceQuery;else delete resolvedOptions.query;if(transport&&typeof transport===`object`)resolvedOptions.transport=transport;return resolvedOptions}function resolveRequestOptionsObject(value=null){const source=unref(value);return asPlainObject(source)}function resolveListRequestMethod(requestOptions=null){return String(resolveRequestOptionsObject(requestOptions).method||`GET`).toUpperCase()}function useListCore({queryKey,path=``,enabled=true,client=null,transport=null,initialPageParam=null,getNextPageParam,selectItems,requestOptions=null,queryOptions=null,requestRecovery=null,requestRecoveryLabel=`List`,fallbackLoadError=`Unable to load list.`}={}){const activeClient=client||getHttpWebClient();if(!activeClient||typeof activeClient.request!==`function`)throw new TypeError(`useListCore requires a client with request().`);const normalizedPath=computed(()=>resolveTextRef(path));const queryEnabled=computed(()=>resolveEnabledRef(enabled)&&Boolean(normalizedPath.value));return usePagedCollection({queryKey,initialPageParam,enabled:queryEnabled,queryFn:async({pageParam,signal})=>{const requestPath=normalizedPath.value;if(!requestPath)throw new Error(`List path is required.`);const options=buildListRequestOptions({requestOptions,transport,pageParam});options.signal=options.signal?AbortSignal.any([signal,options.signal]):signal;return activeClient.request(requestPath,options)},getNextPageParam,selectItems,queryOptions:mergeRequestRecoveryQueryMeta(queryOptions,requestRecovery,{label:requestRecoveryLabel,method:resolveListRequestMethod(requestOptions)}),fallbackLoadError})}function resolveRecordId$1(record,recordIdSelector){const item=asPlainObject(record);if(typeof recordIdSelector===`function`)return toRouteParamValue(recordIdSelector(item));return toRouteParamValue(item.id)}function createListUiRuntime({items,isInitialLoading,recordIdParam=`recordId`,recordIdSelector=null,routeParams=null,routeParamNames=null,routePath=``,viewUrlTemplate=``,editUrlTemplate=``}={}){const normalizedRecordIdParam=normalizeRouteParamName(recordIdParam,{context:`useList recordIdParam`});const normalizedViewUrlTemplate=String(viewUrlTemplate||``).trim();const normalizedEditUrlTemplate=String(editUrlTemplate||``).trim();const hasViewUrl=Boolean(normalizedViewUrlTemplate);const hasEditUrl=Boolean(normalizedEditUrlTemplate);const actionColumnCount=(hasViewUrl?1:0)+(hasEditUrl?1:0);const normalizedItems=computed(()=>Array.isArray(items?.value)?items.value:[]);const showListSkeleton=computed(()=>Boolean(isInitialLoading?.value&&normalizedItems.value.length<1));function resolveTemplatePath(urlTemplate=``,extraParams={}){const normalizedTemplate=String(urlTemplate||``).trim();if(!normalizedTemplate)return``;const currentRouteParams=resolveRouteParamsSource(routeParams);const sourceParams={...currentRouteParams,...asPlainObject(extraParams)};const currentPathname=resolveScopedRoutePathname({currentPathname:routePath,params:currentRouteParams,orderedParamNames:routeParamNames,anchorParamName:normalizedRecordIdParam,anchorParamValue:currentRouteParams[normalizedRecordIdParam],anchorMode:`before`});return resolveRouteTemplateLocation(normalizedTemplate,{params:sourceParams,currentPathname})}function resolveParams(urlTemplate=``,extraParams={}){return resolveTemplatePath(urlTemplate,extraParams)}function resolveRowKey(record,index){const recordId=resolveRecordId$1(record,recordIdSelector);if(recordId)return recordId;return`row-${index}`}function resolveViewUrl(record){if(!hasViewUrl)return``;const recordId=resolveRecordId$1(record,recordIdSelector);if(!recordId)return``;return resolveTemplatePath(normalizedViewUrlTemplate,{[normalizedRecordIdParam]:recordId})}function resolveEditUrl(record){if(!hasEditUrl)return``;const recordId=resolveRecordId$1(record,recordIdSelector);if(!recordId)return``;return resolveTemplatePath(normalizedEditUrlTemplate,{[normalizedRecordIdParam]:recordId})}return Object.freeze({hasViewUrl,hasEditUrl,actionColumnCount,showListSkeleton,resolveParams,resolveRowKey,resolveViewUrl,resolveEditUrl})}var DEFAULT_LIST_SEARCH_DEBOUNCE_MS=250;var DEFAULT_LIST_SEARCH_MIN_LENGTH=1;var LIST_SEARCH_MODE_LOCAL=`local`;var LIST_SEARCH_MODE_QUERY=`query`;function normalizeListSearchConfig(value={}){const source=asPlainObject(value);const mode=normalizeText$3(source.mode).toLowerCase()===LIST_SEARCH_MODE_LOCAL?LIST_SEARCH_MODE_LOCAL:LIST_SEARCH_MODE_QUERY;return Object.freeze({enabled:source.enabled===true,mode,queryParam:normalizeText$3(source.queryParam)||`q`,label:normalizeText$3(source.label)||`Search`,placeholder:normalizeText$3(source.placeholder),initialQuery:normalizeText$3(source.initialQuery),debounceMs:normalizeInteger(source.debounceMs,{fallback:DEFAULT_LIST_SEARCH_DEBOUNCE_MS,min:0}),minLength:normalizeInteger(source.minLength,{fallback:DEFAULT_LIST_SEARCH_MIN_LENGTH,min:DEFAULT_LIST_SEARCH_MIN_LENGTH}),fields:Object.freeze(normalizeUniqueTextList(source.fields))})}function normalizeSearchableValue(value){if(value==null)return``;if(typeof value===`string`)return normalizeText$3(value).toLowerCase();if(typeof value===`number`||typeof value===`boolean`)return String(value).toLowerCase();return``}function matchesLocalSearch(item={},query=``,searchFields=[]){const source=asPlainObject(item);const normalizedQuery=normalizeText$3(query).toLowerCase();if(!normalizedQuery)return true;const fields=Array.isArray(searchFields)?searchFields:[];if(fields.length>0)return fields.some(field=>normalizeSearchableValue(source[field]).includes(normalizedQuery));return Object.values(source).some(value=>normalizeSearchableValue(value).includes(normalizedQuery))}var EMPTY_ROUTE_SYNC_QUERY_PARAM_BLACKLIST=Object.freeze([]);function useList({ownershipFilter=ROUTE_VISIBILITY_WORKSPACE,surfaceId=``,access=`auto`,apiSuffix=``,queryKeyFactory=null,viewPermissions=[],readEnabled=true,placementSource=`http-web.list`,fallbackLoadError=`Unable to load list.`,initialPageParam=null,getNextPageParam,selectItems,client=null,transport=null,requestOptions,queryOptions,requestRecovery,requestRecoveryLabel=`List`,realtime=null,adapter=null,recordIdParam=`recordId`,recordIdSelector=null,viewUrlTemplate=``,editUrlTemplate=``,search=null,queryParams=null,routeQueryValueResolvers=null,requestQueryParams=null,requestFieldsets=null,syncToRoute=false}={}){const searchConfig=normalizeListSearchConfig(search);const routeSyncConfig=normalizeListSyncToRouteConfig(syncToRoute,{defaultSearchParam:searchConfig.queryParam});const routeSyncHydrated=ref(routeSyncConfig.enabled!==true||routeSyncConfig.hydrateFromRoute!==true);const router=routeSyncConfig.enabled===true?useRouter$1():null;const searchQuery=ref(searchConfig.initialQuery);const debouncedSearchQuery=ref(searchConfig.initialQuery);let searchDebounceTimer=null;const isSearchDebouncing=ref(false);watch(searchQuery,value=>{const normalizedValue=normalizeText$3(value);if(searchDebounceTimer)clearTimeout(searchDebounceTimer);if(searchConfig.enabled!==true){debouncedSearchQuery.value=normalizedValue;isSearchDebouncing.value=false;return}isSearchDebouncing.value=true;searchDebounceTimer=setTimeout(()=>{debouncedSearchQuery.value=normalizedValue;isSearchDebouncing.value=false;searchDebounceTimer=null},searchConfig.debounceMs)},{immediate:true});onScopeDispose(()=>{if(!searchDebounceTimer)return;clearTimeout(searchDebounceTimer);searchDebounceTimer=null});const operationScope=resolveOperationAdapter(adapter,{context:`useList adapter`}).useOperationScope({ownershipFilter,surfaceId,access,placementSource,apiSuffix,readEnabled,queryKeyFactory,permissionSets:{view:viewPermissions},realtime});if(routeSyncConfig.enabled===true&&routeSyncConfig.hydrateFromRoute===true&&routeSyncConfig.syncSearch===true&&searchConfig.enabled===true){const routeSearchValue=asPlainObject(operationScope.routeContext.route?.query||{})[routeSyncConfig.searchParam];const hydratedSearch=normalizeText$3(Array.isArray(routeSearchValue)?routeSearchValue[0]:routeSearchValue);if(searchDebounceTimer){clearTimeout(searchDebounceTimer);searchDebounceTimer=null}searchQuery.value=hydratedSearch;debouncedSearchQuery.value=hydratedSearch;isSearchDebouncing.value=false}const canView=operationScope.permissionGate(`view`);const queryParamsContext=computed(()=>{return Object.freeze({surfaceId:operationScope.routeContext.currentSurfaceId.value,scopeParamValue:operationScope.scopeParamValue.value,ownershipFilter:operationScope.normalizedOwnershipFilter})});const queryParamDescriptors=computed(()=>{return resolveQueryParamDescriptors(queryParams,queryParamsContext.value,{routeValueResolvers:routeQueryValueResolvers})});const{activeRequestQueryParamEntries,activeRequestQueryParamsToken,activeRequestFieldsets,activeRequestFieldsetsToken,queryKeyParts:requestQueryKeyParts}=createRequestQueryRuntime({requestQueryParams,requestFieldsets,context:queryParamsContext});const declaredQueryParamKeys=computed(()=>{return queryParamDescriptors.value.map(descriptor=>descriptor.key)});const activeQueryParamEntries=computed(()=>{return resolveActiveQueryParamEntries(queryParamDescriptors.value)});const activeQueryParamsToken=computed(()=>buildQueryParamEntriesToken(activeQueryParamEntries.value));const writableQueryParamBindings=computed(()=>{return resolveWritableQueryParamBindings(queryParamDescriptors.value)});const activeSearchQuery=computed(()=>{if(searchConfig.enabled!==true)return``;const normalized=normalizeText$3(debouncedSearchQuery.value);if(!normalized||normalized.length<searchConfig.minLength)return``;return normalized});const querySearchEnabled=computed(()=>searchConfig.enabled===true&&searchConfig.mode===`query`);const listPath=computed(()=>{return normalizeText$3(operationScope.apiPath.value)});const listRequestOptions=computed(()=>{const entries=[];if(querySearchEnabled.value){const queryValue=activeSearchQuery.value;if(queryValue)entries.push({key:searchConfig.queryParam,values:[queryValue]})}entries.push(...activeRequestQueryParamEntries.value);entries.push(...activeQueryParamEntries.value);const query=buildRequestQueryObject(entries,{fieldsets:activeRequestFieldsets.value});const baseOptions=asPlainObject(requestOptions);if(Object.keys(query).length<1)return baseOptions;return{...baseOptions,query}});const listQueryKey=computed(()=>{const sourceQueryKey=operationScope.queryKey.value;const baseQueryKey=Array.isArray(sourceQueryKey)?[...sourceQueryKey]:sourceQueryKey==null?[]:[sourceQueryKey];baseQueryKey.push(...requestQueryKeyParts.value);if(querySearchEnabled.value)baseQueryKey.push(`__search__`,searchConfig.queryParam,activeSearchQuery.value);if(activeQueryParamsToken.value)baseQueryKey.push(`__query__`,activeQueryParamsToken.value);return baseQueryKey});const listReadEnabled=computed(()=>canView.value&&routeSyncHydrated.value);const list=useListCore({queryKey:listQueryKey,path:listPath,enabled:operationScope.queryCanRun(listReadEnabled),client,transport,initialPageParam,getNextPageParam,selectItems,requestOptions:listRequestOptions,queryOptions,requestRecovery,requestRecoveryLabel,fallbackLoadError});const routeSyncApplying=ref(false);const routeSyncManagedKeyHistory=ref([]);const routeSyncQueryParamBlacklist=computed(()=>{if(routeSyncConfig.enabled!==true||routeSyncConfig.syncQueryParams!==true)return EMPTY_ROUTE_SYNC_QUERY_PARAM_BLACKLIST;return routeSyncConfig.queryParamBlacklist});const routeSyncQueryParamBlacklistSet=computed(()=>{return new Set(routeSyncQueryParamBlacklist.value)});if(routeSyncConfig.enabled===true&&routeSyncConfig.syncQueryParams===true)watch(declaredQueryParamKeys,nextKeys=>{routeSyncManagedKeyHistory.value=mergeManagedQueryParamKeyHistory(routeSyncManagedKeyHistory.value,nextKeys)},{immediate:true});const routeSyncManagedKeys=computed(()=>{const managedKeys=resolveRouteSyncManagedKeys({searchEnabled:searchConfig.enabled,searchParam:routeSyncConfig.searchParam,syncSearch:routeSyncConfig.enabled===true&&routeSyncConfig.syncSearch===true,syncQueryParams:routeSyncConfig.enabled===true&&routeSyncConfig.syncQueryParams===true,declaredKeys:declaredQueryParamKeys.value,keyHistory:routeSyncManagedKeyHistory.value});if(routeSyncConfig.enabled!==true||routeSyncConfig.syncQueryParams!==true)return managedKeys;const output=new Set(managedKeys);for(const key of routeSyncQueryParamBlacklist.value)output.add(key);return[...output].sort((left,right)=>left.localeCompare(right))});const routeSyncDesiredQuery=computed(()=>{if(routeSyncConfig.enabled!==true)return{};const desiredQuery={};if(routeSyncConfig.syncSearch===true&&searchConfig.enabled===true){const normalizedSearch=normalizeText$3(searchQuery.value);if(normalizedSearch)desiredQuery[routeSyncConfig.searchParam]=normalizedSearch}if(routeSyncConfig.syncQueryParams===true)for(const entry of activeQueryParamEntries.value){if(routeSyncQueryParamBlacklistSet.value.has(entry.key))continue;if(entry.values.length===1){desiredQuery[entry.key]=entry.values[0];continue}desiredQuery[entry.key]=[...entry.values]}return desiredQuery});if(routeSyncConfig.enabled===true){watch(()=>operationScope.routeContext.route?.query||{},routeQuery=>{const initialHydration=routeSyncHydrated.value!==true;if(routeSyncConfig.hydrateFromRoute!==true||routeSyncApplying.value===true){routeSyncHydrated.value=true;return}const routeQuerySource=asPlainObject(routeQuery);if(routeSyncConfig.syncSearch===true&&searchConfig.enabled===true){const routeSearchValue=routeQuerySource[routeSyncConfig.searchParam];const nextSearch=normalizeText$3(Array.isArray(routeSearchValue)?routeSearchValue[0]:routeSearchValue);if(nextSearch!==searchQuery.value)searchQuery.value=nextSearch}if(routeSyncConfig.syncQueryParams===true)for(const binding of writableQueryParamBindings.value){if(routeSyncQueryParamBlacklistSet.value.has(binding.key))continue;const nextValue=parseRouteBindingValue(binding,routeQuerySource[binding.key],{initial:initialHydration});const currentValue=typeof binding.get===`function`?binding.get():void 0;if(areQueryParamBindingValuesEqual(currentValue,nextValue))continue;try{binding.set(nextValue)}catch{}}routeSyncHydrated.value=true},{immediate:true});watch([routeSyncDesiredQuery,routeSyncManagedKeys],async([desiredQuery,managedKeys])=>{if(routeSyncHydrated.value!==true||routeSyncApplying.value===true)return;const managedKeySet=new Set(Array.isArray(managedKeys)?managedKeys:[]);const currentQuery=asPlainObject(operationScope.routeContext.route?.query||{});const nextQuery={};for(const[key,value]of Object.entries(currentQuery)){if(managedKeySet.has(key))continue;nextQuery[key]=value}for(const[key,value]of Object.entries(asPlainObject(desiredQuery)))nextQuery[key]=value;if(buildRouteQueryCompareToken(currentQuery)===buildRouteQueryCompareToken(nextQuery))return;routeSyncApplying.value=true;try{if(routeSyncConfig.mode===`push`)await router.push({query:nextQuery});else await router.replace({query:nextQuery})}finally{routeSyncApplying.value=false}})}watch(activeSearchQuery,(nextValue,previousValue)=>{if(!querySearchEnabled.value)return;if(nextValue===previousValue)return;list.trimToFirstPage()});watch([activeQueryParamsToken,activeRequestQueryParamsToken,activeRequestFieldsetsToken],()=>{list.trimToFirstPage()});const filteredItems=computed(()=>{const sourceItems=Array.isArray(list.items.value)?list.items.value:[];if(searchConfig.enabled!==true||searchConfig.mode!==`local`)return sourceItems;const queryValue=activeSearchQuery.value;if(!queryValue)return sourceItems;return sourceItems.filter(item=>matchesLocalSearch(item,queryValue,searchConfig.fields))});const isInitialLoading=operationScope.isLoading(list.isInitialLoading);const isFetching=operationScope.isLoading(list.isFetching);const isRefetching=computed(()=>Boolean(isFetching.value&&!isInitialLoading.value));const loadError=operationScope.loadError(list.loadError);const isLoading=operationScope.isLoading(list.isLoading);const listUiRuntime=createListUiRuntime({items:filteredItems,isInitialLoading,recordIdParam,recordIdSelector,routeParams:computed(()=>operationScope.routeContext.route?.params||{}),routeParamNames:computed(()=>resolveRouteParamNamesInOrder(operationScope.routeContext.route)),routePath:computed(()=>operationScope.routeContext.route?.path||``),viewUrlTemplate,editUrlTemplate});setupOperationErrorReporting({source:`${placementSource}.load`,loadError,dedupeWindowMs:0,loadActionFactory:()=>({label:`Retry`,dismissOnRun:true,handler(){list.reload()}})});return proxyRefs({canView,isInitialLoading,isFetching,isRefetching,isLoading,isLoadingMore:list.isLoadingMore,hasMore:list.hasMore,loadError,pages:list.pages,items:filteredItems,reload:list.reload,loadMore:list.loadMore,hasViewUrl:listUiRuntime.hasViewUrl,hasEditUrl:listUiRuntime.hasEditUrl,actionColumnCount:listUiRuntime.actionColumnCount,showListSkeleton:listUiRuntime.showListSkeleton,resolveRowKey:listUiRuntime.resolveRowKey,resolveParams:listUiRuntime.resolveParams,resolveViewUrl:listUiRuntime.resolveViewUrl,resolveEditUrl:listUiRuntime.resolveEditUrl,searchEnabled:searchConfig.enabled,searchMode:searchConfig.mode,searchQuery,searchLabel:searchConfig.label,searchPlaceholder:searchConfig.placeholder,isSearchDebouncing,activeQueryParamsToken})}function normalizeStatusList(value){if(Array.isArray(value))return value.map(entry=>Number(entry)).filter(entry=>Number.isInteger(entry)&&entry>0);return[404]}function useViewCore({resource,model,canView,mapLoadedToModel,notFoundStatuses=[404],notFoundMessage=`Record not found.`}={}){const statusList=normalizeStatusList(notFoundStatuses);watchResourceModelState({resource,model,mapLoadedToModel,resolveMapContext(){return{resource}}});const data=resource?.data;const record=computed(()=>model!==void 0?model:data?.value);const isLoading=computed(()=>{if(resource?.isInitialLoading?.value!==void 0)return Boolean(resource.isInitialLoading.value);return Boolean(resource?.query?.isPending?.value)});const isFetching=computed(()=>{if(resource?.isFetching?.value!==void 0)return Boolean(resource.isFetching.value);return Boolean(resource?.query?.isFetching?.value)});const error=computed(()=>resource?.query?.error?.value||null);const isNotFound=computed(()=>{const status=Number(error.value?.status||0);return statusList.includes(status)});const notFoundError=computed(()=>{if(!isNotFound.value)return``;return String(notFoundMessage||`Record not found.`)});const loadError=computed(()=>{if(isNotFound.value)return``;return String(resource?.loadError?.value||``).trim()});const resolvedCanView=computed(()=>{if(canView===void 0)return true;return Boolean(canView?.value)});async function refresh(){return resource?.reload?.()}return Object.freeze({record,isLoading,isFetching,isNotFound,notFoundError,loadError,canView:resolvedCanView,refresh})}function resolveRecordId({routeParams,recordIdParam,routeRecordId}){const explicitRecordId=toRouteParamValue(typeof routeRecordId===`function`?routeRecordId():unref(routeRecordId));if(explicitRecordId)return explicitRecordId;return toRouteParamValue(routeParams[recordIdParam])}function createViewUiRuntime({recordIdParam=`recordId`,routeParams=null,routeParamNames=null,routePath=``,routeRecordId=null,apiUrlTemplate=``,listUrlTemplate=``,editUrlTemplate=``}={}){const normalizedRecordIdParam=normalizeRouteParamName(recordIdParam,{context:`useView recordIdParam`});const normalizedApiUrlTemplate=String(apiUrlTemplate||``).trim();const normalizedListUrlTemplate=String(listUrlTemplate||``).trim();const normalizedEditUrlTemplate=String(editUrlTemplate||``).trim();function resolveTemplatePath(urlTemplate=``,extraParams={}){const normalizedTemplate=String(urlTemplate||``).trim();if(!normalizedTemplate)return``;const currentRouteParams=resolveRouteParamsSource(routeParams);const sourceParams={...currentRouteParams,...asPlainObject(extraParams)};const resolvedRecordId=toRouteParamValue(sourceParams[normalizedRecordIdParam])||resolveRecordId({routeParams:currentRouteParams,recordIdParam:normalizedRecordIdParam,routeRecordId});sourceParams[normalizedRecordIdParam]=resolvedRecordId;const currentPathname=resolveScopedRoutePathname({currentPathname:routePath,params:currentRouteParams,orderedParamNames:routeParamNames,anchorParamName:normalizedRecordIdParam,anchorParamValue:resolvedRecordId,anchorMode:`at`});return resolveRouteTemplateLocation(normalizedTemplate,{params:sourceParams,currentPathname})}const recordId=computed(()=>resolveRecordId({routeParams:resolveRouteParamsSource(routeParams),recordIdParam:normalizedRecordIdParam,routeRecordId}));const apiSuffix=computed(()=>resolveTemplatePath(normalizedApiUrlTemplate));const listUrl=computed(()=>resolveTemplatePath(normalizedListUrlTemplate));const editUrl=computed(()=>resolveTemplatePath(normalizedEditUrlTemplate));function resolveParams(urlTemplate=``,extraParams={}){return resolveTemplatePath(urlTemplate,extraParams)}return Object.freeze({recordId,apiSuffix,listUrl,editUrl,resolveParams})}function useView({resource=null,ownershipFilter=ROUTE_VISIBILITY_WORKSPACE,surfaceId=``,access=`auto`,apiSuffix=``,queryKeyFactory=null,viewPermissions=[],readMethod=`GET`,readEnabled=true,client=null,transport=null,requestRecovery=null,requestRecoveryLabel=`Resource`,placementSource=`http-web.view`,fallbackLoadError=`Unable to load resource.`,notFoundStatuses=[404],notFoundMessage=`Record not found.`,model,mapLoadedToModel,requestQueryParams=null,requestFieldsets=null,recordIdParam=`recordId`,routeParams=null,routeRecordId=null,apiUrlTemplate=``,listUrlTemplate=``,editUrlTemplate=``,includeRecordIdInQueryKey=false,realtime=void 0,adapter=null}={}){const route=useRoute();const viewUiRuntime=createViewUiRuntime({recordIdParam,routeParams:routeParams??computed(()=>route?.params||{}),routeParamNames:computed(()=>resolveRouteParamNamesInOrder(route)),routePath:computed(()=>route?.path||``),routeRecordId,apiUrlTemplate,listUrlTemplate,editUrlTemplate});const effectiveApiSuffix=String(apiUrlTemplate||``).trim()?viewUiRuntime.apiSuffix:apiSuffix;const operationScope=resolveOperationAdapter(adapter,{context:`useView adapter`}).useOperationScope({ownershipFilter,surfaceId,access,placementSource,apiSuffix:effectiveApiSuffix,readEnabled,queryKeyFactory,permissionSets:{view:viewPermissions},realtime:resolveOperationRealtimeOptions({realtime,fallbackRealtime:resource?.operations?.view?.realtime||resource?.operations?.list?.realtime||null})});const queryParamsContext=computed(()=>{return Object.freeze({surfaceId:operationScope.routeContext.currentSurfaceId.value,scopeParamValue:operationScope.scopeParamValue.value,ownershipFilter:operationScope.normalizedOwnershipFilter,recordId:viewUiRuntime.recordId.value})});const baseQueryKey=computed(()=>{const next=[...Array.isArray(operationScope.queryKey.value)?operationScope.queryKey.value:[]];if(!includeRecordIdInQueryKey)return next;const recordIdToken=String(viewUiRuntime.recordId.value||``).trim();return[...next,recordIdToken]});const requestQueryRuntime=createRequestQueryRuntime({requestQueryParams,requestFieldsets,context:queryParamsContext,sourceQueryKey:baseQueryKey});const canView=operationScope.permissionGate(`view`);const endpointResource=useEndpointResource({queryKey:requestQueryRuntime.queryKey,path:operationScope.apiPath,enabled:operationScope.queryCanRun(canView),client,readMethod,readQuery:requestQueryRuntime.requestQuery,transport,requestRecovery,requestRecoveryLabel,refreshOnPull:true,fallbackLoadError});const view=useViewCore({resource:endpointResource,model,canView,mapLoadedToModel,notFoundStatuses,notFoundMessage});const loadError=operationScope.loadError(view.loadError);const isLoading=operationScope.isLoading(view.isLoading);const isFetching=operationScope.isLoading(view.isFetching);const isRefetching=computed(()=>Boolean(isFetching.value&&!isLoading.value));setupOperationErrorReporting({source:`${placementSource}.load`,loadError,notFoundError:view.notFoundError,dedupeWindowMs:0,loadActionFactory:()=>({label:`Retry`,dismissOnRun:true,handler(){view.refresh()}})});return proxyRefs({record:view.record,recordId:viewUiRuntime.recordId,listUrl:viewUiRuntime.listUrl,editUrl:viewUiRuntime.editUrl,resolveParams:viewUiRuntime.resolveParams,canView,isLoading,isFetching,isRefetching,isNotFound:view.isNotFound,notFoundError:view.notFoundError,loadError,refresh:view.refresh,resource:endpointResource})}var client_exports$5=__exportAll({CrudAddEditScreen:()=>CrudAddEditScreen_default,CrudDeleteAction:()=>_sfc_main$19,CrudListBulkActionSurface:()=>CrudListBulkActionSurface_default,CrudListFilterSurface:()=>CrudListFilterSurface_default,CrudListScreen:()=>CrudListScreen_default,CrudViewScreen:()=>CrudViewScreen_default,configureHttpWebClient:()=>configureHttpWebClient,createHttpWebClient:()=>createHttpWebClient,defineCrudListBulkActions:()=>defineCrudListBulkActions,defineCrudListFilters:()=>defineCrudListFilters,defineCrudListRowActions:()=>defineCrudListRowActions,getHttpWebClient:()=>getHttpWebClient,httpWebClient:()=>httpWebClient,useAccess:()=>useAccess,useAddEdit:()=>useAddEdit,useCommand:()=>useCommand,useEndpointResource:()=>useEndpointResource,useList:()=>useList,usePagedCollection:()=>usePagedCollection,useRealtimeQueryInvalidation:()=>useRealtimeQueryInvalidation,useUiFeedback:()=>useUiFeedback,useView:()=>useView});function asLogger(value){if(!value||typeof value!==`object`||Array.isArray(value))return null;return value}function callLoggerMethod(logger,methodName,fallbackMethodName,args){if(logger&&typeof logger[methodName]===`function`){logger[methodName](...args);return}if(typeof console[fallbackMethodName]===`function`)console[fallbackMethodName](...args)}function createProviderLogger(loggerLike=null,{debugEnabled=false,debugMethod=`info`}={}){const logger=asLogger(loggerLike);const resolvedDebugMethod=String(debugMethod||`info`).trim()||`info`;return Object.freeze({debug:(...args)=>{if(debugEnabled!==true)return;callLoggerMethod(logger,resolvedDebugMethod,`info`,args)},info:(...args)=>{callLoggerMethod(logger,`info`,`info`,args)},warn:(...args)=>{callLoggerMethod(logger,`warn`,`warn`,args)},error:(...args)=>{callLoggerMethod(logger,`error`,`error`,args)}})}var ROOT_STYLE=Object.freeze({alignItems:`center`,background:`transparent`,border:`0`,borderRadius:`50%`,display:`inline-flex`,height:`48px`,justifyContent:`center`,padding:`0`,width:`48px`});var DOT_STYLE=Object.freeze({borderRadius:`9999px`,boxShadow:`0 0 0 2px rgba(255, 255, 255, 0.82)`,display:`block`,height:`10px`,width:`10px`});var SR_ONLY_STYLE=Object.freeze({border:`0`,clip:`rect(0, 0, 0, 0)`,clipPath:`inset(50%)`,height:`1px`,margin:`-1px`,overflow:`hidden`,padding:`0`,position:`absolute`,whiteSpace:`nowrap`,width:`1px`});function resolveTooltipText({realtimeAvailable,connected}){if(!realtimeAvailable)return`Realtime is unavailable. Live updates are disabled for this page.`;if(connected)return`Realtime is connected. Live updates are active.`;return`Live updates are disconnected. Click to reconnect. If your session expired, sign in again.`}var RealtimeConnectionIndicator=defineComponent$1({name:`RealtimeConnectionIndicator`,setup(){const socket=useRealtimeSocket({required:false});const connected=ref(Boolean(socket?.connected));const realtimeAvailable=socket!==EMPTY_REALTIME_SOCKET;let detach=null;const tooltipText=computed(()=>{return resolveTooltipText({realtimeAvailable,connected:connected.value})});const statusLabel=computed(()=>connected.value?`Realtime connected`:`Realtime disconnected`);const dotStyle=computed(()=>({...DOT_STYLE,backgroundColor:connected.value?`#22c55e`:`#ef4444`}));function syncConnected(nextState){connected.value=Boolean(nextState)}function bindSocketStatusListeners(){if(!realtimeAvailable||typeof socket.on!==`function`){syncConnected(false);return}syncConnected(socket.connected);const onConnect=()=>syncConnected(true);const onDisconnect=()=>syncConnected(false);const onConnectError=()=>syncConnected(false);socket.on(`connect`,onConnect);socket.on(`disconnect`,onDisconnect);socket.on(`connect_error`,onConnectError);detach=()=>{if(typeof socket.off===`function`){socket.off(`connect`,onConnect);socket.off(`disconnect`,onDisconnect);socket.off(`connect_error`,onConnectError)}}}onMounted(()=>{bindSocketStatusListeners()});onBeforeUnmount(()=>{if(typeof detach===`function`)detach();detach=null});return()=>h$1(`button`,{disabled:!realtimeAvailable||connected.value,onClick:()=>socket.connect?.(),style:{...ROOT_STYLE,cursor:realtimeAvailable&&!connected.value?`pointer`:`default`},title:tooltipText.value,type:`button`,"aria-label":realtimeAvailable&&!connected.value?`Reconnect live updates`:statusLabel.value},[h$1(`span`,{style:dotStyle.value,"aria-hidden":`true`}),h$1(`span`,{style:SR_ONLY_STYLE},statusLabel.value)])}});var PACKET_TYPES=Object.create(null);PACKET_TYPES[`open`]=`0`;PACKET_TYPES[`close`]=`1`;PACKET_TYPES[`ping`]=`2`;PACKET_TYPES[`pong`]=`3`;PACKET_TYPES[`message`]=`4`;PACKET_TYPES[`upgrade`]=`5`;PACKET_TYPES[`noop`]=`6`;var PACKET_TYPES_REVERSE=Object.create(null);Object.keys(PACKET_TYPES).forEach(key=>{PACKET_TYPES_REVERSE[PACKET_TYPES[key]]=key});var ERROR_PACKET={type:`error`,data:`parser error`};var withNativeBlob$1=typeof Blob===`function`||typeof Blob!==`undefined`&&Object.prototype.toString.call(Blob)===`[object BlobConstructor]`;var withNativeArrayBuffer$2=typeof ArrayBuffer===`function`;var isView$1=obj=>{return typeof ArrayBuffer.isView===`function`?ArrayBuffer.isView(obj):obj&&obj.buffer instanceof ArrayBuffer};var encodePacket=({type,data},supportsBinary,callback)=>{if(withNativeBlob$1&&data instanceof Blob){if(supportsBinary)return callback(data);else return encodeBlobAsBase64(data,callback)}else if(withNativeArrayBuffer$2&&(data instanceof ArrayBuffer||isView$1(data))){if(supportsBinary)return callback(data);else return encodeBlobAsBase64(new Blob([data]),callback)}return callback(PACKET_TYPES[type]+(data||``))};var encodeBlobAsBase64=(data,callback)=>{const fileReader=new FileReader;fileReader.onload=function(){const content=fileReader.result.split(`,`)[1];callback(`b`+(content||``))};return fileReader.readAsDataURL(data)};function toArray(data){if(data instanceof Uint8Array)return data;else if(data instanceof ArrayBuffer)return new Uint8Array(data);else return new Uint8Array(data.buffer,data.byteOffset,data.byteLength)}var TEXT_ENCODER;function encodePacketToBinary(packet,callback){if(withNativeBlob$1&&packet.data instanceof Blob)return packet.data.arrayBuffer().then(toArray).then(callback);else if(withNativeArrayBuffer$2&&(packet.data instanceof ArrayBuffer||isView$1(packet.data)))return callback(toArray(packet.data));encodePacket(packet,false,encoded=>{if(!TEXT_ENCODER)TEXT_ENCODER=new TextEncoder;callback(TEXT_ENCODER.encode(encoded))})}var chars=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`;var lookup$1=typeof Uint8Array===`undefined`?[]:new Uint8Array(256);for(let i=0;i<64;i++)lookup$1[chars.charCodeAt(i)]=i;var decode$1=base64=>{let bufferLength=base64.length*.75,len=base64.length,i,p=0,encoded1,encoded2,encoded3,encoded4;if(base64[base64.length-1]===`=`){bufferLength--;if(base64[base64.length-2]===`=`)bufferLength--}const arraybuffer=new ArrayBuffer(bufferLength),bytes=new Uint8Array(arraybuffer);for(i=0;i<len;i+=4){encoded1=lookup$1[base64.charCodeAt(i)];encoded2=lookup$1[base64.charCodeAt(i+1)];encoded3=lookup$1[base64.charCodeAt(i+2)];encoded4=lookup$1[base64.charCodeAt(i+3)];bytes[p++]=encoded1<<2|encoded2>>4;bytes[p++]=(encoded2&15)<<4|encoded3>>2;bytes[p++]=(encoded3&3)<<6|encoded4&63}return arraybuffer};var withNativeArrayBuffer$1=typeof ArrayBuffer===`function`;var decodePacket=(encodedPacket,binaryType)=>{if(typeof encodedPacket!==`string`)return{type:`message`,data:mapBinary(encodedPacket,binaryType)};const type=encodedPacket.charAt(0);if(type===`b`)return{type:`message`,data:decodeBase64Packet(encodedPacket.substring(1),binaryType)};if(!PACKET_TYPES_REVERSE[type])return ERROR_PACKET;return encodedPacket.length>1?{type:PACKET_TYPES_REVERSE[type],data:encodedPacket.substring(1)}:{type:PACKET_TYPES_REVERSE[type]}};var decodeBase64Packet=(data,binaryType)=>{if(withNativeArrayBuffer$1){const decoded=decode$1(data);return mapBinary(decoded,binaryType)}else return{base64:true,data}};var mapBinary=(data,binaryType)=>{switch(binaryType){case`blob`:if(data instanceof Blob)return data;else return new Blob([data]);default:if(data instanceof ArrayBuffer)return data;else return data.buffer}};var SEPARATOR=String.fromCharCode(30);var encodePayload=(packets,callback)=>{const length=packets.length;const encodedPackets=new Array(length);let count=0;packets.forEach((packet,i)=>{encodePacket(packet,false,encodedPacket=>{encodedPackets[i]=encodedPacket;if(++count===length)callback(encodedPackets.join(SEPARATOR))})})};var decodePayload=(encodedPayload,binaryType)=>{const encodedPackets=encodedPayload.split(SEPARATOR);const packets=[];for(let i=0;i<encodedPackets.length;i++){const decodedPacket=decodePacket(encodedPackets[i],binaryType);packets.push(decodedPacket);if(decodedPacket.type===`error`)break}return packets};function createPacketEncoderStream(){return new TransformStream({transform(packet,controller){encodePacketToBinary(packet,encodedPacket=>{const payloadLength=encodedPacket.length;let header;if(payloadLength<126){header=new Uint8Array(1);new DataView(header.buffer).setUint8(0,payloadLength)}else if(payloadLength<65536){header=new Uint8Array(3);const view=new DataView(header.buffer);view.setUint8(0,126);view.setUint16(1,payloadLength)}else{header=new Uint8Array(9);const view=new DataView(header.buffer);view.setUint8(0,127);view.setBigUint64(1,BigInt(payloadLength))}if(packet.data&&typeof packet.data!==`string`)header[0]|=128;controller.enqueue(header);controller.enqueue(encodedPacket)})}})}var TEXT_DECODER;function totalLength(chunks){return chunks.reduce((acc,chunk)=>acc+chunk.length,0)}function concatChunks(chunks,size){if(chunks[0].length===size)return chunks.shift();const buffer=new Uint8Array(size);let j=0;for(let i=0;i<size;i++){buffer[i]=chunks[0][j++];if(j===chunks[0].length){chunks.shift();j=0}}if(chunks.length&&j<chunks[0].length)chunks[0]=chunks[0].slice(j);return buffer}function createPacketDecoderStream(maxPayload,binaryType){if(!TEXT_DECODER)TEXT_DECODER=new TextDecoder;const chunks=[];let state=0;let expectedLength=-1;let isBinary=false;return new TransformStream({transform(chunk,controller){chunks.push(chunk);while(true){if(state===0){if(totalLength(chunks)<1)break;const header=concatChunks(chunks,1);isBinary=(header[0]&128)===128;expectedLength=header[0]&127;if(expectedLength<126)state=3;else if(expectedLength===126)state=1;else state=2}else if(state===1){if(totalLength(chunks)<2)break;const headerArray=concatChunks(chunks,2);expectedLength=new DataView(headerArray.buffer,headerArray.byteOffset,headerArray.length).getUint16(0);state=3}else if(state===2){if(totalLength(chunks)<8)break;const headerArray=concatChunks(chunks,8);const view=new DataView(headerArray.buffer,headerArray.byteOffset,headerArray.length);const n=view.getUint32(0);if(n>Math.pow(2,21)-1){controller.enqueue(ERROR_PACKET);break}expectedLength=n*Math.pow(2,32)+view.getUint32(4);state=3}else{if(totalLength(chunks)<expectedLength)break;const data=concatChunks(chunks,expectedLength);controller.enqueue(decodePacket(isBinary?data:TEXT_DECODER.decode(data),binaryType));state=0}if(expectedLength===0||expectedLength>maxPayload){controller.enqueue(ERROR_PACKET);break}}}})}function Emitter(obj){if(obj)return mixin(obj)}function mixin(obj){for(var key in Emitter.prototype)obj[key]=Emitter.prototype[key];return obj}Emitter.prototype.on=Emitter.prototype.addEventListener=function(event,fn){this._callbacks=this._callbacks||{};(this._callbacks[`$`+event]=this._callbacks[`$`+event]||[]).push(fn);return this};Emitter.prototype.once=function(event,fn){function on(){this.off(event,on);fn.apply(this,arguments)}on.fn=fn;this.on(event,on);return this};Emitter.prototype.off=Emitter.prototype.removeListener=Emitter.prototype.removeAllListeners=Emitter.prototype.removeEventListener=function(event,fn){this._callbacks=this._callbacks||{};if(0==arguments.length){this._callbacks={};return this}var callbacks=this._callbacks[`$`+event];if(!callbacks)return this;if(1==arguments.length){delete this._callbacks[`$`+event];return this}var cb;for(var i=0;i<callbacks.length;i++){cb=callbacks[i];if(cb===fn||cb.fn===fn){callbacks.splice(i,1);break}}if(callbacks.length===0)delete this._callbacks[`$`+event];return this};Emitter.prototype.emit=function(event){this._callbacks=this._callbacks||{};var args=new Array(arguments.length-1),callbacks=this._callbacks[`$`+event];for(var i=1;i<arguments.length;i++)args[i-1]=arguments[i];if(callbacks){callbacks=callbacks.slice(0);for(var i=0,len=callbacks.length;i<len;++i)callbacks[i].apply(this,args)}return this};Emitter.prototype.emitReserved=Emitter.prototype.emit;Emitter.prototype.listeners=function(event){this._callbacks=this._callbacks||{};return this._callbacks[`$`+event]||[]};Emitter.prototype.hasListeners=function(event){return!!this.listeners(event).length};var nextTick=(()=>{if(typeof Promise===`function`&&typeof Promise.resolve===`function`)return cb=>Promise.resolve().then(cb);else return(cb,setTimeoutFn)=>setTimeoutFn(cb,0)})();var globalThisShim=(()=>{if(typeof self!==`undefined`)return self;else if(typeof window!==`undefined`)return window;else return Function(`return this`)()})();var defaultBinaryType=`arraybuffer`;function createCookieJar(){}function pick(obj,...attr){return attr.reduce((acc,k)=>{if(obj.hasOwnProperty(k))acc[k]=obj[k];return acc},{})}var NATIVE_SET_TIMEOUT=globalThisShim.setTimeout;var NATIVE_CLEAR_TIMEOUT=globalThisShim.clearTimeout;function installTimerFunctions(obj,opts){if(opts.useNativeTimers){obj.setTimeoutFn=NATIVE_SET_TIMEOUT.bind(globalThisShim);obj.clearTimeoutFn=NATIVE_CLEAR_TIMEOUT.bind(globalThisShim)}else{obj.setTimeoutFn=globalThisShim.setTimeout.bind(globalThisShim);obj.clearTimeoutFn=globalThisShim.clearTimeout.bind(globalThisShim)}}var BASE64_OVERHEAD=1.33;function byteLength(obj){if(typeof obj===`string`)return utf8Length(obj);return Math.ceil((obj.byteLength||obj.size)*BASE64_OVERHEAD)}function utf8Length(str){let c=0,length=0;for(let i=0,l=str.length;i<l;i++){c=str.charCodeAt(i);if(c<128)length+=1;else if(c<2048)length+=2;else if(c<55296||c>=57344)length+=3;else{i++;length+=4}}return length}function randomString(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function encode(obj){let str=``;for(let i in obj)if(obj.hasOwnProperty(i)){if(str.length)str+=`&`;str+=encodeURIComponent(i)+`=`+encodeURIComponent(obj[i])}return str}function decode(qs){let qry={};let pairs=qs.split(`&`);for(let i=0,l=pairs.length;i<l;i++){let pair=pairs[i].split(`=`);qry[decodeURIComponent(pair[0])]=decodeURIComponent(pair[1])}return qry}var TransportError=class extends Error{constructor(reason,description,context){super(reason);this.description=description;this.context=context;this.type=`TransportError`}};var Transport=class extends Emitter{constructor(opts){super();this.writable=false;installTimerFunctions(this,opts);this.opts=opts;this.query=opts.query;this.socket=opts.socket;this.supportsBinary=!opts.forceBase64}onError(reason,description,context){super.emitReserved(`error`,new TransportError(reason,description,context));return this}open(){this.readyState=`opening`;this.doOpen();return this}close(){if(this.readyState===`opening`||this.readyState===`open`){this.doClose();this.onClose()}return this}send(packets){if(this.readyState===`open`)this.write(packets)}onOpen(){this.readyState=`open`;this.writable=true;super.emitReserved(`open`)}onData(data){const packet=decodePacket(data,this.socket.binaryType);this.onPacket(packet)}onPacket(packet){super.emitReserved(`packet`,packet)}onClose(details){this.readyState=`closed`;super.emitReserved(`close`,details)}pause(onPause){}createUri(schema,query={}){return schema+`://`+this._hostname()+this._port()+this.opts.path+this._query(query)}_hostname(){const hostname=this.opts.hostname;return hostname.indexOf(`:`)===-1?hostname:`[`+hostname+`]`}_port(){if(this.opts.port&&(this.opts.secure&&Number(this.opts.port)!==443||!this.opts.secure&&Number(this.opts.port)!==80))return`:`+this.opts.port;else return``}_query(query){const encodedQuery=encode(query);return encodedQuery.length?`?`+encodedQuery:``}};var Polling=class extends Transport{constructor(){super(...arguments);this._polling=false}get name(){return`polling`}doOpen(){this._poll()}pause(onPause){this.readyState=`pausing`;const pause=()=>{this.readyState=`paused`;onPause()};if(this._polling||!this.writable){let total=0;if(this._polling){total++;this.once(`pollComplete`,function(){--total||pause()})}if(!this.writable){total++;this.once(`drain`,function(){--total||pause()})}}else pause()}_poll(){this._polling=true;this.doPoll();this.emitReserved(`poll`)}onData(data){const callback=packet=>{if(`opening`===this.readyState&&packet.type===`open`)this.onOpen();if(`close`===packet.type){this.onClose({description:`transport closed by the server`});return false}this.onPacket(packet)};decodePayload(data,this.socket.binaryType).forEach(callback);if(`closed`!==this.readyState){this._polling=false;this.emitReserved(`pollComplete`);if(`open`===this.readyState)this._poll()}}doClose(){const close=()=>{this.write([{type:`close`}])};if(`open`===this.readyState)close();else this.once(`open`,close)}write(packets){this.writable=false;encodePayload(packets,data=>{this.doWrite(data,()=>{this.writable=true;this.emitReserved(`drain`)})})}uri(){const schema=this.opts.secure?`https`:`http`;const query=this.query||{};if(false!==this.opts.timestampRequests)query[this.opts.timestampParam]=randomString();if(!this.supportsBinary&&!query.sid)query.b64=1;return this.createUri(schema,query)}};var value=false;try{value=typeof XMLHttpRequest!==`undefined`&&`withCredentials`in new XMLHttpRequest}catch(err){}var hasCORS=value;function empty(){}var BaseXHR=class extends Polling{constructor(opts){super(opts);if(typeof location!==`undefined`){const isSSL=`https:`===location.protocol;let port=location.port;if(!port)port=isSSL?`443`:`80`;this.xd=typeof location!==`undefined`&&opts.hostname!==location.hostname||port!==opts.port}}doWrite(data,fn){const req=this.request({method:`POST`,data});req.on(`success`,fn);req.on(`error`,(xhrStatus,context)=>{this.onError(`xhr post error`,xhrStatus,context)})}doPoll(){const req=this.request();req.on(`data`,this.onData.bind(this));req.on(`error`,(xhrStatus,context)=>{this.onError(`xhr poll error`,xhrStatus,context)});this.pollXhr=req}};var Request=class Request extends Emitter{constructor(createRequest,uri,opts){super();this.createRequest=createRequest;installTimerFunctions(this,opts);this._opts=opts;this._method=opts.method||`GET`;this._uri=uri;this._data=void 0!==opts.data?opts.data:null;this._create()}_create(){var _a;const opts=pick(this._opts,`agent`,`pfx`,`key`,`passphrase`,`cert`,`ca`,`ciphers`,`rejectUnauthorized`,`autoUnref`);opts.xdomain=!!this._opts.xd;const xhr=this._xhr=this.createRequest(opts);try{xhr.open(this._method,this._uri,true);try{if(this._opts.extraHeaders){xhr.setDisableHeaderCheck&&xhr.setDisableHeaderCheck(true);for(let i in this._opts.extraHeaders)if(this._opts.extraHeaders.hasOwnProperty(i))xhr.setRequestHeader(i,this._opts.extraHeaders[i])}}catch(e){}if(`POST`===this._method)try{xhr.setRequestHeader(`Content-type`,`text/plain;charset=UTF-8`)}catch(e){}try{xhr.setRequestHeader(`Accept`,`*/*`)}catch(e){}(_a=this._opts.cookieJar)===null||_a===void 0||_a.addCookies(xhr);if(`withCredentials`in xhr)xhr.withCredentials=this._opts.withCredentials;if(this._opts.requestTimeout)xhr.timeout=this._opts.requestTimeout;xhr.onreadystatechange=()=>{var _a;if(xhr.readyState===3)(_a=this._opts.cookieJar)===null||_a===void 0||_a.parseCookies(xhr.getResponseHeader(`set-cookie`));if(4!==xhr.readyState)return;if(200===xhr.status||1223===xhr.status)this._onLoad();else this.setTimeoutFn(()=>{this._onError(typeof xhr.status===`number`?xhr.status:0)},0)};xhr.send(this._data)}catch(e){this.setTimeoutFn(()=>{this._onError(e)},0);return}if(typeof document!==`undefined`){this._index=Request.requestsCount++;Request.requests[this._index]=this}}_onError(err){this.emitReserved(`error`,err,this._xhr);this._cleanup(true)}_cleanup(fromError){if(`undefined`===typeof this._xhr||null===this._xhr)return;this._xhr.onreadystatechange=empty;if(fromError)try{this._xhr.abort()}catch(e){}if(typeof document!==`undefined`)delete Request.requests[this._index];this._xhr=null}_onLoad(){const data=this._xhr.responseText;if(data!==null){this.emitReserved(`data`,data);this.emitReserved(`success`);this._cleanup()}}abort(){this._cleanup()}};Request.requestsCount=0;Request.requests={};if(typeof document!==`undefined`){if(typeof attachEvent===`function`)attachEvent(`onunload`,unloadHandler);else if(typeof addEventListener===`function`){const terminationEvent=`onpagehide`in globalThisShim?`pagehide`:`unload`;addEventListener(terminationEvent,unloadHandler,false)}}function unloadHandler(){for(let i in Request.requests)if(Request.requests.hasOwnProperty(i))Request.requests[i].abort()}var hasXHR2=(function(){const xhr=newRequest({xdomain:false});return xhr&&xhr.responseType!==null})();var XHR=class extends BaseXHR{constructor(opts){super(opts);const forceBase64=opts&&opts.forceBase64;this.supportsBinary=hasXHR2&&!forceBase64}request(opts={}){Object.assign(opts,{xd:this.xd},this.opts);return new Request(newRequest,this.uri(),opts)}};function newRequest(opts){const xdomain=opts.xdomain;try{if(`undefined`!==typeof XMLHttpRequest&&(!xdomain||hasCORS))return new XMLHttpRequest}catch(e){}if(!xdomain)try{return new globalThisShim[[`Active`].concat(`Object`).join(`X`)](`Microsoft.XMLHTTP`)}catch(e){}}var isReactNative=typeof navigator!==`undefined`&&typeof navigator.product===`string`&&navigator.product.toLowerCase()===`reactnative`;var BaseWS=class extends Transport{get name(){return`websocket`}doOpen(){const uri=this.uri();const protocols=this.opts.protocols;const opts=isReactNative?{}:pick(this.opts,`agent`,`perMessageDeflate`,`pfx`,`key`,`passphrase`,`cert`,`ca`,`ciphers`,`rejectUnauthorized`,`localAddress`,`protocolVersion`,`origin`,`maxPayload`,`family`,`checkServerIdentity`);if(this.opts.extraHeaders)opts.headers=this.opts.extraHeaders;try{this.ws=this.createSocket(uri,protocols,opts)}catch(err){return this.emitReserved(`error`,err)}this.ws.binaryType=this.socket.binaryType;this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{if(this.opts.autoUnref)this.ws._socket.unref();this.onOpen()};this.ws.onclose=closeEvent=>this.onClose({description:`websocket connection closed`,context:closeEvent});this.ws.onmessage=ev=>this.onData(ev.data);this.ws.onerror=e=>this.onError(`websocket error`,e)}write(packets){this.writable=false;for(let i=0;i<packets.length;i++){const packet=packets[i];const lastPacket=i===packets.length-1;encodePacket(packet,this.supportsBinary,data=>{try{this.doWrite(packet,data)}catch(e){}if(lastPacket)nextTick(()=>{this.writable=true;this.emitReserved(`drain`)},this.setTimeoutFn)})}}doClose(){if(typeof this.ws!==`undefined`){this.ws.onerror=()=>{};this.ws.close();this.ws=null}}uri(){const schema=this.opts.secure?`wss`:`ws`;const query=this.query||{};if(this.opts.timestampRequests)query[this.opts.timestampParam]=randomString();if(!this.supportsBinary)query.b64=1;return this.createUri(schema,query)}};var WebSocketCtor=globalThisShim.WebSocket||globalThisShim.MozWebSocket;var WS=class extends BaseWS{createSocket(uri,protocols,opts){return!isReactNative?protocols?new WebSocketCtor(uri,protocols):new WebSocketCtor(uri):new WebSocketCtor(uri,protocols,opts)}doWrite(_packet,data){this.ws.send(data)}};var WT=class extends Transport{get name(){return`webtransport`}doOpen(){try{this._transport=new WebTransport(this.createUri(`https`),this.opts.transportOptions[this.name])}catch(err){return this.emitReserved(`error`,err)}this._transport.closed.then(()=>{this.onClose()}).catch(err=>{this.onError(`webtransport error`,err)});this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(stream=>{const decoderStream=createPacketDecoderStream(Number.MAX_SAFE_INTEGER,this.socket.binaryType);const reader=stream.readable.pipeThrough(decoderStream).getReader();const encoderStream=createPacketEncoderStream();encoderStream.readable.pipeTo(stream.writable);this._writer=encoderStream.writable.getWriter();const read=()=>{reader.read().then(({done,value})=>{if(done)return;this.onPacket(value);read()}).catch(err=>{})};read();const packet={type:`open`};if(this.query.sid)packet.data=`{"sid":"${this.query.sid}"}`;this._writer.write(packet).then(()=>this.onOpen())})})}write(packets){this.writable=false;for(let i=0;i<packets.length;i++){const packet=packets[i];const lastPacket=i===packets.length-1;this._writer.write(packet).then(()=>{if(lastPacket)nextTick(()=>{this.writable=true;this.emitReserved(`drain`)},this.setTimeoutFn)})}}doClose(){var _a;(_a=this._transport)===null||_a===void 0||_a.close()}};var transports={websocket:WS,webtransport:WT,polling:XHR};var re=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;var parts=[`source`,`protocol`,`authority`,`userInfo`,`user`,`password`,`host`,`port`,`relative`,`path`,`directory`,`file`,`query`,`anchor`];function parse(str){if(str.length>8e3)throw`URI too long`;const src=str,b=str.indexOf(`[`),e=str.indexOf(`]`);if(b!=-1&&e!=-1)str=str.substring(0,b)+str.substring(b,e).replace(/:/g,`;`)+str.substring(e,str.length);let m=re.exec(str||``),uri={},i=14;while(i--)uri[parts[i]]=m[i]||``;if(b!=-1&&e!=-1){uri.source=src;uri.host=uri.host.substring(1,uri.host.length-1).replace(/;/g,`:`);uri.authority=uri.authority.replace(`[`,``).replace(`]`,``).replace(/;/g,`:`);uri.ipv6uri=true}uri.pathNames=pathNames(uri,uri[`path`]);uri.queryKey=queryKey(uri,uri[`query`]);return uri}function pathNames(obj,path){const names=path.replace(/\/{2,9}/g,`/`).split(`/`);if(path.slice(0,1)==`/`||path.length===0)names.splice(0,1);if(path.slice(-1)==`/`)names.splice(names.length-1,1);return names}function queryKey(uri,query){const data={};query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function($0,$1,$2){if($1)data[$1]=$2});return data}var withEventListeners=typeof addEventListener===`function`&&typeof removeEventListener===`function`;var OFFLINE_EVENT_LISTENERS=[];if(withEventListeners)addEventListener(`offline`,()=>{OFFLINE_EVENT_LISTENERS.forEach(listener=>listener())},false);var SocketWithoutUpgrade=class SocketWithoutUpgrade extends Emitter{constructor(uri,opts){super();this.binaryType=defaultBinaryType;this.writeBuffer=[];this._prevBufferLen=0;this._pingInterval=-1;this._pingTimeout=-1;this._maxPayload=-1;this._pingTimeoutTime=Infinity;if(uri&&`object`===typeof uri){opts=uri;uri=null}if(uri){const parsedUri=parse(uri);opts.hostname=parsedUri.host;opts.secure=parsedUri.protocol===`https`||parsedUri.protocol===`wss`;opts.port=parsedUri.port;if(parsedUri.query)opts.query=parsedUri.query}else if(opts.host)opts.hostname=parse(opts.host).host;installTimerFunctions(this,opts);this.secure=null!=opts.secure?opts.secure:typeof location!==`undefined`&&`https:`===location.protocol;if(opts.hostname&&!opts.port)opts.port=this.secure?`443`:`80`;this.hostname=opts.hostname||(typeof location!==`undefined`?location.hostname:`localhost`);this.port=opts.port||(typeof location!==`undefined`&&location.port?location.port:this.secure?`443`:`80`);this.transports=[];this._transportsByName={};opts.transports.forEach(t=>{const transportName=t.prototype.name;this.transports.push(transportName);this._transportsByName[transportName]=t});this.opts=Object.assign({path:`/engine.io`,agent:false,withCredentials:false,upgrade:true,timestampParam:`t`,rememberUpgrade:false,addTrailingSlash:true,rejectUnauthorized:true,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:false},opts);this.opts.path=this.opts.path.replace(/\/$/,``)+(this.opts.addTrailingSlash?`/`:``);if(typeof this.opts.query===`string`)this.opts.query=decode(this.opts.query);if(withEventListeners){if(this.opts.closeOnBeforeunload){this._beforeunloadEventListener=()=>{if(this.transport){this.transport.removeAllListeners();this.transport.close()}};addEventListener(`beforeunload`,this._beforeunloadEventListener,false)}if(this.hostname!==`localhost`){this._offlineEventListener=()=>{this._onClose(`transport close`,{description:`network connection lost`})};OFFLINE_EVENT_LISTENERS.push(this._offlineEventListener)}}if(this.opts.withCredentials)this._cookieJar=createCookieJar();this._open()}createTransport(name){const query=Object.assign({},this.opts.query);query.EIO=4;query.transport=name;if(this.id)query.sid=this.id;const opts=Object.assign({},this.opts,{query,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[name]);return new this._transportsByName[name](opts)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved(`error`,`No transports available`)},0);return}const transportName=this.opts.rememberUpgrade&&SocketWithoutUpgrade.priorWebsocketSuccess&&this.transports.indexOf(`websocket`)!==-1?`websocket`:this.transports[0];this.readyState=`opening`;const transport=this.createTransport(transportName);transport.open();this.setTransport(transport)}setTransport(transport){if(this.transport)this.transport.removeAllListeners();this.transport=transport;transport.on(`drain`,this._onDrain.bind(this)).on(`packet`,this._onPacket.bind(this)).on(`error`,this._onError.bind(this)).on(`close`,reason=>this._onClose(`transport close`,reason))}onOpen(){this.readyState=`open`;SocketWithoutUpgrade.priorWebsocketSuccess=`websocket`===this.transport.name;this.emitReserved(`open`);this.flush()}_onPacket(packet){if(`opening`===this.readyState||`open`===this.readyState||`closing`===this.readyState){this.emitReserved(`packet`,packet);this.emitReserved(`heartbeat`);switch(packet.type){case`open`:this.onHandshake(JSON.parse(packet.data));break;case`ping`:this._sendPacket(`pong`);this.emitReserved(`ping`);this.emitReserved(`pong`);this._resetPingTimeout();break;case`error`:const err=new Error(`server error`);err.code=packet.data;this._onError(err);break;case`message`:this.emitReserved(`data`,packet.data);this.emitReserved(`message`,packet.data)}}}onHandshake(data){this.emitReserved(`handshake`,data);this.id=data.sid;this.transport.query.sid=data.sid;this._pingInterval=data.pingInterval;this._pingTimeout=data.pingTimeout;this._maxPayload=data.maxPayload;this.onOpen();if(`closed`===this.readyState)return;this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);const delay=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+delay;this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose(`ping timeout`)},delay);if(this.opts.autoUnref)this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen);this._prevBufferLen=0;if(0===this.writeBuffer.length)this.emitReserved(`drain`);else this.flush()}flush(){if(`closed`!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const packets=this._getWritablePackets();this.transport.send(packets);this._prevBufferLen=packets.length;this.emitReserved(`flush`)}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name===`polling`&&this.writeBuffer.length>1))return this.writeBuffer;let payloadSize=1;for(let i=0;i<this.writeBuffer.length;i++){const data=this.writeBuffer[i].data;if(data)payloadSize+=byteLength(data);if(i>0&&payloadSize>this._maxPayload)return this.writeBuffer.slice(0,i);payloadSize+=2}return this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return true;const hasExpired=Date.now()>this._pingTimeoutTime;if(hasExpired){this._pingTimeoutTime=0;nextTick(()=>{this._onClose(`ping timeout`)},this.setTimeoutFn)}return hasExpired}write(msg,options,fn){this._sendPacket(`message`,msg,options,fn);return this}send(msg,options,fn){this._sendPacket(`message`,msg,options,fn);return this}_sendPacket(type,data,options,fn){if(`function`===typeof data){fn=data;data=void 0}if(`function`===typeof options){fn=options;options=null}if(`closing`===this.readyState||`closed`===this.readyState)return;options=options||{};options.compress=false!==options.compress;const packet={type,data,options};this.emitReserved(`packetCreate`,packet);this.writeBuffer.push(packet);if(fn)this.once(`flush`,fn);this.flush()}close(){const close=()=>{this._onClose(`forced close`);this.transport.close()};const cleanupAndClose=()=>{this.off(`upgrade`,cleanupAndClose);this.off(`upgradeError`,cleanupAndClose);close()};const waitForUpgrade=()=>{this.once(`upgrade`,cleanupAndClose);this.once(`upgradeError`,cleanupAndClose)};if(`opening`===this.readyState||`open`===this.readyState){this.readyState=`closing`;if(this.writeBuffer.length)this.once(`drain`,()=>{if(this.upgrading)waitForUpgrade();else close()});else if(this.upgrading)waitForUpgrade();else close()}return this}_onError(err){SocketWithoutUpgrade.priorWebsocketSuccess=false;if(this.opts.tryAllTransports&&this.transports.length>1&&this.readyState===`opening`){this.transports.shift();return this._open()}this.emitReserved(`error`,err);this._onClose(`transport error`,err)}_onClose(reason,description){if(`opening`===this.readyState||`open`===this.readyState||`closing`===this.readyState){this.clearTimeoutFn(this._pingTimeoutTimer);this.transport.removeAllListeners(`close`);this.transport.close();this.transport.removeAllListeners();if(withEventListeners){if(this._beforeunloadEventListener)removeEventListener(`beforeunload`,this._beforeunloadEventListener,false);if(this._offlineEventListener){const i=OFFLINE_EVENT_LISTENERS.indexOf(this._offlineEventListener);if(i!==-1)OFFLINE_EVENT_LISTENERS.splice(i,1)}}this.readyState=`closed`;this.id=null;this.emitReserved(`close`,reason,description);this.writeBuffer=[];this._prevBufferLen=0}}};SocketWithoutUpgrade.protocol=4;var SocketWithUpgrade=class extends SocketWithoutUpgrade{constructor(){super(...arguments);this._upgrades=[]}onOpen(){super.onOpen();if(`open`===this.readyState&&this.opts.upgrade)for(let i=0;i<this._upgrades.length;i++)this._probe(this._upgrades[i])}_probe(name){let transport=this.createTransport(name);let failed=false;SocketWithoutUpgrade.priorWebsocketSuccess=false;const onTransportOpen=()=>{if(failed)return;transport.send([{type:`ping`,data:`probe`}]);transport.once(`packet`,msg=>{if(failed)return;if(`pong`===msg.type&&`probe`===msg.data){this.upgrading=true;this.emitReserved(`upgrading`,transport);if(!transport)return;SocketWithoutUpgrade.priorWebsocketSuccess=`websocket`===transport.name;this.transport.pause(()=>{if(failed)return;if(`closed`===this.readyState)return;cleanup();this.setTransport(transport);transport.send([{type:`upgrade`}]);this.emitReserved(`upgrade`,transport);transport=null;this.upgrading=false;this.flush()})}else{const err=new Error(`probe error`);err.transport=transport.name;this.emitReserved(`upgradeError`,err)}})};function freezeTransport(){if(failed)return;failed=true;cleanup();transport.close();transport=null}const onerror=err=>{const error=new Error(`probe error: `+err);error.transport=transport.name;freezeTransport();this.emitReserved(`upgradeError`,error)};function onTransportClose(){onerror(`transport closed`)}function onclose(){onerror(`socket closed`)}function onupgrade(to){if(transport&&to.name!==transport.name)freezeTransport()}const cleanup=()=>{transport.removeListener(`open`,onTransportOpen);transport.removeListener(`error`,onerror);transport.removeListener(`close`,onTransportClose);this.off(`close`,onclose);this.off(`upgrading`,onupgrade)};transport.once(`open`,onTransportOpen);transport.once(`error`,onerror);transport.once(`close`,onTransportClose);this.once(`close`,onclose);this.once(`upgrading`,onupgrade);if(this._upgrades.indexOf(`webtransport`)!==-1&&name!==`webtransport`)this.setTimeoutFn(()=>{if(!failed)transport.open()},200);else transport.open()}onHandshake(data){this._upgrades=this._filterUpgrades(data.upgrades);super.onHandshake(data)}_filterUpgrades(upgrades){const filteredUpgrades=[];for(let i=0;i<upgrades.length;i++)if(~this.transports.indexOf(upgrades[i]))filteredUpgrades.push(upgrades[i]);return filteredUpgrades}};var Socket$1=class extends SocketWithUpgrade{constructor(uri,opts={}){const isOptionsOnly=typeof uri===`object`;const o=isOptionsOnly?{...uri}:{...opts};if(!o.transports||o.transports&&typeof o.transports[0]===`string`)o.transports=(o.transports||[`polling`,`websocket`,`webtransport`]).map(transportName=>transports[transportName]).filter(t=>!!t);super(isOptionsOnly?o:uri,o)}};var protocol$1=Socket$1.protocol;function url(uri,path=``,loc){let obj=uri;loc=loc||typeof location!==`undefined`&&location;if(null==uri)uri=loc.protocol+`//`+loc.host;if(typeof uri===`string`){if(`/`===uri.charAt(0)){if(`/`===uri.charAt(1))uri=loc.protocol+uri;else uri=loc.host+uri}if(!/^(https?|wss?):\/\//.test(uri)){if(`undefined`!==typeof loc)uri=loc.protocol+`//`+uri;else uri=`https://`+uri}obj=parse(uri)}if(!obj.port){if(/^(http|ws)$/.test(obj.protocol))obj.port=`80`;else if(/^(http|ws)s$/.test(obj.protocol))obj.port=`443`}obj.path=obj.path||`/`;const host=obj.host.indexOf(`:`)!==-1?`[`+obj.host+`]`:obj.host;obj.id=obj.protocol+`://`+host+`:`+obj.port+path;obj.href=obj.protocol+`://`+host+(loc&&loc.port===obj.port?``:`:`+obj.port);return obj}var withNativeArrayBuffer=typeof ArrayBuffer===`function`;var isView=obj=>{return typeof ArrayBuffer.isView===`function`?ArrayBuffer.isView(obj):obj.buffer instanceof ArrayBuffer};var toString=Object.prototype.toString;var withNativeBlob=typeof Blob===`function`||typeof Blob!==`undefined`&&toString.call(Blob)===`[object BlobConstructor]`;var withNativeFile=typeof File===`function`||typeof File!==`undefined`&&toString.call(File)===`[object FileConstructor]`;function isBinary(obj){return withNativeArrayBuffer&&(obj instanceof ArrayBuffer||isView(obj))||withNativeBlob&&obj instanceof Blob||withNativeFile&&obj instanceof File}function hasBinary(obj,toJSON){if(!obj||typeof obj!==`object`)return false;if(Array.isArray(obj)){for(let i=0,l=obj.length;i<l;i++)if(hasBinary(obj[i]))return true;return false}if(isBinary(obj))return true;if(obj.toJSON&&typeof obj.toJSON===`function`&&arguments.length===1)return hasBinary(obj.toJSON(),true);for(const key in obj)if(Object.prototype.hasOwnProperty.call(obj,key)&&hasBinary(obj[key]))return true;return false}function deconstructPacket(packet){const buffers=[];const packetData=packet.data;const pack=packet;pack.data=_deconstructPacket(packetData,buffers);pack.attachments=buffers.length;return{packet:pack,buffers}}function _deconstructPacket(data,buffers,toJSON){if(!data)return data;if(isBinary(data)){const placeholder={_placeholder:true,num:buffers.length};buffers.push(data);return placeholder}else if(Array.isArray(data)){const newData=new Array(data.length);for(let i=0;i<data.length;i++)newData[i]=_deconstructPacket(data[i],buffers);return newData}else if(typeof data===`object`&&!(data instanceof Date)){if(data.toJSON&&typeof data.toJSON===`function`&&!toJSON)return _deconstructPacket(data.toJSON(),buffers,true);const newData={};for(const key in data)if(Object.prototype.hasOwnProperty.call(data,key))newData[key]=_deconstructPacket(data[key],buffers);return newData}return data}function reconstructPacket(packet,buffers){packet.data=_reconstructPacket(packet.data,buffers);delete packet.attachments;return packet}function _reconstructPacket(data,buffers){if(!data)return data;if(data&&data._placeholder===true){if(typeof data.num===`number`&&data.num>=0&&data.num<buffers.length)return buffers[data.num];else throw new Error(`illegal attachments`)}else if(Array.isArray(data))for(let i=0;i<data.length;i++)data[i]=_reconstructPacket(data[i],buffers);else if(typeof data===`object`){for(const key in data)if(Object.prototype.hasOwnProperty.call(data,key))data[key]=_reconstructPacket(data[key],buffers)}return data}var esm_exports=__exportAll({Decoder:()=>Decoder,Encoder:()=>Encoder,PacketType:()=>PacketType,isPacketValid:()=>isPacketValid,protocol:()=>5});var RESERVED_EVENTS$1=[`connect`,`connect_error`,`disconnect`,`disconnecting`,`newListener`,`removeListener`];var protocol=5;var PacketType;(function(PacketType){PacketType[PacketType[`CONNECT`]=0]=`CONNECT`;PacketType[PacketType[`DISCONNECT`]=1]=`DISCONNECT`;PacketType[PacketType[`EVENT`]=2]=`EVENT`;PacketType[PacketType[`ACK`]=3]=`ACK`;PacketType[PacketType[`CONNECT_ERROR`]=4]=`CONNECT_ERROR`;PacketType[PacketType[`BINARY_EVENT`]=5]=`BINARY_EVENT`;PacketType[PacketType[`BINARY_ACK`]=6]=`BINARY_ACK`})(PacketType||(PacketType={}));var Encoder=class{constructor(replacer){this.replacer=replacer}encode(obj){if(obj.type===PacketType.EVENT||obj.type===PacketType.ACK){if(hasBinary(obj))return this.encodeAsBinary({type:obj.type===PacketType.EVENT?PacketType.BINARY_EVENT:PacketType.BINARY_ACK,nsp:obj.nsp,data:obj.data,id:obj.id})}return[this.encodeAsString(obj)]}encodeAsString(obj){let str=``+obj.type;if(obj.type===PacketType.BINARY_EVENT||obj.type===PacketType.BINARY_ACK)str+=obj.attachments+`-`;if(obj.nsp&&`/`!==obj.nsp)str+=obj.nsp+`,`;if(null!=obj.id)str+=obj.id;if(null!=obj.data)str+=JSON.stringify(obj.data,this.replacer);return str}encodeAsBinary(obj){const deconstruction=deconstructPacket(obj);const pack=this.encodeAsString(deconstruction.packet);const buffers=deconstruction.buffers;buffers.unshift(pack);return buffers}};var Decoder=class Decoder extends Emitter{constructor(opts){super();this.opts=Object.assign({reviver:void 0,maxAttachments:10},typeof opts===`function`?{reviver:opts}:opts)}add(obj){let packet;if(typeof obj===`string`){if(this.reconstructor)throw new Error(`got plaintext data when reconstructing a packet`);packet=this.decodeString(obj);const isBinaryEvent=packet.type===PacketType.BINARY_EVENT;if(isBinaryEvent||packet.type===PacketType.BINARY_ACK){packet.type=isBinaryEvent?PacketType.EVENT:PacketType.ACK;this.reconstructor=new BinaryReconstructor(packet)}else super.emitReserved(`decoded`,packet)}else if(isBinary(obj)||obj.base64){if(!this.reconstructor)throw new Error(`got binary data when not reconstructing a packet`);else{packet=this.reconstructor.takeBinaryData(obj);if(packet){this.reconstructor=null;super.emitReserved(`decoded`,packet)}}}else throw new Error(`Unknown type: `+obj)}decodeString(str){let i=0;const p={type:Number(str.charAt(0))};if(PacketType[p.type]===void 0)throw new Error(`unknown packet type `+p.type);if(p.type===PacketType.BINARY_EVENT||p.type===PacketType.BINARY_ACK){const start=i+1;while(str.charAt(++i)!==`-`&&i!=str.length);const buf=str.substring(start,i);if(buf!=Number(buf)||str.charAt(i)!==`-`)throw new Error(`Illegal attachments`);const n=Number(buf);if(!isInteger(n)||n<1)throw new Error(`Illegal attachments`);else if(n>this.opts.maxAttachments)throw new Error(`too many attachments`);p.attachments=n}if(`/`===str.charAt(i+1)){const start=i+1;while(++i){if(`,`===str.charAt(i))break;if(i===str.length)break}p.nsp=str.substring(start,i)}else p.nsp=`/`;const next=str.charAt(i+1);if(``!==next&&Number(next)==next){const start=i+1;while(++i){const c=str.charAt(i);if(null==c||Number(c)!=c){--i;break}if(i===str.length)break}p.id=Number(str.substring(start,i+1))}if(str.charAt(++i)){const payload=this.tryParse(str.substr(i));if(Decoder.isPayloadValid(p.type,payload))p.data=payload;else throw new Error(`invalid payload`)}return p}tryParse(str){try{return JSON.parse(str,this.opts.reviver)}catch(e){return false}}static isPayloadValid(type,payload){switch(type){case PacketType.CONNECT:return isObject(payload);case PacketType.DISCONNECT:return payload===void 0;case PacketType.CONNECT_ERROR:return typeof payload===`string`||isObject(payload);case PacketType.EVENT:case PacketType.BINARY_EVENT:return Array.isArray(payload)&&(typeof payload[0]===`number`||typeof payload[0]===`string`&&RESERVED_EVENTS$1.indexOf(payload[0])===-1);case PacketType.ACK:case PacketType.BINARY_ACK:return Array.isArray(payload)}}destroy(){if(this.reconstructor){this.reconstructor.finishedReconstruction();this.reconstructor=null}}};var BinaryReconstructor=class{constructor(packet){this.packet=packet;this.buffers=[];this.reconPack=packet}takeBinaryData(binData){this.buffers.push(binData);if(this.buffers.length===this.reconPack.attachments){const packet=reconstructPacket(this.reconPack,this.buffers);this.finishedReconstruction();return packet}return null}finishedReconstruction(){this.reconPack=null;this.buffers=[]}};function isNamespaceValid(nsp){return typeof nsp===`string`}var isInteger=Number.isInteger||function(value){return typeof value===`number`&&isFinite(value)&&Math.floor(value)===value};function isAckIdValid(id){return id===void 0||isInteger(id)}function isObject(value){return Object.prototype.toString.call(value)===`[object Object]`}function isDataValid(type,payload){switch(type){case PacketType.CONNECT:return payload===void 0||isObject(payload);case PacketType.DISCONNECT:return payload===void 0;case PacketType.EVENT:return Array.isArray(payload)&&(typeof payload[0]===`number`||typeof payload[0]===`string`&&RESERVED_EVENTS$1.indexOf(payload[0])===-1);case PacketType.ACK:return Array.isArray(payload);case PacketType.CONNECT_ERROR:return typeof payload===`string`||isObject(payload);default:return false}}function isPacketValid(packet){return isNamespaceValid(packet.nsp)&&isAckIdValid(packet.id)&&isDataValid(packet.type,packet.data)}function on(obj,ev,fn){obj.on(ev,fn);return function subDestroy(){obj.off(ev,fn)}}var RESERVED_EVENTS=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});var Socket=class extends Emitter{constructor(io,nsp,opts){super();this.connected=false;this.recovered=false;this.receiveBuffer=[];this.sendBuffer=[];this._queue=[];this._queueSeq=0;this.ids=0;this.acks={};this.flags={};this.io=io;this.nsp=nsp;if(opts&&opts.auth)this.auth=opts.auth;this._opts=Object.assign({},opts);if(this.io._autoConnect)this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const io=this.io;this.subs=[on(io,`open`,this.onopen.bind(this)),on(io,`packet`,this.onpacket.bind(this)),on(io,`error`,this.onerror.bind(this)),on(io,`close`,this.onclose.bind(this))]}get active(){return!!this.subs}connect(){if(this.connected)return this;this.subEvents();if(!this.io[`_reconnecting`])this.io.open();if(`open`===this.io._readyState)this.onopen();return this}open(){return this.connect()}send(...args){args.unshift(`message`);this.emit.apply(this,args);return this}emit(ev,...args){var _a,_b,_c;if(RESERVED_EVENTS.hasOwnProperty(ev))throw new Error(`"`+ev.toString()+`" is a reserved event name`);args.unshift(ev);if(this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile){this._addToQueue(args);return this}const packet={type:PacketType.EVENT,data:args};packet.options={};packet.options.compress=this.flags.compress!==false;if(`function`===typeof args[args.length-1]){const id=this.ids++;const ack=args.pop();this._registerAckCallback(id,ack);packet.id=id}const isTransportWritable=(_b=(_a=this.io.engine)===null||_a===void 0?void 0:_a.transport)===null||_b===void 0?void 0:_b.writable;const isConnected=this.connected&&!((_c=this.io.engine)===null||_c===void 0?void 0:_c._hasPingExpired());if(this.flags.volatile&&!isTransportWritable){}else if(isConnected){this.notifyOutgoingListeners(packet);this.packet(packet)}else this.sendBuffer.push(packet);this.flags={};return this}_registerAckCallback(id,ack){var _a;const timeout=(_a=this.flags.timeout)!==null&&_a!==void 0?_a:this._opts.ackTimeout;if(timeout===void 0){this.acks[id]=ack;return}const timer=this.io.setTimeoutFn(()=>{delete this.acks[id];for(let i=0;i<this.sendBuffer.length;i++)if(this.sendBuffer[i].id===id)this.sendBuffer.splice(i,1);ack.call(this,new Error(`operation has timed out`))},timeout);const fn=(...args)=>{this.io.clearTimeoutFn(timer);ack.apply(this,args)};fn.withError=true;this.acks[id]=fn}emitWithAck(ev,...args){return new Promise((resolve,reject)=>{const fn=(arg1,arg2)=>{return arg1?reject(arg1):resolve(arg2)};fn.withError=true;args.push(fn);this.emit(ev,...args)})}_addToQueue(args){let ack;if(typeof args[args.length-1]===`function`)ack=args.pop();const packet={id:this._queueSeq++,tryCount:0,pending:false,args,flags:Object.assign({fromQueue:true},this.flags)};args.push((err,...responseArgs)=>{if(packet!==this._queue[0]){}if(err!==null){if(packet.tryCount>this._opts.retries){this._queue.shift();if(ack)ack(err)}}else{this._queue.shift();if(ack)ack(null,...responseArgs)}packet.pending=false;return this._drainQueue()});this._queue.push(packet);this._drainQueue()}_drainQueue(force=false){if(!this.connected||this._queue.length===0)return;const packet=this._queue[0];if(packet.pending&&!force)return;packet.pending=true;packet.tryCount++;this.flags=packet.flags;this.emit.apply(this,packet.args)}packet(packet){packet.nsp=this.nsp;this.io._packet(packet)}onopen(){if(typeof this.auth==`function`)this.auth(data=>{this._sendConnectPacket(data)});else this._sendConnectPacket(this.auth)}_sendConnectPacket(data){this.packet({type:PacketType.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},data):data})}onerror(err){if(!this.connected)this.emitReserved(`connect_error`,err)}onclose(reason,description){this.connected=false;delete this.id;this.emitReserved(`disconnect`,reason,description);this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(id=>{if(!this.sendBuffer.some(packet=>String(packet.id)===id)){const ack=this.acks[id];delete this.acks[id];if(ack.withError)ack.call(this,new Error(`socket has been disconnected`))}})}onpacket(packet){if(!(packet.nsp===this.nsp))return;switch(packet.type){case PacketType.CONNECT:if(packet.data&&packet.data.sid)this.onconnect(packet.data.sid,packet.data.pid);else this.emitReserved(`connect_error`,new Error(`It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)`));break;case PacketType.EVENT:case PacketType.BINARY_EVENT:this.onevent(packet);break;case PacketType.ACK:case PacketType.BINARY_ACK:this.onack(packet);break;case PacketType.DISCONNECT:this.ondisconnect();break;case PacketType.CONNECT_ERROR:this.destroy();const err=new Error(packet.data.message);err.data=packet.data.data;this.emitReserved(`connect_error`,err)}}onevent(packet){const args=packet.data||[];if(null!=packet.id)args.push(this.ack(packet.id));if(this.connected)this.emitEvent(args);else this.receiveBuffer.push(Object.freeze(args))}emitEvent(args){if(this._anyListeners&&this._anyListeners.length){const listeners=this._anyListeners.slice();for(const listener of listeners)listener.apply(this,args)}super.emit.apply(this,args);if(this._pid&&args.length&&typeof args[args.length-1]===`string`)this._lastOffset=args[args.length-1]}ack(id){const self=this;let sent=false;return function(...args){if(sent)return;sent=true;self.packet({type:PacketType.ACK,id,data:args})}}onack(packet){const ack=this.acks[packet.id];if(typeof ack!==`function`)return;delete this.acks[packet.id];if(ack.withError)packet.data.unshift(null);ack.apply(this,packet.data)}onconnect(id,pid){this.id=id;this.recovered=pid&&this._pid===pid;this._pid=pid;this.connected=true;this.emitBuffered();this._drainQueue(true);this.emitReserved(`connect`)}emitBuffered(){this.receiveBuffer.forEach(args=>this.emitEvent(args));this.receiveBuffer=[];this.sendBuffer.forEach(packet=>{this.notifyOutgoingListeners(packet);this.packet(packet)});this.sendBuffer=[]}ondisconnect(){this.destroy();this.onclose(`io server disconnect`)}destroy(){if(this.subs){this.subs.forEach(subDestroy=>subDestroy());this.subs=void 0}this.io[`_destroy`](this)}disconnect(){if(this.connected)this.packet({type:PacketType.DISCONNECT});this.destroy();if(this.connected)this.onclose(`io client disconnect`);return this}close(){return this.disconnect()}compress(compress){this.flags.compress=compress;return this}get volatile(){this.flags.volatile=true;return this}timeout(timeout){this.flags.timeout=timeout;return this}onAny(listener){this._anyListeners=this._anyListeners||[];this._anyListeners.push(listener);return this}prependAny(listener){this._anyListeners=this._anyListeners||[];this._anyListeners.unshift(listener);return this}offAny(listener){if(!this._anyListeners)return this;if(listener){const listeners=this._anyListeners;for(let i=0;i<listeners.length;i++)if(listener===listeners[i]){listeners.splice(i,1);return this}}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(listener){this._anyOutgoingListeners=this._anyOutgoingListeners||[];this._anyOutgoingListeners.push(listener);return this}prependAnyOutgoing(listener){this._anyOutgoingListeners=this._anyOutgoingListeners||[];this._anyOutgoingListeners.unshift(listener);return this}offAnyOutgoing(listener){if(!this._anyOutgoingListeners)return this;if(listener){const listeners=this._anyOutgoingListeners;for(let i=0;i<listeners.length;i++)if(listener===listeners[i]){listeners.splice(i,1);return this}}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(packet){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){const listeners=this._anyOutgoingListeners.slice();for(const listener of listeners)listener.apply(this,packet.data)}}};function Backoff(opts){opts=opts||{};this.ms=opts.min||100;this.max=opts.max||1e4;this.factor=opts.factor||2;this.jitter=opts.jitter>0&&opts.jitter<=1?opts.jitter:0;this.attempts=0}Backoff.prototype.duration=function(){var ms=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var rand=Math.random();var deviation=Math.floor(rand*this.jitter*ms);ms=(Math.floor(rand*10)&1)==0?ms-deviation:ms+deviation}return Math.min(ms,this.max)|0};Backoff.prototype.reset=function(){this.attempts=0};Backoff.prototype.setMin=function(min){this.ms=min};Backoff.prototype.setMax=function(max){this.max=max};Backoff.prototype.setJitter=function(jitter){this.jitter=jitter};var Manager=class extends Emitter{constructor(uri,opts){var _a;super();this.nsps={};this.subs=[];if(uri&&`object`===typeof uri){opts=uri;uri=void 0}opts=opts||{};opts.path=opts.path||`/socket.io`;this.opts=opts;installTimerFunctions(this,opts);this.reconnection(opts.reconnection!==false);this.reconnectionAttempts(opts.reconnectionAttempts||Infinity);this.reconnectionDelay(opts.reconnectionDelay||1e3);this.reconnectionDelayMax(opts.reconnectionDelayMax||5e3);this.randomizationFactor((_a=opts.randomizationFactor)!==null&&_a!==void 0?_a:.5);this.backoff=new Backoff({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()});this.timeout(null==opts.timeout?2e4:opts.timeout);this._readyState=`closed`;this.uri=uri;const _parser=opts.parser||esm_exports;this.encoder=new _parser.Encoder;this.decoder=new _parser.Decoder;this._autoConnect=opts.autoConnect!==false;if(this._autoConnect)this.open()}reconnection(v){if(!arguments.length)return this._reconnection;this._reconnection=!!v;if(!v)this.skipReconnect=true;return this}reconnectionAttempts(v){if(v===void 0)return this._reconnectionAttempts;this._reconnectionAttempts=v;return this}reconnectionDelay(v){var _a;if(v===void 0)return this._reconnectionDelay;this._reconnectionDelay=v;(_a=this.backoff)===null||_a===void 0||_a.setMin(v);return this}randomizationFactor(v){var _a;if(v===void 0)return this._randomizationFactor;this._randomizationFactor=v;(_a=this.backoff)===null||_a===void 0||_a.setJitter(v);return this}reconnectionDelayMax(v){var _a;if(v===void 0)return this._reconnectionDelayMax;this._reconnectionDelayMax=v;(_a=this.backoff)===null||_a===void 0||_a.setMax(v);return this}timeout(v){if(!arguments.length)return this._timeout;this._timeout=v;return this}maybeReconnectOnOpen(){if(!this._reconnecting&&this._reconnection&&this.backoff.attempts===0)this.reconnect()}open(fn){if(~this._readyState.indexOf(`open`))return this;this.engine=new Socket$1(this.uri,this.opts);const socket=this.engine;const self=this;this._readyState=`opening`;this.skipReconnect=false;const openSubDestroy=on(socket,`open`,function(){self.onopen();fn&&fn()});const onError=err=>{this.cleanup();this._readyState=`closed`;this.emitReserved(`error`,err);if(fn)fn(err);else this.maybeReconnectOnOpen()};const errorSub=on(socket,`error`,onError);if(false!==this._timeout){const timeout=this._timeout;const timer=this.setTimeoutFn(()=>{openSubDestroy();onError(new Error(`timeout`));socket.close()},timeout);if(this.opts.autoUnref)timer.unref();this.subs.push(()=>{this.clearTimeoutFn(timer)})}this.subs.push(openSubDestroy);this.subs.push(errorSub);return this}connect(fn){return this.open(fn)}onopen(){this.cleanup();this._readyState=`open`;this.emitReserved(`open`);const socket=this.engine;this.subs.push(on(socket,`ping`,this.onping.bind(this)),on(socket,`data`,this.ondata.bind(this)),on(socket,`error`,this.onerror.bind(this)),on(socket,`close`,this.onclose.bind(this)),on(this.decoder,`decoded`,this.ondecoded.bind(this)))}onping(){this.emitReserved(`ping`)}ondata(data){try{this.decoder.add(data)}catch(e){this.onclose(`parse error`,e)}}ondecoded(packet){nextTick(()=>{this.emitReserved(`packet`,packet)},this.setTimeoutFn)}onerror(err){this.emitReserved(`error`,err)}socket(nsp,opts){let socket=this.nsps[nsp];if(!socket){socket=new Socket(this,nsp,opts);this.nsps[nsp]=socket}else if(this._autoConnect&&!socket.active)socket.connect();return socket}_destroy(socket){const nsps=Object.keys(this.nsps);for(const nsp of nsps)if(this.nsps[nsp].active)return;this._close()}_packet(packet){const encodedPackets=this.encoder.encode(packet);for(let i=0;i<encodedPackets.length;i++)this.engine.write(encodedPackets[i],packet.options)}cleanup(){this.subs.forEach(subDestroy=>subDestroy());this.subs.length=0;this.decoder.destroy()}_close(){this.skipReconnect=true;this._reconnecting=false;this.onclose(`forced close`)}disconnect(){return this._close()}onclose(reason,description){var _a;this.cleanup();(_a=this.engine)===null||_a===void 0||_a.close();this.backoff.reset();this._readyState=`closed`;this.emitReserved(`close`,reason,description);if(this._reconnection&&!this.skipReconnect)this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const self=this;if(this.backoff.attempts>=this._reconnectionAttempts){this.backoff.reset();this.emitReserved(`reconnect_failed`);this._reconnecting=false}else{const delay=this.backoff.duration();this._reconnecting=true;const timer=this.setTimeoutFn(()=>{if(self.skipReconnect)return;this.emitReserved(`reconnect_attempt`,self.backoff.attempts);if(self.skipReconnect)return;self.open(err=>{if(err){self._reconnecting=false;self.reconnect();this.emitReserved(`reconnect_error`,err)}else self.onreconnect()})},delay);if(this.opts.autoUnref)timer.unref();this.subs.push(()=>{this.clearTimeoutFn(timer)})}}onreconnect(){const attempt=this.backoff.attempts;this._reconnecting=false;this.backoff.reset();this.emitReserved(`reconnect`,attempt)}};var cache={};function lookup(uri,opts){if(typeof uri===`object`){opts=uri;uri=void 0}opts=opts||{};const parsed=url(uri,opts.path||`/socket.io`);const source=parsed.source;const id=parsed.id;const path=parsed.path;const sameNamespace=cache[id]&&path in cache[id][`nsps`];const newConnection=opts.forceNew||opts[`force new connection`]||false===opts.multiplex||sameNamespace;let io;if(newConnection)io=new Manager(source,opts);else{if(!cache[id])cache[id]=new Manager(source,opts);io=cache[id]}if(parsed.query&&!opts.query)opts.query=parsed.queryKey;return io.socket(parsed.path,opts)}Object.assign(lookup,{Manager,Socket,io:lookup,connect:lookup});var SOCKET_IO_PATH=`/socket.io`;function createSocketIoClient({url=``,options={},connect=lookup}={}){if(typeof connect!==`function`)throw new Error(`createSocketIoClient requires a valid socket.io client connect function.`);const normalizedUrl=normalizeText$3(url);const normalizedOptions={...options&&typeof options===`object`&&!Array.isArray(options)?options:{},path:SOCKET_IO_PATH};if(normalizedUrl)return connect(normalizedUrl,normalizedOptions);return connect(normalizedOptions)}function disconnectSocketIoClient(socket){if(!socket||typeof socket.disconnect!==`function`)return;socket.disconnect()}function attachSocketConnectionRecovery(socket){let timer=null;let delay=1e3;let recovering=false;const document=globalThis.document;const window=globalThis.window;function clearRetry(){clearTimeout(timer);timer=null}function canRetry(){return recovering&&!socket.connected&&!socket.active&&socket.io.reconnection()&&!document?.hidden&&window?.navigator?.onLine!==false}function scheduleRetry(){if(timer!==null||!canRetry())return;timer=setTimeout(()=>{timer=null;if(canRetry())socket.connect()},delay);delay=Math.min(delay*2,3e4)}function onConnect(){clearRetry();recovering=false;delay=1e3}function onDisconnect(reason){clearRetry();recovering=reason===`io server disconnect`;scheduleRetry()}function onConnectError(){recovering=true;scheduleRetry()}function onAvailable(){if(!canRetry())return;clearRetry();socket.connect()}socket.on(`connect`,onConnect);socket.on(`disconnect`,onDisconnect);socket.on(`connect_error`,onConnectError);document?.addEventListener(`visibilitychange`,onAvailable);window?.addEventListener(`online`,onAvailable);return()=>{recovering=false;clearRetry();socket.off(`connect`,onConnect);socket.off(`disconnect`,onDisconnect);socket.off(`connect_error`,onConnectError);document?.removeEventListener(`visibilitychange`,onAvailable);window?.removeEventListener(`online`,onAvailable)}}var RealtimeClientProvider_exports=__exportAll({RealtimeClientProvider:()=>RealtimeClientProvider,resolveRealtimeClientConfig:()=>resolveRealtimeClientConfig});var REALTIME_RUNTIME_CLIENT_API=Object.freeze({createSocketIoClient,disconnectSocketIoClient});function resolveRealtimeClientConfig({env={},mobile=null}={}){const appConfig=normalizeObject$1(getClientAppConfig());const realtime=normalizeObject$1(appConfig.realtime);const realtimeClient=normalizeObject$1(appConfig.realtimeClient);const mobileConfig=resolveMobileConfig({mobile:normalizeObject$1(appConfig.mobile)});const url=normalizeText$3(realtimeClient.url||(mobileConfig.enabled===true&&mobile?.adapter?.available===true?mobileConfig.apiBaseUrl:``));const options=normalizeObject$1(realtimeClient.options);const explicitDebugEnabled=typeof realtimeClient.debug===`boolean`?realtimeClient.debug:typeof realtime.debug===`boolean`?realtime.debug:void 0;const debugEnabled=Object.hasOwn(normalizeObject$1(env),`VITE_REALTIME_DEBUG`)?resolveClientBootstrapDebugEnabled({env,debugEnabled:void 0,debugEnvKey:`VITE_REALTIME_DEBUG`}):resolveClientBootstrapDebugEnabled({env,debugEnabled:explicitDebugEnabled,debugEnvKey:`VITE_REALTIME_DEBUG`});return Object.freeze({url,options,debugEnabled})}function createRealtimeClient({config,loggerInput}={}){const logger=createProviderLogger(loggerInput,{debugEnabled:config.debugEnabled});const socket=createSocketIoClient({url:config.url,options:config.options});const detach=[];let initialized=false;function initialize(vueApp=null){if(initialized)return;initialized=true;if(typeof socket.on===`function`){detach.push(attachSocketConnectionRecovery(socket));const onConnect=()=>logger.debug({socketConnected:true},`Realtime client socket connected.`);const onDisconnect=reason=>logger.debug({socketConnected:false,reason:String(reason||``)},`Realtime client socket disconnected.`);const onConnectError=error=>logger.warn({error:String(error?.message||error||`unknown error`)},`Realtime client socket connect error.`);socket.on(`connect`,onConnect);socket.on(`disconnect`,onDisconnect);socket.on(`connect_error`,onConnectError);detach.push(()=>{socket.off?.(`connect`,onConnect);socket.off?.(`disconnect`,onDisconnect);socket.off?.(`connect_error`,onConnectError)});if(config.debugEnabled===true&&typeof socket.onAny===`function`){const onAny=(eventName,payload)=>logger.debug({event:String(eventName||``),payloadScope:payload?.scope||null,payloadEntityId:payload?.entityId||null},`Realtime client received socket event.`);socket.onAny(onAny);detach.push(()=>socket.offAny?.(onAny))}}vueApp?.provide?.(`jskit.realtime.runtime.client.socket`,socket)}function dispose(){for(const release of detach.splice(0,detach.length))try{release()}catch{}disconnectSocketIoClient(socket);initialized=false}return Object.freeze({...REALTIME_RUNTIME_CLIENT_API,config,dispose,initialize,socket})}var RealtimeClientProvider=defineProvider({id:`runtime.realtime.client`,requires:{components:`client.components`,env:`client.env`,logger:`client.logger`,vueApp:`client.vue`},optional:{mobile:`client.mobile`},provides:{realtime:`client.realtime`},setup({components,env,logger,mobile}){components.register(`realtime.web.connection.indicator`,RealtimeConnectionIndicator);return{realtime:createRealtimeClient({config:resolveRealtimeClientConfig({env,mobile}),loggerInput:logger})}},boot({vueApp},{outputs}){outputs.realtime.initialize(vueApp)},shutdown(_dependencies,{outputs}){outputs.realtime.dispose()}});function isMissingDynamicModule(error,moduleSpecifier){const message=String(error?.message||error||``);return message.includes(moduleSpecifier)&&(message.includes(`Cannot find module`)||message.includes(`ERR_MODULE_NOT_FOUND`))}function notifyDynamicImportFailure(asyncModuleRecoveryRuntime,error,{label=`App module`}={}){if(!isDynamicImportError(error)||typeof asyncModuleRecoveryRuntime?.notify!==`function`)return;asyncModuleRecoveryRuntime.notify(error,{label})}var SHELL_REQUEST_RECOVERY_RUNTIME_KEY=`jskit.shell-web.runtime.web-request-recovery.client`;function isShellRequestRecoveryRuntime(value){return Boolean(value&&typeof value.report===`function`&&typeof value.reload===`function`)}function useShellRequestRecoveryRuntime(){if(!hasInjectionContext())return null;const runtime=inject$1(SHELL_REQUEST_RECOVERY_RUNTIME_KEY,null);return isShellRequestRecoveryRuntime(runtime)?runtime:null}var REQUEST_RECOVERY_RELOAD_FAILURE_MESSAGE=`The app cannot reload because the app server is not reachable. Restart the server, then click Reload.`;var RECOVERABLE_REQUEST_ERROR_MESSAGES=Object.freeze([/Failed to fetch/iu,/Load failed/iu,/Network request failed/iu,/NetworkError when attempting to fetch resource/iu,/The Internet connection appears to be offline/iu]);var RECOVERABLE_REQUEST_ERROR_CODES=Object.freeze(new Set([`EAI_AGAIN`,`ECONNABORTED`,`ECONNREFUSED`,`ECONNRESET`,`ENETDOWN`,`ENETUNREACH`,`ENOTFOUND`,`ERR_NETWORK`,`ETIMEDOUT`]));var CANCELED_REQUEST_ERROR_CODES=Object.freeze(new Set([`ABORT_ERR`,`ERR_ABORTED`,`ERR_CANCELED`]));var SAFE_REQUEST_RECOVERY_METHODS=Object.freeze(new Set([`GET`,`HEAD`]));function normalizeText$1(value,fallback=``){return String(value||``).trim()||String(fallback||``).trim()}function errorMessage(error=null){return normalizeText$1(error?.message||error?.cause?.message||error)}function errorCode(error=null){return normalizeText$1(error?.code||error?.cause?.code).toUpperCase()}function errorName(error=null){return normalizeText$1(error?.name||error?.cause?.name)}function normalizeRequestErrorStatus(error=null){if(!isRecord$2(error))return null;const hasStatus=Object.prototype.hasOwnProperty.call(error,`status`);const hasStatusCode=Object.prototype.hasOwnProperty.call(error,`statusCode`);if(!hasStatus&&!hasStatusCode)return null;const status=Number(hasStatus?error.status:error.statusCode);return Number.isInteger(status)?status:null}function isCanceledRequestError(error=null){const name=errorName(error).toLowerCase();if(name===`aborterror`||name===`cancelederror`)return true;return CANCELED_REQUEST_ERROR_CODES.has(errorCode(error))}function isRecoverableRequestError(error=null){if(!error||isCanceledRequestError(error))return false;if(normalizeRequestErrorStatus(error)===0)return true;if(RECOVERABLE_REQUEST_ERROR_CODES.has(errorCode(error)))return true;const message=errorMessage(error);return Boolean(message&&RECOVERABLE_REQUEST_ERROR_MESSAGES.some(pattern=>pattern.test(message)))}function requestRecoveryMessage(error=null,{label=`Request`,message=``}={}){const explicitMessage=normalizeText$1(message);if(explicitMessage)return explicitMessage;const requestLabel=normalizeText$1(label,`Request`);if(requestLabel===`Request`)return`The app could not reach the server or network. Check the connection and try again.`;return`${requestLabel} could not reach the server or network. Check the connection and try again.`}function resolveQueryMeta(query=null){if(isRecord$2(query?.meta))return query.meta;if(isRecord$2(query?.options?.meta))return query.options.meta;return{}}function isRequestRecoveryDisabled(query=null){const meta=resolveQueryMeta(query);return(isRecord$2(meta.jskit)?meta.jskit:{}).requestRecovery===false}function resolveQueryRecoveryLabel(query=null){const meta=resolveQueryMeta(query);return normalizeText$1((isRecord$2(meta.jskit)?meta.jskit:{}).requestRecoveryLabel,`Request`)}function resolveQueryRecoverySource(query=null){const meta=resolveQueryMeta(query);return normalizeText$1((isRecord$2(meta.jskit)?meta.jskit:{}).requestRecoverySource,`shell-web.request-recovery.query`)}function resolveQueryRecoveryDedupeKey(query=null,fallback=``){const meta=resolveQueryMeta(query);return normalizeText$1((isRecord$2(meta.jskit)?meta.jskit:{}).requestRecoveryDedupeKey,fallback)}function resolveQueryRecoveryDedupeWindowMs(query=null){const meta=resolveQueryMeta(query);const value=(isRecord$2(meta.jskit)?meta.jskit:{}).requestRecoveryDedupeWindowMs;return Number.isFinite(Number(value))?Math.max(0,Number(value)):null}function resolveQueryRecoveryMethod(query=null){const meta=resolveQueryMeta(query);return normalizeText$1((isRecord$2(meta.jskit)?meta.jskit:{}).requestRecoveryMethod).toUpperCase()}function isSafeQueryRecoveryMethod(query=null){return SAFE_REQUEST_RECOVERY_METHODS.has(resolveQueryRecoveryMethod(query))}function isActiveQuery(query=null){if(typeof query?.isActive===`function`)return Boolean(query.isActive());if(typeof query?.getObserversCount===`function`)return Number(query.getObserversCount())>0;return true}function recoverableQueryError(query=null){const state=isRecord$2(query?.state)?query.state:{};if(state.status!==`error`||state.fetchStatus!==`idle`)return null;const error=state.error||state.fetchFailureReason||null;return isRecoverableRequestError(error)?error:null}function createQueryRetry(queryClient,query=null){if(!queryClient||typeof queryClient.refetchQueries!==`function`)return null;const queryKey=query?.queryKey;if(!Array.isArray(queryKey))return null;return()=>queryClient.refetchQueries({queryKey,exact:true,type:`active`},{throwOnError:false})}function resolveQueryHash(query=null){const explicitHash=normalizeText$1(query?.queryHash);if(explicitHash)return explicitHash;try{return normalizeText$1(JSON.stringify(query?.queryKey||[]))}catch{return normalizeText$1(String(query?.queryKey||``))}}function installRecoverableQueryObserver({queryClient,runtime,logger}={}){const queryCache=queryClient&&typeof queryClient.getQueryCache===`function`?queryClient.getQueryCache():null;if(!queryCache||typeof queryCache.subscribe!==`function`)return Object.freeze({dispose(){}});const reportedErrorUpdateByQueryHash=new Map;function dismissReportedQueryRecovery(queryHash=``){const reported=reportedErrorUpdateByQueryHash.get(queryHash);if(!reported)return;reportedErrorUpdateByQueryHash.delete(queryHash);if(reported.presentationId&&typeof runtime.dismiss===`function`)runtime.dismiss(reported.presentationId,{presenterId:reported.presenterId})}function dismissReportedQueryRecoveries(){for(const queryHash of[...reportedErrorUpdateByQueryHash.keys()])dismissReportedQueryRecovery(queryHash)}function inspectQuery(query=null){const queryHash=resolveQueryHash(query);if(!query||isRequestRecoveryDisabled(query)||!isSafeQueryRecoveryMethod(query)||!isActiveQuery(query)){if(queryHash)dismissReportedQueryRecovery(queryHash);return}const error=recoverableQueryError(query);if(!error||!queryHash){if(queryHash)dismissReportedQueryRecovery(queryHash);return}const errorUpdateCount=Number(query?.state?.errorUpdateCount||0);const reportKey=`${errorUpdateCount}:${errorMessage(error)}`;const reported=reportedErrorUpdateByQueryHash.get(queryHash);if(reported?.reportKey===reportKey)return;const source=resolveQueryRecoverySource(query);const dedupeKey=resolveQueryRecoveryDedupeKey(query,`shell-web.request-recovery.query.${queryHash}.${errorUpdateCount}`);const dedupeWindowMs=resolveQueryRecoveryDedupeWindowMs(query);const result=runtime.report(error,{label:resolveQueryRecoveryLabel(query),retry:createQueryRetry(queryClient,query),source,stale:query?.state?.data!==void 0,dedupeKey,...dedupeWindowMs!==null?{dedupeWindowMs}:{}});const presentationId=normalizeText$1(result?.presentationId||reported?.presentationId);const presenterId=normalizeText$1(result?.decision?.presenterId||reported?.presenterId);if(reported?.presentationId&&reported.presentationId!==presentationId)dismissReportedQueryRecovery(queryHash);reportedErrorUpdateByQueryHash.set(queryHash,{reportKey,presentationId,presenterId})}try{if(typeof queryCache.getAll===`function`)for(const query of queryCache.getAll())inspectQuery(query)}catch(error){logger.warn({error:errorMessage(error)||`unknown error`},`Shell request recovery could not inspect existing queries.`)}const unsubscribe=queryCache.subscribe((event={})=>{try{inspectQuery(event?.query)}catch(error){logger.warn({error:errorMessage(error)||`unknown error`},`Shell request recovery query observer failed.`)}});return Object.freeze({dispose(){dismissReportedQueryRecoveries();if(typeof unsubscribe===`function`)unsubscribe()}})}function createShellRequestRecoveryRuntime({queryClient=null,errorRuntime=null,logger=null}={}){const runtimeLogger=createProviderLogger(logger);let installedQueryObserver=null;let reloadAttempt=0;async function reload({label=`App`,message=REQUEST_RECOVERY_RELOAD_FAILURE_MESSAGE}={}){const reloaded=await guardedReloadApp({label,message});if(!reloaded){reloadAttempt+=1;report(new Error(`Network request failed.`),{label,message,reload:true,force:true,source:`shell-web.request-recovery.reload`,dedupeKey:`shell-web.request-recovery.reload.${reloadAttempt}`})}return reloaded}function retryAction(error,options,retry){return{label:normalizeText$1(options.actionLabel,`Retry`),dismissOnRun:true,async handler(){try{return await retry()}catch(retryError){if(isRecoverableRequestError(retryError))return report(retryError,options);throw retryError}}}}function reloadAction(options){return{label:normalizeText$1(options.actionLabel,`Reload`),dismissOnRun:true,handler(){return reload({label:options.label,message:options.reloadFailureMessage||REQUEST_RECOVERY_RELOAD_FAILURE_MESSAGE})}}}function dismiss(presentationId=``,options={}){if(!errorRuntime||typeof errorRuntime.dismiss!==`function`)return 0;return errorRuntime.dismiss(presentationId,options)}function report(error=null,options={}){if(!isRecoverableRequestError(error)&&options.force!==true)return null;const source=normalizeText$1(options.source,`shell-web.request-recovery`);if(!errorRuntime||typeof errorRuntime.report!==`function`){runtimeLogger.warn({source,error:errorMessage(error)||`unknown error`},`Shell request recovery could not report because the shell error runtime is unavailable.`);return null}const retry=typeof options.retry===`function`?options.retry:null;const action=retry?retryAction(error,options,retry):options.reload===true?reloadAction(options):null;try{return errorRuntime.report({source,message:requestRecoveryMessage(error,options),cause:error||null,intent:`app-recoverable`,severity:normalizeText$1(options.severity,options.stale?`warning`:`error`),dedupeKey:normalizeText$1(options.dedupeKey),dedupeWindowMs:Number.isFinite(Number(options.dedupeWindowMs))?Math.max(0,Number(options.dedupeWindowMs)):2e3,action})}catch(reportError){runtimeLogger.error({source,error:errorMessage(reportError)||`unknown error`},`Shell request recovery could not report through the shell error runtime.`);return null}}function install(){if(installedQueryObserver)return installedQueryObserver;installedQueryObserver=installRecoverableQueryObserver({queryClient,runtime:api,logger:runtimeLogger});return installedQueryObserver}function dispose(){installedQueryObserver?.dispose?.();installedQueryObserver=null}const api=Object.freeze({dismiss,dispose,install,isRecoverableRequestError,reload,report});return api}function createStoreBackedPresenter({id,channel,store,defaultPersist=false}={}){const normalizedId=normalizeText$2(id);const normalizedChannel=normalizeText$2(channel).toLowerCase();if(!normalizedId)throw new Error(`createStoreBackedPresenter requires id.`);if(!normalizedChannel)throw new Error(`createStoreBackedPresenter("${normalizedId}") requires channel.`);if(!store||typeof store.present!==`function`||typeof store.dismiss!==`function`)throw new Error(`createStoreBackedPresenter("${normalizedId}") requires a presentation store.`);return Object.freeze({id:normalizedId,supports(requestedChannel=``){return String(requestedChannel||``).trim().toLowerCase()===normalizedChannel},present(payload={}){return store.present(normalizedChannel,{...payload,persist:typeof payload.persist===`boolean`?payload.persist:defaultPersist,presenterId:normalizedId})},dismiss(presentationId=``){return store.dismiss(normalizedChannel,String(presentationId||``))}})}function createMaterialSnackbarPresenter({store}={}){return createStoreBackedPresenter({id:`material.snackbar`,channel:`snackbar`,store,defaultPersist:false})}function createMaterialBannerPresenter({store}={}){return createStoreBackedPresenter({id:`material.banner`,channel:`banner`,store,defaultPersist:true})}function createMaterialDialogPresenter({store}={}){return createStoreBackedPresenter({id:`material.dialog`,channel:`dialog`,store,defaultPersist:true})}function createDefaultMaterialErrorPresenters({store}={}){return Object.freeze([createMaterialSnackbarPresenter({store}),createMaterialBannerPresenter({store}),createMaterialDialogPresenter({store})])}function subscribeListener(listeners,listener){if(!(listeners instanceof Set))throw new TypeError(`subscribeListener requires a Set.`);if(typeof listener!==`function`)return()=>{};listeners.add(listener);return()=>{listeners.delete(listener)}}function createListenerSubscription(listeners){if(!(listeners instanceof Set))throw new TypeError(`createListenerSubscription requires a Set.`);return function subscribe(listener){return subscribeListener(listeners,listener)}}function createRuntimeLogger$1(logger=null){const source=isRecord$2(logger)?logger:null;return Object.freeze({warn:typeof source?.warn===`function`?source.warn.bind(source):()=>{},error:typeof source?.error===`function`?source.error.bind(source):()=>{}})}function normalizeErrorEvent(rawEvent={}){const source=isRecord$2(rawEvent)?rawEvent:{message:rawEvent};const cause=source.cause!==void 0?source.cause:source.error;const statusCandidate=Number(source.status||source.statusCode||cause?.status||cause?.statusCode||0);const status=Number.isFinite(statusCandidate)?Math.trunc(statusCandidate):0;const fieldErrors=isRecord$2(source.fieldErrors)?Object.freeze({...source.fieldErrors}):isRecord$2(source.details?.fieldErrors)?Object.freeze({...source.details.fieldErrors}):null;const details=isRecord$2(source.details)?Object.freeze({...source.details}):null;const userMessage=normalizeText$2(source.userMessage);const runtimeMessage=normalizeText$2(source.message||cause?.message);return Object.freeze({code:normalizeText$2(source.code||cause?.code),status,source:normalizeText$2(source.source,`app`),message:normalizeText$2(userMessage||runtimeMessage,`Request failed.`),userMessage,intent:normalizeErrorIntent(source.intent||source.kind),severity:normalizeSeverity(source.severity,`error`),channel:normalizeChannel(source.channel),presenterId:normalizeText$2(source.presenterId),action:normalizeAction(source.action),additionalActions:normalizeAdditionalActions(source.additionalActions),persist:typeof source.persist===`boolean`?source.persist:null,blocking:source.blocking===true,dedupeKey:normalizeText$2(source.dedupeKey),dedupeWindowMs:normalizeNonNegativeInteger(source.dedupeWindowMs,0),traceId:normalizeText$2(source.traceId),fieldErrors,details,cause:cause||null,timestamp:Number(Date.now())})}function normalizePolicyDecision(policyDecision={},event={}){const source=isRecord$2(policyDecision)?policyDecision:{};const channel=normalizeChannel(source.channel||event.channel,`snackbar`)||`snackbar`;return Object.freeze({channel,presenterId:normalizeText$2(source.presenterId||event.presenterId),message:normalizeText$2(source.message||event.userMessage||event.message,`Request failed.`),severity:normalizeSeverity(source.severity||event.severity,`error`),action:normalizeAction(source.action||event.action),additionalActions:normalizeAdditionalActions(source.additionalActions??event.additionalActions),persist:typeof source.persist===`boolean`?source.persist:typeof event.persist===`boolean`?event.persist:channel!==`snackbar`,dedupeKey:normalizeText$2(source.dedupeKey||event.dedupeKey),dedupeWindowMs:normalizeNonNegativeInteger(source.dedupeWindowMs,event.dedupeWindowMs||0)})}function normalizePresenter(candidate={}){const source=isRecord$2(candidate)?candidate:{};const id=normalizeText$2(source.id);if(!id)throw new Error(`Error presenter requires id.`);if(typeof source.present!==`function`)throw new Error(`Error presenter "${id}" requires present(payload).`);return Object.freeze({id,supports:typeof source.supports===`function`?source.supports.bind(source):()=>true,present:source.present.bind(source),dismiss:typeof source.dismiss===`function`?source.dismiss.bind(source):null})}function createErrorRuntime({presenters=[],policy=null,defaultPresenterId=``,moduleDefaultPresenterId=``,logger=null}={}){const runtimeLogger=createRuntimeLogger$1(logger);const byPresenterId=new Map;const listeners=new Set;const subscribe=createListenerSubscription(listeners);const dedupeWindowByKey=new Map;let activePolicy=typeof policy===`function`?policy:createDefaultErrorPolicy();let activeAppDefaultPresenterId=normalizeText$2(defaultPresenterId);const activeModuleDefaultPresenterId=normalizeText$2(moduleDefaultPresenterId);function getPresenterIds(){return Object.freeze([...byPresenterId.keys()].sort((left,right)=>left.localeCompare(right)))}function assertPresenterExists(presenterId,label){if(!byPresenterId.has(presenterId))throw new Error(`${label} presenter "${presenterId}" is not registered.`)}function resolveDefaultPresenterId(){if(activeAppDefaultPresenterId){assertPresenterExists(activeAppDefaultPresenterId,`App default error`);return activeAppDefaultPresenterId}if(activeModuleDefaultPresenterId){assertPresenterExists(activeModuleDefaultPresenterId,`Module default error`);return activeModuleDefaultPresenterId}throw new Error(`Error runtime requires app default presenter or module default presenter.`)}function assertBootReady(){resolveDefaultPresenterId()}function registerPresenter(presenter){const normalized=normalizePresenter(presenter);if(byPresenterId.has(normalized.id))throw new Error(`Error presenter "${normalized.id}" is already registered.`);byPresenterId.set(normalized.id,normalized);return normalized.id}function registerPresenters(nextPresenters=[]){const source=Array.isArray(nextPresenters)?nextPresenters:[];const ids=[];for(const presenter of source)ids.push(registerPresenter(presenter));return Object.freeze(ids)}function setPolicy(nextPolicy){if(typeof nextPolicy!==`function`)throw new TypeError(`Error policy must be a function.`);activePolicy=nextPolicy}function setAppDefaultPresenterId(nextDefaultPresenterId=``){const normalized=normalizeText$2(nextDefaultPresenterId);if(normalized)assertPresenterExists(normalized,`App default error`);activeAppDefaultPresenterId=normalized;return activeAppDefaultPresenterId}function notify(event={}){const payload=Object.freeze({...event});for(const listener of listeners)try{listener(payload)}catch(error){runtimeLogger.warn({error:String(error?.message||error||`unknown error`)},`Error runtime subscriber failed.`)}}function resolveChannelCompatiblePresenter(channel=``){for(const presenter of byPresenterId.values())if(presenter.supports(channel))return presenter;return null}function resolvePresenterForDecision(decision){const explicitPresenterId=normalizeText$2(decision.presenterId);if(explicitPresenterId){assertPresenterExists(explicitPresenterId,`Policy-selected error`);return byPresenterId.get(explicitPresenterId)}const defaultPresenterId=resolveDefaultPresenterId();const defaultPresenter=byPresenterId.get(defaultPresenterId);if(defaultPresenter?.supports(decision.channel))return defaultPresenter;const compatiblePresenter=resolveChannelCompatiblePresenter(decision.channel);if(!compatiblePresenter)throw new Error(`No error presenter supports channel "${decision.channel}".`);return compatiblePresenter}function shouldSkipByDedupe(decision){if(!decision.dedupeKey||decision.dedupeWindowMs<1)return false;const now=Number(Date.now());if(now-Number(dedupeWindowByKey.get(decision.dedupeKey)||0)<decision.dedupeWindowMs)return true;dedupeWindowByKey.set(decision.dedupeKey,now);return false}function report(rawEvent={},rawContext={}){const event=normalizeErrorEvent(rawEvent);const context=isRecord$2(rawContext)?Object.freeze({...rawContext}):Object.freeze({});let policyDecision;try{policyDecision=activePolicy(event,Object.freeze({context,runtime:Object.freeze({presenterIds:getPresenterIds(),appDefaultPresenterId:activeAppDefaultPresenterId,moduleDefaultPresenterId:activeModuleDefaultPresenterId})}))}catch(error){runtimeLogger.error({source:event.source,error:String(error?.message||error||`unknown error`)},`Error policy threw while evaluating error event.`);throw error}const decision=normalizePolicyDecision(policyDecision,event);if(decision.channel===`silent`){const silentResult=Object.freeze({event,decision,skipped:true,reason:`silent`});notify({type:`reported.silent`,result:silentResult});return silentResult}if(shouldSkipByDedupe(decision)){const dedupedResult=Object.freeze({event,decision,skipped:true,reason:`dedupe`});notify({type:`reported.deduped`,result:dedupedResult});return dedupedResult}const presenter=resolvePresenterForDecision(decision);if(!presenter.supports(decision.channel))throw new Error(`Error presenter "${presenter.id}" does not support channel "${decision.channel}".`);const payload=Object.freeze({...decision,presenterId:presenter.id,event,context});const presentationId=normalizeText$2(presenter.present(payload));const result=Object.freeze({event,decision:Object.freeze({...decision,presenterId:presenter.id}),presentationId,skipped:false});notify({type:`reported`,result});return result}function dismiss(presentationId=``,options={}){const normalizedPresentationId=normalizeText$2(presentationId);const source=isRecord$2(options)?options:{};const presenterId=normalizeText$2(source.presenterId);if(presenterId){const presenter=byPresenterId.get(presenterId);if(!presenter||typeof presenter.dismiss!==`function`)return 0;return Number(presenter.dismiss(normalizedPresentationId)||0)}let total=0;for(const presenter of byPresenterId.values()){if(typeof presenter.dismiss!==`function`)continue;total+=Number(presenter.dismiss(normalizedPresentationId)||0)}return total}function configure(options={}){const source=isRecord$2(options)?options:{};if(Array.isArray(source.presenters)&&source.presenters.length>0)registerPresenters(source.presenters);if(Object.prototype.hasOwnProperty.call(source,`policy`))setPolicy(source.policy);if(Object.prototype.hasOwnProperty.call(source,`defaultPresenterId`))setAppDefaultPresenterId(source.defaultPresenterId);assertBootReady();return getSnapshot()}function getSnapshot(){return Object.freeze({presenterIds:getPresenterIds(),appDefaultPresenterId:activeAppDefaultPresenterId,moduleDefaultPresenterId:activeModuleDefaultPresenterId,resolvedDefaultPresenterId:resolveDefaultPresenterId()})}registerPresenters(presenters);assertBootReady();return Object.freeze({report,dismiss,configure,registerPresenter,registerPresenters,setPolicy,setAppDefaultPresenterId,assertBootReady,getSnapshot,subscribe,normalizeErrorEvent})}var PRESENTATION_CHANNELS=Object.freeze([`snackbar`,`banner`,`dialog`]);var SINGLETON_CHANNELS=new Set([`banner`]);function createEmptyChannelState(){return{snackbar:[],banner:[],dialog:[]}}function cloneEntry(entry={}){return Object.freeze({id:String(entry.id||``).trim(),channel:String(entry.channel||``).trim(),message:String(entry.message||``).trim(),severity:String(entry.severity||`error`).trim(),persist:Boolean(entry.persist),action:entry.action||null,additionalActions:entry.additionalActions,presenterId:String(entry.presenterId||``).trim(),dedupeKey:String(entry.dedupeKey||``).trim(),timestamp:Number(entry.timestamp||0)})}function createErrorPresentationStore({now=()=>Date.now()}={}){const listeners=new Set;const subscribe=createListenerSubscription(listeners);const channelState=createEmptyChannelState();let sequence=0;let revision=0;function getChannelEntries(channel){if(!PRESENTATION_CHANNELS.includes(channel))throw new Error(`Unknown presentation channel "${channel}".`);return channelState[channel]}function getState(){return Object.freeze({revision,channels:Object.freeze({snackbar:Object.freeze(channelState.snackbar.map(cloneEntry)),banner:Object.freeze(channelState.banner.map(cloneEntry)),dialog:Object.freeze(channelState.dialog.map(cloneEntry))})})}function notify(event={}){const snapshot=getState();for(const listener of listeners)try{listener(snapshot,Object.freeze({...event}))}catch{}}function present(channel,payload={}){const normalizedChannel=String(channel||``).trim();const entries=getChannelEntries(normalizedChannel);sequence+=1;const entry=Object.freeze({id:normalizeText$2(payload.id,`${normalizedChannel}-${sequence}`),channel:normalizedChannel,message:normalizeText$2(payload.message,`Request failed.`),severity:normalizeSeverity(payload.severity,`error`),persist:typeof payload.persist===`boolean`?payload.persist:normalizedChannel!==`snackbar`,action:normalizeAction(payload.action),additionalActions:normalizeAdditionalActions(payload.additionalActions),presenterId:normalizeText$2(payload.presenterId),dedupeKey:normalizeText$2(payload.dedupeKey),timestamp:Number(now())});if(SINGLETON_CHANNELS.has(normalizedChannel)&&entries.length>0)entries.splice(0,entries.length);entries.push(entry);revision+=1;notify({type:`presented`,channel:normalizedChannel,id:entry.id});return entry.id}function dismiss(channel,presentationId=``){const normalizedChannel=String(channel||``).trim();const entries=getChannelEntries(normalizedChannel);const normalizedPresentationId=normalizeText$2(presentationId);if(!normalizedPresentationId){if(entries.length<1)return 0;const removed=entries.length;entries.splice(0,entries.length);revision+=1;notify({type:`dismissed`,channel:normalizedChannel,id:``,count:removed});return removed}const index=entries.findIndex(entry=>entry.id===normalizedPresentationId);if(index<0)return 0;entries.splice(index,1);revision+=1;notify({type:`dismissed`,channel:normalizedChannel,id:normalizedPresentationId,count:1});return 1}function clear(channel=``){const normalizedChannel=normalizeText$2(channel).toLowerCase();if(!normalizedChannel){let removedCount=0;for(const candidateChannel of PRESENTATION_CHANNELS)removedCount+=dismiss(candidateChannel,``);return removedCount}return dismiss(normalizedChannel,``)}return Object.freeze({getState,subscribe,present,dismiss,clear})}var DEFAULT_DEBUG_DEPTH=4;function describeFunction(fn){return`[Function ${fn?.name||`anonymous`}]`}function describeSymbol(value){return value?.toString?value.toString():`[Symbol]`}function explodePayload(value,depth=4){const visited=new WeakSet;function walk(node,remaining){if(node===null||typeof node!==`object`){if(typeof node===`function`)return describeFunction(node);if(typeof node===`symbol`)return describeSymbol(node);return node}if(visited.has(node))return`[Circular]`;visited.add(node);if(remaining<=0)return Array.isArray(node)?`[Array]`:`[Object]`;if(Array.isArray(node))return node.map(entry=>walk(entry,remaining-1));if(node instanceof Date)return node.toISOString();const next={};for(const[key,child]of Object.entries(node))next[key]=walk(child,remaining-1);return next}return walk(value,depth)}function ensureArray(value){if(Array.isArray(value))return value;if(value===void 0||value===null)return[];return[value]}var PLACEMENT_DEBUG_PREFIX=`[placement-debug]`;var PLACEMENT_DEBUG_FLAG=`__JSKIT_PLACEMENT_DEBUG__`;var WEB_PLACEMENT_SURFACE_ANY=`*`;var NOOP=()=>{};function isPlacementDebugEnabled(){if(typeof globalThis!==`object`||!globalThis)return false;return globalThis[PLACEMENT_DEBUG_FLAG]===true}function debugLog(message,payload=null){if(!isPlacementDebugEnabled())return;if(payload===null||payload===void 0){console.log(`${PLACEMENT_DEBUG_PREFIX} ${message}`);return}const terminalPayload=explodePayload(payload,4);const rendered=JSON.stringify(terminalPayload,null,2);console.log(`${PLACEMENT_DEBUG_PREFIX} ${message}\n${rendered}`)}function createRuntimeLogger(logger){const runtimeLogger=isRecord$2(logger)?logger:{};let warn=NOOP;let error=NOOP;if(typeof runtimeLogger.warn===`function`)warn=runtimeLogger.warn.bind(runtimeLogger);if(typeof runtimeLogger.error===`function`)error=runtimeLogger.error.bind(runtimeLogger);return Object.freeze({warn,error})}function normalizePlacementList(placements,context={}){const normalized=[];for(const candidate of ensureArray(placements)){const placement=normalizePlacementDefinition(candidate,{strict:false,source:`app placement`});if(!placement||placement.enabled===false)continue;normalized.push(placement)}const byId=new Map;for(const placement of normalized){if(byId.has(placement.id))throw new Error(`Duplicate placement id "${placement.id}" in ${context.source||`placement list`}.`);byId.set(placement.id,placement)}return[...byId.values()].map((placement,index)=>({placement,index})).sort((left,right)=>{const orderCompare=left.placement.order-right.placement.order;if(orderCompare!==0)return orderCompare;return left.index-right.index}).map(entry=>entry.placement)}function normalizeTopologyList(topology,context={}){if(Array.isArray(topology))return normalizeTopologyList(normalizePlacementTopologyDefinition({placements:topology},{context:context.source||`placement topology`}),context);const candidates=ensureArray(topology);const entries=[];for(const candidate of candidates){const normalized=normalizePlacementTopologyDefinition(candidate,{context:context.source||`placement topology`});entries.push(...normalized.placements)}const byKey=new Map;for(const entry of entries){const key=`${entry.id}::${entry.owner||``}`;if(byKey.has(key))throw new Error(`Duplicate semantic placement "${entry.id}"${entry.owner?` for owner "${entry.owner}"`:``} in ${context.source||`placement topology`}.`);byKey.set(key,entry)}return Object.freeze([...byKey.values()])}function matchesSurface(placementSurfaces,requestedSurface){if(requestedSurface===WEB_PLACEMENT_SURFACE_ANY)return true;const surfaces=Array.isArray(placementSurfaces)?placementSurfaces:[WEB_PLACEMENT_SURFACE_ANY];return surfaces.includes(WEB_PLACEMENT_SURFACE_ANY)||surfaces.includes(requestedSurface)}function resolveTopologyPlacement(topologyEntries=[],placement={},requestedSurface=WEB_PLACEMENT_SURFACE_ANY){const semanticTarget=String(placement.target||``).trim();const owner=String(placement.owner||``).trim();const matches=topologyEntries.filter(entry=>{if(entry.id!==semanticTarget)return false;if(owner&&entry.owner!==owner)return false;if(!owner&&entry.owner)return false;return matchesSurface(entry.surfaces,requestedSurface)});if(matches.length===1)return matches[0];return null}function resolveRenderablePlacement({placement={},topologyEntries=[],requestedSurface=WEB_PLACEMENT_SURFACE_ANY,requestedTarget=``,requestedLayoutClass=`compact`}={}){if(placement.targetType===`concrete`){if(placement.target!==requestedTarget)return null;return placement}const topologyPlacement=resolveTopologyPlacement(topologyEntries,placement,requestedSurface);if(!topologyPlacement)return null;const variant=topologyPlacement.variants?.[requestedLayoutClass]||null;if(!variant||variant.outlet!==requestedTarget)return null;const componentToken=String(placement.componentToken||variant.renderers?.[placement.kind]||``).trim();if(!componentToken)return null;return Object.freeze({...placement,target:requestedTarget,semanticTarget:placement.target,topologyOwner:topologyPlacement.owner||``,layoutClass:requestedLayoutClass,componentToken})}function resolveContextContributors(contributors,baseContext={},logger){let merged={};for(const contributor of ensureArray(contributors))try{const resolved=typeof contributor===`function`?contributor(Object.freeze({...baseContext})):contributor;if(isRecord$2(resolved))merged={...merged,...resolved}}catch(error){logger.warn({contributor,error:String(error?.message||error||`unknown error`)},`Failed to evaluate web placement context contributor.`)}return merged}function resolvePlacementComponent(components,placement,logger,missingTokens,invalidComponentTokens,failedTokens){const componentToken=String(placement.componentToken||``).trim();if(!componentToken)return null;if(invalidComponentTokens.has(componentToken)||failedTokens.has(componentToken))return null;if(!components.has(componentToken)){if(!missingTokens.has(componentToken)){missingTokens.add(componentToken);logger.warn({placementId:placement.id,componentToken},`Skipping placement because component token is not bound.`)}return null}let component=null;try{component=components.get(componentToken)}catch(error){if(!failedTokens.has(componentToken)){failedTokens.add(componentToken);logger.error({placementId:placement.id,componentToken,error:String(error?.message||error||`unknown error`)},`Skipping placement because component token resolution threw.`)}return null}if(!isRenderableComponent(component)){if(!invalidComponentTokens.has(componentToken)){invalidComponentTokens.add(componentToken);logger.warn({placementId:placement.id,componentToken},`Skipping placement because component token did not resolve to a Vue component.`)}return null}return component}function shouldIncludePlacement(placement,placementContext,logger){if(typeof placement.when!==`function`)return true;try{return placement.when(Object.freeze({...placementContext}))===true}catch(error){logger.warn({placementId:placement.id,error:String(error?.message||error||`unknown error`)},`Placement when() predicate failed; placement was skipped.`);return false}}function createWebPlacementRuntime({components,contextContributors=[],logger=null}={}){if(!components||typeof components.has!==`function`||typeof components.get!==`function`)throw new Error(`createWebPlacementRuntime requires a client component registry.`);const runtimeLogger=createRuntimeLogger(logger);const missingTokens=new Set;const invalidComponentTokens=new Set;const failedTokens=new Set;const listeners=new Set;const subscribe=createListenerSubscription(listeners);let placementDefinitions=Object.freeze([]);let placementTopology=Object.freeze([]);let sharedContext=Object.freeze({});let revision=0;function notify(event={}){revision+=1;debugLog(`notify`,{revision,event});for(const listener of listeners)try{listener(Object.freeze({revision,...event}))}catch(error){runtimeLogger.warn({error:String(error?.message||error||`unknown error`)},`Web placement runtime listener threw during notification.`)}}function replacePlacements(entries=[],{source=`app placement registry`}={}){missingTokens.clear();invalidComponentTokens.clear();failedTokens.clear();placementDefinitions=Object.freeze(normalizePlacementList(entries,{source}));debugLog(`replacePlacements`,{source,count:placementDefinitions.length,ids:placementDefinitions.map(entry=>entry.id)});notify({type:`placements.replaced`,source})}function replacePlacementTopology(topology=[],{source=`app placement topology`}={}){missingTokens.clear();invalidComponentTokens.clear();failedTokens.clear();placementTopology=normalizeTopologyList(topology,{source});debugLog(`replacePlacementTopology`,{source,count:placementTopology.length,ids:placementTopology.map(entry=>entry.owner?`${entry.id}#${entry.owner}`:entry.id)});notify({type:`placement-topology.replaced`,source})}function getContext(){return sharedContext}function setContext(value={},{replace=false,source=`placement-context`}={}){const next=isRecord$2(value)?{...value}:{};let nextContext=next;if(!replace)nextContext={...sharedContext,...next};sharedContext=Object.freeze(nextContext);debugLog(`setContext`,{replace,source,keys:Object.keys(sharedContext)});notify({type:`context.updated`,source});return sharedContext}function getRevision(){return revision}function getPlacements({surface=WEB_PLACEMENT_SURFACE_ANY,target=``,layoutClass=``,context={}}={}){const normalizedTarget=normalizePlacementTarget(target,{strict:false});if(!normalizedTarget)return Object.freeze([]);const normalizedSurface=normalizeSurface(surface);const normalizedLayoutClass=normalizePlacementLayoutClass(layoutClass)||normalizePlacementLayoutClass(sharedContext?.layoutClass)||`compact`;const baseContext=isRecord$2(context)?{...context}:{};const contextFromRuntime=isRecord$2(sharedContext)?sharedContext:{};const placementContext={...resolveContextContributors(contextContributors,{surface:normalizedSurface,target:normalizedTarget,layoutClass:normalizedLayoutClass,context:{...contextFromRuntime,...baseContext}},runtimeLogger),...contextFromRuntime,...baseContext,surface:normalizedSurface,target:normalizedTarget,layoutClass:normalizedLayoutClass};debugLog(`getPlacements:start`,{surface:normalizedSurface,target:normalizedTarget,layoutClass:normalizedLayoutClass,contextKeys:Object.keys(baseContext),sharedContextKeys:Object.keys(contextFromRuntime),placementCount:placementDefinitions.length,topologyCount:placementTopology.length});const matches=[];for(const placement of placementDefinitions){const renderablePlacement=resolveRenderablePlacement({placement,topologyEntries:placementTopology,requestedSurface:normalizedSurface,requestedTarget:normalizedTarget,requestedLayoutClass:normalizedLayoutClass});if(!renderablePlacement)continue;const placementSurfaces=Array.isArray(renderablePlacement.surfaces)?renderablePlacement.surfaces:[WEB_PLACEMENT_SURFACE_ANY];if(!matchesSurface(placementSurfaces,normalizedSurface)){debugLog(`getPlacements:skip-surfaces`,{placementId:renderablePlacement.id,placementSurfaces,requestedSurface:normalizedSurface});continue}if(!shouldIncludePlacement(renderablePlacement,placementContext,runtimeLogger)){debugLog(`getPlacements:skip-when`,{placementId:renderablePlacement.id});continue}const component=resolvePlacementComponent(components,renderablePlacement,runtimeLogger,missingTokens,invalidComponentTokens,failedTokens);if(!component){debugLog(`getPlacements:skip-component`,{placementId:renderablePlacement.id,componentToken:renderablePlacement.componentToken});continue}debugLog(`getPlacements:include`,{placementId:renderablePlacement.id,componentToken:renderablePlacement.componentToken,placementSurfaces,order:renderablePlacement.order});matches.push(Object.freeze({...renderablePlacement,component}))}debugLog(`getPlacements:done`,{surface:normalizedSurface,target:normalizedTarget,layoutClass:normalizedLayoutClass,resultIds:matches.map(entry=>entry.id)});return Object.freeze(matches)}return Object.freeze({replacePlacements,replacePlacementTopology,getPlacements,getContext,setContext,subscribe,getRevision})}var DEFAULT_BOOTSTRAP_PATH=`/api/bootstrap`;function normalizeObject(value){return value&&typeof value===`object`&&!Array.isArray(value)?value:{}}function buildBootstrapUrl({path=DEFAULT_BOOTSTRAP_PATH,query={}}={}){const normalizedPath=String(path||DEFAULT_BOOTSTRAP_PATH).trim()||DEFAULT_BOOTSTRAP_PATH;const params=new URLSearchParams;for(const[key,value]of Object.entries(normalizeObject(query))){const normalizedKey=String(key||``).trim();const normalizedValue=String(value||``).trim();if(!normalizedKey||!normalizedValue)continue;params.set(normalizedKey,normalizedValue)}const queryString=params.toString();return queryString?`${normalizedPath}?${queryString}`:normalizedPath}function normalizeBootstrapResponseError(response,url){const error=new Error(`Bootstrap payload request failed with status ${response.status}.`);error.statusCode=Number(response.status||0);error.url=url;return error}function createShellBootstrapRuntime({handlers,placementRuntime,requestRecoveryRuntime=null,router=null,logger,fetchImplementation=globalThis.fetch,bootstrapPath=DEFAULT_BOOTSTRAP_PATH}={}){if(!handlers||typeof handlers.list!==`function`)throw new Error(`createShellBootstrapRuntime requires a bootstrap handler registry.`);if(!placementRuntime||typeof placementRuntime.setContext!==`function`)throw new Error(`createShellBootstrapRuntime requires a placement runtime.`);const runtimeLogger=createProviderLogger(logger);let initialized=false;let refreshQueue=Promise.resolve();async function resolveBootstrapRequest(reason=`manual`){const payloadHandlers=handlers.list();let request={path:bootstrapPath,query:{},meta:{}};for(const handler of payloadHandlers){if(typeof handler.resolveBootstrapRequest!==`function`)continue;const contribution=normalizeObject(await handler.resolveBootstrapRequest({router,placementRuntime,reason,request:Object.freeze({path:request.path,query:Object.freeze({...request.query}),meta:Object.freeze({...request.meta})})}));request={path:String(contribution.path||request.path||bootstrapPath).trim()||bootstrapPath,query:{...request.query,...normalizeObject(contribution.query)},meta:{...request.meta,...normalizeObject(contribution.meta)}}}return Object.freeze({path:request.path,query:Object.freeze({...request.query}),meta:Object.freeze({...request.meta})})}async function applyBootstrapPayload(payload,reason=`manual`,request=Object.freeze({})){const payloadHandlers=handlers.list();const source=`shell-web.bootstrap.${String(reason||`manual`).trim()||`manual`}`;for(const handler of payloadHandlers)await handler.applyBootstrapPayload({router,placementRuntime,payload,request,reason,source});return payload}async function applyBootstrapError(error,reason=`manual`,request=Object.freeze({})){const payloadHandlers=handlers.list();const source=`shell-web.bootstrap.${String(reason||`manual`).trim()||`manual`}`;for(const handler of payloadHandlers){if(typeof handler.handleBootstrapError!==`function`)continue;await handler.handleBootstrapError({router,placementRuntime,error,request,reason,source})}}async function performRefresh(reason=`manual`){if(typeof fetchImplementation!==`function`)throw new Error(`Bootstrap payload fetch requires a fetch implementation.`);const request=await resolveBootstrapRequest(reason);const url=buildBootstrapUrl(request);try{const response=await fetchImplementation(url,{method:`GET`,credentials:`include`,headers:{accept:`application/json`}});if(!response.ok)throw normalizeBootstrapResponseError(response,url);return applyBootstrapPayload(await response.json(),reason,request)}catch(error){await applyBootstrapError(error,reason,request);requestRecoveryRuntime?.report?.(error,{label:`App data`,retry:()=>refresh(reason),source:`shell-web.bootstrap`,dedupeKey:`shell-web.bootstrap.${String(reason||`manual`).trim()||`manual`}.request-failed`});runtimeLogger.warn({reason,error:String(error?.message||error||`unknown error`)},`shell-web bootstrap refresh failed.`);return null}}function refresh(reason=`manual`){refreshQueue=refreshQueue.then(()=>performRefresh(reason));return refreshQueue}async function initialize(){if(initialized)return null;initialized=true;return refresh(`init`)}return Object.freeze({initialize,refresh})}function normalizeBootstrapPayloadHandler(entry){if(typeof entry===`function`)return Object.freeze({handlerId:String(entry.name||`anonymous`),order:0,applyBootstrapPayload:entry});if(!entry||typeof entry!==`object`||typeof entry.applyBootstrapPayload!==`function`)throw new TypeError(`Bootstrap payload handlers require applyBootstrapPayload().`);const handlerId=String(entry.handlerId||``).trim();if(!handlerId)throw new TypeError(`Bootstrap payload handlers require handlerId.`);return Object.freeze({...entry,handlerId,order:Number.isFinite(entry.order)?Number(entry.order):0})}function createBootstrapPayloadHandlerRegistry(){const handlers=new Map;function register(entry){const handler=normalizeBootstrapPayloadHandler(entry);if(handlers.has(handler.handlerId))throw new Error(`Bootstrap payload handler "${handler.handlerId}" is duplicated.`);handlers.set(handler.handlerId,handler);return api}function list(){return Object.freeze([...handlers.values()].sort((left,right)=>{if(left.order!==right.order)return left.order-right.order;return left.handlerId.localeCompare(right.handlerId)}))}const api=Object.freeze({register,list});return api}function resolveBootstrapErrorStatusCode(error){const statusCode=Number(error?.statusCode||error?.status||0);return Number.isInteger(statusCode)&&statusCode>0?statusCode:0}var APP_PLACEMENT_MODULE_SPECIFIER=`/src/placement.js`;var APP_PLACEMENT_TOPOLOGY_MODULE_SPECIFIER=`/src/placementTopology.js`;var APP_ERROR_MODULE_SPECIFIER=`/src/error.js`;var ASYNC_MODULE_RELOAD_FAILURE_MESSAGE=`The app cannot reload because the app server is not reachable. Restart the server, then click Reload.`;async function loadAppPlacementDefinitions(logger,asyncModuleRecoveryRuntime=null){try{const exported=(await __vitePreload(()=>import(`./placement-BF-zIEhA.js`).then(n=>n.n),__vite__mapDeps([110,6,1,7,71,49,44,19,101,111,45])))?.default;const resolved=typeof exported===`function`?exported():exported;if(Array.isArray(resolved))return resolved;logger.warn({module:APP_PLACEMENT_MODULE_SPECIFIER,exportedType:typeof exported},`App placement module default export did not resolve to an array; using empty list.`)}catch(error){if(isMissingDynamicModule(error,APP_PLACEMENT_MODULE_SPECIFIER))return[];notifyDynamicImportFailure(asyncModuleRecoveryRuntime,error,{label:`Placement config`});logger.warn({module:APP_PLACEMENT_MODULE_SPECIFIER,error:String(error?.message||error||`unknown error`)},`Failed to load app placement module; using empty list.`)}return[]}async function loadAppPlacementTopology(logger,asyncModuleRecoveryRuntime=null){try{const exported=(await __vitePreload(()=>import(`./placementTopology-CDhUIK6L.js`),[]))?.default;return resolveAppPlacementTopologyExport(exported,logger)}catch(error){if(isMissingDynamicModule(error,APP_PLACEMENT_TOPOLOGY_MODULE_SPECIFIER))return[];notifyDynamicImportFailure(asyncModuleRecoveryRuntime,error,{label:`Placement topology`});logger.warn({module:APP_PLACEMENT_TOPOLOGY_MODULE_SPECIFIER,error:String(error?.message||error||`unknown error`)},`Failed to load app placement topology module; using empty topology.`)}return[]}function resolveAppPlacementTopologyExport(exported,logger){const resolved=typeof exported===`function`?exported():exported;if(Array.isArray(resolved))return resolved;if(resolved&&typeof resolved===`object`)return resolved;logger.warn({module:APP_PLACEMENT_TOPOLOGY_MODULE_SPECIFIER,exportedType:typeof exported},`App placement topology module default export did not resolve to an object or array; using empty topology.`);return[]}function createErrorConfigToolkit(errorRuntime){return Object.freeze({createDefaultErrorPolicy,moduleDefaultPresenterId:`material.snackbar`,presenterFactories:Object.freeze({createMaterialSnackbarPresenter,createMaterialBannerPresenter,createMaterialDialogPresenter}),runtime:errorRuntime})}async function loadAppErrorConfig(logger,errorRuntime,asyncModuleRecoveryRuntime=null){try{const exported=(await __vitePreload(()=>import(`./error-DgrgRbJJ.js`),__vite__mapDeps([154,70,1,44])))?.default;const toolkit=createErrorConfigToolkit(errorRuntime);const resolved=typeof exported===`function`?await exported(toolkit):exported;if(isRecord$2(resolved))return resolved;logger.warn({module:APP_ERROR_MODULE_SPECIFIER,exportedType:typeof exported},`App error module default export did not resolve to an object; using shell-web defaults.`)}catch(error){if(isMissingDynamicModule(error,APP_ERROR_MODULE_SPECIFIER))return{};notifyDynamicImportFailure(asyncModuleRecoveryRuntime,error,{label:`Error config`});logger.warn({module:APP_ERROR_MODULE_SPECIFIER,error:String(error?.message||error||`unknown error`)},`Failed to load app error module; using shell-web defaults.`)}return{}}function applyAppErrorConfig(errorRuntime,errorConfig={}){const source=isRecord$2(errorConfig)?errorConfig:{};const configPayload={};if(Array.isArray(source.presenters)&&source.presenters.length>0)configPayload.presenters=source.presenters;if(Object.prototype.hasOwnProperty.call(source,`policy`))configPayload.policy=source.policy;if(Object.prototype.hasOwnProperty.call(source,`defaultPresenterId`))configPayload.defaultPresenterId=source.defaultPresenterId;if(Object.keys(configPayload).length>0){errorRuntime.configure(configPayload);return}errorRuntime.assertBootReady()}function isPullRefreshQuery(query=null){const meta=isRecord$2(query?.meta)?query.meta:{};if(meta.jskitRefresh===`pull`)return true;if(meta.jskitRefresh===false)return false;return(isRecord$2(meta.jskit)?meta.jskit:{}).refreshOnPull!==false}function createShellRefreshRuntime({bootstrapRuntime=null,queryClient=null,errorRuntime=null,logger=null}={}){const runtimeLogger=createProviderLogger(logger);let refreshQueue=Promise.resolve(null);async function refreshBootstrap(reason){if(!bootstrapRuntime||typeof bootstrapRuntime.refresh!==`function`)return false;await bootstrapRuntime.refresh(reason);return true}async function refetchPullQueries(){if(!queryClient||typeof queryClient.refetchQueries!==`function`)return false;await queryClient.refetchQueries({type:`active`,predicate:isPullRefreshQuery},{throwOnError:false});return true}function reportRefreshFailure(error){runtimeLogger.warn({error:String(error?.message||error||`unknown error`)},`Shell refresh failed.`);if(!errorRuntime||typeof errorRuntime.report!==`function`)return;errorRuntime.report({source:`shell-web.refresh`,message:`Unable to refresh. Check the connection and try again.`,intent:`app-recoverable`,severity:`error`,dedupeKey:`shell-web.refresh.failed`,dedupeWindowMs:2e3,action:{label:`Retry`,dismissOnRun:true,handler(){refresh(`retry`)}}})}async function performRefresh(reason=`manual`){const normalizedReason=String(reason||`manual`).trim()||`manual`;try{const[bootstrapRefreshed,queriesRefetched]=await Promise.all([refreshBootstrap(normalizedReason),refetchPullQueries()]);return Object.freeze({reason:normalizedReason,bootstrapRefreshed,queriesRefetched})}catch(error){reportRefreshFailure(error);return Object.freeze({reason:normalizedReason,bootstrapRefreshed:false,queriesRefetched:false,error})}}function refresh(reason=`manual`){refreshQueue=refreshQueue.catch(()=>null).then(()=>performRefresh(reason));return refreshQueue}return Object.freeze({refresh})}function installVueErrorBridge(vueApp,errorRuntime,logger){if(!vueApp||!isRecord$2(vueApp.config))return;const previousHandler=typeof vueApp.config.errorHandler===`function`?vueApp.config.errorHandler:null;vueApp.config.errorHandler=(error,instance,info)=>{try{errorRuntime.report({source:`shell-web.vue.error-handler`,message:String(error?.message||`Unexpected UI error.`),cause:error,intent:`blocking`,severity:`error`,details:{info:String(info||``)}})}catch(reportError){logger.error({source:`shell-web.vue.error-handler`,error:String(reportError?.message||reportError||`unknown error`)},`Shell web error runtime failed to report a Vue error.`)}if(previousHandler)previousHandler(error,instance,info)}}function installRouterErrorBridge(router,errorRuntime,logger){if(!router||typeof router.onError!==`function`)return;router.onError(error=>{if(isDynamicImportError(error))return;try{errorRuntime.report({source:`shell-web.router.on-error`,message:String(error?.message||`Navigation failed.`),cause:error,intent:`app-recoverable`,severity:`error`,dedupeKey:String(error?.message||`navigation-failed`),dedupeWindowMs:2e3})}catch(reportError){logger.error({source:`shell-web.router.on-error`,error:String(reportError?.message||reportError||`unknown error`)},`Shell web error runtime failed to report a router error.`)}})}function createShellAsyncModuleRecoveryRuntime({router=null,errorRuntime=null,logger=null}={}){const runtimeLogger=createProviderLogger(logger);const state=createAsyncModuleRecoveryState();let installedRecovery=null;function report(nextState=state){if(!errorRuntime||typeof errorRuntime.report!==`function`){runtimeLogger.warn({label:String(nextState?.label||``)},`Async module recovery could not report because the shell error runtime is unavailable.`);return null}try{return errorRuntime.report({source:`shell-web.async-module-recovery`,message:String(nextState?.message||`A required app module could not load.`),cause:nextState?.error||null,intent:`app-recoverable`,severity:`warning`,dedupeKey:`shell-web.async-module-recovery.${Number(nextState?.attempt||0)}`,action:{label:`Reload`,dismissOnRun:true,handler(){return reload()}}})}catch(error){runtimeLogger.error({label:String(nextState?.label||``),error:String(error?.message||error||`unknown error`)},`Async module recovery could not report through the shell error runtime.`);return null}}async function reload(){const reloaded=await guardedReloadApp({state,label:`App`,message:ASYNC_MODULE_RELOAD_FAILURE_MESSAGE});if(!reloaded)report(state);return reloaded}function notify(error=null,{label=`App module`,message=``,stale=isDynamicImportError(error)}={}){notifyAsyncModuleLoadError(state,error,{label,message,retry:state.retry,stale});return report(state)}function install(){if(installedRecovery)return installedRecovery;installedRecovery=installAsyncModuleRecoveryHandlers({state,label:`App module`,router,onNotify:report});return installedRecovery}function dispose(){installedRecovery?.dispose?.();installedRecovery=null}return Object.freeze({dispose,install,notify,reload,report,state})}var ShellWebClientProvider=defineProvider({id:`shell.web.client`,requires:{components:`client.components`,loggerInput:`client.logger`,pinia:`client.pinia`,queryClient:`client.query`,router:`client.router`,surfaceRuntime:`client.surface`,vueApp:`client.vue`},provides:{shell:`client.shell`},setup({components,loggerInput,queryClient,router}){const logger=createProviderLogger(loggerInput);const bootstrapHandlers=createBootstrapPayloadHandlerRegistry();bootstrapHandlers.register(Object.freeze({handlerId:`shell.web.bootstrap.surface-access`,order:0,applyBootstrapPayload({payload={},placementRuntime,source}={}){placementRuntime.setContext({surfaceAccess:payload?.surfaceAccess&&typeof payload.surfaceAccess===`object`?payload.surfaceAccess:{}},{source})},handleBootstrapError({error,placementRuntime,source}={}){if(resolveBootstrapErrorStatusCode(error)!==401)return;placementRuntime.setContext({surfaceAccess:{}},{source})}}));const errorPresentationStore=createErrorPresentationStore();const errorRuntime=createErrorRuntime({presenters:createDefaultMaterialErrorPresenters({store:errorPresentationStore}),policy:createDefaultErrorPolicy(),moduleDefaultPresenterId:`material.snackbar`,logger});const placementRuntime=createWebPlacementRuntime({components,logger});const asyncModuleRecoveryRuntime=createShellAsyncModuleRecoveryRuntime({router,errorRuntime,logger});const requestRecoveryRuntime=createShellRequestRecoveryRuntime({queryClient,errorRuntime,logger});const bootstrapRuntime=createShellBootstrapRuntime({handlers:bootstrapHandlers,placementRuntime,requestRecoveryRuntime,router,logger});const refreshRuntime=createShellRefreshRuntime({bootstrapRuntime,queryClient,errorRuntime,logger});return{shell:Object.freeze({asyncModuleRecovery:asyncModuleRecoveryRuntime,bootstrap:bootstrapRuntime,bootstrapHandlers,error:errorRuntime,errorPresentationStore,placement:placementRuntime,refresh:refreshRuntime,requestRecovery:requestRecoveryRuntime})}},async boot({loggerInput,pinia,router,surfaceRuntime,vueApp},{outputs}){const logger=createProviderLogger(loggerInput);const{asyncModuleRecovery:asyncModuleRecoveryRuntime,bootstrap:bootstrapRuntime,error:errorRuntime,errorPresentationStore,placement:placementRuntime,refresh:refreshRuntime,requestRecovery:requestRecoveryRuntime}=outputs.shell;asyncModuleRecoveryRuntime.install();if(placementRuntime&&typeof placementRuntime.replacePlacements===`function`){const placementTopology=await loadAppPlacementTopology(logger,asyncModuleRecoveryRuntime);if(typeof placementRuntime.replacePlacementTopology===`function`)placementRuntime.replacePlacementTopology(placementTopology,{source:APP_PLACEMENT_TOPOLOGY_MODULE_SPECIFIER});const placements=await loadAppPlacementDefinitions(logger,asyncModuleRecoveryRuntime);placementRuntime.replacePlacements(placements,{source:APP_PLACEMENT_MODULE_SPECIFIER});const appConfig=getClientAppConfig();const surfaceConfig=buildSurfaceConfigContext(surfaceRuntime,{tenancyMode:appConfig?.tenancyMode});const surfaceAccessPolicies=appConfig?.surfaceAccessPolicies&&typeof appConfig.surfaceAccessPolicies===`object`?appConfig.surfaceAccessPolicies:{};placementRuntime.setContext({surfaceConfig,surfaceAccessPolicies},{source:`shell-web.surface-config`})}applyAppErrorConfig(errorRuntime,await loadAppErrorConfig(logger,errorRuntime,asyncModuleRecoveryRuntime));requestRecoveryRuntime.install();if(bootstrapRuntime&&typeof bootstrapRuntime.initialize===`function`)await bootstrapRuntime.initialize();if(!vueApp||typeof vueApp.provide!==`function`||typeof vueApp.use!==`function`)return;if(!pinia)throw new Error(`ShellWebClientProvider requires Pinia installed in the client app.`);useShellErrorPresentationStore(pinia).attachRuntimeStore(errorPresentationStore);vueApp.provide(`jskit.shell-web.runtime.web-placement.client`,placementRuntime);vueApp.provide(`jskit.shell-web.runtime.web-refresh.client`,refreshRuntime);vueApp.provide(`jskit.shell-web.runtime.web-error.client`,errorRuntime);vueApp.provide(SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY,asyncModuleRecoveryRuntime);vueApp.provide(SHELL_REQUEST_RECOVERY_RUNTIME_KEY,requestRecoveryRuntime);vueApp.provide(`jskit.shell-web.runtime.web-error.presentation-store.client`,errorPresentationStore);installVueErrorBridge(vueApp,errorRuntime,logger);installRouterErrorBridge(router,errorRuntime,logger)},shutdown(_dependencies,{outputs}){outputs.shell.requestRecovery.dispose();outputs.shell.asyncModuleRecovery.dispose()}});var SHELL_LAYOUT_DRAWER_DEFAULT_OPEN_STORAGE_KEY=`jskit.shell-web.drawer-default-open`;function readDrawerDefaultOpenPreference({storage=typeof window===`object`?window?.localStorage:null}={}){if(!storage||typeof storage.getItem!==`function`)return true;try{const storedValue=String(storage.getItem(`jskit.shell-web.drawer-default-open`)||``).trim().toLowerCase();if(storedValue===`false`)return false;if(storedValue===`true`)return true}catch{return true}return true}function writeDrawerDefaultOpenPreference(open,{storage=typeof window===`object`?window?.localStorage:null}={}){if(!storage||typeof storage.setItem!==`function`)return;try{storage.setItem(SHELL_LAYOUT_DRAWER_DEFAULT_OPEN_STORAGE_KEY,open?`true`:`false`)}catch{}}var useShellLayoutStore=defineStore(`jskit.shell-web.layout`,()=>{const drawerDefaultOpen=ref(readDrawerDefaultOpenPreference());const drawerOpen=ref(drawerDefaultOpen.value);const supportingContentOpen=ref(false);const supportingContentTitle=ref(``);function setDrawerDefaultOpen(open){const normalized=Boolean(open);drawerDefaultOpen.value=normalized;drawerOpen.value=normalized;writeDrawerDefaultOpenPreference(normalized)}function setDrawerOpen(open){drawerOpen.value=Boolean(open)}function toggleDrawer(){drawerOpen.value=!drawerOpen.value}function openSupportingContent({title=``}={}){supportingContentTitle.value=String(title||``).trim();supportingContentOpen.value=true}function closeSupportingContent(){supportingContentOpen.value=false}function setSupportingContentOpen(open){supportingContentOpen.value=Boolean(open)}return{drawerDefaultOpen,drawerOpen,supportingContentOpen,supportingContentTitle,setDrawerDefaultOpen,setDrawerOpen,toggleDrawer,openSupportingContent,closeSupportingContent,setSupportingContentOpen}});function toSurfaceLabel(surfaceId=``){const normalizedSurfaceId=String(surfaceId||``).trim().toLowerCase();if(!normalizedSurfaceId)return`Surface`;return normalizedSurfaceId.split(/[^a-z0-9]+/g).filter(Boolean).map(segment=>`${segment.slice(0,1).toUpperCase()}${segment.slice(1)}`).join(` `)}function useShellLayoutState(props={}){const shellLayoutStore=useShellLayoutStore();const{drawerDefaultOpen,drawerOpen,supportingContentOpen,supportingContentTitle}=storeToRefs(shellLayoutStore);let route=null;try{route=useRoute()}catch{route=null}const{context:placementContext}=useWebPlacementContext();function toggleDrawer(){shellLayoutStore.toggleDrawer()}const resolvedSurface=computed(()=>{const explicitSurface=normalizeSurfaceId$1(props?.surface);if(explicitSurface)return explicitSurface;const pathname=String(route?.path||``).trim()||(typeof window===`object`&&window?.location?.pathname?String(window.location.pathname).trim():`/`);const contextValue=placementContext?.value||null;const resolvedSurfaceFromPath=resolveSurfaceIdFromPlacementPathname(contextValue,pathname);if(resolvedSurfaceFromPath)return resolvedSurfaceFromPath;const surfaceConfig=readPlacementSurfaceConfig(contextValue);if(surfaceConfig.defaultSurfaceId)return surfaceConfig.defaultSurfaceId;return`surface`});const resolvedSurfaceLabel=computed(()=>{const explicitLabel=String(props?.surfaceLabel||``).trim();if(explicitLabel)return explicitLabel;const surfaceDefinition=resolveSurfaceDefinitionFromPlacementContext(placementContext?.value||null,resolvedSurface.value);const configuredLabel=String(surfaceDefinition?.label||``).trim();if(configuredLabel)return configuredLabel;return toSurfaceLabel(resolvedSurface.value)});return Object.freeze({drawerDefaultOpen,drawerOpen,supportingContentOpen,supportingContentTitle,setDrawerDefaultOpen:shellLayoutStore.setDrawerDefaultOpen,setDrawerOpen:shellLayoutStore.setDrawerOpen,setSupportingContentOpen:shellLayoutStore.setSupportingContentOpen,openSupportingContent:shellLayoutStore.openSupportingContent,closeSupportingContent:shellLayoutStore.closeSupportingContent,toggleDrawer,resolvedSurface,resolvedSurfaceLabel})}var DESKTOP_DRAWER_CLOSED_MODES=Object.freeze([`rail`,`hidden`]);function normalizeDesktopDrawerClosedMode(value=`rail`){const normalized=String(value||`rail`).trim().toLowerCase();return DESKTOP_DRAWER_CLOSED_MODES.includes(normalized)?normalized:`rail`}function resolveShellDrawerPresentation({compact=false,open=false,desktopClosedMode=`rail`}={}){const closedMode=normalizeDesktopDrawerClosedMode(desktopClosedMode);if(compact)return Object.freeze({visible:Boolean(open),rail:false,kind:`modal`,closedMode});if(open)return Object.freeze({visible:true,rail:false,kind:`drawer`,closedMode});if(closedMode===`hidden`)return Object.freeze({visible:false,rail:false,kind:`hidden`,closedMode});return Object.freeze({visible:true,rail:true,kind:`rail`,closedMode})}function resolveShellDrawerToggleLabel({compact=false,open=false}={}){if(compact)return open?`Close navigation menu`:`Open navigation menu`;return open?`Collapse navigation drawer`:`Expand navigation drawer`}var DEFAULT_SHELL_DRAWER_WIDTH=248;var DEFAULT_SHELL_RAIL_WIDTH=80;var MINIMUM_SHELL_DRAWER_WIDTH=120;var MAXIMUM_SHELL_DRAWER_WIDTH=360;var MINIMUM_SHELL_RAIL_WIDTH=48;var MAXIMUM_SHELL_RAIL_WIDTH=160;var DEFAULT_SHELL_NAVIGATION_ITEM_SPACING=12;var MINIMUM_SHELL_NAVIGATION_ITEM_SPACING=8;var MAXIMUM_SHELL_NAVIGATION_ITEM_SPACING=24;function clampNumber(value,minimum,maximum){return Math.min(maximum,Math.max(minimum,value))}function normalizeShellDrawerWidth(value,fallback=248){const parsed=Number(value);if(!Number.isFinite(parsed)||parsed<=0)return fallback;return clampNumber(parsed,120,360)}function normalizeShellRailWidth(value,fallback=80){const parsed=Number(value);if(!Number.isFinite(parsed)||parsed<=0)return fallback;return clampNumber(Math.round(parsed),MINIMUM_SHELL_RAIL_WIDTH,MAXIMUM_SHELL_RAIL_WIDTH)}function normalizeShellNavigationItemSpacing(value,fallback=12){const parsed=Number(value);if(!Number.isFinite(parsed)||parsed<=0)return fallback;return clampNumber(Math.round(parsed),MINIMUM_SHELL_NAVIGATION_ITEM_SPACING,MAXIMUM_SHELL_NAVIGATION_ITEM_SPACING)}function resolveContentAwareDrawerWidth(measurements=[],{endGap=12,minimum=120,maximum=360,fallback=248}={}){let requiredWidth=0;for(const measurement of measurements){const logicalStart=Number(measurement?.logicalStart);const textWidth=Number(measurement?.textWidth);if(!Number.isFinite(logicalStart)||logicalStart<0||!Number.isFinite(textWidth)||textWidth<=0)continue;requiredWidth=Math.max(requiredWidth,logicalStart+textWidth+Number(endGap||0))}if(requiredWidth<=0)return normalizeShellDrawerWidth(fallback);return clampNumber(Math.ceil(requiredWidth*4)/4,minimum,maximum)}var _sfc_main$12={__name:`ShellOutlet`,props:{target:{type:String,default:``},default:{type:Boolean,default:false},context:{type:Object,default:()=>({})}},setup(__props){const props=__props;let route=null;try{route=useRoute()}catch{route=null}let display=null;try{display=useDisplay()}catch{display=null}const placementRuntime=useWebPlacementRuntime();const{context:placementContext}=useWebPlacementContext();const revision=ref(typeof placementRuntime.getRevision===`function`?placementRuntime.getRevision():0);let unsubscribe=null;onMounted(()=>{if(typeof placementRuntime.subscribe!==`function`)return;unsubscribe=placementRuntime.subscribe(event=>{const next=Number(event?.revision);revision.value=Number.isInteger(next)?next:revision.value+1})});onBeforeUnmount(()=>{if(typeof unsubscribe===`function`){unsubscribe();unsubscribe=null}});const resolvedSurface=computed(()=>{const contextValue=placementContext?.value||null;const pathname=resolveRuntimePathname(route?.path);const surfaceFromPathname=resolveSurfaceIdFromPlacementPathname(contextValue,pathname);if(surfaceFromPathname)return surfaceFromPathname;const surfaceConfig=readPlacementSurfaceConfig(contextValue);if(surfaceConfig.defaultSurfaceId)return surfaceConfig.defaultSurfaceId;return`*`});const resolvedTargetId=computed(()=>{return String(props.target||``).trim()});const resolvedLayoutClass=computed(()=>{const displayName=String(display?.name?.value||``).trim().toLowerCase();if(displayName===`xs`||displayName===`sm`)return`compact`;if(displayName===`md`)return`medium`;if(displayName===`lg`||displayName===`xl`||displayName===`xxl`)return`expanded`;const viewportWidth=typeof window===`object`&&window?.innerWidth?Number(window.innerWidth):0;if(viewportWidth>0&&viewportWidth<600)return`compact`;if(viewportWidth>0&&viewportWidth<1280)return`medium`;return`expanded`});const placements=computed(()=>{revision.value;return placementRuntime.getPlacements({surface:resolvedSurface.value,target:resolvedTargetId.value,layoutClass:resolvedLayoutClass.value,context:props.context})});return(_ctx,_cache)=>{return openBlock(true),createElementBlock(Fragment,null,renderList(placements.value,entry=>{return openBlock(),createBlock(resolveDynamicComponent(entry.component),mergeProps({key:entry.id},{ref_for:true},entry.props),null,16)}),128)}}};function normalizeMenuLinkPathname(pathname=``){const source=String(pathname||``).trim();if(!source)return``;const queryIndex=source.indexOf(`?`);const hashIndex=source.indexOf(`#`);const cutoff=queryIndex<0?hashIndex:hashIndex<0?queryIndex:Math.min(queryIndex,hashIndex);return cutoff<0?source:source.slice(0,cutoff)}function resolveMenuLinkSurfaceId(surface=``,fallbackSurfaceId=``){const explicitSurface=normalizeText$3(surface).toLowerCase();if(explicitSurface&&explicitSurface!==`*`)return explicitSurface;return normalizeText$3(fallbackSurfaceId).toLowerCase()}function interpolateBracketParams(pathTemplate=``,params={}){const source=String(pathTemplate||``).trim();if(!source)return``;return source.replace(/\[([^\]]+)\]/g,(_match,rawKey)=>{const key=String(rawKey||``).trim();if(!key)return``;const value=params?.[key];return value==null?`[${key}]`:encodeURIComponent(String(value))})}function isRelativeMenuLinkTarget(target=``){const normalizedTarget=normalizeText$3(target);return normalizedTarget.startsWith(`./`)||normalizedTarget.startsWith(`../`)}function surfaceRequiresWorkspaceFromPlacementContext(contextValue=null,surfaceId=``){return Boolean(resolveSurfaceDefinitionFromPlacementContext(contextValue,surfaceId)?.requiresWorkspace)}function resolveMenuLinkTarget({to=``,surface=``,currentSurfaceId=``,placementContext=null,scopedSuffix=`/`,unscopedSuffix=`/`,routeParams={},resolvePagePath=null}={}){const explicitTarget=normalizeText$3(to);const targetSurfaceId=resolveMenuLinkSurfaceId(surface,currentSurfaceId);const scopedRouteRequired=surfaceRequiresWorkspaceFromPlacementContext(placementContext,targetSurfaceId);const interpolatedSuffix=interpolateBracketParams(normalizeText$3(scopedRouteRequired?scopedSuffix:unscopedSuffix)||`/`,routeParams);const resolvedSuffixTarget=typeof resolvePagePath===`function`&&targetSurfaceId&&interpolatedSuffix&&!interpolatedSuffix.includes(`[`)?normalizeText$3(resolvePagePath(interpolatedSuffix,{surface:targetSurfaceId,mode:`auto`})):``;if(!explicitTarget)return resolvedSuffixTarget;if(isRelativeMenuLinkTarget(explicitTarget))return resolvedSuffixTarget;return explicitTarget}function normalizeText(value=``){return String(value||``).trim()}function resolveShellRouteTransitionKey({routePathKey=``,routeTransitionName=``,surfaceId=``}={}){if(normalizeText(routeTransitionName))return normalizeText(routePathKey)||`/`;const surfaceKey=normalizeText(surfaceId);if(surfaceKey&&surfaceKey!==`*`)return`surface:${surfaceKey}`;return`stable`}var _hoisted_1$4={class:`shell-route-transition`};var SWIPE_MIN_DISTANCE=36;var SWIPE_MAX_VERTICAL_DRIFT=120;var SWIPE_MIN_VELOCITY=.08;var _sfc_main$11={__name:`ShellRouteTransition`,props:{enabled:{type:Boolean,default:true},target:{type:String,default:`shell-layout:primary-bottom-nav`},semanticTarget:{type:String,default:`shell.primary-nav`},swipeEnabled:{type:Boolean,default:true}},setup(__props){const props=__props;const route=useRoute();const router=useRouter$1();const display=useDisplay();const placementRuntime=useWebPlacementRuntime();const{context:placementContext}=useWebPlacementContext();const revision=ref(typeof placementRuntime.getRevision===`function`?placementRuntime.getRevision():0);const transitionDirection=ref(`none`);let unsubscribe=null;let activeSwipe=null;let stopSwipeClassWatch=null;onMounted(()=>{if(typeof placementRuntime.subscribe!==`function`)unsubscribe=null;else unsubscribe=placementRuntime.subscribe(event=>{const next=Number(event?.revision);revision.value=Number.isInteger(next)?next:revision.value+1});if(typeof window===`object`){window.addEventListener(`pointerdown`,handlePointerDown,{capture:true,passive:true});window.addEventListener(`pointermove`,handlePointerMove,{capture:true,passive:false});window.addEventListener(`pointerup`,handlePointerEnd,{capture:true,passive:true});window.addEventListener(`pointercancel`,handlePointerCancel,{capture:true,passive:true})}stopSwipeClassWatch=watch(swipeNavigationEnabled,enabled=>{if(typeof document!==`object`)return;document.documentElement.classList.toggle(`shell-route-swipe-enabled`,enabled)},{immediate:true})});onBeforeUnmount(()=>{if(typeof unsubscribe===`function`){unsubscribe();unsubscribe=null}if(typeof stopSwipeClassWatch===`function`){stopSwipeClassWatch();stopSwipeClassWatch=null}if(typeof document===`object`)document.documentElement.classList.remove(`shell-route-swipe-enabled`);if(typeof window===`object`){window.removeEventListener(`pointerdown`,handlePointerDown,{capture:true});window.removeEventListener(`pointermove`,handlePointerMove,{capture:true});window.removeEventListener(`pointerup`,handlePointerEnd,{capture:true});window.removeEventListener(`pointercancel`,handlePointerCancel,{capture:true})}});const resolvedLayoutClass=computed(()=>{const displayName=String(display?.name?.value||``).trim().toLowerCase();if(displayName===`xs`||displayName===`sm`)return`compact`;if(displayName===`md`)return`medium`;return`expanded`});const currentPathname=computed(()=>normalizeComparablePathname(resolveRuntimePathname(route?.path||route?.fullPath||`/`)));const currentSurfaceId=computed(()=>{const contextValue=placementContext?.value||null;const surfaceFromPathname=resolveSurfaceIdFromPlacementPathname(contextValue,currentPathname.value);if(surfaceFromPathname)return surfaceFromPathname;return readPlacementSurfaceConfig(contextValue).defaultSurfaceId||`*`});const primaryNavEntries=computed(()=>{revision.value;const contextValue=placementContext?.value||null;const routeParams=route?.params||{};return placementRuntime.getPlacements({surface:currentSurfaceId.value,target:props.target,layoutClass:`compact`}).filter(entry=>String(entry.semanticTarget||entry.target||``).trim()===props.semanticTarget).map((entry,index)=>{const entryProps=entry?.props&&typeof entry.props===`object`?entry.props:{};const target=resolveMenuLinkTarget({to:entryProps.to,surface:entryProps.surface,currentSurfaceId:currentSurfaceId.value,placementContext:contextValue,scopedSuffix:entryProps.scopedSuffix,unscopedSuffix:entryProps.unscopedSuffix,routeParams,resolvePagePath(relativePath,options={}){return resolveShellLinkPath({context:contextValue,surface:options.surface,relativePath,params:routeParams,strictParams:options.strictParams!==false})}});const navigationTarget=resolveSurfaceNavigationTargetFromPlacementContext(contextValue,{path:target,surfaceId:entryProps.surface||currentSurfaceId.value});return Object.freeze({id:entry.id,index,exact:entryProps.exact===true,href:navigationTarget.href,pathname:normalizeComparablePathname(navigationTarget.href),sameOrigin:navigationTarget.sameOrigin})}).filter(entry=>entry.pathname&&entry.sameOrigin)});const activePrimaryNavIndex=computed(()=>{const pathname=currentPathname.value;let bestMatch=null;for(const entry of primaryNavEntries.value){if(!pathMatchesNavigationEntry(pathname,entry))continue;if(!bestMatch||entry.pathname.length>bestMatch.pathname.length)bestMatch=entry}return bestMatch?bestMatch.index:-1});watch(activePrimaryNavIndex,(nextIndex,previousIndex)=>{if(!Number.isInteger(previousIndex)||previousIndex<0||nextIndex<0||nextIndex===previousIndex){transitionDirection.value=`none`;return}transitionDirection.value=nextIndex>previousIndex?`forward`:`reverse`},{flush:`sync`});const routeTransitionName=computed(()=>{if(!props.enabled||resolvedLayoutClass.value!==`compact`)return``;if(transitionDirection.value===`forward`)return`shell-route-slide-forward`;if(transitionDirection.value===`reverse`)return`shell-route-slide-reverse`;return``});const routeTransitionKey=ref(``);watch([()=>normalizeComparablePathname(route?.path||route?.fullPath||`/`),currentSurfaceId],([routePathKey,surfaceId])=>{routeTransitionKey.value=resolveShellRouteTransitionKey({routePathKey,routeTransitionName:routeTransitionName.value,surfaceId})},{immediate:true,flush:`sync`});const swipeNavigationEnabled=computed(()=>Boolean(props.enabled&&props.swipeEnabled&&resolvedLayoutClass.value===`compact`&&primaryNavEntries.value.length>1&&activePrimaryNavIndex.value>=0));function handlePointerDown(event){if(!swipeNavigationEnabled.value||!isPrimaryPointerEvent(event)||isSwipeIgnoredTarget(event.target)){activeSwipe=null;return}activeSwipe={pointerId:event.pointerId,startX:event.clientX,startY:event.clientY,startTime:performance.now(),cancelled:false};try{event.target?.setPointerCapture?.(event.pointerId)}catch{}}function handlePointerMove(event){if(!activeSwipe||event.pointerId!==activeSwipe.pointerId)return;const deltaX=event.clientX-activeSwipe.startX;const deltaY=event.clientY-activeSwipe.startY;const absX=Math.abs(deltaX);const absY=Math.abs(deltaY);if(absY>SWIPE_MAX_VERTICAL_DRIFT||absY>28&&absY>absX*1.3){activeSwipe.cancelled=true;return}if(absX>10&&absX>absY)event.preventDefault();if(isAcceptedSwipe({deltaX,deltaY,elapsed:Math.max(performance.now()-activeSwipe.startTime,1)})){const offset=deltaX<0?1:-1;activeSwipe=null;navigateBySwipe(offset)}}function handlePointerEnd(event){if(!activeSwipe||event.pointerId!==activeSwipe.pointerId)return;const swipe=activeSwipe;activeSwipe=null;if(swipe.cancelled||!swipeNavigationEnabled.value)return;const deltaX=event.clientX-swipe.startX;const deltaY=event.clientY-swipe.startY;const elapsed=Math.max(performance.now()-swipe.startTime,1);if(!isAcceptedSwipe({deltaX,deltaY,elapsed,velocity:Math.abs(deltaX)/elapsed}))return;navigateBySwipe(deltaX<0?1:-1)}function handlePointerCancel(event){if(activeSwipe&&event.pointerId===activeSwipe.pointerId)activeSwipe=null}function navigateBySwipe(offset=0){const currentIndex=activePrimaryNavIndex.value;const nextEntry=primaryNavEntries.value[currentIndex+offset];if(!nextEntry?.href||normalizeComparablePathname(nextEntry.href)===currentPathname.value)return;router.push(nextEntry.href).catch(()=>{})}function isAcceptedSwipe({deltaX=0,deltaY=0,elapsed=1,velocity=null}={}){const absX=Math.abs(deltaX);const absY=Math.abs(deltaY);const resolvedVelocity=velocity==null?absX/Math.max(elapsed,1):velocity;return Boolean(absX>=SWIPE_MIN_DISTANCE&&absY<=SWIPE_MAX_VERTICAL_DRIFT&&absX>absY&&resolvedVelocity>=SWIPE_MIN_VELOCITY)}function normalizeComparablePathname(value=``){const raw=String(value||``).trim();if(!raw)return``;try{const parsed=new URL(raw,window.location.href);if(parsed.origin!==window.location.origin)return``;return normalizePathname$1(parsed.pathname)}catch{return normalizePathname$1(normalizeMenuLinkPathname(raw))}}function pathMatchesNavigationEntry(pathname=``,entry={}){const target=String(entry.pathname||``).trim();if(!target)return false;if(entry.exact||target===`/`)return pathname===target;return pathname===target||pathname.startsWith(`${target}/`)}function isPrimaryPointerEvent(event){return event?.isPrimary!==false&&event?.button===0&&event?.pointerType!==`mouse`}function isSwipeIgnoredTarget(target){return Boolean(target?.closest?.([`a`,`button`,`input`,`select`,`textarea`,`summary`,`[role='button']`,`[role='link']`,`[role='slider']`,`[contenteditable='true']`,`[data-shell-swipe-ignore]`].join(`,`)))}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$4,[createVNode(Transition,{name:routeTransitionName.value,css:Boolean(routeTransitionName.value)},{default:withCtx(()=>[(openBlock(),createElementBlock(`div`,{key:routeTransitionKey.value,class:`shell-route-transition__pane`},[renderSlot(_ctx.$slots,`default`,{},void 0,true)]))]),_:3},8,[`name`,`css`])])}}};var ShellRouteTransition_default=_plugin_vue_export_helper_default(_sfc_main$11,[[`__scopeId`,`data-v-d1a1f5bc`]]);var _hoisted_1$3={class:`shell-layout__top-left d-flex align-center ga-2`};var _hoisted_2$1={class:`shell-layout__surface-label`};var _hoisted_3$1={class:`shell-layout__top-right d-flex align-center ga-2`};var _hoisted_4={class:`shell-layout__pull-refresh-label`};var _hoisted_5={key:0,class:`shell-layout__title text-h5`};var _hoisted_6={key:1,class:`shell-layout__subtitle text-body-2 text-medium-emphasis`};var _hoisted_7={class:`shell-layout__supporting-side-panel`};var _hoisted_8={class:`shell-layout__supporting-title`};var PULL_REFRESH_TRIGGER_DISTANCE=72;var PULL_REFRESH_MAX_DISTANCE=112;var _sfc_main$10={__name:`ShellLayout`,props:{surface:{type:String,default:``},surfaceLabel:{type:String,default:``},title:{type:String,default:``},subtitle:{type:String,default:``},desktopDrawerClosedMode:{type:String,default:`rail`},drawerWidth:{type:Number,default:null},railWidth:{type:Number,default:80},navigationItemSpacing:{type:Number,default:12}},setup(__props){const props=__props;const{drawerDefaultOpen,drawerOpen,setDrawerOpen,supportingContentOpen,supportingContentTitle,setSupportingContentOpen,closeSupportingContent,toggleDrawer,resolvedSurface,resolvedSurfaceLabel}=useShellLayoutState(props);const display=useDisplay();const refreshRuntime=inject$1(`jskit.shell-web.runtime.web-refresh.client`,null);const pullDistance=ref(0);const pullRefreshing=ref(false);const wideDrawerOpen=ref(Boolean(drawerDefaultOpen.value));const navigationToggle=ref(null);const navigationDrawer=ref(null);const measuredDrawerWidth=ref(248);let activePull=null;let drawerContentObserver=null;let drawerMeasurementFrame=null;let shellMounted=false;const layoutClass=computed(()=>{const displayName=String(display?.name?.value||``).trim().toLowerCase();if(displayName===`xs`||displayName===`sm`)return`compact`;if(displayName===`md`)return`medium`;return`expanded`});const isCompactLayout=computed(()=>layoutClass.value===`compact`);const drawerPresentation=computed(()=>resolveShellDrawerPresentation({compact:isCompactLayout.value,open:drawerOpen.value,desktopClosedMode:props.desktopDrawerClosedMode}));const drawerToggleLabel=computed(()=>resolveShellDrawerToggleLabel({compact:isCompactLayout.value,open:drawerOpen.value}));const resolvedDrawerWidth=computed(()=>{if(props.drawerWidth!==null&&props.drawerWidth!==void 0)return normalizeShellDrawerWidth(props.drawerWidth);return normalizeShellDrawerWidth(measuredDrawerWidth.value)});const resolvedRailWidth=computed(()=>normalizeShellRailWidth(props.railWidth));const resolvedNavigationItemSpacing=computed(()=>normalizeShellNavigationItemSpacing(props.navigationItemSpacing));const pullProgress=computed(()=>Math.min(100,Math.round(pullDistance.value/PULL_REFRESH_TRIGGER_DISTANCE*100)));const pullIndicatorVisible=computed(()=>Boolean(isCompactLayout.value&&(pullDistance.value>0||pullRefreshing.value)));const pullRefreshLabel=computed(()=>{if(pullRefreshing.value)return`Refreshing`;return pullProgress.value>=100?`Release to refresh`:`Pull to refresh`});const pullRefreshStyle=computed(()=>({"--shell-pull-refresh-distance":`${Math.round(Math.min(pullDistance.value,PULL_REFRESH_MAX_DISTANCE))}px`}));watch(drawerOpen,handleDrawerOpenChange);watch(isCompactLayout,handleLayoutClassChange,{immediate:true});watch(drawerPresentation,scheduleDrawerWidthMeasurement,{flush:`post`});watch(resolvedSurface,scheduleDrawerWidthMeasurement,{flush:`post`});watch(resolvedNavigationItemSpacing,scheduleDrawerWidthMeasurement,{flush:`post`});onMounted(attachShellListeners);onBeforeUnmount(detachShellListeners);function attachShellListeners(){shellMounted=true;if(typeof window!==`object`)return;window.addEventListener(`keydown`,handleShellKeydown);window.addEventListener(`resize`,scheduleDrawerWidthMeasurement,{passive:true});window.addEventListener(`pointerdown`,handlePullPointerDown,{capture:true,passive:true});window.addEventListener(`pointermove`,handlePullPointerMove,{capture:true,passive:false});window.addEventListener(`pointerup`,handlePullPointerEnd,{capture:true,passive:true});window.addEventListener(`pointercancel`,handlePullPointerCancel,{capture:true,passive:true});window.addEventListener(`touchstart`,handlePullTouchStart,{capture:true,passive:true});window.addEventListener(`touchmove`,handlePullTouchMove,{capture:true,passive:false});window.addEventListener(`touchend`,handlePullTouchEnd,{capture:true,passive:true});window.addEventListener(`touchcancel`,handlePullTouchCancel,{capture:true,passive:true});if(document?.fonts){document.fonts.ready.then(scheduleDrawerWidthMeasurement);document.fonts.addEventListener?.(`loadingdone`,scheduleDrawerWidthMeasurement)}nextTick$1().then(initializeDrawerMeasurement)}function detachShellListeners(){shellMounted=false;if(typeof window!==`object`)return;window.removeEventListener(`keydown`,handleShellKeydown);window.removeEventListener(`resize`,scheduleDrawerWidthMeasurement);window.removeEventListener(`pointerdown`,handlePullPointerDown,{capture:true});window.removeEventListener(`pointermove`,handlePullPointerMove,{capture:true});window.removeEventListener(`pointerup`,handlePullPointerEnd,{capture:true});window.removeEventListener(`pointercancel`,handlePullPointerCancel,{capture:true});window.removeEventListener(`touchstart`,handlePullTouchStart,{capture:true});window.removeEventListener(`touchmove`,handlePullTouchMove,{capture:true});window.removeEventListener(`touchend`,handlePullTouchEnd,{capture:true});window.removeEventListener(`touchcancel`,handlePullTouchCancel,{capture:true});document?.fonts?.removeEventListener?.(`loadingdone`,scheduleDrawerWidthMeasurement);drawerContentObserver?.disconnect();drawerContentObserver=null;if(drawerMeasurementFrame!==null){window.cancelAnimationFrame(drawerMeasurementFrame);drawerMeasurementFrame=null}}function handleDrawerOpenChange(open){if(!isCompactLayout.value)wideDrawerOpen.value=Boolean(open)}function handleLayoutClassChange(compact){setDrawerOpen(compact?false:wideDrawerOpen.value)}function handleShellKeydown(event){if(event?.defaultPrevented||event?.key!==`Escape`||!isCompactLayout.value||!drawerOpen.value)return;event.preventDefault();setDrawerOpen(false);nextTick$1().then(focusNavigationToggle)}function focusNavigationToggle(){(navigationToggle.value?.$el||navigationToggle.value)?.focus?.({preventScroll:true})}function initializeDrawerMeasurement(){const drawerElement=resolveNavigationDrawerElement();const drawerContent=drawerElement?.querySelector?.(`.v-navigation-drawer__content`)||drawerElement;if(typeof MutationObserver===`function`&&drawerContent){drawerContentObserver?.disconnect();drawerContentObserver=new MutationObserver(scheduleDrawerWidthMeasurement);drawerContentObserver.observe(drawerContent,{childList:true,characterData:true,subtree:true})}scheduleDrawerWidthMeasurement()}function resolveNavigationDrawerElement(){const exposedElement=navigationDrawer.value?.$el||navigationDrawer.value||null;if(typeof exposedElement?.getBoundingClientRect===`function`)return exposedElement;if(typeof document===`object`)return document.getElementById(`jskit-shell-drawer`);return null}function scheduleDrawerWidthMeasurement(){if(!shellMounted||props.drawerWidth!==null&&props.drawerWidth!==void 0||!drawerPresentation.value.visible||drawerPresentation.value.rail||typeof window!==`object`)return;if(drawerMeasurementFrame!==null)window.cancelAnimationFrame(drawerMeasurementFrame);drawerMeasurementFrame=window.requestAnimationFrame(measureDrawerContentWidth)}function measureDrawerContentWidth(){drawerMeasurementFrame=null;const drawerElement=resolveNavigationDrawerElement();if(!drawerElement||typeof document!==`object`)return;const drawerRect=drawerElement.getBoundingClientRect();const drawerStyle=window.getComputedStyle(drawerElement);const rightToLeft=drawerStyle.direction===`rtl`;const endBorderWidth=Number.parseFloat(rightToLeft?drawerStyle.borderLeftWidth:drawerStyle.borderRightWidth)||0;const measurements=[];for(const label of drawerElement.querySelectorAll(`.v-list-item-title`)){const labelStyle=window.getComputedStyle(label);if(labelStyle.display===`none`||labelStyle.visibility===`hidden`)continue;const textRect=measureRenderedText(label);if(!textRect||textRect.width<=0)continue;measurements.push({logicalStart:rightToLeft?drawerRect.right-textRect.right:textRect.left-drawerRect.left,textWidth:textRect.width})}const nextWidth=resolveContentAwareDrawerWidth(measurements,{endGap:resolvedNavigationItemSpacing.value+endBorderWidth});if(Math.abs(nextWidth-measuredDrawerWidth.value)>=.25)measuredDrawerWidth.value=nextWidth}function measureRenderedText(element){const range=document.createRange();range.selectNodeContents(element);const rect=range.getBoundingClientRect();range.detach?.();return rect}function handlePullPointerDown(event){if(!canStartPullRefresh(event)){activePull=null;return}activePull={pointerId:event.pointerId,touchIdentifier:null,startX:event.clientX,startY:event.clientY,pointerCancelled:false}}function handleDrawerVisibilityChange(open){if(isCompactLayout.value||drawerPresentation.value.closedMode===`hidden`||open===false)setDrawerOpen(open)}function handlePullPointerMove(event){if(!activePull||event.pointerId!==activePull.pointerId)return;updatePullGesture(event.clientX,event.clientY,event)}function handlePullPointerEnd(event){if(!activePull||event.pointerId!==activePull.pointerId)return;finishPullGesture()}function handlePullPointerCancel(event){if(!activePull||event.pointerId!==activePull.pointerId)return;activePull.pointerId=null;activePull.pointerCancelled=true}function handlePullTouchStart(event){if(activePull||!canStartTouchPullRefresh(event))return;const touch=event.touches?.[0]||null;if(!touch)return;activePull={pointerId:null,touchIdentifier:touch.identifier,startX:touch.clientX,startY:touch.clientY,pointerCancelled:false}}function handlePullTouchMove(event){const touch=findActiveTouch(event.touches);if(!activePull||!touch)return;updatePullGesture(touch.clientX,touch.clientY,event)}function handlePullTouchEnd(event){if(!activePull||!touchListIncludesActiveTouch(event.changedTouches))return;finishPullGesture()}function handlePullTouchCancel(event){if(activePull&&touchListIncludesActiveTouch(event.changedTouches))cancelPullRefresh()}function updatePullGesture(clientX,clientY,event){if(!activePull)return;const deltaX=clientX-activePull.startX;const deltaY=clientY-activePull.startY;const absX=Math.abs(deltaX);if(deltaY<-4||absX>24&&absX>deltaY*1.15){cancelPullRefresh();return}if(deltaY<=6||!isAtPageTop())return;if(event?.cancelable)event.preventDefault();pullDistance.value=Math.min(PULL_REFRESH_MAX_DISTANCE,Math.round(deltaY*.55))}function finishPullGesture(){const shouldRefresh=pullDistance.value>=PULL_REFRESH_TRIGGER_DISTANCE;activePull=null;if(!shouldRefresh){pullDistance.value=0;return}refreshFromPullGesture()}function cancelPullRefresh(){activePull=null;if(!pullRefreshing.value)pullDistance.value=0}async function refreshFromPullGesture(){if(!refreshRuntime||typeof refreshRuntime.refresh!==`function`||pullRefreshing.value){pullDistance.value=0;return}pullRefreshing.value=true;pullDistance.value=PULL_REFRESH_TRIGGER_DISTANCE;try{await refreshRuntime.refresh(`pull-to-refresh`)}finally{pullRefreshing.value=false;pullDistance.value=0}}function canStartPullRefresh(event){return Boolean(canStartPullRefreshFromTarget(event.target)&&isPrimaryTouchPointer(event))}function canStartTouchPullRefresh(event){return Boolean(event?.touches?.length===1&&canStartPullRefreshFromTarget(event.target))}function canStartPullRefreshFromTarget(target){return Boolean(isCompactLayout.value&&refreshRuntime&&typeof refreshRuntime.refresh===`function`&&!pullRefreshing.value&&isAtPageTop()&&!isPullRefreshIgnoredTarget(target))}function isPrimaryTouchPointer(event){return event?.isPrimary!==false&&event?.button===0&&event?.pointerType!==`mouse`}function isAtPageTop(){if(typeof window!==`object`||typeof document!==`object`)return false;const documentScrollTop=Number(document.documentElement?.scrollTop||0);const bodyScrollTop=Number(document.body?.scrollTop||0);return Math.max(Number(window.scrollY||0),documentScrollTop,bodyScrollTop)<=0}function isPullRefreshIgnoredTarget(target){return Boolean(target?.closest?.([`a`,`button`,`input`,`select`,`textarea`,`summary`,`[role='button']`,`[role='link']`,`[role='slider']`,`[contenteditable='true']`,`[data-shell-pull-refresh-ignore]`,`[data-shell-swipe-ignore]`].join(`,`)))}function findActiveTouch(touchList){if(!activePull||!touchList||touchList.length<1)return null;if(activePull.touchIdentifier===null&&touchList.length===1)return touchList[0];for(const touch of touchList)if(touch.identifier===activePull.touchIdentifier)return touch;return null}function touchListIncludesActiveTouch(touchList){if(!activePull)return false;if(activePull.touchIdentifier===null)return!touchList||touchList.length<=1;return Boolean(findActiveTouch(touchList))}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VAppBar,{border:``,density:isCompactLayout.value?`compact`:`comfortable`,elevation:`0`,class:`shell-layout__app-bar bg-surface`,"data-testid":`jskit-shell-app-bar`},{default:withCtx(()=>[createVNode(VAppBarNavIcon,{ref_key:`navigationToggle`,ref:navigationToggle,class:`shell-layout__nav-toggle`,"data-testid":`jskit-shell-nav-toggle`,"aria-label":drawerToggleLabel.value,"aria-expanded":unref(drawerOpen),"aria-controls":`jskit-shell-drawer`,onClick:unref(toggleDrawer)},null,8,[`aria-label`,`aria-expanded`,`onClick`]),renderSlot(_ctx.$slots,`top-left`,{surface:unref(resolvedSurface)},()=>[createBaseVNode(`div`,_hoisted_1$3,[createBaseVNode(`span`,_hoisted_2$1,toDisplayString(unref(resolvedSurfaceLabel)),1),createVNode(_sfc_main$12,{target:`shell-layout:top-left`})])],true),createVNode(VSpacer),renderSlot(_ctx.$slots,`top-right`,{surface:unref(resolvedSurface)},()=>[createBaseVNode(`div`,_hoisted_3$1,[createVNode(_sfc_main$12,{target:`shell-layout:top-right`})])],true)]),_:3},8,[`density`]),pullIndicatorVisible.value?(openBlock(),createElementBlock(`div`,{key:0,class:normalizeClass([`shell-layout__pull-refresh`,{"shell-layout__pull-refresh--refreshing":pullRefreshing.value}]),style:normalizeStyle(pullRefreshStyle.value),"data-testid":`jskit-shell-pull-refresh`,"aria-live":`polite`},[createVNode(VProgressCircular,{"model-value":pullProgress.value,indeterminate:pullRefreshing.value,color:`primary`,size:`22`,width:`3`},null,8,[`model-value`,`indeterminate`]),createBaseVNode(`span`,_hoisted_4,toDisplayString(pullRefreshLabel.value),1)],6)):createCommentVNode(``,true),createVNode(VNavigationDrawer,{ref_key:`navigationDrawer`,ref:navigationDrawer,id:`jskit-shell-drawer`,"model-value":drawerPresentation.value.visible,border:``,class:`shell-layout__drawer bg-surface`,"data-testid":`jskit-shell-drawer`,"data-layout":layoutClass.value,"data-presentation":drawerPresentation.value.kind,"data-drawer-width-mode":props.drawerWidth===null||props.drawerWidth===void 0?`content`:`fixed`,"data-drawer-width":resolvedDrawerWidth.value,"data-navigation-item-spacing":resolvedNavigationItemSpacing.value,"data-rail-width":resolvedRailWidth.value,style:normalizeStyle({"--shell-navigation-item-spacing":`${resolvedNavigationItemSpacing.value}px`,"--shell-navigation-rail-width":`${resolvedRailWidth.value}px`}),temporary:isCompactLayout.value,permanent:!isCompactLayout.value,width:resolvedDrawerWidth.value,rail:drawerPresentation.value.rail,"rail-width":resolvedRailWidth.value,"onUpdate:modelValue":handleDrawerVisibilityChange},{default:withCtx(()=>[renderSlot(_ctx.$slots,`menu`,{surface:unref(resolvedSurface),rail:drawerPresentation.value.rail},()=>[createVNode(VList,{nav:``,density:`comfortable`,class:`pt-2`,"prepend-gap":resolvedNavigationItemSpacing.value},{default:withCtx(()=>[createVNode(_sfc_main$12,{target:`shell-layout:primary-menu`,default:``}),createVNode(VDivider,{class:`my-2`}),createVNode(_sfc_main$12,{target:`shell-layout:secondary-menu`})]),_:1},8,[`prepend-gap`])],true)]),_:3},8,[`model-value`,`data-layout`,`data-presentation`,`data-drawer-width-mode`,`data-drawer-width`,`data-navigation-item-spacing`,`data-rail-width`,`style`,`temporary`,`permanent`,`width`,`rail`,`rail-width`]),createVNode(VMain,{class:`bg-background`},{default:withCtx(()=>[createVNode(VContainer,{fluid:``,class:`shell-layout__content`},{default:withCtx(()=>[__props.title?(openBlock(),createElementBlock(`h1`,_hoisted_5,toDisplayString(__props.title),1)):createCommentVNode(``,true),__props.subtitle?(openBlock(),createElementBlock(`p`,_hoisted_6,toDisplayString(__props.subtitle),1)):createCommentVNode(``,true),createVNode(ShellRouteTransition_default,null,{default:withCtx(()=>[renderSlot(_ctx.$slots,`default`,{},void 0,true)]),_:3})]),_:3})]),_:3}),isCompactLayout.value?(openBlock(),createBlock(VBottomNavigation,{key:1,class:`shell-layout__bottom-nav`,"data-testid":`jskit-shell-bottom-nav`,"bg-color":`surface`,color:`primary`,density:`comfortable`,grow:``,mandatory:``},{default:withCtx(()=>[createVNode(_sfc_main$12,{target:`shell-layout:primary-bottom-nav`})]),_:1})):createCommentVNode(``,true),isCompactLayout.value?(openBlock(),createBlock(VBottomSheet,{key:2,"model-value":unref(supportingContentOpen),"onUpdate:modelValue":unref(setSupportingContentOpen)},{default:withCtx(()=>[createVNode(VCard,{rounded:`t-xl`,class:`shell-layout__supporting-sheet`,"data-testid":`jskit-shell-supporting-bottom-sheet`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`shell-layout__supporting-title`},{default:withCtx(()=>[createBaseVNode(`span`,null,toDisplayString(unref(supportingContentTitle)||`Details`),1),createVNode(VBtn,{variant:`text`,onClick:unref(closeSupportingContent)},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(`Close`,-1)])]),_:1},8,[`onClick`])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createVNode(_sfc_main$12,{target:`shell-layout:supporting-bottom-sheet`})]),_:1})]),_:1})]),_:1},8,[`model-value`,`onUpdate:modelValue`])):createCommentVNode(``,true),!isCompactLayout.value?(openBlock(),createBlock(VNavigationDrawer,{key:3,"model-value":unref(supportingContentOpen),border:``,temporary:``,location:`right`,width:384,"data-testid":`jskit-shell-supporting-side-panel`,"onUpdate:modelValue":unref(setSupportingContentOpen)},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_7,[createBaseVNode(`div`,_hoisted_8,[createBaseVNode(`strong`,null,toDisplayString(unref(supportingContentTitle)||`Details`),1),createVNode(VBtn,{variant:`text`,onClick:unref(closeSupportingContent)},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(`Close`,-1)])]),_:1},8,[`onClick`])]),createVNode(_sfc_main$12,{target:`shell-layout:supporting-side-panel`})])]),_:1},8,[`model-value`,`onUpdate:modelValue`])):createCommentVNode(``,true)],64)}}};var ShellLayout_default=_plugin_vue_export_helper_default(_sfc_main$10,[[`__scopeId`,`data-v-d57fd366`]]);var _sfc_main$9={__name:`ShellOutletMenuWidget`,props:{target:{type:String,required:true},icon:{type:String,default:mdiCogOutline},ariaLabel:{type:String,default:`Tools`},location:{type:String,default:`bottom end`},offset:{type:[Number,String],default:10},minWidth:{type:[Number,String],default:220}},setup(__props){const props=__props;return(_ctx,_cache)=>{return openBlock(),createBlock(VMenu,{location:props.location,offset:props.offset,eager:``},{activator:withCtx(({props:activatorProps})=>[createVNode(VBtn,mergeProps(activatorProps,{icon:``,variant:`text`,"aria-label":props.ariaLabel}),{default:withCtx(()=>[createVNode(VIcon,{icon:props.icon},null,8,[`icon`])]),_:1},16,[`aria-label`])]),default:withCtx(()=>[createVNode(VList,{"min-width":props.minWidth,density:`comfortable`,class:`py-1`},{default:withCtx(()=>[createVNode(_sfc_main$12,{target:props.target},null,8,[`target`])]),_:1},8,[`min-width`])]),_:1},8,[`location`,`offset`])}}};var SURFACE_SWITCH_ICON_BY_ID=Object.freeze({home:mdiHomeVariantOutline,app:mdiViewDashboardOutline,admin:mdiShieldCrownOutline,console:mdiConsoleNetworkOutline});var SUPPORTED_EXPLICIT_MDI_ICON_BY_NAME=Object.freeze({"mdi-account-circle-outline":mdiAccountCircleOutline,"mdi-account-cog-outline":mdiAccountCogOutline,"mdi-account-group-outline":mdiAccountGroupOutline,"mdi-arrow-right-circle-outline":mdiArrowRightCircleOutline,"mdi-clipboard-list-outline":mdiClipboardListOutline,"mdi-cog-outline":mdiCogOutline,"mdi-console-network-outline":mdiConsoleNetworkOutline,"mdi-folder-outline":mdiFolderOutline,"mdi-home-variant-outline":mdiHomeVariantOutline,"mdi-login":mdiLogin,"mdi-logout":mdiLogout,"mdi-robot-outline":mdiRobotOutline,"mdi-shield-crown-outline":mdiShieldCrownOutline,"mdi-view-dashboard-outline":mdiViewDashboardOutline,"mdi-view-list-outline":mdiViewListOutline});function resolveExplicitIconValue(explicitIcon=``){const normalizedExplicitIcon=normalizeText$3(explicitIcon);if(!normalizedExplicitIcon)return``;if(!normalizedExplicitIcon.startsWith(`mdi-`))return normalizedExplicitIcon;const resolvedIcon=SUPPORTED_EXPLICIT_MDI_ICON_BY_NAME[normalizedExplicitIcon];return typeof resolvedIcon===`string`&&resolvedIcon?resolvedIcon:normalizedExplicitIcon}function normalizePathname(value=``){const normalizedValue=normalizeText$3(value);if(!normalizedValue)return``;if(isExternalLinkTarget(normalizedValue)){if(!(normalizedValue.startsWith(`http://`)||normalizedValue.startsWith(`https://`)))return``;let parsedPathname=``;try{parsedPathname=String(new URL(normalizedValue).pathname||``)}catch{return``}const normalizedPathname=normalizeText$3(parsedPathname);if(!normalizedPathname)return``;return normalizePathname$1(normalizedPathname).toLowerCase()}const{pathname}=splitPathQueryHash(normalizedValue);const normalizedPathname=normalizeText$3(pathname);if(!normalizedPathname)return``;return normalizePathname$1(normalizedPathname).toLowerCase()}function resolveSurfaceSwitchIdFromLabel(label=``){const normalizedLabel=normalizeText$3(label).toLowerCase();if(!normalizedLabel.startsWith(`go to `))return``;return normalizeText$3(normalizedLabel.slice(6))}function resolveSurfaceSwitchIcon(surfaceId=``,explicitIcon=``){const resolvedExplicitIcon=resolveExplicitIconValue(explicitIcon);if(resolvedExplicitIcon)return resolvedExplicitIcon;const normalizedSurfaceId=normalizeText$3(surfaceId).toLowerCase();return SURFACE_SWITCH_ICON_BY_ID[normalizedSurfaceId]||`M6,13V11H14L10.5,7.5L11.92,6.08L17.84,12L11.92,17.92L10.5,16.5L14,13H6M22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12M20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12Z`}function resolveMenuLinkIcon({icon=``,label=``,to=``}={}){const resolvedExplicitIcon=resolveExplicitIconValue(icon);if(resolvedExplicitIcon)return resolvedExplicitIcon;const normalizedLabel=normalizeText$3(label).toLowerCase();const normalizedPathname=normalizePathname(to);if(!normalizedLabel&&!normalizedPathname)return``;const surfaceSwitchSurfaceId=resolveSurfaceSwitchIdFromLabel(normalizedLabel);if(surfaceSwitchSurfaceId)return resolveSurfaceSwitchIcon(surfaceSwitchSurfaceId);if(normalizedLabel.includes(`sign in`)||normalizedPathname.includes(`/auth/login`))return mdiLogin;if(normalizedLabel.includes(`sign out`)||normalizedPathname.includes(`/auth/signout`))return mdiLogout;if(normalizedLabel.includes(`account`)||normalizedPathname.includes(`/account`)){if(normalizedLabel.includes(`settings`)||normalizedPathname.includes(`/settings`)||normalizedPathname===`/account`)return mdiAccountCogOutline;return mdiAccountCircleOutline}if(normalizedLabel.includes(`members`)||normalizedLabel.includes(`team`)||normalizedPathname.includes(`/members`))return mdiAccountGroupOutline;if(normalizedLabel.includes(`assistant`)||normalizedPathname.includes(`/assistant`))return mdiRobotOutline;if(normalizedLabel.includes(`console`)||normalizedPathname.startsWith(`/console`))return mdiConsoleNetworkOutline;if(normalizedLabel.includes(`admin`)||normalizedPathname.includes(`/admin`))return mdiShieldCrownOutline;if(normalizedLabel.includes(`settings`)||normalizedPathname.includes(`/settings`))return mdiCogOutline;if(normalizedLabel.includes(`home`)||normalizedPathname===`/`)return mdiHomeVariantOutline;if(normalizedLabel.includes(`workspace`)||normalizedLabel.includes(`dashboard`)||normalizedPathname.includes(`/w/`))return mdiViewDashboardOutline;if(normalizedPathname){if(normalizedPathname.split(`/`).filter(Boolean).length===1)return mdiFolderOutline}if(normalizedLabel.includes(`list`))return mdiClipboardListOutline;return mdiViewListOutline}function activateShellNavigationLinkOnSpace(event){if(event?.key!==` `||typeof event.currentTarget?.click!==`function`)return;event.preventDefault();event.stopPropagation();event.currentTarget.click()}var _sfc_main$8={__name:`ShellNavigationTooltip`,props:{label:{type:String,default:``}},setup(__props){const props=__props;const theme=useTheme();return(_ctx,_cache)=>{return openBlock(),createBlock(VTooltip,{text:props.label,theme:unref(theme).name.value,location:`end`,"content-class":`shell-navigation-tooltip`,"open-delay":400,"open-on-focus":true,"open-on-hover":true},{activator:withCtx(({props:activatorProps})=>[renderSlot(_ctx.$slots,`default`,{activatorProps})]),_:3},8,[`text`,`theme`])}}};var _sfc_main$7={__name:`ShellMenuLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false}},setup(__props){const props=__props;const{context:placementContext}=useWebPlacementContext();const resolvedTarget=computed(()=>{const target=String(props.to||``).trim();if(!target)return{href:``,sameOrigin:true};const navigationTarget=resolveSurfaceNavigationTargetFromPlacementContext(placementContext.value,{path:target});return{href:navigationTarget.href,sameOrigin:navigationTarget.sameOrigin}});const resolvedIcon=computed(()=>resolveMenuLinkIcon({icon:props.icon,label:props.label,to:resolvedTarget.value.href||props.to}));return(_ctx,_cache)=>{return resolvedTarget.value.href?(openBlock(),createBlock(_sfc_main$8,{key:0,label:props.label},{default:withCtx(({activatorProps})=>[createVNode(VListItem,mergeProps(activatorProps,{class:`shell-menu-link-item`,title:props.label,to:resolvedTarget.value.sameOrigin?resolvedTarget.value.href:void 0,href:resolvedTarget.value.sameOrigin?void 0:resolvedTarget.value.href,"prepend-icon":resolvedIcon.value||void 0,disabled:props.disabled,exact:props.exact,"aria-label":props.label,onKeydown:withKeys(unref(activateShellNavigationLinkOnSpace),[`space`])}),null,16,[`title`,`to`,`href`,`prepend-icon`,`disabled`,`exact`,`aria-label`,`onKeydown`])]),_:1},8,[`label`])):createCommentVNode(``,true)}}};var ShellMenuLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$7,[[`__scopeId`,`data-v-aa34cf36`]]);var _sfc_main$6={__name:`ShellSurfaceAwareMenuLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},surface:{type:String,default:``},scopedSuffix:{type:String,default:`/`},unscopedSuffix:{type:String,default:`/`},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false}},setup(__props){const props=__props;const route=useRoute();const{context:placementContext}=useWebPlacementContext();const currentSurfaceId=computed(()=>{return resolveSurfaceIdFromPlacementPathname(placementContext.value,String(route?.path||route?.fullPath||``).trim())});const resolvedTo=computed(()=>{return resolveMenuLinkTarget({to:props.to,surface:props.surface,currentSurfaceId:currentSurfaceId.value,placementContext:placementContext.value,scopedSuffix:props.scopedSuffix,unscopedSuffix:props.unscopedSuffix,routeParams:route.params||{},resolvePagePath(relativePath,options={}){return resolveShellLinkPath({context:placementContext.value,surface:options.surface,relativePath,params:route.params||{},strictParams:options.strictParams!==false})}})});const resolvedTarget=computed(()=>{const target=String(resolvedTo.value||``).trim();if(!target)return{href:``,sameOrigin:true};const navigationTarget=resolveSurfaceNavigationTargetFromPlacementContext(placementContext.value,{path:target});return{href:navigationTarget.href,sameOrigin:navigationTarget.sameOrigin}});const resolvedIcon=computed(()=>resolveMenuLinkIcon({icon:props.icon,label:props.label,to:resolvedTarget.value.href||resolvedTo.value}));return(_ctx,_cache)=>{return resolvedTarget.value.href?(openBlock(),createBlock(_sfc_main$8,{key:0,label:props.label},{default:withCtx(({activatorProps})=>[createVNode(VListItem,mergeProps(activatorProps,{class:`shell-menu-link-item`,title:props.label,to:resolvedTarget.value.sameOrigin?resolvedTarget.value.href:void 0,href:resolvedTarget.value.sameOrigin?void 0:resolvedTarget.value.href,"prepend-icon":resolvedIcon.value||void 0,disabled:props.disabled,exact:props.exact,"aria-label":props.label,onKeydown:withKeys(unref(activateShellNavigationLinkOnSpace),[`space`])}),null,16,[`title`,`to`,`href`,`prepend-icon`,`disabled`,`exact`,`aria-label`,`onKeydown`])]),_:1},8,[`label`])):createCommentVNode(``,true)}}};var ShellSurfaceAwareMenuLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$6,[[`__scopeId`,`data-v-8e70b4dd`]]);var _hoisted_1$2={class:`tab-link-item__label`};var _sfc_main$5={__name:`ShellTabLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},surface:{type:String,default:``},scopedSuffix:{type:String,default:`/`},unscopedSuffix:{type:String,default:`/`},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false}},setup(__props){const props=__props;const route=useRoute();const{context:placementContext}=useWebPlacementContext();const currentSurfaceId=computed(()=>{return resolveSurfaceIdFromPlacementPathname(placementContext.value,String(route?.path||route?.fullPath||``).trim())});const resolvedTo=computed(()=>{return resolveMenuLinkTarget({to:props.to,surface:props.surface,currentSurfaceId:currentSurfaceId.value,placementContext:placementContext.value,scopedSuffix:props.scopedSuffix,unscopedSuffix:props.unscopedSuffix,routeParams:route.params||{},resolvePagePath(relativePath,options={}){return resolveShellLinkPath({context:placementContext.value,surface:options.surface,relativePath,params:route.params||{},strictParams:options.strictParams!==false})}})});const resolvedTarget=computed(()=>{const target=String(resolvedTo.value||``).trim();if(!target)return{href:``,sameOrigin:true};const navigationTarget=resolveSurfaceNavigationTargetFromPlacementContext(placementContext.value,{path:target});return{href:navigationTarget.href,sameOrigin:navigationTarget.sameOrigin}});const resolvedIcon=computed(()=>resolveMenuLinkIcon({icon:props.icon,label:props.label,to:resolvedTarget.value.href||resolvedTo.value}));return(_ctx,_cache)=>{return resolvedTarget.value.href?(openBlock(),createBlock(VBtn,{key:0,class:`tab-link-item text-none`,to:resolvedTarget.value.sameOrigin?resolvedTarget.value.href:void 0,href:resolvedTarget.value.sameOrigin?void 0:resolvedTarget.value.href,disabled:props.disabled,exact:props.exact,"min-width":`72`,stacked:``},{default:withCtx(()=>[resolvedIcon.value?(openBlock(),createBlock(VIcon,{key:0,icon:resolvedIcon.value},null,8,[`icon`])):createCommentVNode(``,true),createBaseVNode(`span`,_hoisted_1$2,toDisplayString(props.label||`Tab`),1)]),_:1},8,[`to`,`href`,`disabled`,`exact`])):createCommentVNode(``,true)}}};var ShellTabLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$5,[[`__scopeId`,`data-v-1c3e59c0`]]);var client_exports$4=__exportAll({SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY:()=>SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY,SHELL_REQUEST_RECOVERY_RUNTIME_KEY:()=>SHELL_REQUEST_RECOVERY_RUNTIME_KEY,ShellErrorHost:()=>ShellErrorHost_default,ShellLayout:()=>ShellLayout_default,ShellMenuLinkItem:()=>ShellMenuLinkItem_default,ShellOutlet:()=>_sfc_main$12,ShellOutletMenuWidget:()=>_sfc_main$9,ShellRouteTransition:()=>ShellRouteTransition_default,ShellSurfaceAwareMenuLinkItem:()=>ShellSurfaceAwareMenuLinkItem_default,ShellTabLinkItem:()=>ShellTabLinkItem_default,ShellWebClientProvider:()=>ShellWebClientProvider,createBootstrapPayloadHandlerRegistry:()=>createBootstrapPayloadHandlerRegistry,isRecoverableRequestError:()=>isRecoverableRequestError,normalizeBootstrapPayloadHandler:()=>normalizeBootstrapPayloadHandler,requestRecoveryMessage:()=>requestRecoveryMessage,useShellAsyncModuleRecoveryRuntime:()=>useShellAsyncModuleRecoveryRuntime,useShellErrorPresentationStore:()=>useShellErrorPresentationStore,useShellLayoutState:()=>useShellLayoutState,useShellLayoutStore:()=>useShellLayoutStore,useShellRequestRecoveryRuntime:()=>useShellRequestRecoveryRuntime});var client_exports$3=__exportAll({});var _sfc_main$4={__name:`MenuLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false}},setup(__props){const props=__props;return(_ctx,_cache)=>{return openBlock(),createBlock(unref(ShellMenuLinkItem_default),normalizeProps(guardReactiveProps(props)),null,16)}}};var MenuLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$4,[[`__scopeId`,`data-v-8cffb0ff`]]);var _hoisted_1$1=[`data-vibe64-guide`];var _sfc_main$3={__name:`SurfaceAwareMenuLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},surface:{type:String,default:``},scopedSuffix:{type:String,default:`/`},unscopedSuffix:{type:String,default:`/`},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false},guideId:{type:String,default:``}},setup(__props){const props=__props;const linkProps=computed(()=>{const{guideId,...value}=props;return value});const incomingCount=inject$1(`vibe64.incoming.pendingCount`,null);const incomingLink=computed(()=>props.scopedSuffix.endsWith(`/dashboard/incoming`));return(_ctx,_cache)=>{return incomingLink.value?(openBlock(),createBlock(VBadge,{key:0,class:`incoming-menu-link`,"model-value":unref(incomingCount)>0,content:unref(incomingCount),max:`99`,inline:``},{default:withCtx(()=>[createVNode(unref(ShellSurfaceAwareMenuLinkItem_default),normalizeProps(guardReactiveProps(linkProps.value)),null,16)]),_:1},8,[`model-value`,`content`])):__props.guideId?(openBlock(),createElementBlock(`div`,{key:1,class:`surface-aware-menu-link-guide`,"data-vibe64-guide":__props.guideId},[createVNode(unref(ShellSurfaceAwareMenuLinkItem_default),normalizeProps(guardReactiveProps(linkProps.value)),null,16)],8,_hoisted_1$1)):(openBlock(),createBlock(unref(ShellSurfaceAwareMenuLinkItem_default),normalizeProps(mergeProps({key:2},linkProps.value)),null,16))}}};var SurfaceAwareMenuLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$3,[[`__scopeId`,`data-v-3bac1736`]]);var _sfc_main$2={__name:`TabLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},surface:{type:String,default:``},scopedSuffix:{type:String,default:`/`},unscopedSuffix:{type:String,default:`/`},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false}},setup(__props){const props=__props;return(_ctx,_cache)=>{return openBlock(),createBlock(unref(ShellTabLinkItem_default),normalizeProps(guardReactiveProps(props)),null,16)}}};var TabLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-49a92b2f`]]);var _sfc_main$1={__name:`TopActionLinkItem`,props:{disabled:{default:false,type:Boolean},exact:{default:false,type:Boolean},icon:{default:``,type:String},label:{default:``,type:String},returnToCurrent:{default:false,type:Boolean},to:{default:``,type:String}},setup(__props){const props=__props;const route=useRoute();const resolvedIcon=computed(()=>mdiLinkVariant);const active=computed(()=>{const target=String(props.to||``).trim();const path=String(route.path||``).trim();if(!target||!path)return false;return props.exact?path===target:path===target||path.startsWith(`${target}/`)});const resolvedTo=computed(()=>{const target=String(props.to||``).trim();if(!target||!props.returnToCurrent||active.value)return target;return{path:target,query:{returnTo:route.fullPath||route.path||`/app`}}});return(_ctx,_cache)=>{return props.to?(openBlock(),createBlock(VBtn,{key:0,class:normalizeClass([`top-action-link-item text-none`,{"top-action-link-item--active":active.value}]),disabled:props.disabled,"prepend-icon":resolvedIcon.value||void 0,to:resolvedTo.value,variant:`tonal`,color:`primary`,density:`comfortable`},{default:withCtx(()=>[createTextVNode(toDisplayString(props.label||`Open`),1)]),_:1},8,[`class`,`disabled`,`prepend-icon`,`to`])):createCommentVNode(``,true)}}};var TopActionLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-3900100a`]]);var VIBE64_ACTIVE_SESSION_NAV_KEY=Symbol(`vibe64.activeSessionNav`);var _hoisted_1={key:0,class:`vibe64-active-session-nav-item vibe64-active-session-nav-item--heading`,"aria-label":`Active session navigation`};var _hoisted_2=[`title`];var _hoisted_3={class:`vibe64-active-session-nav-item__label`};var _sfc_main={__name:`Vibe64ActiveSessionNavItem`,props:{disabled:{default:false,type:Boolean},icon:{default:``,type:String},guideId:{default:``,type:String},label:{default:``,type:String},role:{default:``,type:String},title:{default:``,type:String},to:{default:``,type:String},toolId:{default:``,type:String}},setup(__props){const props=__props;const injectedSessionNav=inject$1(VIBE64_ACTIVE_SESSION_NAV_KEY,null);const sessionNav=computed(()=>{const value=unref(injectedSessionNav);return value&&typeof value===`object`?value:{}});const tools=computed(()=>Array.isArray(sessionNav.value.tools)?sessionNav.value.tools:[]);const tool=computed(()=>{const toolId=String(props.toolId||``).trim();return tools.value.find(candidate=>String(candidate?.id||``)===toolId)||{}});const navVisible=computed(()=>Boolean(sessionNav.value.visible!==false&&sessionNav.value.label));const headerVisible=computed(()=>Boolean(navVisible.value&&props.role===`heading`));const itemVisible=computed(()=>Boolean(navVisible.value&&props.role!==`heading`&&props.toolId));const itemLabel=computed(()=>String(tool.value.label||props.label||``));const itemIcon=computed(()=>String(tool.value.icon||props.icon||``));const itemTitle=computed(()=>String(tool.value.title||props.title||``));const itemTo=computed(()=>String(tool.value.to||props.to||``).trim());const itemDisabled=computed(()=>Boolean(props.disabled||tool.value.disabled));const itemDisabledReason=computed(()=>String(tool.value.disabledReason||itemTitle.value||``));const statusClass=computed(()=>`vibe64-active-session-nav-item__status--${String(sessionNav.value.status||`unknown`).trim()||`unknown`}`);function selectTool(){if(itemDisabled.value||typeof sessionNav.value.selectTool!==`function`)return;if(itemTo.value)return;sessionNav.value.selectTool(String(props.toolId||``))}return(_ctx,_cache)=>{return headerVisible.value?(openBlock(),createElementBlock(`div`,_hoisted_1,[createVNode(VDivider,{class:`vibe64-active-session-nav-item__divider`}),_cache[0]||(_cache[0]=createBaseVNode(`span`,{class:`vibe64-dashboard-nav-group-label`},`Session`,-1)),createBaseVNode(`div`,{class:`vibe64-active-session-nav-item__heading`,title:sessionNav.value.label},[createBaseVNode(`span`,{class:normalizeClass([`vibe64-active-session-nav-item__status`,statusClass.value])},null,2),createBaseVNode(`span`,_hoisted_3,toDisplayString(sessionNav.value.label),1)],8,_hoisted_2)])):itemVisible.value?(openBlock(),createBlock(VListItem,{key:1,class:`vibe64-active-session-nav-item`,active:tool.value.active,disabled:itemDisabled.value,"prepend-icon":itemIcon.value,title:itemLabel.value,"data-vibe64-guide":props.guideId||void 0,subtitle:itemDisabled.value?itemDisabledReason.value:``,to:itemTo.value||void 0,onClick:selectTool},null,8,[`active`,`disabled`,`prepend-icon`,`title`,`data-vibe64-guide`,`subtitle`,`to`])):createCommentVNode(``,true)}}};var Vibe64ActiveSessionNavItem_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-e4e39c7a`]]);function isVibe64LiveQuery(query={}){return(Array.isArray(query?.queryKey)?query.queryKey:[])[0]===`vibe64`}function invalidateVibe64LiveQueries(queryClient){if(!queryClient||typeof queryClient.invalidateQueries!==`function`)return null;return queryClient.invalidateQueries({predicate:isVibe64LiveQuery,refetchType:`active`})}function attachVibe64RealtimeQueryRecovery({queryClient,realtime}={}){const socket=realtime?.socket;if(!socket||typeof socket.on!==`function`)throw new TypeError(`Vibe64 realtime query recovery requires a realtime socket.`);const recoverQueries=()=>invalidateVibe64LiveQueries(queryClient);socket.on(`connect`,recoverQueries);return()=>socket.off?.(`connect`,recoverQueries)}var detachQueryRecoveryByRealtime=new WeakMap;var MainClientProvider=defineProvider({id:`local.main.client`,requires:{components:`client.components`,queryClient:`client.query`,realtime:`client.realtime`},setup({components,queryClient,realtime}){components.register(`local.main.ui.menu-link-item`,MenuLinkItem_default);components.register(`local.main.ui.surface-aware-menu-link-item`,SurfaceAwareMenuLinkItem_default);components.register(`local.main.ui.tab-link-item`,TabLinkItem_default);components.register(`local.main.ui.top-action-link-item`,TopActionLinkItem_default);components.register(`local.main.vibe64.active-session-nav-item`,Vibe64ActiveSessionNavItem_default);detachQueryRecoveryByRealtime.set(realtime,attachVibe64RealtimeQueryRecovery({queryClient,realtime}))},shutdown({realtime}){detachQueryRecoveryByRealtime.get(realtime)?.();detachQueryRecoveryByRealtime.delete(realtime)}});var client_exports$2=__exportAll({MainClientProvider:()=>MainClientProvider});var client_exports$1=__exportAll({loadVibe64DatabaseWorkspace:()=>loadVibe64DatabaseWorkspace,useVibe64DatabaseTools:()=>useVibe64DatabaseTools});async function loadVibe64DatabaseWorkspace(){return(await __vitePreload(()=>import(`./Vibe64DatabaseWorkspace-CEml9BWn.js`),__vite__mapDeps([155,6,1,7,2,46,25,15,16,26,27,24,28,29,30,31,32,17,18,33,34,20,21,47,8,19,9,10,50,51,52,53,54,55,35,36,37,38,39,40,103,104,11,12,60,61,83,84,13,85,86,87,67,74,70,44,42,43,45,156,41,48,49,56,57,58,59,62,63,14,22,64,65,66,68,69,71,72,73,75,76,77,91,157,158]))).default}var client_exports=__exportAll({loadVibe64ArchitectureView:()=>loadVibe64ArchitectureView,useVibe64SystemGraph:()=>useVibe64SystemGraph});async function loadVibe64ArchitectureView(){return(await __vitePreload(async()=>{const{default:__vite_default__}=await import(`./Vibe64UiStoryboardView-BhKRpL0N.js`);return{default:__vite_default__}},__vite__mapDeps([159,6,1,7,24,25,15,16,26,27,28,29,30,31,32,19,9,10,50,51,35,36,37,38,13,89,42,43,44,45,72,2,49,71,73,90,157,160]))).default}function normalizeComponentId(value){const id=String(value||``).trim();if(!id)throw new TypeError(`Client component id is required.`);return id}function createClientComponentRegistry(){const components=new Map;function register(id,component){const componentId=normalizeComponentId(id);if(component==null)throw new TypeError(`Client component "${componentId}" is required.`);if(components.has(componentId))throw new Error(`Client component "${componentId}" is duplicated.`);components.set(componentId,component);return api}function has(id){return components.has(normalizeComponentId(id))}function get(id){const componentId=normalizeComponentId(id);if(!components.has(componentId))throw new Error(`Client component "${componentId}" is not registered.`);return components.get(componentId)}function ids(){return Object.freeze([...components.keys()].sort())}const api=Object.freeze({register,has,get,ids});return api}function normalizePackageMetadataUiRoutes(value){const routeEntries=Array.isArray(value)?value:[];const normalizedRoutes=[];for(const routeEntry of routeEntries){if(!isRecord$2(routeEntry))continue;try{normalizedRoutes.push(Object.freeze(JSON.parse(JSON.stringify(routeEntry))))}catch{}}return Object.freeze(normalizedRoutes)}function normalizePackageMetadataClientProviders(value){const entries=Array.isArray(value)?value:[];const providers=[];for(const entry of entries){if(!isRecord$2(entry))continue;const exportName=String(entry.export||``).trim();if(!exportName)continue;providers.push(Object.freeze({export:exportName,entrypoint:String(entry.entrypoint||``).trim()}))}return Object.freeze(providers)}function normalizePackageId(value){return String(value||``).trim()}function toRouteSnapshot(route){const metaJskit=isRecord$2(route?.meta?.jskit)?route.meta.jskit:{};return Object.freeze({id:String(route?.id||``).trim(),name:String(route?.name||``).trim(),path:String(route?.path||``).trim(),scope:String(route?.scope||``).trim(),surface:String(route?.surface||``).trim(),metaScope:String(metaJskit.scope||``).trim(),metaSurface:String(metaJskit.surface||``).trim()})}function isRouteComponent(value){if(typeof value===`function`)return true;return Boolean(value&&typeof value===`object`&&!Array.isArray(value))}function normalizeRoute(route,{packageId,index}){if(!isRecord$2(route))throw new TypeError(`Client route #${index} from ${packageId} must be an object.`);const id=String(route.id||``).trim();const path=String(route.path||``).trim();if(!id)throw new Error(`Client route #${index} from ${packageId} requires id.`);if(!path||!path.startsWith(`/`)||path.startsWith(`//`))throw new Error(`Client route "${id}" from ${packageId} must use an absolute path.`);if(!isRouteComponent(route.component))throw new Error(`Client route "${id}" from ${packageId} requires component.`);const scope=String(route.scope||`surface`).trim().toLowerCase();if(scope!==`global`&&scope!==`surface`)throw new Error(`Client route "${id}" from ${packageId} has invalid scope "${scope}".`);const surface=String(route.surface||``).trim().toLowerCase();const baseMeta=isRecord$2(route.meta)?route.meta:{};const baseMetaJskit=isRecord$2(baseMeta.jskit)?baseMeta.jskit:{};return Object.freeze({...route,id,path,scope,...surface?{surface}:{},meta:{...baseMeta,jskit:{...baseMetaJskit,packageId,routeId:id,scope,...surface?{surface}:{}}}})}function normalizeRouteList(routes,{packageId}){return Object.freeze((Array.isArray(routes)?routes:[]).map((route,index)=>normalizeRoute(route,{packageId,index:index+1})))}function toVueRouteRecord(route){const nextMeta=isRecord$2(route.meta)?{...route.meta}:void 0;const routeRecord={path:route.path,component:route.component,...route.name?{name:route.name}:{},...route.props!==void 0?{props:route.props}:{},...route.redirect!==void 0?{redirect:route.redirect}:{},...route.children!==void 0?{children:route.children}:{},...nextMeta?{meta:nextMeta}:{}};return Object.freeze(routeRecord)}function registerClientModuleRoutes({packageId,routes=[],router,surfaceRuntime,surfaceMode,seenRoutePaths,seenRouteNames,logger=null,source=`module`,packageMetadataRouteDeclarations=null}={}){const normalizedPackageId=normalizePackageId(packageId);if(!normalizedPackageId)throw new TypeError(`registerClientModuleRoutes requires packageId.`);if(!router||typeof router.addRoute!==`function`)throw new TypeError(`registerClientModuleRoutes requires router.addRoute().`);if(!surfaceRuntime||typeof surfaceRuntime!==`object`)throw new TypeError(`registerClientModuleRoutes requires surfaceRuntime.`);const normalizedRoutes=normalizeRouteList(routes,{packageId:normalizedPackageId});assertRoutesDeclaredInPackageMetadata({packageId:normalizedPackageId,source,normalizedRoutes,packageMetadataRouteDeclarations});const activeRoutes=filterRoutesBySurface(normalizedRoutes,{surfaceRuntime,surfaceMode});const log=createStructuredLogger(logger);log.debug({packageId:normalizedPackageId,source,surfaceMode:String(surfaceMode||``).trim(),declaredRoutes:normalizedRoutes.map(toRouteSnapshot),activeRoutes:activeRoutes.map(toRouteSnapshot)},`Client route registration analysis.`);const declaredPaths=normalizedRoutes.map(route=>route.path);const activePaths=activeRoutes.map(route=>route.path);let registeredCount=0;for(const route of activeRoutes){const normalizedPath=String(route.path||``).trim();if(seenRoutePaths.has(normalizedPath))throw new Error(`Client route path "${normalizedPath}" is duplicated (package ${normalizedPackageId}).`);const normalizedName=String(route.name||``).trim();if(normalizedName){if(seenRouteNames.has(normalizedName))throw new Error(`Client route name "${normalizedName}" is duplicated (package ${normalizedPackageId}).`);seenRouteNames.add(normalizedName)}seenRoutePaths.add(normalizedPath);router.addRoute(toVueRouteRecord(route));log.debug({packageId:normalizedPackageId,source,route:toRouteSnapshot(route)},`Added client route to router.`);registeredCount+=1}return Object.freeze({packageId:normalizedPackageId,source,declaredCount:normalizedRoutes.length,registeredCount,declaredPaths:Object.freeze(declaredPaths),activePaths:Object.freeze(activePaths)})}function resolvePackageMetadataProviders(moduleNamespace,packageId,packageMetadataClientProviders=[]){const providers=[];const seenProviderIds=new Set;for(const providerDeclaration of packageMetadataClientProviders){const exportName=String(providerDeclaration?.export||``).trim();if(!exportName)continue;const providerValue=moduleNamespace?.[exportName];let provider=null;try{provider=defineProvider(providerValue)}catch(error){throw new TypeError(`Client module ${packageId} packageMetadata provider export "${exportName}" must be a capability provider: ${error.message}`,{cause:error})}const providerId=provider.id;if(seenProviderIds.has(providerId))continue;seenProviderIds.add(providerId);providers.push(provider)}return providers}function resolveModuleProviders(moduleNamespace,packageId,packageMetadataClientProviders=[]){if(!isRecord$2(moduleNamespace))return[];return resolvePackageMetadataProviders(moduleNamespace,packageId,packageMetadataClientProviders)}function buildPackageMetadataRouteDeclarationIndex({packageId,packageMetadataUiRoutes=[]}={}){const normalizedPackageId=normalizePackageId(packageId);const packageMetadataRoutes=normalizePackageMetadataUiRoutes(packageMetadataUiRoutes);const byId=new Map;for(const packageMetadataRoute of packageMetadataRoutes){const routeId=String(packageMetadataRoute.id||``).trim();const routePath=String(packageMetadataRoute.path||``).trim();const routeScope=String(packageMetadataRoute.scope||`surface`).trim().toLowerCase();if(!routeId||!routePath)continue;if(byId.has(routeId)){const existingRoute=byId.get(routeId);if(existingRoute.path!==routePath||existingRoute.scope!==routeScope)throw new Error(`PackageMetadata ui routes for ${normalizedPackageId} define duplicate id "${routeId}" with conflicting declarations.`);continue}byId.set(routeId,Object.freeze({id:routeId,path:routePath,scope:routeScope}))}return Object.freeze({byId})}function assertRoutesDeclaredInPackageMetadata({packageId,source,normalizedRoutes=[],packageMetadataRouteDeclarations=null}={}){if(String(source||``).trim()!==`clientRoutes`)return;const byId=packageMetadataRouteDeclarations?.byId instanceof Map?packageMetadataRouteDeclarations.byId:new Map;const normalizedPackageId=normalizePackageId(packageId);for(const route of normalizedRoutes){const routeId=String(route?.id||``).trim();const routePath=String(route?.path||``).trim();if(String(route?.scope||`surface`).trim().toLowerCase()!==`global`)continue;const declaredRoute=byId.get(routeId);if(!declaredRoute)throw new Error(`Global client route "${routeId}" from ${normalizedPackageId} (${source}) must be declared in metadata.ui.routes (id "${routeId}", path "${routePath}") with scope:"global" and autoRegister:false.`);if(String(declaredRoute.path||``).trim()!==routePath)throw new Error(`Global client route "${routeId}" from ${normalizedPackageId} (${source}) path "${routePath}" does not match packageMetadata metadata.ui.routes path "${declaredRoute.path}".`);if(String(declaredRoute.scope||``).trim().toLowerCase()!==`global`)throw new Error(`Global client route "${routeId}" from ${normalizedPackageId} (${source}) must be declared with scope:"global" in metadata.ui.routes.`)}}function resolvePackageMetadataClientRoutes({packageId,packageMetadataUiRoutes=[],routeComponents={},logger=null}={}){const normalizedPackageId=normalizePackageId(packageId);const packageMetadataRoutes=normalizePackageMetadataUiRoutes(packageMetadataUiRoutes);if(packageMetadataRoutes.length<1)return Object.freeze([]);if(!isRecord$2(routeComponents))throw new TypeError(`Client module ${normalizedPackageId} declares packageMetadata ui routes but does not export a routeComponents map.`);const log=createStructuredLogger(logger);const routes=[];const skippedRoutes=[];for(const packageMetadataRoute of packageMetadataRoutes){const routeId=String(packageMetadataRoute.id||``).trim();const routePath=String(packageMetadataRoute.path||``).trim();if(!(packageMetadataRoute.autoRegister!==false)){skippedRoutes.push(Object.freeze({id:routeId,path:routePath,reason:`autoRegister=false`}));continue}if(!routeId||!routePath)throw new Error(`PackageMetadata ui route from ${normalizedPackageId} requires id and path when autoRegister is enabled.`);const componentKey=String(packageMetadataRoute.componentKey||``).trim();if(!componentKey)throw new Error(`PackageMetadata ui route "${routeId}" from ${normalizedPackageId} requires componentKey when autoRegister is enabled.`);const routeComponent=routeComponents[componentKey];if(!isRouteComponent(routeComponent))throw new Error(`PackageMetadata ui route "${routeId}" from ${normalizedPackageId} references unknown routeComponents key "${componentKey}".`);const scope=String(packageMetadataRoute.scope||`surface`).trim().toLowerCase();const surface=String(packageMetadataRoute.surface||``).trim().toLowerCase();const guard=isRecord$2(packageMetadataRoute.guard)?{...packageMetadataRoute.guard}:{};const baseMeta=isRecord$2(packageMetadataRoute.meta)?{...packageMetadataRoute.meta}:{};const baseMetaJskit=isRecord$2(baseMeta.jskit)?{...baseMeta.jskit}:{};routes.push(Object.freeze({id:routeId,path:routePath,scope,...surface?{surface}:{},...String(packageMetadataRoute.name||``).trim()?{name:String(packageMetadataRoute.name||``).trim()}:{},component:routeComponent,meta:{...baseMeta,...Object.keys(guard).length>0?{guard}:{},jskit:{...baseMetaJskit,packageId:normalizedPackageId,routeId,scope,componentKey,source:`packageMetadata.ui.routes`,...surface?{surface}:{}}}}))}log.debug({packageId:normalizedPackageId,packageMetadataRouteCount:packageMetadataRoutes.length,autoRegisterRouteCount:routes.length,skippedRoutes},`Processed packageMetadata ui routes.`);return Object.freeze(routes)}function normalizeClientModuleEntries(clientModules){if(!Array.isArray(clientModules))return[];return clientModules.map(entry=>{const packageId=normalizePackageId(entry?.packageId);const moduleNamespace=isRecord$2(entry?.module)?entry.module:null;if(!packageId||!moduleNamespace)return null;return Object.freeze({packageId,module:moduleNamespace,packageMetadataUiRoutes:normalizePackageMetadataUiRoutes(entry?.packageMetadataUiRoutes),packageMetadataClientProviders:normalizePackageMetadataClientProviders(entry?.packageMetadataClientProviders)})}).filter(Boolean).sort((left,right)=>left.packageId.localeCompare(right.packageId))}function createClientRuntime({profile=`client`,providers=[],app,pinia=null,queryClient=null,router,env,logger,surfaceRuntime,surfaceMode}={}){const components=createClientComponentRegistry();const runtime=createCapabilityRuntime({profile,providers,inputs:{"client.vue":app||null,"client.router":router||null,"client.pinia":pinia,"client.query":queryClient,"client.env":Object.freeze({...isRecord$2(env)?env:{}}),"client.surface":surfaceRuntime||null,"client.surface-mode":String(surfaceMode||``).trim(),"client.logger":logger,"client.components":components}});return Object.freeze({runtime,components})}async function bootClientModules({clientModules=[],app,pinia=null,queryClient=null,router,surfaceRuntime,surfaceMode,env,logger=console}={}){if(!router||typeof router.addRoute!==`function`)throw new TypeError(`bootClientModules requires router.addRoute().`);if(!surfaceRuntime||typeof surfaceRuntime.normalizeSurfaceMode!==`function`)throw new TypeError(`bootClientModules requires surfaceRuntime.normalizeSurfaceMode().`);const log=createStructuredLogger(logger);const moduleEntries=normalizeClientModuleEntries(clientModules);const providers=[];const seenProviderIds=new Set;log.debug({surfaceMode:String(surfaceMode||``).trim(),normalizedSurfaceMode:String(surfaceRuntime.normalizeSurfaceMode(surfaceMode)||``).trim(),moduleCount:moduleEntries.length,modules:moduleEntries.map(entry=>entry.packageId)},`Starting JSKIT client module bootstrap.`);for(const entry of moduleEntries){const moduleProviders=resolveModuleProviders(entry.module,entry.packageId,entry.packageMetadataClientProviders);log.debug({packageId:entry.packageId,providerExports:moduleProviders.map(provider=>provider.id),hasClientRoutes:Array.isArray(entry.module.clientRoutes)&&entry.module.clientRoutes.length>0},`Discovered client module capabilities.`);for(const provider of moduleProviders){const providerId=provider.id;if(seenProviderIds.has(providerId))throw new Error(`Client provider id "${providerId}" is duplicated.`);seenProviderIds.add(providerId);providers.push(provider)}}const clientRuntime=createClientRuntime({profile:String(surfaceRuntime.normalizeSurfaceMode(surfaceMode)||`client`),providers,app,pinia,queryClient,router,env,logger:log,surfaceRuntime,surfaceMode});await clientRuntime.runtime.start();const seenRoutePaths=new Set;const seenRouteNames=new Set;const routeResults=[];const registerRoutesForEntry=(routeList,packageId,source=`module`,packageMetadataRouteDeclarations=null)=>{if(!routeList||routeList.length===0)return null;const result=registerClientModuleRoutes({packageId,routes:routeList,router,surfaceRuntime,surfaceMode,seenRoutePaths,seenRouteNames,logger:log,source,packageMetadataRouteDeclarations});log.debug({packageId,source,declaredPaths:result.declaredPaths,activePaths:result.activePaths,registeredCount:result.registeredCount},`Registered client module routes.`);log.debug({packageId,source,routerRoutes:summarizeRouterRoutes(router)},`Router route table after client route registration.`);routeResults.push(result);return result};for(const entry of moduleEntries){const packageMetadataRouteDeclarations=buildPackageMetadataRouteDeclarationIndex({packageId:entry.packageId,packageMetadataUiRoutes:entry.packageMetadataUiRoutes});registerRoutesForEntry(resolvePackageMetadataClientRoutes({packageId:entry.packageId,packageMetadataUiRoutes:entry.packageMetadataUiRoutes,routeComponents:entry.module.routeComponents,logger:log}),entry.packageId,`packageMetadata.ui.routes`,packageMetadataRouteDeclarations);registerRoutesForEntry(Array.isArray(entry.module.clientRoutes)?entry.module.clientRoutes:[],entry.packageId,`clientRoutes`,packageMetadataRouteDeclarations)}const registeredRouteCount=routeResults.reduce((sum,result)=>sum+result.registeredCount,0);if(moduleEntries.length>0){log.debug({modules:moduleEntries.map(entry=>entry.packageId),providerCount:providers.length,routeCount:registeredRouteCount},`Booted JSKIT client modules.`);log.debug({routerRoutes:summarizeRouterRoutes(router),currentPath:typeof window!==`undefined`?String(window.location?.pathname||``):``},`JSKIT client bootstrap final route table.`)}return Object.freeze({runtime:clientRuntime.runtime,components:clientRuntime.components,modules:Object.freeze(moduleEntries.map(entry=>entry.packageId)),providerCount:providers.length,routeResults:Object.freeze(routeResults),routeCount:registeredRouteCount})}var installedClientModules=Object.freeze([{packageId:`@jskit-ai/assistant-core`,module:client_exports$9,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@jskit-ai/assistant-runtime`,module:client_exports$8,packageMetadataUiRoutes:[],packageMetadataClientProviders:[{"export":`AssistantClientProvider`,"entrypoint":`src/client/providers/AssistantClientProvider.js`}]},{packageId:`@jskit-ai/assistant-voice`,module:client_exports$11,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@jskit-ai/connectors-web`,module:client_exports$6,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@jskit-ai/http-runtime`,module:client_exports$12,packageMetadataUiRoutes:[],packageMetadataClientProviders:[{"export":`HttpValidatorsClientProvider`,"entrypoint":`src/client/providers/HttpValidatorsClientProvider.js`},{"export":`HttpClientRuntimeClientProvider`,"entrypoint":`src/client/providers/HttpClientRuntimeClientProvider.js`}]},{packageId:`@jskit-ai/http-web`,module:client_exports$5,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@jskit-ai/realtime`,module:RealtimeClientProvider_exports,packageMetadataUiRoutes:[],packageMetadataClientProviders:[{"export":`RealtimeClientProvider`,"entrypoint":`src/client/RealtimeClientProvider.js`}]},{packageId:`@jskit-ai/shell-web`,module:client_exports$4,packageMetadataUiRoutes:[],packageMetadataClientProviders:[{"export":`ShellWebClientProvider`,"entrypoint":`src/client/providers/ShellWebClientProvider.js`}]},{packageId:`@jskit-ai/uploads-runtime`,module:client_exports$3,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@local/main`,module:client_exports$2,packageMetadataUiRoutes:[],packageMetadataClientProviders:[{"export":`MainClientProvider`,"entrypoint":`src/client/providers/MainClientProvider.js`}]},{packageId:`@local/vibe64-accounts`,module:client_exports$13,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@local/vibe64-colleague`,module:client_exports$7,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@local/vibe64-database-tools`,module:client_exports$1,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@local/vibe64-system-graph`,module:client_exports,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@local/vibe64-voice`,module:client_exports$10,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]}]);async function bootInstalledClientModules(context={}){return bootClientModules({...context,clientModules:installedClientModules})}var surfaceAccessPolicies={};surfaceAccessPolicies.public={};var config={};config.tenancyMode=`none`;config.realtimeClient={options:{transports:[`websocket`]}};config.surfaceModeAll=`all`;config.surfaceDefaultId=`app`;config.webRootAllowed=`yes`;config.surfaceAccessPolicies=surfaceAccessPolicies;config.mobile={enabled:false,strategy:``,appId:``,appName:``,assetMode:`bundled`,devServerUrl:``,apiBaseUrl:``,auth:{callbackPath:`/auth/login`,customScheme:``,appLinkDomains:[]},android:{packageName:``,minSdk:26,targetSdk:35,versionCode:1,versionName:`1.0.0`}};config.surfaceDefinitions={};config.surfaceDefinitions.app={id:`app`,label:`Sessions`,pagesRoot:`app`,enabled:true,requiresAuth:false,requiresWorkspace:false,accessPolicyId:`public`,origin:``};config.assistantSurfaces={app:{settingsSurfaceId:`app`,configScope:`global`}};var BROWSER_LIFECYCLE_WEBSOCKET_PATH=`/api/studio/browser-lifecycle/ws`;var BROWSER_LIFECYCLE_DISCONNECTED_EVENT=`vibe64:browser-lifecycle-disconnected`;function noopLifecycleConnection(){return{close(){}}}function createBrowserLifecycleDisconnectedEvent(browserWindow,detail={}){const CustomEventCtor=browserWindow?.CustomEvent||globalThis.CustomEvent;if(typeof CustomEventCtor===`function`)return new CustomEventCtor(BROWSER_LIFECYCLE_DISCONNECTED_EVENT,{detail});const EventCtor=browserWindow?.Event||globalThis.Event;if(typeof EventCtor===`function`){const event=new EventCtor(BROWSER_LIFECYCLE_DISCONNECTED_EVENT);event.detail=detail;return event}return{detail,type:BROWSER_LIFECYCLE_DISCONNECTED_EVENT}}function connectBrowserLifecycleSocket({browserWindow=typeof window!==`undefined`?window:null,WebSocketCtor=typeof WebSocket!==`undefined`?WebSocket:null}={}){if(!browserWindow||typeof WebSocketCtor!==`function`)return noopLifecycleConnection();let socket=null;let connected=false;let closeBrowserOnDisconnect=false;let pageUnloading=false;let stopped=false;const markPageUnloading=()=>{pageUnloading=true};const removeUnloadListeners=()=>{browserWindow.removeEventListener?.(`beforeunload`,markPageUnloading);browserWindow.removeEventListener?.(`pagehide`,markPageUnloading)};const closeWindowIfServerDisconnected=()=>{removeUnloadListeners();if(connected&&!stopped&&!pageUnloading)browserWindow.dispatchEvent?.(createBrowserLifecycleDisconnectedEvent(browserWindow,{closeBrowserOnDisconnect}));if(connected&&closeBrowserOnDisconnect&&!stopped&&!pageUnloading)browserWindow.close?.()};const receiveLifecycleState=event=>{try{const message=JSON.parse(String(event?.data||``));if(message?.type===`browser-lifecycle-state`)closeBrowserOnDisconnect=message.closeBrowserOnDisconnect===true}catch{}};browserWindow.addEventListener?.(`beforeunload`,markPageUnloading);browserWindow.addEventListener?.(`pagehide`,markPageUnloading);try{socket=new WebSocketCtor(resolveWebSocketUrl$1(BROWSER_LIFECYCLE_WEBSOCKET_PATH,browserWindow))}catch{removeUnloadListeners();return noopLifecycleConnection()}socket.addEventListener?.(`open`,()=>{connected=true});socket.addEventListener?.(`message`,receiveLifecycleState);socket.addEventListener?.(`close`,closeWindowIfServerDisconnected);return{close(){stopped=true;removeUnloadListeners();socket?.close?.()}}}function bootBrowserLifecycle(options={}){return connectBrowserLifecycleSocket(options)}var APPEARANCE_STORAGE_KEY=`vibe64.appearance`;var APPEARANCE_CHOICES=Object.freeze([`light`,`dark`,`system`]);function readAppearance(){const value=readLocalStorageJson(APPEARANCE_STORAGE_KEY,`light`);return APPEARANCE_CHOICES.includes(value)?value:`light`}function writeAppearance(value){if(APPEARANCE_CHOICES.includes(value))writeLocalStorageJson(APPEARANCE_STORAGE_KEY,value)}configureHttpWebClient({csrf:{enabled:false},resolveRequestUrl(url){return resolveStudioRequestUrl(url)}});bootBrowserLifecycle();var surfaceRuntime=createSurfaceRuntime({allMode:config.surfaceModeAll,surfaces:config.surfaceDefinitions,defaultSurfaceId:config.surfaceDefaultId});var surfaceMode=surfaceRuntime.normalizeSurfaceMode(void 0);var{router,fallbackRoute}=createSurfaceShellRouter({createRouter,history:createWebHistory(),routes,surfaceRuntime,surfaceMode,notFoundComponent:_sfc_main$22,guard:{surfaceDefinitions:config.surfaceDefinitions,defaultSurfaceId:config.surfaceDefaultId,webRootAllowed:config.webRootAllowed}});var vuetify=createVuetify({theme:{defaultTheme:readAppearance(),themes:{light:{colors:{"surface-variant":`#EEF3FA`,"on-surface-variant":`#1F2937`,warning:`#725C0C`,"on-warning":`#FFFFFF`,"warning-container":`#F5F0E3`,"on-warning-container":`#252117`}},dark:{colors:{background:`#111318`,surface:`#1A1C21`,"surface-bright":`#37393F`,"surface-light":`#2A2D33`,"surface-variant":`#243342`,"on-surface-variant":`#EDF4FC`,warning:`#DFC477`,"on-warning":`#3D2F00`,"warning-container":`#353126`,"on-warning-container":`#EAE1CF`}}}},defaults:{VCard:{rounded:`lg`},VAlert:{rounded:`lg`}},icons:{defaultSet:`mdi`,aliases,sets:{mdi}}});var pinia=createPinia();var queryClient=new QueryClient({defaultOptions:{queries:{refetchOnWindowFocus:false,refetchOnReconnect:true,retry:shouldRetryTransientQueryFailure,retryDelay:transientQueryRetryDelay}}});bootstrapClientShellApp({createApp,rootComponent:_sfc_main$23,appConfig:config,appPlugins:[pinia,[VueQueryPlugin,{queryClient}],vuetify],pinia,queryClient,router,bootClientModules:bootInstalledClientModules,surfaceRuntime,surfaceMode,env:{"BASE_URL":`/`,"DEV":false,"MODE":`production`,"PROD":true,"SSR":false},fallbackRoute}).catch(error=>{console.error(`Failed to bootstrap client app.`,error);const status=document.getElementById(`startup-status`);if(status)status.textContent=`Vibe64 could not open. Reload the page to try again.`});export{vibe64SessionPath as $,VBottomSheet as $t,VIBE64_SOURCE_EDITOR_SYNC_READY_EVENT as A,normalizeConversationLogPagination as At,vibe64OutputResultPath as B,VoiceConversationSettings_default as Bt,VIBE64_API_SUFFIX as C,createAssistantApi as Ct,VIBE64_SESSION_CHANGED_EVENT as D,conversationLogReadQuery as Dt,VIBE64_SESSIONS_API_SUFFIX as E,normalizeConversationTurn as Et,vibe64AgentTerminalControlTextPath as F,mainConversationId as Ft,vibe64PreviewIdentityPath as G,useAssistantQuestions as Gt,vibe64OutputRunStopPath as H,useVoiceLauncher as Ht,vibe64AgentTerminalPath as I,mainConversationTarget as It,vibe64RepositoryVersionFilesPath as J,VSnackbar as Jt,vibe64RepositoryHistoryPath as K,VTabs as Kt,vibe64ConversationLogPath as L,temporaryConversationId as Lt,selectedSessionStorageKey as M,mergeConversationStream as Mt,vibe64AgentAttachmentFilePath as N,VIBE64_TRAINING_LEARNER_CHANGED_EVENT as Nt,VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT as O,mergeConversationLogPages as Ot,vibe64AgentAttachmentPath as P,createProjectVoiceBinding as Pt,vibe64SessionEventMatchesScope as Q,VCombobox as Qt,vibe64ConversationLogQueryKey as R,useVibe64Voice as Rt,useVibe64AssistantCatalog as S,useAssistantConversationFactory as St,VIBE64_CURRENT_SESSION_API_SUFFIX as T,normalizeConversationMessage as Tt,vibe64OutputsPath as U,VoiceAvatar_default as Ut,vibe64OutputRunPath as V,VoiceConversationControls_default as Vt,vibe64OutputsQueryKey as W,unmatchedOptimisticMessages as Wt,vibe64SessionChangesPath as X,VContainer as Xt,vibe64SessionChangeDiffPath as Y,VMain as Yt,vibe64SessionCheckUpdatesPath as Z,VTable as Zt,useVibe64LearningCourses as _,vibe64SourceEditorStarsPath as _t,VIBE64_ACTIVE_SESSION_NAV_KEY as a,revealCurrentStep as an,vibe64SourceEditorChangesStreamPath as at,onVibe64AccountConnectionsDialogRequested as b,vibe64TemporaryConversationsPath as bt,IntegrationConfigurationFields_default as c,RouterView as cn,vibe64SourceEditorExplanationFollowupsStreamPath as ct,secretReference as d,vibe64SourceEditorExplanationsCleanupPath as dt,VAppBar as en,vibe64SessionPreviewStatePath as et,validateIntegrationConfiguration as f,vibe64SourceEditorExplanationsStreamPath as ft,courseProgress as g,vibe64SourceEditorSearchPath as gt,F as h,vibe64SourceEditorResolvePathPath as ht,client_exports$1 as i,VIBE64_LEARNING_ROUTES as in,vibe64SessionsQueryKey as it,agentTurnControlPayloadFromContext as j,latestAssistantMessageAwaitingUserReply as jt,VIBE64_SOURCE_EDITOR_SYNC_ERROR_EVENT as k,normalizeConversationLogPage as kt,getProviderClientAuthenticationMethods as l,vibe64SourceEditorExplanationPath as lt,GithubMarkdown_default as m,vibe64SourceEditorFilesPath as mt,writeAppearance as n,VIBE64_LEARNING_MODE_NOTE as nn,vibe64SessionPromptHintsPath as nt,_sfc_main$12 as o,isPracticeProjectSlug as on,vibe64SourceEditorCreateFilePath as ot,Vibe64LearningMarkdown_default as p,vibe64SourceEditorFilePath as pt,vibe64RepositoryVersionDiffPath as q,VTab as qt,client_exports as r,VIBE64_LEARNING_MODE_PROJECT_CODE as rn,vibe64SessionQueryKey as rt,useShellLayoutState as s,projectDisplayName as sn,vibe64SourceEditorDownloadPath as st,readAppearance as t,usePageActivity as tn,vibe64SessionPromptHintsCancelPath as tt,getProviderScopes as u,vibe64SourceEditorExplanationStopPath as ut,Vibe64SessionAssistantMenu_default as v,vibe64SourceEditorTreePath as vt,VIBE64_ARCHIVED_SESSIONS_API_SUFFIX as w,applyConversationLogPatch as wt,requestVibe64AccountConnectionsDialog as x,useAssistantConversation as xt,readRefOrGetterValue as y,vibe64TemporaryConversationPath as yt,vibe64GlobalCodexTerminalPath as z,VoiceConversationHost_default as zt};
|