vibe64 0.1.46 → 0.1.48
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 +1657 -1631
- package/bin/upgrade-state.js +2563 -2515
- package/dist/assets/{GithubBrowserTabs-D-Z3TlA8.js → GithubBrowserTabs-_l6htLOV.js} +1 -1
- package/dist/assets/{LocalDatabaseServer-6VzPWZxG.js → LocalDatabaseServer-ih_gadbx.js} +1 -1
- package/dist/assets/{Vibe64AuthSettingsButton-TLwqAxDo.js → Vibe64AuthSettingsButton-BZsCIA2Z.js} +1 -1
- package/dist/assets/{Vibe64DashboardShell-B4dQ-oHD.js → Vibe64DashboardShell-DFE-2tFZ.js} +1 -1
- package/dist/assets/{Vibe64DatabaseWorkspace-Bh5WIPOj.js → Vibe64DatabaseWorkspace-BdvxuFPT.js} +1 -1
- package/dist/assets/{Vibe64OutputControls-DtybwgL3.js → Vibe64OutputControls-DsCbasR0.js} +1 -1
- package/dist/assets/{Vibe64RepositoryWorkspace-idDg94lc.js → Vibe64RepositoryWorkspace-CVN2HKCB.js} +1 -1
- package/dist/assets/{Vibe64SessionFiles-Z9zxosyl.js → Vibe64SessionFiles-DKo5wd8-.js} +2 -3
- package/dist/assets/{Vibe64UiStoryboardView-CrCDWMdR.js → Vibe64UiStoryboardView-BYqVdBAt.js} +1 -1
- package/dist/assets/{Vibe64UnavailableSessions-TqsxvGSf.js → Vibe64UnavailableSessions-CQjgoaS0.js} +1 -1
- package/dist/assets/{_sessionId_-7F1VGOou.js → _sessionId_-ByUkrRd7.js} +1 -1
- package/dist/assets/{_slug_-Bq84T_Iv.js → _slug_-hep_be7Z.js} +3 -3
- package/dist/assets/{access-Cx9RH95J.js → access-CWZMu-ND.js} +1 -1
- package/dist/assets/{app-DPx4KKOa.js → app-D_itm2S5.js} +1 -1
- package/dist/assets/asyncModuleRecovery-DJsn5NrL.js +1 -0
- package/dist/assets/{changes-DYsuQLFW.js → changes-BYuFfnEm.js} +1 -1
- package/dist/assets/{client-BYsDPxR3.js → client-B88Jggew.js} +1 -1
- package/dist/assets/client-CP2EwnrY.js +1 -0
- package/dist/assets/{conversation-3ln-WnbL.css → conversation-CSDHdGDb.css} +1 -1
- package/dist/assets/conversation-DG9lp25w.js +8 -0
- package/dist/assets/conversation-DL4AODd9.js +13 -0
- package/dist/assets/{dashboard-CWswAbYP.js → dashboard-R4qgYv8O.js} +1 -1
- package/dist/assets/english-definitions-CdIGswXU.js +1 -0
- package/dist/assets/{env-X7EOFLtl.js → env-DtkytCtq.js} +1 -1
- package/dist/assets/{health-C0f6s-G1.js → health-Ut9eZrbK.js} +1 -1
- package/dist/assets/{history-BQjETNB9.js → history-BrmvkGgi.js} +1 -1
- package/dist/assets/{incoming-COpY201m.js → incoming-CicEs40v.js} +1 -1
- package/dist/assets/{index-MWACm8Pp.css → index-B-dukXUB.css} +1 -1
- package/dist/assets/index-DZgCwvFD.js +136 -0
- package/dist/assets/{integrations-BBkvNRHu.js → integrations-QHeHC-C9.js} +10 -2
- package/dist/assets/issues-Ds7iAQFQ.js +1 -0
- package/dist/assets/{learning-B8_wHoe1.js → learning-Dq0xbg3x.js} +1 -1
- package/dist/assets/linkPath-Ch9eft18.js +1 -0
- package/dist/assets/{placement-DXvgK433.js → placement-BNmlke_j.js} +1 -1
- package/dist/assets/placement-DYM3JJ-F.js +1 -0
- package/dist/assets/{publish-CeLZE2AG.js → publish-eErG67LW.js} +1 -1
- package/dist/assets/pull-requests-DHLK83qZ.js +1 -0
- package/dist/assets/{repository-BNPt7UWc.js → repository-DWw1VFIQ.js} +1 -1
- package/dist/assets/{settings-lecRzZ-r.js → settings-QkwnoNn3.js} +1 -1
- package/dist/assets/{studioGateApi-BVdclhPL.js → studioGateApi-mkX1eOTX.js} +1 -1
- package/dist/assets/{studioUrls-CGKCbM_d.js → studioUrls-B0-GdWh8.js} +1 -1
- package/dist/assets/{useArchivedVibe64Sessions-DHYRnyJD.js → useArchivedVibe64Sessions-Biy_4sxD.js} +1 -1
- package/dist/assets/useCommand-DhwB5k1w.js +1 -0
- package/dist/assets/useEndpointResource-tVvsJvd4.js +1 -0
- package/dist/assets/usePaths-Y6UuQxmI.js +1 -0
- package/dist/assets/{useUiFeedback-B51xtCAK.js → useUiFeedback-DLUToc5y.js} +1 -1
- package/dist/assets/useVibe64ConversationLog-jM3KOvN7.js +1 -0
- package/dist/assets/{useVibe64DatabaseTools-BE_yXZFn.js → useVibe64DatabaseTools-Cac_aZnv.js} +1 -1
- package/dist/assets/{useVibe64ProjectScope-D7b8n1gx.js → useVibe64ProjectScope-DXjsKKhl.js} +1 -1
- package/dist/assets/useVibe64SessionData-FGnNvFfK.js +1 -0
- package/dist/assets/{useVibe64SessionSelection-CDaX4uwY.js → useVibe64SessionSelection-Bgsif-tm.js} +1 -1
- package/dist/assets/{useVibe64SystemGraph-CDDcsye4.js → useVibe64SystemGraph-idV9zXa9.js} +1 -1
- package/dist/assets/{useVibe64Terminal-Zr3Mig2L.js → useVibe64Terminal-B9EWJ9Ba.js} +2 -2
- package/dist/assets/vibe64ProjectScope.local-l5_-E6pq.js +1 -0
- package/dist/assets/{vibe64SessionFocus-DzqbVq60.js → vibe64SessionFocus-CDIB5Gpr.js} +1 -1
- package/dist/index.html +25 -22
- package/docs/colleague-usage/coding-agents.md +4 -7
- package/docs/colleague-usage/preview-browser-checks.md +5 -3
- package/node_modules/@jskit-ai/assistant-core/CHANGELOG.md +539 -0
- package/node_modules/@jskit-ai/assistant-core/locales/en.json +383 -0
- package/node_modules/@jskit-ai/assistant-core/package.json +3 -2
- package/node_modules/@jskit-ai/assistant-runtime/CHANGELOG.md +138 -0
- package/node_modules/@jskit-ai/assistant-runtime/locales/en.json +136 -0
- package/node_modules/@jskit-ai/assistant-runtime/package.json +3 -2
- package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/assistantConfigRepository.js +223 -203
- package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/conversationsRepository.js +286 -266
- package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/messagesRepository.js +270 -250
- package/node_modules/@jskit-ai/assistant-voice/locales/en.json +182 -0
- package/node_modules/@jskit-ai/assistant-voice/package.json +3 -2
- package/node_modules/@jskit-ai/connector-google-calendar/CHANGELOG.md +83 -0
- package/node_modules/@jskit-ai/connector-google-calendar/locales/en.json +91 -0
- package/node_modules/@jskit-ai/connector-google-calendar/package.json +4 -3
- package/node_modules/@jskit-ai/connectors-catalog/CHANGELOG.md +1722 -0
- package/node_modules/@jskit-ai/connectors-catalog/README.md +11 -0
- package/node_modules/@jskit-ai/connectors-catalog/locales/en.json +3139 -0
- package/node_modules/@jskit-ai/connectors-catalog/package.json +5 -4
- package/node_modules/@jskit-ai/connectors-core/CHANGELOG.md +183 -0
- package/node_modules/@jskit-ai/connectors-core/locales/en.json +92 -0
- package/node_modules/@jskit-ai/connectors-core/package.json +3 -2
- package/node_modules/@jskit-ai/http-runtime/CHANGELOG.md +31 -0
- package/node_modules/@jskit-ai/http-runtime/locales/en.json +14 -0
- package/node_modules/@jskit-ai/http-runtime/package.json +3 -2
- package/node_modules/@jskit-ai/kernel/CHANGELOG.md +182 -0
- package/node_modules/@jskit-ai/kernel/locales/en.json +94 -0
- package/node_modules/@jskit-ai/kernel/package.json +6 -2
- package/node_modules/@jskit-ai/payments-core/CHANGELOG.md +128 -0
- package/node_modules/@jskit-ai/payments-core/locales/en.json +77 -0
- package/node_modules/@jskit-ai/payments-core/package.json +3 -2
- package/node_modules/@jskit-ai/realtime/CHANGELOG.md +20 -0
- package/node_modules/@jskit-ai/realtime/locales/en.json +14 -0
- package/node_modules/@jskit-ai/realtime/package.json +3 -2
- 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/CHANGELOG.md +35 -0
- package/node_modules/@jskit-ai/uploads-runtime/locales/en.json +15 -0
- package/node_modules/@jskit-ai/uploads-runtime/package.json +3 -2
- package/node_modules/@local/vibe64-execution/src/host/execHelper.js +15 -14
- package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +493 -453
- package/node_modules/@local/vibe64-genesis/src/server/index.js +109 -108
- package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +119 -119
- package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +106 -106
- package/node_modules/@local/vibe64-terminals/src/server/opencodeSessionEnvironmentPlugin.js +195 -175
- package/package.json +14 -14
- package/server.bundle.mjs +41988 -40760
- package/dist/assets/conversation-Bn7wpATa.js +0 -2
- package/dist/assets/conversation-CNcCrV-R.js +0 -16
- package/dist/assets/definitions-CEbi4qae.js +0 -1
- package/dist/assets/index-CBo1BEk6.js +0 -138
- package/dist/assets/issues-BiSiUd5o.js +0 -1
- package/dist/assets/placement-B5T1LR7m.js +0 -1
- package/dist/assets/pull-requests-pTdQOT7i.js +0 -1
- package/dist/assets/useCommand-Epd2yHhQ.js +0 -1
- package/dist/assets/useEndpointResource-DBRQISI_.js +0 -1
- package/dist/assets/usePaths-DdAnjVDj.js +0 -1
- package/dist/assets/useVibe64ConversationLog-DboM3tYN.js +0 -1
- package/dist/assets/useVibe64SessionData-CreWtQAO.js +0 -1
- package/dist/assets/vibe64ProjectScope.local-BxTBYuRg.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{D as createVNode,E as createTextVNode,Ht as watch,On as unref,Pt as useId,St as resolveComponent,_ as createBaseVNode,b as createElementBlock,bt as renderList,et as mergeProps,g as computed,gn as reactive,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,tt as nextTick,un as isRef,v as createBlock,vn as ref,xn as shallowRef,xt as renderSlot,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{_ as VIcon,cr as withKeys,lr as withModifiers,t as VAvatar}from"./VAvatar-H2hyOWlB.js";import{J as useQueryClient,t as useEndpointResource}from"./useEndpointResource-DBRQISI_.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{o as projectSlugFromRoute,r as projectAppPath}from"./vibe64ProjectScope.local-BxTBYuRg.js";import{t as VOverlay}from"./VOverlay-Bi97WKy3.js";import{c as VListItemTitle,l as VListItemSubtitle,n as VList,s as VListItem}from"./VMenu-DnhVIMrr.js";import{t as VChip}from"./VChip-Uixfx461.js";import{g as VCheckboxBtn,t as VTextField}from"./VTextField-CnkGeXaT.js";import{r as scopedDevelopmentApiUrl}from"./studioUrls-CGKCbM_d.js";import{C as mdiArrowRight,Jn as mdiPlus,L as mdiCheck,Rn as mdiOpenInNew,Un as mdiPencilOutline,X as mdiClose,Zn as mdiRecordCircleOutline,er as mdiRefresh,kn as mdiMagnify,on as mdiLabelOutline,ot as mdiCommentOutline,rr as mdiRestore}from"./mdi-X9prU-DG.js";import{i as VBtnToggle,t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VAlert}from"./VAlert-7_VM9EUm.js";import{t as VAutocomplete}from"./VAutocomplete-Ck14ZtUL.js";import{t as VDivider}from"./VDivider-AUQb_N9d.js";import{t as VSheet}from"./VSheet-CMhyReNa.js";import{t as VDialog}from"./VDialog-Drp3yzSH.js";import{i as VCardTitle,n as VCardText,o as VCardActions,t as VCard}from"./VCard-DExT9Cji.js";import{t as VSpacer}from"./VSpacer-BSTt0_VA.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-pc4bBTxv.js";import{t as VTextarea}from"./VTextarea-wqoRFl1K.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useUiFeedback}from"./useUiFeedback-B51xtCAK.js";import{n as vibe64RealtimeOriginPayload}from"./vibe64BrowserTabOrigin-SF9E31vi.js";import{m as GithubMarkdown_default}from"./index-CBo1BEk6.js";import{t as Vibe64DashboardBackButton_default}from"./Vibe64DashboardBackButton-CE9ig_nO.js";import{a as githubProjectRepositoryName,i as githubProjectAvailable,n as githubIssueLabelsPath,o as invalidateGithubIssueQueries,r as githubIssueMentionsPath,t as GITHUB_BODY_MAX_LENGTH}from"./vibe64GithubProject-Bct-bzKq.js";import{t as _sfc_main$8}from"./GithubBrowserTabs-D-Z3TlA8.js";var drafts=reactive(new Map);var submittedComments=reactive(new Map);function useVibe64Issues(context){const route=useRoute();const router=useRouter();const queryClient=useQueryClient();const feedback=useUiFeedback({source:`vibe64.issues`});const projectSlug=computed(()=>projectSlugFromRoute(route));const repository=computed(()=>githubProjectRepositoryName(context.value.projectContext));const available=computed(()=>githubProjectAvailable(context.value.projectContext));const active=computed(()=>available.value&&context.value.active!==false);const basePath=computed(()=>scopedDevelopmentApiUrl(`/api/vibe64/issues`,projectSlug.value));const state=computed(()=>[`open`,`closed`,`all`].includes(route.query.issueState)?route.query.issueState:`open`);const search=computed(()=>typeof route.query.issueSearch===`string`?route.query.issueSearch:``);const searchDraft=ref(search.value);watch(search,value=>{searchDraft.value=value});const selectedLabels=computed(()=>{const labels=route.query.issueLabel;return(Array.isArray(labels)?labels:[labels]).filter(label=>typeof label===`string`&&label.trim())});const number=computed(()=>/^\d+$/u.test(String(route.query.issue||``))?String(route.query.issue):``);const commentCursor=ref(``);watch([basePath,number],()=>{commentCursor.value=``});const listQuery=computed(()=>({state:state.value,search:search.value,labels:selectedLabels.value,...route.query.issueCursor?{cursor:route.query.issueCursor}:{}}));const listKey=computed(()=>[`vibe64.issues`,basePath.value,listQuery.value]);const list=useEndpointResource({path:basePath,readQuery:listQuery,queryKey:listKey,enabled:computed(()=>active.value&&!number.value),queryOptions:{retry:false},requestRecoveryLabel:`GitHub issues`,fallbackLoadError:`Issues could not load.`});const labelsPath=computed(()=>githubIssueLabelsPath(basePath.value));const labelCatalog=useEndpointResource({path:labelsPath,queryKey:computed(()=>[`vibe64.issueLabels`,labelsPath.value]),enabled:computed(()=>active.value&&!number.value),queryOptions:{retry:false},fallbackLoadError:`Labels could not load.`});const detailPath=computed(()=>`${basePath.value}/${number.value}`);const detail=useEndpointResource({path:detailPath,readQuery:computed(()=>commentCursor.value?{cursor:commentCursor.value}:{}),queryKey:computed(()=>[`vibe64.issue`,detailPath.value,commentCursor.value]),enabled:computed(()=>active.value&&Boolean(number.value)),queryOptions:{retry:false},requestRecoveryLabel:`GitHub issue`,fallbackLoadError:`This issue could not load.`});const issue=computed(()=>detail.data.value?.issue||null);const draft=computed({get:()=>drafts.get(detailPath.value)||``,set:value=>value?drafts.set(detailPath.value,value):drafts.delete(detailPath.value)});const stateRequestPath=ref(``);const localComments=computed(()=>submittedComments.get(detailPath.value)||[]);const savedComments=computed(()=>issue.value?.comments?.nodes||[]);const savedCommentIds=computed(()=>new Set(savedComments.value.map(comment=>comment.id)));const comments=computed(()=>[...savedComments.value,...localComments.value.filter(comment=>!savedCommentIds.value.has(comment.id)&&(comment.delivery!==`sent`||!commentCursor.value))]);const commentCount=computed(()=>(issue.value?.comments?.totalCount||0)+comments.value.length-savedComments.value.length);const pending=computed(()=>{if(stateRequestPath.value===detailPath.value)return`state`;return localComments.value.some(comment=>comment.delivery===`sending`)?`comment`:``});watch([detail.data,detailPath,commentCursor],()=>{if(commentCursor.value||issue.value?.number!==Number(number.value))return;const remaining=localComments.value.filter(comment=>comment.delivery!==`sent`||!savedCommentIds.value.has(comment.id));if(remaining.length)submittedComments.set(detailPath.value,remaining);else submittedComments.delete(detailPath.value)},{immediate:true});function navigate(changes){return router.push({query:{...route.query,...changes}})}function filter(nextState=state.value,nextLabels=selectedLabels.value){return navigate({issueState:nextState,issueSearch:String(searchDraft.value||``).trim()||void 0,issueLabel:nextLabels?.length?nextLabels:void 0,issueCursor:void 0,issue:void 0})}function filterLabel(label){searchDraft.value=`label:${/[\s"\\]/u.test(label)?JSON.stringify(label):label}`;return filter(state.value,[])}function issueUpdated({number:issueNumber,basePath:requestBasePath}){return invalidateGithubIssueQueries(queryClient,requestBasePath,`${requestBasePath}/${issueNumber}`)}async function issueSaved({number:issueNumber,basePath:requestBasePath}){await issueUpdated({number:issueNumber,basePath:requestBasePath});if(basePath.value===requestBasePath)await navigate({issue:String(issueNumber)})}async function mutate(kind){if(pending.value||issue.value?.number!==Number(number.value)||!active.value)return;const requestBasePath=basePath.value;const requestPath=detailPath.value;if(kind===`comment`){const submitted=draft.value;if(!submitted.trim()||submitted.length>65536)return;const comment=reactive({id:crypto.randomUUID(),body:submitted,createdAt:new Date().toISOString(),author:{login:`You`},delivery:`sending`,error:``});submittedComments.set(requestPath,[...localComments.value,comment]);drafts.delete(requestPath);commentCursor.value=``;return sendComment(comment,requestBasePath,requestPath)}stateRequestPath.value=requestPath;try{await detail.save({state:issue.value.state===`OPEN`?`closed`:`open`},{path:requestPath,method:`PATCH`});if(detailPath.value===requestPath)commentCursor.value=``;feedback.success(`Issue updated.`);await invalidateGithubIssueQueries(queryClient,requestBasePath,requestPath)}catch(error){feedback.error(error,`Issue could not be updated.`)}finally{stateRequestPath.value=``}}async function sendComment(comment,requestBasePath,requestPath){comment.delivery=`sending`;comment.error=``;try{const result=await detail.save(vibe64RealtimeOriginPayload({body:comment.body}),{path:`${requestPath}/comments`,method:`POST`});Object.assign(comment,result.comment,{delivery:`sent`})}catch(error){comment.delivery=`failed`;feedback.error(error,`Comment could not be confirmed. Refresh before posting again.`);comment.error=feedback.message.value;return}feedback.success(`Comment added.`);try{await invalidateGithubIssueQueries(queryClient,requestBasePath,requestPath)}catch(error){feedback.error(error,`Comment added, but the conversation could not refresh.`)}}function retryComment(id){const comment=localComments.value.find(entry=>entry.id===id);if(pending.value||!active.value||comment?.delivery!==`failed`)return;commentCursor.value=``;return sendComment(comment,basePath.value,detailPath.value)}return{available,repository,projectSlug,basePath,list,detail,labelCatalog,issue,number,state,searchDraft,selectedLabels,draft,pending,comments,commentCount,commentCursor,navigate,filter,filterLabel,mutate,issueSaved,issueUpdated,retryComment}}var _hoisted_1$6={class:`github-label-name`};var _sfc_main$7={__name:`GithubLabelChip`,props:{label:{type:Object,required:true}},setup(__props){const props=__props;const color=computed(()=>/^[a-f\d]{6}$/iu.test(props.label.color||``)?`#${props.label.color}`:void 0);return(_ctx,_cache)=>{return openBlock(),createBlock(VChip,{color:color.value,title:__props.label.description||__props.label.name,"aria-label":__props.label.name,variant:`flat`,size:`small`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_1$6,toDisplayString(__props.label.name),1)]),_:1},8,[`color`,`title`,`aria-label`])}}};var GithubLabelChip_default=_plugin_vue_export_helper_default(_sfc_main$7,[[`__scopeId`,`data-v-9814070c`]]);var _hoisted_1$5={class:`d-flex align-center justify-space-between ga-3 pa-5 pb-2`};var _hoisted_2$4={class:`new-label__colours`};var _hoisted_3$3={class:`new-label__palette`};var _hoisted_4$2={class:`d-flex align-start ga-3`};var _hoisted_5$2=[`value`,`disabled`];var defaultColor=`0075ca`;var _sfc_main$6={__name:`GithubNewLabelButton`,props:{basePath:{type:String,required:true},labels:{type:Array,required:true},disabled:Boolean},emits:[`created`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const palette=[{name:`Red`,color:`d73a4a`},{name:`Orange`,color:`e9963a`},{name:`Yellow`,color:`f9d65c`},{name:`Green`,color:`4c956c`},{name:`Teal`,color:`008672`},{name:`Blue`,color:`0075ca`},{name:`Purple`,color:`8957e5`},{name:`Pink`,color:`db61a2`}];const open=ref(false);const name=ref(``);const color=ref(defaultColor);const pending=ref(false);const trimmedName=computed(()=>name.value.trim());const normalizedColor=computed(()=>color.value.trim().replace(/^#/u,``).toLowerCase());const validColor=computed(()=>/^[a-f\d]{6}$/u.test(normalizedColor.value));const nameError=computed(()=>{if(/\p{Cc}/u.test(name.value)||trimmedName.value.length>50)return`Use up to 50 characters, on one line.`;return props.labels.some(label=>label.name.toLowerCase()===trimmedName.value.toLowerCase())?`A label with this name already exists.`:``});const preview=computed(()=>({name:trimmedName.value||`Your label`,color:validColor.value?normalizedColor.value:defaultColor}));const canSubmit=computed(()=>!props.disabled&&!pending.value&&Boolean(trimmedName.value)&&!nameError.value&&validColor.value);const labelsPath=computed(()=>githubIssueLabelsPath(props.basePath));const resource=useEndpointResource({path:labelsPath,enabled:false,queryKey:computed(()=>[`vibe64.newLabel`,labelsPath.value])});const queryClient=useQueryClient();const feedback=useUiFeedback({source:`vibe64.issues.newLabel`});watch(open,value=>{if(!value)return;name.value=``;color.value=defaultColor});watch(()=>props.basePath,()=>{open.value=false});async function submit(){if(!canSubmit.value)return;const requestPath=labelsPath.value;pending.value=true;let result;try{result=await resource.save({name:trimmedName.value,color:normalizedColor.value},{path:requestPath,method:`POST`})}catch(error){feedback.error(error,`Label could not be created. Your choices have been kept.`);pending.value=false;return}const queryKey=[`vibe64.issueLabels`,requestPath];await queryClient.cancelQueries({queryKey});queryClient.setQueryData(queryKey,catalog=>{if(!catalog)return catalog;const createdName=result.label.name.toLowerCase();const labels=catalog.labels.filter(label=>label.name.toLowerCase()!==createdName);labels.push(result.label);labels.sort((a,b)=>a.name.localeCompare(b.name));return{...catalog,labels}});feedback.success(`Label created.`);if(requestPath===labelsPath.value){open.value=false;emit(`created`,result.label)}pending.value=false}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VBtn,{"prepend-icon":unref(mdiPlus),color:`primary`,variant:`text`,height:`48`,disabled:__props.disabled||pending.value,onClick:_cache[0]||(_cache[0]=$event=>open.value=true)},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`New label`,-1)])]),_:1},8,[`prepend-icon`,`disabled`]),createVNode(VDialog,{modelValue:open.value,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>open.value=$event),"max-width":`30rem`,scrollable:``,persistent:pending.value,"aria-label":`New label`},{default:withCtx(()=>[createVNode(VCard,{tag:`form`,rounded:`xl`,onSubmit:withModifiers(submit,[`prevent`,`stop`])},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$5,[_cache[8]||(_cache[8]=createBaseVNode(`h2`,{class:`text-title-large`},`New label`,-1)),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,size:`48`,"aria-label":`Close new label`,disabled:pending.value,onClick:_cache[1]||(_cache[1]=$event=>open.value=false)},null,8,[`icon`,`disabled`])]),createVNode(VCardText,{class:`d-flex flex-column ga-4`},{default:withCtx(()=>[createVNode(VSheet,{color:`surface-light`,rounded:`lg`,class:`pa-4 d-flex flex-column align-center ga-2`},{default:withCtx(()=>[_cache[9]||(_cache[9]=createBaseVNode(`span`,{class:`text-label-small text-medium-emphasis`},`Preview`,-1)),createVNode(GithubLabelChip_default,{label:preview.value,class:`new-label__preview`},null,8,[`label`])]),_:1}),createVNode(VTextField,{modelValue:name.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>name.value=$event),label:`Label name`,placeholder:`e.g. Ready for review`,variant:`outlined`,maxlength:`50`,autofocus:``,disabled:pending.value,"error-messages":nameError.value,"hide-details":`auto`},null,8,[`modelValue`,`disabled`,`error-messages`]),createBaseVNode(`fieldset`,_hoisted_2$4,[_cache[10]||(_cache[10]=createBaseVNode(`legend`,{class:`text-label-large mb-2`},`Colour`,-1)),createBaseVNode(`div`,_hoisted_3$3,[(openBlock(),createElementBlock(Fragment,null,renderList(palette,swatch=>{return createVNode(VBtn,{key:swatch.color,color:`#${swatch.color}`,variant:`flat`,icon:``,size:`48`,"aria-label":swatch.name,"aria-pressed":normalizedColor.value===swatch.color,disabled:pending.value,onClick:$event=>color.value=swatch.color},{default:withCtx(()=>[normalizedColor.value===swatch.color?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiCheck)},null,8,[`icon`])):createCommentVNode(``,true)]),_:2},1032,[`color`,`aria-label`,`aria-pressed`,`disabled`,`onClick`])}),64))])]),createBaseVNode(`div`,_hoisted_4$2,[createBaseVNode(`input`,{type:`color`,value:`#${preview.value.color}`,class:`new-label__custom`,"aria-label":`Custom colour`,title:`Choose a custom colour`,disabled:pending.value,onInput:_cache[3]||(_cache[3]=$event=>color.value=$event.target.value.slice(1))},null,40,_hoisted_5$2),createVNode(VTextField,{modelValue:color.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>color.value=$event),label:`Hex colour`,prefix:`#`,variant:`outlined`,density:`compact`,maxlength:`7`,disabled:pending.value,"error-messages":validColor.value?[]:`Use six characters: 0–9 or A–F.`,"hide-details":`auto`,autocomplete:`off`,spellcheck:`false`},null,8,[`modelValue`,`disabled`,`error-messages`])]),_cache[11]||(_cache[11]=createBaseVNode(`p`,{class:`text-body-small text-medium-emphasis ma-0`},`Available to all issues in this repository.`,-1))]),_:1}),createVNode(VCardActions,{class:`pa-5 pt-2`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value,onClick:_cache[5]||(_cache[5]=$event=>open.value=false)},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,rounded:`pill`,height:`48`,disabled:!canSubmit.value,"aria-busy":pending.value},{default:withCtx(()=>[createTextVNode(toDisplayString(pending.value?`Creating…`:`Create label`),1)]),_:1},8,[`disabled`,`aria-busy`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`persistent`])],64)}}};var GithubNewLabelButton_default=_plugin_vue_export_helper_default(_sfc_main$6,[[`__scopeId`,`data-v-82e5afdc`]]);var _hoisted_1$4={key:1,class:`text-body-medium pa-3 ma-0`,role:`status`};var _hoisted_2$3={key:2,class:`pa-3 text-body-small`,role:`status`};var _sfc_main$5=Object.assign({inheritAttrs:false},{__name:`GithubMentionTextarea`,props:{modelValue:{type:String,default:``},basePath:{type:String,required:true},issue:{type:Object,default:null},enabled:{type:Boolean,default:true},disabled:Boolean},emits:[`update:modelValue`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const field=ref(null);const mention=ref(null);const selected=ref(0);const listId=`github-mentions-${useId()}`;const path=computed(()=>githubIssueMentionsPath(props.basePath));const number=computed(()=>props.issue?.number||null);const catalog=useEndpointResource({path,readQuery:computed(()=>number.value?{number:number.value}:{}),queryKey:computed(()=>[`vibe64.issueMentions`,path.value,number.value]),enabled:computed(()=>props.enabled),queryOptions:{retry:false,staleTime:6e4},requestRecovery:false,fallbackLoadError:`Mention suggestions could not load. You can still type any @username.`});const people=computed(()=>{const users=new Map;for(const user of[props.issue?.author,...(props.issue?.comments?.nodes||[]).map(comment=>comment.author),...catalog.data.value?.users||[]])if(user?.login)users.set(user.login.toLowerCase(),user);return[...users.values()]});const suggestions=computed(()=>{const query=mention.value?.query.toLowerCase()||``;return people.value.filter(user=>user.login.toLowerCase().includes(query)||user.name?.toLowerCase().includes(query)).sort((a,b)=>{const aStartsWithQuery=a.login.toLowerCase().startsWith(query);const bStartsWithQuery=b.login.toLowerCase().startsWith(query);return Number(bStartsWithQuery)-Number(aStartsWithQuery)||a.login.localeCompare(b.login)}).slice(0,8)});const open=computed(()=>Boolean(mention.value)&&props.enabled&&!props.disabled);const warning=computed(()=>catalog.loadError.value||catalog.data.value?.warning||``);watch([path,number,()=>props.enabled,()=>props.disabled],()=>{mention.value=null});watch(suggestions,()=>{selected.value=0});function updateMention(event){const input=event.target;if(input.tagName!==`TEXTAREA`)return;if(event.isComposing||input.selectionStart!==input.selectionEnd){mention.value=null;return}const end=input.selectionStart;const match=input.value.slice(0,end).match(/(?:^|[\s([{])@([a-z\d-]*)$/iu);mention.value=match?{start:end-match[1].length-1,end,query:match[1]}:null}async function choose(user){if(!mention.value||!user||props.disabled)return;const input=field.value?.$el.querySelector(`textarea`);if(!input)return;const{start,end}=mention.value;const after=input.value.slice(end).replace(/^[a-z\d-]*/iu,``);const insertion=`@${user.login}${/^\s/u.test(after)?``:` `}`;const value=input.value.slice(0,start)+insertion+after;if(input.maxLength>=0&&value.length>input.maxLength)return;const caret=start+insertion.length+(after.startsWith(` `)?1:0);emit(`update:modelValue`,value);mention.value=null;await nextTick();input.focus();input.setSelectionRange(caret,caret)}async function onKeydown(event){if(!open.value||event.isComposing||event.keyCode===229)return;const moveSelection=suggestions.value.length>0&&[`ArrowDown`,`ArrowUp`].includes(event.key);const acceptSelection=suggestions.value.length>0&&(event.key===`Enter`||event.key===`Tab`&&!event.shiftKey);if(event.key!==`Escape`&&!moveSelection&&!acceptSelection)return;event.preventDefault();event.stopPropagation();if(event.key===`Escape`)mention.value=null;else if(moveSelection){selected.value=(selected.value+(event.key===`ArrowDown`?1:-1)+suggestions.value.length)%suggestions.value.length;await nextTick();document.getElementById(`${listId}-${selected.value}`)?.scrollIntoView({block:`nearest`})}else await choose(suggestions.value[selected.value])}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VTextarea,mergeProps({ref_key:`field`,ref:field},_ctx.$attrs,{"model-value":__props.modelValue,disabled:__props.disabled,hint:`Markdown supported · Type @ to mention someone`,"persistent-hint":``,"aria-autocomplete":`list`,"aria-expanded":open.value,"aria-controls":open.value?listId:void 0,"aria-activedescendant":open.value&&suggestions.value.length?`${listId}-${selected.value}`:void 0,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>emit(`update:modelValue`,$event)),onInput:updateMention,onClick:updateMention,onFocus:updateMention,onSelect:updateMention,onCompositionstart:_cache[1]||(_cache[1]=$event=>mention.value=null),onCompositionend:updateMention,onBlur:_cache[2]||(_cache[2]=$event=>mention.value=null),onKeydown,onKeyup:_cache[3]||(_cache[3]=$event=>[`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes($event.key)&&updateMention($event))}),null,16,[`model-value`,`disabled`,`aria-expanded`,`aria-controls`,`aria-activedescendant`]),createVNode(VOverlay,{"model-value":open.value,target:field.value?.$el,"location-strategy":`connected`,location:`top start`,origin:`bottom start`,"scroll-strategy":`reposition`,scrim:false,"close-on-back":false,"capture-focus":false,"retain-focus":false,width:`360`,"max-width":`calc(100vw - 32px)`,"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>!$event&&(mention.value=null))},{default:withCtx(()=>[createVNode(VSheet,{rounded:`lg`,border:``,elevation:`3`,class:`overflow-y-auto`,"max-height":`320`},{default:withCtx(()=>[createVNode(VList,{id:listId,role:`listbox`,"aria-label":`Mention suggestions`,density:`compact`,class:`pa-1`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(suggestions.value,(user,index)=>{return openBlock(),createBlock(VListItem,{id:`${listId}-${index}`,key:user.login,tag:`button`,type:`button`,role:`option`,tabindex:`-1`,"aria-selected":index===selected.value,active:index===selected.value,title:`@${user.login}`,subtitle:user.name||void 0,"min-height":`48`,class:`w-100 text-left`,onPointerdown:_cache[4]||(_cache[4]=withModifiers(()=>{},[`prevent`])),onClick:$event=>choose(user)},null,8,[`id`,`aria-selected`,`active`,`title`,`subtitle`,`onClick`])}),128))]),_:1}),unref(catalog).isInitialLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`list-item`,height:`48`,"aria-label":`Loading mention suggestions`,"aria-busy":`true`})):!suggestions.value.length&&!warning.value?(openBlock(),createElementBlock(`p`,_hoisted_1$4,`No matching people`)):createCommentVNode(``,true),warning.value?(openBlock(),createElementBlock(`div`,_hoisted_2$3,[createTextVNode(toDisplayString(warning.value)+` `,1),createVNode(VBtn,{variant:`text`,height:`48`,disabled:unref(catalog).isFetching.value,onPointerdown:_cache[5]||(_cache[5]=withModifiers(()=>{},[`prevent`])),onClick:_cache[6]||(_cache[6]=$event=>unref(catalog).reload())},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Retry`,-1)])]),_:1},8,[`disabled`])])):createCommentVNode(``,true)]),_:1})]),_:1},8,[`model-value`,`target`])],64)}}});var _hoisted_1$3={class:`d-flex align-center justify-space-between ga-3 pa-5 pb-2`};var _hoisted_2$2={class:`d-flex align-center ga-3`};var _hoisted_3$2={class:`text-title-large`};var _hoisted_4$1={key:0,class:`text-body-medium ma-0`};var _hoisted_5$1={class:`d-flex flex-wrap justify-space-between ga-2`};var _sfc_main$4={__name:`GithubIssueEditorDialog`,props:{modelValue:Boolean,basePath:{type:String,required:true},issue:{type:Object,default:null},mode:{type:String,default:`create`}},emits:[`update:modelValue`,`saved`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const editing=computed(()=>props.mode!==`create`);const editingLabels=computed(()=>props.mode===`labels`);const heading=computed(()=>editingLabels.value?`Edit labels`:editing.value?`Edit issue`:`New issue`);const title=ref(``);const body=ref(``);const selectedLabels=ref([]);const pending=ref(false);const feedback=useUiFeedback({source:`vibe64.issues.editor`});const labelsPath=computed(()=>githubIssueLabelsPath(props.basePath));const catalog=useEndpointResource({path:labelsPath,queryKey:computed(()=>[`vibe64.issueLabels`,labelsPath.value]),enabled:computed(()=>props.modelValue&&props.mode!==`content`),queryOptions:{retry:false},fallbackLoadError:`Labels could not load.`});const labels=computed(()=>catalog.data.value?.labels||[]);const canSetLabels=computed(()=>{const permission=editing.value?`canEditLabels`:`canCreateWithLabels`;return catalog.data.value?.[permission]===true});const path=computed(()=>editing.value?`${props.basePath}/${props.issue.number}${editingLabels.value?`/labels`:``}`:props.basePath);const resource=useEndpointResource({path,queryKey:computed(()=>[`vibe64.issueEditor`,path.value]),enabled:false});const canSubmit=computed(()=>{if(pending.value||selectedLabels.value.length>100)return false;return editingLabels.value?canSetLabels.value:Boolean(title.value.trim())&&(!editing.value||props.issue.viewerCanUpdate)});const submitLabel=computed(()=>{if(pending.value)return editing.value?`Saving…`:`Creating…`;if(editingLabels.value)return`Save labels`;return editing.value?`Save issue`:`Create issue`});watch(()=>props.modelValue,open=>{if(!open)return;title.value=props.issue?.title||``;body.value=props.issue?.body||``;selectedLabels.value=props.issue?.labels?.nodes?.map(label=>label.name)||[]},{immediate:true});async function submit(){if(!canSubmit.value)return;const wasEditing=editing.value;const requestBasePath=props.basePath;pending.value=true;try{const payload=editingLabels.value?{labels:selectedLabels.value}:{title:title.value.trim(),body:body.value,...!wasEditing?{labels:selectedLabels.value}:{}};const result=await resource.save(payload,{method:wasEditing?`PUT`:`POST`});feedback.success(wasEditing?`Issue updated.`:`Issue created.`);emit(`saved`,{number:result.issue.number,basePath:requestBasePath});emit(`update:modelValue`,false)}catch(error){feedback.error(error,wasEditing?`Issue could not be updated. Your changes have been kept.`:`Issue creation could not be confirmed. Refresh the issue list before trying again.`)}finally{pending.value=false}}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":__props.modelValue,"max-width":`42rem`,scrollable:``,persistent:pending.value,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>emit(`update:modelValue`,$event))},{default:withCtx(()=>[createVNode(VCard,{tag:`form`,rounded:`xl`,onSubmit:withModifiers(submit,[`prevent`])},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$3,[createBaseVNode(`div`,_hoisted_2$2,[createVNode(VIcon,{icon:editingLabels.value?unref(mdiLabelOutline):editing.value?unref(mdiPencilOutline):unref(mdiPlus),color:`primary`},null,8,[`icon`]),createBaseVNode(`h2`,_hoisted_3$2,toDisplayString(heading.value),1)]),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,size:`48`,"aria-label":`Close issue dialog`,disabled:pending.value,onClick:_cache[0]||(_cache[0]=$event=>emit(`update:modelValue`,false))},null,8,[`icon`,`disabled`])]),createVNode(VCardText,{class:`d-flex flex-column ga-4`},{default:withCtx(()=>[editingLabels.value?(openBlock(),createElementBlock(`p`,_hoisted_4$1,`#`+toDisplayString(__props.issue.number)+` · `+toDisplayString(__props.issue.title),1)):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VTextField,{modelValue:title.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>title.value=$event),label:`Title`,variant:`outlined`,maxlength:`256`,disabled:pending.value,"hide-details":``,autofocus:``},null,8,[`modelValue`,`disabled`]),createVNode(_sfc_main$5,{modelValue:body.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>body.value=$event),label:`Description`,placeholder:`What needs to happen?`,variant:`outlined`,rows:`5`,"auto-grow":``,maxlength:unref(GITHUB_BODY_MAX_LENGTH),"base-path":__props.basePath,issue:__props.issue,enabled:__props.modelValue,disabled:pending.value},null,8,[`modelValue`,`maxlength`,`base-path`,`issue`,`enabled`,`disabled`])],64)),__props.mode!==`content`?(openBlock(),createElementBlock(Fragment,{key:2},[unref(catalog).isInitialLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`list-item-two-line,button`,"min-height":`152`,"aria-label":`Loading labels`,"aria-busy":`true`})):unref(catalog).loadError.value?(openBlock(),createBlock(VAlert,{key:1,type:`error`,variant:`tonal`,rounded:`lg`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,height:`48`,onClick:_cache[3]||(_cache[3]=$event=>unref(catalog).reload())},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Retry`,-1)])]),_:1})]),default:withCtx(()=>[createTextVNode(toDisplayString(unref(catalog).loadError.value)+` `,1)]),_:1})):(openBlock(),createElementBlock(Fragment,{key:2},[createVNode(VAutocomplete,{modelValue:selectedLabels.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>selectedLabels.value=$event),items:labels.value,"item-title":`name`,"item-value":`name`,multiple:``,chips:``,"closable-chips":``,label:`Labels`,variant:`outlined`,disabled:pending.value||!canSetLabels.value,"menu-props":{maxHeight:320},"error-messages":selectedLabels.value.length>100?`Choose up to 100 labels.`:[],hint:canSetLabels.value?`Search and select repository labels.`:editing.value?`Your GitHub account cannot edit labels.`:`GitHub requires write access to set labels on a new issue.`,"persistent-hint":``,"no-data-text":`No matching labels`},{chip:withCtx(({props:chipProps,item})=>[createVNode(GithubLabelChip_default,mergeProps(chipProps,{label:item}),null,16,[`label`])]),item:withCtx(({props:itemProps,item})=>[createVNode(VListItem,mergeProps(itemProps,{"min-height":`48`}),{title:withCtx(()=>[createVNode(GithubLabelChip_default,{label:item},null,8,[`label`])]),subtitle:withCtx(()=>[createTextVNode(toDisplayString(item.description),1)]),_:2},1040)]),_:1},8,[`modelValue`,`items`,`disabled`,`error-messages`,`hint`]),createBaseVNode(`div`,_hoisted_5$1,[unref(catalog).data.value?.canCreateLabels?(openBlock(),createBlock(GithubNewLabelButton_default,{key:0,"base-path":__props.basePath,labels:labels.value,disabled:pending.value,onCreated:_cache[5]||(_cache[5]=$event=>selectedLabels.value=[...selectedLabels.value,$event.name])},null,8,[`base-path`,`labels`,`disabled`])):createCommentVNode(``,true),createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value||unref(catalog).isFetching.value,onClick:_cache[6]||(_cache[6]=$event=>unref(catalog).reload())},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(`Refresh labels`,-1)])]),_:1},8,[`disabled`])])],64))],64)):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`pa-5 pt-2`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value,onClick:_cache[7]||(_cache[7]=$event=>emit(`update:modelValue`,false))},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,rounded:`pill`,height:`48`,disabled:!canSubmit.value,"aria-busy":pending.value},{default:withCtx(()=>[createTextVNode(toDisplayString(submitLabel.value),1)]),_:1},8,[`disabled`,`aria-busy`])]),_:1})]),_:1})]),_:1},8,[`model-value`,`persistent`])}}};var _hoisted_1$2={class:`d-flex flex-wrap justify-end ga-2`};var _sfc_main$3={__name:`GithubCommentEditor`,props:{comment:{type:Object,required:true},issue:{type:Object,required:true},basePath:{type:String,required:true}},emits:[`saved`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const editing=ref(false);const body=ref(``);const pending=ref(false);const feedback=useUiFeedback({source:`vibe64.issues.commentEditor`});const path=computed(()=>`${props.basePath}/${props.issue.number}/comments/${encodeURIComponent(props.comment.id)}`);const resource=useEndpointResource({path,enabled:false});const canSubmit=computed(()=>!pending.value&&Boolean(body.value.trim())&&body.value.length<=65536);function edit(){body.value=props.comment.body;editing.value=true}async function submit(){if(!canSubmit.value)return;const savedIssue={number:props.issue.number,basePath:props.basePath};pending.value=true;try{await resource.save({body:body.value},{method:`PATCH`});editing.value=false;feedback.success(`Comment updated.`);emit(`saved`,savedIssue)}catch(error){feedback.error(error,`Comment could not be updated. Your changes have been kept.`)}finally{pending.value=false}}return(_ctx,_cache)=>{return editing.value?(openBlock(),createElementBlock(`form`,{key:0,class:`d-flex flex-column ga-2`,onSubmit:withModifiers(submit,[`prevent`])},[createVNode(_sfc_main$5,{modelValue:body.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>body.value=$event),label:`Edit comment`,"base-path":__props.basePath,issue:__props.issue,disabled:pending.value,enabled:editing.value,variant:`outlined`,rows:`4`,"auto-grow":``,maxlength:unref(GITHUB_BODY_MAX_LENGTH)},null,8,[`modelValue`,`base-path`,`issue`,`disabled`,`enabled`,`maxlength`]),createBaseVNode(`div`,_hoisted_1$2,[createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value,onClick:_cache[1]||(_cache[1]=$event=>editing.value=false)},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,height:`48`,disabled:!canSubmit.value},{default:withCtx(()=>[createTextVNode(toDisplayString(pending.value?`Saving…`:`Save comment`),1)]),_:1},8,[`disabled`])])],32)):(openBlock(),createElementBlock(Fragment,{key:1},[renderSlot(_ctx.$slots,`default`),__props.comment.viewerCanUpdate?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,height:`48`,onClick:edit},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Edit comment`,-1)])]),_:1})):createCommentVNode(``,true)],64))}}};var _hoisted_1$1={class:`text-body-medium ma-0`};var _hoisted_2$1={key:0,class:`d-flex justify-start`};var _hoisted_3$1={key:1,role:`status`};var _sfc_main$2={__name:`GithubBulkLabelsDialog`,props:{modelValue:Boolean,basePath:{type:String,required:true},numbers:{type:Array,required:true},labels:{type:Array,required:true},canCreateLabels:Boolean},emits:[`update:modelValue`,`applied`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const labelMode=ref(`add`);const selectedLabels=ref([]);const remaining=ref([]);const failures=ref([]);const pending=ref(false);const progress=ref(``);const feedback=useUiFeedback({source:`vibe64.issues.bulkLabels`});const queryClient=useQueryClient();const resource=useEndpointResource({path:computed(()=>props.basePath),enabled:false});const canSubmit=computed(()=>!pending.value&&selectedLabels.value.length>0&&selectedLabels.value.length<=100&&remaining.value.length>0);watch(()=>props.modelValue,open=>{if(!open)return;remaining.value=[...props.numbers];selectedLabels.value=[];labelMode.value=`add`;failures.value=[]},{immediate:true});async function submit(){if(!canSubmit.value)return;const requestBasePath=props.basePath;const numbers=[...remaining.value];const payload={labels:[...selectedLabels.value],labelMode:labelMode.value};failures.value=[];pending.value=true;for(const[index,number]of numbers.entries()){progress.value=`Updating ${index+1} of ${numbers.length}…`;const issuePath=`${requestBasePath}/${number}`;try{await resource.save(payload,{path:`${issuePath}/labels`,method:`PUT`})}catch(error){feedback.error(error,`Labels could not be updated for #${number}.`);failures.value.push({number,message:feedback.message.value});continue}remaining.value=remaining.value.filter(value=>value!==number);emit(`applied`,{number,basePath:requestBasePath});try{await invalidateGithubIssueQueries(queryClient,requestBasePath,issuePath)}catch(error){feedback.error(error,`Labels updated for #${number}, but the issue could not refresh.`)}}pending.value=false;if(!remaining.value.length){feedback.success(`Labels updated for ${numbers.length} ${numbers.length===1?`issue`:`issues`}.`);emit(`update:modelValue`,false)}}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":__props.modelValue,"max-width":`36rem`,scrollable:``,persistent:pending.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>emit(`update:modelValue`,$event))},{default:withCtx(()=>[createVNode(VCard,{tag:`form`,rounded:`xl`,onSubmit:withModifiers(submit,[`prevent`])},{default:withCtx(()=>[createVNode(VCardTitle,{class:`pa-5 pb-2`},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Bulk edit labels`,-1)])]),_:1}),createVNode(VCardText,{class:`d-flex flex-column ga-4`},{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_1$1,toDisplayString(remaining.value.length)+` selected. Other labels will stay unchanged.`,1),createVNode(VBtnToggle,{modelValue:labelMode.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>labelMode.value=$event),mandatory:``,divided:``,rounded:`pill`,disabled:pending.value,"aria-label":`Label action`},{default:withCtx(()=>[createVNode(VBtn,{value:`add`,height:`48`},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Add labels`,-1)])]),_:1}),createVNode(VBtn,{value:`remove`,height:`48`},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Remove labels`,-1)])]),_:1})]),_:1},8,[`modelValue`,`disabled`]),createVNode(VAutocomplete,{modelValue:selectedLabels.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>selectedLabels.value=$event),items:__props.labels,"item-title":`name`,"item-value":`name`,multiple:``,chips:``,"closable-chips":``,label:`Labels to change`,variant:`outlined`,disabled:pending.value,"menu-props":{maxHeight:320},"error-messages":selectedLabels.value.length>100?`Choose up to 100 labels.`:[],"no-data-text":`No matching labels`},{chip:withCtx(({props:chipProps,item})=>[createVNode(GithubLabelChip_default,mergeProps(chipProps,{label:item}),null,16,[`label`])]),item:withCtx(({props:itemProps,item})=>[createVNode(VListItem,mergeProps(itemProps,{"min-height":`48`}),{title:withCtx(()=>[createVNode(GithubLabelChip_default,{label:item},null,8,[`label`])]),_:2},1040)]),_:1},8,[`modelValue`,`items`,`disabled`,`error-messages`]),__props.canCreateLabels&&labelMode.value===`add`?(openBlock(),createElementBlock(`div`,_hoisted_2$1,[createVNode(GithubNewLabelButton_default,{"base-path":__props.basePath,labels:__props.labels,disabled:pending.value,onCreated:_cache[2]||(_cache[2]=$event=>selectedLabels.value=[...selectedLabels.value,$event.name])},null,8,[`base-path`,`labels`,`disabled`])])):createCommentVNode(``,true),failures.value.length?(openBlock(),createElementBlock(`div`,_hoisted_3$1,[_cache[8]||(_cache[8]=createBaseVNode(`p`,{class:`text-body-medium`},`Some issues could not be updated. Retry applies only to these issues:`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList(failures.value,failure=>{return openBlock(),createElementBlock(`p`,{key:failure.number,class:`text-body-small text-error`},`#`+toDisplayString(failure.number)+`: `+toDisplayString(failure.message),1)}),128))])):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`pa-5 pt-2 d-flex flex-wrap`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value,onClick:_cache[3]||(_cache[3]=$event=>emit(`update:modelValue`,false))},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,height:`48`,disabled:!canSubmit.value},{default:withCtx(()=>[createTextVNode(toDisplayString(pending.value?progress.value:failures.value.length?`Retry failed issues`:`Apply labels`),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`model-value`,`persistent`])}}};var _hoisted_1={class:`issues-panel d-flex flex-column ga-2`};var _hoisted_2={class:`issues-panel__toolbar d-flex flex-wrap align-center ga-2`};var _hoisted_3={class:`issues-panel__labels d-flex flex-wrap align-start ga-2`};var _hoisted_4={key:3,class:`d-flex justify-end`};var _hoisted_5={key:0,class:`text-body-small text-medium-emphasis ma-0`};var _hoisted_6={class:`d-flex align-center justify-space-between px-2 text-label-large text-medium-emphasis`};var _hoisted_7={key:1,class:`d-flex flex-wrap align-center ga-2`};var _hoisted_8={class:`text-label-large`,role:`status`};var _hoisted_9={class:`d-flex align-center`};var _hoisted_10={class:`d-flex flex-wrap align-center ga-1`};var _hoisted_11={key:0,class:`text-label-small`};var _hoisted_12=[`aria-label`];var _hoisted_13={class:`d-flex justify-space-between ga-2`};var _hoisted_14={class:`d-flex align-center flex-wrap ga-2 mb-3`};var _hoisted_15={class:`text-label-large text-medium-emphasis`};var _hoisted_16={class:`text-title-large mb-2 issues-panel__title`};var _hoisted_17={class:`text-body-small text-medium-emphasis mb-0`};var _hoisted_18={class:`d-flex align-center flex-wrap ga-2 mt-3`};var _hoisted_19={key:0,class:`text-body-small text-medium-emphasis`};var _hoisted_20={key:1,class:`text-body-medium text-medium-emphasis ma-0`};var _hoisted_21={class:`d-flex align-center justify-space-between flex-wrap ga-2 px-2`};var _hoisted_22={class:`text-title-medium`};var _hoisted_23={class:`text-medium-emphasis`};var _hoisted_24={class:`d-flex flex-wrap ga-2`};var _hoisted_25={key:1,class:`text-body-medium text-medium-emphasis px-2`};var _hoisted_26={class:`issues-panel__comment-body`};var _hoisted_27={class:`d-flex flex-wrap align-center ga-2 mb-2`};var _hoisted_28={class:`text-label-large`};var _hoisted_29=[`datetime`];var _hoisted_30={key:0,class:`d-flex flex-wrap align-center ga-2 mt-1`,"aria-live":`polite`};var _hoisted_31={key:0,class:`text-body-small text-medium-emphasis`};var _hoisted_32={class:`text-body-small text-error`};var _hoisted_33={key:0,class:`text-body-small text-medium-emphasis ma-0`};var _hoisted_34={class:`d-flex flex-wrap align-center justify-space-between ga-3`};var _sfc_main$1={__name:`GithubIssuesPanel`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){const props=__props;const{available,projectSlug,basePath,list,detail,labelCatalog,issue,number,state,searchDraft,selectedLabels,draft,pending,comments,commentCount,commentCursor,navigate,filter,filterLabel,mutate,issueSaved,issueUpdated,retryComment}=useVibe64Issues(computed(()=>props.dashboardContext));const route=useRoute();const bulkOpen=ref(false);const selectedNumbers=ref([]);const visibleNumbers=computed(()=>(list.data.value?.issues||[]).map(item=>item.number));const allSelected=computed(()=>visibleNumbers.value.length>0&&visibleNumbers.value.every(value=>selectedNumbers.value.includes(value)));watch(()=>[basePath.value,number.value,route.query.issueSearch,route.query.issueState,route.query.issueCursor,route.query.issueLabel],()=>{selectedNumbers.value=[];bulkOpen.value=false},{deep:true});function labelsApplied({number:issueNumber,basePath:requestBasePath}){if(basePath.value===requestBasePath)selectedNumbers.value=selectedNumbers.value.filter(value=>value!==issueNumber)}const editorOpen=ref(false);const editorMode=ref(`create`);const editorIssue=shallowRef(null);watch([basePath,number],()=>{editorOpen.value=false;editorIssue.value=null;editorMode.value=`create`});function openEditor(selectedIssue=null,mode=`create`){editorMode.value=mode;editorIssue.value=selectedIssue;editorOpen.value=true}const resource=computed(()=>number.value?detail:list);const canChangeState=computed(()=>issue.value?.state===`OPEN`?issue.value.viewerCanClose:issue.value?.viewerCanReopen);function date(value){return value?new Date(value).toLocaleDateString(void 0,{month:`short`,day:`numeric`,year:`numeric`}):``}return(_ctx,_cache)=>{const _component_router_link=resolveComponent(`router-link`);return openBlock(),createElementBlock(`section`,_hoisted_1,[createBaseVNode(`div`,_hoisted_2,[createVNode(Vibe64DashboardBackButton_default,{to:unref(available)&&unref(number)?void 0:unref(projectAppPath)(unref(projectSlug),`/dashboard/env`),onClick:_cache[0]||(_cache[0]=$event=>unref(available)&&unref(number)&&unref(navigate)({issue:void 0}))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(available)&&unref(number)?`All issues`:`Back to dashboard`),1)]),_:1},8,[`to`]),createVNode(VSpacer),unref(available)?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiRefresh),variant:`text`,size:`small`,height:`48`,disabled:resource.value.isFetching.value||Boolean(unref(pending)),onClick:_cache[1]||(_cache[1]=$event=>resource.value.reload())},{default:withCtx(()=>[createTextVNode(toDisplayString(resource.value.isFetching.value?`Refreshing…`:`Refresh`),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),unref(available)?(openBlock(),createBlock(VBtn,{key:1,"prepend-icon":unref(mdiPlus),color:`primary`,variant:`tonal`,rounded:`pill`,size:`small`,height:`48`,onClick:_cache[2]||(_cache[2]=$event=>openEditor())},{default:withCtx(()=>[..._cache[28]||(_cache[28]=[createTextVNode(`New issue`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true)]),!unref(available)?(openBlock(),createBlock(VAlert,{key:0,variant:`tonal`,type:`info`},{default:withCtx(()=>[..._cache[29]||(_cache[29]=[createTextVNode(`Issues are available only for GitHub projects.`,-1)])]),_:1})):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(_sfc_main$8),!unref(number)?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode(`form`,{class:`d-flex flex-wrap align-center ga-3`,onSubmit:_cache[8]||(_cache[8]=withModifiers($event=>unref(filter)(),[`prevent`]))},[createVNode(VBtnToggle,{"model-value":unref(state),mandatory:``,divided:``,rounded:`pill`,color:`primary`,variant:`outlined`,"aria-label":`Issue state`,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>unref(filter)($event))},{default:withCtx(()=>[createVNode(VBtn,{value:`open`,height:`48`},{default:withCtx(()=>[..._cache[30]||(_cache[30]=[createTextVNode(`Open`,-1)])]),_:1}),createVNode(VBtn,{value:`closed`,height:`48`},{default:withCtx(()=>[..._cache[31]||(_cache[31]=[createTextVNode(`Closed`,-1)])]),_:1}),createVNode(VBtn,{value:`all`,height:`48`},{default:withCtx(()=>[..._cache[32]||(_cache[32]=[createTextVNode(`All`,-1)])]),_:1})]),_:1},8,[`model-value`]),createVNode(VTextField,{modelValue:unref(searchDraft),"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>isRef(searchDraft)?searchDraft.value=$event:null),class:`issues-panel__search`,label:`Search issues`,placeholder:`Number, text, label:new or label:"some label"`,"prepend-inner-icon":unref(mdiMagnify),variant:`outlined`,rounded:`pill`,"hide-details":``,maxlength:`200`,clearable:``,onKeydown:_cache[6]||(_cache[6]=withKeys(withModifiers($event=>unref(filter)(),[`prevent`]),[`enter`])),"onClick:clear":_cache[7]||(_cache[7]=$event=>{searchDraft.value=``;unref(filter)()})},{"append-inner":withCtx(()=>[createVNode(VBtn,{icon:unref(mdiArrowRight),variant:`text`,size:`48`,"aria-label":`Search issues`,onClick:_cache[4]||(_cache[4]=$event=>unref(filter)())},null,8,[`icon`])]),_:1},8,[`modelValue`,`prepend-inner-icon`])],32),createBaseVNode(`div`,_hoisted_3,[unref(labelCatalog).isInitialLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,class:`issues-panel__label-filter`,type:`list-item`,height:`80`,"aria-label":`Loading label filters`,"aria-busy":`true`})):unref(labelCatalog).loadError.value?(openBlock(),createBlock(VAlert,{key:1,class:`issues-panel__label-filter`,type:`error`,variant:`tonal`,rounded:`lg`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,height:`48`,onClick:_cache[9]||(_cache[9]=$event=>unref(labelCatalog).reload())},{default:withCtx(()=>[..._cache[33]||(_cache[33]=[createTextVNode(`Retry labels`,-1)])]),_:1})]),default:withCtx(()=>[createTextVNode(toDisplayString(unref(labelCatalog).loadError.value)+` `,1)]),_:1})):(openBlock(),createBlock(VAutocomplete,{key:2,"model-value":unref(selectedLabels),items:unref(labelCatalog).data.value?.labels||[],class:`issues-panel__label-filter`,"item-title":`name`,"item-value":`name`,multiple:``,chips:``,"closable-chips":``,clearable:``,label:`Filter by labels`,"prepend-inner-icon":unref(mdiLabelOutline),variant:`outlined`,rounded:`lg`,"menu-props":{maxHeight:320},hint:`Match all selected labels.`,"persistent-hint":``,"no-data-text":`No matching labels`,"onUpdate:modelValue":_cache[10]||(_cache[10]=$event=>unref(filter)(unref(state),$event))},{chip:withCtx(({props:chipProps,item})=>[createVNode(GithubLabelChip_default,mergeProps(chipProps,{label:item}),null,16,[`label`])]),item:withCtx(({props:itemProps,item})=>[createVNode(VListItem,mergeProps(itemProps,{"min-height":`48`}),{title:withCtx(()=>[createVNode(GithubLabelChip_default,{label:item},null,8,[`label`])]),subtitle:withCtx(()=>[createTextVNode(toDisplayString(item.description),1)]),_:2},1040)]),_:1},8,[`model-value`,`items`,`prepend-inner-icon`])),unref(labelCatalog).data.value?.canCreateLabels?(openBlock(),createElementBlock(`div`,_hoisted_4,[createVNode(GithubNewLabelButton_default,{"base-path":unref(basePath),labels:unref(labelCatalog).data.value.labels},null,8,[`base-path`,`labels`])])):createCommentVNode(``,true)])],64)):createCommentVNode(``,true),resource.value.isInitialLoading.value?(openBlock(),createBlock(VSheet,{key:1,rounded:`xl`,border:``,class:`pa-4`,"aria-label":`Loading issues`,"aria-busy":`true`},{default:withCtx(()=>[(openBlock(),createElementBlock(Fragment,null,renderList(4,index=>{return createVNode(VSkeletonLoader,{key:index,type:unref(number)?`paragraph`:`list-item-two-line`},null,8,[`type`])}),64))]),_:1})):resource.value.loadError.value&&(!unref(number)||!unref(issue))?(openBlock(),createBlock(VAlert,{key:2,type:`error`,variant:`tonal`,rounded:`lg`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,height:`48`,disabled:resource.value.isFetching.value,onClick:_cache[11]||(_cache[11]=$event=>resource.value.reload())},{default:withCtx(()=>[..._cache[34]||(_cache[34]=[createTextVNode(`Retry`,-1)])]),_:1},8,[`disabled`])]),default:withCtx(()=>[createTextVNode(toDisplayString(resource.value.loadError.value)+` `,1)]),_:1})):!unref(number)?(openBlock(),createElementBlock(Fragment,{key:3},[unref(list).data.value?.searchLimit&&unref(list).data.value.total>unref(list).data.value.searchLimit?(openBlock(),createElementBlock(`p`,_hoisted_5,` GitHub returns up to 1,000 matches for text searches or multiple labels. Narrow the filters to see more specific results. `)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_6,[createBaseVNode(`span`,null,toDisplayString(unref(list).data.value?.total||0)+` `+toDisplayString(unref(list).data.value?.total===1?`issue`:`issues`),1),_cache[35]||(_cache[35]=createBaseVNode(`span`,null,`Recently updated`,-1))]),unref(labelCatalog).data.value?.canEditLabels&&visibleNumbers.value.length?(openBlock(),createElementBlock(`div`,_hoisted_7,[createVNode(VCheckboxBtn,{"model-value":allSelected.value,indeterminate:selectedNumbers.value.length>0&&!allSelected.value,label:`Select all on this page`,class:`issues-panel__select-all`,"min-height":`48`,"onUpdate:modelValue":_cache[12]||(_cache[12]=$event=>selectedNumbers.value=$event?[...visibleNumbers.value]:[])},null,8,[`model-value`,`indeterminate`]),createBaseVNode(`span`,_hoisted_8,toDisplayString(selectedNumbers.value.length)+` selected`,1),createVNode(VBtn,{variant:`tonal`,height:`48`,disabled:!selectedNumbers.value.length,onClick:_cache[13]||(_cache[13]=$event=>bulkOpen.value=true)},{default:withCtx(()=>[..._cache[36]||(_cache[36]=[createTextVNode(`Bulk edit labels`,-1)])]),_:1},8,[`disabled`]),selectedNumbers.value.length?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,height:`48`,onClick:_cache[14]||(_cache[14]=$event=>selectedNumbers.value=[])},{default:withCtx(()=>[..._cache[37]||(_cache[37]=[createTextVNode(`Clear selection`,-1)])]),_:1})):createCommentVNode(``,true)])):createCommentVNode(``,true),unref(list).data.value?.issues?.length?(openBlock(),createBlock(VList,{key:2,class:`pa-0`,density:`compact`,lines:`two`,rounded:`xl`,border:``,slim:``,"aria-label":`GitHub issues`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(list).data.value.issues,(item,index)=>{return openBlock(),createElementBlock(Fragment,{key:item.number},[index?(openBlock(),createBlock(VDivider,{key:0})):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_9,[unref(labelCatalog).data.value?.canEditLabels?(openBlock(),createBlock(VCheckboxBtn,{key:0,modelValue:selectedNumbers.value,"onUpdate:modelValue":_cache[15]||(_cache[15]=$event=>selectedNumbers.value=$event),value:item.number,"aria-label":`Select issue #${item.number}`,class:`flex-grow-0 ml-2`,"min-width":`48`,"min-height":`48`},null,8,[`modelValue`,`value`,`aria-label`])):createCommentVNode(``,true),createVNode(VListItem,{class:`py-2 flex-grow-1`,active:false},{prepend:withCtx(()=>[createVNode(VIcon,{icon:item.state===`OPEN`?unref(mdiRecordCircleOutline):unref(mdiCheck),color:item.state===`OPEN`?`success`:`primary`,"aria-label":item.state===`OPEN`?`Open`:`Closed`},null,8,[`icon`,`color`,`aria-label`])]),append:withCtx(()=>[createBaseVNode(`span`,{class:`d-flex align-center ga-1 ml-3 text-label-medium text-medium-emphasis`,"aria-label":`${item.comments.totalCount} comments`},[createVNode(VIcon,{icon:unref(mdiCommentOutline),size:`18`},null,8,[`icon`]),createTextVNode(toDisplayString(item.comments.totalCount),1)],8,_hoisted_12)]),default:withCtx(()=>[createBaseVNode(`div`,_hoisted_10,[createVNode(VListItemTitle,{class:`issues-panel__item-title text-title-medium text-wrap`},{default:withCtx(()=>[createVNode(_component_router_link,{class:`issues-panel__issue-link text-decoration-none`,to:{query:{..._ctx.$route.query,issue:String(item.number)}}},{default:withCtx(()=>[createTextVNode(toDisplayString(item.title),1)]),_:2},1032,[`to`])]),_:2},1024),(openBlock(true),createElementBlock(Fragment,null,renderList(item.labels?.nodes||[],label=>{return openBlock(),createBlock(GithubLabelChip_default,{key:label.name,label,tag:`button`,type:`button`,"aria-label":`Filter by label ${label.name}`,onClick:$event=>unref(filterLabel)(label.name)},null,8,[`label`,`aria-label`,`onClick`])}),128)),item.labels?.totalCount>item.labels?.nodes?.length?(openBlock(),createElementBlock(`span`,_hoisted_11,`+`+toDisplayString(item.labels.totalCount-item.labels.nodes.length),1)):createCommentVNode(``,true)]),createVNode(VListItemSubtitle,{class:`text-body-small mt-1`},{default:withCtx(()=>[createTextVNode(` #`+toDisplayString(item.number)+` · `+toDisplayString(item.state===`OPEN`?`Open`:`Closed`)+` · `+toDisplayString(date(item.updatedAt)),1)]),_:2},1024)]),_:2},1024)])],64)}),128))]),_:1})):(openBlock(),createBlock(VSheet,{key:3,rounded:`xl`,color:`surface-light`,class:`pa-8 text-center`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiRecordCircleOutline),size:`40`,class:`mb-3`},null,8,[`icon`]),_cache[38]||(_cache[38]=createBaseVNode(`p`,{class:`text-title-medium mb-1`},`No issues here`,-1)),_cache[39]||(_cache[39]=createBaseVNode(`p`,{class:`text-body-medium text-medium-emphasis ma-0`},`Try a different filter or search.`,-1))]),_:1})),createBaseVNode(`div`,_hoisted_13,[_ctx.$route.query.issueCursor?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,height:`48`,onClick:_cache[16]||(_cache[16]=$event=>unref(navigate)({issueCursor:void 0}))},{default:withCtx(()=>[..._cache[40]||(_cache[40]=[createTextVNode(`First page`,-1)])]),_:1})):createCommentVNode(``,true),createVNode(VSpacer),unref(list).data.value?.pageInfo?.hasNextPage?(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,height:`48`,"append-icon":unref(mdiArrowRight),onClick:_cache[17]||(_cache[17]=$event=>unref(navigate)({issueCursor:unref(list).data.value.pageInfo.endCursor}))},{default:withCtx(()=>[..._cache[41]||(_cache[41]=[createTextVNode(` Next page `,-1)])]),_:1},8,[`append-icon`])):createCommentVNode(``,true)])],64)):unref(issue)?(openBlock(),createElementBlock(Fragment,{key:4},[unref(detail).loadError.value?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,rounded:`lg`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,height:`48`,disabled:unref(detail).isFetching.value,onClick:_cache[18]||(_cache[18]=$event=>unref(detail).reload())},{default:withCtx(()=>[..._cache[42]||(_cache[42]=[createTextVNode(`Refresh`,-1)])]),_:1},8,[`disabled`])]),default:withCtx(()=>[createTextVNode(toDisplayString(unref(detail).loadError.value)+` `,1)]),_:1})):createCommentVNode(``,true),createBaseVNode(`div`,null,[createBaseVNode(`div`,_hoisted_14,[createVNode(VChip,{"prepend-icon":unref(issue).state===`OPEN`?unref(mdiRecordCircleOutline):unref(mdiCheck),color:unref(issue).state===`OPEN`?`success`:`primary`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(issue).state===`OPEN`?`Open`:`Closed`),1)]),_:1},8,[`prepend-icon`,`color`]),createBaseVNode(`span`,_hoisted_15,`#`+toDisplayString(unref(issue).number),1),createVNode(VSpacer),unref(issue).viewerCanUpdate?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiPencilOutline),variant:`text`,height:`48`,onClick:_cache[19]||(_cache[19]=$event=>openEditor(unref(issue),`content`))},{default:withCtx(()=>[..._cache[43]||(_cache[43]=[createTextVNode(`Edit issue`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true),createVNode(VBtn,{href:unref(issue).url,target:`_blank`,rel:`noopener noreferrer`,"append-icon":unref(mdiOpenInNew),variant:`text`,height:`48`},{default:withCtx(()=>[..._cache[44]||(_cache[44]=[createTextVNode(`GitHub`,-1)])]),_:1},8,[`href`,`append-icon`])]),createBaseVNode(`h2`,_hoisted_16,toDisplayString(unref(issue).title),1),createBaseVNode(`p`,_hoisted_17,toDisplayString(unref(issue).author?.login||`Deleted user`)+` opened this on `+toDisplayString(date(unref(issue).createdAt)),1),createBaseVNode(`div`,_hoisted_18,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(issue).labels?.nodes||[],label=>{return openBlock(),createBlock(GithubLabelChip_default,{key:label.name,label,tag:`button`,type:`button`,"aria-label":`Filter by label ${label.name}`,onClick:$event=>unref(filterLabel)(label.name)},null,8,[`label`,`aria-label`,`onClick`])}),128)),!unref(issue).labels?.nodes?.length?(openBlock(),createElementBlock(`span`,_hoisted_19,`No labels`)):createCommentVNode(``,true),unref(issue).canEditLabels?(openBlock(),createBlock(VBtn,{key:1,"prepend-icon":unref(mdiLabelOutline),variant:`text`,height:`48`,onClick:_cache[20]||(_cache[20]=$event=>openEditor(unref(issue),`labels`))},{default:withCtx(()=>[..._cache[45]||(_cache[45]=[createTextVNode(`Edit labels`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true)])]),createVNode(VSheet,{border:``,rounded:`xl`,class:`pa-5 issues-panel__markdown`},{default:withCtx(()=>[unref(issue).body||unref(issue).bodyHTML?(openBlock(),createBlock(GithubMarkdown_default,{key:0,text:unref(issue).body,html:unref(issue).bodyHTML},null,8,[`text`,`html`])):(openBlock(),createElementBlock(`p`,_hoisted_20,`No description provided.`))]),_:1}),createBaseVNode(`div`,_hoisted_21,[createBaseVNode(`h3`,_hoisted_22,[_cache[46]||(_cache[46]=createTextVNode(`Comments `,-1)),createBaseVNode(`span`,_hoisted_23,toDisplayString(unref(commentCount)),1)]),createBaseVNode(`div`,_hoisted_24,[unref(commentCursor)?(openBlock(),createBlock(VBtn,{key:0,height:`48`,variant:`text`,onClick:_cache[21]||(_cache[21]=$event=>commentCursor.value=``)},{default:withCtx(()=>[..._cache[47]||(_cache[47]=[createTextVNode(`Latest comments`,-1)])]),_:1})):createCommentVNode(``,true),unref(issue).comments.pageInfo.hasPreviousPage?(openBlock(),createBlock(VBtn,{key:1,height:`48`,variant:`text`,onClick:_cache[22]||(_cache[22]=$event=>commentCursor.value=unref(issue).comments.pageInfo.startCursor)},{default:withCtx(()=>[..._cache[48]||(_cache[48]=[createTextVNode(` Older comments `,-1)])]),_:1})):createCommentVNode(``,true)])]),!unref(comments).length?(openBlock(),createElementBlock(`p`,_hoisted_25,`No comments yet. Start the conversation.`)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(unref(comments),comment=>{return openBlock(),createElementBlock(`article`,{key:comment.id,class:`issues-panel__comment d-flex ga-3`},[createVNode(VAvatar,{color:`primary`,variant:`tonal`,size:`36`,class:`mt-1 text-label-large`,"aria-hidden":`true`},{default:withCtx(()=>[createTextVNode(toDisplayString((comment.author?.login||`?`).slice(0,1).toUpperCase()),1)]),_:2},1024),createBaseVNode(`div`,_hoisted_26,[createBaseVNode(`div`,_hoisted_27,[createBaseVNode(`span`,_hoisted_28,toDisplayString(comment.author?.login||`Deleted user`),1),createBaseVNode(`time`,{class:`text-body-small text-medium-emphasis`,datetime:comment.createdAt},toDisplayString(date(comment.createdAt)),9,_hoisted_29)]),(openBlock(),createBlock(_sfc_main$3,{key:`${unref(basePath)}:${unref(issue).number}:${comment.id}`,comment,issue:unref(issue),"base-path":unref(basePath),onSaved:unref(issueUpdated)},{default:withCtx(()=>[createVNode(VSheet,{color:`surface-light`,rounded:`xl`,class:`pa-4 issues-panel__markdown`},{default:withCtx(()=>[createVNode(GithubMarkdown_default,{text:comment.body,html:comment.bodyHTML},null,8,[`text`,`html`])]),_:2},1024)]),_:2},1032,[`comment`,`issue`,`base-path`,`onSaved`])),comment.delivery&&comment.delivery!==`sent`?(openBlock(),createElementBlock(`div`,_hoisted_30,[comment.delivery===`sending`?(openBlock(),createElementBlock(`span`,_hoisted_31,`Posting…`)):(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`span`,_hoisted_32,toDisplayString(comment.error),1),createVNode(VBtn,{variant:`text`,height:`48`,disabled:Boolean(unref(pending)),onClick:$event=>unref(retryComment)(comment.id)},{default:withCtx(()=>[..._cache[49]||(_cache[49]=[createTextVNode(`Retry`,-1)])]),_:1},8,[`disabled`,`onClick`])],64))])):createCommentVNode(``,true)])])}),128)),createVNode(VDivider),createBaseVNode(`form`,{class:`d-flex flex-column ga-3`,onSubmit:_cache[25]||(_cache[25]=withModifiers($event=>unref(mutate)(`comment`),[`prevent`]))},[unref(issue).locked?(openBlock(),createElementBlock(`p`,_hoisted_33,`This conversation is locked. GitHub limits comments to permitted collaborators.`)):createCommentVNode(``,true),createVNode(_sfc_main$5,{modelValue:unref(draft),"onUpdate:modelValue":_cache[23]||(_cache[23]=$event=>isRef(draft)?draft.value=$event:null),label:`Add a comment`,placeholder:`Share an update or ask a question…`,variant:`outlined`,rounded:`lg`,rows:`4`,"auto-grow":``,counter:unref(draft).length>65e3?unref(GITHUB_BODY_MAX_LENGTH):void 0,"error-messages":unref(draft).length>unref(65536)?`Keep your comment under 65,536 characters.`:[],"base-path":unref(basePath),issue:unref(issue),enabled:__props.dashboardContext.active!==false},null,8,[`modelValue`,`counter`,`error-messages`,`base-path`,`issue`,`enabled`]),createBaseVNode(`div`,_hoisted_34,[createVNode(VBtn,{variant:`tonal`,height:`48`,"prepend-icon":unref(issue).state===`OPEN`?unref(mdiCheck):unref(mdiRestore),disabled:!canChangeState.value||Boolean(unref(pending)),title:canChangeState.value?``:`Your GitHub account cannot change this issue’s state.`,onClick:_cache[24]||(_cache[24]=$event=>unref(mutate)(`state`))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(pending)===`state`?`Updating…`:unref(issue).state===`OPEN`?`Close issue`:`Reopen issue`),1)]),_:1},8,[`prepend-icon`,`disabled`,`title`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,rounded:`pill`,height:`48`,disabled:!unref(draft).trim()||unref(draft).length>unref(65536)||Boolean(unref(pending))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(pending)===`comment`?`Posting…`:`Comment`),1)]),_:1},8,[`disabled`])])],32)],64)):createCommentVNode(``,true)],64)),unref(available)?(openBlock(),createBlock(_sfc_main$2,{key:unref(basePath),modelValue:bulkOpen.value,"onUpdate:modelValue":_cache[26]||(_cache[26]=$event=>bulkOpen.value=$event),"base-path":unref(basePath),numbers:selectedNumbers.value,labels:unref(labelCatalog).data.value?.labels||[],"can-create-labels":unref(labelCatalog).data.value?.canCreateLabels===true,onApplied:labelsApplied},null,8,[`modelValue`,`base-path`,`numbers`,`labels`,`can-create-labels`])):createCommentVNode(``,true),unref(available)?(openBlock(),createBlock(_sfc_main$4,{key:3,modelValue:editorOpen.value,"onUpdate:modelValue":_cache[27]||(_cache[27]=$event=>editorOpen.value=$event),"base-path":unref(basePath),issue:editorIssue.value,mode:editorMode.value,onSaved:unref(issueSaved)},null,8,[`modelValue`,`base-path`,`issue`,`mode`,`onSaved`])):createCommentVNode(``,true)])}}};var GithubIssuesPanel_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-b5746745`]]);var _sfc_main={__name:`index`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(GithubIssuesPanel_default,{"dashboard-context":__props.dashboardContext},null,8,[`dashboard-context`])}}};export{_sfc_main as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{J as inject,ct as onMounted,it as onBeforeUnmount,xn as shallowRef}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{a as deriveSurfaceRouteBaseFromPagesRoot,n as createSurfacePathHelpers,o as normalizeSurfaceId,r as normalizePathname,s as normalizeSurfacePagesRoot}from"./returnToPath-gKtcu91D.js";import{f as normalizeText,l as normalizeObject,r as isRecord}from"./normalize-BNAdWJYg.js";import"./surface-DzO5xqc8.js";var EXTERNAL_LINK_PATTERN=/^[A-Za-z][A-Za-z0-9+.-]*:/;function isExternalLinkTarget(target=``){const normalizedTarget=String(target||``).trim();if(!normalizedTarget)return false;if(normalizedTarget.startsWith(`//`))return true;return EXTERNAL_LINK_PATTERN.test(normalizedTarget)}function splitPathQueryHash(target=``){const normalizedTarget=String(target||``).trim();if(!normalizedTarget)return Object.freeze({pathname:``,search:``,hash:``});const hashIndex=normalizedTarget.indexOf(`#`);const beforeHash=hashIndex>=0?normalizedTarget.slice(0,hashIndex):normalizedTarget;const hash=hashIndex>=0?normalizedTarget.slice(hashIndex):``;const queryIndex=beforeHash.indexOf(`?`);const pathname=queryIndex>=0?beforeHash.slice(0,queryIndex):beforeHash;const search=queryIndex>=0?beforeHash.slice(queryIndex):``;return Object.freeze({pathname,search,hash})}function resolveLinkPath(basePath=`/`,relativePath=`/`){const normalizedRelativePath=String(relativePath||``).trim();if(isExternalLinkTarget(normalizedRelativePath))return normalizedRelativePath;const normalizedBasePath=normalizePathname(basePath||`/`);if(!normalizedRelativePath)return normalizedBasePath;const{pathname,search,hash}=splitPathQueryHash(normalizedRelativePath);if(!pathname)return`${normalizedBasePath}${search}${hash}`;const normalizedPathname=normalizePathname(pathname.startsWith(`/`)?pathname:`/${pathname}`);return`${normalizedBasePath===`/`?normalizedPathname:normalizedPathname===`/`?normalizedBasePath:`${normalizedBasePath}${normalizedPathname}`}${search}${hash}`}var PLACEMENT_LAYOUT_CLASSES=Object.freeze([`compact`,`medium`,`expanded`]);var WEB_PLACEMENT_SURFACE_ANY=`*`;function normalizeShellOutletTargetId(value=``){const normalizedValue=normalizeText(value);if(!normalizedValue)return``;const separatorIndex=normalizedValue.indexOf(`:`);if(separatorIndex<=0||separatorIndex>=normalizedValue.length-1)return``;const host=normalizeText(normalizedValue.slice(0,separatorIndex));const position=normalizeText(normalizedValue.slice(separatorIndex+1));if(!host||!position)return``;return`${host}:${position}`}function normalizeSemanticPlacementId(value=``){const normalizedValue=normalizeText(value).toLowerCase();if(!normalizedValue||normalizedValue.includes(`:`)||!normalizedValue.includes(`.`))return``;const segments=normalizedValue.split(`.`);if(segments.length<2)return``;const normalizedSegments=[];for(const segment of segments){const normalizedSegment=normalizeText(segment);if(!/^[a-z0-9]+(?:[_-][a-z0-9]+)*$/.test(normalizedSegment))return``;normalizedSegments.push(normalizedSegment)}return normalizedSegments.join(`.`)}function normalizePlacementOwnerId(value=``){const normalizedValue=normalizeText(value).toLowerCase();if(!normalizedValue)return``;if(!/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/.test(normalizedValue))return``;return normalizedValue}function normalizePlacementLayoutClass(value=``){const normalizedValue=normalizeText(value).toLowerCase();if(PLACEMENT_LAYOUT_CLASSES.includes(normalizedValue))return normalizedValue;return``}function normalizePlacementKind(value=``){const normalizedValue=normalizeText(value).toLowerCase();if(normalizedValue===`link`||normalizedValue===`component`)return normalizedValue;return``}function normalizePlacementSurfaceId(value=``){const normalizedValue=normalizeText(value).toLowerCase();if(!normalizedValue)return``;if(normalizedValue===`*`)return`*`;if(/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/.test(normalizedValue))return normalizedValue;return``}function normalizePlacementSurfaces$1(value){const candidates=Array.isArray(value)?value:value===void 0||value===null?[]:[value];if(candidates.length<1)return Object.freeze([`*`]);const normalized=[];const seen=new Set;for(const candidate of candidates){const surface=normalizePlacementSurfaceId(candidate);if(!surface||seen.has(surface))continue;if(surface===`*`)return Object.freeze([`*`]);seen.add(surface);normalized.push(surface)}if(normalized.length<1)return Object.freeze([`*`]);return Object.freeze(normalized)}function resolvePlacementTargetReference(value=``){const semanticId=normalizeSemanticPlacementId(value);if(semanticId)return Object.freeze({id:semanticId,type:`semantic`});const concreteId=normalizeShellOutletTargetId(value);if(concreteId)return Object.freeze({id:concreteId,type:`concrete`});return null}function normalizePlacementRenderers(value={}){const record=normalizeObject(value);const renderers={};for(const[key,rendererToken]of Object.entries(record)){const kind=normalizePlacementKind(key);const token=normalizeText(rendererToken);if(!kind||!token)continue;renderers[kind]=token}return Object.freeze(renderers)}function normalizePlacementTopologyVariant(value={},{context=`placement topology variant`}={}){const record=normalizeObject(value);const outlet=normalizeShellOutletTargetId(record.outlet||record.target);if(!outlet)throw new Error(`${normalizeText(context)||`placement topology variant`} requires outlet in "host:position" format.`);return Object.freeze({outlet,renderers:normalizePlacementRenderers(record.renderers)})}function normalizePlacementTopologyEntry(value={},{context=`placement topology`}={}){const record=normalizeObject(value);const resolvedContext=normalizeText(context)||`placement topology`;const id=normalizeSemanticPlacementId(record.id||record.target);if(!id)throw new Error(`${resolvedContext} requires semantic placement id in "area.slot" format.`);const owner=normalizePlacementOwnerId(record.owner);const surfaces=normalizePlacementSurfaces$1(record.surfaces);const variantsRecord=normalizeObject(record.variants);const variants={};for(const layoutClass of PLACEMENT_LAYOUT_CLASSES){const variant=variantsRecord[layoutClass];if(!variant)throw new Error(`${resolvedContext} "${id}" requires ${layoutClass} topology variant.`);variants[layoutClass]=normalizePlacementTopologyVariant(variant,{context:`${resolvedContext} "${id}" ${layoutClass}`})}return Object.freeze({id,owner,description:normalizeText(record.description),surfaces,default:record.default===true,variants:Object.freeze(variants)})}function normalizePlacementTopologyDefinition(value={},{context=`placement topology`}={}){const record=normalizeObject(value);const entries=Array.isArray(record.placements)?record.placements:Array.isArray(value)?value:[];const normalized=[];const seen=new Set;for(const entry of entries){const placement=normalizePlacementTopologyEntry(entry,{context});const key=`${placement.id}::${placement.owner||``}`;if(seen.has(key))throw new Error(`${normalizeText(context)||`placement topology`} contains duplicate semantic placement "${placement.id}"${placement.owner?` for owner "${placement.owner}"`:``}.`);seen.add(key);normalized.push(placement)}return Object.freeze({placements:Object.freeze(normalized)})}function isRenderableComponent(value){if(typeof value===`function`)return true;return isRecord(value)}function normalizeSurface(value){return normalizeText(value).toLowerCase()||`*`}function normalizePlacementSurface(value,{strict=false,source=`placement`}={}){const surface=normalizePlacementSurfaceId(value);if(!surface&&strict){const normalized=normalizeText(value).toLowerCase();throw new TypeError(normalized?`${source} surface "${normalized}" is invalid.`:`${source} requires surface id or "*".`)}return surface}function toInteger(value,fallback=1e3){const numeric=Number(value);if(!Number.isFinite(numeric))return fallback;return Math.trunc(numeric)}function normalizePlacementTarget(value,{strict=false,source=`placement`}={}){const reference=resolvePlacementTargetReference(String(value||``).toLowerCase());if(reference?.id)return reference.id;if(strict)throw new TypeError(`${source} requires semantic target in "area.slot" format or internal concrete target in "host:position" format.`);return``}function normalizePlacementSurfaces(value,{strict=false,source=`placement`}={}){if(strict){const candidates=Array.isArray(value)?value:value===void 0||value===null?[]:[value];for(const candidate of candidates)if(normalizePlacementSurface(candidate,{strict,source})===`*`)break}return normalizePlacementSurfaces$1(value)}function normalizePlacementDefinition(value,{strict=false,source=`placement`}={}){if(!isRecord(value)){if(strict)throw new TypeError(`${source} must be an object.`);return null}const id=normalizeText(value.id);if(!id){if(strict)throw new TypeError(`${source} requires id.`);return null}const target=normalizePlacementTarget(value.target,{strict,source:`${source} "${id}"`});if(!target)return null;const targetReference=resolvePlacementTargetReference(target);const internal=value.internal===true;if(targetReference?.type===`concrete`&&internal!==true){if(strict)throw new TypeError(`${source} "${id}" targets concrete outlet "${target}" without internal: true.`);return null}const owner=normalizeText(value.owner).toLowerCase();const kind=normalizePlacementKind(value.kind)||(normalizeText(value.componentToken)?`component`:`link`);const componentToken=normalizeText(value.componentToken);if(kind===`component`&&!componentToken){if(strict)throw new TypeError(`${source} "${id}" requires componentToken.`);return null}const props=isRecord(value.props)?{...value.props}:{};const when=typeof value.when===`function`?value.when:null;const surfaces=normalizePlacementSurfaces(value.surfaces,{strict,source:`${source} "${id}"`});return Object.freeze({id,target,targetType:targetReference?.type||``,owner,kind,surfaces,order:toInteger(value.order,1e3),componentToken,props,when,enabled:value.enabled!==false,internal})}function definePlacement(value={}){return normalizePlacementDefinition(value,{strict:true,source:`placement contribution`})}function createPlacementRegistry({entries=[]}={}){const placements=[];const ids=new Set;function addPlacement(value={}){const placement=definePlacement(value);if(ids.has(placement.id))return false;ids.add(placement.id);placements.push(placement);return true}for(const entry of Array.isArray(entries)?entries:[])addPlacement(entry);function hasPlacement(id){return ids.has(String(id||``).trim())}function build(){return Object.freeze([...placements])}return Object.freeze({addPlacement,hasPlacement,build})}var SHELL_WEB_PLACEMENT_RUNTIME_KEY=`jskit.shell-web.runtime.web-placement.client`;var EMPTY_WEB_PLACEMENT_RUNTIME=Object.freeze({getContext(){return Object.freeze({})},getPlacements(){return Object.freeze([])},setContext(){return Object.freeze({})},subscribe(){return()=>{}},getRevision(){return 0}});var EMPTY_WEB_PLACEMENT_CONTEXT_REF=shallowRef(Object.freeze({}));var EMPTY_WEB_PLACEMENT_CONTEXT=Object.freeze({context:EMPTY_WEB_PLACEMENT_CONTEXT_REF,mergeContext(){return EMPTY_WEB_PLACEMENT_CONTEXT_REF.value},replaceContext(){return EMPTY_WEB_PLACEMENT_CONTEXT_REF.value}});function useWebPlacementRuntime({required=false}={}){const runtime=inject(SHELL_WEB_PLACEMENT_RUNTIME_KEY,null);if(runtime&&typeof runtime.getPlacements===`function`)return runtime;if(required)throw new Error(`Web placement runtime is not available in Vue injection context.`);return EMPTY_WEB_PLACEMENT_RUNTIME}function useWebPlacementContext({required=false}={}){const runtime=useWebPlacementRuntime({required});if(runtime===EMPTY_WEB_PLACEMENT_RUNTIME)return EMPTY_WEB_PLACEMENT_CONTEXT;const context=shallowRef(runtime.getContext());let unsubscribe=null;onMounted(()=>{if(typeof runtime.subscribe!==`function`)return;unsubscribe=runtime.subscribe(()=>{context.value=runtime.getContext()})});onBeforeUnmount(()=>{if(typeof unsubscribe===`function`){unsubscribe();unsubscribe=null}});function mergeContext(value={},source=`component`){context.value=runtime.setContext(value,{source});return context.value}function replaceContext(value={},source=`component`){context.value=runtime.setContext(value,{replace:true,source});return context.value}return Object.freeze({context,mergeContext,replaceContext})}var EMPTY_SURFACE_CONFIG=Object.freeze({tenancyMode:``,defaultSurfaceId:``,enabledSurfaceIds:Object.freeze([]),surfacesById:Object.freeze({})});function normalizeSurfaceIdList(value){if(!Array.isArray(value))return[];const seen=new Set;const normalized=[];for(const candidate of value){const surfaceId=normalizeSurfaceId(candidate);if(!surfaceId||seen.has(surfaceId))continue;seen.add(surfaceId);normalized.push(surfaceId)}return normalized}function normalizeSurfaceConfig(surfaceConfig={}){const source=isRecord(surfaceConfig)?surfaceConfig:{};const enabledSurfaceIds=normalizeSurfaceIdList(source.enabledSurfaceIds);const enabledSet=new Set(enabledSurfaceIds);const rawSurfacesById=isRecord(source.surfacesById)?source.surfacesById:{};const normalizedSurfacesById={};for(const[rawSurfaceId,rawDefinition]of Object.entries(rawSurfacesById)){const definition=isRecord(rawDefinition)?rawDefinition:{};const surfaceId=normalizeSurfaceId(definition.id||rawSurfaceId);if(!surfaceId)continue;const pagesRoot=normalizeSurfacePagesRoot(definition.pagesRoot);const routeBase=String(definition.routeBase||deriveSurfaceRouteBaseFromPagesRoot(pagesRoot)).trim()||`/`;const enabled=enabledSet.size>0?enabledSet.has(surfaceId):definition.enabled!==false;normalizedSurfacesById[surfaceId]=Object.freeze({...definition,id:surfaceId,pagesRoot,routeBase,enabled})}const derivedEnabledSurfaceIds=enabledSurfaceIds.length>0?enabledSurfaceIds.filter(surfaceId=>Boolean(normalizedSurfacesById[surfaceId])):Object.values(normalizedSurfacesById).filter(definition=>definition.enabled).map(definition=>definition.id);const defaultSurfaceId=normalizeSurfaceId(source.defaultSurfaceId);const resolvedDefaultSurfaceId=normalizedSurfacesById[defaultSurfaceId]?defaultSurfaceId:derivedEnabledSurfaceIds[0]||Object.keys(normalizedSurfacesById)[0]||``;return Object.freeze({tenancyMode:String(source.tenancyMode||``).trim().toLowerCase(),defaultSurfaceId:resolvedDefaultSurfaceId,enabledSurfaceIds:Object.freeze([...derivedEnabledSurfaceIds]),surfacesById:Object.freeze({...normalizedSurfacesById})})}function buildSurfaceConfigContext(surfaceRuntime=null,{tenancyMode=``}={}){const normalizedTenancyMode=String(tenancyMode||``).trim().toLowerCase();if(!isRecord(surfaceRuntime))return normalizeSurfaceConfig({tenancyMode:normalizedTenancyMode});const surfaceDefinitions=typeof surfaceRuntime.listSurfaceDefinitions===`function`?surfaceRuntime.listSurfaceDefinitions():[];const surfacesById={};for(const definition of Array.isArray(surfaceDefinitions)?surfaceDefinitions:[]){if(!isRecord(definition))continue;const surfaceId=normalizeSurfaceId(definition.id);if(!surfaceId)continue;surfacesById[surfaceId]=definition}return normalizeSurfaceConfig({tenancyMode:normalizedTenancyMode,defaultSurfaceId:surfaceRuntime.DEFAULT_SURFACE_ID,enabledSurfaceIds:typeof surfaceRuntime.listEnabledSurfaceIds===`function`?surfaceRuntime.listEnabledSurfaceIds():[],surfacesById})}function readPlacementSurfaceConfig(contextValue=null){return normalizeSurfaceConfig((isRecord(contextValue)?contextValue:{}).surfaceConfig)}function resolveSurfaceDefinitionFromPlacementContext(contextValue=null,surfaceId=``){const surfaceConfig=readPlacementSurfaceConfig(contextValue);const normalizedSurfaceId=normalizeSurfaceId(surfaceId);if(!normalizedSurfaceId)return null;return surfaceConfig.surfacesById[normalizedSurfaceId]||null}function joinSurfacePath(surfacePrefix=``,pathname=``){const normalizedPrefix=normalizePathname(surfacePrefix||`/`);const rawPathname=String(pathname||``).trim();if(!rawPathname)return normalizedPrefix;const normalizedPathname=(rawPathname.startsWith(`/`)?rawPathname:`/${rawPathname}`).replace(/\/{2,}/g,`/`);const compacted=(normalizedPrefix===`/`?normalizedPathname:`${normalizedPrefix}${normalizedPathname}`).replace(/\/{2,}/g,`/`);if(!compacted)return`/`;return compacted===`/`?compacted:compacted.replace(/\/+$/,``)||`/`}function resolveSurfaceRootPathFromPlacementContext(contextValue=null,surfaceId=``){return joinSurfacePath(resolveSurfaceDefinitionFromPlacementContext(contextValue,surfaceId)?.routeBase,``)}function normalizeSurfaceOrigin(originValue=``){const rawOrigin=String(originValue||``).trim();if(!rawOrigin)return``;try{const parsed=new URL(rawOrigin);if(parsed.protocol!==`http:`&&parsed.protocol!==`https:`)return``;return parsed.origin}catch{return``}}function resolveRuntimeOrigin(currentOrigin=``){const normalizedCurrentOrigin=normalizeSurfaceOrigin(currentOrigin);if(normalizedCurrentOrigin)return normalizedCurrentOrigin;if(typeof window===`object`&&window?.location?.origin)return normalizeSurfaceOrigin(window.location.origin);return``}function resolveSurfaceNavigationTargetFromPlacementContext(contextValue=null,{path=`/`,surfaceId=``,currentOrigin=``}={}){const rawPath=String(path||``).trim()||`/`;if(isExternalLinkTarget(rawPath))return Object.freeze({href:rawPath,sameOrigin:false,surfaceId:normalizeSurfaceId(surfaceId),external:true});const{pathname,search,hash}=splitPathQueryHash(rawPath);const normalizedPathname=normalizePathname(pathname||`/`);const normalizedPath=`${normalizedPathname}${search}${hash}`;const resolvedSurfaceId=normalizeSurfaceId(surfaceId)||resolveSurfaceIdFromPlacementPathname(contextValue,normalizedPathname)||``;const targetOrigin=normalizeSurfaceOrigin((resolvedSurfaceId?resolveSurfaceDefinitionFromPlacementContext(contextValue,resolvedSurfaceId):null)?.origin||``);const runtimeOrigin=resolveRuntimeOrigin(currentOrigin);if(!targetOrigin)return Object.freeze({href:normalizedPath,sameOrigin:true,surfaceId:resolvedSurfaceId,external:false});if(runtimeOrigin&&targetOrigin===runtimeOrigin)return Object.freeze({href:normalizedPath,sameOrigin:true,surfaceId:resolvedSurfaceId,external:false});return Object.freeze({href:`${targetOrigin}${normalizedPath}`,sameOrigin:false,surfaceId:resolvedSurfaceId,external:false})}function createPlacementSurfacePathHelpers(surfaceConfig=EMPTY_SURFACE_CONFIG){const surfacesById=isRecord(surfaceConfig.surfacesById)?surfaceConfig.surfacesById:{};const defaultSurfaceId=normalizeSurfaceId(surfaceConfig.defaultSurfaceId);const fallbackSurfaceId=Object.keys(surfacesById)[0]||``;const resolvedDefaultSurfaceId=defaultSurfaceId&&surfacesById[defaultSurfaceId]?defaultSurfaceId:fallbackSurfaceId;if(!resolvedDefaultSurfaceId)return null;return createSurfacePathHelpers({defaultSurfaceId:resolvedDefaultSurfaceId,surfaceDefinitions:Object.values(surfacesById)})}function resolveSurfaceIdFromPlacementPathname(contextValue=null,pathname=``){const surfaceConfig=readPlacementSurfaceConfig(contextValue);const normalizedPathname=normalizePathname(pathname)||(typeof window===`object`&&window?.location?.pathname?normalizePathname(window.location.pathname):`/`);const pathHelpers=createPlacementSurfacePathHelpers(surfaceConfig);if(!pathHelpers)return``;return pathHelpers.resolveSurfaceFromPathname(normalizedPathname)}export{isExternalLinkTarget as _,resolveSurfaceNavigationTargetFromPlacementContext as a,useWebPlacementContext as c,isRenderableComponent as d,normalizePlacementDefinition as f,normalizePlacementTopologyDefinition as g,normalizePlacementLayoutClass as h,resolveSurfaceIdFromPlacementPathname as i,useWebPlacementRuntime as l,normalizeSurface as m,readPlacementSurfaceConfig as n,resolveSurfaceRootPathFromPlacementContext as o,normalizePlacementTarget as p,resolveSurfaceDefinitionFromPlacementContext as r,SHELL_WEB_PLACEMENT_RUNTIME_KEY as s,buildSurfaceConfigContext as t,createPlacementRegistry as u,resolveLinkPath as v,splitPathQueryHash as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{D as createVNode,E as createTextVNode,Ht as watch,On as unref,_ as createBaseVNode,b as createElementBlock,bt as renderList,g as computed,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,v as createBlock,vn as ref,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{_ as VIcon,cr as withKeys,lr as withModifiers}from"./VAvatar-H2hyOWlB.js";import{J as useQueryClient,t as useEndpointResource}from"./useEndpointResource-DBRQISI_.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{o as projectSlugFromRoute,r as projectAppPath}from"./vibe64ProjectScope.local-BxTBYuRg.js";import{t as VSelect}from"./VSelect-Dqnp_CFi.js";import{c as VListItemTitle,n as VList,s as VListItem}from"./VMenu-DnhVIMrr.js";import{t as VChip}from"./VChip-Uixfx461.js";import{t as VTextField}from"./VTextField-CnkGeXaT.js";import{r as scopedDevelopmentApiUrl}from"./studioUrls-CGKCbM_d.js";import{C as mdiArrowRight,Jn as mdiPlus,L as mdiCheck,Q as mdiCloseCircleOutline,Rn as mdiOpenInNew,br as mdiSourceMerge,er as mdiRefresh,gr as mdiSourceBranch,kn as mdiMagnify,vr as mdiSourceBranchSync,xr as mdiSourcePull}from"./mdi-X9prU-DG.js";import{i as VBtnToggle,t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VAlert}from"./VAlert-7_VM9EUm.js";import{t as VDivider}from"./VDivider-AUQb_N9d.js";import{t as VSheet}from"./VSheet-CMhyReNa.js";import{t as VDialog}from"./VDialog-Drp3yzSH.js";import{i as VCardTitle,n as VCardText,o as VCardActions,t as VCard}from"./VCard-DExT9Cji.js";import{t as VSpacer}from"./VSpacer-BSTt0_VA.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-pc4bBTxv.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{_ as parseLongTextReviewBlocks,g as LongTextPreviewBlocks_default}from"./conversation-CNcCrV-R.js";import"./conversation-Bn7wpATa.js";import{t as useUiFeedback}from"./useUiFeedback-B51xtCAK.js";import{a as vibe64SessionPullRequest}from"./vibe64SessionViewModel-B0cCumM8.js";import{t as Vibe64DashboardBackButton_default}from"./Vibe64DashboardBackButton-CE9ig_nO.js";import{a as githubProjectRepositoryName,i as githubProjectAvailable}from"./vibe64GithubProject-Bct-bzKq.js";import{n as Vibe64AssistantSessionDialog_default,r as Vibe64CreatePullRequestDialog_default,t as focusCreatedVibe64SessionTab}from"./vibe64SessionFocus-DzqbVq60.js";import{t as _sfc_main$3}from"./GithubBrowserTabs-D-Z3TlA8.js";var _hoisted_1$1={key:0,role:`status`,class:`text-body-medium ma-0`};var _hoisted_2$1={class:`d-flex flex-wrap ga-2 text-body-small`};var _hoisted_3$1={key:0,class:`text-body-medium ma-0`};var _hoisted_4$1={class:`d-flex flex-wrap ga-2`};var _hoisted_5$1={class:`text-wrap`};var _hoisted_6$1={class:`text-wrap`};var _hoisted_7$1={key:1,class:`text-body-small ma-0`};var _hoisted_8$1={key:2,class:`text-body-medium ma-0`};var _hoisted_9$1={key:3,class:`text-body-medium ma-0`};var _hoisted_10$1={class:`text-body-medium ma-0`};var _hoisted_11$1={key:0,class:`text-body-medium ma-0`};var _hoisted_12$1={key:1,class:`text-body-medium ma-0`};var _hoisted_13$1={key:1,class:`text-body-small ma-0`};var _hoisted_14$1=[`href`];var _sfc_main$2={__name:`GithubPullRequestActions`,props:{pullRequest:{type:Object,required:true},apiPath:{type:String,required:true},disabled:Boolean},emits:[`changed`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const feedback=useUiFeedback({source:`vibe64.pullRequests.actions`});const confirmation=ref(null);const pending=ref(false);const mergeMethod=ref(``);const notice=ref(``);const updatingHead=ref(``);const failed=ref(false);const methodLabels={merge:`Create a merge commit`,squash:`Squash and merge`,rebase:`Rebase and merge`};const checksLabel=computed(()=>({SUCCESS:`Checks passed`,FAILURE:`Some checks failed`,ERROR:`Checks reported an error`,PENDING:`Checks are running`,EXPECTED:`Waiting for checks`})[props.pullRequest.checksState]||`No checks reported`);const reviewLabel=computed(()=>({APPROVED:`Reviews approved`,CHANGES_REQUESTED:`Changes requested`,REVIEW_REQUIRED:`Reviews required`})[props.pullRequest.reviewDecision]||``);const path=computed(()=>confirmation.value?.path||props.apiPath);const command=useEndpointResource({path,enabled:false,queryKey:computed(()=>[`vibe64.pullRequestAction`,path.value]),mutationOptions:{retry:false}});const actionDisabled=computed(()=>props.disabled||pending.value||!props.pullRequest.review);watch(()=>props.apiPath,()=>{confirmation.value=null;notice.value=``;updatingHead.value=``;failed.value=false});watch(()=>[props.pullRequest.headRefOid,props.pullRequest.state],([head,state])=>{if(state!==`OPEN`){notice.value=``;updatingHead.value=``}else if(updatingHead.value&&head&&head!==updatingHead.value){notice.value=`New commits are available. Update your session to load them.`;updatingHead.value=``}});function open(operation){const pr=props.pullRequest;if(actionDisabled.value||pr.actions?.[operation]!==``)return;mergeMethod.value=pr.mergeMethods[0]||``;const head=`${pr.review.headRepository}:${pr.review.headBranch}`;const base=`${pr.review.repository}:${pr.review.baseBranch}`;confirmation.value={operation,path:`${props.apiPath}/${operation}`,apiPath:props.apiPath,review:{...pr.review},url:pr.url,methods:pr.mergeMethods,from:operation===`update-branch`?base:head,to:operation===`update-branch`?head:base,title:operation===`ready`?`Ready for review?`:operation===`update-branch`?`Update branch from ${pr.baseRefName}?`:`Merge into ${pr.baseRefName}?`};failed.value=false}async function submit(){const reviewed=confirmation.value;if(!reviewed||pending.value||props.disabled)return;pending.value=true;failed.value=false;try{const result=await command.save({review:reviewed.review,...reviewed.operation===`merge`?{mergeMethod:mergeMethod.value}:{}},{method:`POST`,path:reviewed.path});if(props.apiPath===reviewed.apiPath){notice.value=result.pending?result.message:``;updatingHead.value=result.pending?reviewed.review.headCommit:``;confirmation.value=null}feedback.success(`PR #${reviewed.review.number}: ${result.message}`);emit(`changed`,{apiPath:reviewed.apiPath,operation:reviewed.operation})}catch(error){if(props.apiPath===reviewed.apiPath)failed.value=true;feedback.error(error,`The result could not be confirmed. Refresh this pull request before trying again.`)}finally{pending.value=false}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VSheet,{rounded:`xl`,border:``,class:`pa-5 d-flex flex-column ga-3 pr-actions`},{default:withCtx(()=>[notice.value?(openBlock(),createElementBlock(`p`,_hoisted_1$1,toDisplayString(notice.value),1)):createCommentVNode(``,true),__props.pullRequest.state===`OPEN`?(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`div`,_hoisted_2$1,[createVNode(VChip,{size:`small`,color:[`FAILURE`,`ERROR`].includes(__props.pullRequest.checksState)?`warning`:void 0},{default:withCtx(()=>[createTextVNode(toDisplayString(checksLabel.value),1)]),_:1},8,[`color`]),reviewLabel.value?(openBlock(),createBlock(VChip,{key:0,size:`small`},{default:withCtx(()=>[createTextVNode(toDisplayString(reviewLabel.value),1)]),_:1})):createCommentVNode(``,true)]),__props.pullRequest.actions?.merge?(openBlock(),createElementBlock(`p`,_hoisted_3$1,toDisplayString(__props.pullRequest.actions.merge),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_4$1,[__props.pullRequest.isDraft?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`tonal`,"min-height":`48`,height:`auto`,"max-width":`100%`,"prepend-icon":unref(mdiCheck),disabled:actionDisabled.value||Boolean(__props.pullRequest.actions?.ready),onClick:_cache[0]||(_cache[0]=$event=>open(`ready`))},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createBaseVNode(`span`,{class:`text-wrap`},`Ready for review`,-1)])]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),__props.pullRequest.actions?.[`update-branch`]===``?(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,"min-height":`48`,height:`auto`,"max-width":`100%`,"prepend-icon":unref(mdiSourceBranchSync),disabled:actionDisabled.value,onClick:_cache[1]||(_cache[1]=$event=>open(`update-branch`))},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_5$1,`Update branch from `+toDisplayString(__props.pullRequest.baseRefName),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),!__props.pullRequest.isDraft?(openBlock(),createBlock(VBtn,{key:2,color:`primary`,variant:`flat`,"min-height":`48`,height:`auto`,"max-width":`100%`,"prepend-icon":unref(mdiSourceMerge),disabled:actionDisabled.value||Boolean(__props.pullRequest.actions?.merge),onClick:_cache[2]||(_cache[2]=$event=>open(`merge`))},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_6$1,`Merge into `+toDisplayString(__props.pullRequest.baseRefName),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true)]),__props.pullRequest.isDraft&&__props.pullRequest.actions?.ready?(openBlock(),createElementBlock(`p`,_hoisted_7$1,toDisplayString(__props.pullRequest.actions.ready),1)):createCommentVNode(``,true)],64)):__props.pullRequest.state===`MERGED`&&!notice.value?(openBlock(),createElementBlock(`p`,_hoisted_8$1,` Merged into `+toDisplayString(__props.pullRequest.baseRefName)+`. Archive your session when you have finished with it. `,1)):!notice.value?(openBlock(),createElementBlock(`p`,_hoisted_9$1,`This pull request is closed.`)):createCommentVNode(``,true)]),_:1}),createVNode(VDialog,{"model-value":Boolean(confirmation.value),"max-width":`36rem`,scrollable:``,persistent:pending.value,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>!$event&&!pending.value&&(confirmation.value=null))},{default:withCtx(()=>[confirmation.value?(openBlock(),createBlock(VCard,{key:0,rounded:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-wrap`},{default:withCtx(()=>[createTextVNode(toDisplayString(confirmation.value.title),1)]),_:1}),createVNode(VCardText,{class:`d-flex flex-column ga-3 pr-confirmation`},{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_10$1,toDisplayString(confirmation.value.from)+` → `+toDisplayString(confirmation.value.to),1),confirmation.value.operation===`ready`?(openBlock(),createElementBlock(`p`,_hoisted_11$1,`Mark this draft ready so reviewers can review it.`)):confirmation.value.operation===`update-branch`?(openBlock(),createElementBlock(`p`,_hoisted_12$1,` Merge `+toDisplayString(confirmation.value.review.baseBranch)+` into `+toDisplayString(confirmation.value.review.headBranch)+` on GitHub. Then use Update session to load those changes into your session. `,1)):(openBlock(),createElementBlock(Fragment,{key:2},[_cache[7]||(_cache[7]=createBaseVNode(`p`,{class:`text-body-medium ma-0`},`Merge the commits already on GitHub. Save any session work you want included first.`,-1)),confirmation.value.methods.length>1?(openBlock(),createBlock(VSelect,{key:0,modelValue:mergeMethod.value,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>mergeMethod.value=$event),label:`Merge method`,variant:`outlined`,"hide-details":``,items:confirmation.value.methods.map(value=>({title:methodLabels[value],value})),disabled:pending.value},null,8,[`modelValue`,`items`,`disabled`])):(openBlock(),createElementBlock(`p`,_hoisted_13$1,toDisplayString(methodLabels[mergeMethod.value]),1))],64)),failed.value?(openBlock(),createBlock(VAlert,{key:3,type:`warning`,variant:`tonal`},{default:withCtx(()=>[_cache[8]||(_cache[8]=createTextVNode(` This action was not confirmed. Close this dialog and refresh, or view the pull request on GitHub, before trying again. `,-1)),createBaseVNode(`a`,{href:confirmation.value.url,target:`_blank`,rel:`noopener noreferrer`},`View on GitHub`,8,_hoisted_14$1)]),_:1})):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`pa-4 flex-wrap`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{disabled:pending.value,height:`48`,onClick:_cache[4]||(_cache[4]=$event=>confirmation.value=null)},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,variant:`flat`,height:`48`,disabled:pending.value||__props.disabled||failed.value,"aria-busy":pending.value,onClick:submit},{default:withCtx(()=>[createTextVNode(toDisplayString(pending.value?`Working…`:confirmation.value.operation===`ready`?`Ready for review`:confirmation.value.operation===`merge`?`Merge pull request`:`Update branch`),1)]),_:1},8,[`disabled`,`aria-busy`])]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`,`persistent`])],64)}}};var GithubPullRequestActions_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-5aa628de`]]);var _hoisted_1={class:`pull-requests d-flex flex-column ga-2`};var _hoisted_2={class:`d-flex align-center flex-wrap ga-2`};var _hoisted_3={class:`d-flex justify-space-between px-2 text-label-large text-medium-emphasis`};var _hoisted_4={class:`d-flex flex-wrap ga-2 text-body-small text-medium-emphasis mt-1`};var _hoisted_5={class:`pull-requests__branch`};var _hoisted_6={class:`d-flex justify-end ga-2`};var _hoisted_7={class:`px-2`};var _hoisted_8={class:`d-flex align-center flex-wrap ga-2 mb-3`};var _hoisted_9={class:`text-body-medium text-medium-emphasis`};var _hoisted_10={class:`text-headline-small mb-3`};var _hoisted_11={class:`d-flex flex-wrap ga-3 text-body-small text-medium-emphasis`};var _hoisted_12={class:`text-success`};var _hoisted_13={class:`text-error`};var _hoisted_14={class:`d-flex align-start ga-3`};var _hoisted_15={class:`pull-requests__branch`};var _hoisted_16={class:`text-body-medium mt-1`};var _hoisted_17={class:`text-body-small text-medium-emphasis mt-1`};var _hoisted_18={key:0,class:`text-body-medium ma-0`};var _hoisted_19={key:1,class:`text-body-medium ma-0`};var _hoisted_20={key:2,class:`text-body-medium ma-0`};var _hoisted_21={class:`d-flex flex-wrap ga-2`};var _hoisted_22={key:1,class:`text-body-medium text-medium-emphasis ma-0`};var _sfc_main$1={__name:`GithubPullRequestsPanel`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){const props=__props;const route=useRoute();const router=useRouter();const queryClient=useQueryClient();const projectSlug=computed(()=>projectSlugFromRoute(route));const repository=computed(()=>githubProjectRepositoryName(props.dashboardContext.projectContext));const available=computed(()=>githubProjectAvailable(props.dashboardContext.projectContext));const active=computed(()=>available.value&&props.dashboardContext.active!==false);const number=computed(()=>/^\d+$/u.test(String(route.query.pr||``))?String(route.query.pr):``);const state=computed(()=>[`open`,`closed`,`merged`,`all`].includes(route.query.prState)?route.query.prState:`open`);const search=ref(String(route.query.prSearch||``));watch(()=>route.query.prSearch,value=>{search.value=String(value||``)});const basePath=computed(()=>scopedDevelopmentApiUrl(`/api/vibe64/pull-requests`,projectSlug.value));const listQuery=computed(()=>({state:state.value,search:String(route.query.prSearch||``),...route.query.prCursor?{cursor:route.query.prCursor}:{}}));const list=useEndpointResource({path:basePath,readQuery:listQuery,queryKey:computed(()=>[`vibe64.pullRequests`,basePath.value,listQuery.value]),enabled:computed(()=>active.value&&!number.value),queryOptions:{retry:false},fallbackLoadError:`Pull requests could not load.`});const detail=useEndpointResource({path:computed(()=>`${basePath.value}/${number.value}`),queryKey:computed(()=>[`vibe64.pullRequest`,basePath.value,number.value]),enabled:computed(()=>active.value&&Boolean(number.value)),queryOptions:{retry:false},fallbackLoadError:`This pull request could not load.`});const resource=computed(()=>number.value?detail:list);const pr=computed(()=>detail.data.value?.pullRequest);const description=computed(()=>parseLongTextReviewBlocks(pr.value?.body||``));const assistantDialog=ref(false);const createDialog=ref(false);const selectedSource=computed(()=>vibe64SessionPullRequest(props.dashboardContext.session));const createAvailable=computed(()=>Boolean(props.dashboardContext.sessionId)&&!selectedSource.value?.number);const toolbar=computed(()=>({...props.dashboardContext.sessionToolbar,repositoryBranchSelectionDisabled:true,createSession:(selection,options={})=>props.dashboardContext.sessionToolbar?.createSession?.(selection,{...options,pullRequestNumber:Number(number.value)})}));watch(()=>route.query.createPullRequest,value=>{if(value&&createAvailable.value)createDialog.value=true},{immediate:true});function navigate(query){return router.push({query:{...route.query,...query}})}function filter(nextState=state.value){return navigate({prState:nextState,prSearch:String(search.value||``).trim()||void 0,prCursor:void 0,pr:void 0})}function status(item){if(item.state===`MERGED`)return`Merged`;if(item.state===`CLOSED`)return`Closed`;return item.isDraft?`Draft`:`Open`}function color(item){if(item.state===`MERGED`)return`primary`;if(item.state===`CLOSED`)return`error`;return item.isDraft?void 0:`success`}function icon(item){if(item.state===`MERGED`)return mdiSourceMerge;return item.state===`CLOSED`?mdiCloseCircleOutline:mdiSourcePull}function date(value){return value?new Date(value).toLocaleDateString(void 0,{month:`short`,day:`numeric`}):``}async function created(response){if(!response?.sessionId)return;await router.push(projectAppPath(projectSlug.value,`/dashboard/changes`));focusCreatedVibe64SessionTab(response.sessionId)}async function published(source){await list.reload();await navigate({pr:String(source.number),createPullRequest:void 0});await detail.reload()}async function actionFinished({apiPath}){await queryClient.invalidateQueries({queryKey:[`vibe64.pullRequests`,apiPath.replace(/\/\d+$/u,``)]});if(apiPath!==`${basePath.value}/${number.value}`)return;await detail.reload();props.dashboardContext.refreshSessionWork?.()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createBaseVNode(`div`,_hoisted_2,[createVNode(Vibe64DashboardBackButton_default,{to:available.value&&number.value?void 0:unref(projectAppPath)(projectSlug.value,`/dashboard/env`),onClick:_cache[0]||(_cache[0]=$event=>available.value&&number.value&&navigate({pr:void 0}))},{default:withCtx(()=>[createTextVNode(toDisplayString(available.value&&number.value?`All pull requests`:`Back to dashboard`),1)]),_:1},8,[`to`]),createVNode(VSpacer),available.value?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiRefresh),variant:`text`,size:`small`,height:`48`,disabled:resource.value.isFetching.value,onClick:_cache[1]||(_cache[1]=$event=>resource.value.reload())},{default:withCtx(()=>[createTextVNode(toDisplayString(resource.value.isFetching.value?`Refreshing…`:`Refresh`),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),available.value&&createAvailable.value?(openBlock(),createBlock(VBtn,{key:1,color:`primary`,variant:`tonal`,rounded:`pill`,size:`small`,height:`48`,"prepend-icon":unref(mdiPlus),disabled:__props.dashboardContext.sourceOperationsSuspended,onClick:_cache[2]||(_cache[2]=$event=>createDialog.value=true)},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(` Create from session `,-1)])]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true)]),!available.value?(openBlock(),createBlock(VAlert,{key:0,type:`info`,variant:`tonal`},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Pull requests are available only for GitHub projects.`,-1)])]),_:1})):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(_sfc_main$3),!number.value?(openBlock(),createElementBlock(`form`,{key:0,class:`d-flex flex-wrap align-center ga-3`,onSubmit:_cache[8]||(_cache[8]=withModifiers($event=>filter(),[`prevent`]))},[createVNode(VBtnToggle,{"model-value":state.value,mandatory:``,divided:``,rounded:`pill`,color:`primary`,variant:`outlined`,"aria-label":`Pull request state`,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>filter($event))},{default:withCtx(()=>[(openBlock(),createElementBlock(Fragment,null,renderList([`open`,`closed`,`merged`,`all`],value=>{return createVNode(VBtn,{key:value,value,height:`48`},{default:withCtx(()=>[createTextVNode(toDisplayString(value[0].toUpperCase()+value.slice(1)),1)]),_:2},1032,[`value`])}),64))]),_:1},8,[`model-value`]),createVNode(VTextField,{modelValue:search.value,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>search.value=$event),class:`pull-requests__search`,label:`Search pull requests`,"prepend-inner-icon":unref(mdiMagnify),variant:`outlined`,rounded:`pill`,"hide-details":``,maxlength:`200`,clearable:``,onKeydown:_cache[6]||(_cache[6]=withKeys(withModifiers($event=>filter(),[`prevent`]),[`enter`])),"onClick:clear":_cache[7]||(_cache[7]=$event=>{search.value=``;filter()})},{"append-inner":withCtx(()=>[createVNode(VBtn,{icon:unref(mdiArrowRight),variant:`text`,size:`48`,"aria-label":`Search pull requests`,onClick:_cache[4]||(_cache[4]=$event=>filter())},null,8,[`icon`])]),_:1},8,[`modelValue`,`prepend-inner-icon`])],32)):createCommentVNode(``,true),resource.value.isInitialLoading.value?(openBlock(),createBlock(VSheet,{key:1,rounded:`xl`,border:``,class:`pa-4`,"aria-label":`Loading pull requests`,"aria-busy":`true`},{default:withCtx(()=>[(openBlock(),createElementBlock(Fragment,null,renderList(4,index=>{return createVNode(VSkeletonLoader,{key:index,type:number.value?`paragraph`:`list-item-two-line`},null,8,[`type`])}),64))]),_:1})):resource.value.loadError.value?(openBlock(),createBlock(VAlert,{key:2,type:`error`,variant:`tonal`,rounded:`lg`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,height:`48`,onClick:_cache[9]||(_cache[9]=$event=>resource.value.reload())},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(`Retry`,-1)])]),_:1})]),default:withCtx(()=>[createTextVNode(toDisplayString(resource.value.loadError.value)+` `,1)]),_:1})):!number.value?(openBlock(),createElementBlock(Fragment,{key:3},[createBaseVNode(`div`,_hoisted_3,[createBaseVNode(`span`,null,toDisplayString(unref(list).data.value?.total||0)+` pull requests`,1),_cache[18]||(_cache[18]=createBaseVNode(`span`,null,`Recently updated`,-1))]),unref(list).data.value?.pullRequests?.length?(openBlock(),createBlock(VList,{key:0,class:`pa-0`,density:`compact`,rounded:`xl`,border:``,slim:``,"aria-label":`GitHub pull requests`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(list).data.value.pullRequests,(item,index)=>{return openBlock(),createElementBlock(Fragment,{key:item.number},[index?(openBlock(),createBlock(VDivider,{key:0})):createCommentVNode(``,true),createVNode(VListItem,{class:`py-2`,active:false,to:{query:{..._ctx.$route.query,pr:String(item.number)}}},{prepend:withCtx(()=>[createVNode(VIcon,{icon:icon(item),color:color(item)},null,8,[`icon`,`color`])]),default:withCtx(()=>[createVNode(VListItemTitle,{class:`text-title-medium text-wrap`},{default:withCtx(()=>[createTextVNode(toDisplayString(item.title),1)]),_:2},1024),createBaseVNode(`div`,_hoisted_4,[createBaseVNode(`span`,null,`#`+toDisplayString(item.number)+` · `+toDisplayString(status(item))+` · `+toDisplayString(item.author?.login)+` · `+toDisplayString(date(item.updatedAt)),1),createBaseVNode(`span`,_hoisted_5,toDisplayString(item.headRefName)+` → `+toDisplayString(item.baseRefName),1)])]),_:2},1032,[`to`])],64)}),128))]),_:1})):(openBlock(),createBlock(VSheet,{key:1,rounded:`xl`,color:`surface-light`,class:`pa-8 text-center`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiSourcePull),size:`40`,class:`mb-3`},null,8,[`icon`]),_cache[19]||(_cache[19]=createBaseVNode(`h2`,{class:`text-title-large mb-2`},`No pull requests here`,-1)),_cache[20]||(_cache[20]=createBaseVNode(`p`,{class:`text-body-medium text-medium-emphasis`},`Try another filter, or turn your session into a pull request.`,-1))]),_:1})),createBaseVNode(`div`,_hoisted_6,[_ctx.$route.query.prCursor?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,height:`48`,onClick:_cache[10]||(_cache[10]=$event=>navigate({prCursor:void 0}))},{default:withCtx(()=>[..._cache[21]||(_cache[21]=[createTextVNode(`First page`,-1)])]),_:1})):createCommentVNode(``,true),unref(list).data.value?.pageInfo?.hasNextPage?(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,height:`48`,"append-icon":unref(mdiArrowRight),onClick:_cache[11]||(_cache[11]=$event=>navigate({prCursor:unref(list).data.value.pageInfo.endCursor}))},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(` Next page `,-1)])]),_:1},8,[`append-icon`])):createCommentVNode(``,true)])],64)):pr.value?(openBlock(),createElementBlock(Fragment,{key:4},[createBaseVNode(`div`,_hoisted_7,[createBaseVNode(`div`,_hoisted_8,[createVNode(VChip,{color:color(pr.value),"prepend-icon":icon(pr.value),variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(status(pr.value)),1)]),_:1},8,[`color`,`prepend-icon`]),createBaseVNode(`span`,_hoisted_9,`#`+toDisplayString(pr.value.number)+` · `+toDisplayString(pr.value.author?.login),1)]),createBaseVNode(`h2`,_hoisted_10,toDisplayString(pr.value.title),1),createBaseVNode(`div`,_hoisted_11,[createBaseVNode(`span`,null,toDisplayString(pr.value.changedFiles)+` files changed`,1),createBaseVNode(`span`,_hoisted_12,`+`+toDisplayString(pr.value.additions),1),createBaseVNode(`span`,_hoisted_13,`−`+toDisplayString(pr.value.deletions),1)])]),createVNode(VSheet,{rounded:`xl`,color:`surface-light`,class:`pa-5 d-flex flex-column ga-4`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_14,[createVNode(VIcon,{icon:unref(mdiSourceBranch),color:`primary`,class:`mt-1`},null,8,[`icon`]),createBaseVNode(`div`,_hoisted_15,[_cache[23]||(_cache[23]=createBaseVNode(`div`,{class:`text-label-large`},`Session source · Save destination`,-1)),createBaseVNode(`div`,_hoisted_16,toDisplayString(pr.value.headRepository?.nameWithOwner||`Deleted repository`)+`:`+toDisplayString(pr.value.headRefName),1),createBaseVNode(`div`,_hoisted_17,`Proposed into `+toDisplayString(repository.value)+`:`+toDisplayString(pr.value.baseRefName),1)])]),pr.value.state===`OPEN`?(openBlock(),createElementBlock(`p`,_hoisted_18,`Open an isolated session with this PR’s changes and description. Save pushes further work to its source branch.`)):createCommentVNode(``,true),pr.value.state===`OPEN`&&pr.value.unavailableReason?(openBlock(),createElementBlock(`p`,_hoisted_19,toDisplayString(pr.value.unavailableReason),1)):pr.value.state===`OPEN`&&!toolbar.value.canCreateSession?(openBlock(),createElementBlock(`p`,_hoisted_20,toDisplayString(toolbar.value.createSessionTitle),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_21,[pr.value.state===`OPEN`?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,rounded:`pill`,height:`48`,"prepend-icon":unref(mdiSourcePull),disabled:Boolean(pr.value.unavailableReason)||!toolbar.value.canCreateSession||toolbar.value.createSessionRunning,onClick:_cache[12]||(_cache[12]=$event=>assistantDialog.value=true)},{default:withCtx(()=>[..._cache[24]||(_cache[24]=[createTextVNode(` Open as session `,-1)])]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),createVNode(VBtn,{href:pr.value.url,target:`_blank`,rel:`noopener noreferrer`,variant:`text`,height:`48`,"append-icon":unref(mdiOpenInNew)},{default:withCtx(()=>[..._cache[25]||(_cache[25]=[createTextVNode(`View on GitHub`,-1)])]),_:1},8,[`href`,`append-icon`])])]),_:1}),createVNode(GithubPullRequestActions_default,{"pull-request":pr.value,"api-path":`${basePath.value}/${number.value}`,disabled:unref(detail).isFetching.value,onChanged:actionFinished},null,8,[`pull-request`,`api-path`,`disabled`]),createVNode(VSheet,{rounded:`xl`,border:``,class:`pa-5 pull-requests__description`},{default:withCtx(()=>[_cache[26]||(_cache[26]=createBaseVNode(`h3`,{class:`text-title-medium mb-4`},`Description`,-1)),pr.value.body?(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:0,blocks:description.value},null,8,[`blocks`])):(openBlock(),createElementBlock(`p`,_hoisted_22,`No description provided.`))]),_:1})],64)):createCommentVNode(``,true)],64)),available.value&&assistantDialog.value?(openBlock(),createBlock(Vibe64AssistantSessionDialog_default,{key:2,modelValue:assistantDialog.value,"onUpdate:modelValue":_cache[13]||(_cache[13]=$event=>assistantDialog.value=$event),toolbar:toolbar.value,onCreated:created},null,8,[`modelValue`,`toolbar`])):createCommentVNode(``,true),available.value?(openBlock(),createBlock(Vibe64CreatePullRequestDialog_default,{key:3,modelValue:createDialog.value,"onUpdate:modelValue":_cache[14]||(_cache[14]=$event=>createDialog.value=$event),"dashboard-context":__props.dashboardContext,onCreated:published},null,8,[`modelValue`,`dashboard-context`])):createCommentVNode(``,true)])}}};var GithubPullRequestsPanel_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-f75e5bff`]]);var _sfc_main={__name:`index`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(GithubPullRequestsPanel_default,{"dashboard-context":__props.dashboardContext},null,8,[`dashboard-context`])}}};export{_sfc_main as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ht as watch,On as unref,g as computed,gn as reactive,hn as proxyRefs}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{r as useShellWebErrorRuntime}from"./error-W1ZAEk4a.js";import{J as useQueryClient,_ as resolvePermissionAccess,b as ROUTE_VISIBILITY_WORKSPACE,d as normalizeAccessMode,f as normalizeOwnershipFilter,g as resolveEnabled,h as resolveApiSuffix,l as asPlainObject,m as resolveAccessModeEnabled,p as normalizePermissions,r as useOperationRealtime,t as useEndpointResource,u as ensureAccessModeCompatibility,v as resolveQueryKey,x as resolveEnabledRef}from"./useEndpointResource-DBRQISI_.js";import{o as normalizeSurfaceId}from"./returnToPath-gKtcu91D.js";import{f as normalizeText}from"./normalize-BNAdWJYg.js";import{c as useWebPlacementContext,r as resolveSurfaceDefinitionFromPlacementContext}from"./placement-B5T1LR7m.js";import{A as resolveFieldErrors,C as validateSchemaPayload,d as getHttpWebClient,m as createValidationFailure,v as hasPermission,y as normalizePermissionList}from"./vibe64ProjectScope.local-BxTBYuRg.js";import{n as resolveScopedRouteBase}from"./surface-DzO5xqc8.js";import{r as useSurfaceRouteContext,t as usePaths}from"./usePaths-DdAnjVDj.js";import{t as useUiFeedback}from"./useUiFeedback-B51xtCAK.js";function validateOperationInput({input,rawPayload={},fieldBag=null,feedback=null,validationMessage=`Validation failed.`}={}){if(!input)return{ok:true,parsedInput:rawPayload};try{return{ok:true,parsedInput:validateSchemaPayload(input,rawPayload,{phase:`input`,context:`operation input`})}}catch(error){if(!error?.fieldErrors||typeof error.fieldErrors!==`object`)throw error;const failure=createValidationFailure({error:String(validationMessage||`Validation failed.`),code:`validation_failed`,fieldErrors:error?.fieldErrors});fieldBag?.apply?.(resolveFieldErrors(failure));feedback?.error?.(failure,failure.error);return{ok:false,failure,parsedInput:null}}}function useCommandCore({model,resource,writeMethod=`POST`,canRun,fieldBag,feedback,input,buildRawPayload,buildCommandPayload,buildCommandOptions,onRunSuccess,onRunError,suppressSuccessMessage=false,messages={}}={}){const queryClient=useQueryClient();const normalizedWriteMethod=String(writeMethod||`POST`).trim().toUpperCase();const running=resource?.isSaving;const fieldErrors=fieldBag?.errors;const message=feedback?.message;const messageType=feedback?.messageType;async function run(context={}){if(!canRun?.value||running?.value)return null;feedback?.clear?.();fieldBag?.clear?.();const rawPayload=typeof buildRawPayload===`function`?buildRawPayload(model,{queryClient,resource,context}):{};const validationResult=validateOperationInput({input,rawPayload,fieldBag,feedback,validationMessage:String(messages.validation||`Validation failed.`)});if(!validationResult.ok)return null;const{parsedInput}=validationResult;const payload=typeof buildCommandPayload===`function`?buildCommandPayload(parsedInput,{rawPayload,queryClient,resource,context}):normalizedWriteMethod===`DELETE`?void 0:parsedInput;const options=typeof buildCommandOptions===`function`?buildCommandOptions(parsedInput,{rawPayload,queryClient,resource,context}):{};try{const response=await resource.save(payload,options);if(typeof onRunSuccess===`function`)await onRunSuccess(response,{parsed:parsedInput,rawPayload,payload,options,queryClient,resource,context});if(!suppressSuccessMessage)feedback?.success?.(String(messages.success||`Completed.`));return response}catch(error){fieldBag?.apply?.(resolveFieldErrors(error));if(typeof onRunError===`function`)await onRunError(error,{parsed:parsedInput,rawPayload,payload,options,queryClient,resource,context});feedback?.error?.(error,String(messages.error||`Unable to complete action.`));throw error}}return Object.freeze({running,fieldErrors,message,messageType,run})}function asPermissionList(value){if(Array.isArray(value))return value;if(value===void 0||value===null||value===``)return[];return[value]}function useAccess({enabled=true,access=`always`,hasPermissionRequirements=false}={}){const normalizedAccessMode=normalizeAccessMode(access);const accessRequired=resolveAccessModeEnabled(normalizedAccessMode,{hasPermissionRequirements:hasPermissionRequirements===true});const{context:placementContext}=useWebPlacementContext();const queryEnabled=computed(()=>resolveEnabledRef(enabled)&&accessRequired);const hasPlacementPermissions=computed(()=>{const source=placementContext.value;if(!source||typeof source!==`object`)return false;return Object.hasOwn(source,`permissions`)});const placementPermissions=computed(()=>normalizePermissionList(placementContext.value?.permissions));const permissions=computed(()=>{if(!queryEnabled.value||!hasPlacementPermissions.value)return[];return placementPermissions.value});const permissionsUnavailableError=computed(()=>{if(!queryEnabled.value||hasPlacementPermissions.value)return``;return`Permissions are unavailable in placement context.`});const awaitingPlacementPermissions=computed(()=>queryEnabled.value&&!hasPlacementPermissions.value);function can(permission){return hasPermission(permissions.value,permission)}function canAny(requiredPermissions){const list=asPermissionList(requiredPermissions);if(list.length<1)return true;for(const entry of list)if(can(entry))return true;return false}function canAll(requiredPermissions){const list=asPermissionList(requiredPermissions);if(list.length<1)return true;for(const entry of list)if(!can(entry))return false;return true}return Object.freeze({accessMode:normalizedAccessMode,accessRequired,permissions,permissionsUnavailableError,awaitingPlacementPermissions,can,canAny,canAll})}var ROUTE_PARAM_NAME_PATTERN=/^[A-Za-z][A-Za-z0-9_]*$/;function normalizeRouteParamName(value=``,{context=`http-web route param`}={}){const normalizedValue=String(value||``).trim();if(!normalizedValue)throw new TypeError(`${context} must be a non-empty route parameter name.`);if(!ROUTE_PARAM_NAME_PATTERN.test(normalizedValue))throw new TypeError(`${context} "${normalizedValue}" is invalid. Use letters, numbers, and underscores only.`);return normalizedValue}function toRouteParamValue(value){if(Array.isArray(value))return toRouteParamValue(value[0]);if(value==null)return``;return String(value).trim()}function resolveRouteSourceValue(source=null){if(typeof source===`function`)return source();return unref(source)}function resolveRouteParamsSource(source=null){return asPlainObject(resolveRouteSourceValue(source))}function normalizeRouteParamNameList(value=[]){return(Array.isArray(value)?value:[]).map(entry=>String(entry||``).trim()).filter(Boolean)}function resolveRouteParamNamesSource(source=[]){return normalizeRouteParamNameList(resolveRouteSourceValue(source))}function normalizeRoutePathname(value=``){const sanitizedPathname=String(value||``).trim().split(/[?#]/u,1)[0]||``;if(!sanitizedPathname)return`/`;return sanitizedPathname.startsWith(`/`)?sanitizedPathname:`/${sanitizedPathname}`}function resolveRoutePathnameSource(source=``){return normalizeRoutePathname(resolveRouteSourceValue(source))}function segmentMatchesParamValue(segment=``,paramValue=``){const normalizedSegment=String(segment||``).trim();const normalizedParamValue=toRouteParamValue(paramValue);if(!normalizedSegment||!normalizedParamValue)return false;if(normalizedSegment===encodeURIComponent(normalizedParamValue))return true;try{return decodeURIComponent(normalizedSegment)===normalizedParamValue}catch{return false}}function findRouteParamSegmentIndex(segments=[],paramValue=``,fromIndex=0){const source=Array.isArray(segments)?segments:[];const cursor=Number.isInteger(fromIndex)&&fromIndex>0?fromIndex:0;for(let index=cursor;index<source.length;index+=1)if(segmentMatchesParamValue(source[index],paramValue))return index;return-1}function normalizePathPrefix(segments=[],endIndex=-1){const source=Array.isArray(segments)?segments:[];if(!Number.isInteger(endIndex)||endIndex<0)return`/`;return`/${source.slice(0,endIndex+1).join(`/`)}`}function resolveAnchorEndIndex(segmentIndex=-1,totalSegments=0,anchorMode=`at`){const normalizedSegmentIndex=Number.isInteger(segmentIndex)?segmentIndex:-1;if(normalizedSegmentIndex<0)return-1;const normalizedTotalSegments=Number.isInteger(totalSegments)&&totalSegments>0?totalSegments:0;const normalizedMode=String(anchorMode||`at`).trim().toLowerCase();if(normalizedMode===`before`)return normalizedSegmentIndex-1;if(normalizedMode===`after`)return normalizedTotalSegments>0?Math.min(normalizedSegmentIndex+1,normalizedTotalSegments-1):normalizedSegmentIndex+1;return normalizedSegmentIndex}function resolveScopedRoutePathname({currentPathname=`/`,params={},orderedParamNames=[],anchorParamName=``,anchorParamValue=``,anchorMode=`at`}={}){const normalizedCurrentPathname=resolveRoutePathnameSource(currentPathname);const normalizedAnchorParamName=String(anchorParamName||``).trim();if(!normalizedAnchorParamName)return normalizedCurrentPathname;const sourceParams=asPlainObject(params);const segments=normalizedCurrentPathname.split(`/`).filter(Boolean);if(segments.length<1)return normalizedCurrentPathname;const paramNames=resolveRouteParamNamesSource(orderedParamNames);let cursor=0;for(const paramName of paramNames){const segmentIndex=findRouteParamSegmentIndex(segments,sourceParams[paramName],cursor);if(segmentIndex<0)continue;if(paramName===normalizedAnchorParamName)return normalizePathPrefix(segments,resolveAnchorEndIndex(segmentIndex,segments.length,anchorMode));cursor=segmentIndex+1}const fallbackAnchorValue=toRouteParamValue(anchorParamValue)||toRouteParamValue(sourceParams[normalizedAnchorParamName]);if(!fallbackAnchorValue)return normalizedCurrentPathname;const fallbackSegmentIndex=findRouteParamSegmentIndex(segments,fallbackAnchorValue,0);if(fallbackSegmentIndex<0)return normalizedCurrentPathname;return normalizePathPrefix(segments,resolveAnchorEndIndex(fallbackSegmentIndex,segments.length,anchorMode))}function resolveRouteTemplatePath(routeTemplate=``,params={}){const normalizedTemplate=String(routeTemplate||``).trim();if(!normalizedTemplate)return``;const source=asPlainObject(params);const missingParams=[];const resolvedPath=normalizedTemplate.replace(/:([A-Za-z][A-Za-z0-9_]*)/g,(_,key)=>{const value=toRouteParamValue(source[key]);if(!value){missingParams.push(key);return`:${key}`}return encodeURIComponent(value)});if(missingParams.length>0)return``;return resolvedPath}function resolveRouteTemplateLocation(routeTemplate=``,{params={},currentPathname=`/`}={}){const resolvedTemplatePath=resolveRouteTemplatePath(routeTemplate,params);if(!resolvedTemplatePath)return``;if(resolvedTemplatePath.startsWith(`/`))return resolvedTemplatePath;const normalizedCurrentPathname=resolveRoutePathnameSource(currentPathname);const basePathname=normalizedCurrentPathname.endsWith(`/`)?normalizedCurrentPathname:`${normalizedCurrentPathname}/`;const resolvedPathname=new URL(resolvedTemplatePath,`https://jskit.local${basePathname}`).pathname;if(resolvedPathname.length>1&&resolvedPathname.endsWith(`/`))return resolvedPathname.slice(0,-1);return resolvedPathname}function createRouteTemplateResolver({recordIdParam,routeParams=null,routeParamNames=null,routePath=``,routeRecordId=null,anchorMode=`at`,anchorOnTargetRecord=false,fillRecordId=true}={}){function resolveCurrentRecordId(currentRouteParams=resolveRouteParamsSource(routeParams)){const explicitRecordId=toRouteParamValue(resolveRouteSourceValue(routeRecordId));if(explicitRecordId)return explicitRecordId;return toRouteParamValue(currentRouteParams[recordIdParam])}function resolveTemplatePath(urlTemplate=``,extraParams={}){const normalizedTemplate=String(urlTemplate||``).trim();if(!normalizedTemplate)return``;const currentRouteParams=resolveRouteParamsSource(routeParams);const sourceParams={...currentRouteParams,...asPlainObject(extraParams)};const currentRecordId=resolveCurrentRecordId(currentRouteParams);const targetRecordId=toRouteParamValue(sourceParams[recordIdParam])||currentRecordId;if(fillRecordId)sourceParams[recordIdParam]=targetRecordId;return resolveRouteTemplateLocation(normalizedTemplate,{params:sourceParams,currentPathname:resolveScopedRoutePathname({currentPathname:routePath,params:currentRouteParams,orderedParamNames:routeParamNames,anchorParamName:recordIdParam,anchorParamValue:anchorOnTargetRecord?targetRecordId:currentRecordId,anchorMode})})}return Object.freeze({resolveRecordId:()=>resolveCurrentRecordId(),resolveTemplatePath})}function extractRouteParamNames(pathTemplate=``){const normalizedTemplate=String(pathTemplate||``).trim();if(!normalizedTemplate)return[];const names=[];const seen=new Set;const pattern=/:([A-Za-z][A-Za-z0-9_]*)/g;let match=null;while((match=pattern.exec(normalizedTemplate))!=null){const name=String(match[1]||``).trim();if(!name||seen.has(name))continue;seen.add(name);names.push(name)}return names}function resolveRouteParamNamesInOrder(route=null){const sourceRoute=route&&typeof route===`object`?route:{};const matched=Array.isArray(sourceRoute.matched)?sourceRoute.matched:[];const names=[];const seen=new Set;for(const entry of matched){const entryPath=String(entry?.path||``).trim();if(!entryPath)continue;for(const name of extractRouteParamNames(entryPath)){if(seen.has(name))continue;seen.add(name);names.push(name)}}if(names.length>0)return names;return Object.keys(asPlainObject(sourceRoute.params)).map(entry=>String(entry||``).trim()).filter(Boolean)}function resolveScopedRouteParamNames(placementContext=null,surfaceId=``){const routeBase=resolveSurfaceDefinitionFromPlacementContext(placementContext,surfaceId)?.routeBase||`/`;return extractRouteParamNames(resolveScopedRouteBase(routeBase))}function useScopeRuntime({ownershipFilter=ROUTE_VISIBILITY_WORKSPACE,surfaceId=``,accessMode=`auto`,hasPermissionRequirements=false}={}){const normalizedOwnershipFilter=normalizeOwnershipFilter(ownershipFilter);const normalizedAccessMode=ensureAccessModeCompatibility({accessMode,hasPermissionRequirements,caller:`useScopeRuntime`});const accessRequired=resolveAccessModeEnabled(normalizedAccessMode,{hasPermissionRequirements});const routeContext=useSurfaceRouteContext();const paths=usePaths({routeContext});const resolvedSurfaceId=computed(()=>{const explicitSurfaceId=normalizeSurfaceId(surfaceId);if(explicitSurfaceId)return explicitSurfaceId;return normalizeSurfaceId(routeContext.currentSurfaceId.value)});const scopedRouteParamNames=computed(()=>resolveScopedRouteParamNames(routeContext.placementContext.value,resolvedSurfaceId.value));const routeScopeParams=computed(()=>{const source=paths.routeParams.value;const next={};for(const paramName of scopedRouteParamNames.value){const paramValue=toRouteParamValue(source[paramName]);if(paramValue)next[paramName]=paramValue}return Object.freeze(next)});const missingScopedRouteParamNames=computed(()=>scopedRouteParamNames.value.filter(paramName=>!routeScopeParams.value[paramName]));const requiresScopedRouteParams=computed(()=>scopedRouteParamNames.value.length>0);const hasRequiredRouteScope=computed(()=>missingScopedRouteParamNames.value.length<1);const scopeParamValue=computed(()=>{const[primaryScopeParamName=``]=scopedRouteParamNames.value;return primaryScopeParamName?routeScopeParams.value[primaryScopeParamName]||``:``});const routeScopeError=computed(()=>{if(!requiresScopedRouteParams.value||hasRequiredRouteScope.value)return``;return`Route parameters ${missingScopedRouteParamNames.value.join(`, `)} are required for surface "${resolvedSurfaceId.value||`<unknown>`}".`});const accessRuntime=useAccess({enabled:computed(()=>accessRequired&&hasRequiredRouteScope.value),access:normalizedAccessMode,hasPermissionRequirements});function resolveApiPath(apiSuffix=``,context={}){if(routeScopeError.value)return``;const suffix=resolveApiSuffix(apiSuffix,{surfaceId:routeContext.currentSurfaceId.value,scopeParamValue:scopeParamValue.value,ownershipFilter:normalizedOwnershipFilter,...asPlainObject(context)});return paths.api(suffix,{surface:resolvedSurfaceId.value,params:routeScopeParams.value})}function requireRouteScope(caller=`useScopeRuntime`){if(routeScopeError.value)throw new Error(`${caller}: ${routeScopeError.value}`)}return Object.freeze({normalizedOwnershipFilter,requiresScopedRouteParams:requiresScopedRouteParams.value,resolvedSurfaceId,accessMode:normalizedAccessMode,accessRequired,routeContext,scopedRouteParamNames,routeScopeParams,scopeParamValue,hasRequiredRouteScope,routeScopeError,access:accessRuntime,resolveApiPath,requireRouteScope})}function normalizePermissionSets(permissionSets={}){const source=permissionSets&&typeof permissionSets===`object`&&!Array.isArray(permissionSets)?permissionSets:{};const normalized={};for(const[key,value]of Object.entries(source))normalized[key]=normalizePermissions(value);return normalized}function hasAnyPermissions(permissionSets={}){for(const list of Object.values(permissionSets))if(Array.isArray(list)&&list.length>0)return true;return false}function useOperationScope({ownershipFilter=ROUTE_VISIBILITY_WORKSPACE,surfaceId=``,access=`auto`,apiSuffix=``,model,readEnabled=true,queryKeyFactory=null,permissionSets={},realtime=null}={}){const normalizedPermissionSets=normalizePermissionSets(permissionSets);const scopeRuntime=useScopeRuntime({ownershipFilter,surfaceId,accessMode:access,hasPermissionRequirements:hasAnyPermissions(normalizedPermissionSets)});const normalizedOwnershipFilter=scopeRuntime.normalizedOwnershipFilter;const routeContext=scopeRuntime.routeContext;const scopeParamValue=scopeRuntime.scopeParamValue;const hasRequiredRouteScope=scopeRuntime.hasRequiredRouteScope;const accessRuntime=scopeRuntime.access;const apiPath=computed(()=>scopeRuntime.resolveApiPath(apiSuffix,{model}));const queryEnabled=computed(()=>resolveEnabled(readEnabled,{surfaceId:routeContext.currentSurfaceId.value,scopeParamValue:scopeParamValue.value,ownershipFilter:normalizedOwnershipFilter,model}));const queryKey=computed(()=>resolveQueryKey(queryKeyFactory,{surfaceId:routeContext.currentSurfaceId.value,scopeParamValue:scopeParamValue.value,ownershipFilter:normalizedOwnershipFilter}));const realtimeBinding=useOperationRealtime({realtime,queryKey:typeof queryKeyFactory===`function`?queryKey:null,enabled:computed(()=>hasRequiredRouteScope.value&&Boolean(apiPath.value))});function queryCanRun(accessGate=true){return computed(()=>queryEnabled.value&&hasRequiredRouteScope.value&&Boolean(apiPath.value)&&Boolean(unref(accessGate)))}function permissionGate(key=``){const list=normalizedPermissionSets[String(key||``)]||[];return computed(()=>resolvePermissionAccess(accessRuntime,list))}function loadError(baseError=``){return computed(()=>{if(scopeRuntime.routeScopeError.value)return scopeRuntime.routeScopeError.value;const permissionsError=String(accessRuntime.permissionsUnavailableError.value||``).trim();if(permissionsError)return permissionsError;if(baseError===void 0||baseError===null||baseError===``)return``;return String(unref(baseError)||``).trim()})}function isLoading(baseLoading=false){return computed(()=>Boolean(unref(baseLoading))||accessRuntime.awaitingPlacementPermissions.value)}return Object.freeze({scopeRuntime,routeContext,normalizedOwnershipFilter,scopeParamValue,hasRequiredRouteScope,access:accessRuntime,apiPath,queryEnabled,queryKey,queryCanRun,realtime:realtimeBinding,permissionGate,loadError,isLoading})}function normalizeFieldErrorKeys(keys){return Array.isArray(keys)?keys.map(entry=>String(entry||``).trim()).filter(Boolean):[]}function useFieldErrorBag(keys=[]){const normalizedKeys=normalizeFieldErrorKeys(keys);const hasFixedKeys=normalizedKeys.length>0;const errors=reactive(Object.fromEntries(normalizedKeys.map(key=>[key,``])));function clear(){const keysToClear=hasFixedKeys?normalizedKeys:Object.keys(errors);for(const key of keysToClear)errors[key]=``}function apply(source={}){const fieldErrorMap=source&&typeof source===`object`?source:{};if(hasFixedKeys){for(const key of normalizedKeys)errors[key]=String(fieldErrorMap[key]||``);return}clear();for(const[field,message]of Object.entries(fieldErrorMap)){const key=String(field||``).trim();if(!key)continue;errors[key]=String(message||``)}}function set(field,message){const key=String(field||``).trim();if(!key)return;if(hasFixedKeys&&!(key in errors))return;errors[key]=String(message||``)}return Object.freeze({errors,clear,apply,set})}function normalizeMessage(value){return String(value||``).trim()}function setupOperationErrorReporting({enabled=true,source=`http-web.operation`,loadError=null,notFoundError=null,loadActionFactory=null,notFoundActionFactory=null,loadChannel=``,notFoundChannel=``,loadSeverity=`error`,notFoundSeverity=`warning`,dedupeWindowMs=2e3}={}){if(!enabled)return;const runtime=useShellWebErrorRuntime();const normalizedSource=normalizeMessage(source)||`http-web.operation`;function watchMessage(value,{kind=`load`,channel=``,intent=`resource-load`,severity=`error`,actionFactory=null}={}){let lastMessage=``;let lastPresentationId=``;watch(()=>normalizeMessage(value?.value),nextMessage=>{if(!nextMessage){lastMessage=``;if(lastPresentationId){runtime.dismiss(lastPresentationId);lastPresentationId=``}return}if(nextMessage===lastMessage)return;lastMessage=nextMessage;const action=typeof actionFactory===`function`?actionFactory({message:nextMessage,kind}):null;const reportResult=runtime.report({source:normalizedSource,message:nextMessage,intent,severity,channel,action,dedupeKey:`${normalizedSource}:${kind}:${nextMessage}`,dedupeWindowMs});const nextPresentationId=String(reportResult?.presentationId||``).trim();if(nextPresentationId){if(lastPresentationId&&lastPresentationId!==nextPresentationId)runtime.dismiss(lastPresentationId);lastPresentationId=nextPresentationId}},{immediate:true})}if(loadError)watchMessage(loadError,{kind:`load`,channel:loadChannel,intent:`resource-load`,severity:loadSeverity,actionFactory:loadActionFactory});if(notFoundError)watchMessage(notFoundError,{kind:`not-found`,channel:notFoundChannel,intent:`resource-load`,severity:notFoundSeverity,actionFactory:notFoundActionFactory})}function setupRouteChangeCleanup({enabled=true,route=null,feedback=null,fieldBag=null,onClear=null}={}){if(!enabled)return;watch(()=>route?.fullPath,()=>{feedback?.clear?.();fieldBag?.clear?.();onClear?.()})}var CRUD_API_ACCESS_AUTHENTICATED=`authenticated`;var CRUD_API_ACCESS_PUBLIC=`public`;var CRUD_API_ACCESS_VALUES=Object.freeze([CRUD_API_ACCESS_AUTHENTICATED,CRUD_API_ACCESS_PUBLIC]);var publicCrudClients=new WeakSet;function normalizeCrudApiAccess(value=``){const normalized=normalizeText(value).toLowerCase()||`authenticated`;if(CRUD_API_ACCESS_VALUES.includes(normalized))return normalized;throw new TypeError(`CRUD resource apiAccess must be one of: ${CRUD_API_ACCESS_VALUES.join(`, `)}. Received: ${String(value||``)||`(empty)`}`)}function resolveCrudHttpClient(resource=null,{client=null}={}){const activeClient=client||getHttpWebClient();if(!activeClient||typeof activeClient.request!==`function`)throw new TypeError(`resolveCrudHttpClient requires a client with request().`);if(normalizeCrudApiAccess(resource?.apiAccess)!==`public`)return activeClient;if(publicCrudClients.has(activeClient))return activeClient;const publicClient=Object.freeze({request(url,options={}){const requestOptions=options&&typeof options===`object`&&!Array.isArray(options)?options:{};return activeClient.request(url,{...requestOptions,csrf:false})}});publicCrudClients.add(publicClient);return publicClient}function useCommand({ownershipFilter=ROUTE_VISIBILITY_WORKSPACE,surfaceId=``,access=`auto`,apiSuffix=``,runPermissions=[],writeMethod=`POST`,client=null,resource:commandResource=null,transport=null,placementSource=`http-web.command`,fallbackRunError=`Unable to complete action.`,fieldErrorKeys=[],clearOnRouteChange=true,model,input,buildRawPayload,buildCommandPayload,buildCommandOptions,onRunSuccess,onRunError,suppressSuccessMessage=false,messages={},realtime=null}={}){const operationScope=useOperationScope({ownershipFilter,surfaceId,access,apiSuffix,model,readEnabled:false,permissionSets:{run:runPermissions},realtime});const routeContext=operationScope.routeContext;const canRun=operationScope.permissionGate(`run`);const endpointResource=useEndpointResource({path:operationScope.apiPath,enabled:false,client:resolveCrudHttpClient(commandResource,{client}),writeMethod,transport,fallbackSaveError:fallbackRunError});const feedback=useUiFeedback({source:`${placementSource}.feedback`});const fieldBag=useFieldErrorBag(fieldErrorKeys);const command=useCommandCore({model,resource:endpointResource,writeMethod,canRun,fieldBag,feedback,input,buildRawPayload,buildCommandPayload,buildCommandOptions,onRunSuccess,onRunError,suppressSuccessMessage:Boolean(suppressSuccessMessage),messages:{validation:`Fix invalid values and try again.`,success:`Completed.`,error:String(fallbackRunError||`Unable to complete action.`),...messages&&typeof messages===`object`?messages:{}}});setupRouteChangeCleanup({enabled:clearOnRouteChange,route:routeContext.route,feedback,fieldBag});const loadError=operationScope.loadError();const isLoading=operationScope.isLoading();setupOperationErrorReporting({source:`${placementSource}.load`,loadError});return proxyRefs({canRun,isLoading,loadError,isRunning:command.running,fieldErrors:command.fieldErrors,message:command.message,messageType:command.messageType,run:command.run,resource:endpointResource})}export{useOperationScope as a,resolveRouteParamNamesInOrder as c,validateOperationInput as d,useFieldErrorBag as i,toRouteParamValue as l,setupOperationErrorReporting as n,createRouteTemplateResolver as o,setupRouteChangeCleanup as r,normalizeRouteParamName as s,useCommand as t,useAccess as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{H as hasInjectionContext,Ht as watch,J as inject,On as unref,Tn as toRefs,_n as readonly,bn as shallowReadonly,g as computed,gn as reactive,pn as onScopeDispose,un as isRef,yn as shallowReactive}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{f as normalizeText,n as hasValue,r as isRecord}from"./normalize-BNAdWJYg.js";import{b as isGenericHttpErrorMessage,d as getHttpWebClient}from"./vibe64ProjectScope.local-BxTBYuRg.js";import{n as useRealtimeEvent}from"./useRealtimeEvent-BNXVwzFG.js";var VUE_QUERY_CLIENT=`VUE_QUERY_CLIENT`;function getClientKey(key){const suffix=key?`:${key}`:``;return`${VUE_QUERY_CLIENT}${suffix}`}function updateState(state,update){Object.keys(state).forEach(key=>{state[key]=update[key]})}function _cloneDeep(value,customize,currentKey=``,currentLevel=0){if(customize){const result=customize(value,currentKey,currentLevel);if(result===void 0&&isRef(value))return result;if(result!==void 0)return result}if(Array.isArray(value))return value.map((val,index)=>_cloneDeep(val,customize,String(index),currentLevel+1));if(typeof value===`object`&&isPlainObject$1(value)){const entries=Object.entries(value).map(([key,val])=>[key,_cloneDeep(val,customize,key,currentLevel+1)]);return Object.fromEntries(entries)}return value}function cloneDeep(value,customize){return _cloneDeep(value,customize)}function cloneDeepUnref(obj,unrefGetters=false){return cloneDeep(obj,(val,key,level)=>{if(level===1&&key===`queryKey`)return cloneDeepUnref(val,true);if(unrefGetters&&isFunction(val))return cloneDeepUnref(val(),unrefGetters);if(isRef(val))return cloneDeepUnref(unref(val),unrefGetters)})}function isPlainObject$1(value){if(Object.prototype.toString.call(value)!==`[object Object]`)return false;const prototype=Object.getPrototypeOf(value);return prototype===null||prototype===Object.prototype}function isFunction(value){return typeof value===`function`}function useQueryClient(id=``){if(!hasInjectionContext())throw new Error(`vue-query hooks can only be used inside setup() function or functions that support injection context.`);const key=getClientKey(id);const queryClient=inject(key);if(!queryClient)throw new Error(`No 'queryClient' found in Vue context, use 'VueQueryPlugin' to properly initialize the library.`);return queryClient}var defaultTimeoutProvider={setTimeout:(callback,delay)=>setTimeout(callback,delay),clearTimeout:timeoutId=>clearTimeout(timeoutId),setInterval:(callback,delay)=>setInterval(callback,delay),clearInterval:intervalId=>clearInterval(intervalId)};var TimeoutManager=class{#provider=defaultTimeoutProvider;#providerCalled=false;setTimeoutProvider(provider){this.#provider=provider}setTimeout(callback,delay){return this.#provider.setTimeout(callback,delay)}clearTimeout(timeoutId){this.#provider.clearTimeout(timeoutId)}setInterval(callback,delay){return this.#provider.setInterval(callback,delay)}clearInterval(intervalId){this.#provider.clearInterval(intervalId)}};var timeoutManager=new TimeoutManager;function systemSetTimeoutZero(callback){setTimeout(callback,0)}var isServer$1=typeof window===`undefined`||`Deno`in globalThis;function noop(){}function functionalUpdate(updater,input){return typeof updater===`function`?updater(input):updater}function isValidTimeout(value){return typeof value===`number`&&value>=0&&value!==Infinity}function timeUntilStale(updatedAt,staleTime){return Math.max(updatedAt+(staleTime||0)-Date.now(),0)}function resolveQueryValue(value,query){return typeof value===`function`?value(query):value}function matchQuery(filters,query){const{type=`all`,exact,fetchStatus,predicate,queryKey,stale}=filters;if(queryKey){if(exact){if(query.queryHash!==hashQueryKeyByOptions(queryKey,query.options))return false}else if(!partialMatchKey(query.queryKey,queryKey))return false}if(type!==`all`){const isActive=query.isActive();if(type===`active`&&!isActive)return false;if(type===`inactive`&&isActive)return false}if(typeof stale===`boolean`&&query.isStale()!==stale)return false;if(fetchStatus&&fetchStatus!==query.state.fetchStatus)return false;if(predicate&&!predicate(query))return false;return true}function matchMutation(filters,mutation){const{exact,status,predicate,mutationKey}=filters;if(mutationKey){if(!mutation.options.mutationKey)return false;if(exact){if(hashKey(mutation.options.mutationKey)!==hashKey(mutationKey))return false}else if(!partialMatchKey(mutation.options.mutationKey,mutationKey))return false}if(status&&mutation.state.status!==status)return false;if(predicate&&!predicate(mutation))return false;return true}function hashQueryKeyByOptions(queryKey,options){return(options?.queryKeyHashFn||hashKey)(queryKey)}function hashKey(queryKey){return JSON.stringify(queryKey,(_,val)=>isPlainObject(val)?Object.keys(val).sort().reduce((result,key)=>{result[key]=val[key];return result},{}):val)}function partialMatchKey(a,b){if(a===b)return true;if(typeof a!==typeof b)return false;if(a&&b&&typeof a===`object`&&typeof b===`object`){if(Array.isArray(a)&&Array.isArray(b)){if(b.length>a.length)return false;for(let i=0;i<b.length;i++)if(!partialMatchKey(a[i],b[i]))return false;return true}const bKeys=Object.keys(b);for(const key of bKeys)if(!partialMatchKey(a[key],b[key]))return false;return true}return false}var hasOwn=Object.prototype.hasOwnProperty;function replaceEqualDeep(a,b,depth=0){if(a===b)return a;if(depth>500)return b;const array=isPlainArray(a)&&isPlainArray(b);if(!array&&!(isPlainObject(a)&&isPlainObject(b)))return b;const aSize=(array?a:Object.keys(a)).length;const bItems=array?b:Object.keys(b);const bSize=bItems.length;const copy=array?new Array(bSize):{};let equalItems=0;for(let i=0;i<bSize;i++){const key=array?i:bItems[i];const aItem=a[key];const bItem=b[key];if(aItem===bItem){copy[key]=aItem;if(array?i<aSize:hasOwn.call(a,key))equalItems++;continue}if(aItem===null||bItem===null||typeof aItem!==`object`||typeof bItem!==`object`){copy[key]=bItem;continue}const v=replaceEqualDeep(aItem,bItem,depth+1);copy[key]=v;if(v===aItem)equalItems++}return aSize===bSize&&equalItems===aSize?a:copy}function shallowEqualObjects(a,b){if(!b||Object.keys(a).length!==Object.keys(b).length)return false;for(const key in a)if(a[key]!==b[key])return false;return true}function isPlainArray(value){return Array.isArray(value)&&value.length===Object.keys(value).length}function isPlainObject(o){if(!hasObjectPrototype(o))return false;const objectPrototype=Object.getPrototypeOf(o);const ctor=objectPrototype?.constructor;if(ctor===void 0)return true;if(typeof ctor!==`function`)return false;const prot=ctor.prototype;if(!hasObjectPrototype(prot))return false;if(!prot.hasOwnProperty(`isPrototypeOf`))return false;if(objectPrototype!==Object.prototype)return false;return true}function hasObjectPrototype(o){return Object.prototype.toString.call(o)===`[object Object]`}function sleep(timeout){return new Promise(resolve=>{timeoutManager.setTimeout(resolve,timeout)})}function replaceData(prevData,data,options){if(typeof options.structuralSharing===`function`)return options.structuralSharing(prevData,data);else if(options.structuralSharing!==false)return replaceEqualDeep(prevData,data);return data}function addToEnd(items,item,max=0){const newItems=[...items,item];return max&&newItems.length>max?newItems.slice(1):newItems}function addToStart(items,item,max=0){const newItems=[item,...items];return max&&newItems.length>max?newItems.slice(0,-1):newItems}var skipToken=Symbol();function ensureQueryFn(options,fetchOptions){if(!options.queryFn&&fetchOptions?.initialPromise)return()=>fetchOptions.initialPromise;if(!options.queryFn||options.queryFn===skipToken)return()=>Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));return options.queryFn}function shouldThrowError(throwOnError,params){if(typeof throwOnError===`function`)return throwOnError(...params);return!!throwOnError}function addConsumeAwareSignal(object,getSignal,onCancelled){let consumed=false;let signal;Object.defineProperty(object,"signal",{enumerable:true,get:()=>{signal??=getSignal();if(consumed)return signal;consumed=true;if(signal.aborted)onCancelled();else signal.addEventListener(`abort`,onCancelled,{once:true});return signal}});return object}var isServerFn=()=>isServer$1;var isServer=()=>isServerFn();var environmentManager={isServer,setIsServer(isServerValue){isServerFn=isServerValue}};var Subscribable=class{constructor(){this.listeners=new Set;this.subscribe=this.subscribe.bind(this)}subscribe(listener){this.listeners.add(listener);this.onSubscribe();return()=>{this.listeners.delete(listener);this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}};var FocusManager=class extends Subscribable{#focused;#cleanup;#setup;constructor(){super();this.#setup=onFocus=>{if(typeof window!==`undefined`&&window.addEventListener){const listener=()=>onFocus();window.addEventListener(`visibilitychange`,listener,false);return()=>{window.removeEventListener(`visibilitychange`,listener)}}}}onSubscribe(){if(!this.#cleanup)this.setEventListener(this.#setup)}onUnsubscribe(){if(!this.hasListeners()){this.#cleanup?.();this.#cleanup=void 0}}setEventListener(setup){this.#setup=setup;this.#cleanup?.();this.#cleanup=setup(focused=>{if(typeof focused===`boolean`)this.setFocused(focused);else this.onFocus()})}setFocused(focused){if(this.#focused!==focused){this.#focused=focused;this.onFocus()}}onFocus(){const isFocused=this.isFocused();this.listeners.forEach(listener=>{listener(isFocused)})}isFocused(){if(typeof this.#focused===`boolean`)return this.#focused;return globalThis.document?.visibilityState!==`hidden`}};var focusManager=new FocusManager;var defaultScheduler=systemSetTimeoutZero;function createNotifyManager(){let queue=[];let transactions=0;let notifyFn=callback=>{callback()};let batchNotifyFn=callback=>{callback()};let scheduleFn=defaultScheduler;const schedule=callback=>{if(transactions)queue.push(callback);else scheduleFn(()=>{notifyFn(callback)})};const flush=()=>{const originalQueue=queue;queue=[];if(originalQueue.length)scheduleFn(()=>{batchNotifyFn(()=>{originalQueue.forEach(callback=>{notifyFn(callback)})})})};return{batch:callback=>{let result;transactions++;try{result=callback()}finally{transactions--;if(!transactions)flush()}return result},batchCalls:callback=>{return(...args)=>{schedule(()=>{callback(...args)})}},schedule,setNotifyFunction:fn=>{notifyFn=fn},setBatchNotifyFunction:fn=>{batchNotifyFn=fn},setScheduler:fn=>{scheduleFn=fn}}}var notifyManager=createNotifyManager();var OnlineManager=class extends Subscribable{#online=true;#cleanup;#setup;constructor(){super();this.#setup=onOnline=>{if(typeof window!==`undefined`&&window.addEventListener){const onlineListener=()=>onOnline(true);const offlineListener=()=>onOnline(false);window.addEventListener(`online`,onlineListener,false);window.addEventListener(`offline`,offlineListener,false);return()=>{window.removeEventListener(`online`,onlineListener);window.removeEventListener(`offline`,offlineListener)}}}}onSubscribe(){if(!this.#cleanup)this.setEventListener(this.#setup)}onUnsubscribe(){if(!this.hasListeners()){this.#cleanup?.();this.#cleanup=void 0}}setEventListener(setup){this.#setup=setup;this.#cleanup?.();this.#cleanup=setup(this.setOnline.bind(this))}setOnline(online){if(this.#online!==online){this.#online=online;this.listeners.forEach(listener=>{listener(online)})}}isOnline(){return this.#online}};var onlineManager=new OnlineManager;function defaultRetryDelay(failureCount){return Math.min(1e3*2**failureCount,3e4)}function canFetch(networkMode){return(networkMode??`online`)===`online`?onlineManager.isOnline():true}var CancelledError=class extends Error{constructor(options){super(`CancelledError`);this.revert=options?.revert;this.silent=options?.silent}};function createRetryer(config){let isRetryCancelled=false;let failureCount=0;let continueFn;let status=`pending`;let promiseResolve;let promiseReject;const promise=new Promise((resolve,reject)=>{promiseResolve=resolve;promiseReject=reject});promise.catch(noop);const isResolved=()=>status!==`pending`;const cancel=cancelOptions=>{if(!isResolved()){const error=new CancelledError(cancelOptions);reject(error);config.onCancel?.(error)}};const cancelRetry=()=>{isRetryCancelled=true};const continueRetry=()=>{isRetryCancelled=false};const canContinue=()=>focusManager.isFocused()&&(config.networkMode===`always`||onlineManager.isOnline())&&config.canRun();const canStart=()=>canFetch(config.networkMode)&&config.canRun();const resolve=value=>{if(!isResolved()){continueFn?.();status=`resolved`;promiseResolve(value)}};const reject=value=>{if(!isResolved()){continueFn?.();status=`rejected`;promiseReject(value)}};const pause=()=>{return new Promise(continueResolve=>{continueFn=value=>{if(isResolved()||canContinue())continueResolve(value)};config.onPause?.()}).then(()=>{continueFn=void 0;if(!isResolved())config.onContinue?.()})};const run=()=>{if(isResolved())return;let promiseOrValue;const initialPromise=failureCount===0?config.initialPromise:void 0;try{promiseOrValue=initialPromise??config.fn()}catch(error){promiseOrValue=Promise.reject(error)}Promise.resolve(promiseOrValue).then(resolve).catch(error=>{if(isResolved())return;const retry=config.retry??(isServer()?0:3);const retryDelay=config.retryDelay??defaultRetryDelay;const delay=typeof retryDelay===`function`?retryDelay(failureCount,error):retryDelay;const shouldRetry=retry===true||typeof retry===`number`&&failureCount<retry||typeof retry===`function`&&retry(failureCount,error);if(isRetryCancelled||!shouldRetry){reject(error);return}failureCount++;config.onFail?.(failureCount,error);sleep(delay).then(()=>{return canContinue()?void 0:pause()}).then(()=>{if(isRetryCancelled)reject(error);else run()})})};return{promise,status:()=>status,cancel,continue:()=>{continueFn?.();return promise},cancelRetry,continueRetry,canStart,start:()=>{if(canStart())run();else pause().then(run);return promise}}}var Removable=class{#gcTimeout;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout();if(isValidTimeout(this.gcTime))this.#gcTimeout=timeoutManager.setTimeout(()=>{this.optionalRemove()},this.gcTime)}updateGcTime(newGcTime){this.gcTime=Math.max(this.gcTime||0,newGcTime??(isServer()?Infinity:3e5))}clearGcTimeout(){if(this.#gcTimeout!==void 0){timeoutManager.clearTimeout(this.#gcTimeout);this.#gcTimeout=void 0}}};function infiniteQueryBehavior(pages){return{onFetch:(context,query)=>{const options=context.options;const direction=context.fetchOptions?.meta?.fetchMore?.direction;const oldPages=context.state.data?.pages||[];const oldPageParams=context.state.data?.pageParams||[];let result={pages:[],pageParams:[]};let currentPage=0;const fetchFn=async()=>{let cancelled=false;const addSignalProperty=object=>{addConsumeAwareSignal(object,()=>context.signal,()=>cancelled=true)};const queryFn=ensureQueryFn(context.options,context.fetchOptions);const fetchPage=async(data,param,previous)=>{if(cancelled)return Promise.reject(context.signal.reason);if(param==null&&data.pages.length)return Promise.resolve(data);const createQueryFnContext=()=>{const queryFnContext={client:context.client,queryKey:context.queryKey,pageParam:param,direction:previous?`backward`:`forward`,meta:context.options.meta};addSignalProperty(queryFnContext);return queryFnContext};const queryFnContext=createQueryFnContext();const page=await queryFn(queryFnContext);const{maxPages}=context.options;const addTo=previous?addToStart:addToEnd;return{pages:addTo(data.pages,page,maxPages),pageParams:addTo(data.pageParams,param,maxPages)}};if(direction&&oldPages.length){const previous=direction===`backward`;const pageParamFn=previous?getPreviousPageParam:getNextPageParam;const oldData={pages:oldPages,pageParams:oldPageParams};result=await fetchPage(oldData,pageParamFn(options,oldData),previous)}else{const remainingPages=pages??oldPages.length;do{const param=currentPage===0?oldPageParams[0]??options.initialPageParam:getNextPageParam(options,result);if(currentPage>0&¶m==null)break;result=await fetchPage(result,param);currentPage++}while(currentPage<remainingPages)}return result};if(context.options.persister)context.fetchFn=()=>{return context.options.persister?.(fetchFn,{client:context.client,queryKey:context.queryKey,meta:context.options.meta,signal:context.signal},query)};else context.fetchFn=fetchFn}}}function getNextPageParam(options,{pages,pageParams}){const lastIndex=pages.length-1;return pages.length>0?options.getNextPageParam(pages[lastIndex],pages,pageParams[lastIndex],pageParams):void 0}function getPreviousPageParam(options,{pages,pageParams}){return pages.length>0?options.getPreviousPageParam?.(pages[0],pages,pageParams[0],pageParams):void 0}function hasNextPage(options,data){if(!data)return false;return getNextPageParam(options,data)!=null}function hasPreviousPage(options,data){if(!data||!options.getPreviousPageParam)return false;return getPreviousPageParam(options,data)!=null}var Query=class extends Removable{#queryType;#initialState;#revertState;#cache;#client;#retryer;#defaultOptions;#abortSignalConsumed;constructor(config){super();this.#abortSignalConsumed=false;this.#defaultOptions=config.defaultOptions;this.setOptions(config.options);this.observers=[];this.#client=config.client;this.#cache=this.#client.getQueryCache();this.queryKey=config.queryKey;this.queryHash=config.queryHash;this.#initialState=getDefaultState$1(this.options);this.state=config.state??this.#initialState;this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return this.#queryType}get promise(){return this.#retryer?.promise}setOptions(options){this.options={...this.#defaultOptions,...options};if(options?._type)this.#queryType=options._type;this.updateGcTime(this.options.gcTime);if(this.state&&this.state.data===void 0){const defaultState=getDefaultState$1(this.options);if(defaultState.data!==void 0){this.setState(successState(defaultState.data,defaultState.dataUpdatedAt));this.#initialState=defaultState}}}optionalRemove(){if(!this.observers.length&&this.state.fetchStatus===`idle`)this.#cache.remove(this)}setData(newData,options){const data=replaceData(this.state.data,newData,this.options);this.#dispatch({data,type:`success`,dataUpdatedAt:options?.updatedAt,manual:options?.manual});return data}setState(state){this.#dispatch({type:`setState`,state})}cancel(options){const promise=this.#retryer?.promise;this.#retryer?.cancel(options);return promise?promise.then(noop).catch(noop):Promise.resolve()}destroy(){super.destroy();this.cancel({silent:true})}get resetState(){return this.#initialState}reset(){this.destroy();this.setState(this.resetState)}isActive(){return this.observers.some(observer=>resolveQueryValue(observer.options.enabled,this)!==false)}isDisabled(){if(this.getObserversCount()>0)return!this.isActive();return this.options.queryFn===skipToken||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){if(this.getObserversCount()>0)return this.observers.some(observer=>resolveQueryValue(observer.options.staleTime,this)===`static`);return false}isStale(){if(this.getObserversCount()>0)return this.observers.some(observer=>observer.getCurrentResult().isStale);return this.state.data===void 0||this.state.isInvalidated}isStaleByTime(staleTime=0){if(this.state.data===void 0)return true;if(staleTime===`static`)return false;if(this.state.isInvalidated)return true;return!timeUntilStale(this.state.dataUpdatedAt,staleTime)}onFocus(){this.observers.find(x=>x.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:false});this.#retryer?.continue()}onOnline(){this.observers.find(x=>x.shouldFetchOnReconnect())?.refetch({cancelRefetch:false});this.#retryer?.continue()}addObserver(observer){if(!this.observers.includes(observer)){this.observers.push(observer);this.clearGcTimeout();this.#cache.notify({type:`observerAdded`,query:this,observer})}}removeObserver(observer){const index=this.observers.indexOf(observer);if(index!==-1){this.observers.splice(index,1);if(!this.observers.length){if(this.#retryer){if(this.#abortSignalConsumed||this.state.fetchStatus===`paused`&&this.state.status===`pending`)this.#retryer.cancel({revert:true});else this.#retryer.cancelRetry()}this.scheduleGc()}this.#cache.notify({type:`observerRemoved`,query:this,observer})}}getObserversCount(){return this.observers.length}invalidate(){if(!this.state.isInvalidated)this.#dispatch({type:`invalidate`})}async fetch(options,fetchOptions){if(this.state.fetchStatus!==`idle`&&this.#retryer?.status()!==`rejected`){if(this.state.data!==void 0&&fetchOptions?.cancelRefetch)this.cancel({silent:true});else if(this.#retryer){this.#retryer.continueRetry();return this.#retryer.promise}}if(options)this.setOptions(options);if(!this.options.queryFn){const observer=this.observers.find(x=>x.options.queryFn);if(observer)this.setOptions(observer.options)}const abortController=new AbortController;const addSignalProperty=object=>{Object.defineProperty(object,"signal",{enumerable:true,get:()=>{this.#abortSignalConsumed=true;return abortController.signal}})};const fetchFn=()=>{const queryFn=ensureQueryFn(this.options,fetchOptions);const createQueryFnContext=()=>{const queryFnContext={client:this.#client,queryKey:this.queryKey,meta:this.meta};addSignalProperty(queryFnContext);return queryFnContext};const queryFnContext=createQueryFnContext();this.#abortSignalConsumed=false;if(this.options.persister)return this.options.persister(queryFn,queryFnContext,this);return queryFn(queryFnContext)};const createFetchContext=()=>{const context={fetchOptions,options:this.options,queryKey:this.queryKey,client:this.#client,state:this.state,fetchFn};addSignalProperty(context);return context};const context=createFetchContext();(this.#queryType===`infinite`?infiniteQueryBehavior(this.options.pages):this.options.behavior)?.onFetch(context,this);this.#revertState=this.state;if(this.state.fetchStatus===`idle`||this.state.fetchMeta!==context.fetchOptions?.meta)this.#dispatch({type:`fetch`,meta:context.fetchOptions?.meta});const retryer=this.#retryer=createRetryer({initialPromise:fetchOptions?.initialPromise,fn:context.fetchFn,onCancel:error=>{if(error instanceof CancelledError&&error.revert)this.setState({...this.#revertState,fetchStatus:`idle`});abortController.abort()},onFail:(failureCount,error)=>{this.#dispatch({type:`failed`,failureCount,error})},onPause:()=>{this.#dispatch({type:`pause`})},onContinue:()=>{this.#dispatch({type:`continue`})},retry:context.options.retry,retryDelay:context.options.retryDelay,networkMode:context.options.networkMode,canRun:()=>true});try{const data=await retryer.start();if(data===void 0)throw new Error(`${this.queryHash} data is undefined`);this.setData(data);this.#cache.config.onSuccess?.(data,this);this.#cache.config.onSettled?.(data,this.state.error,this);return data}catch(error){if(error instanceof CancelledError){if(error.silent)return this.#retryer.promise;else if(error.revert){if(this.state.data===void 0)throw error;return this.state.data}}this.#dispatch({type:`error`,error});this.#cache.config.onError?.(error,this);this.#cache.config.onSettled?.(this.state.data,error,this);throw error}finally{if(this.#retryer===retryer)this.#retryer=void 0;this.scheduleGc()}}#dispatch(action){const reducer=state=>{switch(action.type){case`failed`:return{...state,fetchFailureCount:action.failureCount,fetchFailureReason:action.error};case`pause`:return{...state,fetchStatus:`paused`};case`continue`:return{...state,fetchStatus:`fetching`};case`fetch`:return{...state,...fetchState(state.data,this.options),fetchMeta:action.meta??null};case`success`:const newState={...state,...successState(action.data,action.dataUpdatedAt),dataUpdateCount:state.dataUpdateCount+1,...!action.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};this.#revertState=action.manual?newState:void 0;return newState;case`error`:const error=action.error;return{...state,error,errorUpdateCount:state.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:state.fetchFailureCount+1,fetchFailureReason:error,fetchStatus:`idle`,status:`error`,isInvalidated:true};case`invalidate`:return{...state,isInvalidated:true};case`setState`:return{...state,...action.state}}};this.state=reducer(this.state);notifyManager.batch(()=>{this.observers.slice().forEach(observer=>{observer.onQueryUpdate()});this.#cache.notify({query:this,type:`updated`,action})})}};function fetchState(data,options){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:canFetch(options.networkMode)?`fetching`:`paused`,...data===void 0&&{error:null,status:`pending`}}}function successState(data,dataUpdatedAt){return{data,dataUpdatedAt:dataUpdatedAt??Date.now(),error:null,isInvalidated:false,status:`success`}}function getDefaultState$1(options){const data=typeof options.initialData===`function`?options.initialData():options.initialData;const hasData=data!==void 0;const initialDataUpdatedAt=hasData?typeof options.initialDataUpdatedAt===`function`?options.initialDataUpdatedAt():options.initialDataUpdatedAt:0;return{data,dataUpdateCount:0,dataUpdatedAt:hasData?initialDataUpdatedAt??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:false,status:hasData?`success`:`pending`,fetchStatus:`idle`}}var QueryObserver=class extends Subscribable{#client;#currentQuery=void 0;#currentQueryInitialState=void 0;#currentResult=void 0;#currentResultState;#currentResultOptions;#selectError;#selectFn;#selectResult;#lastQueryWithDefinedData;#staleTimeoutId;#refetchIntervalId;#currentRefetchInterval;#trackedProps=new Set;constructor(client,options){super();this.options=options;this.#client=client;this.#selectError=null;this.bindMethods();this.setOptions(options)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){if(this.listeners.size===1){this.#currentQuery.addObserver(this);if(shouldFetchOnMount(this.#currentQuery,this.options))this.#executeFetch();else this.updateResult();this.#updateTimers()}}onUnsubscribe(){if(!this.hasListeners())this.destroy()}shouldFetchOnReconnect(){return shouldFetchOn(this.#currentQuery,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return shouldFetchOn(this.#currentQuery,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set;this.#clearStaleTimeout();this.#clearRefetchInterval();this.#currentQuery.removeObserver(this)}setOptions(options){const prevOptions=this.options;const prevQuery=this.#currentQuery;this.options=this.#client.defaultQueryOptions(options);if(this.options.enabled!==void 0&&typeof this.options.enabled!==`boolean`&&typeof this.options.enabled!==`function`&&typeof resolveQueryValue(this.options.enabled,this.#currentQuery)!==`boolean`)throw new Error(`Expected enabled to be a boolean or a callback that returns a boolean`);this.#updateQuery();this.#currentQuery.setOptions(this.options);if(prevOptions._defaulted&&!shallowEqualObjects(this.options,prevOptions))this.#client.getQueryCache().notify({type:`observerOptionsUpdated`,query:this.#currentQuery,observer:this});const mounted=this.hasListeners();if(mounted&&shouldFetchOptionally(this.#currentQuery,prevQuery,this.options,prevOptions))this.#executeFetch();this.updateResult();if(mounted&&(this.#currentQuery!==prevQuery||resolveQueryValue(this.options.enabled,this.#currentQuery)!==resolveQueryValue(prevOptions.enabled,this.#currentQuery)||resolveQueryValue(this.options.staleTime,this.#currentQuery)!==resolveQueryValue(prevOptions.staleTime,this.#currentQuery)))this.#updateStaleTimeout();const nextRefetchInterval=this.#computeRefetchInterval();if(mounted&&(this.#currentQuery!==prevQuery||resolveQueryValue(this.options.enabled,this.#currentQuery)!==resolveQueryValue(prevOptions.enabled,this.#currentQuery)||nextRefetchInterval!==this.#currentRefetchInterval))this.#updateRefetchInterval(nextRefetchInterval)}getOptimisticResult(options){const query=this.#client.getQueryCache().build(this.#client,options);const result=this.createResult(query,options);if(!shallowEqualObjects(this.getCurrentResult(),result)){this.#currentResult=result;this.#currentResultOptions=this.options;this.#currentResultState=this.#currentQuery.state}return result}getCurrentResult(){return this.#currentResult}trackResult(result,onPropTracked){return new Proxy(result,{get:(target,key)=>{this.trackProp(key);onPropTracked?.(key);return Reflect.get(target,key)}})}trackProp(key){this.#trackedProps.add(key)}getCurrentQuery(){return this.#currentQuery}refetch({...options}={}){return this.fetch({...options})}fetchOptimistic(options){const defaultedOptions=this.#client.defaultQueryOptions(options);const query=this.#client.getQueryCache().build(this.#client,defaultedOptions);let unsubscribe=()=>{};let resolveEarly;const cachePromise=new Promise(resolve=>{resolveEarly=resolve;unsubscribe=this.#client.getQueryCache().subscribe(event=>{if(event.type===`updated`&&event.query.queryHash===query.queryHash&&query.state.data!==void 0){unsubscribe();resolve(this.createResult(query,defaultedOptions))}})});return Promise.race([query.fetch().then(()=>{const result=this.createResult(query,defaultedOptions);resolveEarly?.(result);return result}).finally(()=>{unsubscribe()}),cachePromise])}fetch(fetchOptions){return this.#executeFetch({...fetchOptions,cancelRefetch:fetchOptions.cancelRefetch??true}).then(()=>{this.updateResult();return this.#currentResult})}#executeFetch(fetchOptions){this.#updateQuery();let promise=this.#currentQuery.fetch(this.options,fetchOptions);if(!fetchOptions?.throwOnError)promise=promise.catch(noop);return promise}#shouldScheduleTimer(timeout){return!isServer()&&resolveQueryValue(this.options.enabled,this.#currentQuery)!==false&&isValidTimeout(timeout)}#updateStaleTimeout(){this.#clearStaleTimeout();const staleTime=resolveQueryValue(this.options.staleTime,this.#currentQuery);if(this.#currentResult.isStale||!this.#shouldScheduleTimer(staleTime))return;const timeout=timeUntilStale(this.#currentResult.dataUpdatedAt,staleTime)+1;this.#staleTimeoutId=timeoutManager.setTimeout(()=>{if(!this.#currentResult.isStale)this.updateResult()},timeout)}#computeRefetchInterval(){return resolveQueryValue(this.options.refetchInterval,this.#currentQuery)??false}#updateRefetchInterval(nextInterval){this.#clearRefetchInterval();this.#currentRefetchInterval=nextInterval;if(this.#currentRefetchInterval===0||!this.#shouldScheduleTimer(this.#currentRefetchInterval))return;this.#refetchIntervalId=timeoutManager.setInterval(()=>{if(this.options.refetchIntervalInBackground||focusManager.isFocused())this.#executeFetch()},this.#currentRefetchInterval)}#updateTimers(){this.#updateStaleTimeout();this.#updateRefetchInterval(this.#computeRefetchInterval())}#clearStaleTimeout(){if(this.#staleTimeoutId!==void 0){timeoutManager.clearTimeout(this.#staleTimeoutId);this.#staleTimeoutId=void 0}}#clearRefetchInterval(){if(this.#refetchIntervalId!==void 0){timeoutManager.clearInterval(this.#refetchIntervalId);this.#refetchIntervalId=void 0}}createResult(query,options){const prevQuery=this.#currentQuery;const prevOptions=this.options;const prevResult=this.#currentResult;const prevResultState=this.#currentResultState;const prevResultOptions=this.#currentResultOptions;const queryInitialState=query!==prevQuery?query.state:this.#currentQueryInitialState;const{state}=query;let newState={...state};let isPlaceholderData=false;let data;if(options._optimisticResults){const mounted=this.hasListeners();const fetchOnMount=!mounted&&shouldFetchOnMount(query,options);const fetchOptionally=mounted&&shouldFetchOptionally(query,prevQuery,options,prevOptions);if(fetchOnMount||fetchOptionally)newState={...newState,...fetchState(state.data,query.options)};if(options._optimisticResults===`isRestoring`)newState.fetchStatus=`idle`}let{error,errorUpdatedAt,status}=newState;data=newState.data;let skipSelect=false;if(options.placeholderData!==void 0&&data===void 0&&status===`pending`){let placeholderData;if(prevResult?.isPlaceholderData&&options.placeholderData===prevResultOptions?.placeholderData){placeholderData=prevResult.data;skipSelect=true}else placeholderData=typeof options.placeholderData===`function`?options.placeholderData(this.#lastQueryWithDefinedData?.state.data,this.#lastQueryWithDefinedData):options.placeholderData;if(placeholderData!==void 0){status=`success`;data=replaceData(prevResult?.data,placeholderData,options);isPlaceholderData=true}}if(options.select&&data!==void 0&&!skipSelect){if(prevResult&&data===prevResultState?.data&&options.select===this.#selectFn)data=this.#selectResult;else try{this.#selectFn=options.select;data=options.select(data);data=replaceData(prevResult?.data,data,options);this.#selectResult=data;this.#selectError=null}catch(selectError){this.#selectError=selectError}}else if(data===void 0)this.#selectError=null;if(this.#selectError){error=this.#selectError;data=this.#selectResult;errorUpdatedAt=Date.now();status=`error`;isPlaceholderData=false}const isFetching=newState.fetchStatus===`fetching`;const isPending=status===`pending`;const isError=status===`error`;const isLoading=isPending&&isFetching;const hasData=data!==void 0;return{status,fetchStatus:newState.fetchStatus,isPending,isSuccess:status===`success`,isError,isInitialLoading:isLoading,isLoading,data,dataUpdatedAt:newState.dataUpdatedAt,error,errorUpdatedAt,failureCount:newState.fetchFailureCount,failureReason:newState.fetchFailureReason,errorUpdateCount:newState.errorUpdateCount,isFetched:query.isFetched(),isFetchedAfterMount:newState.dataUpdateCount>queryInitialState.dataUpdateCount||newState.errorUpdateCount>queryInitialState.errorUpdateCount,isFetching,isRefetching:isFetching&&!isPending,isLoadingError:isError&&!hasData,isPaused:newState.fetchStatus===`paused`,isPlaceholderData,isRefetchError:isError&&hasData,isStale:isStale(query,options),refetch:this.refetch,isEnabled:resolveQueryValue(options.enabled,query)!==false}}updateResult(){const prevResult=this.#currentResult;const nextResult=this.createResult(this.#currentQuery,this.options);this.#currentResultState=this.#currentQuery.state;this.#currentResultOptions=this.options;if(this.#currentResultState.data!==void 0)this.#lastQueryWithDefinedData=this.#currentQuery;if(shallowEqualObjects(nextResult,prevResult))return;this.#currentResult=nextResult;const shouldNotifyListeners=()=>{if(!prevResult)return true;const{notifyOnChangeProps}=this.options;const notifyOnChangePropsValue=typeof notifyOnChangeProps===`function`?notifyOnChangeProps():notifyOnChangeProps;if(notifyOnChangePropsValue===`all`||!notifyOnChangePropsValue&&!this.#trackedProps.size)return true;const includedProps=new Set(notifyOnChangePropsValue??this.#trackedProps);if(this.options.throwOnError)includedProps.add(`error`);return Object.keys(this.#currentResult).some(key=>{const typedKey=key;return this.#currentResult[typedKey]!==prevResult[typedKey]&&includedProps.has(typedKey)})};const notifyListeners=shouldNotifyListeners();notifyManager.batch(()=>{if(notifyListeners)this.listeners.forEach(listener=>{listener(this.#currentResult)});this.#client.getQueryCache().notify({query:this.#currentQuery,type:`observerResultsUpdated`})})}#updateQuery(){const query=this.#client.getQueryCache().build(this.#client,this.options);if(query===this.#currentQuery)return;const prevQuery=this.#currentQuery;this.#currentQuery=query;this.#currentQueryInitialState=query.state;if(this.hasListeners()){prevQuery?.removeObserver(this);query.addObserver(this)}}onQueryUpdate(){this.updateResult();if(this.hasListeners())this.#updateTimers()}};function shouldLoadOnMount(query,options){return resolveQueryValue(options.enabled,query)!==false&&query.state.data===void 0&&!(query.state.status===`error`&&resolveQueryValue(options.retryOnMount,query)===false)}function shouldFetchOnMount(query,options){return shouldLoadOnMount(query,options)||query.state.data!==void 0&&shouldFetchOn(query,options,options.refetchOnMount)}function shouldFetchOn(query,options,field){if(resolveQueryValue(options.enabled,query)!==false&&resolveQueryValue(options.staleTime,query)!==`static`){const value=resolveQueryValue(field,query);return value===`always`||value!==false&&isStale(query,options)}return false}function shouldFetchOptionally(query,prevQuery,options,prevOptions){return(query!==prevQuery||resolveQueryValue(prevOptions.enabled,query)===false)&&(!options.suspense||query.state.status!==`error`)&&isStale(query,options)}function isStale(query,options){return resolveQueryValue(options.enabled,query)!==false&&query.isStaleByTime(resolveQueryValue(options.staleTime,query))}var Mutation=class extends Removable{#client;#observers;#mutationCache;#retryer;constructor(config){super();this.#client=config.client;this.mutationId=config.mutationId;this.#mutationCache=config.mutationCache;this.#observers=[];this.state=config.state||getDefaultState();this.setOptions(config.options);this.scheduleGc()}setOptions(options){this.options=options;this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(observer){if(!this.#observers.includes(observer)){this.#observers.push(observer);this.clearGcTimeout();this.#mutationCache.notify({type:`observerAdded`,mutation:this,observer})}}removeObserver(observer){this.#observers=this.#observers.filter(x=>x!==observer);this.scheduleGc();this.#mutationCache.notify({type:`observerRemoved`,mutation:this,observer})}optionalRemove(){if(!this.#observers.length){if(this.state.status===`pending`)this.scheduleGc();else this.#mutationCache.remove(this)}}continue(){return this.#retryer?.continue()??(this.state.status===`pending`?this.execute(this.state.variables):Promise.resolve())}async execute(variables){const onContinue=()=>{this.#dispatch({type:`continue`})};const mutationFnContext={client:this.#client,meta:this.options.meta,mutationKey:this.options.mutationKey};const retryer=this.#retryer=createRetryer({fn:()=>{if(!this.options.mutationFn)return Promise.reject(new Error(`No mutationFn found`));return this.options.mutationFn(variables,mutationFnContext)},onFail:(failureCount,error)=>{this.#dispatch({type:`failed`,failureCount,error})},onPause:()=>{this.#dispatch({type:`pause`})},onContinue,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#mutationCache.canRun(this)});const restored=this.state.status===`pending`;const isPaused=!retryer.canStart();try{if(restored)onContinue();else{this.#dispatch({type:`pending`,variables,isPaused});if(this.#mutationCache.config.onMutate)await this.#mutationCache.config.onMutate(variables,this,mutationFnContext);const context=await this.options.onMutate?.(variables,mutationFnContext);if(context!==this.state.context)this.#dispatch({type:`pending`,context,variables,isPaused})}const data=await retryer.start();await this.#mutationCache.config.onSuccess?.(data,variables,this.state.context,this,mutationFnContext);await this.options.onSuccess?.(data,variables,this.state.context,mutationFnContext);await this.#mutationCache.config.onSettled?.(data,null,this.state.variables,this.state.context,this,mutationFnContext);await this.options.onSettled?.(data,null,variables,this.state.context,mutationFnContext);this.#dispatch({type:`success`,data});return data}catch(error){try{await this.#mutationCache.config.onError?.(error,variables,this.state.context,this,mutationFnContext)}catch(e){Promise.reject(e)}try{await this.options.onError?.(error,variables,this.state.context,mutationFnContext)}catch(e){Promise.reject(e)}try{await this.#mutationCache.config.onSettled?.(void 0,error,this.state.variables,this.state.context,this,mutationFnContext)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,error,variables,this.state.context,mutationFnContext)}catch(e){Promise.reject(e)}this.#dispatch({type:`error`,error});throw error}finally{if(this.#retryer===retryer)this.#retryer=void 0;this.#mutationCache.runNext(this)}}#dispatch(action){const reducer=state=>{switch(action.type){case`failed`:return{...state,failureCount:action.failureCount,failureReason:action.error};case`pause`:return{...state,isPaused:true};case`continue`:return{...state,isPaused:false};case`pending`:return{...state,context:action.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:action.isPaused,status:`pending`,variables:action.variables,submittedAt:Date.now()};case`success`:return{...state,data:action.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:false};case`error`:return{...state,data:void 0,error:action.error,failureCount:state.failureCount+1,failureReason:action.error,isPaused:false,status:`error`}}};this.state=reducer(this.state);notifyManager.batch(()=>{this.#observers.forEach(observer=>{observer.onMutationUpdate(action)});this.#mutationCache.notify({mutation:this,type:`updated`,action})})}};function getDefaultState(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:false,status:`idle`,variables:void 0,submittedAt:0}}var MutationObserver=class extends Subscribable{#client;#currentResult=void 0;#currentMutation;#mutateOptions;constructor(client,options){super();this.#client=client;this.setOptions(options);this.bindMethods();this.#updateResult()}bindMethods(){this.mutate=this.mutate.bind(this);this.reset=this.reset.bind(this)}setOptions(options){const prevOptions=this.options;this.options=this.#client.defaultMutationOptions(options);if(!shallowEqualObjects(this.options,prevOptions))this.#client.getMutationCache().notify({type:`observerOptionsUpdated`,mutation:this.#currentMutation,observer:this});if(prevOptions?.mutationKey&&this.options.mutationKey&&hashKey(prevOptions.mutationKey)!==hashKey(this.options.mutationKey))this.reset();else if(this.#currentMutation?.state.status===`pending`)this.#currentMutation.setOptions(this.options)}onSubscribe(){if(this.listeners.size===1&&this.#currentMutation){this.#currentMutation.addObserver(this);this.#updateResult()}}onUnsubscribe(){if(!this.hasListeners())this.#currentMutation?.removeObserver(this)}onMutationUpdate(action){this.#updateResult();this.#notify(action)}getCurrentResult(){return this.#currentResult}reset(){this.#currentMutation?.removeObserver(this);this.#currentMutation=void 0;this.#updateResult();this.#notify()}mutate(variables,options){this.#mutateOptions=options;this.#currentMutation?.removeObserver(this);this.#currentMutation=this.#client.getMutationCache().build(this.#client,this.options);this.#currentMutation.addObserver(this);return this.#currentMutation.execute(variables)}#updateResult(){const state=this.#currentMutation?.state??getDefaultState();this.#currentResult={...state,isPending:state.status===`pending`,isSuccess:state.status===`success`,isError:state.status===`error`,isIdle:state.status===`idle`,mutate:this.mutate,reset:this.reset}}#notify(action){notifyManager.batch(()=>{if(this.#mutateOptions&&this.hasListeners()){const variables=this.#currentResult.variables;const onMutateResult=this.#currentResult.context;const context={client:this.#client,meta:this.options.meta,mutationKey:this.options.mutationKey};if(action?.type===`success`){try{this.#mutateOptions.onSuccess?.(action.data,variables,onMutateResult,context)}catch(e){Promise.reject(e)}try{this.#mutateOptions.onSettled?.(action.data,null,variables,onMutateResult,context)}catch(e){Promise.reject(e)}}else if(action?.type===`error`){try{this.#mutateOptions.onError?.(action.error,variables,onMutateResult,context)}catch(e){Promise.reject(e)}try{this.#mutateOptions.onSettled?.(void 0,action.error,variables,onMutateResult,context)}catch(e){Promise.reject(e)}}}this.listeners.forEach(listener=>{listener(this.#currentResult)})})}};function useBaseQuery(Observer,options,queryClient){const client=queryClient||useQueryClient();const defaultedOptions=computed(()=>{let resolvedOptions=options;if(typeof resolvedOptions===`function`)resolvedOptions=resolvedOptions();const clonedOptions=cloneDeepUnref(resolvedOptions);if(typeof clonedOptions.enabled===`function`)clonedOptions.enabled=clonedOptions.enabled();const defaulted=client.defaultQueryOptions(clonedOptions);defaulted._optimisticResults=client.isRestoring?.value?`isRestoring`:`optimistic`;return defaulted});const observer=new Observer(client,defaultedOptions.value);const state=defaultedOptions.value.shallow?shallowReactive(observer.getCurrentResult()):reactive(observer.getCurrentResult());let unsubscribe=()=>{};if(client.isRestoring)watch(client.isRestoring,isRestoring=>{if(!isRestoring){unsubscribe();unsubscribe=observer.subscribe(result=>{updateState(state,result)})}},{immediate:true});const updater=()=>{observer.setOptions(defaultedOptions.value);updateState(state,observer.getCurrentResult())};watch(defaultedOptions,updater);onScopeDispose(()=>{unsubscribe()});const refetch=(...args)=>{updater();return state.refetch(...args)};const suspense=()=>{return new Promise((resolve,reject)=>{let stopWatch=()=>{};const run=()=>{if(defaultedOptions.value.enabled!==false){observer.setOptions(defaultedOptions.value);const optimisticResult=observer.getOptimisticResult(defaultedOptions.value);if(optimisticResult.isStale){stopWatch();observer.fetchOptimistic(defaultedOptions.value).then(resolve,error=>{if(shouldThrowError(defaultedOptions.value.throwOnError,[error,observer.getCurrentQuery()]))reject(error);else resolve(observer.getCurrentResult())})}else{stopWatch();resolve(optimisticResult)}}};run();stopWatch=watch(defaultedOptions,run)})};watch(()=>state.error,error=>{if(state.isError&&!state.isFetching&&shouldThrowError(defaultedOptions.value.throwOnError,[error,observer.getCurrentQuery()]))throw error});const readonlyState=defaultedOptions.value.shallow?shallowReadonly(state):readonly(state);const object=toRefs(readonlyState);for(const key in state)if(typeof state[key]===`function`)object[key]=state[key];object.suspense=suspense;object.refetch=refetch;return object}function useQuery(options,queryClient){return useBaseQuery(QueryObserver,options,queryClient)}function useMutation(options,queryClient){const client=queryClient||useQueryClient();const defaultedOptions=computed(()=>{const resolvedOptions=typeof options===`function`?options():options;return client.defaultMutationOptions(cloneDeepUnref(resolvedOptions))});const observer=new MutationObserver(client,defaultedOptions.value);const state=defaultedOptions.value.shallow?shallowReactive(observer.getCurrentResult()):reactive(observer.getCurrentResult());const unsubscribe=observer.subscribe(result=>{updateState(state,result)});const mutate=(...args)=>{observer.mutate(args[0],args[1]).catch(()=>{})};watch(defaultedOptions,()=>{observer.setOptions(defaultedOptions.value)});onScopeDispose(()=>{unsubscribe()});const readonlyState=defaultedOptions.value.shallow?shallowReadonly(state):readonly(state);const resultRefs=toRefs(readonlyState);watch(()=>state.error,error=>{if(error&&shouldThrowError(defaultedOptions.value.throwOnError,[error]))throw error});return{...resultRefs,mutate,mutateAsync:state.mutate,reset:state.reset}}var AUTH_POLICY_PUBLIC=`public`;var AUTH_POLICY_AUTHENTICATED=`authenticated`;var ROUTE_VISIBILITY_PUBLIC=AUTH_POLICY_PUBLIC;var ROUTE_VISIBILITY_USER=`user`;function resolveEnabledRef(value){if(value===void 0)return true;if(typeof value===`function`)return Boolean(value());return Boolean(unref(value))}function resolveTextRef(value){return String(unref(value)||``).trim()}var ROUTE_VISIBILITY_LEVELS=Object.freeze([ROUTE_VISIBILITY_PUBLIC,ROUTE_VISIBILITY_USER]);var ROUTE_VISIBILITY_LEVEL_SET=new Set(ROUTE_VISIBILITY_LEVELS);var ROUTE_VISIBILITY_WORKSPACE=`workspace`;var ROUTE_VISIBILITY_WORKSPACE_USER=`workspace_user`;var ROUTE_VISIBILITY_TOKENS=Object.freeze([ROUTE_VISIBILITY_PUBLIC,ROUTE_VISIBILITY_USER,ROUTE_VISIBILITY_WORKSPACE,ROUTE_VISIBILITY_WORKSPACE_USER]);var ROUTE_VISIBILITY_TOKEN_SET=new Set(ROUTE_VISIBILITY_TOKENS);var OWNERSHIP_FILTER_VALUES=ROUTE_VISIBILITY_TOKENS;var SCOPED_OWNERSHIP_FILTER_SET=new Set([ROUTE_VISIBILITY_WORKSPACE,ROUTE_VISIBILITY_WORKSPACE_USER]);var ACCESS_MODE_VALUES=Object.freeze([`auto`,`always`,`never`]);function asPlainObject(value){if(!value||typeof value!==`object`||Array.isArray(value))return{};return value}function normalizePermissions(value){if(Array.isArray(value))return value.map(entry=>String(entry||``).trim()).filter(Boolean);const one=String(value||``).trim();return one?[one]:[]}function resolvePermissionAccess(access,normalizedPermissions=[]){if(normalizedPermissions.length<1)return true;return access.canAny(normalizedPermissions)}function normalizeAccessMode(value=`auto`){const normalized=String(value||`auto`).trim().toLowerCase();if(ACCESS_MODE_VALUES.includes(normalized))return normalized;throw new TypeError(`access must be one of: ${ACCESS_MODE_VALUES.join(`, `)}. Received: ${String(value||``)||`(empty)`}`)}function resolveAccessModeEnabled(accessMode=`auto`,{hasPermissionRequirements=false}={}){const normalizedMode=normalizeAccessMode(accessMode);if(normalizedMode===`always`)return true;if(normalizedMode===`never`)return false;return hasPermissionRequirements===true}function ensureAccessModeCompatibility({accessMode=`auto`,hasPermissionRequirements=false,caller=`http-web`}={}){const normalizedMode=normalizeAccessMode(accessMode);if(normalizedMode===`never`&&hasPermissionRequirements)throw new TypeError(`${caller} cannot use access:\"never\" when permission requirements are configured.`);return normalizedMode}function resolveApiSuffix(apiSuffix,context={}){if(typeof apiSuffix===`function`)return resolveTextRef(apiSuffix(context));return resolveTextRef(apiSuffix)}function resolveEnabled(value,context={}){if(typeof value===`function`)return Boolean(value(context));return resolveEnabledRef(value)}function normalizeOwnershipFilter(value=ROUTE_VISIBILITY_WORKSPACE){const normalized=String(value||`workspace`).trim().toLowerCase();if(OWNERSHIP_FILTER_VALUES.includes(normalized))return normalized;throw new TypeError(`ownershipFilter must be one of: ${OWNERSHIP_FILTER_VALUES.join(`, `)}. Received: ${String(value||``)||`(empty)`}`)}function isScopedOwnershipFilter(ownershipFilter){return SCOPED_OWNERSHIP_FILTER_SET.has(ownershipFilter)}function resolveQueryKey(queryKeyFactory,{surfaceId=``,scopeParamValue=``,ownershipFilter=ROUTE_VISIBILITY_WORKSPACE}={}){if(typeof queryKeyFactory!==`function`)throw new TypeError(`queryKeyFactory is required.`);if(isScopedOwnershipFilter(ownershipFilter))return queryKeyFactory(surfaceId,scopeParamValue,ownershipFilter);return queryKeyFactory(surfaceId,ownershipFilter)}function resolveResourceMessages(resource,defaults={}){const defaultMessages=asPlainObject(defaults);const resourceMessages=asPlainObject(asPlainObject(resource).messages);return{...defaultMessages,...resourceMessages}}function toUiErrorMessage(error,fallbackMessage=``,defaultMessage=`Request failed.`){const normalizedFallback=String(fallbackMessage||``).trim();const normalizedMessage=String(error?.message||``).trim();if(normalizedMessage&&!isGenericHttpErrorMessage(error))return normalizedMessage;if(normalizedFallback)return normalizedFallback;if(normalizedMessage)return normalizedMessage;return String(defaultMessage||`Request failed.`).trim()}function toQueryErrorMessage(error,fallbackMessage=``,defaultMessage=`Request failed.`){return error?toUiErrorMessage(error,fallbackMessage,defaultMessage):``}function hasResolvedQueryData({query=null,data=null}={}){const querySucceeded=Boolean(unref(query?.isSuccess));const hasDataPayload=unref(data)!=null;return querySucceeded||hasDataPayload}function mergeQueryMeta(queryOptions=null,meta={}){const sourceOptions=isRecord(queryOptions)?queryOptions:{};const sourceMeta=isRecord(sourceOptions.meta)?sourceOptions.meta:{};return{...sourceOptions,meta:{...sourceMeta,...meta,jskit:{...isRecord(sourceMeta.jskit)?sourceMeta.jskit:{},...isRecord(meta.jskit)?meta.jskit:{}}}}}var REQUEST_RECOVERY_META_KEYS=Object.freeze({label:`requestRecoveryLabel`,source:`requestRecoverySource`,dedupeKey:`requestRecoveryDedupeKey`,method:`requestRecoveryMethod`,dedupeWindowMs:`requestRecoveryDedupeWindowMs`});var DISABLED_REQUEST_RECOVERY_META=Object.freeze({jskit:Object.freeze({requestRecovery:false})});function normalizeRequestRecoveryInput(requestRecovery=null){if(typeof requestRecovery===`string`)return{label:requestRecovery};const source=isRecord(requestRecovery)?requestRecovery:{};for(const key of Object.keys(source))if(key!==`enabled`&&!Object.hasOwn(REQUEST_RECOVERY_META_KEYS,key))throw new TypeError(`requestRecovery.${key} is not supported; use ${Object.keys(REQUEST_RECOVERY_META_KEYS).join(`, `)} or enabled.`);return source}function normalizeRequestRecoveryValue(name,value){if(name===`dedupeWindowMs`){const numberValue=value==null||value===``?NaN:Number(value);return Number.isFinite(numberValue)?Math.max(0,numberValue):null}const text=normalizeText(value);if(!text)return null;return name===`method`?text.toUpperCase():text}function buildRequestRecoveryMeta(requestRecovery=null,defaults={}){if(requestRecovery===false)return DISABLED_REQUEST_RECOVERY_META;const source=normalizeRequestRecoveryInput(requestRecovery);if(source.enabled===false)return DISABLED_REQUEST_RECOVERY_META;const fallback=isRecord(defaults)?defaults:{};const jskit={};for(const[name,metaKey]of Object.entries(REQUEST_RECOVERY_META_KEYS)){const value=normalizeRequestRecoveryValue(name,source[name])??normalizeRequestRecoveryValue(name,fallback[name]);if(value!==null)jskit[metaKey]=value}return Object.keys(jskit).length>0?{jskit}:{}}function mergeRequestRecoveryQueryMeta(queryOptions=null,requestRecovery=null,defaults={}){const sourceOptions=isRecord(queryOptions)?queryOptions:{};let meta;if(requestRecovery==null){const presetMeta=isRecord(sourceOptions.meta?.jskit)?sourceOptions.meta.jskit:{};if(presetMeta.requestRecovery===false)return sourceOptions;const fallback=isRecord(defaults)?defaults:{};const unsetDefaults={};for(const[name,metaKey]of Object.entries(REQUEST_RECOVERY_META_KEYS))if(!hasValue(presetMeta[metaKey]))unsetDefaults[name]=fallback[name];meta=buildRequestRecoveryMeta(null,unsetDefaults)}else meta=buildRequestRecoveryMeta(requestRecovery,defaults);return Object.keys(meta).length>0?mergeQueryMeta(sourceOptions,meta):sourceOptions}function normalizeRealtimeOptions(value={}){if(value===null||value===void 0||value===false)return{};if(typeof value!==`object`||Array.isArray(value))throw new TypeError(`realtime must be an object when configured.`);return value}function hasRealtimeEventConfig(value={}){const source=normalizeRealtimeOptions(value);return Object.hasOwn(source,`event`)||Object.hasOwn(source,`events`)}function resolveOperationRealtimeOptions({realtime=void 0,fallbackRealtime=null}={}){if(realtime===false)return null;const fallback=normalizeRealtimeOptions(fallbackRealtime);const explicit=realtime==null?{}:normalizeRealtimeOptions(realtime);if(hasRealtimeEventConfig(explicit)||!hasRealtimeEventConfig(fallback))return Object.keys(explicit).length>0?explicit:null;return Object.freeze({...fallback,...explicit})}function toQueryKeyList(value){const resolved=typeof value===`function`?value():unref(value);if(!Array.isArray(resolved)||resolved.length<1)return[];if(Array.isArray(resolved[0]))return resolved.filter(entry=>Array.isArray(entry)&&entry.length>0).map(entry=>Object.freeze([...entry]));return[Object.freeze([...resolved])]}function useRealtimeQueryInvalidation({event=``,enabled=true,matches=null,queryKey=null,onEvent=null}={}){const queryClient=useQueryClient();const normalizedEvent=computed(()=>normalizeText(unref(event)));const active=computed(()=>resolveEnabledRef(enabled)&&Boolean(normalizedEvent.value));const listener=useRealtimeEvent({event:normalizedEvent,enabled:active,matches,onEvent:async context=>{if(typeof onEvent===`function`)await onEvent(context);const keys=toQueryKeyList(queryKey);for(const key of keys)await queryClient.invalidateQueries({queryKey:key})}});return Object.freeze({active:listener.active})}function useOperationRealtime({realtime=null,queryKey=null,enabled=true}={}){const source=normalizeRealtimeOptions(realtime);const eventList=[];if(Object.hasOwn(source,`event`)){const normalizedEvent=normalizeText(source.event);if(normalizedEvent)eventList.push(normalizedEvent)}if(Object.hasOwn(source,`events`)){if(!Array.isArray(source.events))throw new TypeError(`realtime.events must be an array when configured.`);for(const entry of source.events){const normalizedEvent=normalizeText(entry);if(!normalizedEvent||eventList.includes(normalizedEvent))continue;eventList.push(normalizedEvent)}}if(eventList.length<1)return null;const matches=typeof source.matches===`function`?source.matches:null;const onEvent=typeof source.onEvent===`function`?source.onEvent:null;const resolvedQueryKey=Object.hasOwn(source,`queryKey`)?source.queryKey:queryKey;const active=computed(()=>{const sourceEnabled=Object.hasOwn(source,`enabled`)?source.enabled:true;return resolveEnabledRef(enabled)&&resolveEnabledRef(sourceEnabled)});const bindings=eventList.map(event=>useRealtimeQueryInvalidation({event,enabled:active,matches,queryKey:resolvedQueryKey,onEvent}));return Object.freeze({active:computed(()=>bindings.some(binding=>Boolean(binding?.active?.value)))})}function buildEndpointReadRequestOptions({method=`GET`,query=null,transport=null}={}){const requestOptions={method:String(method||`GET`).toUpperCase()};const normalizedQuery=resolveRequestQuery(query);if(normalizedQuery)requestOptions.query=normalizedQuery;if(transport&&typeof transport===`object`)requestOptions.transport=transport;return requestOptions}function resolveRequestQuery(value=null){const source=unref(value);if(!source||typeof source!==`object`||Array.isArray(source))return null;return source}function buildEndpointWriteRequestOptions({method=`PATCH`,body=void 0,options=null,transport=null}={}){const requestOptions={method:String(method||`PATCH`).toUpperCase(),...asPlainObject(options)};if(body!==void 0)requestOptions.body=body;if(transport&&typeof transport===`object`)requestOptions.transport=transport;return requestOptions}function useEndpointResource({queryKey,path=``,enabled=true,client=null,readMethod=`GET`,writeMethod=`PATCH`,readQuery=null,transport=null,refreshOnPull=false,realtime=null,queryOptions=null,mutationOptions=null,requestRecovery=null,requestRecoveryLabel=`Request`,fallbackLoadError=`Unable to load resource.`,fallbackSaveError=`Unable to save resource.`}={}){const activeClient=client||getHttpWebClient();if(!activeClient||typeof activeClient.request!==`function`)throw new TypeError(`useEndpointResource requires a client with request().`);const normalizedPath=computed(()=>resolveTextRef(path));const queryEnabled=computed(()=>resolveEnabledRef(enabled)&&Boolean(normalizedPath.value));const query=useQuery({queryKey,queryFn:({signal})=>{const requestPath=normalizedPath.value;if(!requestPath)throw new Error(`Resource path is required.`);return activeClient.request(requestPath,{...buildEndpointReadRequestOptions({method:readMethod,query:readQuery,transport}),signal})},enabled:queryEnabled,...mergeRequestRecoveryQueryMeta(refreshOnPull?mergeQueryMeta(asPlainObject(queryOptions),{jskit:{refreshOnPull:true}}):asPlainObject(queryOptions),requestRecovery,{label:requestRecoveryLabel,method:readMethod})});const realtimeBinding=useOperationRealtime({realtime,queryKey,enabled:queryEnabled});const mutation=useMutation({mutationFn:async(request={})=>{const options=asPlainObject(request);const requestPath=resolveTextRef(options.path||normalizedPath.value);if(!requestPath)throw new Error(`Resource path is required.`);const method=String(options.method||writeMethod||`PATCH`).toUpperCase();const body=Object.hasOwn(options,`body`)?options.body:options.payload;return activeClient.request(requestPath,buildEndpointWriteRequestOptions({method,body,options:options.options,transport}))},...asPlainObject(mutationOptions)});const data=computed(()=>query.data.value);const hasResolvedData=computed(()=>hasResolvedQueryData({query,data}));const isInitialLoading=computed(()=>Boolean(queryEnabled.value&&query.isPending.value&&!hasResolvedData.value));const isFetching=computed(()=>Boolean(queryEnabled.value&&query.isFetching.value));const isRefetching=computed(()=>Boolean(isFetching.value&&!isInitialLoading.value));const isLoading=computed(()=>Boolean(isInitialLoading.value||isFetching.value));const isSaving=computed(()=>Boolean(mutation.isPending.value));const loadError=computed(()=>toQueryErrorMessage(query.error.value,fallbackLoadError,`Request failed.`));const saveError=computed(()=>toQueryErrorMessage(mutation.error.value,fallbackSaveError,`Request failed.`));async function reload(){return query.refetch()}async function save(payload,options={}){return mutation.mutateAsync({...asPlainObject(options),payload})}return Object.freeze({query,mutation,data,isInitialLoading,isFetching,isRefetching,isLoading,isSaving,loadError,saveError,realtime:realtimeBinding,reload,save})}export{QueryObserver as A,hashKey as B,AUTH_POLICY_AUTHENTICATED as C,useQuery as D,useMutation as E,notifyManager as F,partialMatchKey as G,matchMutation as H,focusManager as I,useQueryClient as J,resolveQueryValue as K,Subscribable as L,hasNextPage as M,hasPreviousPage as N,useBaseQuery as O,onlineManager as P,environmentManager as R,resolveTextRef as S,ROUTE_VISIBILITY_PUBLIC as T,matchQuery as U,hashQueryKeyByOptions as V,noop as W,getClientKey as X,cloneDeepUnref as Y,resolvePermissionAccess as _,mergeQueryMeta as a,ROUTE_VISIBILITY_WORKSPACE as b,toUiErrorMessage as c,normalizeAccessMode as d,normalizeOwnershipFilter as f,resolveEnabled as g,resolveApiSuffix as h,useRealtimeQueryInvalidation as i,Query as j,Mutation as k,asPlainObject as l,resolveAccessModeEnabled as m,resolveOperationRealtimeOptions as n,mergeRequestRecoveryQueryMeta as o,normalizePermissions as p,skipToken as q,useOperationRealtime as r,toQueryErrorMessage as s,useEndpointResource as t,ensureAccessModeCompatibility as u,resolveQueryKey as v,AUTH_POLICY_PUBLIC as w,resolveEnabledRef as x,resolveResourceMessages as y,functionalUpdate as z};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{On as unref,g as computed}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{o as normalizeSurfaceId,r as normalizePathname}from"./returnToPath-gKtcu91D.js";import{f as normalizeText}from"./normalize-BNAdWJYg.js";import{c as useWebPlacementContext,i as resolveSurfaceIdFromPlacementPathname,o as resolveSurfaceRootPathFromPlacementContext,r as resolveSurfaceDefinitionFromPlacementContext,v as resolveLinkPath}from"./placement-B5T1LR7m.js";import{t as resolveScopedApiBasePath}from"./surface-DzO5xqc8.js";import{t as resolveRuntimePathname}from"./pathname-Bb895US8.js";function useSurfaceRouteContext(){const route=useRoute();const{context:placementContext,mergeContext:mergePlacementContext}=useWebPlacementContext();const routePath=computed(()=>resolveRuntimePathname(route?.path));const currentSurfaceId=computed(()=>resolveSurfaceIdFromPlacementPathname(placementContext.value,routePath.value));return Object.freeze({route,routePath,placementContext,mergePlacementContext,currentSurfaceId})}function normalizeRouteParams(params=null){if(!params||typeof params!==`object`||Array.isArray(params))return{};const output={};for(const[rawKey,rawValue]of Object.entries(params)){const key=normalizeText(rawKey);if(!key)continue;const value=Array.isArray(rawValue)?rawValue[0]:rawValue;const normalizedValue=normalizeText(value);if(normalizedValue)output[key]=normalizedValue}return output}function materializeSurfaceRouteBase(routeBaseTemplate=`/`,{params={},strictParams=true,surface=``}={}){const normalizedParams=normalizeRouteParams(params);const missingParams=new Set;const outputPath=String(routeBaseTemplate||`/`).replace(/:([A-Za-z0-9_]+)/g,(_full,rawName)=>{const paramName=String(rawName||``).trim();const paramValue=normalizedParams[paramName];if(!paramValue){missingParams.add(paramName);return`:${paramName}`}return encodeURIComponent(paramValue)});if(strictParams&&missingParams.size>0){const surfaceLabel=String(surface||``).trim()||`(default)`;const missing=[...missingParams].sort().join(`, `);throw new Error(`Missing required surface route params for "${surfaceLabel}": ${missing}.`)}return outputPath}function resolveSurfaceBasePath(context=null,surface=``,{params={},strictParams=true}={}){const normalizedSurface=normalizeSurfaceId(surface);if(normalizedSurface&&resolveSurfaceDefinitionFromPlacementContext(context,normalizedSurface))return materializeSurfaceRouteBase(resolveSurfaceRootPathFromPlacementContext(context,normalizedSurface),{params,strictParams,surface:normalizedSurface});if(!normalizedSurface)return`/`;return normalizePathname(`/${normalizedSurface}`)}function resolveShellLinkPath({context=null,surface=``,explicitTo=``,relativePath=`/`,surfaceRelativePath=``,params={},strictParams=true}={}){const explicitTarget=String(explicitTo||``).trim();if(explicitTarget)return explicitTarget;const normalizedSurface=normalizeSurfaceId(surface);const nextRelativePath=String(surfaceRelativePath||``).trim()||String(relativePath||``).trim()||`/`;const nextSurfaceBasePath=resolveSurfaceBasePath(context,normalizedSurface,{params,strictParams});return resolveLinkPath(nextSurfaceBasePath,nextRelativePath)}function useShellLinkResolver({surface=``}={}){const{context:placementContext}=useWebPlacementContext();function resolve(relativePath=`/`,options={}){return resolveShellLinkPath({context:placementContext.value,surface:String(unref(options.surface??surface)||``),explicitTo:options.explicitTo,relativePath,surfaceRelativePath:options.surfaceRelativePath,params:options.params,strictParams:options.strictParams!==false})}return Object.freeze({resolve})}function normalizePathSuffix(value=``){const raw=normalizeText(unref(value));if(!raw)return``;return raw.startsWith(`/`)?raw:`/${raw}`}function resolveSurfaceId(value,fallback=``){const normalized=normalizeText(unref(value)).toLowerCase();if(normalized&&normalized!==`*`)return normalized;const normalizedFallback=normalizeText(unref(fallback)).toLowerCase();if(normalizedFallback&&normalizedFallback!==`*`)return normalizedFallback;return``}function resolveDefaultSurfaceIdFromPlacementContext(placementContext=null){return resolveSurfaceId(placementContext?.surfaceConfig?.defaultSurfaceId,``)}function resolveRouteParams(baseParams={},overrideParams=null){return{...normalizeRouteParams(baseParams),...normalizeRouteParams(overrideParams)}}function usePaths({routeContext:sourceRouteContext=null}={}){const routeContext=sourceRouteContext||useSurfaceRouteContext();const shellLinkResolver=useShellLinkResolver();const routeParams=computed(()=>normalizeRouteParams(routeContext.route?.params));function page(relativePath=`/`,options={}){const source=options&&typeof options===`object`&&!Array.isArray(options)?options:{};const surface=resolveSurfaceId(source.surface,routeContext.currentSurfaceId.value)||resolveDefaultSurfaceIdFromPlacementContext(routeContext.placementContext.value);if(!surface)return``;return shellLinkResolver.resolve(relativePath,{surface,explicitTo:source.explicitTo,surfaceRelativePath:source.surfaceRelativePath,params:resolveRouteParams(routeParams.value,source.params),strictParams:source.strictParams!==false})}function api(relativePath=``,options={}){const source=options&&typeof options===`object`&&!Array.isArray(options)?options:{};const surface=resolveSurfaceId(source.surface,routeContext.currentSurfaceId.value)||resolveDefaultSurfaceIdFromPlacementContext(routeContext.placementContext.value);const suffix=normalizePathSuffix(relativePath);if(!suffix)throw new TypeError(`usePaths().api(relativePath) requires a non-empty relativePath.`);const routeBase=resolveSurfaceDefinitionFromPlacementContext(routeContext.placementContext.value,surface)?.routeBase||`/`;return resolveScopedApiBasePath({routeBase,relativePath:suffix,params:resolveRouteParams(routeParams.value,source.params),strictParams:source.strictParams!==false})}return Object.freeze({route:routeContext.route,placementContext:routeContext.placementContext,currentSurfaceId:routeContext.currentSurfaceId,routeParams,page,api})}export{resolveShellLinkPath as n,useSurfaceRouteContext as r,usePaths as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ht as watch,g as computed,pn as onScopeDispose,vn as ref,xn as shallowRef}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{d as getHttpWebClient}from"./vibe64ProjectScope.local-BxTBYuRg.js";import{n as normalizeConversationTurn$1}from"./conversation-Bn7wpATa.js";import{n as useRealtimeEvent}from"./useRealtimeEvent-BNXVwzFG.js";import{t as usePaths}from"./usePaths-DdAnjVDj.js";import{o as normalizeVibe64ConversationAttachments}from"./shared-TUhK_uYM.js";import{n as useVibe64ProjectSlug}from"./useVibe64ProjectScope-D7b8n1gx.js";import{$ as vibe64SessionEventMatchesScope,D as VIBE64_SESSIONS_API_SUFFIX,O as VIBE64_SESSION_CHANGED_EVENT,b as readRefOrGetterValue,et as vibe64SessionPath}from"./index-CBo1BEk6.js";import{t as connectorDefinitions}from"./definitions-CEbi4qae.js";var CONVERSATION_LOG_REALTIME_REASONS=new Set([`project-message-changed`,`conversation-rewound`,`session-assistant-selection-updated`,`assistant-stream`,`integration-setup-skipped`,`integration-setup-completed`,`assistant-response-bundle`,`codex-app-server-agent-result`,`codex-app-server-agent-result-invalid`,`codex-app-server-agent-result-missing`,`codex-app-server-agent-result-provider-failed`,`codex-app-server-commentary`,`codex-app-server-final-assistant-message`,`codex-app-server-live-progress`,`codex-app-server-reasoning-summary`,`codex-app-server-terminal-assistant-message`,`codex-app-server-terminal-thinking-message`,`codex-app-server-terminal-user-message`,`codex-turn-outcome`,`codex-app-server-message-delivered`,`opencode-credential-failure`,`opencode-provider-failure`,`opencode-server-assistant-message`,`opencode-server-message-delivered`,`opencode-server-reasoning`,`opencode-server-tool`,`opencode-server-turn-idle`,`claude-stream-turn-idle`,`claude-stream-message`,`claude-stream-message-delivered`,`session-agent-message-cancelled`,`session-agent-message-accepted`,`session-agent-message-delivered`,`session-agent-message-failed`]);function normalizeConversationTurn(turn={},index=0){const normalized=normalizeConversationTurn$1(turn,index,{normalizeAttachments:normalizeVibe64ConversationAttachments});return normalized&&{...normalized,...isRecord(turn.integrationSetup)?{integrationSetup:turn.integrationSetup}:{}}}function isRecord(value){return Boolean(value&&typeof value===`object`&&!Array.isArray(value))}function normalizeConversationLog(payload={},options={}){return conversationTurnsWithPending((Array.isArray(payload?.conversationLog)?payload.conversationLog:[]).map((turn,index)=>normalizeConversationTurn(turn,index)).filter(Boolean),options.pending)}function conversationTurnsWithPending(turns,pending){const pendingTurnIndex=pending===true?turns.length-1:-1;return turns.map((turn,index)=>{if(index===pendingTurnIndex&&turn.user&&!turn.assistant)return{...turn,pending:true};return turn})}function sessionAgentTurnActive(session={}){return(session&&typeof session===`object`&&!Array.isArray(session)?session:{}).agentSession?.turn?.active===true}function conversationLogRealtimeShouldRefresh({payload={}}={},sessionId=``){const normalizedSessionId=String(sessionId||``).trim();const changedSessionId=String(payload.sessionId||payload.entityId||``).trim();if(!normalizedSessionId||changedSessionId!==normalizedSessionId)return false;const reason=String(payload.reason||``).trim();return Boolean(payload.conversationStream)||!reason||CONVERSATION_LOG_REALTIME_REASONS.has(reason)}function conversationLogCompletedTurnKey(session={}){const source=isRecord(session)?session:{};const turn=isRecord(source.agentSession?.turn)?source.agentSession.turn:{};const sessionId=String(source.sessionId||``).trim();const turnId=String(turn.id||``).trim();const revision=Number(source.revision);if(!sessionId||!turnId||turn.active!==false||!Number.isSafeInteger(revision)||revision<0)return``;return`${sessionId}|${revision}|${turnId}`}function useConversationIntegrationActions({turns,enabled,sessionId,projectSlug,sessionsApiPath,reloadConversationLog,httpClient}){const integrationActionPending=shallowRef(null);const integrationActionError=ref(null);const integrationConnections=shallowRef({});function connectIntegrationRequest(request={}){return runIntegrationRequestAction(request,`connect`)}function checkIntegrationRequest(request={}){return runIntegrationRequestAction(request,`status`)}function cancelIntegrationRequest(request={}){return runIntegrationRequestAction(request,`cancel`)}function skipIntegrationRequest(request={}){return runIntegrationRequestAction(request,`skip`)}function resumeIntegrationRequest(request={}){return runIntegrationRequestAction(request,`resume`)}async function runIntegrationRequestAction(request,action){const turn=turns.value.find(entry=>entry.turnId===request.turnId);if(!enabled.value||request.sessionId!==sessionId.value||integrationActionPending.value||turn?.integrationSetup?.outcome!==(action===`resume`?`completed`:`pending`)||turn.integrationSetup.requestId!==request.requestId)return false;const selection={sessionId:sessionId.value,turnId:request.turnId,requestId:request.requestId};integrationActionPending.value=selection;integrationActionError.value=null;try{if([`connect`,`cancel`,`status`].includes(action)){const path=vibe64SessionPath(sessionsApiPath.value,selection.sessionId,`/integrations`);const config=await httpClient.request(path);if(integrationActionPending.value!==selection||sessionId.value!==selection.sessionId)return false;const integrationId=turn.integrationSetup.integrationId;const integration=config?.configuration?.integrations?.[integrationId];if(!integration)throw new Error(`Choose Configure to set up this integration first.`);if(connectorDefinitions.some(provider=>provider.id===integration.provider&&(provider.configurationOnly||provider.configurationOnlyForSettings?.(integration?.settings||{})))){integrationConnections.value={...integrationConnections.value,[selection.requestId]:{status:`configuration-only`}};return true}if(integration.accountMode===`per-user`)throw new Error(`Each app user connects their account inside the application. Choose Configure for setup instructions.`);const endpoint=`${path}/${encodeURIComponent(integrationId)}/setup`;const previous=integrationConnections.value[selection.requestId];if(action===`cancel`&&!previous?.attemptId)return false;let connection=await httpClient.request(endpoint,{method:`POST`,body:{operation:action,...action===`cancel`?{attemptId:previous.attemptId}:{setupRequest:{turnId:selection.turnId,requestId:selection.requestId,configurationHash:config.baseHash}}}});if(integrationActionPending.value!==selection||sessionId.value!==selection.sessionId)return false;if(action===`cancel`){connection=await httpClient.request(endpoint,{method:`POST`,body:{operation:`status`}});if(integrationActionPending.value!==selection||sessionId.value!==selection.sessionId)return false}integrationConnections.value={...integrationConnections.value,[selection.requestId]:connection};if(connection.integrationSetup?.outcome===`completed`&&connection.integrationSetup.continuation?.status!==`accepted`){const resumed=await httpClient.request(vibe64SessionPath(sessionsApiPath.value,selection.sessionId,`/integration-setup/resume`),{method:`POST`,body:{turnId:selection.turnId,requestId:selection.requestId}});if(resumed?.ok!==true)throw new Error(resumed?.error||`Assistant continuation is not yet confirmed.`)}if(integrationActionPending.value===selection&&sessionId.value===selection.sessionId)await reloadConversationLog();return true}const result=await httpClient.request(vibe64SessionPath(sessionsApiPath.value,selection.sessionId,`/integration-setup/${action}`),{method:`POST`,body:{turnId:selection.turnId,requestId:selection.requestId}});if(result?.ok!==true)throw new Error(result?.error||`Could not update integration setup.`);if(integrationActionPending.value===selection&&sessionId.value===selection.sessionId)await reloadConversationLog();return true}catch(error){if(sessionId.value===selection.sessionId&&integrationActionPending.value===selection){integrationActionError.value={turnId:selection.turnId,message:String(error?.message||`Could not update integration setup.`)};if(action===`resume`||action===`connect`||action===`status`)await reloadConversationLog()}return false}finally{if(sessionId.value===selection.sessionId&&integrationActionPending.value===selection)integrationActionPending.value=null}}onScopeDispose(()=>{integrationActionPending.value=null});watch([sessionId,projectSlug],()=>{integrationActionPending.value=null;integrationActionError.value=null;integrationConnections.value={}});return{integrationConnections,connectIntegrationRequest,checkIntegrationRequest,cancelIntegrationRequest,integrationActionPending,integrationActionError,skipIntegrationRequest,resumeIntegrationRequest}}function useVibe64ConversationLog({active=true,projectSlug:projectSlugInput,sessionsApiPath:sessionsApiPathInput,session,conversation}={}){const paths=usePaths();const httpClient=getHttpWebClient();const projectSlug=projectSlugInput===void 0?useVibe64ProjectSlug():computed(()=>readRefOrGetterValue(projectSlugInput));const currentSession=computed(()=>readRefOrGetterValue(session)||null);const sessionId=computed(()=>String(currentSession.value?.sessionId||``).trim());const enabled=computed(()=>Boolean(readRefOrGetterValue(active)!==false&&sessionId.value));const sessionsApiPath=computed(()=>readRefOrGetterValue(sessionsApiPathInput)||paths.api(`/vibe64/sessions`,{surface:`app`}));const turns=computed(()=>conversationTurnsWithPending(conversation.turns.value,sessionAgentTurnActive(currentSession.value)));const integrationActions=useConversationIntegrationActions({turns,enabled,sessionId,projectSlug,sessionsApiPath,reloadConversationLog:conversation.reload,httpClient});let realtimeCompletionKey=``;const realtime=useRealtimeEvent({enabled,event:VIBE64_SESSION_CHANGED_EVENT,matches:context=>([`session-assistant-selection-updated`,`integration-setup-skipped`,`integration-setup-completed`].includes(context?.payload?.reason)||conversationLogCompletedTurnKey(context?.payload))&&conversationLogRealtimeShouldRefresh(context,sessionId.value)&&vibe64SessionEventMatchesScope(context?.payload,{projectSlug:projectSlug.value}),onEvent:({payload={}}={})=>{realtimeCompletionKey=conversationLogCompletedTurnKey(payload)||realtimeCompletionKey;return payload.reason===`session-assistant-selection-updated`?conversation.reload({resubscribe:true}):conversation.reload()}});watch(()=>conversationLogCompletedTurnKey(currentSession.value),key=>{if(!enabled.value||!key)return;if(key===realtimeCompletionKey){realtimeCompletionKey=``;return}conversation.reload()?.catch(()=>{})},{flush:`post`});return{...integrationActions,turns,error:conversation.error,errorReloadable:computed(()=>conversation.accessDenied?.value===false),hasMoreBefore:conversation.hasMoreBefore,loadMore:conversation.loadMore,loadMoreError:conversation.loadMoreError,loading:conversation.loading,initializing:computed(()=>!conversation.snapshot.value&&conversation.loading.value),loadingMore:conversation.loadingMore,reload:conversation.reload,realtime,visible:computed(()=>Boolean(conversation.loading.value||conversation.error.value||turns.value.length))}}export{useVibe64ConversationLog as n,normalizeConversationLog as t};
|