vibe64 0.1.52 → 0.1.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/upgrade-state.js +975 -974
- package/dist/assets/{GithubBrowserTabs-D7DveB8M.js → GithubBrowserTabs-DG2nCSNW.js} +1 -1
- package/dist/assets/{Vibe64AuthSettingsButton-DDArM5uw.js → Vibe64AuthSettingsButton-9OLqOZao.js} +1 -1
- package/dist/assets/{Vibe64DashboardShell-Ab65VYSS.js → Vibe64DashboardShell-hWNziCur.js} +1 -1
- package/dist/assets/{Vibe64DatabaseWorkspace-DHLt5bST.js → Vibe64DatabaseWorkspace-TqXOZJpI.js} +1 -1
- package/dist/assets/{Vibe64FileArea-DCqpclYH.js → Vibe64FileArea-BljhpApn.js} +1 -1
- package/dist/assets/{Vibe64OutputControls-BPDF1XfG.js → Vibe64OutputControls-Dk_DWuFb.js} +1 -1
- package/dist/assets/{Vibe64RepositoryWorkspace-C107tX19.js → Vibe64RepositoryWorkspace-CDnsAlIz.js} +1 -1
- package/dist/assets/{Vibe64SessionFiles-BKJ1Qem_.js → Vibe64SessionFiles-DjeEvtpc.js} +1 -1
- package/dist/assets/{Vibe64UiStoryboardView-CJajdYSt.js → Vibe64UiStoryboardView-idZz86bx.js} +1 -1
- package/dist/assets/{_sessionId_-BaNhTTVN.js → _sessionId_-DLLJsju9.js} +1 -1
- package/dist/assets/{_slug_-D7mzZsk3.css → _slug_-BRPxP_Yn.css} +1 -1
- package/dist/assets/{_slug_-nHO3Bg-f.js → _slug_-JgF_FQ6F.js} +7 -7
- package/dist/assets/{app-DbGzTUVN.js → app-Cuw9E-ru.js} +1 -1
- package/dist/assets/{changes-D7NjgKWf.js → changes-CoR0-8EL.js} +1 -1
- package/dist/assets/{conversation-DV8qCsqw.js → conversation-B1UoWMaA.js} +1 -1
- package/dist/assets/{dashboard-DL95BPsz.js → dashboard-DnuIxR1s.js} +1 -1
- package/dist/assets/{english-definitions-ChTTs3cC.js → english-definitions-By4b_Yl2.js} +1 -1
- package/dist/assets/{env-BdJvhqF-.js → env-KUPen-sS.js} +1 -1
- package/dist/assets/{history-DmGNxMVh.js → history-S_cJLehJ.js} +1 -1
- package/dist/assets/{index-BXZp5ztx.js → index-CNkd6O5t.js} +3 -3
- package/dist/assets/{integrations-DAYe7RkJ.js → integrations-Dmbbbs_A.js} +1 -1
- package/dist/assets/{issues-D_zOo2IW.js → issues-EeBajY3I.js} +1 -1
- package/dist/assets/{learning-ilyEoffw.js → learning-DDRM-FoP.js} +1 -1
- package/dist/assets/{project-files-CJWdFXh4.js → project-files-CQ1BLaaP.js} +1 -1
- package/dist/assets/{publish-D728amkk.js → publish-bvwc-KoQ.js} +1 -1
- package/dist/assets/{pull-requests-BsbM-5MA.js → pull-requests-Ce1ECyuL.js} +1 -1
- package/dist/assets/{repository-C8NwO4bj.js → repository-CK3osHmp.js} +1 -1
- package/dist/assets/{settings-DTLY7ZT5.js → settings-PQGw4vfn.js} +1 -1
- package/dist/assets/{useArchivedVibe64Sessions-Cc9GdKlD.js → useArchivedVibe64Sessions-BAQjW01a.js} +1 -1
- package/dist/assets/{useAssistantAttachments-DJKqt1hL.js → useAssistantAttachments-DJWb1KdF.js} +1 -1
- package/dist/assets/{useVibe64ConversationLog-Co0DhC3R.js → useVibe64ConversationLog-CjUZuvV7.js} +1 -1
- package/dist/assets/{useVibe64SessionData-D7fBm9xf.js → useVibe64SessionData-CbY_B5mC.js} +1 -1
- package/dist/assets/{vibe64SessionFocus-8fHAeoyU.js → vibe64SessionFocus-Bd3JuuZe.js} +1 -1
- package/dist/index.html +4 -4
- package/docs/colleague-usage/conversation-context.md +3 -1
- package/docs/colleague-usage/temporary-chats.md +26 -1
- package/docs/colleague-usage/workspace-preparation.md +17 -0
- package/node_modules/@jskit-ai/assistant-core/locales/en.json +1 -0
- package/node_modules/@jskit-ai/assistant-core/package.json +1 -1
- package/node_modules/@jskit-ai/assistant-runtime/package.json +1 -1
- package/node_modules/@jskit-ai/assistant-voice/package.json +1 -1
- package/node_modules/@jskit-ai/connector-google-calendar/package.json +1 -1
- package/node_modules/@jskit-ai/connectors-catalog/package.json +1 -1
- package/node_modules/@jskit-ai/connectors-core/locales/en.json +1 -0
- package/node_modules/@jskit-ai/connectors-core/package.json +1 -1
- package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +43 -43
- package/node_modules/@local/vibe64-genesis/src/server/index.js +189 -182
- package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +68 -61
- package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +532 -532
- package/package.json +7 -7
- package/server.bundle.mjs +28835 -28791
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as VProgressLinear,fr as vShow,ht as useDisplay,mr as withModifiers,n as VChipGroup,pr as withKeys,t as VChip,x as VIcon}from"./VChip-BRhZ1px1.js";import{Cn as toRaw,D as createVNode,E as createTextVNode,En as toValue,Ht as watch,On as unref,Pt as useId,Yt as withDirectives,Zn as normalizeClass,_ as createBaseVNode,b as createElementBlock,bt as renderList,et as mergeProps,g as computed,gn as reactive,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,tt as nextTick,un as isRef,v as createBlock,vn as ref,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{r as getHttpWebClient}from"./httpClient-Dj5wBWSr.js";import{n as VList,s as VListItem,t as VMenu}from"./VMenu-BaCC4Of9.js";import{t as VTextField}from"./VTextField-Dmm1M-tz.js";import{r as scopedDevelopmentApiUrl,t as resolveStudioRequestUrl}from"./studioUrls-BcpEogWH.js";import{$t as mdiFolderOutline,B as mdiCheckCircle,Bt as mdiFileOutline,C as mdiArrowLeft,Dt as mdiDotsVertical,G as mdiChevronRight,Ht as mdiFileReplaceOutline,K as mdiChevronUp,L as mdiCancel,Mr as mdiSkipNext,Ot as mdiDownload,Q as mdiClose,Qr as mdiTrayArrowUp,Rt as mdiFileImageOutline,U as mdiChevronDown,Un as mdiMagnifyPlusOutline,Vt as mdiFilePlusOutline,W as mdiChevronLeft,Yt as mdiFolderArrowUpDownOutline,Z as mdiClockOutline,Zr as mdiTrayArrowDown,Zt as mdiFolderLockOutline,b as mdiArchiveClockOutline,d as mdiAlertCircle,dn as mdiImageBrokenVariant,en as mdiFolderPlusOutline,ft as mdiContentCopy,gr as mdiRefresh,ir as mdiPencilOutline,pt as mdiContentDuplicate,qt as mdiFitToScreenOutline,ri as mdiUpload,wt as mdiDeleteOutline,zr as mdiSourceRepository,zt as mdiFileMoveOutline}from"./mdi-DwGK7nOu.js";import{i as VBtnToggle,t as VBtn}from"./VBtn-B6ryRXW-.js";import{t as VAlert}from"./VAlert-CBpSKTfy.js";import{t as VDivider}from"./VDivider-DY2s_j83.js";import{t as VDialog}from"./VDialog-CYfdjZRu.js";import{a as VCardSubtitle,i as VCardTitle,n as VCardText,o as VCardActions,r as VCardItem,t as VCard}from"./VCard-BzaViLPx.js";import{t as VSpacer}from"./VSpacer-B5ip6FSG.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-DFBUIKJZ.js";import{t as VTextarea}from"./VTextarea-CFF7cmcU.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useAssistantAttachments}from"./useAssistantAttachments-DJKqt1hL.js";import{t as useUiFeedback}from"./useUiFeedback-CZj76aLa.js";import"./shared-CEFaGI9L.js";import{n as vibe64ApiResponseError,t as vibe64ApiError}from"./vibe64ApiResponses-B4VY77Q_.js";import{t as writeClipboardText}from"./clipboard-CZs9aH3L.js";import{it as VToolbarTitle,rt as VToolbar}from"./index-BXZp5ztx.js";import{t as downloadAttachment}from"./vibe64AttachmentDownload-Cngh16Hf.js";var VIBE64_UPLOAD_MAX_BYTES=524288e3;var VIBE64_UPLOAD_MAX_LABEL=`500 MiB`;var FILE_UPLOAD_MESSAGES=Object.freeze({cancelled:`Upload was cancelled.`,failure:`File could not be uploaded.`,invalid:`The upload returned an invalid response.`});function fileUploadAbortError(message){const error=new Error(message);error.name=`AbortError`;return error}function fileUploadPayload(request){const response=request?.response;if(response&&typeof response===`object`)return response;const source=typeof response===`string`?response:String(request?.responseText||``);if(!source.trim())return null;try{return JSON.parse(source)}catch{return null}}function fileUploadProgress(event={},fileSize=0){const totalBytes=Number.isFinite(Number(fileSize))?Math.max(0,Number(fileSize)):0;const transportTotal=event.lengthComputable===true&&Number.isFinite(Number(event.total))?Math.max(0,Number(event.total)):0;if(transportTotal<1)return{bytesSent:0,progress:null,totalBytes};const transportLoaded=Number.isFinite(Number(event.loaded))?Number(event.loaded):0;const progress=Math.min(1,Math.max(0,transportLoaded/transportTotal));return{bytesSent:Math.min(totalBytes,Math.floor(totalBytes*progress)),progress,totalBytes}}function uploadFileRequest({file,messages=FILE_UPLOAD_MESSAGES,onProgress=null,path,signal=null}={}){const{cancelled,failure,invalid}=messages;return new Promise((resolve,reject)=>{if(signal?.aborted){reject(fileUploadAbortError(cancelled));return}let request;try{request=new globalThis.XMLHttpRequest}catch{reject(new Error(`${failure} Browser upload support is unavailable.`));return}let settled=false;const progressHandler=event=>{if(typeof onProgress!==`function`)return;try{onProgress(fileUploadProgress(event,file.size))}catch{}};const cleanup=()=>{signal?.removeEventListener?.(`abort`,abortHandler);request.upload?.removeEventListener?.(`progress`,progressHandler);request.onload=null;request.onerror=null;request.onabort=null;request.ontimeout=null};const settle=(callback,value)=>{if(settled)return;settled=true;cleanup();callback(value)};const abortError=()=>fileUploadAbortError(cancelled);const abortHandler=()=>{request.abort();settle(reject,abortError())};try{const body=new FormData;body.append(`file`,file,String(file.name||`attachment`));request.open(`POST`,resolveStudioRequestUrl(path),true);request.onload=()=>{const payload=fileUploadPayload(request);if(request.status>=200&&request.status<300){if(payload&&typeof payload===`object`){settle(resolve,payload);return}settle(reject,new Error(invalid));return}const error=vibe64ApiError(payload||{},`${failure} (HTTP ${request.status||`unknown`})`);error.status=Number(request.status||0);error.statusCode=error.status;settle(reject,error)};request.onerror=()=>{settle(reject,new Error(`${failure} Check your connection and try again.`))};request.onabort=()=>{settle(reject,abortError())};request.ontimeout=()=>{settle(reject,new Error(`${failure} The request timed out.`))};request.upload?.addEventListener?.(`progress`,progressHandler);signal?.addEventListener?.(`abort`,abortHandler,{once:true});if(signal?.aborted){abortHandler();return}request.withCredentials=true;request.setRequestHeader(`Accept`,`application/json`);request.send(body)}catch(error){settle(reject,error instanceof Error?error:new Error(failure))}})}var VIBE64_FILE_AREAS=Object.freeze({repo:{label:`Repo`,icon:mdiSourceRepository,scope:`session`,description:`The session's project files · Changes appear in Current changes`},"drop-zone":{label:`Session Dropzone`,icon:mdiTrayArrowUp,scope:`session`,description:`This session only · Deleted when the session is archived`},session:{label:`Session`,icon:mdiFolderLockOutline,scope:`session`,readOnly:true,description:`Session runtime files · Read only`},"project-drop-zone":{label:`Project Dropzone`,icon:mdiFolderArrowUpDownOutline,scope:`project`,description:`Shared by every session in this project · Files stay until you delete them`},backups:{label:`Project Backups`,icon:mdiArchiveClockOutline,scope:`project`,description:`Shared by every session in this project · Each file is deleted 2 weeks after its last change`}});function vibe64FileArea(area=``){return VIBE64_FILE_AREAS[area]||{label:`Files`,icon:`M13 20H4C2.9 20 2 19.11 2 18V6C2 4.89 2.89 4 4 4H10L12 6H20C21.1 6 22 6.89 22 8V11.04C21.42 10.6 20.75 10.26 20 10.11V8H4V18H13V20M23 17.3V20.8C23 21.4 22.4 22 21.7 22H16.2C15.6 22 15 21.4 15 20.7V17.2C15 16.6 15.6 16 16.2 16V14.5C16.2 13.1 17.6 12 19 12S21.8 13.1 21.8 14.5V16C22.4 16 23 16.6 23 17.3M20.5 14.5C20.5 13.7 19.8 13.2 19 13.2S17.5 13.7 17.5 14.5V16H20.5V14.5Z`,scope:`session`,description:``}}function vibe64FileTransferMessage({destination,item,mode,path:placed=``,skipped=false}){if(skipped)return``;const parts=placed.split(`/`);const where=[destination.label,...parts.slice(0,-1)].join(` › `);const renamed=parts.at(-1)!==item.name?` as “${parts.at(-1)}”`:``;return`${mode===`move`?`Moved`:`Copied`} “${item.name}” to ${where}${renamed}.`}function vibe64DroppedFiles(dataTransfer){if([...dataTransfer?.items||[]].some(item=>item.webkitGetAsEntry?.()?.isDirectory))throw new Error(`Drop files rather than folders, or upload a zip of the folder.`);return[...dataTransfer?.files||[]]}function formatFileSize(bytes=0){const value=Math.max(0,Number(bytes)||0);if(value<1024)return`${value} B`;if(value<1024**2)return`${(value/1024).toFixed(1)} KiB`;if(value<1024**3)return`${(value/1024**2).toFixed(1)} MiB`;return`${(value/1024**3).toFixed(1)} GiB`}var _hoisted_1$6={class:`vibe64-image-preview`};var _hoisted_2$6=[`aria-label`,`aria-busy`];var _hoisted_3$6={key:0,class:`vibe64-image-preview__failed`,role:`alert`};var _hoisted_4$5=[`src`,`alt`];var _hoisted_5$4={class:`vibe64-image-preview__caption`};var _hoisted_6$3={class:`vibe64-image-preview__details`};var _sfc_main$6={__name:`Vibe64ImagePreview`,props:{name:{type:String,required:true},size:{type:Number,default:null},src:{type:String,required:true}},setup(__props){const props=__props;const status=ref(`loading`);const version=ref(0);const actualSize=ref(false);const dimensions=ref(null);const details=computed(()=>[dimensions.value?`${dimensions.value.width} × ${dimensions.value.height} px`:``,Number.isFinite(props.size)?formatFileSize(props.size):``].filter(Boolean).join(` · `)||props.name);function loaded(event){const{naturalWidth:width,naturalHeight:height}=event.target;dimensions.value=width&&height?{width,height}:null;status.value=`loaded`}function retry(){version.value+=1;status.value=`loading`}watch(()=>props.src,()=>{status.value=`loading`;actualSize.value=false;dimensions.value=null});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`figure`,_hoisted_1$6,[createBaseVNode(`div`,{class:normalizeClass([`vibe64-image-preview__stage`,{"vibe64-image-preview__stage--actual":actualSize.value}]),"aria-label":`Image preview of ${__props.name}`,"aria-busy":status.value===`loading`?`true`:void 0,role:`group`,tabindex:`0`},[status.value===`failed`?(openBlock(),createElementBlock(`div`,_hoisted_3$6,[createVNode(VIcon,{icon:unref(mdiImageBrokenVariant),size:`40`,"aria-hidden":`true`},null,8,[`icon`]),_cache[4]||(_cache[4]=createBaseVNode(`p`,null,`This image could not be shown. Try again or download it.`,-1)),createVNode(VBtn,{"prepend-icon":unref(mdiRefresh),variant:`tonal`,onClick:retry},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Try again`,-1)])]),_:1},8,[`prepend-icon`])])):(openBlock(),createElementBlock(Fragment,{key:1},[status.value===`loading`?(openBlock(),createBlock(VSkeletonLoader,{key:0,class:`vibe64-image-preview__loading`,type:`image`})):createCommentVNode(``,true),(openBlock(),createElementBlock(`img`,{key:`${__props.src}:${version.value}`,src:__props.src,alt:__props.name,class:normalizeClass({"vibe64-image-preview__image--hidden":status.value!==`loaded`}),onLoad:loaded,onError:_cache[0]||(_cache[0]=$event=>status.value=`failed`),onClick:_cache[1]||(_cache[1]=$event=>actualSize.value=!actualSize.value)},null,42,_hoisted_4$5))],64))],10,_hoisted_2$6),createBaseVNode(`figcaption`,_hoisted_5$4,[createBaseVNode(`span`,_hoisted_6$3,toDisplayString(details.value),1),createVNode(VBtn,{disabled:status.value!==`loaded`,"prepend-icon":actualSize.value?unref(mdiFitToScreenOutline):unref(mdiMagnifyPlusOutline),"aria-pressed":actualSize.value?`true`:`false`,variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>actualSize.value=!actualSize.value)},{default:withCtx(()=>[createTextVNode(toDisplayString(actualSize.value?`Fit to window`:`Actual size`),1)]),_:1},8,[`disabled`,`prepend-icon`,`aria-pressed`])])])}}};var Vibe64ImagePreview_default=_plugin_vue_export_helper_default(_sfc_main$6,[[`__scopeId`,`data-v-7e30c775`]]);var FILE_PREVIEW_IMAGE_TYPES=Object.freeze({avif:`image/avif`,bmp:`image/bmp`,gif:`image/gif`,ico:`image/x-icon`,jpeg:`image/jpeg`,jpg:`image/jpeg`,png:`image/png`,svg:`image/svg+xml`,webp:`image/webp`});function filePreviewImageType(fileName=``){const name=String(fileName||``).split(`/`).at(-1);const extension=name.includes(`.`)?name.split(`.`).at(-1).toLowerCase():``;return Object.hasOwn(FILE_PREVIEW_IMAGE_TYPES,extension)?FILE_PREVIEW_IMAGE_TYPES[extension]:``}var __testables=Object.freeze({FILE_PREVIEW_IMAGE_TYPES});var FILE_UPLOAD_MAX_ITEMS=200;var ACTIVE_PHASES=[`preparing`,`queued`,`uploading`,`delivering`];var FINISHING_NOTE_DELAY_MS=1500;function useVibe64FileUploads({endpoint,onUploaded=()=>{},onAsk=()=>{},finishingNote=``}={}){const targets=new WeakMap;const finishing=reactive(new WeakSet);const queue=useAssistantAttachments({sessionId:computed(()=>String(toValue(endpoint)||``)),maxItems:FILE_UPLOAD_MAX_ITEMS,uploadConcurrency:1,maxBytes:Number.MAX_SAFE_INTEGER,async onUploaded(uploaded=[]){for(const receipt of uploaded)onUploaded(receipt);return{accepted:false}},async uploadAttachment(_key,file,{onProgress,signal}={}){const raw=toRaw(file);const target=targets.get(raw);if(!target)throw new Error(`Choose the file again.`);if(file.size>524288e3)throw new Error(`Larger than the ${VIBE64_UPLOAD_MAX_LABEL} upload limit.`);const query=new URLSearchParams({path:target.path,...target.conflict?{conflict:target.conflict}:{}});let timer=null;const progress=update=>{onProgress?.(update);if(finishingNote&&update?.progress===1&&!timer)timer=setTimeout(()=>finishing.add(raw),FINISHING_NOTE_DELAY_MS)};try{const result=await uploadFileRequest({file,onProgress:progress,signal,path:`${target.endpoint}/upload?${query}`});if(result?.ok===false)throw new Error(vibe64ApiResponseError(result,`File could not be uploaded.`));return{...result,attachmentId:result.path,fileName:file.name}}finally{clearTimeout(timer);finishing.delete(raw)}}});const items=queue.queueItems;const active=computed(()=>items.value.some(item=>ACTIVE_PHASES.includes(item.phase)));function clearFinished(){for(const item of[...items.value])if([`ready`,`cancelled`].includes(item.phase))queue.removeAttachment(item)}function uploadFiles(files=[],{folder=``,conflicts=[],conflict=``}={}){if(!items.value.some(item=>item.phase===`failed`||ACTIVE_PHASES.includes(item.phase)))clearFinished();for(const file of files)targets.set(toRaw(file),{endpoint:String(toValue(endpoint)||``),path:[folder,file.name].filter(Boolean).join(`/`),conflict:conflicts.includes(file.name)?conflict:``});return queue.uploadFiles(files)}const conflicts=ref({names:[],files:[],folder:``});async function start(files=[],folder=``){if(!files.length)return;if(files.length>FILE_UPLOAD_MAX_ITEMS)throw new Error(`Upload up to ${FILE_UPLOAD_MAX_ITEMS} files at a time.`);const result=await getHttpWebClient().request(`${toValue(endpoint)}/conflicts`,{method:`POST`,body:{path:folder,names:[...new Set(files.map(file=>file.name))]}});if(result?.ok===false)throw new Error(vibe64ApiResponseError(result,`Upload failed.`));if(result.existing?.length){onAsk();conflicts.value={names:result.existing,files,folder};return}uploadFiles(files,{folder})}function resolveConflict(choice=``){const{names,files,folder}=conflicts.value;conflicts.value={names:[],files:[],folder:``};if(!choice)return;const chosen=choice===`skip`?files.filter(file=>!names.includes(file.name)):files;if(chosen.length)uploadFiles(chosen,{folder,conflicts:names,conflict:choice===`skip`?``:choice})}function cancelAll(){for(const item of[...items.value])if(ACTIVE_PHASES.includes(item.phase))queue.cancelAttachment(item)}function clear(){for(const item of[...items.value])if(!ACTIVE_PHASES.includes(item.phase))queue.removeAttachment(item)}function note(item){return item?.phase===`uploading`&&item.file&&finishing.has(toRaw(item.file))?finishingNote:``}return{active,cancel:queue.cancelAttachment,cancelAll,clear,conflicts,items,note,remove:queue.removeAttachment,resolveConflict,retry:queue.retryAttachment,start,uploadFiles}}function fileAreaUrl(base,operation,filePath,query={}){return`${base}/${operation}?${new URLSearchParams({path:filePath,...query})}`}async function fileAreaRequest(endpoint,options){const result=await getHttpWebClient().request(endpoint,options);if(result?.ok===false)throw new Error(vibe64ApiResponseError(result,`File operation failed.`));return result}function useVibe64FileAreaBrowser({areaInfo,busy,fileHeading,focus,props,root}){const directory=ref(``);const entries=ref([]);const location=ref(``);const expired=ref(false);const hasMore=ref(false);const nextOffset=ref(0);const loading=ref(false);const loadError=ref(``);const file=ref(null);const draft=ref(``);const dirty=computed(()=>typeof file.value?.text===`string`&&draft.value!==file.value.text);const fileName=computed(()=>file.value?.path.split(`/`).at(-1)||``);const fileEntry=computed(()=>file.value&&{name:fileName.value,path:file.value.path,type:`file`});let generation=0;let pendingRefresh=false;const breadcrumbs=computed(()=>[{title:areaInfo.value.label,path:``},...directory.value.split(`/`).filter(Boolean).map((name,index,parts)=>({title:name,path:parts.slice(0,index+1).join(`/`)}))]);const folderLabel=computed(()=>breadcrumbs.value.map(crumb=>crumb.title).join(` › `));const imageSiblings=computed(()=>file.value?.image?entries.value.filter(entry=>entry.type===`file`&&filePreviewImageType(entry.name)):[]);async function loadDirectory(target=``,append=false,{quiet=false,focus:focusFolder=false}={}){const current=++generation;if(!quiet)loading.value=true;loadError.value=``;try{const result=await fileAreaRequest(fileAreaUrl(props.base,`tree`,target,{offset:append?nextOffset.value:0}));if(current!==generation)return;if(!quiet)file.value=null;directory.value=target;entries.value=append?[...entries.value,...result.tree.children]:result.tree.children;hasMore.value=result.tree.hasMore===true;nextOffset.value=result.tree.nextOffset;location.value=result.location||``;expired.value=result.expired===true;if(focusFolder){loading.value=false;await nextTick();focus.focusFolder()}}catch(error){if(current===generation)loadError.value=error.message}finally{if(current===generation)loading.value=false}}async function openEntry(entry,{focus:focusFile=true}={}){if(entry.type===`directory`)return loadDirectory(entry.path,false,{focus:true});if(filePreviewImageType(entry.name)){generation+=1;loading.value=false;file.value={image:true,path:entry.path,size:entry.size,src:scopedDevelopmentApiUrl(fileAreaUrl(props.base,`download`,entry.path,{inline:`1`}),props.projectSlug)};await nextTick();root.value?.querySelector(`.vibe64-image-preview__stage`)?.focus();return}const current=++generation;loading.value=true;try{const result=await fileAreaRequest(fileAreaUrl(props.base,`file`,entry.path));if(current!==generation)return;file.value=result.file;draft.value=result.file.text}catch(error){if(current!==generation)return;file.value={path:entry.path,message:error.message}}finally{if(current===generation)loading.value=false}if(focusFile&¤t===generation){await nextTick();fileHeading.value?.focus()}}async function closeFile(){const path=file.value?.path||``;file.value=null;if(pendingRefresh)await refresh();await nextTick();focus.rowElement(path)?.focus()}function stepImage(step){const images=imageSiblings.value;const index=images.findIndex(entry=>entry.path===file.value.path);if(images.length>1)openEntry(images[(index+step+images.length)%images.length])}function refresh(){if(dirty.value||busy.value){pendingRefresh=true;return}pendingRefresh=false;if(file.value&&!file.value.image)return openEntry({type:`file`,path:file.value.path,name:fileName.value},{focus:false});return loadDirectory(directory.value,false,{quiet:Boolean(file.value)})}function reloadListing(){if(file.value)pendingRefresh=true;else loadDirectory(directory.value,false,{quiet:true})}watch(()=>props.base,()=>{directory.value=``;loadDirectory()},{immediate:true});watch(()=>props.refreshKey,()=>{if(props.active)refresh();else pendingRefresh=true});watch(()=>props.agentActive,(working,wasWorking)=>{if(!wasWorking||working)return;if(props.active)refresh();else pendingRefresh=true});watch([()=>props.active,dirty],([active,changed])=>{if(active&&!changed&&pendingRefresh)refresh()});onScopeDispose(()=>{generation+=1});return{breadcrumbs,closeFile,directory,dirty,draft,entries,expired,file,fileEntry,fileName,folderLabel,hasMore,imageSiblings,loadDirectory,loadError,loading,location,openEntry,refresh,reloadListing,stepImage}}function validName(name){const trimmed=name.trim();return Boolean(trimmed)&&!/[/\\]/u.test(trimmed)&&![`.`,`..`].includes(trimmed)}function useVibe64FileAreaCommands({browser,busy,emit,feedback,fileHeading,focus,props}){const{directory,file,draft,loadDirectory}=browser;const dialogOpen=ref(false);const dialogOperation=ref(``);const dialogEntry=ref(null);const dialogName=ref(``);const nameError=ref(``);const newFileOpen=ref(false);const newFileName=ref(``);const newFileText=ref(``);const transferItem=ref(null);const dialogTitle=computed(()=>({delete:`Delete “${dialogEntry.value?.name}”?`,rename:`Rename “${dialogEntry.value?.name}”`,mkdir:`New folder`})[dialogOperation.value]||``);async function command(run,fallback=`File operation failed.`){if(busy.value)return;busy.value=true;try{await run()}catch(error){feedback.error(error,fallback)}finally{busy.value=false}}function save(){return command(async()=>{const result=await fileAreaRequest(`${props.base}/file`,{method:`PUT`,body:{path:file.value.path,baseHash:file.value.hash,text:draft.value}});file.value=result.file;draft.value=result.file.text})}function saveShortcut(){if(browser.dirty.value&&!busy.value)save()}function openNewFile(){focus.rememberFocus();newFileName.value=``;newFileText.value=``;nameError.value=``;newFileOpen.value=true}function createFile(){if(!validName(newFileName.value)){nameError.value=`Enter a file name without slashes.`;return}nameError.value=``;return command(async()=>{const result=await fileAreaRequest(`${props.base}/file`,{method:`POST`,body:{path:[directory.value,newFileName.value.trim()].filter(Boolean).join(`/`),text:newFileText.value}});newFileOpen.value=false;await loadDirectory(directory.value,false,{quiet:true});file.value=result.file;draft.value=result.file.text;focus.forgetFocus();await nextTick();fileHeading.value?.focus()},`The file could not be created.`)}function openDialog(operation,entry=null){focus.rememberFocus(entry?.path);dialogOperation.value=operation;dialogEntry.value=entry;dialogName.value=entry?.name||``;nameError.value=``;dialogOpen.value=true}function confirmDialog(){const operation=dialogOperation.value;if(operation!==`delete`&&!validName(dialogName.value)){nameError.value=`Enter a name without slashes.`;return}return command(async()=>{const suffix=operation===`mkdir`?`directory`:operation===`delete`?`file`:`rename`;const destination=[operation===`mkdir`?directory.value:dialogEntry.value.path.split(`/`).slice(0,-1).join(`/`),dialogName.value.trim()].filter(Boolean).join(`/`);await fileAreaRequest(`${props.base}/${suffix}`,{method:operation===`delete`?`DELETE`:`POST`,body:{path:operation===`mkdir`?destination:dialogEntry.value.path,...operation===`rename`?{destination}:{}}});dialogOpen.value=false;if(file.value&&dialogEntry.value?.path===file.value.path)file.value=null;await loadDirectory(directory.value)})}function openTransfer(entry){focus.rememberFocus(entry.path);transferItem.value=entry}function transferred(event){transferItem.value=null;if(event.skipped)return;feedback.success(vibe64FileTransferMessage(event));if(event.mode===`move`&&file.value?.path===event.item.path)file.value=null;if(event.mode===`move`||event.destination.area===props.area)loadDirectory(directory.value,false,{quiet:true});emit(`transferred`,event)}function copyLocation(){return command(async()=>{await writeClipboardText(browser.location.value);feedback.success(`AI path copied.`)})}return{confirmDialog,copyLocation,createFile,dialogEntry,dialogName,dialogOpen,dialogOperation,dialogTitle,nameError,newFileName,newFileOpen,newFileText,openDialog,openNewFile,openTransfer,save,saveShortcut,transferItem,transferred}}function useVibe64FileAreaFocus({root}){let returnFocus=null;function rowElement(path){return path?root.value?.querySelector(`[data-path="${path.replace(/["\\]/gu,`\\$&`)}"]`):null}function focusFolder(){root.value?.querySelector(`[data-path], .vibe64-file-area__empty h3`)?.focus()}function rememberFocus(path=``){const active=globalThis.document?.activeElement;returnFocus=active&&!active.closest(`.v-overlay`)?active:path}function forgetFocus(){returnFocus=null}async function restoreFocus(){const target=returnFocus;returnFocus=null;await nextTick();const element=typeof target===`string`?rowElement(target):target;if(element?.isConnected)element.focus();else if(target!==null)focusFolder()}return{focusFolder,forgetFocus,rememberFocus,restoreFocus,rowElement}}function useVibe64FileAreaUploads({browser,canWrite,feedback,focus,props}){const dragDepth=ref(0);let uploadRefreshTimer=null;const uploads=useVibe64FileUploads({endpoint:computed(()=>props.base),onAsk:()=>focus.rememberFocus(),onUploaded:()=>{clearTimeout(uploadRefreshTimer);uploadRefreshTimer=setTimeout(browser.reloadListing,250)}});function dragEnter(event){if(canWrite.value&&event.dataTransfer?.types.includes(`Files`))dragDepth.value+=1}function dragOver(event){if(event.dataTransfer)event.dataTransfer.dropEffect=canWrite.value?`copy`:`none`}function dragLeave(){dragDepth.value=Math.max(0,dragDepth.value-1)}function dropFiles(event){dragDepth.value=0;if(!canWrite.value)return;try{return startUploads(vibe64DroppedFiles(event.dataTransfer))}catch(error){feedback.error(error)}}async function startUploads(files){try{await uploads.start(files,browser.directory.value)}catch(error){feedback.error(error,`Upload failed.`)}}onScopeDispose(()=>{clearTimeout(uploadRefreshTimer)});return{dragDepth,dragEnter,dragLeave,dragOver,dropFiles,startUploads,uploads}}var _hoisted_1$5=[`data-path`,`disabled`,`onClick`];var _hoisted_2$5={class:`vibe64-file-area__open-text`};var _hoisted_3$5={class:`vibe64-file-area__open-name`};var _hoisted_4$4={class:`vibe64-file-area__open-detail`};var _sfc_main$5={__name:`Vibe64FileAreaListing`,props:{busy:{type:Boolean,default:false},canTransfer:{type:Boolean,default:false},canWrite:{type:Boolean,default:false},downloading:{type:Array,default:()=>[]},entries:{type:Array,required:true},hasMore:{type:Boolean,default:false},mobile:{type:Boolean,default:false},readOnly:{type:Boolean,default:false}},emits:[`delete`,`download`,`open`,`rename`,`show-more`,`transfer`],setup(__props,{emit:__emit}){const emit=__emit;function entryIcon(entry){if(entry.type===`directory`)return mdiFolderOutline;return filePreviewImageType(entry.name)?mdiFileImageOutline:mdiFileOutline}function entrySubtitle(entry){if(entry.type!==`file`)return`Folder`;const expiry=entry.expiresAt?` · Deleted after ${new Date(entry.expiresAt).toLocaleDateString()}`:``;return`${formatFileSize(entry.size)}${expiry}`}return(_ctx,_cache)=>{return openBlock(),createBlock(VList,{class:`vibe64-file-area__body vibe64-file-area__listing`,"aria-label":`Files and folders`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.entries,entry=>{return openBlock(),createBlock(VListItem,{key:entry.path,class:`vibe64-file-area__row`},{append:withCtx(()=>[entry.type===`file`&&!__props.mobile?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiDownload),"aria-label":`Download ${entry.name}`,loading:__props.downloading.includes(entry.path),title:`Download`,variant:`text`,onClick:withModifiers($event=>emit(`download`,entry.path),[`stop`])},null,8,[`icon`,`aria-label`,`loading`,`onClick`])):createCommentVNode(``,true),__props.canWrite||__props.canTransfer||__props.mobile?(openBlock(),createBlock(VMenu,{key:1},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps({ref_for:true},menuProps,{icon:unref(mdiDotsVertical),"aria-label":`Actions for ${entry.name}`,variant:`text`,onClick:_cache[0]||(_cache[0]=withModifiers(()=>{},[`stop`]))}),null,16,[`icon`,`aria-label`])]),default:withCtx(()=>[createVNode(VList,{class:`v64-focus-rings`},{default:withCtx(()=>[entry.type===`file`&&__props.mobile?(openBlock(),createBlock(VListItem,{key:0,"prepend-icon":unref(mdiDownload),title:`Download`,onClick:$event=>emit(`download`,entry.path)},null,8,[`prepend-icon`,`onClick`])):createCommentVNode(``,true),__props.canTransfer?(openBlock(),createBlock(VListItem,{key:1,"prepend-icon":unref(mdiFileMoveOutline),title:__props.readOnly?`Copy to…`:`Move or copy…`,onClick:$event=>emit(`transfer`,entry)},null,8,[`prepend-icon`,`title`,`onClick`])):createCommentVNode(``,true),__props.canWrite?(openBlock(),createBlock(VListItem,{key:2,"prepend-icon":unref(mdiPencilOutline),title:`Rename`,onClick:$event=>emit(`rename`,entry)},null,8,[`prepend-icon`,`onClick`])):createCommentVNode(``,true),__props.canWrite?(openBlock(),createBlock(VListItem,{key:3,"prepend-icon":unref(mdiDeleteOutline),title:`Delete`,onClick:$event=>emit(`delete`,entry)},null,8,[`prepend-icon`,`onClick`])):createCommentVNode(``,true)]),_:2},1024)]),_:2},1024)):createCommentVNode(``,true)]),default:withCtx(()=>[createBaseVNode(`button`,{class:`vibe64-file-area__open`,"data-path":entry.path,disabled:__props.busy,type:`button`,onClick:$event=>emit(`open`,entry)},[createVNode(VIcon,{class:`vibe64-file-area__open-icon`,icon:entryIcon(entry),"aria-hidden":`true`},null,8,[`icon`]),createBaseVNode(`span`,_hoisted_2$5,[createBaseVNode(`span`,_hoisted_3$5,toDisplayString(entry.name),1),createBaseVNode(`span`,_hoisted_4$4,toDisplayString(entrySubtitle(entry)),1)])],8,_hoisted_1$5)]),_:2},1024)}),128)),__props.hasMore?(openBlock(),createBlock(VBtn,{key:0,class:`ma-3`,variant:`text`,disabled:__props.busy,onClick:_cache[1]||(_cache[1]=$event=>emit(`show-more`))},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Show more`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)]),_:1})}}};var Vibe64FileAreaListing_default=_plugin_vue_export_helper_default(_sfc_main$5,[[`__scopeId`,`data-v-450741a0`]]);var _hoisted_1$4={class:`vibe64-file-area__toolbar`};var _hoisted_2$4={key:0,class:`vibe64-file-area__crumbs`,"aria-label":`Folder`};var _hoisted_3$4={key:1,class:`vibe64-file-area__crumb-current`,"aria-current":`location`};var _hoisted_4$3={key:1,class:`vibe64-file-area__actions`};var _hoisted_5$3={key:2,class:`vibe64-file-area__actions`};var _sfc_main$4={__name:`Vibe64FileAreaToolbar`,props:{archiveAvailable:{type:Boolean,default:false},archiveDownloading:{type:Boolean,default:false},breadcrumbs:{type:Array,required:true},busy:{type:Boolean,default:false},canWrite:{type:Boolean,default:false},directory:{type:String,default:``},loading:{type:Boolean,default:false},location:{type:String,default:``},mobile:{type:Boolean,default:false}},emits:[`copy-location`,`download-archive`,`new-file`,`new-folder`,`open-folder`,`refresh`,`upload`],setup(__props,{emit:__emit}){const emit=__emit;return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$4,[__props.directory?(openBlock(),createElementBlock(`nav`,_hoisted_2$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.breadcrumbs,(crumb,index)=>{return openBlock(),createElementBlock(Fragment,{key:crumb.path},[index?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiChevronRight),size:`18`,"aria-hidden":`true`},null,8,[`icon`])):createCommentVNode(``,true),index===__props.breadcrumbs.length-1?(openBlock(),createElementBlock(`span`,_hoisted_3$4,toDisplayString(crumb.title),1)):(openBlock(),createBlock(VBtn,{key:2,disabled:__props.loading||__props.busy,variant:`text`,onClick:$event=>emit(`open-folder`,crumb.path)},{default:withCtx(()=>[createTextVNode(toDisplayString(crumb.title),1)]),_:2},1032,[`disabled`,`onClick`]))],64)}),128))])):createCommentVNode(``,true),!__props.mobile?(openBlock(),createElementBlock(`div`,_hoisted_4$3,[__props.archiveAvailable?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiDownload),variant:`text`,loading:__props.archiveDownloading,onClick:_cache[0]||(_cache[0]=$event=>emit(`download-archive`))},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`Download archive`,-1)])]),_:1},8,[`prepend-icon`,`loading`])):createCommentVNode(``,true),__props.location?(openBlock(),createBlock(VBtn,{key:1,"prepend-icon":unref(mdiContentCopy),variant:`text`,onClick:_cache[1]||(_cache[1]=$event=>emit(`copy-location`))},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(`Copy AI path`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true),createVNode(VBtn,{icon:unref(mdiRefresh),"aria-label":`Refresh files`,title:`Refresh files`,variant:`text`,disabled:__props.loading||__props.busy,onClick:_cache[2]||(_cache[2]=$event=>emit(`refresh`))},null,8,[`icon`,`disabled`]),__props.canWrite?(openBlock(),createElementBlock(Fragment,{key:2},[createVNode(VBtn,{"prepend-icon":unref(mdiFolderPlusOutline),variant:`text`,disabled:__props.busy,onClick:_cache[3]||(_cache[3]=$event=>emit(`new-folder`))},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(`New folder`,-1)])]),_:1},8,[`prepend-icon`,`disabled`]),createVNode(VBtn,{"prepend-icon":unref(mdiFilePlusOutline),variant:`text`,disabled:__props.busy,onClick:_cache[4]||(_cache[4]=$event=>emit(`new-file`))},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(`New file`,-1)])]),_:1},8,[`prepend-icon`,`disabled`]),createVNode(VBtn,{"prepend-icon":unref(mdiUpload),color:`primary`,variant:`flat`,onClick:_cache[5]||(_cache[5]=$event=>emit(`upload`))},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Upload`,-1)])]),_:1},8,[`prepend-icon`])],64)):createCommentVNode(``,true)])):(openBlock(),createElementBlock(`div`,_hoisted_5$3,[__props.canWrite?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiUpload),"aria-label":`Upload files`,color:`primary`,variant:`tonal`,onClick:_cache[6]||(_cache[6]=$event=>emit(`upload`))},null,8,[`icon`])):createCommentVNode(``,true),createVNode(VMenu,null,{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{icon:unref(mdiDotsVertical),"aria-label":`More folder actions`,variant:`text`}),null,16,[`icon`])]),default:withCtx(()=>[createVNode(VList,{class:`v64-focus-rings`},{default:withCtx(()=>[__props.canWrite?(openBlock(),createBlock(VListItem,{key:0,"prepend-icon":unref(mdiFilePlusOutline),title:`New file`,disabled:__props.busy,onClick:_cache[7]||(_cache[7]=$event=>emit(`new-file`))},null,8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),__props.canWrite?(openBlock(),createBlock(VListItem,{key:1,"prepend-icon":unref(mdiFolderPlusOutline),title:`New folder`,disabled:__props.busy,onClick:_cache[8]||(_cache[8]=$event=>emit(`new-folder`))},null,8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),__props.location?(openBlock(),createBlock(VListItem,{key:2,"prepend-icon":unref(mdiContentCopy),title:`Copy AI path`,onClick:_cache[9]||(_cache[9]=$event=>emit(`copy-location`))},null,8,[`prepend-icon`])):createCommentVNode(``,true),__props.archiveAvailable?(openBlock(),createBlock(VListItem,{key:3,"prepend-icon":unref(mdiDownload),title:`Download archive`,disabled:__props.archiveDownloading,onClick:_cache[10]||(_cache[10]=$event=>emit(`download-archive`))},null,8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),createVNode(VListItem,{"prepend-icon":unref(mdiRefresh),title:`Refresh`,disabled:__props.loading||__props.busy,onClick:_cache[11]||(_cache[11]=$event=>emit(`refresh`))},null,8,[`prepend-icon`,`disabled`])]),_:1})]),_:1})]))])}}};var Vibe64FileAreaToolbar_default=_plugin_vue_export_helper_default(_sfc_main$4,[[`__scopeId`,`data-v-08f0d563`]]);var _hoisted_1$3={key:0,class:`vibe64-conflict-dialog__names`};var _hoisted_2$3={key:0};var _hoisted_3$3={class:`vibe64-conflict-dialog__question`};var _sfc_main$3={__name:`Vibe64FileConflictDialog`,props:{folderLabel:{type:String,default:``},names:{type:Array,default:()=>[]}},emits:[`choose`,`closed`],setup(__props){const props=__props;const titleId=`vibe64-conflict-dialog-${useId()}`;const title=computed(()=>props.names.length===1?`“${props.names[0]}” already exists`:`${props.names.length} items already exist`);function numberedName(name=``){const dot=name.lastIndexOf(`.`);return dot>0?`${name.slice(0,dot)} (1)${name.slice(dot)}`:`${name} (1)`}const choices=computed(()=>{const one=props.names.length===1;return[{value:`replace`,icon:mdiFileReplaceOutline,title:`Replace`,subtitle:one?`Overwrite the item that is there`:`Overwrite the items that are there`},{value:`keep-both`,icon:mdiContentDuplicate,title:`Keep both`,subtitle:`Add a number to the new name, like “${numberedName(props.names[0])}”`},{value:`skip`,icon:mdiSkipNext,title:`Skip`,subtitle:one?`Leave the item that is there`:`Leave those items and do the rest`}]});return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":Boolean(__props.names.length),"aria-labelledby":titleId,"max-width":`440`,onAfterLeave:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`closed`)),"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>$event||_ctx.$emit(`choose`,``))},{default:withCtx(()=>[createVNode(VCard,{class:`vibe64-conflict-dialog v64-focus-rings`},{default:withCtx(()=>[createVNode(VCardItem,null,{default:withCtx(()=>[createVNode(VCardTitle,{id:titleId,class:`vibe64-conflict-dialog__title`},{default:withCtx(()=>[createTextVNode(toDisplayString(title.value),1)]),_:1}),createVNode(VCardSubtitle,{class:`vibe64-conflict-dialog__subtitle`},{default:withCtx(()=>[createTextVNode(`In `+toDisplayString(__props.folderLabel),1)]),_:1})]),_:1}),createVNode(VCardText,{class:`pb-0`},{default:withCtx(()=>[__props.names.length>1?(openBlock(),createElementBlock(`ul`,_hoisted_1$3,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.names.slice(0,5),name=>{return openBlock(),createElementBlock(`li`,{key:name},toDisplayString(name),1)}),128)),__props.names.length>5?(openBlock(),createElementBlock(`li`,_hoisted_2$3,`and `+toDisplayString(__props.names.length-5)+` more`,1)):createCommentVNode(``,true)])):createCommentVNode(``,true),createBaseVNode(`p`,_hoisted_3$3,`What should happen to `+toDisplayString(__props.names.length===1?`it`:`them`)+`?`,1)]),_:1}),createVNode(VList,{class:`vibe64-conflict-dialog__choices`,"aria-label":`Choose what happens`,role:`group`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(choices.value,choice=>{return openBlock(),createBlock(VListItem,{key:choice.value,"prepend-icon":choice.icon,role:`button`,subtitle:choice.subtitle,title:choice.title,lines:`two`,onClick:$event=>_ctx.$emit(`choose`,choice.value)},null,8,[`prepend-icon`,`subtitle`,`title`,`onClick`])}),128))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`choose`,``))},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Cancel`,-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,[`model-value`])}}};var Vibe64FileConflictDialog_default=_plugin_vue_export_helper_default(_sfc_main$3,[[`__scopeId`,`data-v-b7082c05`]]);var _hoisted_1$2={class:`vibe64-transfer-dialog__chip-label`};var _hoisted_2$2={class:`vibe64-transfer-dialog__crumbs`,"aria-label":`Destination folder`};var _hoisted_3$2={key:1,class:`vibe64-transfer-dialog__crumb-current`,"aria-current":`location`};var _hoisted_4$2={key:3,class:`vibe64-transfer-dialog__hint`};var _hoisted_5$2={key:5,class:`vibe64-transfer-dialog__hint`};var _hoisted_6$2={class:`vibe64-transfer-dialog__footer`};var _hoisted_7$2={key:0,class:`vibe64-transfer-dialog__actions`};var _sfc_main$2={__name:`Vibe64FileTransferDialog`,props:{destinations:{type:Array,default:()=>[]},item:{type:Object,default:null},readOnly:{type:Boolean,default:false},sourceArea:{type:String,required:true},sourceBase:{type:String,required:true},sourceLabel:{type:String,required:true}},emits:[`close`,`closed`,`done`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{smAndDown:mobile}=useDisplay();const feedback=useUiFeedback({source:`vibe64.files.transfer`});const mode=ref(`copy`);const destinationKey=ref(``);const folder=ref(``);const folders=ref([]);const hasMore=ref(false);const nextOffset=ref(0);const loading=ref(false);const loadError=ref(``);const expired=ref(false);const busy=ref(false);const conflictNames=ref([]);const titleId=`vibe64-transfer-dialog-${useId()}`;let generation=0;const destination=computed(()=>props.destinations.find(candidate=>candidate.key===destinationKey.value)||null);const sameArea=computed(()=>destination.value?.area===props.sourceArea&&!destination.value?.sessionId);const crumbs=computed(()=>[{title:destination.value?.label||``,path:``},...folder.value.split(`/`).filter(Boolean).map((name,index,parts)=>({title:name,path:parts.slice(0,index+1).join(`/`)}))]);const targetLabel=computed(()=>crumbs.value.map(crumb=>crumb.title).join(` › `));const itemFolder=computed(()=>props.item?.path.split(`/`).slice(0,-1).join(`/`)||``);function insideItself(candidate){return sameArea.value&&props.item?.type===`directory`&&(candidate===props.item.path||candidate.startsWith(`${props.item.path}/`))}const blockedReason=computed(()=>{if(insideItself(folder.value))return`A folder cannot go inside itself.`;if(sameArea.value&&mode.value===`move`&&folder.value===itemFolder.value)return`It is already in this folder.`;return``});const title=computed(()=>props.readOnly?`Copy to`:`Move or copy`);const actionLabel=computed(()=>mode.value===`move`?`Move here`:`Copy here`);const actionDisabled=computed(()=>Boolean(blockedReason.value)||loading.value||Boolean(loadError.value)||expired.value);async function request(url,options){const result=await getHttpWebClient().request(url,options);if(result?.ok===false)throw new Error(vibe64ApiResponseError(result,`Move or copy failed.`));return result}async function browse(path=``,more=false){const current=++generation;const target=destination.value;if(!target)return;loading.value=true;loadError.value=``;try{const query=new URLSearchParams({path,offset:more?nextOffset.value:0});const result=await request(`${target.base}/tree?${query}`);if(current!==generation)return;folder.value=path;const found=result.tree.children.filter(entry=>entry.type===`directory`);folders.value=more?[...folders.value,...found]:found;hasMore.value=result.tree.hasMore===true;nextOffset.value=result.tree.nextOffset;expired.value=result.expired===true}catch(error){if(current===generation)loadError.value=error.message}finally{if(current===generation)loading.value=false}}watch(()=>props.item,item=>{if(!item)return;mode.value=`copy`;conflictNames.value=[];const preferred=props.destinations.find(candidate=>candidate.area!==props.sourceArea||candidate.sessionId);destinationKey.value=(preferred||props.destinations[0])?.key||``},{immediate:true});watch([()=>props.item,destinationKey],([item])=>{folder.value=``;folders.value=[];if(item)browse(``)},{immediate:true});function close(){if(!busy.value)emit(`close`)}async function run(task){busy.value=true;try{await task()}catch(error){feedback.error(error,`Move or copy failed.`)}finally{busy.value=false}}async function transfer(conflict){const target=destination.value;const result=await request(`${props.sourceBase}/transfer`,{method:`POST`,body:{path:props.item.path,mode:mode.value,targetArea:target.area,targetPath:folder.value,conflict,...target.sessionId?{targetSessionId:target.sessionId}:{}}});emit(`done`,{destination:target,item:props.item,mode:mode.value,path:result.path||``,skipped:result.skipped===true})}function confirm(){return run(async()=>{const result=await request(`${destination.value.base}/conflicts`,{method:`POST`,body:{path:folder.value,names:[props.item.name]}});if(result.existing?.length){conflictNames.value=result.existing;return}await transfer(`fail`)})}function resolveConflict(choice){conflictNames.value=[];if(choice)run(()=>transfer(choice))}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":Boolean(__props.item),"aria-labelledby":titleId,fullscreen:unref(mobile),persistent:busy.value,"max-width":`560`,scrollable:``,onAfterLeave:_cache[4]||(_cache[4]=$event=>_ctx.$emit(`closed`)),"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>$event||close())},{default:withCtx(()=>[__props.item?(openBlock(),createBlock(VCard,{key:0,class:`vibe64-transfer-dialog v64-focus-rings`},{default:withCtx(()=>[unref(mobile)?(openBlock(),createBlock(VToolbar,{key:0,class:`vibe64-transfer-dialog__bar`,color:`surface`},{default:withCtx(()=>[createVNode(VBtn,{icon:unref(mdiClose),"aria-label":`Close`,disabled:busy.value,onClick:close},null,8,[`icon`,`disabled`]),createVNode(VToolbarTitle,{id:titleId,class:`vibe64-transfer-dialog__title`},{default:withCtx(()=>[createTextVNode(toDisplayString(title.value),1)]),_:1}),createVNode(VBtn,{class:`vibe64-transfer-dialog__bar-action me-2`,color:`primary`,variant:`text`,disabled:actionDisabled.value,loading:busy.value,onClick:confirm},{default:withCtx(()=>[createTextVNode(toDisplayString(actionLabel.value),1)]),_:1},8,[`disabled`,`loading`])]),_:1})):createCommentVNode(``,true),createVNode(VCardItem,null,{default:withCtx(()=>[!unref(mobile)?(openBlock(),createBlock(VCardTitle,{key:0,id:titleId,class:`vibe64-transfer-dialog__title`},{default:withCtx(()=>[createTextVNode(toDisplayString(title.value),1)]),_:1})):createCommentVNode(``,true),createVNode(VCardSubtitle,{class:`vibe64-transfer-dialog__subtitle`},{default:withCtx(()=>[createVNode(VIcon,{icon:__props.item.type===`directory`?unref(mdiFolderOutline):unref(mdiFileOutline),size:`18`,"aria-hidden":`true`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(__props.item.name)+` · from `+toDisplayString(__props.sourceLabel),1)]),_:1})]),_:1}),createVNode(VCardText,{class:`vibe64-transfer-dialog__body`},{default:withCtx(()=>[!__props.readOnly?(openBlock(),createBlock(VBtnToggle,{key:0,modelValue:mode.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>mode.value=$event),class:`vibe64-transfer-dialog__mode`,color:`primary`,divided:``,mandatory:``,role:`radiogroup`,rounded:`pill`,variant:`outlined`,"aria-label":`Move or copy`},{default:withCtx(()=>[createVNode(VBtn,{value:`copy`,"prepend-icon":unref(mdiContentCopy),role:`radio`,"aria-checked":String(mode.value===`copy`)},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Copy`,-1)])]),_:1},8,[`prepend-icon`,`aria-checked`]),createVNode(VBtn,{value:`move`,"prepend-icon":unref(mdiFileMoveOutline),role:`radio`,"aria-checked":String(mode.value===`move`)},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Move`,-1)])]),_:1},8,[`prepend-icon`,`aria-checked`])]),_:1},8,[`modelValue`])):createCommentVNode(``,true),_cache[10]||(_cache[10]=createBaseVNode(`h3`,{class:`vibe64-transfer-dialog__label`},`Destination`,-1)),createVNode(VChipGroup,{modelValue:destinationKey.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>destinationKey.value=$event),class:`vibe64-transfer-dialog__areas`,column:``,mandatory:``,"selected-class":`vibe64-transfer-dialog__chip--selected`,"aria-label":`Destination area`,role:`radiogroup`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.destinations,option=>{return openBlock(),createBlock(VChip,{key:option.key,"aria-checked":String(destinationKey.value===option.key),filter:``,"prepend-icon":option.icon,role:`radio`,size:`large`,value:option.key,variant:`outlined`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_1$2,toDisplayString(option.label),1)]),_:2},1032,[`aria-checked`,`prepend-icon`,`value`])}),128))]),_:1},8,[`modelValue`]),createBaseVNode(`nav`,_hoisted_2$2,[(openBlock(true),createElementBlock(Fragment,null,renderList(crumbs.value,(crumb,index)=>{return openBlock(),createElementBlock(Fragment,{key:crumb.path},[index?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiChevronRight),size:`18`,"aria-hidden":`true`},null,8,[`icon`])):createCommentVNode(``,true),index===crumbs.value.length-1?(openBlock(),createElementBlock(`span`,_hoisted_3$2,toDisplayString(crumb.title),1)):(openBlock(),createBlock(VBtn,{key:2,disabled:loading.value||busy.value,variant:`text`,onClick:$event=>browse(crumb.path)},{default:withCtx(()=>[createTextVNode(toDisplayString(crumb.title),1)]),_:2},1032,[`disabled`,`onClick`]))],64)}),128))]),loading.value?(openBlock(),createBlock(VSkeletonLoader,{key:1,type:`list-item@3`})):loadError.value?(openBlock(),createBlock(VAlert,{key:2,type:`error`,variant:`tonal`,density:`compact`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>browse(folder.value))},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Retry`,-1)])]),_:1})]),default:withCtx(()=>[createTextVNode(toDisplayString(loadError.value)+` `,1)]),_:1})):expired.value?(openBlock(),createElementBlock(`p`,_hoisted_4$2,`This Session Dropzone has expired.`)):folders.value.length?(openBlock(),createBlock(VList,{key:4,class:`vibe64-transfer-dialog__folders`,"aria-label":`Folders`,role:`group`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(folders.value,entry=>{return openBlock(),createBlock(VListItem,{key:entry.path,role:`button`,disabled:busy.value||insideItself(entry.path),"prepend-icon":unref(mdiFolderOutline),title:entry.name,"append-icon":unref(mdiChevronRight),onClick:$event=>browse(entry.path)},null,8,[`disabled`,`prepend-icon`,`title`,`append-icon`,`onClick`])}),128))]),_:1})):(openBlock(),createElementBlock(`p`,_hoisted_5$2,`No folders here. `+toDisplayString(mode.value===`move`?`Move`:`Copy`)+` into this folder, or open another one.`,1)),hasMore.value&&!loading.value?(openBlock(),createBlock(VBtn,{key:6,variant:`text`,disabled:busy.value,onClick:_cache[3]||(_cache[3]=$event=>browse(folder.value,true))},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Show more folders`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)]),_:1}),createVNode(VDivider),createBaseVNode(`div`,_hoisted_6$2,[createBaseVNode(`p`,{class:normalizeClass([`vibe64-transfer-dialog__target`,{"vibe64-transfer-dialog__target--blocked":blockedReason.value}]),"aria-live":`polite`},toDisplayString(blockedReason.value||`Into ${targetLabel.value}`),3),!unref(mobile)?(openBlock(),createElementBlock(`div`,_hoisted_7$2,[createVNode(VBtn,{variant:`text`,disabled:busy.value,onClick:close},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,variant:`flat`,disabled:actionDisabled.value,loading:busy.value,onClick:confirm},{default:withCtx(()=>[createTextVNode(toDisplayString(actionLabel.value),1)]),_:1},8,[`disabled`,`loading`])])):createCommentVNode(``,true)])]),_:1})):createCommentVNode(``,true),createVNode(Vibe64FileConflictDialog_default,{"folder-label":targetLabel.value,names:conflictNames.value,onChoose:resolveConflict},null,8,[`folder-label`,`names`])]),_:1},8,[`model-value`,`fullscreen`,`persistent`])}}};var Vibe64FileTransferDialog_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-9c8c8c03`]]);var _hoisted_1$1={key:0,class:`vibe64-upload-queue v64-focus-rings`,"aria-label":`Uploads`};var _hoisted_2$1={class:`vibe64-upload-queue__header`};var _hoisted_3$1={class:`vibe64-upload-queue__heading`};var _hoisted_4$1=[`id`];var _hoisted_5$1={class:`vibe64-upload-queue__text`};var _hoisted_6$1=[`title`];var _hoisted_7$1={class:`vibe64-upload-queue__announcement`,"aria-live":`polite`,role:`status`};var _sfc_main$1={__name:`Vibe64FileUploadQueue`,props:{active:{type:Boolean,default:false},items:{type:Array,default:()=>[]},note:{type:Function,default:()=>``}},emits:[`cancel`,`cancel-all`,`clear`,`remove`,`retry`],setup(__props){const props=__props;const ACTIVE=[`preparing`,`queued`,`uploading`,`delivering`];const expanded=ref(true);const listId=useId();const plural=(count,word)=>`${count} ${word}${count===1?``:`s`}`;const summary=computed(()=>{const counted=props.items.filter(item=>![`cancelled`,`failed`].includes(item.phase));const totalBytes=counted.reduce((sum,item)=>sum+(Number(item.totalBytes)||0),0);const sentBytes=counted.reduce((sum,item)=>sum+(item.phase===`ready`?Number(item.totalBytes)||0:Number(item.bytesSent)||0),0);const count=phases=>props.items.filter(item=>phases.includes(item.phase)).length;const done=count([`ready`]);const failed=count([`failed`]);const cancelled=count([`cancelled`]);const waiting=count(ACTIVE);const percent=totalBytes>0?Math.min(100,Math.round(sentBytes/totalBytes*100)):0;const outcome=[done&&`${done} uploaded`,failed&&`${failed} failed`,cancelled&&`${cancelled} cancelled`].filter(Boolean).join(` · `);if(waiting)return{done,failed,percent,title:`Uploading ${plural(waiting,`file`)}`,detail:`${formatFileSize(sentBytes)} of ${formatFileSize(totalBytes)} · ${percent}%${outcome?` · ${outcome}`:``}`};if(failed)return{done,failed,percent,title:`${plural(failed,`upload`)} failed`,detail:outcome};if(!done)return{done,failed,percent,title:`Uploads cancelled`,detail:outcome};return{done,failed,percent,title:`${plural(done,`file`)} uploaded`,detail:outcome}});const announcement=computed(()=>{if(!props.items.length)return``;return props.active?summary.value.title:`${summary.value.title}. ${summary.value.detail}`});function statusText(item){switch(item.phase){case`queued`:case`preparing`:return`Waiting · ${formatFileSize(item.totalBytes)}`;case`uploading`:return props.note(item)||(item.progress===null?`Uploading`:`${formatFileSize(item.bytesSent)} of ${formatFileSize(item.totalBytes)} · ${Math.round(item.progress)}%`);case`delivering`:return`Finishing`;case`ready`:return`Uploaded · ${formatFileSize(item.totalBytes)}`;case`cancelled`:return`Cancelled`;default:return item.error||`Upload failed`}}function statusIcon(item){return{ready:`M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M10 17L5 12L6.41 10.59L10 14.17L17.59 6.58L19 8L10 17Z`,failed:`M13,13H11V7H13M13,17H11V15H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z`,cancelled:`M12 2C17.5 2 22 6.5 22 12S17.5 22 12 22 2 17.5 2 12 6.5 2 12 2M12 4C10.1 4 8.4 4.6 7.1 5.7L18.3 16.9C19.3 15.5 20 13.8 20 12C20 7.6 16.4 4 12 4M16.9 18.3L5.7 7.1C4.6 8.4 4 10.1 4 12C4 16.4 7.6 20 12 20C13.9 20 15.6 19.4 16.9 18.3Z`,uploading:`M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z`,delivering:`M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z`}[item.phase]||`M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22C6.47,22 2,17.5 2,12A10,10 0 0,1 12,2M12.5,7V12.25L17,14.92L16.25,16.15L11,13V7H12.5Z`}function statusColor(item){return{ready:`success`,failed:`error`,uploading:`primary`,delivering:`primary`}[item.phase]||void 0}return(_ctx,_cache)=>{return __props.items.length?(openBlock(),createElementBlock(`section`,_hoisted_1$1,[createBaseVNode(`header`,_hoisted_2$1,[createVNode(VIcon,{class:`vibe64-upload-queue__header-icon`,color:__props.active?`primary`:summary.value.failed?`error`:`success`,icon:__props.active?unref(mdiUpload):summary.value.failed?unref(mdiAlertCircle):unref(mdiCheckCircle),"aria-hidden":`true`},null,8,[`color`,`icon`]),createBaseVNode(`div`,_hoisted_3$1,[createBaseVNode(`h3`,null,toDisplayString(summary.value.title),1),createBaseVNode(`p`,null,toDisplayString(summary.value.detail),1)]),__props.active?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`cancel-all`))},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Cancel all`,-1)])]),_:1})):createCommentVNode(``,true),createVNode(VBtn,{icon:expanded.value?unref(mdiChevronDown):unref(mdiChevronUp),"aria-label":expanded.value?`Hide upload list`:`Show upload list`,"aria-expanded":expanded.value?`true`:`false`,"aria-controls":unref(listId),variant:`text`,onClick:_cache[1]||(_cache[1]=$event=>expanded.value=!expanded.value)},null,8,[`icon`,`aria-label`,`aria-expanded`,`aria-controls`]),!__props.active?(openBlock(),createBlock(VBtn,{key:1,icon:unref(mdiClose),"aria-label":`Close uploads`,variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>_ctx.$emit(`clear`))},null,8,[`icon`])):createCommentVNode(``,true)]),__props.active?(openBlock(),createBlock(VProgressLinear,{key:0,"model-value":summary.value.percent,"aria-label":`Uploads ${summary.value.percent}% complete`,color:`primary`,height:`4`},null,8,[`model-value`,`aria-label`])):createCommentVNode(``,true),withDirectives(createBaseVNode(`ol`,{id:unref(listId),class:`vibe64-upload-queue__items`},[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.items,item=>{return openBlock(),createElementBlock(`li`,{key:item.clientId,class:`vibe64-upload-queue__item`},[createVNode(VIcon,{icon:statusIcon(item),color:statusColor(item),size:`20`,"aria-hidden":`true`},null,8,[`icon`,`color`]),createBaseVNode(`div`,_hoisted_5$1,[createBaseVNode(`span`,{class:`vibe64-upload-queue__name`,title:item.fileName},toDisplayString(item.fileName),9,_hoisted_6$1),createBaseVNode(`span`,{class:normalizeClass([`vibe64-upload-queue__status`,{"vibe64-upload-queue__status--error":item.phase===`failed`}])},toDisplayString(statusText(item)),3),item.phase===`uploading`||item.phase===`delivering`?(openBlock(),createBlock(VProgressLinear,{key:0,"aria-label":`${item.fileName} upload progress`,indeterminate:item.progress===null,"model-value":item.progress??0,color:`primary`,height:`4`,rounded:``},null,8,[`aria-label`,`indeterminate`,`model-value`])):createCommentVNode(``,true)]),ACTIVE.includes(item.phase)?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiClose),"aria-label":`Cancel ${item.fileName}`,title:`Cancel ${item.fileName}`,variant:`text`,onClick:$event=>_ctx.$emit(`cancel`,item)},null,8,[`icon`,`aria-label`,`title`,`onClick`])):(openBlock(),createElementBlock(Fragment,{key:1},[item.phase===`failed`||item.phase===`cancelled`?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiRefresh),"aria-label":`Try ${item.fileName} again`,title:`Try ${item.fileName} again`,variant:`text`,onClick:$event=>_ctx.$emit(`retry`,item)},null,8,[`icon`,`aria-label`,`title`,`onClick`])):createCommentVNode(``,true),createVNode(VBtn,{icon:unref(mdiClose),"aria-label":`Remove ${item.fileName} from the list`,title:`Remove ${item.fileName} from the list`,variant:`text`,onClick:$event=>_ctx.$emit(`remove`,item)},null,8,[`icon`,`aria-label`,`title`,`onClick`])],64))])}),128))],8,_hoisted_4$1),[[vShow,expanded.value]]),createBaseVNode(`span`,_hoisted_7$1,toDisplayString(announcement.value),1)])):createCommentVNode(``,true)}}};var Vibe64FileUploadQueue_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-77fc8cb8`]]);var _hoisted_1=[`aria-label`];var _hoisted_2={key:0,class:`vibe64-file-area__drop-target`,role:`status`};var _hoisted_3={key:2,class:`vibe64-file-area__description`};var _hoisted_4={key:4,class:`vibe64-file-area__body pa-4`};var _hoisted_5={class:`vibe64-file-area__file-bar`};var _hoisted_6=[`title`];var _hoisted_7={class:`vibe64-file-area__file-heading`};var _hoisted_8=[`title`];var _hoisted_9={class:`vibe64-file-area__file-folder`};var _hoisted_10={class:`vibe64-file-area__file-actions`};var _hoisted_11=[`aria-label`];var _hoisted_12={key:3,class:`vibe64-file-area__empty`};var _hoisted_13={key:1,class:`vibe64-file-area__body vibe64-file-area__empty`};var _hoisted_14={tabindex:`-1`};var _hoisted_15={key:0};var _hoisted_16={key:1,class:`vibe64-file-area__empty-actions`};var _hoisted_17={key:0,class:`vibe64-file-area__dialog-text`};var _sfc_main={__name:`Vibe64FileArea`,props:{active:{type:Boolean,default:true},agentActive:{type:Boolean,default:false},archived:{type:Boolean,default:false},area:{type:String,required:true},base:{type:String,required:true},destinations:{type:Array,default:()=>[]},projectSlug:{type:String,default:``},refreshKey:{type:Number,default:0},sessionId:{type:String,default:``}},emits:[`transferred`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{smAndDown:mobile}=useDisplay();const feedback=useUiFeedback({source:`vibe64.files`});const areaInfo=computed(()=>vibe64FileArea(props.area));const readOnly=computed(()=>areaInfo.value.readOnly===true);const root=ref(null);const fileHeading=ref(null);const uploadInput=ref(null);const busy=ref(false);const downloading=ref([]);const archiveName=computed(()=>`${props.sessionId}.tar.gz`);const dialogTitleId=`vibe64-file-dialog-${useId()}`;const newFileTitleId=`vibe64-new-file-dialog-${useId()}`;const focus=useVibe64FileAreaFocus({root});const{restoreFocus}=focus;const browser=useVibe64FileAreaBrowser({areaInfo,busy,fileHeading,focus,props,root});const{breadcrumbs,closeFile,directory,dirty,draft,entries,expired,file,fileEntry,fileName,folderLabel,hasMore,imageSiblings,loadDirectory,loadError,loading,location,openEntry,refresh,stepImage}=browser;const canWrite=computed(()=>!readOnly.value&&!expired.value);const{dragDepth,dragEnter,dragLeave,dragOver,dropFiles,startUploads,uploads}=useVibe64FileAreaUploads({browser,canWrite,feedback,focus,props});const{confirmDialog,copyLocation,createFile,dialogEntry,dialogName,dialogOpen,dialogOperation,dialogTitle,nameError,newFileName,newFileOpen,newFileText,openDialog,openNewFile,openTransfer,save,saveShortcut,transferItem,transferred}=useVibe64FileAreaCommands({browser,busy,emit,feedback,fileHeading,focus,props});function chooseFiles(){uploadInput.value?.click()}function pickFiles(event){const files=[...event.target.files||[]];event.target.value=``;return startUploads(files)}function previewKey(event){if(!file.value?.image||event.defaultPrevented||event.target.closest?.(`input, textarea, [role='dialog'], .v-overlay`))return;if(event.key!==`Escape`&&event.target.closest?.(`.vibe64-image-preview__stage--actual`))return;if(event.key===`Escape`)closeFile();else if(event.key===`ArrowLeft`)stepImage(-1);else if(event.key===`ArrowRight`)stepImage(1);else return;event.preventDefault()}async function download(target,operation=`download`){if(downloading.value.includes(target))return;downloading.value=[...downloading.value,target];try{await downloadAttachment(scopedDevelopmentApiUrl(fileAreaUrl(props.base,operation,target),props.projectSlug),target.split(`/`).at(-1),`Download failed.`)}catch(error){feedback.error(error,`Download failed.`)}finally{downloading.value=downloading.value.filter(candidate=>candidate!==target)}}function barAction(icon,label){return mobile.value?{icon,"aria-label":label.replace(`…`,``),title:label,variant:`text`}:{"prepend-icon":icon,text:label,variant:`text`}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{ref_key:`root`,ref:root,class:normalizeClass([`vibe64-file-area v64-focus-rings`,{"vibe64-file-area--mobile":unref(mobile)}]),"aria-label":readOnly.value?`${areaInfo.value.label} files, read only`:areaInfo.value.label,onDragenter:_cache[23]||(_cache[23]=withModifiers((...args)=>unref(dragEnter)&&unref(dragEnter)(...args),[`prevent`])),onDragover:_cache[24]||(_cache[24]=withModifiers((...args)=>unref(dragOver)&&unref(dragOver)(...args),[`prevent`])),onDragleave:_cache[25]||(_cache[25]=withModifiers((...args)=>unref(dragLeave)&&unref(dragLeave)(...args),[`prevent`])),onDrop:_cache[26]||(_cache[26]=withModifiers((...args)=>unref(dropFiles)&&unref(dropFiles)(...args),[`prevent`])),onKeydown:previewKey},[unref(dragDepth)>0&&canWrite.value?(openBlock(),createElementBlock(`div`,_hoisted_2,[createVNode(VIcon,{icon:unref(mdiTrayArrowDown),size:`40`,"aria-hidden":`true`},null,8,[`icon`]),createBaseVNode(`span`,null,`Drop to upload to `+toDisplayString(unref(folderLabel)),1)])):createCommentVNode(``,true),!unref(file)?(openBlock(),createBlock(Vibe64FileAreaToolbar_default,{key:1,"archive-available":__props.archived&&__props.area===`session`,"archive-downloading":downloading.value.includes(archiveName.value),breadcrumbs:unref(breadcrumbs),busy:busy.value,"can-write":canWrite.value,directory:unref(directory),loading:unref(loading),location:unref(location),mobile:unref(mobile),onCopyLocation:unref(copyLocation),onDownloadArchive:_cache[0]||(_cache[0]=$event=>download(archiveName.value,`archive`)),onNewFile:unref(openNewFile),onNewFolder:_cache[1]||(_cache[1]=$event=>unref(openDialog)(`mkdir`)),onOpenFolder:_cache[2]||(_cache[2]=$event=>unref(loadDirectory)($event,false,{focus:true})),onRefresh:unref(refresh),onUpload:chooseFiles},null,8,[`archive-available`,`archive-downloading`,`breadcrumbs`,`busy`,`can-write`,`directory`,`loading`,`location`,`mobile`,`onCopyLocation`,`onNewFile`,`onRefresh`])):createCommentVNode(``,true),createBaseVNode(`input`,{ref_key:`uploadInput`,ref:uploadInput,type:`file`,multiple:``,class:`d-none`,"aria-label":`Choose files to upload`,onChange:pickFiles},null,544),!unref(file)&&areaInfo.value.description?(openBlock(),createElementBlock(`p`,_hoisted_3,toDisplayString(areaInfo.value.description),1)):createCommentVNode(``,true),unref(loading)?(openBlock(),createBlock(VSkeletonLoader,{key:3,type:`list-item-two-line@5`,class:`vibe64-file-area__body`})):unref(loadError)?(openBlock(),createElementBlock(`div`,_hoisted_4,[createVNode(VAlert,{type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(loadError)),1)]),_:1}),createVNode(VBtn,{class:`mt-3`,variant:`tonal`,onClick:unref(refresh)},{default:withCtx(()=>[..._cache[27]||(_cache[27]=[createTextVNode(`Try again`,-1)])]),_:1},8,[`onClick`])])):unref(file)?(openBlock(),createElementBlock(Fragment,{key:5},[createBaseVNode(`div`,_hoisted_5,[createBaseVNode(`span`,{title:unref(dirty)?`Save or discard your changes first`:`Back to folder`},[createVNode(VBtn,{icon:unref(mdiArrowLeft),"aria-label":`Back to folder`,variant:`text`,disabled:unref(dirty)||busy.value,onClick:unref(closeFile)},null,8,[`icon`,`disabled`,`onClick`])],8,_hoisted_6),createBaseVNode(`div`,_hoisted_7,[createBaseVNode(`h3`,{ref_key:`fileHeading`,ref:fileHeading,class:`vibe64-file-area__file-name`,title:unref(file).path,tabindex:`-1`},toDisplayString(unref(fileName)),9,_hoisted_8),createBaseVNode(`p`,_hoisted_9,toDisplayString(unref(folderLabel)),1)]),createBaseVNode(`div`,_hoisted_10,[unref(dirty)?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VBtn,{variant:`text`,disabled:busy.value,onClick:_cache[3]||(_cache[3]=$event=>draft.value=unref(file).text)},{default:withCtx(()=>[..._cache[28]||(_cache[28]=[createTextVNode(`Discard`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,variant:`flat`,loading:busy.value,onClick:unref(save)},{default:withCtx(()=>[..._cache[29]||(_cache[29]=[createTextVNode(`Save`,-1)])]),_:1},8,[`loading`,`onClick`])],64)):(openBlock(),createElementBlock(Fragment,{key:1},[unref(imageSiblings).length>1?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VBtn,{icon:unref(mdiChevronLeft),"aria-label":`Previous image`,title:`Previous image (←)`,variant:`text`,onClick:_cache[4]||(_cache[4]=$event=>unref(stepImage)(-1))},null,8,[`icon`]),createVNode(VBtn,{icon:unref(mdiChevronRight),"aria-label":`Next image`,title:`Next image (→)`,variant:`text`,onClick:_cache[5]||(_cache[5]=$event=>unref(stepImage)(1))},null,8,[`icon`])],64)):createCommentVNode(``,true),createVNode(VBtn,mergeProps(barAction(unref(mdiDownload),`Download`),{"aria-label":`Download file`,loading:downloading.value.includes(unref(file).path),onClick:_cache[6]||(_cache[6]=$event=>download(unref(file).path))}),null,16,[`loading`]),__props.destinations.length?(openBlock(),createBlock(VBtn,mergeProps({key:1},barAction(unref(mdiFileMoveOutline),readOnly.value?`Copy to…`:`Move or copy…`),{disabled:busy.value,onClick:_cache[7]||(_cache[7]=$event=>unref(openTransfer)(unref(fileEntry)))}),null,16,[`disabled`])):createCommentVNode(``,true),canWrite.value?(openBlock(),createBlock(VBtn,{key:2,icon:unref(mdiDeleteOutline),"aria-label":`Delete file`,title:`Delete`,variant:`text`,disabled:busy.value,onClick:_cache[8]||(_cache[8]=$event=>unref(openDialog)(`delete`,unref(fileEntry)))},null,8,[`icon`,`disabled`])):createCommentVNode(``,true)],64))])]),unref(file).image?(openBlock(),createBlock(Vibe64ImagePreview_default,{key:unref(file).src,class:`vibe64-file-area__body`,name:unref(fileName),size:unref(file).size,src:unref(file).src},null,8,[`name`,`size`,`src`])):canWrite.value&&typeof unref(file).text===`string`?(openBlock(),createBlock(VTextarea,{key:1,modelValue:unref(draft),"onUpdate:modelValue":_cache[9]||(_cache[9]=$event=>isRef(draft)?draft.value=$event:null),"aria-label":`Contents of ${unref(fileName)}`,class:`vibe64-file-area__text`,"hide-details":``,readonly:busy.value,rows:`18`,variant:`outlined`,onKeydown:[withKeys(withModifiers(unref(saveShortcut),[`ctrl`,`prevent`]),[`s`]),withKeys(withModifiers(unref(saveShortcut),[`meta`,`prevent`]),[`s`])]},null,8,[`modelValue`,`aria-label`,`readonly`,`onKeydown`])):typeof unref(file).text===`string`?(openBlock(),createElementBlock(`pre`,{key:2,class:`vibe64-file-area__preview`,tabindex:`0`,"aria-label":`Contents of ${unref(fileName)}`},toDisplayString(unref(file).text),9,_hoisted_11)):(openBlock(),createElementBlock(`div`,_hoisted_12,[createVNode(VIcon,{icon:unref(mdiFileOutline),size:`40`,"aria-hidden":`true`},null,8,[`icon`]),createBaseVNode(`p`,null,toDisplayString(unref(file).message),1),createVNode(VBtn,{"prepend-icon":unref(mdiDownload),variant:`tonal`,loading:downloading.value.includes(unref(file).path),onClick:_cache[10]||(_cache[10]=$event=>download(unref(file).path))},{default:withCtx(()=>[..._cache[30]||(_cache[30]=[createTextVNode(`Download`,-1)])]),_:1},8,[`prepend-icon`,`loading`])]))],64)):(openBlock(),createElementBlock(Fragment,{key:6},[unref(entries).length?(openBlock(),createBlock(Vibe64FileAreaListing_default,{key:0,busy:busy.value,"can-transfer":__props.destinations.length>0,"can-write":canWrite.value,downloading:downloading.value,entries:unref(entries),"has-more":unref(hasMore),mobile:unref(mobile),"read-only":readOnly.value,onDelete:_cache[11]||(_cache[11]=$event=>unref(openDialog)(`delete`,$event)),onDownload:download,onOpen:unref(openEntry),onRename:_cache[12]||(_cache[12]=$event=>unref(openDialog)(`rename`,$event)),onShowMore:_cache[13]||(_cache[13]=$event=>unref(loadDirectory)(unref(directory),true)),onTransfer:unref(openTransfer)},null,8,[`busy`,`can-transfer`,`can-write`,`downloading`,`entries`,`has-more`,`mobile`,`read-only`,`onOpen`,`onTransfer`])):(openBlock(),createElementBlock(`div`,_hoisted_13,[createVNode(VIcon,{icon:areaInfo.value.icon,size:`48`,"aria-hidden":`true`},null,8,[`icon`]),createBaseVNode(`h3`,_hoisted_14,toDisplayString(unref(expired)?`This Session Dropzone has expired`:unref(directory)?`This folder is empty`:`${areaInfo.value.label} is empty`),1),canWrite.value?(openBlock(),createElementBlock(`p`,_hoisted_15,[_cache[31]||(_cache[31]=createTextVNode(`Drop files here, upload them, or create a text file.`,-1)),unref(location)?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(` The AI can use this folder too.`)],64)):createCommentVNode(``,true)])):createCommentVNode(``,true),canWrite.value?(openBlock(),createElementBlock(`div`,_hoisted_16,[createVNode(VBtn,{"prepend-icon":unref(mdiUpload),color:`primary`,variant:`flat`,onClick:chooseFiles},{default:withCtx(()=>[..._cache[32]||(_cache[32]=[createTextVNode(`Upload`,-1)])]),_:1},8,[`prepend-icon`]),createVNode(VBtn,{"prepend-icon":unref(mdiFilePlusOutline),variant:`tonal`,onClick:unref(openNewFile)},{default:withCtx(()=>[..._cache[33]||(_cache[33]=[createTextVNode(`New file`,-1)])]),_:1},8,[`prepend-icon`,`onClick`])])):createCommentVNode(``,true)]))],64)),createVNode(Vibe64FileUploadQueue_default,{active:unref(uploads).active.value,items:unref(uploads).items.value,onCancel:unref(uploads).cancel,onCancelAll:unref(uploads).cancelAll,onClear:unref(uploads).clear,onRemove:unref(uploads).remove,onRetry:unref(uploads).retry},null,8,[`active`,`items`,`onCancel`,`onCancelAll`,`onClear`,`onRemove`,`onRetry`]),createVNode(VDialog,{modelValue:unref(dialogOpen),"onUpdate:modelValue":_cache[16]||(_cache[16]=$event=>isRef(dialogOpen)?dialogOpen.value=$event:null),"aria-labelledby":dialogTitleId,"content-class":unref(mobile)?`vibe64-file-area__dialog--top`:void 0,"max-width":`460`,persistent:busy.value,onAfterLeave:unref(restoreFocus)},{default:withCtx(()=>[createVNode(VCard,{class:`vibe64-file-area__dialog v64-focus-rings`},{default:withCtx(()=>[createVNode(VCardItem,null,{default:withCtx(()=>[createVNode(VCardTitle,{id:dialogTitleId,class:`vibe64-file-area__dialog-title`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(dialogTitle)),1)]),_:1})]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[unref(dialogOperation)===`delete`?(openBlock(),createElementBlock(`p`,_hoisted_17,toDisplayString(unref(dialogEntry)?.type===`directory`?`It and everything inside it will be deleted from ${areaInfo.value.label}.`:`It will be deleted from ${areaInfo.value.label}.`)+` This can’t be undone. `,1)):(openBlock(),createBlock(VTextField,{key:1,modelValue:unref(dialogName),"onUpdate:modelValue":_cache[14]||(_cache[14]=$event=>isRef(dialogName)?dialogName.value=$event:null),autofocus:``,"error-messages":unref(nameError),label:`Name`,readonly:busy.value,variant:`outlined`,onKeydown:withKeys(withModifiers(unref(confirmDialog),[`prevent`]),[`enter`])},null,8,[`modelValue`,`error-messages`,`readonly`,`onKeydown`]))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,disabled:busy.value,onClick:_cache[15]||(_cache[15]=$event=>dialogOpen.value=false)},{default:withCtx(()=>[..._cache[34]||(_cache[34]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:unref(dialogOperation)===`delete`?`error`:`primary`,variant:`flat`,loading:busy.value,onClick:unref(confirmDialog)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(dialogOperation)===`delete`?`Delete`:unref(dialogOperation)===`rename`?`Rename`:`Create`),1)]),_:1},8,[`color`,`loading`,`onClick`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`content-class`,`persistent`,`onAfterLeave`]),createVNode(VDialog,{modelValue:unref(newFileOpen),"onUpdate:modelValue":_cache[21]||(_cache[21]=$event=>isRef(newFileOpen)?newFileOpen.value=$event:null),"aria-labelledby":newFileTitleId,fullscreen:unref(mobile),"max-width":`640`,persistent:busy.value||Boolean(unref(newFileText)),scrollable:``,onAfterLeave:unref(restoreFocus)},{default:withCtx(()=>[createVNode(VCard,{class:`vibe64-file-area__new-file v64-focus-rings`},{default:withCtx(()=>[unref(mobile)?(openBlock(),createBlock(VToolbar,{key:0,color:`surface`},{default:withCtx(()=>[createVNode(VBtn,{icon:unref(mdiClose),"aria-label":`Close`,disabled:busy.value,onClick:_cache[17]||(_cache[17]=$event=>newFileOpen.value=false)},null,8,[`icon`,`disabled`]),createVNode(VToolbarTitle,{id:newFileTitleId,class:`vibe64-file-area__bar-title`},{default:withCtx(()=>[..._cache[35]||(_cache[35]=[createTextVNode(`New text file`,-1)])]),_:1}),createVNode(VBtn,{class:`vibe64-file-area__bar-action me-2`,color:`primary`,variant:`text`,loading:busy.value,onClick:unref(createFile)},{default:withCtx(()=>[..._cache[36]||(_cache[36]=[createTextVNode(`Create`,-1)])]),_:1},8,[`loading`,`onClick`])]),_:1})):createCommentVNode(``,true),createVNode(VCardItem,null,{default:withCtx(()=>[!unref(mobile)?(openBlock(),createBlock(VCardTitle,{key:0,id:newFileTitleId,class:`vibe64-file-area__dialog-title`},{default:withCtx(()=>[..._cache[37]||(_cache[37]=[createTextVNode(`New text file`,-1)])]),_:1})):createCommentVNode(``,true),createVNode(VCardSubtitle,null,{default:withCtx(()=>[createTextVNode(`In `+toDisplayString(unref(folderLabel)),1)]),_:1})]),_:1}),createVNode(VCardText,{class:`vibe64-file-area__new-file-body`},{default:withCtx(()=>[createVNode(VTextField,{modelValue:unref(newFileName),"onUpdate:modelValue":_cache[18]||(_cache[18]=$event=>isRef(newFileName)?newFileName.value=$event:null),autofocus:``,"error-messages":unref(nameError),label:`File name`,placeholder:`notes.md`,readonly:busy.value,variant:`outlined`,onKeydown:withKeys(withModifiers(unref(createFile),[`prevent`]),[`enter`])},null,8,[`modelValue`,`error-messages`,`readonly`,`onKeydown`]),createVNode(VTextarea,{modelValue:unref(newFileText),"onUpdate:modelValue":_cache[19]||(_cache[19]=$event=>isRef(newFileText)?newFileText.value=$event:null),class:`vibe64-file-area__text`,label:`Contents`,readonly:busy.value,rows:`12`,variant:`outlined`},null,8,[`modelValue`,`readonly`])]),_:1}),!unref(mobile)?(openBlock(),createBlock(VCardActions,{key:1},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,disabled:busy.value,onClick:_cache[20]||(_cache[20]=$event=>newFileOpen.value=false)},{default:withCtx(()=>[..._cache[38]||(_cache[38]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,variant:`flat`,loading:busy.value,onClick:unref(createFile)},{default:withCtx(()=>[..._cache[39]||(_cache[39]=[createTextVNode(`Create`,-1)])]),_:1},8,[`loading`,`onClick`])]),_:1})):createCommentVNode(``,true)]),_:1})]),_:1},8,[`modelValue`,`fullscreen`,`persistent`,`onAfterLeave`]),createVNode(Vibe64FileConflictDialog_default,{"folder-label":unref(folderLabel),names:unref(uploads).conflicts.value.names,onChoose:unref(uploads).resolveConflict,onClosed:unref(restoreFocus)},null,8,[`folder-label`,`names`,`onChoose`,`onClosed`]),createVNode(Vibe64FileTransferDialog_default,{destinations:__props.destinations,item:unref(transferItem),"read-only":readOnly.value,"source-area":__props.area,"source-base":__props.base,"source-label":areaInfo.value.label,onClose:_cache[22]||(_cache[22]=$event=>transferItem.value=null),onClosed:unref(restoreFocus),onDone:unref(transferred)},null,8,[`destinations`,`item`,`read-only`,`source-area`,`source-base`,`source-label`,`onClosed`,`onDone`])],42,_hoisted_1)}}};var Vibe64FileArea_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-216ace36`]]);export{useVibe64FileUploads as a,vibe64DroppedFiles as c,uploadFileRequest as d,VIBE64_UPLOAD_MAX_BYTES as f,Vibe64FileConflictDialog_default as i,vibe64FileArea as l,Vibe64FileUploadQueue_default as n,filePreviewImageType as o,Vibe64FileTransferDialog_default as r,Vibe64ImagePreview_default as s,Vibe64FileArea_default as t,vibe64FileTransferMessage as u};
|
|
1
|
+
import{_ as VProgressLinear,fr as vShow,ht as useDisplay,mr as withModifiers,n as VChipGroup,pr as withKeys,t as VChip,x as VIcon}from"./VChip-BRhZ1px1.js";import{Cn as toRaw,D as createVNode,E as createTextVNode,En as toValue,Ht as watch,On as unref,Pt as useId,Yt as withDirectives,Zn as normalizeClass,_ as createBaseVNode,b as createElementBlock,bt as renderList,et as mergeProps,g as computed,gn as reactive,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,tt as nextTick,un as isRef,v as createBlock,vn as ref,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{r as getHttpWebClient}from"./httpClient-Dj5wBWSr.js";import{n as VList,s as VListItem,t as VMenu}from"./VMenu-BaCC4Of9.js";import{t as VTextField}from"./VTextField-Dmm1M-tz.js";import{r as scopedDevelopmentApiUrl,t as resolveStudioRequestUrl}from"./studioUrls-BcpEogWH.js";import{$t as mdiFolderOutline,B as mdiCheckCircle,Bt as mdiFileOutline,C as mdiArrowLeft,Dt as mdiDotsVertical,G as mdiChevronRight,Ht as mdiFileReplaceOutline,K as mdiChevronUp,L as mdiCancel,Mr as mdiSkipNext,Ot as mdiDownload,Q as mdiClose,Qr as mdiTrayArrowUp,Rt as mdiFileImageOutline,U as mdiChevronDown,Un as mdiMagnifyPlusOutline,Vt as mdiFilePlusOutline,W as mdiChevronLeft,Yt as mdiFolderArrowUpDownOutline,Z as mdiClockOutline,Zr as mdiTrayArrowDown,Zt as mdiFolderLockOutline,b as mdiArchiveClockOutline,d as mdiAlertCircle,dn as mdiImageBrokenVariant,en as mdiFolderPlusOutline,ft as mdiContentCopy,gr as mdiRefresh,ir as mdiPencilOutline,pt as mdiContentDuplicate,qt as mdiFitToScreenOutline,ri as mdiUpload,wt as mdiDeleteOutline,zr as mdiSourceRepository,zt as mdiFileMoveOutline}from"./mdi-DwGK7nOu.js";import{i as VBtnToggle,t as VBtn}from"./VBtn-B6ryRXW-.js";import{t as VAlert}from"./VAlert-CBpSKTfy.js";import{t as VDivider}from"./VDivider-DY2s_j83.js";import{t as VDialog}from"./VDialog-CYfdjZRu.js";import{a as VCardSubtitle,i as VCardTitle,n as VCardText,o as VCardActions,r as VCardItem,t as VCard}from"./VCard-BzaViLPx.js";import{t as VSpacer}from"./VSpacer-B5ip6FSG.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-DFBUIKJZ.js";import{t as VTextarea}from"./VTextarea-CFF7cmcU.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useAssistantAttachments}from"./useAssistantAttachments-DJWb1KdF.js";import{t as useUiFeedback}from"./useUiFeedback-CZj76aLa.js";import"./shared-CEFaGI9L.js";import{n as vibe64ApiResponseError,t as vibe64ApiError}from"./vibe64ApiResponses-B4VY77Q_.js";import{t as writeClipboardText}from"./clipboard-CZs9aH3L.js";import{it as VToolbarTitle,rt as VToolbar}from"./index-CNkd6O5t.js";import{t as downloadAttachment}from"./vibe64AttachmentDownload-Cngh16Hf.js";var VIBE64_UPLOAD_MAX_BYTES=524288e3;var VIBE64_UPLOAD_MAX_LABEL=`500 MiB`;var FILE_UPLOAD_MESSAGES=Object.freeze({cancelled:`Upload was cancelled.`,failure:`File could not be uploaded.`,invalid:`The upload returned an invalid response.`});function fileUploadAbortError(message){const error=new Error(message);error.name=`AbortError`;return error}function fileUploadPayload(request){const response=request?.response;if(response&&typeof response===`object`)return response;const source=typeof response===`string`?response:String(request?.responseText||``);if(!source.trim())return null;try{return JSON.parse(source)}catch{return null}}function fileUploadProgress(event={},fileSize=0){const totalBytes=Number.isFinite(Number(fileSize))?Math.max(0,Number(fileSize)):0;const transportTotal=event.lengthComputable===true&&Number.isFinite(Number(event.total))?Math.max(0,Number(event.total)):0;if(transportTotal<1)return{bytesSent:0,progress:null,totalBytes};const transportLoaded=Number.isFinite(Number(event.loaded))?Number(event.loaded):0;const progress=Math.min(1,Math.max(0,transportLoaded/transportTotal));return{bytesSent:Math.min(totalBytes,Math.floor(totalBytes*progress)),progress,totalBytes}}function uploadFileRequest({file,messages=FILE_UPLOAD_MESSAGES,onProgress=null,path,signal=null}={}){const{cancelled,failure,invalid}=messages;return new Promise((resolve,reject)=>{if(signal?.aborted){reject(fileUploadAbortError(cancelled));return}let request;try{request=new globalThis.XMLHttpRequest}catch{reject(new Error(`${failure} Browser upload support is unavailable.`));return}let settled=false;const progressHandler=event=>{if(typeof onProgress!==`function`)return;try{onProgress(fileUploadProgress(event,file.size))}catch{}};const cleanup=()=>{signal?.removeEventListener?.(`abort`,abortHandler);request.upload?.removeEventListener?.(`progress`,progressHandler);request.onload=null;request.onerror=null;request.onabort=null;request.ontimeout=null};const settle=(callback,value)=>{if(settled)return;settled=true;cleanup();callback(value)};const abortError=()=>fileUploadAbortError(cancelled);const abortHandler=()=>{request.abort();settle(reject,abortError())};try{const body=new FormData;body.append(`file`,file,String(file.name||`attachment`));request.open(`POST`,resolveStudioRequestUrl(path),true);request.onload=()=>{const payload=fileUploadPayload(request);if(request.status>=200&&request.status<300){if(payload&&typeof payload===`object`){settle(resolve,payload);return}settle(reject,new Error(invalid));return}const error=vibe64ApiError(payload||{},`${failure} (HTTP ${request.status||`unknown`})`);error.status=Number(request.status||0);error.statusCode=error.status;settle(reject,error)};request.onerror=()=>{settle(reject,new Error(`${failure} Check your connection and try again.`))};request.onabort=()=>{settle(reject,abortError())};request.ontimeout=()=>{settle(reject,new Error(`${failure} The request timed out.`))};request.upload?.addEventListener?.(`progress`,progressHandler);signal?.addEventListener?.(`abort`,abortHandler,{once:true});if(signal?.aborted){abortHandler();return}request.withCredentials=true;request.setRequestHeader(`Accept`,`application/json`);request.send(body)}catch(error){settle(reject,error instanceof Error?error:new Error(failure))}})}var VIBE64_FILE_AREAS=Object.freeze({repo:{label:`Repo`,icon:mdiSourceRepository,scope:`session`,description:`The session's project files · Changes appear in Current changes`},"drop-zone":{label:`Session Dropzone`,icon:mdiTrayArrowUp,scope:`session`,description:`This session only · Deleted when the session is archived`},session:{label:`Session`,icon:mdiFolderLockOutline,scope:`session`,readOnly:true,description:`Session runtime files · Read only`},"project-drop-zone":{label:`Project Dropzone`,icon:mdiFolderArrowUpDownOutline,scope:`project`,description:`Shared by every session in this project · Files stay until you delete them`},backups:{label:`Project Backups`,icon:mdiArchiveClockOutline,scope:`project`,description:`Shared by every session in this project · Each file is deleted 2 weeks after its last change`}});function vibe64FileArea(area=``){return VIBE64_FILE_AREAS[area]||{label:`Files`,icon:`M13 20H4C2.9 20 2 19.11 2 18V6C2 4.89 2.89 4 4 4H10L12 6H20C21.1 6 22 6.89 22 8V11.04C21.42 10.6 20.75 10.26 20 10.11V8H4V18H13V20M23 17.3V20.8C23 21.4 22.4 22 21.7 22H16.2C15.6 22 15 21.4 15 20.7V17.2C15 16.6 15.6 16 16.2 16V14.5C16.2 13.1 17.6 12 19 12S21.8 13.1 21.8 14.5V16C22.4 16 23 16.6 23 17.3M20.5 14.5C20.5 13.7 19.8 13.2 19 13.2S17.5 13.7 17.5 14.5V16H20.5V14.5Z`,scope:`session`,description:``}}function vibe64FileTransferMessage({destination,item,mode,path:placed=``,skipped=false}){if(skipped)return``;const parts=placed.split(`/`);const where=[destination.label,...parts.slice(0,-1)].join(` › `);const renamed=parts.at(-1)!==item.name?` as “${parts.at(-1)}”`:``;return`${mode===`move`?`Moved`:`Copied`} “${item.name}” to ${where}${renamed}.`}function vibe64DroppedFiles(dataTransfer){if([...dataTransfer?.items||[]].some(item=>item.webkitGetAsEntry?.()?.isDirectory))throw new Error(`Drop files rather than folders, or upload a zip of the folder.`);return[...dataTransfer?.files||[]]}function formatFileSize(bytes=0){const value=Math.max(0,Number(bytes)||0);if(value<1024)return`${value} B`;if(value<1024**2)return`${(value/1024).toFixed(1)} KiB`;if(value<1024**3)return`${(value/1024**2).toFixed(1)} MiB`;return`${(value/1024**3).toFixed(1)} GiB`}var _hoisted_1$6={class:`vibe64-image-preview`};var _hoisted_2$6=[`aria-label`,`aria-busy`];var _hoisted_3$6={key:0,class:`vibe64-image-preview__failed`,role:`alert`};var _hoisted_4$5=[`src`,`alt`];var _hoisted_5$4={class:`vibe64-image-preview__caption`};var _hoisted_6$3={class:`vibe64-image-preview__details`};var _sfc_main$6={__name:`Vibe64ImagePreview`,props:{name:{type:String,required:true},size:{type:Number,default:null},src:{type:String,required:true}},setup(__props){const props=__props;const status=ref(`loading`);const version=ref(0);const actualSize=ref(false);const dimensions=ref(null);const details=computed(()=>[dimensions.value?`${dimensions.value.width} × ${dimensions.value.height} px`:``,Number.isFinite(props.size)?formatFileSize(props.size):``].filter(Boolean).join(` · `)||props.name);function loaded(event){const{naturalWidth:width,naturalHeight:height}=event.target;dimensions.value=width&&height?{width,height}:null;status.value=`loaded`}function retry(){version.value+=1;status.value=`loading`}watch(()=>props.src,()=>{status.value=`loading`;actualSize.value=false;dimensions.value=null});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`figure`,_hoisted_1$6,[createBaseVNode(`div`,{class:normalizeClass([`vibe64-image-preview__stage`,{"vibe64-image-preview__stage--actual":actualSize.value}]),"aria-label":`Image preview of ${__props.name}`,"aria-busy":status.value===`loading`?`true`:void 0,role:`group`,tabindex:`0`},[status.value===`failed`?(openBlock(),createElementBlock(`div`,_hoisted_3$6,[createVNode(VIcon,{icon:unref(mdiImageBrokenVariant),size:`40`,"aria-hidden":`true`},null,8,[`icon`]),_cache[4]||(_cache[4]=createBaseVNode(`p`,null,`This image could not be shown. Try again or download it.`,-1)),createVNode(VBtn,{"prepend-icon":unref(mdiRefresh),variant:`tonal`,onClick:retry},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Try again`,-1)])]),_:1},8,[`prepend-icon`])])):(openBlock(),createElementBlock(Fragment,{key:1},[status.value===`loading`?(openBlock(),createBlock(VSkeletonLoader,{key:0,class:`vibe64-image-preview__loading`,type:`image`})):createCommentVNode(``,true),(openBlock(),createElementBlock(`img`,{key:`${__props.src}:${version.value}`,src:__props.src,alt:__props.name,class:normalizeClass({"vibe64-image-preview__image--hidden":status.value!==`loaded`}),onLoad:loaded,onError:_cache[0]||(_cache[0]=$event=>status.value=`failed`),onClick:_cache[1]||(_cache[1]=$event=>actualSize.value=!actualSize.value)},null,42,_hoisted_4$5))],64))],10,_hoisted_2$6),createBaseVNode(`figcaption`,_hoisted_5$4,[createBaseVNode(`span`,_hoisted_6$3,toDisplayString(details.value),1),createVNode(VBtn,{disabled:status.value!==`loaded`,"prepend-icon":actualSize.value?unref(mdiFitToScreenOutline):unref(mdiMagnifyPlusOutline),"aria-pressed":actualSize.value?`true`:`false`,variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>actualSize.value=!actualSize.value)},{default:withCtx(()=>[createTextVNode(toDisplayString(actualSize.value?`Fit to window`:`Actual size`),1)]),_:1},8,[`disabled`,`prepend-icon`,`aria-pressed`])])])}}};var Vibe64ImagePreview_default=_plugin_vue_export_helper_default(_sfc_main$6,[[`__scopeId`,`data-v-7e30c775`]]);var FILE_PREVIEW_IMAGE_TYPES=Object.freeze({avif:`image/avif`,bmp:`image/bmp`,gif:`image/gif`,ico:`image/x-icon`,jpeg:`image/jpeg`,jpg:`image/jpeg`,png:`image/png`,svg:`image/svg+xml`,webp:`image/webp`});function filePreviewImageType(fileName=``){const name=String(fileName||``).split(`/`).at(-1);const extension=name.includes(`.`)?name.split(`.`).at(-1).toLowerCase():``;return Object.hasOwn(FILE_PREVIEW_IMAGE_TYPES,extension)?FILE_PREVIEW_IMAGE_TYPES[extension]:``}var __testables=Object.freeze({FILE_PREVIEW_IMAGE_TYPES});var FILE_UPLOAD_MAX_ITEMS=200;var ACTIVE_PHASES=[`preparing`,`queued`,`uploading`,`delivering`];var FINISHING_NOTE_DELAY_MS=1500;function useVibe64FileUploads({endpoint,onUploaded=()=>{},onAsk=()=>{},finishingNote=``}={}){const targets=new WeakMap;const finishing=reactive(new WeakSet);const queue=useAssistantAttachments({sessionId:computed(()=>String(toValue(endpoint)||``)),maxItems:FILE_UPLOAD_MAX_ITEMS,uploadConcurrency:1,maxBytes:Number.MAX_SAFE_INTEGER,async onUploaded(uploaded=[]){for(const receipt of uploaded)onUploaded(receipt);return{accepted:false}},async uploadAttachment(_key,file,{onProgress,signal}={}){const raw=toRaw(file);const target=targets.get(raw);if(!target)throw new Error(`Choose the file again.`);if(file.size>524288e3)throw new Error(`Larger than the ${VIBE64_UPLOAD_MAX_LABEL} upload limit.`);const query=new URLSearchParams({path:target.path,...target.conflict?{conflict:target.conflict}:{}});let timer=null;const progress=update=>{onProgress?.(update);if(finishingNote&&update?.progress===1&&!timer)timer=setTimeout(()=>finishing.add(raw),FINISHING_NOTE_DELAY_MS)};try{const result=await uploadFileRequest({file,onProgress:progress,signal,path:`${target.endpoint}/upload?${query}`});if(result?.ok===false)throw new Error(vibe64ApiResponseError(result,`File could not be uploaded.`));return{...result,attachmentId:result.path,fileName:file.name}}finally{clearTimeout(timer);finishing.delete(raw)}}});const items=queue.queueItems;const active=computed(()=>items.value.some(item=>ACTIVE_PHASES.includes(item.phase)));function clearFinished(){for(const item of[...items.value])if([`ready`,`cancelled`].includes(item.phase))queue.removeAttachment(item)}function uploadFiles(files=[],{folder=``,conflicts=[],conflict=``}={}){if(!items.value.some(item=>item.phase===`failed`||ACTIVE_PHASES.includes(item.phase)))clearFinished();for(const file of files)targets.set(toRaw(file),{endpoint:String(toValue(endpoint)||``),path:[folder,file.name].filter(Boolean).join(`/`),conflict:conflicts.includes(file.name)?conflict:``});return queue.uploadFiles(files)}const conflicts=ref({names:[],files:[],folder:``});async function start(files=[],folder=``){if(!files.length)return;if(files.length>FILE_UPLOAD_MAX_ITEMS)throw new Error(`Upload up to ${FILE_UPLOAD_MAX_ITEMS} files at a time.`);const result=await getHttpWebClient().request(`${toValue(endpoint)}/conflicts`,{method:`POST`,body:{path:folder,names:[...new Set(files.map(file=>file.name))]}});if(result?.ok===false)throw new Error(vibe64ApiResponseError(result,`Upload failed.`));if(result.existing?.length){onAsk();conflicts.value={names:result.existing,files,folder};return}uploadFiles(files,{folder})}function resolveConflict(choice=``){const{names,files,folder}=conflicts.value;conflicts.value={names:[],files:[],folder:``};if(!choice)return;const chosen=choice===`skip`?files.filter(file=>!names.includes(file.name)):files;if(chosen.length)uploadFiles(chosen,{folder,conflicts:names,conflict:choice===`skip`?``:choice})}function cancelAll(){for(const item of[...items.value])if(ACTIVE_PHASES.includes(item.phase))queue.cancelAttachment(item)}function clear(){for(const item of[...items.value])if(!ACTIVE_PHASES.includes(item.phase))queue.removeAttachment(item)}function note(item){return item?.phase===`uploading`&&item.file&&finishing.has(toRaw(item.file))?finishingNote:``}return{active,cancel:queue.cancelAttachment,cancelAll,clear,conflicts,items,note,remove:queue.removeAttachment,resolveConflict,retry:queue.retryAttachment,start,uploadFiles}}function fileAreaUrl(base,operation,filePath,query={}){return`${base}/${operation}?${new URLSearchParams({path:filePath,...query})}`}async function fileAreaRequest(endpoint,options){const result=await getHttpWebClient().request(endpoint,options);if(result?.ok===false)throw new Error(vibe64ApiResponseError(result,`File operation failed.`));return result}function useVibe64FileAreaBrowser({areaInfo,busy,fileHeading,focus,props,root}){const directory=ref(``);const entries=ref([]);const location=ref(``);const expired=ref(false);const hasMore=ref(false);const nextOffset=ref(0);const loading=ref(false);const loadError=ref(``);const file=ref(null);const draft=ref(``);const dirty=computed(()=>typeof file.value?.text===`string`&&draft.value!==file.value.text);const fileName=computed(()=>file.value?.path.split(`/`).at(-1)||``);const fileEntry=computed(()=>file.value&&{name:fileName.value,path:file.value.path,type:`file`});let generation=0;let pendingRefresh=false;const breadcrumbs=computed(()=>[{title:areaInfo.value.label,path:``},...directory.value.split(`/`).filter(Boolean).map((name,index,parts)=>({title:name,path:parts.slice(0,index+1).join(`/`)}))]);const folderLabel=computed(()=>breadcrumbs.value.map(crumb=>crumb.title).join(` › `));const imageSiblings=computed(()=>file.value?.image?entries.value.filter(entry=>entry.type===`file`&&filePreviewImageType(entry.name)):[]);async function loadDirectory(target=``,append=false,{quiet=false,focus:focusFolder=false}={}){const current=++generation;if(!quiet)loading.value=true;loadError.value=``;try{const result=await fileAreaRequest(fileAreaUrl(props.base,`tree`,target,{offset:append?nextOffset.value:0}));if(current!==generation)return;if(!quiet)file.value=null;directory.value=target;entries.value=append?[...entries.value,...result.tree.children]:result.tree.children;hasMore.value=result.tree.hasMore===true;nextOffset.value=result.tree.nextOffset;location.value=result.location||``;expired.value=result.expired===true;if(focusFolder){loading.value=false;await nextTick();focus.focusFolder()}}catch(error){if(current===generation)loadError.value=error.message}finally{if(current===generation)loading.value=false}}async function openEntry(entry,{focus:focusFile=true}={}){if(entry.type===`directory`)return loadDirectory(entry.path,false,{focus:true});if(filePreviewImageType(entry.name)){generation+=1;loading.value=false;file.value={image:true,path:entry.path,size:entry.size,src:scopedDevelopmentApiUrl(fileAreaUrl(props.base,`download`,entry.path,{inline:`1`}),props.projectSlug)};await nextTick();root.value?.querySelector(`.vibe64-image-preview__stage`)?.focus();return}const current=++generation;loading.value=true;try{const result=await fileAreaRequest(fileAreaUrl(props.base,`file`,entry.path));if(current!==generation)return;file.value=result.file;draft.value=result.file.text}catch(error){if(current!==generation)return;file.value={path:entry.path,message:error.message}}finally{if(current===generation)loading.value=false}if(focusFile&¤t===generation){await nextTick();fileHeading.value?.focus()}}async function closeFile(){const path=file.value?.path||``;file.value=null;if(pendingRefresh)await refresh();await nextTick();focus.rowElement(path)?.focus()}function stepImage(step){const images=imageSiblings.value;const index=images.findIndex(entry=>entry.path===file.value.path);if(images.length>1)openEntry(images[(index+step+images.length)%images.length])}function refresh(){if(dirty.value||busy.value){pendingRefresh=true;return}pendingRefresh=false;if(file.value&&!file.value.image)return openEntry({type:`file`,path:file.value.path,name:fileName.value},{focus:false});return loadDirectory(directory.value,false,{quiet:Boolean(file.value)})}function reloadListing(){if(file.value)pendingRefresh=true;else loadDirectory(directory.value,false,{quiet:true})}watch(()=>props.base,()=>{directory.value=``;loadDirectory()},{immediate:true});watch(()=>props.refreshKey,()=>{if(props.active)refresh();else pendingRefresh=true});watch(()=>props.agentActive,(working,wasWorking)=>{if(!wasWorking||working)return;if(props.active)refresh();else pendingRefresh=true});watch([()=>props.active,dirty],([active,changed])=>{if(active&&!changed&&pendingRefresh)refresh()});onScopeDispose(()=>{generation+=1});return{breadcrumbs,closeFile,directory,dirty,draft,entries,expired,file,fileEntry,fileName,folderLabel,hasMore,imageSiblings,loadDirectory,loadError,loading,location,openEntry,refresh,reloadListing,stepImage}}function validName(name){const trimmed=name.trim();return Boolean(trimmed)&&!/[/\\]/u.test(trimmed)&&![`.`,`..`].includes(trimmed)}function useVibe64FileAreaCommands({browser,busy,emit,feedback,fileHeading,focus,props}){const{directory,file,draft,loadDirectory}=browser;const dialogOpen=ref(false);const dialogOperation=ref(``);const dialogEntry=ref(null);const dialogName=ref(``);const nameError=ref(``);const newFileOpen=ref(false);const newFileName=ref(``);const newFileText=ref(``);const transferItem=ref(null);const dialogTitle=computed(()=>({delete:`Delete “${dialogEntry.value?.name}”?`,rename:`Rename “${dialogEntry.value?.name}”`,mkdir:`New folder`})[dialogOperation.value]||``);async function command(run,fallback=`File operation failed.`){if(busy.value)return;busy.value=true;try{await run()}catch(error){feedback.error(error,fallback)}finally{busy.value=false}}function save(){return command(async()=>{const result=await fileAreaRequest(`${props.base}/file`,{method:`PUT`,body:{path:file.value.path,baseHash:file.value.hash,text:draft.value}});file.value=result.file;draft.value=result.file.text})}function saveShortcut(){if(browser.dirty.value&&!busy.value)save()}function openNewFile(){focus.rememberFocus();newFileName.value=``;newFileText.value=``;nameError.value=``;newFileOpen.value=true}function createFile(){if(!validName(newFileName.value)){nameError.value=`Enter a file name without slashes.`;return}nameError.value=``;return command(async()=>{const result=await fileAreaRequest(`${props.base}/file`,{method:`POST`,body:{path:[directory.value,newFileName.value.trim()].filter(Boolean).join(`/`),text:newFileText.value}});newFileOpen.value=false;await loadDirectory(directory.value,false,{quiet:true});file.value=result.file;draft.value=result.file.text;focus.forgetFocus();await nextTick();fileHeading.value?.focus()},`The file could not be created.`)}function openDialog(operation,entry=null){focus.rememberFocus(entry?.path);dialogOperation.value=operation;dialogEntry.value=entry;dialogName.value=entry?.name||``;nameError.value=``;dialogOpen.value=true}function confirmDialog(){const operation=dialogOperation.value;if(operation!==`delete`&&!validName(dialogName.value)){nameError.value=`Enter a name without slashes.`;return}return command(async()=>{const suffix=operation===`mkdir`?`directory`:operation===`delete`?`file`:`rename`;const destination=[operation===`mkdir`?directory.value:dialogEntry.value.path.split(`/`).slice(0,-1).join(`/`),dialogName.value.trim()].filter(Boolean).join(`/`);await fileAreaRequest(`${props.base}/${suffix}`,{method:operation===`delete`?`DELETE`:`POST`,body:{path:operation===`mkdir`?destination:dialogEntry.value.path,...operation===`rename`?{destination}:{}}});dialogOpen.value=false;if(file.value&&dialogEntry.value?.path===file.value.path)file.value=null;await loadDirectory(directory.value)})}function openTransfer(entry){focus.rememberFocus(entry.path);transferItem.value=entry}function transferred(event){transferItem.value=null;if(event.skipped)return;feedback.success(vibe64FileTransferMessage(event));if(event.mode===`move`&&file.value?.path===event.item.path)file.value=null;if(event.mode===`move`||event.destination.area===props.area)loadDirectory(directory.value,false,{quiet:true});emit(`transferred`,event)}function copyLocation(){return command(async()=>{await writeClipboardText(browser.location.value);feedback.success(`AI path copied.`)})}return{confirmDialog,copyLocation,createFile,dialogEntry,dialogName,dialogOpen,dialogOperation,dialogTitle,nameError,newFileName,newFileOpen,newFileText,openDialog,openNewFile,openTransfer,save,saveShortcut,transferItem,transferred}}function useVibe64FileAreaFocus({root}){let returnFocus=null;function rowElement(path){return path?root.value?.querySelector(`[data-path="${path.replace(/["\\]/gu,`\\$&`)}"]`):null}function focusFolder(){root.value?.querySelector(`[data-path], .vibe64-file-area__empty h3`)?.focus()}function rememberFocus(path=``){const active=globalThis.document?.activeElement;returnFocus=active&&!active.closest(`.v-overlay`)?active:path}function forgetFocus(){returnFocus=null}async function restoreFocus(){const target=returnFocus;returnFocus=null;await nextTick();const element=typeof target===`string`?rowElement(target):target;if(element?.isConnected)element.focus();else if(target!==null)focusFolder()}return{focusFolder,forgetFocus,rememberFocus,restoreFocus,rowElement}}function useVibe64FileAreaUploads({browser,canWrite,feedback,focus,props}){const dragDepth=ref(0);let uploadRefreshTimer=null;const uploads=useVibe64FileUploads({endpoint:computed(()=>props.base),onAsk:()=>focus.rememberFocus(),onUploaded:()=>{clearTimeout(uploadRefreshTimer);uploadRefreshTimer=setTimeout(browser.reloadListing,250)}});function dragEnter(event){if(canWrite.value&&event.dataTransfer?.types.includes(`Files`))dragDepth.value+=1}function dragOver(event){if(event.dataTransfer)event.dataTransfer.dropEffect=canWrite.value?`copy`:`none`}function dragLeave(){dragDepth.value=Math.max(0,dragDepth.value-1)}function dropFiles(event){dragDepth.value=0;if(!canWrite.value)return;try{return startUploads(vibe64DroppedFiles(event.dataTransfer))}catch(error){feedback.error(error)}}async function startUploads(files){try{await uploads.start(files,browser.directory.value)}catch(error){feedback.error(error,`Upload failed.`)}}onScopeDispose(()=>{clearTimeout(uploadRefreshTimer)});return{dragDepth,dragEnter,dragLeave,dragOver,dropFiles,startUploads,uploads}}var _hoisted_1$5=[`data-path`,`disabled`,`onClick`];var _hoisted_2$5={class:`vibe64-file-area__open-text`};var _hoisted_3$5={class:`vibe64-file-area__open-name`};var _hoisted_4$4={class:`vibe64-file-area__open-detail`};var _sfc_main$5={__name:`Vibe64FileAreaListing`,props:{busy:{type:Boolean,default:false},canTransfer:{type:Boolean,default:false},canWrite:{type:Boolean,default:false},downloading:{type:Array,default:()=>[]},entries:{type:Array,required:true},hasMore:{type:Boolean,default:false},mobile:{type:Boolean,default:false},readOnly:{type:Boolean,default:false}},emits:[`delete`,`download`,`open`,`rename`,`show-more`,`transfer`],setup(__props,{emit:__emit}){const emit=__emit;function entryIcon(entry){if(entry.type===`directory`)return mdiFolderOutline;return filePreviewImageType(entry.name)?mdiFileImageOutline:mdiFileOutline}function entrySubtitle(entry){if(entry.type!==`file`)return`Folder`;const expiry=entry.expiresAt?` · Deleted after ${new Date(entry.expiresAt).toLocaleDateString()}`:``;return`${formatFileSize(entry.size)}${expiry}`}return(_ctx,_cache)=>{return openBlock(),createBlock(VList,{class:`vibe64-file-area__body vibe64-file-area__listing`,"aria-label":`Files and folders`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.entries,entry=>{return openBlock(),createBlock(VListItem,{key:entry.path,class:`vibe64-file-area__row`},{append:withCtx(()=>[entry.type===`file`&&!__props.mobile?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiDownload),"aria-label":`Download ${entry.name}`,loading:__props.downloading.includes(entry.path),title:`Download`,variant:`text`,onClick:withModifiers($event=>emit(`download`,entry.path),[`stop`])},null,8,[`icon`,`aria-label`,`loading`,`onClick`])):createCommentVNode(``,true),__props.canWrite||__props.canTransfer||__props.mobile?(openBlock(),createBlock(VMenu,{key:1},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps({ref_for:true},menuProps,{icon:unref(mdiDotsVertical),"aria-label":`Actions for ${entry.name}`,variant:`text`,onClick:_cache[0]||(_cache[0]=withModifiers(()=>{},[`stop`]))}),null,16,[`icon`,`aria-label`])]),default:withCtx(()=>[createVNode(VList,{class:`v64-focus-rings`},{default:withCtx(()=>[entry.type===`file`&&__props.mobile?(openBlock(),createBlock(VListItem,{key:0,"prepend-icon":unref(mdiDownload),title:`Download`,onClick:$event=>emit(`download`,entry.path)},null,8,[`prepend-icon`,`onClick`])):createCommentVNode(``,true),__props.canTransfer?(openBlock(),createBlock(VListItem,{key:1,"prepend-icon":unref(mdiFileMoveOutline),title:__props.readOnly?`Copy to…`:`Move or copy…`,onClick:$event=>emit(`transfer`,entry)},null,8,[`prepend-icon`,`title`,`onClick`])):createCommentVNode(``,true),__props.canWrite?(openBlock(),createBlock(VListItem,{key:2,"prepend-icon":unref(mdiPencilOutline),title:`Rename`,onClick:$event=>emit(`rename`,entry)},null,8,[`prepend-icon`,`onClick`])):createCommentVNode(``,true),__props.canWrite?(openBlock(),createBlock(VListItem,{key:3,"prepend-icon":unref(mdiDeleteOutline),title:`Delete`,onClick:$event=>emit(`delete`,entry)},null,8,[`prepend-icon`,`onClick`])):createCommentVNode(``,true)]),_:2},1024)]),_:2},1024)):createCommentVNode(``,true)]),default:withCtx(()=>[createBaseVNode(`button`,{class:`vibe64-file-area__open`,"data-path":entry.path,disabled:__props.busy,type:`button`,onClick:$event=>emit(`open`,entry)},[createVNode(VIcon,{class:`vibe64-file-area__open-icon`,icon:entryIcon(entry),"aria-hidden":`true`},null,8,[`icon`]),createBaseVNode(`span`,_hoisted_2$5,[createBaseVNode(`span`,_hoisted_3$5,toDisplayString(entry.name),1),createBaseVNode(`span`,_hoisted_4$4,toDisplayString(entrySubtitle(entry)),1)])],8,_hoisted_1$5)]),_:2},1024)}),128)),__props.hasMore?(openBlock(),createBlock(VBtn,{key:0,class:`ma-3`,variant:`text`,disabled:__props.busy,onClick:_cache[1]||(_cache[1]=$event=>emit(`show-more`))},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Show more`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)]),_:1})}}};var Vibe64FileAreaListing_default=_plugin_vue_export_helper_default(_sfc_main$5,[[`__scopeId`,`data-v-450741a0`]]);var _hoisted_1$4={class:`vibe64-file-area__toolbar`};var _hoisted_2$4={key:0,class:`vibe64-file-area__crumbs`,"aria-label":`Folder`};var _hoisted_3$4={key:1,class:`vibe64-file-area__crumb-current`,"aria-current":`location`};var _hoisted_4$3={key:1,class:`vibe64-file-area__actions`};var _hoisted_5$3={key:2,class:`vibe64-file-area__actions`};var _sfc_main$4={__name:`Vibe64FileAreaToolbar`,props:{archiveAvailable:{type:Boolean,default:false},archiveDownloading:{type:Boolean,default:false},breadcrumbs:{type:Array,required:true},busy:{type:Boolean,default:false},canWrite:{type:Boolean,default:false},directory:{type:String,default:``},loading:{type:Boolean,default:false},location:{type:String,default:``},mobile:{type:Boolean,default:false}},emits:[`copy-location`,`download-archive`,`new-file`,`new-folder`,`open-folder`,`refresh`,`upload`],setup(__props,{emit:__emit}){const emit=__emit;return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$4,[__props.directory?(openBlock(),createElementBlock(`nav`,_hoisted_2$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.breadcrumbs,(crumb,index)=>{return openBlock(),createElementBlock(Fragment,{key:crumb.path},[index?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiChevronRight),size:`18`,"aria-hidden":`true`},null,8,[`icon`])):createCommentVNode(``,true),index===__props.breadcrumbs.length-1?(openBlock(),createElementBlock(`span`,_hoisted_3$4,toDisplayString(crumb.title),1)):(openBlock(),createBlock(VBtn,{key:2,disabled:__props.loading||__props.busy,variant:`text`,onClick:$event=>emit(`open-folder`,crumb.path)},{default:withCtx(()=>[createTextVNode(toDisplayString(crumb.title),1)]),_:2},1032,[`disabled`,`onClick`]))],64)}),128))])):createCommentVNode(``,true),!__props.mobile?(openBlock(),createElementBlock(`div`,_hoisted_4$3,[__props.archiveAvailable?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiDownload),variant:`text`,loading:__props.archiveDownloading,onClick:_cache[0]||(_cache[0]=$event=>emit(`download-archive`))},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`Download archive`,-1)])]),_:1},8,[`prepend-icon`,`loading`])):createCommentVNode(``,true),__props.location?(openBlock(),createBlock(VBtn,{key:1,"prepend-icon":unref(mdiContentCopy),variant:`text`,onClick:_cache[1]||(_cache[1]=$event=>emit(`copy-location`))},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(`Copy AI path`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true),createVNode(VBtn,{icon:unref(mdiRefresh),"aria-label":`Refresh files`,title:`Refresh files`,variant:`text`,disabled:__props.loading||__props.busy,onClick:_cache[2]||(_cache[2]=$event=>emit(`refresh`))},null,8,[`icon`,`disabled`]),__props.canWrite?(openBlock(),createElementBlock(Fragment,{key:2},[createVNode(VBtn,{"prepend-icon":unref(mdiFolderPlusOutline),variant:`text`,disabled:__props.busy,onClick:_cache[3]||(_cache[3]=$event=>emit(`new-folder`))},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(`New folder`,-1)])]),_:1},8,[`prepend-icon`,`disabled`]),createVNode(VBtn,{"prepend-icon":unref(mdiFilePlusOutline),variant:`text`,disabled:__props.busy,onClick:_cache[4]||(_cache[4]=$event=>emit(`new-file`))},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(`New file`,-1)])]),_:1},8,[`prepend-icon`,`disabled`]),createVNode(VBtn,{"prepend-icon":unref(mdiUpload),color:`primary`,variant:`flat`,onClick:_cache[5]||(_cache[5]=$event=>emit(`upload`))},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Upload`,-1)])]),_:1},8,[`prepend-icon`])],64)):createCommentVNode(``,true)])):(openBlock(),createElementBlock(`div`,_hoisted_5$3,[__props.canWrite?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiUpload),"aria-label":`Upload files`,color:`primary`,variant:`tonal`,onClick:_cache[6]||(_cache[6]=$event=>emit(`upload`))},null,8,[`icon`])):createCommentVNode(``,true),createVNode(VMenu,null,{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{icon:unref(mdiDotsVertical),"aria-label":`More folder actions`,variant:`text`}),null,16,[`icon`])]),default:withCtx(()=>[createVNode(VList,{class:`v64-focus-rings`},{default:withCtx(()=>[__props.canWrite?(openBlock(),createBlock(VListItem,{key:0,"prepend-icon":unref(mdiFilePlusOutline),title:`New file`,disabled:__props.busy,onClick:_cache[7]||(_cache[7]=$event=>emit(`new-file`))},null,8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),__props.canWrite?(openBlock(),createBlock(VListItem,{key:1,"prepend-icon":unref(mdiFolderPlusOutline),title:`New folder`,disabled:__props.busy,onClick:_cache[8]||(_cache[8]=$event=>emit(`new-folder`))},null,8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),__props.location?(openBlock(),createBlock(VListItem,{key:2,"prepend-icon":unref(mdiContentCopy),title:`Copy AI path`,onClick:_cache[9]||(_cache[9]=$event=>emit(`copy-location`))},null,8,[`prepend-icon`])):createCommentVNode(``,true),__props.archiveAvailable?(openBlock(),createBlock(VListItem,{key:3,"prepend-icon":unref(mdiDownload),title:`Download archive`,disabled:__props.archiveDownloading,onClick:_cache[10]||(_cache[10]=$event=>emit(`download-archive`))},null,8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),createVNode(VListItem,{"prepend-icon":unref(mdiRefresh),title:`Refresh`,disabled:__props.loading||__props.busy,onClick:_cache[11]||(_cache[11]=$event=>emit(`refresh`))},null,8,[`prepend-icon`,`disabled`])]),_:1})]),_:1})]))])}}};var Vibe64FileAreaToolbar_default=_plugin_vue_export_helper_default(_sfc_main$4,[[`__scopeId`,`data-v-08f0d563`]]);var _hoisted_1$3={key:0,class:`vibe64-conflict-dialog__names`};var _hoisted_2$3={key:0};var _hoisted_3$3={class:`vibe64-conflict-dialog__question`};var _sfc_main$3={__name:`Vibe64FileConflictDialog`,props:{folderLabel:{type:String,default:``},names:{type:Array,default:()=>[]}},emits:[`choose`,`closed`],setup(__props){const props=__props;const titleId=`vibe64-conflict-dialog-${useId()}`;const title=computed(()=>props.names.length===1?`“${props.names[0]}” already exists`:`${props.names.length} items already exist`);function numberedName(name=``){const dot=name.lastIndexOf(`.`);return dot>0?`${name.slice(0,dot)} (1)${name.slice(dot)}`:`${name} (1)`}const choices=computed(()=>{const one=props.names.length===1;return[{value:`replace`,icon:mdiFileReplaceOutline,title:`Replace`,subtitle:one?`Overwrite the item that is there`:`Overwrite the items that are there`},{value:`keep-both`,icon:mdiContentDuplicate,title:`Keep both`,subtitle:`Add a number to the new name, like “${numberedName(props.names[0])}”`},{value:`skip`,icon:mdiSkipNext,title:`Skip`,subtitle:one?`Leave the item that is there`:`Leave those items and do the rest`}]});return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":Boolean(__props.names.length),"aria-labelledby":titleId,"max-width":`440`,onAfterLeave:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`closed`)),"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>$event||_ctx.$emit(`choose`,``))},{default:withCtx(()=>[createVNode(VCard,{class:`vibe64-conflict-dialog v64-focus-rings`},{default:withCtx(()=>[createVNode(VCardItem,null,{default:withCtx(()=>[createVNode(VCardTitle,{id:titleId,class:`vibe64-conflict-dialog__title`},{default:withCtx(()=>[createTextVNode(toDisplayString(title.value),1)]),_:1}),createVNode(VCardSubtitle,{class:`vibe64-conflict-dialog__subtitle`},{default:withCtx(()=>[createTextVNode(`In `+toDisplayString(__props.folderLabel),1)]),_:1})]),_:1}),createVNode(VCardText,{class:`pb-0`},{default:withCtx(()=>[__props.names.length>1?(openBlock(),createElementBlock(`ul`,_hoisted_1$3,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.names.slice(0,5),name=>{return openBlock(),createElementBlock(`li`,{key:name},toDisplayString(name),1)}),128)),__props.names.length>5?(openBlock(),createElementBlock(`li`,_hoisted_2$3,`and `+toDisplayString(__props.names.length-5)+` more`,1)):createCommentVNode(``,true)])):createCommentVNode(``,true),createBaseVNode(`p`,_hoisted_3$3,`What should happen to `+toDisplayString(__props.names.length===1?`it`:`them`)+`?`,1)]),_:1}),createVNode(VList,{class:`vibe64-conflict-dialog__choices`,"aria-label":`Choose what happens`,role:`group`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(choices.value,choice=>{return openBlock(),createBlock(VListItem,{key:choice.value,"prepend-icon":choice.icon,role:`button`,subtitle:choice.subtitle,title:choice.title,lines:`two`,onClick:$event=>_ctx.$emit(`choose`,choice.value)},null,8,[`prepend-icon`,`subtitle`,`title`,`onClick`])}),128))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`choose`,``))},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Cancel`,-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,[`model-value`])}}};var Vibe64FileConflictDialog_default=_plugin_vue_export_helper_default(_sfc_main$3,[[`__scopeId`,`data-v-b7082c05`]]);var _hoisted_1$2={class:`vibe64-transfer-dialog__chip-label`};var _hoisted_2$2={class:`vibe64-transfer-dialog__crumbs`,"aria-label":`Destination folder`};var _hoisted_3$2={key:1,class:`vibe64-transfer-dialog__crumb-current`,"aria-current":`location`};var _hoisted_4$2={key:3,class:`vibe64-transfer-dialog__hint`};var _hoisted_5$2={key:5,class:`vibe64-transfer-dialog__hint`};var _hoisted_6$2={class:`vibe64-transfer-dialog__footer`};var _hoisted_7$2={key:0,class:`vibe64-transfer-dialog__actions`};var _sfc_main$2={__name:`Vibe64FileTransferDialog`,props:{destinations:{type:Array,default:()=>[]},item:{type:Object,default:null},readOnly:{type:Boolean,default:false},sourceArea:{type:String,required:true},sourceBase:{type:String,required:true},sourceLabel:{type:String,required:true}},emits:[`close`,`closed`,`done`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{smAndDown:mobile}=useDisplay();const feedback=useUiFeedback({source:`vibe64.files.transfer`});const mode=ref(`copy`);const destinationKey=ref(``);const folder=ref(``);const folders=ref([]);const hasMore=ref(false);const nextOffset=ref(0);const loading=ref(false);const loadError=ref(``);const expired=ref(false);const busy=ref(false);const conflictNames=ref([]);const titleId=`vibe64-transfer-dialog-${useId()}`;let generation=0;const destination=computed(()=>props.destinations.find(candidate=>candidate.key===destinationKey.value)||null);const sameArea=computed(()=>destination.value?.area===props.sourceArea&&!destination.value?.sessionId);const crumbs=computed(()=>[{title:destination.value?.label||``,path:``},...folder.value.split(`/`).filter(Boolean).map((name,index,parts)=>({title:name,path:parts.slice(0,index+1).join(`/`)}))]);const targetLabel=computed(()=>crumbs.value.map(crumb=>crumb.title).join(` › `));const itemFolder=computed(()=>props.item?.path.split(`/`).slice(0,-1).join(`/`)||``);function insideItself(candidate){return sameArea.value&&props.item?.type===`directory`&&(candidate===props.item.path||candidate.startsWith(`${props.item.path}/`))}const blockedReason=computed(()=>{if(insideItself(folder.value))return`A folder cannot go inside itself.`;if(sameArea.value&&mode.value===`move`&&folder.value===itemFolder.value)return`It is already in this folder.`;return``});const title=computed(()=>props.readOnly?`Copy to`:`Move or copy`);const actionLabel=computed(()=>mode.value===`move`?`Move here`:`Copy here`);const actionDisabled=computed(()=>Boolean(blockedReason.value)||loading.value||Boolean(loadError.value)||expired.value);async function request(url,options){const result=await getHttpWebClient().request(url,options);if(result?.ok===false)throw new Error(vibe64ApiResponseError(result,`Move or copy failed.`));return result}async function browse(path=``,more=false){const current=++generation;const target=destination.value;if(!target)return;loading.value=true;loadError.value=``;try{const query=new URLSearchParams({path,offset:more?nextOffset.value:0});const result=await request(`${target.base}/tree?${query}`);if(current!==generation)return;folder.value=path;const found=result.tree.children.filter(entry=>entry.type===`directory`);folders.value=more?[...folders.value,...found]:found;hasMore.value=result.tree.hasMore===true;nextOffset.value=result.tree.nextOffset;expired.value=result.expired===true}catch(error){if(current===generation)loadError.value=error.message}finally{if(current===generation)loading.value=false}}watch(()=>props.item,item=>{if(!item)return;mode.value=`copy`;conflictNames.value=[];const preferred=props.destinations.find(candidate=>candidate.area!==props.sourceArea||candidate.sessionId);destinationKey.value=(preferred||props.destinations[0])?.key||``},{immediate:true});watch([()=>props.item,destinationKey],([item])=>{folder.value=``;folders.value=[];if(item)browse(``)},{immediate:true});function close(){if(!busy.value)emit(`close`)}async function run(task){busy.value=true;try{await task()}catch(error){feedback.error(error,`Move or copy failed.`)}finally{busy.value=false}}async function transfer(conflict){const target=destination.value;const result=await request(`${props.sourceBase}/transfer`,{method:`POST`,body:{path:props.item.path,mode:mode.value,targetArea:target.area,targetPath:folder.value,conflict,...target.sessionId?{targetSessionId:target.sessionId}:{}}});emit(`done`,{destination:target,item:props.item,mode:mode.value,path:result.path||``,skipped:result.skipped===true})}function confirm(){return run(async()=>{const result=await request(`${destination.value.base}/conflicts`,{method:`POST`,body:{path:folder.value,names:[props.item.name]}});if(result.existing?.length){conflictNames.value=result.existing;return}await transfer(`fail`)})}function resolveConflict(choice){conflictNames.value=[];if(choice)run(()=>transfer(choice))}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":Boolean(__props.item),"aria-labelledby":titleId,fullscreen:unref(mobile),persistent:busy.value,"max-width":`560`,scrollable:``,onAfterLeave:_cache[4]||(_cache[4]=$event=>_ctx.$emit(`closed`)),"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>$event||close())},{default:withCtx(()=>[__props.item?(openBlock(),createBlock(VCard,{key:0,class:`vibe64-transfer-dialog v64-focus-rings`},{default:withCtx(()=>[unref(mobile)?(openBlock(),createBlock(VToolbar,{key:0,class:`vibe64-transfer-dialog__bar`,color:`surface`},{default:withCtx(()=>[createVNode(VBtn,{icon:unref(mdiClose),"aria-label":`Close`,disabled:busy.value,onClick:close},null,8,[`icon`,`disabled`]),createVNode(VToolbarTitle,{id:titleId,class:`vibe64-transfer-dialog__title`},{default:withCtx(()=>[createTextVNode(toDisplayString(title.value),1)]),_:1}),createVNode(VBtn,{class:`vibe64-transfer-dialog__bar-action me-2`,color:`primary`,variant:`text`,disabled:actionDisabled.value,loading:busy.value,onClick:confirm},{default:withCtx(()=>[createTextVNode(toDisplayString(actionLabel.value),1)]),_:1},8,[`disabled`,`loading`])]),_:1})):createCommentVNode(``,true),createVNode(VCardItem,null,{default:withCtx(()=>[!unref(mobile)?(openBlock(),createBlock(VCardTitle,{key:0,id:titleId,class:`vibe64-transfer-dialog__title`},{default:withCtx(()=>[createTextVNode(toDisplayString(title.value),1)]),_:1})):createCommentVNode(``,true),createVNode(VCardSubtitle,{class:`vibe64-transfer-dialog__subtitle`},{default:withCtx(()=>[createVNode(VIcon,{icon:__props.item.type===`directory`?unref(mdiFolderOutline):unref(mdiFileOutline),size:`18`,"aria-hidden":`true`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(__props.item.name)+` · from `+toDisplayString(__props.sourceLabel),1)]),_:1})]),_:1}),createVNode(VCardText,{class:`vibe64-transfer-dialog__body`},{default:withCtx(()=>[!__props.readOnly?(openBlock(),createBlock(VBtnToggle,{key:0,modelValue:mode.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>mode.value=$event),class:`vibe64-transfer-dialog__mode`,color:`primary`,divided:``,mandatory:``,role:`radiogroup`,rounded:`pill`,variant:`outlined`,"aria-label":`Move or copy`},{default:withCtx(()=>[createVNode(VBtn,{value:`copy`,"prepend-icon":unref(mdiContentCopy),role:`radio`,"aria-checked":String(mode.value===`copy`)},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Copy`,-1)])]),_:1},8,[`prepend-icon`,`aria-checked`]),createVNode(VBtn,{value:`move`,"prepend-icon":unref(mdiFileMoveOutline),role:`radio`,"aria-checked":String(mode.value===`move`)},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Move`,-1)])]),_:1},8,[`prepend-icon`,`aria-checked`])]),_:1},8,[`modelValue`])):createCommentVNode(``,true),_cache[10]||(_cache[10]=createBaseVNode(`h3`,{class:`vibe64-transfer-dialog__label`},`Destination`,-1)),createVNode(VChipGroup,{modelValue:destinationKey.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>destinationKey.value=$event),class:`vibe64-transfer-dialog__areas`,column:``,mandatory:``,"selected-class":`vibe64-transfer-dialog__chip--selected`,"aria-label":`Destination area`,role:`radiogroup`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.destinations,option=>{return openBlock(),createBlock(VChip,{key:option.key,"aria-checked":String(destinationKey.value===option.key),filter:``,"prepend-icon":option.icon,role:`radio`,size:`large`,value:option.key,variant:`outlined`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_1$2,toDisplayString(option.label),1)]),_:2},1032,[`aria-checked`,`prepend-icon`,`value`])}),128))]),_:1},8,[`modelValue`]),createBaseVNode(`nav`,_hoisted_2$2,[(openBlock(true),createElementBlock(Fragment,null,renderList(crumbs.value,(crumb,index)=>{return openBlock(),createElementBlock(Fragment,{key:crumb.path},[index?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiChevronRight),size:`18`,"aria-hidden":`true`},null,8,[`icon`])):createCommentVNode(``,true),index===crumbs.value.length-1?(openBlock(),createElementBlock(`span`,_hoisted_3$2,toDisplayString(crumb.title),1)):(openBlock(),createBlock(VBtn,{key:2,disabled:loading.value||busy.value,variant:`text`,onClick:$event=>browse(crumb.path)},{default:withCtx(()=>[createTextVNode(toDisplayString(crumb.title),1)]),_:2},1032,[`disabled`,`onClick`]))],64)}),128))]),loading.value?(openBlock(),createBlock(VSkeletonLoader,{key:1,type:`list-item@3`})):loadError.value?(openBlock(),createBlock(VAlert,{key:2,type:`error`,variant:`tonal`,density:`compact`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>browse(folder.value))},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Retry`,-1)])]),_:1})]),default:withCtx(()=>[createTextVNode(toDisplayString(loadError.value)+` `,1)]),_:1})):expired.value?(openBlock(),createElementBlock(`p`,_hoisted_4$2,`This Session Dropzone has expired.`)):folders.value.length?(openBlock(),createBlock(VList,{key:4,class:`vibe64-transfer-dialog__folders`,"aria-label":`Folders`,role:`group`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(folders.value,entry=>{return openBlock(),createBlock(VListItem,{key:entry.path,role:`button`,disabled:busy.value||insideItself(entry.path),"prepend-icon":unref(mdiFolderOutline),title:entry.name,"append-icon":unref(mdiChevronRight),onClick:$event=>browse(entry.path)},null,8,[`disabled`,`prepend-icon`,`title`,`append-icon`,`onClick`])}),128))]),_:1})):(openBlock(),createElementBlock(`p`,_hoisted_5$2,`No folders here. `+toDisplayString(mode.value===`move`?`Move`:`Copy`)+` into this folder, or open another one.`,1)),hasMore.value&&!loading.value?(openBlock(),createBlock(VBtn,{key:6,variant:`text`,disabled:busy.value,onClick:_cache[3]||(_cache[3]=$event=>browse(folder.value,true))},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Show more folders`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)]),_:1}),createVNode(VDivider),createBaseVNode(`div`,_hoisted_6$2,[createBaseVNode(`p`,{class:normalizeClass([`vibe64-transfer-dialog__target`,{"vibe64-transfer-dialog__target--blocked":blockedReason.value}]),"aria-live":`polite`},toDisplayString(blockedReason.value||`Into ${targetLabel.value}`),3),!unref(mobile)?(openBlock(),createElementBlock(`div`,_hoisted_7$2,[createVNode(VBtn,{variant:`text`,disabled:busy.value,onClick:close},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,variant:`flat`,disabled:actionDisabled.value,loading:busy.value,onClick:confirm},{default:withCtx(()=>[createTextVNode(toDisplayString(actionLabel.value),1)]),_:1},8,[`disabled`,`loading`])])):createCommentVNode(``,true)])]),_:1})):createCommentVNode(``,true),createVNode(Vibe64FileConflictDialog_default,{"folder-label":targetLabel.value,names:conflictNames.value,onChoose:resolveConflict},null,8,[`folder-label`,`names`])]),_:1},8,[`model-value`,`fullscreen`,`persistent`])}}};var Vibe64FileTransferDialog_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-9c8c8c03`]]);var _hoisted_1$1={key:0,class:`vibe64-upload-queue v64-focus-rings`,"aria-label":`Uploads`};var _hoisted_2$1={class:`vibe64-upload-queue__header`};var _hoisted_3$1={class:`vibe64-upload-queue__heading`};var _hoisted_4$1=[`id`];var _hoisted_5$1={class:`vibe64-upload-queue__text`};var _hoisted_6$1=[`title`];var _hoisted_7$1={class:`vibe64-upload-queue__announcement`,"aria-live":`polite`,role:`status`};var _sfc_main$1={__name:`Vibe64FileUploadQueue`,props:{active:{type:Boolean,default:false},items:{type:Array,default:()=>[]},note:{type:Function,default:()=>``}},emits:[`cancel`,`cancel-all`,`clear`,`remove`,`retry`],setup(__props){const props=__props;const ACTIVE=[`preparing`,`queued`,`uploading`,`delivering`];const expanded=ref(true);const listId=useId();const plural=(count,word)=>`${count} ${word}${count===1?``:`s`}`;const summary=computed(()=>{const counted=props.items.filter(item=>![`cancelled`,`failed`].includes(item.phase));const totalBytes=counted.reduce((sum,item)=>sum+(Number(item.totalBytes)||0),0);const sentBytes=counted.reduce((sum,item)=>sum+(item.phase===`ready`?Number(item.totalBytes)||0:Number(item.bytesSent)||0),0);const count=phases=>props.items.filter(item=>phases.includes(item.phase)).length;const done=count([`ready`]);const failed=count([`failed`]);const cancelled=count([`cancelled`]);const waiting=count(ACTIVE);const percent=totalBytes>0?Math.min(100,Math.round(sentBytes/totalBytes*100)):0;const outcome=[done&&`${done} uploaded`,failed&&`${failed} failed`,cancelled&&`${cancelled} cancelled`].filter(Boolean).join(` · `);if(waiting)return{done,failed,percent,title:`Uploading ${plural(waiting,`file`)}`,detail:`${formatFileSize(sentBytes)} of ${formatFileSize(totalBytes)} · ${percent}%${outcome?` · ${outcome}`:``}`};if(failed)return{done,failed,percent,title:`${plural(failed,`upload`)} failed`,detail:outcome};if(!done)return{done,failed,percent,title:`Uploads cancelled`,detail:outcome};return{done,failed,percent,title:`${plural(done,`file`)} uploaded`,detail:outcome}});const announcement=computed(()=>{if(!props.items.length)return``;return props.active?summary.value.title:`${summary.value.title}. ${summary.value.detail}`});function statusText(item){switch(item.phase){case`queued`:case`preparing`:return`Waiting · ${formatFileSize(item.totalBytes)}`;case`uploading`:return props.note(item)||(item.progress===null?`Uploading`:`${formatFileSize(item.bytesSent)} of ${formatFileSize(item.totalBytes)} · ${Math.round(item.progress)}%`);case`delivering`:return`Finishing`;case`ready`:return`Uploaded · ${formatFileSize(item.totalBytes)}`;case`cancelled`:return`Cancelled`;default:return item.error||`Upload failed`}}function statusIcon(item){return{ready:`M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M10 17L5 12L6.41 10.59L10 14.17L17.59 6.58L19 8L10 17Z`,failed:`M13,13H11V7H13M13,17H11V15H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z`,cancelled:`M12 2C17.5 2 22 6.5 22 12S17.5 22 12 22 2 17.5 2 12 6.5 2 12 2M12 4C10.1 4 8.4 4.6 7.1 5.7L18.3 16.9C19.3 15.5 20 13.8 20 12C20 7.6 16.4 4 12 4M16.9 18.3L5.7 7.1C4.6 8.4 4 10.1 4 12C4 16.4 7.6 20 12 20C13.9 20 15.6 19.4 16.9 18.3Z`,uploading:`M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z`,delivering:`M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z`}[item.phase]||`M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22C6.47,22 2,17.5 2,12A10,10 0 0,1 12,2M12.5,7V12.25L17,14.92L16.25,16.15L11,13V7H12.5Z`}function statusColor(item){return{ready:`success`,failed:`error`,uploading:`primary`,delivering:`primary`}[item.phase]||void 0}return(_ctx,_cache)=>{return __props.items.length?(openBlock(),createElementBlock(`section`,_hoisted_1$1,[createBaseVNode(`header`,_hoisted_2$1,[createVNode(VIcon,{class:`vibe64-upload-queue__header-icon`,color:__props.active?`primary`:summary.value.failed?`error`:`success`,icon:__props.active?unref(mdiUpload):summary.value.failed?unref(mdiAlertCircle):unref(mdiCheckCircle),"aria-hidden":`true`},null,8,[`color`,`icon`]),createBaseVNode(`div`,_hoisted_3$1,[createBaseVNode(`h3`,null,toDisplayString(summary.value.title),1),createBaseVNode(`p`,null,toDisplayString(summary.value.detail),1)]),__props.active?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`cancel-all`))},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Cancel all`,-1)])]),_:1})):createCommentVNode(``,true),createVNode(VBtn,{icon:expanded.value?unref(mdiChevronDown):unref(mdiChevronUp),"aria-label":expanded.value?`Hide upload list`:`Show upload list`,"aria-expanded":expanded.value?`true`:`false`,"aria-controls":unref(listId),variant:`text`,onClick:_cache[1]||(_cache[1]=$event=>expanded.value=!expanded.value)},null,8,[`icon`,`aria-label`,`aria-expanded`,`aria-controls`]),!__props.active?(openBlock(),createBlock(VBtn,{key:1,icon:unref(mdiClose),"aria-label":`Close uploads`,variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>_ctx.$emit(`clear`))},null,8,[`icon`])):createCommentVNode(``,true)]),__props.active?(openBlock(),createBlock(VProgressLinear,{key:0,"model-value":summary.value.percent,"aria-label":`Uploads ${summary.value.percent}% complete`,color:`primary`,height:`4`},null,8,[`model-value`,`aria-label`])):createCommentVNode(``,true),withDirectives(createBaseVNode(`ol`,{id:unref(listId),class:`vibe64-upload-queue__items`},[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.items,item=>{return openBlock(),createElementBlock(`li`,{key:item.clientId,class:`vibe64-upload-queue__item`},[createVNode(VIcon,{icon:statusIcon(item),color:statusColor(item),size:`20`,"aria-hidden":`true`},null,8,[`icon`,`color`]),createBaseVNode(`div`,_hoisted_5$1,[createBaseVNode(`span`,{class:`vibe64-upload-queue__name`,title:item.fileName},toDisplayString(item.fileName),9,_hoisted_6$1),createBaseVNode(`span`,{class:normalizeClass([`vibe64-upload-queue__status`,{"vibe64-upload-queue__status--error":item.phase===`failed`}])},toDisplayString(statusText(item)),3),item.phase===`uploading`||item.phase===`delivering`?(openBlock(),createBlock(VProgressLinear,{key:0,"aria-label":`${item.fileName} upload progress`,indeterminate:item.progress===null,"model-value":item.progress??0,color:`primary`,height:`4`,rounded:``},null,8,[`aria-label`,`indeterminate`,`model-value`])):createCommentVNode(``,true)]),ACTIVE.includes(item.phase)?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiClose),"aria-label":`Cancel ${item.fileName}`,title:`Cancel ${item.fileName}`,variant:`text`,onClick:$event=>_ctx.$emit(`cancel`,item)},null,8,[`icon`,`aria-label`,`title`,`onClick`])):(openBlock(),createElementBlock(Fragment,{key:1},[item.phase===`failed`||item.phase===`cancelled`?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiRefresh),"aria-label":`Try ${item.fileName} again`,title:`Try ${item.fileName} again`,variant:`text`,onClick:$event=>_ctx.$emit(`retry`,item)},null,8,[`icon`,`aria-label`,`title`,`onClick`])):createCommentVNode(``,true),createVNode(VBtn,{icon:unref(mdiClose),"aria-label":`Remove ${item.fileName} from the list`,title:`Remove ${item.fileName} from the list`,variant:`text`,onClick:$event=>_ctx.$emit(`remove`,item)},null,8,[`icon`,`aria-label`,`title`,`onClick`])],64))])}),128))],8,_hoisted_4$1),[[vShow,expanded.value]]),createBaseVNode(`span`,_hoisted_7$1,toDisplayString(announcement.value),1)])):createCommentVNode(``,true)}}};var Vibe64FileUploadQueue_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-77fc8cb8`]]);var _hoisted_1=[`aria-label`];var _hoisted_2={key:0,class:`vibe64-file-area__drop-target`,role:`status`};var _hoisted_3={key:2,class:`vibe64-file-area__description`};var _hoisted_4={key:4,class:`vibe64-file-area__body pa-4`};var _hoisted_5={class:`vibe64-file-area__file-bar`};var _hoisted_6=[`title`];var _hoisted_7={class:`vibe64-file-area__file-heading`};var _hoisted_8=[`title`];var _hoisted_9={class:`vibe64-file-area__file-folder`};var _hoisted_10={class:`vibe64-file-area__file-actions`};var _hoisted_11=[`aria-label`];var _hoisted_12={key:3,class:`vibe64-file-area__empty`};var _hoisted_13={key:1,class:`vibe64-file-area__body vibe64-file-area__empty`};var _hoisted_14={tabindex:`-1`};var _hoisted_15={key:0};var _hoisted_16={key:1,class:`vibe64-file-area__empty-actions`};var _hoisted_17={key:0,class:`vibe64-file-area__dialog-text`};var _sfc_main={__name:`Vibe64FileArea`,props:{active:{type:Boolean,default:true},agentActive:{type:Boolean,default:false},archived:{type:Boolean,default:false},area:{type:String,required:true},base:{type:String,required:true},destinations:{type:Array,default:()=>[]},projectSlug:{type:String,default:``},refreshKey:{type:Number,default:0},sessionId:{type:String,default:``}},emits:[`transferred`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const{smAndDown:mobile}=useDisplay();const feedback=useUiFeedback({source:`vibe64.files`});const areaInfo=computed(()=>vibe64FileArea(props.area));const readOnly=computed(()=>areaInfo.value.readOnly===true);const root=ref(null);const fileHeading=ref(null);const uploadInput=ref(null);const busy=ref(false);const downloading=ref([]);const archiveName=computed(()=>`${props.sessionId}.tar.gz`);const dialogTitleId=`vibe64-file-dialog-${useId()}`;const newFileTitleId=`vibe64-new-file-dialog-${useId()}`;const focus=useVibe64FileAreaFocus({root});const{restoreFocus}=focus;const browser=useVibe64FileAreaBrowser({areaInfo,busy,fileHeading,focus,props,root});const{breadcrumbs,closeFile,directory,dirty,draft,entries,expired,file,fileEntry,fileName,folderLabel,hasMore,imageSiblings,loadDirectory,loadError,loading,location,openEntry,refresh,stepImage}=browser;const canWrite=computed(()=>!readOnly.value&&!expired.value);const{dragDepth,dragEnter,dragLeave,dragOver,dropFiles,startUploads,uploads}=useVibe64FileAreaUploads({browser,canWrite,feedback,focus,props});const{confirmDialog,copyLocation,createFile,dialogEntry,dialogName,dialogOpen,dialogOperation,dialogTitle,nameError,newFileName,newFileOpen,newFileText,openDialog,openNewFile,openTransfer,save,saveShortcut,transferItem,transferred}=useVibe64FileAreaCommands({browser,busy,emit,feedback,fileHeading,focus,props});function chooseFiles(){uploadInput.value?.click()}function pickFiles(event){const files=[...event.target.files||[]];event.target.value=``;return startUploads(files)}function previewKey(event){if(!file.value?.image||event.defaultPrevented||event.target.closest?.(`input, textarea, [role='dialog'], .v-overlay`))return;if(event.key!==`Escape`&&event.target.closest?.(`.vibe64-image-preview__stage--actual`))return;if(event.key===`Escape`)closeFile();else if(event.key===`ArrowLeft`)stepImage(-1);else if(event.key===`ArrowRight`)stepImage(1);else return;event.preventDefault()}async function download(target,operation=`download`){if(downloading.value.includes(target))return;downloading.value=[...downloading.value,target];try{await downloadAttachment(scopedDevelopmentApiUrl(fileAreaUrl(props.base,operation,target),props.projectSlug),target.split(`/`).at(-1),`Download failed.`)}catch(error){feedback.error(error,`Download failed.`)}finally{downloading.value=downloading.value.filter(candidate=>candidate!==target)}}function barAction(icon,label){return mobile.value?{icon,"aria-label":label.replace(`…`,``),title:label,variant:`text`}:{"prepend-icon":icon,text:label,variant:`text`}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{ref_key:`root`,ref:root,class:normalizeClass([`vibe64-file-area v64-focus-rings`,{"vibe64-file-area--mobile":unref(mobile)}]),"aria-label":readOnly.value?`${areaInfo.value.label} files, read only`:areaInfo.value.label,onDragenter:_cache[23]||(_cache[23]=withModifiers((...args)=>unref(dragEnter)&&unref(dragEnter)(...args),[`prevent`])),onDragover:_cache[24]||(_cache[24]=withModifiers((...args)=>unref(dragOver)&&unref(dragOver)(...args),[`prevent`])),onDragleave:_cache[25]||(_cache[25]=withModifiers((...args)=>unref(dragLeave)&&unref(dragLeave)(...args),[`prevent`])),onDrop:_cache[26]||(_cache[26]=withModifiers((...args)=>unref(dropFiles)&&unref(dropFiles)(...args),[`prevent`])),onKeydown:previewKey},[unref(dragDepth)>0&&canWrite.value?(openBlock(),createElementBlock(`div`,_hoisted_2,[createVNode(VIcon,{icon:unref(mdiTrayArrowDown),size:`40`,"aria-hidden":`true`},null,8,[`icon`]),createBaseVNode(`span`,null,`Drop to upload to `+toDisplayString(unref(folderLabel)),1)])):createCommentVNode(``,true),!unref(file)?(openBlock(),createBlock(Vibe64FileAreaToolbar_default,{key:1,"archive-available":__props.archived&&__props.area===`session`,"archive-downloading":downloading.value.includes(archiveName.value),breadcrumbs:unref(breadcrumbs),busy:busy.value,"can-write":canWrite.value,directory:unref(directory),loading:unref(loading),location:unref(location),mobile:unref(mobile),onCopyLocation:unref(copyLocation),onDownloadArchive:_cache[0]||(_cache[0]=$event=>download(archiveName.value,`archive`)),onNewFile:unref(openNewFile),onNewFolder:_cache[1]||(_cache[1]=$event=>unref(openDialog)(`mkdir`)),onOpenFolder:_cache[2]||(_cache[2]=$event=>unref(loadDirectory)($event,false,{focus:true})),onRefresh:unref(refresh),onUpload:chooseFiles},null,8,[`archive-available`,`archive-downloading`,`breadcrumbs`,`busy`,`can-write`,`directory`,`loading`,`location`,`mobile`,`onCopyLocation`,`onNewFile`,`onRefresh`])):createCommentVNode(``,true),createBaseVNode(`input`,{ref_key:`uploadInput`,ref:uploadInput,type:`file`,multiple:``,class:`d-none`,"aria-label":`Choose files to upload`,onChange:pickFiles},null,544),!unref(file)&&areaInfo.value.description?(openBlock(),createElementBlock(`p`,_hoisted_3,toDisplayString(areaInfo.value.description),1)):createCommentVNode(``,true),unref(loading)?(openBlock(),createBlock(VSkeletonLoader,{key:3,type:`list-item-two-line@5`,class:`vibe64-file-area__body`})):unref(loadError)?(openBlock(),createElementBlock(`div`,_hoisted_4,[createVNode(VAlert,{type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(loadError)),1)]),_:1}),createVNode(VBtn,{class:`mt-3`,variant:`tonal`,onClick:unref(refresh)},{default:withCtx(()=>[..._cache[27]||(_cache[27]=[createTextVNode(`Try again`,-1)])]),_:1},8,[`onClick`])])):unref(file)?(openBlock(),createElementBlock(Fragment,{key:5},[createBaseVNode(`div`,_hoisted_5,[createBaseVNode(`span`,{title:unref(dirty)?`Save or discard your changes first`:`Back to folder`},[createVNode(VBtn,{icon:unref(mdiArrowLeft),"aria-label":`Back to folder`,variant:`text`,disabled:unref(dirty)||busy.value,onClick:unref(closeFile)},null,8,[`icon`,`disabled`,`onClick`])],8,_hoisted_6),createBaseVNode(`div`,_hoisted_7,[createBaseVNode(`h3`,{ref_key:`fileHeading`,ref:fileHeading,class:`vibe64-file-area__file-name`,title:unref(file).path,tabindex:`-1`},toDisplayString(unref(fileName)),9,_hoisted_8),createBaseVNode(`p`,_hoisted_9,toDisplayString(unref(folderLabel)),1)]),createBaseVNode(`div`,_hoisted_10,[unref(dirty)?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VBtn,{variant:`text`,disabled:busy.value,onClick:_cache[3]||(_cache[3]=$event=>draft.value=unref(file).text)},{default:withCtx(()=>[..._cache[28]||(_cache[28]=[createTextVNode(`Discard`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,variant:`flat`,loading:busy.value,onClick:unref(save)},{default:withCtx(()=>[..._cache[29]||(_cache[29]=[createTextVNode(`Save`,-1)])]),_:1},8,[`loading`,`onClick`])],64)):(openBlock(),createElementBlock(Fragment,{key:1},[unref(imageSiblings).length>1?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VBtn,{icon:unref(mdiChevronLeft),"aria-label":`Previous image`,title:`Previous image (←)`,variant:`text`,onClick:_cache[4]||(_cache[4]=$event=>unref(stepImage)(-1))},null,8,[`icon`]),createVNode(VBtn,{icon:unref(mdiChevronRight),"aria-label":`Next image`,title:`Next image (→)`,variant:`text`,onClick:_cache[5]||(_cache[5]=$event=>unref(stepImage)(1))},null,8,[`icon`])],64)):createCommentVNode(``,true),createVNode(VBtn,mergeProps(barAction(unref(mdiDownload),`Download`),{"aria-label":`Download file`,loading:downloading.value.includes(unref(file).path),onClick:_cache[6]||(_cache[6]=$event=>download(unref(file).path))}),null,16,[`loading`]),__props.destinations.length?(openBlock(),createBlock(VBtn,mergeProps({key:1},barAction(unref(mdiFileMoveOutline),readOnly.value?`Copy to…`:`Move or copy…`),{disabled:busy.value,onClick:_cache[7]||(_cache[7]=$event=>unref(openTransfer)(unref(fileEntry)))}),null,16,[`disabled`])):createCommentVNode(``,true),canWrite.value?(openBlock(),createBlock(VBtn,{key:2,icon:unref(mdiDeleteOutline),"aria-label":`Delete file`,title:`Delete`,variant:`text`,disabled:busy.value,onClick:_cache[8]||(_cache[8]=$event=>unref(openDialog)(`delete`,unref(fileEntry)))},null,8,[`icon`,`disabled`])):createCommentVNode(``,true)],64))])]),unref(file).image?(openBlock(),createBlock(Vibe64ImagePreview_default,{key:unref(file).src,class:`vibe64-file-area__body`,name:unref(fileName),size:unref(file).size,src:unref(file).src},null,8,[`name`,`size`,`src`])):canWrite.value&&typeof unref(file).text===`string`?(openBlock(),createBlock(VTextarea,{key:1,modelValue:unref(draft),"onUpdate:modelValue":_cache[9]||(_cache[9]=$event=>isRef(draft)?draft.value=$event:null),"aria-label":`Contents of ${unref(fileName)}`,class:`vibe64-file-area__text`,"hide-details":``,readonly:busy.value,rows:`18`,variant:`outlined`,onKeydown:[withKeys(withModifiers(unref(saveShortcut),[`ctrl`,`prevent`]),[`s`]),withKeys(withModifiers(unref(saveShortcut),[`meta`,`prevent`]),[`s`])]},null,8,[`modelValue`,`aria-label`,`readonly`,`onKeydown`])):typeof unref(file).text===`string`?(openBlock(),createElementBlock(`pre`,{key:2,class:`vibe64-file-area__preview`,tabindex:`0`,"aria-label":`Contents of ${unref(fileName)}`},toDisplayString(unref(file).text),9,_hoisted_11)):(openBlock(),createElementBlock(`div`,_hoisted_12,[createVNode(VIcon,{icon:unref(mdiFileOutline),size:`40`,"aria-hidden":`true`},null,8,[`icon`]),createBaseVNode(`p`,null,toDisplayString(unref(file).message),1),createVNode(VBtn,{"prepend-icon":unref(mdiDownload),variant:`tonal`,loading:downloading.value.includes(unref(file).path),onClick:_cache[10]||(_cache[10]=$event=>download(unref(file).path))},{default:withCtx(()=>[..._cache[30]||(_cache[30]=[createTextVNode(`Download`,-1)])]),_:1},8,[`prepend-icon`,`loading`])]))],64)):(openBlock(),createElementBlock(Fragment,{key:6},[unref(entries).length?(openBlock(),createBlock(Vibe64FileAreaListing_default,{key:0,busy:busy.value,"can-transfer":__props.destinations.length>0,"can-write":canWrite.value,downloading:downloading.value,entries:unref(entries),"has-more":unref(hasMore),mobile:unref(mobile),"read-only":readOnly.value,onDelete:_cache[11]||(_cache[11]=$event=>unref(openDialog)(`delete`,$event)),onDownload:download,onOpen:unref(openEntry),onRename:_cache[12]||(_cache[12]=$event=>unref(openDialog)(`rename`,$event)),onShowMore:_cache[13]||(_cache[13]=$event=>unref(loadDirectory)(unref(directory),true)),onTransfer:unref(openTransfer)},null,8,[`busy`,`can-transfer`,`can-write`,`downloading`,`entries`,`has-more`,`mobile`,`read-only`,`onOpen`,`onTransfer`])):(openBlock(),createElementBlock(`div`,_hoisted_13,[createVNode(VIcon,{icon:areaInfo.value.icon,size:`48`,"aria-hidden":`true`},null,8,[`icon`]),createBaseVNode(`h3`,_hoisted_14,toDisplayString(unref(expired)?`This Session Dropzone has expired`:unref(directory)?`This folder is empty`:`${areaInfo.value.label} is empty`),1),canWrite.value?(openBlock(),createElementBlock(`p`,_hoisted_15,[_cache[31]||(_cache[31]=createTextVNode(`Drop files here, upload them, or create a text file.`,-1)),unref(location)?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(` The AI can use this folder too.`)],64)):createCommentVNode(``,true)])):createCommentVNode(``,true),canWrite.value?(openBlock(),createElementBlock(`div`,_hoisted_16,[createVNode(VBtn,{"prepend-icon":unref(mdiUpload),color:`primary`,variant:`flat`,onClick:chooseFiles},{default:withCtx(()=>[..._cache[32]||(_cache[32]=[createTextVNode(`Upload`,-1)])]),_:1},8,[`prepend-icon`]),createVNode(VBtn,{"prepend-icon":unref(mdiFilePlusOutline),variant:`tonal`,onClick:unref(openNewFile)},{default:withCtx(()=>[..._cache[33]||(_cache[33]=[createTextVNode(`New file`,-1)])]),_:1},8,[`prepend-icon`,`onClick`])])):createCommentVNode(``,true)]))],64)),createVNode(Vibe64FileUploadQueue_default,{active:unref(uploads).active.value,items:unref(uploads).items.value,onCancel:unref(uploads).cancel,onCancelAll:unref(uploads).cancelAll,onClear:unref(uploads).clear,onRemove:unref(uploads).remove,onRetry:unref(uploads).retry},null,8,[`active`,`items`,`onCancel`,`onCancelAll`,`onClear`,`onRemove`,`onRetry`]),createVNode(VDialog,{modelValue:unref(dialogOpen),"onUpdate:modelValue":_cache[16]||(_cache[16]=$event=>isRef(dialogOpen)?dialogOpen.value=$event:null),"aria-labelledby":dialogTitleId,"content-class":unref(mobile)?`vibe64-file-area__dialog--top`:void 0,"max-width":`460`,persistent:busy.value,onAfterLeave:unref(restoreFocus)},{default:withCtx(()=>[createVNode(VCard,{class:`vibe64-file-area__dialog v64-focus-rings`},{default:withCtx(()=>[createVNode(VCardItem,null,{default:withCtx(()=>[createVNode(VCardTitle,{id:dialogTitleId,class:`vibe64-file-area__dialog-title`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(dialogTitle)),1)]),_:1})]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[unref(dialogOperation)===`delete`?(openBlock(),createElementBlock(`p`,_hoisted_17,toDisplayString(unref(dialogEntry)?.type===`directory`?`It and everything inside it will be deleted from ${areaInfo.value.label}.`:`It will be deleted from ${areaInfo.value.label}.`)+` This can’t be undone. `,1)):(openBlock(),createBlock(VTextField,{key:1,modelValue:unref(dialogName),"onUpdate:modelValue":_cache[14]||(_cache[14]=$event=>isRef(dialogName)?dialogName.value=$event:null),autofocus:``,"error-messages":unref(nameError),label:`Name`,readonly:busy.value,variant:`outlined`,onKeydown:withKeys(withModifiers(unref(confirmDialog),[`prevent`]),[`enter`])},null,8,[`modelValue`,`error-messages`,`readonly`,`onKeydown`]))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,disabled:busy.value,onClick:_cache[15]||(_cache[15]=$event=>dialogOpen.value=false)},{default:withCtx(()=>[..._cache[34]||(_cache[34]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:unref(dialogOperation)===`delete`?`error`:`primary`,variant:`flat`,loading:busy.value,onClick:unref(confirmDialog)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(dialogOperation)===`delete`?`Delete`:unref(dialogOperation)===`rename`?`Rename`:`Create`),1)]),_:1},8,[`color`,`loading`,`onClick`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`content-class`,`persistent`,`onAfterLeave`]),createVNode(VDialog,{modelValue:unref(newFileOpen),"onUpdate:modelValue":_cache[21]||(_cache[21]=$event=>isRef(newFileOpen)?newFileOpen.value=$event:null),"aria-labelledby":newFileTitleId,fullscreen:unref(mobile),"max-width":`640`,persistent:busy.value||Boolean(unref(newFileText)),scrollable:``,onAfterLeave:unref(restoreFocus)},{default:withCtx(()=>[createVNode(VCard,{class:`vibe64-file-area__new-file v64-focus-rings`},{default:withCtx(()=>[unref(mobile)?(openBlock(),createBlock(VToolbar,{key:0,color:`surface`},{default:withCtx(()=>[createVNode(VBtn,{icon:unref(mdiClose),"aria-label":`Close`,disabled:busy.value,onClick:_cache[17]||(_cache[17]=$event=>newFileOpen.value=false)},null,8,[`icon`,`disabled`]),createVNode(VToolbarTitle,{id:newFileTitleId,class:`vibe64-file-area__bar-title`},{default:withCtx(()=>[..._cache[35]||(_cache[35]=[createTextVNode(`New text file`,-1)])]),_:1}),createVNode(VBtn,{class:`vibe64-file-area__bar-action me-2`,color:`primary`,variant:`text`,loading:busy.value,onClick:unref(createFile)},{default:withCtx(()=>[..._cache[36]||(_cache[36]=[createTextVNode(`Create`,-1)])]),_:1},8,[`loading`,`onClick`])]),_:1})):createCommentVNode(``,true),createVNode(VCardItem,null,{default:withCtx(()=>[!unref(mobile)?(openBlock(),createBlock(VCardTitle,{key:0,id:newFileTitleId,class:`vibe64-file-area__dialog-title`},{default:withCtx(()=>[..._cache[37]||(_cache[37]=[createTextVNode(`New text file`,-1)])]),_:1})):createCommentVNode(``,true),createVNode(VCardSubtitle,null,{default:withCtx(()=>[createTextVNode(`In `+toDisplayString(unref(folderLabel)),1)]),_:1})]),_:1}),createVNode(VCardText,{class:`vibe64-file-area__new-file-body`},{default:withCtx(()=>[createVNode(VTextField,{modelValue:unref(newFileName),"onUpdate:modelValue":_cache[18]||(_cache[18]=$event=>isRef(newFileName)?newFileName.value=$event:null),autofocus:``,"error-messages":unref(nameError),label:`File name`,placeholder:`notes.md`,readonly:busy.value,variant:`outlined`,onKeydown:withKeys(withModifiers(unref(createFile),[`prevent`]),[`enter`])},null,8,[`modelValue`,`error-messages`,`readonly`,`onKeydown`]),createVNode(VTextarea,{modelValue:unref(newFileText),"onUpdate:modelValue":_cache[19]||(_cache[19]=$event=>isRef(newFileText)?newFileText.value=$event:null),class:`vibe64-file-area__text`,label:`Contents`,readonly:busy.value,rows:`12`,variant:`outlined`},null,8,[`modelValue`,`readonly`])]),_:1}),!unref(mobile)?(openBlock(),createBlock(VCardActions,{key:1},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,disabled:busy.value,onClick:_cache[20]||(_cache[20]=$event=>newFileOpen.value=false)},{default:withCtx(()=>[..._cache[38]||(_cache[38]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,variant:`flat`,loading:busy.value,onClick:unref(createFile)},{default:withCtx(()=>[..._cache[39]||(_cache[39]=[createTextVNode(`Create`,-1)])]),_:1},8,[`loading`,`onClick`])]),_:1})):createCommentVNode(``,true)]),_:1})]),_:1},8,[`modelValue`,`fullscreen`,`persistent`,`onAfterLeave`]),createVNode(Vibe64FileConflictDialog_default,{"folder-label":unref(folderLabel),names:unref(uploads).conflicts.value.names,onChoose:unref(uploads).resolveConflict,onClosed:unref(restoreFocus)},null,8,[`folder-label`,`names`,`onChoose`,`onClosed`]),createVNode(Vibe64FileTransferDialog_default,{destinations:__props.destinations,item:unref(transferItem),"read-only":readOnly.value,"source-area":__props.area,"source-base":__props.base,"source-label":areaInfo.value.label,onClose:_cache[22]||(_cache[22]=$event=>transferItem.value=null),onClosed:unref(restoreFocus),onDone:unref(transferred)},null,8,[`destinations`,`item`,`read-only`,`source-area`,`source-base`,`source-label`,`onClosed`,`onDone`])],42,_hoisted_1)}}};var Vibe64FileArea_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-216ace36`]]);export{useVibe64FileUploads as a,vibe64DroppedFiles as c,uploadFileRequest as d,VIBE64_UPLOAD_MAX_BYTES as f,Vibe64FileConflictDialog_default as i,vibe64FileArea as l,Vibe64FileUploadQueue_default as n,filePreviewImageType as o,Vibe64FileTransferDialog_default as r,Vibe64ImagePreview_default as s,Vibe64FileArea_default as t,vibe64FileTransferMessage as u};
|