vibe64 0.1.38 → 0.1.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{GithubBrowserTabs-BykoCFfz.js → GithubBrowserTabs-C2NO5l8g.js} +1 -1
- package/dist/assets/{Vibe64AuthSettingsButton-CIwtchKm.js → Vibe64AuthSettingsButton-fY4ZiIFF.js} +1 -1
- package/dist/assets/{Vibe64DashboardShell-DXVDJUAY.js → Vibe64DashboardShell-BSq7uXEW.js} +1 -1
- package/dist/assets/{Vibe64DatabaseWorkspace-Ca8IHSRq.js → Vibe64DatabaseWorkspace-CEml9BWn.js} +1 -1
- package/dist/assets/{Vibe64OutputControls-DngQNTTt.js → Vibe64OutputControls-_zhGX9ne.js} +1 -1
- package/dist/assets/{Vibe64RepositoryWorkspace-BfsZozSJ.js → Vibe64RepositoryWorkspace-obZFXkoG.js} +1 -1
- package/dist/assets/{Vibe64SessionFiles-n87RqqY6.js → Vibe64SessionFiles-CQzs6fee.js} +1 -1
- package/dist/assets/{_sessionId_-B_TTRB4c.js → _sessionId_-CKkGH3Rx.js} +1 -1
- package/dist/assets/{_slug_-DsqilUs_.js → _slug_-BclonbST.js} +7 -7
- package/dist/assets/{_slug_-Buxpw0T4.css → _slug_-CZ1bxO9C.css} +1 -1
- package/dist/assets/{access-tl4ht_d8.js → access-WlhPvPgy.js} +1 -1
- package/dist/assets/{app-DT4_MliP.js → app-BNP_n_Tt.js} +1 -1
- package/dist/assets/{changes-DZWHZguL.js → changes-CHJjrZAc.js} +1 -1
- package/dist/assets/{dashboard-iREwhGqv.js → dashboard-CuutW8iv.js} +1 -1
- package/dist/assets/{definitions-CNu5E87y.js → definitions-BrMvu6yV.js} +1 -1
- package/dist/assets/{env-D5KpTEw7.js → env-D3KQGvRe.js} +1 -1
- package/dist/assets/{history-DVURy45X.js → history-1_NU8azF.js} +1 -1
- package/dist/assets/{index-GBRpNZLy.js → index-dNxr4Lg9.js} +4 -4
- package/dist/assets/{integrations-Dy5jIiJ5.js → integrations-BMzWQQpa.js} +1 -1
- package/dist/assets/{issues-lh7R775d.js → issues-Bywux4s7.js} +1 -1
- package/dist/assets/{learning-_O1PEaam.js → learning-Bdi3XRS7.js} +1 -1
- package/dist/assets/{pull-requests-ByE-Dvk7.js → pull-requests-ncmKT3sS.js} +1 -1
- package/dist/assets/{repository-BUfUAyS9.js → repository-BL_2bgzC.js} +1 -1
- package/dist/assets/{settings-CzhIcn9K.js → settings-1rpuL7eR.js} +1 -1
- package/dist/assets/{useArchivedVibe64Sessions-CLHJOyeW.js → useArchivedVibe64Sessions-_LB2XxEa.js} +1 -1
- package/dist/assets/{useVibe64ConversationLog-B4JgmxUf.js → useVibe64ConversationLog-BqUI0S5n.js} +1 -1
- package/dist/assets/{useVibe64SessionData-YhhE_5pC.js → useVibe64SessionData-B686lToN.js} +1 -1
- package/dist/assets/{useVibe64SessionSelection-CuZCzAcY.js → useVibe64SessionSelection-BzL1y_Vq.js} +1 -1
- package/dist/assets/{vibe64SessionFocus-Cz5Vq1re.js → vibe64SessionFocus-CqZNTvYF.js} +1 -1
- package/dist/index.html +1 -1
- package/docs/colleague-usage/learning-environment.md +1 -2
- package/docs/colleague-usage/lesson-step-bar.md +15 -16
- package/docs/training-content.md +2 -1
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Jn as __esmMin,Xn as __toCommonJS,Yn as __exportAll,Zn as __toESM,d as VProgressLinear,h as VIcon,qn as __commonJSMin}from"./ripple-BVltMmyV.js";import{D as createVNode,E as createTextVNode,Ht as watch,J as inject,On as unref,Ut as watchEffect,_ as createBaseVNode,b as createElementBlock,bt as renderList,ct as onMounted,ft as onUnmounted,g as computed,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,un as isRef,v as createBlock,vn as ref,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{t as useEndpointResource}from"./useEndpointResource-DWoQ2keu.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{D as validateSchemaPayload,k as createSchema,n as useRealtimeEvent,o as projectAppPath}from"./useRealtimeEvent-Bwapstla.js";import{t as VSelect}from"./VSelect-DL3HaA5m.js";import{c as VListItemTitle,l as VListItemSubtitle,n as VList,s as VListItem}from"./VMenu-C_x18lwb.js";import{t as VChip}from"./VChip-CcI-Oo2J.js";import{t as VTextField}from"./VTextField-BR2eZeFT.js";import{a as VIBE64_COLLEAGUE_INTEGRATIONS_KEY}from"./vibe64AssistantHost-CP6oxv5b.js";import{et as mdiConnection,ot as mdiCreation}from"./mdi-CG9pWOSj.js";import{i as VBtnToggle,t as VBtn}from"./VBtn-B2MBK2DL.js";import{t as VAlert}from"./VAlert-P256xaE0.js";import{t as VCheckbox}from"./VCheckbox-C7A1ZW4D.js";import{t as VSheet}from"./VSheet-DZWsu0kL.js";import{t as VDialog}from"./VDialog-Bu3EfKb1.js";import{n as VCardText,o as VCardActions,t as VCard}from"./VCard-mXy0k4aS.js";import{n as VCol,t as VRow}from"./VRow-Cpw7OHQV.js";import{i as VExpansionPanelText,n as VExpansionPanel,r as VExpansionPanelTitle,t as VExpansionPanels}from"./VExpansionPanels-Dgjrop0V.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-CttxM1tw.js";import{t as VTextarea}from"./VTextarea-DbqamXJd.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useCommand}from"./useCommand-Bqxb-naz.js";import{r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-Bp1ImZlz.js";import{t as vibe64BrowserTabOriginId}from"./vibe64BrowserTabOrigin-SF9E31vi.js";import{$ as vibe64SessionPath,O as VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,Qt as VCombobox,c as IntegrationConfigurationFields_default,f as validateIntegrationConfiguration,l as getProviderClientAuthenticationMethods,u as getProviderScopes,y as readRefOrGetterValue}from"./index-GBRpNZLy.js";import{t as Vibe64AsyncModuleState_default}from"./Vibe64AsyncModuleState-Do9EqX3S.js";import{t as connectorDefinitions}from"./definitions-CNu5E87y.js";var GOOGLE_SCOPE_BASE=`https://www.googleapis.com/auth/`;var googleCalendarDefinition=Object.freeze({id:`google-calendar`,name:`Google Calendar`,description:`Read calendars and create, edit or cancel events.`,categories:[`Google`,`Productivity`],accountModes:[`shared`,`per-user`,`assistant`],authenticationMethods:[`oauth2`],setup:{callbackPath:`/integrations/google/callback`,url:`https://developers.google.com/identity/protocols/oauth2/web-server`,steps:[`In Google Cloud, select the project for this application. Open APIs & Services > Library, search for Google Calendar API, open it and choose Enable.`,`Open Google Auth Platform > Branding. If setup has not started, choose Get Started; enter the app name, support email and contact email, choose the audience, review the policy and finish with Create.`,`Choose External if people outside your Google Workspace organization will connect. During testing, open Audience > Test users > Add users, enter the allowed Google accounts and Save. Internal is only for your organization. External Testing refresh tokens for these API permissions expire after seven days; reconnect during testing. Public release also requires completing the applicable Google review.`,`For an external app, open Data Access > Add or Remove Scopes. Add the permissions selected in this integration and Save. Sensitive or restricted scopes can require Google verification before public use; creating a client does not complete that review.`,`Keep List calendars for the initial connection check and Read events if the application will read events. Event-only or availability-only permissions do not authorize the calendar-list check. Use an account that can access the intended calendars; selecting a scope does not grant calendar sharing access.`,`To create, edit or cancel events, select Manage events, add calendar.events in Google Data Access, and reconnect for fresh consent. Keep List calendars for verification. Calendar sharing must independently allow the connected account to write.`,`Choose the destination calendar and attendee notification policy explicitly. All-day end dates are exclusive; timed recurring events need an IANA time zone. Editing or cancelling a recurring master affects the series; use an expanded occurrence ID for one instance. Changing attendee arrays replaces the list; read the latest event first.`,`Open Clients > Create Client. Choose Web application and name it. Under Authorized redirect URIs, choose Add URI and paste the application callback shown here, then Create. The editor dashboard URL is not the callback.`,`Copy the Client ID into this form and copy or download the full client secret immediately; Google only shows it at creation. Save configuration, then use Set credential in Env to put the secret value in the variable named by Client secret reference. If lost, open Clients, select this client and Add Secret; save the new value before disabling the old secret.`,`Use Set callback in Env to save the same application callback URL. If a Configured callback URL is shown, preserve it unless intentionally changing both Env and Google. Scheme, path, case and trailing slash must match exactly.`,`For a shared account, return here and check or connect the account once the application runtime is ready. For per-user connections, each person authorizes inside your application. Saving this registration neither connects every user nor installs the callback route.`]},scopes:[{value:`${GOOGLE_SCOPE_BASE}calendar.calendarlist.readonly`,label:`List calendars`,recommended:true},{value:`${GOOGLE_SCOPE_BASE}calendar.events.readonly`,label:`Read events`,recommended:true},{value:`${GOOGLE_SCOPE_BASE}calendar.readonly`,label:`Read all calendar data`},{value:`${GOOGLE_SCOPE_BASE}calendar`,label:`Manage calendars and events`},{value:`${GOOGLE_SCOPE_BASE}calendar.calendarlist`,label:`Manage calendar subscriptions`},{value:`${GOOGLE_SCOPE_BASE}calendar.events`,label:`Manage events`},{value:`${GOOGLE_SCOPE_BASE}calendar.freebusy`,label:`Read your availability`},{value:`${GOOGLE_SCOPE_BASE}calendar.settings.readonly`,label:`Read calendar settings`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.owned`,label:`Manage events in calendars you own`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.owned.readonly`,label:`Read events in calendars you own`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.freebusy`,label:`Read availability in accessible calendars`},{value:`${GOOGLE_SCOPE_BASE}calendar.app.created`,label:`Create and manage app-created calendars`},{value:`${GOOGLE_SCOPE_BASE}calendar.calendars`,label:`Manage calendar properties`},{value:`${GOOGLE_SCOPE_BASE}calendar.calendars.readonly`,label:`Read calendar properties`},{value:`${GOOGLE_SCOPE_BASE}calendar.acls`,label:`Manage calendar sharing permissions`},{value:`${GOOGLE_SCOPE_BASE}calendar.acls.readonly`,label:`Read calendar sharing permissions`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.public.readonly`,label:`Read public calendar events`},{value:`${GOOGLE_SCOPE_BASE}calendar.addons.execute`,label:`Run a Calendar add-on`},{value:`${GOOGLE_SCOPE_BASE}calendar.addons.current.event.read`,label:`Read the event open in a Calendar add-on`},{value:`${GOOGLE_SCOPE_BASE}calendar.addons.current.event.write`,label:`Edit the event open in a Calendar add-on`}],settingsFields:[],documentationUrl:`https://developers.google.com/workspace/calendar/api/guides/overview`});var require_code$1=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.regexpCode=exports.getEsmExportName=exports.getProperty=exports.safeStringify=exports.stringify=exports.strConcat=exports.addCodeArg=exports.str=exports._=exports.nil=exports._Code=exports.Name=exports.IDENTIFIER=exports._CodeOrName=void 0;var _CodeOrName=class{};exports._CodeOrName=_CodeOrName;exports.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;var Name=class extends _CodeOrName{constructor(s){super();if(!exports.IDENTIFIER.test(s))throw new Error(`CodeGen: name must be a valid identifier`);this.str=s}toString(){return this.str}emptyStr(){return false}get names(){return{[this.str]:1}}};exports.Name=Name;var _Code=class extends _CodeOrName{constructor(code){super();this._items=typeof code===`string`?[code]:code}toString(){return this.str}emptyStr(){if(this._items.length>1)return false;const item=this._items[0];return item===``||item===`""`}get str(){var _a;return(_a=this._str)!==null&&_a!==void 0?_a:this._str=this._items.reduce((s,c)=>`${s}${c}`,``)}get names(){var _a;return(_a=this._names)!==null&&_a!==void 0?_a:this._names=this._items.reduce((names,c)=>{if(c instanceof Name)names[c.str]=(names[c.str]||0)+1;return names},{})}};exports._Code=_Code;exports.nil=new _Code(``);function _(strs,...args){const code=[strs[0]];let i=0;while(i<args.length){addCodeArg(code,args[i]);code.push(strs[++i])}return new _Code(code)}exports._=_;var plus=new _Code(`+`);function str(strs,...args){const expr=[safeStringify(strs[0])];let i=0;while(i<args.length){expr.push(plus);addCodeArg(expr,args[i]);expr.push(plus,safeStringify(strs[++i]))}optimize(expr);return new _Code(expr)}exports.str=str;function addCodeArg(code,arg){if(arg instanceof _Code)code.push(...arg._items);else if(arg instanceof Name)code.push(arg);else code.push(interpolate(arg))}exports.addCodeArg=addCodeArg;function optimize(expr){let i=1;while(i<expr.length-1){if(expr[i]===plus){const res=mergeExprItems(expr[i-1],expr[i+1]);if(res!==void 0){expr.splice(i-1,3,res);continue}expr[i++]=`+`}i++}}function mergeExprItems(a,b){if(b===`""`)return a;if(a===`""`)return b;if(typeof a==`string`){if(b instanceof Name||a[a.length-1]!==`"`)return;if(typeof b!=`string`)return`${a.slice(0,-1)}${b}"`;if(b[0]===`"`)return a.slice(0,-1)+b.slice(1);return}if(typeof b==`string`&&b[0]===`"`&&!(a instanceof Name))return`"${a}${b.slice(1)}`}function strConcat(c1,c2){return c2.emptyStr()?c1:c1.emptyStr()?c2:str`${c1}${c2}`}exports.strConcat=strConcat;function interpolate(x){return typeof x==`number`||typeof x==`boolean`||x===null?x:safeStringify(Array.isArray(x)?x.join(`,`):x)}function stringify(x){return new _Code(safeStringify(x))}exports.stringify=stringify;function safeStringify(x){return JSON.stringify(x).replace(/\u2028/g,`\\u2028`).replace(/\u2029/g,`\\u2029`)}exports.safeStringify=safeStringify;function getProperty(key){return typeof key==`string`&&exports.IDENTIFIER.test(key)?new _Code(`.${key}`):_`[${key}]`}exports.getProperty=getProperty;function getEsmExportName(key){if(typeof key==`string`&&exports.IDENTIFIER.test(key))return new _Code(`${key}`);throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`)}exports.getEsmExportName=getEsmExportName;function regexpCode(rx){return new _Code(rx.toString())}exports.regexpCode=regexpCode}));var require_scope=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.ValueScope=exports.ValueScopeName=exports.Scope=exports.varKinds=exports.UsedValueState=void 0;var code_1=require_code$1();var ValueError=class extends Error{constructor(name){super(`CodeGen: "code" for ${name} not defined`);this.value=name.value}};var UsedValueState;(function(UsedValueState){UsedValueState[UsedValueState[`Started`]=0]=`Started`;UsedValueState[UsedValueState[`Completed`]=1]=`Completed`})(UsedValueState||(exports.UsedValueState=UsedValueState={}));exports.varKinds={const:new code_1.Name(`const`),let:new code_1.Name(`let`),var:new code_1.Name(`var`)};var Scope=class{constructor({prefixes,parent}={}){this._names={};this._prefixes=prefixes;this._parent=parent}toName(nameOrPrefix){return nameOrPrefix instanceof code_1.Name?nameOrPrefix:this.name(nameOrPrefix)}name(prefix){return new code_1.Name(this._newName(prefix))}_newName(prefix){const ng=this._names[prefix]||this._nameGroup(prefix);return`${prefix}${ng.index++}`}_nameGroup(prefix){var _a,_b;if(((_b=(_a=this._parent)===null||_a===void 0?void 0:_a._prefixes)===null||_b===void 0?void 0:_b.has(prefix))||this._prefixes&&!this._prefixes.has(prefix))throw new Error(`CodeGen: prefix "${prefix}" is not allowed in this scope`);return this._names[prefix]={prefix,index:0}}};exports.Scope=Scope;var ValueScopeName=class extends code_1.Name{constructor(prefix,nameStr){super(nameStr);this.prefix=prefix}setValue(value,{property,itemIndex}){this.value=value;this.scopePath=(0,code_1._)`.${new code_1.Name(property)}[${itemIndex}]`}};exports.ValueScopeName=ValueScopeName;var line=(0,code_1._)`\n`;var ValueScope=class extends Scope{constructor(opts){super(opts);this._values={};this._scope=opts.scope;this.opts={...opts,_n:opts.lines?line:code_1.nil}}get(){return this._scope}name(prefix){return new ValueScopeName(prefix,this._newName(prefix))}value(nameOrPrefix,value){var _a;if(value.ref===void 0)throw new Error(`CodeGen: ref must be passed in value`);const name=this.toName(nameOrPrefix);const{prefix}=name;const valueKey=(_a=value.key)!==null&&_a!==void 0?_a:value.ref;let vs=this._values[prefix];if(vs){const _name=vs.get(valueKey);if(_name)return _name}else vs=this._values[prefix]=new Map;vs.set(valueKey,name);const s=this._scope[prefix]||(this._scope[prefix]=[]);const itemIndex=s.length;s[itemIndex]=value.ref;name.setValue(value,{property:prefix,itemIndex});return name}getValue(prefix,keyOrRef){const vs=this._values[prefix];if(!vs)return;return vs.get(keyOrRef)}scopeRefs(scopeName,values=this._values){return this._reduceValues(values,name=>{if(name.scopePath===void 0)throw new Error(`CodeGen: name "${name}" has no value`);return(0,code_1._)`${scopeName}${name.scopePath}`})}scopeCode(values=this._values,usedValues,getCode){return this._reduceValues(values,name=>{if(name.value===void 0)throw new Error(`CodeGen: name "${name}" has no value`);return name.value.code},usedValues,getCode)}_reduceValues(values,valueCode,usedValues={},getCode){let code=code_1.nil;for(const prefix in values){const vs=values[prefix];if(!vs)continue;const nameSet=usedValues[prefix]=usedValues[prefix]||new Map;vs.forEach(name=>{if(nameSet.has(name))return;nameSet.set(name,UsedValueState.Started);let c=valueCode(name);if(c){const def=this.opts.es5?exports.varKinds.var:exports.varKinds.const;code=(0,code_1._)`${code}${def} ${name} = ${c};${this.opts._n}`}else if(c=getCode===null||getCode===void 0?void 0:getCode(name))code=(0,code_1._)`${code}${c}${this.opts._n}`;else throw new ValueError(name);nameSet.set(name,UsedValueState.Completed)})}return code}};exports.ValueScope=ValueScope}));var require_codegen=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.or=exports.and=exports.not=exports.CodeGen=exports.operators=exports.varKinds=exports.ValueScopeName=exports.ValueScope=exports.Scope=exports.Name=exports.regexpCode=exports.stringify=exports.getProperty=exports.nil=exports.strConcat=exports.str=exports._=void 0;var code_1=require_code$1();var scope_1=require_scope();var code_2=require_code$1();Object.defineProperty(exports,"_",{enumerable:true,get:function(){return code_2._}});Object.defineProperty(exports,"str",{enumerable:true,get:function(){return code_2.str}});Object.defineProperty(exports,"strConcat",{enumerable:true,get:function(){return code_2.strConcat}});Object.defineProperty(exports,"nil",{enumerable:true,get:function(){return code_2.nil}});Object.defineProperty(exports,"getProperty",{enumerable:true,get:function(){return code_2.getProperty}});Object.defineProperty(exports,"stringify",{enumerable:true,get:function(){return code_2.stringify}});Object.defineProperty(exports,"regexpCode",{enumerable:true,get:function(){return code_2.regexpCode}});Object.defineProperty(exports,"Name",{enumerable:true,get:function(){return code_2.Name}});var scope_2=require_scope();Object.defineProperty(exports,"Scope",{enumerable:true,get:function(){return scope_2.Scope}});Object.defineProperty(exports,"ValueScope",{enumerable:true,get:function(){return scope_2.ValueScope}});Object.defineProperty(exports,"ValueScopeName",{enumerable:true,get:function(){return scope_2.ValueScopeName}});Object.defineProperty(exports,"varKinds",{enumerable:true,get:function(){return scope_2.varKinds}});exports.operators={GT:new code_1._Code(`>`),GTE:new code_1._Code(`>=`),LT:new code_1._Code(`<`),LTE:new code_1._Code(`<=`),EQ:new code_1._Code(`===`),NEQ:new code_1._Code(`!==`),NOT:new code_1._Code(`!`),OR:new code_1._Code(`||`),AND:new code_1._Code(`&&`),ADD:new code_1._Code(`+`)};var Node=class{optimizeNodes(){return this}optimizeNames(_names,_constants){return this}};var Def=class extends Node{constructor(varKind,name,rhs){super();this.varKind=varKind;this.name=name;this.rhs=rhs}render({es5,_n}){const varKind=es5?scope_1.varKinds.var:this.varKind;const rhs=this.rhs===void 0?``:` = ${this.rhs}`;return`${varKind} ${this.name}${rhs};`+_n}optimizeNames(names,constants){if(!names[this.name.str])return;if(this.rhs)this.rhs=optimizeExpr(this.rhs,names,constants);return this}get names(){return this.rhs instanceof code_1._CodeOrName?this.rhs.names:{}}};var Assign=class extends Node{constructor(lhs,rhs,sideEffects){super();this.lhs=lhs;this.rhs=rhs;this.sideEffects=sideEffects}render({_n}){return`${this.lhs} = ${this.rhs};`+_n}optimizeNames(names,constants){if(this.lhs instanceof code_1.Name&&!names[this.lhs.str]&&!this.sideEffects)return;this.rhs=optimizeExpr(this.rhs,names,constants);return this}get names(){return addExprNames(this.lhs instanceof code_1.Name?{}:{...this.lhs.names},this.rhs)}};var AssignOp=class extends Assign{constructor(lhs,op,rhs,sideEffects){super(lhs,rhs,sideEffects);this.op=op}render({_n}){return`${this.lhs} ${this.op}= ${this.rhs};`+_n}};var Label=class extends Node{constructor(label){super();this.label=label;this.names={}}render({_n}){return`${this.label}:`+_n}};var Break=class extends Node{constructor(label){super();this.label=label;this.names={}}render({_n}){return`break${this.label?` ${this.label}`:``};`+_n}};var Throw=class extends Node{constructor(error){super();this.error=error}render({_n}){return`throw ${this.error};`+_n}get names(){return this.error.names}};var AnyCode=class extends Node{constructor(code){super();this.code=code}render({_n}){return`${this.code};`+_n}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(names,constants){this.code=optimizeExpr(this.code,names,constants);return this}get names(){return this.code instanceof code_1._CodeOrName?this.code.names:{}}};var ParentNode=class extends Node{constructor(nodes=[]){super();this.nodes=nodes}render(opts){return this.nodes.reduce((code,n)=>code+n.render(opts),``)}optimizeNodes(){const{nodes}=this;let i=nodes.length;while(i--){const n=nodes[i].optimizeNodes();if(Array.isArray(n))nodes.splice(i,1,...n);else if(n)nodes[i]=n;else nodes.splice(i,1)}return nodes.length>0?this:void 0}optimizeNames(names,constants){const{nodes}=this;let i=nodes.length;while(i--){const n=nodes[i];if(n.optimizeNames(names,constants))continue;subtractNames(names,n.names);nodes.splice(i,1)}return nodes.length>0?this:void 0}get names(){return this.nodes.reduce((names,n)=>addNames(names,n.names),{})}};var BlockNode=class extends ParentNode{render(opts){return`{`+opts._n+super.render(opts)+`}`+opts._n}};var Root=class extends ParentNode{};var Else=class extends BlockNode{};Else.kind=`else`;var If=class If extends BlockNode{constructor(condition,nodes){super(nodes);this.condition=condition}render(opts){let code=`if(${this.condition})`+super.render(opts);if(this.else)code+=`else `+this.else.render(opts);return code}optimizeNodes(){super.optimizeNodes();const cond=this.condition;if(cond===true)return this.nodes;let e=this.else;if(e){const ns=e.optimizeNodes();e=this.else=Array.isArray(ns)?new Else(ns):ns}if(e){if(cond===false)return e instanceof If?e:e.nodes;if(this.nodes.length)return this;return new If(not(cond),e instanceof If?[e]:e.nodes)}if(cond===false||!this.nodes.length)return void 0;return this}optimizeNames(names,constants){var _a;this.else=(_a=this.else)===null||_a===void 0?void 0:_a.optimizeNames(names,constants);if(!(super.optimizeNames(names,constants)||this.else))return;this.condition=optimizeExpr(this.condition,names,constants);return this}get names(){const names=super.names;addExprNames(names,this.condition);if(this.else)addNames(names,this.else.names);return names}};If.kind=`if`;var For=class extends BlockNode{};For.kind=`for`;var ForLoop=class extends For{constructor(iteration){super();this.iteration=iteration}render(opts){return`for(${this.iteration})`+super.render(opts)}optimizeNames(names,constants){if(!super.optimizeNames(names,constants))return;this.iteration=optimizeExpr(this.iteration,names,constants);return this}get names(){return addNames(super.names,this.iteration.names)}};var ForRange=class extends For{constructor(varKind,name,from,to){super();this.varKind=varKind;this.name=name;this.from=from;this.to=to}render(opts){const varKind=opts.es5?scope_1.varKinds.var:this.varKind;const{name,from,to}=this;return`for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)`+super.render(opts)}get names(){return addExprNames(addExprNames(super.names,this.from),this.to)}};var ForIter=class extends For{constructor(loop,varKind,name,iterable){super();this.loop=loop;this.varKind=varKind;this.name=name;this.iterable=iterable}render(opts){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(opts)}optimizeNames(names,constants){if(!super.optimizeNames(names,constants))return;this.iterable=optimizeExpr(this.iterable,names,constants);return this}get names(){return addNames(super.names,this.iterable.names)}};var Func=class extends BlockNode{constructor(name,args,async){super();this.name=name;this.args=args;this.async=async}render(opts){return`${this.async?`async `:``}function ${this.name}(${this.args})`+super.render(opts)}};Func.kind=`func`;var Return=class extends ParentNode{render(opts){return`return `+super.render(opts)}};Return.kind=`return`;var Try=class extends BlockNode{render(opts){let code=`try`+super.render(opts);if(this.catch)code+=this.catch.render(opts);if(this.finally)code+=this.finally.render(opts);return code}optimizeNodes(){var _a,_b;super.optimizeNodes();(_a=this.catch)===null||_a===void 0||_a.optimizeNodes();(_b=this.finally)===null||_b===void 0||_b.optimizeNodes();return this}optimizeNames(names,constants){var _a,_b;super.optimizeNames(names,constants);(_a=this.catch)===null||_a===void 0||_a.optimizeNames(names,constants);(_b=this.finally)===null||_b===void 0||_b.optimizeNames(names,constants);return this}get names(){const names=super.names;if(this.catch)addNames(names,this.catch.names);if(this.finally)addNames(names,this.finally.names);return names}};var Catch=class extends BlockNode{constructor(error){super();this.error=error}render(opts){return`catch(${this.error})`+super.render(opts)}};Catch.kind=`catch`;var Finally=class extends BlockNode{render(opts){return`finally`+super.render(opts)}};Finally.kind=`finally`;var CodeGen=class{constructor(extScope,opts={}){this._values={};this._blockStarts=[];this._constants={};this.opts={...opts,_n:opts.lines?`
|
|
1
|
+
import{Jn as __esmMin,Xn as __toCommonJS,Yn as __exportAll,Zn as __toESM,d as VProgressLinear,h as VIcon,qn as __commonJSMin}from"./ripple-BVltMmyV.js";import{D as createVNode,E as createTextVNode,Ht as watch,J as inject,On as unref,Ut as watchEffect,_ as createBaseVNode,b as createElementBlock,bt as renderList,ct as onMounted,ft as onUnmounted,g as computed,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,un as isRef,v as createBlock,vn as ref,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{t as useEndpointResource}from"./useEndpointResource-DWoQ2keu.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{D as validateSchemaPayload,k as createSchema,n as useRealtimeEvent,o as projectAppPath}from"./useRealtimeEvent-Bwapstla.js";import{t as VSelect}from"./VSelect-DL3HaA5m.js";import{c as VListItemTitle,l as VListItemSubtitle,n as VList,s as VListItem}from"./VMenu-C_x18lwb.js";import{t as VChip}from"./VChip-CcI-Oo2J.js";import{t as VTextField}from"./VTextField-BR2eZeFT.js";import{a as VIBE64_COLLEAGUE_INTEGRATIONS_KEY}from"./vibe64AssistantHost-CP6oxv5b.js";import{et as mdiConnection,ot as mdiCreation}from"./mdi-CG9pWOSj.js";import{i as VBtnToggle,t as VBtn}from"./VBtn-B2MBK2DL.js";import{t as VAlert}from"./VAlert-P256xaE0.js";import{t as VCheckbox}from"./VCheckbox-C7A1ZW4D.js";import{t as VSheet}from"./VSheet-DZWsu0kL.js";import{t as VDialog}from"./VDialog-Bu3EfKb1.js";import{n as VCardText,o as VCardActions,t as VCard}from"./VCard-mXy0k4aS.js";import{n as VCol,t as VRow}from"./VRow-Cpw7OHQV.js";import{i as VExpansionPanelText,n as VExpansionPanel,r as VExpansionPanelTitle,t as VExpansionPanels}from"./VExpansionPanels-Dgjrop0V.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-CttxM1tw.js";import{t as VTextarea}from"./VTextarea-DbqamXJd.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useCommand}from"./useCommand-Bqxb-naz.js";import{r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-Bp1ImZlz.js";import{t as vibe64BrowserTabOriginId}from"./vibe64BrowserTabOrigin-SF9E31vi.js";import{$ as vibe64SessionPath,O as VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT,Qt as VCombobox,c as IntegrationConfigurationFields_default,f as validateIntegrationConfiguration,l as getProviderClientAuthenticationMethods,u as getProviderScopes,y as readRefOrGetterValue}from"./index-dNxr4Lg9.js";import{t as Vibe64AsyncModuleState_default}from"./Vibe64AsyncModuleState-Do9EqX3S.js";import{t as connectorDefinitions}from"./definitions-BrMvu6yV.js";var GOOGLE_SCOPE_BASE=`https://www.googleapis.com/auth/`;var googleCalendarDefinition=Object.freeze({id:`google-calendar`,name:`Google Calendar`,description:`Read calendars and create, edit or cancel events.`,categories:[`Google`,`Productivity`],accountModes:[`shared`,`per-user`,`assistant`],authenticationMethods:[`oauth2`],setup:{callbackPath:`/integrations/google/callback`,url:`https://developers.google.com/identity/protocols/oauth2/web-server`,steps:[`In Google Cloud, select the project for this application. Open APIs & Services > Library, search for Google Calendar API, open it and choose Enable.`,`Open Google Auth Platform > Branding. If setup has not started, choose Get Started; enter the app name, support email and contact email, choose the audience, review the policy and finish with Create.`,`Choose External if people outside your Google Workspace organization will connect. During testing, open Audience > Test users > Add users, enter the allowed Google accounts and Save. Internal is only for your organization. External Testing refresh tokens for these API permissions expire after seven days; reconnect during testing. Public release also requires completing the applicable Google review.`,`For an external app, open Data Access > Add or Remove Scopes. Add the permissions selected in this integration and Save. Sensitive or restricted scopes can require Google verification before public use; creating a client does not complete that review.`,`Keep List calendars for the initial connection check and Read events if the application will read events. Event-only or availability-only permissions do not authorize the calendar-list check. Use an account that can access the intended calendars; selecting a scope does not grant calendar sharing access.`,`To create, edit or cancel events, select Manage events, add calendar.events in Google Data Access, and reconnect for fresh consent. Keep List calendars for verification. Calendar sharing must independently allow the connected account to write.`,`Choose the destination calendar and attendee notification policy explicitly. All-day end dates are exclusive; timed recurring events need an IANA time zone. Editing or cancelling a recurring master affects the series; use an expanded occurrence ID for one instance. Changing attendee arrays replaces the list; read the latest event first.`,`Open Clients > Create Client. Choose Web application and name it. Under Authorized redirect URIs, choose Add URI and paste the application callback shown here, then Create. The editor dashboard URL is not the callback.`,`Copy the Client ID into this form and copy or download the full client secret immediately; Google only shows it at creation. Save configuration, then use Set credential in Env to put the secret value in the variable named by Client secret reference. If lost, open Clients, select this client and Add Secret; save the new value before disabling the old secret.`,`Use Set callback in Env to save the same application callback URL. If a Configured callback URL is shown, preserve it unless intentionally changing both Env and Google. Scheme, path, case and trailing slash must match exactly.`,`For a shared account, return here and check or connect the account once the application runtime is ready. For per-user connections, each person authorizes inside your application. Saving this registration neither connects every user nor installs the callback route.`]},scopes:[{value:`${GOOGLE_SCOPE_BASE}calendar.calendarlist.readonly`,label:`List calendars`,recommended:true},{value:`${GOOGLE_SCOPE_BASE}calendar.events.readonly`,label:`Read events`,recommended:true},{value:`${GOOGLE_SCOPE_BASE}calendar.readonly`,label:`Read all calendar data`},{value:`${GOOGLE_SCOPE_BASE}calendar`,label:`Manage calendars and events`},{value:`${GOOGLE_SCOPE_BASE}calendar.calendarlist`,label:`Manage calendar subscriptions`},{value:`${GOOGLE_SCOPE_BASE}calendar.events`,label:`Manage events`},{value:`${GOOGLE_SCOPE_BASE}calendar.freebusy`,label:`Read your availability`},{value:`${GOOGLE_SCOPE_BASE}calendar.settings.readonly`,label:`Read calendar settings`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.owned`,label:`Manage events in calendars you own`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.owned.readonly`,label:`Read events in calendars you own`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.freebusy`,label:`Read availability in accessible calendars`},{value:`${GOOGLE_SCOPE_BASE}calendar.app.created`,label:`Create and manage app-created calendars`},{value:`${GOOGLE_SCOPE_BASE}calendar.calendars`,label:`Manage calendar properties`},{value:`${GOOGLE_SCOPE_BASE}calendar.calendars.readonly`,label:`Read calendar properties`},{value:`${GOOGLE_SCOPE_BASE}calendar.acls`,label:`Manage calendar sharing permissions`},{value:`${GOOGLE_SCOPE_BASE}calendar.acls.readonly`,label:`Read calendar sharing permissions`},{value:`${GOOGLE_SCOPE_BASE}calendar.events.public.readonly`,label:`Read public calendar events`},{value:`${GOOGLE_SCOPE_BASE}calendar.addons.execute`,label:`Run a Calendar add-on`},{value:`${GOOGLE_SCOPE_BASE}calendar.addons.current.event.read`,label:`Read the event open in a Calendar add-on`},{value:`${GOOGLE_SCOPE_BASE}calendar.addons.current.event.write`,label:`Edit the event open in a Calendar add-on`}],settingsFields:[],documentationUrl:`https://developers.google.com/workspace/calendar/api/guides/overview`});var require_code$1=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.regexpCode=exports.getEsmExportName=exports.getProperty=exports.safeStringify=exports.stringify=exports.strConcat=exports.addCodeArg=exports.str=exports._=exports.nil=exports._Code=exports.Name=exports.IDENTIFIER=exports._CodeOrName=void 0;var _CodeOrName=class{};exports._CodeOrName=_CodeOrName;exports.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;var Name=class extends _CodeOrName{constructor(s){super();if(!exports.IDENTIFIER.test(s))throw new Error(`CodeGen: name must be a valid identifier`);this.str=s}toString(){return this.str}emptyStr(){return false}get names(){return{[this.str]:1}}};exports.Name=Name;var _Code=class extends _CodeOrName{constructor(code){super();this._items=typeof code===`string`?[code]:code}toString(){return this.str}emptyStr(){if(this._items.length>1)return false;const item=this._items[0];return item===``||item===`""`}get str(){var _a;return(_a=this._str)!==null&&_a!==void 0?_a:this._str=this._items.reduce((s,c)=>`${s}${c}`,``)}get names(){var _a;return(_a=this._names)!==null&&_a!==void 0?_a:this._names=this._items.reduce((names,c)=>{if(c instanceof Name)names[c.str]=(names[c.str]||0)+1;return names},{})}};exports._Code=_Code;exports.nil=new _Code(``);function _(strs,...args){const code=[strs[0]];let i=0;while(i<args.length){addCodeArg(code,args[i]);code.push(strs[++i])}return new _Code(code)}exports._=_;var plus=new _Code(`+`);function str(strs,...args){const expr=[safeStringify(strs[0])];let i=0;while(i<args.length){expr.push(plus);addCodeArg(expr,args[i]);expr.push(plus,safeStringify(strs[++i]))}optimize(expr);return new _Code(expr)}exports.str=str;function addCodeArg(code,arg){if(arg instanceof _Code)code.push(...arg._items);else if(arg instanceof Name)code.push(arg);else code.push(interpolate(arg))}exports.addCodeArg=addCodeArg;function optimize(expr){let i=1;while(i<expr.length-1){if(expr[i]===plus){const res=mergeExprItems(expr[i-1],expr[i+1]);if(res!==void 0){expr.splice(i-1,3,res);continue}expr[i++]=`+`}i++}}function mergeExprItems(a,b){if(b===`""`)return a;if(a===`""`)return b;if(typeof a==`string`){if(b instanceof Name||a[a.length-1]!==`"`)return;if(typeof b!=`string`)return`${a.slice(0,-1)}${b}"`;if(b[0]===`"`)return a.slice(0,-1)+b.slice(1);return}if(typeof b==`string`&&b[0]===`"`&&!(a instanceof Name))return`"${a}${b.slice(1)}`}function strConcat(c1,c2){return c2.emptyStr()?c1:c1.emptyStr()?c2:str`${c1}${c2}`}exports.strConcat=strConcat;function interpolate(x){return typeof x==`number`||typeof x==`boolean`||x===null?x:safeStringify(Array.isArray(x)?x.join(`,`):x)}function stringify(x){return new _Code(safeStringify(x))}exports.stringify=stringify;function safeStringify(x){return JSON.stringify(x).replace(/\u2028/g,`\\u2028`).replace(/\u2029/g,`\\u2029`)}exports.safeStringify=safeStringify;function getProperty(key){return typeof key==`string`&&exports.IDENTIFIER.test(key)?new _Code(`.${key}`):_`[${key}]`}exports.getProperty=getProperty;function getEsmExportName(key){if(typeof key==`string`&&exports.IDENTIFIER.test(key))return new _Code(`${key}`);throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`)}exports.getEsmExportName=getEsmExportName;function regexpCode(rx){return new _Code(rx.toString())}exports.regexpCode=regexpCode}));var require_scope=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.ValueScope=exports.ValueScopeName=exports.Scope=exports.varKinds=exports.UsedValueState=void 0;var code_1=require_code$1();var ValueError=class extends Error{constructor(name){super(`CodeGen: "code" for ${name} not defined`);this.value=name.value}};var UsedValueState;(function(UsedValueState){UsedValueState[UsedValueState[`Started`]=0]=`Started`;UsedValueState[UsedValueState[`Completed`]=1]=`Completed`})(UsedValueState||(exports.UsedValueState=UsedValueState={}));exports.varKinds={const:new code_1.Name(`const`),let:new code_1.Name(`let`),var:new code_1.Name(`var`)};var Scope=class{constructor({prefixes,parent}={}){this._names={};this._prefixes=prefixes;this._parent=parent}toName(nameOrPrefix){return nameOrPrefix instanceof code_1.Name?nameOrPrefix:this.name(nameOrPrefix)}name(prefix){return new code_1.Name(this._newName(prefix))}_newName(prefix){const ng=this._names[prefix]||this._nameGroup(prefix);return`${prefix}${ng.index++}`}_nameGroup(prefix){var _a,_b;if(((_b=(_a=this._parent)===null||_a===void 0?void 0:_a._prefixes)===null||_b===void 0?void 0:_b.has(prefix))||this._prefixes&&!this._prefixes.has(prefix))throw new Error(`CodeGen: prefix "${prefix}" is not allowed in this scope`);return this._names[prefix]={prefix,index:0}}};exports.Scope=Scope;var ValueScopeName=class extends code_1.Name{constructor(prefix,nameStr){super(nameStr);this.prefix=prefix}setValue(value,{property,itemIndex}){this.value=value;this.scopePath=(0,code_1._)`.${new code_1.Name(property)}[${itemIndex}]`}};exports.ValueScopeName=ValueScopeName;var line=(0,code_1._)`\n`;var ValueScope=class extends Scope{constructor(opts){super(opts);this._values={};this._scope=opts.scope;this.opts={...opts,_n:opts.lines?line:code_1.nil}}get(){return this._scope}name(prefix){return new ValueScopeName(prefix,this._newName(prefix))}value(nameOrPrefix,value){var _a;if(value.ref===void 0)throw new Error(`CodeGen: ref must be passed in value`);const name=this.toName(nameOrPrefix);const{prefix}=name;const valueKey=(_a=value.key)!==null&&_a!==void 0?_a:value.ref;let vs=this._values[prefix];if(vs){const _name=vs.get(valueKey);if(_name)return _name}else vs=this._values[prefix]=new Map;vs.set(valueKey,name);const s=this._scope[prefix]||(this._scope[prefix]=[]);const itemIndex=s.length;s[itemIndex]=value.ref;name.setValue(value,{property:prefix,itemIndex});return name}getValue(prefix,keyOrRef){const vs=this._values[prefix];if(!vs)return;return vs.get(keyOrRef)}scopeRefs(scopeName,values=this._values){return this._reduceValues(values,name=>{if(name.scopePath===void 0)throw new Error(`CodeGen: name "${name}" has no value`);return(0,code_1._)`${scopeName}${name.scopePath}`})}scopeCode(values=this._values,usedValues,getCode){return this._reduceValues(values,name=>{if(name.value===void 0)throw new Error(`CodeGen: name "${name}" has no value`);return name.value.code},usedValues,getCode)}_reduceValues(values,valueCode,usedValues={},getCode){let code=code_1.nil;for(const prefix in values){const vs=values[prefix];if(!vs)continue;const nameSet=usedValues[prefix]=usedValues[prefix]||new Map;vs.forEach(name=>{if(nameSet.has(name))return;nameSet.set(name,UsedValueState.Started);let c=valueCode(name);if(c){const def=this.opts.es5?exports.varKinds.var:exports.varKinds.const;code=(0,code_1._)`${code}${def} ${name} = ${c};${this.opts._n}`}else if(c=getCode===null||getCode===void 0?void 0:getCode(name))code=(0,code_1._)`${code}${c}${this.opts._n}`;else throw new ValueError(name);nameSet.set(name,UsedValueState.Completed)})}return code}};exports.ValueScope=ValueScope}));var require_codegen=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.or=exports.and=exports.not=exports.CodeGen=exports.operators=exports.varKinds=exports.ValueScopeName=exports.ValueScope=exports.Scope=exports.Name=exports.regexpCode=exports.stringify=exports.getProperty=exports.nil=exports.strConcat=exports.str=exports._=void 0;var code_1=require_code$1();var scope_1=require_scope();var code_2=require_code$1();Object.defineProperty(exports,"_",{enumerable:true,get:function(){return code_2._}});Object.defineProperty(exports,"str",{enumerable:true,get:function(){return code_2.str}});Object.defineProperty(exports,"strConcat",{enumerable:true,get:function(){return code_2.strConcat}});Object.defineProperty(exports,"nil",{enumerable:true,get:function(){return code_2.nil}});Object.defineProperty(exports,"getProperty",{enumerable:true,get:function(){return code_2.getProperty}});Object.defineProperty(exports,"stringify",{enumerable:true,get:function(){return code_2.stringify}});Object.defineProperty(exports,"regexpCode",{enumerable:true,get:function(){return code_2.regexpCode}});Object.defineProperty(exports,"Name",{enumerable:true,get:function(){return code_2.Name}});var scope_2=require_scope();Object.defineProperty(exports,"Scope",{enumerable:true,get:function(){return scope_2.Scope}});Object.defineProperty(exports,"ValueScope",{enumerable:true,get:function(){return scope_2.ValueScope}});Object.defineProperty(exports,"ValueScopeName",{enumerable:true,get:function(){return scope_2.ValueScopeName}});Object.defineProperty(exports,"varKinds",{enumerable:true,get:function(){return scope_2.varKinds}});exports.operators={GT:new code_1._Code(`>`),GTE:new code_1._Code(`>=`),LT:new code_1._Code(`<`),LTE:new code_1._Code(`<=`),EQ:new code_1._Code(`===`),NEQ:new code_1._Code(`!==`),NOT:new code_1._Code(`!`),OR:new code_1._Code(`||`),AND:new code_1._Code(`&&`),ADD:new code_1._Code(`+`)};var Node=class{optimizeNodes(){return this}optimizeNames(_names,_constants){return this}};var Def=class extends Node{constructor(varKind,name,rhs){super();this.varKind=varKind;this.name=name;this.rhs=rhs}render({es5,_n}){const varKind=es5?scope_1.varKinds.var:this.varKind;const rhs=this.rhs===void 0?``:` = ${this.rhs}`;return`${varKind} ${this.name}${rhs};`+_n}optimizeNames(names,constants){if(!names[this.name.str])return;if(this.rhs)this.rhs=optimizeExpr(this.rhs,names,constants);return this}get names(){return this.rhs instanceof code_1._CodeOrName?this.rhs.names:{}}};var Assign=class extends Node{constructor(lhs,rhs,sideEffects){super();this.lhs=lhs;this.rhs=rhs;this.sideEffects=sideEffects}render({_n}){return`${this.lhs} = ${this.rhs};`+_n}optimizeNames(names,constants){if(this.lhs instanceof code_1.Name&&!names[this.lhs.str]&&!this.sideEffects)return;this.rhs=optimizeExpr(this.rhs,names,constants);return this}get names(){return addExprNames(this.lhs instanceof code_1.Name?{}:{...this.lhs.names},this.rhs)}};var AssignOp=class extends Assign{constructor(lhs,op,rhs,sideEffects){super(lhs,rhs,sideEffects);this.op=op}render({_n}){return`${this.lhs} ${this.op}= ${this.rhs};`+_n}};var Label=class extends Node{constructor(label){super();this.label=label;this.names={}}render({_n}){return`${this.label}:`+_n}};var Break=class extends Node{constructor(label){super();this.label=label;this.names={}}render({_n}){return`break${this.label?` ${this.label}`:``};`+_n}};var Throw=class extends Node{constructor(error){super();this.error=error}render({_n}){return`throw ${this.error};`+_n}get names(){return this.error.names}};var AnyCode=class extends Node{constructor(code){super();this.code=code}render({_n}){return`${this.code};`+_n}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(names,constants){this.code=optimizeExpr(this.code,names,constants);return this}get names(){return this.code instanceof code_1._CodeOrName?this.code.names:{}}};var ParentNode=class extends Node{constructor(nodes=[]){super();this.nodes=nodes}render(opts){return this.nodes.reduce((code,n)=>code+n.render(opts),``)}optimizeNodes(){const{nodes}=this;let i=nodes.length;while(i--){const n=nodes[i].optimizeNodes();if(Array.isArray(n))nodes.splice(i,1,...n);else if(n)nodes[i]=n;else nodes.splice(i,1)}return nodes.length>0?this:void 0}optimizeNames(names,constants){const{nodes}=this;let i=nodes.length;while(i--){const n=nodes[i];if(n.optimizeNames(names,constants))continue;subtractNames(names,n.names);nodes.splice(i,1)}return nodes.length>0?this:void 0}get names(){return this.nodes.reduce((names,n)=>addNames(names,n.names),{})}};var BlockNode=class extends ParentNode{render(opts){return`{`+opts._n+super.render(opts)+`}`+opts._n}};var Root=class extends ParentNode{};var Else=class extends BlockNode{};Else.kind=`else`;var If=class If extends BlockNode{constructor(condition,nodes){super(nodes);this.condition=condition}render(opts){let code=`if(${this.condition})`+super.render(opts);if(this.else)code+=`else `+this.else.render(opts);return code}optimizeNodes(){super.optimizeNodes();const cond=this.condition;if(cond===true)return this.nodes;let e=this.else;if(e){const ns=e.optimizeNodes();e=this.else=Array.isArray(ns)?new Else(ns):ns}if(e){if(cond===false)return e instanceof If?e:e.nodes;if(this.nodes.length)return this;return new If(not(cond),e instanceof If?[e]:e.nodes)}if(cond===false||!this.nodes.length)return void 0;return this}optimizeNames(names,constants){var _a;this.else=(_a=this.else)===null||_a===void 0?void 0:_a.optimizeNames(names,constants);if(!(super.optimizeNames(names,constants)||this.else))return;this.condition=optimizeExpr(this.condition,names,constants);return this}get names(){const names=super.names;addExprNames(names,this.condition);if(this.else)addNames(names,this.else.names);return names}};If.kind=`if`;var For=class extends BlockNode{};For.kind=`for`;var ForLoop=class extends For{constructor(iteration){super();this.iteration=iteration}render(opts){return`for(${this.iteration})`+super.render(opts)}optimizeNames(names,constants){if(!super.optimizeNames(names,constants))return;this.iteration=optimizeExpr(this.iteration,names,constants);return this}get names(){return addNames(super.names,this.iteration.names)}};var ForRange=class extends For{constructor(varKind,name,from,to){super();this.varKind=varKind;this.name=name;this.from=from;this.to=to}render(opts){const varKind=opts.es5?scope_1.varKinds.var:this.varKind;const{name,from,to}=this;return`for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)`+super.render(opts)}get names(){return addExprNames(addExprNames(super.names,this.from),this.to)}};var ForIter=class extends For{constructor(loop,varKind,name,iterable){super();this.loop=loop;this.varKind=varKind;this.name=name;this.iterable=iterable}render(opts){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(opts)}optimizeNames(names,constants){if(!super.optimizeNames(names,constants))return;this.iterable=optimizeExpr(this.iterable,names,constants);return this}get names(){return addNames(super.names,this.iterable.names)}};var Func=class extends BlockNode{constructor(name,args,async){super();this.name=name;this.args=args;this.async=async}render(opts){return`${this.async?`async `:``}function ${this.name}(${this.args})`+super.render(opts)}};Func.kind=`func`;var Return=class extends ParentNode{render(opts){return`return `+super.render(opts)}};Return.kind=`return`;var Try=class extends BlockNode{render(opts){let code=`try`+super.render(opts);if(this.catch)code+=this.catch.render(opts);if(this.finally)code+=this.finally.render(opts);return code}optimizeNodes(){var _a,_b;super.optimizeNodes();(_a=this.catch)===null||_a===void 0||_a.optimizeNodes();(_b=this.finally)===null||_b===void 0||_b.optimizeNodes();return this}optimizeNames(names,constants){var _a,_b;super.optimizeNames(names,constants);(_a=this.catch)===null||_a===void 0||_a.optimizeNames(names,constants);(_b=this.finally)===null||_b===void 0||_b.optimizeNames(names,constants);return this}get names(){const names=super.names;if(this.catch)addNames(names,this.catch.names);if(this.finally)addNames(names,this.finally.names);return names}};var Catch=class extends BlockNode{constructor(error){super();this.error=error}render(opts){return`catch(${this.error})`+super.render(opts)}};Catch.kind=`catch`;var Finally=class extends BlockNode{render(opts){return`finally`+super.render(opts)}};Finally.kind=`finally`;var CodeGen=class{constructor(extScope,opts={}){this._values={};this._blockStarts=[];this._constants={};this.opts={...opts,_n:opts.lines?`
|
|
2
2
|
`:``};this._extScope=extScope;this._scope=new scope_1.Scope({parent:extScope});this._nodes=[new Root]}toString(){return this._root.render(this.opts)}name(prefix){return this._scope.name(prefix)}scopeName(prefix){return this._extScope.name(prefix)}scopeValue(prefixOrName,value){const name=this._extScope.value(prefixOrName,value);(this._values[name.prefix]||(this._values[name.prefix]=new Set)).add(name);return name}getScopeValue(prefix,keyOrRef){return this._extScope.getValue(prefix,keyOrRef)}scopeRefs(scopeName){return this._extScope.scopeRefs(scopeName,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(varKind,nameOrPrefix,rhs,constant){const name=this._scope.toName(nameOrPrefix);if(rhs!==void 0&&constant)this._constants[name.str]=rhs;this._leafNode(new Def(varKind,name,rhs));return name}const(nameOrPrefix,rhs,_constant){return this._def(scope_1.varKinds.const,nameOrPrefix,rhs,_constant)}let(nameOrPrefix,rhs,_constant){return this._def(scope_1.varKinds.let,nameOrPrefix,rhs,_constant)}var(nameOrPrefix,rhs,_constant){return this._def(scope_1.varKinds.var,nameOrPrefix,rhs,_constant)}assign(lhs,rhs,sideEffects){return this._leafNode(new Assign(lhs,rhs,sideEffects))}add(lhs,rhs){return this._leafNode(new AssignOp(lhs,exports.operators.ADD,rhs))}code(c){if(typeof c==`function`)c();else if(c!==code_1.nil)this._leafNode(new AnyCode(c));return this}object(...keyValues){const code=[`{`];for(const[key,value]of keyValues){if(code.length>1)code.push(`,`);code.push(key);if(key!==value||this.opts.es5){code.push(`:`);(0,code_1.addCodeArg)(code,value)}}code.push(`}`);return new code_1._Code(code)}if(condition,thenBody,elseBody){this._blockNode(new If(condition));if(thenBody&&elseBody)this.code(thenBody).else().code(elseBody).endIf();else if(thenBody)this.code(thenBody).endIf();else if(elseBody)throw new Error(`CodeGen: "else" body without "then" body`);return this}elseIf(condition){return this._elseNode(new If(condition))}else(){return this._elseNode(new Else)}endIf(){return this._endBlockNode(If,Else)}_for(node,forBody){this._blockNode(node);if(forBody)this.code(forBody).endFor();return this}for(iteration,forBody){return this._for(new ForLoop(iteration),forBody)}forRange(nameOrPrefix,from,to,forBody,varKind=this.opts.es5?scope_1.varKinds.var:scope_1.varKinds.let){const name=this._scope.toName(nameOrPrefix);return this._for(new ForRange(varKind,name,from,to),()=>forBody(name))}forOf(nameOrPrefix,iterable,forBody,varKind=scope_1.varKinds.const){const name=this._scope.toName(nameOrPrefix);if(this.opts.es5){const arr=iterable instanceof code_1.Name?iterable:this.var(`_arr`,iterable);return this.forRange(`_i`,0,(0,code_1._)`${arr}.length`,i=>{this.var(name,(0,code_1._)`${arr}[${i}]`);forBody(name)})}return this._for(new ForIter(`of`,varKind,name,iterable),()=>forBody(name))}forIn(nameOrPrefix,obj,forBody,varKind=this.opts.es5?scope_1.varKinds.var:scope_1.varKinds.const){if(this.opts.ownProperties)return this.forOf(nameOrPrefix,(0,code_1._)`Object.keys(${obj})`,forBody);const name=this._scope.toName(nameOrPrefix);return this._for(new ForIter(`in`,varKind,name,obj),()=>forBody(name))}endFor(){return this._endBlockNode(For)}label(label){return this._leafNode(new Label(label))}break(label){return this._leafNode(new Break(label))}return(value){const node=new Return;this._blockNode(node);this.code(value);if(node.nodes.length!==1)throw new Error(`CodeGen: "return" should have one node`);return this._endBlockNode(Return)}try(tryBody,catchCode,finallyCode){if(!catchCode&&!finallyCode)throw new Error(`CodeGen: "try" without "catch" and "finally"`);const node=new Try;this._blockNode(node);this.code(tryBody);if(catchCode){const error=this.name(`e`);this._currNode=node.catch=new Catch(error);catchCode(error)}if(finallyCode){this._currNode=node.finally=new Finally;this.code(finallyCode)}return this._endBlockNode(Catch,Finally)}throw(error){return this._leafNode(new Throw(error))}block(body,nodeCount){this._blockStarts.push(this._nodes.length);if(body)this.code(body).endBlock(nodeCount);return this}endBlock(nodeCount){const len=this._blockStarts.pop();if(len===void 0)throw new Error(`CodeGen: not in self-balancing block`);const toClose=this._nodes.length-len;if(toClose<0||nodeCount!==void 0&&toClose!==nodeCount)throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`);this._nodes.length=len;return this}func(name,args=code_1.nil,async,funcBody){this._blockNode(new Func(name,args,async));if(funcBody)this.code(funcBody).endFunc();return this}endFunc(){return this._endBlockNode(Func)}optimize(n=1){while(n-->0){this._root.optimizeNodes();this._root.optimizeNames(this._root.names,this._constants)}}_leafNode(node){this._currNode.nodes.push(node);return this}_blockNode(node){this._currNode.nodes.push(node);this._nodes.push(node)}_endBlockNode(N1,N2){const n=this._currNode;if(n instanceof N1||N2&&n instanceof N2){this._nodes.pop();return this}throw new Error(`CodeGen: not in block "${N2?`${N1.kind}/${N2.kind}`:N1.kind}"`)}_elseNode(node){const n=this._currNode;if(!(n instanceof If))throw new Error(`CodeGen: "else" without "if"`);this._currNode=n.else=node;return this}get _root(){return this._nodes[0]}get _currNode(){const ns=this._nodes;return ns[ns.length-1]}set _currNode(node){const ns=this._nodes;ns[ns.length-1]=node}};exports.CodeGen=CodeGen;function addNames(names,from){for(const n in from)names[n]=(names[n]||0)+(from[n]||0);return names}function addExprNames(names,from){return from instanceof code_1._CodeOrName?addNames(names,from.names):names}function optimizeExpr(expr,names,constants){if(expr instanceof code_1.Name)return replaceName(expr);if(!canOptimize(expr))return expr;return new code_1._Code(expr._items.reduce((items,c)=>{if(c instanceof code_1.Name)c=replaceName(c);if(c instanceof code_1._Code)items.push(...c._items);else items.push(c);return items},[]));function replaceName(n){const c=constants[n.str];if(c===void 0||names[n.str]!==1)return n;delete names[n.str];return c}function canOptimize(e){return e instanceof code_1._Code&&e._items.some(c=>c instanceof code_1.Name&&names[c.str]===1&&constants[c.str]!==void 0)}}function subtractNames(names,from){for(const n in from)names[n]=(names[n]||0)-(from[n]||0)}function not(x){return typeof x==`boolean`||typeof x==`number`||x===null?!x:(0,code_1._)`!${par(x)}`}exports.not=not;var andCode=mappend(exports.operators.AND);function and(...args){return args.reduce(andCode)}exports.and=and;var orCode=mappend(exports.operators.OR);function or(...args){return args.reduce(orCode)}exports.or=or;function mappend(op){return(x,y)=>x===code_1.nil?y:y===code_1.nil?x:(0,code_1._)`${par(x)} ${op} ${par(y)}`}function par(x){return x instanceof code_1.Name?x:(0,code_1._)`(${x})`}}));var require_util=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.checkStrictMode=exports.getErrorPath=exports.Type=exports.useFunc=exports.setEvaluated=exports.evaluatedPropsToName=exports.mergeEvaluated=exports.eachItem=exports.unescapeJsonPointer=exports.escapeJsonPointer=exports.escapeFragment=exports.unescapeFragment=exports.schemaRefOrVal=exports.schemaHasRulesButRef=exports.schemaHasRules=exports.checkUnknownRules=exports.alwaysValidSchema=exports.toHash=void 0;var codegen_1=require_codegen();var code_1=require_code$1();function toHash(arr){const hash={};for(const item of arr)hash[item]=true;return hash}exports.toHash=toHash;function alwaysValidSchema(it,schema){if(typeof schema==`boolean`)return schema;if(Object.keys(schema).length===0)return true;checkUnknownRules(it,schema);return!schemaHasRules(schema,it.self.RULES.all)}exports.alwaysValidSchema=alwaysValidSchema;function checkUnknownRules(it,schema=it.schema){const{opts,self}=it;if(!opts.strictSchema)return;if(typeof schema===`boolean`)return;const rules=self.RULES.keywords;for(const key in schema)if(!rules[key])checkStrictMode(it,`unknown keyword: "${key}"`)}exports.checkUnknownRules=checkUnknownRules;function schemaHasRules(schema,rules){if(typeof schema==`boolean`)return!schema;for(const key in schema)if(rules[key])return true;return false}exports.schemaHasRules=schemaHasRules;function schemaHasRulesButRef(schema,RULES){if(typeof schema==`boolean`)return!schema;for(const key in schema)if(key!==`$ref`&&RULES.all[key])return true;return false}exports.schemaHasRulesButRef=schemaHasRulesButRef;function schemaRefOrVal({topSchemaRef,schemaPath},schema,keyword,$data){if(!$data){if(typeof schema==`number`||typeof schema==`boolean`)return schema;if(typeof schema==`string`)return(0,codegen_1._)`${schema}`}return(0,codegen_1._)`${topSchemaRef}${schemaPath}${(0,codegen_1.getProperty)(keyword)}`}exports.schemaRefOrVal=schemaRefOrVal;function unescapeFragment(str){return unescapeJsonPointer(decodeURIComponent(str))}exports.unescapeFragment=unescapeFragment;function escapeFragment(str){return encodeURIComponent(escapeJsonPointer(str))}exports.escapeFragment=escapeFragment;function escapeJsonPointer(str){if(typeof str==`number`)return`${str}`;return str.replace(/~/g,`~0`).replace(/\//g,`~1`)}exports.escapeJsonPointer=escapeJsonPointer;function unescapeJsonPointer(str){return str.replace(/~1/g,`/`).replace(/~0/g,`~`)}exports.unescapeJsonPointer=unescapeJsonPointer;function eachItem(xs,f){if(Array.isArray(xs))for(const x of xs)f(x);else f(xs)}exports.eachItem=eachItem;function makeMergeEvaluated({mergeNames,mergeToName,mergeValues,resultToName}){return(gen,from,to,toName)=>{const res=to===void 0?from:to instanceof codegen_1.Name?(from instanceof codegen_1.Name?mergeNames(gen,from,to):mergeToName(gen,from,to),to):from instanceof codegen_1.Name?(mergeToName(gen,to,from),from):mergeValues(from,to);return toName===codegen_1.Name&&!(res instanceof codegen_1.Name)?resultToName(gen,res):res}}exports.mergeEvaluated={props:makeMergeEvaluated({mergeNames:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true && ${from} !== undefined`,()=>{gen.if((0,codegen_1._)`${from} === true`,()=>gen.assign(to,true),()=>gen.assign(to,(0,codegen_1._)`${to} || {}`).code((0,codegen_1._)`Object.assign(${to}, ${from})`))}),mergeToName:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true`,()=>{if(from===true)gen.assign(to,true);else{gen.assign(to,(0,codegen_1._)`${to} || {}`);setEvaluated(gen,to,from)}}),mergeValues:(from,to)=>from===true?true:{...from,...to},resultToName:evaluatedPropsToName}),items:makeMergeEvaluated({mergeNames:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true && ${from} !== undefined`,()=>gen.assign(to,(0,codegen_1._)`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)),mergeToName:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true`,()=>gen.assign(to,from===true?true:(0,codegen_1._)`${to} > ${from} ? ${to} : ${from}`)),mergeValues:(from,to)=>from===true?true:Math.max(from,to),resultToName:(gen,items)=>gen.var(`items`,items)})};function evaluatedPropsToName(gen,ps){if(ps===true)return gen.var(`props`,true);const props=gen.var(`props`,(0,codegen_1._)`{}`);if(ps!==void 0)setEvaluated(gen,props,ps);return props}exports.evaluatedPropsToName=evaluatedPropsToName;function setEvaluated(gen,props,ps){Object.keys(ps).forEach(p=>gen.assign((0,codegen_1._)`${props}${(0,codegen_1.getProperty)(p)}`,true))}exports.setEvaluated=setEvaluated;var snippets={};function useFunc(gen,f){return gen.scopeValue(`func`,{ref:f,code:snippets[f.code]||(snippets[f.code]=new code_1._Code(f.code))})}exports.useFunc=useFunc;var Type;(function(Type){Type[Type[`Num`]=0]=`Num`;Type[Type[`Str`]=1]=`Str`})(Type||(exports.Type=Type={}));function getErrorPath(dataProp,dataPropType,jsPropertySyntax){if(dataProp instanceof codegen_1.Name){const isNumber=dataPropType===Type.Num;return jsPropertySyntax?isNumber?(0,codegen_1._)`"[" + ${dataProp} + "]"`:(0,codegen_1._)`"['" + ${dataProp} + "']"`:isNumber?(0,codegen_1._)`"/" + ${dataProp}`:(0,codegen_1._)`"/" + ${dataProp}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return jsPropertySyntax?(0,codegen_1.getProperty)(dataProp).toString():`/`+escapeJsonPointer(dataProp)}exports.getErrorPath=getErrorPath;function checkStrictMode(it,msg,mode=it.opts.strictSchema){if(!mode)return;msg=`strict mode: ${msg}`;if(mode===true)throw new Error(msg);it.self.logger.warn(msg)}exports.checkStrictMode=checkStrictMode}));var require_names=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});var codegen_1=require_codegen();var names={data:new codegen_1.Name(`data`),valCxt:new codegen_1.Name(`valCxt`),instancePath:new codegen_1.Name(`instancePath`),parentData:new codegen_1.Name(`parentData`),parentDataProperty:new codegen_1.Name(`parentDataProperty`),rootData:new codegen_1.Name(`rootData`),dynamicAnchors:new codegen_1.Name(`dynamicAnchors`),vErrors:new codegen_1.Name(`vErrors`),errors:new codegen_1.Name(`errors`),this:new codegen_1.Name(`this`),self:new codegen_1.Name(`self`),scope:new codegen_1.Name(`scope`),json:new codegen_1.Name(`json`),jsonPos:new codegen_1.Name(`jsonPos`),jsonLen:new codegen_1.Name(`jsonLen`),jsonPart:new codegen_1.Name(`jsonPart`)};exports.default=names}));var require_errors=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.extendErrors=exports.resetErrorsCount=exports.reportExtraError=exports.reportError=exports.keyword$DataError=exports.keywordError=void 0;var codegen_1=require_codegen();var util_1=require_util();var names_1=require_names();exports.keywordError={message:({keyword})=>(0,codegen_1.str)`must pass "${keyword}" keyword validation`};exports.keyword$DataError={message:({keyword,schemaType})=>schemaType?(0,codegen_1.str)`"${keyword}" keyword must be ${schemaType} ($data)`:(0,codegen_1.str)`"${keyword}" keyword is invalid ($data)`};function reportError(cxt,error=exports.keywordError,errorPaths,overrideAllErrors){const{it}=cxt;const{gen,compositeRule,allErrors}=it;const errObj=errorObjectCode(cxt,error,errorPaths);if(overrideAllErrors!==null&&overrideAllErrors!==void 0?overrideAllErrors:compositeRule||allErrors)addError(gen,errObj);else returnErrors(it,(0,codegen_1._)`[${errObj}]`)}exports.reportError=reportError;function reportExtraError(cxt,error=exports.keywordError,errorPaths){const{it}=cxt;const{gen,compositeRule,allErrors}=it;addError(gen,errorObjectCode(cxt,error,errorPaths));if(!(compositeRule||allErrors))returnErrors(it,names_1.default.vErrors)}exports.reportExtraError=reportExtraError;function resetErrorsCount(gen,errsCount){gen.assign(names_1.default.errors,errsCount);gen.if((0,codegen_1._)`${names_1.default.vErrors} !== null`,()=>gen.if(errsCount,()=>gen.assign((0,codegen_1._)`${names_1.default.vErrors}.length`,errsCount),()=>gen.assign(names_1.default.vErrors,null)))}exports.resetErrorsCount=resetErrorsCount;function extendErrors({gen,keyword,schemaValue,data,errsCount,it}){if(errsCount===void 0)throw new Error(`ajv implementation error`);const err=gen.name(`err`);gen.forRange(`i`,errsCount,names_1.default.errors,i=>{gen.const(err,(0,codegen_1._)`${names_1.default.vErrors}[${i}]`);gen.if((0,codegen_1._)`${err}.instancePath === undefined`,()=>gen.assign((0,codegen_1._)`${err}.instancePath`,(0,codegen_1.strConcat)(names_1.default.instancePath,it.errorPath)));gen.assign((0,codegen_1._)`${err}.schemaPath`,(0,codegen_1.str)`${it.errSchemaPath}/${keyword}`);if(it.opts.verbose){gen.assign((0,codegen_1._)`${err}.schema`,schemaValue);gen.assign((0,codegen_1._)`${err}.data`,data)}})}exports.extendErrors=extendErrors;function addError(gen,errObj){const err=gen.const(`err`,errObj);gen.if((0,codegen_1._)`${names_1.default.vErrors} === null`,()=>gen.assign(names_1.default.vErrors,(0,codegen_1._)`[${err}]`),(0,codegen_1._)`${names_1.default.vErrors}.push(${err})`);gen.code((0,codegen_1._)`${names_1.default.errors}++`)}function returnErrors(it,errs){const{gen,validateName,schemaEnv}=it;if(schemaEnv.$async)gen.throw((0,codegen_1._)`new ${it.ValidationError}(${errs})`);else{gen.assign((0,codegen_1._)`${validateName}.errors`,errs);gen.return(false)}}var E={keyword:new codegen_1.Name(`keyword`),schemaPath:new codegen_1.Name(`schemaPath`),params:new codegen_1.Name(`params`),propertyName:new codegen_1.Name(`propertyName`),message:new codegen_1.Name(`message`),schema:new codegen_1.Name(`schema`),parentSchema:new codegen_1.Name(`parentSchema`)};function errorObjectCode(cxt,error,errorPaths){const{createErrors}=cxt.it;if(createErrors===false)return(0,codegen_1._)`{}`;return errorObject(cxt,error,errorPaths)}function errorObject(cxt,error,errorPaths={}){const{gen,it}=cxt;const keyValues=[errorInstancePath(it,errorPaths),errorSchemaPath(cxt,errorPaths)];extraErrorProps(cxt,error,keyValues);return gen.object(...keyValues)}function errorInstancePath({errorPath},{instancePath}){const instPath=instancePath?(0,codegen_1.str)`${errorPath}${(0,util_1.getErrorPath)(instancePath,util_1.Type.Str)}`:errorPath;return[names_1.default.instancePath,(0,codegen_1.strConcat)(names_1.default.instancePath,instPath)]}function errorSchemaPath({keyword,it:{errSchemaPath}},{schemaPath,parentSchema}){let schPath=parentSchema?errSchemaPath:(0,codegen_1.str)`${errSchemaPath}/${keyword}`;if(schemaPath)schPath=(0,codegen_1.str)`${schPath}${(0,util_1.getErrorPath)(schemaPath,util_1.Type.Str)}`;return[E.schemaPath,schPath]}function extraErrorProps(cxt,{params,message},keyValues){const{keyword,data,schemaValue,it}=cxt;const{opts,propertyName,topSchemaRef,schemaPath}=it;keyValues.push([E.keyword,keyword],[E.params,typeof params==`function`?params(cxt):params||(0,codegen_1._)`{}`]);if(opts.messages)keyValues.push([E.message,typeof message==`function`?message(cxt):message]);if(opts.verbose)keyValues.push([E.schema,schemaValue],[E.parentSchema,(0,codegen_1._)`${topSchemaRef}${schemaPath}`],[names_1.default.data,data]);if(propertyName)keyValues.push([E.propertyName,propertyName])}}));var require_boolSchema=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.boolOrEmptySchema=exports.topBoolOrEmptySchema=void 0;var errors_1=require_errors();var codegen_1=require_codegen();var names_1=require_names();var boolError={message:`boolean schema is false`};function topBoolOrEmptySchema(it){const{gen,schema,validateName}=it;if(schema===false)falseSchemaError(it,false);else if(typeof schema==`object`&&schema.$async===true)gen.return(names_1.default.data);else{gen.assign((0,codegen_1._)`${validateName}.errors`,null);gen.return(true)}}exports.topBoolOrEmptySchema=topBoolOrEmptySchema;function boolOrEmptySchema(it,valid){const{gen,schema}=it;if(schema===false){gen.var(valid,false);falseSchemaError(it)}else gen.var(valid,true)}exports.boolOrEmptySchema=boolOrEmptySchema;function falseSchemaError(it,overrideAllErrors){const{gen,data}=it;const cxt={gen,keyword:`false schema`,data,schema:false,schemaCode:false,schemaValue:false,params:{},it};(0,errors_1.reportError)(cxt,boolError,void 0,overrideAllErrors)}}));var require_rules=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.getRules=exports.isJSONType=void 0;var jsonTypes=new Set([`string`,`number`,`integer`,`boolean`,`null`,`object`,`array`]);function isJSONType(x){return typeof x==`string`&&jsonTypes.has(x)}exports.isJSONType=isJSONType;function getRules(){const groups={number:{type:`number`,rules:[]},string:{type:`string`,rules:[]},array:{type:`array`,rules:[]},object:{type:`object`,rules:[]}};return{types:{...groups,integer:true,boolean:true,null:true},rules:[{rules:[]},groups.number,groups.string,groups.array,groups.object],post:{rules:[]},all:{},keywords:{}}}exports.getRules=getRules}));var require_applicability=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.shouldUseRule=exports.shouldUseGroup=exports.schemaHasRulesForType=void 0;function schemaHasRulesForType({schema,self},type){const group=self.RULES.types[type];return group&&group!==true&&shouldUseGroup(schema,group)}exports.schemaHasRulesForType=schemaHasRulesForType;function shouldUseGroup(schema,group){return group.rules.some(rule=>shouldUseRule(schema,rule))}exports.shouldUseGroup=shouldUseGroup;function shouldUseRule(schema,rule){var _a;return schema[rule.keyword]!==void 0||((_a=rule.definition.implements)===null||_a===void 0?void 0:_a.some(kwd=>schema[kwd]!==void 0))}exports.shouldUseRule=shouldUseRule}));var require_dataType=__commonJSMin((exports=>{Object.defineProperty(exports,"__esModule",{value:true});exports.reportTypeError=exports.checkDataTypes=exports.checkDataType=exports.coerceAndCheckDataType=exports.getJSONTypes=exports.getSchemaTypes=exports.DataType=void 0;var rules_1=require_rules();var applicability_1=require_applicability();var errors_1=require_errors();var codegen_1=require_codegen();var util_1=require_util();var DataType;(function(DataType){DataType[DataType[`Correct`]=0]=`Correct`;DataType[DataType[`Wrong`]=1]=`Wrong`})(DataType||(exports.DataType=DataType={}));function getSchemaTypes(schema){const types=getJSONTypes(schema.type);if(types.includes(`null`)){if(schema.nullable===false)throw new Error(`type: null contradicts nullable: false`)}else{if(!types.length&&schema.nullable!==void 0)throw new Error(`"nullable" cannot be used without "type"`);if(schema.nullable===true)types.push(`null`)}return types}exports.getSchemaTypes=getSchemaTypes;function getJSONTypes(ts){const types=Array.isArray(ts)?ts:ts?[ts]:[];if(types.every(rules_1.isJSONType))return types;throw new Error(`type must be JSONType or JSONType[]: `+types.join(`,`))}exports.getJSONTypes=getJSONTypes;function coerceAndCheckDataType(it,types){const{gen,data,opts}=it;const coerceTo=coerceToTypes(types,opts.coerceTypes);const checkTypes=types.length>0&&!(coerceTo.length===0&&types.length===1&&(0,applicability_1.schemaHasRulesForType)(it,types[0]));if(checkTypes){const wrongType=checkDataTypes(types,data,opts.strictNumbers,DataType.Wrong);gen.if(wrongType,()=>{if(coerceTo.length)coerceData(it,types,coerceTo);else reportTypeError(it)})}return checkTypes}exports.coerceAndCheckDataType=coerceAndCheckDataType;var COERCIBLE=new Set([`string`,`number`,`integer`,`boolean`,`null`]);function coerceToTypes(types,coerceTypes){return coerceTypes?types.filter(t=>COERCIBLE.has(t)||coerceTypes===`array`&&t===`array`):[]}function coerceData(it,types,coerceTo){const{gen,data,opts}=it;const dataType=gen.let(`dataType`,(0,codegen_1._)`typeof ${data}`);const coerced=gen.let(`coerced`,(0,codegen_1._)`undefined`);if(opts.coerceTypes===`array`)gen.if((0,codegen_1._)`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`,()=>gen.assign(data,(0,codegen_1._)`${data}[0]`).assign(dataType,(0,codegen_1._)`typeof ${data}`).if(checkDataTypes(types,data,opts.strictNumbers),()=>gen.assign(coerced,data)));gen.if((0,codegen_1._)`${coerced} !== undefined`);for(const t of coerceTo)if(COERCIBLE.has(t)||t===`array`&&opts.coerceTypes===`array`)coerceSpecificType(t);gen.else();reportTypeError(it);gen.endIf();gen.if((0,codegen_1._)`${coerced} !== undefined`,()=>{gen.assign(data,coerced);assignParentData(it,coerced)});function coerceSpecificType(t){switch(t){case`string`:gen.elseIf((0,codegen_1._)`${dataType} == "number" || ${dataType} == "boolean"`).assign(coerced,(0,codegen_1._)`"" + ${data}`).elseIf((0,codegen_1._)`${data} === null`).assign(coerced,(0,codegen_1._)`""`);return;case`number`:gen.elseIf((0,codegen_1._)`${dataType} == "boolean" || ${data} === null
|
|
3
3
|
|| (${dataType} == "string" && ${data} && ${data} == +${data})`).assign(coerced,(0,codegen_1._)`+${data}`);return;case`integer`:gen.elseIf((0,codegen_1._)`${dataType} === "boolean" || ${data} === null
|
|
4
4
|
|| (${dataType} === "string" && ${data} && ${data} == +${data} && !(${data} % 1))`).assign(coerced,(0,codegen_1._)`+${data}`);return;case`boolean`:gen.elseIf((0,codegen_1._)`${data} === "false" || ${data} === 0 || ${data} === null`).assign(coerced,false).elseIf((0,codegen_1._)`${data} === "true" || ${data} === 1`).assign(coerced,true);return;case`null`:gen.elseIf((0,codegen_1._)`${data} === "" || ${data} === 0 || ${data} === false`);gen.assign(coerced,null);return;case`array`:gen.elseIf((0,codegen_1._)`${dataType} === "string" || ${dataType} === "number"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Gn as withKeys,Kn as withModifiers,h as VIcon}from"./ripple-BVltMmyV.js";import{D as createVNode,E as createTextVNode,Ht as watch,On as unref,Pt as useId,St as resolveComponent,_ as createBaseVNode,b as createElementBlock,bt as renderList,et as mergeProps,g as computed,gn as reactive,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,tt as nextTick,un as isRef,v as createBlock,vn as ref,xn as shallowRef,xt as renderSlot,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{J as useQueryClient,t as useEndpointResource}from"./useEndpointResource-DWoQ2keu.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{c as projectSlugFromRoute,o as projectAppPath}from"./useRealtimeEvent-Bwapstla.js";import{t as VOverlay}from"./VOverlay-CeMZurIN.js";import{t as VAvatar}from"./VAvatar-DPzqDH4r.js";import{c as VListItemTitle,l as VListItemSubtitle,n as VList,s as VListItem}from"./VMenu-C_x18lwb.js";import{t as VChip}from"./VChip-CcI-Oo2J.js";import{g as VCheckboxBtn,t as VTextField}from"./VTextField-BR2eZeFT.js";import{r as scopedDevelopmentApiUrl}from"./studioUrls-DmMMIScP.js";import{$ as mdiCommentOutline,En as mdiOpenInNew,In as mdiPlus,Qt as mdiLabelOutline,Rn as mdiRecordCircleOutline,U as mdiClose,Un as mdiRestore,Vn as mdiRefresh,j as mdiCheck,jn as mdiPencilOutline,v as mdiArrowRight,yn as mdiMagnify}from"./mdi-CG9pWOSj.js";import{i as VBtnToggle,t as VBtn}from"./VBtn-B2MBK2DL.js";import{t as VAlert}from"./VAlert-P256xaE0.js";import{t as VAutocomplete}from"./VAutocomplete-BDb95qJX.js";import{t as VDivider}from"./VDivider-BMEqUoAB.js";import{t as VSheet}from"./VSheet-DZWsu0kL.js";import{t as VDialog}from"./VDialog-Bu3EfKb1.js";import{i as VCardTitle,n as VCardText,o as VCardActions,t as VCard}from"./VCard-mXy0k4aS.js";import{t as VSpacer}from"./VSpacer-Dhmsvk4t.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-CttxM1tw.js";import{t as VTextarea}from"./VTextarea-DbqamXJd.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useUiFeedback}from"./useUiFeedback-BPBF_0bp.js";import{n as vibe64RealtimeOriginPayload}from"./vibe64BrowserTabOrigin-SF9E31vi.js";import{m as GithubMarkdown_default}from"./index-GBRpNZLy.js";import{t as Vibe64DashboardBackButton_default}from"./Vibe64DashboardBackButton-BH_8j_VR.js";import{n as githubProjectRepositoryName,r as invalidateGithubIssueQueries,t as githubProjectAvailable}from"./vibe64GithubProject-CdFrbVHp.js";import{t as _sfc_main$8}from"./GithubBrowserTabs-BykoCFfz.js";var drafts=reactive(new Map);var submittedComments=reactive(new Map);function useVibe64Issues(context){const route=useRoute();const router=useRouter();const queryClient=useQueryClient();const feedback=useUiFeedback({source:`vibe64.issues`});const projectSlug=computed(()=>projectSlugFromRoute(route));const repository=computed(()=>githubProjectRepositoryName(context.value.projectContext));const available=computed(()=>githubProjectAvailable(context.value.projectContext));const active=computed(()=>available.value&&context.value.active!==false);const basePath=computed(()=>scopedDevelopmentApiUrl(`/api/vibe64/issues`,projectSlug.value));const state=computed(()=>[`open`,`closed`,`all`].includes(route.query.issueState)?route.query.issueState:`open`);const search=computed(()=>typeof route.query.issueSearch===`string`?route.query.issueSearch:``);const searchDraft=ref(search.value);watch(search,value=>{searchDraft.value=value});const selectedLabels=computed(()=>{const labels=route.query.issueLabel;return(Array.isArray(labels)?labels:[labels]).filter(label=>typeof label===`string`&&label.trim())});const number=computed(()=>/^\d+$/u.test(String(route.query.issue||``))?String(route.query.issue):``);const commentCursor=ref(``);watch([basePath,number],()=>{commentCursor.value=``});const listQuery=computed(()=>({state:state.value,search:search.value,labels:selectedLabels.value,...route.query.issueCursor?{cursor:route.query.issueCursor}:{}}));const listKey=computed(()=>[`vibe64.issues`,basePath.value,listQuery.value]);const list=useEndpointResource({path:basePath,readQuery:listQuery,queryKey:listKey,enabled:computed(()=>active.value&&!number.value),queryOptions:{retry:false},requestRecoveryLabel:`GitHub issues`,fallbackLoadError:`Issues could not load.`});const labelsPath=computed(()=>basePath.value.replace(/\/issues$/u,`/issue-labels`));const labelCatalog=useEndpointResource({path:labelsPath,queryKey:computed(()=>[`vibe64.issueLabels`,labelsPath.value]),enabled:computed(()=>active.value&&!number.value),queryOptions:{retry:false},fallbackLoadError:`Labels could not load.`});const detailPath=computed(()=>`${basePath.value}/${number.value}`);const detail=useEndpointResource({path:detailPath,readQuery:computed(()=>commentCursor.value?{cursor:commentCursor.value}:{}),queryKey:computed(()=>[`vibe64.issue`,detailPath.value,commentCursor.value]),enabled:computed(()=>active.value&&Boolean(number.value)),queryOptions:{retry:false},requestRecoveryLabel:`GitHub issue`,fallbackLoadError:`This issue could not load.`});const issue=computed(()=>detail.data.value?.issue||null);const draft=computed({get:()=>drafts.get(detailPath.value)||``,set:value=>value?drafts.set(detailPath.value,value):drafts.delete(detailPath.value)});const stateRequestPath=ref(``);const localComments=computed(()=>submittedComments.get(detailPath.value)||[]);const savedComments=computed(()=>issue.value?.comments?.nodes||[]);const savedCommentIds=computed(()=>new Set(savedComments.value.map(comment=>comment.id)));const comments=computed(()=>[...savedComments.value,...localComments.value.filter(comment=>!savedCommentIds.value.has(comment.id)&&(comment.delivery!==`sent`||!commentCursor.value))]);const commentCount=computed(()=>(issue.value?.comments?.totalCount||0)+comments.value.length-savedComments.value.length);const pending=computed(()=>{if(stateRequestPath.value===detailPath.value)return`state`;return localComments.value.some(comment=>comment.delivery===`sending`)?`comment`:``});watch([detail.data,detailPath,commentCursor],()=>{if(commentCursor.value||issue.value?.number!==Number(number.value))return;const remaining=localComments.value.filter(comment=>comment.delivery!==`sent`||!savedCommentIds.value.has(comment.id));if(remaining.length)submittedComments.set(detailPath.value,remaining);else submittedComments.delete(detailPath.value)},{immediate:true});function navigate(changes){return router.push({query:{...route.query,...changes}})}function filter(nextState=state.value,nextLabels=selectedLabels.value){return navigate({issueState:nextState,issueSearch:String(searchDraft.value||``).trim()||void 0,issueLabel:nextLabels?.length?nextLabels:void 0,issueCursor:void 0,issue:void 0})}function filterLabel(label){searchDraft.value=`label:${/[\s"\\]/u.test(label)?JSON.stringify(label):label}`;return filter(state.value,[])}function issueUpdated({number:issueNumber,basePath:requestBasePath}){return invalidateGithubIssueQueries(queryClient,requestBasePath,`${requestBasePath}/${issueNumber}`)}async function issueSaved({number:issueNumber,basePath:requestBasePath}){await issueUpdated({number:issueNumber,basePath:requestBasePath});if(basePath.value===requestBasePath)await navigate({issue:String(issueNumber)})}async function mutate(kind){if(pending.value||issue.value?.number!==Number(number.value)||!active.value)return;const requestBasePath=basePath.value;const requestPath=detailPath.value;if(kind===`comment`){const submitted=draft.value;if(!submitted.trim()||submitted.length>65536)return;const comment=reactive({id:crypto.randomUUID(),body:submitted,createdAt:new Date().toISOString(),author:{login:`You`},delivery:`sending`,error:``});submittedComments.set(requestPath,[...localComments.value,comment]);drafts.delete(requestPath);commentCursor.value=``;return sendComment(comment,requestBasePath,requestPath)}stateRequestPath.value=requestPath;try{await detail.save({state:issue.value.state===`OPEN`?`closed`:`open`},{path:requestPath,method:`PATCH`});if(detailPath.value===requestPath)commentCursor.value=``;feedback.success(`Issue updated.`);await invalidateGithubIssueQueries(queryClient,requestBasePath,requestPath)}catch(error){feedback.error(error,`Issue could not be updated.`)}finally{stateRequestPath.value=``}}async function sendComment(comment,requestBasePath,requestPath){comment.delivery=`sending`;comment.error=``;try{const result=await detail.save(vibe64RealtimeOriginPayload({body:comment.body}),{path:`${requestPath}/comments`,method:`POST`});Object.assign(comment,result.comment,{delivery:`sent`})}catch(error){comment.delivery=`failed`;feedback.error(error,`Comment could not be confirmed. Refresh before posting again.`);comment.error=feedback.message.value;return}feedback.success(`Comment added.`);try{await invalidateGithubIssueQueries(queryClient,requestBasePath,requestPath)}catch(error){feedback.error(error,`Comment added, but the conversation could not refresh.`)}}function retryComment(id){const comment=localComments.value.find(entry=>entry.id===id);if(pending.value||!active.value||comment?.delivery!==`failed`)return;commentCursor.value=``;return sendComment(comment,basePath.value,detailPath.value)}return{available,repository,projectSlug,basePath,list,detail,labelCatalog,issue,number,state,searchDraft,selectedLabels,draft,pending,comments,commentCount,commentCursor,navigate,filter,filterLabel,mutate,issueSaved,issueUpdated,retryComment}}var _hoisted_1$6={class:`github-label-name`};var _sfc_main$7={__name:`GithubLabelChip`,props:{label:{type:Object,required:true}},setup(__props){const props=__props;const color=computed(()=>/^[a-f\d]{6}$/iu.test(props.label.color||``)?`#${props.label.color}`:void 0);return(_ctx,_cache)=>{return openBlock(),createBlock(VChip,{color:color.value,title:__props.label.description||__props.label.name,"aria-label":__props.label.name,variant:`flat`,size:`small`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_1$6,toDisplayString(__props.label.name),1)]),_:1},8,[`color`,`title`,`aria-label`])}}};var GithubLabelChip_default=_plugin_vue_export_helper_default(_sfc_main$7,[[`__scopeId`,`data-v-9814070c`]]);var _hoisted_1$5={class:`d-flex align-center justify-space-between ga-3 pa-5 pb-2`};var _hoisted_2$4={class:`new-label__colours`};var _hoisted_3$3={class:`new-label__palette`};var _hoisted_4$2={class:`d-flex align-start ga-3`};var _hoisted_5$2=[`value`,`disabled`];var defaultColor=`0075ca`;var _sfc_main$6={__name:`GithubNewLabelButton`,props:{basePath:{type:String,required:true},labels:{type:Array,required:true},disabled:Boolean},emits:[`created`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const palette=[{name:`Red`,color:`d73a4a`},{name:`Orange`,color:`e9963a`},{name:`Yellow`,color:`f9d65c`},{name:`Green`,color:`4c956c`},{name:`Teal`,color:`008672`},{name:`Blue`,color:`0075ca`},{name:`Purple`,color:`8957e5`},{name:`Pink`,color:`db61a2`}];const open=ref(false);const name=ref(``);const color=ref(defaultColor);const pending=ref(false);const trimmedName=computed(()=>name.value.trim());const normalizedColor=computed(()=>color.value.trim().replace(/^#/u,``).toLowerCase());const validColor=computed(()=>/^[a-f\d]{6}$/u.test(normalizedColor.value));const nameError=computed(()=>{if(/\p{Cc}/u.test(name.value)||trimmedName.value.length>50)return`Use up to 50 characters, on one line.`;return props.labels.some(label=>label.name.toLowerCase()===trimmedName.value.toLowerCase())?`A label with this name already exists.`:``});const preview=computed(()=>({name:trimmedName.value||`Your label`,color:validColor.value?normalizedColor.value:defaultColor}));const canSubmit=computed(()=>!props.disabled&&!pending.value&&Boolean(trimmedName.value)&&!nameError.value&&validColor.value);const labelsPath=computed(()=>props.basePath.replace(/\/issues$/u,`/issue-labels`));const resource=useEndpointResource({path:labelsPath,enabled:false,queryKey:computed(()=>[`vibe64.newLabel`,labelsPath.value])});const queryClient=useQueryClient();const feedback=useUiFeedback({source:`vibe64.issues.newLabel`});watch(open,value=>{if(!value)return;name.value=``;color.value=defaultColor});watch(()=>props.basePath,()=>{open.value=false});async function submit(){if(!canSubmit.value)return;const requestPath=labelsPath.value;pending.value=true;let result;try{result=await resource.save({name:trimmedName.value,color:normalizedColor.value},{path:requestPath,method:`POST`})}catch(error){feedback.error(error,`Label could not be created. Your choices have been kept.`);pending.value=false;return}const queryKey=[`vibe64.issueLabels`,requestPath];await queryClient.cancelQueries({queryKey});queryClient.setQueryData(queryKey,catalog=>{if(!catalog)return catalog;const createdName=result.label.name.toLowerCase();const labels=catalog.labels.filter(label=>label.name.toLowerCase()!==createdName);labels.push(result.label);labels.sort((a,b)=>a.name.localeCompare(b.name));return{...catalog,labels}});feedback.success(`Label created.`);if(requestPath===labelsPath.value){open.value=false;emit(`created`,result.label)}pending.value=false}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VBtn,{"prepend-icon":unref(mdiPlus),color:`primary`,variant:`text`,height:`48`,disabled:__props.disabled||pending.value,onClick:_cache[0]||(_cache[0]=$event=>open.value=true)},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`New label`,-1)])]),_:1},8,[`prepend-icon`,`disabled`]),createVNode(VDialog,{modelValue:open.value,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>open.value=$event),"max-width":`30rem`,scrollable:``,persistent:pending.value,"aria-label":`New label`},{default:withCtx(()=>[createVNode(VCard,{tag:`form`,rounded:`xl`,onSubmit:withModifiers(submit,[`prevent`,`stop`])},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$5,[_cache[8]||(_cache[8]=createBaseVNode(`h2`,{class:`text-title-large`},`New label`,-1)),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,size:`48`,"aria-label":`Close new label`,disabled:pending.value,onClick:_cache[1]||(_cache[1]=$event=>open.value=false)},null,8,[`icon`,`disabled`])]),createVNode(VCardText,{class:`d-flex flex-column ga-4`},{default:withCtx(()=>[createVNode(VSheet,{color:`surface-light`,rounded:`lg`,class:`pa-4 d-flex flex-column align-center ga-2`},{default:withCtx(()=>[_cache[9]||(_cache[9]=createBaseVNode(`span`,{class:`text-label-small text-medium-emphasis`},`Preview`,-1)),createVNode(GithubLabelChip_default,{label:preview.value,class:`new-label__preview`},null,8,[`label`])]),_:1}),createVNode(VTextField,{modelValue:name.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>name.value=$event),label:`Label name`,placeholder:`e.g. Ready for review`,variant:`outlined`,maxlength:`50`,autofocus:``,disabled:pending.value,"error-messages":nameError.value,"hide-details":`auto`},null,8,[`modelValue`,`disabled`,`error-messages`]),createBaseVNode(`fieldset`,_hoisted_2$4,[_cache[10]||(_cache[10]=createBaseVNode(`legend`,{class:`text-label-large mb-2`},`Colour`,-1)),createBaseVNode(`div`,_hoisted_3$3,[(openBlock(),createElementBlock(Fragment,null,renderList(palette,swatch=>{return createVNode(VBtn,{key:swatch.color,color:`#${swatch.color}`,variant:`flat`,icon:``,size:`48`,"aria-label":swatch.name,"aria-pressed":normalizedColor.value===swatch.color,disabled:pending.value,onClick:$event=>color.value=swatch.color},{default:withCtx(()=>[normalizedColor.value===swatch.color?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiCheck)},null,8,[`icon`])):createCommentVNode(``,true)]),_:2},1032,[`color`,`aria-label`,`aria-pressed`,`disabled`,`onClick`])}),64))])]),createBaseVNode(`div`,_hoisted_4$2,[createBaseVNode(`input`,{type:`color`,value:`#${preview.value.color}`,class:`new-label__custom`,"aria-label":`Custom colour`,title:`Choose a custom colour`,disabled:pending.value,onInput:_cache[3]||(_cache[3]=$event=>color.value=$event.target.value.slice(1))},null,40,_hoisted_5$2),createVNode(VTextField,{modelValue:color.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>color.value=$event),label:`Hex colour`,prefix:`#`,variant:`outlined`,density:`compact`,maxlength:`7`,disabled:pending.value,"error-messages":validColor.value?[]:`Use six characters: 0–9 or A–F.`,"hide-details":`auto`,autocomplete:`off`,spellcheck:`false`},null,8,[`modelValue`,`disabled`,`error-messages`])]),_cache[11]||(_cache[11]=createBaseVNode(`p`,{class:`text-body-small text-medium-emphasis ma-0`},`Available to all issues in this repository.`,-1))]),_:1}),createVNode(VCardActions,{class:`pa-5 pt-2`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value,onClick:_cache[5]||(_cache[5]=$event=>open.value=false)},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,rounded:`pill`,height:`48`,disabled:!canSubmit.value,"aria-busy":pending.value},{default:withCtx(()=>[createTextVNode(toDisplayString(pending.value?`Creating…`:`Create label`),1)]),_:1},8,[`disabled`,`aria-busy`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`persistent`])],64)}}};var GithubNewLabelButton_default=_plugin_vue_export_helper_default(_sfc_main$6,[[`__scopeId`,`data-v-2ec73f20`]]);var _hoisted_1$4={key:1,class:`text-body-medium pa-3 ma-0`,role:`status`};var _hoisted_2$3={key:2,class:`pa-3 text-body-small`,role:`status`};var _sfc_main$5=Object.assign({inheritAttrs:false},{__name:`GithubMentionTextarea`,props:{modelValue:{type:String,default:``},basePath:{type:String,required:true},issue:{type:Object,default:null},enabled:{type:Boolean,default:true},disabled:Boolean},emits:[`update:modelValue`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const field=ref(null);const mention=ref(null);const selected=ref(0);const listId=`github-mentions-${useId()}`;const path=computed(()=>props.basePath.replace(/\/issues$/u,`/issue-mentions`));const number=computed(()=>props.issue?.number||null);const catalog=useEndpointResource({path,readQuery:computed(()=>number.value?{number:number.value}:{}),queryKey:computed(()=>[`vibe64.issueMentions`,path.value,number.value]),enabled:computed(()=>props.enabled),queryOptions:{retry:false,staleTime:6e4},requestRecovery:false,fallbackLoadError:`Mention suggestions could not load. You can still type any @username.`});const people=computed(()=>{const users=new Map;for(const user of[props.issue?.author,...(props.issue?.comments?.nodes||[]).map(comment=>comment.author),...catalog.data.value?.users||[]])if(user?.login)users.set(user.login.toLowerCase(),user);return[...users.values()]});const suggestions=computed(()=>{const query=mention.value?.query.toLowerCase()||``;return people.value.filter(user=>user.login.toLowerCase().includes(query)||user.name?.toLowerCase().includes(query)).sort((a,b)=>{const aStartsWithQuery=a.login.toLowerCase().startsWith(query);const bStartsWithQuery=b.login.toLowerCase().startsWith(query);return Number(bStartsWithQuery)-Number(aStartsWithQuery)||a.login.localeCompare(b.login)}).slice(0,8)});const open=computed(()=>Boolean(mention.value)&&props.enabled&&!props.disabled);const warning=computed(()=>catalog.loadError.value||catalog.data.value?.warning||``);watch([path,number,()=>props.enabled,()=>props.disabled],()=>{mention.value=null});watch(suggestions,()=>{selected.value=0});function updateMention(event){const input=event.target;if(input.tagName!==`TEXTAREA`)return;if(event.isComposing||input.selectionStart!==input.selectionEnd){mention.value=null;return}const end=input.selectionStart;const match=input.value.slice(0,end).match(/(?:^|[\s([{])@([a-z\d-]*)$/iu);mention.value=match?{start:end-match[1].length-1,end,query:match[1]}:null}async function choose(user){if(!mention.value||!user||props.disabled)return;const input=field.value?.$el.querySelector(`textarea`);if(!input)return;const{start,end}=mention.value;const after=input.value.slice(end).replace(/^[a-z\d-]*/iu,``);const insertion=`@${user.login}${/^\s/u.test(after)?``:` `}`;const value=input.value.slice(0,start)+insertion+after;if(input.maxLength>=0&&value.length>input.maxLength)return;const caret=start+insertion.length+(after.startsWith(` `)?1:0);emit(`update:modelValue`,value);mention.value=null;await nextTick();input.focus();input.setSelectionRange(caret,caret)}async function onKeydown(event){if(!open.value||event.isComposing||event.keyCode===229)return;const moveSelection=suggestions.value.length>0&&[`ArrowDown`,`ArrowUp`].includes(event.key);const acceptSelection=suggestions.value.length>0&&(event.key===`Enter`||event.key===`Tab`&&!event.shiftKey);if(event.key!==`Escape`&&!moveSelection&&!acceptSelection)return;event.preventDefault();event.stopPropagation();if(event.key===`Escape`)mention.value=null;else if(moveSelection){selected.value=(selected.value+(event.key===`ArrowDown`?1:-1)+suggestions.value.length)%suggestions.value.length;await nextTick();document.getElementById(`${listId}-${selected.value}`)?.scrollIntoView({block:`nearest`})}else await choose(suggestions.value[selected.value])}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VTextarea,mergeProps({ref_key:`field`,ref:field},_ctx.$attrs,{"model-value":__props.modelValue,disabled:__props.disabled,hint:`Markdown supported · Type @ to mention someone`,"persistent-hint":``,"aria-autocomplete":`list`,"aria-expanded":open.value,"aria-controls":open.value?listId:void 0,"aria-activedescendant":open.value&&suggestions.value.length?`${listId}-${selected.value}`:void 0,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>emit(`update:modelValue`,$event)),onInput:updateMention,onClick:updateMention,onFocus:updateMention,onSelect:updateMention,onCompositionstart:_cache[1]||(_cache[1]=$event=>mention.value=null),onCompositionend:updateMention,onBlur:_cache[2]||(_cache[2]=$event=>mention.value=null),onKeydown,onKeyup:_cache[3]||(_cache[3]=$event=>[`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes($event.key)&&updateMention($event))}),null,16,[`model-value`,`disabled`,`aria-expanded`,`aria-controls`,`aria-activedescendant`]),createVNode(VOverlay,{"model-value":open.value,target:field.value?.$el,"location-strategy":`connected`,location:`top start`,origin:`bottom start`,"scroll-strategy":`reposition`,scrim:false,"close-on-back":false,"capture-focus":false,"retain-focus":false,width:`360`,"max-width":`calc(100vw - 32px)`,"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>!$event&&(mention.value=null))},{default:withCtx(()=>[createVNode(VSheet,{rounded:`lg`,border:``,elevation:`3`,class:`overflow-y-auto`,"max-height":`320`},{default:withCtx(()=>[createVNode(VList,{id:listId,role:`listbox`,"aria-label":`Mention suggestions`,density:`compact`,class:`pa-1`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(suggestions.value,(user,index)=>{return openBlock(),createBlock(VListItem,{id:`${listId}-${index}`,key:user.login,tag:`button`,type:`button`,role:`option`,tabindex:`-1`,"aria-selected":index===selected.value,active:index===selected.value,title:`@${user.login}`,subtitle:user.name||void 0,"min-height":`48`,class:`w-100 text-left`,onPointerdown:_cache[4]||(_cache[4]=withModifiers(()=>{},[`prevent`])),onClick:$event=>choose(user)},null,8,[`id`,`aria-selected`,`active`,`title`,`subtitle`,`onClick`])}),128))]),_:1}),unref(catalog).isInitialLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`list-item`,height:`48`,"aria-label":`Loading mention suggestions`,"aria-busy":`true`})):!suggestions.value.length&&!warning.value?(openBlock(),createElementBlock(`p`,_hoisted_1$4,`No matching people`)):createCommentVNode(``,true),warning.value?(openBlock(),createElementBlock(`div`,_hoisted_2$3,[createTextVNode(toDisplayString(warning.value)+` `,1),createVNode(VBtn,{variant:`text`,height:`48`,disabled:unref(catalog).isFetching.value,onPointerdown:_cache[5]||(_cache[5]=withModifiers(()=>{},[`prevent`])),onClick:_cache[6]||(_cache[6]=$event=>unref(catalog).reload())},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Retry`,-1)])]),_:1},8,[`disabled`])])):createCommentVNode(``,true)]),_:1})]),_:1},8,[`model-value`,`target`])],64)}}});var _hoisted_1$3={class:`d-flex align-center justify-space-between ga-3 pa-5 pb-2`};var _hoisted_2$2={class:`d-flex align-center ga-3`};var _hoisted_3$2={class:`text-title-large`};var _hoisted_4$1={key:0,class:`text-body-medium ma-0`};var _hoisted_5$1={class:`d-flex flex-wrap justify-space-between ga-2`};var _sfc_main$4={__name:`GithubIssueEditorDialog`,props:{modelValue:Boolean,basePath:{type:String,required:true},issue:{type:Object,default:null},mode:{type:String,default:`create`}},emits:[`update:modelValue`,`saved`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const editing=computed(()=>props.mode!==`create`);const editingLabels=computed(()=>props.mode===`labels`);const heading=computed(()=>editingLabels.value?`Edit labels`:editing.value?`Edit issue`:`New issue`);const title=ref(``);const body=ref(``);const selectedLabels=ref([]);const pending=ref(false);const feedback=useUiFeedback({source:`vibe64.issues.editor`});const labelsPath=computed(()=>props.basePath.replace(/\/issues$/u,`/issue-labels`));const catalog=useEndpointResource({path:labelsPath,queryKey:computed(()=>[`vibe64.issueLabels`,labelsPath.value]),enabled:computed(()=>props.modelValue&&props.mode!==`content`),queryOptions:{retry:false},fallbackLoadError:`Labels could not load.`});const labels=computed(()=>catalog.data.value?.labels||[]);const canSetLabels=computed(()=>{const permission=editing.value?`canEditLabels`:`canCreateWithLabels`;return catalog.data.value?.[permission]===true});const path=computed(()=>editing.value?`${props.basePath}/${props.issue.number}${editingLabels.value?`/labels`:``}`:props.basePath);const resource=useEndpointResource({path,queryKey:computed(()=>[`vibe64.issueEditor`,path.value]),enabled:false});const canSubmit=computed(()=>{if(pending.value||selectedLabels.value.length>100)return false;return editingLabels.value?canSetLabels.value:Boolean(title.value.trim())&&(!editing.value||props.issue.viewerCanUpdate)});const submitLabel=computed(()=>{if(pending.value)return editing.value?`Saving…`:`Creating…`;if(editingLabels.value)return`Save labels`;return editing.value?`Save issue`:`Create issue`});watch(()=>props.modelValue,open=>{if(!open)return;title.value=props.issue?.title||``;body.value=props.issue?.body||``;selectedLabels.value=props.issue?.labels?.nodes?.map(label=>label.name)||[]},{immediate:true});async function submit(){if(!canSubmit.value)return;const wasEditing=editing.value;const requestBasePath=props.basePath;pending.value=true;try{const payload=editingLabels.value?{labels:selectedLabels.value}:{title:title.value.trim(),body:body.value,...!wasEditing?{labels:selectedLabels.value}:{}};const result=await resource.save(payload,{method:wasEditing?`PUT`:`POST`});feedback.success(wasEditing?`Issue updated.`:`Issue created.`);emit(`saved`,{number:result.issue.number,basePath:requestBasePath});emit(`update:modelValue`,false)}catch(error){feedback.error(error,wasEditing?`Issue could not be updated. Your changes have been kept.`:`Issue creation could not be confirmed. Refresh the issue list before trying again.`)}finally{pending.value=false}}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":__props.modelValue,"max-width":`42rem`,scrollable:``,persistent:pending.value,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>emit(`update:modelValue`,$event))},{default:withCtx(()=>[createVNode(VCard,{tag:`form`,rounded:`xl`,onSubmit:withModifiers(submit,[`prevent`])},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$3,[createBaseVNode(`div`,_hoisted_2$2,[createVNode(VIcon,{icon:editingLabels.value?unref(mdiLabelOutline):editing.value?unref(mdiPencilOutline):unref(mdiPlus),color:`primary`},null,8,[`icon`]),createBaseVNode(`h2`,_hoisted_3$2,toDisplayString(heading.value),1)]),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,size:`48`,"aria-label":`Close issue dialog`,disabled:pending.value,onClick:_cache[0]||(_cache[0]=$event=>emit(`update:modelValue`,false))},null,8,[`icon`,`disabled`])]),createVNode(VCardText,{class:`d-flex flex-column ga-4`},{default:withCtx(()=>[editingLabels.value?(openBlock(),createElementBlock(`p`,_hoisted_4$1,`#`+toDisplayString(__props.issue.number)+` · `+toDisplayString(__props.issue.title),1)):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VTextField,{modelValue:title.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>title.value=$event),label:`Title`,variant:`outlined`,maxlength:`256`,disabled:pending.value,"hide-details":``,autofocus:``},null,8,[`modelValue`,`disabled`]),createVNode(_sfc_main$5,{modelValue:body.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>body.value=$event),label:`Description`,placeholder:`What needs to happen?`,variant:`outlined`,rows:`5`,"auto-grow":``,maxlength:`65536`,"base-path":__props.basePath,issue:__props.issue,enabled:__props.modelValue,disabled:pending.value},null,8,[`modelValue`,`base-path`,`issue`,`enabled`,`disabled`])],64)),__props.mode!==`content`?(openBlock(),createElementBlock(Fragment,{key:2},[unref(catalog).isInitialLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`list-item-two-line,button`,"min-height":`152`,"aria-label":`Loading labels`,"aria-busy":`true`})):unref(catalog).loadError.value?(openBlock(),createBlock(VAlert,{key:1,type:`error`,variant:`tonal`,rounded:`lg`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,height:`48`,onClick:_cache[3]||(_cache[3]=$event=>unref(catalog).reload())},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Retry`,-1)])]),_:1})]),default:withCtx(()=>[createTextVNode(toDisplayString(unref(catalog).loadError.value)+` `,1)]),_:1})):(openBlock(),createElementBlock(Fragment,{key:2},[createVNode(VAutocomplete,{modelValue:selectedLabels.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>selectedLabels.value=$event),items:labels.value,"item-title":`name`,"item-value":`name`,multiple:``,chips:``,"closable-chips":``,label:`Labels`,variant:`outlined`,disabled:pending.value||!canSetLabels.value,"menu-props":{maxHeight:320},"error-messages":selectedLabels.value.length>100?`Choose up to 100 labels.`:[],hint:canSetLabels.value?`Search and select repository labels.`:editing.value?`Your GitHub account cannot edit labels.`:`GitHub requires write access to set labels on a new issue.`,"persistent-hint":``,"no-data-text":`No matching labels`},{chip:withCtx(({props:chipProps,item})=>[createVNode(GithubLabelChip_default,mergeProps(chipProps,{label:item}),null,16,[`label`])]),item:withCtx(({props:itemProps,item})=>[createVNode(VListItem,mergeProps(itemProps,{"min-height":`48`}),{title:withCtx(()=>[createVNode(GithubLabelChip_default,{label:item},null,8,[`label`])]),subtitle:withCtx(()=>[createTextVNode(toDisplayString(item.description),1)]),_:2},1040)]),_:1},8,[`modelValue`,`items`,`disabled`,`error-messages`,`hint`]),createBaseVNode(`div`,_hoisted_5$1,[unref(catalog).data.value?.canCreateLabels?(openBlock(),createBlock(GithubNewLabelButton_default,{key:0,"base-path":__props.basePath,labels:labels.value,disabled:pending.value,onCreated:_cache[5]||(_cache[5]=$event=>selectedLabels.value=[...selectedLabels.value,$event.name])},null,8,[`base-path`,`labels`,`disabled`])):createCommentVNode(``,true),createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value||unref(catalog).isFetching.value,onClick:_cache[6]||(_cache[6]=$event=>unref(catalog).reload())},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(`Refresh labels`,-1)])]),_:1},8,[`disabled`])])],64))],64)):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`pa-5 pt-2`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value,onClick:_cache[7]||(_cache[7]=$event=>emit(`update:modelValue`,false))},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,rounded:`pill`,height:`48`,disabled:!canSubmit.value,"aria-busy":pending.value},{default:withCtx(()=>[createTextVNode(toDisplayString(submitLabel.value),1)]),_:1},8,[`disabled`,`aria-busy`])]),_:1})]),_:1})]),_:1},8,[`model-value`,`persistent`])}}};var _hoisted_1$2={class:`d-flex flex-wrap justify-end ga-2`};var _sfc_main$3={__name:`GithubCommentEditor`,props:{comment:{type:Object,required:true},issue:{type:Object,required:true},basePath:{type:String,required:true}},emits:[`saved`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const editing=ref(false);const body=ref(``);const pending=ref(false);const feedback=useUiFeedback({source:`vibe64.issues.commentEditor`});const path=computed(()=>`${props.basePath}/${props.issue.number}/comments/${encodeURIComponent(props.comment.id)}`);const resource=useEndpointResource({path,enabled:false});const canSubmit=computed(()=>!pending.value&&Boolean(body.value.trim())&&body.value.length<=65536);function edit(){body.value=props.comment.body;editing.value=true}async function submit(){if(!canSubmit.value)return;const savedIssue={number:props.issue.number,basePath:props.basePath};pending.value=true;try{await resource.save({body:body.value},{method:`PATCH`});editing.value=false;feedback.success(`Comment updated.`);emit(`saved`,savedIssue)}catch(error){feedback.error(error,`Comment could not be updated. Your changes have been kept.`)}finally{pending.value=false}}return(_ctx,_cache)=>{return editing.value?(openBlock(),createElementBlock(`form`,{key:0,class:`d-flex flex-column ga-2`,onSubmit:withModifiers(submit,[`prevent`])},[createVNode(_sfc_main$5,{modelValue:body.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>body.value=$event),label:`Edit comment`,"base-path":__props.basePath,issue:__props.issue,disabled:pending.value,enabled:editing.value,variant:`outlined`,rows:`4`,"auto-grow":``,maxlength:`65536`},null,8,[`modelValue`,`base-path`,`issue`,`disabled`,`enabled`]),createBaseVNode(`div`,_hoisted_1$2,[createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value,onClick:_cache[1]||(_cache[1]=$event=>editing.value=false)},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,height:`48`,disabled:!canSubmit.value},{default:withCtx(()=>[createTextVNode(toDisplayString(pending.value?`Saving…`:`Save comment`),1)]),_:1},8,[`disabled`])])],32)):(openBlock(),createElementBlock(Fragment,{key:1},[renderSlot(_ctx.$slots,`default`),__props.comment.viewerCanUpdate?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,height:`48`,onClick:edit},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Edit comment`,-1)])]),_:1})):createCommentVNode(``,true)],64))}}};var _hoisted_1$1={class:`text-body-medium ma-0`};var _hoisted_2$1={key:0,class:`d-flex justify-start`};var _hoisted_3$1={key:1,role:`status`};var _sfc_main$2={__name:`GithubBulkLabelsDialog`,props:{modelValue:Boolean,basePath:{type:String,required:true},numbers:{type:Array,required:true},labels:{type:Array,required:true},canCreateLabels:Boolean},emits:[`update:modelValue`,`applied`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const labelMode=ref(`add`);const selectedLabels=ref([]);const remaining=ref([]);const failures=ref([]);const pending=ref(false);const progress=ref(``);const feedback=useUiFeedback({source:`vibe64.issues.bulkLabels`});const queryClient=useQueryClient();const resource=useEndpointResource({path:computed(()=>props.basePath),enabled:false});const canSubmit=computed(()=>!pending.value&&selectedLabels.value.length>0&&selectedLabels.value.length<=100&&remaining.value.length>0);watch(()=>props.modelValue,open=>{if(!open)return;remaining.value=[...props.numbers];selectedLabels.value=[];labelMode.value=`add`;failures.value=[]},{immediate:true});async function submit(){if(!canSubmit.value)return;const requestBasePath=props.basePath;const numbers=[...remaining.value];const payload={labels:[...selectedLabels.value],labelMode:labelMode.value};failures.value=[];pending.value=true;for(const[index,number]of numbers.entries()){progress.value=`Updating ${index+1} of ${numbers.length}…`;const issuePath=`${requestBasePath}/${number}`;try{await resource.save(payload,{path:`${issuePath}/labels`,method:`PUT`})}catch(error){feedback.error(error,`Labels could not be updated for #${number}.`);failures.value.push({number,message:feedback.message.value});continue}remaining.value=remaining.value.filter(value=>value!==number);emit(`applied`,{number,basePath:requestBasePath});try{await invalidateGithubIssueQueries(queryClient,requestBasePath,issuePath)}catch(error){feedback.error(error,`Labels updated for #${number}, but the issue could not refresh.`)}}pending.value=false;if(!remaining.value.length){feedback.success(`Labels updated for ${numbers.length} ${numbers.length===1?`issue`:`issues`}.`);emit(`update:modelValue`,false)}}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":__props.modelValue,"max-width":`36rem`,scrollable:``,persistent:pending.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>emit(`update:modelValue`,$event))},{default:withCtx(()=>[createVNode(VCard,{tag:`form`,rounded:`xl`,onSubmit:withModifiers(submit,[`prevent`])},{default:withCtx(()=>[createVNode(VCardTitle,{class:`pa-5 pb-2`},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Bulk edit labels`,-1)])]),_:1}),createVNode(VCardText,{class:`d-flex flex-column ga-4`},{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_1$1,toDisplayString(remaining.value.length)+` selected. Other labels will stay unchanged.`,1),createVNode(VBtnToggle,{modelValue:labelMode.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>labelMode.value=$event),mandatory:``,divided:``,rounded:`pill`,disabled:pending.value,"aria-label":`Label action`},{default:withCtx(()=>[createVNode(VBtn,{value:`add`,height:`48`},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Add labels`,-1)])]),_:1}),createVNode(VBtn,{value:`remove`,height:`48`},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Remove labels`,-1)])]),_:1})]),_:1},8,[`modelValue`,`disabled`]),createVNode(VAutocomplete,{modelValue:selectedLabels.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>selectedLabels.value=$event),items:__props.labels,"item-title":`name`,"item-value":`name`,multiple:``,chips:``,"closable-chips":``,label:`Labels to change`,variant:`outlined`,disabled:pending.value,"menu-props":{maxHeight:320},"error-messages":selectedLabels.value.length>100?`Choose up to 100 labels.`:[],"no-data-text":`No matching labels`},{chip:withCtx(({props:chipProps,item})=>[createVNode(GithubLabelChip_default,mergeProps(chipProps,{label:item}),null,16,[`label`])]),item:withCtx(({props:itemProps,item})=>[createVNode(VListItem,mergeProps(itemProps,{"min-height":`48`}),{title:withCtx(()=>[createVNode(GithubLabelChip_default,{label:item},null,8,[`label`])]),_:2},1040)]),_:1},8,[`modelValue`,`items`,`disabled`,`error-messages`]),__props.canCreateLabels&&labelMode.value===`add`?(openBlock(),createElementBlock(`div`,_hoisted_2$1,[createVNode(GithubNewLabelButton_default,{"base-path":__props.basePath,labels:__props.labels,disabled:pending.value,onCreated:_cache[2]||(_cache[2]=$event=>selectedLabels.value=[...selectedLabels.value,$event.name])},null,8,[`base-path`,`labels`,`disabled`])])):createCommentVNode(``,true),failures.value.length?(openBlock(),createElementBlock(`div`,_hoisted_3$1,[_cache[8]||(_cache[8]=createBaseVNode(`p`,{class:`text-body-medium`},`Some issues could not be updated. Retry applies only to these issues:`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList(failures.value,failure=>{return openBlock(),createElementBlock(`p`,{key:failure.number,class:`text-body-small text-error`},`#`+toDisplayString(failure.number)+`: `+toDisplayString(failure.message),1)}),128))])):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`pa-5 pt-2 d-flex flex-wrap`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value,onClick:_cache[3]||(_cache[3]=$event=>emit(`update:modelValue`,false))},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,height:`48`,disabled:!canSubmit.value},{default:withCtx(()=>[createTextVNode(toDisplayString(pending.value?progress.value:failures.value.length?`Retry failed issues`:`Apply labels`),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`model-value`,`persistent`])}}};var _hoisted_1={class:`issues-panel d-flex flex-column ga-2`};var _hoisted_2={class:`issues-panel__toolbar d-flex flex-wrap align-center ga-2`};var _hoisted_3={class:`issues-panel__labels d-flex flex-wrap align-start ga-2`};var _hoisted_4={key:3,class:`d-flex justify-end`};var _hoisted_5={key:0,class:`text-body-small text-medium-emphasis ma-0`};var _hoisted_6={class:`d-flex align-center justify-space-between px-2 text-label-large text-medium-emphasis`};var _hoisted_7={key:1,class:`d-flex flex-wrap align-center ga-2`};var _hoisted_8={class:`text-label-large`,role:`status`};var _hoisted_9={class:`d-flex align-center`};var _hoisted_10={class:`d-flex flex-wrap align-center ga-1`};var _hoisted_11={key:0,class:`text-label-small`};var _hoisted_12=[`aria-label`];var _hoisted_13={class:`d-flex justify-space-between ga-2`};var _hoisted_14={class:`d-flex align-center flex-wrap ga-2 mb-3`};var _hoisted_15={class:`text-label-large text-medium-emphasis`};var _hoisted_16={class:`text-title-large mb-2 issues-panel__title`};var _hoisted_17={class:`text-body-small text-medium-emphasis mb-0`};var _hoisted_18={class:`d-flex align-center flex-wrap ga-2 mt-3`};var _hoisted_19={key:0,class:`text-body-small text-medium-emphasis`};var _hoisted_20={key:1,class:`text-body-medium text-medium-emphasis ma-0`};var _hoisted_21={class:`d-flex align-center justify-space-between flex-wrap ga-2 px-2`};var _hoisted_22={class:`text-title-medium`};var _hoisted_23={class:`text-medium-emphasis`};var _hoisted_24={class:`d-flex flex-wrap ga-2`};var _hoisted_25={key:1,class:`text-body-medium text-medium-emphasis px-2`};var _hoisted_26={class:`issues-panel__comment-body`};var _hoisted_27={class:`d-flex flex-wrap align-center ga-2 mb-2`};var _hoisted_28={class:`text-label-large`};var _hoisted_29=[`datetime`];var _hoisted_30={key:0,class:`d-flex flex-wrap align-center ga-2 mt-1`,"aria-live":`polite`};var _hoisted_31={key:0,class:`text-body-small text-medium-emphasis`};var _hoisted_32={class:`text-body-small text-error`};var _hoisted_33={key:0,class:`text-body-small text-medium-emphasis ma-0`};var _hoisted_34={class:`d-flex flex-wrap align-center justify-space-between ga-3`};var _sfc_main$1={__name:`GithubIssuesPanel`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){const props=__props;const{available,projectSlug,basePath,list,detail,labelCatalog,issue,number,state,searchDraft,selectedLabels,draft,pending,comments,commentCount,commentCursor,navigate,filter,filterLabel,mutate,issueSaved,issueUpdated,retryComment}=useVibe64Issues(computed(()=>props.dashboardContext));const route=useRoute();const bulkOpen=ref(false);const selectedNumbers=ref([]);const visibleNumbers=computed(()=>(list.data.value?.issues||[]).map(item=>item.number));const allSelected=computed(()=>visibleNumbers.value.length>0&&visibleNumbers.value.every(value=>selectedNumbers.value.includes(value)));watch(()=>[basePath.value,number.value,route.query.issueSearch,route.query.issueState,route.query.issueCursor,route.query.issueLabel],()=>{selectedNumbers.value=[];bulkOpen.value=false},{deep:true});function labelsApplied({number:issueNumber,basePath:requestBasePath}){if(basePath.value===requestBasePath)selectedNumbers.value=selectedNumbers.value.filter(value=>value!==issueNumber)}const editorOpen=ref(false);const editorMode=ref(`create`);const editorIssue=shallowRef(null);watch([basePath,number],()=>{editorOpen.value=false;editorIssue.value=null;editorMode.value=`create`});function openEditor(selectedIssue=null,mode=`create`){editorMode.value=mode;editorIssue.value=selectedIssue;editorOpen.value=true}const resource=computed(()=>number.value?detail:list);const canChangeState=computed(()=>issue.value?.state===`OPEN`?issue.value.viewerCanClose:issue.value?.viewerCanReopen);function date(value){return value?new Date(value).toLocaleDateString(void 0,{month:`short`,day:`numeric`,year:`numeric`}):``}return(_ctx,_cache)=>{const _component_router_link=resolveComponent(`router-link`);return openBlock(),createElementBlock(`section`,_hoisted_1,[createBaseVNode(`div`,_hoisted_2,[createVNode(Vibe64DashboardBackButton_default,{to:unref(available)&&unref(number)?void 0:unref(projectAppPath)(unref(projectSlug),`/dashboard/env`),onClick:_cache[0]||(_cache[0]=$event=>unref(available)&&unref(number)&&unref(navigate)({issue:void 0}))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(available)&&unref(number)?`All issues`:`Back to dashboard`),1)]),_:1},8,[`to`]),createVNode(VSpacer),unref(available)?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiRefresh),variant:`text`,size:`small`,height:`48`,disabled:resource.value.isFetching.value||Boolean(unref(pending)),onClick:_cache[1]||(_cache[1]=$event=>resource.value.reload())},{default:withCtx(()=>[createTextVNode(toDisplayString(resource.value.isFetching.value?`Refreshing…`:`Refresh`),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),unref(available)?(openBlock(),createBlock(VBtn,{key:1,"prepend-icon":unref(mdiPlus),color:`primary`,variant:`tonal`,rounded:`pill`,size:`small`,height:`48`,onClick:_cache[2]||(_cache[2]=$event=>openEditor())},{default:withCtx(()=>[..._cache[28]||(_cache[28]=[createTextVNode(`New issue`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true)]),!unref(available)?(openBlock(),createBlock(VAlert,{key:0,variant:`tonal`,type:`info`},{default:withCtx(()=>[..._cache[29]||(_cache[29]=[createTextVNode(`Issues are available only for GitHub projects.`,-1)])]),_:1})):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(_sfc_main$8),!unref(number)?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode(`form`,{class:`d-flex flex-wrap align-center ga-3`,onSubmit:_cache[8]||(_cache[8]=withModifiers($event=>unref(filter)(),[`prevent`]))},[createVNode(VBtnToggle,{"model-value":unref(state),mandatory:``,divided:``,rounded:`pill`,color:`primary`,variant:`outlined`,"aria-label":`Issue state`,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>unref(filter)($event))},{default:withCtx(()=>[createVNode(VBtn,{value:`open`,height:`48`},{default:withCtx(()=>[..._cache[30]||(_cache[30]=[createTextVNode(`Open`,-1)])]),_:1}),createVNode(VBtn,{value:`closed`,height:`48`},{default:withCtx(()=>[..._cache[31]||(_cache[31]=[createTextVNode(`Closed`,-1)])]),_:1}),createVNode(VBtn,{value:`all`,height:`48`},{default:withCtx(()=>[..._cache[32]||(_cache[32]=[createTextVNode(`All`,-1)])]),_:1})]),_:1},8,[`model-value`]),createVNode(VTextField,{modelValue:unref(searchDraft),"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>isRef(searchDraft)?searchDraft.value=$event:null),class:`issues-panel__search`,label:`Search issues`,placeholder:`Number, text, label:new or label:"some label"`,"prepend-inner-icon":unref(mdiMagnify),variant:`outlined`,rounded:`pill`,"hide-details":``,maxlength:`200`,clearable:``,onKeydown:_cache[6]||(_cache[6]=withKeys(withModifiers($event=>unref(filter)(),[`prevent`]),[`enter`])),"onClick:clear":_cache[7]||(_cache[7]=$event=>{searchDraft.value=``;unref(filter)()})},{"append-inner":withCtx(()=>[createVNode(VBtn,{icon:unref(mdiArrowRight),variant:`text`,size:`48`,"aria-label":`Search issues`,onClick:_cache[4]||(_cache[4]=$event=>unref(filter)())},null,8,[`icon`])]),_:1},8,[`modelValue`,`prepend-inner-icon`])],32),createBaseVNode(`div`,_hoisted_3,[unref(labelCatalog).isInitialLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,class:`issues-panel__label-filter`,type:`list-item`,height:`80`,"aria-label":`Loading label filters`,"aria-busy":`true`})):unref(labelCatalog).loadError.value?(openBlock(),createBlock(VAlert,{key:1,class:`issues-panel__label-filter`,type:`error`,variant:`tonal`,rounded:`lg`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,height:`48`,onClick:_cache[9]||(_cache[9]=$event=>unref(labelCatalog).reload())},{default:withCtx(()=>[..._cache[33]||(_cache[33]=[createTextVNode(`Retry labels`,-1)])]),_:1})]),default:withCtx(()=>[createTextVNode(toDisplayString(unref(labelCatalog).loadError.value)+` `,1)]),_:1})):(openBlock(),createBlock(VAutocomplete,{key:2,"model-value":unref(selectedLabels),items:unref(labelCatalog).data.value?.labels||[],class:`issues-panel__label-filter`,"item-title":`name`,"item-value":`name`,multiple:``,chips:``,"closable-chips":``,clearable:``,label:`Filter by labels`,"prepend-inner-icon":unref(mdiLabelOutline),variant:`outlined`,rounded:`lg`,"menu-props":{maxHeight:320},hint:`Match all selected labels.`,"persistent-hint":``,"no-data-text":`No matching labels`,"onUpdate:modelValue":_cache[10]||(_cache[10]=$event=>unref(filter)(unref(state),$event))},{chip:withCtx(({props:chipProps,item})=>[createVNode(GithubLabelChip_default,mergeProps(chipProps,{label:item}),null,16,[`label`])]),item:withCtx(({props:itemProps,item})=>[createVNode(VListItem,mergeProps(itemProps,{"min-height":`48`}),{title:withCtx(()=>[createVNode(GithubLabelChip_default,{label:item},null,8,[`label`])]),subtitle:withCtx(()=>[createTextVNode(toDisplayString(item.description),1)]),_:2},1040)]),_:1},8,[`model-value`,`items`,`prepend-inner-icon`])),unref(labelCatalog).data.value?.canCreateLabels?(openBlock(),createElementBlock(`div`,_hoisted_4,[createVNode(GithubNewLabelButton_default,{"base-path":unref(basePath),labels:unref(labelCatalog).data.value.labels},null,8,[`base-path`,`labels`])])):createCommentVNode(``,true)])],64)):createCommentVNode(``,true),resource.value.isInitialLoading.value?(openBlock(),createBlock(VSheet,{key:1,rounded:`xl`,border:``,class:`pa-4`,"aria-label":`Loading issues`,"aria-busy":`true`},{default:withCtx(()=>[(openBlock(),createElementBlock(Fragment,null,renderList(4,index=>{return createVNode(VSkeletonLoader,{key:index,type:unref(number)?`paragraph`:`list-item-two-line`},null,8,[`type`])}),64))]),_:1})):resource.value.loadError.value&&(!unref(number)||!unref(issue))?(openBlock(),createBlock(VAlert,{key:2,type:`error`,variant:`tonal`,rounded:`lg`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,height:`48`,disabled:resource.value.isFetching.value,onClick:_cache[11]||(_cache[11]=$event=>resource.value.reload())},{default:withCtx(()=>[..._cache[34]||(_cache[34]=[createTextVNode(`Retry`,-1)])]),_:1},8,[`disabled`])]),default:withCtx(()=>[createTextVNode(toDisplayString(resource.value.loadError.value)+` `,1)]),_:1})):!unref(number)?(openBlock(),createElementBlock(Fragment,{key:3},[unref(list).data.value?.searchLimit&&unref(list).data.value.total>unref(list).data.value.searchLimit?(openBlock(),createElementBlock(`p`,_hoisted_5,` GitHub returns up to 1,000 matches for text searches or multiple labels. Narrow the filters to see more specific results. `)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_6,[createBaseVNode(`span`,null,toDisplayString(unref(list).data.value?.total||0)+` `+toDisplayString(unref(list).data.value?.total===1?`issue`:`issues`),1),_cache[35]||(_cache[35]=createBaseVNode(`span`,null,`Recently updated`,-1))]),unref(labelCatalog).data.value?.canEditLabels&&visibleNumbers.value.length?(openBlock(),createElementBlock(`div`,_hoisted_7,[createVNode(VCheckboxBtn,{"model-value":allSelected.value,indeterminate:selectedNumbers.value.length>0&&!allSelected.value,label:`Select all on this page`,class:`issues-panel__select-all`,"min-height":`48`,"onUpdate:modelValue":_cache[12]||(_cache[12]=$event=>selectedNumbers.value=$event?[...visibleNumbers.value]:[])},null,8,[`model-value`,`indeterminate`]),createBaseVNode(`span`,_hoisted_8,toDisplayString(selectedNumbers.value.length)+` selected`,1),createVNode(VBtn,{variant:`tonal`,height:`48`,disabled:!selectedNumbers.value.length,onClick:_cache[13]||(_cache[13]=$event=>bulkOpen.value=true)},{default:withCtx(()=>[..._cache[36]||(_cache[36]=[createTextVNode(`Bulk edit labels`,-1)])]),_:1},8,[`disabled`]),selectedNumbers.value.length?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,height:`48`,onClick:_cache[14]||(_cache[14]=$event=>selectedNumbers.value=[])},{default:withCtx(()=>[..._cache[37]||(_cache[37]=[createTextVNode(`Clear selection`,-1)])]),_:1})):createCommentVNode(``,true)])):createCommentVNode(``,true),unref(list).data.value?.issues?.length?(openBlock(),createBlock(VList,{key:2,class:`pa-0`,density:`compact`,lines:`two`,rounded:`xl`,border:``,slim:``,"aria-label":`GitHub issues`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(list).data.value.issues,(item,index)=>{return openBlock(),createElementBlock(Fragment,{key:item.number},[index?(openBlock(),createBlock(VDivider,{key:0})):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_9,[unref(labelCatalog).data.value?.canEditLabels?(openBlock(),createBlock(VCheckboxBtn,{key:0,modelValue:selectedNumbers.value,"onUpdate:modelValue":_cache[15]||(_cache[15]=$event=>selectedNumbers.value=$event),value:item.number,"aria-label":`Select issue #${item.number}`,class:`flex-grow-0 ml-2`,"min-width":`48`,"min-height":`48`},null,8,[`modelValue`,`value`,`aria-label`])):createCommentVNode(``,true),createVNode(VListItem,{class:`py-2 flex-grow-1`,active:false},{prepend:withCtx(()=>[createVNode(VIcon,{icon:item.state===`OPEN`?unref(mdiRecordCircleOutline):unref(mdiCheck),color:item.state===`OPEN`?`success`:`primary`,"aria-label":item.state===`OPEN`?`Open`:`Closed`},null,8,[`icon`,`color`,`aria-label`])]),append:withCtx(()=>[createBaseVNode(`span`,{class:`d-flex align-center ga-1 ml-3 text-label-medium text-medium-emphasis`,"aria-label":`${item.comments.totalCount} comments`},[createVNode(VIcon,{icon:unref(mdiCommentOutline),size:`18`},null,8,[`icon`]),createTextVNode(toDisplayString(item.comments.totalCount),1)],8,_hoisted_12)]),default:withCtx(()=>[createBaseVNode(`div`,_hoisted_10,[createVNode(VListItemTitle,{class:`issues-panel__item-title text-title-medium text-wrap`},{default:withCtx(()=>[createVNode(_component_router_link,{class:`issues-panel__issue-link text-decoration-none`,to:{query:{..._ctx.$route.query,issue:String(item.number)}}},{default:withCtx(()=>[createTextVNode(toDisplayString(item.title),1)]),_:2},1032,[`to`])]),_:2},1024),(openBlock(true),createElementBlock(Fragment,null,renderList(item.labels?.nodes||[],label=>{return openBlock(),createBlock(GithubLabelChip_default,{key:label.name,label,tag:`button`,type:`button`,"aria-label":`Filter by label ${label.name}`,onClick:$event=>unref(filterLabel)(label.name)},null,8,[`label`,`aria-label`,`onClick`])}),128)),item.labels?.totalCount>item.labels?.nodes?.length?(openBlock(),createElementBlock(`span`,_hoisted_11,`+`+toDisplayString(item.labels.totalCount-item.labels.nodes.length),1)):createCommentVNode(``,true)]),createVNode(VListItemSubtitle,{class:`text-body-small mt-1`},{default:withCtx(()=>[createTextVNode(` #`+toDisplayString(item.number)+` · `+toDisplayString(item.state===`OPEN`?`Open`:`Closed`)+` · `+toDisplayString(date(item.updatedAt)),1)]),_:2},1024)]),_:2},1024)])],64)}),128))]),_:1})):(openBlock(),createBlock(VSheet,{key:3,rounded:`xl`,color:`surface-light`,class:`pa-8 text-center`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiRecordCircleOutline),size:`40`,class:`mb-3`},null,8,[`icon`]),_cache[38]||(_cache[38]=createBaseVNode(`p`,{class:`text-title-medium mb-1`},`No issues here`,-1)),_cache[39]||(_cache[39]=createBaseVNode(`p`,{class:`text-body-medium text-medium-emphasis ma-0`},`Try a different filter or search.`,-1))]),_:1})),createBaseVNode(`div`,_hoisted_13,[_ctx.$route.query.issueCursor?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,height:`48`,onClick:_cache[16]||(_cache[16]=$event=>unref(navigate)({issueCursor:void 0}))},{default:withCtx(()=>[..._cache[40]||(_cache[40]=[createTextVNode(`First page`,-1)])]),_:1})):createCommentVNode(``,true),createVNode(VSpacer),unref(list).data.value?.pageInfo?.hasNextPage?(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,height:`48`,"append-icon":unref(mdiArrowRight),onClick:_cache[17]||(_cache[17]=$event=>unref(navigate)({issueCursor:unref(list).data.value.pageInfo.endCursor}))},{default:withCtx(()=>[..._cache[41]||(_cache[41]=[createTextVNode(` Next page `,-1)])]),_:1},8,[`append-icon`])):createCommentVNode(``,true)])],64)):unref(issue)?(openBlock(),createElementBlock(Fragment,{key:4},[unref(detail).loadError.value?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,rounded:`lg`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,height:`48`,disabled:unref(detail).isFetching.value,onClick:_cache[18]||(_cache[18]=$event=>unref(detail).reload())},{default:withCtx(()=>[..._cache[42]||(_cache[42]=[createTextVNode(`Refresh`,-1)])]),_:1},8,[`disabled`])]),default:withCtx(()=>[createTextVNode(toDisplayString(unref(detail).loadError.value)+` `,1)]),_:1})):createCommentVNode(``,true),createBaseVNode(`div`,null,[createBaseVNode(`div`,_hoisted_14,[createVNode(VChip,{"prepend-icon":unref(issue).state===`OPEN`?unref(mdiRecordCircleOutline):unref(mdiCheck),color:unref(issue).state===`OPEN`?`success`:`primary`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(issue).state===`OPEN`?`Open`:`Closed`),1)]),_:1},8,[`prepend-icon`,`color`]),createBaseVNode(`span`,_hoisted_15,`#`+toDisplayString(unref(issue).number),1),createVNode(VSpacer),unref(issue).viewerCanUpdate?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiPencilOutline),variant:`text`,height:`48`,onClick:_cache[19]||(_cache[19]=$event=>openEditor(unref(issue),`content`))},{default:withCtx(()=>[..._cache[43]||(_cache[43]=[createTextVNode(`Edit issue`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true),createVNode(VBtn,{href:unref(issue).url,target:`_blank`,rel:`noopener noreferrer`,"append-icon":unref(mdiOpenInNew),variant:`text`,height:`48`},{default:withCtx(()=>[..._cache[44]||(_cache[44]=[createTextVNode(`GitHub`,-1)])]),_:1},8,[`href`,`append-icon`])]),createBaseVNode(`h2`,_hoisted_16,toDisplayString(unref(issue).title),1),createBaseVNode(`p`,_hoisted_17,toDisplayString(unref(issue).author?.login||`Deleted user`)+` opened this on `+toDisplayString(date(unref(issue).createdAt)),1),createBaseVNode(`div`,_hoisted_18,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(issue).labels?.nodes||[],label=>{return openBlock(),createBlock(GithubLabelChip_default,{key:label.name,label,tag:`button`,type:`button`,"aria-label":`Filter by label ${label.name}`,onClick:$event=>unref(filterLabel)(label.name)},null,8,[`label`,`aria-label`,`onClick`])}),128)),!unref(issue).labels?.nodes?.length?(openBlock(),createElementBlock(`span`,_hoisted_19,`No labels`)):createCommentVNode(``,true),unref(issue).canEditLabels?(openBlock(),createBlock(VBtn,{key:1,"prepend-icon":unref(mdiLabelOutline),variant:`text`,height:`48`,onClick:_cache[20]||(_cache[20]=$event=>openEditor(unref(issue),`labels`))},{default:withCtx(()=>[..._cache[45]||(_cache[45]=[createTextVNode(`Edit labels`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true)])]),createVNode(VSheet,{border:``,rounded:`xl`,class:`pa-5 issues-panel__markdown`},{default:withCtx(()=>[unref(issue).body||unref(issue).bodyHTML?(openBlock(),createBlock(GithubMarkdown_default,{key:0,text:unref(issue).body,html:unref(issue).bodyHTML},null,8,[`text`,`html`])):(openBlock(),createElementBlock(`p`,_hoisted_20,`No description provided.`))]),_:1}),createBaseVNode(`div`,_hoisted_21,[createBaseVNode(`h3`,_hoisted_22,[_cache[46]||(_cache[46]=createTextVNode(`Comments `,-1)),createBaseVNode(`span`,_hoisted_23,toDisplayString(unref(commentCount)),1)]),createBaseVNode(`div`,_hoisted_24,[unref(commentCursor)?(openBlock(),createBlock(VBtn,{key:0,height:`48`,variant:`text`,onClick:_cache[21]||(_cache[21]=$event=>commentCursor.value=``)},{default:withCtx(()=>[..._cache[47]||(_cache[47]=[createTextVNode(`Latest comments`,-1)])]),_:1})):createCommentVNode(``,true),unref(issue).comments.pageInfo.hasPreviousPage?(openBlock(),createBlock(VBtn,{key:1,height:`48`,variant:`text`,onClick:_cache[22]||(_cache[22]=$event=>commentCursor.value=unref(issue).comments.pageInfo.startCursor)},{default:withCtx(()=>[..._cache[48]||(_cache[48]=[createTextVNode(` Older comments `,-1)])]),_:1})):createCommentVNode(``,true)])]),!unref(comments).length?(openBlock(),createElementBlock(`p`,_hoisted_25,`No comments yet. Start the conversation.`)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(unref(comments),comment=>{return openBlock(),createElementBlock(`article`,{key:comment.id,class:`issues-panel__comment d-flex ga-3`},[createVNode(VAvatar,{color:`primary`,variant:`tonal`,size:`36`,class:`mt-1 text-label-large`,"aria-hidden":`true`},{default:withCtx(()=>[createTextVNode(toDisplayString((comment.author?.login||`?`).slice(0,1).toUpperCase()),1)]),_:2},1024),createBaseVNode(`div`,_hoisted_26,[createBaseVNode(`div`,_hoisted_27,[createBaseVNode(`span`,_hoisted_28,toDisplayString(comment.author?.login||`Deleted user`),1),createBaseVNode(`time`,{class:`text-body-small text-medium-emphasis`,datetime:comment.createdAt},toDisplayString(date(comment.createdAt)),9,_hoisted_29)]),(openBlock(),createBlock(_sfc_main$3,{key:`${unref(basePath)}:${unref(issue).number}:${comment.id}`,comment,issue:unref(issue),"base-path":unref(basePath),onSaved:unref(issueUpdated)},{default:withCtx(()=>[createVNode(VSheet,{color:`surface-light`,rounded:`xl`,class:`pa-4 issues-panel__markdown`},{default:withCtx(()=>[createVNode(GithubMarkdown_default,{text:comment.body,html:comment.bodyHTML},null,8,[`text`,`html`])]),_:2},1024)]),_:2},1032,[`comment`,`issue`,`base-path`,`onSaved`])),comment.delivery&&comment.delivery!==`sent`?(openBlock(),createElementBlock(`div`,_hoisted_30,[comment.delivery===`sending`?(openBlock(),createElementBlock(`span`,_hoisted_31,`Posting…`)):(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`span`,_hoisted_32,toDisplayString(comment.error),1),createVNode(VBtn,{variant:`text`,height:`48`,disabled:Boolean(unref(pending)),onClick:$event=>unref(retryComment)(comment.id)},{default:withCtx(()=>[..._cache[49]||(_cache[49]=[createTextVNode(`Retry`,-1)])]),_:1},8,[`disabled`,`onClick`])],64))])):createCommentVNode(``,true)])])}),128)),createVNode(VDivider),createBaseVNode(`form`,{class:`d-flex flex-column ga-3`,onSubmit:_cache[25]||(_cache[25]=withModifiers($event=>unref(mutate)(`comment`),[`prevent`]))},[unref(issue).locked?(openBlock(),createElementBlock(`p`,_hoisted_33,`This conversation is locked. GitHub limits comments to permitted collaborators.`)):createCommentVNode(``,true),createVNode(_sfc_main$5,{modelValue:unref(draft),"onUpdate:modelValue":_cache[23]||(_cache[23]=$event=>isRef(draft)?draft.value=$event:null),label:`Add a comment`,placeholder:`Share an update or ask a question…`,variant:`outlined`,rounded:`lg`,rows:`4`,"auto-grow":``,counter:unref(draft).length>65e3?65536:void 0,"error-messages":unref(draft).length>65536?`Keep your comment under 65,536 characters.`:[],"base-path":unref(basePath),issue:unref(issue),enabled:__props.dashboardContext.active!==false},null,8,[`modelValue`,`counter`,`error-messages`,`base-path`,`issue`,`enabled`]),createBaseVNode(`div`,_hoisted_34,[createVNode(VBtn,{variant:`tonal`,height:`48`,"prepend-icon":unref(issue).state===`OPEN`?unref(mdiCheck):unref(mdiRestore),disabled:!canChangeState.value||Boolean(unref(pending)),title:canChangeState.value?``:`Your GitHub account cannot change this issue’s state.`,onClick:_cache[24]||(_cache[24]=$event=>unref(mutate)(`state`))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(pending)===`state`?`Updating…`:unref(issue).state===`OPEN`?`Close issue`:`Reopen issue`),1)]),_:1},8,[`prepend-icon`,`disabled`,`title`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,rounded:`pill`,height:`48`,disabled:!unref(draft).trim()||unref(draft).length>65536||Boolean(unref(pending))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(pending)===`comment`?`Posting…`:`Comment`),1)]),_:1},8,[`disabled`])])],32)],64)):createCommentVNode(``,true)],64)),unref(available)?(openBlock(),createBlock(_sfc_main$2,{key:unref(basePath),modelValue:bulkOpen.value,"onUpdate:modelValue":_cache[26]||(_cache[26]=$event=>bulkOpen.value=$event),"base-path":unref(basePath),numbers:selectedNumbers.value,labels:unref(labelCatalog).data.value?.labels||[],"can-create-labels":unref(labelCatalog).data.value?.canCreateLabels===true,onApplied:labelsApplied},null,8,[`modelValue`,`base-path`,`numbers`,`labels`,`can-create-labels`])):createCommentVNode(``,true),unref(available)?(openBlock(),createBlock(_sfc_main$4,{key:3,modelValue:editorOpen.value,"onUpdate:modelValue":_cache[27]||(_cache[27]=$event=>editorOpen.value=$event),"base-path":unref(basePath),issue:editorIssue.value,mode:editorMode.value,onSaved:unref(issueSaved)},null,8,[`modelValue`,`base-path`,`issue`,`mode`,`onSaved`])):createCommentVNode(``,true)])}}};var GithubIssuesPanel_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-3d679cd1`]]);var _sfc_main={__name:`index`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(GithubIssuesPanel_default,{"dashboard-context":__props.dashboardContext},null,8,[`dashboard-context`])}}};export{_sfc_main as default};
|
|
1
|
+
import{Gn as withKeys,Kn as withModifiers,h as VIcon}from"./ripple-BVltMmyV.js";import{D as createVNode,E as createTextVNode,Ht as watch,On as unref,Pt as useId,St as resolveComponent,_ as createBaseVNode,b as createElementBlock,bt as renderList,et as mergeProps,g as computed,gn as reactive,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,tt as nextTick,un as isRef,v as createBlock,vn as ref,xn as shallowRef,xt as renderSlot,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{J as useQueryClient,t as useEndpointResource}from"./useEndpointResource-DWoQ2keu.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{c as projectSlugFromRoute,o as projectAppPath}from"./useRealtimeEvent-Bwapstla.js";import{t as VOverlay}from"./VOverlay-CeMZurIN.js";import{t as VAvatar}from"./VAvatar-DPzqDH4r.js";import{c as VListItemTitle,l as VListItemSubtitle,n as VList,s as VListItem}from"./VMenu-C_x18lwb.js";import{t as VChip}from"./VChip-CcI-Oo2J.js";import{g as VCheckboxBtn,t as VTextField}from"./VTextField-BR2eZeFT.js";import{r as scopedDevelopmentApiUrl}from"./studioUrls-DmMMIScP.js";import{$ as mdiCommentOutline,En as mdiOpenInNew,In as mdiPlus,Qt as mdiLabelOutline,Rn as mdiRecordCircleOutline,U as mdiClose,Un as mdiRestore,Vn as mdiRefresh,j as mdiCheck,jn as mdiPencilOutline,v as mdiArrowRight,yn as mdiMagnify}from"./mdi-CG9pWOSj.js";import{i as VBtnToggle,t as VBtn}from"./VBtn-B2MBK2DL.js";import{t as VAlert}from"./VAlert-P256xaE0.js";import{t as VAutocomplete}from"./VAutocomplete-BDb95qJX.js";import{t as VDivider}from"./VDivider-BMEqUoAB.js";import{t as VSheet}from"./VSheet-DZWsu0kL.js";import{t as VDialog}from"./VDialog-Bu3EfKb1.js";import{i as VCardTitle,n as VCardText,o as VCardActions,t as VCard}from"./VCard-mXy0k4aS.js";import{t as VSpacer}from"./VSpacer-Dhmsvk4t.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-CttxM1tw.js";import{t as VTextarea}from"./VTextarea-DbqamXJd.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useUiFeedback}from"./useUiFeedback-BPBF_0bp.js";import{n as vibe64RealtimeOriginPayload}from"./vibe64BrowserTabOrigin-SF9E31vi.js";import{m as GithubMarkdown_default}from"./index-dNxr4Lg9.js";import{t as Vibe64DashboardBackButton_default}from"./Vibe64DashboardBackButton-BH_8j_VR.js";import{n as githubProjectRepositoryName,r as invalidateGithubIssueQueries,t as githubProjectAvailable}from"./vibe64GithubProject-CdFrbVHp.js";import{t as _sfc_main$8}from"./GithubBrowserTabs-C2NO5l8g.js";var drafts=reactive(new Map);var submittedComments=reactive(new Map);function useVibe64Issues(context){const route=useRoute();const router=useRouter();const queryClient=useQueryClient();const feedback=useUiFeedback({source:`vibe64.issues`});const projectSlug=computed(()=>projectSlugFromRoute(route));const repository=computed(()=>githubProjectRepositoryName(context.value.projectContext));const available=computed(()=>githubProjectAvailable(context.value.projectContext));const active=computed(()=>available.value&&context.value.active!==false);const basePath=computed(()=>scopedDevelopmentApiUrl(`/api/vibe64/issues`,projectSlug.value));const state=computed(()=>[`open`,`closed`,`all`].includes(route.query.issueState)?route.query.issueState:`open`);const search=computed(()=>typeof route.query.issueSearch===`string`?route.query.issueSearch:``);const searchDraft=ref(search.value);watch(search,value=>{searchDraft.value=value});const selectedLabels=computed(()=>{const labels=route.query.issueLabel;return(Array.isArray(labels)?labels:[labels]).filter(label=>typeof label===`string`&&label.trim())});const number=computed(()=>/^\d+$/u.test(String(route.query.issue||``))?String(route.query.issue):``);const commentCursor=ref(``);watch([basePath,number],()=>{commentCursor.value=``});const listQuery=computed(()=>({state:state.value,search:search.value,labels:selectedLabels.value,...route.query.issueCursor?{cursor:route.query.issueCursor}:{}}));const listKey=computed(()=>[`vibe64.issues`,basePath.value,listQuery.value]);const list=useEndpointResource({path:basePath,readQuery:listQuery,queryKey:listKey,enabled:computed(()=>active.value&&!number.value),queryOptions:{retry:false},requestRecoveryLabel:`GitHub issues`,fallbackLoadError:`Issues could not load.`});const labelsPath=computed(()=>basePath.value.replace(/\/issues$/u,`/issue-labels`));const labelCatalog=useEndpointResource({path:labelsPath,queryKey:computed(()=>[`vibe64.issueLabels`,labelsPath.value]),enabled:computed(()=>active.value&&!number.value),queryOptions:{retry:false},fallbackLoadError:`Labels could not load.`});const detailPath=computed(()=>`${basePath.value}/${number.value}`);const detail=useEndpointResource({path:detailPath,readQuery:computed(()=>commentCursor.value?{cursor:commentCursor.value}:{}),queryKey:computed(()=>[`vibe64.issue`,detailPath.value,commentCursor.value]),enabled:computed(()=>active.value&&Boolean(number.value)),queryOptions:{retry:false},requestRecoveryLabel:`GitHub issue`,fallbackLoadError:`This issue could not load.`});const issue=computed(()=>detail.data.value?.issue||null);const draft=computed({get:()=>drafts.get(detailPath.value)||``,set:value=>value?drafts.set(detailPath.value,value):drafts.delete(detailPath.value)});const stateRequestPath=ref(``);const localComments=computed(()=>submittedComments.get(detailPath.value)||[]);const savedComments=computed(()=>issue.value?.comments?.nodes||[]);const savedCommentIds=computed(()=>new Set(savedComments.value.map(comment=>comment.id)));const comments=computed(()=>[...savedComments.value,...localComments.value.filter(comment=>!savedCommentIds.value.has(comment.id)&&(comment.delivery!==`sent`||!commentCursor.value))]);const commentCount=computed(()=>(issue.value?.comments?.totalCount||0)+comments.value.length-savedComments.value.length);const pending=computed(()=>{if(stateRequestPath.value===detailPath.value)return`state`;return localComments.value.some(comment=>comment.delivery===`sending`)?`comment`:``});watch([detail.data,detailPath,commentCursor],()=>{if(commentCursor.value||issue.value?.number!==Number(number.value))return;const remaining=localComments.value.filter(comment=>comment.delivery!==`sent`||!savedCommentIds.value.has(comment.id));if(remaining.length)submittedComments.set(detailPath.value,remaining);else submittedComments.delete(detailPath.value)},{immediate:true});function navigate(changes){return router.push({query:{...route.query,...changes}})}function filter(nextState=state.value,nextLabels=selectedLabels.value){return navigate({issueState:nextState,issueSearch:String(searchDraft.value||``).trim()||void 0,issueLabel:nextLabels?.length?nextLabels:void 0,issueCursor:void 0,issue:void 0})}function filterLabel(label){searchDraft.value=`label:${/[\s"\\]/u.test(label)?JSON.stringify(label):label}`;return filter(state.value,[])}function issueUpdated({number:issueNumber,basePath:requestBasePath}){return invalidateGithubIssueQueries(queryClient,requestBasePath,`${requestBasePath}/${issueNumber}`)}async function issueSaved({number:issueNumber,basePath:requestBasePath}){await issueUpdated({number:issueNumber,basePath:requestBasePath});if(basePath.value===requestBasePath)await navigate({issue:String(issueNumber)})}async function mutate(kind){if(pending.value||issue.value?.number!==Number(number.value)||!active.value)return;const requestBasePath=basePath.value;const requestPath=detailPath.value;if(kind===`comment`){const submitted=draft.value;if(!submitted.trim()||submitted.length>65536)return;const comment=reactive({id:crypto.randomUUID(),body:submitted,createdAt:new Date().toISOString(),author:{login:`You`},delivery:`sending`,error:``});submittedComments.set(requestPath,[...localComments.value,comment]);drafts.delete(requestPath);commentCursor.value=``;return sendComment(comment,requestBasePath,requestPath)}stateRequestPath.value=requestPath;try{await detail.save({state:issue.value.state===`OPEN`?`closed`:`open`},{path:requestPath,method:`PATCH`});if(detailPath.value===requestPath)commentCursor.value=``;feedback.success(`Issue updated.`);await invalidateGithubIssueQueries(queryClient,requestBasePath,requestPath)}catch(error){feedback.error(error,`Issue could not be updated.`)}finally{stateRequestPath.value=``}}async function sendComment(comment,requestBasePath,requestPath){comment.delivery=`sending`;comment.error=``;try{const result=await detail.save(vibe64RealtimeOriginPayload({body:comment.body}),{path:`${requestPath}/comments`,method:`POST`});Object.assign(comment,result.comment,{delivery:`sent`})}catch(error){comment.delivery=`failed`;feedback.error(error,`Comment could not be confirmed. Refresh before posting again.`);comment.error=feedback.message.value;return}feedback.success(`Comment added.`);try{await invalidateGithubIssueQueries(queryClient,requestBasePath,requestPath)}catch(error){feedback.error(error,`Comment added, but the conversation could not refresh.`)}}function retryComment(id){const comment=localComments.value.find(entry=>entry.id===id);if(pending.value||!active.value||comment?.delivery!==`failed`)return;commentCursor.value=``;return sendComment(comment,basePath.value,detailPath.value)}return{available,repository,projectSlug,basePath,list,detail,labelCatalog,issue,number,state,searchDraft,selectedLabels,draft,pending,comments,commentCount,commentCursor,navigate,filter,filterLabel,mutate,issueSaved,issueUpdated,retryComment}}var _hoisted_1$6={class:`github-label-name`};var _sfc_main$7={__name:`GithubLabelChip`,props:{label:{type:Object,required:true}},setup(__props){const props=__props;const color=computed(()=>/^[a-f\d]{6}$/iu.test(props.label.color||``)?`#${props.label.color}`:void 0);return(_ctx,_cache)=>{return openBlock(),createBlock(VChip,{color:color.value,title:__props.label.description||__props.label.name,"aria-label":__props.label.name,variant:`flat`,size:`small`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_1$6,toDisplayString(__props.label.name),1)]),_:1},8,[`color`,`title`,`aria-label`])}}};var GithubLabelChip_default=_plugin_vue_export_helper_default(_sfc_main$7,[[`__scopeId`,`data-v-9814070c`]]);var _hoisted_1$5={class:`d-flex align-center justify-space-between ga-3 pa-5 pb-2`};var _hoisted_2$4={class:`new-label__colours`};var _hoisted_3$3={class:`new-label__palette`};var _hoisted_4$2={class:`d-flex align-start ga-3`};var _hoisted_5$2=[`value`,`disabled`];var defaultColor=`0075ca`;var _sfc_main$6={__name:`GithubNewLabelButton`,props:{basePath:{type:String,required:true},labels:{type:Array,required:true},disabled:Boolean},emits:[`created`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const palette=[{name:`Red`,color:`d73a4a`},{name:`Orange`,color:`e9963a`},{name:`Yellow`,color:`f9d65c`},{name:`Green`,color:`4c956c`},{name:`Teal`,color:`008672`},{name:`Blue`,color:`0075ca`},{name:`Purple`,color:`8957e5`},{name:`Pink`,color:`db61a2`}];const open=ref(false);const name=ref(``);const color=ref(defaultColor);const pending=ref(false);const trimmedName=computed(()=>name.value.trim());const normalizedColor=computed(()=>color.value.trim().replace(/^#/u,``).toLowerCase());const validColor=computed(()=>/^[a-f\d]{6}$/u.test(normalizedColor.value));const nameError=computed(()=>{if(/\p{Cc}/u.test(name.value)||trimmedName.value.length>50)return`Use up to 50 characters, on one line.`;return props.labels.some(label=>label.name.toLowerCase()===trimmedName.value.toLowerCase())?`A label with this name already exists.`:``});const preview=computed(()=>({name:trimmedName.value||`Your label`,color:validColor.value?normalizedColor.value:defaultColor}));const canSubmit=computed(()=>!props.disabled&&!pending.value&&Boolean(trimmedName.value)&&!nameError.value&&validColor.value);const labelsPath=computed(()=>props.basePath.replace(/\/issues$/u,`/issue-labels`));const resource=useEndpointResource({path:labelsPath,enabled:false,queryKey:computed(()=>[`vibe64.newLabel`,labelsPath.value])});const queryClient=useQueryClient();const feedback=useUiFeedback({source:`vibe64.issues.newLabel`});watch(open,value=>{if(!value)return;name.value=``;color.value=defaultColor});watch(()=>props.basePath,()=>{open.value=false});async function submit(){if(!canSubmit.value)return;const requestPath=labelsPath.value;pending.value=true;let result;try{result=await resource.save({name:trimmedName.value,color:normalizedColor.value},{path:requestPath,method:`POST`})}catch(error){feedback.error(error,`Label could not be created. Your choices have been kept.`);pending.value=false;return}const queryKey=[`vibe64.issueLabels`,requestPath];await queryClient.cancelQueries({queryKey});queryClient.setQueryData(queryKey,catalog=>{if(!catalog)return catalog;const createdName=result.label.name.toLowerCase();const labels=catalog.labels.filter(label=>label.name.toLowerCase()!==createdName);labels.push(result.label);labels.sort((a,b)=>a.name.localeCompare(b.name));return{...catalog,labels}});feedback.success(`Label created.`);if(requestPath===labelsPath.value){open.value=false;emit(`created`,result.label)}pending.value=false}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VBtn,{"prepend-icon":unref(mdiPlus),color:`primary`,variant:`text`,height:`48`,disabled:__props.disabled||pending.value,onClick:_cache[0]||(_cache[0]=$event=>open.value=true)},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`New label`,-1)])]),_:1},8,[`prepend-icon`,`disabled`]),createVNode(VDialog,{modelValue:open.value,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>open.value=$event),"max-width":`30rem`,scrollable:``,persistent:pending.value,"aria-label":`New label`},{default:withCtx(()=>[createVNode(VCard,{tag:`form`,rounded:`xl`,onSubmit:withModifiers(submit,[`prevent`,`stop`])},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$5,[_cache[8]||(_cache[8]=createBaseVNode(`h2`,{class:`text-title-large`},`New label`,-1)),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,size:`48`,"aria-label":`Close new label`,disabled:pending.value,onClick:_cache[1]||(_cache[1]=$event=>open.value=false)},null,8,[`icon`,`disabled`])]),createVNode(VCardText,{class:`d-flex flex-column ga-4`},{default:withCtx(()=>[createVNode(VSheet,{color:`surface-light`,rounded:`lg`,class:`pa-4 d-flex flex-column align-center ga-2`},{default:withCtx(()=>[_cache[9]||(_cache[9]=createBaseVNode(`span`,{class:`text-label-small text-medium-emphasis`},`Preview`,-1)),createVNode(GithubLabelChip_default,{label:preview.value,class:`new-label__preview`},null,8,[`label`])]),_:1}),createVNode(VTextField,{modelValue:name.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>name.value=$event),label:`Label name`,placeholder:`e.g. Ready for review`,variant:`outlined`,maxlength:`50`,autofocus:``,disabled:pending.value,"error-messages":nameError.value,"hide-details":`auto`},null,8,[`modelValue`,`disabled`,`error-messages`]),createBaseVNode(`fieldset`,_hoisted_2$4,[_cache[10]||(_cache[10]=createBaseVNode(`legend`,{class:`text-label-large mb-2`},`Colour`,-1)),createBaseVNode(`div`,_hoisted_3$3,[(openBlock(),createElementBlock(Fragment,null,renderList(palette,swatch=>{return createVNode(VBtn,{key:swatch.color,color:`#${swatch.color}`,variant:`flat`,icon:``,size:`48`,"aria-label":swatch.name,"aria-pressed":normalizedColor.value===swatch.color,disabled:pending.value,onClick:$event=>color.value=swatch.color},{default:withCtx(()=>[normalizedColor.value===swatch.color?(openBlock(),createBlock(VIcon,{key:0,icon:unref(mdiCheck)},null,8,[`icon`])):createCommentVNode(``,true)]),_:2},1032,[`color`,`aria-label`,`aria-pressed`,`disabled`,`onClick`])}),64))])]),createBaseVNode(`div`,_hoisted_4$2,[createBaseVNode(`input`,{type:`color`,value:`#${preview.value.color}`,class:`new-label__custom`,"aria-label":`Custom colour`,title:`Choose a custom colour`,disabled:pending.value,onInput:_cache[3]||(_cache[3]=$event=>color.value=$event.target.value.slice(1))},null,40,_hoisted_5$2),createVNode(VTextField,{modelValue:color.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>color.value=$event),label:`Hex colour`,prefix:`#`,variant:`outlined`,density:`compact`,maxlength:`7`,disabled:pending.value,"error-messages":validColor.value?[]:`Use six characters: 0–9 or A–F.`,"hide-details":`auto`,autocomplete:`off`,spellcheck:`false`},null,8,[`modelValue`,`disabled`,`error-messages`])]),_cache[11]||(_cache[11]=createBaseVNode(`p`,{class:`text-body-small text-medium-emphasis ma-0`},`Available to all issues in this repository.`,-1))]),_:1}),createVNode(VCardActions,{class:`pa-5 pt-2`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value,onClick:_cache[5]||(_cache[5]=$event=>open.value=false)},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,rounded:`pill`,height:`48`,disabled:!canSubmit.value,"aria-busy":pending.value},{default:withCtx(()=>[createTextVNode(toDisplayString(pending.value?`Creating…`:`Create label`),1)]),_:1},8,[`disabled`,`aria-busy`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`persistent`])],64)}}};var GithubNewLabelButton_default=_plugin_vue_export_helper_default(_sfc_main$6,[[`__scopeId`,`data-v-2ec73f20`]]);var _hoisted_1$4={key:1,class:`text-body-medium pa-3 ma-0`,role:`status`};var _hoisted_2$3={key:2,class:`pa-3 text-body-small`,role:`status`};var _sfc_main$5=Object.assign({inheritAttrs:false},{__name:`GithubMentionTextarea`,props:{modelValue:{type:String,default:``},basePath:{type:String,required:true},issue:{type:Object,default:null},enabled:{type:Boolean,default:true},disabled:Boolean},emits:[`update:modelValue`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const field=ref(null);const mention=ref(null);const selected=ref(0);const listId=`github-mentions-${useId()}`;const path=computed(()=>props.basePath.replace(/\/issues$/u,`/issue-mentions`));const number=computed(()=>props.issue?.number||null);const catalog=useEndpointResource({path,readQuery:computed(()=>number.value?{number:number.value}:{}),queryKey:computed(()=>[`vibe64.issueMentions`,path.value,number.value]),enabled:computed(()=>props.enabled),queryOptions:{retry:false,staleTime:6e4},requestRecovery:false,fallbackLoadError:`Mention suggestions could not load. You can still type any @username.`});const people=computed(()=>{const users=new Map;for(const user of[props.issue?.author,...(props.issue?.comments?.nodes||[]).map(comment=>comment.author),...catalog.data.value?.users||[]])if(user?.login)users.set(user.login.toLowerCase(),user);return[...users.values()]});const suggestions=computed(()=>{const query=mention.value?.query.toLowerCase()||``;return people.value.filter(user=>user.login.toLowerCase().includes(query)||user.name?.toLowerCase().includes(query)).sort((a,b)=>{const aStartsWithQuery=a.login.toLowerCase().startsWith(query);const bStartsWithQuery=b.login.toLowerCase().startsWith(query);return Number(bStartsWithQuery)-Number(aStartsWithQuery)||a.login.localeCompare(b.login)}).slice(0,8)});const open=computed(()=>Boolean(mention.value)&&props.enabled&&!props.disabled);const warning=computed(()=>catalog.loadError.value||catalog.data.value?.warning||``);watch([path,number,()=>props.enabled,()=>props.disabled],()=>{mention.value=null});watch(suggestions,()=>{selected.value=0});function updateMention(event){const input=event.target;if(input.tagName!==`TEXTAREA`)return;if(event.isComposing||input.selectionStart!==input.selectionEnd){mention.value=null;return}const end=input.selectionStart;const match=input.value.slice(0,end).match(/(?:^|[\s([{])@([a-z\d-]*)$/iu);mention.value=match?{start:end-match[1].length-1,end,query:match[1]}:null}async function choose(user){if(!mention.value||!user||props.disabled)return;const input=field.value?.$el.querySelector(`textarea`);if(!input)return;const{start,end}=mention.value;const after=input.value.slice(end).replace(/^[a-z\d-]*/iu,``);const insertion=`@${user.login}${/^\s/u.test(after)?``:` `}`;const value=input.value.slice(0,start)+insertion+after;if(input.maxLength>=0&&value.length>input.maxLength)return;const caret=start+insertion.length+(after.startsWith(` `)?1:0);emit(`update:modelValue`,value);mention.value=null;await nextTick();input.focus();input.setSelectionRange(caret,caret)}async function onKeydown(event){if(!open.value||event.isComposing||event.keyCode===229)return;const moveSelection=suggestions.value.length>0&&[`ArrowDown`,`ArrowUp`].includes(event.key);const acceptSelection=suggestions.value.length>0&&(event.key===`Enter`||event.key===`Tab`&&!event.shiftKey);if(event.key!==`Escape`&&!moveSelection&&!acceptSelection)return;event.preventDefault();event.stopPropagation();if(event.key===`Escape`)mention.value=null;else if(moveSelection){selected.value=(selected.value+(event.key===`ArrowDown`?1:-1)+suggestions.value.length)%suggestions.value.length;await nextTick();document.getElementById(`${listId}-${selected.value}`)?.scrollIntoView({block:`nearest`})}else await choose(suggestions.value[selected.value])}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VTextarea,mergeProps({ref_key:`field`,ref:field},_ctx.$attrs,{"model-value":__props.modelValue,disabled:__props.disabled,hint:`Markdown supported · Type @ to mention someone`,"persistent-hint":``,"aria-autocomplete":`list`,"aria-expanded":open.value,"aria-controls":open.value?listId:void 0,"aria-activedescendant":open.value&&suggestions.value.length?`${listId}-${selected.value}`:void 0,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>emit(`update:modelValue`,$event)),onInput:updateMention,onClick:updateMention,onFocus:updateMention,onSelect:updateMention,onCompositionstart:_cache[1]||(_cache[1]=$event=>mention.value=null),onCompositionend:updateMention,onBlur:_cache[2]||(_cache[2]=$event=>mention.value=null),onKeydown,onKeyup:_cache[3]||(_cache[3]=$event=>[`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes($event.key)&&updateMention($event))}),null,16,[`model-value`,`disabled`,`aria-expanded`,`aria-controls`,`aria-activedescendant`]),createVNode(VOverlay,{"model-value":open.value,target:field.value?.$el,"location-strategy":`connected`,location:`top start`,origin:`bottom start`,"scroll-strategy":`reposition`,scrim:false,"close-on-back":false,"capture-focus":false,"retain-focus":false,width:`360`,"max-width":`calc(100vw - 32px)`,"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>!$event&&(mention.value=null))},{default:withCtx(()=>[createVNode(VSheet,{rounded:`lg`,border:``,elevation:`3`,class:`overflow-y-auto`,"max-height":`320`},{default:withCtx(()=>[createVNode(VList,{id:listId,role:`listbox`,"aria-label":`Mention suggestions`,density:`compact`,class:`pa-1`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(suggestions.value,(user,index)=>{return openBlock(),createBlock(VListItem,{id:`${listId}-${index}`,key:user.login,tag:`button`,type:`button`,role:`option`,tabindex:`-1`,"aria-selected":index===selected.value,active:index===selected.value,title:`@${user.login}`,subtitle:user.name||void 0,"min-height":`48`,class:`w-100 text-left`,onPointerdown:_cache[4]||(_cache[4]=withModifiers(()=>{},[`prevent`])),onClick:$event=>choose(user)},null,8,[`id`,`aria-selected`,`active`,`title`,`subtitle`,`onClick`])}),128))]),_:1}),unref(catalog).isInitialLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`list-item`,height:`48`,"aria-label":`Loading mention suggestions`,"aria-busy":`true`})):!suggestions.value.length&&!warning.value?(openBlock(),createElementBlock(`p`,_hoisted_1$4,`No matching people`)):createCommentVNode(``,true),warning.value?(openBlock(),createElementBlock(`div`,_hoisted_2$3,[createTextVNode(toDisplayString(warning.value)+` `,1),createVNode(VBtn,{variant:`text`,height:`48`,disabled:unref(catalog).isFetching.value,onPointerdown:_cache[5]||(_cache[5]=withModifiers(()=>{},[`prevent`])),onClick:_cache[6]||(_cache[6]=$event=>unref(catalog).reload())},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Retry`,-1)])]),_:1},8,[`disabled`])])):createCommentVNode(``,true)]),_:1})]),_:1},8,[`model-value`,`target`])],64)}}});var _hoisted_1$3={class:`d-flex align-center justify-space-between ga-3 pa-5 pb-2`};var _hoisted_2$2={class:`d-flex align-center ga-3`};var _hoisted_3$2={class:`text-title-large`};var _hoisted_4$1={key:0,class:`text-body-medium ma-0`};var _hoisted_5$1={class:`d-flex flex-wrap justify-space-between ga-2`};var _sfc_main$4={__name:`GithubIssueEditorDialog`,props:{modelValue:Boolean,basePath:{type:String,required:true},issue:{type:Object,default:null},mode:{type:String,default:`create`}},emits:[`update:modelValue`,`saved`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const editing=computed(()=>props.mode!==`create`);const editingLabels=computed(()=>props.mode===`labels`);const heading=computed(()=>editingLabels.value?`Edit labels`:editing.value?`Edit issue`:`New issue`);const title=ref(``);const body=ref(``);const selectedLabels=ref([]);const pending=ref(false);const feedback=useUiFeedback({source:`vibe64.issues.editor`});const labelsPath=computed(()=>props.basePath.replace(/\/issues$/u,`/issue-labels`));const catalog=useEndpointResource({path:labelsPath,queryKey:computed(()=>[`vibe64.issueLabels`,labelsPath.value]),enabled:computed(()=>props.modelValue&&props.mode!==`content`),queryOptions:{retry:false},fallbackLoadError:`Labels could not load.`});const labels=computed(()=>catalog.data.value?.labels||[]);const canSetLabels=computed(()=>{const permission=editing.value?`canEditLabels`:`canCreateWithLabels`;return catalog.data.value?.[permission]===true});const path=computed(()=>editing.value?`${props.basePath}/${props.issue.number}${editingLabels.value?`/labels`:``}`:props.basePath);const resource=useEndpointResource({path,queryKey:computed(()=>[`vibe64.issueEditor`,path.value]),enabled:false});const canSubmit=computed(()=>{if(pending.value||selectedLabels.value.length>100)return false;return editingLabels.value?canSetLabels.value:Boolean(title.value.trim())&&(!editing.value||props.issue.viewerCanUpdate)});const submitLabel=computed(()=>{if(pending.value)return editing.value?`Saving…`:`Creating…`;if(editingLabels.value)return`Save labels`;return editing.value?`Save issue`:`Create issue`});watch(()=>props.modelValue,open=>{if(!open)return;title.value=props.issue?.title||``;body.value=props.issue?.body||``;selectedLabels.value=props.issue?.labels?.nodes?.map(label=>label.name)||[]},{immediate:true});async function submit(){if(!canSubmit.value)return;const wasEditing=editing.value;const requestBasePath=props.basePath;pending.value=true;try{const payload=editingLabels.value?{labels:selectedLabels.value}:{title:title.value.trim(),body:body.value,...!wasEditing?{labels:selectedLabels.value}:{}};const result=await resource.save(payload,{method:wasEditing?`PUT`:`POST`});feedback.success(wasEditing?`Issue updated.`:`Issue created.`);emit(`saved`,{number:result.issue.number,basePath:requestBasePath});emit(`update:modelValue`,false)}catch(error){feedback.error(error,wasEditing?`Issue could not be updated. Your changes have been kept.`:`Issue creation could not be confirmed. Refresh the issue list before trying again.`)}finally{pending.value=false}}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":__props.modelValue,"max-width":`42rem`,scrollable:``,persistent:pending.value,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>emit(`update:modelValue`,$event))},{default:withCtx(()=>[createVNode(VCard,{tag:`form`,rounded:`xl`,onSubmit:withModifiers(submit,[`prevent`])},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$3,[createBaseVNode(`div`,_hoisted_2$2,[createVNode(VIcon,{icon:editingLabels.value?unref(mdiLabelOutline):editing.value?unref(mdiPencilOutline):unref(mdiPlus),color:`primary`},null,8,[`icon`]),createBaseVNode(`h2`,_hoisted_3$2,toDisplayString(heading.value),1)]),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,size:`48`,"aria-label":`Close issue dialog`,disabled:pending.value,onClick:_cache[0]||(_cache[0]=$event=>emit(`update:modelValue`,false))},null,8,[`icon`,`disabled`])]),createVNode(VCardText,{class:`d-flex flex-column ga-4`},{default:withCtx(()=>[editingLabels.value?(openBlock(),createElementBlock(`p`,_hoisted_4$1,`#`+toDisplayString(__props.issue.number)+` · `+toDisplayString(__props.issue.title),1)):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VTextField,{modelValue:title.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>title.value=$event),label:`Title`,variant:`outlined`,maxlength:`256`,disabled:pending.value,"hide-details":``,autofocus:``},null,8,[`modelValue`,`disabled`]),createVNode(_sfc_main$5,{modelValue:body.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>body.value=$event),label:`Description`,placeholder:`What needs to happen?`,variant:`outlined`,rows:`5`,"auto-grow":``,maxlength:`65536`,"base-path":__props.basePath,issue:__props.issue,enabled:__props.modelValue,disabled:pending.value},null,8,[`modelValue`,`base-path`,`issue`,`enabled`,`disabled`])],64)),__props.mode!==`content`?(openBlock(),createElementBlock(Fragment,{key:2},[unref(catalog).isInitialLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`list-item-two-line,button`,"min-height":`152`,"aria-label":`Loading labels`,"aria-busy":`true`})):unref(catalog).loadError.value?(openBlock(),createBlock(VAlert,{key:1,type:`error`,variant:`tonal`,rounded:`lg`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,height:`48`,onClick:_cache[3]||(_cache[3]=$event=>unref(catalog).reload())},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Retry`,-1)])]),_:1})]),default:withCtx(()=>[createTextVNode(toDisplayString(unref(catalog).loadError.value)+` `,1)]),_:1})):(openBlock(),createElementBlock(Fragment,{key:2},[createVNode(VAutocomplete,{modelValue:selectedLabels.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>selectedLabels.value=$event),items:labels.value,"item-title":`name`,"item-value":`name`,multiple:``,chips:``,"closable-chips":``,label:`Labels`,variant:`outlined`,disabled:pending.value||!canSetLabels.value,"menu-props":{maxHeight:320},"error-messages":selectedLabels.value.length>100?`Choose up to 100 labels.`:[],hint:canSetLabels.value?`Search and select repository labels.`:editing.value?`Your GitHub account cannot edit labels.`:`GitHub requires write access to set labels on a new issue.`,"persistent-hint":``,"no-data-text":`No matching labels`},{chip:withCtx(({props:chipProps,item})=>[createVNode(GithubLabelChip_default,mergeProps(chipProps,{label:item}),null,16,[`label`])]),item:withCtx(({props:itemProps,item})=>[createVNode(VListItem,mergeProps(itemProps,{"min-height":`48`}),{title:withCtx(()=>[createVNode(GithubLabelChip_default,{label:item},null,8,[`label`])]),subtitle:withCtx(()=>[createTextVNode(toDisplayString(item.description),1)]),_:2},1040)]),_:1},8,[`modelValue`,`items`,`disabled`,`error-messages`,`hint`]),createBaseVNode(`div`,_hoisted_5$1,[unref(catalog).data.value?.canCreateLabels?(openBlock(),createBlock(GithubNewLabelButton_default,{key:0,"base-path":__props.basePath,labels:labels.value,disabled:pending.value,onCreated:_cache[5]||(_cache[5]=$event=>selectedLabels.value=[...selectedLabels.value,$event.name])},null,8,[`base-path`,`labels`,`disabled`])):createCommentVNode(``,true),createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value||unref(catalog).isFetching.value,onClick:_cache[6]||(_cache[6]=$event=>unref(catalog).reload())},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(`Refresh labels`,-1)])]),_:1},8,[`disabled`])])],64))],64)):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`pa-5 pt-2`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value,onClick:_cache[7]||(_cache[7]=$event=>emit(`update:modelValue`,false))},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,rounded:`pill`,height:`48`,disabled:!canSubmit.value,"aria-busy":pending.value},{default:withCtx(()=>[createTextVNode(toDisplayString(submitLabel.value),1)]),_:1},8,[`disabled`,`aria-busy`])]),_:1})]),_:1})]),_:1},8,[`model-value`,`persistent`])}}};var _hoisted_1$2={class:`d-flex flex-wrap justify-end ga-2`};var _sfc_main$3={__name:`GithubCommentEditor`,props:{comment:{type:Object,required:true},issue:{type:Object,required:true},basePath:{type:String,required:true}},emits:[`saved`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const editing=ref(false);const body=ref(``);const pending=ref(false);const feedback=useUiFeedback({source:`vibe64.issues.commentEditor`});const path=computed(()=>`${props.basePath}/${props.issue.number}/comments/${encodeURIComponent(props.comment.id)}`);const resource=useEndpointResource({path,enabled:false});const canSubmit=computed(()=>!pending.value&&Boolean(body.value.trim())&&body.value.length<=65536);function edit(){body.value=props.comment.body;editing.value=true}async function submit(){if(!canSubmit.value)return;const savedIssue={number:props.issue.number,basePath:props.basePath};pending.value=true;try{await resource.save({body:body.value},{method:`PATCH`});editing.value=false;feedback.success(`Comment updated.`);emit(`saved`,savedIssue)}catch(error){feedback.error(error,`Comment could not be updated. Your changes have been kept.`)}finally{pending.value=false}}return(_ctx,_cache)=>{return editing.value?(openBlock(),createElementBlock(`form`,{key:0,class:`d-flex flex-column ga-2`,onSubmit:withModifiers(submit,[`prevent`])},[createVNode(_sfc_main$5,{modelValue:body.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>body.value=$event),label:`Edit comment`,"base-path":__props.basePath,issue:__props.issue,disabled:pending.value,enabled:editing.value,variant:`outlined`,rows:`4`,"auto-grow":``,maxlength:`65536`},null,8,[`modelValue`,`base-path`,`issue`,`disabled`,`enabled`]),createBaseVNode(`div`,_hoisted_1$2,[createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value,onClick:_cache[1]||(_cache[1]=$event=>editing.value=false)},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,height:`48`,disabled:!canSubmit.value},{default:withCtx(()=>[createTextVNode(toDisplayString(pending.value?`Saving…`:`Save comment`),1)]),_:1},8,[`disabled`])])],32)):(openBlock(),createElementBlock(Fragment,{key:1},[renderSlot(_ctx.$slots,`default`),__props.comment.viewerCanUpdate?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,height:`48`,onClick:edit},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Edit comment`,-1)])]),_:1})):createCommentVNode(``,true)],64))}}};var _hoisted_1$1={class:`text-body-medium ma-0`};var _hoisted_2$1={key:0,class:`d-flex justify-start`};var _hoisted_3$1={key:1,role:`status`};var _sfc_main$2={__name:`GithubBulkLabelsDialog`,props:{modelValue:Boolean,basePath:{type:String,required:true},numbers:{type:Array,required:true},labels:{type:Array,required:true},canCreateLabels:Boolean},emits:[`update:modelValue`,`applied`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const labelMode=ref(`add`);const selectedLabels=ref([]);const remaining=ref([]);const failures=ref([]);const pending=ref(false);const progress=ref(``);const feedback=useUiFeedback({source:`vibe64.issues.bulkLabels`});const queryClient=useQueryClient();const resource=useEndpointResource({path:computed(()=>props.basePath),enabled:false});const canSubmit=computed(()=>!pending.value&&selectedLabels.value.length>0&&selectedLabels.value.length<=100&&remaining.value.length>0);watch(()=>props.modelValue,open=>{if(!open)return;remaining.value=[...props.numbers];selectedLabels.value=[];labelMode.value=`add`;failures.value=[]},{immediate:true});async function submit(){if(!canSubmit.value)return;const requestBasePath=props.basePath;const numbers=[...remaining.value];const payload={labels:[...selectedLabels.value],labelMode:labelMode.value};failures.value=[];pending.value=true;for(const[index,number]of numbers.entries()){progress.value=`Updating ${index+1} of ${numbers.length}…`;const issuePath=`${requestBasePath}/${number}`;try{await resource.save(payload,{path:`${issuePath}/labels`,method:`PUT`})}catch(error){feedback.error(error,`Labels could not be updated for #${number}.`);failures.value.push({number,message:feedback.message.value});continue}remaining.value=remaining.value.filter(value=>value!==number);emit(`applied`,{number,basePath:requestBasePath});try{await invalidateGithubIssueQueries(queryClient,requestBasePath,issuePath)}catch(error){feedback.error(error,`Labels updated for #${number}, but the issue could not refresh.`)}}pending.value=false;if(!remaining.value.length){feedback.success(`Labels updated for ${numbers.length} ${numbers.length===1?`issue`:`issues`}.`);emit(`update:modelValue`,false)}}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":__props.modelValue,"max-width":`36rem`,scrollable:``,persistent:pending.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>emit(`update:modelValue`,$event))},{default:withCtx(()=>[createVNode(VCard,{tag:`form`,rounded:`xl`,onSubmit:withModifiers(submit,[`prevent`])},{default:withCtx(()=>[createVNode(VCardTitle,{class:`pa-5 pb-2`},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Bulk edit labels`,-1)])]),_:1}),createVNode(VCardText,{class:`d-flex flex-column ga-4`},{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_1$1,toDisplayString(remaining.value.length)+` selected. Other labels will stay unchanged.`,1),createVNode(VBtnToggle,{modelValue:labelMode.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>labelMode.value=$event),mandatory:``,divided:``,rounded:`pill`,disabled:pending.value,"aria-label":`Label action`},{default:withCtx(()=>[createVNode(VBtn,{value:`add`,height:`48`},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Add labels`,-1)])]),_:1}),createVNode(VBtn,{value:`remove`,height:`48`},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Remove labels`,-1)])]),_:1})]),_:1},8,[`modelValue`,`disabled`]),createVNode(VAutocomplete,{modelValue:selectedLabels.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>selectedLabels.value=$event),items:__props.labels,"item-title":`name`,"item-value":`name`,multiple:``,chips:``,"closable-chips":``,label:`Labels to change`,variant:`outlined`,disabled:pending.value,"menu-props":{maxHeight:320},"error-messages":selectedLabels.value.length>100?`Choose up to 100 labels.`:[],"no-data-text":`No matching labels`},{chip:withCtx(({props:chipProps,item})=>[createVNode(GithubLabelChip_default,mergeProps(chipProps,{label:item}),null,16,[`label`])]),item:withCtx(({props:itemProps,item})=>[createVNode(VListItem,mergeProps(itemProps,{"min-height":`48`}),{title:withCtx(()=>[createVNode(GithubLabelChip_default,{label:item},null,8,[`label`])]),_:2},1040)]),_:1},8,[`modelValue`,`items`,`disabled`,`error-messages`]),__props.canCreateLabels&&labelMode.value===`add`?(openBlock(),createElementBlock(`div`,_hoisted_2$1,[createVNode(GithubNewLabelButton_default,{"base-path":__props.basePath,labels:__props.labels,disabled:pending.value,onCreated:_cache[2]||(_cache[2]=$event=>selectedLabels.value=[...selectedLabels.value,$event.name])},null,8,[`base-path`,`labels`,`disabled`])])):createCommentVNode(``,true),failures.value.length?(openBlock(),createElementBlock(`div`,_hoisted_3$1,[_cache[8]||(_cache[8]=createBaseVNode(`p`,{class:`text-body-medium`},`Some issues could not be updated. Retry applies only to these issues:`,-1)),(openBlock(true),createElementBlock(Fragment,null,renderList(failures.value,failure=>{return openBlock(),createElementBlock(`p`,{key:failure.number,class:`text-body-small text-error`},`#`+toDisplayString(failure.number)+`: `+toDisplayString(failure.message),1)}),128))])):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`pa-5 pt-2 d-flex flex-wrap`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value,onClick:_cache[3]||(_cache[3]=$event=>emit(`update:modelValue`,false))},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,height:`48`,disabled:!canSubmit.value},{default:withCtx(()=>[createTextVNode(toDisplayString(pending.value?progress.value:failures.value.length?`Retry failed issues`:`Apply labels`),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`model-value`,`persistent`])}}};var _hoisted_1={class:`issues-panel d-flex flex-column ga-2`};var _hoisted_2={class:`issues-panel__toolbar d-flex flex-wrap align-center ga-2`};var _hoisted_3={class:`issues-panel__labels d-flex flex-wrap align-start ga-2`};var _hoisted_4={key:3,class:`d-flex justify-end`};var _hoisted_5={key:0,class:`text-body-small text-medium-emphasis ma-0`};var _hoisted_6={class:`d-flex align-center justify-space-between px-2 text-label-large text-medium-emphasis`};var _hoisted_7={key:1,class:`d-flex flex-wrap align-center ga-2`};var _hoisted_8={class:`text-label-large`,role:`status`};var _hoisted_9={class:`d-flex align-center`};var _hoisted_10={class:`d-flex flex-wrap align-center ga-1`};var _hoisted_11={key:0,class:`text-label-small`};var _hoisted_12=[`aria-label`];var _hoisted_13={class:`d-flex justify-space-between ga-2`};var _hoisted_14={class:`d-flex align-center flex-wrap ga-2 mb-3`};var _hoisted_15={class:`text-label-large text-medium-emphasis`};var _hoisted_16={class:`text-title-large mb-2 issues-panel__title`};var _hoisted_17={class:`text-body-small text-medium-emphasis mb-0`};var _hoisted_18={class:`d-flex align-center flex-wrap ga-2 mt-3`};var _hoisted_19={key:0,class:`text-body-small text-medium-emphasis`};var _hoisted_20={key:1,class:`text-body-medium text-medium-emphasis ma-0`};var _hoisted_21={class:`d-flex align-center justify-space-between flex-wrap ga-2 px-2`};var _hoisted_22={class:`text-title-medium`};var _hoisted_23={class:`text-medium-emphasis`};var _hoisted_24={class:`d-flex flex-wrap ga-2`};var _hoisted_25={key:1,class:`text-body-medium text-medium-emphasis px-2`};var _hoisted_26={class:`issues-panel__comment-body`};var _hoisted_27={class:`d-flex flex-wrap align-center ga-2 mb-2`};var _hoisted_28={class:`text-label-large`};var _hoisted_29=[`datetime`];var _hoisted_30={key:0,class:`d-flex flex-wrap align-center ga-2 mt-1`,"aria-live":`polite`};var _hoisted_31={key:0,class:`text-body-small text-medium-emphasis`};var _hoisted_32={class:`text-body-small text-error`};var _hoisted_33={key:0,class:`text-body-small text-medium-emphasis ma-0`};var _hoisted_34={class:`d-flex flex-wrap align-center justify-space-between ga-3`};var _sfc_main$1={__name:`GithubIssuesPanel`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){const props=__props;const{available,projectSlug,basePath,list,detail,labelCatalog,issue,number,state,searchDraft,selectedLabels,draft,pending,comments,commentCount,commentCursor,navigate,filter,filterLabel,mutate,issueSaved,issueUpdated,retryComment}=useVibe64Issues(computed(()=>props.dashboardContext));const route=useRoute();const bulkOpen=ref(false);const selectedNumbers=ref([]);const visibleNumbers=computed(()=>(list.data.value?.issues||[]).map(item=>item.number));const allSelected=computed(()=>visibleNumbers.value.length>0&&visibleNumbers.value.every(value=>selectedNumbers.value.includes(value)));watch(()=>[basePath.value,number.value,route.query.issueSearch,route.query.issueState,route.query.issueCursor,route.query.issueLabel],()=>{selectedNumbers.value=[];bulkOpen.value=false},{deep:true});function labelsApplied({number:issueNumber,basePath:requestBasePath}){if(basePath.value===requestBasePath)selectedNumbers.value=selectedNumbers.value.filter(value=>value!==issueNumber)}const editorOpen=ref(false);const editorMode=ref(`create`);const editorIssue=shallowRef(null);watch([basePath,number],()=>{editorOpen.value=false;editorIssue.value=null;editorMode.value=`create`});function openEditor(selectedIssue=null,mode=`create`){editorMode.value=mode;editorIssue.value=selectedIssue;editorOpen.value=true}const resource=computed(()=>number.value?detail:list);const canChangeState=computed(()=>issue.value?.state===`OPEN`?issue.value.viewerCanClose:issue.value?.viewerCanReopen);function date(value){return value?new Date(value).toLocaleDateString(void 0,{month:`short`,day:`numeric`,year:`numeric`}):``}return(_ctx,_cache)=>{const _component_router_link=resolveComponent(`router-link`);return openBlock(),createElementBlock(`section`,_hoisted_1,[createBaseVNode(`div`,_hoisted_2,[createVNode(Vibe64DashboardBackButton_default,{to:unref(available)&&unref(number)?void 0:unref(projectAppPath)(unref(projectSlug),`/dashboard/env`),onClick:_cache[0]||(_cache[0]=$event=>unref(available)&&unref(number)&&unref(navigate)({issue:void 0}))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(available)&&unref(number)?`All issues`:`Back to dashboard`),1)]),_:1},8,[`to`]),createVNode(VSpacer),unref(available)?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiRefresh),variant:`text`,size:`small`,height:`48`,disabled:resource.value.isFetching.value||Boolean(unref(pending)),onClick:_cache[1]||(_cache[1]=$event=>resource.value.reload())},{default:withCtx(()=>[createTextVNode(toDisplayString(resource.value.isFetching.value?`Refreshing…`:`Refresh`),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),unref(available)?(openBlock(),createBlock(VBtn,{key:1,"prepend-icon":unref(mdiPlus),color:`primary`,variant:`tonal`,rounded:`pill`,size:`small`,height:`48`,onClick:_cache[2]||(_cache[2]=$event=>openEditor())},{default:withCtx(()=>[..._cache[28]||(_cache[28]=[createTextVNode(`New issue`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true)]),!unref(available)?(openBlock(),createBlock(VAlert,{key:0,variant:`tonal`,type:`info`},{default:withCtx(()=>[..._cache[29]||(_cache[29]=[createTextVNode(`Issues are available only for GitHub projects.`,-1)])]),_:1})):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(_sfc_main$8),!unref(number)?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode(`form`,{class:`d-flex flex-wrap align-center ga-3`,onSubmit:_cache[8]||(_cache[8]=withModifiers($event=>unref(filter)(),[`prevent`]))},[createVNode(VBtnToggle,{"model-value":unref(state),mandatory:``,divided:``,rounded:`pill`,color:`primary`,variant:`outlined`,"aria-label":`Issue state`,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>unref(filter)($event))},{default:withCtx(()=>[createVNode(VBtn,{value:`open`,height:`48`},{default:withCtx(()=>[..._cache[30]||(_cache[30]=[createTextVNode(`Open`,-1)])]),_:1}),createVNode(VBtn,{value:`closed`,height:`48`},{default:withCtx(()=>[..._cache[31]||(_cache[31]=[createTextVNode(`Closed`,-1)])]),_:1}),createVNode(VBtn,{value:`all`,height:`48`},{default:withCtx(()=>[..._cache[32]||(_cache[32]=[createTextVNode(`All`,-1)])]),_:1})]),_:1},8,[`model-value`]),createVNode(VTextField,{modelValue:unref(searchDraft),"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>isRef(searchDraft)?searchDraft.value=$event:null),class:`issues-panel__search`,label:`Search issues`,placeholder:`Number, text, label:new or label:"some label"`,"prepend-inner-icon":unref(mdiMagnify),variant:`outlined`,rounded:`pill`,"hide-details":``,maxlength:`200`,clearable:``,onKeydown:_cache[6]||(_cache[6]=withKeys(withModifiers($event=>unref(filter)(),[`prevent`]),[`enter`])),"onClick:clear":_cache[7]||(_cache[7]=$event=>{searchDraft.value=``;unref(filter)()})},{"append-inner":withCtx(()=>[createVNode(VBtn,{icon:unref(mdiArrowRight),variant:`text`,size:`48`,"aria-label":`Search issues`,onClick:_cache[4]||(_cache[4]=$event=>unref(filter)())},null,8,[`icon`])]),_:1},8,[`modelValue`,`prepend-inner-icon`])],32),createBaseVNode(`div`,_hoisted_3,[unref(labelCatalog).isInitialLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,class:`issues-panel__label-filter`,type:`list-item`,height:`80`,"aria-label":`Loading label filters`,"aria-busy":`true`})):unref(labelCatalog).loadError.value?(openBlock(),createBlock(VAlert,{key:1,class:`issues-panel__label-filter`,type:`error`,variant:`tonal`,rounded:`lg`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,height:`48`,onClick:_cache[9]||(_cache[9]=$event=>unref(labelCatalog).reload())},{default:withCtx(()=>[..._cache[33]||(_cache[33]=[createTextVNode(`Retry labels`,-1)])]),_:1})]),default:withCtx(()=>[createTextVNode(toDisplayString(unref(labelCatalog).loadError.value)+` `,1)]),_:1})):(openBlock(),createBlock(VAutocomplete,{key:2,"model-value":unref(selectedLabels),items:unref(labelCatalog).data.value?.labels||[],class:`issues-panel__label-filter`,"item-title":`name`,"item-value":`name`,multiple:``,chips:``,"closable-chips":``,clearable:``,label:`Filter by labels`,"prepend-inner-icon":unref(mdiLabelOutline),variant:`outlined`,rounded:`lg`,"menu-props":{maxHeight:320},hint:`Match all selected labels.`,"persistent-hint":``,"no-data-text":`No matching labels`,"onUpdate:modelValue":_cache[10]||(_cache[10]=$event=>unref(filter)(unref(state),$event))},{chip:withCtx(({props:chipProps,item})=>[createVNode(GithubLabelChip_default,mergeProps(chipProps,{label:item}),null,16,[`label`])]),item:withCtx(({props:itemProps,item})=>[createVNode(VListItem,mergeProps(itemProps,{"min-height":`48`}),{title:withCtx(()=>[createVNode(GithubLabelChip_default,{label:item},null,8,[`label`])]),subtitle:withCtx(()=>[createTextVNode(toDisplayString(item.description),1)]),_:2},1040)]),_:1},8,[`model-value`,`items`,`prepend-inner-icon`])),unref(labelCatalog).data.value?.canCreateLabels?(openBlock(),createElementBlock(`div`,_hoisted_4,[createVNode(GithubNewLabelButton_default,{"base-path":unref(basePath),labels:unref(labelCatalog).data.value.labels},null,8,[`base-path`,`labels`])])):createCommentVNode(``,true)])],64)):createCommentVNode(``,true),resource.value.isInitialLoading.value?(openBlock(),createBlock(VSheet,{key:1,rounded:`xl`,border:``,class:`pa-4`,"aria-label":`Loading issues`,"aria-busy":`true`},{default:withCtx(()=>[(openBlock(),createElementBlock(Fragment,null,renderList(4,index=>{return createVNode(VSkeletonLoader,{key:index,type:unref(number)?`paragraph`:`list-item-two-line`},null,8,[`type`])}),64))]),_:1})):resource.value.loadError.value&&(!unref(number)||!unref(issue))?(openBlock(),createBlock(VAlert,{key:2,type:`error`,variant:`tonal`,rounded:`lg`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,height:`48`,disabled:resource.value.isFetching.value,onClick:_cache[11]||(_cache[11]=$event=>resource.value.reload())},{default:withCtx(()=>[..._cache[34]||(_cache[34]=[createTextVNode(`Retry`,-1)])]),_:1},8,[`disabled`])]),default:withCtx(()=>[createTextVNode(toDisplayString(resource.value.loadError.value)+` `,1)]),_:1})):!unref(number)?(openBlock(),createElementBlock(Fragment,{key:3},[unref(list).data.value?.searchLimit&&unref(list).data.value.total>unref(list).data.value.searchLimit?(openBlock(),createElementBlock(`p`,_hoisted_5,` GitHub returns up to 1,000 matches for text searches or multiple labels. Narrow the filters to see more specific results. `)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_6,[createBaseVNode(`span`,null,toDisplayString(unref(list).data.value?.total||0)+` `+toDisplayString(unref(list).data.value?.total===1?`issue`:`issues`),1),_cache[35]||(_cache[35]=createBaseVNode(`span`,null,`Recently updated`,-1))]),unref(labelCatalog).data.value?.canEditLabels&&visibleNumbers.value.length?(openBlock(),createElementBlock(`div`,_hoisted_7,[createVNode(VCheckboxBtn,{"model-value":allSelected.value,indeterminate:selectedNumbers.value.length>0&&!allSelected.value,label:`Select all on this page`,class:`issues-panel__select-all`,"min-height":`48`,"onUpdate:modelValue":_cache[12]||(_cache[12]=$event=>selectedNumbers.value=$event?[...visibleNumbers.value]:[])},null,8,[`model-value`,`indeterminate`]),createBaseVNode(`span`,_hoisted_8,toDisplayString(selectedNumbers.value.length)+` selected`,1),createVNode(VBtn,{variant:`tonal`,height:`48`,disabled:!selectedNumbers.value.length,onClick:_cache[13]||(_cache[13]=$event=>bulkOpen.value=true)},{default:withCtx(()=>[..._cache[36]||(_cache[36]=[createTextVNode(`Bulk edit labels`,-1)])]),_:1},8,[`disabled`]),selectedNumbers.value.length?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,height:`48`,onClick:_cache[14]||(_cache[14]=$event=>selectedNumbers.value=[])},{default:withCtx(()=>[..._cache[37]||(_cache[37]=[createTextVNode(`Clear selection`,-1)])]),_:1})):createCommentVNode(``,true)])):createCommentVNode(``,true),unref(list).data.value?.issues?.length?(openBlock(),createBlock(VList,{key:2,class:`pa-0`,density:`compact`,lines:`two`,rounded:`xl`,border:``,slim:``,"aria-label":`GitHub issues`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(list).data.value.issues,(item,index)=>{return openBlock(),createElementBlock(Fragment,{key:item.number},[index?(openBlock(),createBlock(VDivider,{key:0})):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_9,[unref(labelCatalog).data.value?.canEditLabels?(openBlock(),createBlock(VCheckboxBtn,{key:0,modelValue:selectedNumbers.value,"onUpdate:modelValue":_cache[15]||(_cache[15]=$event=>selectedNumbers.value=$event),value:item.number,"aria-label":`Select issue #${item.number}`,class:`flex-grow-0 ml-2`,"min-width":`48`,"min-height":`48`},null,8,[`modelValue`,`value`,`aria-label`])):createCommentVNode(``,true),createVNode(VListItem,{class:`py-2 flex-grow-1`,active:false},{prepend:withCtx(()=>[createVNode(VIcon,{icon:item.state===`OPEN`?unref(mdiRecordCircleOutline):unref(mdiCheck),color:item.state===`OPEN`?`success`:`primary`,"aria-label":item.state===`OPEN`?`Open`:`Closed`},null,8,[`icon`,`color`,`aria-label`])]),append:withCtx(()=>[createBaseVNode(`span`,{class:`d-flex align-center ga-1 ml-3 text-label-medium text-medium-emphasis`,"aria-label":`${item.comments.totalCount} comments`},[createVNode(VIcon,{icon:unref(mdiCommentOutline),size:`18`},null,8,[`icon`]),createTextVNode(toDisplayString(item.comments.totalCount),1)],8,_hoisted_12)]),default:withCtx(()=>[createBaseVNode(`div`,_hoisted_10,[createVNode(VListItemTitle,{class:`issues-panel__item-title text-title-medium text-wrap`},{default:withCtx(()=>[createVNode(_component_router_link,{class:`issues-panel__issue-link text-decoration-none`,to:{query:{..._ctx.$route.query,issue:String(item.number)}}},{default:withCtx(()=>[createTextVNode(toDisplayString(item.title),1)]),_:2},1032,[`to`])]),_:2},1024),(openBlock(true),createElementBlock(Fragment,null,renderList(item.labels?.nodes||[],label=>{return openBlock(),createBlock(GithubLabelChip_default,{key:label.name,label,tag:`button`,type:`button`,"aria-label":`Filter by label ${label.name}`,onClick:$event=>unref(filterLabel)(label.name)},null,8,[`label`,`aria-label`,`onClick`])}),128)),item.labels?.totalCount>item.labels?.nodes?.length?(openBlock(),createElementBlock(`span`,_hoisted_11,`+`+toDisplayString(item.labels.totalCount-item.labels.nodes.length),1)):createCommentVNode(``,true)]),createVNode(VListItemSubtitle,{class:`text-body-small mt-1`},{default:withCtx(()=>[createTextVNode(` #`+toDisplayString(item.number)+` · `+toDisplayString(item.state===`OPEN`?`Open`:`Closed`)+` · `+toDisplayString(date(item.updatedAt)),1)]),_:2},1024)]),_:2},1024)])],64)}),128))]),_:1})):(openBlock(),createBlock(VSheet,{key:3,rounded:`xl`,color:`surface-light`,class:`pa-8 text-center`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiRecordCircleOutline),size:`40`,class:`mb-3`},null,8,[`icon`]),_cache[38]||(_cache[38]=createBaseVNode(`p`,{class:`text-title-medium mb-1`},`No issues here`,-1)),_cache[39]||(_cache[39]=createBaseVNode(`p`,{class:`text-body-medium text-medium-emphasis ma-0`},`Try a different filter or search.`,-1))]),_:1})),createBaseVNode(`div`,_hoisted_13,[_ctx.$route.query.issueCursor?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,height:`48`,onClick:_cache[16]||(_cache[16]=$event=>unref(navigate)({issueCursor:void 0}))},{default:withCtx(()=>[..._cache[40]||(_cache[40]=[createTextVNode(`First page`,-1)])]),_:1})):createCommentVNode(``,true),createVNode(VSpacer),unref(list).data.value?.pageInfo?.hasNextPage?(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,height:`48`,"append-icon":unref(mdiArrowRight),onClick:_cache[17]||(_cache[17]=$event=>unref(navigate)({issueCursor:unref(list).data.value.pageInfo.endCursor}))},{default:withCtx(()=>[..._cache[41]||(_cache[41]=[createTextVNode(` Next page `,-1)])]),_:1},8,[`append-icon`])):createCommentVNode(``,true)])],64)):unref(issue)?(openBlock(),createElementBlock(Fragment,{key:4},[unref(detail).loadError.value?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,rounded:`lg`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,height:`48`,disabled:unref(detail).isFetching.value,onClick:_cache[18]||(_cache[18]=$event=>unref(detail).reload())},{default:withCtx(()=>[..._cache[42]||(_cache[42]=[createTextVNode(`Refresh`,-1)])]),_:1},8,[`disabled`])]),default:withCtx(()=>[createTextVNode(toDisplayString(unref(detail).loadError.value)+` `,1)]),_:1})):createCommentVNode(``,true),createBaseVNode(`div`,null,[createBaseVNode(`div`,_hoisted_14,[createVNode(VChip,{"prepend-icon":unref(issue).state===`OPEN`?unref(mdiRecordCircleOutline):unref(mdiCheck),color:unref(issue).state===`OPEN`?`success`:`primary`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(issue).state===`OPEN`?`Open`:`Closed`),1)]),_:1},8,[`prepend-icon`,`color`]),createBaseVNode(`span`,_hoisted_15,`#`+toDisplayString(unref(issue).number),1),createVNode(VSpacer),unref(issue).viewerCanUpdate?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiPencilOutline),variant:`text`,height:`48`,onClick:_cache[19]||(_cache[19]=$event=>openEditor(unref(issue),`content`))},{default:withCtx(()=>[..._cache[43]||(_cache[43]=[createTextVNode(`Edit issue`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true),createVNode(VBtn,{href:unref(issue).url,target:`_blank`,rel:`noopener noreferrer`,"append-icon":unref(mdiOpenInNew),variant:`text`,height:`48`},{default:withCtx(()=>[..._cache[44]||(_cache[44]=[createTextVNode(`GitHub`,-1)])]),_:1},8,[`href`,`append-icon`])]),createBaseVNode(`h2`,_hoisted_16,toDisplayString(unref(issue).title),1),createBaseVNode(`p`,_hoisted_17,toDisplayString(unref(issue).author?.login||`Deleted user`)+` opened this on `+toDisplayString(date(unref(issue).createdAt)),1),createBaseVNode(`div`,_hoisted_18,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(issue).labels?.nodes||[],label=>{return openBlock(),createBlock(GithubLabelChip_default,{key:label.name,label,tag:`button`,type:`button`,"aria-label":`Filter by label ${label.name}`,onClick:$event=>unref(filterLabel)(label.name)},null,8,[`label`,`aria-label`,`onClick`])}),128)),!unref(issue).labels?.nodes?.length?(openBlock(),createElementBlock(`span`,_hoisted_19,`No labels`)):createCommentVNode(``,true),unref(issue).canEditLabels?(openBlock(),createBlock(VBtn,{key:1,"prepend-icon":unref(mdiLabelOutline),variant:`text`,height:`48`,onClick:_cache[20]||(_cache[20]=$event=>openEditor(unref(issue),`labels`))},{default:withCtx(()=>[..._cache[45]||(_cache[45]=[createTextVNode(`Edit labels`,-1)])]),_:1},8,[`prepend-icon`])):createCommentVNode(``,true)])]),createVNode(VSheet,{border:``,rounded:`xl`,class:`pa-5 issues-panel__markdown`},{default:withCtx(()=>[unref(issue).body||unref(issue).bodyHTML?(openBlock(),createBlock(GithubMarkdown_default,{key:0,text:unref(issue).body,html:unref(issue).bodyHTML},null,8,[`text`,`html`])):(openBlock(),createElementBlock(`p`,_hoisted_20,`No description provided.`))]),_:1}),createBaseVNode(`div`,_hoisted_21,[createBaseVNode(`h3`,_hoisted_22,[_cache[46]||(_cache[46]=createTextVNode(`Comments `,-1)),createBaseVNode(`span`,_hoisted_23,toDisplayString(unref(commentCount)),1)]),createBaseVNode(`div`,_hoisted_24,[unref(commentCursor)?(openBlock(),createBlock(VBtn,{key:0,height:`48`,variant:`text`,onClick:_cache[21]||(_cache[21]=$event=>commentCursor.value=``)},{default:withCtx(()=>[..._cache[47]||(_cache[47]=[createTextVNode(`Latest comments`,-1)])]),_:1})):createCommentVNode(``,true),unref(issue).comments.pageInfo.hasPreviousPage?(openBlock(),createBlock(VBtn,{key:1,height:`48`,variant:`text`,onClick:_cache[22]||(_cache[22]=$event=>commentCursor.value=unref(issue).comments.pageInfo.startCursor)},{default:withCtx(()=>[..._cache[48]||(_cache[48]=[createTextVNode(` Older comments `,-1)])]),_:1})):createCommentVNode(``,true)])]),!unref(comments).length?(openBlock(),createElementBlock(`p`,_hoisted_25,`No comments yet. Start the conversation.`)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(unref(comments),comment=>{return openBlock(),createElementBlock(`article`,{key:comment.id,class:`issues-panel__comment d-flex ga-3`},[createVNode(VAvatar,{color:`primary`,variant:`tonal`,size:`36`,class:`mt-1 text-label-large`,"aria-hidden":`true`},{default:withCtx(()=>[createTextVNode(toDisplayString((comment.author?.login||`?`).slice(0,1).toUpperCase()),1)]),_:2},1024),createBaseVNode(`div`,_hoisted_26,[createBaseVNode(`div`,_hoisted_27,[createBaseVNode(`span`,_hoisted_28,toDisplayString(comment.author?.login||`Deleted user`),1),createBaseVNode(`time`,{class:`text-body-small text-medium-emphasis`,datetime:comment.createdAt},toDisplayString(date(comment.createdAt)),9,_hoisted_29)]),(openBlock(),createBlock(_sfc_main$3,{key:`${unref(basePath)}:${unref(issue).number}:${comment.id}`,comment,issue:unref(issue),"base-path":unref(basePath),onSaved:unref(issueUpdated)},{default:withCtx(()=>[createVNode(VSheet,{color:`surface-light`,rounded:`xl`,class:`pa-4 issues-panel__markdown`},{default:withCtx(()=>[createVNode(GithubMarkdown_default,{text:comment.body,html:comment.bodyHTML},null,8,[`text`,`html`])]),_:2},1024)]),_:2},1032,[`comment`,`issue`,`base-path`,`onSaved`])),comment.delivery&&comment.delivery!==`sent`?(openBlock(),createElementBlock(`div`,_hoisted_30,[comment.delivery===`sending`?(openBlock(),createElementBlock(`span`,_hoisted_31,`Posting…`)):(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`span`,_hoisted_32,toDisplayString(comment.error),1),createVNode(VBtn,{variant:`text`,height:`48`,disabled:Boolean(unref(pending)),onClick:$event=>unref(retryComment)(comment.id)},{default:withCtx(()=>[..._cache[49]||(_cache[49]=[createTextVNode(`Retry`,-1)])]),_:1},8,[`disabled`,`onClick`])],64))])):createCommentVNode(``,true)])])}),128)),createVNode(VDivider),createBaseVNode(`form`,{class:`d-flex flex-column ga-3`,onSubmit:_cache[25]||(_cache[25]=withModifiers($event=>unref(mutate)(`comment`),[`prevent`]))},[unref(issue).locked?(openBlock(),createElementBlock(`p`,_hoisted_33,`This conversation is locked. GitHub limits comments to permitted collaborators.`)):createCommentVNode(``,true),createVNode(_sfc_main$5,{modelValue:unref(draft),"onUpdate:modelValue":_cache[23]||(_cache[23]=$event=>isRef(draft)?draft.value=$event:null),label:`Add a comment`,placeholder:`Share an update or ask a question…`,variant:`outlined`,rounded:`lg`,rows:`4`,"auto-grow":``,counter:unref(draft).length>65e3?65536:void 0,"error-messages":unref(draft).length>65536?`Keep your comment under 65,536 characters.`:[],"base-path":unref(basePath),issue:unref(issue),enabled:__props.dashboardContext.active!==false},null,8,[`modelValue`,`counter`,`error-messages`,`base-path`,`issue`,`enabled`]),createBaseVNode(`div`,_hoisted_34,[createVNode(VBtn,{variant:`tonal`,height:`48`,"prepend-icon":unref(issue).state===`OPEN`?unref(mdiCheck):unref(mdiRestore),disabled:!canChangeState.value||Boolean(unref(pending)),title:canChangeState.value?``:`Your GitHub account cannot change this issue’s state.`,onClick:_cache[24]||(_cache[24]=$event=>unref(mutate)(`state`))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(pending)===`state`?`Updating…`:unref(issue).state===`OPEN`?`Close issue`:`Reopen issue`),1)]),_:1},8,[`prepend-icon`,`disabled`,`title`]),createVNode(VBtn,{type:`submit`,color:`primary`,variant:`flat`,rounded:`pill`,height:`48`,disabled:!unref(draft).trim()||unref(draft).length>65536||Boolean(unref(pending))},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(pending)===`comment`?`Posting…`:`Comment`),1)]),_:1},8,[`disabled`])])],32)],64)):createCommentVNode(``,true)],64)),unref(available)?(openBlock(),createBlock(_sfc_main$2,{key:unref(basePath),modelValue:bulkOpen.value,"onUpdate:modelValue":_cache[26]||(_cache[26]=$event=>bulkOpen.value=$event),"base-path":unref(basePath),numbers:selectedNumbers.value,labels:unref(labelCatalog).data.value?.labels||[],"can-create-labels":unref(labelCatalog).data.value?.canCreateLabels===true,onApplied:labelsApplied},null,8,[`modelValue`,`base-path`,`numbers`,`labels`,`can-create-labels`])):createCommentVNode(``,true),unref(available)?(openBlock(),createBlock(_sfc_main$4,{key:3,modelValue:editorOpen.value,"onUpdate:modelValue":_cache[27]||(_cache[27]=$event=>editorOpen.value=$event),"base-path":unref(basePath),issue:editorIssue.value,mode:editorMode.value,onSaved:unref(issueSaved)},null,8,[`modelValue`,`base-path`,`issue`,`mode`,`onSaved`])):createCommentVNode(``,true)])}}};var GithubIssuesPanel_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-3d679cd1`]]);var _sfc_main={__name:`index`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(GithubIssuesPanel_default,{"dashboard-context":__props.dashboardContext},null,8,[`dashboard-context`])}}};export{_sfc_main as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{mt as openBlock,v as createBlock}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{t as _slug__default}from"./_slug_-
|
|
1
|
+
import{mt as openBlock,v as createBlock}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{t as _slug__default}from"./_slug_-BclonbST.js";import{t as route_block_default}from"./route-block-DbL-SuOj.js";var _sfc_main={__name:`learning`,setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(_slug__default)}}};if(typeof route_block_default===`function`)route_block_default(_sfc_main);export{_sfc_main as default};
|