vibe64 0.1.39 → 0.1.41
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/run.js +1955 -1855
- package/bin/server.js +136 -112
- package/bin/upgrade-state.js +5514 -5343
- package/dist/assets/GithubBrowserTabs-YvIe2BdE.js +1 -0
- package/dist/assets/LocalDatabaseServer-BWAvRlUl.css +1 -0
- package/dist/assets/LocalDatabaseServer-CVsGChHh.js +2 -0
- package/dist/assets/StudioErrorNotice-C_jbvp9V.js +1 -0
- package/dist/assets/VAlert-gwuhYlYb.js +1 -0
- package/dist/assets/VAutocomplete-D7Vk5wq_.js +1 -0
- package/dist/assets/VAvatar-DvRBcmqv.js +1 -0
- package/dist/assets/VBtn-BhVEwXLX.js +1 -0
- package/dist/assets/VCard-C3Hx769y.js +1 -0
- package/dist/assets/VCheckbox-DyCGSN0H.js +1 -0
- package/dist/assets/VCheckboxBtn-DCyuVH7W.css +1 -0
- package/dist/assets/VCheckboxBtn-DYcQU2Pn.js +1 -0
- package/dist/assets/VChip-VVdtjfq-.js +1 -0
- package/dist/assets/VDialog-CQDhjRiV.js +1 -0
- package/dist/assets/VDivider-Dq25WsKu.js +1 -0
- package/dist/assets/VExpansionPanels-C1y-myl5.js +1 -0
- package/dist/assets/VMenu-CDcBLYWR.js +1 -0
- package/dist/assets/VOverlay-Cp4rFk6g.js +1 -0
- package/dist/assets/VRadioGroup-CAjNZwF7.js +1 -0
- package/dist/assets/VRow-BskP28jR.js +1 -0
- package/dist/assets/VSelect-D3oLvCcB.js +2 -0
- package/dist/assets/VSheet-DxYEFfnM.js +1 -0
- package/dist/assets/VSkeletonLoader-Cync3lZZ.js +1 -0
- package/dist/assets/VSpacer-CgWOWvBh.js +1 -0
- package/dist/assets/VSwitch-BxGuGypi.js +1 -0
- package/dist/assets/VTextField-C0b_0cSa.js +1 -0
- package/dist/assets/VTextField-F6unyhrS.css +1 -0
- package/dist/assets/VTextarea-B7sZd1JY.js +1 -0
- package/dist/assets/{Vibe64AsyncModuleState-Do9EqX3S.js → Vibe64AsyncModuleState-syuPcpGx.js} +1 -1
- package/dist/assets/{Vibe64AuthSettingsButton-M44SSmZ9.css → Vibe64AuthSettingsButton-D2lltUhi.css} +1 -1
- package/dist/assets/Vibe64AuthSettingsButton-DLdfT68V.js +5 -0
- package/dist/assets/Vibe64CopyCommand-CYiZcy0d.js +1 -0
- package/dist/assets/Vibe64CopyCommand-ClbQLYZi.css +1 -0
- package/dist/assets/{Vibe64DashboardBackButton-BH_8j_VR.js → Vibe64DashboardBackButton-Go_MJuIK.js} +1 -1
- package/dist/assets/{Vibe64DashboardPageHeader-BXQR00HK.js → Vibe64DashboardPageHeader-BMrdRph6.js} +1 -1
- package/dist/assets/Vibe64DashboardPageHeader-CdlzsyKQ.css +1 -0
- package/dist/assets/Vibe64DashboardShell-DMPz6fIx.js +1 -0
- package/dist/assets/{Vibe64DatabaseWorkspace-CEml9BWn.js → Vibe64DatabaseWorkspace-BCEIOlSg.js} +3 -3
- package/dist/assets/{Vibe64DatabaseWorkspace-DPDMxhAW.css → Vibe64DatabaseWorkspace-DePBDUMy.css} +1 -1
- package/dist/assets/{Vibe64OutputControls-Co5YzwcK.css → Vibe64OutputControls-CeBzZPUT.css} +1 -1
- package/dist/assets/Vibe64OutputControls-DMoqL0VD.js +8 -0
- package/dist/assets/{Vibe64RepositoryWorkspace-obZFXkoG.js → Vibe64RepositoryWorkspace-BdwRwbxp.js} +2 -2
- package/dist/assets/{Vibe64RepositoryWorkspace-Agyt4O-V.css → Vibe64RepositoryWorkspace-Bw9W691N.css} +1 -1
- package/dist/assets/{Vibe64SessionFiles-CQzs6fee.js → Vibe64SessionFiles-ChJWUOqm.js} +4 -4
- package/dist/assets/Vibe64SessionFiles-DsPb8hOe.css +1 -0
- package/dist/assets/{Vibe64TemporaryAiFixAction-BiuIE9mC.js → Vibe64TemporaryAiFixAction-CIePbdW8.js} +1 -1
- package/dist/assets/{Vibe64UiStoryboardView-BhKRpL0N.js → Vibe64UiStoryboardView-Bp9STItF.js} +1 -1
- package/dist/assets/{Vibe64UnavailableSessions-Ca5nC7KH.js → Vibe64UnavailableSessions-JBgHzM-j.js} +1 -1
- package/dist/assets/{_sessionId_-CKkGH3Rx.js → _sessionId_-Bw0KfJeR.js} +1 -1
- package/dist/assets/{_sessionTool_-1V-z6Pbp.js → _sessionTool_-BV1AwpUx.js} +1 -1
- package/dist/assets/_slug_-CAmuBm-M.css +1 -0
- package/dist/assets/_slug_-q9prK_gX.js +25 -0
- package/dist/assets/{access-WlhPvPgy.js → access-C05Nkq6r.js} +1 -1
- package/dist/assets/app-D1CGY9Xm.js +1 -0
- package/dist/assets/assistantRouting-DeE8jvtE.js +3 -0
- package/dist/assets/{changes-CHJjrZAc.js → changes-D17XpgGz.js} +1 -1
- package/dist/assets/client-BxGiylrJ.js +2 -0
- package/dist/assets/client-C8jwAMY9.css +1 -0
- package/dist/assets/{conversation-B90ERX9h.js → conversation-DZW4-Wck.js} +2 -2
- package/dist/assets/{conversation-vxJGwmtW.css → conversation-TK6EmDk4.css} +1 -1
- package/dist/assets/{createSimpleFunctional-CZTGuNuR.js → createSimpleFunctional-zlXZooQW.js} +1 -1
- package/dist/assets/{dashboard-CuutW8iv.js → dashboard-BXXgeQ0Q.js} +1 -1
- package/dist/assets/definitions-SNvFDEFS.js +1 -0
- package/dist/assets/dialog-transition-D2vqGksQ.js +1 -0
- package/dist/assets/env-B5V1EC4M.css +1 -0
- package/dist/assets/env-sXAQqKWk.js +1 -0
- package/dist/assets/health-92hh8xXh.css +1 -0
- package/dist/assets/health-Cr34pf2p.js +1 -0
- package/dist/assets/{history-1_NU8azF.js → history-N1iRZaab.js} +1 -1
- package/dist/assets/incoming-Bdqo8z25.css +1 -0
- package/dist/assets/incoming-CNwZa_yD.js +2 -0
- package/dist/assets/{index-irlMYzLh.css → index-B17d4wpZ.css} +1 -1
- package/dist/assets/index-Mxalhei8.js +138 -0
- package/dist/assets/{integrations-BMzWQQpa.js → integrations-BmwFvHgZ.js} +10 -10
- package/dist/assets/integrations-Co8WvCiD.css +1 -0
- package/dist/assets/issues-BbiG7dCV.js +1 -0
- package/dist/assets/layout-B2Ap07aa.js +1 -0
- package/dist/assets/{lazy-NHSwD9FS.js → lazy-BjyT2XvW.js} +1 -1
- package/dist/assets/{learning-Bdi3XRS7.js → learning-CUCuuoHM.js} +1 -1
- package/dist/assets/mdi-Bt90Ns76.js +1 -0
- package/dist/assets/placement-CQy46H3H.js +1 -0
- package/dist/assets/publish-4r_4K5IY.js +3 -0
- package/dist/assets/publish-BFTsAMCF.css +1 -0
- package/dist/assets/pull-requests-BjwokcU0.css +1 -0
- package/dist/assets/pull-requests-DY9jg3cE.js +1 -0
- package/dist/assets/{repository-BL_2bgzC.js → repository-DhXdoMP6.js} +1 -1
- package/dist/assets/ripple-EFNA8EBu.js +11 -0
- package/dist/assets/rolldown-runtime-DBalRfVu.js +1 -0
- package/dist/assets/{session-BdhKrcX4.js → session-BGpiZThC.js} +1 -1
- package/dist/assets/{settings-1rpuL7eR.js → settings-Cj4u-76p.js} +1 -1
- package/dist/assets/settings-D8x4KUqV.css +1 -0
- package/dist/assets/shared-DZETtWRH.js +2 -0
- package/dist/assets/studioGateApi-BXHVBVEc.js +1 -0
- package/dist/assets/studioUrls-DpSS-0z1.js +1 -0
- package/dist/assets/useArchivedVibe64Sessions-BXNg8oES.js +1 -0
- package/dist/assets/useCommand-nWFczmJy.js +1 -0
- package/dist/assets/useEndpointResource-Ds8EDBZ2.js +1 -0
- package/dist/assets/useRealtimeEvent-DrOiU8lJ.js +1 -0
- package/dist/assets/{useUiFeedback-BPBF_0bp.js → useUiFeedback-CMwE4MLs.js} +1 -1
- package/dist/assets/useVibe64ConversationLog-C1xjhFtS.js +1 -0
- package/dist/assets/{useVibe64DatabaseTools-4o6S8eXq.js → useVibe64DatabaseTools-H6H-YJQX.js} +1 -1
- package/dist/assets/useVibe64ProjectScope-B5ogg6jd.js +1 -0
- package/dist/assets/useVibe64SessionData-CnDOFFHb.js +1 -0
- package/dist/assets/{useVibe64SessionSelection-BzL1y_Vq.js → useVibe64SessionSelection-J87nJ9p5.js} +1 -1
- package/dist/assets/{useVibe64SystemGraph-B4RmsC9Y.js → useVibe64SystemGraph-DbSfrYF8.js} +1 -1
- package/dist/assets/{useVibe64Terminal-Cg3idMcy.js → useVibe64Terminal-I7Sf6xMW.js} +1 -1
- package/dist/assets/vibe64ProjectScope.local-B06ABkhI.js +1 -0
- package/dist/assets/vibe64SavedEnvValues-B_QE9aAj.js +1 -0
- package/dist/assets/vibe64SessionFocus-CA-sk8Ri.css +1 -0
- package/dist/assets/vibe64SessionFocus-DlN8NwcE.js +1 -0
- package/dist/assets/{vibe64SessionInfo-BuBUdL-e.js → vibe64SessionInfo-B0uItVOK.js} +1 -1
- package/dist/assets/{vibe64SessionToolDefinitions-BJaJH5LR.js → vibe64SessionToolDefinitions-Dsn8WYmO.js} +1 -1
- package/dist/index.html +56 -46
- package/docs/colleague-usage/account-profile-and-appearance.md +1 -1
- package/docs/colleague-usage/{ai-accounts-and-routing.md → ai-accounts.md} +41 -114
- package/docs/colleague-usage/ai-model-setups.md +159 -0
- package/docs/colleague-usage/ai-onboarding.md +97 -22
- package/docs/colleague-usage/ai-personal-use.md +41 -0
- package/docs/colleague-usage/auto-workflow.md +8 -3
- package/docs/colleague-usage/codex-context-recovery.md +2 -1
- package/docs/colleague-usage/coding-agent-goals.md +7 -4
- package/docs/colleague-usage/coding-agents.md +8 -5
- package/docs/colleague-usage/colleague-watches.md +15 -4
- package/docs/colleague-usage/colleague.md +21 -5
- package/docs/colleague-usage/connected-contributions.md +13 -13
- package/docs/colleague-usage/connected-projects.md +2 -2
- package/docs/colleague-usage/conversation-context.md +1 -1
- package/docs/colleague-usage/dashboard-navigation.md +5 -3
- package/docs/colleague-usage/development-env.md +21 -4
- package/docs/colleague-usage/file-interfaces.md +1 -1
- package/docs/colleague-usage/github-work.md +8 -8
- package/docs/colleague-usage/health-checks.md +52 -18
- package/docs/colleague-usage/incoming-changes.md +3 -3
- package/docs/colleague-usage/integrations.md +5 -3
- package/docs/colleague-usage/learning-course-catalogue.md +3 -3
- package/docs/colleague-usage/learning-environment.md +78 -56
- package/docs/colleague-usage/learning-mode-ui.md +31 -19
- package/docs/colleague-usage/learning-practice-projects.md +15 -4
- package/docs/colleague-usage/learning-teacher-guide.md +10 -4
- package/docs/colleague-usage/learning-with-colleague.md +12 -8
- package/docs/colleague-usage/lesson-authoring.md +13 -13
- package/docs/colleague-usage/lesson-step-bar.md +47 -33
- package/docs/colleague-usage/main-chat-approvals.md +150 -0
- package/docs/colleague-usage/preview-browser-checks.md +5 -1
- package/docs/colleague-usage/preview-starting-application.md +10 -1
- package/docs/colleague-usage/project-language-tools.md +16 -2
- package/docs/colleague-usage/project-settings.md +1 -1
- package/docs/colleague-usage/project-setup.md +17 -7
- package/docs/colleague-usage/publishing.md +187 -0
- package/docs/colleague-usage/running-vibe64-on-your-computer.md +54 -6
- package/docs/colleague-usage/sessions.md +18 -10
- package/docs/colleague-usage/set-up-linux.md +254 -0
- package/docs/colleague-usage/set-up-macos.md +199 -0
- package/docs/colleague-usage/set-up-windows.md +76 -0
- package/docs/colleague-usage/starter-apps.md +23 -6
- package/docs/colleague-usage/teaching-content.md +2 -2
- package/docs/colleague-usage/team-ai-access.md +108 -0
- package/docs/colleague-usage/temporary-chats.md +9 -7
- package/docs/colleague-usage/workspace-preparation.md +50 -1
- package/docs/templates/learn-topic/README.md +3 -3
- package/docs/templates/learn-topic/training/lessons/TOPIC-01/lesson.json +2 -1
- package/docs/training-content.md +37 -15
- package/node_modules/@jskit-ai/assistant-core/package.json +1 -1
- package/node_modules/@jskit-ai/assistant-runtime/package.json +1 -1
- package/node_modules/@jskit-ai/assistant-voice/package.json +1 -1
- package/node_modules/@jskit-ai/connector-google-calendar/package.json +1 -1
- package/node_modules/@jskit-ai/connectors-catalog/package.json +1 -1
- package/node_modules/@jskit-ai/connectors-catalog/patterns/oauth-connection/PATTERN.md +25 -0
- package/node_modules/@jskit-ai/connectors-core/package.json +1 -1
- package/node_modules/@jskit-ai/http-runtime/package.json +1 -1
- package/node_modules/@jskit-ai/kernel/package.json +1 -1
- package/node_modules/@jskit-ai/realtime/package.json +1 -1
- package/node_modules/@jskit-ai/resource-core/package.json +1 -1
- package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
- package/node_modules/@jskit-ai/uploads-runtime/package.json +1 -1
- package/node_modules/@local/vibe64-accounts/package.json +2 -1
- package/node_modules/@local/vibe64-core/package.json +4 -1
- package/node_modules/@local/vibe64-execution/src/host/execHelper.js +82 -81
- package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +83 -82
- package/node_modules/@local/vibe64-genesis/package.json +1 -0
- package/node_modules/@local/vibe64-genesis/src/server/agentSpecs.js +118 -68
- package/node_modules/@local/vibe64-genesis/src/server/index.js +536 -449
- package/node_modules/@local/vibe64-genesis/src/server/packaging.js +105 -0
- package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +144 -145
- package/node_modules/@local/vibe64-packaging/package.json +26 -0
- package/node_modules/@local/vibe64-packaging/src/server/packers/capacitor/ShellIcons.java +112 -0
- package/node_modules/@local/vibe64-project/package.json +3 -1
- package/node_modules/@local/vibe64-publishing/package.json +12 -0
- package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +7 -7
- package/node_modules/@local/vibe64-runtime/src/shared/assistantRoutingScores.json +25 -22
- package/node_modules/@local/vibe64-terminals/package.json +2 -1
- package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +1341 -1300
- package/node_modules/@local/vibe64-training/package.json +2 -1
- package/package.json +19 -15
- package/server.bundle.mjs +43109 -41089
- package/dist/assets/GithubBrowserTabs-C2NO5l8g.js +0 -1
- package/dist/assets/StudioErrorNotice-CSrUw1QV.js +0 -1
- package/dist/assets/VAlert-P256xaE0.js +0 -1
- package/dist/assets/VAutocomplete-BDb95qJX.js +0 -1
- package/dist/assets/VAvatar-DPzqDH4r.js +0 -1
- package/dist/assets/VBtn-B2MBK2DL.js +0 -1
- package/dist/assets/VCard-mXy0k4aS.js +0 -1
- package/dist/assets/VCheckbox-C7A1ZW4D.js +0 -1
- package/dist/assets/VChip-CcI-Oo2J.js +0 -1
- package/dist/assets/VDialog-Bu3EfKb1.js +0 -1
- package/dist/assets/VDivider-BMEqUoAB.js +0 -1
- package/dist/assets/VExpansionPanels-Dgjrop0V.js +0 -1
- package/dist/assets/VMenu-C_x18lwb.js +0 -1
- package/dist/assets/VOverlay-CeMZurIN.js +0 -1
- package/dist/assets/VRadioGroup-CUu2-KIP.js +0 -1
- package/dist/assets/VRow-Cpw7OHQV.js +0 -1
- package/dist/assets/VSelect-DL3HaA5m.js +0 -2
- package/dist/assets/VSheet-DZWsu0kL.js +0 -1
- package/dist/assets/VSkeletonLoader-CttxM1tw.js +0 -1
- package/dist/assets/VSpacer-Dhmsvk4t.js +0 -1
- package/dist/assets/VSwitch-BRHeDJkH.js +0 -1
- package/dist/assets/VTextField-BR2eZeFT.js +0 -1
- package/dist/assets/VTextField-BiatYyd3.css +0 -1
- package/dist/assets/VTextarea-DbqamXJd.js +0 -1
- package/dist/assets/Vibe64AuthSettingsButton-fY4ZiIFF.js +0 -5
- package/dist/assets/Vibe64DashboardPageHeader-Gm1IvlHx.css +0 -1
- package/dist/assets/Vibe64DashboardShell-BSq7uXEW.js +0 -1
- package/dist/assets/Vibe64OutputControls-_zhGX9ne.js +0 -8
- package/dist/assets/Vibe64SessionFiles-Bl8wJ5Sk.css +0 -1
- package/dist/assets/_slug_-BclonbST.js +0 -24
- package/dist/assets/_slug_-CZ1bxO9C.css +0 -1
- package/dist/assets/app-BNP_n_Tt.js +0 -1
- package/dist/assets/assistantRouting-D4XpXcEf.js +0 -3
- package/dist/assets/client-BWV84wi2.js +0 -2
- package/dist/assets/client-DGrP-2AJ.css +0 -1
- package/dist/assets/definitions-BrMvu6yV.js +0 -1
- package/dist/assets/env-BzRtyO0w.css +0 -1
- package/dist/assets/env-D3KQGvRe.js +0 -1
- package/dist/assets/health-BJvooRnJ.css +0 -1
- package/dist/assets/health-BhoO1d4h.js +0 -1
- package/dist/assets/incoming-DWDrmxyH.css +0 -1
- package/dist/assets/incoming-DzADFGqp.js +0 -2
- package/dist/assets/index-dNxr4Lg9.js +0 -138
- package/dist/assets/integrations-Cq1x-Di9.css +0 -1
- package/dist/assets/issues-Bywux4s7.js +0 -1
- package/dist/assets/mdi-CG9pWOSj.js +0 -1
- package/dist/assets/placement-BF-zIEhA.js +0 -1
- package/dist/assets/pull-requests-CdbhyFOv.css +0 -1
- package/dist/assets/pull-requests-ncmKT3sS.js +0 -1
- package/dist/assets/ripple-BVltMmyV.js +0 -11
- package/dist/assets/settings-BopLnpB0.css +0 -1
- package/dist/assets/shared-DpMvYJO3.js +0 -2
- package/dist/assets/studioGateApi-DcCqiD9V.js +0 -1
- package/dist/assets/studioUrls-DmMMIScP.js +0 -1
- package/dist/assets/useArchivedVibe64Sessions-_LB2XxEa.js +0 -1
- package/dist/assets/useCommand-Bqxb-naz.js +0 -1
- package/dist/assets/useEndpointResource-DWoQ2keu.js +0 -1
- package/dist/assets/useRealtimeEvent-Bwapstla.js +0 -1
- package/dist/assets/useVibe64ConversationLog-BqUI0S5n.js +0 -1
- package/dist/assets/useVibe64Learning-DyqXkpLw.js +0 -1
- package/dist/assets/useVibe64ProjectScope-Bp1ImZlz.js +0 -1
- package/dist/assets/useVibe64SessionData-B686lToN.js +0 -1
- package/dist/assets/vibe64SessionFocus-CqZNTvYF.js +0 -1
- package/dist/assets/vibe64SessionFocus-OJ2toBd9.css +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import{B as VDefaultsProvider,E as useDensity,F as useBackgroundColor,Gn as withKeys,Kn as withModifiers,L as useTextColor,N as makeRoundedProps,P as useRounded,R as makeDimensionProps,T as makeDensityProps,V as makeTagProps,Wn as vShow,an as pick,ft as provideDefaults,gt as propsFactory,h as VIcon,ht as makeComponentProps,i as useLink,it as useRender,kn as isString,n as makeRouterProps,st as genericComponent,tt as IconValue,z as useDimension}from"./ripple-BVltMmyV.js";import{$n as normalizeProps,D as createVNode,E as createTextVNode,En as toValue,Ht as watch,On as unref,St as resolveComponent,Yt as withDirectives,Zn as normalizeClass,_ as createBaseVNode,an as getCurrentScope,b as createElementBlock,bt as renderList,ct as onMounted,er as normalizeStyle,et as mergeProps,g as computed,gn as reactive,it as onBeforeUnmount,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,tt as nextTick,v as createBlock,vn as ref,w as createSlots,wn as toRef,wt as resolveDynamicComponent,xt as renderSlot,y as createCommentVNode,z as guardReactiveProps}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{T as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-DWoQ2keu.js";import{n as useRealtimeEvent,p as getHttpWebClient}from"./useRealtimeEvent-Bwapstla.js";import{g as useDisplay}from"./VAvatar-DPzqDH4r.js";import{n as VList,s as VListItem,t as VMenu}from"./VMenu-C_x18lwb.js";import{t as VChip}from"./VChip-CcI-Oo2J.js";import{t as VTextField}from"./VTextField-BR2eZeFT.js";import{r as scopedDevelopmentApiUrl,t as resolveStudioRequestUrl}from"./studioUrls-DmMMIScP.js";import{Bn as mdiRedoVariant,Cn as mdiMicrophoneOff,Dt as mdiFileOutline,F as mdiChevronLeft,Ft as mdiFolderPlusOutline,Gn as mdiRobotOutline,I as mdiChevronRight,Jn as mdiSend,Ot as mdiFilePlusOutline,Pt as mdiFolderOutline,Q as mdiCollapseAllOutline,Sn as mdiMicrophone,Sr as mdiVolumeOff,Tt as mdiFileDocumentOutline,U as mdiClose,Un as mdiRestore,Vn as mdiRefresh,_ as mdiArrowLeft,_r as mdiUndoVariant,ar as mdiStar,at as mdiContentSaveOutline,ft as mdiDeleteOutline,gt as mdiDownload,ht as mdiDotsVertical,ir as mdiSourceRepository,jn as mdiPencilOutline,kt as mdiFileSearchOutline,m as mdiArchiveClockOutline,or as mdiStarOutline,pr as mdiTrayArrowUp,pt as mdiDotsHorizontal,rt as mdiContentCopy,sr as mdiStop,vr as mdiUpload,xr as mdiVolumeHigh,xt as mdiFileCodeOutline,yn as mdiMagnify}from"./mdi-CG9pWOSj.js";import{t as VBtn}from"./VBtn-B2MBK2DL.js";import{t as VAlert}from"./VAlert-P256xaE0.js";import{t as VDialog}from"./VDialog-Bu3EfKb1.js";import{i as VCardTitle,n as VCardText,o as VCardActions,t as VCard}from"./VCard-mXy0k4aS.js";import{t as VSpacer}from"./VSpacer-Dhmsvk4t.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-CttxM1tw.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,a as AssistantAttachmentQueue_default,c as AssistantPromptInput_default,g as LongTextPreviewBlocks_default,h as _sfc_main$14,m as useScrollToBottom,n as AssistantConversationElement_default,t as AssistantAttachmentPreview_default,u as scrollElementNearBottom,v as AssistantMessageAttachments_default}from"./conversation-B90ERX9h.js";import{t as usePaths}from"./usePaths-Db88-HOm.js";import{a as conversationAttachmentReference,c as vibe64AssistantSelectionLabel,h as vibe64AgentExecutionProfileAuditSnapshot,i as conversationAttachmentContentType,o as normalizeVibe64ConversationAttachments}from"./shared-DpMvYJO3.js";import{a as assistantGoalObjective,i as assistantGoalManagementMessage,o as assistantModeLabel}from"./assistantRouting-D4XpXcEf.js";import{t as useCommand}from"./useCommand-Bqxb-naz.js";import{t as useUiFeedback}from"./useUiFeedback-BPBF_0bp.js";import{n as stableLocalStorageKeyPart,r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as writeClipboardText}from"./clipboard-CZs9aH3L.js";import"./shared-BEwrtWSp.js";import{n as vibe64ApiResponseError,t as vibe64ApiError}from"./vibe64ApiResponses-DNLY1Kel.js";import{r as vibe64RealtimePayloadFromCurrentTab,t as vibe64BrowserTabOriginId}from"./vibe64BrowserTabOrigin-SF9E31vi.js";import{t as useVibe64SystemGraph}from"./useVibe64SystemGraph-B4RmsC9Y.js";import{A as VIBE64_SOURCE_EDITOR_SYNC_READY_EVENT,Bt as VoiceConversationSettings_default,D as VIBE64_SESSION_CHANGED_EVENT,E as VIBE64_SESSIONS_API_SUFFIX,Ht as useVoiceLauncher,Kt as VTabs,N as vibe64AgentAttachmentFilePath,O as VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,P as vibe64AgentAttachmentPath,Pt as createProjectVoiceBinding,Rt as useVibe64Voice,Ut as VoiceAvatar_default,Vt as VoiceConversationControls_default,at as vibe64SourceEditorChangesStreamPath,ct as vibe64SourceEditorExplanationFollowupsStreamPath,dt as vibe64SourceEditorExplanationsCleanupPath,ft as vibe64SourceEditorExplanationsStreamPath,gt as vibe64SourceEditorSearchPath,h as F,ht as vibe64SourceEditorResolvePathPath,it as vibe64SessionsQueryKey,k as VIBE64_SOURCE_EDITOR_SYNC_ERROR_EVENT,lt as vibe64SourceEditorExplanationPath,m as GithubMarkdown_default,mt as vibe64SourceEditorFilesPath,ot as vibe64SourceEditorCreateFilePath,pt as vibe64SourceEditorFilePath,qt as VTab,st as vibe64SourceEditorDownloadPath,tn as usePageActivity,ut as vibe64SourceEditorExplanationStopPath,vt as vibe64SourceEditorTreePath,y as readRefOrGetterValue,zt as VoiceConversationHost_default}from"./index-dNxr4Lg9.js";import{$ as rectangularSelection,A as foldService,B as tags$1,C as continuedIndent,Ct as NodeWeakMap,D as flatIndent,E as delimitedIndent,Et as parseMixed,F as sublanguageProp,G as drawSelection,H as EditorView,I as syntaxHighlighting,J as getPanel,K as dropCursor,L as syntaxTree,M as indentOnInput,N as indentUnit,O as foldInside,P as languageDataProp,Q as lineNumbers,R as Tag,S as bracketMatchingHandle,St as NodeType,T as defineLanguageFacet,Tt as Tree,U as ViewPlugin,V as Decoration,W as crosshairCursor,X as highlightActiveLineGutter,Z as keymap,_ as LanguageDescription,_t as findClusterBreak,a as redo,at as Compartment,b as StreamLanguage,bt as NodeProp,c as completeFromList,ct as Facet,d as ContextTracker,dt as StateEffect,et as runScopeHandlers,f as ExternalTokenizer,ft as StateField,g as Language,gt as countColumn,h as LRLanguage,ht as combineConfig,i as indentWithTab,it as CharCategory,j as indentNodeProp,k as foldNodeProp,l as ifNotIn,lt as Prec,m as LocalTokenGroup,mt as codePointSize,n as history,nt as showPanel,o as undo,ot as EditorSelection,p as LRParser,pt as codePointAt,q as getDialog,r as historyKeymap,rt as crelt,s as CompletionContext,st as EditorState,t as defaultKeymap,tt as showDialog,u as snippetCompletion,ut as RangeSetBuilder,v as LanguageSupport,vt as fromCodePoint,w as defaultHighlightStyle,wt as Parser,x as bracketMatching,xt as NodeSet,y as ParseContext,yt as IterMode,z as styleTags}from"./dist-CDa9Iec1.js";import{a as vibe64SessionDebugError,o as vibe64SessionDebugLog}from"./vibe64SessionPanelModel-DDorOuiL.js";import{t as diffLines}from"./libesm-CR-iGldz.js";var makeVBreadcrumbsDividerProps=propsFactory({divider:[Number,String],...makeComponentProps()},`VBreadcrumbsDivider`);var VBreadcrumbsDivider=genericComponent()({name:`VBreadcrumbsDivider`,props:makeVBreadcrumbsDividerProps(),setup(props,{slots}){useRender(()=>createBaseVNode(`li`,{"aria-hidden":`true`,"class":normalizeClass([`v-breadcrumbs-divider`,props.class]),"style":normalizeStyle(props.style)},[slots?.default?.()??props.divider]));return{}}});var makeVBreadcrumbsItemProps=propsFactory({active:Boolean,activeClass:String,activeColor:String,color:String,disabled:Boolean,title:String,...makeComponentProps(),...pick(makeDimensionProps(),[`width`,`maxWidth`]),...makeRouterProps(),...makeTagProps({tag:`li`})},`VBreadcrumbsItem`);var VBreadcrumbsItem=genericComponent()({name:`VBreadcrumbsItem`,props:makeVBreadcrumbsItemProps(),setup(props,{slots,attrs}){const link=useLink(props,attrs);const isActive=computed(()=>props.active||link.isActive?.value);const{dimensionStyles}=useDimension(props);const{textColorClasses,textColorStyles}=useTextColor(()=>isActive.value?props.activeColor:props.color);useRender(()=>{return createVNode(props.tag,{"class":normalizeClass([`v-breadcrumbs-item`,{"v-breadcrumbs-item--active":isActive.value,"v-breadcrumbs-item--disabled":props.disabled,[`${props.activeClass}`]:isActive.value&&props.activeClass},textColorClasses.value,props.class]),"style":normalizeStyle([textColorStyles.value,dimensionStyles.value,props.style]),"aria-current":isActive.value?`page`:void 0},{default:()=>[!link.isLink.value?slots.default?.()??props.title:createBaseVNode(`a`,mergeProps({"class":`v-breadcrumbs-item--link`,"onClick":link.navigate.value},link.linkProps),[slots.default?.()??props.title])]})});return{}}});var makeVBreadcrumbsProps=propsFactory({activeClass:String,activeColor:String,bgColor:String,color:String,disabled:Boolean,divider:{type:String,default:`/`},icon:IconValue,items:{type:Array,default:()=>[]},...makeComponentProps(),...makeDensityProps(),...makeRoundedProps(),...makeTagProps({tag:`ul`})},`VBreadcrumbs`);var VBreadcrumbs=genericComponent()({name:`VBreadcrumbs`,props:makeVBreadcrumbsProps(),setup(props,{slots}){const{backgroundColorClasses,backgroundColorStyles}=useBackgroundColor(()=>props.bgColor);const{densityClasses}=useDensity(props);const{roundedClasses,roundedStyles}=useRounded(props);provideDefaults({VBreadcrumbsDivider:{divider:toRef(()=>props.divider)},VBreadcrumbsItem:{activeClass:toRef(()=>props.activeClass),activeColor:toRef(()=>props.activeColor),color:toRef(()=>props.color),disabled:toRef(()=>props.disabled)}});const items=computed(()=>props.items.map(item=>{return isString(item)?{item:{title:item},raw:item}:{item,raw:item}}));useRender(()=>{const hasPrepend=!!(slots.prepend||props.icon);return createVNode(props.tag,{"class":normalizeClass([`v-breadcrumbs`,backgroundColorClasses.value,densityClasses.value,roundedClasses.value,props.class]),"style":normalizeStyle([backgroundColorStyles.value,roundedStyles.value,props.style])},{default:()=>[hasPrepend&&createBaseVNode(`li`,{"key":`prepend`,"class":`v-breadcrumbs__prepend`},[!slots.prepend?createVNode(VIcon,{"key":`prepend-icon`,"start":true,"icon":props.icon},null):createVNode(VDefaultsProvider,{"key":`prepend-defaults`,"disabled":!props.icon,"defaults":{VIcon:{icon:props.icon,start:true}}},slots.prepend)]),items.value.map(({item,raw},index,array)=>createBaseVNode(Fragment,null,[slots.item?.({item,index})??createVNode(VBreadcrumbsItem,mergeProps({"key":index,"disabled":index>=array.length-1},isString(item)?{title:item}:item),{default:slots.title?()=>slots.title?.({item,index}):void 0}),index<array.length-1&&createVNode(VBreadcrumbsDivider,null,{default:slots.divider?()=>slots.divider?.({item:raw,index}):void 0})])),slots.default?.()]})});return{}}});function assistantAttachmentSessionId(sessionId){return String(toValue(sessionId)||``).trim()}function assistantAttachmentUploadAllowed(canUpload){return toValue(canUpload)!==false}function assistantAttachmentFiles(fileList=[]){return Array.from(fileList||[]).filter(file=>file&&file.size>=0)}function assistantAttachmentFilesFromTransferItems(items=[]){return assistantAttachmentFiles(Array.from(items||[]).map(item=>{if(item?.kind!==`file`||typeof item.getAsFile!==`function`)return null;return item.getAsFile()}))}function assistantAttachmentFilesFromDropEvent(event){const dataTransfer=event?.dataTransfer;const itemFiles=assistantAttachmentFilesFromTransferItems(dataTransfer?.items);if(itemFiles.length>0)return itemFiles;return assistantAttachmentFiles(dataTransfer?.files)}function assistantAttachmentFilesFromPasteEvent(event){const clipboardData=event?.clipboardData;const itemFiles=assistantAttachmentFilesFromTransferItems(clipboardData?.items);if(itemFiles.length>0)return itemFiles;return assistantAttachmentFiles(clipboardData?.files)}function assistantAttachmentEventHasFiles(event){const dataTransfer=event?.dataTransfer;return assistantAttachmentFilesFromDropEvent(event).length>0||Array.from(dataTransfer?.items||[]).some(item=>item?.kind===`file`)||Array.from(dataTransfer?.types||[]).some(type=>type===`Files`||type===`application/x-moz-file`)}function assistantAttachmentClipboardText(event){if(typeof event?.clipboardData?.getData!==`function`)return``;return String(event.clipboardData.getData(`text/plain`)||``)}function assistantAttachmentClipboardLocalFileReference(event){const clipboardData=event?.clipboardData;if(!clipboardData||typeof clipboardData.getData!==`function`)return``;const types=Array.from(clipboardData.types||[]);const text=[clipboardData.getData(`x-special/gnome-copied-files`),clipboardData.getData(`text/uri-list`),clipboardData.getData(`text/plain`)].map(value=>String(value||``).trim()).filter(Boolean).join(`
|
|
1
|
+
import{$n as normalizeProps,D as createVNode,E as createTextVNode,En as toValue,Ht as watch,On as unref,St as resolveComponent,Yt as withDirectives,Zn as normalizeClass,_ as createBaseVNode,an as getCurrentScope,b as createElementBlock,bt as renderList,ct as onMounted,er as normalizeStyle,et as mergeProps,g as computed,gn as reactive,it as onBeforeUnmount,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,tt as nextTick,v as createBlock,vn as ref,w as createSlots,wn as toRef,wt as resolveDynamicComponent,xt as renderSlot,y as createCommentVNode,z as guardReactiveProps}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{B as useTextColor,E as useDensity,Gn as isString,H as useDimension,I as makeRoundedProps,L as useRounded,Mt as makeComponentProps,Nt as propsFactory,R as useBackgroundColor,Sn as pick,T as makeDensityProps,U as VDefaultsProvider,V as makeDimensionProps,Y as makeTagProps,_t as useRender,ar as vShow,h as VIcon,i as useLink,kt as provideDefaults,mt as IconValue,n as makeRouterProps,or as withKeys,ot as useDisplay,sr as withModifiers,wt as genericComponent}from"./ripple-EFNA8EBu.js";import{T as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-Ds8EDBZ2.js";import{u as getHttpWebClient}from"./vibe64ProjectScope.local-B06ABkhI.js";import{n as VList,s as VListItem,t as VMenu}from"./VMenu-CDcBLYWR.js";import{t as VChip}from"./VChip-VVdtjfq-.js";import{t as VTextField}from"./VTextField-C0b_0cSa.js";import{r as scopedDevelopmentApiUrl,t as resolveStudioRequestUrl}from"./studioUrls-DpSS-0z1.js";import{Br as mdiUndoVariant,Ct as mdiDotsVertical,Dr as mdiStop,Er as mdiStarOutline,Ft as mdiFileOutline,Gr as mdiVolumeOff,H as mdiChevronLeft,Ht as mdiFolderOutline,Ir as mdiTrayArrowUp,It as mdiFilePlusOutline,Lt as mdiFileSearchOutline,Mn as mdiMicrophone,Nn as mdiMicrophoneOff,Nt as mdiFileDocumentOutline,S as mdiArrowLeft,Tr as mdiStar,U as mdiChevronRight,Ut as mdiFolderPlusOutline,Vr as mdiUpload,Wn as mdiPencilOutline,Wr as mdiVolumeHigh,X as mdiClose,ar as mdiRestore,at as mdiCollapseAllOutline,bt as mdiDeleteOutline,dr as mdiSend,ft as mdiContentSaveOutline,kn as mdiMagnify,kt as mdiFileCodeOutline,nr as mdiRefresh,sr as mdiRobotOutline,t as mdiAccountCheckOutline,tr as mdiRedoVariant,ut as mdiContentCopy,wr as mdiSourceRepository,wt as mdiDownload,xt as mdiDotsHorizontal,y as mdiArchiveClockOutline}from"./mdi-Bt90Ns76.js";import{t as VBtn}from"./VBtn-BhVEwXLX.js";import{t as VAlert}from"./VAlert-gwuhYlYb.js";import{t as VDialog}from"./VDialog-CQDhjRiV.js";import{i as VCardTitle,n as VCardText,o as VCardActions,t as VCard}from"./VCard-C3Hx769y.js";import{t as VSpacer}from"./VSpacer-CgWOWvBh.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-Cync3lZZ.js";import{t as VTextarea}from"./VTextarea-B7sZd1JY.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{_ as parseLongTextReviewBlocks,a as AssistantAttachmentQueue_default,c as AssistantPromptInput_default,g as LongTextPreviewBlocks_default,h as _sfc_main$14,m as useScrollToBottom,n as AssistantConversationElement_default,t as AssistantAttachmentPreview_default,u as scrollElementNearBottom,v as AssistantMessageAttachments_default}from"./conversation-DZW4-Wck.js";import{n as useRealtimeEvent}from"./useRealtimeEvent-DrOiU8lJ.js";import{t as usePaths}from"./usePaths-Db88-HOm.js";import{a as conversationAttachmentReference,c as vibe64AssistantSelectionLabel,i as conversationAttachmentContentType,m as vibe64AgentExecutionProfileAuditSnapshot,o as normalizeVibe64ConversationAttachments}from"./shared-DZETtWRH.js";import{c as assistantGoalManagementMessage,l as assistantGoalObjective,u as assistantModeLabel}from"./assistantRouting-DeE8jvtE.js";import{t as useCommand}from"./useCommand-nWFczmJy.js";import{t as useUiFeedback}from"./useUiFeedback-CMwE4MLs.js";import{n as stableLocalStorageKeyPart,r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as writeClipboardText}from"./clipboard-CZs9aH3L.js";import"./shared-BEwrtWSp.js";import{n as vibe64ApiResponseError,t as vibe64ApiError}from"./vibe64ApiResponses-DNLY1Kel.js";import{r as vibe64RealtimePayloadFromCurrentTab,t as vibe64BrowserTabOriginId}from"./vibe64BrowserTabOrigin-SF9E31vi.js";import{t as useVibe64SystemGraph}from"./useVibe64SystemGraph-DbSfrYF8.js";import{A as VIBE64_SOURCE_EDITOR_SYNC_ERROR_EVENT,Bt as VoiceConversationHost_default,D as VIBE64_SESSIONS_API_SUFFIX,F as vibe64AgentAttachmentPath,Ft as createProjectVoiceBinding,Ht as VoiceConversationControls_default,Jt as VTab,O as VIBE64_SESSION_CHANGED_EVENT,P as vibe64AgentAttachmentFilePath,Ut as useVoiceLauncher,Vt as VoiceConversationSettings_default,Wt as VoiceAvatar_default,_t as vibe64SourceEditorSearchPath,at as vibe64SessionsQueryKey,b as readRefOrGetterValue,ct as vibe64SourceEditorDownloadPath,dt as vibe64SourceEditorExplanationStopPath,ft as vibe64SourceEditorExplanationsCleanupPath,gt as vibe64SourceEditorResolvePathPath,h as F,ht as vibe64SourceEditorFilesPath,j as VIBE64_SOURCE_EDITOR_SYNC_READY_EVENT,k as VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,lt as vibe64SourceEditorExplanationFollowupsStreamPath,m as GithubMarkdown_default,mt as vibe64SourceEditorFilePath,nn as usePageActivity,ot as vibe64SourceEditorChangesStreamPath,pt as vibe64SourceEditorExplanationsStreamPath,qt as VTabs,st as vibe64SourceEditorCreateFilePath,ut as vibe64SourceEditorExplanationPath,yt as vibe64SourceEditorTreePath,zt as useVibe64Voice}from"./index-Mxalhei8.js";import{$ as rectangularSelection,A as foldService,B as tags$1,C as continuedIndent,Ct as NodeWeakMap,D as flatIndent,E as delimitedIndent,Et as parseMixed,F as sublanguageProp,G as drawSelection,H as EditorView,I as syntaxHighlighting,J as getPanel,K as dropCursor,L as syntaxTree,M as indentOnInput,N as indentUnit,O as foldInside,P as languageDataProp,Q as lineNumbers,R as Tag,S as bracketMatchingHandle,St as NodeType,T as defineLanguageFacet,Tt as Tree,U as ViewPlugin,V as Decoration,W as crosshairCursor,X as highlightActiveLineGutter,Z as keymap,_ as LanguageDescription,_t as findClusterBreak,a as redo,at as Compartment,b as StreamLanguage,bt as NodeProp,c as completeFromList,ct as Facet,d as ContextTracker,dt as StateEffect,et as runScopeHandlers,f as ExternalTokenizer,ft as StateField,g as Language,gt as countColumn,h as LRLanguage,ht as combineConfig,i as indentWithTab,it as CharCategory,j as indentNodeProp,k as foldNodeProp,l as ifNotIn,lt as Prec,m as LocalTokenGroup,mt as codePointSize,n as history,nt as showPanel,o as undo,ot as EditorSelection,p as LRParser,pt as codePointAt,q as getDialog,r as historyKeymap,rt as crelt,s as CompletionContext,st as EditorState,t as defaultKeymap,tt as showDialog,u as snippetCompletion,ut as RangeSetBuilder,v as LanguageSupport,vt as fromCodePoint,w as defaultHighlightStyle,wt as Parser,x as bracketMatching,xt as NodeSet,y as ParseContext,yt as IterMode,z as styleTags}from"./dist-CDa9Iec1.js";import{a as vibe64SessionDebugError,o as vibe64SessionDebugLog}from"./vibe64SessionPanelModel-DDorOuiL.js";import{t as diffLines}from"./libesm-CR-iGldz.js";var makeVBreadcrumbsDividerProps=propsFactory({divider:[Number,String],...makeComponentProps()},`VBreadcrumbsDivider`);var VBreadcrumbsDivider=genericComponent()({name:`VBreadcrumbsDivider`,props:makeVBreadcrumbsDividerProps(),setup(props,{slots}){useRender(()=>createBaseVNode(`li`,{"aria-hidden":`true`,"class":normalizeClass([`v-breadcrumbs-divider`,props.class]),"style":normalizeStyle(props.style)},[slots?.default?.()??props.divider]));return{}}});var makeVBreadcrumbsItemProps=propsFactory({active:Boolean,activeClass:String,activeColor:String,color:String,disabled:Boolean,title:String,...makeComponentProps(),...pick(makeDimensionProps(),[`width`,`maxWidth`]),...makeRouterProps(),...makeTagProps({tag:`li`})},`VBreadcrumbsItem`);var VBreadcrumbsItem=genericComponent()({name:`VBreadcrumbsItem`,props:makeVBreadcrumbsItemProps(),setup(props,{slots,attrs}){const link=useLink(props,attrs);const isActive=computed(()=>props.active||link.isActive?.value);const{dimensionStyles}=useDimension(props);const{textColorClasses,textColorStyles}=useTextColor(()=>isActive.value?props.activeColor:props.color);useRender(()=>{return createVNode(props.tag,{"class":normalizeClass([`v-breadcrumbs-item`,{"v-breadcrumbs-item--active":isActive.value,"v-breadcrumbs-item--disabled":props.disabled,[`${props.activeClass}`]:isActive.value&&props.activeClass},textColorClasses.value,props.class]),"style":normalizeStyle([textColorStyles.value,dimensionStyles.value,props.style]),"aria-current":isActive.value?`page`:void 0},{default:()=>[!link.isLink.value?slots.default?.()??props.title:createBaseVNode(`a`,mergeProps({"class":`v-breadcrumbs-item--link`,"onClick":link.navigate.value},link.linkProps),[slots.default?.()??props.title])]})});return{}}});var makeVBreadcrumbsProps=propsFactory({activeClass:String,activeColor:String,bgColor:String,color:String,disabled:Boolean,divider:{type:String,default:`/`},icon:IconValue,items:{type:Array,default:()=>[]},...makeComponentProps(),...makeDensityProps(),...makeRoundedProps(),...makeTagProps({tag:`ul`})},`VBreadcrumbs`);var VBreadcrumbs=genericComponent()({name:`VBreadcrumbs`,props:makeVBreadcrumbsProps(),setup(props,{slots}){const{backgroundColorClasses,backgroundColorStyles}=useBackgroundColor(()=>props.bgColor);const{densityClasses}=useDensity(props);const{roundedClasses,roundedStyles}=useRounded(props);provideDefaults({VBreadcrumbsDivider:{divider:toRef(()=>props.divider)},VBreadcrumbsItem:{activeClass:toRef(()=>props.activeClass),activeColor:toRef(()=>props.activeColor),color:toRef(()=>props.color),disabled:toRef(()=>props.disabled)}});const items=computed(()=>props.items.map(item=>{return isString(item)?{item:{title:item},raw:item}:{item,raw:item}}));useRender(()=>{const hasPrepend=!!(slots.prepend||props.icon);return createVNode(props.tag,{"class":normalizeClass([`v-breadcrumbs`,backgroundColorClasses.value,densityClasses.value,roundedClasses.value,props.class]),"style":normalizeStyle([backgroundColorStyles.value,roundedStyles.value,props.style])},{default:()=>[hasPrepend&&createBaseVNode(`li`,{"key":`prepend`,"class":`v-breadcrumbs__prepend`},[!slots.prepend?createVNode(VIcon,{"key":`prepend-icon`,"start":true,"icon":props.icon},null):createVNode(VDefaultsProvider,{"key":`prepend-defaults`,"disabled":!props.icon,"defaults":{VIcon:{icon:props.icon,start:true}}},slots.prepend)]),items.value.map(({item,raw},index,array)=>createBaseVNode(Fragment,null,[slots.item?.({item,index})??createVNode(VBreadcrumbsItem,mergeProps({"key":index,"disabled":index>=array.length-1},isString(item)?{title:item}:item),{default:slots.title?()=>slots.title?.({item,index}):void 0}),index<array.length-1&&createVNode(VBreadcrumbsDivider,null,{default:slots.divider?()=>slots.divider?.({item:raw,index}):void 0})])),slots.default?.()]})});return{}}});function assistantAttachmentSessionId(sessionId){return String(toValue(sessionId)||``).trim()}function assistantAttachmentUploadAllowed(canUpload){return toValue(canUpload)!==false}function assistantAttachmentFiles(fileList=[]){return Array.from(fileList||[]).filter(file=>file&&file.size>=0)}function assistantAttachmentFilesFromTransferItems(items=[]){return assistantAttachmentFiles(Array.from(items||[]).map(item=>{if(item?.kind!==`file`||typeof item.getAsFile!==`function`)return null;return item.getAsFile()}))}function assistantAttachmentFilesFromDropEvent(event){const dataTransfer=event?.dataTransfer;const itemFiles=assistantAttachmentFilesFromTransferItems(dataTransfer?.items);if(itemFiles.length>0)return itemFiles;return assistantAttachmentFiles(dataTransfer?.files)}function assistantAttachmentFilesFromPasteEvent(event){const clipboardData=event?.clipboardData;const itemFiles=assistantAttachmentFilesFromTransferItems(clipboardData?.items);if(itemFiles.length>0)return itemFiles;return assistantAttachmentFiles(clipboardData?.files)}function assistantAttachmentEventHasFiles(event){const dataTransfer=event?.dataTransfer;return assistantAttachmentFilesFromDropEvent(event).length>0||Array.from(dataTransfer?.items||[]).some(item=>item?.kind===`file`)||Array.from(dataTransfer?.types||[]).some(type=>type===`Files`||type===`application/x-moz-file`)}function assistantAttachmentClipboardText(event){if(typeof event?.clipboardData?.getData!==`function`)return``;return String(event.clipboardData.getData(`text/plain`)||``)}function assistantAttachmentClipboardLocalFileReference(event){const clipboardData=event?.clipboardData;if(!clipboardData||typeof clipboardData.getData!==`function`)return``;const types=Array.from(clipboardData.types||[]);const text=[clipboardData.getData(`x-special/gnome-copied-files`),clipboardData.getData(`text/uri-list`),clipboardData.getData(`text/plain`)].map(value=>String(value||``).trim()).filter(Boolean).join(`
|
|
2
2
|
`);if(types.includes(`Files`)||types.includes(`application/x-moz-file`)||types.includes(`x-special/gnome-copied-files`)||/^file:/imu.test(text))return text||`file://`;return``}function attachmentUploadError(attachment={}){return attachment?.error||attachment?.errors?.[0]?.message||``}function attachmentIdentity(attachment={}){return String(attachment?.clientId||attachment?.attachmentId||attachment?.path||attachment?.fileName||``)}var ASSISTANT_ATTACHMENT_MAX_BYTES=1e8;var ASSISTANT_ATTACHMENT_MAX_ITEMS=10;var ASSISTANT_ATTACHMENT_UPLOAD_CONCURRENCY=2;var ASSISTANT_ATTACHMENT_UNRESOLVED_PHASES=new Set([`preparing`,`queued`,`uploading`,`delivering`,`failed`]);var attachmentClientSequence=0;function nextAttachmentClientId(){attachmentClientSequence+=1;return`attachment-${Date.now().toString(36)}-${attachmentClientSequence.toString(36)}`}function attachmentFileName(file={}){return String(file?.name||`attachment`)}function attachmentUploadResult(upload=null){if(upload&&typeof upload.then===`function`)return{cancel:typeof upload.cancel===`function`?()=>upload.cancel():null,promise:upload};if(upload?.promise&&typeof upload.promise.then===`function`)return{cancel:typeof upload.abort===`function`?()=>upload.abort():typeof upload.cancel===`function`?()=>upload.cancel():null,promise:upload.promise};return{cancel:null,promise:Promise.resolve(upload)}}function attachmentProgress(progress={},possibleTotal,fallbackTotal=0){const directNumericProgress=typeof progress===`number`?progress:null;const progressObject=progress&&typeof progress===`object`?progress:{};const totalBytes=Math.max(0,Number(progressObject.totalBytes??progressObject.total??possibleTotal??fallbackTotal)||0);const bytesValue=progressObject.bytesSent??progressObject.loaded??progressObject.uploadedBytes??directNumericProgress;const bytesKnown=bytesValue!==null&&bytesValue!==void 0&&bytesValue!==``;let bytesSent=bytesKnown?Number(bytesValue)||0:0;const directPercent=progressObject.percent;let percent=directPercent!==null&&directPercent!==void 0&&directPercent!==``?Number(directPercent):null;const progressValue=progressObject.progress;if(!Number.isFinite(percent)&&progressValue!==null&&progressValue!==void 0&&progressValue!==``){const numericProgressValue=Number(progressValue);if(Number.isFinite(numericProgressValue))percent=numericProgressValue<=1?numericProgressValue*100:numericProgressValue}if(!Number.isFinite(percent))percent=bytesKnown&&totalBytes>0?bytesSent/totalBytes*100:null;if(percent!==null)percent=Math.max(0,Math.min(100,percent));if(totalBytes>0){const inferredBytes=percent===null?0:totalBytes*percent/100;bytesSent=Math.max(0,Math.min(totalBytes,bytesSent||inferredBytes))}else bytesSent=Math.max(0,bytesSent);return{bytesSent,percent,totalBytes}}function attachmentReceipt(row,uploaded={}){return{...uploaded,attachmentId:String(uploaded?.attachmentId||``),clientId:row.clientId,fileName:String(uploaded?.fileName||row.fileName),sessionId:row.sessionId,size:Number(uploaded?.size??row.size)||0}}function useAssistantAttachments({canUpload=()=>true,deleteAttachment=null,onError=null,onUploaded=async()=>null,sessionId,uploadAttachment,maxBytes=ASSISTANT_ATTACHMENT_MAX_BYTES,maxItems=10,uploadConcurrency=2}={}){if(![maxBytes,maxItems,uploadConcurrency].every(value=>Number.isSafeInteger(value)&&value>0))throw new TypeError(`Attachment limits must be positive integers.`);const maxSizeLabel=maxBytes%1048576===0?`${maxBytes/1048576} MiB`:`${maxBytes/1e6} MB`;const attachments=ref([]);const queueItems=ref([]);const dragDepth=ref(0);const status=ref(``);const activeUploadCount=ref(0);const uploadQueue=[];const rowsById=new Map;const activeAttempts=new Map;const cleanupTasks=new Set;const receiptCleanupById=new Map;const cleanedReceiptIds=new Set;let disposed=false;let stopSessionWatch=null;const dragActive=computed(()=>dragDepth.value>0);const uploading=computed(()=>activeUploadCount.value>0||queueItems.value.some(item=>[`preparing`,`uploading`,`delivering`].includes(item.phase)));const hasUnresolved=computed(()=>queueItems.value.some(item=>ASSISTANT_ATTACHMENT_UNRESOLVED_PHASES.has(item.phase)));const canSubmit=computed(()=>!hasUnresolved.value);const retainedItemCount=computed(()=>queueItems.value.filter(item=>item.phase!==`cancelled`).length);const atCapacity=computed(()=>retainedItemCount.value>=maxItems);const canAddFiles=computed(()=>Boolean(!disposed&&assistantAttachmentSessionId(sessionId)&&assistantAttachmentUploadAllowed(canUpload)&&!atCapacity.value&&typeof uploadAttachment===`function`));const aggregateProgress=computed(()=>{const retainedItems=queueItems.value.filter(item=>item.phase!==`cancelled`);const totalBytes=retainedItems.reduce((sum,item)=>sum+item.totalBytes,0);const bytesSent=retainedItems.reduce((sum,item)=>sum+item.bytesSent,0);return{bytesSent,percent:totalBytes>0?Math.round(bytesSent/totalBytes*100):0,totalBytes}});function reportAttachmentError(error,fallbackMessage=`Attachment upload failed.`,{notify=true}={}){const message=String(error?.message||error||fallbackMessage);status.value=message;if(notify&&typeof onError===`function`)try{onError(error||new Error(message),fallbackMessage)}catch{}return message}function resetDragState(){dragDepth.value=0}function clearStatus(){status.value=``}function createWaiter(row){let resolve=null;row.waiter={promise:new Promise(currentResolve=>{resolve=currentResolve}),resolve,settled:false};return row.waiter}function settleWaiter(row,value=null,waiter=row.waiter){if(!waiter||waiter.settled)return;waiter.settled=true;waiter.resolve(value)}function canonicalRow(attachment={}){const identity=attachmentIdentity(attachment);return identity?rowsById.get(identity)||queueItems.value.find(row=>attachmentIdentity(row)===identity||row.attachmentId===identity):null}function trackCleanup(task){const cleanup=Promise.resolve(task).catch(error=>{reportAttachmentError(error,`Attachment cleanup failed.`);return false});cleanupTasks.add(cleanup);cleanup.finally(()=>cleanupTasks.delete(cleanup));return cleanup}async function deleteUploadedAttachment(currentSessionId,attachment={}){const attachmentId=String(attachment?.attachmentId||``).trim();if(!attachmentId||typeof deleteAttachment!==`function`)return false;const response=await deleteAttachment(currentSessionId,attachmentId);if(response?.ok===false)throw new Error(attachmentUploadError(response)||`Attachment cleanup failed.`);return true}function cleanupReceipt(currentSessionId,receipt={}){const attachmentId=String(receipt?.attachmentId||``).trim();const cleanupId=`${currentSessionId}:${attachmentId}`;if(!attachmentId)return Promise.resolve(false);if(cleanedReceiptIds.has(cleanupId))return Promise.resolve(false);if(receiptCleanupById.has(cleanupId))return receiptCleanupById.get(cleanupId);const cleanup=trackCleanup(deleteUploadedAttachment(currentSessionId,receipt)).then(deleted=>{if(deleted)cleanedReceiptIds.add(cleanupId);return deleted});receiptCleanupById.set(cleanupId,cleanup);cleanup.finally(()=>receiptCleanupById.delete(cleanupId));return cleanup}function updateProgress(row,progress,total){if(!row.retained||row.phase!==`uploading`)return;const next=attachmentProgress(progress,total,row.totalBytes);row.bytesSent=Math.max(row.bytesSent,next.bytesSent);row.totalBytes=next.totalBytes||row.totalBytes;if(next.percent!==null)row.progress=Math.max(Number(row.progress)||0,next.percent)}function removeReadyReceipt(row){const removed=attachments.value.filter(attachment=>attachment.clientId===row.clientId);attachments.value=attachments.value.filter(attachment=>attachment.clientId!==row.clientId);return removed}async function handOffUploadedAttachment(row,receipt,waiter=row.waiter){const token=Symbol(`${row.clientId}-handoff`);row.activeHandoffToken=token;row.phase=`delivering`;if(!attachments.value.some(attachment=>attachment.clientId===row.clientId))attachments.value.push(receipt);try{const accepted=(await onUploaded([receipt]))?.accepted===true;if(row.activeHandoffToken!==token||!row.retained||row.phase===`cancelled`){removeReadyReceipt(row);if(!accepted)await cleanupReceipt(row.sessionId,receipt);settleWaiter(row,null,waiter);return null}row.activeHandoffToken=null;row.error=``;row.failureStage=``;if(accepted){removeReadyReceipt(row);row.retained=false;rowsById.delete(row.clientId);queueItems.value=queueItems.value.filter(candidate=>candidate.clientId!==row.clientId);settleWaiter(row,receipt,waiter);return receipt}row.phase=`ready`;settleWaiter(row,receipt,waiter);return receipt}catch(error){if(row.activeHandoffToken!==token||!row.retained||row.phase===`cancelled`){await cleanupReceipt(row.sessionId,receipt);settleWaiter(row,null,waiter);return null}row.activeHandoffToken=null;removeReadyReceipt(row);row.error=String(error?.message||error||`Uploaded attachment could not be used.`);row.failureStage=`handoff`;row.phase=`failed`;settleWaiter(row,null,waiter);reportAttachmentError(error,`Uploaded attachment could not be used.`,{notify:false});return null}}async function finishUploadAttempt(attempt,uploaded,uploadError=null){activeAttempts.delete(attempt.token);activeUploadCount.value=activeAttempts.size;pumpQueue();const{row}=attempt;const isCurrentAttempt=row.activeToken===attempt.token;const uploadSucceeded=Boolean(!uploadError&&uploaded&&uploaded.ok!==false&&String(uploaded.attachmentId||``).trim());if(!isCurrentAttempt||!row.retained||disposed){if(uploadSucceeded)await cleanupReceipt(attempt.sessionId,uploaded);settleWaiter(row,null,attempt.waiter);pumpQueue();return}row.activeToken=null;if(uploadSucceeded){const receipt=attachmentReceipt(row,uploaded);row.receipt=receipt;row.attachmentId=receipt.attachmentId;row.path=String(receipt.path||``);row.bytesSent=row.totalBytes;row.progress=100;row.error=``;row.failureStage=``;await handOffUploadedAttachment(row,receipt,attempt.waiter)}else{const error=uploadError||new Error(attachmentUploadError(uploaded)||`Attachment upload failed.`);row.error=String(error?.message||error||`Attachment upload failed.`);row.failureStage=`upload`;row.phase=`failed`;settleWaiter(row,null,attempt.waiter);reportAttachmentError(error,`Attachment upload failed.`,{notify:false})}pumpQueue()}function startUpload(row){const token=Symbol(row.clientId);const abortController=typeof AbortController===`function`?new AbortController:null;const attempt={abortController,cancel:null,row,sessionId:row.sessionId,settled:null,token,waiter:row.waiter};row.activeToken=token;row.phase=`uploading`;row.error=``;activeAttempts.set(token,attempt);activeUploadCount.value=activeAttempts.size;try{const transport=attachmentUploadResult(uploadAttachment(row.sessionId,row.file,{onProgress:(progress,total)=>updateProgress(row,progress,total),signal:abortController?.signal}));attempt.cancel=transport.cancel;attempt.settled=transport.promise.then(uploaded=>finishUploadAttempt(attempt,uploaded),error=>finishUploadAttempt(attempt,null,error))}catch(error){attempt.settled=finishUploadAttempt(attempt,null,error)}}function pumpQueue(){if(disposed)return;while(activeAttempts.size<uploadConcurrency&&uploadQueue.length>0){const row=uploadQueue.shift();if(!row?.retained||row.phase!==`queued`)continue;startUpload(row)}}function cancelAttachment(attachment={}){const row=canonicalRow(attachment);if(!row||!row.retained||![`preparing`,`queued`,`uploading`].includes(row.phase))return false;const token=row.activeToken;row.activeToken=null;row.activeHandoffToken=null;row.phase=`cancelled`;row.error=``;const receipt=row.receipt;removeReadyReceipt(row);if(receipt)cleanupReceipt(row.sessionId,receipt);row.receipt=null;row.failureStage=``;settleWaiter(row,null);const attempt=token?activeAttempts.get(token):null;try{row.producerAbortController?.abort();attempt?.abortController?.abort();attempt?.cancel?.()}catch{}row.producerAbortController=null;row.producerToken=null;pumpQueue();return true}function retryAttachment(attachment={}){const row=canonicalRow(attachment);if(!row||!row.retained||![`failed`,`cancelled`].includes(row.phase)||row.sessionId!==assistantAttachmentSessionId(sessionId)||!assistantAttachmentUploadAllowed(canUpload)||typeof uploadAttachment!==`function`)return Promise.resolve(null);if(row.phase===`cancelled`&&retainedItemCount.value>=maxItems){reportAttachmentError(`A message can keep at most ${maxItems} attachments.`);return Promise.resolve(null)}if(row.failureStage===`handoff`&&row.receipt){row.error=``;row.phase=`uploading`;const waiter=createWaiter(row);handOffUploadedAttachment(row,row.receipt,waiter);return waiter.promise}if(row.producer&&!row.file){const waiter=createWaiter(row);startAttachmentProducer(row);return waiter.promise}if(row.size>maxBytes){row.error=`${row.fileName} is larger than the ${maxSizeLabel} attachment limit.`;row.failureStage=`validation`;row.phase=`failed`;reportAttachmentError(row.error,`Attachment upload failed.`,{notify:false});return Promise.resolve(null)}row.bytesSent=0;row.progress=null;row.error=``;row.failureStage=``;row.phase=`queued`;const waiter=createWaiter(row);uploadQueue.push(row);pumpQueue();return waiter.promise}function detachRow(row){if([`preparing`,`queued`,`uploading`].includes(row.phase))cancelAttachment(row);row.retained=false;rowsById.delete(row.clientId);settleWaiter(row,null)}function removeAttachment(attachment={}){const row=canonicalRow(attachment);if(!row)return[];const removedReceipts=removeReadyReceipt(row);const removed=removedReceipts.length>0?removedReceipts:[row];const receiptToClean=removedReceipts[0]||row.receipt;detachRow(row);queueItems.value=queueItems.value.filter(candidate=>candidate.clientId!==row.clientId);if(receiptToClean)cleanupReceipt(row.sessionId,receiptToClean);return removed}function clearAttachments({accepted=true,attachmentIds=null}={}){if(!accepted)return abandonAttachments();const selectedIds=Array.isArray(attachmentIds)?new Set(attachmentIds):null;const cleared=attachments.value.filter(attachment=>!selectedIds||selectedIds.has(attachment.attachmentId));const readyIds=new Set(cleared.map(attachment=>attachment.clientId));const remaining=[];for(const row of[...queueItems.value]){if(selectedIds&&!readyIds.has(row.clientId)){remaining.push(row);continue}if(readyIds.has(row.clientId)){row.retained=false;rowsById.delete(row.clientId);continue}detachRow(row);if(row.receipt)cleanupReceipt(row.sessionId,row.receipt)}attachments.value=attachments.value.filter(attachment=>!readyIds.has(attachment.clientId));queueItems.value=remaining;return cleared}async function abandonAttachments({onlySessionId=``}={}){const normalizedSessionId=String(onlySessionId||``).trim();const rows=queueItems.value.filter(row=>!normalizedSessionId||row.sessionId===normalizedSessionId);const rowIds=new Set(rows.map(row=>row.clientId));const readyReceipts=rows.map(row=>row.receipt).filter(Boolean);const attempts=[...activeAttempts.values()].filter(attempt=>rowIds.has(attempt.row.clientId));for(const row of rows)detachRow(row);queueItems.value=queueItems.value.filter(row=>!rowIds.has(row.clientId));attachments.value=attachments.value.filter(attachment=>!rowIds.has(attachment.clientId));const readyCleanup=readyReceipts.map(attachment=>cleanupReceipt(attachment.sessionId,attachment));await Promise.allSettled([...readyCleanup,...attempts.map(attempt=>attempt.settled).filter(Boolean)]);await waitForAttachmentCleanup();return rows}async function waitForAttachmentCleanup(){while(cleanupTasks.size>0)await Promise.allSettled([...cleanupTasks])}async function disposeAttachments(){if(disposed){await waitForAttachmentCleanup();return[]}disposed=true;stopSessionWatch?.();stopSessionWatch=null;return abandonAttachments()}function handleDragEnter(event){if(!assistantAttachmentEventHasFiles(event))return;dragDepth.value+=1;if(event?.dataTransfer)event.dataTransfer.dropEffect=`copy`}function handleDragOver(event){if(event?.dataTransfer)event.dataTransfer.dropEffect=`copy`}function handleDragLeave(){dragDepth.value=Math.max(0,dragDepth.value-1)}function createQueueRow({currentSessionId,file=null,fileName=`attachment`,phase=`queued`,producer=null,size=0}={}){const normalizedSize=Number(file?.size??size)||0;const row=reactive({activeHandoffToken:null,activeToken:null,attachmentId:``,bytesSent:0,clientId:nextAttachmentClientId(),error:``,failureStage:``,file,fileName:file?attachmentFileName(file):String(fileName||`attachment`),path:``,phase,producer,producerAbortController:null,producerToken:null,progress:null,receipt:null,retained:true,sessionId:currentSessionId,size:normalizedSize,totalBytes:normalizedSize,waiter:null});rowsById.set(row.clientId,row);queueItems.value.push(row);createWaiter(row);return row}function queuePreparedFile(row,file,waiter=row.waiter){const preparedFile=assistantAttachmentFiles([file])[0];if(!preparedFile)throw new Error(`The prepared attachment did not produce a file.`);row.file=preparedFile;row.fileName=attachmentFileName(preparedFile);row.size=Number(preparedFile.size)||0;row.totalBytes=row.size;if(row.size>maxBytes){row.error=`${row.fileName} is larger than the ${maxSizeLabel} attachment limit.`;row.failureStage=`validation`;row.phase=`failed`;settleWaiter(row,null,waiter);reportAttachmentError(row.error,`Attachment upload failed.`,{notify:false});return false}row.phase=`queued`;uploadQueue.push(row);pumpQueue();return true}function startAttachmentProducer(row){const token=Symbol(`${row.clientId}-producer`);const waiter=row.waiter;const abortController=typeof AbortController===`function`?new AbortController:null;row.file=null;row.producerAbortController=abortController;row.producerToken=token;row.phase=`preparing`;row.error=``;row.failureStage=``;row.producerSettled=Promise.resolve().then(()=>row.producer({signal:abortController?.signal})).then(file=>{if(row.producerToken!==token||!row.retained||disposed){settleWaiter(row,null,waiter);return null}row.producerAbortController=null;row.producerToken=null;try{queuePreparedFile(row,file,waiter)}catch(error){row.error=String(error?.message||error||`Attachment preparation failed.`);row.failureStage=`preparing`;row.phase=`failed`;settleWaiter(row,null,waiter);reportAttachmentError(error,`Attachment preparation failed.`,{notify:false})}return file},error=>{if(row.producerToken!==token||!row.retained||disposed){settleWaiter(row,null,waiter);return null}row.producerAbortController=null;row.producerToken=null;if(error?.name===`AbortError`){row.phase=`cancelled`;row.error=``}else{row.error=String(error?.message||error||`Attachment preparation failed.`);row.failureStage=`preparing`;row.phase=`failed`;reportAttachmentError(error,`Attachment preparation failed.`,{notify:false})}settleWaiter(row,null,waiter);return null})}function uploadFileProducer({fileName=`Preparing attachment…`,produce}={}){const currentSessionId=assistantAttachmentSessionId(sessionId);if(!canAddFiles.value||typeof produce!==`function`){if(atCapacity.value)reportAttachmentError(`A message can keep at most ${maxItems} attachments.`);return Promise.resolve(null)}status.value=``;const row=createQueueRow({currentSessionId,fileName,phase:`preparing`,producer:produce});const waiter=row.waiter;startAttachmentProducer(row);return waiter.promise}async function uploadFiles(files=[]){const uploadableFiles=assistantAttachmentFiles(files);const currentSessionId=assistantAttachmentSessionId(sessionId);if(uploadableFiles.length<1||!currentSessionId||disposed||!assistantAttachmentUploadAllowed(canUpload)||typeof uploadAttachment!==`function`)return[];status.value=``;const availableSlots=Math.max(0,maxItems-retainedItemCount.value);const acceptedFiles=uploadableFiles.slice(0,availableSlots);if(acceptedFiles.length<uploadableFiles.length)reportAttachmentError(`A message can keep at most ${maxItems} attachments.`);const waiters=[];for(const file of acceptedFiles){const row=createQueueRow({currentSessionId,file});const waiter=row.waiter;waiters.push(waiter.promise);if(row.size>maxBytes){row.error=`${row.fileName} is larger than the ${maxSizeLabel} attachment limit.`;row.failureStage=`validation`;row.phase=`failed`;settleWaiter(row,null);reportAttachmentError(row.error,`Attachment upload failed.`,{notify:false})}else uploadQueue.push(row)}pumpQueue();return(await Promise.all(waiters)).filter(attachment=>attachment&&attachments.value.some(candidate=>candidate.clientId===attachment.clientId))}async function handleDrop(event){resetDragState();return uploadFiles(assistantAttachmentFilesFromDropEvent(event))}async function handlePaste(event){const files=assistantAttachmentFilesFromPasteEvent(event);if(files.length<1){if(assistantAttachmentClipboardLocalFileReference(event))reportAttachmentError(`Copied local files cannot be pasted from this browser. Drop the file or use Attach files.`);return[]}if(!assistantAttachmentClipboardText(event))event?.preventDefault?.();return uploadFiles(files)}stopSessionWatch=watch(()=>assistantAttachmentSessionId(sessionId),(nextSessionId,previousSessionId)=>{if(nextSessionId!==previousSessionId&&previousSessionId)abandonAttachments({onlySessionId:previousSessionId})},{flush:`sync`});if(getCurrentScope())onScopeDispose(()=>{disposeAttachments()});return{maxBytes,maxItems,abandonAttachments,aggregateProgress,attachments,atCapacity,canAddFiles,cancelAttachment,canSubmit,clearAttachments,clearStatus,disposeAttachments,dragActive,hasUnresolved,handleDragEnter,handleDragLeave,handleDragOver,handleDrop,handlePaste,queueItems,removeAttachment,resetDragState,retryAttachment,status,uploading,uploadFiles,uploadFileProducer,waitForAttachmentCleanup}}function parseIntegrationSetupRequest(message){if(message?.role!==`assistant`||typeof message.text!==`string`)return null;const lines=message.text.replace(/\r\n/gu,`
|
|
3
3
|
`).split(`
|
|
4
4
|
`);let fence=null;for(let index=0;index<lines.length;index+=1){const line=lines[index];if(fence){const closing=/^ {0,3}(`{3,}|~{3,})\s*$/u.exec(line);if(!closing||closing[1][0]!==fence.character||closing[1].length<fence.length)continue;if(fence.request){if(lines.slice(index+1).some(tail=>tail.trim()))return null;const payload=lines.slice(fence.start+1,index).join(`
|
|
5
5
|
`);if(payload.length>1024)return null;let value;try{value=JSON.parse(payload)}catch{return null}if(!value||Array.isArray(value)||typeof value!==`object`||Object.keys(value).length!==1||typeof value.integrationId!==`string`||!value.integrationId.trim()||value.integrationId.length>200||/[\p{Cc}\p{Cf}]/u.test(value.integrationId))return null;return{integrationId:value.integrationId,text:lines.slice(0,fence.start).join(`
|
|
6
6
|
`).trimEnd()}}fence=null;continue}const opening=/^ {0,3}(`{3,}|~{3,})(.*)$/u.exec(line);if(opening)fence={character:opening[1][0],length:opening[1].length,start:index,request:opening[1]==="```"&&opening[2]===`vibe64-integration`}}return null}var VIBE64_UPLOAD_MAX_BYTES=524288e3;var VIBE64_UPLOAD_MAX_LABEL=`500 MiB`;var ATTACHMENT_UPLOAD_ERROR=`Assistant attachment could not be uploaded.`;function normalizeSessionId(sessionId=``){return String(sessionId||``).trim()}function missingSessionResponse(){return{error:`Vibe64 session id is required.`,ok:false}}function missingAttachmentResponse(){return{error:`Attachment id is required.`,ok:false}}function attachmentUploadAbortError(){const error=new Error(`Attachment upload was cancelled.`);error.name=`AbortError`;return error}function attachmentUploadPayload(request){const response=request?.response;if(response&&typeof response===`object`)return response;const source=typeof response===`string`?response:String(request?.responseText||``);if(!source.trim())return null;try{return JSON.parse(source)}catch{return null}}function attachmentUploadProgress(event={},fileSize=0){const totalBytes=Number.isFinite(Number(fileSize))?Math.max(0,Number(fileSize)):0;const transportTotal=event.lengthComputable===true&&Number.isFinite(Number(event.total))?Math.max(0,Number(event.total)):0;if(transportTotal<1)return{bytesSent:0,progress:null,totalBytes};const transportLoaded=Number.isFinite(Number(event.loaded))?Number(event.loaded):0;const progress=Math.min(1,Math.max(0,transportLoaded/transportTotal));return{bytesSent:Math.min(totalBytes,Math.floor(totalBytes*progress)),progress,totalBytes}}function uploadAttachmentRequest({file,onProgress=null,path,signal=null}={}){return new Promise((resolve,reject)=>{if(signal?.aborted){reject(attachmentUploadAbortError());return}let request;try{request=new globalThis.XMLHttpRequest}catch{reject(new Error(`${ATTACHMENT_UPLOAD_ERROR} Browser upload support is unavailable.`));return}let settled=false;const progressHandler=event=>{if(typeof onProgress!==`function`)return;try{onProgress(attachmentUploadProgress(event,file.size))}catch{}};const cleanup=()=>{signal?.removeEventListener?.(`abort`,abortHandler);request.upload?.removeEventListener?.(`progress`,progressHandler);request.onload=null;request.onerror=null;request.onabort=null;request.ontimeout=null};const settle=(callback,value)=>{if(settled)return;settled=true;cleanup();callback(value)};const abortHandler=()=>{request.abort();settle(reject,attachmentUploadAbortError())};try{const body=new FormData;body.append(`file`,file,String(file.name||`attachment`));request.open(`POST`,resolveStudioRequestUrl(path),true);request.onload=()=>{const payload=attachmentUploadPayload(request);if(request.status>=200&&request.status<300){if(payload&&typeof payload===`object`){settle(resolve,payload);return}settle(reject,new Error(`Assistant attachment upload returned an invalid response.`));return}const error=vibe64ApiError(payload||{},`${ATTACHMENT_UPLOAD_ERROR} (HTTP ${request.status||`unknown`})`);error.status=Number(request.status||0);error.statusCode=error.status;settle(reject,error)};request.onerror=()=>{settle(reject,new Error(`${ATTACHMENT_UPLOAD_ERROR} Check your connection and try again.`))};request.onabort=()=>{settle(reject,attachmentUploadAbortError())};request.ontimeout=()=>{settle(reject,new Error(`${ATTACHMENT_UPLOAD_ERROR} The request timed out.`))};request.upload?.addEventListener?.(`progress`,progressHandler);signal?.addEventListener?.(`abort`,abortHandler,{once:true});if(signal?.aborted){abortHandler();return}request.withCredentials=true;request.setRequestHeader(`Accept`,`application/json`);request.send(body)}catch(error){settle(reject,error instanceof Error?error:new Error(ATTACHMENT_UPLOAD_ERROR))}})}function useVibe64AttachmentCommands(){const paths=usePaths();const sessionsApiPath=computed(()=>paths.api(VIBE64_SESSIONS_API_SUFFIX,{surface:`app`}));const deleteAttachmentCommand=useCommand({access:`never`,apiSuffix:VIBE64_SESSIONS_API_SUFFIX,buildCommandOptions:(_payload,{context})=>({method:`DELETE`,path:vibe64AgentAttachmentFilePath(sessionsApiPath.value,context.sessionId,context.attachmentId)}),fallbackRunError:`Assistant attachment could not be removed.`,messages:{error:`Assistant attachment could not be removed.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.agent-attachment.delete`,suppressSuccessMessage:true,surfaceId:`app`,writeMethod:`DELETE`});async function deleteAttachment(sessionId=``,attachmentId=``){const normalizedSessionId=normalizeSessionId(sessionId);if(!normalizedSessionId)return missingSessionResponse();const normalizedAttachmentId=String(attachmentId||``).trim();if(!normalizedAttachmentId)return missingAttachmentResponse();return await deleteAttachmentCommand.run({attachmentId:normalizedAttachmentId,sessionId:normalizedSessionId})}async function uploadAttachment(sessionId=``,file=null,{onProgress=null,signal=null}={}){const normalizedSessionId=normalizeSessionId(sessionId);if(!normalizedSessionId)return missingSessionResponse();if(!file||typeof file.arrayBuffer!==`function`)return{error:`Attachment file is required.`,ok:false};return await uploadAttachmentRequest({file,onProgress,path:vibe64AgentAttachmentPath(sessionsApiPath.value,normalizedSessionId),signal})}return{deleteAttachment,uploadAttachment}}var AGENT_ATTACHMENT_UPLOAD_CONCURRENCY=1;function useAgentAttachments(options={}){return useAssistantAttachments({...options,maxBytes:VIBE64_UPLOAD_MAX_BYTES,uploadConcurrency:1})}var _hoisted_1$9={role:`status`};var _sfc_main$13={__name:`Vibe64AttachmentDialog`,props:{attachment:{type:Object,default:null},sessionId:{type:String,required:true}},emits:[`close`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const paths=usePaths();const url=computed(()=>resolveStudioRequestUrl(vibe64AgentAttachmentFilePath(paths.api(VIBE64_SESSIONS_API_SUFFIX,{surface:`app`}),props.sessionId,props.attachment?.attachmentId)));const imageSupported=computed(()=>conversationAttachmentContentType(props.attachment?.fileName).startsWith(`image/`));const checking=ref(false);const unavailable=ref(``);watch(()=>props.attachment?url.value:``,async(value,_previous,onCleanup)=>{unavailable.value=``;checking.value=Boolean(value);if(!value)return;const controller=new AbortController;onCleanup(()=>controller.abort());try{const response=await fetch(value,{method:`HEAD`,signal:controller.signal});if(!response.ok)unavailable.value=response.status===410?`This attachment is no longer retained. Chat text and the attachment description remain available.`:`This attachment could not be loaded. Close this preview and try again.`}catch{if(!controller.signal.aborted)unavailable.value=`This attachment could not be loaded. Close this preview and try again.`}finally{if(!controller.signal.aborted)checking.value=false}},{immediate:true});return(_ctx,_cache)=>{return __props.attachment&&(checking.value||unavailable.value)?(openBlock(),createBlock(VDialog,{key:0,"model-value":true,"max-width":`640`,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>!$event&&emit(`close`))},{default:withCtx(()=>[createVNode(VCard,{title:__props.attachment.fileName},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_1$9,toDisplayString(checking.value?`Checking attachment…`:unavailable.value),1)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{onClick:_cache[0]||(_cache[0]=$event=>emit(`close`))},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Close`,-1)])]),_:1})]),_:1})]),_:1},8,[`title`])]),_:1})):(openBlock(),createBlock(unref(AssistantAttachmentPreview_default),{key:1,attachment:__props.attachment,"download-url":url.value,"preview-url":imageSupported.value?`${url.value}?inline=1`:``,onClose:_cache[2]||(_cache[2]=$event=>emit(`close`))},null,8,[`attachment`,`download-url`,`preview-url`]))}}};var _sfc_main$12=Object.assign({inheritAttrs:false},{__name:`Vibe64AttachmentQueue`,props:{sessionId:{type:String,default:``}},setup(__props){const props=__props;const selectedAttachment=ref(null);const queue=ref(null);watch(()=>props.sessionId,()=>{selectedAttachment.value=null});function focusComposer(){const root=queue.value?.$el;const container=root?.closest?.(`.assistant-prompt-input, .vibe64-terminal-surface`)||root?.parentElement;((container?.classList?.contains(`vibe64-terminal-surface`)?container.querySelector(`button[aria-controls^='vibe64-terminal-body-']:not([disabled])`):null)||container?.querySelector?.(`textarea:not([disabled]), [contenteditable='true'], button:not([disabled])`))?.focus()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(unref(AssistantAttachmentQueue_default),mergeProps({ref_key:`queue`,ref:queue},_ctx.$attrs,{"preview-enabled":Boolean(__props.sessionId),onPreview:_cache[0]||(_cache[0]=$event=>selectedAttachment.value=$event),onFocusInput:focusComposer}),null,16,[`preview-enabled`]),selectedAttachment.value?(openBlock(),createBlock(_sfc_main$13,{key:0,attachment:selectedAttachment.value,"session-id":__props.sessionId,onClose:_cache[1]||(_cache[1]=$event=>selectedAttachment.value=null)},null,8,[`attachment`,`session-id`])):createCommentVNode(``,true)],64)}}});function labelComposerAttachments(attachments=[]){let images=0;let files=0;return attachments.map(attachment=>({...attachment,reference:conversationAttachmentReference(attachment,conversationAttachmentContentType(attachment.fileName).startsWith(`image/`)?++images:++files)}))}function updateComposerAttachmentReferences(text,previous,next){const replacements=new Map(previous.filter(attachment=>attachment.reference).map(attachment=>[attachment.reference,next.find(candidate=>candidate.attachmentId===attachment.attachmentId)?.reference||``]));return String(text||``).replace(/\[(?:Image|File) #[1-9][0-9]{0,3}\]/gu,reference=>replacements.has(reference)?replacements.get(reference):reference)}var _hoisted_1$8=[`disabled`];var _sfc_main$11=Object.assign({inheritAttrs:false},{__name:`Vibe64AutopilotPromptTextarea`,props:{ariaLabel:{default:``,type:String},savedAttachments:{type:Array,default:null},attachmentsOwnedByConversation:Boolean,attachmentsEnabled:{default:true,type:Boolean},autoGrow:{default:true,type:Boolean},disabled:{default:false,type:Boolean},describedBy:{default:``,type:String},errorMessages:{default:()=>[],type:[Array,String]},hint:{default:``,type:String},label:{default:``,type:String},modelValue:{default:``,type:String},persistentHint:{default:false,type:Boolean},placeholderAffectsHeight:{default:true,type:Boolean},placeholder:{default:``,type:String},rows:{default:4,type:[Number,String]},density:{default:`default`,type:String},submitOnEnter:{default:false,type:Boolean},submitEnabled:{default:true,type:Boolean},tabToSubmit:{default:false,type:Boolean},sessionId:{default:``,type:String},variant:{default:`outlined`,type:String}},emits:[`attachment-state-change`,`attachments-change`,`blur`,`escape`,`focus`,`input-activity`,`submit`,`tab-to-submit`,`update:modelValue`],setup(__props,{expose:__expose,emit:__emit}){const emit=__emit;const props=__props;const attachmentCommands=useVibe64AttachmentCommands();const uploadAttachment=attachmentCommands.uploadAttachment;const attachmentFeedback=useUiFeedback({source:`vibe64.agent-attachment.upload.feedback`});const attachments=useAgentAttachments({canUpload:()=>props.attachmentsEnabled&&!props.disabled,deleteAttachment:deleteUploadedFile,onError:attachmentFeedback.error,onUploaded:async uploaded=>{const textarea=textareaRef.value;const text=textarea?.value??props.modelValue;const position=textarea?.selectionEnd??text.length;const references=uploaded.map(attachment=>uploadedAttachments.value.find(item=>item.attachmentId===attachment.attachmentId).reference).join(` `);const before=text.slice(0,position);const after=text.slice(position);const inserted=`${before&&!/\s$/u.test(before)?` `:``}${references} `;const value=before+inserted+after;if(textarea){textarea.value=value;textarea.setSelectionRange(position+inserted.length,position+inserted.length)}emit(`update:modelValue`,value);queueResizeTextarea();emit(`attachments-change`,[...uploadedAttachments.value])},sessionId:computed(()=>props.sessionId),uploadAttachment});const dragActive=attachments.dragActive;const restoredAttachments=computed(()=>(props.savedAttachments||[]).filter(saved=>!attachments.attachments.value.some(file=>file.attachmentId===saved.attachmentId)));const uploadedAttachments=computed(()=>labelComposerAttachments([...restoredAttachments.value,...attachments.attachments.value]));const attachmentUploading=attachments.uploading;const queueItems=computed(()=>[...restoredAttachments.value.map(file=>({...file,phase:`ready`,receipt:file})),...attachments.queueItems.value].map(row=>({...row,receipt:uploadedAttachments.value.find(file=>file.attachmentId===row.attachmentId)||row.receipt})));const availableSlots=computed(()=>Math.max(0,attachments.maxItems-queueItems.value.filter(row=>row.phase!==`cancelled`).length));const attachmentState=computed(()=>Object.freeze({atCapacity:availableSlots.value===0,canAddFiles:attachments.canAddFiles.value&&availableSlots.value>0,canSubmit:attachments.canSubmit.value,count:queueItems.value.length,hasUnresolved:attachments.hasUnresolved.value,uploading:attachmentUploading.value}));const fileInput=ref(null);const presentationProps=computed(()=>{const input={...props};delete input.sessionId;delete input.attachmentsEnabled;delete input.savedAttachments;delete input.attachmentsOwnedByConversation;return input});const promptInput=ref(null);const textareaRef=computed(()=>promptInput.value?.inputElement);function queueResizeTextarea(){promptInput.value?.queueResizeTextarea()}function preserveHeightForNextModelValue(){return promptInput.value?.preserveHeightForNextModelValue()}const canUseFilePicker=computed(()=>Boolean(attachmentState.value.canAddFiles));function deleteUploadedFile(sessionId,attachmentId){if(props.attachmentsOwnedByConversation&&props.savedAttachments?.some(file=>file.attachmentId===attachmentId))return Promise.resolve({ok:true});return attachmentCommands.deleteAttachment(sessionId,attachmentId)}function removeUploadedAttachment(attachment={}){const previous=uploadedAttachments.value;const removed=attachments.removeAttachment(attachment);const saved=restoredAttachments.value.find(file=>file.attachmentId===attachment.attachmentId);if(!removed.length&&!saved)return;if(!removed.length)deleteUploadedFile(props.sessionId,saved.attachmentId).catch(error=>attachmentFeedback.error(error));const next=labelComposerAttachments(previous.filter(file=>file.attachmentId!==attachment.attachmentId));const value=updateComposerAttachmentReferences(textareaRef.value?.value??props.modelValue,previous,next);if(textareaRef.value)textareaRef.value.value=value;emit(`update:modelValue`,value);emit(`attachments-change`,next)}function clearAttachments({attachmentIds=null}={}){if(!queueItems.value.length)return false;const previous=uploadedAttachments.value;const accepted=new Set(attachmentIds||previous.map(file=>file.attachmentId));attachments.clearAttachments({accepted:true,attachmentIds});const remaining=previous.filter(file=>!accepted.has(file.attachmentId));const next=labelComposerAttachments(remaining);const text=textareaRef.value?.value??props.modelValue;const value=updateComposerAttachmentReferences(text,remaining,next);if(value!==text){if(textareaRef.value)textareaRef.value.value=value;emit(`update:modelValue`,value)}emit(`attachments-change`,next);return true}function attachmentsCanSubmit(){return attachments.canSubmit.value}async function attachFiles(files=[]){const accepted=Array.from(files).slice(0,availableSlots.value);if(accepted.length<files.length)attachmentFeedback.error(`A message can keep at most ${attachments.maxItems} attachments.`);return attachments.uploadFiles(accepted)}async function attachFileProducer(options={}){if(!attachmentState.value.canAddFiles)return[];const uploaded=await attachments.uploadFileProducer(options);return uploaded?[uploaded]:[]}async function handleFileInputChange(event={}){const files=Array.from(event?.target?.files||[]);if(event?.target)event.target.value=``;await attachFiles(files)}function handleDrop(event){attachments.resetDragState();attachFiles(assistantAttachmentFilesFromDropEvent(event))}function openFilePicker(){if(!canUseFilePicker.value)return false;fileInput.value?.click();return true}function focusTextarea(options={preventScroll:true}){textareaRef.value?.focus?.(options)}const handleDragEnter=attachments.handleDragEnter;const handleDragOver=attachments.handleDragOver;const handleDragLeave=attachments.handleDragLeave;function handlePaste(event){const files=assistantAttachmentFilesFromPasteEvent(event);if(!files.length)return attachments.handlePaste(event);if(!event.clipboardData?.getData(`text/plain`))event.preventDefault?.();return attachFiles(files)}watch(()=>props.savedAttachments,files=>{if(!files)return;const removed=attachments.attachments.value.filter(file=>!files.some(saved=>saved.attachmentId===file.attachmentId));if(removed.length)attachments.clearAttachments({attachmentIds:removed.map(file=>file.attachmentId)})});onBeforeUnmount(()=>{if(props.savedAttachments)attachments.clearAttachments({attachmentIds:attachments.attachments.value.map(file=>file.attachmentId)})});watch(attachmentState,state=>{emit(`attachment-state-change`,state)},{immediate:true});__expose({attachmentState,attachmentsCanSubmit,attachFileProducer,attachFiles,canSubmit:attachments.canSubmit,clearAttachments,focus:focusTextarea,openFilePicker,preserveHeightForNextModelValue,queueItems,inputElement:textareaRef});return(_ctx,_cache)=>{return openBlock(),createBlock(unref(AssistantPromptInput_default),mergeProps({ref_key:`promptInput`,ref:promptInput},{...presentationProps.value,..._ctx.$attrs},{"attachment-state":attachmentState.value,dragging:unref(dragActive),"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>emit(`update:modelValue`,$event)),onBlur:_cache[1]||(_cache[1]=$event=>emit(`blur`,$event)),onFocus:_cache[2]||(_cache[2]=$event=>emit(`focus`,$event)),onEscape:_cache[3]||(_cache[3]=$event=>emit(`escape`,$event)),onInputActivity:_cache[4]||(_cache[4]=$event=>emit(`input-activity`)),onSubmit:_cache[5]||(_cache[5]=$event=>emit(`submit`)),onTabToSubmit:_cache[6]||(_cache[6]=$event=>emit(`tab-to-submit`)),onDragenter:withModifiers(unref(handleDragEnter),[`prevent`]),onDragover:withModifiers(unref(handleDragOver),[`prevent`]),onDragleave:withModifiers(unref(handleDragLeave),[`prevent`]),onDrop:withModifiers(handleDrop,[`prevent`]),onPaste:handlePaste}),createSlots({attachments:withCtx(()=>[createBaseVNode(`input`,{ref_key:`fileInput`,ref:fileInput,disabled:!canUseFilePicker.value,hidden:``,multiple:``,type:`file`,onChange:handleFileInputChange},null,40,_hoisted_1$8),createVNode(_sfc_main$12,{"session-id":__props.sessionId,items:queueItems.value,onCancel:unref(attachments).cancelAttachment,onRemove:removeUploadedAttachment,onRetry:unref(attachments).retryAttachment},null,8,[`session-id`,`items`,`onCancel`,`onRetry`])]),_:2},[_ctx.$slots[`input-start`]?{name:`input-start`,fn:withCtx(()=>[renderSlot(_ctx.$slots,`input-start`)]),key:`0`}:void 0,_ctx.$slots.footer?{name:`footer`,fn:withCtx(()=>[renderSlot(_ctx.$slots,`footer`,{attachmentState:attachmentState.value})]),key:`1`}:void 0]),1040,[`attachment-state`,`dragging`,`onDragenter`,`onDragover`,`onDragleave`])}}});var _sfc_main$10={__name:`Vibe64ConversationAttachments`,props:{sessionId:{type:String,default:``},items:{type:Array,default:()=>[]}},setup(__props){const props=__props;const attachments=computed(()=>normalizeVibe64ConversationAttachments(props.items));const selectedAttachment=ref(null);watch(()=>props.sessionId,()=>{selectedAttachment.value=null});return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(unref(AssistantMessageAttachments_default),{attachments:attachments.value,"preview-enabled":Boolean(__props.sessionId),onPreview:_cache[0]||(_cache[0]=$event=>$event.attachmentId&&(selectedAttachment.value=$event))},null,8,[`attachments`,`preview-enabled`]),selectedAttachment.value?(openBlock(),createBlock(_sfc_main$13,{key:0,attachment:selectedAttachment.value,"session-id":__props.sessionId,onClose:_cache[1]||(_cache[1]=$event=>selectedAttachment.value=null)},null,8,[`attachment`,`session-id`])):createCommentVNode(``,true)],64)}}};var _sfc_main$9={__name:`Vibe64ConversationStatus`,props:{message:{type:Object,required:true}},emits:[`check-delivery`,`link-click`],setup(__props){return(_ctx,_cache)=>{return __props.message.messageId?.startsWith(`assistant-routing-outcome:`)?(openBlock(),createElementBlock(`details`,{key:__props.message.messageId},[_cache[4]||(_cache[4]=createBaseVNode(`summary`,{class:`text-body-small py-2`},`Workflow details`,-1)),createVNode(unref(_sfc_main$14),{message:__props.message,onCheckDelivery:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`check-delivery`,$event)),onLinkClick:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`link-click`,$event))},createSlots({_:2},[_ctx.$slots.default?{name:`default`,fn:withCtx(()=>[renderSlot(_ctx.$slots,`default`,{},void 0,true)]),key:`0`}:void 0]),1032,[`message`])])):(openBlock(),createBlock(unref(_sfc_main$14),{key:1,message:__props.message,onCheckDelivery:_cache[2]||(_cache[2]=$event=>_ctx.$emit(`check-delivery`,$event)),onLinkClick:_cache[3]||(_cache[3]=$event=>_ctx.$emit(`link-click`,$event))},createSlots({_:2},[_ctx.$slots.default?{name:`default`,fn:withCtx(()=>[renderSlot(_ctx.$slots,`default`,{},void 0,true)]),key:`0`}:void 0]),1032,[`message`]))}}};var Vibe64ConversationStatus_default=_plugin_vue_export_helper_default(_sfc_main$9,[[`__scopeId`,`data-v-3e929cca`]]);function conversationAttribution(selection,routing){return{assistantLabel:!selection?`agent`:`${routing?.resolvedMode?`${assistantModeLabel(routing.resolvedMode)} · `:``}${vibe64AssistantSelectionLabel(selection)}`,assistantDetails:selection?`${vibe64AssistantSelectionLabel(selection)}\nProvider: ${selection.modelProviderId}`:void 0}}function usesCommentaryForThinking(selection){return[`codex`,`claude`].includes(selection?.engineId)&&[`deepseek`,`zai-coding-plan`].includes(selection?.modelProviderId)}function thinkingMessagePresentation(message,selection){if(!message||!usesCommentaryForThinking(message.assistantSelection||selection))return message;if(message.role===`commentary`)return{...message,role:`thinking`};if(message.role===`thinking`)return null;return message}var _hoisted_1$7={key:2,class:`starred-files-list__empty`};var _hoisted_2$7={key:3,class:`starred-files-list__empty`};var _hoisted_3$7={key:4,"aria-label":`Starred files`};var _hoisted_4$7=[`aria-label`,`disabled`,`title`,`onClick`];var _hoisted_5$7={key:0};var _hoisted_6$7={key:1};var _sfc_main$8={__name:`Vibe64StarredFilesList`,props:{bookmarks:{type:Object,required:true},compact:{type:Boolean,default:false},files:{type:Array,default:null}},emits:[`open-file`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const displayedFiles=computed(()=>props.files??props.bookmarks.files.value);return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,{class:normalizeClass([`starred-files-list`,{"starred-files-list--compact":__props.compact}])},[__props.bookmarks.error.value?(openBlock(),createBlock(VAlert,{key:0,density:`compact`,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.bookmarks.error.value)+` `,1),createVNode(VBtn,{size:`small`,variant:`text`,onClick:__props.bookmarks.refresh},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(`Retry`,-1)])]),_:1},8,[`onClick`])]),_:1})):createCommentVNode(``,true),__props.bookmarks.loading.value&&!__props.bookmarks.files.value.length?(openBlock(),createBlock(VSkeletonLoader,{key:1,type:__props.compact?`list-item@2`:`list-item-two-line@2`},null,8,[`type`])):!__props.bookmarks.files.value.length?(openBlock(),createElementBlock(`p`,_hoisted_1$7,` Star files in Files to keep them handy while chatting. Only you see your stars. `)):!displayedFiles.value.length?(openBlock(),createElementBlock(`p`,_hoisted_2$7,`No matching starred files.`)):(openBlock(),createElementBlock(`ul`,_hoisted_3$7,[(openBlock(true),createElementBlock(Fragment,null,renderList(displayedFiles.value,file=>{return openBlock(),createElementBlock(`li`,{key:file.path},[createBaseVNode(`button`,{class:`starred-files-list__open`,"aria-label":__props.compact?file.path:void 0,disabled:!file.available,title:file.available?file.path:`${file.path}: ${file.reason}`,type:`button`,onClick:$event=>emit(`open-file`,file.path)},[createBaseVNode(`strong`,null,toDisplayString(file.path.split(`/`).at(-1)),1),!__props.compact?(openBlock(),createElementBlock(`span`,_hoisted_5$7,toDisplayString(file.path),1)):createCommentVNode(``,true),!__props.compact&&!file.available?(openBlock(),createElementBlock(`span`,_hoisted_6$7,toDisplayString(file.reason||`Not found in this session`),1)):createCommentVNode(``,true)],8,_hoisted_4$7),createVNode(VBtn,{"aria-label":`Unstar ${file.path}`,disabled:__props.bookmarks.pendingPaths.value.includes(file.path),icon:unref(mdiStar),size:`small`,title:`Unstar file`,variant:`text`,onClick:$event=>__props.bookmarks.toggle(file.path)},null,8,[`aria-label`,`disabled`,`icon`,`onClick`])])}),128))]))],2)}}};var Vibe64StarredFilesList_default=_plugin_vue_export_helper_default(_sfc_main$8,[[`__scopeId`,`data-v-8ce15272`]]);var _hoisted_1$6=[`aria-label`];var _hoisted_2$6={class:`vibe64-project-message__avatar`,"aria-hidden":`true`};var _hoisted_3$6={class:`vibe64-project-message__bubble`};var _hoisted_4$6={class:`text-body-small`};var _hoisted_5$6=[`href`];var _hoisted_6$6=[`aria-expanded`];var _hoisted_7$6=[`role`];var _hoisted_8$6={key:2,class:`vibe64-project-message__time`};var _sfc_main$7={__name:`Vibe64ProjectMessage`,props:{details:{type:Object,required:true},at:{type:String,default:``}},setup(__props){const props=__props;const sent=computed(()=>props.details.direction===`sent`);const project=computed(()=>sent.value?props.details.projectSlug:props.details.sourceProject);const sessionId=computed(()=>sent.value?props.details.sessionId:props.details.sourceSession);const paths=usePaths();const sessions=useEndpointResource({enabled:computed(()=>Boolean(project.value&&sessionId.value)),path:computed(()=>paths.api(VIBE64_SESSIONS_API_SUFFIX,{surface:`app`,params:{slug:project.value}})),queryKey:computed(()=>vibe64SessionsQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,project.value)),readQuery:{limit:20},queryOptions:{refetchOnMount:false,refetchOnWindowFocus:false},realtime:{events:[VIBE64_SESSION_CHANGED_EVENT,`connect`],matches:({payload={}}={})=>(!payload.projectSlug||payload.projectSlug===project.value)&&(!payload.reason||payload.reason===`session-renamed`)}});const sessionLabel=computed(()=>{const session=sessions.data.value?.sessions?.find(item=>item.sessionId===sessionId.value);const name=String(session?.sessionName||session?.metadata?.issue_word||``).trim();return name&&name!==sessionId.value?`${name} (${sessionId.value})`:sessionId.value});const expanded=ref(false);watch(()=>props.details.body,()=>{expanded.value=false});const preview=computed(()=>{const text=String(props.details.body||``);const lines=text.split(/\r\n?|\n/u);if([...text].length<=360&&lines.length<=4)return``;return`${[...lines.slice(0,4).join(`
|
|
7
7
|
`)].slice(0,280).join(``).trimEnd()}…`});const blocks=computed(()=>parseLongTextReviewBlocks(!expanded.value&&preview.value?preview.value:props.details.body,{preserveParagraphLineBreaks:true}));const projectLink=computed(()=>`/app/project/${encodeURIComponent(project.value)}?session=${encodeURIComponent(sessionId.value)}&chat=main`);return(_ctx,_cache)=>{return openBlock(),createElementBlock(`article`,{class:normalizeClass([`vibe64-project-message`,{"vibe64-project-message--sent":sent.value}]),"aria-label":sent.value?`Sent agent message`:`Received agent message`},[createBaseVNode(`span`,_hoisted_2$6,[createVNode(VIcon,{icon:unref(mdiRobotOutline),size:`20`},null,8,[`icon`])]),createBaseVNode(`div`,_hoisted_3$6,[createBaseVNode(`header`,null,[createBaseVNode(`div`,null,[createBaseVNode(`strong`,null,toDisplayString(__props.details.sourceProject)+` assistant`,1),createBaseVNode(`div`,_hoisted_4$6,[createTextVNode(toDisplayString(sent.value?`To`:`From`)+` `,1),createBaseVNode(`a`,{href:projectLink.value},toDisplayString(sent.value?__props.details.projectSlug:__props.details.sourceProject),9,_hoisted_5$6),createTextVNode(` · `+toDisplayString(sessionLabel.value),1)])])]),createVNode(unref(LongTextPreviewBlocks_default),{class:`vibe64-project-message__body`,blocks:blocks.value},null,8,[`blocks`]),preview.value?(openBlock(),createElementBlock(`button`,{key:0,type:`button`,class:`vibe64-project-message__toggle`,"aria-expanded":expanded.value,onClick:_cache[0]||(_cache[0]=$event=>expanded.value=!expanded.value)},toDisplayString(expanded.value?`Show less`:`Read more`),9,_hoisted_6$6)):createCommentVNode(``,true),sent.value?(openBlock(),createElementBlock(`p`,{key:1,class:`text-body-small`,role:__props.details.status===`failed`?`alert`:`status`},[createTextVNode(toDisplayString(__props.details.status===`delivered`?`Delivered to assistant`:__props.details.status===`failed`?`Delivery failed`:`Accepted · delivery not confirmed`)+` `,1),__props.details.error?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(` — `+toDisplayString(__props.details.error),1)],64)):createCommentVNode(``,true)],8,_hoisted_7$6)):createCommentVNode(``,true),__props.at?(openBlock(),createElementBlock(`time`,_hoisted_8$6,toDisplayString(__props.at),1)):createCommentVNode(``,true)])],10,_hoisted_1$6)}}};var Vibe64ProjectMessage_default=_plugin_vue_export_helper_default(_sfc_main$7,[[`__scopeId`,`data-v-8a46107b`]]);function normalizeSourceRoot(value=``){return String(value||``).trim().replace(/\/+$/u,``)}function safeDecodePath(value=``){try{return decodeURIComponent(String(value||``))}catch{return String(value||``)}}function stripFileUrl(value=``){const text=String(value||``).trim();if(!text.startsWith(`file://`))return text;try{return new URL(text).pathname}catch{return text.replace(/^file:\/\//u,``)}}function splitLineSuffix(value=``){const text=String(value||``).trim();const match=text.match(/^(.*?)(?::(\d+)(?:-\d+)?)(?::(\d+))?$/u);if(!match)return{column:0,line:0,path:text};return{column:Number(match[3]||0)||0,line:Number(match[2]||0)||0,path:match[1]}}function normalizeRelativeSourcePath(value=``){const normalized=String(value||``).trim().replaceAll(`\\`,`/`).replace(/^\.\/+/u,``).replace(/\/+/gu,`/`);if(!normalized||normalized===`.`||normalized===`..`||normalized.startsWith(`../`)||normalized.startsWith(`/`)||/^[A-Za-z][A-Za-z0-9+.-]*:/u.test(normalized))return``;return normalized}function sessionRelativeSourcePath(value=``){const match=String(value||``).trim().replaceAll(`\\`,`/`).replace(/\/+/gu,`/`).match(/(?:^|\/)sessions\/active\/[^/]+\/(?:source|worktree)\/(.+)$/u);return match?normalizeRelativeSourcePath(match[1]):``}function sourceEditorLinkTarget({href=``,sourceRoot=``,text=``}={}){const root=normalizeSourceRoot(sourceRoot);const candidate=safeDecodePath(stripFileUrl(href||text)).replace(/^<|>$/gu,``).trim();if(!candidate||/^(https?:|mailto:|#)/iu.test(candidate))return null;const withLocation=splitLineSuffix(candidate);const normalizedPath=withLocation.path.replace(/\/+$/u,``);if(root&&(normalizedPath===root||normalizedPath.startsWith(`${root}/`)))return{column:withLocation.column,line:withLocation.line,path:normalizedPath.slice(root.length+1)};const sessionRelativePath=sessionRelativeSourcePath(withLocation.path);if(sessionRelativePath)return{column:withLocation.column,line:withLocation.line,path:sessionRelativePath};const relativePath=normalizeRelativeSourcePath(withLocation.path);if(!relativePath)return null;return{column:withLocation.column,line:withLocation.line,path:relativePath}}function markdownDocumentLinkTarget(documentPath=``,href=``){const[linkPath]=String(href||``).trim().split(/[?#]/u);if(!linkPath||/^[A-Za-z][A-Za-z0-9+.-]*:/u.test(linkPath))return``;const base=linkPath.startsWith(`/`)?[]:String(documentPath||``).split(`/`).slice(0,-1);const parts=[];for(const part of[...base,...safeDecodePath(linkPath).split(`/`)]){if(!part||part===`.`)continue;if(part===`..`){if(!parts.length)return``;parts.pop()}else parts.push(part)}return parts.join(`/`)}var LEARNING_GUIDANCE_MESSAGE_PREFIX=`learning-guidance-`;var GUIDANCE_HEADING=`A supervised Learning observation is available for this exact pinned lesson.`;var FACT_PREFIX=`Observed application fact: `;function paneLabel(pane){const words=String(pane||``).trim().replace(/[-_]+/gu,` `);return words?words[0].toUpperCase()+words.slice(1):``}function learningGuidanceSummary(evidence){if(evidence?.outcome===`failed`)return`Watching: that step did not finish.`;const workspace=evidence?.workspace||{};if(workspace.learningView===`learning`)return`Watching: you are in the Learning pane.`;const pane=paneLabel(workspace.pane);if(!pane)return`Watching your practice task.`;return`Watching: you are in ${pane}${workspace.ready===false?` (still loading)`:``}.`}function learningGuidancePresentation(message){if(message?.role!==`user`||!String(message.messageId||``).startsWith(LEARNING_GUIDANCE_MESSAGE_PREFIX))return null;const lines=String(message.text||``).split(`
|
|
8
|
-
`);if(lines[0]!==GUIDANCE_HEADING)return null;let evidence=null;const fact=lines.find(line=>line.startsWith(FACT_PREFIX));try{evidence=fact?JSON.parse(fact.slice(27))?.evidence??null:null}catch{evidence=null}return{text:learningGuidanceSummary(evidence)}}var _hoisted_1$5={class:`vibe64-main-conversation__voice-disc`};var _hoisted_2$5={class:`vibe64-main-conversation__voice-disc`};var _hoisted_3$5={key:0,role:`img`,"aria-label":`Listening`,title:`Listening`,class:`d-inline-flex align-center text-primary`};var _hoisted_4$5={key:1,role:`img`,"aria-label":`Speaking`,title:`Speaking`,class:`d-inline-flex align-center text-primary`};var _hoisted_5$5={key:3,role:`status`};var
|
|
8
|
+
`);if(lines[0]!==GUIDANCE_HEADING)return null;let evidence=null;const fact=lines.find(line=>line.startsWith(FACT_PREFIX));try{evidence=fact?JSON.parse(fact.slice(27))?.evidence??null:null}catch{evidence=null}return{text:learningGuidanceSummary(evidence)}}var _hoisted_1$5={class:`vibe64-main-conversation__voice-disc`};var _hoisted_2$5={class:`vibe64-main-conversation__voice-disc`};var _hoisted_3$5={key:0,role:`img`,"aria-label":`Listening`,title:`Listening`,class:`d-inline-flex align-center text-primary`};var _hoisted_4$5={key:1,role:`img`,"aria-label":`Speaking`,title:`Speaking`,class:`d-inline-flex align-center text-primary`};var _hoisted_5$5=[`data-approval-id`];var _hoisted_6$5={key:3,role:`status`};var _hoisted_7$5={key:4,role:`status`};var _hoisted_8$5=[`href`];var _hoisted_9$5={key:0};var _hoisted_10$5={key:1,class:`text-body-small text-error`,role:`alert`};var _sfc_main$6={__name:`Vibe64ConversationLog`,props:{voiceRuntime:{type:Object,default:null},working:{type:Boolean,default:void 0},integrationConnections:{default:()=>({}),type:Object},integrationActionPending:{default:null,type:Object},integrationActionError:{default:null,type:Object},integrationRequestsEnabled:{default:false,type:Boolean},sessionId:{default:``,type:String},assistantLabel:{default:`Codex`,type:String},error:{default:``,type:String},followLatestKey:{default:0,type:[Number,String]},hasMoreBefore:{default:false,type:Boolean},loading:{default:false,type:Boolean},loadingMore:{default:false,type:Boolean},loadMoreError:{default:``,type:String},reloadable:{default:false,type:Boolean},errorReloadable:{default:false,type:Boolean},reloading:{default:false,type:Boolean},scrollKey:{default:``,type:[Number,String]},sourceRoot:{default:``,type:String},turns:{default:()=>[],type:Array},variant:{default:`main`,validator:value=>[`main`,`task`].includes(value),type:String},visible:{default:false,type:Boolean},welcomeMessage:{default:``,type:String}},emits:[`cancel-turn`,`edit-turn`,`load-more`,`open-integration`,`skip-integration`,`resume-integration`,`connect-integration`,`check-integration`,`cancel-integration`,`open-source-file`,`open-plan-history`,`reload`,`resend-turn`],setup(__props,{expose:__expose,emit:__emit}){const props=__props;const emit=__emit;const voice=useVibe64Voice();const mounted=ref(true);const avatarSize=ref(`compact`);const voiceError=ref(``);const voiceToolsTarget=ref(null);const voiceFeedbackTarget=ref(null);const voiceTranscript=ref(null);const pageVisible=ref(globalThis.document?.visibilityState!==`hidden`);function updatePageVisibility(){pageVisible.value=globalThis.document?.visibilityState!==`hidden`}globalThis.document?.addEventListener(`visibilitychange`,updatePageVisibility);function setVoiceFeedbackTarget(element){voiceFeedbackTarget.value=element}const voiceBinding=computed(()=>{const runtime=props.voiceRuntime;if(!voice||!runtime)return null;return createProjectVoiceBinding(runtime,{get eligible(){return mounted.value&&props.visible&&props.voiceRuntime===runtime&&pageVisible.value},onTranscript(transcript,{canTake=false}={}){if(mounted.value&&props.voiceRuntime===runtime)voiceTranscript.value=transcript?{...transcript,canTake}:null},get adapter(){return mounted.value&&props.visible&&props.voiceRuntime===runtime?adapter.value:null},get presentation(){return mounted.value&&props.visible&&props.voiceRuntime===runtime?`inline`:`dialog`}})});const voiceSession=computed(()=>{const binding=voiceBinding.value;const state=voice?.controller.state;return binding&&state?.binding?.id===binding.id&&state.binding.conversationId===binding.conversationId?state.session:null});function voicePreviewActionsAllowed(messageId){const transcript=voiceTranscript.value;const session=voiceSession.value;const runtime=props.voiceRuntime;const selected=(session?.pendingTranscript.value)?.messageId===messageId||transcript?.id===messageId&&transcript.canTake;const receipt=runtime?.delivery.find?.(messageId);return Boolean(selected&&session&&session.canTakeTranscript(messageId)&&!session.sending.value&&(!receipt||receipt.status===`failed`)&&!runtime?.delivery.state.messages.some(message=>message.status===`uncertain`))}function selectedVoiceTranscriptSession(messageId){const runtime=props.voiceRuntime;if(!mounted.value||!props.visible||!runtime?.available.value||!voicePreviewActionsAllowed(messageId))return null;return voiceSession.value}async function takeVoiceTranscript(messageId){const session=selectedVoiceTranscriptSession(messageId);if(!session)return false;const runtime=props.voiceRuntime;if(!await session.takeTranscript(messageId))return false;if(runtime.delivery.find?.(messageId)?.status===`failed`)runtime.delivery.cancel(messageId);return true}async function editVoiceTranscript(messageId){const session=selectedVoiceTranscriptSession(messageId);if(!session)return false;const runtime=props.voiceRuntime;if(!await session.beginTranscriptEdit(messageId))return false;if(runtime.delivery.find?.(messageId)?.status===`failed`)return runtime.delivery.cancel(messageId);return true}function updateVoiceTranscript(messageId,text){const session=selectedVoiceTranscriptSession(messageId);if(session?.pendingTranscript.value?.messageId!==messageId)return false;session.editTranscript(text,messageId);return true}async function sendVoiceTranscript(messageId){const session=selectedVoiceTranscriptSession(messageId);const pending=session?.pendingTranscript.value;if(pending?.messageId!==messageId||!pending.text.trim())return false;await session.deliverTranscript();return true}const voicePreviews=computed(()=>{const transcript=voiceTranscript.value;const session=voiceSession.value;const pending=session?.pendingTranscript.value;const previews=pending?[{id:pending.messageId,text:pending.text}]:[];if(transcript&&transcript.id!==pending?.messageId)previews.push(transcript);return previews.map(preview=>{const review=pending?.messageId===preview.id;const allowed=voicePreviewActionsAllowed(preview.id);return{...preview,actions:{canDiscard:allowed,canEdit:allowed&&(!pending||review),discard:takeVoiceTranscript,edit:editVoiceTranscript,editing:review&&pending.editing===true,update:updateVoiceTranscript,send:review&&(pending.reviewBeforeSend||!session.sending.value)?sendVoiceTranscript:null,canSend:Boolean(review&&allowed&&!session.sending.value&&pending.text.trim()),sending:Boolean(review&&session.sending.value)}}})});const voicePreview=computed(()=>voicePreviews.value.find(preview=>preview.id===voiceTranscript.value?.id)||voicePreviews.value[0]||null);const composerBlocked=computed(()=>voiceSession.value?.composerBlocked.value===true);const readAloud=computed(()=>voiceSession.value?voiceSession.value.readAloud.value===true:Boolean(voiceBinding.value&&voice.readAloudFor(voiceBinding.value)));const readAloudChangePending=computed(()=>Boolean(voiceBinding.value&&voice.readAloudChangePendingFor(voiceBinding.value)));const avatarVisual=computed(()=>voiceSession.value?.avatarVisual.value||{state:props.working?`thinking`:`idle`});function showAvatar(){avatarSize.value=`compact`}function reportVoiceFailure(error){if(voiceSession.value)voiceError.value=error.message}async function openVoice(){const binding=voiceBinding.value;if(!binding?.available||!props.visible)return null;const runtime=props.voiceRuntime;voiceError.value=``;try{if(!await voice.open(binding))return null}catch(error){if(mounted.value&&props.voiceRuntime===runtime)voiceError.value=error.message;return null}if(!mounted.value||!props.visible||props.voiceRuntime!==runtime||!binding.available)return null;showAvatar();return voiceSession.value}const voiceGesture=useVoiceLauncher({enabled:()=>Boolean(props.visible&&voiceBinding.value?.available&&!voiceSession.value),async open(){const session=await openVoice();return session?{startHeldRecording:session.startPushToTalk,finishHeldRecording:session.finishPushToTalk,discardHeldRecording:session.cancelPushToTalk}:null},async onTap(){await(await openVoice())?.toggleHandsFree()},onError:reportVoiceFailure});const holdingVoice=voiceGesture.holding;async function toggleReadAloud(){if(readAloudChangePending.value)return;const session=voiceSession.value||await openVoice();try{await session?.toggleReadAloud()}catch(error){reportVoiceFailure(error)}}watch(()=>[props.voiceRuntime,props.visible],([runtime],[previousRuntime])=>{voiceGesture.cancel();if(runtime!==previousRuntime){avatarSize.value=`compact`;voiceTranscript.value=null;voiceError.value=``}});onBeforeUnmount(()=>{mounted.value=false;globalThis.document?.removeEventListener(`visibilitychange`,updatePageVisibility)});__expose({composerBlocked});let recoverySession=``;const recoveredRequests=new Set;watch(()=>[props.sessionId,props.visible,props.integrationRequestsEnabled,props.integrationActionPending,props.turns],()=>{const key=props.visible&&props.integrationRequestsEnabled?props.sessionId:``;if(key!==recoverySession){recoverySession=key;recoveredRequests.clear()}if(!key||props.integrationActionPending)return;const turn=props.turns.find(entry=>!entry.pending&&entry.integrationSetup?.outcome===`pending`&&!recoveredRequests.has(`${entry.turnId}/${entry.integrationSetup.requestId}`));if(!turn)return;recoveredRequests.add(`${turn.turnId}/${turn.integrationSetup.requestId}`);emit(`check-integration`,{sessionId:key,turnId:turn.turnId,requestId:turn.integrationSetup.requestId})},{immediate:true});function presentationMessage(message,turn){if(!message||assistantGoalManagementMessage(message,turn))return null;const prefix=message.role===`user`?`/goal `:[`Goal set: `,`Goal cleared: `,`Goal active: `].find(value=>message.text?.startsWith(value));if(prefix&&message.text?.startsWith(prefix)){const objective=message.text.slice(prefix.length);const separator=objective.indexOf(`
|
|
9
9
|
|
|
10
|
-
`);if(separator!==-1){const display=assistantGoalObjective(objective,{objective:objective.slice(separator+2)});if(display!==objective)return{...message,text:`${prefix}${display}`}}}const integrationRequest=parseIntegrationSetupRequest(message);return integrationRequest?{...message,text:integrationRequest.text,integrationRequest}:message}const adapter=computed(()=>({conversation:{cancellableDelivery:true,working:props.working&&!props.error,previewMessage:voicePreview.value,previewMessages:voicePreviews.value,assistantLabel:props.assistantLabel,error:props.error,followLatestKey:props.followLatestKey,hasMoreBefore:props.hasMoreBefore,loading:props.loading,loadingMore:props.loadingMore,loadMoreError:props.loadMoreError,reloadable:props.reloadable,errorReloadable:props.errorReloadable,reloading:props.reloading,scrollKey:props.scrollKey,variant:props.variant,visible:props.visible,welcomeMessage:props.welcomeMessage,progressPreviewLimit:usesCommentaryForThinking(props.turns.at(-1)?.metadata?.assistantSelection)?1:2,turns:props.turns.map(turn=>{const selection=turn.metadata?.assistantSelection;return{...turn,...conversationAttribution(selection,turn.metadata?.assistantRouting),...!turn.system&&turn.metadata?.assistantRouting&&selection?{system:{role:`system`,text:`${turn.metadata.assistantRouting.requestedMode===`auto`?`Auto → `:``}${assistantModeLabel(turn.metadata.assistantRouting.resolvedMode)} · ${vibe64AssistantSelectionLabel(selection)}`}}:{},user:presentationMessage(turn.user,turn),...turn.metadata?.projectMessage?{user:null,system:{...turn.system||turn.user,role:`system`,projectMessage:turn.metadata.projectMessage}}:{},...learningGuidancePresentation(turn.user)?{user:null,system:{...turn.user,role:`system`,text:learningGuidancePresentation(turn.user).text}}:{},assistant:presentationMessage(turn.assistant,turn),thinking:turn.thinking?.map(message=>thinkingMessagePresentation(message,selection)).filter(Boolean),commentary:turn.commentary?.map(message=>thinkingMessagePresentation(presentationMessage(message,turn),selection)).filter(Boolean),messages:turn.messages?.map(message=>thinkingMessagePresentation(presentationMessage(message,turn),selection)).filter(Boolean)}})},actions:{loadMore:value=>emit(`load-more`,value),reload:()=>emit(`reload`),resend:id=>emit(`resend-turn`,id),checkDelivery:id=>emit(`resend-turn`,id),cancel:id=>emit(`cancel-turn`,id),edit:id=>emit(`edit-turn`,id),openLink(payload){if(payload.href===`#vibe64-plan-history`){payload.event?.preventDefault?.();emit(`open-plan-history`);return}const target=sourceEditorLinkTarget({href:payload.href,sourceRoot:props.sourceRoot,text:payload.text});if(!target)return;payload.event?.preventDefault?.();emit(`open-source-file`,target)}}}));return(_ctx,_cache)=>{return openBlock(),createBlock(unref(AssistantConversationElement_default),{class:`vibe64-conversation-log`,adapter:adapter.value,"avatar-size":avatarSize.value,"onUpdate:avatarSize":_cache[4]||(_cache[4]=$event=>avatarSize.value=$event)},createSlots({"system-message":withCtx(({message})=>[message.projectMessage?(openBlock(),createBlock(Vibe64ProjectMessage_default,{key:0,details:message.projectMessage,at:message.displayAt},null,8,[`details`,`at`])):(openBlock(),createBlock(Vibe64ConversationStatus_default,{key:1,message,onCheckDelivery:_cache[2]||(_cache[2]=$event=>emit(`resend-turn`,$event)),onLinkClick:adapter.value.actions.openLink},null,8,[`message`,`onLinkClick`]))]),"user-message-actions":withCtx(({turn})=>[turn.metadata?.source===`lesson`?(openBlock(),createBlock(VChip,{key:0,size:`x-small`,variant:`tonal`,class:`mt-1 align-self-start`,"data-test":`lesson-sent-chip`},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(` Sent by the lesson `,-1)])]),_:1})):createCommentVNode(``,true)]),attachments:withCtx(({items})=>[createVNode(_sfc_main$10,{items,"session-id":__props.sessionId},null,8,[`items`,`session-id`])]),"message-actions":withCtx(({message,turn})=>[message.integrationRequest?(openBlock(),createBlock(VCard,{key:0,class:`mt-3`,variant:`outlined`},{default:withCtx(()=>[createVNode(VCardText,{class:`text-break`},{default:withCtx(()=>[createTextVNode(` Configure integration: `+toDisplayString(message.integrationRequest.integrationId),1)]),_:2},1024),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{disabled:turn.pending||!__props.integrationRequestsEnabled,"min-height":`48`,onClick:$event=>emit(`open-integration`,{sessionId:__props.sessionId,turnId:turn.turnId,requestId:turn.integrationSetup?.requestId,integrationId:message.integrationRequest.integrationId})},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(` Configure `,-1)])]),_:1},8,[`disabled`,`onClick`]),turn.integrationSetup?.outcome===`pending`&&__props.integrationConnections[turn.integrationSetup.requestId]?.status!==`configuration-only`?(openBlock(),createBlock(VBtn,{key:0,disabled:turn.pending||!__props.integrationRequestsEnabled||Boolean(__props.integrationActionPending),loading:__props.integrationActionPending?.turnId===turn.turnId,"min-height":`48`,onClick:$event=>emit(__props.integrationConnections[turn.integrationSetup.requestId]?.status===`pending`?`check-integration`:`connect-integration`,{sessionId:__props.sessionId,turnId:turn.turnId,requestId:turn.integrationSetup.requestId})},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.integrationConnections[turn.integrationSetup.requestId]?.status===`pending`?`Check connection`:`Connect`),1)]),_:2},1032,[`disabled`,`loading`,`onClick`])):createCommentVNode(``,true),turn.integrationSetup?.outcome===`completed`&&turn.integrationSetup.continuation?.status!==`accepted`?(openBlock(),createBlock(VBtn,{key:1,disabled:turn.pending||!__props.integrationRequestsEnabled||Boolean(__props.integrationActionPending),loading:__props.integrationActionPending?.turnId===turn.turnId,"min-height":`48`,onClick:$event=>emit(`resume-integration`,{sessionId:__props.sessionId,turnId:turn.turnId,requestId:turn.integrationSetup.requestId})},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(` Check continuation `,-1)])]),_:1},8,[`disabled`,`loading`,`onClick`])):createCommentVNode(``,true),turn.integrationSetup?.outcome===`pending`?(openBlock(),createBlock(VBtn,{key:2,disabled:turn.pending||!__props.integrationRequestsEnabled||Boolean(__props.integrationActionPending),loading:__props.integrationActionPending?.turnId===turn.turnId,"min-height":`48`,onClick:$event=>emit(`skip-integration`,{sessionId:__props.sessionId,turnId:turn.turnId,requestId:turn.integrationSetup.requestId})},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(` Skip `,-1)])]),_:1},8,[`disabled`,`loading`,`onClick`])):createCommentVNode(``,true),turn.integrationSetup?.outcome===`skipped`?(openBlock(),createElementBlock(`span`,_hoisted_5$5,`Skipped`)):createCommentVNode(``,true),turn.integrationSetup?.outcome===`completed`?(openBlock(),createElementBlock(`span`,_hoisted_6$5,`Setup completed`)):createCommentVNode(``,true)]),_:2},1024),turn.integrationSetup?.outcome===`pending`&&__props.integrationConnections[turn.integrationSetup.requestId]?(openBlock(),createBlock(VCardText,{key:0,role:`status`},{default:withCtx(()=>[__props.integrationConnections[turn.integrationSetup.requestId].status===`pending`?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode(`a`,{href:__props.integrationConnections[turn.integrationSetup.requestId].authorizationUrl,target:`_blank`,rel:`noopener noreferrer`},`Continue with provider`,8,_hoisted_7$5),createVNode(VBtn,{disabled:!__props.integrationRequestsEnabled||Boolean(__props.integrationActionPending),"min-height":`48`,onClick:$event=>emit(`cancel-integration`,{sessionId:__props.sessionId,turnId:turn.turnId,requestId:turn.integrationSetup.requestId})},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(` Cancel connection `,-1)])]),_:1},8,[`disabled`,`onClick`])],64)):__props.integrationConnections[turn.integrationSetup.requestId].status===`configuration-only`?(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(`This integration uses public settings and has no account to connect. Choose Configure to edit them and prepare the application's implementation request. Skip dismisses this connection request; it does not verify tracking.`)],64)):__props.integrationConnections[turn.integrationSetup.requestId].status===`unconfigured`?(openBlock(),createElementBlock(Fragment,{key:2},[createTextVNode(`Choose Configure to complete the application's setup.`)],64)):(openBlock(),createElementBlock(Fragment,{key:3},[createTextVNode(toDisplayString(__props.integrationConnections[turn.integrationSetup.requestId].status),1)],64))]),_:2},1024)):createCommentVNode(``,true),turn.integrationSetup?.outcome===`completed`?(openBlock(),createBlock(VCardText,{key:1,role:`status`},{default:withCtx(()=>[turn.integrationSetup.continuation?.status===`accepted`?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(`Assistant continuation accepted.`)],64)):turn.integrationSetup.continuation?.status===`sending`?(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(`Assistant delivery is not yet confirmed. Check continuation to inspect delivery without sending it again.`)],64)):(openBlock(),createElementBlock(Fragment,{key:2},[createTextVNode(`Assistant continuation is pending. Check continuation to resume.`)],64))]),_:2},1024)):createCommentVNode(``,true),__props.integrationActionError?.turnId===turn.turnId?(openBlock(),createBlock(VCardText,{key:2,role:`alert`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.integrationActionError.message),1)]),_:2},1024)):createCommentVNode(``,true)]),_:2},1024)):createCommentVNode(``,true)]),_:2},[voiceBinding.value&&__props.visible?{name:`avatar`,fn:withCtx(size=>[(openBlock(),createBlock(resolveDynamicComponent(unref(voice).Avatar||unref(VoiceAvatar_default)),mergeProps(avatarVisual.value,{binding:voiceBinding.value,size:size.size,height:size.height}),null,16,[`binding`,`size`,`height`]))]),key:`0`}:void 0,voiceBinding.value&&__props.visible?{name:`avatar-tools`,fn:withCtx(()=>[createBaseVNode(`div`,{ref_key:`voiceToolsTarget`,ref:voiceToolsTarget,class:normalizeClass([`vibe64-main-conversation__voice-tools`,{"vibe64-main-conversation__voice-tools--opening":unref(holdingVoice)}])},[!voiceSession.value||unref(holdingVoice)?(openBlock(),createBlock(VBtn,{key:0,icon:voiceSession.value?.voice.listening.value&&!voiceSession.value.microphoneMuted.value?unref(mdiMicrophone):unref(mdiMicrophoneOff),variant:`text`,color:`primary`,width:`40`,"min-width":`40`,"min-height":`44`,"aria-label":unref(holdingVoice)?`Release to send`:`Talk`,title:`click or long press to talk`,"aria-pressed":unref(holdingVoice),disabled:!voiceBinding.value.available,onPointerdown:unref(voiceGesture).pointerDown,onPointerup:unref(voiceGesture).pointerUp,onPointercancel:unref(voiceGesture).cancel,onLostpointercapture:unref(voiceGesture).cancel,onKeydown:[withKeys(withModifiers(unref(voiceGesture).keyDown,[`prevent`]),[`space`]),withKeys(withModifiers(unref(voiceGesture).keyDown,[`prevent`]),[`enter`])],onKeyup:[withKeys(withModifiers(unref(voiceGesture).keyUp,[`prevent`]),[`space`]),withKeys(withModifiers(unref(voiceGesture).keyUp,[`prevent`]),[`enter`])],onBlur:unref(voiceGesture).cancel,onContextmenu:_cache[0]||(_cache[0]=withModifiers(()=>{},[`prevent`])),onClick:unref(voiceGesture).click},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_1$5,[createVNode(VIcon,{size:`20`,icon:voiceSession.value?.voice.listening.value&&!voiceSession.value.microphoneMuted.value?unref(mdiMicrophone):unref(mdiMicrophoneOff)},null,8,[`icon`])])]),_:1},8,[`icon`,`aria-label`,`aria-pressed`,`disabled`,`onPointerdown`,`onPointerup`,`onPointercancel`,`onLostpointercapture`,`onKeydown`,`onKeyup`,`onBlur`,`onClick`])):createCommentVNode(``,true),!voiceSession.value||unref(holdingVoice)?(openBlock(),createBlock(VBtn,{key:1,icon:readAloud.value?unref(mdiVolumeHigh):unref(mdiVolumeOff),variant:`text`,color:`primary`,width:`40`,"min-width":`40`,"min-height":`44`,"aria-pressed":readAloud.value,"aria-label":readAloud.value?`Turn project agent read-aloud off`:`Read project agent answers aloud`,title:readAloud.value?`Spoken replies on`:`Spoken replies off`,disabled:!voiceBinding.value.available||readAloudChangePending.value,onClick:toggleReadAloud},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_2$5,[createVNode(VIcon,{size:`20`,icon:readAloud.value?unref(mdiVolumeHigh):unref(mdiVolumeOff)},null,8,[`icon`])])]),_:1},8,[`icon`,`aria-pressed`,`aria-label`,`title`,`disabled`])):createCommentVNode(``,true),!voiceSession.value||unref(holdingVoice)?(openBlock(),createBlock(unref(VoiceConversationSettings_default),{key:2,voice:voiceSession.value?.voice,compact:``,onError:_cache[1]||(_cache[1]=$event=>unref(voice).controller.state.error=$event.message)},createSlots({_:2},[unref(voice).Settings?{name:`default`,fn:withCtx(settings=>[(openBlock(),createBlock(resolveDynamicComponent(unref(voice).Settings),mergeProps(settings,{binding:voiceBinding.value}),null,16,[`binding`]))]),key:`0`}:void 0]),1032,[`voice`])):createCommentVNode(``,true)],2)]),key:`1`}:void 0,voiceSession.value?{name:`avatar-control`,fn:withCtx(({size})=>[size===`hidden`&&voiceSession.value.voice.listening.value&&!voiceSession.value.microphoneMuted.value?(openBlock(),createElementBlock(`span`,_hoisted_3$5,[createVNode(VIcon,{size:`20`,icon:unref(mdiMicrophone)},null,8,[`icon`])])):createCommentVNode(``,true),size===`hidden`&&voiceSession.value.voice.speaking.value?(openBlock(),createElementBlock(`span`,_hoisted_4$5,[createVNode(VIcon,{size:`20`,icon:unref(mdiVolumeHigh)},null,8,[`icon`])])):createCommentVNode(``,true)]),key:`2`}:void 0,_ctx.$slots.hints||voiceSession.value||voiceError.value?{name:`hints`,fn:withCtx(()=>[voiceSession.value&&voiceBinding.value.presentation===`inline`?withDirectives((openBlock(),createElementBlock(`div`,_hoisted_8$5,[createVNode(unref(VoiceConversationHost_default),{controller:unref(voice).controller,presentation:`inline`},createSlots({conversation:withCtx(({session,disabled})=>[createVNode(unref(VoiceConversationControls_default),{session,disabled,compact:``,"icon-only":``,"tools-target":voiceToolsTarget.value,"feedback-target":voiceFeedbackTarget.value,"review-in-transcript":Boolean(voicePreview.value)},{"settings-control":withCtx(()=>[createVNode(unref(VoiceConversationSettings_default),{voice:session.voice,compact:``,onError:_cache[3]||(_cache[3]=$event=>unref(voice).controller.state.error=$event.message)},createSlots({_:2},[unref(voice).Settings?{name:`default`,fn:withCtx(settings=>[(openBlock(),createBlock(resolveDynamicComponent(unref(voice).Settings),mergeProps(settings,{binding:voiceBinding.value}),null,16,[`binding`]))]),key:`0`}:void 0]),1032,[`voice`])]),_:2},1032,[`session`,`disabled`,`tools-target`,`feedback-target`,`review-in-transcript`])]),_:2},[unref(voice).Settings?{name:`settings`,fn:withCtx(settings=>[(openBlock(),createBlock(resolveDynamicComponent(unref(voice).Settings),normalizeProps(guardReactiveProps(settings)),null,16))]),key:`0`}:void 0]),1032,[`controller`])],512)),[[vShow,!unref(voice).controller.state.nextTarget]]):createCommentVNode(``,true),voiceError.value&&__props.visible?(openBlock(),createElementBlock(`p`,_hoisted_9$5,toDisplayString(voiceError.value),1)):createCommentVNode(``,true),renderSlot(_ctx.$slots,`hints`,{},void 0,true)]),key:`3`}:void 0,_ctx.$slots.composer?{name:`composer`,fn:withCtx(()=>[renderSlot(_ctx.$slots,`composer`,{voiceBinding:voiceBinding.value,composerBlocked:composerBlocked.value,showAvatar,setVoiceFeedbackTarget},void 0,true)]),key:`4`}:void 0]),1032,[`adapter`,`avatar-size`])}}};var Vibe64ConversationLog_default=_plugin_vue_export_helper_default(_sfc_main$6,[[`__scopeId`,`data-v-b5c7ce67`]]);var basicNormalize=typeof String.prototype.normalize==`function`?x=>x.normalize(`NFKD`):x=>x;var SearchCursor=class{constructor(text,query,from=0,to=text.length,normalize,test){this.test=test;this.value={from:0,to:0,precise:false};this.done=false;this.matches=[];this.buffer=``;this.bufferPos=0;this.iter=text.iterRange(from,to);this.bufferStart=from;this.normalize=normalize?x=>normalize(basicNormalize(x)):basicNormalize;this.query=this.normalize(query)}peek(){if(this.bufferPos==this.buffer.length){this.bufferStart+=this.buffer.length;this.iter.next();if(this.iter.done)return-1;this.bufferPos=0;this.buffer=this.iter.value}return codePointAt(this.buffer,this.bufferPos)}next(){while(this.matches.length)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let next=this.peek();if(next<0){this.done=true;return this}let str=fromCodePoint(next),start=this.bufferStart+this.bufferPos;this.bufferPos+=codePointSize(next);let norm=this.normalize(str);if(norm.length)for(let i=0,pos=start,posPrecise=true;;i++){let code=norm.charCodeAt(i);let match=this.match(code,pos,posPrecise,this.bufferPos+this.bufferStart,i==norm.length-1);if(match){this.value=match;return this}if(i==norm.length-1)break;if(posPrecise&&i<str.length&&str.charCodeAt(i)==code)pos++;else posPrecise=false}}}match(code,pos,posPrecise,end,endPrecise){let match=null;for(let i=0;i<this.matches.length;){let partial=this.matches[i],keep=false;if(this.query.charCodeAt(partial.index)==code){if(partial.index==this.query.length-1)match={from:partial.from,to:end,precise:endPrecise&&partial.precise};else{partial.index++;keep=true}}if(keep)i++;else this.matches.splice(i,1)}if(this.query.charCodeAt(0)==code){if(this.query.length==1)match={from:pos,to:end,precise:posPrecise&&endPrecise};else this.matches.push({from:pos,index:1,precise:posPrecise})}if(match&&this.test&&!this.test(match.from,match.to,this.buffer,this.bufferStart))match=null;return match}};if(typeof Symbol!=`undefined`)SearchCursor.prototype[Symbol.iterator]=function(){return this};var empty={from:-1,to:-1,match:/.*/.exec(``),precise:true};var baseFlags=`gm`+(/x/.unicode==null?``:`u`);var RegExpCursor=class{constructor(text,query,options,from=0,to=text.length){this.text=text;this.to=to;this.curLine=``;this.done=false;this.value=empty;if(/\\[sWDnr]|\n|\r|\[\^/.test(query))return new MultilineRegExpCursor(text,query,options,from,to);this.re=new RegExp(query,baseFlags+((options===null||options===void 0?void 0:options.ignoreCase)?`i`:``));this.test=options===null||options===void 0?void 0:options.test;this.iter=text.iter();let startLine=text.lineAt(from);this.curLineStart=startLine.from;this.matchPos=toCharEnd(text,from);this.getLine(this.curLineStart)}getLine(skip){this.iter.next(skip);if(this.iter.lineBreak)this.curLine=``;else{this.curLine=this.iter.value;if(this.curLineStart+this.curLine.length>this.to)this.curLine=this.curLine.slice(0,this.to-this.curLineStart);this.iter.next()}}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1;if(this.curLineStart>this.to)this.curLine=``;else this.getLine(0)}next(){for(let off=this.matchPos-this.curLineStart;;){this.re.lastIndex=off;let match=this.matchPos<=this.to&&this.re.exec(this.curLine);if(match){let from=this.curLineStart+match.index,to=from+match[0].length;this.matchPos=toCharEnd(this.text,to+(from==to?1:0));if(from==this.curLineStart+this.curLine.length)this.nextLine();if((from<to||from>this.value.to)&&(!this.test||this.test(from,to,match))){this.value={from,to,precise:true,match};return this}off=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length<this.to){this.nextLine();off=0}else{this.done=true;return this}}}};var flattened=new WeakMap;var FlattenedDoc=class FlattenedDoc{constructor(from,text){this.from=from;this.text=text}get to(){return this.from+this.text.length}static get(doc,from,to){let cached=flattened.get(doc);if(!cached||cached.from>=to||cached.to<=from){let flat=new FlattenedDoc(from,doc.sliceString(from,to));flattened.set(doc,flat);return flat}if(cached.from==from&&cached.to==to)return cached;let{text,from:cachedFrom}=cached;if(cachedFrom>from){text=doc.sliceString(from,cachedFrom)+text;cachedFrom=from}if(cached.to<to)text+=doc.sliceString(cached.to,to);flattened.set(doc,new FlattenedDoc(cachedFrom,text));return new FlattenedDoc(from,text.slice(from-cachedFrom,to-cachedFrom))}};var MultilineRegExpCursor=class{constructor(text,query,options,from,to){this.text=text;this.to=to;this.done=false;this.value=empty;this.matchPos=toCharEnd(text,from);this.re=new RegExp(query,baseFlags+((options===null||options===void 0?void 0:options.ignoreCase)?`i`:``));this.test=options===null||options===void 0?void 0:options.test;this.flat=FlattenedDoc.get(text,from,this.chunkEnd(from+5e3))}chunkEnd(pos){return pos>=this.to?this.to:this.text.lineAt(pos).to}next(){for(;;){let off=this.re.lastIndex=this.matchPos-this.flat.from;let match=this.re.exec(this.flat.text);if(match&&!match[0]&&match.index==off){this.re.lastIndex=off+1;match=this.re.exec(this.flat.text)}if(match){let from=this.flat.from+match.index,to=from+match[0].length;if((this.flat.to>=this.to||match.index+match[0].length<=this.flat.text.length-10)&&(!this.test||this.test(from,to,match))){this.value={from,to,precise:true,match};this.matchPos=toCharEnd(this.text,to+(from==to?1:0));return this}}if(this.flat.to==this.to){this.done=true;return this}this.flat=FlattenedDoc.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}};if(typeof Symbol!=`undefined`)RegExpCursor.prototype[Symbol.iterator]=MultilineRegExpCursor.prototype[Symbol.iterator]=function(){return this};function validRegExp(source){try{new RegExp(source,baseFlags);return true}catch(_a){return false}}function toCharEnd(text,pos){if(pos>=text.length)return pos;let line=text.lineAt(pos),next;while(pos<line.to&&(next=line.text.charCodeAt(pos-line.from))>=56320&&next<57344)pos++;return pos}var gotoLine=view=>{let open=getDialog(view,`cm-goto-line`);if(open){let field=open.dom.querySelector(`input[type=text]`);if(field)field.select();return true}let{state}=view;let line=String(state.doc.lineAt(view.state.selection.main.head).number);let{close,result}=showDialog(view,{class:`cm-goto-line`,label:state.phrase(`Go to line`),input:{type:`text`,name:`line`,value:line},focus:true,submitLabel:state.phrase(`go`)});result.then(form=>{let match=form&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(form.elements[`line`].value);if(!match){view.dispatch({effects:close});return}let startLine=state.doc.lineAt(state.selection.main.head);let[,sign,ln,cl,percent]=match;let col=cl?+cl.slice(1):0;let line=ln?+ln:startLine.number;if(ln&&percent){let pc=line/100;if(sign)pc=pc*(sign==`-`?-1:1)+startLine.number/state.doc.lines;line=Math.round(state.doc.lines*pc)}else if(ln&&sign)line=line*(sign==`-`?-1:1)+startLine.number;let docLine=state.doc.line(Math.max(1,Math.min(state.doc.lines,line)));let selection=EditorSelection.cursor(docLine.from+Math.max(0,Math.min(col,docLine.length)));view.dispatch({effects:[close,EditorView.scrollIntoView(selection.from,{y:`center`})],selection})});return true};var selectWord=({state,dispatch})=>{let{selection}=state;let newSel=EditorSelection.create(selection.ranges.map(range=>state.wordAt(range.head)||EditorSelection.cursor(range.head)),selection.mainIndex);if(newSel.eq(selection))return false;dispatch(state.update({selection:newSel}));return true};function findNextOccurrence(state,query){let{main,ranges}=state.selection;let word=state.wordAt(main.head),fullWord=word&&word.from==main.from&&word.to==main.to;for(let cycled=false,cursor=new SearchCursor(state.doc,query,ranges[ranges.length-1].to);;){cursor.next();if(cursor.done){if(cycled)return null;cursor=new SearchCursor(state.doc,query,0,Math.max(0,ranges[ranges.length-1].from-1));cycled=true}else{if(cycled&&ranges.some(r=>r.from==cursor.value.from))continue;if(fullWord){let word=state.wordAt(cursor.value.from);if(!word||word.from!=cursor.value.from||word.to!=cursor.value.to)continue}return cursor.value}}}var selectNextOccurrence=({state,dispatch})=>{let{ranges}=state.selection;if(ranges.some(sel=>sel.from===sel.to))return selectWord({state,dispatch});let searchedText=state.sliceDoc(ranges[0].from,ranges[0].to);if(state.selection.ranges.some(r=>state.sliceDoc(r.from,r.to)!=searchedText))return false;let range=findNextOccurrence(state,searchedText);if(!range)return false;dispatch(state.update({selection:state.selection.addRange(EditorSelection.range(range.from,range.to),false),effects:EditorView.scrollIntoView(range.to)}));return true};var searchConfigFacet=Facet.define({combine(configs){return combineConfig(configs,{top:false,caseSensitive:false,literal:false,regexp:false,wholeWord:false,createPanel:view=>new SearchPanel(view),scrollToMatch:range=>EditorView.scrollIntoView(range)})}});var SearchQuery=class{constructor(config){this.search=config.search;this.caseSensitive=!!config.caseSensitive;this.literal=!!config.literal;this.regexp=!!config.regexp;this.replace=config.replace||``;this.valid=!!this.search&&(!this.regexp||validRegExp(this.search));this.unquoted=this.unquote(this.search);this.wholeWord=!!config.wholeWord;this.test=config.test}unquote(text){return this.literal?text:text.replace(/\\([nrt\\])/g,(_,ch)=>ch==`n`?`
|
|
10
|
+
`);if(separator!==-1){const display=assistantGoalObjective(objective,{objective:objective.slice(separator+2)});if(display!==objective)return{...message,text:`${prefix}${display}`}}}const integrationRequest=parseIntegrationSetupRequest(message);return integrationRequest?{...message,text:integrationRequest.text,integrationRequest}:message}const adapter=computed(()=>({conversation:{cancellableDelivery:true,working:props.working&&!props.error,previewMessage:voicePreview.value,previewMessages:voicePreviews.value,assistantLabel:props.assistantLabel,error:props.error,followLatestKey:props.followLatestKey,hasMoreBefore:props.hasMoreBefore,loading:props.loading,loadingMore:props.loadingMore,loadMoreError:props.loadMoreError,reloadable:props.reloadable,errorReloadable:props.errorReloadable,reloading:props.reloading,scrollKey:props.scrollKey,variant:props.variant,visible:props.visible,welcomeMessage:props.welcomeMessage,progressPreviewLimit:usesCommentaryForThinking(props.turns.at(-1)?.metadata?.assistantSelection)?1:2,turns:props.turns.map(turn=>{const selection=turn.metadata?.assistantSelection;return{...turn,...conversationAttribution(selection,turn.metadata?.assistantRouting),...!turn.system&&turn.metadata?.assistantRouting&&selection?{system:{role:`system`,text:`${turn.metadata.assistantRouting.requestedMode===`auto`?`Auto → `:``}${assistantModeLabel(turn.metadata.assistantRouting.resolvedMode)} · ${vibe64AssistantSelectionLabel(selection)}`}}:{},user:presentationMessage(turn.user,turn),...turn.metadata?.projectMessage?{user:null,system:{...turn.system||turn.user,role:`system`,projectMessage:turn.metadata.projectMessage}}:{},...learningGuidancePresentation(turn.user)?{user:null,system:{...turn.user,role:`system`,text:learningGuidancePresentation(turn.user).text}}:{},assistant:presentationMessage(turn.assistant,turn),thinking:turn.thinking?.map(message=>thinkingMessagePresentation(message,selection)).filter(Boolean),commentary:turn.commentary?.map(message=>thinkingMessagePresentation(presentationMessage(message,turn),selection)).filter(Boolean),messages:turn.messages?.map(message=>thinkingMessagePresentation(presentationMessage(message,turn),selection)).filter(Boolean)}})},actions:{loadMore:value=>emit(`load-more`,value),reload:()=>emit(`reload`),resend:id=>emit(`resend-turn`,id),checkDelivery:id=>emit(`resend-turn`,id),cancel:id=>emit(`cancel-turn`,id),edit:id=>emit(`edit-turn`,id),openLink(payload){if(payload.href===`#vibe64-plan-history`){payload.event?.preventDefault?.();emit(`open-plan-history`);return}const target=sourceEditorLinkTarget({href:payload.href,sourceRoot:props.sourceRoot,text:payload.text});if(!target)return;payload.event?.preventDefault?.();emit(`open-source-file`,target)}}}));return(_ctx,_cache)=>{return openBlock(),createBlock(unref(AssistantConversationElement_default),{class:`vibe64-conversation-log`,adapter:adapter.value,"avatar-size":avatarSize.value,"onUpdate:avatarSize":_cache[4]||(_cache[4]=$event=>avatarSize.value=$event)},createSlots({"system-message":withCtx(({message})=>[message.projectMessage?(openBlock(),createBlock(Vibe64ProjectMessage_default,{key:0,details:message.projectMessage,at:message.displayAt},null,8,[`details`,`at`])):(openBlock(),createBlock(Vibe64ConversationStatus_default,{key:1,message,onCheckDelivery:_cache[2]||(_cache[2]=$event=>emit(`resend-turn`,$event)),onLinkClick:adapter.value.actions.openLink},null,8,[`message`,`onLinkClick`]))]),"user-message-actions":withCtx(({turn})=>[turn.metadata?.sender?(openBlock(),createElementBlock(`div`,{key:0,class:`vibe64-conversation-log__sender text-label-small`,"data-approval-id":turn.metadata.sender.approvalId},[createVNode(VIcon,{icon:unref(mdiAccountCheckOutline),size:`14`},null,8,[`icon`]),createTextVNode(` `+toDisplayString(turn.metadata.sender.displayName)+` · approved by `+toDisplayString(turn.metadata.sender.approvedBy),1)],8,_hoisted_5$5)):createCommentVNode(``,true),turn.metadata?.source===`lesson`?(openBlock(),createBlock(VChip,{key:1,size:`x-small`,variant:`tonal`,class:`mt-1 align-self-start`,"data-test":`lesson-sent-chip`},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(` Sent by the lesson `,-1)])]),_:1})):createCommentVNode(``,true)]),attachments:withCtx(({items})=>[createVNode(_sfc_main$10,{items,"session-id":__props.sessionId},null,8,[`items`,`session-id`])]),"message-actions":withCtx(({message,turn})=>[message.integrationRequest?(openBlock(),createBlock(VCard,{key:0,class:`mt-3`,variant:`outlined`},{default:withCtx(()=>[createVNode(VCardText,{class:`text-break`},{default:withCtx(()=>[createTextVNode(` Configure integration: `+toDisplayString(message.integrationRequest.integrationId),1)]),_:2},1024),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{disabled:turn.pending||!__props.integrationRequestsEnabled,"min-height":`48`,onClick:$event=>emit(`open-integration`,{sessionId:__props.sessionId,turnId:turn.turnId,requestId:turn.integrationSetup?.requestId,integrationId:message.integrationRequest.integrationId})},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(` Configure `,-1)])]),_:1},8,[`disabled`,`onClick`]),turn.integrationSetup?.outcome===`pending`&&__props.integrationConnections[turn.integrationSetup.requestId]?.status!==`configuration-only`?(openBlock(),createBlock(VBtn,{key:0,disabled:turn.pending||!__props.integrationRequestsEnabled||Boolean(__props.integrationActionPending),loading:__props.integrationActionPending?.turnId===turn.turnId,"min-height":`48`,onClick:$event=>emit(__props.integrationConnections[turn.integrationSetup.requestId]?.status===`pending`?`check-integration`:`connect-integration`,{sessionId:__props.sessionId,turnId:turn.turnId,requestId:turn.integrationSetup.requestId})},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.integrationConnections[turn.integrationSetup.requestId]?.status===`pending`?`Check connection`:`Connect`),1)]),_:2},1032,[`disabled`,`loading`,`onClick`])):createCommentVNode(``,true),turn.integrationSetup?.outcome===`completed`&&turn.integrationSetup.continuation?.status!==`accepted`?(openBlock(),createBlock(VBtn,{key:1,disabled:turn.pending||!__props.integrationRequestsEnabled||Boolean(__props.integrationActionPending),loading:__props.integrationActionPending?.turnId===turn.turnId,"min-height":`48`,onClick:$event=>emit(`resume-integration`,{sessionId:__props.sessionId,turnId:turn.turnId,requestId:turn.integrationSetup.requestId})},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(` Check continuation `,-1)])]),_:1},8,[`disabled`,`loading`,`onClick`])):createCommentVNode(``,true),turn.integrationSetup?.outcome===`pending`?(openBlock(),createBlock(VBtn,{key:2,disabled:turn.pending||!__props.integrationRequestsEnabled||Boolean(__props.integrationActionPending),loading:__props.integrationActionPending?.turnId===turn.turnId,"min-height":`48`,onClick:$event=>emit(`skip-integration`,{sessionId:__props.sessionId,turnId:turn.turnId,requestId:turn.integrationSetup.requestId})},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(` Skip `,-1)])]),_:1},8,[`disabled`,`loading`,`onClick`])):createCommentVNode(``,true),turn.integrationSetup?.outcome===`skipped`?(openBlock(),createElementBlock(`span`,_hoisted_6$5,`Skipped`)):createCommentVNode(``,true),turn.integrationSetup?.outcome===`completed`?(openBlock(),createElementBlock(`span`,_hoisted_7$5,`Setup completed`)):createCommentVNode(``,true)]),_:2},1024),turn.integrationSetup?.outcome===`pending`&&__props.integrationConnections[turn.integrationSetup.requestId]?(openBlock(),createBlock(VCardText,{key:0,role:`status`},{default:withCtx(()=>[__props.integrationConnections[turn.integrationSetup.requestId].status===`pending`?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode(`a`,{href:__props.integrationConnections[turn.integrationSetup.requestId].authorizationUrl,target:`_blank`,rel:`noopener noreferrer`},`Continue with provider`,8,_hoisted_8$5),createVNode(VBtn,{disabled:!__props.integrationRequestsEnabled||Boolean(__props.integrationActionPending),"min-height":`48`,onClick:$event=>emit(`cancel-integration`,{sessionId:__props.sessionId,turnId:turn.turnId,requestId:turn.integrationSetup.requestId})},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(` Cancel connection `,-1)])]),_:1},8,[`disabled`,`onClick`])],64)):__props.integrationConnections[turn.integrationSetup.requestId].status===`configuration-only`?(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(`This integration uses public settings and has no account to connect. Choose Configure to edit them and prepare the application's implementation request. Skip dismisses this connection request; it does not verify tracking.`)],64)):__props.integrationConnections[turn.integrationSetup.requestId].status===`unconfigured`?(openBlock(),createElementBlock(Fragment,{key:2},[createTextVNode(`Choose Configure to complete the application's setup.`)],64)):(openBlock(),createElementBlock(Fragment,{key:3},[createTextVNode(toDisplayString(__props.integrationConnections[turn.integrationSetup.requestId].status),1)],64))]),_:2},1024)):createCommentVNode(``,true),turn.integrationSetup?.outcome===`completed`?(openBlock(),createBlock(VCardText,{key:1,role:`status`},{default:withCtx(()=>[turn.integrationSetup.continuation?.status===`accepted`?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(`Assistant continuation accepted.`)],64)):turn.integrationSetup.continuation?.status===`sending`?(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(`Assistant delivery is not yet confirmed. Check continuation to inspect delivery without sending it again.`)],64)):(openBlock(),createElementBlock(Fragment,{key:2},[createTextVNode(`Assistant continuation is pending. Check continuation to resume.`)],64))]),_:2},1024)):createCommentVNode(``,true),__props.integrationActionError?.turnId===turn.turnId?(openBlock(),createBlock(VCardText,{key:2,role:`alert`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.integrationActionError.message),1)]),_:2},1024)):createCommentVNode(``,true)]),_:2},1024)):createCommentVNode(``,true)]),_:2},[voiceBinding.value&&__props.visible?{name:`avatar`,fn:withCtx(size=>[(openBlock(),createBlock(resolveDynamicComponent(unref(voice).Avatar||unref(VoiceAvatar_default)),mergeProps(avatarVisual.value,{binding:voiceBinding.value,size:size.size,height:size.height}),null,16,[`binding`,`size`,`height`]))]),key:`0`}:void 0,voiceBinding.value&&__props.visible?{name:`avatar-tools`,fn:withCtx(()=>[createBaseVNode(`div`,{ref_key:`voiceToolsTarget`,ref:voiceToolsTarget,class:normalizeClass([`vibe64-main-conversation__voice-tools`,{"vibe64-main-conversation__voice-tools--opening":unref(holdingVoice)}])},[!voiceSession.value||unref(holdingVoice)?(openBlock(),createBlock(VBtn,{key:0,icon:voiceSession.value?.voice.listening.value&&!voiceSession.value.microphoneMuted.value?unref(mdiMicrophone):unref(mdiMicrophoneOff),variant:`text`,color:`primary`,width:`40`,"min-width":`40`,"min-height":`44`,"aria-label":unref(holdingVoice)?`Release to send`:`Talk`,title:`click or long press to talk`,"aria-pressed":unref(holdingVoice),disabled:!voiceBinding.value.available,onPointerdown:unref(voiceGesture).pointerDown,onPointerup:unref(voiceGesture).pointerUp,onPointercancel:unref(voiceGesture).cancel,onLostpointercapture:unref(voiceGesture).cancel,onKeydown:[withKeys(withModifiers(unref(voiceGesture).keyDown,[`prevent`]),[`space`]),withKeys(withModifiers(unref(voiceGesture).keyDown,[`prevent`]),[`enter`])],onKeyup:[withKeys(withModifiers(unref(voiceGesture).keyUp,[`prevent`]),[`space`]),withKeys(withModifiers(unref(voiceGesture).keyUp,[`prevent`]),[`enter`])],onBlur:unref(voiceGesture).cancel,onContextmenu:_cache[0]||(_cache[0]=withModifiers(()=>{},[`prevent`])),onClick:unref(voiceGesture).click},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_1$5,[createVNode(VIcon,{size:`20`,icon:voiceSession.value?.voice.listening.value&&!voiceSession.value.microphoneMuted.value?unref(mdiMicrophone):unref(mdiMicrophoneOff)},null,8,[`icon`])])]),_:1},8,[`icon`,`aria-label`,`aria-pressed`,`disabled`,`onPointerdown`,`onPointerup`,`onPointercancel`,`onLostpointercapture`,`onKeydown`,`onKeyup`,`onBlur`,`onClick`])):createCommentVNode(``,true),!voiceSession.value||unref(holdingVoice)?(openBlock(),createBlock(VBtn,{key:1,icon:readAloud.value?unref(mdiVolumeHigh):unref(mdiVolumeOff),variant:`text`,color:`primary`,width:`40`,"min-width":`40`,"min-height":`44`,"aria-pressed":readAloud.value,"aria-label":readAloud.value?`Turn project agent read-aloud off`:`Read project agent answers aloud`,title:readAloud.value?`Spoken replies on`:`Spoken replies off`,disabled:!voiceBinding.value.available||readAloudChangePending.value,onClick:toggleReadAloud},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_2$5,[createVNode(VIcon,{size:`20`,icon:readAloud.value?unref(mdiVolumeHigh):unref(mdiVolumeOff)},null,8,[`icon`])])]),_:1},8,[`icon`,`aria-pressed`,`aria-label`,`title`,`disabled`])):createCommentVNode(``,true),!voiceSession.value||unref(holdingVoice)?(openBlock(),createBlock(unref(VoiceConversationSettings_default),{key:2,voice:voiceSession.value?.voice,compact:``,onError:_cache[1]||(_cache[1]=$event=>unref(voice).controller.state.error=$event.message)},createSlots({_:2},[unref(voice).Settings?{name:`default`,fn:withCtx(settings=>[(openBlock(),createBlock(resolveDynamicComponent(unref(voice).Settings),mergeProps(settings,{binding:voiceBinding.value}),null,16,[`binding`]))]),key:`0`}:void 0]),1032,[`voice`])):createCommentVNode(``,true)],2)]),key:`1`}:void 0,voiceSession.value?{name:`avatar-control`,fn:withCtx(({size})=>[size===`hidden`&&voiceSession.value.voice.listening.value&&!voiceSession.value.microphoneMuted.value?(openBlock(),createElementBlock(`span`,_hoisted_3$5,[createVNode(VIcon,{size:`20`,icon:unref(mdiMicrophone)},null,8,[`icon`])])):createCommentVNode(``,true),size===`hidden`&&voiceSession.value.voice.speaking.value?(openBlock(),createElementBlock(`span`,_hoisted_4$5,[createVNode(VIcon,{size:`20`,icon:unref(mdiVolumeHigh)},null,8,[`icon`])])):createCommentVNode(``,true)]),key:`2`}:void 0,_ctx.$slots.hints||voiceSession.value||voiceError.value?{name:`hints`,fn:withCtx(()=>[voiceSession.value&&voiceBinding.value.presentation===`inline`?withDirectives((openBlock(),createElementBlock(`div`,_hoisted_9$5,[createVNode(unref(VoiceConversationHost_default),{controller:unref(voice).controller,presentation:`inline`},createSlots({conversation:withCtx(({session,disabled})=>[createVNode(unref(VoiceConversationControls_default),{session,disabled,compact:``,"icon-only":``,"tools-target":voiceToolsTarget.value,"feedback-target":voiceFeedbackTarget.value,"review-in-transcript":Boolean(voicePreview.value)},{"settings-control":withCtx(()=>[createVNode(unref(VoiceConversationSettings_default),{voice:session.voice,compact:``,onError:_cache[3]||(_cache[3]=$event=>unref(voice).controller.state.error=$event.message)},createSlots({_:2},[unref(voice).Settings?{name:`default`,fn:withCtx(settings=>[(openBlock(),createBlock(resolveDynamicComponent(unref(voice).Settings),mergeProps(settings,{binding:voiceBinding.value}),null,16,[`binding`]))]),key:`0`}:void 0]),1032,[`voice`])]),_:2},1032,[`session`,`disabled`,`tools-target`,`feedback-target`,`review-in-transcript`])]),_:2},[unref(voice).Settings?{name:`settings`,fn:withCtx(settings=>[(openBlock(),createBlock(resolveDynamicComponent(unref(voice).Settings),normalizeProps(guardReactiveProps(settings)),null,16))]),key:`0`}:void 0]),1032,[`controller`])],512)),[[vShow,!unref(voice).controller.state.nextTarget]]):createCommentVNode(``,true),voiceError.value&&__props.visible?(openBlock(),createElementBlock(`p`,_hoisted_10$5,toDisplayString(voiceError.value),1)):createCommentVNode(``,true),renderSlot(_ctx.$slots,`hints`,{},void 0,true)]),key:`3`}:void 0,_ctx.$slots.composer?{name:`composer`,fn:withCtx(()=>[renderSlot(_ctx.$slots,`composer`,{voiceBinding:voiceBinding.value,composerBlocked:composerBlocked.value,showAvatar,setVoiceFeedbackTarget},void 0,true)]),key:`4`}:void 0]),1032,[`adapter`,`avatar-size`])}}};var Vibe64ConversationLog_default=_plugin_vue_export_helper_default(_sfc_main$6,[[`__scopeId`,`data-v-7a40a912`]]);var basicNormalize=typeof String.prototype.normalize==`function`?x=>x.normalize(`NFKD`):x=>x;var SearchCursor=class{constructor(text,query,from=0,to=text.length,normalize,test){this.test=test;this.value={from:0,to:0,precise:false};this.done=false;this.matches=[];this.buffer=``;this.bufferPos=0;this.iter=text.iterRange(from,to);this.bufferStart=from;this.normalize=normalize?x=>normalize(basicNormalize(x)):basicNormalize;this.query=this.normalize(query)}peek(){if(this.bufferPos==this.buffer.length){this.bufferStart+=this.buffer.length;this.iter.next();if(this.iter.done)return-1;this.bufferPos=0;this.buffer=this.iter.value}return codePointAt(this.buffer,this.bufferPos)}next(){while(this.matches.length)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let next=this.peek();if(next<0){this.done=true;return this}let str=fromCodePoint(next),start=this.bufferStart+this.bufferPos;this.bufferPos+=codePointSize(next);let norm=this.normalize(str);if(norm.length)for(let i=0,pos=start,posPrecise=true;;i++){let code=norm.charCodeAt(i);let match=this.match(code,pos,posPrecise,this.bufferPos+this.bufferStart,i==norm.length-1);if(match){this.value=match;return this}if(i==norm.length-1)break;if(posPrecise&&i<str.length&&str.charCodeAt(i)==code)pos++;else posPrecise=false}}}match(code,pos,posPrecise,end,endPrecise){let match=null;for(let i=0;i<this.matches.length;){let partial=this.matches[i],keep=false;if(this.query.charCodeAt(partial.index)==code){if(partial.index==this.query.length-1)match={from:partial.from,to:end,precise:endPrecise&&partial.precise};else{partial.index++;keep=true}}if(keep)i++;else this.matches.splice(i,1)}if(this.query.charCodeAt(0)==code){if(this.query.length==1)match={from:pos,to:end,precise:posPrecise&&endPrecise};else this.matches.push({from:pos,index:1,precise:posPrecise})}if(match&&this.test&&!this.test(match.from,match.to,this.buffer,this.bufferStart))match=null;return match}};if(typeof Symbol!=`undefined`)SearchCursor.prototype[Symbol.iterator]=function(){return this};var empty={from:-1,to:-1,match:/.*/.exec(``),precise:true};var baseFlags=`gm`+(/x/.unicode==null?``:`u`);var RegExpCursor=class{constructor(text,query,options,from=0,to=text.length){this.text=text;this.to=to;this.curLine=``;this.done=false;this.value=empty;if(/\\[sWDnr]|\n|\r|\[\^/.test(query))return new MultilineRegExpCursor(text,query,options,from,to);this.re=new RegExp(query,baseFlags+((options===null||options===void 0?void 0:options.ignoreCase)?`i`:``));this.test=options===null||options===void 0?void 0:options.test;this.iter=text.iter();let startLine=text.lineAt(from);this.curLineStart=startLine.from;this.matchPos=toCharEnd(text,from);this.getLine(this.curLineStart)}getLine(skip){this.iter.next(skip);if(this.iter.lineBreak)this.curLine=``;else{this.curLine=this.iter.value;if(this.curLineStart+this.curLine.length>this.to)this.curLine=this.curLine.slice(0,this.to-this.curLineStart);this.iter.next()}}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1;if(this.curLineStart>this.to)this.curLine=``;else this.getLine(0)}next(){for(let off=this.matchPos-this.curLineStart;;){this.re.lastIndex=off;let match=this.matchPos<=this.to&&this.re.exec(this.curLine);if(match){let from=this.curLineStart+match.index,to=from+match[0].length;this.matchPos=toCharEnd(this.text,to+(from==to?1:0));if(from==this.curLineStart+this.curLine.length)this.nextLine();if((from<to||from>this.value.to)&&(!this.test||this.test(from,to,match))){this.value={from,to,precise:true,match};return this}off=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length<this.to){this.nextLine();off=0}else{this.done=true;return this}}}};var flattened=new WeakMap;var FlattenedDoc=class FlattenedDoc{constructor(from,text){this.from=from;this.text=text}get to(){return this.from+this.text.length}static get(doc,from,to){let cached=flattened.get(doc);if(!cached||cached.from>=to||cached.to<=from){let flat=new FlattenedDoc(from,doc.sliceString(from,to));flattened.set(doc,flat);return flat}if(cached.from==from&&cached.to==to)return cached;let{text,from:cachedFrom}=cached;if(cachedFrom>from){text=doc.sliceString(from,cachedFrom)+text;cachedFrom=from}if(cached.to<to)text+=doc.sliceString(cached.to,to);flattened.set(doc,new FlattenedDoc(cachedFrom,text));return new FlattenedDoc(from,text.slice(from-cachedFrom,to-cachedFrom))}};var MultilineRegExpCursor=class{constructor(text,query,options,from,to){this.text=text;this.to=to;this.done=false;this.value=empty;this.matchPos=toCharEnd(text,from);this.re=new RegExp(query,baseFlags+((options===null||options===void 0?void 0:options.ignoreCase)?`i`:``));this.test=options===null||options===void 0?void 0:options.test;this.flat=FlattenedDoc.get(text,from,this.chunkEnd(from+5e3))}chunkEnd(pos){return pos>=this.to?this.to:this.text.lineAt(pos).to}next(){for(;;){let off=this.re.lastIndex=this.matchPos-this.flat.from;let match=this.re.exec(this.flat.text);if(match&&!match[0]&&match.index==off){this.re.lastIndex=off+1;match=this.re.exec(this.flat.text)}if(match){let from=this.flat.from+match.index,to=from+match[0].length;if((this.flat.to>=this.to||match.index+match[0].length<=this.flat.text.length-10)&&(!this.test||this.test(from,to,match))){this.value={from,to,precise:true,match};this.matchPos=toCharEnd(this.text,to+(from==to?1:0));return this}}if(this.flat.to==this.to){this.done=true;return this}this.flat=FlattenedDoc.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}};if(typeof Symbol!=`undefined`)RegExpCursor.prototype[Symbol.iterator]=MultilineRegExpCursor.prototype[Symbol.iterator]=function(){return this};function validRegExp(source){try{new RegExp(source,baseFlags);return true}catch(_a){return false}}function toCharEnd(text,pos){if(pos>=text.length)return pos;let line=text.lineAt(pos),next;while(pos<line.to&&(next=line.text.charCodeAt(pos-line.from))>=56320&&next<57344)pos++;return pos}var gotoLine=view=>{let open=getDialog(view,`cm-goto-line`);if(open){let field=open.dom.querySelector(`input[type=text]`);if(field)field.select();return true}let{state}=view;let line=String(state.doc.lineAt(view.state.selection.main.head).number);let{close,result}=showDialog(view,{class:`cm-goto-line`,label:state.phrase(`Go to line`),input:{type:`text`,name:`line`,value:line},focus:true,submitLabel:state.phrase(`go`)});result.then(form=>{let match=form&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(form.elements[`line`].value);if(!match){view.dispatch({effects:close});return}let startLine=state.doc.lineAt(state.selection.main.head);let[,sign,ln,cl,percent]=match;let col=cl?+cl.slice(1):0;let line=ln?+ln:startLine.number;if(ln&&percent){let pc=line/100;if(sign)pc=pc*(sign==`-`?-1:1)+startLine.number/state.doc.lines;line=Math.round(state.doc.lines*pc)}else if(ln&&sign)line=line*(sign==`-`?-1:1)+startLine.number;let docLine=state.doc.line(Math.max(1,Math.min(state.doc.lines,line)));let selection=EditorSelection.cursor(docLine.from+Math.max(0,Math.min(col,docLine.length)));view.dispatch({effects:[close,EditorView.scrollIntoView(selection.from,{y:`center`})],selection})});return true};var selectWord=({state,dispatch})=>{let{selection}=state;let newSel=EditorSelection.create(selection.ranges.map(range=>state.wordAt(range.head)||EditorSelection.cursor(range.head)),selection.mainIndex);if(newSel.eq(selection))return false;dispatch(state.update({selection:newSel}));return true};function findNextOccurrence(state,query){let{main,ranges}=state.selection;let word=state.wordAt(main.head),fullWord=word&&word.from==main.from&&word.to==main.to;for(let cycled=false,cursor=new SearchCursor(state.doc,query,ranges[ranges.length-1].to);;){cursor.next();if(cursor.done){if(cycled)return null;cursor=new SearchCursor(state.doc,query,0,Math.max(0,ranges[ranges.length-1].from-1));cycled=true}else{if(cycled&&ranges.some(r=>r.from==cursor.value.from))continue;if(fullWord){let word=state.wordAt(cursor.value.from);if(!word||word.from!=cursor.value.from||word.to!=cursor.value.to)continue}return cursor.value}}}var selectNextOccurrence=({state,dispatch})=>{let{ranges}=state.selection;if(ranges.some(sel=>sel.from===sel.to))return selectWord({state,dispatch});let searchedText=state.sliceDoc(ranges[0].from,ranges[0].to);if(state.selection.ranges.some(r=>state.sliceDoc(r.from,r.to)!=searchedText))return false;let range=findNextOccurrence(state,searchedText);if(!range)return false;dispatch(state.update({selection:state.selection.addRange(EditorSelection.range(range.from,range.to),false),effects:EditorView.scrollIntoView(range.to)}));return true};var searchConfigFacet=Facet.define({combine(configs){return combineConfig(configs,{top:false,caseSensitive:false,literal:false,regexp:false,wholeWord:false,createPanel:view=>new SearchPanel(view),scrollToMatch:range=>EditorView.scrollIntoView(range)})}});var SearchQuery=class{constructor(config){this.search=config.search;this.caseSensitive=!!config.caseSensitive;this.literal=!!config.literal;this.regexp=!!config.regexp;this.replace=config.replace||``;this.valid=!!this.search&&(!this.regexp||validRegExp(this.search));this.unquoted=this.unquote(this.search);this.wholeWord=!!config.wholeWord;this.test=config.test}unquote(text){return this.literal?text:text.replace(/\\([nrt\\])/g,(_,ch)=>ch==`n`?`
|
|
11
11
|
`:ch==`r`?`\r`:ch==`t`?` `:`\\`)}eq(other){return this.search==other.search&&this.replace==other.replace&&this.caseSensitive==other.caseSensitive&&this.regexp==other.regexp&&this.wholeWord==other.wholeWord&&this.test==other.test}create(){return this.regexp?new RegExpQuery(this):new StringQuery(this)}getCursor(state,from=0,to){let st=state.doc?state:EditorState.create({doc:state});if(to==null)to=st.doc.length;return this.regexp?regexpCursor(this,st,from,to):stringCursor(this,st,from,to)}};var QueryType=class{constructor(spec){this.spec=spec}};function wrapStringTest(test,state,inner){return(from,to,buffer,bufferPos)=>{if(inner&&!inner(from,to,buffer,bufferPos))return false;return test(from>=bufferPos&&to<=bufferPos+buffer.length?buffer.slice(from-bufferPos,to-bufferPos):state.doc.sliceString(from,to),state,from,to)}}function stringCursor(spec,state,from,to){let test;if(spec.wholeWord)test=stringWordTest(state.doc,state.charCategorizer(state.selection.main.head));if(spec.test)test=wrapStringTest(spec.test,state,test);return new SearchCursor(state.doc,spec.unquoted,from,to,spec.caseSensitive?void 0:x=>x.toLowerCase(),test)}function stringWordTest(doc,categorizer){return(from,to,buf,bufPos)=>{if(bufPos>from||bufPos+buf.length<to){bufPos=Math.max(0,from-2);buf=doc.sliceString(bufPos,Math.min(doc.length,to+2))}return(categorizer(charBefore(buf,from-bufPos))!=CharCategory.Word||categorizer(charAfter(buf,from-bufPos))!=CharCategory.Word)&&(categorizer(charAfter(buf,to-bufPos))!=CharCategory.Word||categorizer(charBefore(buf,to-bufPos))!=CharCategory.Word)}}var StringQuery=class extends QueryType{constructor(spec){super(spec)}nextMatch(state,curFrom,curTo){let cursor=stringCursor(this.spec,state,curTo,state.doc.length).nextOverlapping();if(cursor.done){let end=Math.min(state.doc.length,curFrom+this.spec.unquoted.length);cursor=stringCursor(this.spec,state,0,end).nextOverlapping()}return cursor.done||cursor.value.from==curFrom&&cursor.value.to==curTo?null:cursor.value}prevMatchInRange(state,from,to){for(let pos=to;;){let start=Math.max(from,pos-1e4-this.spec.unquoted.length);let cursor=stringCursor(this.spec,state,start,pos),range=null;while(!cursor.nextOverlapping().done)range=cursor.value;if(range)return range;if(start==from)return null;pos-=1e4}}prevMatch(state,curFrom,curTo){let found=this.prevMatchInRange(state,0,curFrom);if(!found)found=this.prevMatchInRange(state,Math.max(0,curTo-this.spec.unquoted.length),state.doc.length);return found&&(found.from!=curFrom||found.to!=curTo)?found:null}getReplacement(_result){return this.spec.unquote(this.spec.replace)}matchAll(state,limit){let cursor=stringCursor(this.spec,state,0,state.doc.length),ranges=[];while(!cursor.next().done){if(ranges.length>=limit)return null;ranges.push(cursor.value)}return ranges}highlight(state,from,to,add){let cursor=stringCursor(this.spec,state,Math.max(0,from-this.spec.unquoted.length),Math.min(to+this.spec.unquoted.length,state.doc.length));while(!cursor.next().done)add(cursor.value.from,cursor.value.to)}};function wrapRegexpTest(test,state,inner){return(from,to,match)=>{return(!inner||inner(from,to,match))&&test(match[0],state,from,to)}}function regexpCursor(spec,state,from,to){let test;if(spec.wholeWord)test=regexpWordTest(state.charCategorizer(state.selection.main.head));if(spec.test)test=wrapRegexpTest(spec.test,state,test);return new RegExpCursor(state.doc,spec.search,{ignoreCase:!spec.caseSensitive,test},from,to)}function charBefore(str,index){return str.slice(findClusterBreak(str,index,false),index)}function charAfter(str,index){return str.slice(index,findClusterBreak(str,index))}function regexpWordTest(categorizer){return(_from,_to,match)=>!match[0].length||(categorizer(charBefore(match.input,match.index))!=CharCategory.Word||categorizer(charAfter(match.input,match.index))!=CharCategory.Word)&&(categorizer(charAfter(match.input,match.index+match[0].length))!=CharCategory.Word||categorizer(charBefore(match.input,match.index+match[0].length))!=CharCategory.Word)}var RegExpQuery=class extends QueryType{nextMatch(state,curFrom,curTo){let cursor=regexpCursor(this.spec,state,curTo,state.doc.length).next();if(cursor.done)cursor=regexpCursor(this.spec,state,0,curFrom).next();return cursor.done?null:cursor.value}prevMatchInRange(state,from,to){for(let size=1;;size++){let start=Math.max(from,to-size*1e4);let cursor=regexpCursor(this.spec,state,start,to),range=null;while(!cursor.next().done)range=cursor.value;if(range&&(start==from||range.from>start+10))return range;if(start==from)return null}}prevMatch(state,curFrom,curTo){return this.prevMatchInRange(state,0,curFrom)||this.prevMatchInRange(state,curTo,state.doc.length)}getReplacement(result){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(m,i)=>{if(i==`&`)return result.match[0];if(i==`$`)return`$`;for(let l=i.length;l>0;l--){let n=+i.slice(0,l);if(n>0&&n<result.match.length)return result.match[n]+i.slice(l)}return m})}matchAll(state,limit){let cursor=regexpCursor(this.spec,state,0,state.doc.length),ranges=[];while(!cursor.next().done){if(ranges.length>=limit)return null;ranges.push(cursor.value)}return ranges}highlight(state,from,to,add){let cursor=regexpCursor(this.spec,state,Math.max(0,from-250),Math.min(to+250,state.doc.length));while(!cursor.next().done)add(cursor.value.from,cursor.value.to)}};var setSearchQuery=StateEffect.define();var togglePanel=StateEffect.define();var searchState=StateField.define({create(state){return new SearchState(defaultQuery(state).create(),null)},update(value,tr){for(let effect of tr.effects)if(effect.is(setSearchQuery))value=new SearchState(effect.value.create(),value.panel);else if(effect.is(togglePanel))value=new SearchState(value.query,effect.value?createSearchPanel:null);return value},provide:f=>showPanel.from(f,val=>val.panel)});var SearchState=class{constructor(query,panel){this.query=query;this.panel=panel}};var matchMark=Decoration.mark({class:`cm-searchMatch`});var selectedMatchMark=Decoration.mark({class:`cm-searchMatch cm-searchMatch-selected`});var searchHighlighter=ViewPlugin.fromClass(class{constructor(view){this.view=view;this.decorations=this.highlight(view.state.field(searchState))}update(update){let state=update.state.field(searchState);if(state!=update.startState.field(searchState)||update.docChanged||update.selectionSet||update.viewportChanged)this.decorations=this.highlight(state)}highlight({query,panel}){if(!panel||!query.spec.valid)return Decoration.none;let{view}=this;let builder=new RangeSetBuilder;for(let i=0,ranges=view.visibleRanges,l=ranges.length;i<l;i++){let{from,to}=ranges[i];while(i<l-1&&to>ranges[i+1].from-500)to=ranges[++i].to;query.highlight(view.state,from,to,(from,to)=>{let selected=view.state.selection.ranges.some(r=>r.from==from&&r.to==to);builder.add(from,to,selected?selectedMatchMark:matchMark)})}return builder.finish()}},{decorations:v=>v.decorations});function searchCommand(f){return view=>{let state=view.state.field(searchState,false);return state&&state.query.spec.valid?f(view,state):openSearchPanel(view)}}var findNext=searchCommand((view,{query})=>{let{to}=view.state.selection.main;let next=query.nextMatch(view.state,to,to);if(!next)return false;let selection=EditorSelection.single(next.from,next.to);let config=view.state.facet(searchConfigFacet);view.dispatch({selection,effects:[announceMatch(view,next),config.scrollToMatch(selection.main,view)],userEvent:`select.search`});selectSearchInput(view);return true});var findPrevious=searchCommand((view,{query})=>{let{state}=view,{from}=state.selection.main;let prev=query.prevMatch(state,from,from);if(!prev)return false;let selection=EditorSelection.single(prev.from,prev.to);let config=view.state.facet(searchConfigFacet);view.dispatch({selection,effects:[announceMatch(view,prev),config.scrollToMatch(selection.main,view)],userEvent:`select.search`});selectSearchInput(view);return true});var selectMatches=searchCommand((view,{query})=>{let ranges=query.matchAll(view.state,1e3);if(!ranges||!ranges.length)return false;view.dispatch({selection:EditorSelection.create(ranges.map(r=>EditorSelection.range(r.from,r.to))),userEvent:`select.search.matches`});return true});var selectSelectionMatches=({state,dispatch})=>{let sel=state.selection;if(sel.ranges.length>1||sel.main.empty)return false;let{from,to}=sel.main;let ranges=[],main=0;for(let cur=new SearchCursor(state.doc,state.sliceDoc(from,to));!cur.next().done;){if(ranges.length>1e3)return false;if(cur.value.from==from)main=ranges.length;ranges.push(EditorSelection.range(cur.value.from,cur.value.to))}dispatch(state.update({selection:EditorSelection.create(ranges,main),userEvent:`select.search.matches`}));return true};var replaceNext=searchCommand((view,{query})=>{let{state}=view,{from,to}=state.selection.main;if(state.readOnly)return false;let match=query.nextMatch(state,from,from);if(!match)return false;let next=match;let changes=[],selection,replacement;let effects=[];if(!next.precise)next=query.nextMatch(state,next.from,next.to);else if(next.from==from&&next.to==to){replacement=state.toText(query.getReplacement(next));changes.push({from:next.from,to:next.to,insert:replacement});next=query.nextMatch(state,next.from,next.to);effects.push(EditorView.announce.of(state.phrase(`replaced match on line $`,state.doc.lineAt(from).number)+`.`))}let changeSet=view.state.changes(changes);if(next){selection=EditorSelection.single(next.from,next.to).map(changeSet);effects.push(announceMatch(view,next));effects.push(state.facet(searchConfigFacet).scrollToMatch(selection.main,view))}view.dispatch({changes:changeSet,selection,effects,userEvent:`input.replace`});return true});var replaceAll=searchCommand((view,{query})=>{if(view.state.readOnly)return false;let changes=[];for(let match of query.matchAll(view.state,1e9)){let{from,to,precise}=match;if(precise)changes.push({from,to,insert:query.getReplacement(match)})}if(!changes.length)return false;let announceText=view.state.phrase(`replaced $ matches`,changes.length)+`.`;view.dispatch({changes,effects:EditorView.announce.of(announceText),userEvent:`input.replace.all`});return true});function createSearchPanel(view){return view.state.facet(searchConfigFacet).createPanel(view)}function defaultQuery(state,fallback){var _a,_b,_c,_d,_e;let sel=state.selection.main;let selText=sel.empty||sel.to>sel.from+100?``:state.sliceDoc(sel.from,sel.to);if(fallback&&!selText)return fallback;let config=state.facet(searchConfigFacet);return new SearchQuery({search:((_a=fallback===null||fallback===void 0?void 0:fallback.literal)!==null&&_a!==void 0?_a:config.literal)?selText:selText.replace(/\n/g,`\\n`),caseSensitive:(_b=fallback===null||fallback===void 0?void 0:fallback.caseSensitive)!==null&&_b!==void 0?_b:config.caseSensitive,literal:(_c=fallback===null||fallback===void 0?void 0:fallback.literal)!==null&&_c!==void 0?_c:config.literal,regexp:(_d=fallback===null||fallback===void 0?void 0:fallback.regexp)!==null&&_d!==void 0?_d:config.regexp,wholeWord:(_e=fallback===null||fallback===void 0?void 0:fallback.wholeWord)!==null&&_e!==void 0?_e:config.wholeWord})}function getSearchInput(view){let panel=getPanel(view,createSearchPanel);return panel&&panel.dom.querySelector(`[main-field]`)}function selectSearchInput(view){let input=getSearchInput(view);if(input&&input==view.root.activeElement)input.select()}var openSearchPanel=view=>{let state=view.state.field(searchState,false);if(state&&state.panel){let searchInput=getSearchInput(view);if(searchInput&&searchInput!=view.root.activeElement){let query=defaultQuery(view.state,state.query.spec);if(query.valid)view.dispatch({effects:setSearchQuery.of(query)});searchInput.focus();searchInput.select()}}else view.dispatch({effects:[togglePanel.of(true),state?setSearchQuery.of(defaultQuery(view.state,state.query.spec)):StateEffect.appendConfig.of(searchExtensions)]});return true};var closeSearchPanel=view=>{let state=view.state.field(searchState,false);if(!state||!state.panel)return false;let panel=getPanel(view,createSearchPanel);if(panel&&panel.dom.contains(view.root.activeElement))view.focus();view.dispatch({effects:togglePanel.of(false)});return true};var searchKeymap=[{key:`Mod-f`,run:openSearchPanel,scope:`editor search-panel`},{key:`F3`,run:findNext,shift:findPrevious,scope:`editor search-panel`,preventDefault:true},{key:`Mod-g`,run:findNext,shift:findPrevious,scope:`editor search-panel`,preventDefault:true},{key:`Escape`,run:closeSearchPanel,scope:`editor search-panel`},{key:`Mod-Shift-l`,run:selectSelectionMatches},{key:`Mod-Alt-g`,run:gotoLine},{key:`Mod-d`,run:selectNextOccurrence,preventDefault:true}];var SearchPanel=class{constructor(view){this.view=view;let query=this.query=view.state.field(searchState).query.spec;this.commit=this.commit.bind(this);this.searchField=crelt(`input`,{value:query.search,placeholder:phrase(view,`Find`),"aria-label":phrase(view,`Find`),class:`cm-textfield`,name:`search`,form:``,"main-field":`true`,onchange:this.commit,onkeyup:this.commit});this.replaceField=crelt(`input`,{value:query.replace,placeholder:phrase(view,`Replace`),"aria-label":phrase(view,`Replace`),class:`cm-textfield`,name:`replace`,form:``,onchange:this.commit,onkeyup:this.commit});this.caseField=crelt(`input`,{type:`checkbox`,name:`case`,form:``,checked:query.caseSensitive,onchange:this.commit});this.reField=crelt(`input`,{type:`checkbox`,name:`re`,form:``,checked:query.regexp,onchange:this.commit});this.wordField=crelt(`input`,{type:`checkbox`,name:`word`,form:``,checked:query.wholeWord,onchange:this.commit});function button(name,onclick,content){return crelt(`button`,{class:`cm-button`,name,onclick,type:`button`},content)}this.dom=crelt(`div`,{onkeydown:e=>this.keydown(e),class:`cm-search`},[this.searchField,button(`next`,()=>findNext(view),[phrase(view,`next`)]),button(`prev`,()=>findPrevious(view),[phrase(view,`previous`)]),button(`select`,()=>selectMatches(view),[phrase(view,`all`)]),crelt(`label`,null,[this.caseField,phrase(view,`match case`)]),crelt(`label`,null,[this.reField,phrase(view,`regexp`)]),crelt(`label`,null,[this.wordField,phrase(view,`by word`)]),...view.state.readOnly?[]:[crelt(`br`),this.replaceField,button(`replace`,()=>replaceNext(view),[phrase(view,`replace`)]),button(`replaceAll`,()=>replaceAll(view),[phrase(view,`replace all`)])],crelt(`button`,{name:`close`,onclick:()=>closeSearchPanel(view),"aria-label":phrase(view,`close`),type:`button`},[`×`])])}commit(){let query=new SearchQuery({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});if(!query.eq(this.query)){this.query=query;this.view.dispatch({effects:setSearchQuery.of(query)})}}keydown(e){if(runScopeHandlers(this.view,e,`search-panel`))e.preventDefault();else if(e.keyCode==13&&e.target==this.searchField){e.preventDefault();(e.shiftKey?findPrevious:findNext)(this.view)}else if(e.keyCode==13&&e.target==this.replaceField){e.preventDefault();replaceNext(this.view)}}update(update){for(let tr of update.transactions)for(let effect of tr.effects)if(effect.is(setSearchQuery)&&!effect.value.eq(this.query))this.setQuery(effect.value)}setQuery(query){this.query=query;this.searchField.value=query.search;this.replaceField.value=query.replace;this.caseField.checked=query.caseSensitive;this.reField.checked=query.regexp;this.wordField.checked=query.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(searchConfigFacet).top}};function phrase(view,phrase){return view.state.phrase(phrase)}var AnnounceMargin=30;var Break=/[\s\.,:;?!]/;function announceMatch(view,{from,to}){let line=view.state.doc.lineAt(from),lineEnd=view.state.doc.lineAt(to).to;let start=Math.max(line.from,from-AnnounceMargin),end=Math.min(lineEnd,to+AnnounceMargin);let text=view.state.sliceDoc(start,end);if(start!=line.from){for(let i=0;i<AnnounceMargin;i++)if(!Break.test(text[i+1])&&Break.test(text[i])){text=text.slice(i);break}}if(end!=lineEnd){for(let i=text.length-1;i>text.length-AnnounceMargin;i--)if(!Break.test(text[i-1])&&Break.test(text[i])){text=text.slice(0,i);break}}return EditorView.announce.of(`${view.state.phrase(`current match`)}. ${text} ${view.state.phrase(`on line`)} ${line.number}.`)}var baseTheme=EditorView.baseTheme({".cm-panel.cm-search":{padding:`2px 6px 4px`,position:`relative`,"& [name=close]":{position:`absolute`,top:`0`,right:`4px`,backgroundColor:`inherit`,border:`none`,font:`inherit`,padding:0,margin:0},"& input, & button, & label":{margin:`.2em .6em .2em 0`},"& input[type=checkbox]":{marginRight:`.2em`},"& label":{fontSize:`80%`,whiteSpace:`pre`}},"&light .cm-searchMatch":{backgroundColor:`#ffff0054`},"&dark .cm-searchMatch":{backgroundColor:`#00ffff8a`},"&light .cm-searchMatch-selected":{backgroundColor:`#ff6a0054`},"&dark .cm-searchMatch-selected":{backgroundColor:`#ff00ff8a`}});var searchExtensions=[searchState,Prec.low(searchHighlighter),baseTheme];var noSemi=317;var noSemiType=318;var incdec=1;var incdecPrefix=2;var questionDot=3;var JSXStartTag=4;var insertSemi=319;var spaces=321;var newline$1=322;var LineComment=5;var BlockComment=6;var Dialect_jsx=0;var space$2=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288];var braceR=125;var semicolon=59;var slash$1=47;var star=42;var plus=43;var minus=45;var lt=60;var comma=44;var question$1=63;var dot=46;var bracketL$1=91;var trackNewline=new ContextTracker({start:false,shift(context,term){return term==LineComment||term==BlockComment||term==spaces?context:term==newline$1},strict:false});var insertSemicolon=new ExternalTokenizer((input,stack)=>{let{next}=input;if(next==braceR||next==-1||stack.context)input.acceptToken(insertSemi)},{contextual:true,fallback:true});var noSemicolon=new ExternalTokenizer((input,stack)=>{let{next}=input,after;if(space$2.indexOf(next)>-1)return;if(next==slash$1&&((after=input.peek(1))==slash$1||after==star))return;if(next!=braceR&&next!=semicolon&&next!=-1&&!stack.context)input.acceptToken(noSemi)},{contextual:true});var noSemicolonType=new ExternalTokenizer((input,stack)=>{if(input.next==bracketL$1&&!stack.context)input.acceptToken(noSemiType)},{contextual:true});var operatorToken=new ExternalTokenizer((input,stack)=>{let{next}=input;if(next==plus||next==minus){input.advance();if(next==input.next){input.advance();let mayPostfix=!stack.context&&stack.canShift(incdec);input.acceptToken(mayPostfix?incdec:incdecPrefix)}}else if(next==question$1&&input.peek(1)==dot){input.advance();input.advance();if(input.next<48||input.next>57)input.acceptToken(questionDot)}},{contextual:true});function identifierChar(ch,start){return ch>=65&&ch<=90||ch>=97&&ch<=122||ch==95||ch>=192||!start&&ch>=48&&ch<=57}var jsx=new ExternalTokenizer((input,stack)=>{if(input.next!=lt||!stack.dialectEnabled(Dialect_jsx))return;input.advance();if(input.next==slash$1)return;let back=0;while(space$2.indexOf(input.next)>-1){input.advance();back++}if(identifierChar(input.next,true)){input.advance();back++;while(identifierChar(input.next,false)){input.advance();back++}while(space$2.indexOf(input.next)>-1){input.advance();back++}if(input.next==comma)return;for(let i=0;;i++){if(i==7){if(!identifierChar(input.next,true))return;break}if(input.next!=`extends`.charCodeAt(i))break;input.advance();back++}}input.acceptToken(JSXStartTag,-back)});var jsHighlight=styleTags({"get set async static":tags$1.modifier,"for while do if else switch try catch finally return throw break continue default case defer":tags$1.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":tags$1.operatorKeyword,"let var const using function class extends":tags$1.definitionKeyword,"import export from":tags$1.moduleKeyword,"with debugger new":tags$1.keyword,TemplateString:tags$1.special(tags$1.string),super:tags$1.atom,BooleanLiteral:tags$1.bool,this:tags$1.self,null:tags$1.null,Star:tags$1.modifier,VariableName:tags$1.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":tags$1.function(tags$1.variableName),VariableDefinition:tags$1.definition(tags$1.variableName),Label:tags$1.labelName,PropertyName:tags$1.propertyName,PrivatePropertyName:tags$1.special(tags$1.propertyName),"CallExpression/MemberExpression/PropertyName":tags$1.function(tags$1.propertyName),"FunctionDeclaration/VariableDefinition":tags$1.function(tags$1.definition(tags$1.variableName)),"ClassDeclaration/VariableDefinition":tags$1.definition(tags$1.className),"NewExpression/VariableName":tags$1.className,PropertyDefinition:tags$1.definition(tags$1.propertyName),PrivatePropertyDefinition:tags$1.definition(tags$1.special(tags$1.propertyName)),UpdateOp:tags$1.updateOperator,"LineComment Hashbang":tags$1.lineComment,BlockComment:tags$1.blockComment,Number:tags$1.number,String:tags$1.string,Escape:tags$1.escape,ArithOp:tags$1.arithmeticOperator,LogicOp:tags$1.logicOperator,BitOp:tags$1.bitwiseOperator,CompareOp:tags$1.compareOperator,RegExp:tags$1.regexp,Equals:tags$1.definitionOperator,Arrow:tags$1.function(tags$1.punctuation),": Spread":tags$1.punctuation,"( )":tags$1.paren,"[ ]":tags$1.squareBracket,"{ }":tags$1.brace,"InterpolationStart InterpolationEnd":tags$1.special(tags$1.brace),".":tags$1.derefOperator,", ;":tags$1.separator,"@":tags$1.meta,TypeName:tags$1.typeName,TypeDefinition:tags$1.definition(tags$1.typeName),"type enum interface implements namespace module declare":tags$1.definitionKeyword,"abstract global Privacy readonly override":tags$1.modifier,"is keyof unique infer asserts":tags$1.operatorKeyword,JSXAttributeValue:tags$1.attributeValue,JSXText:tags$1.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":tags$1.angleBracket,"JSXIdentifier JSXNameSpacedName":tags$1.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":tags$1.attributeName,"JSXBuiltin/JSXIdentifier":tags$1.standard(tags$1.tagName)});var spec_identifier$2={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:237,private:237,protected:237,readonly:239,instanceof:258,satisfies:261,import:294,keyof:351,unique:355,infer:361,asserts:397,is:399,abstract:419,implements:421,type:423,let:426,var:428,using:431,interface:437,enum:441,namespace:447,module:449,declare:453,global:457,defer:473,for:478,of:487,while:490,with:494,do:498,if:502,else:504,switch:508,case:514,try:520,catch:524,finally:528,return:532,throw:536,break:540,continue:544,debugger:548};var spec_word={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:403};var spec_LessThan={__proto__:null,"<":193};var parser$5=LRParser.deserialize({version:14,states:"$FvQ%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Im'#ImO1XQ`O'#GtO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JsO6[Q!0MxO'#JtO6uQ`O'#F^O6zQ,UO'#FuOOQ!0Lf'#Fg'#FgO7VO7dO'#FgO9XQMhO'#F}O9`Q`O'#F|OOQ!0Lf'#Jt'#JtOOQ!0Lb'#Js'#JsO9eQ`O'#GxOOQ['#K`'#K`O9pQ`O'#IZO9uQ!0LrO'#I[OOQ['#Ja'#JaOOQ['#I`'#I`Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GtO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EzO;hQMhO'#FfO;xQ`O'#GtOOQO'#Ka'#KaO;}Q`O'#KaO<]Q`O'#G|O<]Q`O'#G}O<]Q`O'#HPO9kQ`O'#HSO=SQ`O'#HVO>kQ`O'#CeO>{Q`O'#HdO?TQ`O'#HjO?TQ`O'#HlO`QlO'#HnO?TQ`O'#HpO?TQ`O'#HsO?YQ`O'#HyO?_Q!0LsO'#IPO%[QlO'#IRO?jQ!0LsO'#ITO?uQ!0LsO'#IVO9uQ!0LrO'#IXO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FfOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jw'#JwO%[QlO'#JwOOQO'#Jz'#JzOOQO'#Ii'#IiOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#KO'#KOOC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jy'#JyODlQpO'#JzOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CEO)CEOOOOO'#Ia'#IaOFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ib'#IbOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Id'#IdOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IeOGyQ`O'#JuOIxQ!fO'#JuO+}QlO'#JuOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KUOKPQ`O'#KTOKPQ`O'#KTOKXQ`O,5;^OK^Q`O'#KSOOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KRONtQ`O'#KQO9eQ`O'#KQO! YQ`O'#KQO! bQ`O,5;]O! gQ`O'#KQO!#lQ!fO'#JtOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#J{'#J{OOQO-E<k-E<kO9kQ`O,5=`O!$rQ`O,5=`O!$wQlO,5;ZO!&zQMhO'#EkO!(eQ`O,5;ZO!(jQlO'#DyO!(tQpO,5;eO!(|QpO,5;eO%[QlO,5;eOOQ['#FU'#FUOOQ['#FW'#FWO%[QlO,5;fO%[QlO,5;fO%[QlO,5;fO%[QlO,5;fO%[QlO,5;fO%[QlO,5;fO%[QlO,5;fO%[QlO,5;fO%[QlO,5;fO%[QlO,5;fOOQ['#F['#F[O!)[QlO,5;uOOQ!0Lf,5;z,5;zOOQ!0Lf,5;{,5;{OOQ!0Lf,5;},5;}O%[QlO'#IqO!+_Q!0LrO,5<jO%[QlO,5;fO!&zQMhO,5;fO!+|QMhO,5;fO!-nQMhO'#E^O%[QlO,5;xOOQ!0Lf,5;|,5;|O!-uQ,UO'#FkO!.rQ,UO'#KYO!.^Q,UO'#KYO!.yQ,UO'#KYOOQO'#KY'#KYO!/_Q,UO,5<TOOOW,5<a,5<aO!/pQlO'#FwOOOW'#Ip'#IpO7VO7dO,5<RO!/wQ,UO'#FyOOQ!0Lf,5<R,5<RO!0hQ$IUO'#CyOOQ!0Lh'#C}'#C}O!0{O#@ItO'#DRO!1iQMjO,5<fO!1pQ`O,5<iO!3YQ(CWO'#GYO!3jQ`O'#GZO!3oQ`O'#GZO!5_Q(CWO'#G_O!6dQpO'#GcOOQO'#Go'#GoO!,TQMhO'#GnOOQO'#Gq'#GqO!,TQMhO'#GpO!7VQ$IUO'#JmOOQ!0Lh'#Jm'#JmO!7aQ`O'#JlO!7oQ`O'#JkO!7wQ`O'#CuOOQ!0Lh'#C{'#C{O!8YQ`O'#C}OOQ!0Lh'#DV'#DVOOQ!0Lh'#DX'#DXO!8_Q`O,5<fO1SQ`O'#DZO!,TQMhO'#GQO!,TQMhO'#GSO!8gQ`O'#GUO!8lQ`O'#GVO!3oQ`O'#G]O!,TQMhO'#GbO<]Q`O'#JlO!8qQ`O'#EqO!9`Q`O,5<hOOQ!0Lb'#Cr'#CrO!9hQ`O'#ErO!:bQpO'#EsOOQ!0Lb'#KS'#KSO!:iQ!0LrO'#KbO9uQ!0LrO,5=dO`QlO,5>uOOQ['#Ji'#JiOOQ[,5>v,5>vOOQ[-E<^-E<^O!<hQ!0MxO,5:bO!=[QpO,5:`O!?WQ!0MxO,5:jO%[QlO,5:jO!AnQ!0MxO,5:lOOQO,5@{,5@{O!B_QMhO,5=`O!BmQ!0LrO'#JjO9`Q`O'#JjO!COQ!0LrO,59ZO!CZQpO,59ZO!CcQMhO,59ZO:dQMhO,59ZO!CnQ`O,5;ZO!CvQ`O'#HcO!D[Q`O'#KeO%[QlO,5<OO!=[QpO,5<QO!DdQ`O,5={O!DiQ`O,5={O!DnQ`O,5={O!D|Q`O,5={O9uQ!0LrO,5={O<]Q`O,5=kOOQO'#Cy'#CyO!ETQpO,5=hO!E]QMhO,5=iO!EhQ`O,5=kO!EmQ!bO,5=nO!EuQ`O'#KaO?YQ`O'#HXO9kQ`O'#HZO!EzQ`O'#HZO:dQMhO'#H]O!FPQ`O'#H]OOQ[,5=q,5=qO!FUQ`O'#H^O!FgQ`O'#CoO!FlQ`O,59PO!FvQ`O,59PO!H{QlO,59POOQ[,59P,59PO!I]Q!0LrO,59PO%[QlO,59PO!KhQlO'#HfOOQ['#Hg'#HgOOQ['#Hh'#HhO`QlO,5>OO!LOQ`O,5>OO`QlO,5>UO`QlO,5>WO!LTQ`O,5>YO`QlO,5>[O!LYQ`O,5>_O!L_QlO,5>eOOQ[,5>k,5>kO%[QlO,5>kO9uQ!0LrO,5>mOOQ[,5>o,5>oO#!iQ`O,5>oOOQ[,5>q,5>qO#!iQ`O,5>qOOQ[,5>s,5>sO##SQpO'#D_O%[QlO'#JwO##^QpO'#JwO##xQpO'#DmO#$ZQpO'#DmO#&lQlO'#DmO#&sQ`O'#JvO#&{Q`O,5:WOOQO'#Et'#EtO#'QQ`O'#EtO#'VQ`O'#KVO#'_Q`O,5;_O#'dQpO'#DmO#'qQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#'xQ`O,5:oO?YQ`O,5;YO!CZQpO,5;YO!CcQMhO,5;YO:dQMhO,5;YO#(QQ`O,5@cO#(VQ07dO,5:sOOQO-E<g-E<gO#)]Q!0MSO,5;RODWQpO,5:rO#)gQpO,5:rODWQpO,5;RO!COQ!0LrO,5:rOOQ!0Lb'#Ej'#EjOOQO,5;R,5;RO%[QlO,5;RO#)tQ!0LrO,5;RO#*PQ!0LrO,5;RO!CZQpO,5:rOOQO,5;X,5;XO#*_Q!0LrO,5;RPOOO'#I_'#I_P#*sO&2DjO,58|POOO,58|,58|OOOO-E<_-E<_OOQ!0Lh1G.p1G.pOOOO-E<`-E<`OOOO,59},59}O#+OQ!bO,59}OOOO-E<b-E<bOOQ!0Lf1G/g1G/gO#+TQ!fO,5?PO+}QlO,5?POOQO,5?V,5?VO#+_QlO'#IeOOQO-E<c-E<cO#+lQ`O,5@aO#+tQ!fO,5@aO#+{Q`O,5@oOOQ!0Lf1G/m1G/mO%[QlO,5@pO#,TQ`O'#IkOOQO-E<i-E<iO#+{Q`O,5@oOOQ!0Lb1G0x1G0xOOQ!0Ln1G/x1G/xOOQ!0Ln1G0Y1G0YO%[QlO,5@mO#,iQ!0LrO,5@mO#,zQ!0LrO,5@mO#-RQ`O,5@lO9eQ`O,5@lO#-ZQ`O,5@lO#-iQ`O'#InO#-RQ`O,5@lOOQ!0Lb1G0w1G0wO!(tQpO,5:uO!)PQpO,5:uOOQS,5:w,5:wO#.ZQdO,5:wO#.cQMhO1G2zO9kQ`O1G2zOOQ!0Lf1G0u1G0uO#.qQ!0MxO1G0uO#/vQ!0MvO,5;VOOQ!0Lh'#GX'#GXO#0dQ!0MzO'#JmO!$wQlO1G0uO#2oQ!fO'#JxO%[QlO'#JxO#2yQ`O,5:eOOQ!0Lh'#D_'#D_OOQ!0Lf1G1P1G1PO%[QlO1G1POOQ!0Lf1G1g1G1gO#3OQ`O1G1PO#5dQ!0MxO1G1QO#5kQ!0MxO1G1QO#8RQ!0MxO1G1QO#8YQ!0MxO1G1QO#:pQ!0MxO1G1QO#=WQ!0MxO1G1QO#=_Q!0MxO1G1QO#=fQ!0MxO1G1QO#?|Q!0MxO1G1QO#@TQ!0MxO1G1QO#BbQ?MtO'#CiO#D]Q?MtO1G1aO#DdQ?MtO'#JtO#DwQ!0MxO,5?]OOQ!0Lb-E<o-E<oO#GUQ!0MxO1G1QO#HRQ!0MzO1G1QOOQ!0Lf1G1Q1G1QO#IUQMjO'#J}O#I`Q`O,5:xO#IeQ!0MxO1G1dO#JXQ,UO,5<XO#JaQ,UO,5<YO#JiQ,UO'#FpO#KQQ`O'#FoOOQO'#KZ'#KZOOQO'#Io'#IoO#KVQ,UO1G1oOOQ!0Lf1G1o1G1oOOOW1G1z1G1zO#KhQ?MtO'#JsO#KrQ`O,5<cO!)[QlO,5<cOOOW-E<n-E<nOOQ!0Lf1G1m1G1mO#KwQpO'#KYOOQ!0Lf,5<e,5<eO#LPQpO,5<eO#LUQMhO'#DTOOOO'#Ic'#IcO#L]O#@ItO,59mOOQ!0Lh,59m,59mO%[QlO1G2QO!8lQ`O'#IsO#LhQ`O,5<{OOQ!0Lh,5<x,5<xO!,TQMhO'#IvO#MUQMjO,5=YO!,TQMhO'#IxO#MwQMjO,5=[O!&zQMhO,5=^OOQO1G2T1G2TO#NRQ!dO'#CrO#NfQ(CWO'#ErO$ nQpO'#GcO$!UQ!dO,5<tO$!]Q`O'#K]O9eQ`O'#K]O$!kQ`O,5<vO$#RQ!dO'#C{O!,TQMhO,5<uO$#]Q`O'#G[O$#qQ`O,5<uO$#vQ!dO'#GXO$$TQ!dO'#K^O$$_Q`O'#K^O!&zQMhO'#K^O$$dQ`O,5<yO$$iQlO'#JwO$$sQpO'#GdO#$ZQpO'#GdO$%UQ`O'#GhO!3oQ`O'#GlO$%ZQ!0LrO'#IuO$%fQpO,5<}OOQ!0Lp,5<},5<}O$%mQpO'#GdO$%zQpO'#GeO$&]QpO'#GeO$&bQMjO,5=YO$&rQMjO,5=[OOQ!0Lh,5=_,5=_O!,TQMhO,5@WO!,TQMhO,5@WO$'SQ`O'#IzO$'hQ`O,5@VO$'pQ`O,59aOOQ!0Lh,59i,59iO$'uQ`O,5@WO$(uQ$IYO,59uOOQ!0Lh'#Jq'#JqO$)hQMjO,5<lO$*ZQMjO,5<nO@zQ`O,5<pOOQ!0Lh,5<q,5<qO$*eQ`O,5<wO$*jQMjO,5<|O$*zQ`O'#KQO!$wQlO1G2SO$+PQ`O1G2SO9eQ`O'#KTO$+UQ`O'#D_O9eQ`O'#EtO%[QlO'#EtO9eQ`O'#I|O$+aQ!0LrO,5@|OOQ[1G3O1G3OOOQ[1G4a1G4aOOQ!0Lf1G/|1G/|OOQ!0Lf1G/z1G/zO$-cQ!0MxO1G0UOOQ[1G2z1G2zO!&zQMhO1G2zO%[QlO1G2zO#.fQ`O1G2zO$/gQMhO'#EkOOQ!0Lb,5@U,5@UO$/tQ!0LrO,5@UOOQ[1G.u1G.uO!COQ!0LrO1G.uO!CZQpO1G.uO!CcQMhO1G.uO$0VQ`O1G0uO$0[Q`O'#CiO$0gQ`O'#KfO$0oQ`O,5=}O$0tQ`O'#KfO$0yQ`O'#KfO$1XQ`O'#JSO$1gQ`O,5APO$1oQ!fO1G1jOOQ!0Lf1G1l1G1lO9kQ`O1G3gO@zQ`O1G3gO$1vQ`O1G3gO$1{Q`O1G3gO!DnQ`O1G3gO9uQ!0LrO1G3gOOQ[1G3g1G3gO!EhQ`O1G3VO!&zQMhO1G3SO$2QQ`O1G3SOOQ[1G3T1G3TO!&zQMhO1G3TO$2VQ`O1G3TO$2_QpO'#HROOQ[1G3V1G3VO!6_QpO'#JOO!EmQ!bO1G3YOOQ[1G3Y1G3YOOQ[,5=s,5=sO$2gQMhO,5=uO9kQ`O,5=uO$%UQ`O,5=wO9`Q`O,5=wO!CZQpO,5=wO!CcQMhO,5=wO:dQMhO,5=wO$2uQ`O'#KdO$3QQ`O,5=xOOQ[1G.k1G.kO$3VQ!0LrO1G.kO@zQ`O1G.kO$3bQ`O1G.kO9uQ!0LrO1G.kO$5jQ!fO,5ARO$5wQ`O,5ARO9eQ`O,5ARO$6SQlO,5>QO$6ZQ`O,5>QOOQ[1G3j1G3jO`QlO1G3jOOQ[1G3p1G3pOOQ[1G3r1G3rO?TQ`O1G3tO$6`QlO1G3vO$:dQlO'#HuOOQ[1G3y1G3yO$:qQ`O'#H{O?YQ`O'#H}OOQ[1G4P1G4PO$:yQlO1G4PO9uQ!0LrO1G4VOOQ[1G4X1G4XOOQ!0Lb'#G`'#G`O9uQ!0LrO1G4ZO9uQ!0LrO1G4]O$?QQ`O,5@cO9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CZQpO,5:XO$?VQ?MtO,5:XOOQO,5;`,5;`O$?aQpO'#IfO$?wQ`O,5@bOOQ!0Lf1G/r1G/rO$@PQpO'#IlO$@ZQ`O,5@qOOQ!0Lb1G0y1G0yO#$ZQpO,5:XOOQO'#Ih'#IhO$@cQpO,5:qOOQ!0Ln,5:q,5:qO#'{Q`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CZQpO1G0tO!CcQMhO1G0tOOQ!0Lb1G5}1G5}O!COQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@jQ!0LrO1G0mO$@uQ!0LrO1G0mO!CZQpO1G0^ODWQpO1G0^O$ATQ!0LrO1G0mOOQO1G0^1G0^O$AiQ!0MxO1G0mPOOO-E<]-E<]POOO1G.h1G.hOOOO1G/i1G/iO$AsQ!bO,5<jO$A{Q!fO1G4kOOQO1G4q1G4qO%[QlO,5?PO$BVQ`O1G5{O$B_Q`O1G6ZO$BgQ!fO1G6[O9eQ`O,5?VO$BqQ!0MxO1G6XO%[QlO1G6XO$CRQ!0LrO1G6XO$CdQ`O1G6WO$CdQ`O1G6WO9eQ`O1G6WO$ClQ`O,5?YO9eQ`O,5?YOOQO,5?Y,5?YO$DQQ`O,5?YO$*zQ`O,5?YOOQO-E<l-E<lOOQS1G0a1G0aOOQS1G0c1G0cO#.^Q`O1G0cOOQ[7+(f7+(fO!&zQMhO7+(fO%[QlO7+(fO$D`Q`O7+(fO$DkQMhO7+(fO$DyQ!0MzO,5=YO$GUQ!0MzO,5=[O$IaQ!0MzO,5=YO$KrQ!0MzO,5=[O$NTQ!0MzO,59uO%!YQ!0MzO,5<lO%$eQ!0MzO,5<nO%&pQ!0MzO,5<|OOQ!0Lf7+&a7+&aO%)RQ!0MxO7+&aO%)uQlO'#IgO%*SQ`O,5@dO%*[Q!fO,5@dOOQ!0Lf1G0P1G0PO%*fQ`O7+&kOOQ!0Lf7+&k7+&kO%*kQ?MtO,5:fO%[QlO7+&{O%*uQ?MtO,5:bO%+SQ?MtO,5:jO%+^Q?MtO,5:lO%+hQMhO'#IjO%+rQ`O,5@iOOQ!0Lh1G0d1G0dOOQO1G1s1G1sOOQO1G1t1G1tO%+zQ!jO,5<[O!)[QlO,5<ZOOQO-E<m-E<mOOQ!0Lf7+'Z7+'ZOOOW7+'f7+'fOOOW1G1}1G1}O%,VQ`O1G1}OOQ!0Lf1G2P1G2POOOO,59o,59oO%,[Q!dO,59oOOOO-E<a-E<aOOQ!0Lh1G/X1G/XO%,cQ!0MxO7+'lOOQ!0Lh,5?_,5?_O%-VQMhO1G2gP%-^Q`O'#IsPOQ!0Lh-E<q-E<qO%-zQMjO,5?bOOQ!0Lh-E<t-E<tO%.mQMjO,5?dOOQ!0Lh-E<v-E<vO%.wQ!dO1G2xO%/OQ!dO'#CrO%/fQMhO'#KTO$$iQlO'#JwOOQ!0Lh1G2`1G2`O%/pQ`O'#IrO%0XQ`O,5@wO%0XQ`O,5@wO%0aQ`O,5@wO%0lQ`O,5@wOOQO1G2b1G2bO%0zQMjO1G2aO$*zQ`O'#K]O!,TQMhO1G2aO%1[Q(CWO'#ItO%1iQ`O,5@xO!&zQMhO,5@xO%1qQ!dO,5@xOOQ!0Lh1G2e1G2eO%4RQ!fO'#CiO%4]Q`O,5=QOOQ!0Lb,5=O,5=OO%4eQpO,5=OOOQ!0Lb,5=P,5=POCwQ`O,5=OO%4pQpO,5=OOOQ!0Lb,5=S,5=SO$*zQ`O,5=WOOQO,5?a,5?aOOQO-E<s-E<sOOQ!0Lp1G2i1G2iO#$ZQpO,5=OO$$iQlO,5=QO%5OQ`O,5=PO%5ZQpO,5=PO!,TQMhO'#IvO%6TQMjO1G2tO!,TQMhO'#IxO%6vQMjO1G2vO%7QQMjO1G5rO%7[QMjO1G5rOOQO,5?f,5?fOOQO-E<x-E<xOOQO1G.{1G.{O!,TQMhO1G5rO!,TQMhO1G5rO!=[QpO,59wO%[QlO,59wOOQ!0Lh,5<k,5<kO%7iQ`O1G2[O!,TQMhO1G2cO%7nQ!0MxO7+'nOOQ!0Lf7+'n7+'nO!$wQlO7+'nO%8bQ`O,5;`OOQ!0Lb,5?h,5?hOOQ!0Lb-E<z-E<zO%8gQ!dO'#K_O#'{Q`O7+(fO4UQ!fO7+(fO$DcQ`O7+(fO%8qQ!0MvO'#CiO%9UQ!0MvO,5=TO%9iQ`O,5=TO%9qQ`O,5=TOOQ!0Lb1G5p1G5pOOQ[7+$a7+$aO!COQ!0LrO7+$aO!CZQpO7+$aO!$wQlO7+&aO%9vQ`O'#JRO%:_Q`O,5AQOOQO1G3i1G3iO9kQ`O,5AQO%:_Q`O,5AQO%:gQ`O,5AQOOQO,5?n,5?nOOQO-E=Q-E=QOOQ!0Lf7+'U7+'UO%:lQ`O7+)RO9uQ!0LrO7+)RO9kQ`O7+)RO@zQ`O7+)RO%:qQ`O7+)ROOQ[7+)R7+)ROOQ[7+(q7+(qO%:vQ!0MvO7+(nO!&zQMhO7+(nO!EcQ`O7+(oOOQ[7+(o7+(oO!&zQMhO7+(oO%;QQ`O'#KcO%;]Q`O,5=mOOQO,5?j,5?jOOQO-E<|-E<|OOQ[7+(t7+(tO%<oQpO'#H[OOQ[1G3a1G3aO!&zQMhO1G3aO%[QlO1G3aO%<vQ`O1G3aO%=RQMhO1G3aO9uQ!0LrO1G3cO$%UQ`O1G3cO9`Q`O1G3cO!CZQpO1G3cO!CcQMhO1G3cO%=aQ`O'#JQO%=uQ`O,5AOO%=}QpO,5AOOOQ!0Lb1G3d1G3dOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>YQ`O7+$VO%[QlO1G6mO%[QlO1G6nO%>_Q!0LrO1G6mO%>iQlO1G3lO%>pQ`O1G3lO%>uQlO1G3lOOQ[7+)U7+)UO9uQ!0LrO7+)`O`QlO7+)bOOQ['#Ki'#KiOOQ['#JT'#JTO%>|QlO,5>aOOQ[,5>a,5>aO%[QlO'#HvO%?ZQ`O'#HxOOQ[,5>g,5>gO9eQ`O,5>gOOQ[,5>i,5>iOOQ[7+)k7+)kOOQ[7+)q7+)qOOQ[7+)u7+)uOOQ[7+)w7+)wO%?`QpO1G5}O%?zQ`O1G0zOOQO1G/s1G/sO%@VQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?Q,5?QOOQO-E<d-E<dOOQO,5?W,5?WOOQO-E<j-E<jO!CZQpO1G/sOOQO-E<f-E<fOOQ!0Ln1G0]1G0]OOQ!0Lf7+%u7+%uO#'{Q`O7+%uOOQ!0Lf7+&`7+&`O?YQ`O7+&`O!CZQpO7+&`OOQO7+%x7+%xO$AiQ!0MxO7+&XOOQO7+&X7+&XO%[QlO7+&XO%@aQ!0LrO7+&XO!COQ!0LrO7+%xO!CZQpO7+%xO%@lQ!0LrO7+&XO%@zQ!0MxO7++sO%[QlO7++sO%A[Q`O7++rO%A[Q`O7++rOOQO1G4t1G4tO9eQ`O1G4tO%AdQ`O1G4tOOQS7+%}7+%}O#'{Q`O<<LQO4UQ!fO<<LQO%ArQ`O<<LQOOQ[<<LQ<<LQO!&zQMhO<<LQO%[QlO<<LQO%AzQ`O<<LQO%BVQ!0MzO,5?bO%DbQ!0MzO,5?dO%FmQ!0MzO1G2aO%IOQ!0MzO1G2tO%KZQ!0MzO1G2vO%MfQ!fO,5?RO%[QlO,5?ROOQO-E<e-E<eO%MpQ`O1G6OOOQ!0Lf<<JV<<JVO%MxQ?MtO1G0uO&!PQ?MtO1G1QO&!WQ?MtO1G1QO&$XQ?MtO1G1QO&$`Q?MtO1G1QO&&aQ?MtO1G1QO&(bQ?MtO1G1QO&(iQ?MtO1G1QO&(pQ?MtO1G1QO&*qQ?MtO1G1QO&*xQ?MtO1G1QO&+PQ!0MxO<<JgO&,wQ?MtO1G1QO&-tQ?MvO1G1QO&.wQ?MvO'#JmO&0}Q?MtO1G1dO&1[Q?MtO1G0UO&1fQMjO,5?UOOQO-E<h-E<hO!)[QlO'#FrOOQO'#K['#K[OOQO1G1v1G1vO&1pQ`O1G1uO&1uQ?MtO,5?]OOOW7+'i7+'iOOOO1G/Z1G/ZO&2PQ!dO1G4yOOQ!0Lh7+(R7+(RP!&zQMhO,5?_O!,TQMhO7+(dO&2WQ`O,5?^O9eQ`O,5?^O$*zQ`O,5?^OOQO-E<p-E<pO&2fQ`O1G6cO&2fQ`O1G6cO&2nQ`O1G6cO&2yQMjO7+'{O&3ZQ!dO,5?`O&3eQ`O,5?`O!&zQMhO,5?`OOQO-E<r-E<rO&3jQ!dO1G6dO&3tQ`O1G6dO&3|Q`O1G2lO!&zQMhO1G2lOOQ!0Lb1G2j1G2jOOQ!0Lb1G2k1G2kO%4eQpO1G2jO!CZQpO1G2jOCwQ`O1G2jOOQ!0Lb1G2r1G2rO&4RQpO1G2jO&4aQ`O1G2lO$*zQ`O1G2kOCwQ`O1G2kO$$iQlO1G2lO&4iQ`O1G2kO&5]QMjO,5?bOOQ!0Lh-E<u-E<uO&6OQMjO,5?dOOQ!0Lh-E<w-E<wO!,TQMhO7++^O&6YQMjO7++^O&6dQMjO7++^OOQ!0Lh1G/c1G/cO&6qQ`O1G/cOOQ!0Lh7+'v7+'vO&6vQMjO7+'}O&7WQ!0MxO<<KYOOQ!0Lf<<KY<<KYO&7zQ`O1G0zO!&zQMhO'#I{O&8PQ`O,5@yO&:RQ!fO<<LQO!&zQMhO1G2oO&:YQ!0LrO1G2oOOQ[<<G{<<G{O!COQ!0LrO<<G{O&:kQ!0MxO<<I{OOQ!0Lf<<I{<<I{OOQO,5?m,5?mO&;_Q`O,5?mO&;dQ`O,5?mOOQO-E=P-E=PO&;rQ`O1G6lO&;rQ`O1G6lO9kQ`O1G6lO@zQ`O<<LmOOQ[<<Lm<<LmO&;zQ`O<<LmO9uQ!0LrO<<LmO9kQ`O<<LmOOQ[<<LY<<LYO%:vQ!0MvO<<LYOOQ[<<LZ<<LZO!EcQ`O<<LZO&<PQpO'#I}O&<[Q`O,5@}O!)[QlO,5@}OOQ[1G3X1G3XOOQO'#JP'#JPO9uQ!0LrO'#JPO&<dQpO,5=vOOQ[,5=v,5=vO&<kQpO'#EgO&<rQpO'#GfO&<wQ`O7+({O&<|Q`O7+({OOQ[7+({7+({O!&zQMhO7+({O%[QlO7+({O&=UQ`O7+({OOQ[7+(}7+(}O9uQ!0LrO7+(}O$%UQ`O7+(}O9`Q`O7+(}O!CZQpO7+(}O&=aQ`O,5?lOOQO-E=O-E=OOOQO'#H_'#H_O&=lQ`O1G6jO9uQ!0LrO<<GqOOQ[<<Gq<<GqO@zQ`O<<GqO&=tQ`O7+,XO&=yQ`O7+,YO%[QlO7+,XO%[QlO7+,YOOQ[7+)W7+)WO&>OQ`O7+)WO&>TQlO7+)WO&>[Q`O7+)WOOQ[<<Lz<<LzOOQ[<<L|<<L|OOQ[-E=R-E=ROOQ[1G3{1G3{O&>aQ`O,5>bOOQ[,5>d,5>dO&>fQ`O1G4RO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>kQ?MtO1G6[O?YQ`O7+%_OOQ!0Lf<<Ia<<IaOOQ!0Lf<<Iz<<IzO?YQ`O<<IzOOQO<<Is<<IsO$AiQ!0MxO<<IsO%[QlO<<IsOOQO<<Id<<IdO!COQ!0LrO<<IdO&>uQ!0LrO<<IsO&?QQ!0MxO<= _O&?bQ`O<= ^OOQO7+*`7+*`O9eQ`O7+*`OOQ[ANAlANAlO&?jQ!fOANAlO!&zQMhOANAlO#'{Q`OANAlO4UQ!fOANAlO&?qQ`OANAlO%[QlOANAlO&?yQ!0MzO7+'{O&B[Q!0MzO,5?bO&DgQ!0MzO,5?dO&FrQ!0MzO7+'}O&ITQ!fO1G4mO&I_Q?MtO7+&aO&KcQ?MvO,5=YO&MjQ?MvO,5=[O&MzQ?MvO,5=YO&N[Q?MvO,5=[O&NlQ?MvO,59uO'!rQ?MvO,5<lO'$uQ?MvO,5<nO''ZQ?MvO,5<|O')PQ?MtO7+'lO')^Q?MtO7+'nO')kQ`O,5<^OOQO7+'a7+'aOOQ!0Lh7+*e7+*eO')pQMjO<<LOOOQO1G4x1G4xO')wQ`O1G4xO'*SQ`O1G4xO'*bQ`O7++}O'*bQ`O7++}O!&zQMhO1G4zO'*jQ!dO1G4zO'*tQ`O7+,OO'*|Q`O7+(WO'+XQ!dO7+(WOOQ!0Lb7+(U7+(UOOQ!0Lb7+(V7+(VO!CZQpO7+(UOCwQ`O7+(UO'+cQ`O7+(WO!&zQMhO7+(WO$*zQ`O7+(VO'+hQ`O7+(WOCwQ`O7+(VO'+pQMjO<<NxO!,TQMhO<<NxOOQ!0Lh7+$}7+$}O'+zQ!dO,5?gOOQO-E<y-E<yO',UQ!0MvO7+(ZO!&zQMhO7+(ZOOQ[AN=gAN=gO9kQ`O1G5XOOQO1G5X1G5XO',fQ`O1G5XO',kQ`O7+,WO',kQ`O7+,WO9uQ!0LrOANBXO@zQ`OANBXOOQ[ANBXANBXO',sQ`OANBXOOQ[ANAtANAtOOQ[ANAuANAuO',xQ`O,5?iOOQO-E<{-E<{O'-TQ?MtO1G6iOOQO,5?k,5?kOOQO-E<}-E<}OOQ[1G3b1G3bO'-_Q`O,5=QOOQ[<<Lg<<LgO!&zQMhO<<LgO&<wQ`O<<LgO'-dQ`O<<LgO%[QlO<<LgOOQ[<<Li<<LiO9uQ!0LrO<<LiO$%UQ`O<<LiO9`Q`O<<LiO'-lQpO1G5WO'-wQ`O7+,UOOQ[AN=]AN=]O9uQ!0LrOAN=]OOQ[<= s<= sOOQ[<= t<= tO'.PQ`O<= sO'.UQ`O<= tOOQ[<<Lr<<LrO'.ZQ`O<<LrO'.`QlO<<LrOOQ[1G3|1G3|O?YQ`O7+)mO'.gQ`O<<JQO'.rQ?MtO<<JQOOQO<<Hy<<HyOOQ!0LfAN?fAN?fOOQOAN?_AN?_O$AiQ!0MxOAN?_OOQOAN?OAN?OO%[QlOAN?_OOQO<<Mz<<MzOOQ[G27WG27WO!&zQMhOG27WO#'{Q`OG27WO'.|Q!fOG27WO4UQ!fOG27WO'/TQ`OG27WO'/]Q?MtO<<JgO'/jQ?MvO1G2aO'1`Q?MvO,5?bO'3cQ?MvO,5?dO'5fQ?MvO1G2tO'7iQ?MvO1G2vO'9lQ?MtO<<KYO'9yQ?MtO<<I{OOQO1G1x1G1xO!,TQMhOANAjOOQO7+*d7+*dO':WQ`O7+*dO':cQ`O<= iO':kQ!dO7+*fOOQ!0Lb<<Kr<<KrO$*zQ`O<<KrOCwQ`O<<KrO':uQ`O<<KrO!&zQMhO<<KrOOQ!0Lb<<Kp<<KpO!CZQpO<<KpO';QQ!dO<<KrOOQ!0Lb<<Kq<<KqO';[Q`O<<KrO!&zQMhO<<KrO$*zQ`O<<KqO';aQMjOANDdO';kQ!0MvO<<KuOOQO7+*s7+*sO9kQ`O7+*sO';{Q`O<= rOOQ[G27sG27sO9uQ!0LrOG27sO@zQ`OG27sO!)[QlO1G5TO'<TQ`O7+,TO'<]Q`O1G2lO&<wQ`OANBROOQ[ANBRANBRO!&zQMhOANBRO'<bQ`OANBROOQ[ANBTANBTO9uQ!0LrOANBTO$%UQ`OANBTOOQO'#H`'#H`OOQO7+*r7+*rOOQ[G22wG22wOOQ[ANE_ANE_OOQ[ANE`ANE`OOQ[ANB^ANB^O'<jQ`OANB^OOQ[<<MX<<MXO!)[QlOAN?lOOQOG24yG24yO$AiQ!0MxOG24yO#'{Q`OLD,rOOQ[LD,rLD,rO!&zQMhOLD,rO'<oQ!fOLD,rO'<vQ?MvO7+'{O'>lQ?MvO,5?bO'@oQ?MvO,5?dO'BrQ?MvO7+'}O'DhQMjOG27UOOQO<<NO<<NOOOQ!0LbANA^ANA^O$*zQ`OANA^OCwQ`OANA^O'DxQ!dOANA^OOQ!0LbANA[ANA[O'EPQ`OANA^O!&zQMhOANA^O'E[Q!dOANA^OOQ!0LbANA]ANA]OOQO<<N_<<N_OOQ[LD-_LD-_O9uQ!0LrOLD-_O'EfQ?MtO7+*oOOQO'#Gg'#GgOOQ[G27mG27mO&<wQ`OG27mO!&zQMhOG27mOOQ[G27oG27oO9uQ!0LrOG27oOOQ[G27xG27xO'EpQ?MtOG25WOOQOLD*eLD*eOOQ[!$(!^!$(!^O#'{Q`O!$(!^O!&zQMhO!$(!^O'EzQ!0MzOG27UOOQ!0LbG26xG26xO$*zQ`OG26xO'H]Q`OG26xOCwQ`OG26xO'HhQ!dOG26xO!&zQMhOG26xOOQ[!$(!y!$(!yOOQ[LD-XLD-XO&<wQ`OLD-XOOQ[LD-ZLD-ZOOQ[!)9Ex!)9ExO#'{Q`O!)9ExOOQ!0LbLD,dLD,dO$*zQ`OLD,dOCwQ`OLD,dO'HoQ`OLD,dO'HzQ!dOLD,dOOQ[!$(!s!$(!sOOQ[!.K;d!.K;dO'IRQ?MvOG27UOOQ!0Lb!$(!O!$(!OO$*zQ`O!$(!OOCwQ`O!$(!OO'JwQ`O!$(!OOOQ!0Lb!)9Ej!)9EjO$*zQ`O!)9EjOCwQ`O!)9EjOOQ!0Lb!.K;U!.K;UO$*zQ`O!.K;UOOQ!0Lb!4/0p!4/0pO!)[QlO'#DzO1PQ`O'#EXO'KSQ!fO'#JsO'KZQ!L^O'#DvO'KbQlO'#EOO'KiQ!fO'#CiO'NPQ!fO'#CiO!)[QlO'#EQO'NaQlO,5;ZO!)[QlO,5;fO!)[QlO,5;fO!)[QlO,5;fO!)[QlO,5;fO!)[QlO,5;fO!)[QlO,5;fO!)[QlO,5;fO!)[QlO,5;fO!)[QlO,5;fO!)[QlO,5;fO!)[QlO'#IqO(!dQ`O,5<jO!)[QlO,5;fO(!lQMhO,5;fO($VQMhO,5;fO!)[QlO,5;xO!&zQMhO'#GnO(!lQMhO'#GnO!&zQMhO'#GpO(!lQMhO'#GpO1SQ`O'#DZO1SQ`O'#DZO!&zQMhO'#GQO(!lQMhO'#GQO!&zQMhO'#GSO(!lQMhO'#GSO!&zQMhO'#GbO(!lQMhO'#GbO!)[QlO,5:jO($^QpO'#D_O!)[QlO,5@pO'NaQlO1G0uO($hQ?MtO'#CiO!)[QlO1G2QO!&zQMhO'#IvO(!lQMhO'#IvO!&zQMhO'#IxO(!lQMhO'#IxO($rQ!dO'#CrO!&zQMhO,5<uO(!lQMhO,5<uO'NaQlO1G2SO!)[QlO7+&{O!&zQMhO1G2aO(!lQMhO1G2aO!&zQMhO'#IvO(!lQMhO'#IvO!&zQMhO'#IxO(!lQMhO'#IxO!&zQMhO1G2cO(!lQMhO1G2cO'NaQlO7+'nO'NaQlO7+&aO!&zQMhOANAjO(!lQMhOANAjO(%VQ`O'#EoO(%[Q`O'#EoO(%dQ`O'#F^O(%iQ`O'#EzO(%nQ`O'#KUO(%yQ`O'#KSO(&UQ`O,5;ZO(&ZQMjO,5<fO(&bQ`O'#GZO(&gQ`O'#GZO(&lQ`O,5<fO(&tQ`O,5<hO(&|Q`O,5;ZO('UQ?MtO1G1aO(']Q`O,5<uO('bQ`O,5<uO('gQ`O,5<wO('lQ`O,5<wO('qQ`O1G2SO('vQ`O1G0uO('{QMjO<<LOO((SQMjO<<LOO((ZQMhO'#F}O9`Q`O'#F|OAuQ`O'#EnO!)[QlO,5;uO!3oQ`O'#GZO!3oQ`O'#GZO!3oQ`O'#G]O!3oQ`O'#G]O!,TQMhO7+(dO!,TQMhO7+(dO%.wQ!dO1G2xO%.wQ!dO1G2xO!&zQMhO,5=^O!&zQMhO,5=^",stateData:"()a~O'}OS(OOSTOS(PRQ~OPYOQYOSfOY!VOaqOdzOeyOl!POpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_XO!iuO!lZO!oYO!pYO!qYO!svO!uwO!xxO!|]O$X|O$oiO%i}O%k!QO%m!OO%n!OO%o!OO%r!RO%t!SO%w!TO%x!TO%z!UO&X!WO&_!XO&a!YO&c!ZO&e![O&h!]O&n!^O&t!_O&v!`O&x!aO&z!bO&|!cO(USO(WTO(ZUO(bVO(p[O~OWtO~P`OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$X!kO$oiO(U!dO(WTO(ZUO(bVO(p[O~Oa!wOs!nO!S!oO!b!yO!c!vO!d!vO!|<VO#T!pO#U!pO#V!xO#W!pO#X!pO#[!zO#]!zO(V!lO(WTO(ZUO(f!mO(p!sO~O(P!{O~OP]XR]X[]Xa]Xj]Xr]X!Q]X!S]X!]]X!l]X!p]X#R]X#S]X#`]X#lfX#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#w]X#y]X#{]X#|]X$R]X'{]X(b]X(s]X(z]X({]X~O!g%SX~P(qO_!}O(W#PO(X!}O(Y#PO~O_#QO(Y#PO(Z#PO([#QO~Ox#SO!U#TO(c#TO(d#VO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$X!kO$oiO(U<ZO(WTO(ZUO(bVO(p[O~O![#ZO!]#WO!Y(iP!Y(wP~P+}O!^#cO~P`OPYOQYOSfOd!jOe!iOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$X!kO$oiO(WTO(ZUO(bVO(p[O~Op#mO![#iO!|]O#j#lO#k#iO(U<[O!k(tP~P.iO!l#oO(U#nO~O!x#sO!|]O%i#tO~O#l#uO~O!g#vO#l#uO~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!]$_O!l#xO!p$[O#R$RO#o$OO#p$PO#q$PO#r$PO#s$QO#t$RO#u$RO#v$bO#w$SO#y$UO#{$WO#|$XO(bVO(s$YO(z#|O({#}O~Oa(gX'{(gX'x(gX!k(gX!Y(gX!_(gX%j(gX!g(gX~P1qO#S$dO#`$eO$R$eOP(hXR(hX[(hXj(hXr(hX!Q(hX!S(hX!](hX!l(hX!p(hX#R(hX#o(hX#p(hX#q(hX#r(hX#s(hX#t(hX#u(hX#v(hX#w(hX#y(hX#{(hX#|(hX(b(hX(s(hX(z(hX({(hX!_(hX%j(hX~Oa(hX'{(hX'x(hX!Y(hX!k(hXv(hX!g(hX~P4UO#`$eO~O$^$hO$`$gO$g$mO~OSfO!_$nO$j$oO$l$qO~Oh%VOj%dOk%dOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#k%cO$X%`O$u%^O$w%_O$z%aO(U$sO(WTO(ZUO(b$uO(z$}O({%POg(_P~Ol%[O~P7eO!l%eO~O!S%hO!_%iO(U%gO~O!g%mO~Oa%nO'{%nO~O!Q%rO~P%[O(V!lO~P%[O%o%vO~P%[Oh%VO!l%eO(U%gO(V!lO~Oe%}O!l%eO(U%gO~Oj$RO~O!_&PO(U%gO(V!lO(WTO(ZUO`)XP~O!Q&SO!l&RO%k&VO&U&WO~P;SO!x#sO~O%t&YO!S)TX!_)TX(U)TX~O(U&ZO~Ol!PO!u&`O%k!QO%m!OO%n!OO%o!OO%r!RO%t!SO%w!TO%x!TO~Od&eOe&dO!x&bO%i&cO%|&aO~P<bOd&hOeyOl!PO!_&gO!u&`O!xxO!|]O%i}O%m!OO%n!OO%o!OO%r!RO%t!SO%w!TO%x!TO%z!UO~Ob&kO#`&nO%k&iO(V!lO~P=gO!l&oO!u&sO~O!l#oO~O!_XO~Oa%nO'y&{O'{%nO~Oa%nO'y'OO'{%nO~Oa%nO'y'QO'{%nO~O'x]X!Y]Xv]X!k]X&]]X!_]X%j]X!g]X~P(qO!b'`O!c'WO!d'WO(V!lO(WTO(ZUO~Os'UO!S'TO!['XO(f'SO!^(jP!^(yP~P@nOn'cO!_'aO(U%gO~Oe'hO!l%eO(U%gO~O!Q&SO!l&RO~Os!nO!S!oO!|<VO#T!pO#U!pO#W!pO#X!pO(V!lO(WTO(ZUO(f!mO(p!sO~O!b'nO!c'mO!d'mO#V!pO#['oO#]'oO~PBYOa%nOh%VO!g#vO!l%eO'{%nO(s'qO~O!p'uO#`'sO~PChOs!nO!S!oO(WTO(ZUO(f!mO(p!sO~O!_XOs(nX!S(nX!b(nX!c(nX!d(nX!|(nX#T(nX#U(nX#V(nX#W(nX#X(nX#[(nX#](nX(V(nX(W(nX(Z(nX(f(nX(p(nX~O!c'mO!d'mO(V!lO~PDWO(Q'yO(R'yO(S'{O~O_!}O(W'}O(X!}O(Y'}O~O_#QO(Y'}O(Z'}O([#QO~Ov(PO~P%[Ox#SO!U#TO(c#TO(d(SO~O![(UO!Y'XX!Y'_X!]'XX!]'_X~P+}O!](WO!Y(iX~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!](WO!l#xO!p$[O#R$RO#o$OO#p$PO#q$PO#r$PO#s$QO#t$RO#u$RO#v$bO#w$SO#y$UO#{$WO#|$XO(bVO(s$YO(z#|O({#}O~O!Y(iX~PHRO!Y(]O~O!Y(vX!](vX!g(vX!k(vX(s(vX~O#`(vX#l#dX!^(vX~PJUO#`(^O!Y(xX!](xX~O!](_O!Y(wX~O!Y(bO~O#`$eO~PJUO!^(cO~P`OR#zO!Q#yO!S#{O!l#xO(bVOP!na[!naj!nar!na!]!na!p!na#R!na#o!na#p!na#q!na#r!na#s!na#t!na#u!na#v!na#w!na#y!na#{!na#|!na(s!na(z!na({!na~Oa!na'{!na'x!na!Y!na!k!nav!na!_!na%j!na!g!na~PKlO!k(dO~O!g#vO#`(eO(s'qO!](uXa(uX'{(uX~O!k(uX~PNXO!S%hO!_%iO!|]O#j(jO#k(iO(U%gO~O!](kO!k(tX~O!k(mO~O!S%hO!_%iO#k(iO(U%gO~OP(hXR(hX[(hXj(hXr(hX!Q(hX!S(hX!](hX!l(hX!p(hX#R(hX#o(hX#p(hX#q(hX#r(hX#s(hX#t(hX#u(hX#v(hX#w(hX#y(hX#{(hX#|(hX(b(hX(s(hX(z(hX({(hX~O!g#vO!k(hX~P! uOR(oO!Q(nO!l#xO#S$dO!|!{a!S!{a~O!x!{a%i!{a!_!{a#j!{a#k!{a(U!{a~P!#vO!x(sO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_XO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$X!kO$oiO(U!dO(WTO(ZUO(bVO(p[O~Oh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O<sO!S${O!_$|O!i>UO!l$xO#k<yO$X%`O$u<uO$w<wO$z%aO(U(wO(WTO(ZUO(b$uO(z$}O({%PO~O#l(yO~O![({O!k(lP~P%[O(f(}O(p[O~O!S)PO!l#xO(f(}O(p[O~OP<UOQ<UOSfOd>QOe!iOpkOr<UOskOtkOzkO|<UO!O<UO!SWO!WkO!XkO!_!eO!i<XO!lZO!o<UO!p<UO!q<UO!s<YO!u<]O!x!hO$X!kO$o>OO(U)^O(WTO(ZUO(bVO(p[O~O!]$_Oa$ra'{$ra'x$ra!k$ra!Y$ra!_$ra%j$ra!g$ra~Ol)eO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#k%cO$X%`O$u%^O$w%_O$z%aO(U(wO(WTO(ZUO(b$uO(z$}O({%PO~Og(qP~P!,TO!Q)jO!g)iO!_$_X$[$_X$^$_X$`$_X$g$_X~O!g)iO!_(|X$[(|X$^(|X$`(|X$g(|X~O!Q)jO~P!.^O!Q)jO!_(|X$[(|X$^(|X$`(|X$g(|X~O!_)lO$[)pO$^)kO$`)kO$g)qO~O![)tO~P!)[O$^$hO$`$gO$g)xO~On${X!Q${X#S${X'z${X(z${X({${X~OgmXg${XnmX!]mX#`mX~P!0SOx)zO(c){O(d)}O~On*WO!Q*PO'z*QO(z$}O({%PO~Og*OO~P!1WOg*XO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!O<sO!S*ZO!_*[O!i>UO!l$xO#k<yO$X%`O$u<uO$w<wO$z%aO(WTO(ZUO(b$uO(z$}O({%PO~Op*aOUX'{)UX~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#o$OO#p$PO#q$PO#r$PO#s$QO#t$RO#u$RO#v$bO#w$SO#y$UO#{$WO#|$XO(bVO(s$YO(z#|O({#}O~Oa!ja!]!ja'{!ja'x!ja!Y!ja!k!jav!ja!_!ja%j!ja!g!ja~P!:tO(f(}O~OR#zO!Q#yO!S#{O!l#xO(bVOP!ra[!raj!rar!ra!]!ra!p!ra#R!ra#o!ra#p!ra#q!ra#r!ra#s!ra#t!ra#u!ra#v!ra#w!ra#y!ra#{!ra#|!ra(s!ra(z!ra({!ra~Oa!ra'{!ra'x!ra!Y!ra!k!rav!ra!_!ra%j!ra!g!ra~P!=aOR#zO!Q#yO!S#{O!l#xO(bVOP!ta[!taj!tar!ta!]!ta!p!ta#R!ta#o!ta#p!ta#q!ta#r!ta#s!ta#t!ta#u!ta#v!ta#w!ta#y!ta#{!ta#|!ta(s!ta(z!ta({!ta~Oa!ta'{!ta'x!ta!Y!ta!k!tav!ta!_!ta%j!ta!g!ta~P!?wOh%VOn+iO!_'aO%j+hO~O!g+kOa(^X!_(^X'{(^X!](^X~Oa%nO!_XO'{%nO~Oh%VO!l%eO~Oh%VO!l%eO(U%gO~O!g#vO#l(yO~Ob+vO%k+wO(U+sO(WTO(ZUO!^)YP~O!]+xO`)XX~O[+|O~O`+}O~O!_&PO(U%gO(V!lO`)XP~O%k,QO~P;SOh%VO#`,UO~Oh%VOn,XO!_$|O~O!_,ZO~O!Q,]O!_XO~O%o%vO~O!x,bO~Oe,gO~Ob,hO(U#nO(WTO(ZUO!^)WP~Oe%}O~O%k!QO(U&ZO~P=gO[,mO`,lO~OPYOQYOSfOdzOeyOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!iuO!lZO!oYO!pYO!qYO!svO!xxO!|]O$oiO%i}O(WTO(ZUO(bVO(p[O~O!_!eO!u!gO$X!kO(U!dO~P!GOO`,lOa%nO'{%nO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!x!hO$X!kO$oiO(U!dO(WTO(ZUO(bVO(p[O~Oa,rOl!OO!uwO%m!OO%n!OO%o!OO~P!IhO!l&oO~O&_,xO~O!_,zO~O&p,|O&r,}OP&maQ&maS&maY&maa&mad&mae&mal&map&mar&mas&mat&maz&ma|&ma!O&ma!S&ma!W&ma!X&ma!_&ma!i&ma!l&ma!o&ma!p&ma!q&ma!s&ma!u&ma!x&ma!|&ma$X&ma$o&ma%i&ma%k&ma%m&ma%n&ma%o&ma%r&ma%t&ma%w&ma%x&ma%z&ma&X&ma&_&ma&a&ma&c&ma&e&ma&h&ma&n&ma&t&ma&v&ma&x&ma&z&ma&|&ma'x&ma(U&ma(W&ma(Z&ma(b&ma(p&ma!^&ma&f&mab&ma&k&ma~O(U-SO~Oh!eX!]#iX!^#iX!g!RX!g!eX!l!eX~O!]!eX!^!eX~P#!nO!g-WOh(kX!](kX!^(kX!g(kX!l(kXr(kX(s(kX~Oh%VO!g-YO!l%eO!]!aX!^!aX~Os!nO!S!oO(WTO(ZUO(f!mO~OP<UOQ<UOSfOd>QOe!iOpkOr<UOskOtkOzkO|<UO!O<UO!SWO!WkO!XkO!_!eO!i<XO!lZO!o<UO!p<UO!q<UO!s<YO!u<]O!x!hO$X!kO$o>OO(WTO(ZUO(bVO(p[O~O(U=PO~P#$lO!]-^O!^(jX~O!^-`O~O!g-WO~O!]-aO!^(yX~O!^-cO~O!c-dO!d-dO(V!lO~P#$ZO!^-gO~P'_On-jO!_'aO~O!Y-oO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(V!{a(W!{a(Z!{a(f!{a(p!{a~P!#vO!p-tO#`-rO~PChO!c-vO!d-vO(V!lO~PDWOa%nO#`-rO'{%nO~Oa%nO!g#vO#`-rO'{%nO~Oa%nO!g#vO!p-tO#`-rO'{%nO(s'qO~O(Q'yO(R'yO(S-{O~Ov-|O~O!Y'Xa!]'Xa~P!:tO![.QO!Y'XX!]'XX~P%[O!](WO!Y(ia~O!Y(ia~PHRO!](_O!Y(wa~O!S%hO![.UO!_%iO(U%gO!Y'_X!]'_X~O#`.WO!](ua!k(uaa(ua'{(ua~O!g#vO~P#,iO!](kO!k(ta~O!S%hO!_%iO#k.[O(U%gO~Op.aO!S%hO![.^O!_%iO!|]O#j.`O#k.^O(U%gO!]'bX!k'bX~OR.eO!l#xO~Oh%VOn.hO!_'aO%j.gO~Oa#ci!]#ci'{#ci'x#ci!Y#ci!k#civ#ci!_#ci%j#ci!g#ci~P!:tOn>[O!Q*PO'z*QO(z$}O({%PO~O#l#_aa#_a#`#_a'{#_a!]#_a!k#_a!_#_a!Y#_a~P#/eO#l(aXP(aXR(aX[(aXa(aXj(aXr(aX!S(aX!l(aX!p(aX#R(aX#o(aX#p(aX#q(aX#r(aX#s(aX#t(aX#u(aX#v(aX#w(aX#y(aX#{(aX#|(aX'{(aX(b(aX(s(aX!k(aX!Y(aX'x(aXv(aX!_(aX%j(aX!g(aX~P!6kO!].uO!k(lX~P!:tO!k.xO~O!Y.zO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(bVO[#nia#nij#nir#ni!]#ni#R#ni#p#ni#q#ni#r#ni#s#ni#t#ni#u#ni#v#ni#w#ni#y#ni#{#ni#|#ni'{#ni(s#ni(z#ni({#ni'x#ni!Y#ni!k#niv#ni!_#ni%j#ni!g#ni~O#o#ni~P#3TO#o$OO~P#3TOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#o$OO#p$PO#q$PO#r$PO(bVO[#nia#nij#ni!]#ni#R#ni#t#ni#u#ni#v#ni#w#ni#y#ni#{#ni#|#ni'{#ni(s#ni(z#ni({#ni'x#ni!Y#ni!k#niv#ni!_#ni%j#ni!g#ni~O#s#ni~P#5rO#s$QO~P#5rOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#o$OO#p$PO#q$PO#r$PO#s$QO#t$RO#u$RO#v$bO(bVOa#ni!]#ni#y#ni#{#ni#|#ni'{#ni(s#ni(z#ni({#ni'x#ni!Y#ni!k#niv#ni!_#ni%j#ni!g#ni~O#w#ni~P#8aOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#o$OO#p$PO#q$PO#r$PO#s$QO#t$RO#u$RO#v$bO#w$SO(bVO({#}Oa#ni!]#ni#{#ni#|#ni'{#ni(s#ni(z#ni'x#ni!Y#ni!k#niv#ni!_#ni%j#ni!g#ni~O#y$UO~P#:wO#y#ni~P#:wO#w$SO~P#8aOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#o$OO#p$PO#q$PO#r$PO#s$QO#t$RO#u$RO#v$bO#w$SO#y$UO(bVO(z#|O({#}Oa#ni!]#ni#|#ni'{#ni(s#ni'x#ni!Y#ni!k#niv#ni!_#ni%j#ni!g#ni~O#{#ni~P#=mO#{$WO~P#=mOP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#lfX#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#w]X#y]X#{]X#|]X$R]X(b]X(s]X(z]X({]X!]]X!^]X~O$P]X~P#@[OP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#o<_O#p<`O#q<`O#r<`O#s<aO#t<bO#u<bO#v<lO#w<cO#y<eO#{<gO#|<hO(bVO(s$YO(z#|O({#}O~O$P.|O~P#BiO#S$dO#`<nO$R<nO$P(hX!^(hX~P! uOa'ea!]'ea'{'ea'x'ea!k'ea!Y'eav'ea!_'ea%j'ea!g'ea~P!:tO[#nia#nij#nir#ni!]#ni#R#ni#s#ni#t#ni#u#ni#v#ni#w#ni#y#ni#{#ni#|#ni'{#ni(s#ni'x#ni!Y#ni!k#niv#ni!_#ni%j#ni!g#ni~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O#o$OO#p$PO#q$PO#r$PO(bVO(z#ni({#ni~P#EkOn>[O!Q*PO'z*QO(z$}O({%POP#niR#ni!S#ni!l#ni!p#ni#o#ni#p#ni#q#ni#r#ni(b#ni~P#EkO!]/QOg(qX~P!1WOg/SO~Oa$Qi!]$Qi'{$Qi'x$Qi!Y$Qi!k$Qiv$Qi!_$Qi%j$Qi!g$Qi~P!:tO$^/TO$`/TO~O$^/UO$`/UO~O!g)iO#`/VO!_$dX$[$dX$^$dX$`$dX$g$dX~O![/WO~O!_)lO$[/YO$^)kO$`)kO$g/ZO~O!]<iO!^(gX~P#BiO!^/[O~O!g)iO$g(|X~O$g/^O~Ov/_O~P!&zOx)zO(c){O(d/bO~O!S/eO~O(z$}On%ba!Q%ba'z%ba({%ba!]%ba#`%ba~Og%ba$P%ba~P#LmO({%POn%da!Q%da'z%da(z%da!]%da#`%da~Og%da$P%da~P#M`O!]fX!gfX!kfX!k${X(sfX~P!0SOp%WOQP~P!1uOr*tO!b*rO!c*lO!d*lO!l*cO#[*sO%a*nO(V!lO(WTO(ZUO~Os'UO!S/oO![+^O!^*qO(f<|O!^(yP~P#N|O!k/pO~P#/eO!]/qO!g#vO(s'qO!k)PX~O!k/vO~OnoX!QoX'zoX(zoX({oX~O!g#vO!koX~P$!pOp/xO!S%hO![*_O!_%iO(U%gO!k)PP~O#l/yO~O!Y${X!]${X!g%SX~P!0SO!]/zO!Y)QX~P#/eO!g/|O~O!Y0OO~OpkO(U0PO~P.iOh%VOr0UO!g#vO!l%eO(s'qO~O!g+kO~Oa%nO!]0YO'{%nO~O!^0[O~P!5iO!c0]O!d0]O(V!lO~P#$ZOs!nO!S0^O(WTO(ZUO(f!mO~O#[0`O~Og%ba!]%ba#`%ba$P%ba~P!1WOg%da!]%da#`%da$P%da~P!1WOj%dOk%dOl%dO(U&ZOg'nX!]'nX~O!]*zOg(_a~Og0iO~On0kO#`0jOg(`a!](`a~OR0lO!Q0lO!S0mO#S$dOn}a'z}a(z}a({}a!]}a#`}a~Og}a$P}a~P$(TO!Q*PO'z*QOn$ta(z$ta({$ta!]$ta#`$ta~Og$ta$P$ta~P$)PO!Q*PO'z*QOn$va(z$va({$va!]$va#`$va~Og$va$P$va~P$)rO#l0pO~Og%Ua!]%Ua#`%Ua$P%Ua~P!1WO!g#vO~O#l0sO~O!]#iX!^#iX!g!RX~O!]+`Oa)Ua'{)Ua~OR#zO!Q#yO!S#{O!l#xO(bVOP!ri[!rij!rir!ri!]!ri!p!ri#R!ri#o!ri#p!ri#q!ri#r!ri#s!ri#t!ri#u!ri#v!ri#w!ri#y!ri#{!ri#|!ri(s!ri(z!ri({!ri~Oa!ri'{!ri'x!ri!Y!ri!k!riv!ri!_!ri%j!ri!g!ri~P$+lOh%VOr%XOs$tOt$tOz%YO|%ZO!O<sO!S${O!_$|O!i>UO!l$xO#k<yO$X%`O$u<uO$w<wO$z%aO(WTO(ZUO(b$uO(z$}O({%PO~Op0|O%^0}O(U0{O~P$.SO!g+kOa(^a!_(^a'{(^a!](^a~O#l1TO~O[]X!]fX!^fX~O!]1UO!^)YX~O!^1WO~O[1XO~Ob1ZO(U+sO(WTO(ZUO~O!_&PO(U%gO`'vX!]'vX~O!]+xO`)Xa~O!k1^O~P!:tO[1aO~O`1bO~O#`1gO~On1jO!_$|O~O(f(}O!^)VP~Oh%VOn1sO!_1pO%j1rO~O[1}O!]1{O!^)WX~O!^2OO~O`2QOa%nO'{%nO~O(U#nO(WTO(ZUO~O#S$dO#`$eO$R$eOP(hXR(hX[(hXr(hX!Q(hX!S(hX!](hX!l(hX!p(hX#R(hX#o(hX#p(hX#q(hX#r(hX#s(hX#t(hX#u(hX#v(hX#w(hX#y(hX#{(hX#|(hX(b(hX(s(hX(z(hX({(hX~Oj2TO&]2UOa(hX~P$3mOj2TO#`$eO&]2UO~Oa2WO~P%[Oa2YO~O&f2]OP&diQ&diS&diY&dia&did&die&dil&dip&dir&dis&dit&diz&di|&di!O&di!S&di!W&di!X&di!_&di!i&di!l&di!o&di!p&di!q&di!s&di!u&di!x&di!|&di$X&di$o&di%i&di%k&di%m&di%n&di%o&di%r&di%t&di%w&di%x&di%z&di&X&di&_&di&a&di&c&di&e&di&h&di&n&di&t&di&v&di&x&di&z&di&|&di'x&di(U&di(W&di(Z&di(b&di(p&di!^&dib&di&k&di~Ob2cO!^2aO&k2bO~P`O!_XO!l2eO~O&r,}OP&miQ&miS&miY&mia&mid&mie&mil&mip&mir&mis&mit&miz&mi|&mi!O&mi!S&mi!W&mi!X&mi!_&mi!i&mi!l&mi!o&mi!p&mi!q&mi!s&mi!u&mi!x&mi!|&mi$X&mi$o&mi%i&mi%k&mi%m&mi%n&mi%o&mi%r&mi%t&mi%w&mi%x&mi%z&mi&X&mi&_&mi&a&mi&c&mi&e&mi&h&mi&n&mi&t&mi&v&mi&x&mi&z&mi&|&mi'x&mi(U&mi(W&mi(Z&mi(b&mi(p&mi!^&mi&f&mib&mi&k&mi~O!Y2kO~O!]!aa!^!aa~P#BiOs!nO!S!oO![2pO(f!mO!]'YX!^'YX~P@nO!]-^O!^(ja~O!]'`X!^'`X~P!9|O!]-aO!^(ya~O!^2wO~P'_Oa%nO#`3QO'{%nO~Oa%nO!g#vO#`3QO'{%nO~Oa%nO!g#vO!p3UO#`3QO'{%nO(s'qO~Oa%nO'{%nO~P!:tO!]$_Ov$ra~O!Y'Xi!]'Xi~P!:tO!](WO!Y(ii~O!](_O!Y(wi~O!Y(xi!](xi~P!:tO!](ui!k(uia(ui'{(ui~P!:tO#`3WO!](ui!k(uia(ui'{(ui~O!](kO!k(ti~O!S%hO!_%iO!|]O#j3]O#k3[O(U%gO~O!S%hO!_%iO#k3[O(U%gO~On3dO!_'aO%j3cO~Oh%VOn3dO!_'aO%j3cO~O#l%baP%baR%ba[%baa%baj%bar%ba!S%ba!l%ba!p%ba#R%ba#o%ba#p%ba#q%ba#r%ba#s%ba#t%ba#u%ba#v%ba#w%ba#y%ba#{%ba#|%ba'{%ba(b%ba(s%ba!k%ba!Y%ba'x%bav%ba!_%ba%j%ba!g%ba~P#LmO#l%daP%daR%da[%daa%daj%dar%da!S%da!l%da!p%da#R%da#o%da#p%da#q%da#r%da#s%da#t%da#u%da#v%da#w%da#y%da#{%da#|%da'{%da(b%da(s%da!k%da!Y%da'x%dav%da!_%da%j%da!g%da~P#M`O#l%baP%baR%ba[%baa%baj%bar%ba!S%ba!]%ba!l%ba!p%ba#R%ba#o%ba#p%ba#q%ba#r%ba#s%ba#t%ba#u%ba#v%ba#w%ba#y%ba#{%ba#|%ba'{%ba(b%ba(s%ba!k%ba!Y%ba'x%ba#`%bav%ba!_%ba%j%ba!g%ba~P#/eO#l%daP%daR%da[%daa%daj%dar%da!S%da!]%da!l%da!p%da#R%da#o%da#p%da#q%da#r%da#s%da#t%da#u%da#v%da#w%da#y%da#{%da#|%da'{%da(b%da(s%da!k%da!Y%da'x%da#`%dav%da!_%da%j%da!g%da~P#/eO#l}aP}a[}aa}aj}ar}a!l}a!p}a#R}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#w}a#y}a#{}a#|}a'{}a(b}a(s}a!k}a!Y}a'x}av}a!_}a%j}a!g}a~P$(TO#l$taP$taR$ta[$taa$taj$tar$ta!S$ta!l$ta!p$ta#R$ta#o$ta#p$ta#q$ta#r$ta#s$ta#t$ta#u$ta#v$ta#w$ta#y$ta#{$ta#|$ta'{$ta(b$ta(s$ta!k$ta!Y$ta'x$tav$ta!_$ta%j$ta!g$ta~P$)PO#l$vaP$vaR$va[$vaa$vaj$var$va!S$va!l$va!p$va#R$va#o$va#p$va#q$va#r$va#s$va#t$va#u$va#v$va#w$va#y$va#{$va#|$va'{$va(b$va(s$va!k$va!Y$va'x$vav$va!_$va%j$va!g$va~P$)rO#l%UaP%UaR%Ua[%Uaa%Uaj%Uar%Ua!S%Ua!]%Ua!l%Ua!p%Ua#R%Ua#o%Ua#p%Ua#q%Ua#r%Ua#s%Ua#t%Ua#u%Ua#v%Ua#w%Ua#y%Ua#{%Ua#|%Ua'{%Ua(b%Ua(s%Ua!k%Ua!Y%Ua'x%Ua#`%Uav%Ua!_%Ua%j%Ua!g%Ua~P#/eOa#cq!]#cq'{#cq'x#cq!Y#cq!k#cqv#cq!_#cq%j#cq!g#cq~P!:tO![3lO!]'ZX!k'ZX~P%[O!].uO!k(la~O!].uO!k(la~P!:tO!Y3oO~O$P!na!^!na~PKlO$P!ja!]!ja!^!ja~P#BiO$P!ra!^!ra~P!=aO$P!ta!^!ta~P!?wOg'^X!]'^X~P!,TO!]/QOg(qa~OSfO!_4TO$e4UO~O!^4YO~Ov4ZO~P#/eOa$nq!]$nq'{$nq'x$nq!Y$nq!k$nqv$nq!_$nq%j$nq!g$nq~P!:tO!Y4]O~P!&zO!S4^O~O!Q*PO'z*QO({%POn'ja(z'ja!]'ja#`'ja~Og'ja$P'ja~P%-cO!Q*PO'z*QOn'la(z'la({'la!]'la#`'la~Og'la$P'la~P%.UO(s$YO~P#/eO!YfX!Y${X!]fX!]${X!g%SX#`fX~P!0SOp%WO(U=VO~P!1uOp4bO!S%hO![4aO!_%iO(U%gO!]'fX!k'fX~O!]/qO!k)Pa~O!]/qO!g#vO!k)Pa~O!]/qO!g#vO(s'qO!k)Pa~Og$}i!]$}i#`$}i$P$}i~P!1WO![4jO!Y'hX!]'hX~P!3tO!]/zO!Y)Qa~O!]/zO!Y)Qa~P#/eOP]XR]X[]Xj]Xr]X!Q]X!S]X!Y]X!]]X!l]X!p]X#R]X#S]X#`]X#lfX#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#w]X#y]X#{]X#|]X$R]X(b]X(s]X(z]X({]X~Oj%ZX!g%ZX~P%1{Oj4oO!g#vO~Oh%VO!g#vO!l%eO~Oh%VOr4tO!l%eO(s'qO~Or4yO!g#vO(s'qO~Os!nO!S4zO(WTO(ZUO(f!mO~O(z$}On%bi!Q%bi'z%bi({%bi!]%bi#`%bi~Og%bi$P%bi~P%5lO({%POn%di!Q%di'z%di(z%di!]%di#`%di~Og%di$P%di~P%6_Og(`i!](`i~P!1WO#`5QOg(`i!](`i~P!1WO!k5VO~Oa$pq!]$pq'{$pq'x$pq!Y$pq!k$pqv$pq!_$pq%j$pq!g$pq~P!:tO!Y5ZO~O!]5[O!_)RX~P#/eOa${X!_${X%_]X'{${X!]${X~P!0SO%_5_OaoX!_oX'{oX!]oX~P$!pOp5`O(U#nO~O%_5_O~Ob5fO%k5gO(U+sO(WTO(ZUO!]'uX!^'uX~O!]1UO!^)Ya~O[5kO~O`5lO~O[5pO~Oa%nO'{%nO~P#/eO!]5uO#`5wO!^)VX~O!^5xO~Or6OOs!nO!S*jO!b!yO!c!vO!d!vO!|<VO#T!pO#U!pO#V!pO#W!pO#X!pO#[5}O#]!zO(V!lO(WTO(ZUO(f!mO(p!sO~O!^5|O~P%;bOn6TO!_1pO%j6SO~Oh%VOn6TO!_1pO%j6SO~Ob6[O(U#nO(WTO(ZUO!]'tX!^'tX~O!]1{O!^)Wa~O(WTO(ZUO(f6^O~O`6bO~Oj6eO&]6fO~PNXO!k6gO~P%[Oa6iO~Oa6iO~P%[Ob2cO!^6nO&k2bO~P`O!g6pO~O!g6rOh(ki!](ki!^(ki!g(ki!l(kir(ki(s(ki~O#`6sO!]#hi!^#hi~O!]!ai!^!ai~P#BiOa%nO#`6|O'{%nO~Oa%nO!g#vO#`6|O'{%nO~O!](uq!k(uqa(uq'{(uq~P!:tO!](kO!k(tq~O!S%hO!_%iO#k7TO(U%gO~O!_'aO%j7WO~On7[O!_'aO%j7WO~O#l'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#w'ja#y'ja#{'ja#|'ja'{'ja(b'ja(s'ja!k'ja!Y'ja'x'jav'ja!_'ja%j'ja!g'ja~P%-cO#l'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#w'la#y'la#{'la#|'la'{'la(b'la(s'la!k'la!Y'la'x'lav'la!_'la%j'la!g'la~P%.UO#l$}iP$}iR$}i[$}ia$}ij$}ir$}i!S$}i!]$}i!l$}i!p$}i#R$}i#o$}i#p$}i#q$}i#r$}i#s$}i#t$}i#u$}i#v$}i#w$}i#y$}i#{$}i#|$}i'{$}i(b$}i(s$}i!k$}i!Y$}i'x$}i#`$}iv$}i!_$}i%j$}i!g$}i~P#/eO#l%biP%biR%bi[%bia%bij%bir%bi!S%bi!l%bi!p%bi#R%bi#o%bi#p%bi#q%bi#r%bi#s%bi#t%bi#u%bi#v%bi#w%bi#y%bi#{%bi#|%bi'{%bi(b%bi(s%bi!k%bi!Y%bi'x%biv%bi!_%bi%j%bi!g%bi~P%5lO#l%diP%diR%di[%dia%dij%dir%di!S%di!l%di!p%di#R%di#o%di#p%di#q%di#r%di#s%di#t%di#u%di#v%di#w%di#y%di#{%di#|%di'{%di(b%di(s%di!k%di!Y%di'x%div%di!_%di%j%di!g%di~P%6_O!]'Za!k'Za~P!:tO!].uO!k(li~O$P#ci!]#ci!^#ci~P#BiOP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(bVO[#nij#nir#ni#R#ni#p#ni#q#ni#r#ni#s#ni#t#ni#u#ni#v#ni#w#ni#y#ni#{#ni#|#ni$P#ni(s#ni(z#ni({#ni!]#ni!^#ni~O#o#ni~P%NVO#o<_O~P%NVOP$[OR#zOr<kO!Q#yO!S#{O!l#xO!p$[O#o<_O#p<`O#q<`O#r<`O(bVO[#nij#ni#R#ni#t#ni#u#ni#v#ni#w#ni#y#ni#{#ni#|#ni$P#ni(s#ni(z#ni({#ni!]#ni!^#ni~O#s#ni~P&!_O#s<aO~P&!_OP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#o<_O#p<`O#q<`O#r<`O#s<aO#t<bO#u<bO#v<lO(bVO#y#ni#{#ni#|#ni$P#ni(s#ni(z#ni({#ni!]#ni!^#ni~O#w#ni~P&$gOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#o<_O#p<`O#q<`O#r<`O#s<aO#t<bO#u<bO#v<lO#w<cO(bVO({#}O#{#ni#|#ni$P#ni(s#ni(z#ni!]#ni!^#ni~O#y<eO~P&&hO#y#ni~P&&hO#w<cO~P&$gOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#o<_O#p<`O#q<`O#r<`O#s<aO#t<bO#u<bO#v<lO#w<cO#y<eO(bVO(z#|O({#}O#|#ni$P#ni(s#ni!]#ni!^#ni~O#{#ni~P&(wO#{<gO~P&(wOa#}y!]#}y'{#}y'x#}y!Y#}y!k#}yv#}y!_#}y%j#}y!g#}y~P!:tO[#nij#nir#ni#R#ni#s#ni#t#ni#u#ni#v#ni#w#ni#y#ni#{#ni#|#ni$P#ni(s#ni!]#ni!^#ni~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O#o<_O#p<`O#q<`O#r<`O(bVO(z#ni({#ni~P&+sOn>]O!Q*PO'z*QO(z$}O({%POP#niR#ni!S#ni!l#ni!p#ni#o#ni#p#ni#q#ni#r#ni(b#ni~P&+sO#S$dOP(aXR(aX[(aXj(aXn(aXr(aX!Q(aX!S(aX!l(aX!p(aX#R(aX#o(aX#p(aX#q(aX#r(aX#s(aX#t(aX#u(aX#v(aX#w(aX#y(aX#{(aX#|(aX$P(aX'z(aX(b(aX(s(aX(z(aX({(aX!](aX!^(aX~O$P$Qi!]$Qi!^$Qi~P#BiO$P!ri!^!ri~P$+lOg'^a!]'^a~P!1WO!^7nO~O!]'ea!^'ea~P#BiO!Y7oO~P#/eO!g#vO(s'qO!]'fa!k'fa~O!]/qO!k)Pi~O!]/qO!g#vO!k)Pi~Og$}q!]$}q#`$}q$P$}q~P!1WO!Y'ha!]'ha~P#/eO!g7vO~O!]/zO!Y)Qi~P#/eO!]/zO!Y)Qi~O!Y7yO~Oh%VOr8OO!l%eO(s'qO~Oj8QO!g#vO~Or8TO!g#vO(s'qO~O!Q*PO'z*QO({%POn'ka(z'ka!]'ka#`'ka~Og'ka$P'ka~P&4tO!Q*PO'z*QOn'ma(z'ma({'ma!]'ma#`'ma~Og'ma$P'ma~P&5gOg(`q!](`q~P!1WO#`8VOg(`q!](`q~P!1WO!Y8WO~Og%Pq!]%Pq#`%Pq$P%Pq~P!1WOa$py!]$py'{$py'x$py!Y$py!k$pyv$py!_$py%j$py!g$py~P!:tO!g6rO~O!]5[O!_)Ra~O!_'aOP$UaR$Ua[$Uaj$Uar$Ua!Q$Ua!S$Ua!]$Ua!l$Ua!p$Ua#R$Ua#o$Ua#p$Ua#q$Ua#r$Ua#s$Ua#t$Ua#u$Ua#v$Ua#w$Ua#y$Ua#{$Ua#|$Ua(b$Ua(s$Ua(z$Ua({$Ua~O%j7WO~P&8XO%_8[Oa%]i!_%]i'{%]i!]%]i~Oa#cy!]#cy'{#cy'x#cy!Y#cy!k#cyv#cy!_#cy%j#cy!g#cy~P!:tO[8^O~Ob8`O(U+sO(WTO(ZUO~O!]1UO!^)Yi~O`8dO~O(f(}O!]'qX!^'qX~O!]5uO!^)Va~O!^8nO~P%;bO(p!sO~P$%zO#[8oO~O!_1pO~O!_1pO%j8qO~On8tO!_1pO%j8qO~O[8yO!]'ta!^'ta~O!]1{O!^)Wi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](xi!^(xi~P#BiOa%nO#`9_O'{%nO~O!](uy!k(uya(uy'{(uy~P!:tO!](kO!k(ty~O%j9bO~P&8XO!_'aO%j9bO~O#l$}qP$}qR$}q[$}qa$}qj$}qr$}q!S$}q!]$}q!l$}q!p$}q#R$}q#o$}q#p$}q#q$}q#r$}q#s$}q#t$}q#u$}q#v$}q#w$}q#y$}q#{$}q#|$}q'{$}q(b$}q(s$}q!k$}q!Y$}q'x$}q#`$}qv$}q!_$}q%j$}q!g$}q~P#/eO#l'kaP'kaR'ka['kaa'kaj'kar'ka!S'ka!l'ka!p'ka#R'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#w'ka#y'ka#{'ka#|'ka'{'ka(b'ka(s'ka!k'ka!Y'ka'x'kav'ka!_'ka%j'ka!g'ka~P&4tO#l'maP'maR'ma['maa'maj'mar'ma!S'ma!l'ma!p'ma#R'ma#o'ma#p'ma#q'ma#r'ma#s'ma#t'ma#u'ma#v'ma#w'ma#y'ma#{'ma#|'ma'{'ma(b'ma(s'ma!k'ma!Y'ma'x'mav'ma!_'ma%j'ma!g'ma~P&5gO#l%PqP%PqR%Pq[%Pqa%Pqj%Pqr%Pq!S%Pq!]%Pq!l%Pq!p%Pq#R%Pq#o%Pq#p%Pq#q%Pq#r%Pq#s%Pq#t%Pq#u%Pq#v%Pq#w%Pq#y%Pq#{%Pq#|%Pq'{%Pq(b%Pq(s%Pq!k%Pq!Y%Pq'x%Pq#`%Pqv%Pq!_%Pq%j%Pq!g%Pq~P#/eO!]'Zi!k'Zi~P!:tO$P#cq!]#cq!^#cq~P#BiO(z$}OP%baR%ba[%baj%bar%ba!S%ba!l%ba!p%ba#R%ba#o%ba#p%ba#q%ba#r%ba#s%ba#t%ba#u%ba#v%ba#w%ba#y%ba#{%ba#|%ba$P%ba(b%ba(s%ba!]%ba!^%ba~On%ba!Q%ba'z%ba({%ba~P&IlO({%POP%daR%da[%daj%dar%da!S%da!l%da!p%da#R%da#o%da#p%da#q%da#r%da#s%da#t%da#u%da#v%da#w%da#y%da#{%da#|%da$P%da(b%da(s%da!]%da!^%da~On%da!Q%da'z%da(z%da~P&KsOn>]O!Q*PO'z*QO({%PO~P&IlOn>]O!Q*PO'z*QO(z$}O~P&KsOR0lO!Q0lO!S0mO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#w}a#y}a#{}a#|}a$P}a'z}a(b}a(s}a(z}a({}a!]}a!^}a~O!Q*PO'z*QOP$taR$ta[$taj$tan$tar$ta!S$ta!l$ta!p$ta#R$ta#o$ta#p$ta#q$ta#r$ta#s$ta#t$ta#u$ta#v$ta#w$ta#y$ta#{$ta#|$ta$P$ta(b$ta(s$ta(z$ta({$ta!]$ta!^$ta~O!Q*PO'z*QOP$vaR$va[$vaj$van$var$va!S$va!l$va!p$va#R$va#o$va#p$va#q$va#r$va#s$va#t$va#u$va#v$va#w$va#y$va#{$va#|$va$P$va(b$va(s$va(z$va({$va!]$va!^$va~On>]O!Q*PO'z*QO(z$}O({%PO~OP%UaR%Ua[%Uaj%Uar%Ua!S%Ua!l%Ua!p%Ua#R%Ua#o%Ua#p%Ua#q%Ua#r%Ua#s%Ua#t%Ua#u%Ua#v%Ua#w%Ua#y%Ua#{%Ua#|%Ua$P%Ua(b%Ua(s%Ua!]%Ua!^%Ua~P'&xO$P$nq!]$nq!^$nq~P#BiO$P$pq!]$pq!^$pq~P#BiO!^9oO~O$P9pO~P!1WO!g#vO!]'fi!k'fi~O!g#vO(s'qO!]'fi!k'fi~O!]/qO!k)Pq~O!Y'hi!]'hi~P#/eO!]/zO!Y)Qq~Or9wO!g#vO(s'qO~O[9yO!Y9xO~P#/eO!Y9xO~Oj:PO!g#vO~Og(`y!](`y~P!1WO!]'oa!_'oa~P#/eOa%]q!_%]q'{%]q!]%]q~P#/eO[:UO~O!]1UO!^)Yq~O`:YO~O#`:ZO!]'qa!^'qa~O!]5uO!^)Vi~P#BiO!S:]O~O!_1pO%j:`O~O(WTO(ZUO(f:eO~O!]1{O!^)Wq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BiO%j:rO~P&8XO!_'aO%j:rO~O$P#}y!]#}y!^#}y~P#BiOP$}iR$}i[$}ij$}ir$}i!S$}i!l$}i!p$}i#R$}i#o$}i#p$}i#q$}i#r$}i#s$}i#t$}i#u$}i#v$}i#w$}i#y$}i#{$}i#|$}i$P$}i(b$}i(s$}i!]$}i!^$}i~P'&xO!Q*PO'z*QO({%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#w'ja#y'ja#{'ja#|'ja$P'ja(b'ja(s'ja(z'ja!]'ja!^'ja~O!Q*PO'z*QOP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#w'la#y'la#{'la#|'la$P'la(b'la(s'la(z'la({'la!]'la!^'la~O(z$}OP%biR%bi[%bij%bin%bir%bi!Q%bi!S%bi!l%bi!p%bi#R%bi#o%bi#p%bi#q%bi#r%bi#s%bi#t%bi#u%bi#v%bi#w%bi#y%bi#{%bi#|%bi$P%bi'z%bi(b%bi(s%bi({%bi!]%bi!^%bi~O({%POP%diR%di[%dij%din%dir%di!Q%di!S%di!l%di!p%di#R%di#o%di#p%di#q%di#r%di#s%di#t%di#u%di#v%di#w%di#y%di#{%di#|%di$P%di'z%di(b%di(s%di(z%di!]%di!^%di~O$P$py!]$py!^$py~P#BiO$P#cy!]#cy!^#cy~P#BiO!g#vO!]'fq!k'fq~O!]/qO!k)Py~O!Y'hq!]'hq~P#/eOr:|O!g#vO(s'qO~O[;QO!Y;PO~P#/eO!Y;PO~Og(`!R!](`!R~P!1WOa%]y!_%]y'{%]y!]%]y~P#/eO!]1UO!^)Yy~O!]5uO!^)Vq~O(U;XO~O!_1pO%j;[O~O!k;_O~O%j;dO~P&8XOP$}qR$}q[$}qj$}qr$}q!S$}q!l$}q!p$}q#R$}q#o$}q#p$}q#q$}q#r$}q#s$}q#t$}q#u$}q#v$}q#w$}q#y$}q#{$}q#|$}q$P$}q(b$}q(s$}q!]$}q!^$}q~P'&xO!Q*PO'z*QO({%POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#w'ka#y'ka#{'ka#|'ka$P'ka(b'ka(s'ka(z'ka!]'ka!^'ka~O!Q*PO'z*QOP'maR'ma['maj'man'mar'ma!S'ma!l'ma!p'ma#R'ma#o'ma#p'ma#q'ma#r'ma#s'ma#t'ma#u'ma#v'ma#w'ma#y'ma#{'ma#|'ma$P'ma(b'ma(s'ma(z'ma({'ma!]'ma!^'ma~OP%PqR%Pq[%Pqj%Pqr%Pq!S%Pq!l%Pq!p%Pq#R%Pq#o%Pq#p%Pq#q%Pq#r%Pq#s%Pq#t%Pq#u%Pq#v%Pq#w%Pq#y%Pq#{%Pq#|%Pq$P%Pq(b%Pq(s%Pq!]%Pq!^%Pq~P'&xOg%f!Z!]%f!Z#`%f!Z$P%f!Z~P!1WO!Y;hO~P#/eOr;iO!g#vO(s'qO~O[;kO!Y;hO~P#/eO!]'qq!^'qq~P#BiO!]#h!Z!^#h!Z~P#BiO#l%f!ZP%f!ZR%f!Z[%f!Za%f!Zj%f!Zr%f!Z!S%f!Z!]%f!Z!l%f!Z!p%f!Z#R%f!Z#o%f!Z#p%f!Z#q%f!Z#r%f!Z#s%f!Z#t%f!Z#u%f!Z#v%f!Z#w%f!Z#y%f!Z#{%f!Z#|%f!Z'{%f!Z(b%f!Z(s%f!Z!k%f!Z!Y%f!Z'x%f!Z#`%f!Zv%f!Z!_%f!Z%j%f!Z!g%f!Z~P#/eOr;tO!g#vO(s'qO~O!Y;uO~P#/eOr;|O!g#vO(s'qO~O!Y;}O~P#/eOP%f!ZR%f!Z[%f!Zj%f!Zr%f!Z!S%f!Z!l%f!Z!p%f!Z#R%f!Z#o%f!Z#p%f!Z#q%f!Z#r%f!Z#s%f!Z#t%f!Z#u%f!Z#v%f!Z#w%f!Z#y%f!Z#{%f!Z#|%f!Z$P%f!Z(b%f!Z(s%f!Z!]%f!Z!^%f!Z~P'&xOr<QO!g#vO(s'qO~Ov(gX~P1qO!Q%rO~P!)[O(V!lO~P!)[O!YfX!]fX#`fX~P%1{OP]XR]X[]Xj]Xr]X!Q]X!S]X!]]X!]fX!l]X!p]X#R]X#S]X#`]X#`fX#lfX#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#w]X#y]X#{]X#|]X$R]X(b]X(s]X(z]X({]X~O!gfX!k]X!kfX(sfX~P'KvOP<UOQ<UOSfOd>QOe!iOpkOr<UOskOtkOzkO|<UO!O<UO!SWO!WkO!XkO!_XO!i<XO!lZO!o<UO!p<UO!q<UO!s<YO!u<]O!x!hO$X!kO$o>OO(U)^O(WTO(ZUO(bVO(p[O~O!]<iO!^$ra~Oh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O<tO!S${O!_$|O!i>VO!l$xO#k<zO$X%`O$u<vO$w<xO$z%aO(U(wO(WTO(ZUO(b$uO(z$}O({%PO~Ol)eO~P(!lOr!eX(s!eX~P#!nO!^]X!^fX~P'KvO!YfX!Y${X!]fX!]${X#`fX~P!0SO#l<^O~O!g#vO#l<^O~O#`<nO~Oj<bO~O#`<}O!](xX!^(xX~O#`<nO!](vX!^(vX~O#l=OO~Og=QO~P!1WO#l=WO~O#l=XO~Og=QO(U&ZO~O!g#vO#l=YO~O!g#vO#l=OO~O$P=ZO~P#BiO#l=[O~O#l=]O~O#l=bO~O#l=cO~O#l=dO~O#l=eO~O$P=fO~P!1WO$P=gO~P!1WOl=rO~P7eOk#S#T#U#W#X#[#j#k#v$o$u$w$z%^%_%i%j%k%r%t%w%x%z%|~(PT#p!X'}(V#qs#o#rr!Q(O$^(O(U$`(f~",goto:"$8v)^PPPPPP)_PP)bP)sP+X/]PPPP6jPP7QPP<|PPP@pPAYPAYPPPAYPCbPAYPAYPAYPCfPCkPDYPIQPPPIUPPPPIULWPPPL^MOPIUPIUPP! ^IUPPPIUPIUP!#dIUP!&y!(O!(XP!({!)P!({!,]PPPPPPP!,|!(OPP!-^!/OP!2_IUIU!2d!5o!:[!:[!>Y!>bPPP!>hIUPPPPPPPPP!AvP!CSPPIU!DdPIUPIUIUIUIUIUPIU!EuP!IOP!LTP!LX!Lc!Lg!LgP!H{P!Lk!LkP# pP# tIUPIU# z#%OCfAYPAYPAYAYP#&]AYAY#(oAY#+gAY#-sAYAY#.c#0w#0w#0|#1V#0w#1bPP#0wPAY#1zAY#5yAYAY6jPPP#:OPPP#:i#:iP#:iP#;P#:iPP#;VP#:|P#:|#;j#:|#<U#<[#<_)bP#<b)bP#<k#<k#<kP)bP)bP)bP)bPP)bP#<q#<tP#<t)bP#<xP#<{P)bP)bP)bP)bP)bP)b)bPP#=R#=X#=d#=j#=p#=v#=|#>[#>b#>l#>r#>|#?S#?d#?j#@[#@n#@t#@z#AY#Ao#Cd#Cr#Cy#Ee#Es#Ge#Gs#Gy#HP#HV#Ha#Hg#Hm#Hw#IZ#IaPPPPPPPPPPP#IgPPPPPPP#J[#Mi$ R$ Y$ bPPP$&|P$'V$*O$0f$0i$0l$1k$1n$1u$1}P$2T$2WP$2t$2x$3p$5O$5T$5kPP$5p$5v$5z$5}$6R$6V$7R$7j$8R$8V$8Y$8]$8g$8j$8n$8rR!|RoqOXst!Z#d%m&r&t&u&w,u,z2]2`Y!vQ'a-f1p5{Q%tvQ%|yQ&T|Q&j!VS'W!e-^Q'g!iS'm!r!yU*l$|*[*pQ+q%}S,O&V&WQ,f&dQ-d'`Q-n'hQ-v'nQ0]*rQ1c,QQ1z,gR<{<Y%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'c's(U(W(^(e(y({)P*O*j+Y+_,r,u,z-j-r.Q.W.u.|/o0^0m0s1T1s2T2U2W2Y2]2`2b3Q3W3l4z6T6e6f6i6|8t9T9_S#q]<V!p)`$Z$n'X)t-Y/W2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{<}=O=Q=Y=Z=d=e>RU+Q%]<s<tQ+v&PQ,h&gQ,o&oQ0y+iQ1O+kQ1Z+wQ2S,mQ3`.hQ5`0}Q5f1UQ6[1{Q7Y3dQ8`5gR9e7['OkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'c's(U(W(^(e(y({)P)t*O*j+Y+_+i,r,u,z-Y-j-r.Q.W.h.u.|/W/o0^0m0s1T1s2T2U2W2Y2]2`2b2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{<}=O=Q=Y=Z=d=e>R!S!nQ!r!v!y!z$|'W'`'a'm'n'o*l*p*r*s-^-d-f-v0]0`1p5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)z*S*U*W*Z*b*h*x*y+h+k,U,X.g/Q/e/n/y/z/|0a0c0j0k0p1g1j1r3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;k<l<m<o<p<q<r<u<v<w<x<y<z=R=S=T=U=W=X=[=]=^=_=`=a=b=c=f=g>O>W>X>[>]Q&X|S'U!e*[S']%i-aQ+v&PQ,R&WQ,h&gQ0o+TQ1Z+wQ1`+}Q2R,lQ2S,mQ5f1UQ5o1bQ6[1{Q6_1}Q6`2QQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yR;V:YrnOXst!V!Z#d%m&i&r&t&u&w,u,z2]2`R,j&k&x^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'c's(W(^(e(y({)P)t*O*j+Y+_+i,r,u,z-Y-j-r.Q.W.h.u.|/W/o0^0m0s1T1s2T2U2W2Y2]2`2b2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{<}=O=Q=Y=Z=d=e>Q>R[#]WZ#W#Z'X(U!b%jm#h#i#l$x%e%h(_(i(j(k*Z*_*c+[+^+`,q-W.U.[.].^.`/n/q2e3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,QQ&_!TQ'd!hQ'f!iQ(r#sS+p%|%}Q+t&PQ,a&bQ,e&dS-m'g'hQ.j(sQ1S+qQ1Y+wQ1[+xQ1_+|Q1u,bS1y,f,gQ2|-nQ5e1UQ5i1XQ5n1aQ6Z1zQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*S*U*b*x*y/Q/y0a0c0j0k0p4_5Q8V9p>O>W>X!^%yy!i!u%{%|%}'V'f'g'h'l'v*k+p+q-Z-m-n-u0S0V1S2u2|3T4r4s4v7}9{Q+j%wQ,V&[Q,Y&]Q,d&dQ.i(rQ1t,aU1x,e,f,gQ3e.jQ6U1uS6Y1y1zQ8x6Z#f>S#v$b$c$x${)z*W*Z*h+h+k,U,X.g/e/n/z/|1g1j1r3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=R=T=W=[=^=`=b=f>[>]o>T<l<m<p<r<v<x<z=S=U=X=]=_=a=c=gW%Ti%V*z>OS&[!Q&iQ&]!RQ&^!SU+O%[%d=rR,T&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)z*S*U*W*Z*b*h*x*y+h+k,U,X.g/Q/e/n/y/z/|0a0c0j0k0p1g1j1r3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;k<l<m<o<p<q<r<u<v<w<x<y<z=R=S=T=U=W=X=[=]=^=_=`=a=b=c=f=g>O>W>X>[>]T){$u)|V+Q%]<s<tW']!e%i*[-aS)O#y#zQ+e%rQ+{&SS.c(n(oQ1k,ZQ5T0lR8i5u'OkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'c's(U(W(^(e(y({)P)t*O*j+Y+_+i,r,u,z-Y-j-r.Q.W.h.u.|/W/o0^0m0s1T1s2T2U2W2Y2]2`2b2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{<}=O=Q=Y=Z=d=e>R$g$^c#Y#e%q%s%u(T(Z(u(z)S)T)U)V)W)X)Y)Z)[)])_)a)c)h)r+f+z-[-y.O.T.V.t.w.{.}/O/P/c0q2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`<W=uT#TV#U'PkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'c's(U(W(^(e(y({)P)t*O*j+Y+_+i,r,u,z-Y-j-r.Q.W.h.u.|/W/o0^0m0s1T1s2T2U2W2Y2]2`2b2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{<}=O=Q=Y=Z=d=e>RQ'Y!eR2q-^!W!nQ!e!r!v!y!z$|'W'`'a'm'n'o*[*l*p*r*s-^-d-f-v0]0`1p5{5}R1m,]nqOXst!Z#d%m&r&t&u&w,u,z2]2`Q&y!^Q'w!xS(t#u<^Q+n%zQ,_&_Q,`&aQ-k'eQ-x'pS.s(y=OS0r+Y=YQ1Q+oQ1o,^Q2d,|Q2f,}Q2m-XQ2z-lQ2}-pS5Y0s=dQ5a1RS5d1T=eQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$b$]c#Y#e%s%u(T(Z(u(z)S)T)U)V)W)X)Y)Z)[)])_)a)c)h)r+f+z-[-y.O.T.V.t.w.{/O/P/c0q2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`<W=uS(p#p'jQ)Q#zS+d%q.}S.d(o(qR3^.e'OkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'c's(U(W(^(e(y({)P)t*O*j+Y+_+i,r,u,z-Y-j-r.Q.W.h.u.|/W/o0^0m0s1T1s2T2U2W2Y2]2`2b2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{<}=O=Q=Y=Z=d=e>RS#q]<VQ&t!XQ&u!YQ&w![Q&x!]R2[,xQ'b!hQ+g%wQ-i'dS.f(r+jQ2x-hW3b.i.j0x0zQ6w2yW7U3_3a3e5^U9a7V7X7ZU:q9c9d9fS;b:p:sQ;p;cR;x;qU!wQ'a-fT5y1p5{!Q_OXZ`st!V!Z#d#h%e%m&i&k&r&t&u&w(k,u,z.]2]2`]!pQ!r'a-f1p5{T#q]<V%^{OPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'c's(U(W(^(e(y({)P*O*j+Y+_+i,r,u,z-j-r.Q.W.h.u.|/o0^0m0s1T1s2T2U2W2Y2]2`2b3Q3W3d3l4z6T6e6f6i6|7[8t9T9_S)O#y#zS.c(n(o!q=k$Z$n'X)t-Y/W2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{<}=O=Q=Y=Z=d=e>RU$fd)`,oS(q#p'jU*w%R(x4OU0n+P.o7gQ5^0yQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'a'm'n'o-f-v1p5{5}Q'u!uS(g#g2VS-t'l'xQ/t*^Q0S*kQ3U-wQ4f/uQ4r0UQ4s0VQ4x0_Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uS<P;|;}R<S<QQ#wbQ't!uS(f#g2VS(h#m+XQ+Z%fQ+l%xQ+r&OU-s'l'u'xQ.X(gU/s*^*a/xQ0T*kQ0W*mQ1P+mQ1v,cS3R-t-wQ3Z.aS4e/t/uQ4n0QS4q0S0_Q4u0XQ6W1wQ7P3US7q4`4bQ7u4fU7|4r4x4{Q8P4wQ8v6XS9q7r7sQ9u7yQ9}8RQ:O8SQ:c8wQ:y9rS:z9v9xQ;S:QQ;^:dS;f:{;PS;r;g;hS;z;s;uS<O;{;}Q<R<PQ<T<SQ=n=iQ=z=sR={=tV!wQ'a-f%^aOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'c's(U(W(^(e(y({)P*O*j+Y+_+i,r,u,z-j-r.Q.W.h.u.|/o0^0m0s1T1s2T2U2W2Y2]2`2b3Q3W3d3l4z6T6e6f6i6|7[8t9T9_S#wz!j!p=h$Z$n'X)t-Y/W2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{<}=O=Q=Y=Z=d=e>RR=n>Q%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'c's(U(W(^(e(y({)P*O*j+Y+_+i,r,u,z-j-r.Q.W.h.u.|/o0^0m0s1T1s2T2U2W2Y2]2`2b3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'f'g'h'l'v*k+p+q-Z-m-n-u0S0V1S2u2|3T4r4s4v7}9{S&Oz!jQ+m%yQ,c&dW1w,d,e,f,gU6X1x1y1zS8w6Y6ZQ:d8x!p=i$Z$n'X)t-Y/W2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{<}=O=Q=Y=Z=d=e>RQ=s>PR=t>Q%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'c's(W(^(e(y({)P*O*j+Y+_+i,r,u,z-j-r.Q.W.h.u.|/o0^0m0s1T1s2T2U2W2Y2]2`2b3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(U!b%jm#h#i#l$x%e%h(_(i(j(k*Z*_*c+[+^+`,q-W.U.[.].^.`/n/q2e3[3]4a6r7TQ,p&o!n=j$Z$n)t-Y/W2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{<}=O=Q=Y=Z=d=e>RR=m'XU'^!e%i*[R2s-aX'[!e%i*[-a%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'c's(U(W(^(e(y({)P*O*j+Y+_,r,u,z-j-r.Q.W.u.|/o0^0m0s1T1s2T2U2W2Y2]2`2b3Q3W3l4z6T6e6f6i6|8t9T9_!p)`$Z$n'X)t-Y/W2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{<}=O=Q=Y=Z=d=e>RQ,o&oQ0y+iQ3`.hQ7Y3dR9e7[!b$Tc#Y%q(T(Z(u(z)[)])a)h+z-y.O.T.V.t.w/c0q3O3V3k3{5X5c6{7Q7a9]:o<W}<d)_)r-[.}2n3p3y3z4P4X6u7b7k7l8k9X9g9m9n;W;`=u!f$Vc#Y%q(T(Z(u(z)X)Y)[)])a)h+z-y.O.T.V.t.w/c0q3O3V3k3{5X5c6{7Q7a9]:o<W!R<f)_)r-[.}2n3p3v3w3y3z4P4X6u7b7k7l8k9X9g9m9n;W;`=u!^$Zc#Y%q(T(Z(u(z)a)h+z-y.O.T.V.t.w/c0q3O3V3k3{5X5c6{7Q7a9]:o<WQ4_/lx>R)_)r-[.}2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=uQ>W>YR>X>Z'OkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'c's(U(W(^(e(y({)P)t*O*j+Y+_+i,r,u,z-Y-j-r.Q.W.h.u.|/W/o0^0m0s1T1s2T2U2W2Y2]2`2b2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{<}=O=Q=Y=Z=d=e>RS$oh$pR4U/V'VgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'c's(U(W(^(e(y({)P)t*O*j+Y+_+i,r,u,z-Y-j-r.Q.W.h.u.|/V/W/o0^0m0s1T1s2T2U2W2Y2]2`2b2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{<}=O=Q=Y=Z=d=e>RT$kf$qQ$ifS)k$l)oR)w$qT$jf$qT)m$l)o'VhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'c's(U(W(^(e(y({)P)t*O*j+Y+_+i,r,u,z-Y-j-r.Q.W.h.u.|/V/W/o0^0m0s1T1s2T2U2W2Y2]2`2b2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{<}=O=Q=Y=Z=d=e>RT$oh$pQ$rhR)v$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'c's(U(W(^(e(y({)P*O*j+Y+_+i,r,u,z-j-r.Q.W.h.u.|/o0^0m0s1T1s2T2U2W2Y2]2`2b3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!q>P$Z$n'X)t-Y/W2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{<}=O=Q=Y=Z=d=e>R#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'c)P)t*j+_+i,r,u,z-j.h/W/o0^0m1s2T2U2W2Y2]2`2b3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*S*U*b*x*y/Q/y0a0c0j0k0p4_5Q8V9p>O>W>X#f(x#v$b$c$x${)z*W*Z*h+h+k,U,X.g/e/n/z/|1g1j1r3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=R=T=W=[=^=`=b=f>[>]Q+U%aQ/d*Po4O<l<m<p<r<v<x<z=S=U=X=]=_=a=c=g!U$yi$d%O%Q%^%_%c*S*U*b*x*y/Q/y0a0c0j0k0p4_5Q8V9p>O>W>XQ*d$zU*m$|*[*pQ+V%bQ0X*n#f=p#v$b$c$x${)z*W*Z*h+h+k,U,X.g/e/n/z/|1g1j1r3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=R=T=W=[=^=`=b=f>[>]n=q<l<m<p<r<v<x<z=S=U=X=]=_=a=c=gQ=v>SQ=w>TQ=x>UR=y>V!U%Ri$d%O%Q%^%_%c*S*U*b*x*y/Q/y0a0c0j0k0p4_5Q8V9p>O>W>X#f(x#v$b$c$x${)z*W*Z*h+h+k,U,X.g/e/n/z/|1g1j1r3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=R=T=W=[=^=`=b=f>[>]o4O<l<m<p<r<v<x<z=S=U=X=]=_=a=c=gnoOXst!Z#d%m&r&t&u&w,u,z2]2`S*g${*ZQ-T'OQ-U'QR4i/z%[%Si#v$b$c$d$x${%O%Q%^%_%c)z*S*U*W*Z*b*h*x*y+h+k,U,X.g/Q/e/n/y/z/|0a0c0j0k0p1g1j1r3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;k<l<m<o<p<q<r<u<v<w<x<y<z=R=S=T=U=W=X=[=]=^=_=`=a=b=c=f=g>O>W>X>[>]Q,W&]Q1i,YQ5s1hR8h5tV*o$|*[*pU*o$|*[*pT5z1p5{S0Q*j/oQ4w0^T8S4z:]Q+l%xQ0W*mQ1P+mQ1v,cQ6W1wQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*S*U*b*x*y/Q/y0a0c0j0k0p4_5Q8V9p>O>W>Xx*S$v)f*T*v+W/w0e0f4R4g5R5S5W7p8U:R:x=o=|=}S0a*u0b#f<o#v$b$c$x${)z*W*Z*h+h+k,U,X.g/e/n/z/|1g1j1r3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=R=T=W=[=^=`=b=f>[>]n<p<l<m<p<r<v<x<z=S=U=X=]=_=a=c=g!d=R(v)d*]*f.k.n.r/`/l/}0w1f3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Y>Z`=S3}7c7f7j9h:t:w;yS=^.m3iT=_7e9k!U%Qi$d%O%Q%^%_%c*S*U*b*x*y/Q/y0a0c0j0k0p4_5Q8V9p>O>W>X|*U$v)f*V*u+W/h/w0e0f4R4g4|5R5S5W7p8U:R:x=o=|=}S0c*v0d#f<q#v$b$c$x${)z*W*Z*h+h+k,U,X.g/e/n/z/|1g1j1r3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=R=T=W=[=^=`=b=f>[>]n<r<l<m<p<r<v<x<z=S=U=X=]=_=a=c=g!h=T(v)d*]*f.l.m.r/`/l/}0w1f3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Y>Zd=U3}7d7e7j9h9i:t:u:w;yS=`.n3jT=a7f9lrnOXst!V!Z#d%m&i&r&t&u&w,u,z2]2`Q&f!UR,r&ornOXst!V!Z#d%m&i&r&t&u&w,u,z2]2`R&f!UQ,[&^R1e,TsnOXst!V!Z#d%m&i&r&t&u&w,u,z2]2`Q1q,aS6R1t1uU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,k&iR6_1}R:f8yW&Q|&V&W,QR1[+xQ&r!WR,u&sR,{&xT2^,z2`R-P&yQ-O&yR2g-PQ'z!{R-z'zSsOtQ#dXT%ps#dQ#OTR'|#OQ#RUR(O#RQ)|$uR/a)|Q#UVR(R#UQ#XWU(X#X(Y.RQ(Y#YR.R(ZQ-_'YR2r-_Q.v(zS3m.v3nR3n.wQ-f'aR2v-fY!rQ'a-f1p5{R'k!rQ/R)fR4S/RU#_W%h*ZU(`#_(a.SQ(a#`R.S([Q-b'^R2t-bt`OXst!V!Z#d%m&i&k&r&t&u&w,u,z2]2`S#hZ%eU#r`#h.]R.](kQ(l#jQ.Y(hW.b(l.Y3X7RQ3X.ZR7R3YQ)o$lR/X)oQ$phR)u$pQ$`cU)b$`-}<jQ-}<WR<j)rQ/r*^W4c/r4d7t9sU4d/s/t/uS7t4e4fR9s7u$e*R$v(v)d)f*]*f*u*v+R+S+W.m.n.p.q.r/`/h/j/l/w/}0e0f0w1f3f3g3h3}4R4[4g4h4l4|5O5R5S5W5r7]7^7_7`7e7f7h7i7j7p7w7z8U8X8Z9h9i9j9t9|:R:S:t:u:v:w:x:};R;e;j;v;y=o=|=}>Y>ZQ/{*fU4k/{4m7xQ4m/}R7x4lS*p$|*[R0Z*px*T$v)f*u*v+W/w0e0f4R4g5R5S5W7p8U:R:x=o=|=}!d.k(v)d*]*f.m.n.r/`/l/}0w1f3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Y>ZU/i*T.k7ca7c3}7e7f7j9h:t:w;yQ0b*uQ3i.mU4}0b3i9kR9k7e|*V$v)f*u*v+W/h/w0e0f4R4g4|5R5S5W7p8U:R:x=o=|=}!h.l(v)d*]*f.m.n.r/`/l/}0w1f3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Y>ZU/k*V.l7de7d3}7e7f7j9h9i:t:u:w;yQ0d*vQ3j.nU5P0d3j9lR9l7fQ*{%UR0h*{Q5]0wR8Y5]Q+a%kR0v+aQ5v1kS8j5v:[R:[8kQ,^&_R1n,^Q5{1pR8m5{Q1|,hS6]1|8zR8z6_Q1V+tW5h1V5j8a:VQ5j1YQ8a5iR:V8bQ+y&QR1]+yQ2`,zR6m2`YrOXst#dQ&v!ZQ+c%mQ,t&rQ,v&tQ,w&uQ,y&wQ2Z,uS2^,z2`R6l2]Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'r!uQ+b%lQ+n%zQ,S&XQ,j&mQ-R&|W-q'l't'u'xQ-x'pQ0Y*oQ1Q+oQ1d,RS2P,k,nQ2h-QQ2i-TQ2j-UQ2}-pW3P-s-t-w-yQ5a1RQ5m1`Q5q1fQ6V1vQ6a2RQ6k2[U6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'e!iQ'p!uU+o%{%|%}Q-X'VU-l'f'g'hS-p'l'vQ0R*kS1R+p+qQ2o-ZS2{-m-nQ3S-uS4p0S0VQ5b1SQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>OR*|%VU%Ui%V>OR0g*zQ$viS(v#v+kS)d$b$cQ)f$dQ*]$xS*f${*ZQ*u%OQ*v%QQ+R%^Q+S%_Q+W%cQ.m<oQ.n<qQ.p<uQ.q<wQ.r<yQ/`)zQ/h*SQ/j*UQ/l*WQ/w*bS/}*h/nQ0e*xQ0f*yl0w+h,X.g1j1r3c6S7W8q9b:`:r;[;dQ1f,UQ3f=RQ3g=TQ3h=WS3}<l<mQ4R/QS4[/e4^Q4g/yQ4h/zQ4l/|Q4|0aQ5O0cQ5R0jQ5S0kQ5W0pQ5r1gQ7]=[Q7^=^Q7_=`Q7`=bQ7e<pQ7f<rQ7h<vQ7i<xQ7j<zQ7p4_Q7w4jQ7z4oQ8U5QQ8X5[Q8Z5_Q9h=XQ9i=SQ9j=UQ9t7vQ9|8QQ:R8VQ:S8[Q:t=]Q:u=_Q:v=aQ:w=cQ:x9pQ:}9yQ;R:PQ;e=fQ;j;QQ;v;kQ;y=gQ=o>OQ=|>WQ=}>XQ>Y>[R>Z>]Q+P%]Q.o<sR7g<tnpOXst!Z#d%m&r&t&u&w,u,z2]2`Q!fPS#fZ#oQ&|!`W'i!o*j0^4zQ(Q#SQ)R#{Q)s$nS,n&k&nQ,s&oQ-Q&{S-V'T/oQ-h'cQ.y)PQ/])tQ0t+_Q0z+iQ2X,rQ2y-jQ3a.hQ4W/WQ5U0mQ6Q1sQ6c2TQ6d2UQ6h2WQ6j2YQ6o2bQ7Z3dQ7m4TQ8s6TQ9P6eQ9Q6fQ9S6iQ9f7[Q:a8tR:k9T#[cOPXZst!Z!`!o#d#o#{%m&k&n&o&r&t&u&w&{'T'c)P*j+_+i,r,u,z-j.h/o0^0m1s2T2U2W2Y2]2`2b3d4z6T6e6f6i7[8t9TQ#YWQ#eYQ%quQ%svS%uw!gS(T#W(WQ(Z#ZQ(u#uQ(z#xQ)S$OQ)T$PQ)U$QQ)V$RQ)W$SQ)X$TQ)Y$UQ)Z$VQ)[$WQ)]$XQ)_$ZQ)a$_Q)c$aQ)h$eW)r$n)t/W4TQ+f%tQ+z&RS-['X2pQ-y'sS.O(U.QQ.T(^Q.V(eQ.t(yQ.w({Q.{<UQ.}<XQ/O<YQ/P<]Q/c*OQ0q+YQ2n-YQ3O-rQ3V.WQ3k.uQ3p<^Q3q<_Q3r<`Q3s<aQ3t<bQ3u<cQ3v<dQ3w<eQ3x<fQ3y<gQ3z<hQ3{.|Q3|<kQ4P<nQ4Q<{Q4X<iQ5X0sQ5c1TQ6u<}Q6{3QQ7Q3WQ7a3lQ7b=OQ7k=QQ7l=YQ8k5wQ9X6sQ9]6|Q9g=ZQ9m=dQ9n=eQ:o9_Q;W:ZQ;`:mQ<W#SR=u>RR#[WR'Z!el!tQ!r!v!y!z'a'm'n'o-f-v1p5{5}S'V!e-^U*k$|*[*pS-Z'W'`S0V*l*rQ0_*sQ2u-dQ4v0]R4{0`R(|#xQ!fQT-e'a-f]!qQ!r'a-f1p5{Q#p]R'j<VR)g$dY!uQ'a-f1p5{Q'l!rS'v!v!yS'x!z5}S-u'm'nQ-w'oR3T-vT#kZ%eS#jZ%eS%km,qU(h#h#i#lS.Z(i(jQ._(kQ0u+`Q3Y.[U3Z.].^.`S7S3[3]R9`7Td#^W#W#Z%h(U(_*Z+[.U/nr#gZm#h#i#l%e(i(j(k+`.[.].^.`3[3]7TS*^$x*cQ/u*_Q2V,qQ2l-WQ4`/qQ6q2eQ7s4aQ9W6rT=l'X+^V#aW%h*ZU#`W%h*ZS(V#W(_U([#Z+[/nS-]'X+^T.P(U.UV'_!e%i*[Q$lfR)y$qT)n$l)oR4V/VT*`$x*cT*i${*ZQ0x+hQ1h,XQ3_.gQ5t1jQ6P1rQ7X3cQ8r6SQ9c7WQ:^8qQ:p9bQ;Z:`Q;c:rQ;n;[R;q;dnqOXst!Z#d%m&r&t&u&w,u,z2]2`Q&l!VR,j&itmOXst!U!V!Z#d%m&i&r&t&u&w,u,z2]2`R,q&oT%lm,qR1l,ZR,i&gQ&U|S,P&V&WR1_,QR+u&PT&p!W&sT&q!W&sT2_,z2`",nodeNames:`⚠ ArithOp ArithOp ?. JSXStartTag LineComment BlockComment Script Hashbang ExportDeclaration export Star as VariableName String Escape from ; default FunctionDeclaration async function VariableDefinition > < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty VariableDefinition Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem`,maxTerm:381,context:trackNewline,nodeProps:[[`isolate`,-8,5,6,14,37,39,51,53,55,``],[`group`,-26,9,17,19,68,208,212,216,217,219,222,225,235,238,244,246,248,250,253,259,265,267,269,271,273,275,276,`Statement`,-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,121,122,137,140,142,143,144,145,146,148,149,168,170,172,`Expression`,-23,31,33,37,41,43,45,174,176,178,179,181,182,183,185,186,187,189,190,191,202,204,206,207,`Type`,-3,88,103,109,`ClassItem`],[`openedBy`,23,`<`,38,`InterpolationStart`,56,`[`,60,`{`,73,`(`,161,`JSXStartCloseTag`],[`closedBy`,-2,24,169,`>`,40,`InterpolationEnd`,50,`]`,61,`}`,74,`)`,166,`JSXEndTag`]],propSources:[jsHighlight],skippedNodes:[0,5,6,279],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$<r#p#q$=h#q#r$>x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$j&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$j&j([!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU([!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$j&j(XpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(XpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Xp([!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$j&j(Xp([!b'}0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(Y#S$j&j(O0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$j&j(Xp([!b(O0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$j&j!p),Q(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#w(Ch$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#w(Ch$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(W':f$j&j([!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$j&j([!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$j&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$e`$j&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$e``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$e`$j&j([!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ([!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$e`([!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$j&j(Xp([!bOY%ZYZ&cZq%Zqr<Srs&}st%ZtuCruw%Zwx(rx!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr(r<__WS$j&j(Xp([!bOY<SYZ&cZr<Srs=^sw<Swx@nx!^<S!^!_Bm!_#O<S#O#P>`#P#o<S#o#pBm#p;'S<S;'S;=`Cl<%lO<S(Q=g]WS$j&j([!bOY=^YZ&cZw=^wx>`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$j&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS([!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$j&j(XpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(XpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Xp([!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l<S%9[C}i$j&j(p%1l(Xp([!bOY%ZYZ&cZr%Zrs&}st%ZtuCruw%Zwx(rx!Q%Z!Q![Cr![!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr%9[EoP;=`<%lCr07[FRk$j&j(Xp([!b$^#t(U,2j(f$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr+dHRk$j&j(Xp([!b$^#tOY%ZYZ&cZr%Zrs&}st%ZtuGvuw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Gv![!^%Z!^!_*g!_!c%Z!c!}Gv!}#O%Z#O#P&c#P#R%Z#R#SGv#S#T%Z#T#oGv#o#p*g#p$g%Z$g;'SGv;'S;=`Iv<%lOGv+dIyP;=`<%lGv07[JPP;=`<%lEr(KWJ_`$j&j(Xp([!b#q(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWKl_$j&j$R(Ch(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,#xLva({+JY$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sv%ZvwM{wx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWNW`$j&j#{(Ch(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At! c_(Z';W$j&j(XpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b'l!!i_$j&j(XpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b&z!#mX$j&jOw!#hwx6cx!^!#h!^!_!$Y!_#o!#h#o#p!$Y#p;'S!#h;'S;=`!$r<%lO!#h`!$]TOw!$Ywx7]x;'S!$Y;'S;=`!$l<%lO!$Y`!$oP;=`<%l!$Y&z!$uP;=`<%l!#h'l!%R]$e`$j&j(XpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r!Q!&PZ(XpOY!%zYZ!$YZr!%zrs!$Ysw!%zwx!&rx#O!%z#O#P!$Y#P;'S!%z;'S;=`!']<%lO!%z!Q!&yU$e`(XpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)r!Q!'`P;=`<%l!%z'l!'fP;=`<%l!!b/5|!'t_!l/.^$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#&U!)O_!k!Lf$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z-!n!*[b$j&j(Xp([!b(V%&f#r(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rxz%Zz{!+d{!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW!+o`$j&j(Xp([!b#o(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;x!,|`$j&j(Xp([!br+4YOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,$U!.Z_!]+Jf$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!/ec$j&j(Xp([!b!Q.2^OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!0p!P!Q%Z!Q![!3Y![!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!0ya$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!2O!P!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!2Z_![!L^$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!3eg$j&j(Xp([!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!3Y![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S!3Y#S#X%Z#X#Y!4|#Y#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!5Vg$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx{%Z{|!6n|}%Z}!O!6n!O!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!6wc$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!8_c$j&j(Xp([!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!9uf$j&j(Xp([!b#p(ChOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcxz!;Zz{#-}{!P!;Z!P!Q#/d!Q!^!;Z!^!_#(i!_!`#7S!`!a#8i!a!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z?O!;fb$j&j(Xp([!b!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z>^!<w`$j&j([!b!X7`OY!<nYZ&cZw!<nwx!=yx!P!<n!P!Q!Eq!Q!^!<n!^!_!Gr!_!}!<n!}#O!KS#O#P!Dy#P#o!<n#o#p!Gr#p;'S!<n;'S;=`!L]<%lO!<n<z!>Q^$j&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!?Td$j&j!X7`O!^&c!_#W&c#W#X!>|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c<z!C][$j&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#O!CW#O#P!DR#P#Q!=y#Q#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DWX$j&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DvP;=`<%l!CW<z!EOX$j&jOY!=yYZ&cZ!^!=y!^!_!@c!_#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!EnP;=`<%l!=y>^!Ezl$j&j([!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ([!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse([!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX([!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$j&j([!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!<n#Q#o!KS#o#p!JU#p;'S!KS;'S;=`!LV<%lO!KS>^!LYP;=`<%l!KS>^!L`P;=`<%l!<n=l!Ll`$j&j(Xp!X7`OY!LcYZ&cZr!Lcrs!=ys!P!Lc!P!Q!Mn!Q!^!Lc!^!_# o!_!}!Lc!}#O#%P#O#P!Dy#P#o!Lc#o#p# o#p;'S!Lc;'S;=`#&Y<%lO!Lc=l!Mwl$j&j(Xp!X7`OY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#W(r#W#X!Mn#X#Z(r#Z#[!Mn#[#](r#]#^!Mn#^#a(r#a#b!Mn#b#g(r#g#h!Mn#h#i(r#i#j!Mn#j#k!Mn#k#m(r#m#n!Mn#n#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r8Q# vZ(Xp!X7`OY# oZr# ors!@cs!P# o!P!Q#!i!Q!}# o!}#O#$R#O#P!Bq#P;'S# o;'S;=`#$y<%lO# o8Q#!pe(Xp!X7`OY)rZr)rs#O)r#P#W)r#W#X#!i#X#Z)r#Z#[#!i#[#])r#]#^#!i#^#a)r#a#b#!i#b#g)r#g#h#!i#h#i)r#i#j#!i#j#k#!i#k#m)r#m#n#!i#n;'S)r;'S;=`*Z<%lO)r8Q#$WX(XpOY#$RZr#$Rrs!Ars#O#$R#O#P!B[#P#Q# o#Q;'S#$R;'S;=`#$s<%lO#$R8Q#$vP;=`<%l#$R8Q#$|P;=`<%l# o=l#%W^$j&j(XpOY#%PYZ&cZr#%Prs!CWs!^#%P!^!_#$R!_#O#%P#O#P!DR#P#Q!Lc#Q#o#%P#o#p#$R#p;'S#%P;'S;=`#&S<%lO#%P=l#&VP;=`<%l#%P=l#&]P;=`<%l!Lc?O#&kn$j&j(Xp([!b!X7`OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#W%Z#W#X#&`#X#Z%Z#Z#[#&`#[#]%Z#]#^#&`#^#a%Z#a#b#&`#b#g%Z#g#h#&`#h#i%Z#i#j#&`#j#k#&`#k#m%Z#m#n#&`#n#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z9d#(r](Xp([!b!X7`OY#(iZr#(irs!Grsw#(iwx# ox!P#(i!P!Q#)k!Q!}#(i!}#O#+`#O#P!Bq#P;'S#(i;'S;=`#,`<%lO#(i9d#)th(Xp([!b!X7`OY*gZr*grs'}sw*gwx)rx#O*g#P#W*g#W#X#)k#X#Z*g#Z#[#)k#[#]*g#]#^#)k#^#a*g#a#b#)k#b#g*g#g#h#)k#h#i*g#i#j#)k#j#k#)k#k#m*g#m#n#)k#n;'S*g;'S;=`+Z<%lO*g9d#+gZ(Xp([!bOY#+`Zr#+`rs!JUsw#+`wx#$Rx#O#+`#O#P!B[#P#Q#(i#Q;'S#+`;'S;=`#,Y<%lO#+`9d#,]P;=`<%l#+`9d#,cP;=`<%l#(i?O#,o`$j&j(Xp([!bOY#,fYZ&cZr#,frs!KSsw#,fwx#%Px!^#,f!^!_#+`!_#O#,f#O#P!DR#P#Q!;Z#Q#o#,f#o#p#+`#p;'S#,f;'S;=`#-q<%lO#,f?O#-tP;=`<%l#,f?O#-zP;=`<%l!;Z07[#.[b$j&j(Xp([!b(P0/l!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z07[#/o_$j&j(Xp([!bT0/lOY#/dYZ&cZr#/drs#0nsw#/dwx#4Ox!^#/d!^!_#5}!_#O#/d#O#P#1p#P#o#/d#o#p#5}#p;'S#/d;'S;=`#6|<%lO#/d06j#0w]$j&j([!bT0/lOY#0nYZ&cZw#0nwx#1px!^#0n!^!_#3R!_#O#0n#O#P#1p#P#o#0n#o#p#3R#p;'S#0n;'S;=`#3x<%lO#0n05W#1wX$j&jT0/lOY#1pYZ&cZ!^#1p!^!_#2d!_#o#1p#o#p#2d#p;'S#1p;'S;=`#2{<%lO#1p0/l#2iST0/lOY#2dZ;'S#2d;'S;=`#2u<%lO#2d0/l#2xP;=`<%l#2d05W#3OP;=`<%l#1p01O#3YW([!bT0/lOY#3RZw#3Rwx#2dx#O#3R#O#P#2d#P;'S#3R;'S;=`#3r<%lO#3R01O#3uP;=`<%l#3R06j#3{P;=`<%l#0n05x#4X]$j&j(XpT0/lOY#4OYZ&cZr#4Ors#1ps!^#4O!^!_#5Q!_#O#4O#O#P#1p#P#o#4O#o#p#5Q#p;'S#4O;'S;=`#5w<%lO#4O00^#5XW(XpT0/lOY#5QZr#5Qrs#2ds#O#5Q#O#P#2d#P;'S#5Q;'S;=`#5q<%lO#5Q00^#5tP;=`<%l#5Q05x#5zP;=`<%l#4O01p#6WY(Xp([!bT0/lOY#5}Zr#5}rs#3Rsw#5}wx#5Qx#O#5}#O#P#2d#P;'S#5};'S;=`#6v<%lO#5}01p#6yP;=`<%l#5}07[#7PP;=`<%l#/d)3h#7ab$j&j$R(Ch(Xp([!b!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;ZAt#8vb$[#t$j&j(Xp([!b!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z'Ad#:Zp$j&j(Xp([!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#U%Z#U#V#?i#V#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#<jk$j&j(Xp([!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$j&j(Xp([!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$j&j(Xp([!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$j&j(Xp([!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$j&j(Xp([!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$j&j$P)Lv(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-<U(Xp([!b$o7`OY*gZr*grs'}sw*gwx)rx!P*g!P!Q#MO!Q!^*g!^!_#Mt!_!`$ f!`#O*g#P;'S*g;'S;=`+Z<%lO*g(n#MXX$l&j(Xp([!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El#M}Z#s(Ch(Xp([!bOY*gZr*grs'}sw*gwx)rx!_*g!_!`#Np!`#O*g#P;'S*g;'S;=`+Z<%lO*g(El#NyX$R(Ch(Xp([!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El$ oX#t(Ch(Xp([!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g*)x$!ga#`*!Y$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`!a$#l!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(K[$#w_#l(Cl$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x$%Vag!*r#t(Ch$g#|$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`$&[!`!a$'f!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$&g_#t(Ch$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$'qa#s(Ch$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`!a$(v!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$)R`#s(Ch$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(Kd$*`a(s(Ct$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!a%Z!a!b$+e!b#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$+p`$j&j#|(Ch(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#`$,}_!|$Ip$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f$.X_!S0,v$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(n$/]Z$j&jO!^$0O!^!_$0f!_#i$0O#i#j$0k#j#l$0O#l#m$2^#m#o$0O#o#p$0f#p;'S$0O;'S;=`$4i<%lO$0O(n$0VT_#S$j&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#S$0kO_#S(n$0p[$j&jO!Q&c!Q![$1f![!^&c!_!c&c!c!i$1f!i#T&c#T#Z$1f#Z#o&c#o#p$3|#p;'S&c;'S;=`&w<%lO&c(n$1kZ$j&jO!Q&c!Q![$2^![!^&c!_!c&c!c!i$2^!i#T&c#T#Z$2^#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$2cZ$j&jO!Q&c!Q![$3U![!^&c!_!c&c!c!i$3U!i#T&c#T#Z$3U#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$3ZZ$j&jO!Q&c!Q![$0O![!^&c!_!c&c!c!i$0O!i#T&c#T#Z$0O#Z#o&c#p;'S&c;'S;=`&w<%lO&c#S$4PR!Q![$4Y!c!i$4Y#T#Z$4Y#S$4]S!Q![$4Y!c!i$4Y#T#Z$4Y#q#r$0f(n$4lP;=`<%l$0O#1[$4z_!Y#)l$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$6U`#y(Ch$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;p$7c_$j&j(Xp([!b(b+4QOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$8qk$j&j(Xp([!b(U,2j$`#t(f$I[OY%ZYZ&cZr%Zrs&}st%Ztu$8buw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$8b![!^%Z!^!_*g!_!c%Z!c!}$8b!}#O%Z#O#P&c#P#R%Z#R#S$8b#S#T%Z#T#o$8b#o#p*g#p$g%Z$g;'S$8b;'S;=`$<l<%lO$8b+d$:qk$j&j(Xp([!b$`#tOY%ZYZ&cZr%Zrs&}st%Ztu$:fuw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$:f![!^%Z!^!_*g!_!c%Z!c!}$:f!}#O%Z#O#P&c#P#R%Z#R#S$:f#S#T%Z#T#o$:f#o#p*g#p$g%Z$g;'S$:f;'S;=`$<f<%lO$:f+d$<iP;=`<%l$:f07[$<oP;=`<%l$8b#Jf$<{X!_#Hb(Xp([!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g,#x$=sa(z+JY$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p#q$+e#q;'S%Z;'S;=`+a<%lO%Z)>v$?V_!^(CdvBr$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$j&j(Xp([!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$j&j(Xp([!b'}0/l$^#t(U,2j(f$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$j&j(Xp([!b(O0/l$^#t(U,2j(f$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[noSemicolon,noSemicolonType,operatorToken,jsx,2,3,4,5,6,7,8,9,10,11,12,13,14,insertSemicolon,new LocalTokenGroup("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(d~~",141,341),new LocalTokenGroup(`j~RQYZXz{^~^O(R~~aP!P!Qd~iO(S~~`,25,324)],topRules:{"Script":[0,7],"SingleExpression":[1,277],"SingleClassItem":[2,278]},dialects:{jsx:0,ts:15152},dynamicPrecedences:{"80":1,"82":1,"94":1,"170":1,"200":1},specialized:[{term:328,get:value=>spec_identifier$2[value]||-1},{term:344,get:value=>spec_word[value]||-1},{term:95,get:value=>spec_LessThan[value]||-1}],tokenPrec:15178});var snippets=[snippetCompletion("function ${name}(${params}) {\n ${}\n}",{label:`function`,detail:`definition`,type:`keyword`}),snippetCompletion("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:`for`,detail:`loop`,type:`keyword`}),snippetCompletion("for (let ${name} of ${collection}) {\n ${}\n}",{label:`for`,detail:`of loop`,type:`keyword`}),snippetCompletion(`do {
|
|
12
12
|
\${}
|
|
13
13
|
} while (\${})`,{label:`do`,detail:`loop`,type:`keyword`}),snippetCompletion(`while (\${}) {
|
|
@@ -35,7 +35,7 @@ import{B as VDefaultsProvider,E as useDensity,F as useBackgroundColor,Gn as with
|
|
|
35
35
|
`+line.scrub();for(let m of line.markers)leaf.marks.push(m)}this.finishLeaf(leaf);return null}stopAt(pos){if(this.stoppedAt!=null&&this.stoppedAt<pos)throw new RangeError(`Can't move stoppedAt forward`);this.stoppedAt=pos}reuseFragment(start){if(!this.fragments.moveTo(this.absoluteLineStart+start,this.absoluteLineStart)||!this.fragments.matches(this.block.hash))return false;let taken=this.fragments.takeNodes(this);if(!taken)return false;this.absoluteLineStart+=taken;this.lineStart=toRelative(this.absoluteLineStart,this.ranges);this.moveRangeI();if(this.absoluteLineStart<this.to){this.lineStart++;this.absoluteLineStart++;this.readLine()}else{this.atEnd=true;this.readLine()}return true}get depth(){return this.stack.length}parentType(depth=this.depth-1){return this.parser.nodeSet.types[this.stack[depth].type]}nextLine(){this.lineStart+=this.line.text.length;if(this.absoluteLineEnd>=this.to){this.absoluteLineStart=this.absoluteLineEnd;this.atEnd=true;this.readLine();return false}else{this.lineStart++;this.absoluteLineStart=this.absoluteLineEnd+1;this.moveRangeI();this.readLine();return true}}peekLine(){return this.scanLine(this.absoluteLineEnd+1).text}moveRangeI(){while(this.rangeI<this.ranges.length-1&&this.absoluteLineStart>=this.ranges[this.rangeI].to){this.rangeI++;this.absoluteLineStart=Math.max(this.absoluteLineStart,this.ranges[this.rangeI].from)}}scanLine(start){let r=scanLineResult;r.end=start;if(start>=this.to)r.text=``;else{r.text=this.lineChunkAt(start);r.end+=r.text.length;if(this.ranges.length>1){let textOffset=this.absoluteLineStart,rangeI=this.rangeI;while(this.ranges[rangeI].to<r.end){rangeI++;let nextFrom=this.ranges[rangeI].from;let after=this.lineChunkAt(nextFrom);r.end=nextFrom+after.length;r.text=r.text.slice(0,this.ranges[rangeI-1].to-textOffset)+after;textOffset=r.end-r.text.length}}}return r}readLine(){let{line}=this,{text,end}=this.scanLine(this.absoluteLineStart);this.absoluteLineEnd=end;line.reset(text);for(;line.depth<this.stack.length;line.depth++){let cx=this.stack[line.depth],handler=this.parser.skipContextMarkup[cx.type];if(!handler)throw new Error(`Unhandled block context `+Type[cx.type]);let marks=this.line.markers.length;if(!handler(cx,this,line)){if(this.line.markers.length>marks)cx.end=this.line.markers[this.line.markers.length-1].to;line.forward();break}line.forward()}}lineChunkAt(pos){let next=this.input.chunk(pos),text;if(!this.input.lineChunks){let eol=next.indexOf(`
|
|
36
36
|
`);text=eol<0?next:next.slice(0,eol)}else text=next==`
|
|
37
37
|
`?``:next;return pos+text.length>this.to?text.slice(0,this.to-pos):text}prevLineEnd(){return this.atEnd?this.lineStart:this.lineStart-1}startContext(type,start,value=0){this.block=CompositeBlock.create(type,value,this.lineStart+start,this.block.hash,this.lineStart+this.line.text.length);this.stack.push(this.block)}startComposite(type,start,value=0){this.startContext(this.parser.getNodeType(type),start,value)}addNode(block,from,to){if(typeof block==`number`)block=new Tree(this.parser.nodeSet.types[block],none,none,(to!==null&&to!==void 0?to:this.prevLineEnd())-from);this.block.addChild(block,from-this.block.from)}addElement(elt){this.block.addChild(elt.toTree(this.parser.nodeSet),elt.from-this.block.from)}addLeafElement(leaf,elt){this.addNode(this.buffer.writeElements(injectMarks(elt.children,leaf.marks),-elt.from).finish(elt.type,elt.to-elt.from),elt.from)}finishContext(){let cx=this.stack.pop();let top=this.stack[this.stack.length-1];top.addChild(cx.toTree(this.parser.nodeSet),cx.from-top.from);this.block=top}finish(){while(this.stack.length>1)this.finishContext();return this.addGaps(this.block.toTree(this.parser.nodeSet,this.lineStart))}addGaps(tree){return this.ranges.length>1?injectGaps(this.ranges,0,tree.topNode,this.ranges[0].from,this.reusePlaceholders):tree}finishLeaf(leaf){for(let parser of leaf.parsers)if(parser.finish(this,leaf))return;let inline=injectMarks(this.parser.parseInline(leaf.content,leaf.start),leaf.marks);this.addNode(this.buffer.writeElements(inline,-leaf.start).finish(Type.Paragraph,leaf.content.length),leaf.start)}elt(type,from,to,children){if(typeof type==`string`)return elt(this.parser.getNodeType(type),from,to,children);return new TreeElement(type,from)}get buffer(){return new Buffer(this.parser.nodeSet)}};function injectGaps(ranges,rangeI,tree,offset,dummies){let rangeEnd=ranges[rangeI].to;let children=[],positions=[],start=tree.from+offset;function movePastNext(upto,inclusive){while(inclusive?upto>=rangeEnd:upto>rangeEnd){let size=ranges[rangeI+1].from-rangeEnd;offset+=size;upto+=size;rangeI++;rangeEnd=ranges[rangeI].to}}for(let ch=tree.firstChild;ch;ch=ch.nextSibling){movePastNext(ch.from+offset,true);let from=ch.from+offset,node,reuse=dummies.get(ch.tree);if(reuse)node=reuse;else if(ch.to+offset>rangeEnd){node=injectGaps(ranges,rangeI,ch,offset,dummies);movePastNext(ch.to+offset,false)}else node=ch.toTree();children.push(node);positions.push(from-start)}movePastNext(tree.to+offset,false);return new Tree(tree.type,children,positions,tree.to+offset-start,tree.tree?tree.tree.propValues:void 0)}var MarkdownParser=class MarkdownParser extends Parser{constructor(nodeSet,blockParsers,leafBlockParsers,blockNames,endLeafBlock,skipContextMarkup,inlineParsers,inlineNames,wrappers){super();this.nodeSet=nodeSet;this.blockParsers=blockParsers;this.leafBlockParsers=leafBlockParsers;this.blockNames=blockNames;this.endLeafBlock=endLeafBlock;this.skipContextMarkup=skipContextMarkup;this.inlineParsers=inlineParsers;this.inlineNames=inlineNames;this.wrappers=wrappers;this.nodeTypes=Object.create(null);for(let t of nodeSet.types)this.nodeTypes[t.name]=t.id}createParse(input,fragments,ranges){let parse=new BlockContext(this,input,fragments,ranges);for(let w of this.wrappers)parse=w(parse,input,fragments,ranges);return parse}configure(spec){let config=resolveConfig(spec);if(!config)return this;let{nodeSet,skipContextMarkup}=this;let blockParsers=this.blockParsers.slice(),leafBlockParsers=this.leafBlockParsers.slice(),blockNames=this.blockNames.slice(),inlineParsers=this.inlineParsers.slice(),inlineNames=this.inlineNames.slice(),endLeafBlock=this.endLeafBlock.slice(),wrappers=this.wrappers;if(nonEmpty(config.defineNodes)){skipContextMarkup=Object.assign({},skipContextMarkup);let nodeTypes=nodeSet.types.slice(),styles;for(let s of config.defineNodes){let{name,block,composite,style}=typeof s==`string`?{name:s}:s;if(nodeTypes.some(t=>t.name==name))continue;if(composite)skipContextMarkup[nodeTypes.length]=(bl,cx,line)=>composite(cx,line,bl.value);let id=nodeTypes.length;let group=composite?[`Block`,`BlockContext`]:!block?void 0:id>=Type.ATXHeading1&&id<=Type.SetextHeading2?[`Block`,`LeafBlock`,`Heading`]:[`Block`,`LeafBlock`];nodeTypes.push(NodeType.define({id,name,props:group&&[[NodeProp.group,group]]}));if(style){if(!styles)styles={};if(Array.isArray(style)||style instanceof Tag)styles[name]=style;else Object.assign(styles,style)}}nodeSet=new NodeSet(nodeTypes);if(styles)nodeSet=nodeSet.extend(styleTags(styles))}if(nonEmpty(config.props))nodeSet=nodeSet.extend(...config.props);if(nonEmpty(config.remove))for(let rm of config.remove){let block=this.blockNames.indexOf(rm),inline=this.inlineNames.indexOf(rm);if(block>-1)blockParsers[block]=leafBlockParsers[block]=void 0;if(inline>-1)inlineParsers[inline]=void 0}if(nonEmpty(config.parseBlock))for(let spec of config.parseBlock){let found=blockNames.indexOf(spec.name);if(found>-1){blockParsers[found]=spec.parse;leafBlockParsers[found]=spec.leaf}else{let pos=spec.before?findName(blockNames,spec.before):spec.after?findName(blockNames,spec.after)+1:blockNames.length-1;blockParsers.splice(pos,0,spec.parse);leafBlockParsers.splice(pos,0,spec.leaf);blockNames.splice(pos,0,spec.name)}if(spec.endLeaf)endLeafBlock.push(spec.endLeaf)}if(nonEmpty(config.parseInline))for(let spec of config.parseInline){let found=inlineNames.indexOf(spec.name);if(found>-1)inlineParsers[found]=spec.parse;else{let pos=spec.before?findName(inlineNames,spec.before):spec.after?findName(inlineNames,spec.after)+1:inlineNames.length-1;inlineParsers.splice(pos,0,spec.parse);inlineNames.splice(pos,0,spec.name)}}if(config.wrap)wrappers=wrappers.concat(config.wrap);return new MarkdownParser(nodeSet,blockParsers,leafBlockParsers,blockNames,endLeafBlock,skipContextMarkup,inlineParsers,inlineNames,wrappers)}getNodeType(name){let found=this.nodeTypes[name];if(found==null)throw new RangeError(`Unknown node type '${name}'`);return found}parseInline(text,offset){let cx=new InlineContext(this,text,offset);outer:for(let pos=offset;pos<cx.end;){let next=cx.char(pos);for(let token of this.inlineParsers)if(token){let result=token(cx,next,pos);if(result>=0){pos=result;continue outer}}pos++}return cx.resolveMarkers(0)}};function nonEmpty(a){return a!=null&&a.length>0}function resolveConfig(spec){if(!Array.isArray(spec))return spec;if(spec.length==0)return null;let conf=resolveConfig(spec[0]);if(spec.length==1)return conf;let rest=resolveConfig(spec.slice(1));if(!rest||!conf)return conf||rest;let conc=(a,b)=>(a||none).concat(b||none);let wrapA=conf.wrap,wrapB=rest.wrap;return{props:conc(conf.props,rest.props),defineNodes:conc(conf.defineNodes,rest.defineNodes),parseBlock:conc(conf.parseBlock,rest.parseBlock),parseInline:conc(conf.parseInline,rest.parseInline),remove:conc(conf.remove,rest.remove),wrap:!wrapA?wrapB:!wrapB?wrapA:(inner,input,fragments,ranges)=>wrapA(wrapB(inner,input,fragments,ranges),input,fragments,ranges)}}function findName(names,name){let found=names.indexOf(name);if(found<0)throw new RangeError(`Position specified relative to unknown parser ${name}`);return found}var nodeTypes=[NodeType.none];for(let i=1,name;name=Type[i];i++)nodeTypes[i]=NodeType.define({id:i,name,props:i>=Type.Escape?[]:[[NodeProp.group,i in DefaultSkipMarkup?[`Block`,`BlockContext`]:[`Block`,`LeafBlock`]]],top:name==`Document`});var none=[];var Buffer=class{constructor(nodeSet){this.nodeSet=nodeSet;this.content=[];this.nodes=[]}write(type,from,to,children=0){this.content.push(type,from,to,4+children*4);return this}writeElements(elts,offset=0){for(let e of elts)e.writeTo(this,offset);return this}finish(type,length){return Tree.build({buffer:this.content,nodeSet:this.nodeSet,reused:this.nodes,topID:type,length})}};var Element=class{constructor(type,from,to,children=none){this.type=type;this.from=from;this.to=to;this.children=children}writeTo(buf,offset){let startOff=buf.content.length;buf.writeElements(this.children,offset);buf.content.push(this.type,this.from+offset,this.to+offset,buf.content.length+4-startOff)}toTree(nodeSet){return new Buffer(nodeSet).writeElements(this.children,-this.from).finish(this.type,this.to-this.from)}};var TreeElement=class{constructor(tree,from){this.tree=tree;this.from=from}get to(){return this.from+this.tree.length}get type(){return this.tree.type.id}get children(){return none}writeTo(buf,offset){buf.nodes.push(this.tree);buf.content.push(buf.nodes.length-1,this.from+offset,this.to+offset,-1)}toTree(){return this.tree}};function elt(type,from,to,children){return new Element(type,from,to,children)}var EmphasisUnderscore={resolve:`Emphasis`,mark:`EmphasisMark`};var EmphasisAsterisk={resolve:`Emphasis`,mark:`EmphasisMark`};var LinkStart={};var ImageStart={};var InlineDelimiter=class{constructor(type,from,to,side){this.type=type;this.from=from;this.to=to;this.side=side}};var Escapable=`!"#$%&'()*+,-./:;<=>?@[\\]^_\`{|}~`;var Punctuation=/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\u2010-\u2027]/;try{Punctuation=new RegExp(`[\\p{S}|\\p{P}]`,`u`)}catch(_){}var DefaultInline={Escape(cx,next,start){if(next!=92||start==cx.end-1)return-1;let escaped=cx.char(start+1);for(let i=0;i<32;i++)if(Escapable.charCodeAt(i)==escaped)return cx.append(elt(Type.Escape,start,start+2));return-1},Entity(cx,next,start){if(next!=38)return-1;let m=/^(?:#\d+|#x[a-f\d]+|\w+);/i.exec(cx.slice(start+1,start+31));return m?cx.append(elt(Type.Entity,start,start+1+m[0].length)):-1},InlineCode(cx,next,start){if(next!=96||start&&cx.char(start-1)==96)return-1;let pos=start+1;while(pos<cx.end&&cx.char(pos)==96)pos++;let size=pos-start,curSize=0;for(;pos<cx.end;pos++)if(cx.char(pos)==96){curSize++;if(curSize==size&&cx.char(pos+1)!=96)return cx.append(elt(Type.InlineCode,start,pos+1,[elt(Type.CodeMark,start,start+size),elt(Type.CodeMark,pos+1-size,pos+1)]))}else curSize=0;return-1},HTMLTag(cx,next,start){if(next!=60||start==cx.end-1)return-1;let after=cx.slice(start+1,cx.end);let url=/^(?:[a-z][-\w+.]+:[^\s>]+|[a-z\d.!#$%&'*+/=?^_`{|}~-]+@[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?(?:\.[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?)*)>/i.exec(after);if(url)return cx.append(elt(Type.Autolink,start,start+1+url[0].length,[elt(Type.LinkMark,start,start+1),elt(Type.URL,start+1,start+url[0].length),elt(Type.LinkMark,start+url[0].length,start+1+url[0].length)]));let comment=/^!--[^>](?:-[^-]|[^-])*?-->/i.exec(after);if(comment)return cx.append(elt(Type.Comment,start,start+1+comment[0].length));let procInst=/^\?[^]*?\?>/.exec(after);if(procInst)return cx.append(elt(Type.ProcessingInstruction,start,start+1+procInst[0].length));let m=/^(?:![A-Z][^]*?>|!\[CDATA\[[^]*?\]\]>|\/\s*[a-zA-Z][\w-]*\s*>|\s*[a-zA-Z][\w-]*(\s+[a-zA-Z:_][\w-.:]*(?:\s*=\s*(?:[^\s"'=<>`]+|'[^']*'|"[^"]*"))?)*\s*(\/\s*)?>)/.exec(after);if(!m)return-1;return cx.append(elt(Type.HTMLTag,start,start+1+m[0].length))},Emphasis(cx,next,start){if(next!=95&&next!=42)return-1;let pos=start+1;while(cx.char(pos)==next)pos++;let before=cx.slice(start-1,start),after=cx.slice(pos,pos+1);let pBefore=Punctuation.test(before),pAfter=Punctuation.test(after);let sBefore=/\s|^$/.test(before),sAfter=/\s|^$/.test(after);let leftFlanking=!sAfter&&(!pAfter||sBefore||pBefore);let rightFlanking=!sBefore&&(!pBefore||sAfter||pAfter);let canOpen=leftFlanking&&(next==42||!rightFlanking||pBefore);let canClose=rightFlanking&&(next==42||!leftFlanking||pAfter);return cx.append(new InlineDelimiter(next==95?EmphasisUnderscore:EmphasisAsterisk,start,pos,(canOpen?1:0)|(canClose?2:0)))},HardBreak(cx,next,start){if(next==92&&cx.char(start+1)==10)return cx.append(elt(Type.HardBreak,start,start+2));if(next==32){let pos=start+1;while(cx.char(pos)==32)pos++;if(cx.char(pos)==10&&pos>=start+2)return cx.append(elt(Type.HardBreak,start,pos+1))}return-1},Link(cx,next,start){return next==91?cx.append(new InlineDelimiter(LinkStart,start,start+1,1)):-1},Image(cx,next,start){return next==33&&cx.char(start+1)==91?cx.append(new InlineDelimiter(ImageStart,start,start+2,1)):-1},LinkEnd(cx,next,start){if(next!=93)return-1;for(let i=cx.parts.length-1;i>=0;i--){let part=cx.parts[i];if(part instanceof InlineDelimiter&&(part.type==LinkStart||part.type==ImageStart)){if(!part.side||cx.skipSpace(part.to)==start&&!/[(\[]/.test(cx.slice(start+1,start+2))){cx.parts[i]=null;return-1}let content=cx.takeContent(i);let link=cx.parts[i]=finishLink(cx,content,part.type==LinkStart?Type.Link:Type.Image,part.from,start+1);if(part.type==LinkStart)for(let j=0;j<i;j++){let p=cx.parts[j];if(p instanceof InlineDelimiter&&p.type==LinkStart)p.side=0}return link.to}}return-1}};function finishLink(cx,content,type,start,startPos){let{text}=cx,next=cx.char(startPos),endPos=startPos;content.unshift(elt(Type.LinkMark,start,start+(type==Type.Image?2:1)));content.push(elt(Type.LinkMark,startPos-1,startPos));if(next==40){let pos=cx.skipSpace(startPos+1);let dest=parseURL(text,pos-cx.offset,cx.offset),title;if(dest){pos=cx.skipSpace(dest.to);if(pos!=dest.to){title=parseLinkTitle(text,pos-cx.offset,cx.offset);if(title)pos=cx.skipSpace(title.to)}}if(cx.char(pos)==41){content.push(elt(Type.LinkMark,startPos,startPos+1));endPos=pos+1;if(dest)content.push(dest);if(title)content.push(title);content.push(elt(Type.LinkMark,pos,endPos))}}else if(next==91){let label=parseLinkLabel(text,startPos-cx.offset,cx.offset,false);if(label){content.push(label);endPos=label.to}}return elt(type,start,endPos,content)}function parseURL(text,start,offset){if(text.charCodeAt(start)==60){for(let pos=start+1;pos<text.length;pos++){let ch=text.charCodeAt(pos);if(ch==62)return elt(Type.URL,start+offset,pos+1+offset);if(ch==60||ch==10)return false}return null}else{let depth=0,pos=start;for(let escaped=false;pos<text.length;pos++){let ch=text.charCodeAt(pos);if(space(ch))break;else if(escaped)escaped=false;else if(ch==40)depth++;else if(ch==41){if(!depth)break;depth--}else if(ch==92)escaped=true}return pos>start?elt(Type.URL,start+offset,pos+offset):pos==text.length?null:false}}function parseLinkTitle(text,start,offset){let next=text.charCodeAt(start);if(next!=39&&next!=34&&next!=40)return false;let end=next==40?41:next;for(let pos=start+1,escaped=false;pos<text.length;pos++){let ch=text.charCodeAt(pos);if(escaped)escaped=false;else if(ch==end)return elt(Type.LinkTitle,start+offset,pos+1+offset);else if(ch==92)escaped=true}return null}function parseLinkLabel(text,start,offset,requireNonWS){for(let escaped=false,pos=start+1,end=Math.min(text.length,pos+999);pos<end;pos++){let ch=text.charCodeAt(pos);if(escaped)escaped=false;else if(ch==93)return requireNonWS?false:elt(Type.LinkLabel,start+offset,pos+1+offset);else{if(requireNonWS&&!space(ch))requireNonWS=false;if(ch==91)return false;else if(ch==92)escaped=true}}return null}var InlineContext=class{constructor(parser,text,offset){this.parser=parser;this.text=text;this.offset=offset;this.parts=[]}char(pos){return pos>=this.end?-1:this.text.charCodeAt(pos-this.offset)}get end(){return this.offset+this.text.length}slice(from,to){return this.text.slice(from-this.offset,to-this.offset)}append(elt){this.parts.push(elt);return elt.to}addDelimiter(type,from,to,open,close){return this.append(new InlineDelimiter(type,from,to,(open?1:0)|(close?2:0)))}get hasOpenLink(){for(let i=this.parts.length-1;i>=0;i--){let part=this.parts[i];if(part instanceof InlineDelimiter&&(part.type==LinkStart||part.type==ImageStart))return true}return false}addElement(elt){return this.append(elt)}resolveMarkers(from){for(let i=from;i<this.parts.length;i++){let close=this.parts[i];if(!(close instanceof InlineDelimiter&&close.type.resolve&&close.side&2))continue;let emp=close.type==EmphasisUnderscore||close.type==EmphasisAsterisk;let closeSize=close.to-close.from;let open,j=i-1;for(;j>=from;j--){let part=this.parts[j];if(part instanceof InlineDelimiter&&part.side&1&&part.type==close.type&&!(emp&&(close.side&1||part.side&2)&&(part.to-part.from+closeSize)%3==0&&((part.to-part.from)%3||closeSize%3))){open=part;break}}if(!open)continue;let type=close.type.resolve,content=[];let start=open.from,end=close.to;if(emp){let size=Math.min(2,open.to-open.from,closeSize);start=open.to-size;end=close.from+size;type=size==1?`Emphasis`:`StrongEmphasis`}if(open.type.mark)content.push(this.elt(open.type.mark,start,open.to));for(let k=j+1;k<i;k++){if(this.parts[k]instanceof Element)content.push(this.parts[k]);this.parts[k]=null}if(close.type.mark)content.push(this.elt(close.type.mark,close.from,end));let element=this.elt(type,start,end,content);this.parts[j]=emp&&open.from!=start?new InlineDelimiter(open.type,open.from,start,open.side):null;if(this.parts[i]=emp&&close.to!=end?new InlineDelimiter(close.type,end,close.to,close.side):null)this.parts.splice(i,0,element);else this.parts[i]=element}let result=[];for(let i=from;i<this.parts.length;i++){let part=this.parts[i];if(part instanceof Element)result.push(part)}return result}findOpeningDelimiter(type){for(let i=this.parts.length-1;i>=0;i--){let part=this.parts[i];if(part instanceof InlineDelimiter&&part.type==type&&part.side&1)return i}return null}takeContent(startIndex){let content=this.resolveMarkers(startIndex);this.parts.length=startIndex;return content}getDelimiterAt(index){let part=this.parts[index];return part instanceof InlineDelimiter?part:null}skipSpace(from){return skipSpace(this.text,from-this.offset)+this.offset}elt(type,from,to,children){if(typeof type==`string`)return elt(this.parser.getNodeType(type),from,to,children);return new TreeElement(type,from)}};InlineContext.linkStart=LinkStart;InlineContext.imageStart=ImageStart;function injectMarks(elements,marks){if(!marks.length)return elements;if(!elements.length)return marks;let elts=elements.slice(),eI=0;for(let mark of marks){while(eI<elts.length&&elts[eI].to<mark.to)eI++;if(eI<elts.length&&elts[eI].from<mark.from){let e=elts[eI];if(e instanceof Element)elts[eI]=new Element(e.type,e.from,e.to,injectMarks(e.children,[mark]))}else elts.splice(eI++,0,mark)}return elts}var NotLast=[Type.CodeBlock,Type.ListItem,Type.OrderedList,Type.BulletList];var FragmentCursor=class{constructor(fragments,input){this.fragments=fragments;this.input=input;this.i=0;this.fragment=null;this.fragmentEnd=-1;this.cursor=null;if(fragments.length)this.fragment=fragments[this.i++]}nextFragment(){this.fragment=this.i<this.fragments.length?this.fragments[this.i++]:null;this.cursor=null;this.fragmentEnd=-1}moveTo(pos,lineStart){while(this.fragment&&this.fragment.to<=pos)this.nextFragment();if(!this.fragment||this.fragment.from>(pos?pos-1:0))return false;if(this.fragmentEnd<0){let end=this.fragment.to;while(end>0&&this.input.read(end-1,end)!=`
|
|
38
|
-
`)end--;this.fragmentEnd=end?end-1:0}let c=this.cursor;if(!c){c=this.cursor=this.fragment.tree.cursor();c.firstChild()}let rPos=pos+this.fragment.offset;while(c.to<=rPos)if(!c.parent())return false;for(;;){if(c.from>=rPos)return this.fragment.from<=lineStart;if(!c.childAfter(rPos))return false}}matches(hash){let tree=this.cursor.tree;return tree&&tree.prop(NodeProp.contextHash)==hash}takeNodes(cx){let cur=this.cursor,off=this.fragment.offset,fragEnd=this.fragmentEnd-(this.fragment.openEnd?1:0);let start=cx.absoluteLineStart,end=start,blockI=cx.block.children.length;let prevEnd=end,prevI=blockI;for(;;){if(cur.to-off>fragEnd){if(cur.type.isAnonymous&&cur.firstChild())continue;break}let pos=toRelative(cur.from-off,cx.ranges);if(cur.to-off<=cx.ranges[cx.rangeI].to)cx.addNode(cur.tree,pos);else{let dummy=new Tree(cx.parser.nodeSet.types[Type.Paragraph],[],[],0,cx.block.hashProp);cx.reusePlaceholders.set(dummy,cur.tree);cx.addNode(dummy,pos)}if(cur.type.is(`Block`)){if(NotLast.indexOf(cur.type.id)<0){end=cur.to-off;blockI=cx.block.children.length}else{end=prevEnd;blockI=prevI}prevEnd=cur.to-off;prevI=cx.block.children.length}if(!cur.nextSibling())break}while(cx.block.children.length>blockI){cx.block.children.pop();cx.block.positions.pop()}return end-start}};function toRelative(abs,ranges){let pos=abs;for(let i=1;i<ranges.length;i++){let gapFrom=ranges[i-1].to,gapTo=ranges[i].from;if(gapFrom<abs)pos-=gapTo-gapFrom}return pos}var markdownHighlighting=styleTags({"Blockquote/...":tags$1.quote,HorizontalRule:tags$1.contentSeparator,"ATXHeading1/... SetextHeading1/...":tags$1.heading1,"ATXHeading2/... SetextHeading2/...":tags$1.heading2,"ATXHeading3/...":tags$1.heading3,"ATXHeading4/...":tags$1.heading4,"ATXHeading5/...":tags$1.heading5,"ATXHeading6/...":tags$1.heading6,"Comment CommentBlock":tags$1.comment,Escape:tags$1.escape,Entity:tags$1.character,"Emphasis/...":tags$1.emphasis,"StrongEmphasis/...":tags$1.strong,"Link/... Image/...":tags$1.link,"OrderedList/... BulletList/...":tags$1.list,"BlockQuote/...":tags$1.quote,"InlineCode CodeText":tags$1.monospace,"URL Autolink":tags$1.url,"HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark":tags$1.processingInstruction,"CodeInfo LinkLabel":tags$1.labelName,LinkTitle:tags$1.string,Paragraph:tags$1.content});var parser=new MarkdownParser(new NodeSet(nodeTypes).extend(markdownHighlighting),Object.keys(DefaultBlockParsers).map(n=>DefaultBlockParsers[n]),Object.keys(DefaultBlockParsers).map(n=>DefaultLeafBlocks[n]),Object.keys(DefaultBlockParsers),DefaultEndLeaf,DefaultSkipMarkup,Object.keys(DefaultInline).map(n=>DefaultInline[n]),Object.keys(DefaultInline),[]);function leftOverSpace(node,from,to){let ranges=[];for(let n=node.firstChild,pos=from;;n=n.nextSibling){let nextPos=n?n.from:to;if(nextPos>pos)ranges.push({from:pos,to:nextPos});if(!n)break;pos=n.to}return ranges}function parseCode(config){let{codeParser,htmlParser}=config;return{wrap:parseMixed((node,input)=>{let id=node.type.id;if(codeParser&&(id==Type.CodeBlock||id==Type.FencedCode)){let info=``;if(id==Type.FencedCode){let infoNode=node.node.getChild(Type.CodeInfo);if(infoNode)info=input.read(infoNode.from,infoNode.to)}let parser=codeParser(info);if(parser)return{parser,overlay:node=>node.type.id==Type.CodeText,bracketed:id==Type.FencedCode}}else if(htmlParser&&(id==Type.HTMLBlock||id==Type.HTMLTag||id==Type.CommentBlock))return{parser:htmlParser,overlay:leftOverSpace(node.node,node.from,node.to)};return null})}}var StrikethroughDelim={resolve:`Strikethrough`,mark:`StrikethroughMark`};var Strikethrough={defineNodes:[{name:`Strikethrough`,style:{"Strikethrough/...":tags$1.strikethrough}},{name:`StrikethroughMark`,style:tags$1.processingInstruction}],parseInline:[{name:`Strikethrough`,parse(cx,next,pos){if(next!=126||cx.char(pos+1)!=126||cx.char(pos+2)==126)return-1;let before=cx.slice(pos-1,pos),after=cx.slice(pos+2,pos+3);let sBefore=/\s|^$/.test(before),sAfter=/\s|^$/.test(after);let pBefore=Punctuation.test(before),pAfter=Punctuation.test(after);return cx.addDelimiter(StrikethroughDelim,pos,pos+2,!sAfter&&(!pAfter||sBefore||pBefore),!sBefore&&(!pBefore||sAfter||pAfter))},after:`Emphasis`}]};function parseRow(cx,line,startI=0,elts,offset=0){let count=0,first=true,cellStart=-1,cellEnd=-1,esc=false;let parseCell=()=>{elts.push(cx.elt(`TableCell`,offset+cellStart,offset+cellEnd,cx.parser.parseInline(line.slice(cellStart,cellEnd),offset+cellStart)))};for(let i=startI;i<line.length;i++){let next=line.charCodeAt(i);if(next==124&&!esc){if(!first||cellStart>-1)count++;first=false;if(elts){if(cellStart>-1)parseCell();elts.push(cx.elt(`TableDelimiter`,i+offset,i+offset+1))}cellStart=cellEnd=-1}else if(esc||next!=32&&next!=9){if(cellStart<0)cellStart=i;cellEnd=i+1}esc=!esc&&next==92}if(cellStart>-1){count++;if(elts)parseCell()}return count}function hasPipe(str,start){for(let i=start;i<str.length;i++){let next=str.charCodeAt(i);if(next==124)return true;if(next==92)i++}return false}var delimiterLine=/^[>\s]*\|?(\s*:?-+:?\s*\|)+(\s*:?-+:?\s*)?$/;var TableParser=class{constructor(){this.rows=null}nextLine(cx,line,leaf){if(this.rows==null){this.rows=false;let lineText;if((line.next==45||line.next==58||line.next==124)&&delimiterLine.test(lineText=line.text.slice(line.pos))){let firstRow=[];if(parseRow(cx,leaf.content,0,firstRow,leaf.start)==parseRow(cx,lineText,0))this.rows=[cx.elt(`TableHeader`,leaf.start,leaf.start+leaf.content.length,firstRow),cx.elt(`TableDelimiter`,cx.lineStart+line.pos,cx.lineStart+line.text.length)]}}else if(this.rows){let content=[];parseRow(cx,line.text,line.pos,content,cx.lineStart);this.rows.push(cx.elt(`TableRow`,cx.lineStart+line.pos,cx.lineStart+line.text.length,content))}return false}finish(cx,leaf){if(!this.rows)return false;cx.addLeafElement(leaf,cx.elt(`Table`,leaf.start,leaf.start+leaf.content.length,this.rows));return true}};var Table={defineNodes:[{name:`Table`,block:true},{name:`TableHeader`,style:{"TableHeader/...":tags$1.heading}},`TableRow`,{name:`TableCell`,style:tags$1.content},{name:`TableDelimiter`,style:tags$1.processingInstruction}],parseBlock:[{name:`Table`,leaf(_,leaf){return hasPipe(leaf.content,0)?new TableParser:null},endLeaf(cx,line,leaf){if(leaf.parsers.some(p=>p instanceof TableParser)||!hasPipe(line.text,line.basePos))return false;let next=cx.peekLine();return delimiterLine.test(next)&&parseRow(cx,line.text,line.basePos)==parseRow(cx,next,line.basePos)},before:`SetextHeading`}]};var TaskParser=class{nextLine(){return false}finish(cx,leaf){cx.addLeafElement(leaf,cx.elt(`Task`,leaf.start,leaf.start+leaf.content.length,[cx.elt(`TaskMarker`,leaf.start,leaf.start+3),...cx.parser.parseInline(leaf.content.slice(3),leaf.start+3)]));return true}};var TaskList={defineNodes:[{name:`Task`,block:true,style:tags$1.list},{name:`TaskMarker`,style:tags$1.atom}],parseBlock:[{name:`TaskList`,leaf(cx,leaf){return/^\[[ xX]\][ \t]/.test(leaf.content)&&cx.parentType().name==`ListItem`?new TaskParser:null},after:`SetextHeading`}]};var autolinkRE=/(www\.)|(https?:\/\/)|([\w.+-]{1,100}@)|(mailto:|xmpp:)/gy;var urlRE=/[\w-]+(\.[\w-]+)+(:\d+)?(\/[^\s<]*)?/gy;var lastTwoDomainWords=/[\w-]+\.[\w-]+($|[/:])/;var emailRE=/[\w.+-]+@[\w-]+(\.[\w.-]+)+/gy;var xmppResourceRE=/\/[a-zA-Z\d@.]+/gy;function count(str,from,to,ch){let result=0;for(let i=from;i<to;i++)if(str[i]==ch)result++;return result}function autolinkURLEnd(text,from){urlRE.lastIndex=from;let m=urlRE.exec(text);if(!m||lastTwoDomainWords.exec(m[0])[0].indexOf(`_`)>-1)return-1;let end=from+m[0].length;for(;;){let last=text[end-1],m;if(/[?!.,:*_~]/.test(last)||last==`)`&&count(text,from,end,`)`)>count(text,from,end,`(`))end--;else if(last==`;`&&(m=/&(?:#\d+|#x[a-f\d]+|\w+);$/.exec(text.slice(from,end))))end=from+m.index;else break}return end}function autolinkEmailEnd(text,from){emailRE.lastIndex=from;let m=emailRE.exec(text);if(!m)return-1;let last=m[0][m[0].length-1];return last==`_`||last==`-`?-1:from+m[0].length-(last==`.`?1:0)}var Autolink={parseInline:[{name:`Autolink`,parse(cx,next,absPos){let pos=absPos-cx.offset;if(pos&&/\w/.test(cx.text[pos-1]))return-1;autolinkRE.lastIndex=pos;let m=autolinkRE.exec(cx.text),end=-1;if(!m)return-1;if(m[1]||m[2]){end=autolinkURLEnd(cx.text,pos+m[0].length);if(end>-1&&cx.hasOpenLink)end=pos+/([^\[\]]|\[[^\]]*\])*/.exec(cx.text.slice(pos,end))[0].length}else if(m[3])end=autolinkEmailEnd(cx.text,pos);else{end=autolinkEmailEnd(cx.text,pos+m[0].length);if(end>-1&&m[0]==`xmpp:`){xmppResourceRE.lastIndex=end;m=xmppResourceRE.exec(cx.text);if(m)end=m.index+m[0].length}}if(end<0)return-1;cx.addElement(cx.elt(`URL`,absPos,end+cx.offset));return end+cx.offset}}]};var GFM=[Table,TaskList,Strikethrough,Autolink];function parseSubSuper(ch,node,mark){return(cx,next,pos)=>{if(next!=ch||cx.char(pos+1)==ch)return-1;let elts=[cx.elt(mark,pos,pos+1)];for(let i=pos+1;i<cx.end;i++){let next=cx.char(i);if(next==ch)return cx.addElement(cx.elt(node,pos,i+1,elts.concat(cx.elt(mark,i,i+1))));if(next==92)elts.push(cx.elt(`Escape`,i,i+++2));if(space(next))break}return-1}}var Superscript={defineNodes:[{name:`Superscript`,style:tags$1.special(tags$1.content)},{name:`SuperscriptMark`,style:tags$1.processingInstruction}],parseInline:[{name:`Superscript`,parse:parseSubSuper(94,`Superscript`,`SuperscriptMark`)}]};var Subscript={defineNodes:[{name:`Subscript`,style:tags$1.special(tags$1.content)},{name:`SubscriptMark`,style:tags$1.processingInstruction}],parseInline:[{name:`Subscript`,parse:parseSubSuper(126,`Subscript`,`SubscriptMark`)}]};var Emoji={defineNodes:[{name:`Emoji`,style:tags$1.character}],parseInline:[{name:`Emoji`,parse(cx,next,pos){let match;if(next!=58||!(match=/^[a-zA-Z_0-9]+:/.exec(cx.slice(pos+1,cx.end))))return-1;return cx.addElement(cx.elt(`Emoji`,pos,pos+1+match[0].length))}}]};var data=defineLanguageFacet({commentTokens:{block:{open:`<!--`,close:`-->`}}});var headingProp=new NodeProp;var commonmark=parser.configure({props:[foldNodeProp.add(type=>{return!type.is(`Block`)||type.is(`Document`)||isHeading(type)!=null||isList(type)?void 0:(tree,state)=>({from:state.doc.lineAt(tree.from).to,to:tree.to})}),headingProp.add(isHeading),indentNodeProp.add({Document:()=>null}),languageDataProp.add({Document:data})]});function isHeading(type){let match=/^(?:ATX|Setext)Heading(\d)$/.exec(type.name);return match?+match[1]:void 0}function isList(type){return type.name==`OrderedList`||type.name==`BulletList`}function findSectionEnd(headerNode,level){let last=headerNode;for(;;){let next=last.nextSibling,heading;if(!next||(heading=isHeading(next.type))!=null&&heading<=level)break;last=next}return last.to}var headerIndent=foldService.of((state,start,end)=>{for(let node=syntaxTree(state).resolveInner(end,-1);node;node=node.parent){if(node.from<start)break;let heading=node.type.prop(headingProp);if(heading==null)continue;let upto=findSectionEnd(node,heading);if(upto>end)return{from:end,to:upto}}return null});function mkLang(parser){return new Language(data,parser,[],`markdown`)}var commonmarkLanguage=mkLang(commonmark);var markdownLanguage=mkLang(commonmark.configure([GFM,Subscript,Superscript,Emoji,{props:[foldNodeProp.add({Table:(tree,state)=>({from:state.doc.lineAt(tree.from).to,to:tree.to})})]}]));function getCodeParser(languages,defaultLanguage){return info=>{if(info&&languages){let found=null;info=/\S*/.exec(info)[0];if(typeof languages==`function`)found=languages(info);else found=LanguageDescription.matchLanguageName(languages,info,true);if(found instanceof LanguageDescription)return found.support?found.support.language.parser:ParseContext.getSkippingParser(found.load());else if(found)return found.parser}return defaultLanguage?defaultLanguage.parser:null}}var Context=class{constructor(node,from,to,spaceBefore,spaceAfter,type,item){this.node=node;this.from=from;this.to=to;this.spaceBefore=spaceBefore;this.spaceAfter=spaceAfter;this.type=type;this.item=item}blank(maxWidth,trailing=true){let result=this.spaceBefore+(this.node.name==`Blockquote`?`>`:``);if(maxWidth!=null){while(result.length<maxWidth)result+=` `;return result}else{for(let i=this.to-this.from-result.length-this.spaceAfter.length;i>0;i--)result+=` `;return result+(trailing?this.spaceAfter:``)}}marker(doc,add){let number=this.node.name==`OrderedList`?String(+itemNumber(this.item,doc)[2]+add):``;return this.spaceBefore+number+this.type+this.spaceAfter}};function getContext(node,doc){let nodes=[],context=[];for(let cur=node;cur;cur=cur.parent){if(cur.name==`FencedCode`)return context;if(cur.name==`ListItem`||cur.name==`Blockquote`)nodes.push(cur)}for(let i=nodes.length-1;i>=0;i--){let node=nodes[i],match;let line=doc.lineAt(node.from),startPos=node.from-line.from;if(node.name==`Blockquote`&&(match=/^ *>( ?)/.exec(line.text.slice(startPos))))context.push(new Context(node,startPos,startPos+match[0].length,``,match[1],`>`,null));else if(node.name==`ListItem`&&node.parent.name==`OrderedList`&&(match=/^( *)\d+([.)])( *)/.exec(line.text.slice(startPos)))){let after=match[3],len=match[0].length;if(after.length>=4){after=after.slice(0,after.length-4);len-=4}context.push(new Context(node.parent,startPos,startPos+len,match[1],after,match[2],node))}else if(node.name==`ListItem`&&node.parent.name==`BulletList`&&(match=/^( *)([-+*])( {1,4}\[[ xX]\])?( +)/.exec(line.text.slice(startPos)))){let after=match[4],len=match[0].length;if(after.length>4){after=after.slice(0,after.length-4);len-=4}let type=match[2];if(match[3])type+=match[3].replace(/[xX]/,` `);context.push(new Context(node.parent,startPos,startPos+len,match[1],after,type,node))}}return context}function itemNumber(item,doc){return/^(\s*)(\d+)(?=[.)])/.exec(doc.sliceString(item.from,item.from+10))}function renumberList(after,doc,changes,offset=0){for(let prev=-1,node=after;;){if(node.name==`ListItem`){let m=itemNumber(node,doc);let number=+m[2];if(prev>=0){if(number!=prev+1)return;changes.push({from:node.from+m[1].length,to:node.from+m[0].length,insert:String(prev+2+offset)})}prev=number}let next=node.nextSibling;if(!next)break;node=next}}function normalizeIndent(content,state){let blank=/^[ \t]*/.exec(content)[0].length;if(!blank||state.facet(indentUnit)!=` `)return content;let col=countColumn(content,4,blank);let space=``;for(let i=col;i>0;)if(i>=4){space+=` `;i-=4}else{space+=` `;i--}return space+content.slice(blank)}var insertNewlineContinueMarkupCommand=(config={})=>({state,dispatch})=>{let tree=syntaxTree(state),{doc}=state;let dont=null,changes=state.changeByRange(range=>{if(!range.empty||!markdownLanguage.isActiveAt(state,range.from,-1)&&!markdownLanguage.isActiveAt(state,range.from,1))return dont={range};let pos=range.from,line=doc.lineAt(pos);let context=getContext(tree.resolveInner(pos,-1),doc);while(context.length&&context[context.length-1].from>pos-line.from)context.pop();if(!context.length)return dont={range};let inner=context[context.length-1];if(inner.to-inner.spaceAfter.length>pos-line.from)return dont={range};let emptyLine=pos>=inner.to-inner.spaceAfter.length&&!/\S/.test(line.text.slice(inner.to));if(inner.item&&emptyLine){if(inner.item.from<line.from&&!/^[\s>]*$/.test(line.text.slice(0,inner.to)))return dont={range};let first=inner.node.firstChild,second=inner.node.getChild(`ListItem`,`ListItem`);if(first.to>=pos||second&&second.to<pos||line.from>0&&!/[^\s>]/.test(doc.lineAt(line.from-1).text)||config.nonTightLists===false){let next=context.length>1?context[context.length-2]:null;let delTo,insert=``;if(next&&next.item){delTo=line.from+next.from;insert=next.marker(doc,1)}else delTo=line.from+(next?next.to:0);let changes=[{from:delTo,to:pos,insert}];if(inner.node.name==`OrderedList`)renumberList(inner.item,doc,changes,-2);if(next&&next.node.name==`OrderedList`)renumberList(next.item,doc,changes);return{range:EditorSelection.cursor(delTo+insert.length),changes}}else{let insert=blankLine(context,state,line);return{range:EditorSelection.cursor(pos+insert.length+1),changes:{from:line.from,insert:insert+state.lineBreak}}}}if(inner.node.name==`Blockquote`&&emptyLine&&line.from){let prevLine=doc.lineAt(line.from-1),quoted=/>\s*$/.exec(prevLine.text);if(quoted&"ed.index==inner.from){let changes=state.changes([{from:prevLine.from+quoted.index,to:prevLine.to},{from:line.from+inner.from,to:line.to}]);return{range:range.map(changes),changes}}}let changes=[];if(inner.node.name==`OrderedList`)renumberList(inner.item,doc,changes);let continued=inner.item&&inner.item.from<line.from;let insert=``;if(!continued||/^[\s\d.)\-+*>]*/.exec(line.text)[0].length>=inner.to)for(let i=0,e=context.length-1;i<=e;i++)insert+=i==e&&!continued?context[i].marker(doc,1):context[i].blank(i<e?countColumn(line.text,4,context[i+1].from)-insert.length:null);let from=pos;while(from>line.from&&/\s/.test(line.text.charAt(from-line.from-1)))from--;insert=normalizeIndent(insert,state);if(nonTightList(inner.node,state.doc))insert=blankLine(context,state,line)+state.lineBreak+insert;changes.push({from,to:pos,insert:state.lineBreak+insert});return{range:EditorSelection.cursor(from+insert.length+1),changes}});if(dont)return false;dispatch(state.update(changes,{scrollIntoView:true,userEvent:`input`}));return true};var insertNewlineContinueMarkup=insertNewlineContinueMarkupCommand();function isMark(node){return node.name==`QuoteMark`||node.name==`ListMark`}function nonTightList(node,doc){if(node.name!=`OrderedList`&&node.name!=`BulletList`)return false;let first=node.firstChild,second=node.getChild(`ListItem`,`ListItem`);if(!second)return false;let line1=doc.lineAt(first.to),line2=doc.lineAt(second.from);let empty=/^[\s>]*$/.test(line1.text);return line1.number+(empty?0:1)<line2.number}function blankLine(context,state,line){let insert=``;for(let i=0,e=context.length-2;i<=e;i++)insert+=context[i].blank(i<e?countColumn(line.text,4,context[i+1].from)-insert.length:null,i<e);return normalizeIndent(insert,state)}function contextNodeForDelete(tree,pos){let node=tree.resolveInner(pos,-1),scan=pos;if(isMark(node)){scan=node.from;node=node.parent}for(let prev;prev=node.childBefore(scan);)if(isMark(prev))scan=prev.from;else if(prev.name==`OrderedList`||prev.name==`BulletList`){node=prev.lastChild;scan=node.to}else break;return node}var deleteMarkupBackward=({state,dispatch})=>{let tree=syntaxTree(state);let dont=null,changes=state.changeByRange(range=>{let pos=range.from,{doc}=state;if(range.empty&&markdownLanguage.isActiveAt(state,range.from)){let line=doc.lineAt(pos);let context=getContext(contextNodeForDelete(tree,pos),doc);if(context.length){let inner=context[context.length-1];let spaceEnd=inner.to-inner.spaceAfter.length+(inner.spaceAfter?1:0);if(pos-line.from>spaceEnd&&!/\S/.test(line.text.slice(spaceEnd,pos-line.from)))return{range:EditorSelection.cursor(line.from+spaceEnd),changes:{from:line.from+spaceEnd,to:pos}};if(pos-line.from==spaceEnd&&(inner.item&&line.from<=inner.item.from||/^[\s>]*$/.test(line.text.slice(0,inner.to)))){let start=line.from+inner.from;if(inner.item&&inner.node.from<inner.item.from&&/\S/.test(line.text.slice(inner.from,inner.to))){let insert=inner.blank(countColumn(line.text,4,inner.to)-countColumn(line.text,4,inner.from));if(start==line.from)insert=normalizeIndent(insert,state);return{range:EditorSelection.cursor(start+insert.length),changes:{from:start,to:line.from+inner.to,insert}}}if(start<pos)return{range:EditorSelection.cursor(start),changes:{from:start,to:pos}}}}}return dont={range}});if(dont)return false;dispatch(state.update(changes,{scrollIntoView:true,userEvent:`delete`}));return true};var markdownKeymap=[{key:`Enter`,run:insertNewlineContinueMarkup},{key:`Backspace`,run:deleteMarkupBackward}];var htmlNoMatch=html({matchClosingTags:false});function markdown(config={}){let{codeLanguages,defaultCodeLanguage,addKeymap=true,base:{parser}=commonmarkLanguage,completeHTMLTags=true,pasteURLAsLink:pasteURL=true,htmlTagLanguage=htmlNoMatch}=config;if(!(parser instanceof MarkdownParser))throw new RangeError("Base parser provided to `markdown` should be a Markdown parser");let extensions=config.extensions?[config.extensions]:[];let support=[htmlTagLanguage.support,headerIndent],defaultCode;if(pasteURL)support.push(pasteURLAsLink);if(defaultCodeLanguage instanceof LanguageSupport){support.push(defaultCodeLanguage.support);defaultCode=defaultCodeLanguage.language}else if(defaultCodeLanguage)defaultCode=defaultCodeLanguage;let codeParser=codeLanguages||defaultCode?getCodeParser(codeLanguages,defaultCode):void 0;extensions.push(parseCode({codeParser,htmlParser:htmlTagLanguage.language.parser}));if(addKeymap)support.push(Prec.high(keymap.of(markdownKeymap)));let lang=mkLang(parser.configure(extensions));if(completeHTMLTags)support.push(lang.data.of({autocomplete:htmlTagCompletion}));return new LanguageSupport(lang,support)}function htmlTagCompletion(context){let{state,pos}=context,m=/<[:\-\.\w\u00b7-\uffff]*$/.exec(state.sliceDoc(pos-25,pos));if(!m)return null;let tree=syntaxTree(state).resolveInner(pos,-1);while(tree&&!tree.type.isTop){if(tree.name==`CodeBlock`||tree.name==`FencedCode`||tree.name==`ProcessingInstructionBlock`||tree.name==`CommentBlock`||tree.name==`Link`||tree.name==`Image`)return null;tree=tree.parent}return{from:pos-m[0].length,to:pos,options:htmlTagCompletions(),validFor:/^<[:\-\.\w\u00b7-\uffff]*$/}}var _tagCompletions=null;function htmlTagCompletions(){if(_tagCompletions)return _tagCompletions;let result=htmlCompletionSource(new CompletionContext(EditorState.create({extensions:htmlNoMatch}),0,true));return _tagCompletions=result?result.options:[]}var nonPlainText=/code|horizontalrule|html|link|comment|processing|escape|entity|image|mark|url/i;var pasteURLAsLink=EditorView.domEventHandlers({paste:(event,view)=>{var _a;let{main}=view.state.selection;if(main.empty)return false;let link=(_a=event.clipboardData)===null||_a===void 0?void 0:_a.getData(`text/plain`);if(!link||!/^(https?:\/\/|mailto:|xmpp:|www\.)/.test(link))return false;if(/^www\./.test(link))link=`https://`+link;if(!markdownLanguage.isActiveAt(view.state,main.from,1))return false;let tree=syntaxTree(view.state),crossesNode=false;tree.iterate({from:main.from,to:main.to,enter:node=>{if(node.from>main.from||nonPlainText.test(node.name))crossesNode=true},leave:node=>{if(node.to<main.to)crossesNode=true}});if(crossesNode)return false;view.dispatch({changes:[{from:main.from,insert:`[`},{from:main.to,insert:`](${link})`}],userEvent:`input.paste`,scrollIntoView:true});return true}});var words={};function define(style,dict){for(var i=0;i<dict.length;i++)words[dict[i]]=style}var commonAtoms=[`true`,`false`];var commonKeywords=[`if`,`then`,`do`,`else`,`elif`,`while`,`until`,`for`,`in`,`esac`,`fi`,`fin`,`fil`,`done`,`exit`,`set`,`unset`,`export`,`function`];var commonCommands=[`ab`,`awk`,`bash`,`beep`,`cat`,`cc`,`cd`,`chown`,`chmod`,`chroot`,`clear`,`cp`,`curl`,`cut`,`diff`,`echo`,`find`,`gawk`,`gcc`,`get`,`git`,`grep`,`hg`,`kill`,`killall`,`ln`,`ls`,`make`,`mkdir`,`openssl`,`mv`,`nc`,`nl`,`node`,`npm`,`ping`,`ps`,`restart`,`rm`,`rmdir`,`sed`,`service`,`sh`,`shopt`,`shred`,`source`,`sort`,`sleep`,`ssh`,`start`,`stop`,`su`,`sudo`,`svn`,`tee`,`telnet`,`top`,`touch`,`vi`,`vim`,`wall`,`wc`,`wget`,`who`,`write`,`yes`,`zsh`];define(`atom`,commonAtoms);define(`keyword`,commonKeywords);define(`builtin`,commonCommands);function tokenBase(stream,state){if(stream.eatSpace())return null;var sol=stream.sol();var ch=stream.next();if(ch===`\\`){stream.next();return null}if(ch===`'`||ch===`"`||ch==="`"){state.tokens.unshift(tokenString(ch,ch==="`"?`quote`:`string`));return tokenize(stream,state)}if(ch===`#`){if(sol&&stream.eat(`!`)){stream.skipToEnd();return`meta`}stream.skipToEnd();return`comment`}if(ch===`$`){state.tokens.unshift(tokenDollar);return tokenize(stream,state)}if(ch===`+`||ch===`=`)return`operator`;if(ch===`-`){stream.eat(`-`);stream.eatWhile(/\w/);return`attribute`}if(ch==`<`){if(stream.match(`<<`))return`operator`;var heredoc=stream.match(/^<-?\s*(?:['"]([^'"]*)['"]|([^'"\s]*))/);if(heredoc){state.tokens.unshift(tokenHeredoc(heredoc[1]||heredoc[2]));return`string.special`}}if(/\d/.test(ch)){stream.eatWhile(/\d/);if(stream.eol()||!/\w/.test(stream.peek()))return`number`}stream.eatWhile(/[\w-]/);var cur=stream.current();if(stream.peek()===`=`&&/\w+/.test(cur))return`def`;return words.hasOwnProperty(cur)?words[cur]:null}function tokenString(quote,style){var close=quote==`(`?`)`:quote==`{`?`}`:quote;return function(stream,state){var next,escaped=false;while((next=stream.next())!=null){if(next===close&&!escaped){state.tokens.shift();break}else if(next===`$`&&!escaped&"e!==`'`&&stream.peek()!=close){escaped=true;stream.backUp(1);state.tokens.unshift(tokenDollar);break}else if(!escaped&"e!==close&&next===quote){state.tokens.unshift(tokenString(quote,style));return tokenize(stream,state)}else if(!escaped&&/['"]/.test(next)&&!/['"]/.test(quote)){state.tokens.unshift(tokenStringStart(next,`string`));stream.backUp(1);break}escaped=!escaped&&next===`\\`}return style}}function tokenStringStart(quote,style){return function(stream,state){state.tokens[0]=tokenString(quote,style);stream.next();return tokenize(stream,state)}}var tokenDollar=function(stream,state){if(state.tokens.length>1)stream.eat(`$`);var ch=stream.next();if(/['"({]/.test(ch)){state.tokens[0]=tokenString(ch,ch==`(`?`quote`:ch==`{`?`def`:`string`);return tokenize(stream,state)}if(!/\d/.test(ch))stream.eatWhile(/\w/);state.tokens.shift();return`def`};function tokenHeredoc(delim){return function(stream,state){if(stream.sol()&&stream.string==delim)state.tokens.shift();stream.skipToEnd();return`string.special`}}function tokenize(stream,state){return(state.tokens[0]||tokenBase)(stream,state)}var shell={name:`shell`,startState:function(){return{tokens:[]}},token:function(stream,state){return tokenize(stream,state)},languageData:{autocomplete:commonAtoms.concat(commonKeywords,commonCommands),closeBrackets:{brackets:[`(`,`[`,`{`,`'`,`"`,"`"]},commentTokens:{line:`#`}}};var _hoisted_1$4={class:`source-interface`,"aria-label":`File public interface`};var _hoisted_2$4={class:`source-interface__heading`};var _hoisted_3$4={class:`source-interface__modes`};var _hoisted_4$4={class:`source-interface__overview`,"aria-label":`File explanation`};var _hoisted_5$4={class:`source-interface__field-heading`};var _hoisted_6$4={key:2,class:`source-interface__hint`};var _hoisted_7$4={key:3,class:`source-interface__membership`,"aria-label":`Program membership`};var _hoisted_8$4={key:0,class:`source-interface__main`};var _hoisted_9$4={key:1};var _hoisted_10$4=[`onClick`];var _hoisted_11$4={key:4,class:`source-interface__hint`,role:`status`};var _hoisted_12$3=[`title`];var _hoisted_13$3={key:5,class:`source-interface__analysis`};var _hoisted_14$2={key:0,class:`source-interface__hint`};var _hoisted_15$2={key:1,class:`source-interface__hint`};var _hoisted_16$1={class:`source-interface__layout`};var _hoisted_17$1={class:`source-interface__symbols`,"aria-label":`Exported and public symbols`};var _hoisted_18$1=[`data-symbol-id`,`disabled`,`aria-pressed`,`onClick`];var _hoisted_19$1=[`title`];var _hoisted_20$1={key:0};var _hoisted_21$1={key:1};var _hoisted_22$1={key:0,class:`source-interface__detail`,"aria-label":`Selected symbol`};var _hoisted_23$1={key:0,class:`source-interface__hint`};var _hoisted_24$1={class:`source-interface__modes`,"aria-label":`Symbol presentation`};var _hoisted_25$1={key:0};var _hoisted_26$1={key:1,class:`source-interface__hint`};var _hoisted_27$1={key:2,class:`source-interface__code`};var _hoisted_28$1={key:0,class:`source-interface__hint`};var _hoisted_29$1={key:3,class:`source-interface__hint`};var _hoisted_30$1={key:0,class:`source-interface__hint`};var _sfc_main$5={__name:`Vibe64SourceInterface`,props:{filePath:String,fileHash:String,analysisError:String,symbols:{type:Array,default:()=>[]},programs:{type:Array,default:()=>[]},programStatus:String,interpretations:{type:Array,default:()=>[]},interpretationWarning:String,activeInterpretation:Boolean,activeFileInterpretation:Boolean,selectedId:String,current:Boolean,indexed:Boolean,dirty:Boolean,busy:Boolean,assistantAvailable:Boolean,assistantUnavailableMessage:String,source:String,presentation:{type:String,default:`description`},coverage:{type:String,default:`Partial static coverage`}},emits:[`select-symbol`,`present-symbol`,`explain-file`,`whole-file-code`,`open-source`,`open-program`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const orderedPrograms=computed(()=>[...props.programs.filter(program=>program.mainSource===props.filePath),...props.programs.filter(program=>program.mainSource!==props.filePath)]);function openProgramLink({event,href},sourcePath){const relative=href&&!/^(?:[a-z][a-z\d+.-]*:|\/|#)/iu.test(href);const target=sourceEditorLinkTarget({href:relative&&sourcePath?new URL(href,`https://source.invalid/${sourcePath}`).pathname.slice(1):href});if(!target)return;event?.preventDefault();const program=props.programs.find(program=>program.path===target.path);if(program)emit(`open-program`,program.id);else if(target.path!==`genesis/subsystems.md`&&!target.path.startsWith(`genesis/program/`))emit(`open-source`,target)}const selectedSymbol=computed(()=>props.symbols.find(symbol=>symbol.id===props.selectedId));const explanationDisabled=computed(()=>props.busy||props.dirty||!props.assistantAvailable);function signature(symbol){return(symbol.qualifiedName||symbol.name)+(Array.isArray(symbol.parameters)?`(${symbol.parameters.join(`, `)})`:``)}function saved(scope,symbolId,presentation){return props.interpretations.find(record=>record.path===props.filePath&&record.scope===scope&&(record.symbolId||``)===symbolId&&record.presentation===presentation)}function isCurrentInterpretation(record){return record.status===`current`&&record.fileHash===props.fileHash&&!props.dirty}const selectedInterpretation=computed(()=>saved(`selection`,selectedSymbol.value?.id||``,`steps`));const fileInterpretation=computed(()=>saved(`file`,``,`description`));const interpretationBlocks=computed(()=>parseLongTextReviewBlocks(selectedInterpretation.value?.body||``));return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$4,[createBaseVNode(`header`,_hoisted_2$4,[createBaseVNode(`h3`,null,toDisplayString(__props.filePath?.split(`/`).pop()),1),createBaseVNode(`div`,_hoisted_3$4,[createVNode(VBtn,{size:`small`,"min-height":`44`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`whole-file-code`))},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Code · whole file`,-1)])]),_:1})]),createBaseVNode(`p`,null,toDisplayString(__props.filePath),1)]),__props.analysisError?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,class:`mb-3`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.analysisError),1)]),_:1})):createCommentVNode(``,true),__props.dirty?(openBlock(),createBlock(VAlert,{key:1,type:`info`,variant:`tonal`,class:`mb-3`},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`This file has unsaved edits. Save before generating an explanation or using indexed symbol ranges.`,-1)])]),_:1})):!__props.current?(openBlock(),createBlock(VAlert,{key:2,type:`info`,variant:`tonal`,class:`mb-3`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.indexed?`Index out of date.`:`Symbols not indexed.`)+` Open whole-file Code. Update the index from Architecture → ⋯.`,1)]),_:1})):createCommentVNode(``,true),createBaseVNode(`section`,_hoisted_4$4,[createBaseVNode(`header`,_hoisted_5$4,[_cache[7]||(_cache[7]=createBaseVNode(`h4`,null,`Explanation`,-1)),fileInterpretation.value?(openBlock(),createElementBlock(`span`,{key:0,class:normalizeClass([`source-interface__freshness`,{"source-interface__freshness--stale":!isCurrentInterpretation(fileInterpretation.value)}])},toDisplayString(isCurrentInterpretation(fileInterpretation.value)?`Saved`:`Out of date`),3)):createCommentVNode(``,true),createVNode(VBtn,{size:`small`,"min-height":`44`,variant:`text`,disabled:explanationDisabled.value,onClick:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`explain-file`,Boolean(fileInterpretation.value)))},{default:withCtx(()=>[createTextVNode(toDisplayString(fileInterpretation.value?`Update explanation`:`Generate explanation`),1)]),_:1},8,[`disabled`])]),createBaseVNode(`div`,{class:normalizeClass([`source-interface__explanation`,{"source-interface__explanation--empty":!fileInterpretation.value&&!__props.activeFileInterpretation}])},[__props.activeFileInterpretation?renderSlot(_ctx.$slots,`explanation`,{savedBody:fileInterpretation.value?.body||``},void 0,true,0):fileInterpretation.value?(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:1,blocks:unref(parseLongTextReviewBlocks)(fileInterpretation.value.body),onLinkClick:openProgramLink},null,8,[`blocks`])):(openBlock(),createElementBlock(`p`,_hoisted_6$4,toDisplayString(!__props.assistantAvailable?`Choose a Helper in Model routing to generate an explanation.`:`No explanation yet.`),1))],2)]),__props.programs.length?(openBlock(),createElementBlock(`nav`,_hoisted_7$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(orderedPrograms.value,program=>{return openBlock(),createElementBlock(`span`,{key:program.id},[program.mainSource===__props.filePath?(openBlock(),createElementBlock(`small`,_hoisted_8$4,`Main Program file`)):(openBlock(),createElementBlock(`span`,_hoisted_9$4,`Part of `)),createBaseVNode(`button`,{type:`button`,onClick:$event=>_ctx.$emit(`open-program`,program.id)},toDisplayString(program.title)+` →`,9,_hoisted_10$4)])}),128))])):createCommentVNode(``,true),__props.interpretationWarning?(openBlock(),createElementBlock(`p`,_hoisted_11$4,toDisplayString(__props.interpretationWarning),1)):createCommentVNode(``,true),createBaseVNode(`h4`,{class:`source-interface__exports-heading`,title:`${__props.coverage}. File exports may be internal to the subsystem. Unrecorded returns are omitted.`},[_cache[8]||(_cache[8]=createTextVNode(`File exports `,-1)),createBaseVNode(`span`,null,toDisplayString(__props.symbols.length),1)],8,_hoisted_12$3),__props.programStatus!==`valid`||!__props.assistantAvailable?(openBlock(),createElementBlock(`details`,_hoisted_13$3,[_cache[9]||(_cache[9]=createBaseVNode(`summary`,null,`Analysis details`,-1)),__props.programStatus!==`valid`?(openBlock(),createElementBlock(`p`,_hoisted_14$2,`Program unavailable.`)):createCommentVNode(``,true),!__props.assistantAvailable?(openBlock(),createElementBlock(`p`,_hoisted_15$2,toDisplayString(__props.assistantUnavailableMessage||`A Helper is needed to generate explanations.`),1)):createCommentVNode(``,true)])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_16$1,[createBaseVNode(`nav`,_hoisted_17$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.symbols,symbol=>{return openBlock(),createElementBlock(`div`,{key:symbol.id,class:`source-interface__symbol-row`},[createBaseVNode(`button`,{class:normalizeClass([`source-interface__symbol`,{"source-interface__symbol--selected":symbol.id===__props.selectedId}]),type:`button`,"data-symbol-id":symbol.id,disabled:!__props.current||__props.dirty,"aria-pressed":symbol.id===__props.selectedId,onClick:$event=>_ctx.$emit(`select-symbol`,symbol.id)},[createBaseVNode(`small`,null,toDisplayString(symbol.kind),1),createBaseVNode(`code`,{title:signature(symbol)},toDisplayString(signature(symbol)),9,_hoisted_19$1),symbol.returnType?(openBlock(),createElementBlock(`span`,_hoisted_20$1,`Returns: `+toDisplayString(symbol.returnType),1)):createCommentVNode(``,true),!symbol.rangeAvailable||symbol.visibilityScope&&symbol.visibilityScope!==`public`?(openBlock(),createElementBlock(`span`,_hoisted_21$1,toDisplayString(symbol.rangeAvailable?``:`Range unavailable`)+toDisplayString(symbol.visibilityScope&&symbol.visibilityScope!==`public`?` · Visibility: ${symbol.visibilityScope}`:``),1)):createCommentVNode(``,true)],10,_hoisted_18$1),symbol.id===__props.selectedId?(openBlock(),createElementBlock(`section`,_hoisted_22$1,[selectedSymbol.value.returnType?(openBlock(),createElementBlock(`p`,_hoisted_23$1,`Returns: `+toDisplayString(selectedSymbol.value.returnType),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_24$1,[Array.isArray(selectedSymbol.value.parameters)?(openBlock(),createElementBlock(`h4`,_hoisted_25$1,`Pseudocode`)):createCommentVNode(``,true),__props.presentation===`code`&&selectedInterpretation.value?(openBlock(),createBlock(VBtn,{key:1,size:`small`,"min-height":`44`,variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>_ctx.$emit(`select-symbol`,__props.selectedId))},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(`Pseudocode`,-1)])]),_:1})):createCommentVNode(``,true),Array.isArray(selectedSymbol.value.parameters)?(openBlock(),createBlock(VBtn,{key:2,size:`small`,"min-height":`44`,variant:`text`,disabled:!selectedSymbol.value.rangeAvailable||!__props.current||__props.dirty||explanationDisabled.value,onClick:_cache[3]||(_cache[3]=$event=>_ctx.$emit(`present-symbol`,`steps`,Boolean(selectedInterpretation.value)))},{default:withCtx(()=>[createTextVNode(toDisplayString(selectedInterpretation.value?`Update pseudocode`:`Generate pseudocode`),1)]),_:1},8,[`disabled`])):createCommentVNode(``,true),createVNode(VBtn,{size:`small`,"min-height":`44`,variant:`text`,disabled:!selectedSymbol.value.rangeAvailable||!__props.current||__props.dirty,onClick:_cache[4]||(_cache[4]=$event=>_ctx.$emit(`present-symbol`,`code`))},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Code`,-1)])]),_:1},8,[`disabled`])]),Array.isArray(selectedSymbol.value.parameters)&&!__props.assistantAvailable&&!saved(`selection`,__props.selectedId,`steps`)?(openBlock(),createElementBlock(`p`,_hoisted_26$1,`Choose a Helper to generate pseudocode.`)):createCommentVNode(``,true),__props.presentation===`code`?(openBlock(),createElementBlock(`pre`,_hoisted_27$1,[createBaseVNode(`code`,null,toDisplayString(__props.source),1)])):Array.isArray(selectedSymbol.value.parameters)?(openBlock(),createElementBlock(Fragment,{key:3},[selectedInterpretation.value?(openBlock(),createElementBlock(`p`,_hoisted_28$1,toDisplayString(isCurrentInterpretation(selectedInterpretation.value)?`Saved · matches source`:`Out of date · source or guidance changed`),1)):createCommentVNode(``,true),__props.activeInterpretation?renderSlot(_ctx.$slots,`explanation`,{savedBody:selectedInterpretation.value?.body||``},void 0,true,1):selectedInterpretation.value?(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:2,blocks:interpretationBlocks.value,onLinkClick:openProgramLink},null,8,[`blocks`])):(openBlock(),createElementBlock(`p`,_hoisted_29$1,`No pseudocode yet.`))],64)):createCommentVNode(``,true)])):createCommentVNode(``,true)])}),128)),!__props.symbols.length?(openBlock(),createElementBlock(`p`,_hoisted_30$1,toDisplayString(__props.current?`No exports recorded; analysis may be incomplete.`:`Open whole-file Code.`),1)):createCommentVNode(``,true)])])])}}};var Vibe64SourceInterface_default=_plugin_vue_export_helper_default(_sfc_main$5,[[`__scopeId`,`data-v-bc10841e`]]);var _hoisted_1$3=[`aria-busy`];var _hoisted_2$3={key:1,class:`source-explanation-document__progress`,role:`status`};var _hoisted_3$3={key:2,class:`source-explanation-document__activity`,open:``};var _hoisted_4$3={key:3,class:`source-explanation-document__progress`,role:`status`};var _hoisted_5$3=[`aria-busy`];var _hoisted_6$3={class:`vibe64-source-explanation__header`};var _hoisted_7$3={class:`vibe64-source-explanation__source`};var _hoisted_8$3=[`title`];var _hoisted_9$3={class:`vibe64-source-explanation__range-path`};var _hoisted_10$3={key:0,class:`vibe64-source-explanation__range-suffix`};var _hoisted_11$3={key:0,class:`vibe64-source-explanation__thinking`};var _hoisted_12$2={key:3,class:`vibe64-source-explanation__status vibe64-source-explanation__status--stopped`};var _hoisted_13$2={key:1,class:`vibe64-source-explanation__recovery`,"aria-label":`Explanation controls`};var _hoisted_14$1={class:`vibe64-source-explanation__recovery-actions`};var _hoisted_15$1={class:`vibe64-source-explanation__followup-footer`};var _sfc_main$4={__name:`Vibe64SourceExplanationPanel`,props:{embedded:Boolean,savedBody:{type:String,default:``},assistantAvailable:{default:true,type:Boolean},assistantUnavailableMessage:{default:`The selected AI connection is unavailable for this account.`,type:String},busy:{default:false,type:Boolean},closing:{default:false,type:Boolean},explanation:{default:()=>({body:``,followups:[],messages:[],sourceRange:{},summary:``,title:``}),type:Object},followup:{default:``,type:String},selectedPath:{default:``,type:String}},emits:[`collapse`,`close`,`open-range`,`open-source-link`,`retry`,`send-followup`,`stop`,`update:followup`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const threadElement=ref(null);const threadBottomElement=ref(null);const followingLatest=ref(true);const assistantLabel=computed(()=>{const profile=props.explanation?.executionProfile;if(!profile?.providerId||!profile?.model)return`Assistant`;return vibe64AssistantSelectionLabel({engineId:profile.providerId,modelId:profile.model,variantId:profile.thinking})});const chatMessages=computed(()=>(Array.isArray(props.explanation?.messages)&&props.explanation.messages.length?props.explanation.messages:[...props.explanation?.body?[{id:`body`,role:`assistant`,text:props.explanation.body}]:[],...Array.isArray(props.explanation?.followups)?props.explanation.followups:[]]).map(message=>({...message,blocks:parseLongTextReviewBlocks(message.text||``,{preserveParagraphLineBreaks:message.role===`user`})})));const documentBody=computed(()=>props.explanation?.body||props.savedBody||chatMessages.value.findLast(message=>message.role===`assistant`&&message.status===`complete`)?.text||``);const documentBlocks=computed(()=>parseLongTextReviewBlocks(documentBody.value));const documentProgress=computed(()=>chatMessages.value.findLast(message=>message.role===`assistant`&&message.status===`thinking`)?.text||``);const documentFailure=computed(()=>chatMessages.value.findLast(message=>message.role===`assistant`&&message.status===`failed`)?.text||``);const followupAvailable=computed(()=>Boolean(props.explanation?.status!==`failed`&&(props.explanation?.agentThreadId||props.explanation?.engine===`agent-cache`)&&(String(props.explanation?.body||``).trim()||chatMessages.value.some(message=>message.role===`assistant`&&message.status===`complete`&&message.text))));const sourceRange=computed(()=>props.explanation?.sourceRange||{});const sourceRangeFullLabel=computed(()=>sourceRangeDisplayLabel(sourceRange.value,{compact:false}));const sourceRangePathLabel=computed(()=>sourceRangePathDisplayLabel(sourceRange.value));const sourceRangeSuffixLabel=computed(()=>sourceRangeLineSuffix(sourceRange.value));const threadScrollKey=computed(()=>chatMessages.value.map(message=>[message.id||``,message.role||``,message.status||``,String(message.text||``).length].join(`:`)).join(`|`));const{scrollAfterLayout:scrollThreadToBottom}=useScrollToBottom({anchor:threadBottomElement,enabled:computed(()=>followingLatest.value),scrollAnchorIntoView:false,target:threadElement});function normalizePanelSourcePath(value=``){return String(value||``).trim().replaceAll(`\\`,`/`).replace(/^\.\/+/u,``)}function sourceRangeLineSuffix({endLine,startLine}={}){const start=Number(startLine);const end=Number(endLine);if(!Number.isFinite(start)||start<1)return``;if(!Number.isFinite(end)||end<1||end===start)return`:${start}`;return`:${start}-${end}`}function compactSourcePath(path=``,{maxLength=36}={}){const normalized=normalizePanelSourcePath(path);if(normalized.length<=maxLength)return normalized;return`...${normalized.slice(-maxLength)}`}function sourceRangePathDisplayLabel(range={}){const path=normalizePanelSourcePath(range?.path);if(!path)return`Source`;return compactSourcePath(path)}function sourceRangeDisplayLabel(range={},{compact=true}={}){const path=normalizePanelSourcePath(range?.path);if(!path)return`Source`;return`${compact?compactSourcePath(path):path}${sourceRangeLineSuffix(range)}`}function submitFollowup(){if(!props.assistantAvailable||!props.followup.trim()||props.busy||props.closing||!followupAvailable.value)return;emit(`send-followup`)}function queueThreadBottomScroll({force=false}={}){if(props.embedded)return;if(force)followingLatest.value=true;scrollThreadToBottom({behavior:force?`auto`:`smooth`})}function updateThreadFollowState(event={}){followingLatest.value=scrollElementNearBottom(event?.currentTarget||threadElement.value)}function handleExplanationLinkClick(payload={}){const target=sourceEditorLinkTarget(payload);if(!target)return;payload.event?.preventDefault?.();payload.event?.stopPropagation?.();emit(`open-source-link`,target)}watch(()=>props.explanation?.id||``,()=>{queueThreadBottomScroll({force:true})},{flush:`post`,immediate:true});watch(threadScrollKey,(value,previous)=>{if(!value||value===previous)return;queueThreadBottomScroll({force:chatMessages.value.at(-1)?.role===`user`})},{flush:`post`});return(_ctx,_cache)=>{return __props.embedded?(openBlock(),createElementBlock(`section`,{key:0,class:`source-explanation-document`,"aria-busy":__props.busy||__props.closing,"aria-label":`Generated explanation`},[documentBody.value?(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:0,blocks:documentBlocks.value,onLinkClick:handleExplanationLinkClick},null,8,[`blocks`])):createCommentVNode(``,true),__props.busy||__props.closing?(openBlock(),createElementBlock(`div`,_hoisted_2$3,[createBaseVNode(`span`,null,toDisplayString(__props.closing?`Stopping…`:`Generating explanation…`),1),!__props.closing?(openBlock(),createBlock(VBtn,{key:0,size:`small`,"min-height":`44`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>emit(`stop`))},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Stop`,-1)])]),_:1})):createCommentVNode(``,true)])):createCommentVNode(``,true),__props.busy&&documentProgress.value?(openBlock(),createElementBlock(`details`,_hoisted_3$3,[_cache[10]||(_cache[10]=createBaseVNode(`summary`,null,`Progress`,-1)),createVNode(unref(LongTextPreviewBlocks_default),{blocks:unref(parseLongTextReviewBlocks)(documentProgress.value),onLinkClick:handleExplanationLinkClick},null,8,[`blocks`])])):!__props.busy&&!__props.closing&&[`failed`,`stopped`].includes(__props.explanation.status)?(openBlock(),createElementBlock(`div`,_hoisted_4$3,[createBaseVNode(`span`,null,toDisplayString(__props.explanation.status===`stopped`?`Generation stopped.`:documentFailure.value||`Generation failed.`),1),createVNode(VBtn,{size:`small`,"min-height":`44`,variant:`text`,disabled:!__props.assistantAvailable,onClick:_cache[1]||(_cache[1]=$event=>emit(`retry`))},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Retry`,-1)])]),_:1},8,[`disabled`])])):createCommentVNode(``,true)],8,_hoisted_1$3)):(openBlock(),createElementBlock(`aside`,{key:1,"aria-busy":__props.busy||__props.closing?`true`:`false`,class:normalizeClass([`vibe64-source-explanation`,{"vibe64-source-explanation--embedded":__props.embedded}]),"aria-label":`Source explanation`},[createBaseVNode(`header`,_hoisted_6$3,[createBaseVNode(`div`,_hoisted_7$3,[createBaseVNode(`button`,{class:`vibe64-source-explanation__range`,title:sourceRangeFullLabel.value,type:`button`,onClick:_cache[2]||(_cache[2]=$event=>emit(`open-range`,__props.explanation))},[createBaseVNode(`span`,_hoisted_9$3,toDisplayString(sourceRangePathLabel.value),1),sourceRangeSuffixLabel.value?(openBlock(),createElementBlock(`span`,_hoisted_10$3,toDisplayString(sourceRangeSuffixLabel.value),1)):createCommentVNode(``,true)],8,_hoisted_8$3),__props.explanation.stale?(openBlock(),createBlock(VChip,{key:0,color:`warning`,size:`x-small`,variant:`tonal`},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(` Stale `,-1)])]),_:1})):createCommentVNode(``,true)]),!__props.embedded?(openBlock(),createBlock(VBtn,{key:0,class:`vibe64-source-explanation__action-target`,"aria-label":`Collapse explanation`,icon:unref(mdiChevronRight),size:`small`,title:`Collapse explanation`,type:`button`,variant:`text`,onClick:_cache[3]||(_cache[3]=$event=>emit(`collapse`,$event))},null,8,[`icon`])):createCommentVNode(``,true),createVNode(VBtn,{class:`vibe64-source-explanation__action-target vibe64-source-explanation__close-button`,"aria-busy":__props.closing?`true`:void 0,"aria-label":`Close explanation`,disabled:__props.closing,"prepend-icon":unref(mdiClose),size:`x-small`,title:__props.closing?`Closing explanation`:`Close explanation`,type:`button`,variant:`text`,onClick:_cache[4]||(_cache[4]=$event=>emit(`close`,$event))},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.closing?`Closing…`:`Close`),1)]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`,`title`])]),__props.explanation.stale?(openBlock(),createBlock(VAlert,{key:0,class:`vibe64-source-explanation__stale`,density:`compact`,type:`warning`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.explanation.staleReason||`The source changed after this explanation was created.`),1)]),_:1})):createCommentVNode(``,true),createBaseVNode(`section`,{ref_key:`threadElement`,ref:threadElement,class:`vibe64-source-explanation__thread`,"aria-label":`Explanation chat`,tabindex:`0`,onScroll:updateThreadFollowState},[(openBlock(true),createElementBlock(Fragment,null,renderList(chatMessages.value,message=>{return openBlock(),createElementBlock(`article`,{key:message.id,class:normalizeClass([`vibe64-source-explanation__message`,[`vibe64-source-explanation__message--${message.role}`,{"vibe64-source-explanation__message--failed":message.status===`failed`,"vibe64-source-explanation__message--thinking":message.status===`thinking`}]])},[createBaseVNode(`strong`,null,toDisplayString(message.role===`user`?`You`:assistantLabel.value),1),message.status===`thinking`?(openBlock(),createElementBlock(`div`,_hoisted_11$3,[message.text?(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:0,compact:``,class:`vibe64-source-explanation__thinking-detail`,blocks:message.blocks,onLinkClick:handleExplanationLinkClick},null,8,[`blocks`])):createCommentVNode(``,true),_cache[13]||(_cache[13]=createBaseVNode(`div`,{class:`vibe64-source-explanation__status`,role:`status`},[createBaseVNode(`span`,{"aria-hidden":`true`,class:`vibe64-source-explanation__status-mark`}),createBaseVNode(`span`,null,`Thinking…`)],-1))])):message.status===`failed`&&message.text?(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:1,class:`vibe64-source-explanation__failure-detail`,blocks:message.blocks,onLinkClick:handleExplanationLinkClick},null,8,[`blocks`])):message.text?(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:2,blocks:message.blocks,onLinkClick:handleExplanationLinkClick},null,8,[`blocks`])):message.status===`stopped`?(openBlock(),createElementBlock(`div`,_hoisted_12$2,` Stopped. `)):createCommentVNode(``,true)],2)}),128)),createBaseVNode(`div`,{ref_key:`threadBottomElement`,ref:threadBottomElement,class:`vibe64-source-explanation__thread-bottom`},null,512)],544),!followupAvailable.value?(openBlock(),createElementBlock(`section`,_hoisted_13$2,[createBaseVNode(`p`,null,toDisplayString(__props.closing?`Closing…`:__props.busy?`Waiting for the explanation…`:`No explanation was produced. Check the assistant provider, then retry.`),1),createBaseVNode(`div`,_hoisted_14$1,[__props.busy&&!__props.closing?(openBlock(),createBlock(VBtn,{key:0,class:`vibe64-source-explanation__action-target`,"aria-label":`Stop explanation`,color:`error`,icon:unref(mdiStop),size:`small`,title:`Stop explanation`,type:`button`,variant:`tonal`,onClick:_cache[5]||(_cache[5]=$event=>emit(`stop`))},null,8,[`icon`])):(openBlock(),createBlock(VBtn,{key:1,class:`vibe64-source-explanation__action-target`,color:`primary`,disabled:__props.closing||!__props.assistantAvailable,"prepend-icon":unref(mdiRefresh),size:`small`,title:__props.assistantAvailable?`Retry explanation`:__props.assistantUnavailableMessage,type:`button`,variant:`flat`,onClick:_cache[6]||(_cache[6]=$event=>emit(`retry`))},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(` Retry explanation `,-1)])]),_:1},8,[`disabled`,`prepend-icon`,`title`]))])])):(openBlock(),createElementBlock(`form`,{key:2,class:`vibe64-source-explanation__followup`,onSubmit:withModifiers(submitFollowup,[`prevent`])},[createVNode(_sfc_main$11,{"attachments-enabled":false,"auto-grow":true,disabled:__props.busy||__props.closing||!__props.assistantAvailable,label:`Ask about this explanation`,"model-value":__props.followup,placeholder:`Ask a follow-up`,rows:`1`,onSubmit:submitFollowup,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>emit(`update:followup`,$event))},{footer:withCtx(()=>[createBaseVNode(`div`,_hoisted_15$1,[__props.busy&&!__props.closing?(openBlock(),createBlock(VBtn,{key:0,class:`vibe64-source-explanation__action-target`,"aria-label":`Stop explanation`,color:`error`,icon:unref(mdiStop),size:`small`,title:`Stop explanation`,type:`button`,variant:`tonal`,onClick:_cache[7]||(_cache[7]=$event=>emit(`stop`))},null,8,[`icon`])):createCommentVNode(``,true),createVNode(VBtn,{class:`vibe64-source-explanation__action-target`,"aria-label":`Send follow-up`,color:`primary`,disabled:!__props.followup.trim()||__props.busy||__props.closing||!__props.assistantAvailable,icon:unref(mdiSend),size:`small`,title:__props.assistantAvailable?`Send follow-up`:__props.assistantUnavailableMessage,type:`submit`,variant:`flat`},null,8,[`disabled`,`icon`,`title`])])]),_:1},8,[`disabled`,`model-value`])],32))],10,_hoisted_5$3))}}};var Vibe64SourceExplanationPanel_default=_plugin_vue_export_helper_default(_sfc_main$4,[[`__scopeId`,`data-v-912cbb81`]]);var _hoisted_1$2={class:`vibe64-source-tree`};var _hoisted_2$2={class:`vibe64-source-tree__row`};var _hoisted_3$2=[`data-vibe64-guide-path`,`title`,`onClick`];var _hoisted_4$2=[`title`,`onClick`];var _hoisted_5$2={key:1,class:`vibe64-source-tree__chevron-spacer`,"aria-hidden":`true`};var _hoisted_6$2={key:0,class:`vibe64-source-tree__directory`};var _hoisted_7$2={key:0,class:`vibe64-source-tree__notice`};var _hoisted_8$2={key:1,class:`vibe64-source-tree__notice vibe64-source-tree__notice--error`};var _hoisted_9$2={key:2,class:`vibe64-source-tree__notice`};var _hoisted_10$2={key:0,class:`vibe64-source-tree__item`};var _hoisted_11$2=[`disabled`,`title`];var _hoisted_12$1={key:0};var _hoisted_13$1={key:1};var DIRECTORY_BATCH_SIZE=20;var _sfc_main$3={__name:`Vibe64SourceFileTree`,props:{starredPaths:{type:Array,default:()=>[]},expandedPaths:{default:()=>[],type:Array},loadErrors:{default:()=>({}),type:Object},loadingPaths:{default:()=>[],type:Array},node:{default:null,type:Object},selectedPath:{default:``,type:String},depth:{default:0,type:Number},askCodexAvailable:{default:false,type:Boolean}},emits:[`ask-codex`,`copy-path`,`directory-open-change`,`download-file`,`load-more-directory`,`new-file`,`open-file`,`toggle-star`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const nodes=computed(()=>Array.isArray(props.node?.children)?props.node.children:[]);const visibleNodes=computed(()=>nodes.value);const nodeHasMore=computed(()=>props.node?.hasMore===true);const currentNodeLoading=computed(()=>pathLoading(props.node?.path||``));const nextHiddenNodeCount=computed(()=>{const loadedCount=nodes.value.length;const totalCount=Number(props.node?.total||0);return totalCount>loadedCount?Math.min(DIRECTORY_BATCH_SIZE,totalCount-loadedCount):DIRECTORY_BATCH_SIZE});const nodeLabel=computed(()=>props.node?.path||props.node?.name||`source`);const expandedPathSet=computed(()=>new Set((Array.isArray(props.expandedPaths)?props.expandedPaths:[]).map(path=>normalizeTreePath(path)).filter(Boolean)));const loadingPathSet=computed(()=>new Set((Array.isArray(props.loadingPaths)?props.loadingPaths:[]).map(path=>normalizeTreePath(path))));function normalizeTreePath(value=``){return String(value||``).trim().replaceAll(`\\`,`/`).replace(/^\.\/+/u,``)}function directoryExpandable(node={}){return node.type===`directory`&&(node.loaded!==true||node.hasMore===true||Array.isArray(node.children)&&node.children.length>0)}function directoryKey(node={}){return normalizeTreePath(node.path||node.name||``)}function directoryOpen(node={}){return expandedPathSet.value.has(directoryKey(node))}function pathLoading(path=``){return loadingPathSet.value.has(normalizeTreePath(path))}function directoryLoading(node={}){return pathLoading(directoryKey(node))}function directoryLoadError(node={}){return String(props.loadErrors?.[directoryKey(node)]||``)}function directoryChildCount(node={}){return Array.isArray(node.children)?node.children.length:0}function toggleDirectory(node={}){const key=directoryKey(node);if(!key)return;emit(`directory-open-change`,{open:!directoryOpen(node),path:key})}function showMore(){emit(`load-more-directory`,props.node?.path||``)}return(_ctx,_cache)=>{const _component_Vibe64SourceFileTree=resolveComponent(`Vibe64SourceFileTree`,true);return openBlock(),createElementBlock(`ul`,_hoisted_1$2,[(openBlock(true),createElementBlock(Fragment,null,renderList(visibleNodes.value,child=>{return openBlock(),createElementBlock(`li`,{key:child.path||child.name,class:`vibe64-source-tree__item`},[createBaseVNode(`div`,_hoisted_2$2,[child.type===`file`?(openBlock(),createElementBlock(`button`,{key:0,class:normalizeClass([`vibe64-source-tree__button`,{"vibe64-source-tree__button--active":child.path===__props.selectedPath}]),"data-vibe64-guide-path":child.path||void 0,title:child.path||child.name||`source`,type:`button`,onClick:$event=>emit(`open-file`,child.path)},[createVNode(VIcon,{icon:unref(mdiFileDocumentOutline),size:`15`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(child.name),1),__props.starredPaths.includes(child.path)?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiStar),size:`14`,"aria-label":`Starred`},null,8,[`icon`])):createCommentVNode(``,true)],10,_hoisted_3$2)):(openBlock(),createElementBlock(`button`,{key:1,class:`vibe64-source-tree__button vibe64-source-tree__button--directory`,title:child.path||child.name||`source`,type:`button`,onClick:$event=>toggleDirectory(child)},[directoryExpandable(child)?(openBlock(),createBlock(VIcon,{key:0,class:normalizeClass([`vibe64-source-tree__chevron`,{"vibe64-source-tree__chevron--open":directoryOpen(child)}]),icon:unref(mdiChevronRight),size:`14`},null,8,[`class`,`icon`])):(openBlock(),createElementBlock(`span`,_hoisted_5$2)),createVNode(VIcon,{icon:unref(mdiFolderOutline),size:`15`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(child.name||`source`),1)],8,_hoisted_4$2)),createVNode(VMenu,{location:`bottom end`},{activator:withCtx(({props:activatorProps})=>[createVNode(VBtn,mergeProps({ref_for:true},activatorProps,{"aria-label":`Actions for ${child.path||child.name||`source`}`,class:`vibe64-source-tree__menu-button`,icon:unref(mdiDotsVertical),size:`x-small`,title:`Actions for ${child.path||child.name||`source`}`,type:`button`,variant:`text`,onClick:_cache[0]||(_cache[0]=withModifiers(()=>{},[`stop`]))}),null,16,[`aria-label`,`icon`,`title`])]),default:withCtx(()=>[createVNode(VList,{class:`vibe64-source-tree__menu`,density:`compact`},{default:withCtx(()=>[child.type===`file`?(openBlock(),createBlock(VListItem,{key:0,"prepend-icon":__props.starredPaths.includes(child.path)?unref(mdiStar):unref(mdiStarOutline),title:__props.starredPaths.includes(child.path)?`Unstar file`:`Star file`,onClick:$event=>emit(`toggle-star`,child.path)},null,8,[`prepend-icon`,`title`,`onClick`])):createCommentVNode(``,true),child.type===`file`?(openBlock(),createBlock(VListItem,{key:1,"prepend-icon":unref(mdiDownload),title:`Download file`,onClick:$event=>emit(`download-file`,child.path)},null,8,[`prepend-icon`,`onClick`])):createCommentVNode(``,true),child.type===`directory`?(openBlock(),createBlock(VListItem,{key:2,"prepend-icon":unref(mdiFilePlusOutline),title:`New file here`,onClick:$event=>emit(`new-file`,child.path||``)},null,8,[`prepend-icon`,`onClick`])):createCommentVNode(``,true),createVNode(VListItem,{"prepend-icon":unref(mdiContentCopy),title:`Copy path`,onClick:$event=>emit(`copy-path`,child.path||child.name||``)},null,8,[`prepend-icon`,`onClick`]),child.type===`file`&&__props.askCodexAvailable?(openBlock(),createBlock(VListItem,{key:3,"prepend-icon":unref(mdiRobotOutline),title:`Ask the AI assistant about this file`,onClick:$event=>emit(`ask-codex`,child.path||``)},null,8,[`prepend-icon`,`onClick`])):createCommentVNode(``,true)]),_:2},1024)]),_:2},1024)]),child.type!==`file`&&directoryOpen(child)?(openBlock(),createElementBlock(`div`,_hoisted_6$2,[createVNode(_component_Vibe64SourceFileTree,{node:child,"ask-codex-available":__props.askCodexAvailable,"selected-path":__props.selectedPath,"starred-paths":__props.starredPaths,"expanded-paths":__props.expandedPaths,"load-errors":__props.loadErrors,"loading-paths":__props.loadingPaths,depth:__props.depth+1,onLoadMoreDirectory:_cache[1]||(_cache[1]=$event=>emit(`load-more-directory`,$event)),onOpenFile:_cache[2]||(_cache[2]=$event=>emit(`open-file`,$event)),onToggleStar:_cache[3]||(_cache[3]=$event=>emit(`toggle-star`,$event)),onDownloadFile:_cache[4]||(_cache[4]=$event=>emit(`download-file`,$event)),onDirectoryOpenChange:_cache[5]||(_cache[5]=$event=>emit(`directory-open-change`,$event)),onNewFile:_cache[6]||(_cache[6]=$event=>emit(`new-file`,$event)),onCopyPath:_cache[7]||(_cache[7]=$event=>emit(`copy-path`,$event)),onAskCodex:_cache[8]||(_cache[8]=$event=>emit(`ask-codex`,$event))},null,8,[`node`,`ask-codex-available`,`selected-path`,`starred-paths`,`expanded-paths`,`load-errors`,`loading-paths`,`depth`]),directoryLoading(child)?(openBlock(),createElementBlock(`div`,_hoisted_7$2,` Loading... `)):directoryLoadError(child)?(openBlock(),createElementBlock(`div`,_hoisted_8$2,toDisplayString(directoryLoadError(child)),1)):directoryOpen(child)&&child.loaded&&!directoryChildCount(child)&&!child.hasMore?(openBlock(),createElementBlock(`div`,_hoisted_9$2,` Empty directory. `)):createCommentVNode(``,true)])):createCommentVNode(``,true)])}),128)),nodeHasMore.value?(openBlock(),createElementBlock(`li`,_hoisted_10$2,[createBaseVNode(`button`,{class:`vibe64-source-tree__button vibe64-source-tree__button--more`,disabled:currentNodeLoading.value,title:`Load ${nextHiddenNodeCount.value} more entries in ${nodeLabel.value}`,type:`button`,onClick:showMore},[createVNode(VIcon,{icon:unref(mdiDotsHorizontal),size:`15`},null,8,[`icon`]),currentNodeLoading.value?(openBlock(),createElementBlock(`span`,_hoisted_12$1,`Loading...`)):(openBlock(),createElementBlock(`span`,_hoisted_13$1,`Load `+toDisplayString(nextHiddenNodeCount.value)+` more`,1))],8,_hoisted_11$2)])):createCommentVNode(``,true)])}}};var Vibe64SourceFileTree_default=_plugin_vue_export_helper_default(_sfc_main$3,[[`__scopeId`,`data-v-52fca260`]]);function parseJsonStreamEvent(event){try{return JSON.parse(event?.data||`{}`)}catch{return{}}}function useVibe64SourceEditorFileSync({active=true,onChange=null,onError=null,onReady=null,path=``,sessionId=``,sessionsApiPath=``}={}){let eventSource=null;function currentValue(value){return String(readRefOrGetterValue(value)||``).trim()}function isActive(){return readRefOrGetterValue(active)!==false}function close(){eventSource?.close?.();eventSource=null}function start(){close();const currentPath=currentValue(path);const currentSessionId=currentValue(sessionId);const currentSessionsApiPath=currentValue(sessionsApiPath);if(!isActive()||!currentPath||!currentSessionId||!currentSessionsApiPath||typeof EventSource!==`function`)return;let source;try{source=new EventSource(resolveStudioRequestUrl(vibe64SourceEditorChangesStreamPath(currentSessionsApiPath,currentSessionId,currentPath)),{withCredentials:true})}catch(error){onError?.({error:String(error?.message||error||`Source file observation could not start.`),fatal:true});return}eventSource=source;const isCurrent=()=>eventSource===source;source.addEventListener(VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,event=>{if(isCurrent())onChange?.(parseJsonStreamEvent(event))});source.addEventListener(VIBE64_SOURCE_EDITOR_SYNC_READY_EVENT,event=>{if(!isCurrent())return;onReady?.(parseJsonStreamEvent(event))});source.addEventListener(VIBE64_SOURCE_EDITOR_SYNC_ERROR_EVENT,event=>{if(isCurrent()){const payload=parseJsonStreamEvent(event);onError?.(payload);if(payload.fatal===true)close()}});source.onerror=()=>{if(isCurrent())onError?.({error:`Source file observation disconnected.`,transient:true})}}watch([()=>isActive(),()=>currentValue(path),()=>currentValue(sessionId),()=>currentValue(sessionsApiPath)],start,{immediate:true});onBeforeUnmount(close)}var SOURCE_EDITOR_AUTOSAVE_DELAY_MS=700;var SOURCE_EDITOR_FILE_MATCH_DELAY_MS=120;var SOURCE_EDITOR_SEARCH_DELAY_MS=260;var SOURCE_EDITOR_TREE_PAGE_SIZE=20;var SOURCE_EDITOR_REMOTE_CHANGE_MESSAGE=`This file changed in another window. Reload it before saving.`;var sourceExplanationClientIdCounter=0;function normalizeEditorPath(value=``){return String(value||``).trim().replaceAll(`\\`,`/`).replace(/^\.\/+/u,``)}function normalizeSourceEditorSyncValue(value=``){return String(value||``).trim()}function sourceEditorFileChangePayloadMatches({originId=vibe64BrowserTabOriginId(),path=``,payload={},projectSlug=``,sessionId=``}={}){const normalizedPath=normalizeEditorPath(path);const normalizedProjectSlug=normalizeSourceEditorSyncValue(projectSlug);const normalizedSessionId=normalizeSourceEditorSyncValue(sessionId);if(!normalizedPath||!normalizedProjectSlug||!normalizedSessionId||normalizeEditorPath(payload?.path)!==normalizedPath||normalizeSourceEditorSyncValue(payload?.projectSlug)!==normalizedProjectSlug||normalizeSourceEditorSyncValue(payload?.sessionId)!==normalizedSessionId||vibe64RealtimePayloadFromCurrentTab(payload,{originId}))return false;return Boolean(normalizeSourceEditorSyncValue(payload?.hash))}function normalizeEditorQuery(value=``){return String(value||``).trim()}function normalizePolicyDirectories(value=[]){return[...new Set((Array.isArray(value)?value:[]).map(directoryPath=>normalizeEditorPath(directoryPath).replace(/\/+$/u,``)).filter(Boolean))].sort((left,right)=>left.localeCompare(right))}function normalizeSourceEditorPolicy(value={}){const policy=value&&typeof value===`object`&&!Array.isArray(value)?value:{};return{...policy,preexpandedDirectories:normalizePolicyDirectories(policy.preexpandedDirectories),preloadDirectories:normalizePolicyDirectories(policy.preloadDirectories)}}function normalizeFileMatches(value=[]){return(Array.isArray(value)?value:[]).map((file={})=>({language:String(file.language||``),name:String(file.name||``),path:normalizeEditorPath(file.path)})).filter(file=>file.path)}function normalizeSearchResults(value=[]){return(Array.isArray(value)?value:[]).map((result={})=>({column:Math.max(1,Number(result.column||1)),line:Math.max(1,Number(result.line||1)),path:normalizeEditorPath(result.path),preview:String(result.preview||``)})).filter(result=>result.path)}function normalizeResolvedSourceEditorPath(value={}){const source=value&&typeof value===`object`&&!Array.isArray(value)?value:{};return{path:normalizeEditorPath(source.path||source.file?.path),resolved:source.resolved===true}}function normalizeExplanationMessages(value=[],{body=``,followups=[]}={}){const messages=(Array.isArray(value)?value:[]).map(entry=>({createdAt:String(entry?.createdAt||``),id:String(entry?.id||``),role:String(entry?.role||``),status:String(entry?.status||`complete`),text:String(entry?.text||``)})).filter(entry=>entry.id&&[`assistant`,`user`].includes(entry.role)&&(entry.text||entry.status!==`complete`));if(messages.length)return messages;const fallback=[];if(String(body||``).trim())fallback.push({createdAt:``,id:`body`,role:`assistant`,status:`complete`,text:String(body||``)});return[...fallback,...(Array.isArray(followups)?followups:[]).map(entry=>({createdAt:String(entry?.createdAt||``),id:String(entry?.id||``),role:String(entry?.role||``),status:`complete`,text:String(entry?.text||``)})).filter(entry=>entry.id&&[`assistant`,`user`].includes(entry.role)&&entry.text)]}function normalizeExplanationExecutionProfile(value=null){try{return vibe64AgentExecutionProfileAuditSnapshot(value)}catch{return null}}function normalizeExplanation(value=null){if(!value||typeof value!==`object`||Array.isArray(value))return null;const sourceRange=value.sourceRange&&typeof value.sourceRange===`object`&&!Array.isArray(value.sourceRange)?value.sourceRange:{};const id=String(value.id||``).trim();if(!id)return null;const followups=(Array.isArray(value.followups)?value.followups:[]).map(entry=>({createdAt:String(entry?.createdAt||``),id:String(entry?.id||``),role:String(entry?.role||``),text:String(entry?.text||``)})).filter(entry=>entry.id&&[`assistant`,`user`].includes(entry.role)&&entry.text);return{agentThreadId:String(value.agentThreadId||``),agentSettings:null,agentTurnId:String(value.agentTurnId||``),body:String(value.body||``),createdAt:String(value.createdAt||``),engine:String(value.engine||``),error:String(value.error||``),executionProfile:normalizeExplanationExecutionProfile(value.executionProfile),followups,id,messages:normalizeExplanationMessages(value.messages,{body:value.body,followups}),model:String(value.model||``),sourceRange:{endColumn:Math.max(1,Number(sourceRange.endColumn||1)),endLine:Math.max(1,Number(sourceRange.endLine||1)),language:String(sourceRange.language||``),path:normalizeEditorPath(sourceRange.path),scope:String(sourceRange.scope||`selection`),...sourceRange.presentation?{presentation:sourceRange.presentation}:{},...sourceRange.fileHash?{fileHash:String(sourceRange.fileHash)}:{},...sourceRange.symbolId?{symbolId:String(sourceRange.symbolId)}:{},startColumn:Math.max(1,Number(sourceRange.startColumn||1)),startLine:Math.max(1,Number(sourceRange.startLine||1))},stale:value.stale===true,staleReason:String(value.staleReason||``),status:String(value.status||``),summary:String(value.summary||``),title:String(value.title||``)}}function normalizeTreeNode(value=null){if(!value||typeof value!==`object`||Array.isArray(value))return null;const type=String(value.type||``);const path=normalizeEditorPath(value.path);if(type===`file`)return{language:String(value.language||``),name:String(value.name||``),path,size:Number(value.size||0),type};if(type!==`directory`)return null;return{children:(Array.isArray(value.children)?value.children:[]).map(child=>normalizeTreeNode(child)).filter(Boolean),hasMore:value.hasMore===true,limit:Math.max(1,Number(value.limit||SOURCE_EDITOR_TREE_PAGE_SIZE)),loaded:value.loaded===true,name:String(value.name||``),nextOffset:Math.max(0,Number(value.nextOffset||0)),offset:Math.max(0,Number(value.offset||0)),path,total:Math.max(0,Number(value.total||0)),truncated:value.truncated===true,type}}function mergeDirectoryChildren(existingChildren=[],pageChildren=[],append=false){const byKey=new Map((existingChildren||[]).map(child=>[treeNodeKey(child),child]));const mergedChildren=pageChildren.map(child=>{const previous=byKey.get(treeNodeKey(child));return child.type===`directory`&&previous?.loaded&&!child.loaded?{...child,...previous,name:child.name}:child});if(!append)return mergedChildren;for(const child of mergedChildren)byKey.set(treeNodeKey(child),child);return[...byKey.values()]}function treeNodeKey(node={}){return normalizeEditorPath(node.path)||String(node.name||``)}function sortTreeNodes(children=[]){return[...children].sort((left,right)=>{if(left?.type!==right?.type)return left?.type===`directory`?-1:1;return String(left?.name||``).localeCompare(String(right?.name||``))})}function mergeDirectoryPage(root=null,directoryPath=``,page=null,append=false){const normalizedPath=normalizeEditorPath(directoryPath);const normalizedPage=normalizeTreeNode(page);if(!normalizedPage)return root;if(!normalizedPath)return{...normalizedPage,children:mergeDirectoryChildren(root?.children,normalizedPage.children,append)};function visit(node=null){if(!node||node.type!==`directory`)return node;if(normalizeEditorPath(node.path)===normalizedPath)return{...node,...normalizedPage,children:mergeDirectoryChildren(node.children,normalizedPage.children,append)};return{...node,children:(Array.isArray(node.children)?node.children:[]).map(child=>visit(child))}}return visit(root)}function mergeRevealedTreeNode(existing=null,reveal=null){const normalizedReveal=normalizeTreeNode(reveal);if(!normalizedReveal)return normalizeTreeNode(existing);const normalizedExisting=normalizeTreeNode(existing);if(!normalizedExisting||treeNodeKey(normalizedExisting)!==treeNodeKey(normalizedReveal))return normalizedReveal;if(normalizedExisting.type!==`directory`||normalizedReveal.type!==`directory`)return normalizedExisting;const childrenByKey=new Map((normalizedExisting.children||[]).map(child=>[treeNodeKey(child),child]));for(const child of normalizedReveal.children||[]){const key=treeNodeKey(child);childrenByKey.set(key,mergeRevealedTreeNode(childrenByKey.get(key),child))}return{...normalizedExisting,children:sortTreeNodes([...childrenByKey.values()])}}function mergeRevealTree(root=null,revealTree=null){const normalizedReveal=normalizeTreeNode(revealTree);if(!normalizedReveal)return root;return mergeRevealedTreeNode(root,normalizedReveal)}function findTreeDirectory(root=null,directoryPath=``){const normalizedPath=normalizeEditorPath(directoryPath);if(!root||root.type!==`directory`)return null;if(normalizeEditorPath(root.path)===normalizedPath)return root;for(const child of Array.isArray(root.children)?root.children:[]){const found=findTreeDirectory(child,normalizedPath);if(found)return found}return null}function loadedFileAncestorDirectoryPaths(root=null,filePath=``,ancestors=[]){const normalizedFilePath=normalizeEditorPath(filePath);if(!root||!normalizedFilePath)return null;if(root.type===`file`)return normalizeEditorPath(root.path)===normalizedFilePath?ancestors:null;if(root.type!==`directory`)return null;const normalizedDirectoryPath=normalizeEditorPath(root.path);const childAncestors=normalizedDirectoryPath?[...ancestors,normalizedDirectoryPath]:ancestors;for(const child of Array.isArray(root.children)?root.children:[]){const found=loadedFileAncestorDirectoryPaths(child,normalizedFilePath,childAncestors);if(found)return found}return null}function loadedDirectoryPaths(root=null,directoryPath=``){const directory=findTreeDirectory(root,directoryPath);if(!directory)return[];const paths=[];function visit(node=null){if(!node||node.type!==`directory`)return;const normalizedPath=normalizeEditorPath(node.path);if(normalizedPath)paths.push(normalizedPath);for(const child of Array.isArray(node.children)?node.children:[])visit(child)}visit(directory);return[...new Set(paths)].sort((left,right)=>left.localeCompare(right))}function loadedTreeDirectoryPaths(root=null){const paths=[];function visit(node=null){if(!node||node.type!==`directory`)return;const normalizedPath=normalizeEditorPath(node.path);if(normalizedPath&&node.loaded===true)paths.push(normalizedPath);for(const child of Array.isArray(node.children)?node.children:[])visit(child)}visit(root);return[...new Set(paths)].sort((left,right)=>{return left.split(`/`).length-right.split(`/`).length||left.localeCompare(right)})}async function sourceEditorRequest(url=``,options={}){const payload=await getHttpWebClient().request(url,options);if(payload?.ok===false){const message=vibe64ApiResponseError(payload,`Source editor request failed.`);const error=new Error(message);error.payload=payload;throw error}return payload}function sourceEditorClientId(prefix=`id`){sourceExplanationClientIdCounter+=1;return`${prefix}_${Date.now().toString(36)}_${sourceExplanationClientIdCounter.toString(36)}`}function nowIso(){return new Date().toISOString()}function sourceEditorExplanationPromptText(filePath=``,range={}){return range.scope===`file`?`Explain the whole file ${filePath}.`:`Explain ${filePath}:${range.startLine}-${range.endLine}.`}function sourceEditorExplanationTitle(filePath=``,range={}){const name=normalizeEditorPath(filePath).split(`/`).filter(Boolean).pop()||`Code`;return range.scope===`file`?`${name} full file`:`${name} lines ${range.startLine}-${range.endLine}`}function localSourceExplanation({assistantMessageId=sourceEditorClientId(`msg`),explanationId=sourceEditorClientId(`exp`),filePath=``,range={},userMessageId=sourceEditorClientId(`msg`)}={}){const createdAt=nowIso();const sourceRange={endColumn:Math.max(1,Number(range.endColumn||1)),endLine:Math.max(1,Number(range.endLine||1)),language:String(range.language||``),path:normalizeEditorPath(filePath),scope:String(range.scope||`selection`),...range.presentation?{presentation:range.presentation}:{},...range.symbolId?{symbolId:range.symbolId}:{},startColumn:Math.max(1,Number(range.startColumn||1)),startLine:Math.max(1,Number(range.startLine||1))};return normalizeExplanation({agentThreadId:``,agentSettings:null,agentTurnId:``,body:``,createdAt,engine:`agent-chat`,error:``,executionProfile:null,followups:[],id:explanationId,messages:[{createdAt,id:userMessageId,role:`user`,status:`complete`,text:sourceEditorExplanationPromptText(filePath,sourceRange)},{createdAt,id:assistantMessageId,role:`assistant`,status:`thinking`,text:``}],model:``,sourceRange,status:`running`,summary:``,title:sourceEditorExplanationTitle(filePath,sourceRange)})}function sourceEditorExplanationWithMessage(explanation=null,messageId=``,patch={}){const normalized=normalizeExplanation(explanation);if(!normalized)return null;const messages=normalizeExplanationMessages(normalized.messages);const index=messages.findIndex(message=>message.id===messageId);if(index===-1)return normalized;const nextMessages=[...messages];nextMessages[index]={...nextMessages[index],...patch};return{...normalized,messages:normalizeExplanationMessages(nextMessages)}}function appendSourceEditorExplanationMessages(explanation=null,messages=[]){const normalized=normalizeExplanation(explanation);if(!normalized)return null;return{...normalized,messages:normalizeExplanationMessages([...normalized.messages,...messages])}}function useVibe64SourceEditor({active=true,agentActive=false,navigateReferencedSource=null,projectSlug,readCurrentText=null,sessionsApiPath,sessionId}={}){const originId=vibe64BrowserTabOriginId();const explanationFeedback=useUiFeedback({source:`vibe64.source-editor.explanation.feedback`});const tree=ref(null);const policy=ref({});const selectedPath=ref(``);const text=ref(``);const savedHash=ref(``);const interpretations=ref([]);const interpretationWarning=ref(``);const dirty=ref(false);const treeLoadingPaths=ref([]);const treeLoadErrors=ref({});const fileQuery=ref(``);const fileMatches=ref([]);const fileMatchesError=ref(``);const fileMatchesLoading=ref(false);const fileMatchesTruncated=ref(false);const searchQuery=ref(``);const searchResults=ref([]);const searchError=ref(``);const searchLoading=ref(false);const searchTruncated=ref(false);const searchIndex=ref(null);const searchIndexPending=computed(()=>[`building`,`refreshing`].includes(searchIndex.value?.state));const searchIndexLabel=computed(()=>{const index=searchIndex.value;if(index?.state===`error`)return index.error||`The search index could not be updated. Use Refresh to retry.`;if(!searchIndexPending.value)return``;const action=index.state===`refreshing`?`Refreshing file index`:`Indexing files`;return index.total?`${action}: ${index.scanned} of ${index.total} files…`:`${action}…`});const activeExplanation=ref(null);const explanationError=ref(``);const explanationBusy=ref(false);const explanationClosing=ref(false);const explanationFollowup=ref(``);const loadFailure=ref(null);const loadError=computed(()=>loadFailure.value?.message||``);const downloadOnlyFile=ref(null);const saveError=ref(``);const createFileError=ref(``);const creatingFile=ref(false);const loadingTree=ref(false);const loadingFile=ref(false);const loadingPath=ref(``);const saving=ref(false);const loadedVersion=ref(0);const cursorRequest=ref(null);const preexpandedDirectoryPaths=ref([]);const revealedDirectoryPaths=ref([]);const selectedRevealTree=ref(null);let treeRequestId=0;const treeDirectoryRequestIds=new Map;let createFileRequestId=0;let fileRequestId=0;let fileRevalidationRequestId=0;let fileMatchesRequestId=0;let searchRequestId=0;let explanationRequestId=0;let explanationAbortController=null;let autosaveTimer=null;let fileMatchesTimer=null;let searchTimer=null;let pendingFileRevalidation=false;let pendingTreeRefresh=false;let refreshPromise=null;let savePromise=null;let textAtUnmount=null;let disposed=false;const currentSessionsApiPath=computed(()=>String(readRefOrGetterValue(sessionsApiPath)||``).trim());const currentSessionId=computed(()=>String(readRefOrGetterValue(sessionId)||``).trim());const currentProjectSlug=computed(()=>String(readRefOrGetterValue(projectSlug)||``).trim());const reportActivity=usePageActivity();const currentActive=computed(()=>readRefOrGetterValue(active)!==false);const canLoad=computed(()=>Boolean(currentSessionsApiPath.value&¤tSessionId.value));const statusLabel=computed(()=>{if(saveError.value)return saveError.value;if(loadingFile.value)return`Opening...`;if(saving.value)return`Saving...`;if(dirty.value)return`Unsaved`;return selectedPath.value?`Saved`:``});useRealtimeEvent({enabled:computed(()=>Boolean(canLoad.value&¤tProjectSlug.value)),event:VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,matches:({payload={}}={})=>payload.operation===`created`&&payload.originId!==originId&&payload.projectSlug===currentProjectSlug.value&&payload.sessionId===currentSessionId.value||sourceEditorFileChangePayloadMatches({originId,path:selectedPath.value,payload,projectSlug:currentProjectSlug.value,sessionId:currentSessionId.value}),onEvent:({payload={}}={})=>{applyRemoteFileChange(payload);if(payload.operation===`created`){if(currentActive.value)loadTree();else pendingTreeRefresh=true}}});useVibe64SourceEditorFileSync({active:computed(()=>canLoad.value&¤tActive.value),onChange:(payload={})=>{applyObservedFileChange(payload)},onError:(error={})=>{vibe64SessionDebugLog(`client.sourceEditor.fileSync.error`,{error:String(error.error||`Source file observation failed.`),path:selectedPath.value,sessionId:currentSessionId.value,transient:error.transient===true})},onReady:()=>{revalidateSelectedFile()},path:selectedPath,sessionId:currentSessionId,sessionsApiPath:currentSessionsApiPath});function clearAutosave(){if(autosaveTimer){clearTimeout(autosaveTimer);autosaveTimer=null}}function clearFileMatchesTimer(){if(fileMatchesTimer){clearTimeout(fileMatchesTimer);fileMatchesTimer=null}}function clearSearchTimer(){if(searchTimer){clearTimeout(searchTimer);searchTimer=null}}function clearFileMatches(){fileMatchesRequestId+=1;fileMatches.value=[];fileMatchesError.value=``;fileMatchesLoading.value=false;fileMatchesTruncated.value=false}function clearSearchResults(){searchRequestId+=1;searchResults.value=[];searchError.value=``;searchLoading.value=false;searchTruncated.value=false;searchIndex.value=null}function resetDiscoveryState(){clearFileMatchesTimer();clearSearchTimer();fileQuery.value=``;searchQuery.value=``;clearFileMatches();clearSearchResults()}function treePathKey(value=``){return normalizeEditorPath(value)}function setTreePathLoading(path=``,loading=false){const key=treePathKey(path);const current=new Set(treeLoadingPaths.value);if(loading)current.add(key);else current.delete(key);treeLoadingPaths.value=[...current].sort((left,right)=>left.localeCompare(right))}function setTreePathError(path=``,message=``){const key=treePathKey(path);const next={...treeLoadErrors.value};if(message)next[key]=message;else delete next[key];treeLoadErrors.value=next}async function loadDirectoryPage(directoryPath=``,{applyPage=true,append=false,offset=0}={}){const normalizedPath=treePathKey(directoryPath);if(!canLoad.value||disposed)return null;const treeGeneration=treeRequestId;const requestKey=normalizedPath;const requestId=(treeDirectoryRequestIds.get(requestKey)||0)+1;treeDirectoryRequestIds.set(requestKey,requestId);setTreePathLoading(normalizedPath,true);setTreePathError(normalizedPath,``);if(!normalizedPath&&!append){loadingTree.value=true;loadFailure.value=null}try{const response=await sourceEditorRequest(vibe64SourceEditorTreePath(currentSessionsApiPath.value,currentSessionId.value,{limit:SOURCE_EDITOR_TREE_PAGE_SIZE,offset,path:normalizedPath}));if(treeGeneration!==treeRequestId||treeDirectoryRequestIds.get(requestKey)!==requestId)return null;if(!normalizedPath)policy.value=normalizeSourceEditorPolicy(response.policy||{});const page=normalizeTreeNode(response.tree);if(applyPage){tree.value=mergeDirectoryPage(tree.value,normalizedPath,page,append);if(selectedRevealTree.value)tree.value=mergeRevealTree(tree.value,selectedRevealTree.value)}if(!normalizedPath)preexpandedDirectoryPaths.value=normalizePolicyDirectories((policy.value.preexpandedDirectories||[]).flatMap(directoryPath=>loadedDirectoryPaths(tree.value,directoryPath)));if(applyPage)revealLoadedFilePath(selectedPath.value);return page}catch(error){if(treeGeneration===treeRequestId&&treeDirectoryRequestIds.get(requestKey)===requestId){const message=String(error?.message||error||`Source tree could not be loaded.`);setTreePathError(normalizedPath,message);if(!normalizedPath)loadFailure.value={operation:`tree`,message}}return null}finally{if(treeGeneration===treeRequestId&&treeDirectoryRequestIds.get(requestKey)===requestId){setTreePathLoading(normalizedPath,false);if(!normalizedPath&&applyPage)loadingTree.value=false}}}function revealLoadedFilePath(filePath=``){const ancestors=loadedFileAncestorDirectoryPaths(tree.value,filePath);if(ancestors)revealedDirectoryPaths.value=normalizePolicyDirectories(ancestors)}async function loadTree({preserveLoadedDirectories=true}={}){const refreshingLoadedTree=preserveLoadedDirectories&&Boolean(tree.value);const directoriesToReload=preserveLoadedDirectories?loadedTreeDirectoryPaths(tree.value):[];const loadedCounts=new Map([``,...directoriesToReload].map(directoryPath=>[directoryPath,findTreeDirectory(tree.value,directoryPath)?.children?.length||0]));const requestId=treeRequestId+1;treeRequestId=requestId;if(!preserveLoadedDirectories){tree.value=null;policy.value=normalizeSourceEditorPolicy({});preexpandedDirectoryPaths.value=[];revealedDirectoryPaths.value=[]}treeDirectoryRequestIds.clear();treeLoadingPaths.value=[];treeLoadErrors.value={};loadFailure.value=null;if(!canLoad.value)return;loadingTree.value=true;let refreshedTree=tree.value;for(const directoryPath of[``,...directoriesToReload]){if(requestId!==treeRequestId)return;if(directoryPath&&!findTreeDirectory(refreshedTree,directoryPath))continue;let offset=0;do{if(disposed||refreshingLoadedTree&&!currentActive.value){pendingTreeRefresh=!disposed;loadingTree.value=false;return}const page=await loadDirectoryPage(directoryPath,{applyPage:false,append:offset>0,offset});if(requestId!==treeRequestId)return;if(page)refreshedTree=mergeDirectoryPage(refreshedTree,directoryPath,page,offset>0);if(!page?.hasMore||!page.nextOffset||page.nextOffset<=offset)break;offset=page.nextOffset}while(offset<loadedCounts.get(directoryPath))}tree.value=refreshedTree;loadingTree.value=false;if(selectedRevealTree.value){tree.value=mergeRevealTree(tree.value,selectedRevealTree.value);revealLoadedFilePath(selectedPath.value)}preexpandedDirectoryPaths.value=normalizePolicyDirectories((policy.value.preexpandedDirectories||[]).flatMap(directoryPath=>loadedDirectoryPaths(tree.value,directoryPath)))}function loadDirectory(directoryPath=``){const normalizedPath=treePathKey(directoryPath);if(findTreeDirectory(tree.value,normalizedPath)?.loaded===true)return;loadDirectoryPage(normalizedPath,{append:false,offset:0})}function loadMoreDirectory(directoryPath=``){const normalizedPath=treePathKey(directoryPath);const directory=findTreeDirectory(tree.value,normalizedPath);if(!directory?.hasMore)return;loadDirectoryPage(normalizedPath,{append:true,offset:directory.nextOffset||directory.children?.length||0})}function applyFileResponse(response={},{column=0,fallbackPath=``,line=0,reveal=true}={}){const file=response.file||{};const filePath=normalizeEditorPath(file.path||fallbackPath);if(!filePath)return false;selectedPath.value=filePath;downloadOnlyFile.value=null;selectedRevealTree.value=normalizeTreeNode(response.revealTree);if(selectedRevealTree.value)tree.value=mergeRevealTree(tree.value,selectedRevealTree.value);text.value=String(file.text||``);savedHash.value=String(file.hash||``);applySavedInterpretations(response,filePath);dirty.value=false;if(reveal)revealLoadedFilePath(filePath);cursorRequest.value={column:Number(column||0)||0,line:Number(line||0)||0,path:filePath,version:loadedVersion.value+1};loadedVersion.value+=1;return true}function applySavedInterpretations(response,filePath){interpretations.value=(response.interpretations?.records||[]).filter(record=>record.path===filePath&&[`file`,`selection`].includes(record.scope)&&[`description`,`steps`].includes(record.presentation)&&typeof record.body===`string`&&[`current`,`stale`].includes(record.status));interpretationWarning.value=String(response.interpretations?.warning||``)}async function openFile(filePath=``,options={}){const normalizedPath=normalizeEditorPath(filePath);if(!normalizedPath||!canLoad.value)return false;if((dirty.value||saving.value)&&!await saveNow())return false;const requestId=fileRequestId+1;fileRequestId=requestId;fileRevalidationRequestId+=1;loadFailure.value=null;saveError.value=``;loadingFile.value=true;loadingPath.value=normalizedPath;try{const response=await sourceEditorRequest(vibe64SourceEditorFilePath(currentSessionsApiPath.value,currentSessionId.value,normalizedPath));if(requestId!==fileRequestId)return false;if(!applyFileResponse(response,{column:options.column,fallbackPath:normalizedPath,line:options.line}))return false;reportActivity(`file-opened`,{projectSlug:currentProjectSlug.value,sessionId:currentSessionId.value,path:normalizedPath});return true}catch(error){if(requestId===fileRequestId){const code=error?.code||error?.payload?.code;if(code===`vibe64_source_editor_binary_file`||code===`vibe64_source_editor_file_too_large`){selectedPath.value=``;selectedRevealTree.value=null;text.value=``;savedHash.value=``;downloadOnlyFile.value={path:normalizedPath,message:code===`vibe64_source_editor_binary_file`?`This file cannot be edited as text. Download it to open it in another application.`:`This file is too large to edit here. You can download the complete file.`};revealLoadedFilePath(normalizedPath);return true}loadFailure.value={operation:`open-file`,message:String(error?.message||error||`Source file could not be loaded.`)}}return false}finally{if(requestId===fileRequestId){loadingFile.value=false;loadingPath.value=``}}}async function createFile(filePath=``){const normalizedPath=normalizeEditorPath(filePath);if(!normalizedPath||!canLoad.value||creatingFile.value)return false;if((dirty.value||saving.value)&&!await saveNow())return false;const createRequestId=createFileRequestId+1;createFileRequestId=createRequestId;const fileSelectionRequestId=fileRequestId+1;fileRequestId=fileSelectionRequestId;fileRevalidationRequestId+=1;createFileError.value=``;loadFailure.value=null;saveError.value=``;creatingFile.value=true;try{const response=await sourceEditorRequest(vibe64SourceEditorCreateFilePath(currentSessionsApiPath.value,currentSessionId.value),{body:{originId,path:normalizedPath,projectSlug:currentProjectSlug.value},method:`POST`});if(fileSelectionRequestId!==fileRequestId)return false;if(!applyFileResponse(response,{fallbackPath:normalizedPath}))return false;return true}catch(error){if(fileSelectionRequestId===fileRequestId)createFileError.value=String(error?.message||error||`Source file could not be created.`);return false}finally{if(createRequestId===createFileRequestId)creatingFile.value=false}}async function revalidateSelectedFile(){const pathAtRequest=selectedPath.value;const sessionIdAtRequest=currentSessionId.value;if(disposed||!pathAtRequest||!canLoad.value||!currentActive.value)return false;if(saving.value){pendingFileRevalidation=true;return false}const requestId=fileRevalidationRequestId+1;fileRevalidationRequestId=requestId;try{const response=await sourceEditorRequest(vibe64SourceEditorFilePath(currentSessionsApiPath.value,sessionIdAtRequest,pathAtRequest));if(requestId!==fileRevalidationRequestId||selectedPath.value!==pathAtRequest||currentSessionId.value!==sessionIdAtRequest)return false;if(loadFailure.value?.operation===`revalidation`)loadFailure.value=null;selectedRevealTree.value=normalizeTreeNode(response.revealTree);if(selectedRevealTree.value)tree.value=mergeRevealTree(tree.value,selectedRevealTree.value);const nextHash=String(response.file?.hash||``);applySavedInterpretations(response,pathAtRequest);if(dirty.value||saving.value){if(nextHash&&nextHash!==savedHash.value)saveError.value=SOURCE_EDITOR_REMOTE_CHANGE_MESSAGE;else if(saveError.value===`This file changed in another window. Reload it before saving.`)saveError.value=``;return false}if(!nextHash||nextHash===savedHash.value)return false;return applyFileResponse(response,{fallbackPath:pathAtRequest,reveal:false})}catch(error){if(requestId===fileRevalidationRequestId&&selectedPath.value===pathAtRequest&¤tSessionId.value===sessionIdAtRequest)loadFailure.value={operation:`revalidation`,message:String(error?.message||error||`Source file could not be refreshed.`)};return false}}async function applySelectedFileChange({hash=``,path=``}={}){const changedPath=normalizeEditorPath(path);const changedHash=normalizeSourceEditorSyncValue(hash);if(!changedPath||changedPath!==selectedPath.value||changedHash&&changedHash===savedHash.value)return;if(saving.value){pendingFileRevalidation=true;return}if(dirty.value&&changedHash){saveError.value=SOURCE_EDITOR_REMOTE_CHANGE_MESSAGE;return}await revalidateSelectedFile()}async function applyRemoteFileChange(payload={}){if(!sourceEditorFileChangePayloadMatches({originId,path:selectedPath.value,payload,projectSlug:currentProjectSlug.value,sessionId:currentSessionId.value}))return;await applySelectedFileChange(payload)}async function applyObservedFileChange(payload={}){if(normalizeSourceEditorSyncValue(payload.sessionId)!==currentSessionId.value||normalizeEditorPath(payload.path)!==selectedPath.value)return;await applySelectedFileChange(payload)}function cleanupAbandonedExplanations(){if(!canLoad.value)return;const activeExplanationIds=activeExplanation.value?.id?[activeExplanation.value.id]:[];sourceEditorRequest(vibe64SourceEditorExplanationsCleanupPath(currentSessionsApiPath.value,currentSessionId.value),{body:{activeExplanationIds,originId},method:`POST`}).catch(error=>{vibe64SessionDebugLog(`client.sourceEditor.explanations.cleanup.error`,{error:vibe64SessionDebugError(error),sessionId:currentSessionId.value})})}async function loadFileMatches(){const query=normalizeEditorQuery(fileQuery.value);if(!query){clearFileMatches();return}const requestId=fileMatchesRequestId+1;fileMatchesRequestId=requestId;fileMatchesError.value=``;if(!canLoad.value)return;fileMatchesLoading.value=true;try{const response=await sourceEditorRequest(vibe64SourceEditorFilesPath(currentSessionsApiPath.value,currentSessionId.value,query));if(requestId!==fileMatchesRequestId)return;fileMatches.value=normalizeFileMatches(response.files);fileMatchesTruncated.value=response.truncated===true}catch(error){if(requestId===fileMatchesRequestId){fileMatches.value=[];fileMatchesError.value=String(error?.message||error||`File matches could not be loaded.`)}}finally{if(requestId===fileMatchesRequestId)fileMatchesLoading.value=false}}function updateFileQuery(value=``){fileQuery.value=String(value||``);clearFileMatchesTimer();if(!normalizeEditorQuery(fileQuery.value)){clearFileMatches();return}fileMatchesTimer=setTimeout(()=>{loadFileMatches()},120)}async function openFileMatch(filePath=``){const normalizedPath=normalizeEditorPath(filePath);if(!normalizedPath)return;clearFileMatchesTimer();fileQuery.value=``;clearFileMatches();await openFile(normalizedPath)}async function openReferencedSourcePath({fromPath=selectedPath.value,target=``}={}){const normalizedFromPath=normalizeEditorPath(fromPath);const normalizedTarget=String(target||``).trim();if(!normalizedFromPath||!normalizedTarget||!canLoad.value)return false;try{const resolved=normalizeResolvedSourceEditorPath(await sourceEditorRequest(vibe64SourceEditorResolvePathPath(currentSessionsApiPath.value,currentSessionId.value),{body:{fromPath:normalizedFromPath,target:normalizedTarget},method:`POST`}));if(!resolved.resolved||!resolved.path)return false;if(typeof navigateReferencedSource===`function`)try{if(await navigateReferencedSource({fromPath:normalizedFromPath,path:resolved.path,target:normalizedTarget})===true)return true}catch{}await openFile(resolved.path);return true}catch{return false}}function openFirstFileMatch(){const firstFile=fileMatches.value[0];if(firstFile?.path)openFileMatch(firstFile.path)}async function loadSearchResults({background=false}={}){clearSearchTimer();if(disposed||!currentActive.value)return;const query=normalizeEditorQuery(searchQuery.value);if(!query){clearSearchResults();return}const requestId=searchRequestId+1;searchRequestId=requestId;searchError.value=``;if(!canLoad.value)return;searchLoading.value=!background;try{const response=await sourceEditorRequest(vibe64SourceEditorSearchPath(currentSessionsApiPath.value,currentSessionId.value,query));if(requestId!==searchRequestId)return;searchResults.value=normalizeSearchResults(response.results);searchTruncated.value=response.truncated===true;searchIndex.value=response.index||null;if(searchIndexPending.value&¤tActive.value&&!disposed)searchTimer=setTimeout(()=>{loadSearchResults({background:true})},1e3)}catch(error){if(requestId===searchRequestId){searchResults.value=[];searchIndex.value=null;searchError.value=String(error?.message||error||`Search results could not be loaded.`)}}finally{if(requestId===searchRequestId)searchLoading.value=false}}function clearExplanationStream(){explanationRequestId+=1;explanationAbortController?.abort?.();explanationAbortController=null;explanationBusy.value=false}function markActiveExplanationMessage(status=``,text=``){const explanation=activeExplanation.value;const lastAssistant=[...explanation?.messages||[]].reverse().find(message=>message.role===`assistant`);if(!lastAssistant?.id)return;const nextExplanation=sourceEditorExplanationWithMessage(explanation,lastAssistant.id,{status,text:text||lastAssistant.text});activeExplanation.value=status===`failed`?{...nextExplanation,error:text||nextExplanation?.error||`Source explanation failed.`,status:`failed`}:nextExplanation}function applyExplanationStreamEvent(event={},requestId=explanationRequestId){if(requestId!==explanationRequestId)return;if(event.type===`source-explanation.error`||event.ok===false){const message=vibe64ApiResponseError(event,`Source explanation failed.`);explanationError.value=message;markActiveExplanationMessage(`failed`,message);throw new Error(message)}const eventExplanation=normalizeExplanation(event.explanation);if(event.type===`source-explanation.failed`){const message=vibe64ApiResponseError(event,`Source explanation failed.`);explanationError.value=message;if(eventExplanation)activeExplanation.value=eventExplanation;else markActiveExplanationMessage(`failed`,message);return}if(event.type===`source-explanation.started`||event.type===`source-explanation.followup.started`){if(eventExplanation)activeExplanation.value=eventExplanation;return}if(event.type===`source-explanation.thread`||event.type===`source-explanation.turn`){if(!activeExplanation.value)return;activeExplanation.value={...activeExplanation.value,agentThreadId:String(event.threadId||activeExplanation.value.agentThreadId||``),agentTurnId:String(event.turnId||activeExplanation.value.agentTurnId||``)};return}if(event.type===`source-explanation.execution-profile`&&eventExplanation){activeExplanation.value=eventExplanation;return}if(event.type===`source-explanation.message`&&event.messageId){activeExplanation.value=sourceEditorExplanationWithMessage(activeExplanation.value,String(event.messageId),{status:String(event.status||`thinking`),text:String(event.text||``)});return}if(event.type===`source-explanation.finished`&&eventExplanation){activeExplanation.value=eventExplanation;const range=eventExplanation.sourceRange;if(eventExplanation.status===`ready`&&range.presentation&&(range.scope===`file`||range.symbolId)&&!eventExplanation.followups.length&&range.path===selectedPath.value){const record={path:range.path,scope:range.scope,symbolId:range.symbolId||``,presentation:range.presentation,fileHash:range.fileHash,body:eventExplanation.body,summary:eventExplanation.summary,createdAt:eventExplanation.createdAt,status:range.fileHash===savedHash.value?`current`:`stale`};interpretations.value=[...interpretations.value.filter(previous=>!(previous.scope===record.scope&&previous.symbolId===record.symbolId&&previous.presentation===record.presentation)),record]}if(eventExplanation.status!==`failed`)explanationError.value=``}}async function streamSourceEditorRequest(url=``,body={},requestId=explanationRequestId){const controller=new AbortController;explanationAbortController=controller;await getHttpWebClient().requestStream(url,{body,method:`POST`,signal:controller.signal},{onEvent(event){applyExplanationStreamEvent(event,requestId)}})}async function explainSelection(range={}){if(!selectedPath.value||!canLoad.value||explanationBusy.value||explanationClosing.value)return;const requestId=explanationRequestId+1;explanationRequestId=requestId;explanationAbortController?.abort?.();explanationAbortController=null;const explanationId=sourceEditorClientId(`exp`);const userMessageId=sourceEditorClientId(`msg`);const assistantMessageId=sourceEditorClientId(`msg`);const previousExplanation=activeExplanation.value;activeExplanation.value=localSourceExplanation({assistantMessageId,explanationId,filePath:selectedPath.value,range,userMessageId});explanationBusy.value=true;explanationError.value=``;explanationFollowup.value=``;if(previousExplanation?.id)disposeExplanation(previousExplanation).catch(()=>null);try{await streamSourceEditorRequest(vibe64SourceEditorExplanationsStreamPath(currentSessionsApiPath.value,currentSessionId.value),{assistantMessageId,endColumn:range.endColumn,endLine:range.endLine,explanationId,force:range.force===true,presentation:range.presentation,symbolId:range.symbolId,expectedHash:range.expectedHash,originId,path:selectedPath.value,scope:range.scope,startColumn:range.startColumn,startLine:range.startLine,userMessageId},requestId)}catch(error){if(String(error?.name||``)===`AbortError`)return;if(requestId===explanationRequestId){const message=String(error?.message||error||`Source explanation could not be created.`);explanationError.value=message;markActiveExplanationMessage(`failed`,message)}}finally{if(requestId===explanationRequestId){explanationBusy.value=false;explanationAbortController=null}}}async function retryExplanation(){const range=activeExplanation.value?.sourceRange||{};const explanationPath=normalizeEditorPath(range.path);if(!explanationPath||explanationBusy.value||explanationClosing.value)return;if(selectedPath.value!==explanationPath){await openFile(explanationPath);if(selectedPath.value!==explanationPath)return}await explainSelection({...range,...range.presentation&&range.fileHash?{expectedHash:range.fileHash}:{},force:true})}async function stopExplanation(){const explanation=activeExplanation.value;if(!explanation?.id||explanationClosing.value)return;const requestId=explanationRequestId+1;explanationRequestId=requestId;const controller=explanationAbortController;explanationAbortController=null;explanationBusy.value=false;explanationError.value=``;markActiveExplanationMessage(`stopped`,`Stopped.`);controller?.abort?.();if(!canLoad.value)return;try{const response=await sourceEditorRequest(vibe64SourceEditorExplanationStopPath(currentSessionsApiPath.value,currentSessionId.value,explanation.id),{method:`POST`});if(requestId!==explanationRequestId||activeExplanation.value?.id!==explanation.id)return;const stoppedExplanation=normalizeExplanation(response.explanation);if(stoppedExplanation)activeExplanation.value=stoppedExplanation}catch(error){if(requestId===explanationRequestId&&activeExplanation.value?.id===explanation.id)explanationFeedback.error(error,`Source explanation could not be stopped.`)}}async function disposeExplanation(explanation=null,{onError=null,sessionsApiPath:apiPath=currentSessionsApiPath.value,sessionId:targetSessionId=currentSessionId.value}={}){const id=String(explanation?.id||``).trim();if(!id||!apiPath||!targetSessionId)return true;try{await sourceEditorRequest(vibe64SourceEditorExplanationPath(apiPath,targetSessionId,id),{method:`DELETE`});return true}catch(error){vibe64SessionDebugLog(`client.sourceEditor.explanations.cleanup.error`,{error:vibe64SessionDebugError(error),sessionId:targetSessionId});onError?.(error);return false}}async function disposeActiveExplanation(options={}){const explanation=activeExplanation.value;if(!explanation)return true;const requestId=explanationRequestId;const disposed=await disposeExplanation(explanation,options);if(disposed&&requestId===explanationRequestId&&activeExplanation.value?.id===explanation.id){activeExplanation.value=null;explanationFollowup.value=``}return disposed}async function closeExplanation(){const explanation=activeExplanation.value;if(!explanation?.id||explanationClosing.value)return false;clearExplanationStream();const requestId=explanationRequestId;explanationClosing.value=true;explanationError.value=``;try{return await disposeActiveExplanation({onError(error){if(requestId===explanationRequestId&&activeExplanation.value?.id===explanation.id)explanationFeedback.error(error,`Source explanation cleanup failed. Close it again to retry.`)}})&&requestId===explanationRequestId}finally{if(requestId===explanationRequestId)explanationClosing.value=false}}function updateExplanationFollowup(value=``){explanationFollowup.value=String(value||``)}async function sendExplanationFollowup(){const message=explanationFollowup.value.trim();const explanationId=activeExplanation.value?.id||``;if(!message||!explanationId||!canLoad.value||explanationBusy.value||explanationClosing.value)return;const requestId=explanationRequestId+1;explanationRequestId=requestId;explanationAbortController?.abort?.();explanationAbortController=null;const createdAt=nowIso();const userMessageId=sourceEditorClientId(`msg`);const assistantMessageId=sourceEditorClientId(`msg`);activeExplanation.value=appendSourceEditorExplanationMessages(activeExplanation.value,[{createdAt,id:userMessageId,role:`user`,status:`complete`,text:message},{createdAt,id:assistantMessageId,role:`assistant`,status:`thinking`,text:``}]);explanationBusy.value=true;explanationError.value=``;explanationFollowup.value=``;try{await streamSourceEditorRequest(vibe64SourceEditorExplanationFollowupsStreamPath(currentSessionsApiPath.value,currentSessionId.value,explanationId),{assistantMessageId,message,userMessageId},requestId)}catch(error){if(String(error?.name||``)===`AbortError`)return;if(requestId===explanationRequestId){const errorMessage=String(error?.message||error||`Source explanation follow-up could not be sent.`);explanationError.value=errorMessage;markActiveExplanationMessage(`failed`,errorMessage)}}finally{if(requestId===explanationRequestId){explanationBusy.value=false;explanationAbortController=null}}}function updateSearchQuery(value=``){searchQuery.value=String(value||``);clearSearchTimer();clearSearchResults();if(!normalizeEditorQuery(searchQuery.value))return;searchTimer=setTimeout(()=>{loadSearchResults()},260)}function openSearchResult(result={}){const filePath=normalizeEditorPath(result.path);if(!filePath)return;openFile(filePath,{column:result.column,line:result.line})}function scheduleSave(){clearAutosave();if(!selectedPath.value||!dirty.value)return;autosaveTimer=setTimeout(()=>{saveNow()},700)}function updateText(){dirty.value=true;saveError.value=``;scheduleSave()}function currentText(){if(textAtUnmount!==null)return textAtUnmount;return typeof readCurrentText===`function`?String(readCurrentText()??``):text.value}async function saveDirtyBuffers(){while(selectedPath.value&&dirty.value){const pathAtSave=selectedPath.value;const textAtSave=currentText();const baseHashAtSave=savedHash.value;saving.value=true;saveError.value=``;try{const response=await sourceEditorRequest(vibe64SourceEditorFilePath(currentSessionsApiPath.value,currentSessionId.value),{body:{baseHash:baseHashAtSave,originId,path:pathAtSave,projectSlug:currentProjectSlug.value,text:textAtSave},method:`PUT`});if(selectedPath.value===pathAtSave){savedHash.value=String(response.file?.hash||``);text.value=textAtSave;dirty.value=currentText()!==textAtSave}}catch(error){if(selectedPath.value===pathAtSave)saveError.value=String(error?.message||error||`Source file could not be saved.`);return false}finally{saving.value=false}}if(pendingFileRevalidation){pendingFileRevalidation=false;revalidateSelectedFile()}return!dirty.value}function saveNow(){clearAutosave();if(savePromise)return savePromise;savePromise=saveDirtyBuffers().finally(()=>{savePromise=null});return savePromise}function openRequest(request={}){const filePath=normalizeEditorPath(request.path);if(!filePath)return;openFile(filePath,{column:request.column,line:request.line})}function refresh(){if(refreshPromise){pendingTreeRefresh=true;return refreshPromise}refreshPromise=(async()=>{do{pendingTreeRefresh=false;selectedRevealTree.value=null;await loadTree();await revalidateSelectedFile();if(searchQuery.value&¤tActive.value)await loadSearchResults({background:true})}while(pendingTreeRefresh&¤tActive.value)})().finally(()=>{refreshPromise=null});return refreshPromise}watch([currentSessionId,()=>Boolean(readRefOrGetterValue(agentActive))],([id,working],previous=[])=>{if(id!==previous[0]||!previous[1]||working)return;if(currentActive.value)refresh();else pendingTreeRefresh=true});if(typeof window!==`undefined`)window.addEventListener(`focus`,revalidateSelectedFile);watch([currentSessionsApiPath,currentSessionId,currentActive],async(current,previous=[])=>{if(current[0]===previous[0]&¤t[1]===previous[1]){if(!current[2]){clearSearchTimer();searchRequestId+=1;searchLoading.value=false}else if(searchQuery.value&&!pendingTreeRefresh)loadSearchResults({background:true});if(current[2]&&pendingTreeRefresh)await refresh();return}pendingTreeRefresh=false;const closePending=explanationClosing.value;clearExplanationStream();explanationClosing.value=false;if(activeExplanation.value&&!closePending)disposeActiveExplanation({sessionsApiPath:previous[0]||currentSessionsApiPath.value,sessionId:previous[1]||currentSessionId.value});resetDiscoveryState();fileRequestId+=1;loadingFile.value=false;loadingPath.value=``;fileRevalidationRequestId+=1;pendingFileRevalidation=false;selectedPath.value=``;downloadOnlyFile.value=null;selectedRevealTree.value=null;text.value=``;savedHash.value=``;interpretations.value=[];interpretationWarning.value=``;dirty.value=false;activeExplanation.value=null;explanationFollowup.value=``;await loadTree({preserveLoadedDirectories:false});cleanupAbandonedExplanations()},{immediate:true});onBeforeUnmount(()=>{disposed=true;treeRequestId+=1;fileRequestId+=1;fileRevalidationRequestId+=1;textAtUnmount=currentText();const closePending=explanationClosing.value;clearExplanationStream();explanationClosing.value=false;clearAutosave();clearFileMatchesTimer();clearSearchTimer();searchRequestId+=1;if(typeof window!==`undefined`)window.removeEventListener(`focus`,revalidateSelectedFile);if(!closePending)disposeActiveExplanation();saveNow()});return{activeExplanation,closeExplanation,createFile,createFileError,creatingFile,cursorRequest,dirty,downloadOnlyFile,explanationBusy,explanationClosing,explanationError,explanationFollowup,explainSelection,fileMatches,fileMatchesError,fileMatchesLoading,fileMatchesTruncated,fileQuery,loadError,loadedVersion,loadDirectory,loadMoreDirectory,loadingFile,loadingPath,loadingTree,openFile,openFileMatch,openFirstFileMatch,openReferencedSourcePath,openRequest,openSearchResult,policy,preexpandedDirectoryPaths,refresh,retryExplanation,revealedDirectoryPaths,saveError,saveNow,savedHash,interpretations,interpretationWarning,searchError,searchLoading,searchIndex,searchIndexLabel,searchIndexPending,searchQuery,searchResults,searchTruncated,selectedPath,sendExplanationFollowup,saving,stopExplanation,statusLabel,text,tree,treeLoadErrors,treeLoadingPaths,updateExplanationFollowup,updateFileQuery,updateSearchQuery,updateText}}var SOURCE_EDITOR_DIFF_TIMEOUT_MS=100;function sourceEditorDocumentChanges(currentText,nextText){if(currentText===nextText)return[];const parts=diffLines(currentText,nextText,{timeout:SOURCE_EDITOR_DIFF_TIMEOUT_MS});if(!parts)return[{from:0,insert:nextText,to:currentText.length}];const changes=[];let currentPosition=0;let pendingChange=null;for(const part of parts){if(!part.added&&!part.removed){if(pendingChange){changes.push(pendingChange);pendingChange=null}currentPosition+=part.value.length;continue}pendingChange||={from:currentPosition,insert:``,to:currentPosition};if(part.added)pendingChange.insert+=part.value;else{currentPosition+=part.value.length;pendingChange.to=currentPosition}}if(pendingChange)changes.push(pendingChange);return changes}var _hoisted_1$1={key:0,class:`vibe64-source-editor__header`};var _hoisted_2$1={class:`vibe64-source-editor__title`};var _hoisted_3$1=[`title`];var _hoisted_4$1={key:3,class:`vibe64-source-editor__mobile-actions`};var _hoisted_5$1={key:4,class:`vibe64-source-editor__actions`};var _hoisted_6$1={key:1,class:`vibe64-source-editor__tools`};var _hoisted_7$1={class:`vibe64-source-editor__tool`};var _hoisted_8$1={key:0,class:`vibe64-source-editor__matches`};var _hoisted_9$1={key:0,class:`vibe64-source-editor__match-note`};var _hoisted_10$1={key:1,class:`vibe64-source-editor__match-note vibe64-source-editor__match-note--error`};var _hoisted_11$1=[`title`,`onClick`];var _hoisted_12={class:`vibe64-source-editor__match-name`};var _hoisted_13={class:`vibe64-source-editor__match-path`};var _hoisted_14={key:0,class:`vibe64-source-editor__match-note`};var _hoisted_15={key:1,class:`vibe64-source-editor__match-note`};var _hoisted_16={class:`vibe64-source-editor__tool`};var _hoisted_17={class:`vibe64-source-editor__tree-toolbar`};var _hoisted_18={class:`vibe64-source-editor__tree-actions`};var _hoisted_19=[`open`];var _hoisted_20={key:1,class:`vibe64-source-editor__search-results`,"aria-label":`Find results`};var _hoisted_21={class:`vibe64-source-editor__search-heading`};var _hoisted_22={key:1,class:`vibe64-source-editor__notice`};var _hoisted_23={key:2,class:`vibe64-source-editor__notice vibe64-source-editor__notice--error`};var _hoisted_24={key:3,class:`vibe64-source-editor__notice`};var _hoisted_25=[`title`,`onClick`];var _hoisted_26={class:`vibe64-source-editor__search-path`};var _hoisted_27={class:`vibe64-source-editor__search-location`};var _hoisted_28={class:`vibe64-source-editor__search-preview`};var _hoisted_29={key:5,class:`vibe64-source-editor__notice`};var _hoisted_30={key:2,class:`vibe64-source-editor__notice`};var _hoisted_31={key:3,class:`vibe64-source-editor__notice vibe64-source-editor__notice--error`};var _hoisted_32={class:`vibe64-source-editor__main`};var _hoisted_33={key:0,class:`vibe64-source-editor__banner`};var _hoisted_34={key:1,class:`vibe64-source-editor__empty`};var _hoisted_35={class:`mb-4`};var _hoisted_36={key:2,class:`vibe64-source-editor__empty`};var _hoisted_37={key:3,class:`vibe64-source-editor__banner vibe64-source-editor__banner--error`};var _hoisted_38={key:1,class:`vibe64-source-editor__markdown`,"aria-label":`Formatted document`,tabindex:`0`};var _hoisted_39={key:2,class:`vibe64-source-editor__image-preview`,"aria-label":`Image preview`,tabindex:`0`};var _hoisted_40={key:0,class:`pa-4`};var _hoisted_41=[`src`,`alt`];var _hoisted_42=[`aria-label`];var _hoisted_43={class:`vibe64-source-editor__download-status`,role:`status`};var SOURCE_EDITOR_TREE_STATE_STORAGE_KEY=`vibe64:source-editor:tree-state`;var _sfc_main$2={__name:`Vibe64SessionSourceEditor`,props:{singleFile:{type:Boolean,default:false},architectureFacts:{type:Object,default:null},agentActive:{type:Boolean,default:false},fileBookmarks:{type:Object,default:null},active:{default:false,type:Boolean},assistantAvailable:{default:true,type:Boolean},assistantUnavailableMessage:{default:`The selected AI connection is unavailable for this account.`,type:String},codeFocusMode:{default:false,type:Boolean},openRequest:{default:null,type:Object},projectSlug:{default:``,type:String},sessionId:{default:``,type:String},sessionsApiPath:{default:``,type:String},askCodexAvailable:{default:false,type:Boolean},navigateReferencedSource:{default:null,type:Function},sourcePathClickWithoutModifier:{default:false,type:Boolean}},emits:[`ask-codex-about-file`,`open-source-file`,`interface-location`,`open-program`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const editorElement=ref(null);let editorView=null;let explanationFocusTimer=null;let renderedEditorPath=``;let resettingEditor=false;let sourceEditorUnmounted=false;const editor=useVibe64SourceEditor({active:()=>props.active,agentActive:()=>props.agentActive,navigateReferencedSource:navigation=>props.navigateReferencedSource?.(navigation),projectSlug:()=>props.projectSlug,readCurrentText:()=>editorView?.state.doc.toString()??``,sessionId:()=>props.sessionId,sessionsApiPath:()=>props.sessionsApiPath});const filePresentation=ref(`interface`);const interfaceSymbolId=ref(``);const symbolPresentation=ref(`description`);const interfaceGraph=props.architectureFacts?null:useVibe64SystemGraph({active:toRef(props,`active`),sessionId:toRef(props,`sessionId`),projection:`architecture`});const interfaceArchitecture=computed(()=>props.architectureFacts||interfaceGraph?.architecture.value);const interfaceFile=computed(()=>interfaceArchitecture.value?.files?.find(file=>file.path===editor.selectedPath.value));const interfaceCurrent=computed(()=>interfaceFile.value?.hash===`sha256:${editor.savedHash.value}`&&!editor.dirty.value);const interfaceSymbols=computed(()=>(interfaceArchitecture.value?.symbols||[]).filter(symbol=>symbol.fileId===interfaceFile.value?.id&&symbol.visibility===`public`));const interfacePrograms=computed(()=>(interfaceArchitecture.value?.program?.modules||[]).filter(program=>program.sources.includes(editor.selectedPath.value)));const interfaceSymbol=computed(()=>interfaceSymbols.value.find(symbol=>symbol.id===interfaceSymbolId.value));const interfaceSymbolSource=computed(()=>{const symbol=interfaceSymbol.value;if(!symbol?.end||!interfaceCurrent.value)return``;const selected=editor.text.value.split(`
|
|
38
|
+
`)end--;this.fragmentEnd=end?end-1:0}let c=this.cursor;if(!c){c=this.cursor=this.fragment.tree.cursor();c.firstChild()}let rPos=pos+this.fragment.offset;while(c.to<=rPos)if(!c.parent())return false;for(;;){if(c.from>=rPos)return this.fragment.from<=lineStart;if(!c.childAfter(rPos))return false}}matches(hash){let tree=this.cursor.tree;return tree&&tree.prop(NodeProp.contextHash)==hash}takeNodes(cx){let cur=this.cursor,off=this.fragment.offset,fragEnd=this.fragmentEnd-(this.fragment.openEnd?1:0);let start=cx.absoluteLineStart,end=start,blockI=cx.block.children.length;let prevEnd=end,prevI=blockI;for(;;){if(cur.to-off>fragEnd){if(cur.type.isAnonymous&&cur.firstChild())continue;break}let pos=toRelative(cur.from-off,cx.ranges);if(cur.to-off<=cx.ranges[cx.rangeI].to)cx.addNode(cur.tree,pos);else{let dummy=new Tree(cx.parser.nodeSet.types[Type.Paragraph],[],[],0,cx.block.hashProp);cx.reusePlaceholders.set(dummy,cur.tree);cx.addNode(dummy,pos)}if(cur.type.is(`Block`)){if(NotLast.indexOf(cur.type.id)<0){end=cur.to-off;blockI=cx.block.children.length}else{end=prevEnd;blockI=prevI}prevEnd=cur.to-off;prevI=cx.block.children.length}if(!cur.nextSibling())break}while(cx.block.children.length>blockI){cx.block.children.pop();cx.block.positions.pop()}return end-start}};function toRelative(abs,ranges){let pos=abs;for(let i=1;i<ranges.length;i++){let gapFrom=ranges[i-1].to,gapTo=ranges[i].from;if(gapFrom<abs)pos-=gapTo-gapFrom}return pos}var markdownHighlighting=styleTags({"Blockquote/...":tags$1.quote,HorizontalRule:tags$1.contentSeparator,"ATXHeading1/... SetextHeading1/...":tags$1.heading1,"ATXHeading2/... SetextHeading2/...":tags$1.heading2,"ATXHeading3/...":tags$1.heading3,"ATXHeading4/...":tags$1.heading4,"ATXHeading5/...":tags$1.heading5,"ATXHeading6/...":tags$1.heading6,"Comment CommentBlock":tags$1.comment,Escape:tags$1.escape,Entity:tags$1.character,"Emphasis/...":tags$1.emphasis,"StrongEmphasis/...":tags$1.strong,"Link/... Image/...":tags$1.link,"OrderedList/... BulletList/...":tags$1.list,"BlockQuote/...":tags$1.quote,"InlineCode CodeText":tags$1.monospace,"URL Autolink":tags$1.url,"HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark":tags$1.processingInstruction,"CodeInfo LinkLabel":tags$1.labelName,LinkTitle:tags$1.string,Paragraph:tags$1.content});var parser=new MarkdownParser(new NodeSet(nodeTypes).extend(markdownHighlighting),Object.keys(DefaultBlockParsers).map(n=>DefaultBlockParsers[n]),Object.keys(DefaultBlockParsers).map(n=>DefaultLeafBlocks[n]),Object.keys(DefaultBlockParsers),DefaultEndLeaf,DefaultSkipMarkup,Object.keys(DefaultInline).map(n=>DefaultInline[n]),Object.keys(DefaultInline),[]);function leftOverSpace(node,from,to){let ranges=[];for(let n=node.firstChild,pos=from;;n=n.nextSibling){let nextPos=n?n.from:to;if(nextPos>pos)ranges.push({from:pos,to:nextPos});if(!n)break;pos=n.to}return ranges}function parseCode(config){let{codeParser,htmlParser}=config;return{wrap:parseMixed((node,input)=>{let id=node.type.id;if(codeParser&&(id==Type.CodeBlock||id==Type.FencedCode)){let info=``;if(id==Type.FencedCode){let infoNode=node.node.getChild(Type.CodeInfo);if(infoNode)info=input.read(infoNode.from,infoNode.to)}let parser=codeParser(info);if(parser)return{parser,overlay:node=>node.type.id==Type.CodeText,bracketed:id==Type.FencedCode}}else if(htmlParser&&(id==Type.HTMLBlock||id==Type.HTMLTag||id==Type.CommentBlock))return{parser:htmlParser,overlay:leftOverSpace(node.node,node.from,node.to)};return null})}}var StrikethroughDelim={resolve:`Strikethrough`,mark:`StrikethroughMark`};var Strikethrough={defineNodes:[{name:`Strikethrough`,style:{"Strikethrough/...":tags$1.strikethrough}},{name:`StrikethroughMark`,style:tags$1.processingInstruction}],parseInline:[{name:`Strikethrough`,parse(cx,next,pos){if(next!=126||cx.char(pos+1)!=126||cx.char(pos+2)==126)return-1;let before=cx.slice(pos-1,pos),after=cx.slice(pos+2,pos+3);let sBefore=/\s|^$/.test(before),sAfter=/\s|^$/.test(after);let pBefore=Punctuation.test(before),pAfter=Punctuation.test(after);return cx.addDelimiter(StrikethroughDelim,pos,pos+2,!sAfter&&(!pAfter||sBefore||pBefore),!sBefore&&(!pBefore||sAfter||pAfter))},after:`Emphasis`}]};function parseRow(cx,line,startI=0,elts,offset=0){let count=0,first=true,cellStart=-1,cellEnd=-1,esc=false;let parseCell=()=>{elts.push(cx.elt(`TableCell`,offset+cellStart,offset+cellEnd,cx.parser.parseInline(line.slice(cellStart,cellEnd),offset+cellStart)))};for(let i=startI;i<line.length;i++){let next=line.charCodeAt(i);if(next==124&&!esc){if(!first||cellStart>-1)count++;first=false;if(elts){if(cellStart>-1)parseCell();elts.push(cx.elt(`TableDelimiter`,i+offset,i+offset+1))}cellStart=cellEnd=-1}else if(esc||next!=32&&next!=9){if(cellStart<0)cellStart=i;cellEnd=i+1}esc=!esc&&next==92}if(cellStart>-1){count++;if(elts)parseCell()}return count}function hasPipe(str,start){for(let i=start;i<str.length;i++){let next=str.charCodeAt(i);if(next==124)return true;if(next==92)i++}return false}var delimiterLine=/^[>\s]*\|?(\s*:?-+:?\s*\|)+(\s*:?-+:?\s*)?$/;var TableParser=class{constructor(){this.rows=null}nextLine(cx,line,leaf){if(this.rows==null){this.rows=false;let lineText;if((line.next==45||line.next==58||line.next==124)&&delimiterLine.test(lineText=line.text.slice(line.pos))){let firstRow=[];if(parseRow(cx,leaf.content,0,firstRow,leaf.start)==parseRow(cx,lineText,0))this.rows=[cx.elt(`TableHeader`,leaf.start,leaf.start+leaf.content.length,firstRow),cx.elt(`TableDelimiter`,cx.lineStart+line.pos,cx.lineStart+line.text.length)]}}else if(this.rows){let content=[];parseRow(cx,line.text,line.pos,content,cx.lineStart);this.rows.push(cx.elt(`TableRow`,cx.lineStart+line.pos,cx.lineStart+line.text.length,content))}return false}finish(cx,leaf){if(!this.rows)return false;cx.addLeafElement(leaf,cx.elt(`Table`,leaf.start,leaf.start+leaf.content.length,this.rows));return true}};var Table={defineNodes:[{name:`Table`,block:true},{name:`TableHeader`,style:{"TableHeader/...":tags$1.heading}},`TableRow`,{name:`TableCell`,style:tags$1.content},{name:`TableDelimiter`,style:tags$1.processingInstruction}],parseBlock:[{name:`Table`,leaf(_,leaf){return hasPipe(leaf.content,0)?new TableParser:null},endLeaf(cx,line,leaf){if(leaf.parsers.some(p=>p instanceof TableParser)||!hasPipe(line.text,line.basePos))return false;let next=cx.peekLine();return delimiterLine.test(next)&&parseRow(cx,line.text,line.basePos)==parseRow(cx,next,line.basePos)},before:`SetextHeading`}]};var TaskParser=class{nextLine(){return false}finish(cx,leaf){cx.addLeafElement(leaf,cx.elt(`Task`,leaf.start,leaf.start+leaf.content.length,[cx.elt(`TaskMarker`,leaf.start,leaf.start+3),...cx.parser.parseInline(leaf.content.slice(3),leaf.start+3)]));return true}};var TaskList={defineNodes:[{name:`Task`,block:true,style:tags$1.list},{name:`TaskMarker`,style:tags$1.atom}],parseBlock:[{name:`TaskList`,leaf(cx,leaf){return/^\[[ xX]\][ \t]/.test(leaf.content)&&cx.parentType().name==`ListItem`?new TaskParser:null},after:`SetextHeading`}]};var autolinkRE=/(www\.)|(https?:\/\/)|([\w.+-]{1,100}@)|(mailto:|xmpp:)/gy;var urlRE=/[\w-]+(\.[\w-]+)+(:\d+)?(\/[^\s<]*)?/gy;var lastTwoDomainWords=/[\w-]+\.[\w-]+($|[/:])/;var emailRE=/[\w.+-]+@[\w-]+(\.[\w.-]+)+/gy;var xmppResourceRE=/\/[a-zA-Z\d@.]+/gy;function count(str,from,to,ch){let result=0;for(let i=from;i<to;i++)if(str[i]==ch)result++;return result}function autolinkURLEnd(text,from){urlRE.lastIndex=from;let m=urlRE.exec(text);if(!m||lastTwoDomainWords.exec(m[0])[0].indexOf(`_`)>-1)return-1;let end=from+m[0].length;for(;;){let last=text[end-1],m;if(/[?!.,:*_~]/.test(last)||last==`)`&&count(text,from,end,`)`)>count(text,from,end,`(`))end--;else if(last==`;`&&(m=/&(?:#\d+|#x[a-f\d]+|\w+);$/.exec(text.slice(from,end))))end=from+m.index;else break}return end}function autolinkEmailEnd(text,from){emailRE.lastIndex=from;let m=emailRE.exec(text);if(!m)return-1;let last=m[0][m[0].length-1];return last==`_`||last==`-`?-1:from+m[0].length-(last==`.`?1:0)}var Autolink={parseInline:[{name:`Autolink`,parse(cx,next,absPos){let pos=absPos-cx.offset;if(pos&&/\w/.test(cx.text[pos-1]))return-1;autolinkRE.lastIndex=pos;let m=autolinkRE.exec(cx.text),end=-1;if(!m)return-1;if(m[1]||m[2]){end=autolinkURLEnd(cx.text,pos+m[0].length);if(end>-1&&cx.hasOpenLink)end=pos+/([^\[\]]|\[[^\]]*\])*/.exec(cx.text.slice(pos,end))[0].length}else if(m[3])end=autolinkEmailEnd(cx.text,pos);else{end=autolinkEmailEnd(cx.text,pos+m[0].length);if(end>-1&&m[0]==`xmpp:`){xmppResourceRE.lastIndex=end;m=xmppResourceRE.exec(cx.text);if(m)end=m.index+m[0].length}}if(end<0)return-1;cx.addElement(cx.elt(`URL`,absPos,end+cx.offset));return end+cx.offset}}]};var GFM=[Table,TaskList,Strikethrough,Autolink];function parseSubSuper(ch,node,mark){return(cx,next,pos)=>{if(next!=ch||cx.char(pos+1)==ch)return-1;let elts=[cx.elt(mark,pos,pos+1)];for(let i=pos+1;i<cx.end;i++){let next=cx.char(i);if(next==ch)return cx.addElement(cx.elt(node,pos,i+1,elts.concat(cx.elt(mark,i,i+1))));if(next==92)elts.push(cx.elt(`Escape`,i,i+++2));if(space(next))break}return-1}}var Superscript={defineNodes:[{name:`Superscript`,style:tags$1.special(tags$1.content)},{name:`SuperscriptMark`,style:tags$1.processingInstruction}],parseInline:[{name:`Superscript`,parse:parseSubSuper(94,`Superscript`,`SuperscriptMark`)}]};var Subscript={defineNodes:[{name:`Subscript`,style:tags$1.special(tags$1.content)},{name:`SubscriptMark`,style:tags$1.processingInstruction}],parseInline:[{name:`Subscript`,parse:parseSubSuper(126,`Subscript`,`SubscriptMark`)}]};var Emoji={defineNodes:[{name:`Emoji`,style:tags$1.character}],parseInline:[{name:`Emoji`,parse(cx,next,pos){let match;if(next!=58||!(match=/^[a-zA-Z_0-9]+:/.exec(cx.slice(pos+1,cx.end))))return-1;return cx.addElement(cx.elt(`Emoji`,pos,pos+1+match[0].length))}}]};var data=defineLanguageFacet({commentTokens:{block:{open:`<!--`,close:`-->`}}});var headingProp=new NodeProp;var commonmark=parser.configure({props:[foldNodeProp.add(type=>{return!type.is(`Block`)||type.is(`Document`)||isHeading(type)!=null||isList(type)?void 0:(tree,state)=>({from:state.doc.lineAt(tree.from).to,to:tree.to})}),headingProp.add(isHeading),indentNodeProp.add({Document:()=>null}),languageDataProp.add({Document:data})]});function isHeading(type){let match=/^(?:ATX|Setext)Heading(\d)$/.exec(type.name);return match?+match[1]:void 0}function isList(type){return type.name==`OrderedList`||type.name==`BulletList`}function findSectionEnd(headerNode,level){let last=headerNode;for(;;){let next=last.nextSibling,heading;if(!next||(heading=isHeading(next.type))!=null&&heading<=level)break;last=next}return last.to}var headerIndent=foldService.of((state,start,end)=>{for(let node=syntaxTree(state).resolveInner(end,-1);node;node=node.parent){if(node.from<start)break;let heading=node.type.prop(headingProp);if(heading==null)continue;let upto=findSectionEnd(node,heading);if(upto>end)return{from:end,to:upto}}return null});function mkLang(parser){return new Language(data,parser,[],`markdown`)}var commonmarkLanguage=mkLang(commonmark);var markdownLanguage=mkLang(commonmark.configure([GFM,Subscript,Superscript,Emoji,{props:[foldNodeProp.add({Table:(tree,state)=>({from:state.doc.lineAt(tree.from).to,to:tree.to})})]}]));function getCodeParser(languages,defaultLanguage){return info=>{if(info&&languages){let found=null;info=/\S*/.exec(info)[0];if(typeof languages==`function`)found=languages(info);else found=LanguageDescription.matchLanguageName(languages,info,true);if(found instanceof LanguageDescription)return found.support?found.support.language.parser:ParseContext.getSkippingParser(found.load());else if(found)return found.parser}return defaultLanguage?defaultLanguage.parser:null}}var Context=class{constructor(node,from,to,spaceBefore,spaceAfter,type,item){this.node=node;this.from=from;this.to=to;this.spaceBefore=spaceBefore;this.spaceAfter=spaceAfter;this.type=type;this.item=item}blank(maxWidth,trailing=true){let result=this.spaceBefore+(this.node.name==`Blockquote`?`>`:``);if(maxWidth!=null){while(result.length<maxWidth)result+=` `;return result}else{for(let i=this.to-this.from-result.length-this.spaceAfter.length;i>0;i--)result+=` `;return result+(trailing?this.spaceAfter:``)}}marker(doc,add){let number=this.node.name==`OrderedList`?String(+itemNumber(this.item,doc)[2]+add):``;return this.spaceBefore+number+this.type+this.spaceAfter}};function getContext(node,doc){let nodes=[],context=[];for(let cur=node;cur;cur=cur.parent){if(cur.name==`FencedCode`)return context;if(cur.name==`ListItem`||cur.name==`Blockquote`)nodes.push(cur)}for(let i=nodes.length-1;i>=0;i--){let node=nodes[i],match;let line=doc.lineAt(node.from),startPos=node.from-line.from;if(node.name==`Blockquote`&&(match=/^ *>( ?)/.exec(line.text.slice(startPos))))context.push(new Context(node,startPos,startPos+match[0].length,``,match[1],`>`,null));else if(node.name==`ListItem`&&node.parent.name==`OrderedList`&&(match=/^( *)\d+([.)])( *)/.exec(line.text.slice(startPos)))){let after=match[3],len=match[0].length;if(after.length>=4){after=after.slice(0,after.length-4);len-=4}context.push(new Context(node.parent,startPos,startPos+len,match[1],after,match[2],node))}else if(node.name==`ListItem`&&node.parent.name==`BulletList`&&(match=/^( *)([-+*])( {1,4}\[[ xX]\])?( +)/.exec(line.text.slice(startPos)))){let after=match[4],len=match[0].length;if(after.length>4){after=after.slice(0,after.length-4);len-=4}let type=match[2];if(match[3])type+=match[3].replace(/[xX]/,` `);context.push(new Context(node.parent,startPos,startPos+len,match[1],after,type,node))}}return context}function itemNumber(item,doc){return/^(\s*)(\d+)(?=[.)])/.exec(doc.sliceString(item.from,item.from+10))}function renumberList(after,doc,changes,offset=0){for(let prev=-1,node=after;;){if(node.name==`ListItem`){let m=itemNumber(node,doc);let number=+m[2];if(prev>=0){if(number!=prev+1)return;changes.push({from:node.from+m[1].length,to:node.from+m[0].length,insert:String(prev+2+offset)})}prev=number}let next=node.nextSibling;if(!next)break;node=next}}function normalizeIndent(content,state){let blank=/^[ \t]*/.exec(content)[0].length;if(!blank||state.facet(indentUnit)!=` `)return content;let col=countColumn(content,4,blank);let space=``;for(let i=col;i>0;)if(i>=4){space+=` `;i-=4}else{space+=` `;i--}return space+content.slice(blank)}var insertNewlineContinueMarkupCommand=(config={})=>({state,dispatch})=>{let tree=syntaxTree(state),{doc}=state;let dont=null,changes=state.changeByRange(range=>{if(!range.empty||!markdownLanguage.isActiveAt(state,range.from,-1)&&!markdownLanguage.isActiveAt(state,range.from,1))return dont={range};let pos=range.from,line=doc.lineAt(pos);let context=getContext(tree.resolveInner(pos,-1),doc);while(context.length&&context[context.length-1].from>pos-line.from)context.pop();if(!context.length)return dont={range};let inner=context[context.length-1];if(inner.to-inner.spaceAfter.length>pos-line.from)return dont={range};let emptyLine=pos>=inner.to-inner.spaceAfter.length&&!/\S/.test(line.text.slice(inner.to));if(inner.item&&emptyLine){if(inner.item.from<line.from&&!/^[\s>]*$/.test(line.text.slice(0,inner.to)))return dont={range};let first=inner.node.firstChild,second=inner.node.getChild(`ListItem`,`ListItem`);if(first.to>=pos||second&&second.to<pos||line.from>0&&!/[^\s>]/.test(doc.lineAt(line.from-1).text)||config.nonTightLists===false){let next=context.length>1?context[context.length-2]:null;let delTo,insert=``;if(next&&next.item){delTo=line.from+next.from;insert=next.marker(doc,1)}else delTo=line.from+(next?next.to:0);let changes=[{from:delTo,to:pos,insert}];if(inner.node.name==`OrderedList`)renumberList(inner.item,doc,changes,-2);if(next&&next.node.name==`OrderedList`)renumberList(next.item,doc,changes);return{range:EditorSelection.cursor(delTo+insert.length),changes}}else{let insert=blankLine(context,state,line);return{range:EditorSelection.cursor(pos+insert.length+1),changes:{from:line.from,insert:insert+state.lineBreak}}}}if(inner.node.name==`Blockquote`&&emptyLine&&line.from){let prevLine=doc.lineAt(line.from-1),quoted=/>\s*$/.exec(prevLine.text);if(quoted&"ed.index==inner.from){let changes=state.changes([{from:prevLine.from+quoted.index,to:prevLine.to},{from:line.from+inner.from,to:line.to}]);return{range:range.map(changes),changes}}}let changes=[];if(inner.node.name==`OrderedList`)renumberList(inner.item,doc,changes);let continued=inner.item&&inner.item.from<line.from;let insert=``;if(!continued||/^[\s\d.)\-+*>]*/.exec(line.text)[0].length>=inner.to)for(let i=0,e=context.length-1;i<=e;i++)insert+=i==e&&!continued?context[i].marker(doc,1):context[i].blank(i<e?countColumn(line.text,4,context[i+1].from)-insert.length:null);let from=pos;while(from>line.from&&/\s/.test(line.text.charAt(from-line.from-1)))from--;insert=normalizeIndent(insert,state);if(nonTightList(inner.node,state.doc))insert=blankLine(context,state,line)+state.lineBreak+insert;changes.push({from,to:pos,insert:state.lineBreak+insert});return{range:EditorSelection.cursor(from+insert.length+1),changes}});if(dont)return false;dispatch(state.update(changes,{scrollIntoView:true,userEvent:`input`}));return true};var insertNewlineContinueMarkup=insertNewlineContinueMarkupCommand();function isMark(node){return node.name==`QuoteMark`||node.name==`ListMark`}function nonTightList(node,doc){if(node.name!=`OrderedList`&&node.name!=`BulletList`)return false;let first=node.firstChild,second=node.getChild(`ListItem`,`ListItem`);if(!second)return false;let line1=doc.lineAt(first.to),line2=doc.lineAt(second.from);let empty=/^[\s>]*$/.test(line1.text);return line1.number+(empty?0:1)<line2.number}function blankLine(context,state,line){let insert=``;for(let i=0,e=context.length-2;i<=e;i++)insert+=context[i].blank(i<e?countColumn(line.text,4,context[i+1].from)-insert.length:null,i<e);return normalizeIndent(insert,state)}function contextNodeForDelete(tree,pos){let node=tree.resolveInner(pos,-1),scan=pos;if(isMark(node)){scan=node.from;node=node.parent}for(let prev;prev=node.childBefore(scan);)if(isMark(prev))scan=prev.from;else if(prev.name==`OrderedList`||prev.name==`BulletList`){node=prev.lastChild;scan=node.to}else break;return node}var deleteMarkupBackward=({state,dispatch})=>{let tree=syntaxTree(state);let dont=null,changes=state.changeByRange(range=>{let pos=range.from,{doc}=state;if(range.empty&&markdownLanguage.isActiveAt(state,range.from)){let line=doc.lineAt(pos);let context=getContext(contextNodeForDelete(tree,pos),doc);if(context.length){let inner=context[context.length-1];let spaceEnd=inner.to-inner.spaceAfter.length+(inner.spaceAfter?1:0);if(pos-line.from>spaceEnd&&!/\S/.test(line.text.slice(spaceEnd,pos-line.from)))return{range:EditorSelection.cursor(line.from+spaceEnd),changes:{from:line.from+spaceEnd,to:pos}};if(pos-line.from==spaceEnd&&(inner.item&&line.from<=inner.item.from||/^[\s>]*$/.test(line.text.slice(0,inner.to)))){let start=line.from+inner.from;if(inner.item&&inner.node.from<inner.item.from&&/\S/.test(line.text.slice(inner.from,inner.to))){let insert=inner.blank(countColumn(line.text,4,inner.to)-countColumn(line.text,4,inner.from));if(start==line.from)insert=normalizeIndent(insert,state);return{range:EditorSelection.cursor(start+insert.length),changes:{from:start,to:line.from+inner.to,insert}}}if(start<pos)return{range:EditorSelection.cursor(start),changes:{from:start,to:pos}}}}}return dont={range}});if(dont)return false;dispatch(state.update(changes,{scrollIntoView:true,userEvent:`delete`}));return true};var markdownKeymap=[{key:`Enter`,run:insertNewlineContinueMarkup},{key:`Backspace`,run:deleteMarkupBackward}];var htmlNoMatch=html({matchClosingTags:false});function markdown(config={}){let{codeLanguages,defaultCodeLanguage,addKeymap=true,base:{parser}=commonmarkLanguage,completeHTMLTags=true,pasteURLAsLink:pasteURL=true,htmlTagLanguage=htmlNoMatch}=config;if(!(parser instanceof MarkdownParser))throw new RangeError("Base parser provided to `markdown` should be a Markdown parser");let extensions=config.extensions?[config.extensions]:[];let support=[htmlTagLanguage.support,headerIndent],defaultCode;if(pasteURL)support.push(pasteURLAsLink);if(defaultCodeLanguage instanceof LanguageSupport){support.push(defaultCodeLanguage.support);defaultCode=defaultCodeLanguage.language}else if(defaultCodeLanguage)defaultCode=defaultCodeLanguage;let codeParser=codeLanguages||defaultCode?getCodeParser(codeLanguages,defaultCode):void 0;extensions.push(parseCode({codeParser,htmlParser:htmlTagLanguage.language.parser}));if(addKeymap)support.push(Prec.high(keymap.of(markdownKeymap)));let lang=mkLang(parser.configure(extensions));if(completeHTMLTags)support.push(lang.data.of({autocomplete:htmlTagCompletion}));return new LanguageSupport(lang,support)}function htmlTagCompletion(context){let{state,pos}=context,m=/<[:\-\.\w\u00b7-\uffff]*$/.exec(state.sliceDoc(pos-25,pos));if(!m)return null;let tree=syntaxTree(state).resolveInner(pos,-1);while(tree&&!tree.type.isTop){if(tree.name==`CodeBlock`||tree.name==`FencedCode`||tree.name==`ProcessingInstructionBlock`||tree.name==`CommentBlock`||tree.name==`Link`||tree.name==`Image`)return null;tree=tree.parent}return{from:pos-m[0].length,to:pos,options:htmlTagCompletions(),validFor:/^<[:\-\.\w\u00b7-\uffff]*$/}}var _tagCompletions=null;function htmlTagCompletions(){if(_tagCompletions)return _tagCompletions;let result=htmlCompletionSource(new CompletionContext(EditorState.create({extensions:htmlNoMatch}),0,true));return _tagCompletions=result?result.options:[]}var nonPlainText=/code|horizontalrule|html|link|comment|processing|escape|entity|image|mark|url/i;var pasteURLAsLink=EditorView.domEventHandlers({paste:(event,view)=>{var _a;let{main}=view.state.selection;if(main.empty)return false;let link=(_a=event.clipboardData)===null||_a===void 0?void 0:_a.getData(`text/plain`);if(!link||!/^(https?:\/\/|mailto:|xmpp:|www\.)/.test(link))return false;if(/^www\./.test(link))link=`https://`+link;if(!markdownLanguage.isActiveAt(view.state,main.from,1))return false;let tree=syntaxTree(view.state),crossesNode=false;tree.iterate({from:main.from,to:main.to,enter:node=>{if(node.from>main.from||nonPlainText.test(node.name))crossesNode=true},leave:node=>{if(node.to<main.to)crossesNode=true}});if(crossesNode)return false;view.dispatch({changes:[{from:main.from,insert:`[`},{from:main.to,insert:`](${link})`}],userEvent:`input.paste`,scrollIntoView:true});return true}});var words={};function define(style,dict){for(var i=0;i<dict.length;i++)words[dict[i]]=style}var commonAtoms=[`true`,`false`];var commonKeywords=[`if`,`then`,`do`,`else`,`elif`,`while`,`until`,`for`,`in`,`esac`,`fi`,`fin`,`fil`,`done`,`exit`,`set`,`unset`,`export`,`function`];var commonCommands=[`ab`,`awk`,`bash`,`beep`,`cat`,`cc`,`cd`,`chown`,`chmod`,`chroot`,`clear`,`cp`,`curl`,`cut`,`diff`,`echo`,`find`,`gawk`,`gcc`,`get`,`git`,`grep`,`hg`,`kill`,`killall`,`ln`,`ls`,`make`,`mkdir`,`openssl`,`mv`,`nc`,`nl`,`node`,`npm`,`ping`,`ps`,`restart`,`rm`,`rmdir`,`sed`,`service`,`sh`,`shopt`,`shred`,`source`,`sort`,`sleep`,`ssh`,`start`,`stop`,`su`,`sudo`,`svn`,`tee`,`telnet`,`top`,`touch`,`vi`,`vim`,`wall`,`wc`,`wget`,`who`,`write`,`yes`,`zsh`];define(`atom`,commonAtoms);define(`keyword`,commonKeywords);define(`builtin`,commonCommands);function tokenBase(stream,state){if(stream.eatSpace())return null;var sol=stream.sol();var ch=stream.next();if(ch===`\\`){stream.next();return null}if(ch===`'`||ch===`"`||ch==="`"){state.tokens.unshift(tokenString(ch,ch==="`"?`quote`:`string`));return tokenize(stream,state)}if(ch===`#`){if(sol&&stream.eat(`!`)){stream.skipToEnd();return`meta`}stream.skipToEnd();return`comment`}if(ch===`$`){state.tokens.unshift(tokenDollar);return tokenize(stream,state)}if(ch===`+`||ch===`=`)return`operator`;if(ch===`-`){stream.eat(`-`);stream.eatWhile(/\w/);return`attribute`}if(ch==`<`){if(stream.match(`<<`))return`operator`;var heredoc=stream.match(/^<-?\s*(?:['"]([^'"]*)['"]|([^'"\s]*))/);if(heredoc){state.tokens.unshift(tokenHeredoc(heredoc[1]||heredoc[2]));return`string.special`}}if(/\d/.test(ch)){stream.eatWhile(/\d/);if(stream.eol()||!/\w/.test(stream.peek()))return`number`}stream.eatWhile(/[\w-]/);var cur=stream.current();if(stream.peek()===`=`&&/\w+/.test(cur))return`def`;return words.hasOwnProperty(cur)?words[cur]:null}function tokenString(quote,style){var close=quote==`(`?`)`:quote==`{`?`}`:quote;return function(stream,state){var next,escaped=false;while((next=stream.next())!=null){if(next===close&&!escaped){state.tokens.shift();break}else if(next===`$`&&!escaped&"e!==`'`&&stream.peek()!=close){escaped=true;stream.backUp(1);state.tokens.unshift(tokenDollar);break}else if(!escaped&"e!==close&&next===quote){state.tokens.unshift(tokenString(quote,style));return tokenize(stream,state)}else if(!escaped&&/['"]/.test(next)&&!/['"]/.test(quote)){state.tokens.unshift(tokenStringStart(next,`string`));stream.backUp(1);break}escaped=!escaped&&next===`\\`}return style}}function tokenStringStart(quote,style){return function(stream,state){state.tokens[0]=tokenString(quote,style);stream.next();return tokenize(stream,state)}}var tokenDollar=function(stream,state){if(state.tokens.length>1)stream.eat(`$`);var ch=stream.next();if(/['"({]/.test(ch)){state.tokens[0]=tokenString(ch,ch==`(`?`quote`:ch==`{`?`def`:`string`);return tokenize(stream,state)}if(!/\d/.test(ch))stream.eatWhile(/\w/);state.tokens.shift();return`def`};function tokenHeredoc(delim){return function(stream,state){if(stream.sol()&&stream.string==delim)state.tokens.shift();stream.skipToEnd();return`string.special`}}function tokenize(stream,state){return(state.tokens[0]||tokenBase)(stream,state)}var shell={name:`shell`,startState:function(){return{tokens:[]}},token:function(stream,state){return tokenize(stream,state)},languageData:{autocomplete:commonAtoms.concat(commonKeywords,commonCommands),closeBrackets:{brackets:[`(`,`[`,`{`,`'`,`"`,"`"]},commentTokens:{line:`#`}}};var _hoisted_1$4={class:`source-interface`,"aria-label":`File public interface`};var _hoisted_2$4={class:`source-interface__heading`};var _hoisted_3$4={class:`source-interface__modes`};var _hoisted_4$4={class:`source-interface__overview`,"aria-label":`File explanation`};var _hoisted_5$4={class:`source-interface__field-heading`};var _hoisted_6$4={key:2,class:`source-interface__hint`};var _hoisted_7$4={key:3,class:`source-interface__membership`,"aria-label":`Program membership`};var _hoisted_8$4={key:0,class:`source-interface__main`};var _hoisted_9$4={key:1};var _hoisted_10$4=[`onClick`];var _hoisted_11$4={key:4,class:`source-interface__hint`,role:`status`};var _hoisted_12$3=[`title`];var _hoisted_13$3={key:5,class:`source-interface__analysis`};var _hoisted_14$2={key:0,class:`source-interface__hint`};var _hoisted_15$2={key:1,class:`source-interface__hint`};var _hoisted_16$1={class:`source-interface__layout`};var _hoisted_17$1={class:`source-interface__symbols`,"aria-label":`Exported and public symbols`};var _hoisted_18$1=[`data-symbol-id`,`disabled`,`aria-pressed`,`onClick`];var _hoisted_19$1=[`title`];var _hoisted_20$1={key:0};var _hoisted_21$1={key:1};var _hoisted_22$1={key:0,class:`source-interface__detail`,"aria-label":`Selected symbol`};var _hoisted_23$1={key:0,class:`source-interface__hint`};var _hoisted_24$1={class:`source-interface__modes`,"aria-label":`Symbol presentation`};var _hoisted_25$1={key:0};var _hoisted_26$1={key:1,class:`source-interface__hint`};var _hoisted_27$1={key:2,class:`source-interface__code`};var _hoisted_28$1={key:0,class:`source-interface__hint`};var _hoisted_29$1={key:3,class:`source-interface__hint`};var _hoisted_30$1={key:0,class:`source-interface__hint`};var _sfc_main$5={__name:`Vibe64SourceInterface`,props:{filePath:String,fileHash:String,analysisError:String,symbols:{type:Array,default:()=>[]},programs:{type:Array,default:()=>[]},programStatus:String,interpretations:{type:Array,default:()=>[]},interpretationWarning:String,activeInterpretation:Boolean,activeFileInterpretation:Boolean,selectedId:String,current:Boolean,indexed:Boolean,dirty:Boolean,busy:Boolean,assistantAvailable:Boolean,assistantUnavailableMessage:String,source:String,presentation:{type:String,default:`description`},coverage:{type:String,default:`Partial static coverage`}},emits:[`select-symbol`,`present-symbol`,`explain-file`,`whole-file-code`,`open-source`,`open-program`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const orderedPrograms=computed(()=>[...props.programs.filter(program=>program.mainSource===props.filePath),...props.programs.filter(program=>program.mainSource!==props.filePath)]);function openProgramLink({event,href},sourcePath){const relative=href&&!/^(?:[a-z][a-z\d+.-]*:|\/|#)/iu.test(href);const target=sourceEditorLinkTarget({href:relative&&sourcePath?new URL(href,`https://source.invalid/${sourcePath}`).pathname.slice(1):href});if(!target)return;event?.preventDefault();const program=props.programs.find(program=>program.path===target.path);if(program)emit(`open-program`,program.id);else if(target.path!==`genesis/subsystems.md`&&!target.path.startsWith(`genesis/program/`))emit(`open-source`,target)}const selectedSymbol=computed(()=>props.symbols.find(symbol=>symbol.id===props.selectedId));const explanationDisabled=computed(()=>props.busy||props.dirty||!props.assistantAvailable);function signature(symbol){return(symbol.qualifiedName||symbol.name)+(Array.isArray(symbol.parameters)?`(${symbol.parameters.join(`, `)})`:``)}function saved(scope,symbolId,presentation){return props.interpretations.find(record=>record.path===props.filePath&&record.scope===scope&&(record.symbolId||``)===symbolId&&record.presentation===presentation)}function isCurrentInterpretation(record){return record.status===`current`&&record.fileHash===props.fileHash&&!props.dirty}const selectedInterpretation=computed(()=>saved(`selection`,selectedSymbol.value?.id||``,`steps`));const fileInterpretation=computed(()=>saved(`file`,``,`description`));const interpretationBlocks=computed(()=>parseLongTextReviewBlocks(selectedInterpretation.value?.body||``));return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$4,[createBaseVNode(`header`,_hoisted_2$4,[createBaseVNode(`h3`,null,toDisplayString(__props.filePath?.split(`/`).pop()),1),createBaseVNode(`div`,_hoisted_3$4,[createVNode(VBtn,{size:`small`,"min-height":`44`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`whole-file-code`))},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Code · whole file`,-1)])]),_:1})]),createBaseVNode(`p`,null,toDisplayString(__props.filePath),1)]),__props.analysisError?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,class:`mb-3`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.analysisError),1)]),_:1})):createCommentVNode(``,true),__props.dirty?(openBlock(),createBlock(VAlert,{key:1,type:`info`,variant:`tonal`,class:`mb-3`},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`This file has unsaved edits. Save before generating an explanation or using indexed symbol ranges.`,-1)])]),_:1})):!__props.current?(openBlock(),createBlock(VAlert,{key:2,type:`info`,variant:`tonal`,class:`mb-3`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.indexed?`Index out of date.`:`Symbols not indexed.`)+` Open whole-file Code. Update the index from Architecture → ⋯.`,1)]),_:1})):createCommentVNode(``,true),createBaseVNode(`section`,_hoisted_4$4,[createBaseVNode(`header`,_hoisted_5$4,[_cache[7]||(_cache[7]=createBaseVNode(`h4`,null,`Explanation`,-1)),fileInterpretation.value?(openBlock(),createElementBlock(`span`,{key:0,class:normalizeClass([`source-interface__freshness`,{"source-interface__freshness--stale":!isCurrentInterpretation(fileInterpretation.value)}])},toDisplayString(isCurrentInterpretation(fileInterpretation.value)?`Saved`:`Out of date`),3)):createCommentVNode(``,true),createVNode(VBtn,{size:`small`,"min-height":`44`,variant:`text`,disabled:explanationDisabled.value,onClick:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`explain-file`,Boolean(fileInterpretation.value)))},{default:withCtx(()=>[createTextVNode(toDisplayString(fileInterpretation.value?`Update explanation`:`Generate explanation`),1)]),_:1},8,[`disabled`])]),createBaseVNode(`div`,{class:normalizeClass([`source-interface__explanation`,{"source-interface__explanation--empty":!fileInterpretation.value&&!__props.activeFileInterpretation}])},[__props.activeFileInterpretation?renderSlot(_ctx.$slots,`explanation`,{savedBody:fileInterpretation.value?.body||``},void 0,true,0):fileInterpretation.value?(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:1,blocks:unref(parseLongTextReviewBlocks)(fileInterpretation.value.body),onLinkClick:openProgramLink},null,8,[`blocks`])):(openBlock(),createElementBlock(`p`,_hoisted_6$4,toDisplayString(!__props.assistantAvailable?`Choose an Explain & check model in Models to generate an explanation.`:`No explanation yet.`),1))],2)]),__props.programs.length?(openBlock(),createElementBlock(`nav`,_hoisted_7$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(orderedPrograms.value,program=>{return openBlock(),createElementBlock(`span`,{key:program.id},[program.mainSource===__props.filePath?(openBlock(),createElementBlock(`small`,_hoisted_8$4,`Main Program file`)):(openBlock(),createElementBlock(`span`,_hoisted_9$4,`Part of `)),createBaseVNode(`button`,{type:`button`,onClick:$event=>_ctx.$emit(`open-program`,program.id)},toDisplayString(program.title)+` →`,9,_hoisted_10$4)])}),128))])):createCommentVNode(``,true),__props.interpretationWarning?(openBlock(),createElementBlock(`p`,_hoisted_11$4,toDisplayString(__props.interpretationWarning),1)):createCommentVNode(``,true),createBaseVNode(`h4`,{class:`source-interface__exports-heading`,title:`${__props.coverage}. File exports may be internal to the subsystem. Unrecorded returns are omitted.`},[_cache[8]||(_cache[8]=createTextVNode(`File exports `,-1)),createBaseVNode(`span`,null,toDisplayString(__props.symbols.length),1)],8,_hoisted_12$3),__props.programStatus!==`valid`||!__props.assistantAvailable?(openBlock(),createElementBlock(`details`,_hoisted_13$3,[_cache[9]||(_cache[9]=createBaseVNode(`summary`,null,`Analysis details`,-1)),__props.programStatus!==`valid`?(openBlock(),createElementBlock(`p`,_hoisted_14$2,`Program unavailable.`)):createCommentVNode(``,true),!__props.assistantAvailable?(openBlock(),createElementBlock(`p`,_hoisted_15$2,toDisplayString(__props.assistantUnavailableMessage||`A Helper is needed to generate explanations.`),1)):createCommentVNode(``,true)])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_16$1,[createBaseVNode(`nav`,_hoisted_17$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.symbols,symbol=>{return openBlock(),createElementBlock(`div`,{key:symbol.id,class:`source-interface__symbol-row`},[createBaseVNode(`button`,{class:normalizeClass([`source-interface__symbol`,{"source-interface__symbol--selected":symbol.id===__props.selectedId}]),type:`button`,"data-symbol-id":symbol.id,disabled:!__props.current||__props.dirty,"aria-pressed":symbol.id===__props.selectedId,onClick:$event=>_ctx.$emit(`select-symbol`,symbol.id)},[createBaseVNode(`small`,null,toDisplayString(symbol.kind),1),createBaseVNode(`code`,{title:signature(symbol)},toDisplayString(signature(symbol)),9,_hoisted_19$1),symbol.returnType?(openBlock(),createElementBlock(`span`,_hoisted_20$1,`Returns: `+toDisplayString(symbol.returnType),1)):createCommentVNode(``,true),!symbol.rangeAvailable||symbol.visibilityScope&&symbol.visibilityScope!==`public`?(openBlock(),createElementBlock(`span`,_hoisted_21$1,toDisplayString(symbol.rangeAvailable?``:`Range unavailable`)+toDisplayString(symbol.visibilityScope&&symbol.visibilityScope!==`public`?` · Visibility: ${symbol.visibilityScope}`:``),1)):createCommentVNode(``,true)],10,_hoisted_18$1),symbol.id===__props.selectedId?(openBlock(),createElementBlock(`section`,_hoisted_22$1,[selectedSymbol.value.returnType?(openBlock(),createElementBlock(`p`,_hoisted_23$1,`Returns: `+toDisplayString(selectedSymbol.value.returnType),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_24$1,[Array.isArray(selectedSymbol.value.parameters)?(openBlock(),createElementBlock(`h4`,_hoisted_25$1,`Pseudocode`)):createCommentVNode(``,true),__props.presentation===`code`&&selectedInterpretation.value?(openBlock(),createBlock(VBtn,{key:1,size:`small`,"min-height":`44`,variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>_ctx.$emit(`select-symbol`,__props.selectedId))},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(`Pseudocode`,-1)])]),_:1})):createCommentVNode(``,true),Array.isArray(selectedSymbol.value.parameters)?(openBlock(),createBlock(VBtn,{key:2,size:`small`,"min-height":`44`,variant:`text`,disabled:!selectedSymbol.value.rangeAvailable||!__props.current||__props.dirty||explanationDisabled.value,onClick:_cache[3]||(_cache[3]=$event=>_ctx.$emit(`present-symbol`,`steps`,Boolean(selectedInterpretation.value)))},{default:withCtx(()=>[createTextVNode(toDisplayString(selectedInterpretation.value?`Update pseudocode`:`Generate pseudocode`),1)]),_:1},8,[`disabled`])):createCommentVNode(``,true),createVNode(VBtn,{size:`small`,"min-height":`44`,variant:`text`,disabled:!selectedSymbol.value.rangeAvailable||!__props.current||__props.dirty,onClick:_cache[4]||(_cache[4]=$event=>_ctx.$emit(`present-symbol`,`code`))},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Code`,-1)])]),_:1},8,[`disabled`])]),Array.isArray(selectedSymbol.value.parameters)&&!__props.assistantAvailable&&!saved(`selection`,__props.selectedId,`steps`)?(openBlock(),createElementBlock(`p`,_hoisted_26$1,`Choose a Helper to generate pseudocode.`)):createCommentVNode(``,true),__props.presentation===`code`?(openBlock(),createElementBlock(`pre`,_hoisted_27$1,[createBaseVNode(`code`,null,toDisplayString(__props.source),1)])):Array.isArray(selectedSymbol.value.parameters)?(openBlock(),createElementBlock(Fragment,{key:3},[selectedInterpretation.value?(openBlock(),createElementBlock(`p`,_hoisted_28$1,toDisplayString(isCurrentInterpretation(selectedInterpretation.value)?`Saved · matches source`:`Out of date · source or guidance changed`),1)):createCommentVNode(``,true),__props.activeInterpretation?renderSlot(_ctx.$slots,`explanation`,{savedBody:selectedInterpretation.value?.body||``},void 0,true,1):selectedInterpretation.value?(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:2,blocks:interpretationBlocks.value,onLinkClick:openProgramLink},null,8,[`blocks`])):(openBlock(),createElementBlock(`p`,_hoisted_29$1,`No pseudocode yet.`))],64)):createCommentVNode(``,true)])):createCommentVNode(``,true)])}),128)),!__props.symbols.length?(openBlock(),createElementBlock(`p`,_hoisted_30$1,toDisplayString(__props.current?`No exports recorded; analysis may be incomplete.`:`Open whole-file Code.`),1)):createCommentVNode(``,true)])])])}}};var Vibe64SourceInterface_default=_plugin_vue_export_helper_default(_sfc_main$5,[[`__scopeId`,`data-v-a49d0855`]]);var _hoisted_1$3=[`aria-busy`];var _hoisted_2$3={key:1,class:`source-explanation-document__progress`,role:`status`};var _hoisted_3$3={key:2,class:`source-explanation-document__activity`,open:``};var _hoisted_4$3={key:3,class:`source-explanation-document__progress`,role:`status`};var _hoisted_5$3=[`aria-busy`];var _hoisted_6$3={class:`vibe64-source-explanation__header`};var _hoisted_7$3={class:`vibe64-source-explanation__source`};var _hoisted_8$3=[`title`];var _hoisted_9$3={class:`vibe64-source-explanation__range-path`};var _hoisted_10$3={key:0,class:`vibe64-source-explanation__range-suffix`};var _hoisted_11$3={key:0,class:`vibe64-source-explanation__thinking`};var _hoisted_12$2={key:3,class:`vibe64-source-explanation__status vibe64-source-explanation__status--stopped`};var _hoisted_13$2={key:1,class:`vibe64-source-explanation__recovery`,"aria-label":`Explanation controls`};var _hoisted_14$1={class:`vibe64-source-explanation__recovery-actions`};var _hoisted_15$1={class:`vibe64-source-explanation__followup-footer`};var _sfc_main$4={__name:`Vibe64SourceExplanationPanel`,props:{embedded:Boolean,savedBody:{type:String,default:``},assistantAvailable:{default:true,type:Boolean},assistantUnavailableMessage:{default:`The selected AI connection is unavailable for this account.`,type:String},busy:{default:false,type:Boolean},closing:{default:false,type:Boolean},explanation:{default:()=>({body:``,followups:[],messages:[],sourceRange:{},summary:``,title:``}),type:Object},followup:{default:``,type:String},selectedPath:{default:``,type:String}},emits:[`collapse`,`close`,`open-range`,`open-source-link`,`retry`,`send-followup`,`stop`,`update:followup`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const threadElement=ref(null);const threadBottomElement=ref(null);const followingLatest=ref(true);const assistantLabel=computed(()=>{const profile=props.explanation?.executionProfile;if(!profile?.providerId||!profile?.model)return`Assistant`;return vibe64AssistantSelectionLabel({engineId:profile.providerId,modelId:profile.model,variantId:profile.thinking})});const chatMessages=computed(()=>(Array.isArray(props.explanation?.messages)&&props.explanation.messages.length?props.explanation.messages:[...props.explanation?.body?[{id:`body`,role:`assistant`,text:props.explanation.body}]:[],...Array.isArray(props.explanation?.followups)?props.explanation.followups:[]]).map(message=>({...message,blocks:parseLongTextReviewBlocks(message.text||``,{preserveParagraphLineBreaks:message.role===`user`})})));const documentBody=computed(()=>props.explanation?.body||props.savedBody||chatMessages.value.findLast(message=>message.role===`assistant`&&message.status===`complete`)?.text||``);const documentBlocks=computed(()=>parseLongTextReviewBlocks(documentBody.value));const documentProgress=computed(()=>chatMessages.value.findLast(message=>message.role===`assistant`&&message.status===`thinking`)?.text||``);const documentFailure=computed(()=>chatMessages.value.findLast(message=>message.role===`assistant`&&message.status===`failed`)?.text||``);const followupAvailable=computed(()=>Boolean(props.explanation?.status!==`failed`&&(props.explanation?.agentThreadId||props.explanation?.engine===`agent-cache`)&&(String(props.explanation?.body||``).trim()||chatMessages.value.some(message=>message.role===`assistant`&&message.status===`complete`&&message.text))));const sourceRange=computed(()=>props.explanation?.sourceRange||{});const sourceRangeFullLabel=computed(()=>sourceRangeDisplayLabel(sourceRange.value,{compact:false}));const sourceRangePathLabel=computed(()=>sourceRangePathDisplayLabel(sourceRange.value));const sourceRangeSuffixLabel=computed(()=>sourceRangeLineSuffix(sourceRange.value));const threadScrollKey=computed(()=>chatMessages.value.map(message=>[message.id||``,message.role||``,message.status||``,String(message.text||``).length].join(`:`)).join(`|`));const{scrollAfterLayout:scrollThreadToBottom}=useScrollToBottom({anchor:threadBottomElement,enabled:computed(()=>followingLatest.value),scrollAnchorIntoView:false,target:threadElement});function normalizePanelSourcePath(value=``){return String(value||``).trim().replaceAll(`\\`,`/`).replace(/^\.\/+/u,``)}function sourceRangeLineSuffix({endLine,startLine}={}){const start=Number(startLine);const end=Number(endLine);if(!Number.isFinite(start)||start<1)return``;if(!Number.isFinite(end)||end<1||end===start)return`:${start}`;return`:${start}-${end}`}function compactSourcePath(path=``,{maxLength=36}={}){const normalized=normalizePanelSourcePath(path);if(normalized.length<=maxLength)return normalized;return`...${normalized.slice(-maxLength)}`}function sourceRangePathDisplayLabel(range={}){const path=normalizePanelSourcePath(range?.path);if(!path)return`Source`;return compactSourcePath(path)}function sourceRangeDisplayLabel(range={},{compact=true}={}){const path=normalizePanelSourcePath(range?.path);if(!path)return`Source`;return`${compact?compactSourcePath(path):path}${sourceRangeLineSuffix(range)}`}function submitFollowup(){if(!props.assistantAvailable||!props.followup.trim()||props.busy||props.closing||!followupAvailable.value)return;emit(`send-followup`)}function queueThreadBottomScroll({force=false}={}){if(props.embedded)return;if(force)followingLatest.value=true;scrollThreadToBottom({behavior:force?`auto`:`smooth`})}function updateThreadFollowState(event={}){followingLatest.value=scrollElementNearBottom(event?.currentTarget||threadElement.value)}function handleExplanationLinkClick(payload={}){const target=sourceEditorLinkTarget(payload);if(!target)return;payload.event?.preventDefault?.();payload.event?.stopPropagation?.();emit(`open-source-link`,target)}watch(()=>props.explanation?.id||``,()=>{queueThreadBottomScroll({force:true})},{flush:`post`,immediate:true});watch(threadScrollKey,(value,previous)=>{if(!value||value===previous)return;queueThreadBottomScroll({force:chatMessages.value.at(-1)?.role===`user`})},{flush:`post`});return(_ctx,_cache)=>{return __props.embedded?(openBlock(),createElementBlock(`section`,{key:0,class:`source-explanation-document`,"aria-busy":__props.busy||__props.closing,"aria-label":`Generated explanation`},[documentBody.value?(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:0,blocks:documentBlocks.value,onLinkClick:handleExplanationLinkClick},null,8,[`blocks`])):createCommentVNode(``,true),__props.busy||__props.closing?(openBlock(),createElementBlock(`div`,_hoisted_2$3,[createBaseVNode(`span`,null,toDisplayString(__props.closing?`Stopping…`:`Generating explanation…`),1),!__props.closing?(openBlock(),createBlock(VBtn,{key:0,size:`small`,"min-height":`44`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>emit(`stop`))},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Stop`,-1)])]),_:1})):createCommentVNode(``,true)])):createCommentVNode(``,true),__props.busy&&documentProgress.value?(openBlock(),createElementBlock(`details`,_hoisted_3$3,[_cache[10]||(_cache[10]=createBaseVNode(`summary`,null,`Progress`,-1)),createVNode(unref(LongTextPreviewBlocks_default),{blocks:unref(parseLongTextReviewBlocks)(documentProgress.value),onLinkClick:handleExplanationLinkClick},null,8,[`blocks`])])):!__props.busy&&!__props.closing&&[`failed`,`stopped`].includes(__props.explanation.status)?(openBlock(),createElementBlock(`div`,_hoisted_4$3,[createBaseVNode(`span`,null,toDisplayString(__props.explanation.status===`stopped`?`Generation stopped.`:documentFailure.value||`Generation failed.`),1),createVNode(VBtn,{size:`small`,"min-height":`44`,variant:`text`,disabled:!__props.assistantAvailable,onClick:_cache[1]||(_cache[1]=$event=>emit(`retry`))},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Retry`,-1)])]),_:1},8,[`disabled`])])):createCommentVNode(``,true)],8,_hoisted_1$3)):(openBlock(),createElementBlock(`aside`,{key:1,"aria-busy":__props.busy||__props.closing?`true`:`false`,class:normalizeClass([`vibe64-source-explanation`,{"vibe64-source-explanation--embedded":__props.embedded}]),"aria-label":`Source explanation`},[createBaseVNode(`header`,_hoisted_6$3,[createBaseVNode(`div`,_hoisted_7$3,[createBaseVNode(`button`,{class:`vibe64-source-explanation__range`,title:sourceRangeFullLabel.value,type:`button`,onClick:_cache[2]||(_cache[2]=$event=>emit(`open-range`,__props.explanation))},[createBaseVNode(`span`,_hoisted_9$3,toDisplayString(sourceRangePathLabel.value),1),sourceRangeSuffixLabel.value?(openBlock(),createElementBlock(`span`,_hoisted_10$3,toDisplayString(sourceRangeSuffixLabel.value),1)):createCommentVNode(``,true)],8,_hoisted_8$3),__props.explanation.stale?(openBlock(),createBlock(VChip,{key:0,color:`warning`,size:`x-small`,variant:`tonal`},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(` Stale `,-1)])]),_:1})):createCommentVNode(``,true)]),!__props.embedded?(openBlock(),createBlock(VBtn,{key:0,class:`vibe64-source-explanation__action-target`,"aria-label":`Collapse explanation`,icon:unref(mdiChevronRight),size:`small`,title:`Collapse explanation`,type:`button`,variant:`text`,onClick:_cache[3]||(_cache[3]=$event=>emit(`collapse`,$event))},null,8,[`icon`])):createCommentVNode(``,true),createVNode(VBtn,{class:`vibe64-source-explanation__action-target vibe64-source-explanation__close-button`,"aria-busy":__props.closing?`true`:void 0,"aria-label":`Close explanation`,disabled:__props.closing,"prepend-icon":unref(mdiClose),size:`x-small`,title:__props.closing?`Closing explanation`:`Close explanation`,type:`button`,variant:`text`,onClick:_cache[4]||(_cache[4]=$event=>emit(`close`,$event))},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.closing?`Closing…`:`Close`),1)]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`,`title`])]),__props.explanation.stale?(openBlock(),createBlock(VAlert,{key:0,class:`vibe64-source-explanation__stale`,density:`compact`,type:`warning`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.explanation.staleReason||`The source changed after this explanation was created.`),1)]),_:1})):createCommentVNode(``,true),createBaseVNode(`section`,{ref_key:`threadElement`,ref:threadElement,class:`vibe64-source-explanation__thread`,"aria-label":`Explanation chat`,tabindex:`0`,onScroll:updateThreadFollowState},[(openBlock(true),createElementBlock(Fragment,null,renderList(chatMessages.value,message=>{return openBlock(),createElementBlock(`article`,{key:message.id,class:normalizeClass([`vibe64-source-explanation__message`,[`vibe64-source-explanation__message--${message.role}`,{"vibe64-source-explanation__message--failed":message.status===`failed`,"vibe64-source-explanation__message--thinking":message.status===`thinking`}]])},[createBaseVNode(`strong`,null,toDisplayString(message.role===`user`?`You`:assistantLabel.value),1),message.status===`thinking`?(openBlock(),createElementBlock(`div`,_hoisted_11$3,[message.text?(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:0,compact:``,class:`vibe64-source-explanation__thinking-detail`,blocks:message.blocks,onLinkClick:handleExplanationLinkClick},null,8,[`blocks`])):createCommentVNode(``,true),_cache[13]||(_cache[13]=createBaseVNode(`div`,{class:`vibe64-source-explanation__status`,role:`status`},[createBaseVNode(`span`,{"aria-hidden":`true`,class:`vibe64-source-explanation__status-mark`}),createBaseVNode(`span`,null,`Thinking…`)],-1))])):message.status===`failed`&&message.text?(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:1,class:`vibe64-source-explanation__failure-detail`,blocks:message.blocks,onLinkClick:handleExplanationLinkClick},null,8,[`blocks`])):message.text?(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:2,blocks:message.blocks,onLinkClick:handleExplanationLinkClick},null,8,[`blocks`])):message.status===`stopped`?(openBlock(),createElementBlock(`div`,_hoisted_12$2,` Stopped. `)):createCommentVNode(``,true)],2)}),128)),createBaseVNode(`div`,{ref_key:`threadBottomElement`,ref:threadBottomElement,class:`vibe64-source-explanation__thread-bottom`},null,512)],544),!followupAvailable.value?(openBlock(),createElementBlock(`section`,_hoisted_13$2,[createBaseVNode(`p`,null,toDisplayString(__props.closing?`Closing…`:__props.busy?`Waiting for the explanation…`:`No explanation was produced. Check the assistant provider, then retry.`),1),createBaseVNode(`div`,_hoisted_14$1,[__props.busy&&!__props.closing?(openBlock(),createBlock(VBtn,{key:0,class:`vibe64-source-explanation__action-target`,"aria-label":`Stop explanation`,color:`error`,icon:unref(mdiStop),size:`small`,title:`Stop explanation`,type:`button`,variant:`tonal`,onClick:_cache[5]||(_cache[5]=$event=>emit(`stop`))},null,8,[`icon`])):(openBlock(),createBlock(VBtn,{key:1,class:`vibe64-source-explanation__action-target`,color:`primary`,disabled:__props.closing||!__props.assistantAvailable,"prepend-icon":unref(mdiRefresh),size:`small`,title:__props.assistantAvailable?`Retry explanation`:__props.assistantUnavailableMessage,type:`button`,variant:`flat`,onClick:_cache[6]||(_cache[6]=$event=>emit(`retry`))},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(` Retry explanation `,-1)])]),_:1},8,[`disabled`,`prepend-icon`,`title`]))])])):(openBlock(),createElementBlock(`form`,{key:2,class:`vibe64-source-explanation__followup`,onSubmit:withModifiers(submitFollowup,[`prevent`])},[createVNode(_sfc_main$11,{"attachments-enabled":false,"auto-grow":true,disabled:__props.busy||__props.closing||!__props.assistantAvailable,label:`Ask about this explanation`,"model-value":__props.followup,placeholder:`Ask a follow-up`,rows:`1`,onSubmit:submitFollowup,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>emit(`update:followup`,$event))},{footer:withCtx(()=>[createBaseVNode(`div`,_hoisted_15$1,[__props.busy&&!__props.closing?(openBlock(),createBlock(VBtn,{key:0,class:`vibe64-source-explanation__action-target`,"aria-label":`Stop explanation`,color:`error`,icon:unref(mdiStop),size:`small`,title:`Stop explanation`,type:`button`,variant:`tonal`,onClick:_cache[7]||(_cache[7]=$event=>emit(`stop`))},null,8,[`icon`])):createCommentVNode(``,true),createVNode(VBtn,{class:`vibe64-source-explanation__action-target`,"aria-label":`Send follow-up`,color:`primary`,disabled:!__props.followup.trim()||__props.busy||__props.closing||!__props.assistantAvailable,icon:unref(mdiSend),size:`small`,title:__props.assistantAvailable?`Send follow-up`:__props.assistantUnavailableMessage,type:`submit`,variant:`flat`},null,8,[`disabled`,`icon`,`title`])])]),_:1},8,[`disabled`,`model-value`])],32))],10,_hoisted_5$3))}}};var Vibe64SourceExplanationPanel_default=_plugin_vue_export_helper_default(_sfc_main$4,[[`__scopeId`,`data-v-912cbb81`]]);var _hoisted_1$2={class:`vibe64-source-tree`};var _hoisted_2$2={class:`vibe64-source-tree__row`};var _hoisted_3$2=[`data-vibe64-guide-path`,`title`,`onClick`];var _hoisted_4$2=[`title`,`onClick`];var _hoisted_5$2={key:1,class:`vibe64-source-tree__chevron-spacer`,"aria-hidden":`true`};var _hoisted_6$2={key:0,class:`vibe64-source-tree__directory`};var _hoisted_7$2={key:0,class:`vibe64-source-tree__notice`};var _hoisted_8$2={key:1,class:`vibe64-source-tree__notice vibe64-source-tree__notice--error`};var _hoisted_9$2={key:2,class:`vibe64-source-tree__notice`};var _hoisted_10$2={key:0,class:`vibe64-source-tree__item`};var _hoisted_11$2=[`disabled`,`title`];var _hoisted_12$1={key:0};var _hoisted_13$1={key:1};var DIRECTORY_BATCH_SIZE=20;var _sfc_main$3={__name:`Vibe64SourceFileTree`,props:{starredPaths:{type:Array,default:()=>[]},expandedPaths:{default:()=>[],type:Array},loadErrors:{default:()=>({}),type:Object},loadingPaths:{default:()=>[],type:Array},node:{default:null,type:Object},selectedPath:{default:``,type:String},depth:{default:0,type:Number},askCodexAvailable:{default:false,type:Boolean}},emits:[`ask-codex`,`copy-path`,`directory-open-change`,`download-file`,`load-more-directory`,`new-file`,`open-file`,`toggle-star`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const nodes=computed(()=>Array.isArray(props.node?.children)?props.node.children:[]);const visibleNodes=computed(()=>nodes.value);const nodeHasMore=computed(()=>props.node?.hasMore===true);const currentNodeLoading=computed(()=>pathLoading(props.node?.path||``));const nextHiddenNodeCount=computed(()=>{const loadedCount=nodes.value.length;const totalCount=Number(props.node?.total||0);return totalCount>loadedCount?Math.min(DIRECTORY_BATCH_SIZE,totalCount-loadedCount):DIRECTORY_BATCH_SIZE});const nodeLabel=computed(()=>props.node?.path||props.node?.name||`source`);const expandedPathSet=computed(()=>new Set((Array.isArray(props.expandedPaths)?props.expandedPaths:[]).map(path=>normalizeTreePath(path)).filter(Boolean)));const loadingPathSet=computed(()=>new Set((Array.isArray(props.loadingPaths)?props.loadingPaths:[]).map(path=>normalizeTreePath(path))));function normalizeTreePath(value=``){return String(value||``).trim().replaceAll(`\\`,`/`).replace(/^\.\/+/u,``)}function directoryExpandable(node={}){return node.type===`directory`&&(node.loaded!==true||node.hasMore===true||Array.isArray(node.children)&&node.children.length>0)}function directoryKey(node={}){return normalizeTreePath(node.path||node.name||``)}function directoryOpen(node={}){return expandedPathSet.value.has(directoryKey(node))}function pathLoading(path=``){return loadingPathSet.value.has(normalizeTreePath(path))}function directoryLoading(node={}){return pathLoading(directoryKey(node))}function directoryLoadError(node={}){return String(props.loadErrors?.[directoryKey(node)]||``)}function directoryChildCount(node={}){return Array.isArray(node.children)?node.children.length:0}function toggleDirectory(node={}){const key=directoryKey(node);if(!key)return;emit(`directory-open-change`,{open:!directoryOpen(node),path:key})}function showMore(){emit(`load-more-directory`,props.node?.path||``)}return(_ctx,_cache)=>{const _component_Vibe64SourceFileTree=resolveComponent(`Vibe64SourceFileTree`,true);return openBlock(),createElementBlock(`ul`,_hoisted_1$2,[(openBlock(true),createElementBlock(Fragment,null,renderList(visibleNodes.value,child=>{return openBlock(),createElementBlock(`li`,{key:child.path||child.name,class:`vibe64-source-tree__item`},[createBaseVNode(`div`,_hoisted_2$2,[child.type===`file`?(openBlock(),createElementBlock(`button`,{key:0,class:normalizeClass([`vibe64-source-tree__button`,{"vibe64-source-tree__button--active":child.path===__props.selectedPath}]),"data-vibe64-guide-path":child.path||void 0,title:child.path||child.name||`source`,type:`button`,onClick:$event=>emit(`open-file`,child.path)},[createVNode(VIcon,{icon:unref(mdiFileDocumentOutline),size:`15`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(child.name),1),__props.starredPaths.includes(child.path)?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiStar),size:`14`,"aria-label":`Starred`},null,8,[`icon`])):createCommentVNode(``,true)],10,_hoisted_3$2)):(openBlock(),createElementBlock(`button`,{key:1,class:`vibe64-source-tree__button vibe64-source-tree__button--directory`,title:child.path||child.name||`source`,type:`button`,onClick:$event=>toggleDirectory(child)},[directoryExpandable(child)?(openBlock(),createBlock(VIcon,{key:0,class:normalizeClass([`vibe64-source-tree__chevron`,{"vibe64-source-tree__chevron--open":directoryOpen(child)}]),icon:unref(mdiChevronRight),size:`14`},null,8,[`class`,`icon`])):(openBlock(),createElementBlock(`span`,_hoisted_5$2)),createVNode(VIcon,{icon:unref(mdiFolderOutline),size:`15`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(child.name||`source`),1)],8,_hoisted_4$2)),createVNode(VMenu,{location:`bottom end`},{activator:withCtx(({props:activatorProps})=>[createVNode(VBtn,mergeProps({ref_for:true},activatorProps,{"aria-label":`Actions for ${child.path||child.name||`source`}`,class:`vibe64-source-tree__menu-button`,icon:unref(mdiDotsVertical),size:`x-small`,title:`Actions for ${child.path||child.name||`source`}`,type:`button`,variant:`text`,onClick:_cache[0]||(_cache[0]=withModifiers(()=>{},[`stop`]))}),null,16,[`aria-label`,`icon`,`title`])]),default:withCtx(()=>[createVNode(VList,{class:`vibe64-source-tree__menu`,density:`compact`},{default:withCtx(()=>[child.type===`file`?(openBlock(),createBlock(VListItem,{key:0,"prepend-icon":__props.starredPaths.includes(child.path)?unref(mdiStar):unref(mdiStarOutline),title:__props.starredPaths.includes(child.path)?`Unstar file`:`Star file`,onClick:$event=>emit(`toggle-star`,child.path)},null,8,[`prepend-icon`,`title`,`onClick`])):createCommentVNode(``,true),child.type===`file`?(openBlock(),createBlock(VListItem,{key:1,"prepend-icon":unref(mdiDownload),title:`Download file`,onClick:$event=>emit(`download-file`,child.path)},null,8,[`prepend-icon`,`onClick`])):createCommentVNode(``,true),child.type===`directory`?(openBlock(),createBlock(VListItem,{key:2,"prepend-icon":unref(mdiFilePlusOutline),title:`New file here`,onClick:$event=>emit(`new-file`,child.path||``)},null,8,[`prepend-icon`,`onClick`])):createCommentVNode(``,true),createVNode(VListItem,{"prepend-icon":unref(mdiContentCopy),title:`Copy path`,onClick:$event=>emit(`copy-path`,child.path||child.name||``)},null,8,[`prepend-icon`,`onClick`]),child.type===`file`&&__props.askCodexAvailable?(openBlock(),createBlock(VListItem,{key:3,"prepend-icon":unref(mdiRobotOutline),title:`Ask the AI assistant about this file`,onClick:$event=>emit(`ask-codex`,child.path||``)},null,8,[`prepend-icon`,`onClick`])):createCommentVNode(``,true)]),_:2},1024)]),_:2},1024)]),child.type!==`file`&&directoryOpen(child)?(openBlock(),createElementBlock(`div`,_hoisted_6$2,[createVNode(_component_Vibe64SourceFileTree,{node:child,"ask-codex-available":__props.askCodexAvailable,"selected-path":__props.selectedPath,"starred-paths":__props.starredPaths,"expanded-paths":__props.expandedPaths,"load-errors":__props.loadErrors,"loading-paths":__props.loadingPaths,depth:__props.depth+1,onLoadMoreDirectory:_cache[1]||(_cache[1]=$event=>emit(`load-more-directory`,$event)),onOpenFile:_cache[2]||(_cache[2]=$event=>emit(`open-file`,$event)),onToggleStar:_cache[3]||(_cache[3]=$event=>emit(`toggle-star`,$event)),onDownloadFile:_cache[4]||(_cache[4]=$event=>emit(`download-file`,$event)),onDirectoryOpenChange:_cache[5]||(_cache[5]=$event=>emit(`directory-open-change`,$event)),onNewFile:_cache[6]||(_cache[6]=$event=>emit(`new-file`,$event)),onCopyPath:_cache[7]||(_cache[7]=$event=>emit(`copy-path`,$event)),onAskCodex:_cache[8]||(_cache[8]=$event=>emit(`ask-codex`,$event))},null,8,[`node`,`ask-codex-available`,`selected-path`,`starred-paths`,`expanded-paths`,`load-errors`,`loading-paths`,`depth`]),directoryLoading(child)?(openBlock(),createElementBlock(`div`,_hoisted_7$2,` Loading... `)):directoryLoadError(child)?(openBlock(),createElementBlock(`div`,_hoisted_8$2,toDisplayString(directoryLoadError(child)),1)):directoryOpen(child)&&child.loaded&&!directoryChildCount(child)&&!child.hasMore?(openBlock(),createElementBlock(`div`,_hoisted_9$2,` Empty directory. `)):createCommentVNode(``,true)])):createCommentVNode(``,true)])}),128)),nodeHasMore.value?(openBlock(),createElementBlock(`li`,_hoisted_10$2,[createBaseVNode(`button`,{class:`vibe64-source-tree__button vibe64-source-tree__button--more`,disabled:currentNodeLoading.value,title:`Load ${nextHiddenNodeCount.value} more entries in ${nodeLabel.value}`,type:`button`,onClick:showMore},[createVNode(VIcon,{icon:unref(mdiDotsHorizontal),size:`15`},null,8,[`icon`]),currentNodeLoading.value?(openBlock(),createElementBlock(`span`,_hoisted_12$1,`Loading...`)):(openBlock(),createElementBlock(`span`,_hoisted_13$1,`Load `+toDisplayString(nextHiddenNodeCount.value)+` more`,1))],8,_hoisted_11$2)])):createCommentVNode(``,true)])}}};var Vibe64SourceFileTree_default=_plugin_vue_export_helper_default(_sfc_main$3,[[`__scopeId`,`data-v-52fca260`]]);function parseJsonStreamEvent(event){try{return JSON.parse(event?.data||`{}`)}catch{return{}}}function useVibe64SourceEditorFileSync({active=true,onChange=null,onError=null,onReady=null,path=``,sessionId=``,sessionsApiPath=``}={}){let eventSource=null;function currentValue(value){return String(readRefOrGetterValue(value)||``).trim()}function isActive(){return readRefOrGetterValue(active)!==false}function close(){eventSource?.close?.();eventSource=null}function start(){close();const currentPath=currentValue(path);const currentSessionId=currentValue(sessionId);const currentSessionsApiPath=currentValue(sessionsApiPath);if(!isActive()||!currentPath||!currentSessionId||!currentSessionsApiPath||typeof EventSource!==`function`)return;let source;try{source=new EventSource(resolveStudioRequestUrl(vibe64SourceEditorChangesStreamPath(currentSessionsApiPath,currentSessionId,currentPath)),{withCredentials:true})}catch(error){onError?.({error:String(error?.message||error||`Source file observation could not start.`),fatal:true});return}eventSource=source;const isCurrent=()=>eventSource===source;source.addEventListener(VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,event=>{if(isCurrent())onChange?.(parseJsonStreamEvent(event))});source.addEventListener(VIBE64_SOURCE_EDITOR_SYNC_READY_EVENT,event=>{if(!isCurrent())return;onReady?.(parseJsonStreamEvent(event))});source.addEventListener(VIBE64_SOURCE_EDITOR_SYNC_ERROR_EVENT,event=>{if(isCurrent()){const payload=parseJsonStreamEvent(event);onError?.(payload);if(payload.fatal===true)close()}});source.onerror=()=>{if(isCurrent())onError?.({error:`Source file observation disconnected.`,transient:true})}}watch([()=>isActive(),()=>currentValue(path),()=>currentValue(sessionId),()=>currentValue(sessionsApiPath)],start,{immediate:true});onBeforeUnmount(close)}var SOURCE_EDITOR_AUTOSAVE_DELAY_MS=700;var SOURCE_EDITOR_FILE_MATCH_DELAY_MS=120;var SOURCE_EDITOR_SEARCH_DELAY_MS=260;var SOURCE_EDITOR_TREE_PAGE_SIZE=20;var SOURCE_EDITOR_REMOTE_CHANGE_MESSAGE=`This file changed in another window. Reload it before saving.`;var sourceExplanationClientIdCounter=0;function normalizeEditorPath(value=``){return String(value||``).trim().replaceAll(`\\`,`/`).replace(/^\.\/+/u,``)}function normalizeSourceEditorSyncValue(value=``){return String(value||``).trim()}function sourceEditorFileChangePayloadMatches({originId=vibe64BrowserTabOriginId(),path=``,payload={},projectSlug=``,sessionId=``}={}){const normalizedPath=normalizeEditorPath(path);const normalizedProjectSlug=normalizeSourceEditorSyncValue(projectSlug);const normalizedSessionId=normalizeSourceEditorSyncValue(sessionId);if(!normalizedPath||!normalizedProjectSlug||!normalizedSessionId||normalizeEditorPath(payload?.path)!==normalizedPath||normalizeSourceEditorSyncValue(payload?.projectSlug)!==normalizedProjectSlug||normalizeSourceEditorSyncValue(payload?.sessionId)!==normalizedSessionId||vibe64RealtimePayloadFromCurrentTab(payload,{originId}))return false;return Boolean(normalizeSourceEditorSyncValue(payload?.hash))}function normalizeEditorQuery(value=``){return String(value||``).trim()}function normalizePolicyDirectories(value=[]){return[...new Set((Array.isArray(value)?value:[]).map(directoryPath=>normalizeEditorPath(directoryPath).replace(/\/+$/u,``)).filter(Boolean))].sort((left,right)=>left.localeCompare(right))}function normalizeSourceEditorPolicy(value={}){const policy=value&&typeof value===`object`&&!Array.isArray(value)?value:{};return{...policy,preexpandedDirectories:normalizePolicyDirectories(policy.preexpandedDirectories),preloadDirectories:normalizePolicyDirectories(policy.preloadDirectories)}}function normalizeFileMatches(value=[]){return(Array.isArray(value)?value:[]).map((file={})=>({language:String(file.language||``),name:String(file.name||``),path:normalizeEditorPath(file.path)})).filter(file=>file.path)}function normalizeSearchResults(value=[]){return(Array.isArray(value)?value:[]).map((result={})=>({column:Math.max(1,Number(result.column||1)),line:Math.max(1,Number(result.line||1)),path:normalizeEditorPath(result.path),preview:String(result.preview||``)})).filter(result=>result.path)}function normalizeResolvedSourceEditorPath(value={}){const source=value&&typeof value===`object`&&!Array.isArray(value)?value:{};return{path:normalizeEditorPath(source.path||source.file?.path),resolved:source.resolved===true}}function normalizeExplanationMessages(value=[],{body=``,followups=[]}={}){const messages=(Array.isArray(value)?value:[]).map(entry=>({createdAt:String(entry?.createdAt||``),id:String(entry?.id||``),role:String(entry?.role||``),status:String(entry?.status||`complete`),text:String(entry?.text||``)})).filter(entry=>entry.id&&[`assistant`,`user`].includes(entry.role)&&(entry.text||entry.status!==`complete`));if(messages.length)return messages;const fallback=[];if(String(body||``).trim())fallback.push({createdAt:``,id:`body`,role:`assistant`,status:`complete`,text:String(body||``)});return[...fallback,...(Array.isArray(followups)?followups:[]).map(entry=>({createdAt:String(entry?.createdAt||``),id:String(entry?.id||``),role:String(entry?.role||``),status:`complete`,text:String(entry?.text||``)})).filter(entry=>entry.id&&[`assistant`,`user`].includes(entry.role)&&entry.text)]}function normalizeExplanationExecutionProfile(value=null){try{return vibe64AgentExecutionProfileAuditSnapshot(value)}catch{return null}}function normalizeExplanation(value=null){if(!value||typeof value!==`object`||Array.isArray(value))return null;const sourceRange=value.sourceRange&&typeof value.sourceRange===`object`&&!Array.isArray(value.sourceRange)?value.sourceRange:{};const id=String(value.id||``).trim();if(!id)return null;const followups=(Array.isArray(value.followups)?value.followups:[]).map(entry=>({createdAt:String(entry?.createdAt||``),id:String(entry?.id||``),role:String(entry?.role||``),text:String(entry?.text||``)})).filter(entry=>entry.id&&[`assistant`,`user`].includes(entry.role)&&entry.text);return{agentThreadId:String(value.agentThreadId||``),agentSettings:null,agentTurnId:String(value.agentTurnId||``),body:String(value.body||``),createdAt:String(value.createdAt||``),engine:String(value.engine||``),error:String(value.error||``),executionProfile:normalizeExplanationExecutionProfile(value.executionProfile),followups,id,messages:normalizeExplanationMessages(value.messages,{body:value.body,followups}),model:String(value.model||``),sourceRange:{endColumn:Math.max(1,Number(sourceRange.endColumn||1)),endLine:Math.max(1,Number(sourceRange.endLine||1)),language:String(sourceRange.language||``),path:normalizeEditorPath(sourceRange.path),scope:String(sourceRange.scope||`selection`),...sourceRange.presentation?{presentation:sourceRange.presentation}:{},...sourceRange.fileHash?{fileHash:String(sourceRange.fileHash)}:{},...sourceRange.symbolId?{symbolId:String(sourceRange.symbolId)}:{},startColumn:Math.max(1,Number(sourceRange.startColumn||1)),startLine:Math.max(1,Number(sourceRange.startLine||1))},stale:value.stale===true,staleReason:String(value.staleReason||``),status:String(value.status||``),summary:String(value.summary||``),title:String(value.title||``)}}function normalizeTreeNode(value=null){if(!value||typeof value!==`object`||Array.isArray(value))return null;const type=String(value.type||``);const path=normalizeEditorPath(value.path);if(type===`file`)return{language:String(value.language||``),name:String(value.name||``),path,size:Number(value.size||0),type};if(type!==`directory`)return null;return{children:(Array.isArray(value.children)?value.children:[]).map(child=>normalizeTreeNode(child)).filter(Boolean),hasMore:value.hasMore===true,limit:Math.max(1,Number(value.limit||SOURCE_EDITOR_TREE_PAGE_SIZE)),loaded:value.loaded===true,name:String(value.name||``),nextOffset:Math.max(0,Number(value.nextOffset||0)),offset:Math.max(0,Number(value.offset||0)),path,total:Math.max(0,Number(value.total||0)),truncated:value.truncated===true,type}}function mergeDirectoryChildren(existingChildren=[],pageChildren=[],append=false){const byKey=new Map((existingChildren||[]).map(child=>[treeNodeKey(child),child]));const mergedChildren=pageChildren.map(child=>{const previous=byKey.get(treeNodeKey(child));return child.type===`directory`&&previous?.loaded&&!child.loaded?{...child,...previous,name:child.name}:child});if(!append)return mergedChildren;for(const child of mergedChildren)byKey.set(treeNodeKey(child),child);return[...byKey.values()]}function treeNodeKey(node={}){return normalizeEditorPath(node.path)||String(node.name||``)}function sortTreeNodes(children=[]){return[...children].sort((left,right)=>{if(left?.type!==right?.type)return left?.type===`directory`?-1:1;return String(left?.name||``).localeCompare(String(right?.name||``))})}function mergeDirectoryPage(root=null,directoryPath=``,page=null,append=false){const normalizedPath=normalizeEditorPath(directoryPath);const normalizedPage=normalizeTreeNode(page);if(!normalizedPage)return root;if(!normalizedPath)return{...normalizedPage,children:mergeDirectoryChildren(root?.children,normalizedPage.children,append)};function visit(node=null){if(!node||node.type!==`directory`)return node;if(normalizeEditorPath(node.path)===normalizedPath)return{...node,...normalizedPage,children:mergeDirectoryChildren(node.children,normalizedPage.children,append)};return{...node,children:(Array.isArray(node.children)?node.children:[]).map(child=>visit(child))}}return visit(root)}function mergeRevealedTreeNode(existing=null,reveal=null){const normalizedReveal=normalizeTreeNode(reveal);if(!normalizedReveal)return normalizeTreeNode(existing);const normalizedExisting=normalizeTreeNode(existing);if(!normalizedExisting||treeNodeKey(normalizedExisting)!==treeNodeKey(normalizedReveal))return normalizedReveal;if(normalizedExisting.type!==`directory`||normalizedReveal.type!==`directory`)return normalizedExisting;const childrenByKey=new Map((normalizedExisting.children||[]).map(child=>[treeNodeKey(child),child]));for(const child of normalizedReveal.children||[]){const key=treeNodeKey(child);childrenByKey.set(key,mergeRevealedTreeNode(childrenByKey.get(key),child))}return{...normalizedExisting,children:sortTreeNodes([...childrenByKey.values()])}}function mergeRevealTree(root=null,revealTree=null){const normalizedReveal=normalizeTreeNode(revealTree);if(!normalizedReveal)return root;return mergeRevealedTreeNode(root,normalizedReveal)}function findTreeDirectory(root=null,directoryPath=``){const normalizedPath=normalizeEditorPath(directoryPath);if(!root||root.type!==`directory`)return null;if(normalizeEditorPath(root.path)===normalizedPath)return root;for(const child of Array.isArray(root.children)?root.children:[]){const found=findTreeDirectory(child,normalizedPath);if(found)return found}return null}function loadedFileAncestorDirectoryPaths(root=null,filePath=``,ancestors=[]){const normalizedFilePath=normalizeEditorPath(filePath);if(!root||!normalizedFilePath)return null;if(root.type===`file`)return normalizeEditorPath(root.path)===normalizedFilePath?ancestors:null;if(root.type!==`directory`)return null;const normalizedDirectoryPath=normalizeEditorPath(root.path);const childAncestors=normalizedDirectoryPath?[...ancestors,normalizedDirectoryPath]:ancestors;for(const child of Array.isArray(root.children)?root.children:[]){const found=loadedFileAncestorDirectoryPaths(child,normalizedFilePath,childAncestors);if(found)return found}return null}function loadedDirectoryPaths(root=null,directoryPath=``){const directory=findTreeDirectory(root,directoryPath);if(!directory)return[];const paths=[];function visit(node=null){if(!node||node.type!==`directory`)return;const normalizedPath=normalizeEditorPath(node.path);if(normalizedPath)paths.push(normalizedPath);for(const child of Array.isArray(node.children)?node.children:[])visit(child)}visit(directory);return[...new Set(paths)].sort((left,right)=>left.localeCompare(right))}function loadedTreeDirectoryPaths(root=null){const paths=[];function visit(node=null){if(!node||node.type!==`directory`)return;const normalizedPath=normalizeEditorPath(node.path);if(normalizedPath&&node.loaded===true)paths.push(normalizedPath);for(const child of Array.isArray(node.children)?node.children:[])visit(child)}visit(root);return[...new Set(paths)].sort((left,right)=>{return left.split(`/`).length-right.split(`/`).length||left.localeCompare(right)})}async function sourceEditorRequest(url=``,options={}){const payload=await getHttpWebClient().request(url,options);if(payload?.ok===false){const message=vibe64ApiResponseError(payload,`Source editor request failed.`);const error=new Error(message);error.payload=payload;throw error}return payload}function sourceEditorClientId(prefix=`id`){sourceExplanationClientIdCounter+=1;return`${prefix}_${Date.now().toString(36)}_${sourceExplanationClientIdCounter.toString(36)}`}function nowIso(){return new Date().toISOString()}function sourceEditorExplanationPromptText(filePath=``,range={}){return range.scope===`file`?`Explain the whole file ${filePath}.`:`Explain ${filePath}:${range.startLine}-${range.endLine}.`}function sourceEditorExplanationTitle(filePath=``,range={}){const name=normalizeEditorPath(filePath).split(`/`).filter(Boolean).pop()||`Code`;return range.scope===`file`?`${name} full file`:`${name} lines ${range.startLine}-${range.endLine}`}function localSourceExplanation({assistantMessageId=sourceEditorClientId(`msg`),explanationId=sourceEditorClientId(`exp`),filePath=``,range={},userMessageId=sourceEditorClientId(`msg`)}={}){const createdAt=nowIso();const sourceRange={endColumn:Math.max(1,Number(range.endColumn||1)),endLine:Math.max(1,Number(range.endLine||1)),language:String(range.language||``),path:normalizeEditorPath(filePath),scope:String(range.scope||`selection`),...range.presentation?{presentation:range.presentation}:{},...range.symbolId?{symbolId:range.symbolId}:{},startColumn:Math.max(1,Number(range.startColumn||1)),startLine:Math.max(1,Number(range.startLine||1))};return normalizeExplanation({agentThreadId:``,agentSettings:null,agentTurnId:``,body:``,createdAt,engine:`agent-chat`,error:``,executionProfile:null,followups:[],id:explanationId,messages:[{createdAt,id:userMessageId,role:`user`,status:`complete`,text:sourceEditorExplanationPromptText(filePath,sourceRange)},{createdAt,id:assistantMessageId,role:`assistant`,status:`thinking`,text:``}],model:``,sourceRange,status:`running`,summary:``,title:sourceEditorExplanationTitle(filePath,sourceRange)})}function sourceEditorExplanationWithMessage(explanation=null,messageId=``,patch={}){const normalized=normalizeExplanation(explanation);if(!normalized)return null;const messages=normalizeExplanationMessages(normalized.messages);const index=messages.findIndex(message=>message.id===messageId);if(index===-1)return normalized;const nextMessages=[...messages];nextMessages[index]={...nextMessages[index],...patch};return{...normalized,messages:normalizeExplanationMessages(nextMessages)}}function appendSourceEditorExplanationMessages(explanation=null,messages=[]){const normalized=normalizeExplanation(explanation);if(!normalized)return null;return{...normalized,messages:normalizeExplanationMessages([...normalized.messages,...messages])}}function useVibe64SourceEditor({active=true,agentActive=false,navigateReferencedSource=null,projectSlug,readCurrentText=null,sessionsApiPath,sessionId}={}){const originId=vibe64BrowserTabOriginId();const explanationFeedback=useUiFeedback({source:`vibe64.source-editor.explanation.feedback`});const tree=ref(null);const policy=ref({});const selectedPath=ref(``);const text=ref(``);const savedHash=ref(``);const interpretations=ref([]);const interpretationWarning=ref(``);const dirty=ref(false);const treeLoadingPaths=ref([]);const treeLoadErrors=ref({});const fileQuery=ref(``);const fileMatches=ref([]);const fileMatchesError=ref(``);const fileMatchesLoading=ref(false);const fileMatchesTruncated=ref(false);const searchQuery=ref(``);const searchResults=ref([]);const searchError=ref(``);const searchLoading=ref(false);const searchTruncated=ref(false);const searchIndex=ref(null);const searchIndexPending=computed(()=>[`building`,`refreshing`].includes(searchIndex.value?.state));const searchIndexLabel=computed(()=>{const index=searchIndex.value;if(index?.state===`error`)return index.error||`The search index could not be updated. Use Refresh to retry.`;if(!searchIndexPending.value)return``;const action=index.state===`refreshing`?`Refreshing file index`:`Indexing files`;return index.total?`${action}: ${index.scanned} of ${index.total} files…`:`${action}…`});const activeExplanation=ref(null);const explanationError=ref(``);const explanationBusy=ref(false);const explanationClosing=ref(false);const explanationFollowup=ref(``);const loadFailure=ref(null);const loadError=computed(()=>loadFailure.value?.message||``);const downloadOnlyFile=ref(null);const saveError=ref(``);const createFileError=ref(``);const creatingFile=ref(false);const loadingTree=ref(false);const loadingFile=ref(false);const loadingPath=ref(``);const saving=ref(false);const loadedVersion=ref(0);const cursorRequest=ref(null);const preexpandedDirectoryPaths=ref([]);const revealedDirectoryPaths=ref([]);const selectedRevealTree=ref(null);let treeRequestId=0;const treeDirectoryRequestIds=new Map;let createFileRequestId=0;let fileRequestId=0;let fileRevalidationRequestId=0;let fileMatchesRequestId=0;let searchRequestId=0;let explanationRequestId=0;let explanationAbortController=null;let autosaveTimer=null;let fileMatchesTimer=null;let searchTimer=null;let pendingFileRevalidation=false;let pendingTreeRefresh=false;let refreshPromise=null;let savePromise=null;let textAtUnmount=null;let disposed=false;const currentSessionsApiPath=computed(()=>String(readRefOrGetterValue(sessionsApiPath)||``).trim());const currentSessionId=computed(()=>String(readRefOrGetterValue(sessionId)||``).trim());const currentProjectSlug=computed(()=>String(readRefOrGetterValue(projectSlug)||``).trim());const reportActivity=usePageActivity();const currentActive=computed(()=>readRefOrGetterValue(active)!==false);const canLoad=computed(()=>Boolean(currentSessionsApiPath.value&¤tSessionId.value));const statusLabel=computed(()=>{if(saveError.value)return saveError.value;if(loadingFile.value)return`Opening...`;if(saving.value)return`Saving...`;if(dirty.value)return`Unsaved`;return selectedPath.value?`Saved`:``});useRealtimeEvent({enabled:computed(()=>Boolean(canLoad.value&¤tProjectSlug.value)),event:VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,matches:({payload={}}={})=>payload.operation===`created`&&payload.originId!==originId&&payload.projectSlug===currentProjectSlug.value&&payload.sessionId===currentSessionId.value||sourceEditorFileChangePayloadMatches({originId,path:selectedPath.value,payload,projectSlug:currentProjectSlug.value,sessionId:currentSessionId.value}),onEvent:({payload={}}={})=>{applyRemoteFileChange(payload);if(payload.operation===`created`){if(currentActive.value)loadTree();else pendingTreeRefresh=true}}});useVibe64SourceEditorFileSync({active:computed(()=>canLoad.value&¤tActive.value),onChange:(payload={})=>{applyObservedFileChange(payload)},onError:(error={})=>{vibe64SessionDebugLog(`client.sourceEditor.fileSync.error`,{error:String(error.error||`Source file observation failed.`),path:selectedPath.value,sessionId:currentSessionId.value,transient:error.transient===true})},onReady:()=>{revalidateSelectedFile()},path:selectedPath,sessionId:currentSessionId,sessionsApiPath:currentSessionsApiPath});function clearAutosave(){if(autosaveTimer){clearTimeout(autosaveTimer);autosaveTimer=null}}function clearFileMatchesTimer(){if(fileMatchesTimer){clearTimeout(fileMatchesTimer);fileMatchesTimer=null}}function clearSearchTimer(){if(searchTimer){clearTimeout(searchTimer);searchTimer=null}}function clearFileMatches(){fileMatchesRequestId+=1;fileMatches.value=[];fileMatchesError.value=``;fileMatchesLoading.value=false;fileMatchesTruncated.value=false}function clearSearchResults(){searchRequestId+=1;searchResults.value=[];searchError.value=``;searchLoading.value=false;searchTruncated.value=false;searchIndex.value=null}function resetDiscoveryState(){clearFileMatchesTimer();clearSearchTimer();fileQuery.value=``;searchQuery.value=``;clearFileMatches();clearSearchResults()}function treePathKey(value=``){return normalizeEditorPath(value)}function setTreePathLoading(path=``,loading=false){const key=treePathKey(path);const current=new Set(treeLoadingPaths.value);if(loading)current.add(key);else current.delete(key);treeLoadingPaths.value=[...current].sort((left,right)=>left.localeCompare(right))}function setTreePathError(path=``,message=``){const key=treePathKey(path);const next={...treeLoadErrors.value};if(message)next[key]=message;else delete next[key];treeLoadErrors.value=next}async function loadDirectoryPage(directoryPath=``,{applyPage=true,append=false,offset=0}={}){const normalizedPath=treePathKey(directoryPath);if(!canLoad.value||disposed)return null;const treeGeneration=treeRequestId;const requestKey=normalizedPath;const requestId=(treeDirectoryRequestIds.get(requestKey)||0)+1;treeDirectoryRequestIds.set(requestKey,requestId);setTreePathLoading(normalizedPath,true);setTreePathError(normalizedPath,``);if(!normalizedPath&&!append){loadingTree.value=true;loadFailure.value=null}try{const response=await sourceEditorRequest(vibe64SourceEditorTreePath(currentSessionsApiPath.value,currentSessionId.value,{limit:SOURCE_EDITOR_TREE_PAGE_SIZE,offset,path:normalizedPath}));if(treeGeneration!==treeRequestId||treeDirectoryRequestIds.get(requestKey)!==requestId)return null;if(!normalizedPath)policy.value=normalizeSourceEditorPolicy(response.policy||{});const page=normalizeTreeNode(response.tree);if(applyPage){tree.value=mergeDirectoryPage(tree.value,normalizedPath,page,append);if(selectedRevealTree.value)tree.value=mergeRevealTree(tree.value,selectedRevealTree.value)}if(!normalizedPath)preexpandedDirectoryPaths.value=normalizePolicyDirectories((policy.value.preexpandedDirectories||[]).flatMap(directoryPath=>loadedDirectoryPaths(tree.value,directoryPath)));if(applyPage)revealLoadedFilePath(selectedPath.value);return page}catch(error){if(treeGeneration===treeRequestId&&treeDirectoryRequestIds.get(requestKey)===requestId){const message=String(error?.message||error||`Source tree could not be loaded.`);setTreePathError(normalizedPath,message);if(!normalizedPath)loadFailure.value={operation:`tree`,message}}return null}finally{if(treeGeneration===treeRequestId&&treeDirectoryRequestIds.get(requestKey)===requestId){setTreePathLoading(normalizedPath,false);if(!normalizedPath&&applyPage)loadingTree.value=false}}}function revealLoadedFilePath(filePath=``){const ancestors=loadedFileAncestorDirectoryPaths(tree.value,filePath);if(ancestors)revealedDirectoryPaths.value=normalizePolicyDirectories(ancestors)}async function loadTree({preserveLoadedDirectories=true}={}){const refreshingLoadedTree=preserveLoadedDirectories&&Boolean(tree.value);const directoriesToReload=preserveLoadedDirectories?loadedTreeDirectoryPaths(tree.value):[];const loadedCounts=new Map([``,...directoriesToReload].map(directoryPath=>[directoryPath,findTreeDirectory(tree.value,directoryPath)?.children?.length||0]));const requestId=treeRequestId+1;treeRequestId=requestId;if(!preserveLoadedDirectories){tree.value=null;policy.value=normalizeSourceEditorPolicy({});preexpandedDirectoryPaths.value=[];revealedDirectoryPaths.value=[]}treeDirectoryRequestIds.clear();treeLoadingPaths.value=[];treeLoadErrors.value={};loadFailure.value=null;if(!canLoad.value)return;loadingTree.value=true;let refreshedTree=tree.value;for(const directoryPath of[``,...directoriesToReload]){if(requestId!==treeRequestId)return;if(directoryPath&&!findTreeDirectory(refreshedTree,directoryPath))continue;let offset=0;do{if(disposed||refreshingLoadedTree&&!currentActive.value){pendingTreeRefresh=!disposed;loadingTree.value=false;return}const page=await loadDirectoryPage(directoryPath,{applyPage:false,append:offset>0,offset});if(requestId!==treeRequestId)return;if(page)refreshedTree=mergeDirectoryPage(refreshedTree,directoryPath,page,offset>0);if(!page?.hasMore||!page.nextOffset||page.nextOffset<=offset)break;offset=page.nextOffset}while(offset<loadedCounts.get(directoryPath))}tree.value=refreshedTree;loadingTree.value=false;if(selectedRevealTree.value){tree.value=mergeRevealTree(tree.value,selectedRevealTree.value);revealLoadedFilePath(selectedPath.value)}preexpandedDirectoryPaths.value=normalizePolicyDirectories((policy.value.preexpandedDirectories||[]).flatMap(directoryPath=>loadedDirectoryPaths(tree.value,directoryPath)))}function loadDirectory(directoryPath=``){const normalizedPath=treePathKey(directoryPath);if(findTreeDirectory(tree.value,normalizedPath)?.loaded===true)return;loadDirectoryPage(normalizedPath,{append:false,offset:0})}function loadMoreDirectory(directoryPath=``){const normalizedPath=treePathKey(directoryPath);const directory=findTreeDirectory(tree.value,normalizedPath);if(!directory?.hasMore)return;loadDirectoryPage(normalizedPath,{append:true,offset:directory.nextOffset||directory.children?.length||0})}function applyFileResponse(response={},{column=0,fallbackPath=``,line=0,reveal=true}={}){const file=response.file||{};const filePath=normalizeEditorPath(file.path||fallbackPath);if(!filePath)return false;selectedPath.value=filePath;downloadOnlyFile.value=null;selectedRevealTree.value=normalizeTreeNode(response.revealTree);if(selectedRevealTree.value)tree.value=mergeRevealTree(tree.value,selectedRevealTree.value);text.value=String(file.text||``);savedHash.value=String(file.hash||``);applySavedInterpretations(response,filePath);dirty.value=false;if(reveal)revealLoadedFilePath(filePath);cursorRequest.value={column:Number(column||0)||0,line:Number(line||0)||0,path:filePath,version:loadedVersion.value+1};loadedVersion.value+=1;return true}function applySavedInterpretations(response,filePath){interpretations.value=(response.interpretations?.records||[]).filter(record=>record.path===filePath&&[`file`,`selection`].includes(record.scope)&&[`description`,`steps`].includes(record.presentation)&&typeof record.body===`string`&&[`current`,`stale`].includes(record.status));interpretationWarning.value=String(response.interpretations?.warning||``)}async function openFile(filePath=``,options={}){const normalizedPath=normalizeEditorPath(filePath);if(!normalizedPath||!canLoad.value)return false;if((dirty.value||saving.value)&&!await saveNow())return false;const requestId=fileRequestId+1;fileRequestId=requestId;fileRevalidationRequestId+=1;loadFailure.value=null;saveError.value=``;loadingFile.value=true;loadingPath.value=normalizedPath;try{const response=await sourceEditorRequest(vibe64SourceEditorFilePath(currentSessionsApiPath.value,currentSessionId.value,normalizedPath));if(requestId!==fileRequestId)return false;if(!applyFileResponse(response,{column:options.column,fallbackPath:normalizedPath,line:options.line}))return false;reportActivity(`file-opened`,{projectSlug:currentProjectSlug.value,sessionId:currentSessionId.value,path:normalizedPath});return true}catch(error){if(requestId===fileRequestId){const code=error?.code||error?.payload?.code;if(code===`vibe64_source_editor_binary_file`||code===`vibe64_source_editor_file_too_large`){selectedPath.value=``;selectedRevealTree.value=null;text.value=``;savedHash.value=``;downloadOnlyFile.value={path:normalizedPath,message:code===`vibe64_source_editor_binary_file`?`This file cannot be edited as text. Download it to open it in another application.`:`This file is too large to edit here. You can download the complete file.`};revealLoadedFilePath(normalizedPath);return true}loadFailure.value={operation:`open-file`,message:String(error?.message||error||`Source file could not be loaded.`)}}return false}finally{if(requestId===fileRequestId){loadingFile.value=false;loadingPath.value=``}}}async function createFile(filePath=``){const normalizedPath=normalizeEditorPath(filePath);if(!normalizedPath||!canLoad.value||creatingFile.value)return false;if((dirty.value||saving.value)&&!await saveNow())return false;const createRequestId=createFileRequestId+1;createFileRequestId=createRequestId;const fileSelectionRequestId=fileRequestId+1;fileRequestId=fileSelectionRequestId;fileRevalidationRequestId+=1;createFileError.value=``;loadFailure.value=null;saveError.value=``;creatingFile.value=true;try{const response=await sourceEditorRequest(vibe64SourceEditorCreateFilePath(currentSessionsApiPath.value,currentSessionId.value),{body:{originId,path:normalizedPath,projectSlug:currentProjectSlug.value},method:`POST`});if(fileSelectionRequestId!==fileRequestId)return false;if(!applyFileResponse(response,{fallbackPath:normalizedPath}))return false;return true}catch(error){if(fileSelectionRequestId===fileRequestId)createFileError.value=String(error?.message||error||`Source file could not be created.`);return false}finally{if(createRequestId===createFileRequestId)creatingFile.value=false}}async function revalidateSelectedFile(){const pathAtRequest=selectedPath.value;const sessionIdAtRequest=currentSessionId.value;if(disposed||!pathAtRequest||!canLoad.value||!currentActive.value)return false;if(saving.value){pendingFileRevalidation=true;return false}const requestId=fileRevalidationRequestId+1;fileRevalidationRequestId=requestId;try{const response=await sourceEditorRequest(vibe64SourceEditorFilePath(currentSessionsApiPath.value,sessionIdAtRequest,pathAtRequest));if(requestId!==fileRevalidationRequestId||selectedPath.value!==pathAtRequest||currentSessionId.value!==sessionIdAtRequest)return false;if(loadFailure.value?.operation===`revalidation`)loadFailure.value=null;selectedRevealTree.value=normalizeTreeNode(response.revealTree);if(selectedRevealTree.value)tree.value=mergeRevealTree(tree.value,selectedRevealTree.value);const nextHash=String(response.file?.hash||``);applySavedInterpretations(response,pathAtRequest);if(dirty.value||saving.value){if(nextHash&&nextHash!==savedHash.value)saveError.value=SOURCE_EDITOR_REMOTE_CHANGE_MESSAGE;else if(saveError.value===`This file changed in another window. Reload it before saving.`)saveError.value=``;return false}if(!nextHash||nextHash===savedHash.value)return false;return applyFileResponse(response,{fallbackPath:pathAtRequest,reveal:false})}catch(error){if(requestId===fileRevalidationRequestId&&selectedPath.value===pathAtRequest&¤tSessionId.value===sessionIdAtRequest)loadFailure.value={operation:`revalidation`,message:String(error?.message||error||`Source file could not be refreshed.`)};return false}}async function applySelectedFileChange({hash=``,path=``}={}){const changedPath=normalizeEditorPath(path);const changedHash=normalizeSourceEditorSyncValue(hash);if(!changedPath||changedPath!==selectedPath.value||changedHash&&changedHash===savedHash.value)return;if(saving.value){pendingFileRevalidation=true;return}if(dirty.value&&changedHash){saveError.value=SOURCE_EDITOR_REMOTE_CHANGE_MESSAGE;return}await revalidateSelectedFile()}async function applyRemoteFileChange(payload={}){if(!sourceEditorFileChangePayloadMatches({originId,path:selectedPath.value,payload,projectSlug:currentProjectSlug.value,sessionId:currentSessionId.value}))return;await applySelectedFileChange(payload)}async function applyObservedFileChange(payload={}){if(normalizeSourceEditorSyncValue(payload.sessionId)!==currentSessionId.value||normalizeEditorPath(payload.path)!==selectedPath.value)return;await applySelectedFileChange(payload)}function cleanupAbandonedExplanations(){if(!canLoad.value)return;const activeExplanationIds=activeExplanation.value?.id?[activeExplanation.value.id]:[];sourceEditorRequest(vibe64SourceEditorExplanationsCleanupPath(currentSessionsApiPath.value,currentSessionId.value),{body:{activeExplanationIds,originId},method:`POST`}).catch(error=>{vibe64SessionDebugLog(`client.sourceEditor.explanations.cleanup.error`,{error:vibe64SessionDebugError(error),sessionId:currentSessionId.value})})}async function loadFileMatches(){const query=normalizeEditorQuery(fileQuery.value);if(!query){clearFileMatches();return}const requestId=fileMatchesRequestId+1;fileMatchesRequestId=requestId;fileMatchesError.value=``;if(!canLoad.value)return;fileMatchesLoading.value=true;try{const response=await sourceEditorRequest(vibe64SourceEditorFilesPath(currentSessionsApiPath.value,currentSessionId.value,query));if(requestId!==fileMatchesRequestId)return;fileMatches.value=normalizeFileMatches(response.files);fileMatchesTruncated.value=response.truncated===true}catch(error){if(requestId===fileMatchesRequestId){fileMatches.value=[];fileMatchesError.value=String(error?.message||error||`File matches could not be loaded.`)}}finally{if(requestId===fileMatchesRequestId)fileMatchesLoading.value=false}}function updateFileQuery(value=``){fileQuery.value=String(value||``);clearFileMatchesTimer();if(!normalizeEditorQuery(fileQuery.value)){clearFileMatches();return}fileMatchesTimer=setTimeout(()=>{loadFileMatches()},120)}async function openFileMatch(filePath=``){const normalizedPath=normalizeEditorPath(filePath);if(!normalizedPath)return;clearFileMatchesTimer();fileQuery.value=``;clearFileMatches();await openFile(normalizedPath)}async function openReferencedSourcePath({fromPath=selectedPath.value,target=``}={}){const normalizedFromPath=normalizeEditorPath(fromPath);const normalizedTarget=String(target||``).trim();if(!normalizedFromPath||!normalizedTarget||!canLoad.value)return false;try{const resolved=normalizeResolvedSourceEditorPath(await sourceEditorRequest(vibe64SourceEditorResolvePathPath(currentSessionsApiPath.value,currentSessionId.value),{body:{fromPath:normalizedFromPath,target:normalizedTarget},method:`POST`}));if(!resolved.resolved||!resolved.path)return false;if(typeof navigateReferencedSource===`function`)try{if(await navigateReferencedSource({fromPath:normalizedFromPath,path:resolved.path,target:normalizedTarget})===true)return true}catch{}await openFile(resolved.path);return true}catch{return false}}function openFirstFileMatch(){const firstFile=fileMatches.value[0];if(firstFile?.path)openFileMatch(firstFile.path)}async function loadSearchResults({background=false}={}){clearSearchTimer();if(disposed||!currentActive.value)return;const query=normalizeEditorQuery(searchQuery.value);if(!query){clearSearchResults();return}const requestId=searchRequestId+1;searchRequestId=requestId;searchError.value=``;if(!canLoad.value)return;searchLoading.value=!background;try{const response=await sourceEditorRequest(vibe64SourceEditorSearchPath(currentSessionsApiPath.value,currentSessionId.value,query));if(requestId!==searchRequestId)return;searchResults.value=normalizeSearchResults(response.results);searchTruncated.value=response.truncated===true;searchIndex.value=response.index||null;if(searchIndexPending.value&¤tActive.value&&!disposed)searchTimer=setTimeout(()=>{loadSearchResults({background:true})},1e3)}catch(error){if(requestId===searchRequestId){searchResults.value=[];searchIndex.value=null;searchError.value=String(error?.message||error||`Search results could not be loaded.`)}}finally{if(requestId===searchRequestId)searchLoading.value=false}}function clearExplanationStream(){explanationRequestId+=1;explanationAbortController?.abort?.();explanationAbortController=null;explanationBusy.value=false}function markActiveExplanationMessage(status=``,text=``){const explanation=activeExplanation.value;const lastAssistant=[...explanation?.messages||[]].reverse().find(message=>message.role===`assistant`);if(!lastAssistant?.id)return;const nextExplanation=sourceEditorExplanationWithMessage(explanation,lastAssistant.id,{status,text:text||lastAssistant.text});activeExplanation.value=status===`failed`?{...nextExplanation,error:text||nextExplanation?.error||`Source explanation failed.`,status:`failed`}:nextExplanation}function applyExplanationStreamEvent(event={},requestId=explanationRequestId){if(requestId!==explanationRequestId)return;if(event.type===`source-explanation.error`||event.ok===false){const message=vibe64ApiResponseError(event,`Source explanation failed.`);explanationError.value=message;markActiveExplanationMessage(`failed`,message);throw new Error(message)}const eventExplanation=normalizeExplanation(event.explanation);if(event.type===`source-explanation.failed`){const message=vibe64ApiResponseError(event,`Source explanation failed.`);explanationError.value=message;if(eventExplanation)activeExplanation.value=eventExplanation;else markActiveExplanationMessage(`failed`,message);return}if(event.type===`source-explanation.started`||event.type===`source-explanation.followup.started`){if(eventExplanation)activeExplanation.value=eventExplanation;return}if(event.type===`source-explanation.thread`||event.type===`source-explanation.turn`){if(!activeExplanation.value)return;activeExplanation.value={...activeExplanation.value,agentThreadId:String(event.threadId||activeExplanation.value.agentThreadId||``),agentTurnId:String(event.turnId||activeExplanation.value.agentTurnId||``)};return}if(event.type===`source-explanation.execution-profile`&&eventExplanation){activeExplanation.value=eventExplanation;return}if(event.type===`source-explanation.message`&&event.messageId){activeExplanation.value=sourceEditorExplanationWithMessage(activeExplanation.value,String(event.messageId),{status:String(event.status||`thinking`),text:String(event.text||``)});return}if(event.type===`source-explanation.finished`&&eventExplanation){activeExplanation.value=eventExplanation;const range=eventExplanation.sourceRange;if(eventExplanation.status===`ready`&&range.presentation&&(range.scope===`file`||range.symbolId)&&!eventExplanation.followups.length&&range.path===selectedPath.value){const record={path:range.path,scope:range.scope,symbolId:range.symbolId||``,presentation:range.presentation,fileHash:range.fileHash,body:eventExplanation.body,summary:eventExplanation.summary,createdAt:eventExplanation.createdAt,status:range.fileHash===savedHash.value?`current`:`stale`};interpretations.value=[...interpretations.value.filter(previous=>!(previous.scope===record.scope&&previous.symbolId===record.symbolId&&previous.presentation===record.presentation)),record]}if(eventExplanation.status!==`failed`)explanationError.value=``}}async function streamSourceEditorRequest(url=``,body={},requestId=explanationRequestId){const controller=new AbortController;explanationAbortController=controller;await getHttpWebClient().requestStream(url,{body,method:`POST`,signal:controller.signal},{onEvent(event){applyExplanationStreamEvent(event,requestId)}})}async function explainSelection(range={}){if(!selectedPath.value||!canLoad.value||explanationBusy.value||explanationClosing.value)return;const requestId=explanationRequestId+1;explanationRequestId=requestId;explanationAbortController?.abort?.();explanationAbortController=null;const explanationId=sourceEditorClientId(`exp`);const userMessageId=sourceEditorClientId(`msg`);const assistantMessageId=sourceEditorClientId(`msg`);const previousExplanation=activeExplanation.value;activeExplanation.value=localSourceExplanation({assistantMessageId,explanationId,filePath:selectedPath.value,range,userMessageId});explanationBusy.value=true;explanationError.value=``;explanationFollowup.value=``;if(previousExplanation?.id)disposeExplanation(previousExplanation).catch(()=>null);try{await streamSourceEditorRequest(vibe64SourceEditorExplanationsStreamPath(currentSessionsApiPath.value,currentSessionId.value),{assistantMessageId,endColumn:range.endColumn,endLine:range.endLine,explanationId,force:range.force===true,presentation:range.presentation,symbolId:range.symbolId,expectedHash:range.expectedHash,originId,path:selectedPath.value,scope:range.scope,startColumn:range.startColumn,startLine:range.startLine,userMessageId},requestId)}catch(error){if(String(error?.name||``)===`AbortError`)return;if(requestId===explanationRequestId){const message=String(error?.message||error||`Source explanation could not be created.`);explanationError.value=message;markActiveExplanationMessage(`failed`,message)}}finally{if(requestId===explanationRequestId){explanationBusy.value=false;explanationAbortController=null}}}async function retryExplanation(){const range=activeExplanation.value?.sourceRange||{};const explanationPath=normalizeEditorPath(range.path);if(!explanationPath||explanationBusy.value||explanationClosing.value)return;if(selectedPath.value!==explanationPath){await openFile(explanationPath);if(selectedPath.value!==explanationPath)return}await explainSelection({...range,...range.presentation&&range.fileHash?{expectedHash:range.fileHash}:{},force:true})}async function stopExplanation(){const explanation=activeExplanation.value;if(!explanation?.id||explanationClosing.value)return;const requestId=explanationRequestId+1;explanationRequestId=requestId;const controller=explanationAbortController;explanationAbortController=null;explanationBusy.value=false;explanationError.value=``;markActiveExplanationMessage(`stopped`,`Stopped.`);controller?.abort?.();if(!canLoad.value)return;try{const response=await sourceEditorRequest(vibe64SourceEditorExplanationStopPath(currentSessionsApiPath.value,currentSessionId.value,explanation.id),{method:`POST`});if(requestId!==explanationRequestId||activeExplanation.value?.id!==explanation.id)return;const stoppedExplanation=normalizeExplanation(response.explanation);if(stoppedExplanation)activeExplanation.value=stoppedExplanation}catch(error){if(requestId===explanationRequestId&&activeExplanation.value?.id===explanation.id)explanationFeedback.error(error,`Source explanation could not be stopped.`)}}async function disposeExplanation(explanation=null,{onError=null,sessionsApiPath:apiPath=currentSessionsApiPath.value,sessionId:targetSessionId=currentSessionId.value}={}){const id=String(explanation?.id||``).trim();if(!id||!apiPath||!targetSessionId)return true;try{await sourceEditorRequest(vibe64SourceEditorExplanationPath(apiPath,targetSessionId,id),{method:`DELETE`});return true}catch(error){vibe64SessionDebugLog(`client.sourceEditor.explanations.cleanup.error`,{error:vibe64SessionDebugError(error),sessionId:targetSessionId});onError?.(error);return false}}async function disposeActiveExplanation(options={}){const explanation=activeExplanation.value;if(!explanation)return true;const requestId=explanationRequestId;const disposed=await disposeExplanation(explanation,options);if(disposed&&requestId===explanationRequestId&&activeExplanation.value?.id===explanation.id){activeExplanation.value=null;explanationFollowup.value=``}return disposed}async function closeExplanation(){const explanation=activeExplanation.value;if(!explanation?.id||explanationClosing.value)return false;clearExplanationStream();const requestId=explanationRequestId;explanationClosing.value=true;explanationError.value=``;try{return await disposeActiveExplanation({onError(error){if(requestId===explanationRequestId&&activeExplanation.value?.id===explanation.id)explanationFeedback.error(error,`Source explanation cleanup failed. Close it again to retry.`)}})&&requestId===explanationRequestId}finally{if(requestId===explanationRequestId)explanationClosing.value=false}}function updateExplanationFollowup(value=``){explanationFollowup.value=String(value||``)}async function sendExplanationFollowup(){const message=explanationFollowup.value.trim();const explanationId=activeExplanation.value?.id||``;if(!message||!explanationId||!canLoad.value||explanationBusy.value||explanationClosing.value)return;const requestId=explanationRequestId+1;explanationRequestId=requestId;explanationAbortController?.abort?.();explanationAbortController=null;const createdAt=nowIso();const userMessageId=sourceEditorClientId(`msg`);const assistantMessageId=sourceEditorClientId(`msg`);activeExplanation.value=appendSourceEditorExplanationMessages(activeExplanation.value,[{createdAt,id:userMessageId,role:`user`,status:`complete`,text:message},{createdAt,id:assistantMessageId,role:`assistant`,status:`thinking`,text:``}]);explanationBusy.value=true;explanationError.value=``;explanationFollowup.value=``;try{await streamSourceEditorRequest(vibe64SourceEditorExplanationFollowupsStreamPath(currentSessionsApiPath.value,currentSessionId.value,explanationId),{assistantMessageId,message,userMessageId},requestId)}catch(error){if(String(error?.name||``)===`AbortError`)return;if(requestId===explanationRequestId){const errorMessage=String(error?.message||error||`Source explanation follow-up could not be sent.`);explanationError.value=errorMessage;markActiveExplanationMessage(`failed`,errorMessage)}}finally{if(requestId===explanationRequestId){explanationBusy.value=false;explanationAbortController=null}}}function updateSearchQuery(value=``){searchQuery.value=String(value||``);clearSearchTimer();clearSearchResults();if(!normalizeEditorQuery(searchQuery.value))return;searchTimer=setTimeout(()=>{loadSearchResults()},260)}function openSearchResult(result={}){const filePath=normalizeEditorPath(result.path);if(!filePath)return;openFile(filePath,{column:result.column,line:result.line})}function scheduleSave(){clearAutosave();if(!selectedPath.value||!dirty.value)return;autosaveTimer=setTimeout(()=>{saveNow()},700)}function updateText(){dirty.value=true;saveError.value=``;scheduleSave()}function currentText(){if(textAtUnmount!==null)return textAtUnmount;return typeof readCurrentText===`function`?String(readCurrentText()??``):text.value}async function saveDirtyBuffers(){while(selectedPath.value&&dirty.value){const pathAtSave=selectedPath.value;const textAtSave=currentText();const baseHashAtSave=savedHash.value;saving.value=true;saveError.value=``;try{const response=await sourceEditorRequest(vibe64SourceEditorFilePath(currentSessionsApiPath.value,currentSessionId.value),{body:{baseHash:baseHashAtSave,originId,path:pathAtSave,projectSlug:currentProjectSlug.value,text:textAtSave},method:`PUT`});if(selectedPath.value===pathAtSave){savedHash.value=String(response.file?.hash||``);text.value=textAtSave;dirty.value=currentText()!==textAtSave}}catch(error){if(selectedPath.value===pathAtSave)saveError.value=String(error?.message||error||`Source file could not be saved.`);return false}finally{saving.value=false}}if(pendingFileRevalidation){pendingFileRevalidation=false;revalidateSelectedFile()}return!dirty.value}function saveNow(){clearAutosave();if(savePromise)return savePromise;savePromise=saveDirtyBuffers().finally(()=>{savePromise=null});return savePromise}function openRequest(request={}){const filePath=normalizeEditorPath(request.path);if(!filePath)return;openFile(filePath,{column:request.column,line:request.line})}function refresh(){if(refreshPromise){pendingTreeRefresh=true;return refreshPromise}refreshPromise=(async()=>{do{pendingTreeRefresh=false;selectedRevealTree.value=null;await loadTree();await revalidateSelectedFile();if(searchQuery.value&¤tActive.value)await loadSearchResults({background:true})}while(pendingTreeRefresh&¤tActive.value)})().finally(()=>{refreshPromise=null});return refreshPromise}watch([currentSessionId,()=>Boolean(readRefOrGetterValue(agentActive))],([id,working],previous=[])=>{if(id!==previous[0]||!previous[1]||working)return;if(currentActive.value)refresh();else pendingTreeRefresh=true});if(typeof window!==`undefined`)window.addEventListener(`focus`,revalidateSelectedFile);watch([currentSessionsApiPath,currentSessionId,currentActive],async(current,previous=[])=>{if(current[0]===previous[0]&¤t[1]===previous[1]){if(!current[2]){clearSearchTimer();searchRequestId+=1;searchLoading.value=false}else if(searchQuery.value&&!pendingTreeRefresh)loadSearchResults({background:true});if(current[2]&&pendingTreeRefresh)await refresh();return}pendingTreeRefresh=false;const closePending=explanationClosing.value;clearExplanationStream();explanationClosing.value=false;if(activeExplanation.value&&!closePending)disposeActiveExplanation({sessionsApiPath:previous[0]||currentSessionsApiPath.value,sessionId:previous[1]||currentSessionId.value});resetDiscoveryState();fileRequestId+=1;loadingFile.value=false;loadingPath.value=``;fileRevalidationRequestId+=1;pendingFileRevalidation=false;selectedPath.value=``;downloadOnlyFile.value=null;selectedRevealTree.value=null;text.value=``;savedHash.value=``;interpretations.value=[];interpretationWarning.value=``;dirty.value=false;activeExplanation.value=null;explanationFollowup.value=``;await loadTree({preserveLoadedDirectories:false});cleanupAbandonedExplanations()},{immediate:true});onBeforeUnmount(()=>{disposed=true;treeRequestId+=1;fileRequestId+=1;fileRevalidationRequestId+=1;textAtUnmount=currentText();const closePending=explanationClosing.value;clearExplanationStream();explanationClosing.value=false;clearAutosave();clearFileMatchesTimer();clearSearchTimer();searchRequestId+=1;if(typeof window!==`undefined`)window.removeEventListener(`focus`,revalidateSelectedFile);if(!closePending)disposeActiveExplanation();saveNow()});return{activeExplanation,closeExplanation,createFile,createFileError,creatingFile,cursorRequest,dirty,downloadOnlyFile,explanationBusy,explanationClosing,explanationError,explanationFollowup,explainSelection,fileMatches,fileMatchesError,fileMatchesLoading,fileMatchesTruncated,fileQuery,loadError,loadedVersion,loadDirectory,loadMoreDirectory,loadingFile,loadingPath,loadingTree,openFile,openFileMatch,openFirstFileMatch,openReferencedSourcePath,openRequest,openSearchResult,policy,preexpandedDirectoryPaths,refresh,retryExplanation,revealedDirectoryPaths,saveError,saveNow,savedHash,interpretations,interpretationWarning,searchError,searchLoading,searchIndex,searchIndexLabel,searchIndexPending,searchQuery,searchResults,searchTruncated,selectedPath,sendExplanationFollowup,saving,stopExplanation,statusLabel,text,tree,treeLoadErrors,treeLoadingPaths,updateExplanationFollowup,updateFileQuery,updateSearchQuery,updateText}}var SOURCE_EDITOR_DIFF_TIMEOUT_MS=100;function sourceEditorDocumentChanges(currentText,nextText){if(currentText===nextText)return[];const parts=diffLines(currentText,nextText,{timeout:SOURCE_EDITOR_DIFF_TIMEOUT_MS});if(!parts)return[{from:0,insert:nextText,to:currentText.length}];const changes=[];let currentPosition=0;let pendingChange=null;for(const part of parts){if(!part.added&&!part.removed){if(pendingChange){changes.push(pendingChange);pendingChange=null}currentPosition+=part.value.length;continue}pendingChange||={from:currentPosition,insert:``,to:currentPosition};if(part.added)pendingChange.insert+=part.value;else{currentPosition+=part.value.length;pendingChange.to=currentPosition}}if(pendingChange)changes.push(pendingChange);return changes}var _hoisted_1$1={key:0,class:`vibe64-source-editor__header`};var _hoisted_2$1={class:`vibe64-source-editor__title`};var _hoisted_3$1=[`title`];var _hoisted_4$1={key:3,class:`vibe64-source-editor__mobile-actions`};var _hoisted_5$1={key:4,class:`vibe64-source-editor__actions`};var _hoisted_6$1={key:1,class:`vibe64-source-editor__tools`};var _hoisted_7$1={class:`vibe64-source-editor__tool`};var _hoisted_8$1={key:0,class:`vibe64-source-editor__matches`};var _hoisted_9$1={key:0,class:`vibe64-source-editor__match-note`};var _hoisted_10$1={key:1,class:`vibe64-source-editor__match-note vibe64-source-editor__match-note--error`};var _hoisted_11$1=[`title`,`onClick`];var _hoisted_12={class:`vibe64-source-editor__match-name`};var _hoisted_13={class:`vibe64-source-editor__match-path`};var _hoisted_14={key:0,class:`vibe64-source-editor__match-note`};var _hoisted_15={key:1,class:`vibe64-source-editor__match-note`};var _hoisted_16={class:`vibe64-source-editor__tool`};var _hoisted_17={class:`vibe64-source-editor__tree-toolbar`};var _hoisted_18={class:`vibe64-source-editor__tree-actions`};var _hoisted_19=[`open`];var _hoisted_20={key:1,class:`vibe64-source-editor__search-results`,"aria-label":`Find results`};var _hoisted_21={class:`vibe64-source-editor__search-heading`};var _hoisted_22={key:1,class:`vibe64-source-editor__notice`};var _hoisted_23={key:2,class:`vibe64-source-editor__notice vibe64-source-editor__notice--error`};var _hoisted_24={key:3,class:`vibe64-source-editor__notice`};var _hoisted_25=[`title`,`onClick`];var _hoisted_26={class:`vibe64-source-editor__search-path`};var _hoisted_27={class:`vibe64-source-editor__search-location`};var _hoisted_28={class:`vibe64-source-editor__search-preview`};var _hoisted_29={key:5,class:`vibe64-source-editor__notice`};var _hoisted_30={key:2,class:`vibe64-source-editor__notice`};var _hoisted_31={key:3,class:`vibe64-source-editor__notice vibe64-source-editor__notice--error`};var _hoisted_32={class:`vibe64-source-editor__main`};var _hoisted_33={key:0,class:`vibe64-source-editor__banner`};var _hoisted_34={key:1,class:`vibe64-source-editor__empty`};var _hoisted_35={class:`mb-4`};var _hoisted_36={key:2,class:`vibe64-source-editor__empty`};var _hoisted_37={key:3,class:`vibe64-source-editor__banner vibe64-source-editor__banner--error`};var _hoisted_38={key:1,class:`vibe64-source-editor__markdown`,"aria-label":`Formatted document`,tabindex:`0`};var _hoisted_39={key:2,class:`vibe64-source-editor__image-preview`,"aria-label":`Image preview`,tabindex:`0`};var _hoisted_40={key:0,class:`pa-4`};var _hoisted_41=[`src`,`alt`];var _hoisted_42=[`aria-label`];var _hoisted_43={class:`vibe64-source-editor__download-status`,role:`status`};var SOURCE_EDITOR_TREE_STATE_STORAGE_KEY=`vibe64:source-editor:tree-state`;var _sfc_main$2={__name:`Vibe64SessionSourceEditor`,props:{singleFile:{type:Boolean,default:false},architectureFacts:{type:Object,default:null},agentActive:{type:Boolean,default:false},fileBookmarks:{type:Object,default:null},active:{default:false,type:Boolean},assistantAvailable:{default:true,type:Boolean},assistantUnavailableMessage:{default:`The selected AI connection is unavailable for this account.`,type:String},codeFocusMode:{default:false,type:Boolean},openRequest:{default:null,type:Object},projectSlug:{default:``,type:String},sessionId:{default:``,type:String},sessionsApiPath:{default:``,type:String},askCodexAvailable:{default:false,type:Boolean},navigateReferencedSource:{default:null,type:Function},sourcePathClickWithoutModifier:{default:false,type:Boolean}},emits:[`ask-codex-about-file`,`open-source-file`,`interface-location`,`open-program`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const editorElement=ref(null);let editorView=null;let explanationFocusTimer=null;let renderedEditorPath=``;let resettingEditor=false;let sourceEditorUnmounted=false;const editor=useVibe64SourceEditor({active:()=>props.active,agentActive:()=>props.agentActive,navigateReferencedSource:navigation=>props.navigateReferencedSource?.(navigation),projectSlug:()=>props.projectSlug,readCurrentText:()=>editorView?.state.doc.toString()??``,sessionId:()=>props.sessionId,sessionsApiPath:()=>props.sessionsApiPath});const filePresentation=ref(`interface`);const interfaceSymbolId=ref(``);const symbolPresentation=ref(`description`);const interfaceGraph=props.architectureFacts?null:useVibe64SystemGraph({active:toRef(props,`active`),sessionId:toRef(props,`sessionId`),projection:`architecture`});const interfaceArchitecture=computed(()=>props.architectureFacts||interfaceGraph?.architecture.value);const interfaceFile=computed(()=>interfaceArchitecture.value?.files?.find(file=>file.path===editor.selectedPath.value));const interfaceCurrent=computed(()=>interfaceFile.value?.hash===`sha256:${editor.savedHash.value}`&&!editor.dirty.value);const interfaceSymbols=computed(()=>(interfaceArchitecture.value?.symbols||[]).filter(symbol=>symbol.fileId===interfaceFile.value?.id&&symbol.visibility===`public`));const interfacePrograms=computed(()=>(interfaceArchitecture.value?.program?.modules||[]).filter(program=>program.sources.includes(editor.selectedPath.value)));const interfaceSymbol=computed(()=>interfaceSymbols.value.find(symbol=>symbol.id===interfaceSymbolId.value));const interfaceSymbolSource=computed(()=>{const symbol=interfaceSymbol.value;if(!symbol?.end||!interfaceCurrent.value)return``;const selected=editor.text.value.split(`
|
|
39
39
|
`).slice(symbol.start.line-1,symbol.end.line);if(!selected.length)return``;selected[selected.length-1]=selected.at(-1).slice(0,symbol.end.column-1);selected[0]=selected[0].slice(symbol.start.column-1);return selected.join(`
|
|
40
40
|
`)});function showWholeFileCode(){filePresentation.value=`code`;nextTick(()=>{editorView?.requestMeasure();editorView?.focus()})}function selectInterfaceSymbol(id){interfaceSymbolId.value=id;symbolPresentation.value=`steps`}function currentInterpretation(scope,symbolId,presentation){return editor.interpretations.value.find(record=>record.path===editor.selectedPath.value&&record.scope===scope&&(record.symbolId||``)===symbolId&&record.presentation===presentation&&record.status===`current`&&record.fileHash===editor.savedHash.value)}const activeInterfaceInterpretation=computed(()=>{const range=editor.activeExplanation.value?.sourceRange;return Boolean(range?.path===editor.selectedPath.value&&range.presentation===symbolPresentation.value&&(range.symbolId||``)===interfaceSymbolId.value&&range.scope===(interfaceSymbolId.value?`selection`:`file`))});const activeFileInterpretation=computed(()=>{const range=editor.activeExplanation.value?.sourceRange;return range?.path===editor.selectedPath.value&&range.scope===`file`&&range.presentation===`description`});function presentFileOverview(force=false){if(!force&¤tInterpretation(`file`,``,`description`))return;if(!editor.selectedPath.value||editor.dirty.value||!props.assistantAvailable||editor.explanationBusy.value||editor.explanationClosing.value)return;const lines=editor.text.value.split(`
|
|
41
41
|
`);editor.explainSelection({scope:`file`,presentation:`description`,force,expectedHash:editor.savedHash.value,startLine:1,startColumn:1,endLine:lines.length,endColumn:lines.at(-1).length+1})}function presentInterfaceSymbol(presentation,force=false){symbolPresentation.value=presentation;const symbol=interfaceSymbol.value;if(presentation!==`steps`||!Array.isArray(symbol?.parameters)||!symbol?.end||!interfaceCurrent.value||!props.assistantAvailable||editor.explanationBusy.value||editor.explanationClosing.value)return;if(!force&¤tInterpretation(`selection`,symbol.id,presentation))return;editor.explainSelection({scope:`selection`,symbolId:symbol.id,presentation,force,expectedHash:editor.savedHash.value,startLine:symbol.start.line,startColumn:symbol.start.column,endLine:symbol.end.line,endColumn:symbol.end.column})}const markdownRenderable=computed(()=>!props.singleFile&&sourceEditorPathIsMarkdown(editor.selectedPath.value));const markdownRenderer=new F({async:false,gfm:true,walkTokens(token){const path=token.type===`image`&&markdownDocumentLinkTarget(editor.selectedPath.value,token.href);if(path)token.href=scopedDevelopmentApiUrl(vibe64SourceEditorDownloadPath(readRefOrGetterValue(props.sessionsApiPath),props.sessionId,path),props.projectSlug)}});const renderedMarkdownHtml=computed(()=>filePresentation.value===`rendered`?markdownRenderer.parse(editor.text.value):``);watch(editor.selectedPath,()=>{const codeRequested=props.codeFocusMode||props.openRequest?.presentation===`code`&&props.openRequest?.path===editor.selectedPath.value;filePresentation.value=codeRequested?`code`:markdownRenderable.value?`rendered`:`interface`;interfaceSymbolId.value=``;symbolPresentation.value=`description`});function openMarkdownLink(event){const anchor=event.target?.closest?.(`a[href]`);if(!anchor)return;event.preventDefault();const target=anchor.getAttribute(`href`).trim();if(/^(?:https?:|mailto:)/iu.test(target)){globalThis.open?.(target,`_blank`,`noopener,noreferrer`);return}const path=markdownDocumentLinkTarget(editor.selectedPath.value,target);if(path)editor.openFile(path)}watch([interfaceSymbols,interfaceCurrent,()=>props.openRequest],()=>{if(props.openRequest?.path!==editor.selectedPath.value||!interfaceCurrent.value)return;const requested=interfaceSymbols.value.find(symbol=>symbol.id===props.openRequest.symbolId||props.openRequest.symbol&&(symbol.qualifiedName===props.openRequest.symbol||symbol.name===props.openRequest.symbol));if(requested&&requested.id!==interfaceSymbolId.value)selectInterfaceSymbol(requested.id);if(props.openRequest.symbolPresentation)symbolPresentation.value=props.openRequest.symbolPresentation});watch([editor.selectedPath,interfaceSymbolId,filePresentation,symbolPresentation],()=>{if(props.singleFile&&props.active&&interfaceCurrent.value&&editor.selectedPath.value)emit(`interface-location`,{path:editor.selectedPath.value,symbolId:interfaceSymbolId.value,presentation:filePresentation.value,symbolPresentation:symbolPresentation.value})},{flush:`post`});const displayedPath=computed(()=>editor.downloadOnlyFile.value?.path||editor.selectedPath.value);const imagePreviewStatus=ref(`loading`);const imagePreviewVersion=ref(0);const imagePreviewUrl=computed(()=>{const filePath=editor.downloadOnlyFile.value?.path||``;if(editor.loadingFile.value||!/\.(?:png|jpe?g|gif|webp|avif|bmp|ico)$/iu.test(filePath))return``;return scopedDevelopmentApiUrl(vibe64SourceEditorDownloadPath(readRefOrGetterValue(props.sessionsApiPath),props.sessionId,filePath),props.projectSlug)});watch([imagePreviewUrl,imagePreviewVersion],()=>{imagePreviewStatus.value=`loading`},{immediate:true});function refreshFiles(){imagePreviewVersion.value+=1;editor.refresh()}const selectedStarred=computed(()=>props.fileBookmarks?.paths.value.includes(displayedPath.value)||false);const downloadingPath=ref(``);const downloadDraftOpen=ref(false);const downloadSaving=ref(false);const downloadError=ref(``);let draftDownload=null;const downloadFeedback=useUiFeedback({source:`vibe64.source-editor.download`});function requestDownload(filePath){if(!filePath||downloadingPath.value)return;const target={path:filePath,sessionId:props.sessionId,sessionsApiPath:readRefOrGetterValue(props.sessionsApiPath),projectSlug:props.projectSlug};if(filePath===editor.selectedPath.value&&(editor.dirty.value||editor.saving.value)){draftDownload=target;downloadError.value=``;downloadDraftOpen.value=true}else downloadFile(target)}async function downloadFile(target){downloadingPath.value=target.path;try{const url=scopedDevelopmentApiUrl(vibe64SourceEditorDownloadPath(target.sessionsApiPath,target.sessionId,target.path),target.projectSlug);const response=await fetch(url,{credentials:`include`});if(!response.ok||!response.headers.get(`content-disposition`)?.startsWith(`attachment;`)){const failure=await response.json().catch(()=>({}));const message=typeof failure.error===`string`?failure.error:failure.error?.message||`File could not download. Check your connection and access, then retry.`;throw new Error(message)}const blob=await response.blob();const objectUrl=URL.createObjectURL(blob);const anchor=document.createElement(`a`);anchor.href=objectUrl;anchor.download=basename(target.path);document.body.append(anchor);anchor.click();anchor.remove();setTimeout(()=>URL.revokeObjectURL(objectUrl),1e3)}catch(cause){downloadFeedback.error(cause,`File could not download.`)}finally{downloadingPath.value=``}}function downloadSavedDraft(){downloadDraftOpen.value=false;downloadFile(draftDownload)}async function saveAndDownload(){downloadSaving.value=true;await editor.saveNow();downloadSaving.value=false;if(editor.dirty.value||editor.saveError.value){downloadError.value=editor.saveError.value||`The file still has unsaved edits.`;return}downloadSavedDraft()}watch([()=>props.active,()=>props.agentActive],([active,working],[wasActive,wasWorking])=>{if(active&&(!wasActive||wasWorking&&!working))props.fileBookmarks?.refresh()});watch(()=>props.sessionId,()=>{downloadDraftOpen.value=false});const languageCompartment=new Compartment;const lineWrappingCompartment=new Compartment;const editorPerformanceSetup=[lineNumbers(),highlightActiveLineGutter(),history(),drawSelection(),dropCursor(),EditorState.allowMultipleSelections.of(true),indentOnInput(),syntaxHighlighting(defaultHighlightStyle,{fallback:true}),bracketMatching(),rectangularSelection(),crosshairCursor(),keymap.of([indentWithTab,...defaultKeymap,...historyKeymap,...searchKeymap])];const sourcePathClickExtension=EditorView.domEventHandlers({click(event,view){if(!sourcePathNavigationGesture(event)||event.button!==0)return false;const sourcePath=sourcePathReferenceAtEvent(view,event);if(!sourcePath)return false;event.preventDefault();event.stopPropagation();editor.openReferencedSourcePath({fromPath:editor.selectedPath.value,target:sourcePath.target});return true},mouseleave(_event,view){setSourcePathHoverState(view,false);return false},mousemove(event,view){setSourcePathHoverState(view,Boolean(sourcePathNavigationGesture(event)&&sourcePathReferenceAtEvent(view,event)));return false}});const expandedDirectoryPaths=ref([]);const explanationCollapsed=ref(false);const{smAndDown:mobile}=useDisplay();const fileListCollapsed=ref(mobile.value);const newFileDialogOpen=ref(false);const sourceEditorElement=ref(null);const newFileDirectory=ref(``);const newFileError=ref(``);const newFileName=ref(``);const treeStateStorageKey=computed(()=>sourceEditorTreeStateStorageKey({sessionId:props.sessionId,sessionsApiPath:props.sessionsApiPath}));const fastOpenPanelVisible=computed(()=>Boolean(editor.fileQuery.value));const searchPanelVisible=computed(()=>Boolean(editor.searchQuery.value)||editor.searchResults.value.length>0);const selectedFileName=computed(()=>editor.loadingPath.value||displayedPath.value?basename(editor.loadingPath.value||displayedPath.value):`Choose a source file`);const newFileDirectoryLabel=computed(()=>newFileDirectory.value?`Create in ${newFileDirectory.value}`:`Create in source root`);const newFilePath=computed(()=>{const name=normalizeNewFileEntryPath(newFileName.value);if(!name)return``;return newFileDirectory.value?`${newFileDirectory.value}/${name}`:name});const newFileCreateDisabled=computed(()=>Boolean(editor.creatingFile.value||!newFilePath.value));function normalizeTreePath(value=``){return String(value||``).trim().replaceAll(`\\`,`/`).replace(/^\.\/+/u,``)}function normalizeNewFileEntryPath(value=``){const raw=normalizeTreePath(value).replace(/\/+$/u,``);if(!raw||raw.startsWith(`/`))return``;const parts=raw.split(`/`).filter(Boolean);if(!parts.length||parts.some(part=>part===`.`||part===`..`))return``;return parts.join(`/`)}function basename(filePath=``){return String(filePath||``).split(`/`).at(-1)||filePath}function searchResultTitle(result={}){return`${result.path||``}:${result.line||1}:${result.column||1}`}async function focusAfterLayout(rootElement=null,selector=``){await nextTick();if(sourceEditorUnmounted)return;if(explanationFocusTimer)clearTimeout(explanationFocusTimer);explanationFocusTimer=setTimeout(()=>{explanationFocusTimer=null;rootElement?.querySelector?.(selector)?.focus?.()},0)}function collapseExplanation(event={}){const rootElement=event?.currentTarget?.closest?.(`.vibe64-source-editor`)||sourceEditorElement.value;explanationCollapsed.value=true;focusAfterLayout(rootElement,`.vibe64-source-editor__side-rail--right`)}function expandExplanation(event={}){const rootElement=event?.currentTarget?.closest?.(`.vibe64-source-editor`)||sourceEditorElement.value;explanationCollapsed.value=false;focusAfterLayout(rootElement,`.vibe64-source-explanation__range`)}async function closeExplanationPanel(event={}){const rootElement=event?.currentTarget?.closest?.(`.vibe64-source-editor`)||sourceEditorElement.value;if(await editor.closeExplanation())focusAfterLayout(rootElement,`.vibe64-source-editor__explain-button`)}function collapseFileList(){fileListCollapsed.value=true}function expandFileList(){fileListCollapsed.value=false}function normalizeExpandedDirectoryPaths(value=[]){return[...new Set((Array.isArray(value)?value:[]).map(path=>normalizeTreePath(path)).filter(Boolean))].sort((left,right)=>left.localeCompare(right))}function addExpandedDirectoryPaths(paths=[]){const normalizedPaths=normalizeExpandedDirectoryPaths(paths);if(!normalizedPaths.length)return;expandedDirectoryPaths.value=normalizeExpandedDirectoryPaths([...expandedDirectoryPaths.value,...normalizedPaths])}function parentDirectoryPathsFor(filePath=``){const parts=normalizeTreePath(filePath).split(`/`).filter(Boolean);const paths=[];for(let index=1;index<parts.length;index+=1)paths.push(parts.slice(0,index).join(`/`));return paths}function openNewFileDialog(directoryPath=``){newFileDirectory.value=normalizeTreePath(directoryPath);newFileName.value=``;newFileError.value=``;newFileDialogOpen.value=true}function closeNewFileDialog(){if(editor.creatingFile.value)return;newFileDialogOpen.value=false;newFileError.value=``}async function submitNewFile(){const filePath=newFilePath.value;if(!filePath||editor.creatingFile.value){if(String(newFileName.value||``).trim())newFileError.value=`Enter a nested file path without absolute or parent-directory segments.`;return}if(!await editor.createFile(filePath)){newFileError.value=editor.createFileError.value||`Source file could not be created.`;return}addExpandedDirectoryPaths(parentDirectoryPathsFor(filePath));newFileDialogOpen.value=false;newFileError.value=``;if(mobile.value)collapseFileList()}async function copySourcePath(path=``){const normalizedPath=normalizeTreePath(path);if(!normalizedPath)return;try{await writeClipboardText(normalizedPath)}catch{}}function askCodexAboutPath(path=``){const normalizedPath=normalizeTreePath(path);if(!normalizedPath||!props.askCodexAvailable)return;emit(`ask-codex-about-file`,normalizedPath)}function sourceEditorTreeStateStorageKey({sessionId=``,sessionsApiPath=``}={}){const normalizedSessionId=String(sessionId||``).trim();const normalizedSessionsApiPath=String(sessionsApiPath||``).trim();if(!normalizedSessionId||!normalizedSessionsApiPath)return``;return[SOURCE_EDITOR_TREE_STATE_STORAGE_KEY,stableLocalStorageKeyPart(normalizedSessionsApiPath),stableLocalStorageKeyPart(normalizedSessionId)].join(`:`)}function languageExtension(filePath=``){const lowerPath=String(filePath||``).toLowerCase();if(lowerPath.endsWith(`.vue`))return htmlSourceLanguage({matchClosingTags:false});if(/\.(html|htm|xhtml|svg)$/u.test(lowerPath))return htmlSourceLanguage();if(/\.(js|jsx|mjs|cjs)$/u.test(lowerPath))return javascript({jsx:true});if(/\.(ts|tsx)$/u.test(lowerPath))return javascript({jsx:lowerPath.endsWith(`.tsx`),typescript:true});if(lowerPath.endsWith(`.json`))return json();if(/\.(c|cc|cpp|cxx|h|hh|hpp|hxx)$/u.test(lowerPath))return cpp();if(/\.(sh|bash|zsh|fish)$/u.test(lowerPath))return StreamLanguage.define(shell);if(sourceEditorPathIsMarkdown(lowerPath))return markdown();return[]}function sourceEditorPathIsMarkdown(filePath=``){const lowerPath=String(filePath||``).toLowerCase();return/\.(md|markdown|todo)$/u.test(lowerPath)||/(^|\/)todo$/u.test(lowerPath)}function sourceEditorLineWrappingExtension(filePath=``){return sourceEditorPathIsMarkdown(filePath)?EditorView.lineWrapping:[]}function htmlSourceLanguage(options={}){return html({selfClosingTags:true,...options,nestedLanguages:[{attrs:(attrs={})=>[`ts`,`typescript`].includes(String(attrs.lang||``).toLowerCase()),parser:typescriptLanguage.parser,tag:`script`},{attrs:(attrs={})=>String(attrs.lang||``).toLowerCase()===`jsx`,parser:jsxLanguage.parser,tag:`script`},{attrs:(attrs={})=>String(attrs.lang||``).toLowerCase()===`tsx`,parser:tsxLanguage.parser,tag:`script`}]})}function sourcePathModifierPressed(event={}){return event.ctrlKey||event.metaKey}function sourcePathNavigationGesture(event={}){return props.sourcePathClickWithoutModifier||sourcePathModifierPressed(event)}function setSourcePathHoverState(view,active=false){view.dom.classList.toggle(`vibe64-source-editor__codemirror--source-link-hover`,active)}function sourcePathReferenceAtEvent(view,event={}){const position=view.posAtCoords({x:event.clientX,y:event.clientY});if(position==null)return null;const line=view.state.doc.lineAt(position);return sourcePathReferenceAtLineColumn(line.text,position-line.from)}function sourcePathReferenceAtLineColumn(lineText=``,column=0){return sourcePathReferencesInLine(lineText).find(reference=>column>=reference.from&&column<=reference.to)||null}function sourcePathReferencesInLine(lineText=``){const references=[];collectQuotedSourcePathReferences(lineText,references);collectUrlSourcePathReferences(lineText,references);return references}function collectQuotedSourcePathReferences(lineText=``,references=[]){for(let index=0;index<lineText.length;index+=1){const quote=lineText[index];if(![`"`,`'`,"`"].includes(quote))continue;let cursor=index+1;let value=``;while(cursor<lineText.length){const character=lineText[cursor];if(character===`\\`){value+=lineText[cursor+1]||``;cursor+=2;continue}if(character===quote){const target=sourcePathReferenceTarget(value);if(target)references.push({from:index+1,target,to:cursor});index=cursor;break}value+=character;cursor+=1}}}function collectUrlSourcePathReferences(lineText=``,references=[]){for(const match of lineText.matchAll(/url\(\s*([^"'`\s)]+)\s*\)/giu)){const rawTarget=match[1]||``;const target=sourcePathReferenceTarget(rawTarget);if(!target)continue;const from=Number(match.index||0)+match[0].indexOf(rawTarget);references.push({from,target,to:from+rawTarget.length})}}function sourcePathReferenceTarget(value=``){const target=String(value||``).trim();if(!target||target.startsWith(`//`)||/^[a-z][a-z0-9+.-]*:/iu.test(target))return``;if(target.startsWith(`./`)||target.startsWith(`../`)||target.startsWith(`/`))return target;return``}function createEditor(){if(!editorElement.value||editorView)return;editorView=new EditorView({parent:editorElement.value,state:EditorState.create({doc:editor.text.value,extensions:[editorPerformanceSetup,sourcePathClickExtension,languageCompartment.of(languageExtension(editor.selectedPath.value)),lineWrappingCompartment.of(sourceEditorLineWrappingExtension(editor.selectedPath.value)),EditorView.updateListener.of(update=>{if(!update.docChanged||resettingEditor)return;editor.updateText()}),EditorView.theme({"&":{backgroundColor:`rgb(var(--v-theme-surface))`,color:`rgb(var(--v-theme-on-surface))`,fontSize:`13px`,height:`100%`},".cm-content":{caretColor:`rgb(var(--v-theme-primary))`,fontFamily:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace`},".cm-focused":{outline:`none`},".cm-gutters":{backgroundColor:`rgb(var(--v-theme-surface))`,backgroundImage:`linear-gradient(rgba(var(--v-theme-surface-variant), 0.38), rgba(var(--v-theme-surface-variant), 0.38))`,borderRight:`1px solid rgba(var(--v-border-color), 0.28)`,color:`rgba(var(--v-theme-on-surface), 0.56)`},".cm-scroller":{fontFamily:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace`},".cm-selectionBackground":{backgroundColor:`rgba(var(--v-theme-primary), 0.22)`}})]})});renderedEditorPath=editor.selectedPath.value}function replaceEditorDocument(){if(!editorView)return;const selectedPath=editor.selectedPath.value;const sameFile=renderedEditorPath===selectedPath;const currentText=editorView.state.doc.toString();const changes=editorView.state.changes(sameFile?sourceEditorDocumentChanges(currentText,editor.text.value):[{from:0,insert:editor.text.value,to:currentText.length}]);const effects=[languageCompartment.reconfigure(languageExtension(selectedPath)),lineWrappingCompartment.reconfigure(sourceEditorLineWrappingExtension(selectedPath))];const cursorRequest=editor.cursorRequest.value;const explicitCursorRequest=cursorRequest?.path===selectedPath&&Number(cursorRequest.line||0)>0;if(sameFile&&!explicitCursorRequest){const scrollSnapshot=editorView.scrollSnapshot().map(changes);if(scrollSnapshot)effects.unshift(scrollSnapshot)}resettingEditor=true;try{editorView.dispatch({changes,effects})}finally{resettingEditor=false}renderedEditorPath=selectedPath;applyCursorRequest()}function applyCursorRequest(){if(!editorView)return;const request=editor.cursorRequest.value;const line=Number(request?.line||0);if(!line)return;const boundedLine=Math.max(1,Math.min(line,editorView.state.doc.lines));const lineInfo=editorView.state.doc.line(boundedLine);const column=Math.max(0,Number(request?.column||1)-1);const anchor=Math.min(lineInfo.to,lineInfo.from+column);editorView.dispatch({selection:{anchor},scrollIntoView:true});if(filePresentation.value===`code`)editorView.focus()}function runEditorCommand(command=``){if(!editorView)return;if(command===`undo`)undo(editorView);else if(command===`redo`)redo(editorView)}function currentEditorSelectionRange(){if(!editorView)return{endColumn:1,endLine:1,startColumn:1,startLine:1};const selection=editorView.state.selection.main;const from=Math.min(selection.from,selection.to);const to=Math.max(selection.from,selection.to);const fromLine=editorView.state.doc.lineAt(from);const toLine=editorView.state.doc.lineAt(to);if(selection.empty){const firstLine=editorView.state.doc.line(1);const lastLine=editorView.state.doc.line(editorView.state.doc.lines);return{endColumn:Math.max(1,lastLine.length+1),endLine:lastLine.number,scope:`file`,startColumn:1,startLine:firstLine.number}}return{endColumn:Math.max(1,to-toLine.from+1),endLine:toLine.number,scope:`selection`,startColumn:Math.max(1,from-fromLine.from+1),startLine:fromLine.number}}function explainCurrentSelection(){if(!props.assistantAvailable)return false;editor.explainSelection(currentEditorSelectionRange());return true}function retryExplanation(){if(!props.assistantAvailable)return false;editor.retryExplanation();return true}function sendExplanationFollowup(){if(!props.assistantAvailable)return false;editor.sendExplanationFollowup();return true}function openExplanationRange(explanation={}){const sourceRange=explanation?.sourceRange||{};if(sourceRange.path)editor.openFile(sourceRange.path,{column:sourceRange.startColumn,line:sourceRange.startLine})}function openExplanationSourceLink(sourceLink={}){const path=String(sourceLink?.path||``).trim();if(!path)return;editor.openFile(path,{column:Number(sourceLink.column||0)||0,line:Number(sourceLink.line||0)||0})}function handleDirectoryOpenChange({open=false,path=``}={}){const normalizedPath=normalizeTreePath(path);if(!normalizedPath)return;const nextPaths=new Set(expandedDirectoryPaths.value);if(open){nextPaths.add(normalizedPath);editor.loadDirectory(normalizedPath)}else nextPaths.delete(normalizedPath);expandedDirectoryPaths.value=normalizeExpandedDirectoryPaths([...nextPaths])}function resetExpandedDirectoryPaths(){expandedDirectoryPaths.value=normalizeExpandedDirectoryPaths(editor.preexpandedDirectoryPaths.value)}function closeAllDirectories(){expandedDirectoryPaths.value=[]}watch(mobile,compact=>{fileListCollapsed.value=compact});watch(editor.loadingPath,filePath=>{if(mobile.value&&filePath)collapseFileList()});watch(()=>props.openRequest,(request=null)=>{if(request?.path){if(request.path===editor.selectedPath.value&&request.presentation===`code`)showWholeFileCode();if(request.presentation===`interface`)filePresentation.value=`interface`;editor.openRequest(request)}},{deep:true,immediate:true});watch(()=>props.active,async active=>{if(!active)return;await nextTick();editorView?.requestMeasure?.()});watch(editor.loadedVersion,()=>{replaceEditorDocument()});watch(()=>editor.activeExplanation.value?.id||``,(explanationId=``)=>{if(explanationId)explanationCollapsed.value=false});watch(editor.preexpandedDirectoryPaths,paths=>{addExpandedDirectoryPaths(paths)});watch(editor.revealedDirectoryPaths,paths=>{addExpandedDirectoryPaths(paths)});watch(treeStateStorageKey,(storageKey=``)=>{expandedDirectoryPaths.value=normalizeExpandedDirectoryPaths(readLocalStorageJson(storageKey,[]))},{immediate:true});watch(expandedDirectoryPaths,paths=>{if(treeStateStorageKey.value)writeLocalStorageJson(treeStateStorageKey.value,normalizeExpandedDirectoryPaths(paths))});onMounted(()=>{createEditor()});onBeforeUnmount(()=>{sourceEditorUnmounted=true;if(explanationFocusTimer){clearTimeout(explanationFocusTimer);explanationFocusTimer=null}editorView?.destroy();editorView=null;renderedEditorPath=``});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{ref_key:`sourceEditorElement`,ref:sourceEditorElement,class:normalizeClass([`vibe64-source-editor`,{"vibe64-source-editor--code-focus":__props.codeFocusMode,"vibe64-source-editor--mobile":unref(mobile),"vibe64-source-editor--mobile-file-open":unref(mobile)&&fileListCollapsed.value}]),"aria-label":`Session source editor`},[!__props.singleFile||filePresentation.value===`code`?(openBlock(),createElementBlock(`header`,_hoisted_1$1,[!__props.singleFile&&unref(mobile)&&!__props.codeFocusMode?(openBlock(),createBlock(VBtn,{key:0,"aria-expanded":!fileListCollapsed.value,"aria-label":fileListCollapsed.value?`Show files`:`Hide files`,icon:fileListCollapsed.value?unref(mdiFolderOutline):unref(mdiClose),variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>fileListCollapsed.value?expandFileList():collapseFileList())},null,8,[`aria-expanded`,`aria-label`,`icon`])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_2$1,[!unref(mobile)?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiFileCodeOutline),size:`19`},null,8,[`icon`])):createCommentVNode(``,true),createBaseVNode(`h2`,{title:unref(editor).loadingPath.value||displayedPath.value||`Choose a source file`},toDisplayString(selectedFileName.value),9,_hoisted_3$1)]),unref(editor).selectedPath.value&&markdownRenderable.value?(openBlock(),createBlock(VBtn,{key:1,"min-height":`48`,variant:`text`,title:filePresentation.value===`rendered`?`Show the Markdown source`:`Show the formatted document`,onClick:_cache[1]||(_cache[1]=$event=>filePresentation.value=filePresentation.value===`rendered`?`code`:`rendered`)},{default:withCtx(()=>[createTextVNode(toDisplayString(filePresentation.value===`rendered`?`Markdown`:`Rendered`),1)]),_:1},8,[`title`])):unref(editor).selectedPath.value?(openBlock(),createBlock(VBtn,{key:2,"min-height":`48`,variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>filePresentation.value=filePresentation.value===`code`?`interface`:`code`)},{default:withCtx(()=>[createTextVNode(toDisplayString(filePresentation.value===`code`?`Interface`:`Code`),1)]),_:1})):createCommentVNode(``,true),unref(mobile)?(openBlock(),createElementBlock(`div`,_hoisted_4$1,[createVNode(VBtn,{disabled:!unref(editor).dirty.value||unref(editor).saving.value,"aria-label":unref(editor).saving.value?`Saving file`:`Save now`,icon:unref(mdiContentSaveOutline),variant:`tonal`,onClick:unref(editor).saveNow},null,8,[`disabled`,`aria-label`,`icon`,`onClick`]),createVNode(VMenu,null,{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{icon:unref(mdiDotsVertical),"aria-label":`File actions`,variant:`text`}),null,16,[`icon`])]),default:withCtx(()=>[createVNode(VList,{density:`compact`},{default:withCtx(()=>[unref(editor).statusLabel.value?(openBlock(),createBlock(VListItem,{key:0,title:unref(editor).statusLabel.value,class:normalizeClass({"text-error":unref(editor).saveError.value})},null,8,[`title`,`class`])):createCommentVNode(``,true),__props.fileBookmarks?(openBlock(),createBlock(VListItem,{key:1,title:selectedStarred.value?`Unstar file`:`Star file`,"prepend-icon":selectedStarred.value?unref(mdiStar):unref(mdiStarOutline),disabled:!displayedPath.value||__props.fileBookmarks.pendingPaths.value.includes(displayedPath.value),onClick:_cache[3]||(_cache[3]=$event=>__props.fileBookmarks.toggle(displayedPath.value))},null,8,[`title`,`prepend-icon`,`disabled`])):createCommentVNode(``,true),createVNode(VListItem,{title:`Download file`,"prepend-icon":unref(mdiDownload),disabled:!displayedPath.value||unref(editor).loadingFile.value||Boolean(downloadingPath.value),onClick:_cache[4]||(_cache[4]=$event=>requestDownload(displayedPath.value))},null,8,[`prepend-icon`,`disabled`]),createVNode(VListItem,{title:`Undo`,"prepend-icon":unref(mdiUndoVariant),disabled:!unref(editor).selectedPath.value,onClick:_cache[5]||(_cache[5]=$event=>runEditorCommand(`undo`))},null,8,[`prepend-icon`,`disabled`]),createVNode(VListItem,{title:`Redo`,"prepend-icon":unref(mdiRedoVariant),disabled:!unref(editor).selectedPath.value,onClick:_cache[6]||(_cache[6]=$event=>runEditorCommand(`redo`))},null,8,[`prepend-icon`,`disabled`]),!__props.singleFile?(openBlock(),createBlock(VListItem,{key:2,title:`Explain file or selection`,"prepend-icon":unref(mdiRobotOutline),disabled:!__props.assistantAvailable||!unref(editor).selectedPath.value||unref(editor).explanationBusy.value||unref(editor).explanationClosing.value,onClick:explainCurrentSelection},null,8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),createVNode(VListItem,{title:`Refresh files`,"prepend-icon":unref(mdiRefresh),disabled:unref(editor).loadingTree.value,onClick:refreshFiles},null,8,[`prepend-icon`,`disabled`])]),_:1})]),_:1})])):(openBlock(),createElementBlock(`div`,_hoisted_5$1,[__props.fileBookmarks?(openBlock(),createBlock(VBtn,{key:0,"aria-label":selectedStarred.value?`Unstar file`:`Star file`,"aria-pressed":selectedStarred.value,disabled:!displayedPath.value||__props.fileBookmarks.pendingPaths.value.includes(displayedPath.value),icon:selectedStarred.value?unref(mdiStar):unref(mdiStarOutline),size:`small`,title:selectedStarred.value?`Unstar file`:`Star file`,variant:`text`,onClick:_cache[7]||(_cache[7]=$event=>__props.fileBookmarks.toggle(displayedPath.value))},null,8,[`aria-label`,`aria-pressed`,`disabled`,`icon`,`title`])):createCommentVNode(``,true),createVNode(VBtn,{"aria-label":`Download file`,disabled:!displayedPath.value||unref(editor).loadingFile.value||Boolean(downloadingPath.value),icon:unref(mdiDownload),size:`small`,title:downloadingPath.value?`Downloading file…`:`Download file`,variant:`text`,onClick:_cache[8]||(_cache[8]=$event=>requestDownload(displayedPath.value))},null,8,[`disabled`,`icon`,`title`]),unref(editor).statusLabel.value?(openBlock(),createElementBlock(`span`,{key:1,class:normalizeClass([`vibe64-source-editor__status`,{"vibe64-source-editor__status--error":unref(editor).saveError.value}])},toDisplayString(unref(editor).statusLabel.value),3)):createCommentVNode(``,true),createVNode(VBtn,{disabled:!unref(editor).selectedPath.value,icon:unref(mdiUndoVariant),size:`small`,title:`Undo`,type:`button`,variant:`text`,onClick:_cache[9]||(_cache[9]=$event=>runEditorCommand(`undo`))},null,8,[`disabled`,`icon`]),createVNode(VBtn,{disabled:!unref(editor).selectedPath.value,icon:unref(mdiRedoVariant),size:`small`,title:`Redo`,type:`button`,variant:`text`,onClick:_cache[10]||(_cache[10]=$event=>runEditorCommand(`redo`))},null,8,[`disabled`,`icon`]),createVNode(VBtn,{disabled:!unref(editor).dirty.value||unref(editor).saving.value,icon:unref(mdiContentSaveOutline),loading:unref(editor).saving.value,size:`small`,title:`Save now`,type:`button`,variant:`tonal`,onClick:unref(editor).saveNow},null,8,[`disabled`,`icon`,`loading`,`onClick`]),!__props.singleFile?(openBlock(),createBlock(VBtn,{key:2,class:`vibe64-source-editor__explain-button`,"aria-busy":unref(editor).explanationBusy.value||unref(editor).explanationClosing.value?`true`:`false`,color:`primary`,disabled:!__props.assistantAvailable||!unref(editor).selectedPath.value||unref(editor).explanationBusy.value||unref(editor).explanationClosing.value,"prepend-icon":unref(mdiRobotOutline),size:`small`,title:!__props.assistantAvailable?__props.assistantUnavailableMessage:unref(editor).explanationClosing.value?`Closing explanation`:unref(editor).explanationBusy.value?`Explanation in progress`:`Explain file or selection`,type:`button`,variant:`tonal`,onClick:explainCurrentSelection},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(editor).explanationClosing.value?`Closing…`:unref(editor).explanationBusy.value?`Working…`:`Explain`),1)]),_:1},8,[`aria-busy`,`disabled`,`prepend-icon`,`title`])):createCommentVNode(``,true),!__props.singleFile?(openBlock(),createBlock(VBtn,{key:3,disabled:unref(editor).loadingTree.value,icon:unref(mdiRefresh),"aria-busy":unref(editor).loadingTree.value,size:`small`,title:`Refresh files`,type:`button`,variant:`text`,onClick:refreshFiles},null,8,[`disabled`,`icon`,`aria-busy`])):createCommentVNode(``,true)]))])):createCommentVNode(``,true),!__props.singleFile&&!__props.codeFocusMode&&(!unref(mobile)||!fileListCollapsed.value)?(openBlock(),createElementBlock(`div`,_hoisted_6$1,[createBaseVNode(`div`,_hoisted_7$1,[createVNode(VTextField,{autocomplete:`off`,clearable:``,density:`compact`,"hide-details":``,label:`Open file`,"model-value":unref(editor).fileQuery.value,"prepend-inner-icon":unref(mdiFileSearchOutline),variant:`outlined`,onKeydown:withKeys(withModifiers(unref(editor).openFirstFileMatch,[`prevent`]),[`enter`]),"onUpdate:modelValue":unref(editor).updateFileQuery},null,8,[`model-value`,`prepend-inner-icon`,`onKeydown`,`onUpdate:modelValue`]),fastOpenPanelVisible.value?(openBlock(),createElementBlock(`div`,_hoisted_8$1,[unref(editor).fileMatchesLoading.value?(openBlock(),createElementBlock(`div`,_hoisted_9$1,` Finding files... `)):unref(editor).fileMatchesError.value?(openBlock(),createElementBlock(`div`,_hoisted_10$1,toDisplayString(unref(editor).fileMatchesError.value),1)):(openBlock(),createElementBlock(Fragment,{key:2},[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(editor).fileMatches.value,file=>{return openBlock(),createElementBlock(`button`,{key:file.path,class:`vibe64-source-editor__match`,title:file.path,type:`button`,onClick:$event=>unref(editor).openFileMatch(file.path)},[createBaseVNode(`span`,_hoisted_12,toDisplayString(file.name||basename(file.path)),1),createBaseVNode(`span`,_hoisted_13,toDisplayString(file.path),1)],8,_hoisted_11$1)}),128)),!unref(editor).fileMatches.value.length?(openBlock(),createElementBlock(`div`,_hoisted_14,` No matching files. `)):createCommentVNode(``,true),unref(editor).fileMatchesTruncated.value?(openBlock(),createElementBlock(`div`,_hoisted_15,` Keep typing to narrow the list. `)):createCommentVNode(``,true)],64))])):createCommentVNode(``,true)]),createBaseVNode(`div`,_hoisted_16,[createVNode(VTextField,{autocomplete:`off`,clearable:``,density:`compact`,"hide-details":``,label:`Find in files`,"model-value":unref(editor).searchQuery.value,"prepend-inner-icon":unref(mdiMagnify),variant:`outlined`,onKeydown:_cache[11]||(_cache[11]=withKeys(withModifiers($event=>unref(editor).openSearchResult(unref(editor).searchResults.value[0]),[`prevent`]),[`enter`])),"onUpdate:modelValue":unref(editor).updateSearchQuery},null,8,[`model-value`,`prepend-inner-icon`,`onUpdate:modelValue`])])])):createCommentVNode(``,true),createBaseVNode(`div`,{class:normalizeClass([`vibe64-source-editor__body`,{"vibe64-source-editor__body--code-focus":__props.codeFocusMode||__props.singleFile,"vibe64-source-editor__body--file-list-collapsed":fileListCollapsed.value&&!__props.codeFocusMode}])},[!__props.singleFile&&!__props.codeFocusMode?withDirectives((openBlock(),createElementBlock(`aside`,{key:0,class:normalizeClass([`vibe64-source-editor__sidebar`,{"vibe64-source-editor__sidebar--collapsed":fileListCollapsed.value}])},[fileListCollapsed.value?(openBlock(),createElementBlock(`button`,{key:0,"aria-label":`Show files`,class:`vibe64-source-editor__side-rail`,title:`Show files`,type:`button`,onClick:expandFileList},[createVNode(VIcon,{icon:unref(mdiChevronRight),size:`22`},null,8,[`icon`]),_cache[24]||(_cache[24]=createBaseVNode(`span`,null,`Files`,-1))])):(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`div`,_hoisted_17,[_cache[25]||(_cache[25]=createBaseVNode(`span`,null,`Files`,-1)),createBaseVNode(`div`,_hoisted_18,[createVNode(VBtn,{"aria-label":`New file at source root`,disabled:unref(editor).creatingFile.value||!unref(editor).tree.value,icon:unref(mdiFilePlusOutline),size:`x-small`,title:`New file at source root`,type:`button`,variant:`text`,onClick:_cache[12]||(_cache[12]=$event=>openNewFileDialog(``))},null,8,[`disabled`,`icon`]),createVNode(VBtn,{class:`vibe64-source-editor__collapse-files-button`,"aria-label":`Collapse file list`,icon:unref(mdiChevronLeft),size:`small`,title:`Collapse file list`,type:`button`,variant:`text`,onClick:collapseFileList},null,8,[`icon`]),createVNode(VBtn,{"aria-label":`Reset folder view`,disabled:!unref(editor).tree.value,icon:unref(mdiRestore),size:`x-small`,title:`Reset folder view`,type:`button`,variant:`text`,onClick:resetExpandedDirectoryPaths},null,8,[`disabled`,`icon`]),createVNode(VBtn,{"aria-label":`Close all folders`,disabled:!unref(editor).tree.value||!expandedDirectoryPaths.value.length,icon:unref(mdiCollapseAllOutline),size:`x-small`,title:`Close all folders`,type:`button`,variant:`text`,onClick:closeAllDirectories},null,8,[`disabled`,`icon`])])]),__props.fileBookmarks?(openBlock(),createElementBlock(`details`,{key:0,class:`vibe64-source-editor__starred`,open:__props.fileBookmarks.files.value.length<=4},[createBaseVNode(`summary`,null,[_cache[26]||(_cache[26]=createTextVNode(`Starred `,-1)),createBaseVNode(`span`,null,toDisplayString(__props.fileBookmarks.files.value.length),1)]),createVNode(Vibe64StarredFilesList_default,{bookmarks:__props.fileBookmarks,compact:``,onOpenFile:unref(editor).openFile},null,8,[`bookmarks`,`onOpenFile`])],8,_hoisted_19)):createCommentVNode(``,true),searchPanelVisible.value?(openBlock(),createElementBlock(`section`,_hoisted_20,[createBaseVNode(`div`,_hoisted_21,[_cache[27]||(_cache[27]=createBaseVNode(`span`,null,`Find results`,-1)),createBaseVNode(`small`,null,toDisplayString(unref(editor).searchResults.value.length),1)]),unref(editor).searchIndexLabel.value?(openBlock(),createElementBlock(`div`,{key:0,class:normalizeClass([`vibe64-source-editor__notice`,{"vibe64-source-editor__notice--error":unref(editor).searchIndex.value?.state===`error`}]),role:`status`},toDisplayString(unref(editor).searchIndexLabel.value),3)):createCommentVNode(``,true),unref(editor).searchLoading.value&&!unref(editor).searchResults.value.length?(openBlock(),createElementBlock(`div`,_hoisted_22,` Searching files... `)):unref(editor).searchError.value?(openBlock(),createElementBlock(`div`,_hoisted_23,toDisplayString(unref(editor).searchError.value),1)):!unref(editor).searchResults.value.length&&unref(editor).searchIndex.value?.state!==`error`?(openBlock(),createElementBlock(`div`,_hoisted_24,toDisplayString(unref(editor).searchIndexPending.value?`Results will appear as files are indexed.`:`No results.`),1)):(openBlock(true),createElementBlock(Fragment,{key:4},renderList(unref(editor).searchResults.value,result=>{return openBlock(),createElementBlock(`button`,{key:`${result.path}:${result.line}:${result.column}:${result.preview}`,class:`vibe64-source-editor__search-result`,title:searchResultTitle(result),type:`button`,onClick:$event=>unref(editor).openSearchResult(result)},[createBaseVNode(`span`,_hoisted_26,toDisplayString(result.path),1),createBaseVNode(`span`,_hoisted_27,`Line `+toDisplayString(result.line),1),createBaseVNode(`span`,_hoisted_28,toDisplayString(result.preview),1)],8,_hoisted_25)}),128)),unref(editor).searchTruncated.value?(openBlock(),createElementBlock(`div`,_hoisted_29,` Search stopped at the first matches. Narrow the query for more precision. `)):createCommentVNode(``,true)])):createCommentVNode(``,true),unref(editor).loadingTree.value&&!unref(editor).tree.value?(openBlock(),createElementBlock(`div`,_hoisted_30,` Loading files... `)):unref(editor).loadError.value&&!unref(editor).tree.value?(openBlock(),createElementBlock(`div`,_hoisted_31,toDisplayString(unref(editor).loadError.value),1)):unref(editor).tree.value?(openBlock(),createBlock(Vibe64SourceFileTree_default,{key:4,"expanded-paths":expandedDirectoryPaths.value,"load-errors":unref(editor).treeLoadErrors.value,"loading-paths":unref(editor).treeLoadingPaths.value,node:unref(editor).tree.value,"selected-path":displayedPath.value,"starred-paths":__props.fileBookmarks?.paths.value||[],"ask-codex-available":__props.askCodexAvailable,onAskCodex:askCodexAboutPath,onCopyPath:copySourcePath,onDirectoryOpenChange:handleDirectoryOpenChange,onLoadMoreDirectory:unref(editor).loadMoreDirectory,onNewFile:openNewFileDialog,onOpenFile:unref(editor).openFile,onToggleStar:_cache[13]||(_cache[13]=$event=>__props.fileBookmarks?.toggle($event)),onDownloadFile:requestDownload},null,8,[`expanded-paths`,`load-errors`,`loading-paths`,`node`,`selected-path`,`starred-paths`,`ask-codex-available`,`onLoadMoreDirectory`,`onOpenFile`])):createCommentVNode(``,true)],64))],2)),[[vShow,!unref(mobile)||!fileListCollapsed.value]]):createCommentVNode(``,true),withDirectives(createBaseVNode(`main`,_hoisted_32,[unref(editor).loadError.value&&(__props.singleFile||unref(editor).tree.value)?(openBlock(),createElementBlock(`div`,_hoisted_33,toDisplayString(unref(editor).loadError.value),1)):createCommentVNode(``,true),unref(editor).downloadOnlyFile.value&&!imagePreviewUrl.value&&!unref(editor).loadingFile.value?(openBlock(),createElementBlock(`div`,_hoisted_34,[createBaseVNode(`p`,_hoisted_35,toDisplayString(unref(editor).downloadOnlyFile.value.message),1),createVNode(VBtn,{color:`primary`,disabled:Boolean(downloadingPath.value),"prepend-icon":unref(mdiDownload),onClick:_cache[14]||(_cache[14]=$event=>requestDownload(unref(editor).downloadOnlyFile.value.path))},{default:withCtx(()=>[createTextVNode(toDisplayString(downloadingPath.value?`Downloading…`:`Download file`),1)]),_:1},8,[`disabled`,`prepend-icon`])])):!displayedPath.value&&!unref(editor).loadingFile.value?(openBlock(),createElementBlock(`div`,_hoisted_36,` Select a file to edit. `)):createCommentVNode(``,true),unref(editor).explanationError.value&&!unref(editor).activeExplanation.value?(openBlock(),createElementBlock(`div`,_hoisted_37,toDisplayString(unref(editor).explanationError.value),1)):createCommentVNode(``,true),createBaseVNode(`div`,{class:normalizeClass([`vibe64-source-editor__workspace`,{"vibe64-source-editor__workspace--with-explanation":!__props.singleFile&&unref(editor).activeExplanation.value&&filePresentation.value===`code`,"vibe64-source-editor__workspace--explanation-collapsed":!__props.singleFile&&unref(editor).activeExplanation.value&&explanationCollapsed.value&&filePresentation.value===`code`}])},[withDirectives(createBaseVNode(`div`,{ref_key:`editorElement`,ref:editorElement,class:normalizeClass([`vibe64-source-editor__codemirror`,{"vibe64-source-editor__codemirror--hidden":!unref(editor).selectedPath.value||unref(editor).loadingFile.value}])},null,2),[[vShow,filePresentation.value===`code`]]),unref(editor).selectedPath.value&&!unref(editor).loadingFile.value&&filePresentation.value===`interface`?(openBlock(),createBlock(Vibe64SourceInterface_default,{key:0,"file-path":unref(editor).selectedPath.value,"file-hash":unref(editor).savedHash.value,interpretations:unref(editor).interpretations.value,"interpretation-warning":unref(editor).interpretationWarning.value,"active-interpretation":activeInterfaceInterpretation.value,"active-file-interpretation":activeFileInterpretation.value,symbols:interfaceSymbols.value,programs:interfacePrograms.value,"program-status":interfaceArchitecture.value?.program?.status,"selected-id":interfaceSymbolId.value,current:interfaceCurrent.value,indexed:Boolean(interfaceFile.value),dirty:unref(editor).dirty.value,busy:unref(editor).explanationBusy.value||unref(editor).explanationClosing.value,"analysis-error":__props.architectureFacts?``:unref(interfaceGraph)?.error.value,"assistant-available":__props.assistantAvailable,"assistant-unavailable-message":__props.assistantUnavailableMessage,source:interfaceSymbolSource.value,presentation:symbolPresentation.value,onSelectSymbol:selectInterfaceSymbol,onPresentSymbol:presentInterfaceSymbol,onExplainFile:presentFileOverview,onWholeFileCode:showWholeFileCode,onOpenSource:_cache[15]||(_cache[15]=$event=>_ctx.$emit(`open-source-file`,$event)),onOpenProgram:_cache[16]||(_cache[16]=$event=>_ctx.$emit(`open-program`,$event))},{explanation:withCtx(({savedBody})=>[activeInterfaceInterpretation.value||activeFileInterpretation.value?(openBlock(),createBlock(Vibe64SourceExplanationPanel_default,{key:0,embedded:``,"saved-body":savedBody,"assistant-available":__props.assistantAvailable,"assistant-unavailable-message":__props.assistantUnavailableMessage,busy:unref(editor).explanationBusy.value,closing:unref(editor).explanationClosing.value,explanation:unref(editor).activeExplanation.value,followup:unref(editor).explanationFollowup.value,"selected-path":unref(editor).selectedPath.value,onClose:closeExplanationPanel,onOpenRange:openExplanationRange,onOpenSourceLink:openExplanationSourceLink,onRetry:retryExplanation,onSendFollowup:sendExplanationFollowup,onStop:unref(editor).stopExplanation,"onUpdate:followup":unref(editor).updateExplanationFollowup},null,8,[`saved-body`,`assistant-available`,`assistant-unavailable-message`,`busy`,`closing`,`explanation`,`followup`,`selected-path`,`onStop`,`onUpdate:followup`])):createCommentVNode(``,true)]),_:1},8,[`file-path`,`file-hash`,`interpretations`,`interpretation-warning`,`active-interpretation`,`active-file-interpretation`,`symbols`,`programs`,`program-status`,`selected-id`,`current`,`indexed`,`dirty`,`busy`,`analysis-error`,`assistant-available`,`assistant-unavailable-message`,`source`,`presentation`])):createCommentVNode(``,true),unref(editor).selectedPath.value&&!unref(editor).loadingFile.value&&filePresentation.value===`rendered`?(openBlock(),createElementBlock(`div`,_hoisted_38,[createBaseVNode(`div`,{onClick:openMarkdownLink},[createVNode(GithubMarkdown_default,{html:renderedMarkdownHtml.value},null,8,[`html`])])])):createCommentVNode(``,true),imagePreviewUrl.value?(openBlock(),createElementBlock(`div`,_hoisted_39,[imagePreviewStatus.value===`failed`?(openBlock(),createElementBlock(`div`,_hoisted_40,[_cache[29]||(_cache[29]=createBaseVNode(`p`,{class:`mb-3`,role:`alert`},`This image could not be displayed. Try again or download the file.`,-1)),createVNode(VBtn,{variant:`tonal`,onClick:_cache[17]||(_cache[17]=$event=>imagePreviewVersion.value+=1)},{default:withCtx(()=>[..._cache[28]||(_cache[28]=[createTextVNode(`Retry`,-1)])]),_:1})])):(openBlock(),createElementBlock(`img`,{key:`${imagePreviewUrl.value}:${imagePreviewVersion.value}`,src:imagePreviewUrl.value,alt:selectedFileName.value,style:normalizeStyle({visibility:imagePreviewStatus.value===`loaded`?`visible`:`hidden`}),onLoad:_cache[18]||(_cache[18]=$event=>imagePreviewStatus.value=`loaded`),onError:_cache[19]||(_cache[19]=$event=>imagePreviewStatus.value=`failed`)},null,44,_hoisted_41))])):createCommentVNode(``,true),unref(editor).loadingFile.value||imagePreviewUrl.value&&imagePreviewStatus.value===`loading`?(openBlock(),createElementBlock(`div`,{key:3,"aria-label":`Opening ${selectedFileName.value}`,"aria-live":`polite`,class:`vibe64-source-editor__file-loading`,role:`status`},[createVNode(VSkeletonLoader,{class:`vibe64-source-editor__file-skeleton`,type:`image`})],8,_hoisted_42)):createCommentVNode(``,true),!__props.singleFile&&unref(editor).activeExplanation.value&&filePresentation.value===`code`?(openBlock(),createElementBlock(`div`,{key:4,class:normalizeClass([`vibe64-source-editor__explanation-dock`,{"vibe64-source-editor__explanation-dock--collapsed":explanationCollapsed.value}])},[withDirectives(createVNode(Vibe64SourceExplanationPanel_default,{"assistant-available":__props.assistantAvailable,"assistant-unavailable-message":__props.assistantUnavailableMessage,busy:unref(editor).explanationBusy.value,closing:unref(editor).explanationClosing.value,explanation:unref(editor).activeExplanation.value,followup:unref(editor).explanationFollowup.value,"selected-path":unref(editor).selectedPath.value,onClose:closeExplanationPanel,onCollapse:collapseExplanation,onOpenRange:openExplanationRange,onOpenSourceLink:openExplanationSourceLink,onRetry:retryExplanation,onSendFollowup:sendExplanationFollowup,onStop:unref(editor).stopExplanation,"onUpdate:followup":unref(editor).updateExplanationFollowup},null,8,[`assistant-available`,`assistant-unavailable-message`,`busy`,`closing`,`explanation`,`followup`,`selected-path`,`onStop`,`onUpdate:followup`]),[[vShow,!explanationCollapsed.value]]),withDirectives(createBaseVNode(`button`,{"aria-label":`Show explanation`,class:`vibe64-source-editor__side-rail vibe64-source-editor__side-rail--right`,title:`Show explanation`,type:`button`,onClick:expandExplanation},[createVNode(VIcon,{icon:unref(mdiChevronLeft),size:`22`},null,8,[`icon`]),_cache[30]||(_cache[30]=createBaseVNode(`span`,null,`AI`,-1))],512),[[vShow,explanationCollapsed.value]])],2)):createCommentVNode(``,true)],2)],512),[[vShow,__props.singleFile||!unref(mobile)||fileListCollapsed.value||__props.codeFocusMode]])],2),createVNode(VDialog,{modelValue:newFileDialogOpen.value,"onUpdate:modelValue":_cache[21]||(_cache[21]=$event=>newFileDialogOpen.value=$event),"max-width":`520`},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[..._cache[31]||(_cache[31]=[createTextVNode(`New file`,-1)])]),_:1}),createVNode(VCardText,{class:`vibe64-source-editor__new-file-dialog`},{default:withCtx(()=>[createBaseVNode(`p`,null,toDisplayString(newFileDirectoryLabel.value),1),newFileError.value?(openBlock(),createBlock(VAlert,{key:0,density:`compact`,type:`warning`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(newFileError.value),1)]),_:1})):createCommentVNode(``,true),createVNode(VTextField,{modelValue:newFileName.value,"onUpdate:modelValue":_cache[20]||(_cache[20]=$event=>newFileName.value=$event),autofocus:``,autocomplete:`off`,disabled:unref(editor).creatingFile.value,label:`Path`,placeholder:`components/NewFile.vue`,variant:`outlined`,onKeydown:withKeys(withModifiers(submitNewFile,[`prevent`]),[`enter`])},null,8,[`modelValue`,`disabled`,`onKeydown`])]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{disabled:unref(editor).creatingFile.value,type:`button`,variant:`text`,onClick:closeNewFileDialog},{default:withCtx(()=>[..._cache[32]||(_cache[32]=[createTextVNode(` Cancel `,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,disabled:newFileCreateDisabled.value,loading:unref(editor).creatingFile.value,type:`button`,variant:`flat`,onClick:submitNewFile},{default:withCtx(()=>[..._cache[33]||(_cache[33]=[createTextVNode(` Create `,-1)])]),_:1},8,[`disabled`,`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),createVNode(VDialog,{modelValue:downloadDraftOpen.value,"onUpdate:modelValue":_cache[23]||(_cache[23]=$event=>downloadDraftOpen.value=$event),"max-width":`440`},{default:withCtx(()=>[createVNode(VCard,{title:`Download this file?`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[_cache[34]||(_cache[34]=createTextVNode(` This file has unsaved edits. Download the saved version, or save your edits first. `,-1)),downloadError.value?(openBlock(),createBlock(VAlert,{key:0,class:`mt-3`,density:`compact`,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(downloadError.value),1)]),_:1})):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`flex-wrap`},{default:withCtx(()=>[createVNode(VBtn,{disabled:downloadSaving.value,onClick:_cache[22]||(_cache[22]=$event=>downloadDraftOpen.value=false)},{default:withCtx(()=>[..._cache[35]||(_cache[35]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{disabled:downloadSaving.value,onClick:downloadSavedDraft},{default:withCtx(()=>[..._cache[36]||(_cache[36]=[createTextVNode(`Download saved file`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,disabled:downloadSaving.value,onClick:saveAndDownload},{default:withCtx(()=>[createTextVNode(toDisplayString(downloadSaving.value?`Saving…`:`Save & download`),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),createBaseVNode(`span`,_hoisted_43,toDisplayString(downloadingPath.value?`Downloading file…`:``),1)],2)}}};var Vibe64SessionSourceEditor_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-fcf2243a`]]);var _hoisted_1=[`aria-label`];var _hoisted_2={key:0,class:`session-file-area__drop-target`,role:`status`};var _hoisted_3={key:1,class:`d-flex align-center ga-2 flex-wrap px-3 pt-2`};var _hoisted_4={class:`text-body-small flex-grow-1`};var _hoisted_5={key:2,class:`d-flex align-center ga-2 flex-wrap px-3`};var _hoisted_6={key:4,class:`pa-4`};var _hoisted_7={class:`text-body-medium session-file-area__filename`};var _hoisted_8={key:1,class:`session-file-area__preview`,tabindex:`0`};var _hoisted_9={key:2,class:`pa-4`};var _hoisted_10={key:1,class:`pa-4 text-body-medium`};var _hoisted_11={key:0};var _sfc_main$1={__name:`Vibe64SessionFileArea`,props:{area:{type:String,required:true},archived:{type:Boolean,default:false},sessionId:{type:String,required:true},sessionsApiPath:{type:String,required:true},projectSlug:{type:String,default:``},active:{type:Boolean,default:true},agentActive:{type:Boolean,default:false}},setup(__props){const props=__props;const{smAndDown:mobile}=useDisplay();const writable=computed(()=>[`drop-zone`,`backups`].includes(props.area));const areaLabel=computed(()=>props.area===`backups`?`Project Backups`:props.area===`drop-zone`?`Session Dropzone`:`Session files, read only`);const areaDescription=computed(()=>props.area===`backups`?`Shared across this project · Files automatically deleted after 2 weeks without changes`:props.area===`session`?`Session runtime files · Read only`:`Temporary file exchange · Deleted when this session is archived`);const base=computed(()=>`${props.sessionsApiPath}/${encodeURIComponent(props.sessionId)}/files/${encodeURIComponent(props.area)}`);const directory=ref(``);const entries=ref([]);const location=ref(``);const expired=ref(false);const hasMore=ref(false);const nextOffset=ref(0);const loading=ref(false);const loadError=ref(``);const busy=ref(false);const file=ref(null);const draft=ref(``);const dirty=computed(()=>file.value&&typeof file.value.text===`string`&&draft.value!==file.value.text);const uploadInput=ref(null);const dragDepth=ref(0);let disposed=false;const dialogOpen=ref(false);const dialogOperation=ref(``);const dialogEntry=ref(null);const dialogName=ref(``);const nameError=ref(``);const feedback=useUiFeedback({source:`vibe64.files`});let generation=0;let pendingRefresh=false;const breadcrumbs=computed(()=>[{title:areaLabel.value,path:``},...directory.value.split(`/`).filter(Boolean).map((name,i,parts)=>({title:name,path:parts.slice(0,i+1).join(`/`)}))]);function url(operation,filePath,offset=0){return`${base.value}/${operation}?${new URLSearchParams({path:filePath,offset})}`}async function request(endpoint,options){const result=await getHttpWebClient().request(endpoint,options);if(result?.ok===false)throw new Error(vibe64ApiResponseError(result,`File operation failed.`));return result}async function loadDirectory(target=``,append=false){const current=++generation;loading.value=true;loadError.value=``;file.value=null;try{const result=await request(url(`tree`,target,append?nextOffset.value:0));if(current!==generation)return;directory.value=target;entries.value=append?[...entries.value,...result.tree.children]:result.tree.children;hasMore.value=result.tree.hasMore;nextOffset.value=result.tree.nextOffset;location.value=result.location||``;expired.value=result.expired===true}catch(error){if(current===generation)loadError.value=error.message}finally{if(current===generation)loading.value=false}}async function openEntry(entry){if(entry.type===`directory`)return loadDirectory(entry.path);const current=++generation;loading.value=true;try{const result=await request(url(`file`,entry.path));if(current!==generation)return;file.value=result.file;draft.value=result.file.text}catch(error){if(current!==generation)return;file.value={path:entry.path,message:error.message}}finally{if(current===generation)loading.value=false}}async function command(run){if(busy.value)return;busy.value=true;try{await run()}catch(error){feedback.error(error,`File operation failed.`)}finally{busy.value=false}}function save(){return command(async()=>{const result=await request(`${base.value}/file`,{method:`PUT`,body:{path:file.value.path,baseHash:file.value.hash,text:draft.value}});file.value=result.file;draft.value=result.file.text})}function dragEnter(event){if(writable.value&&!expired.value&&!busy.value&&event.dataTransfer?.types.includes(`Files`))dragDepth.value+=1}function dragOver(event){if(event.dataTransfer){const canUpload=writable.value&&!expired.value&&!busy.value&&!dirty.value;event.dataTransfer.dropEffect=canUpload?`copy`:`none`}}function dragLeave(){dragDepth.value=Math.max(0,dragDepth.value-1)}function dropFiles(event){dragDepth.value=0;if(!writable.value||expired.value||busy.value)return;if(dirty.value){feedback.error(new Error(`Save or discard your edits before uploading files.`));return}if([...event.dataTransfer?.items||[]].some(item=>item.webkitGetAsEntry?.()?.isDirectory)){feedback.error(new Error(`Drop files individually, or upload a zip for a whole folder.`));return}return uploadFiles([...event.dataTransfer?.files||[]])}function upload(event){const files=[...event.target.files||[]];event.target.value=``;return uploadFiles(files)}function uploadFiles(files){if(!files.length)return;const endpoint=base.value;const folder=directory.value;return command(async()=>{for(const selected of files){if(disposed)break;try{if(selected.size>524288e3)throw new Error(`Choose a file no larger than ${VIBE64_UPLOAD_MAX_LABEL}.`);const data=new FormData;data.append(`file`,selected);const target=[folder,selected.name].filter(Boolean).join(`/`);await request(`${endpoint}/upload?${new URLSearchParams({path:target})}`,{method:`POST`,body:data})}catch(error){feedback.error(new Error(`${selected.name}: ${error.message}`),`Upload failed.`)}}if(!disposed)await loadDirectory(folder)})}function download(target,operation=`download`){return command(async()=>{const response=await fetch(scopedDevelopmentApiUrl(url(operation,target),props.projectSlug),{credentials:`include`});if(!response.ok||!response.headers.get(`content-disposition`)?.startsWith(`attachment;`))throw new Error(vibe64ApiResponseError(await response.json().catch(()=>({})),`Download failed.`));const objectUrl=URL.createObjectURL(await response.blob());const anchor=document.createElement(`a`);anchor.href=objectUrl;anchor.download=target.split(`/`).at(-1);document.body.append(anchor);anchor.click();anchor.remove();setTimeout(()=>URL.revokeObjectURL(objectUrl),1e3)})}function openDialog(operation,entry=null){dialogOperation.value=operation;dialogEntry.value=entry;dialogName.value=entry?.name||``;nameError.value=``;dialogOpen.value=true}function confirmDialog(){const operation=dialogOperation.value;if(operation!==`delete`&&(!dialogName.value.trim()||/[/\\]/u.test(dialogName.value)||[`.`,`..`].includes(dialogName.value.trim()))){nameError.value=`Enter a name without directory separators.`;return}return command(async()=>{const suffix=operation===`mkdir`?`directory`:operation===`delete`?`file`:`rename`;const destination=[directory.value,dialogName.value.trim()].filter(Boolean).join(`/`);await request(`${base.value}/${suffix}`,{method:operation===`delete`?`DELETE`:`POST`,body:{path:operation===`mkdir`?destination:dialogEntry.value.path,...operation===`rename`?{destination}:{}}});dialogOpen.value=false;await loadDirectory(directory.value)})}function copyLocation(){return command(()=>writeClipboardText(location.value))}function refresh(){if(dirty.value||busy.value){pendingRefresh=true;return}pendingRefresh=false;return file.value?openEntry({type:`file`,path:file.value.path}):loadDirectory(directory.value)}function entrySubtitle(entry){if(entry.type!==`file`)return`Folder`;const expiry=entry.expiresAt?` · Expires ${new Date(entry.expiresAt).toLocaleString()}`:``;return`${formatSize(entry.size)}${expiry}`}function formatSize(bytes){if(bytes<1024)return`${bytes} B`;if(bytes<1048576)return`${(bytes/1024).toFixed(1)} KiB`;return`${(bytes/1048576).toFixed(1)} MiB`}watch(base,()=>{directory.value=``;loadDirectory()},{immediate:true});watch(()=>props.agentActive,(working,wasWorking)=>{if(!wasWorking||working)return;if(props.active)refresh();else pendingRefresh=true});watch([()=>props.active,dirty],([active,changed])=>{if(active&&!changed&&pendingRefresh)refresh()});onScopeDispose(()=>{disposed=true;generation+=1});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:normalizeClass([`session-file-area`,{"session-file-area--mobile":unref(mobile)}]),"aria-label":areaLabel.value,onDragenter:withModifiers(dragEnter,[`prevent`]),onDragover:withModifiers(dragOver,[`prevent`]),onDragleave:withModifiers(dragLeave,[`prevent`]),onDrop:withModifiers(dropFiles,[`prevent`])},[dragDepth.value>0&&writable.value&&!expired.value&&!busy.value?(openBlock(),createElementBlock(`div`,_hoisted_2,[createVNode(VIcon,{icon:unref(mdiUpload),size:`40`},null,8,[`icon`]),_cache[14]||(_cache[14]=createBaseVNode(`span`,null,`Drop files here to upload`,-1))])):createCommentVNode(``,true),!unref(mobile)||!file.value?(openBlock(),createElementBlock(`div`,_hoisted_3,[createBaseVNode(`span`,_hoisted_4,toDisplayString(areaDescription.value),1),__props.archived&&__props.area===`session`?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiDownload),size:`small`,variant:`text`,disabled:busy.value,onClick:_cache[0]||(_cache[0]=$event=>download(`${__props.sessionId}.tar.gz`,`archive`))},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(`Download archive`,-1)])]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),location.value?(openBlock(),createBlock(VBtn,{key:1,"prepend-icon":unref(mdiContentCopy),size:`small`,variant:`text`,onClick:copyLocation},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Copy AI path`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true),createVNode(VBtn,{icon:unref(mdiRefresh),"aria-label":`Refresh files`,title:`Refresh files`,variant:`text`,disabled:loading.value||busy.value,onClick:refresh},null,8,[`icon`,`disabled`])])):createCommentVNode(``,true),!unref(mobile)||!file.value?(openBlock(),createElementBlock(`div`,_hoisted_5,[file.value?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiArrowLeft),variant:`text`,disabled:dirty.value||busy.value,onClick:_cache[1]||(_cache[1]=$event=>file.value=null)},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(`Back to folder`,-1)])]),_:1},8,[`prepend-icon`,`disabled`])):(openBlock(),createBlock(VBreadcrumbs,{key:1,items:breadcrumbs.value,density:`compact`,class:`pa-0 flex-grow-1`},{item:withCtx(({item})=>[createVNode(VBtn,{size:`small`,variant:`text`,disabled:loading.value||busy.value,onClick:$event=>loadDirectory(item.path)},{default:withCtx(()=>[createTextVNode(toDisplayString(item.title),1)]),_:2},1032,[`disabled`,`onClick`])]),_:1},8,[`items`])),writable.value&&!expired.value&&!file.value?(openBlock(),createElementBlock(Fragment,{key:2},[createBaseVNode(`input`,{ref_key:`uploadInput`,ref:uploadInput,type:`file`,multiple:``,class:`d-none`,"aria-label":`Choose a file to upload`,onChange:upload},null,544),createVNode(VBtn,{"prepend-icon":unref(mdiFolderPlusOutline),variant:`text`,disabled:busy.value,onClick:_cache[2]||(_cache[2]=$event=>openDialog(`mkdir`))},{default:withCtx(()=>[..._cache[18]||(_cache[18]=[createTextVNode(`New folder`,-1)])]),_:1},8,[`prepend-icon`,`disabled`]),createVNode(VBtn,{"prepend-icon":unref(mdiUpload),variant:`tonal`,disabled:busy.value,onClick:_cache[3]||(_cache[3]=$event=>uploadInput.value.click())},{default:withCtx(()=>[createTextVNode(toDisplayString(busy.value?`Working…`:`Upload`),1)]),_:1},8,[`prepend-icon`,`disabled`])],64)):createCommentVNode(``,true)])):createCommentVNode(``,true),loading.value?(openBlock(),createBlock(VSkeletonLoader,{key:3,type:`list-item-two-line@5`,class:`flex-grow-1`})):loadError.value?(openBlock(),createElementBlock(`div`,_hoisted_6,[createVNode(VAlert,{type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(loadError.value),1)]),_:1}),createVNode(VBtn,{class:`mt-3`,variant:`tonal`,onClick:refresh},{default:withCtx(()=>[..._cache[19]||(_cache[19]=[createTextVNode(`Retry`,-1)])]),_:1})])):file.value?(openBlock(),createElementBlock(Fragment,{key:5},[createBaseVNode(`div`,{class:normalizeClass([`d-flex align-center`,unref(mobile)?`ga-0 px-1`:`ga-2 flex-wrap px-3 py-2`])},[unref(mobile)?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiArrowLeft),"aria-label":`Back to folder`,variant:`text`,disabled:dirty.value||busy.value,onClick:_cache[4]||(_cache[4]=$event=>file.value=null)},null,8,[`icon`,`disabled`])):createCommentVNode(``,true),createBaseVNode(`span`,_hoisted_7,toDisplayString(file.value.path),1),createVNode(VSpacer),dirty.value?(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VBtn,{variant:`text`,disabled:busy.value,onClick:_cache[5]||(_cache[5]=$event=>draft.value=file.value.text)},{default:withCtx(()=>[..._cache[20]||(_cache[20]=[createTextVNode(`Discard edits`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,variant:`tonal`,disabled:busy.value,onClick:save},{default:withCtx(()=>[createTextVNode(toDisplayString(busy.value?`Saving…`:`Save`),1)]),_:1},8,[`disabled`])],64)):createCommentVNode(``,true),createVNode(VBtn,{icon:unref(mobile)?unref(mdiDownload):void 0,"prepend-icon":unref(mobile)?void 0:unref(mdiDownload),text:unref(mobile)?void 0:`Download`,"aria-label":`Download file`,variant:`text`,disabled:dirty.value||busy.value,onClick:_cache[6]||(_cache[6]=$event=>download(file.value.path))},null,8,[`icon`,`prepend-icon`,`text`,`disabled`]),unref(mobile)?(openBlock(),createBlock(VMenu,{key:2},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{icon:unref(mdiDotsVertical),"aria-label":`File actions`,variant:`text`}),null,16,[`icon`])]),default:withCtx(()=>[createVNode(VList,{density:`compact`},{default:withCtx(()=>[location.value?(openBlock(),createBlock(VListItem,{key:0,title:`Copy AI path`,"prepend-icon":unref(mdiContentCopy),onClick:copyLocation},null,8,[`prepend-icon`])):createCommentVNode(``,true),createVNode(VListItem,{title:`Refresh files`,"prepend-icon":unref(mdiRefresh),disabled:loading.value||busy.value,onClick:refresh},null,8,[`prepend-icon`,`disabled`]),__props.archived&&__props.area===`session`?(openBlock(),createBlock(VListItem,{key:1,title:`Download archive`,"prepend-icon":unref(mdiDownload),disabled:busy.value,onClick:_cache[7]||(_cache[7]=$event=>download(`${__props.sessionId}.tar.gz`,`archive`))},null,8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true)]),_:1})]),_:1})):createCommentVNode(``,true)],2),writable.value&&typeof file.value.text===`string`?(openBlock(),createBlock(VTextarea,{key:0,modelValue:draft.value,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>draft.value=$event),"aria-label":`File contents`,class:`mx-3 session-file-area__text`,disabled:busy.value,variant:`outlined`,rows:`18`,"hide-details":``},null,8,[`modelValue`,`disabled`])):typeof file.value.text===`string`?(openBlock(),createElementBlock(`pre`,_hoisted_8,toDisplayString(file.value.text),1)):(openBlock(),createElementBlock(`p`,_hoisted_9,toDisplayString(file.value.message),1))],64)):(openBlock(),createElementBlock(Fragment,{key:6},[entries.value.length?(openBlock(),createBlock(VList,{key:0,class:`session-file-area__listing`,"aria-label":`Files and folders`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(entries.value,entry=>{return openBlock(),createBlock(VListItem,{key:entry.path,title:entry.name,subtitle:entrySubtitle(entry),"prepend-icon":entry.type===`directory`?unref(mdiFolderOutline):unref(mdiFileOutline),disabled:busy.value,onClick:$event=>openEntry(entry)},{append:withCtx(()=>[entry.type===`file`?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiDownload),"aria-label":`Download ${entry.name}`,variant:`text`,onClick:withModifiers($event=>download(entry.path),[`stop`])},null,8,[`icon`,`aria-label`,`onClick`])):createCommentVNode(``,true),writable.value?(openBlock(),createBlock(VMenu,{key:1,"close-on-content-click":true},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps({ref_for:true},menuProps,{icon:unref(mdiDotsVertical),"aria-label":`Actions for ${entry.name}`,variant:`text`,onClick:_cache[9]||(_cache[9]=withModifiers(()=>{},[`stop`]))}),null,16,[`icon`,`aria-label`])]),default:withCtx(()=>[createVNode(VList,null,{default:withCtx(()=>[createVNode(VListItem,{"prepend-icon":unref(mdiPencilOutline),title:`Rename`,onClick:$event=>openDialog(`rename`,entry)},null,8,[`prepend-icon`,`onClick`]),createVNode(VListItem,{"prepend-icon":unref(mdiDeleteOutline),title:`Delete`,onClick:$event=>openDialog(`delete`,entry)},null,8,[`prepend-icon`,`onClick`])]),_:2},1024)]),_:2},1024)):createCommentVNode(``,true)]),_:2},1032,[`title`,`subtitle`,`prepend-icon`,`disabled`,`onClick`])}),128))]),_:1})):(openBlock(),createElementBlock(`p`,_hoisted_10,toDisplayString(expired.value?`This Session Dropzone has expired.`:writable.value?`Nothing here yet. Drop files here, use Upload, or ask the AI to put files in ${areaLabel.value}.`:`This folder is empty.`),1)),hasMore.value?(openBlock(),createBlock(VBtn,{key:2,class:`ma-3 align-self-start`,variant:`text`,disabled:busy.value,onClick:_cache[10]||(_cache[10]=$event=>loadDirectory(directory.value,true))},{default:withCtx(()=>[..._cache[21]||(_cache[21]=[createTextVNode(`Load more`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)],64)),createVNode(VDialog,{modelValue:dialogOpen.value,"onUpdate:modelValue":_cache[13]||(_cache[13]=$event=>dialogOpen.value=$event),"max-width":`460`,persistent:busy.value},{default:withCtx(()=>[createVNode(VCard,{title:dialogOperation.value===`delete`?`Delete from ${areaLabel.value}?`:dialogOperation.value===`rename`?`Rename item`:`New folder`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[dialogOperation.value===`delete`?(openBlock(),createElementBlock(`p`,_hoisted_11,toDisplayString(dialogEntry.value?.name)+toDisplayString(dialogEntry.value?.type===`directory`?` and everything inside it will be deleted.`:` will be deleted.`),1)):(openBlock(),createBlock(VTextField,{key:1,modelValue:dialogName.value,"onUpdate:modelValue":_cache[11]||(_cache[11]=$event=>dialogName.value=$event),label:`Name`,autofocus:``,disabled:busy.value,"error-messages":nameError.value,onKeyup:withKeys(confirmDialog,[`enter`])},null,8,[`modelValue`,`disabled`,`error-messages`]))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{disabled:busy.value,onClick:_cache[12]||(_cache[12]=$event=>dialogOpen.value=false)},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:dialogOperation.value===`delete`?`error`:`primary`,disabled:busy.value,onClick:confirmDialog},{default:withCtx(()=>[createTextVNode(toDisplayString(busy.value?`Working…`:dialogOperation.value===`delete`?`Delete`:dialogOperation.value===`rename`?`Rename`:`Create`),1)]),_:1},8,[`color`,`disabled`])]),_:1})]),_:1},8,[`title`])]),_:1},8,[`modelValue`,`persistent`])],42,_hoisted_1)}}};var Vibe64SessionFileArea_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-4ffe0b10`]]);var _sfc_main=Object.assign({inheritAttrs:false},{__name:`Vibe64SessionFiles`,props:{repoAvailable:{type:Boolean,default:true},archived:{type:Boolean,default:false},active:{type:Boolean,default:true},sessionId:{type:String,required:true},sessionsApiPath:{type:String,required:true},projectSlug:{type:String,default:``},openRequest:{type:Object,default:null}},emits:[`ask-codex-about-file`,`open-program`],setup(__props){const props=__props;const area=ref(props.archived||!props.repoAvailable?`drop-zone`:`repo`);const visitedAreas=ref([]);watch(area,value=>{if(value!==`repo`&&!visitedAreas.value.includes(value))visitedAreas.value.push(value)},{immediate:true});const areas=ref([`repo`]);const mountedAreas=computed(()=>visitedAreas.value.filter(value=>areas.value.includes(value)));const areaError=ref(``);const loadingAreas=ref(false);let generation=0;async function loadAreas(){const current=++generation;areas.value=[`repo`];areaError.value=``;loadingAreas.value=true;try{const result=await getHttpWebClient().request(`${props.sessionsApiPath}/${encodeURIComponent(props.sessionId)}/files`);if(result?.ok===false)throw new Error(vibe64ApiResponseError(result,`File areas could not load.`));if(current!==generation)return;areas.value=result.areas;if(props.archived)area.value=areas.value.includes(`session`)?`session`:`drop-zone`;else if(!props.repoAvailable)area.value=`drop-zone`;else if(!areas.value.includes(area.value))area.value=`repo`}catch(error){if(current===generation){areaError.value=error.message;area.value=`repo`}}finally{if(current===generation)loadingAreas.value=false}}watch(()=>[props.sessionsApiPath,props.sessionId],loadAreas,{immediate:true});watch(()=>props.openRequest,()=>{area.value=`repo`});onScopeDispose(()=>{generation+=1});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:normalizeClass([`vibe64-session-files`,_ctx.$attrs.class]),style:normalizeStyle(_ctx.$attrs.style),"aria-label":`Session files`},[createVNode(VTabs,{modelValue:area.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>area.value=$event),density:`compact`,"aria-label":`File areas`,disabled:loadingAreas.value},{default:withCtx(()=>[createVNode(VTab,{disabled:__props.archived||!__props.repoAvailable,value:`repo`,"prepend-icon":unref(mdiSourceRepository)},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Repo`,-1)])]),_:1},8,[`disabled`,`prepend-icon`]),areas.value.includes(`drop-zone`)?(openBlock(),createBlock(VTab,{key:0,value:`drop-zone`,"prepend-icon":unref(mdiTrayArrowUp)},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Session Dropzone`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true),areas.value.includes(`backups`)?(openBlock(),createBlock(VTab,{key:1,value:`backups`,"prepend-icon":unref(mdiArchiveClockOutline)},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Project Backups (2w retention)`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true),areas.value.includes(`session`)?(openBlock(),createBlock(VTab,{key:2,value:`session`,"prepend-icon":unref(mdiArchiveClockOutline)},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Session`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true)]),_:1},8,[`modelValue`,`disabled`]),areaError.value?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,density:`compact`},{default:withCtx(()=>[createTextVNode(toDisplayString(areaError.value)+` `,1),createVNode(VBtn,{variant:`text`,onClick:loadAreas},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Retry`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),!__props.archived&&__props.repoAvailable?withDirectives((openBlock(),createBlock(Vibe64SessionSourceEditor_default,mergeProps({key:1},_ctx.$attrs,{class:`vibe64-session-files__content`,active:__props.active&&area.value===`repo`,"session-id":__props.sessionId,"sessions-api-path":__props.sessionsApiPath,"project-slug":__props.projectSlug,"open-request":__props.openRequest,onAskCodexAboutFile:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`ask-codex-about-file`,$event)),onOpenProgram:_cache[2]||(_cache[2]=$event=>_ctx.$emit(`open-program`,$event))}),null,16,[`active`,`session-id`,`sessions-api-path`,`project-slug`,`open-request`])),[[vShow,area.value===`repo`]]):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(mountedAreas.value,visitedArea=>{return withDirectives((openBlock(),createBlock(Vibe64SessionFileArea_default,{key:`${__props.sessionId}:${visitedArea}`,class:`vibe64-session-files__content`,active:__props.active&&area.value===visitedArea,area:visitedArea,archived:__props.archived,"session-id":__props.sessionId,"sessions-api-path":__props.sessionsApiPath,"project-slug":__props.projectSlug,"agent-active":_ctx.$attrs.agentActive??_ctx.$attrs[`agent-active`]??false},null,8,[`active`,`area`,`archived`,`session-id`,`sessions-api-path`,`project-slug`,`agent-active`])),[[vShow,area.value===visitedArea]])}),128))],6)}}});var Vibe64SessionFiles_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-cd32e097`]]);export{Vibe64StarredFilesList_default as a,conversationAttribution as c,_sfc_main$11 as d,_sfc_main$12 as f,assistantAttachmentFilesFromPasteEvent as h,sourceEditorLinkTarget as i,Vibe64ConversationStatus_default as l,useVibe64AttachmentCommands as m,Vibe64SessionSourceEditor_default as n,thinkingMessagePresentation as o,useAgentAttachments as p,Vibe64ConversationLog_default as r,usesCommentaryForThinking as s,Vibe64SessionFiles_default as t,_sfc_main$10 as u};
|