@midscene/android-playground 0.26.1 → 0.26.2-beta-20250812091127.0
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.
|
@@ -317,7 +317,7 @@ Message: ${o.detail.join("\n")}`);throw Error(`Failed to list shared examples: $
|
|
|
317
317
|
Requested tenant: ${r}`)}async _getLatestCommitHash(t){let r=await this.caller.call((0,p._getFetchImplementation)(),`${this.apiUrl}/commits/${t}/?limit=1&offset=0`,{method:"GET",headers:this.headers,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions}),n=await r.json();if(!r.ok){let t="string"==typeof n.detail?n.detail:JSON.stringify(n.detail),i=Error(`Error ${r.status}: ${r.statusText}
|
|
318
318
|
${t}`);throw i.statusCode=r.status,i}if(0!==n.commits.length)return n.commits[0].commit_hash}async _likeOrUnlikePrompt(t,r){let[n,i,a]=(0,h.parsePromptIdentifier)(t),o=await this.caller.call((0,p._getFetchImplementation)(),`${this.apiUrl}/likes/${n}/${i}`,{method:"POST",body:JSON.stringify({like:r}),headers:{...this.headers,"Content-Type":"application/json"},signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await (0,f.raiseForStatus)(o,(r?"like":"unlike")+" prompt"),await o.json()}async _getPromptUrl(t){let[r,n,i]=(0,h.parsePromptIdentifier)(t);if(await this._currentTenantIsOwner(r)){let t=await this._getSettings();return"latest"!==i?`${this.getHostUrl()}/prompts/${n}/${i.substring(0,8)}?organizationId=${t.id}`:`${this.getHostUrl()}/prompts/${n}?organizationId=${t.id}`}return"latest"!==i?`${this.getHostUrl()}/hub/${r}/${n}/${i.substring(0,8)}`:`${this.getHostUrl()}/hub/${r}/${n}`}async promptExists(t){return!!await this.getPrompt(t)}async likePrompt(t){return this._likeOrUnlikePrompt(t,!0)}async unlikePrompt(t){return this._likeOrUnlikePrompt(t,!1)}async *listCommits(t){for await(let r of this._getPaginated(`/commits/${t}/`,new URLSearchParams,t=>t.commits))yield*r}async *listPrompts(t){let r=new URLSearchParams;for await(let n of(r.append("sort_field",t?.sortField??"updated_at"),r.append("sort_direction","desc"),r.append("is_archived",(!!t?.isArchived).toString()),void 0!==t?.isPublic&&r.append("is_public",t.isPublic.toString()),t?.query&&r.append("query",t.query),this._getPaginated("/repos",r,t=>t.repos)))yield*n}async getPrompt(t){let[r,n,i]=(0,h.parsePromptIdentifier)(t),a=await this.caller.call((0,p._getFetchImplementation)(),`${this.apiUrl}/repos/${r}/${n}`,{method:"GET",headers:this.headers,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});if(404===a.status)return null;await (0,f.raiseForStatus)(a,"get prompt");let o=await a.json();return o.repo?o.repo:null}async createPrompt(t,r){let n=await this._getSettings();if(r?.isPublic&&!n.tenant_handle)throw Error("Cannot create a public prompt without first\n\n creating a LangChain Hub handle. \n You can add a handle by creating a public prompt at:\n\n https://smith.langchain.com/prompts");let[i,a,o]=(0,h.parsePromptIdentifier)(t);if(!await this._currentTenantIsOwner(i))throw await this._ownerConflictError("create a prompt",i);let s={repo_handle:a,...r?.description&&{description:r.description},...r?.readme&&{readme:r.readme},...r?.tags&&{tags:r.tags},is_public:!!r?.isPublic},l=await this.caller.call((0,p._getFetchImplementation)(),`${this.apiUrl}/repos/`,{method:"POST",headers:{...this.headers,"Content-Type":"application/json"},body:JSON.stringify(s),signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});await (0,f.raiseForStatus)(l,"create prompt");let{repo:u}=await l.json();return u}async createCommit(t,r,n){if(!await this.promptExists(t))throw Error("Prompt does not exist, you must create it first.");let[i,a,o]=(0,h.parsePromptIdentifier)(t),s="latest"!==n?.parentCommitHash&&n?.parentCommitHash?n?.parentCommitHash:await this._getLatestCommitHash(`${i}/${a}`),l={manifest:JSON.parse(JSON.stringify(r)),parent_commit:s},u=await this.caller.call((0,p._getFetchImplementation)(),`${this.apiUrl}/commits/${i}/${a}`,{method:"POST",headers:{...this.headers,"Content-Type":"application/json"},body:JSON.stringify(l),signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});await (0,f.raiseForStatus)(u,"create commit");let d=await u.json();return this._getPromptUrl(`${i}/${a}${d.commit_hash?`:${d.commit_hash}`:""}`)}async updateExamplesMultipart(t,r=[]){if(!await this._getMultiPartSupport())throw Error("Your LangSmith version does not allow using the multipart examples endpoint, please update to the latest version.");let n=new FormData;for(let t of r){let r=t.id,i={...t.metadata&&{metadata:t.metadata},...t.split&&{split:t.split}},a=new Blob([(0,m.serialize)(i)],{type:"application/json"});if(n.append(r,a),t.inputs){let i=new Blob([(0,m.serialize)(t.inputs)],{type:"application/json"});n.append(`${r}.inputs`,i)}if(t.outputs){let i=new Blob([(0,m.serialize)(t.outputs)],{type:"application/json"});n.append(`${r}.outputs`,i)}if(t.attachments)for(let[i,a]of Object.entries(t.attachments)){let t,o;Array.isArray(a)?[t,o]=a:(t=a.mimeType,o=a.data);let s=new Blob([o],{type:`${t}; length=${o.byteLength}`});n.append(`${r}.attachment.${i}`,s)}if(t.attachments_operations){let i=new Blob([(0,m.serialize)(t.attachments_operations)],{type:"application/json"});n.append(`${r}.attachments_operations`,i)}}let i=await this.caller.call((0,p._getFetchImplementation)(),`${this.apiUrl}/v1/platform/datasets/${t}/examples`,{method:"PATCH",headers:this.headers,body:n});return await i.json()}async uploadExamplesMultipart(t,r=[]){if(!await this._getMultiPartSupport())throw Error("Your LangSmith version does not allow using the multipart examples endpoint, please update to the latest version.");let n=new FormData;for(let t of r){let r=(t.id??a.v4()).toString(),i={created_at:t.created_at,...t.metadata&&{metadata:t.metadata},...t.split&&{split:t.split}},o=new Blob([(0,m.serialize)(i)],{type:"application/json"});n.append(r,o);let s=new Blob([(0,m.serialize)(t.inputs)],{type:"application/json"});if(n.append(`${r}.inputs`,s),t.outputs){let i=new Blob([(0,m.serialize)(t.outputs)],{type:"application/json"});n.append(`${r}.outputs`,i)}if(t.attachments)for(let[i,a]of Object.entries(t.attachments)){let t,o;Array.isArray(a)?[t,o]=a:(t=a.mimeType,o=a.data);let s=new Blob([o],{type:`${t}; length=${o.byteLength}`});n.append(`${r}.attachment.${i}`,s)}}let i=await this.caller.call((0,p._getFetchImplementation)(),`${this.apiUrl}/v1/platform/datasets/${t}/examples`,{method:"POST",headers:this.headers,body:n});return await i.json()}async updatePrompt(t,r){if(!await this.promptExists(t))throw Error("Prompt does not exist, you must create it first.");let[n,i]=(0,h.parsePromptIdentifier)(t);if(!await this._currentTenantIsOwner(n))throw await this._ownerConflictError("update a prompt",n);let a={};if(void 0!==r?.description&&(a.description=r.description),void 0!==r?.readme&&(a.readme=r.readme),void 0!==r?.tags&&(a.tags=r.tags),void 0!==r?.isPublic&&(a.is_public=r.isPublic),void 0!==r?.isArchived&&(a.is_archived=r.isArchived),0===Object.keys(a).length)throw Error("No valid update options provided");let o=await this.caller.call((0,p._getFetchImplementation)(),`${this.apiUrl}/repos/${n}/${i}`,{method:"PATCH",body:JSON.stringify(a),headers:{...this.headers,"Content-Type":"application/json"},signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await (0,f.raiseForStatus)(o,"update prompt"),o.json()}async deletePrompt(t){if(!await this.promptExists(t))throw Error("Prompt does not exist, you must create it first.");let[r,n,i]=(0,h.parsePromptIdentifier)(t);if(!await this._currentTenantIsOwner(r))throw await this._ownerConflictError("delete a prompt",r);let a=await this.caller.call((0,p._getFetchImplementation)(),`${this.apiUrl}/repos/${r}/${n}`,{method:"DELETE",headers:this.headers,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});return await a.json()}async pullPromptCommit(t,r){let[n,i,a]=(0,h.parsePromptIdentifier)(t),o=await this.caller.call((0,p._getFetchImplementation)(),`${this.apiUrl}/commits/${n}/${i}/${a}${r?.includeModel?"?include_model=true":""}`,{method:"GET",headers:this.headers,signal:AbortSignal.timeout(this.timeout_ms),...this.fetchOptions});await (0,f.raiseForStatus)(o,"pull prompt commit");let s=await o.json();return{owner:n,repo:i,commit_hash:s.commit_hash,manifest:s.manifest,examples:s.examples}}async _pullPrompt(t,r){return JSON.stringify((await this.pullPromptCommit(t,{includeModel:r?.includeModel})).manifest)}async pushPrompt(t,r){return(await this.promptExists(t)?r&&Object.keys(r).some(t=>"object"!==t)&&await this.updatePrompt(t,{description:r?.description,readme:r?.readme,tags:r?.tags,isPublic:r?.isPublic}):await this.createPrompt(t,{description:r?.description,readme:r?.readme,tags:r?.tags,isPublic:r?.isPublic}),r?.object)?await this.createCommit(t,r?.object,{parentCommitHash:r?.parentCommitHash}):await this._getPromptUrl(t)}async clonePublicDataset(t,n={}){let{sourceApiUrl:i=this.apiUrl,datasetName:a}=n,[o,s]=this.parseTokenOrUrl(t,i),l=new r({apiUrl:o,apiKey:"placeholder"}),u=await l.readSharedDataset(s),d=a||u.name;try{if(await this.hasDataset({datasetId:d}))return void import_console_browserify.default.log(`Dataset ${d} already exists in your tenant. Skipping.`)}catch(t){}let c=await l.listSharedExamples(s),h=await this.createDataset(d,{description:u.description,dataType:u.data_type||"kv",inputsSchema:u.inputs_schema_definition??void 0,outputsSchema:u.outputs_schema_definition??void 0});try{await this.createExamples({inputs:c.map(t=>t.inputs),outputs:c.flatMap(t=>t.outputs?[t.outputs]:[]),datasetId:h.id})}catch(t){throw import_console_browserify.default.error(`An error occurred while creating dataset ${d}. You should delete it manually.`),t}}parseTokenOrUrl(t,r,n=2,i="dataset"){try{return(0,d.assertUuid)(t),[r,t]}catch(t){}try{let a=new URL(t).pathname.split("/").filter(t=>""!==t);if(a.length>=n)return[r,a[a.length-n]];throw Error(`Invalid public ${i} URL: ${t}`)}catch(r){throw Error(`Invalid public ${i} URL or token: ${t}`)}}awaitPendingTraceBatches(){return this.manualFlushMode?(import_console_browserify.default.warn("[WARNING]: When tracing in manual flush mode, you must call `await client.flush()` manually to submit trace batches."),Promise.resolve()):Promise.all([...this.autoBatchQueue.items.map(({itemPromise:t})=>t),this.batchIngestCaller.queue.onIdle()])}}}}),require_dist6=__commonJS({"../../node_modules/.pnpm/langsmith@0.3.7_openai@4.81.0_ws@8.18.3_zod@3.24.3_/node_modules/langsmith/dist/index.cjs"(t){init_globals(),Object.defineProperty(t,"__esModule",{value:!0}),t.__version__=t.overrideFetchImplementation=t.RunTree=t.Client=void 0;var r=require_client2();Object.defineProperty(t,"Client",{enumerable:!0,get:function(){return r.Client}});var n=require_run_trees3();Object.defineProperty(t,"RunTree",{enumerable:!0,get:function(){return n.RunTree}});var i=require_fetch2();Object.defineProperty(t,"overrideFetchImplementation",{enumerable:!0,get:function(){return i.overrideFetchImplementation}}),t.__version__="0.3.7"}}),require_env5=__commonJS({"../../node_modules/.pnpm/langsmith@0.3.7_openai@4.81.0_ws@8.18.3_zod@3.24.3_/node_modules/langsmith/dist/utils/env.cjs"(t){init_globals(),Object.defineProperty(t,"__esModule",{value:!0}),t.getShas=t.setEnvironmentVariable=t.getLangSmithEnvironmentVariable=t.getEnvironmentVariable=t.getEnvironmentVariables=t.getLangChainEnvVarsMetadata=t.getLangChainEnvVars=t.getRuntimeEnvironment=t.getEnv=t.isNode=t.isDeno=t.isJsDom=t.isWebWorker=t.isBrowser=void 0;var r,n,i,a=require_dist6();function o(){try{return void 0!==import_browser.default&&import_browser.default.env?Object.entries(import_browser.default.env).reduce((t,[r,n])=>(t[r]=String(n),t),{}):void 0}catch(t){return}}function s(t){try{return void 0!==import_browser.default?import_browser.default.env?.[t]:void 0}catch(t){return}}function l(){if(void 0!==n)return n;let t={};for(let r of["VERCEL_GIT_COMMIT_SHA","NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA","COMMIT_REF","RENDER_GIT_COMMIT","CI_COMMIT_SHA","CIRCLE_SHA1","CF_PAGES_COMMIT_SHA","REACT_APP_GIT_SHA","SOURCE_VERSION","GITHUB_SHA","TRAVIS_COMMIT","GIT_COMMIT","BUILD_VCS_NUMBER","bamboo_planRepository_revision","Build.SourceVersion","BITBUCKET_COMMIT","DRONE_COMMIT_SHA","SEMAPHORE_GIT_SHA","BUILDKITE_COMMIT"]){let n=s(r);void 0!==n&&(t[r]=n)}return n=t,t}t.isBrowser=()=>"undefined"!=typeof window&&void 0!==window.document,t.isWebWorker=()=>"object"==typeof globalThis&&globalThis.constructor&&"DedicatedWorkerGlobalScope"===globalThis.constructor.name,t.isJsDom=()=>"undefined"!=typeof window&&"nodejs"===window.name||"undefined"!=typeof navigator&&(navigator.userAgent.includes("Node.js")||navigator.userAgent.includes("jsdom")),t.isDeno=()=>"undefined"!=typeof Deno,t.isNode=()=>void 0!==import_browser.default&&void 0!==import_browser.default.versions&&void 0!==import_browser.default.versions.node&&!(0,t.isDeno)(),t.getEnv=()=>i||(i=(0,t.isBrowser)()?"browser":(0,t.isNode)()?"node":(0,t.isWebWorker)()?"webworker":(0,t.isJsDom)()?"jsdom":(0,t.isDeno)()?"deno":"other"),t.getRuntimeEnvironment=function(){if(void 0===r){let n=(0,t.getEnv)(),i=l();r={library:"langsmith",runtime:n,sdk:"langsmith-js",sdk_version:a.__version__,...i}}return r},t.getLangChainEnvVars=function(){let t=o()||{},r={};for(let[n,i]of Object.entries(t))n.startsWith("LANGCHAIN_")&&"string"==typeof i&&(r[n]=i);for(let t in r)if((t.toLowerCase().includes("key")||t.toLowerCase().includes("secret")||t.toLowerCase().includes("token"))&&"string"==typeof r[t]){let n=r[t];r[t]=n.slice(0,2)+"*".repeat(n.length-4)+n.slice(-2)}return r},t.getLangChainEnvVarsMetadata=function(){let t=o()||{},r={},n=["LANGCHAIN_API_KEY","LANGCHAIN_ENDPOINT","LANGCHAIN_TRACING_V2","LANGCHAIN_PROJECT","LANGCHAIN_SESSION","LANGSMITH_API_KEY","LANGSMITH_ENDPOINT","LANGSMITH_TRACING_V2","LANGSMITH_PROJECT","LANGSMITH_SESSION"];for(let[i,a]of Object.entries(t))!i.startsWith("LANGCHAIN_")&&!i.startsWith("LANGSMITH_")||"string"!=typeof a||n.includes(i)||i.toLowerCase().includes("key")||i.toLowerCase().includes("secret")||i.toLowerCase().includes("token")||("LANGCHAIN_REVISION_ID"===i?r.revision_id=a:r[i]=a);return r},t.getEnvironmentVariables=o,t.getEnvironmentVariable=s,t.getLangSmithEnvironmentVariable=function(t){return s(`LANGSMITH_${t}`)||s(`LANGCHAIN_${t}`)},t.setEnvironmentVariable=function(t,r){void 0!==import_browser.default&&(import_browser.default.env[t]=r)},t.getShas=l}}),require_env6=__commonJS({"../../node_modules/.pnpm/langsmith@0.3.7_openai@4.81.0_ws@8.18.3_zod@3.24.3_/node_modules/langsmith/dist/env.cjs"(t){init_globals(),Object.defineProperty(t,"__esModule",{value:!0}),t.isTracingEnabled=void 0;var r=require_env5();t.isTracingEnabled=t=>void 0!==t?t:!!["TRACING_V2","TRACING"].find(t=>"true"===(0,r.getLangSmithEnvironmentVariable)(t))}}),require_constants10=__commonJS({"../../node_modules/.pnpm/langsmith@0.3.7_openai@4.81.0_ws@8.18.3_zod@3.24.3_/node_modules/langsmith/dist/singletons/constants.cjs"(t){init_globals(),Object.defineProperty(t,"__esModule",{value:!0}),t._LC_CONTEXT_VARIABLES_KEY=void 0,t._LC_CONTEXT_VARIABLES_KEY=Symbol.for("lc:context_variables")}}),require_run_trees3=__commonJS({"../../node_modules/.pnpm/langsmith@0.3.7_openai@4.81.0_ws@8.18.3_zod@3.24.3_/node_modules/langsmith/dist/run_trees.cjs"(t){init_globals();var r=t&&t.__createBinding||(Object.create?function(t,r,n,i){void 0===i&&(i=n);var a=Object.getOwnPropertyDescriptor(r,n);a&&!("get"in a?!r.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return r[n]}}),Object.defineProperty(t,i,a)}:function(t,r,n,i){void 0===i&&(i=n),t[i]=r[n]}),n=t&&t.__setModuleDefault||(Object.create?function(t,r){Object.defineProperty(t,"default",{enumerable:!0,value:r})}:function(t,r){t.default=r}),i=t&&t.__importStar||function(t){if(t&&t.__esModule)return t;var i={};if(null!=t)for(var a in t)"default"!==a&&Object.prototype.hasOwnProperty.call(t,a)&&r(i,t,a);return n(i,t),i};Object.defineProperty(t,"__esModule",{value:!0}),t.isRunnableConfigLike=t.isRunTree=t.RunTree=t.convertToDottedOrderFormat=void 0;var a=i(require_commonjs_browser()),o=require_env5(),s=require_client2(),l=require_env6(),u=require_warn2(),d=require_constants10();function c(t,r,n=1){let i=n.toFixed(0).slice(0,3).padStart(3,"0");return`${new Date(t).toISOString().slice(0,-1)}${i}Z`.replace(/[-:.]/g,"")+r}t.convertToDottedOrderFormat=c;var h=class t{constructor(t,r){Object.defineProperty(this,"metadata",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tags",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.metadata=t,this.tags=r}static fromHeader(r){let n=r.split(","),i={},a=[];for(let t of n){let[r,n]=t.split("="),o=decodeURIComponent(n);"langsmith-metadata"===r?i=JSON.parse(o):"langsmith-tags"===r&&(a=o.split(","))}return new t(i,a)}toHeader(){let t=[];return this.metadata&&Object.keys(this.metadata).length>0&&t.push(`langsmith-metadata=${encodeURIComponent(JSON.stringify(this.metadata))}`),this.tags&&this.tags.length>0&&t.push(`langsmith-tags=${encodeURIComponent(this.tags.join(","))}`),t.join(",")}},f=class t{constructor(r){if(Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"run_type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"project_name",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"parent_run",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"child_runs",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"start_time",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"end_time",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"extra",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tags",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"error",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"serialized",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"inputs",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"outputs",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"reference_example_id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"client",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"trace_id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"dotted_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tracingEnabled",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"execution_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"child_execution_order",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"attachments",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),p(r))return void Object.assign(this,{...r});let n=t.getDefaultConfig(),{metadata:i,...a}=r,o=a.client??t.getSharedClient(),s={...i,...a?.extra?.metadata};if(a.extra={...a.extra,metadata:s},Object.assign(this,{...n,...a,client:o}),this.trace_id||(this.parent_run?this.trace_id=this.parent_run.trace_id??this.id:this.trace_id=this.id),this.execution_order??(this.execution_order=1),this.child_execution_order??(this.child_execution_order=1),!this.dotted_order){let t=c(this.start_time,this.id,this.execution_order);this.parent_run?this.dotted_order=this.parent_run.dotted_order+"."+t:this.dotted_order=t}}static getDefaultConfig(){return{id:a.v4(),run_type:"chain",project_name:(0,o.getLangSmithEnvironmentVariable)("PROJECT")??(0,o.getEnvironmentVariable)("LANGCHAIN_SESSION")??"default",child_runs:[],api_url:(0,o.getEnvironmentVariable)("LANGCHAIN_ENDPOINT")??"http://localhost:1984",api_key:(0,o.getEnvironmentVariable)("LANGCHAIN_API_KEY"),caller_options:{},start_time:Date.now(),serialized:{},inputs:{},extra:{}}}static getSharedClient(){return t.sharedClient||(t.sharedClient=new s.Client),t.sharedClient}createChild(r){var n;let i=this.child_execution_order+1,a=new t({...r,parent_run:this,project_name:this.project_name,client:this.client,tracingEnabled:this.tracingEnabled,execution_order:i,child_execution_order:i});d._LC_CONTEXT_VARIABLES_KEY in this&&(a[d._LC_CONTEXT_VARIABLES_KEY]=this[d._LC_CONTEXT_VARIABLES_KEY]);let o=Symbol.for("lc:child_config"),s=r.extra?.[o]??this.extra[o];if(b(s)){let t={...s},r="object"==typeof(n=t.callbacks)&&null!=n&&Array.isArray(n.handlers)?t.callbacks.copy?.():void 0;r&&(Object.assign(r,{_parentRunId:a.id}),r.handlers?.find(m)?.updateFromRunTree?.(a),t.callbacks=r),a.extra[o]=t}let l=new Set,u=this;for(;null!=u&&!l.has(u.id);)l.add(u.id),u.child_execution_order=Math.max(u.child_execution_order,i),u=u.parent_run;return this.child_runs.push(a),a}async end(t,r,n=Date.now(),i){this.outputs=this.outputs??t,this.error=this.error??r,this.end_time=this.end_time??n,i&&Object.keys(i).length>0&&(this.extra=this.extra?{...this.extra,metadata:{...this.extra.metadata,...i}}:{metadata:i})}_convertToCreate(t,r,n=!0){let i,a,o=t.extra??{};if(o.runtime||(o.runtime={}),r)for(let[t,n]of Object.entries(r))o.runtime[t]||(o.runtime[t]=n);return n?(a=t.parent_run?.id,i=[]):(i=t.child_runs.map(t=>this._convertToCreate(t,r,n)),a=void 0),{id:t.id,name:t.name,start_time:t.start_time,end_time:t.end_time,run_type:t.run_type,reference_example_id:t.reference_example_id,extra:o,serialized:t.serialized,error:t.error,inputs:t.inputs,outputs:t.outputs,session_name:t.project_name,child_runs:i,parent_run_id:a,trace_id:t.trace_id,dotted_order:t.dotted_order,tags:t.tags,attachments:t.attachments}}async postRun(t=!0){try{let r=(0,o.getRuntimeEnvironment)(),n=await this._convertToCreate(this,r,!0);if(await this.client.createRun(n),!t)for(let t of((0,u.warnOnce)("Posting with excludeChildRuns=false is deprecated and will be removed in a future version."),this.child_runs))await t.postRun(!1)}catch(t){import_console_browserify.default.error(`Error in postRun for run ${this.id}:`,t)}}async patchRun(){try{let t={end_time:this.end_time,error:this.error,inputs:this.inputs,outputs:this.outputs,parent_run_id:this.parent_run?.id,reference_example_id:this.reference_example_id,extra:this.extra,events:this.events,dotted_order:this.dotted_order,trace_id:this.trace_id,tags:this.tags,attachments:this.attachments};await this.client.updateRun(this.id,t)}catch(t){import_console_browserify.default.error(`Error in patchRun for run ${this.id}`,t)}}toJSON(){return this._convertToCreate(this,void 0,!1)}static fromRunnableConfig(r,n){let i=r?.callbacks,a,o,s,u=(0,l.isTracingEnabled)();if(i){let t=i?.getParentRunId?.()??"",r=i?.handlers?.find(t=>"langchain_tracer"==t?.name);a=r?.getRun?.(t),o=r?.projectName,s=r?.client,u=u||!!r}return a?new t({name:a.name,id:a.id,trace_id:a.trace_id,dotted_order:a.dotted_order,client:s,tracingEnabled:u,project_name:o,tags:[...new Set((a?.tags??[]).concat(r?.tags??[]))],extra:{metadata:{...a?.extra?.metadata,...r?.metadata}}}).createChild(n):new t({...n,client:s,tracingEnabled:u,project_name:o})}static fromDottedOrder(t){return this.fromHeaders({"langsmith-trace":t})}static fromHeaders(r,n){let i="get"in r&&"function"==typeof r.get?{"langsmith-trace":r.get("langsmith-trace"),baggage:r.get("baggage")}:r,a=i["langsmith-trace"];if(!a||"string"!=typeof a)return;let o=a.trim(),s=o.split(".").map(t=>{let[r,n]=t.split("Z");return{strTime:r,time:Date.parse(r+"Z"),uuid:n}}),l=s[0].uuid,u={...n,name:n?.name??"parent",run_type:n?.run_type??"chain",start_time:n?.start_time??Date.now(),id:s.at(-1)?.uuid,trace_id:l,dotted_order:o};if(i.baggage&&"string"==typeof i.baggage){let t=h.fromHeader(i.baggage);u.metadata=t.metadata,u.tags=t.tags}return new t(u)}toHeaders(t){let r={"langsmith-trace":this.dotted_order,baggage:new h(this.extra?.metadata,this.tags).toHeader()};if(t)for(let[n,i]of Object.entries(r))t.set(n,i);return r}};function p(t){return void 0!==t&&"function"==typeof t.createChild&&"function"==typeof t.postRun}function m(t){return"object"==typeof t&&null!=t&&"string"==typeof t.name&&"langchain_tracer"===t.name}function g(t){return Array.isArray(t)&&t.some(t=>m(t))}function b(t){return void 0!==t&&"object"==typeof t.callbacks&&(g(t.callbacks?.handlers)||g(t.callbacks))}t.RunTree=f,Object.defineProperty(f,"sharedClient",{enumerable:!0,configurable:!0,writable:!0,value:null}),t.isRunTree=p,t.isRunnableConfigLike=b}}),require_traceable3=__commonJS({"../../node_modules/.pnpm/langsmith@0.3.7_openai@4.81.0_ws@8.18.3_zod@3.24.3_/node_modules/langsmith/dist/singletons/traceable.cjs"(t){init_globals(),Object.defineProperty(t,"__esModule",{value:!0}),t.isTraceableFunction=t.ROOT=t.withRunTree=t.getCurrentRunTree=t.AsyncLocalStorageProviderSingleton=void 0;var r=require_run_trees3(),n=Symbol.for("ls:tracing_async_local_storage"),i=new class{getStore(){}run(t,r){return r()}};t.AsyncLocalStorageProviderSingleton=new class{getInstance(){return globalThis[n]??i}initializeGlobalInstance(t){void 0===globalThis[n]&&(globalThis[n]=t)}},t.getCurrentRunTree=()=>{let n=t.AsyncLocalStorageProviderSingleton.getInstance().getStore();if(!(0,r.isRunTree)(n))throw Error("Could not get the current run tree.\n\nPlease make sure you are calling this method within a traceable function and that tracing is enabled.");return n},t.withRunTree=function(r,n){let i=t.AsyncLocalStorageProviderSingleton.getInstance();return new Promise((t,a)=>{i.run(r,()=>{Promise.resolve(n()).then(t).catch(a)})})},t.ROOT=Symbol.for("langsmith:traceable:root"),t.isTraceableFunction=function(t){return"function"==typeof t&&"langsmith:traceable"in t}}}),require_asserts=__commonJS({"../../node_modules/.pnpm/langsmith@0.3.7_openai@4.81.0_ws@8.18.3_zod@3.24.3_/node_modules/langsmith/dist/utils/asserts.cjs"(t){init_globals(),Object.defineProperty(t,"__esModule",{value:!0}),t.isReadableStream=t.isThenable=t.isGenerator=t.isIteratorLike=t.isAsyncIterable=t.isKVMap=t.isPromiseMethod=void 0,t.isPromiseMethod=function(t){return"then"===t||"catch"===t||"finally"===t},t.isKVMap=function(t){if("object"!=typeof t||null==t)return!1;let r=Object.getPrototypeOf(t);return!(null!==r&&r!==Object.prototype&&null!==Object.getPrototypeOf(r)||Symbol.toStringTag in t||Symbol.iterator in t)},t.isAsyncIterable=t=>null!=t&&"object"==typeof t&&"function"==typeof t[Symbol.asyncIterator],t.isIteratorLike=t=>null!=t&&"object"==typeof t&&"next"in t&&"function"==typeof t.next;var r=(function*(){}).constructor;t.isGenerator=t=>null!=t&&"function"==typeof t&&t instanceof r,t.isThenable=t=>null!=t&&"object"==typeof t&&"then"in t&&"function"==typeof t.then,t.isReadableStream=t=>null!=t&&"object"==typeof t&&"getReader"in t&&"function"==typeof t.getReader}}),require_traceable4=__commonJS({"../../node_modules/.pnpm/langsmith@0.3.7_openai@4.81.0_ws@8.18.3_zod@3.24.3_/node_modules/langsmith/dist/traceable.cjs"(t){init_globals(),Object.defineProperty(t,"__esModule",{value:!0}),t.ROOT=t.withRunTree=t.isTraceableFunction=t.getCurrentRunTree=t.traceable=void 0;var r=__webpack_require__(7752),n=require_run_trees3(),i=require_env6(),a=require_traceable3(),o=require_constants10(),s=require_asserts();a.AsyncLocalStorageProviderSingleton.initializeGlobalInstance(new r.AsyncLocalStorage);var l=t=>{let r=t[0];return null==r?{}:t.length>1?{args:t}:(0,s.isKVMap)(r)?r:{input:r}},u=(t,r)=>{let n;n=(0,s.isKVMap)(t)?t:{outputs:t};try{return r(n)}catch(t){return import_console_browserify.default.error("Error occurred during processOutputs. Sending raw outputs:",t),n}},d=(t,r,n,a,o)=>{if(!(0,i.isTracingEnabled)(t.tracingEnabled))return;let[s,l]=((t,r)=>{if(!r)return[void 0,t];try{let[n,i]=r(...t);return[n,i]}catch(r){return import_console_browserify.default.error("Error occurred during extractAttachments:",r),[void 0,t]}})(r,o);t.attachments=s,t.inputs=((t,r)=>{try{return r(t)}catch(r){return import_console_browserify.default.error("Error occurred during processInputs. Sending raw inputs:",r),t}})(l,a);let u=n?.(...r);return null!=u&&(t.extra??(t.extra={}),t.extra.metadata={...u,...t.extra.metadata}),t},c=t=>{let r={current:void 0};return new Proxy(t,{get(n,i,a){if("then"===i){let n=t[i].bind(t);return(t,i=t=>{throw t})=>n(n=>(r.current=["resolve",n],t(n)),t=>(r.current=["reject",t],i(t)))}if("catch"===i){let n=t[i].bind(t);return t=>n(n=>(r.current=["reject",n],t(n)))}return"toJSON"===i?()=>{if(!r.current)return;let[t,n]=r.current??[];return"resolve"===t?n:{error:n}}:Reflect.get(n,i,a)}})},h=t=>{if((0,s.isReadableStream)(t)){let r=[],n=new TransformStream({start:()=>{},transform:(t,n)=>{r.push(t),n.enqueue(t)},flush:()=>{}}),i=t.pipeThrough(n);return Object.assign(i,{toJSON:()=>r}),i}if((0,s.isAsyncIterable)(t)){let r={current:[]};return new Proxy(t,{get:(n,i,a)=>i===Symbol.asyncIterator?()=>{let n=t[Symbol.asyncIterator].bind(t)();return new Proxy(n,{get(t,i,a){if("next"===i||"return"===i||"throw"===i){let t=n.next.bind(n);return(...n)=>{let i=c(t(...n));return r.current.push(i),i}}return"return"===i||"throw"===i?n.next.bind(n):Reflect.get(t,i,a)}})}:"toJSON"===i?()=>r.current.map(t=>t.toJSON()).reduce((t,r)=>(r?.value&&t.push(r.value),t),[]):Reflect.get(n,i,a)})}if(!Array.isArray(t)&&(0,s.isIteratorLike)(t)){let r=[];return new Proxy(t,{get(n,i,a){if("next"===i||"return"===i||"throw"===i){let n=t[i]?.bind(t);return(...t)=>{let i=n?.(...t);return null!=i&&r.push(i),i}}return"toJSON"===i?()=>r.reduce((t,r)=>(r.value&&t.push(r.value),t),[]):Reflect.get(n,i,a)}})}return(0,s.isThenable)(t)?c(t):t};t.traceable=function(t,i){let{aggregator:c,argsConfigPath:f,__finalTracedIteratorKey:p,processInputs:m,processOutputs:g,extractAttachments:b,...y}=i??{},_=m??(t=>t),v=g??(t=>t),A=b??((...t)=>[void 0,l(t)]),w=(...l)=>{let m;try{let r;if(f){let[t,n]=f;if(t!==l.length-1||n){if(t<=l.length&&"object"==typeof l[t]&&null!==l[t])if(n){let{[n]:i,...a}=l[t];r=i,l[t]=a}else r=l[t],l.splice(t,1)}else r=l.pop()}m={name:t.name||"<lambda>",...y,...r,tags:[...new Set([...y?.tags??[],...r?.tags??[]])],metadata:{...y?.metadata,...r?.metadata}}}catch(r){import_console_browserify.default.warn(`Failed to extract runtime config from args for ${y?.name??t.name}`,r),m={name:t.name||"<lambda>",...y}}let g=a.AsyncLocalStorageProviderSingleton.getInstance(),b=l;for(let t=0;t<b.length;t++)b[t]=h(b[t]);let[w,x]=(()=>{let[t,...r]=b;if((0,n.isRunnableConfigLike)(t))return[d(n.RunTree.fromRunnableConfig(t,m),r,i?.getInvocationParams,_,A),r];if((0,n.isRunTree)(t)&&"callbackManager"in t&&null!=t.callbackManager)return[t,r];if(t===a.ROOT||(0,n.isRunTree)(t)){let o=d(t===a.ROOT?new n.RunTree(m):t.createChild(m),r,i?.getInvocationParams,_,A);return[o,[o,...r]]}let s=g.getStore();if((0,n.isRunTree)(s))return[d(s.createChild(m),b,i?.getInvocationParams,_,A),b];let l=d(new n.RunTree(m),b,i?.getInvocationParams,_,A);return void 0!==s&&o._LC_CONTEXT_VARIABLES_KEY in s&&(l[o._LC_CONTEXT_VARIABLES_KEY]=s[o._LC_CONTEXT_VARIABLES_KEY]),[l,b]})();return g.run(w,()=>{let n,a=w?.postRun();async function o(t){if(void 0!==c)try{return await c(t)}catch(t){import_console_browserify.default.error("[ERROR]: LangSmith aggregation failed: ",t)}return t}function l(t,r){if((0,s.isReadableStream)(t))return function(t,r){let n=t.getReader(),i=!1,a=[];return new ReadableStream({async start(t){for(;;){let s=await (r?r(()=>n.read()):n.read());if(s.done){i=!0,await w?.end(u(await o(a),v)),await d(),t.close();break}a.push(s.value),t.enqueue(s.value)}},cancel:async t=>(i||await w?.end(void 0,"Cancelled"),await w?.end(u(await o(a),v)),await d(),n.cancel(t))})}(t,r);let n=async function*(t,r){let n=!1,i=[];try{for(;;){let{value:a,done:o}=await (r?r(()=>t.next()):t.next());if(o){n=!0;break}i.push(a),yield a}}catch(t){throw await w?.end(void 0,String(t)),t}finally{n||await w?.end(void 0,"Cancelled"),await w?.end(u(await o(i),v)),await d()}}(t[Symbol.asyncIterator](),r);return t[Symbol.asyncIterator]=()=>n,t}async function d(){let t=i?.on_end;t&&(w?t(w):import_console_browserify.default.warn("Can not call 'on_end' if currentRunTree is undefined")),await a,await w?.patchRun()}try{n=t(...x)}catch(t){n=Promise.reject(t)}if((0,s.isAsyncIterable)(n)){let t=r.AsyncLocalStorage.snapshot();return l(n,t)}if(!Array.isArray(n)&&"object"==typeof n&&null!=n&&void 0!==p&&(0,s.isAsyncIterable)(n[p])){let t=r.AsyncLocalStorage.snapshot();return{...n,[p]:l(n[p],t)}}let h=new Promise((i,a)=>{Promise.resolve(n).then(async n=>{if((0,s.isAsyncIterable)(n))return i(l(n,r.AsyncLocalStorage.snapshot()));if(!Array.isArray(n)&&"object"==typeof n&&null!=n&&void 0!==p&&(0,s.isAsyncIterable)(n[p])){let t=r.AsyncLocalStorage.snapshot();return{...n,[p]:l(n[p],t)}}if((0,s.isGenerator)(t)&&(0,s.isIteratorLike)(n)){let t=function(t){let r=[];for(;;){let n=t.next();if(r.push(n),n.done)break}return r}(n);try{await w?.end(u(await o(t.reduce((t,{value:r,done:n})=>(n&&void 0===r||t.push(r),t),[])),v)),await d()}catch(t){import_console_browserify.default.error("Error occurred during handleEnd:",t)}return function*(){for(let r of t){if(r.done)return r.value;yield r.value}}()}try{await w?.end(u(n,v)),await d()}finally{return n}},async t=>{throw await w?.end(void 0,String(t)),await d(),t}).then(i,a)});return"object"!=typeof n||null===n?h:new Proxy(n,{get:(t,r,n)=>(0,s.isPromiseMethod)(r)?h[r].bind(h):Reflect.get(t,r,n)})})};return Object.defineProperty(w,"langsmith:traceable",{value:y}),w};var f=require_traceable3();Object.defineProperty(t,"getCurrentRunTree",{enumerable:!0,get:function(){return f.getCurrentRunTree}}),Object.defineProperty(t,"isTraceableFunction",{enumerable:!0,get:function(){return f.isTraceableFunction}}),Object.defineProperty(t,"withRunTree",{enumerable:!0,get:function(){return f.withRunTree}}),Object.defineProperty(t,"ROOT",{enumerable:!0,get:function(){return f.ROOT}})}}),require_openai2=__commonJS({"../../node_modules/.pnpm/langsmith@0.3.7_openai@4.81.0_ws@8.18.3_zod@3.24.3_/node_modules/langsmith/dist/wrappers/openai.cjs"(t){init_globals(),Object.defineProperty(t,"__esModule",{value:!0}),t.wrapOpenAI=void 0;var r=require_traceable4(),n=t=>{if(!t||0===t.length)return{choices:[{message:{role:"assistant",content:""}}]};let r={};for(let n of t)for(let t of n.choices)void 0===r[t.index]&&(r[t.index]=[]),r[t.index].push(t);let n=t[t.length-1];return n.choices=Object.values(r).map(t=>(function(t){let r=t.slice().reverse(),n={role:"assistant",content:""};for(let t of r)if(t.delta.role){n.role=t.delta.role;break}let i={};for(let r of t)if(r.delta.content&&(n.content=n.content.concat(r.delta.content)),r.delta.function_call&&(n.function_call||(n.function_call={name:"",arguments:""}),r.delta.function_call.name&&(n.function_call.name+=r.delta.function_call.name),r.delta.function_call.arguments&&(n.function_call.arguments+=r.delta.function_call.arguments)),r.delta.tool_calls)for(let t of r.delta.tool_calls)i[r.index]||(i[r.index]=[]),i[r.index].push(t);if(Object.keys(i).length>0)for(let[t,r]of(n.tool_calls=[...Array(Object.keys(i).length)],Object.entries(i))){let i=parseInt(t);for(let t of(n.tool_calls[i]={index:i,id:r.find(t=>t.id)?.id||null,type:r.find(t=>t.type)?.type||null},r))t.function&&(n.tool_calls[i].function||(n.tool_calls[i].function={name:"",arguments:""}),t.function.name&&(n.tool_calls[i].function.name+=t.function.name),t.function.arguments&&(n.tool_calls[i].function.arguments+=t.function.arguments))}return{index:t[0].index,finish_reason:r.find(t=>t.finish_reason)||null,message:n}})(t)),n},i=t=>{if(0===t.length)return{choices:[{text:""}]};let r=[];for(let n of t){let t=n.choices[0].text;null!=t&&r.push(t)}let n=r.join(""),i=t[t.length-1];return i.choices=[{...i.choices[0],text:n}],i};function a(t){let r=t,n={...r},i=r.usage;if(i){let t={...null!==i.prompt_tokens_details?.audio_tokens&&{audio:i.prompt_tokens_details?.audio_tokens},...null!==i.prompt_tokens_details?.cached_tokens&&{cache_read:i.prompt_tokens_details?.cached_tokens}},r={...null!==i.completion_tokens_details?.audio_tokens&&{audio:i.completion_tokens_details?.audio_tokens},...null!==i.completion_tokens_details?.reasoning_tokens&&{reasoning:i.completion_tokens_details?.reasoning_tokens}};n.usage_metadata={input_tokens:i.prompt_tokens??0,output_tokens:i.completion_tokens??0,total_tokens:i.total_tokens??0,...Object.keys(t).length>0&&{input_token_details:t},...Object.keys(r).length>0&&{output_token_details:r}}}return delete n.usage,n}t.wrapOpenAI=(t,o)=>{if((0,r.isTraceableFunction)(t.chat.completions.create)||(0,r.isTraceableFunction)(t.completions.create))throw Error("This instance of OpenAI client has been already wrapped once.");let s={...t};return t.beta&&t.beta.chat&&t.beta.chat.completions&&"function"==typeof t.beta.chat.completions.parse&&(s.beta={...t.beta,chat:{...t.beta.chat,completions:{...t.beta.chat.completions,parse:(0,r.traceable)(t.beta.chat.completions.parse.bind(t.beta.chat.completions),{name:"ChatOpenAI",run_type:"llm",aggregator:n,argsConfigPath:[1,"langsmithExtra"],getInvocationParams:t=>{if("object"!=typeof t||null==t)return;let r=t,n=("string"==typeof r.stop?[r.stop]:r.stop)??void 0;return{ls_provider:"openai",ls_model_type:"chat",ls_model_name:r.model,ls_max_tokens:r.max_tokens??void 0,ls_temperature:r.temperature??void 0,ls_stop:n}},...o})}}}),s.chat={...t.chat,completions:{...t.chat.completions,create:(0,r.traceable)(t.chat.completions.create.bind(t.chat.completions),{name:"ChatOpenAI",run_type:"llm",aggregator:n,argsConfigPath:[1,"langsmithExtra"],getInvocationParams:t=>{if("object"!=typeof t||null==t)return;let r=t,n=("string"==typeof r.stop?[r.stop]:r.stop)??void 0;return{ls_provider:"openai",ls_model_type:"chat",ls_model_name:r.model,ls_max_tokens:r.max_tokens??void 0,ls_temperature:r.temperature??void 0,ls_stop:n}},processOutputs:a,...o})}},s.completions={...t.completions,create:(0,r.traceable)(t.completions.create.bind(t.completions),{name:"OpenAI",run_type:"llm",aggregator:i,argsConfigPath:[1,"langsmithExtra"],getInvocationParams:t=>{if("object"!=typeof t||null==t)return;let r=t,n=("string"==typeof r.stop?[r.stop]:r.stop)??void 0;return{ls_provider:"openai",ls_model_type:"llm",ls_model_name:r.model,ls_max_tokens:r.max_tokens??void 0,ls_temperature:r.temperature??void 0,ls_stop:n}},...o})},s}}}),require_generic=__commonJS({"../../node_modules/.pnpm/langsmith@0.3.7_openai@4.81.0_ws@8.18.3_zod@3.24.3_/node_modules/langsmith/dist/wrappers/generic.cjs"(t){init_globals(),Object.defineProperty(t,"__esModule",{value:!0}),t.wrapSDK=t._wrapClient=void 0;var r=require_traceable4();t._wrapClient=(n,i,a)=>new Proxy(n,{get(n,o,s){let l=n[o];return"function"==typeof l?(0,r.traceable)(l.bind(n),{run_type:"llm",...a,name:[i,o.toString()].join(".")}):null==l||Array.isArray(l)||l instanceof Date||"object"!=typeof l?Reflect.get(n,o,s):(0,t._wrapClient)(l,[i,o.toString()].join("."),a)}}),t.wrapSDK=(r,n)=>{let i=n?{...n}:void 0;return null!=i&&(delete i.runName,delete i.name),(0,t._wrapClient)(r,n?.name??n?.runName??r.constructor?.name,i)}}}),require_wrappers2=__commonJS({"../../node_modules/.pnpm/langsmith@0.3.7_openai@4.81.0_ws@8.18.3_zod@3.24.3_/node_modules/langsmith/dist/wrappers/index.cjs"(t){init_globals();var r=t&&t.__createBinding||(Object.create?function(t,r,n,i){void 0===i&&(i=n);var a=Object.getOwnPropertyDescriptor(r,n);a&&!("get"in a?!r.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return r[n]}}),Object.defineProperty(t,i,a)}:function(t,r,n,i){void 0===i&&(i=n),t[i]=r[n]}),n=t&&t.__exportStar||function(t,n){for(var i in t)"default"===i||Object.prototype.hasOwnProperty.call(n,i)||r(n,t,i)};Object.defineProperty(t,"__esModule",{value:!0}),t.wrapSDK=void 0,n(require_openai2(),t);var i=require_generic();Object.defineProperty(t,"wrapSDK",{enumerable:!0,get:function(){return i.wrapSDK}})}}),require_wrappers3=__commonJS({"../../node_modules/.pnpm/langsmith@0.3.7_openai@4.81.0_ws@8.18.3_zod@3.24.3_/node_modules/langsmith/wrappers.cjs"(t,r){init_globals(),r.exports=require_wrappers2()}}),require_us_keyboard_layout=__commonJS({"../shared/dist/lib/us-keyboard-layout.js"(t,r){init_globals();var n,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,l={};((t,r)=>{for(var n in r)i(t,n,{get:r[n],enumerable:!0})})(l,{_keyDefinitions:()=>u,getKeyDefinition:()=>c,isMac:()=>h,transformHotkeyInput:()=>p}),n=l,r.exports=((t,r,n,l)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let u of o(r))s.call(t,u)||u===n||i(t,u,{get:()=>r[u],enumerable:!(l=a(r,u))||l.enumerable});return t})(i({},"__esModule",{value:!0}),n);var u={0:{keyCode:48,key:"0",code:"Digit0"},1:{keyCode:49,key:"1",code:"Digit1"},2:{keyCode:50,key:"2",code:"Digit2"},3:{keyCode:51,key:"3",code:"Digit3"},4:{keyCode:52,key:"4",code:"Digit4"},5:{keyCode:53,key:"5",code:"Digit5"},6:{keyCode:54,key:"6",code:"Digit6"},7:{keyCode:55,key:"7",code:"Digit7"},8:{keyCode:56,key:"8",code:"Digit8"},9:{keyCode:57,key:"9",code:"Digit9"},Power:{key:"Power",code:"Power"},Eject:{key:"Eject",code:"Eject"},Abort:{keyCode:3,code:"Abort",key:"Cancel"},Help:{keyCode:6,code:"Help",key:"Help"},Backspace:{keyCode:8,code:"Backspace",key:"Backspace"},Tab:{keyCode:9,code:"Tab",key:"Tab"},Numpad5:{keyCode:12,shiftKeyCode:101,key:"Clear",code:"Numpad5",shiftKey:"5",location:3},NumpadEnter:{keyCode:13,code:"NumpadEnter",key:"Enter",text:"\r",location:3},Enter:{keyCode:13,code:"Enter",key:"Enter",text:"\r"},"\r":{keyCode:13,code:"Enter",key:"Enter",text:"\r"},"\n":{keyCode:13,code:"Enter",key:"Enter",text:"\r"},ShiftLeft:{keyCode:16,code:"ShiftLeft",key:"Shift",location:1},ShiftRight:{keyCode:16,code:"ShiftRight",key:"Shift",location:2},ControlLeft:{keyCode:17,code:"ControlLeft",key:"Control",location:1},ControlRight:{keyCode:17,code:"ControlRight",key:"Control",location:2},AltLeft:{keyCode:18,code:"AltLeft",key:"Alt",location:1},AltRight:{keyCode:18,code:"AltRight",key:"Alt",location:2},Pause:{keyCode:19,code:"Pause",key:"Pause"},CapsLock:{keyCode:20,code:"CapsLock",key:"CapsLock"},Escape:{keyCode:27,code:"Escape",key:"Escape"},Convert:{keyCode:28,code:"Convert",key:"Convert"},NonConvert:{keyCode:29,code:"NonConvert",key:"NonConvert"},Space:{keyCode:32,code:"Space",key:" "},Numpad9:{keyCode:33,shiftKeyCode:105,key:"PageUp",code:"Numpad9",shiftKey:"9",location:3},PageUp:{keyCode:33,code:"PageUp",key:"PageUp"},Numpad3:{keyCode:34,shiftKeyCode:99,key:"PageDown",code:"Numpad3",shiftKey:"3",location:3},PageDown:{keyCode:34,code:"PageDown",key:"PageDown"},End:{keyCode:35,code:"End",key:"End"},Numpad1:{keyCode:35,shiftKeyCode:97,key:"End",code:"Numpad1",shiftKey:"1",location:3},Home:{keyCode:36,code:"Home",key:"Home"},Numpad7:{keyCode:36,shiftKeyCode:103,key:"Home",code:"Numpad7",shiftKey:"7",location:3},ArrowLeft:{keyCode:37,code:"ArrowLeft",key:"ArrowLeft"},Numpad4:{keyCode:37,shiftKeyCode:100,key:"ArrowLeft",code:"Numpad4",shiftKey:"4",location:3},Numpad8:{keyCode:38,shiftKeyCode:104,key:"ArrowUp",code:"Numpad8",shiftKey:"8",location:3},ArrowUp:{keyCode:38,code:"ArrowUp",key:"ArrowUp"},ArrowRight:{keyCode:39,code:"ArrowRight",key:"ArrowRight"},Numpad6:{keyCode:39,shiftKeyCode:102,key:"ArrowRight",code:"Numpad6",shiftKey:"6",location:3},Numpad2:{keyCode:40,shiftKeyCode:98,key:"ArrowDown",code:"Numpad2",shiftKey:"2",location:3},ArrowDown:{keyCode:40,code:"ArrowDown",key:"ArrowDown"},Select:{keyCode:41,code:"Select",key:"Select"},Open:{keyCode:43,code:"Open",key:"Execute"},PrintScreen:{keyCode:44,code:"PrintScreen",key:"PrintScreen"},Insert:{keyCode:45,code:"Insert",key:"Insert"},Numpad0:{keyCode:45,shiftKeyCode:96,key:"Insert",code:"Numpad0",shiftKey:"0",location:3},Delete:{keyCode:46,code:"Delete",key:"Delete"},NumpadDecimal:{keyCode:46,shiftKeyCode:110,code:"NumpadDecimal",key:"\0",shiftKey:".",location:3},Digit0:{keyCode:48,code:"Digit0",shiftKey:")",key:"0"},Digit1:{keyCode:49,code:"Digit1",shiftKey:"!",key:"1"},Digit2:{keyCode:50,code:"Digit2",shiftKey:"@",key:"2"},Digit3:{keyCode:51,code:"Digit3",shiftKey:"#",key:"3"},Digit4:{keyCode:52,code:"Digit4",shiftKey:"$",key:"4"},Digit5:{keyCode:53,code:"Digit5",shiftKey:"%",key:"5"},Digit6:{keyCode:54,code:"Digit6",shiftKey:"^",key:"6"},Digit7:{keyCode:55,code:"Digit7",shiftKey:"&",key:"7"},Digit8:{keyCode:56,code:"Digit8",shiftKey:"*",key:"8"},Digit9:{keyCode:57,code:"Digit9",shiftKey:"(",key:"9"},KeyA:{keyCode:65,code:"KeyA",shiftKey:"A",key:"a"},KeyB:{keyCode:66,code:"KeyB",shiftKey:"B",key:"b"},KeyC:{keyCode:67,code:"KeyC",shiftKey:"C",key:"c"},KeyD:{keyCode:68,code:"KeyD",shiftKey:"D",key:"d"},KeyE:{keyCode:69,code:"KeyE",shiftKey:"E",key:"e"},KeyF:{keyCode:70,code:"KeyF",shiftKey:"F",key:"f"},KeyG:{keyCode:71,code:"KeyG",shiftKey:"G",key:"g"},KeyH:{keyCode:72,code:"KeyH",shiftKey:"H",key:"h"},KeyI:{keyCode:73,code:"KeyI",shiftKey:"I",key:"i"},KeyJ:{keyCode:74,code:"KeyJ",shiftKey:"J",key:"j"},KeyK:{keyCode:75,code:"KeyK",shiftKey:"K",key:"k"},KeyL:{keyCode:76,code:"KeyL",shiftKey:"L",key:"l"},KeyM:{keyCode:77,code:"KeyM",shiftKey:"M",key:"m"},KeyN:{keyCode:78,code:"KeyN",shiftKey:"N",key:"n"},KeyO:{keyCode:79,code:"KeyO",shiftKey:"O",key:"o"},KeyP:{keyCode:80,code:"KeyP",shiftKey:"P",key:"p"},KeyQ:{keyCode:81,code:"KeyQ",shiftKey:"Q",key:"q"},KeyR:{keyCode:82,code:"KeyR",shiftKey:"R",key:"r"},KeyS:{keyCode:83,code:"KeyS",shiftKey:"S",key:"s"},KeyT:{keyCode:84,code:"KeyT",shiftKey:"T",key:"t"},KeyU:{keyCode:85,code:"KeyU",shiftKey:"U",key:"u"},KeyV:{keyCode:86,code:"KeyV",shiftKey:"V",key:"v"},KeyW:{keyCode:87,code:"KeyW",shiftKey:"W",key:"w"},KeyX:{keyCode:88,code:"KeyX",shiftKey:"X",key:"x"},KeyY:{keyCode:89,code:"KeyY",shiftKey:"Y",key:"y"},KeyZ:{keyCode:90,code:"KeyZ",shiftKey:"Z",key:"z"},MetaLeft:{keyCode:91,code:"MetaLeft",key:"Meta",location:1},MetaRight:{keyCode:92,code:"MetaRight",key:"Meta",location:2},ContextMenu:{keyCode:93,code:"ContextMenu",key:"ContextMenu"},NumpadMultiply:{keyCode:106,code:"NumpadMultiply",key:"*",location:3},NumpadAdd:{keyCode:107,code:"NumpadAdd",key:"+",location:3},NumpadSubtract:{keyCode:109,code:"NumpadSubtract",key:"-",location:3},NumpadDivide:{keyCode:111,code:"NumpadDivide",key:"/",location:3},F1:{keyCode:112,code:"F1",key:"F1"},F2:{keyCode:113,code:"F2",key:"F2"},F3:{keyCode:114,code:"F3",key:"F3"},F4:{keyCode:115,code:"F4",key:"F4"},F5:{keyCode:116,code:"F5",key:"F5"},F6:{keyCode:117,code:"F6",key:"F6"},F7:{keyCode:118,code:"F7",key:"F7"},F8:{keyCode:119,code:"F8",key:"F8"},F9:{keyCode:120,code:"F9",key:"F9"},F10:{keyCode:121,code:"F10",key:"F10"},F11:{keyCode:122,code:"F11",key:"F11"},F12:{keyCode:123,code:"F12",key:"F12"},F13:{keyCode:124,code:"F13",key:"F13"},F14:{keyCode:125,code:"F14",key:"F14"},F15:{keyCode:126,code:"F15",key:"F15"},F16:{keyCode:127,code:"F16",key:"F16"},F17:{keyCode:128,code:"F17",key:"F17"},F18:{keyCode:129,code:"F18",key:"F18"},F19:{keyCode:130,code:"F19",key:"F19"},F20:{keyCode:131,code:"F20",key:"F20"},F21:{keyCode:132,code:"F21",key:"F21"},F22:{keyCode:133,code:"F22",key:"F22"},F23:{keyCode:134,code:"F23",key:"F23"},F24:{keyCode:135,code:"F24",key:"F24"},NumLock:{keyCode:144,code:"NumLock",key:"NumLock"},ScrollLock:{keyCode:145,code:"ScrollLock",key:"ScrollLock"},AudioVolumeMute:{keyCode:173,code:"AudioVolumeMute",key:"AudioVolumeMute"},AudioVolumeDown:{keyCode:174,code:"AudioVolumeDown",key:"AudioVolumeDown"},AudioVolumeUp:{keyCode:175,code:"AudioVolumeUp",key:"AudioVolumeUp"},MediaTrackNext:{keyCode:176,code:"MediaTrackNext",key:"MediaTrackNext"},MediaTrackPrevious:{keyCode:177,code:"MediaTrackPrevious",key:"MediaTrackPrevious"},MediaStop:{keyCode:178,code:"MediaStop",key:"MediaStop"},MediaPlayPause:{keyCode:179,code:"MediaPlayPause",key:"MediaPlayPause"},Semicolon:{keyCode:186,code:"Semicolon",shiftKey:":",key:";"},Equal:{keyCode:187,code:"Equal",shiftKey:"+",key:"="},NumpadEqual:{keyCode:187,code:"NumpadEqual",key:"=",location:3},Comma:{keyCode:188,code:"Comma",shiftKey:"<",key:","},Minus:{keyCode:189,code:"Minus",shiftKey:"_",key:"-"},Period:{keyCode:190,code:"Period",shiftKey:">",key:"."},Slash:{keyCode:191,code:"Slash",shiftKey:"?",key:"/"},Backquote:{keyCode:192,code:"Backquote",shiftKey:"~",key:"`"},BracketLeft:{keyCode:219,code:"BracketLeft",shiftKey:"{",key:"["},Backslash:{keyCode:220,code:"Backslash",shiftKey:"|",key:"\\"},BracketRight:{keyCode:221,code:"BracketRight",shiftKey:"}",key:"]"},Quote:{keyCode:222,code:"Quote",shiftKey:'"',key:"'"},AltGraph:{keyCode:225,code:"AltGraph",key:"AltGraph"},Props:{keyCode:247,code:"Props",key:"CrSel"},Cancel:{keyCode:3,key:"Cancel",code:"Abort"},Clear:{keyCode:12,key:"Clear",code:"Numpad5",location:3},Shift:{keyCode:16,key:"Shift",code:"ShiftLeft",location:1},Control:{keyCode:17,key:"Control",code:"ControlLeft",location:1},Alt:{keyCode:18,key:"Alt",code:"AltLeft",location:1},Accept:{keyCode:30,key:"Accept"},ModeChange:{keyCode:31,key:"ModeChange"}," ":{keyCode:32,key:" ",code:"Space"},Print:{keyCode:42,key:"Print"},Execute:{keyCode:43,key:"Execute",code:"Open"},"\0":{keyCode:46,key:"\0",code:"NumpadDecimal",location:3},a:{keyCode:65,key:"a",code:"KeyA"},b:{keyCode:66,key:"b",code:"KeyB"},c:{keyCode:67,key:"c",code:"KeyC"},d:{keyCode:68,key:"d",code:"KeyD"},e:{keyCode:69,key:"e",code:"KeyE"},f:{keyCode:70,key:"f",code:"KeyF"},g:{keyCode:71,key:"g",code:"KeyG"},h:{keyCode:72,key:"h",code:"KeyH"},i:{keyCode:73,key:"i",code:"KeyI"},j:{keyCode:74,key:"j",code:"KeyJ"},k:{keyCode:75,key:"k",code:"KeyK"},l:{keyCode:76,key:"l",code:"KeyL"},m:{keyCode:77,key:"m",code:"KeyM"},n:{keyCode:78,key:"n",code:"KeyN"},o:{keyCode:79,key:"o",code:"KeyO"},p:{keyCode:80,key:"p",code:"KeyP"},q:{keyCode:81,key:"q",code:"KeyQ"},r:{keyCode:82,key:"r",code:"KeyR"},s:{keyCode:83,key:"s",code:"KeyS"},t:{keyCode:84,key:"t",code:"KeyT"},u:{keyCode:85,key:"u",code:"KeyU"},v:{keyCode:86,key:"v",code:"KeyV"},w:{keyCode:87,key:"w",code:"KeyW"},x:{keyCode:88,key:"x",code:"KeyX"},y:{keyCode:89,key:"y",code:"KeyY"},z:{keyCode:90,key:"z",code:"KeyZ"},Meta:{keyCode:91,key:"Meta",code:"MetaLeft",location:1},"*":{keyCode:106,key:"*",code:"NumpadMultiply",location:3},"+":{keyCode:107,key:"+",code:"NumpadAdd",location:3},"-":{keyCode:109,key:"-",code:"NumpadSubtract",location:3},"/":{keyCode:111,key:"/",code:"NumpadDivide",location:3},";":{keyCode:186,key:";",code:"Semicolon"},"=":{keyCode:187,key:"=",code:"Equal"},",":{keyCode:188,key:",",code:"Comma"},".":{keyCode:190,key:".",code:"Period"},"`":{keyCode:192,key:"`",code:"Backquote"},"[":{keyCode:219,key:"[",code:"BracketLeft"},"\\":{keyCode:220,key:"\\",code:"Backslash"},"]":{keyCode:221,key:"]",code:"BracketRight"},"'":{keyCode:222,key:"'",code:"Quote"},Attn:{keyCode:246,key:"Attn"},CrSel:{keyCode:247,key:"CrSel",code:"Props"},ExSel:{keyCode:248,key:"ExSel"},EraseEof:{keyCode:249,key:"EraseEof"},Play:{keyCode:250,key:"Play"},ZoomOut:{keyCode:251,key:"ZoomOut"},")":{keyCode:48,key:")",code:"Digit0"},"!":{keyCode:49,key:"!",code:"Digit1"},"@":{keyCode:50,key:"@",code:"Digit2"},"#":{keyCode:51,key:"#",code:"Digit3"},$:{keyCode:52,key:"$",code:"Digit4"},"%":{keyCode:53,key:"%",code:"Digit5"},"^":{keyCode:54,key:"^",code:"Digit6"},"&":{keyCode:55,key:"&",code:"Digit7"},"(":{keyCode:57,key:"(",code:"Digit9"},A:{keyCode:65,key:"A",code:"KeyA"},B:{keyCode:66,key:"B",code:"KeyB"},C:{keyCode:67,key:"C",code:"KeyC"},D:{keyCode:68,key:"D",code:"KeyD"},E:{keyCode:69,key:"E",code:"KeyE"},F:{keyCode:70,key:"F",code:"KeyF"},G:{keyCode:71,key:"G",code:"KeyG"},H:{keyCode:72,key:"H",code:"KeyH"},I:{keyCode:73,key:"I",code:"KeyI"},J:{keyCode:74,key:"J",code:"KeyJ"},K:{keyCode:75,key:"K",code:"KeyK"},L:{keyCode:76,key:"L",code:"KeyL"},M:{keyCode:77,key:"M",code:"KeyM"},N:{keyCode:78,key:"N",code:"KeyN"},O:{keyCode:79,key:"O",code:"KeyO"},P:{keyCode:80,key:"P",code:"KeyP"},Q:{keyCode:81,key:"Q",code:"KeyQ"},R:{keyCode:82,key:"R",code:"KeyR"},S:{keyCode:83,key:"S",code:"KeyS"},T:{keyCode:84,key:"T",code:"KeyT"},U:{keyCode:85,key:"U",code:"KeyU"},V:{keyCode:86,key:"V",code:"KeyV"},W:{keyCode:87,key:"W",code:"KeyW"},X:{keyCode:88,key:"X",code:"KeyX"},Y:{keyCode:89,key:"Y",code:"KeyY"},Z:{keyCode:90,key:"Z",code:"KeyZ"},":":{keyCode:186,key:":",code:"Semicolon"},"<":{keyCode:188,key:"<",code:"Comma"},_:{keyCode:189,key:"_",code:"Minus"},">":{keyCode:190,key:">",code:"Period"},"?":{keyCode:191,key:"?",code:"Slash"},"~":{keyCode:192,key:"~",code:"Backquote"},"{":{keyCode:219,key:"{",code:"BracketLeft"},"|":{keyCode:220,key:"|",code:"Backslash"},"}":{keyCode:221,key:"}",code:"BracketRight"},'"':{keyCode:222,key:'"',code:"Quote"},SoftLeft:{key:"SoftLeft",code:"SoftLeft",location:4},SoftRight:{key:"SoftRight",code:"SoftRight",location:4},Camera:{keyCode:44,key:"Camera",code:"Camera",location:4},Call:{key:"Call",code:"Call",location:4},EndCall:{keyCode:95,key:"EndCall",code:"EndCall",location:4},VolumeDown:{keyCode:182,key:"VolumeDown",code:"VolumeDown",location:4},VolumeUp:{keyCode:183,key:"VolumeUp",code:"VolumeUp",location:4}},d=Object.entries(u).reduce((t,[r,n])=>{let i=r.toLowerCase();return i!==r&&(t[i]=n),t},{}),c=t=>{let r=t.toLowerCase();return d[r]?d[r].key:t},h="undefined"!=typeof window?/Mac|iPod|iPhone|iPad/.test(window.navigator.platform):"darwin"===import_browser.default.platform,f={return:u.Enter.key,enter:u.Enter.key,ctrl:h?u.Meta.key:u.Control.key,shift:u.Shift.key,alt:u.Alt.key,space:u.Space.key,"page down":u.PageDown.key,pagedown:u.PageDown.key,"page up":u.PageUp.key,pageup:u.PageUp.key};function p(t){return f[t.toLowerCase()]?[c(f[t.toLowerCase()])]:t.split(" ").map(t=>c(f[t.toLowerCase()]||t))}}}),init_vlm=__esm({"../../node_modules/.pnpm/@ui-tars+shared@1.2.3/node_modules/@ui-tars/shared/dist/constants/vlm.mjs"(){init_globals(),MIN_PIXELS=100*(IMAGE_FACTOR=28)*IMAGE_FACTOR,MAX_PIXELS_V1_0=2700*IMAGE_FACTOR*IMAGE_FACTOR,MAX_PIXELS_DOUBAO=5120*IMAGE_FACTOR*IMAGE_FACTOR,MAX_PIXELS_V1_5=16384*IMAGE_FACTOR*IMAGE_FACTOR,MAX_RATIO=200,vlm_UITarsModelVersion=function(t){return t.V1_0="1.0",t.V1_5="1.5",t.DOUBAO_1_5_15B="doubao-1.5-15B",t.DOUBAO_1_5_20B="doubao-1.5-20B",t}({})}}),init_constants5=__esm({"../../node_modules/.pnpm/@ui-tars+shared@1.2.3/node_modules/@ui-tars/shared/dist/constants/index.mjs"(){init_globals(),init_vlm()}}),init_agent=__esm({"../../node_modules/.pnpm/@ui-tars+shared@1.2.3/node_modules/@ui-tars/shared/dist/types/agent.mjs"(){init_globals()}}),init_data=__esm({"../../node_modules/.pnpm/@ui-tars+shared@1.2.3/node_modules/@ui-tars/shared/dist/types/data.mjs"(){init_globals()}}),init_share=__esm({"../../node_modules/.pnpm/@ui-tars+shared@1.2.3/node_modules/@ui-tars/shared/dist/types/share.mjs"(){init_globals()}}),init_types=__esm({"../../node_modules/.pnpm/@ui-tars+shared@1.2.3/node_modules/@ui-tars/shared/dist/types/index.mjs"(){init_globals(),init_constants5(),init_agent(),init_data(),init_share()}}),require_lodash=__commonJS({"../../node_modules/.pnpm/lodash.isnumber@3.0.3/node_modules/lodash.isnumber/index.js"(t,r){init_globals();var n=Object.prototype.toString;r.exports=function(t){return"number"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&"[object Number]"==n.call(t)}}});function roundByFactor(t,r){return Math.round(t/r)*r}function floorByFactor(t,r){return Math.floor(t/r)*r}function ceilByFactor(t,r){return Math.ceil(t/r)*r}function smartResizeForV15(t,r,n=MAX_RATIO,i=IMAGE_FACTOR,a=MIN_PIXELS,o=MAX_PIXELS_V1_5){if(Math.max(t,r)/Math.min(t,r)>n)return import_console_browserify.default.error(`absolute aspect ratio must be smaller than ${n}, got ${Math.max(t,r)/Math.min(t,r)}`),null;let s=Math.max(i,roundByFactor(r,i)),l=Math.max(i,roundByFactor(t,i));if(l*s>o){let n=Math.sqrt(t*r/o);l=floorByFactor(t/n,i),s=floorByFactor(r/n,i)}else if(l*s<a){let n=Math.sqrt(a/(t*r));l=ceilByFactor(t*n,i),s=ceilByFactor(r*n,i)}return[s,l]}function actionParser(t){let{prediction:r,factor:n,mode:i,screenContext:a,scaleFactor:o,modelVer:s}=t;return{parsed:parseActionVlm(r,Array.isArray(n)?n:[n,n],i,a,o,s)}}function parseActionVlm(t,r=[1e3,1e3],n="bc",i,a,o=vlm_UITarsModelVersion.V1_0){let s=null,l=null,u="",d=null;if(o===vlm_UITarsModelVersion.V1_5&&(null==i?void 0:i.height)&&(null==i?void 0:i.width)&&(d=smartResizeForV15(i.height,i.width)),t=t.trim(),"bc"===n){if(t.includes("Thought:")){let r=t.match(/Thought: ([\s\S]+?)(?=\s*Action[::]|$)/);r&&(l=r[1].trim())}else if(t.startsWith("Reflection:")){let r=t.match(/Reflection: ([\s\S]+?)Action_Summary: ([\s\S]+?)(?=\s*Action[::]|$)/);r&&(l=r[2].trim(),s=r[1].trim())}else if(t.startsWith("Action_Summary:")){let r=t.match(/Action_Summary: (.+?)(?=\s*Action[::]|$)/);r&&(l=r[1].trim())}if(["Action:","Action:"].some(r=>t.includes(r))){let r=t.split(/Action[::]/);u=r[r.length-1]}else u=t}else if("o1"===n){let r=t.match(/<Thought>\s*(.*?)\s*<\/Thought>/),n=t.match(/\nAction_Summary:\s*(.*?)\s*Action:/),i=t.match(/\nAction:\s*(.*?)\s*<\/Output>/);l=`${r?r[1]:null}
|
|
319
319
|
<Action_Summary>
|
|
320
|
-
${n?n[1]:null}`,u=(i?i[1]:null)||""}let c=u.split("\n\n"),h=[];for(let t of c){let n=parseAction(t.replace(/\n/g,String.raw`\n`).trimStart()),u="",c={};if(n)for(let[t,s]of(u=n.function,c={},Object.entries(n.args))){if(!s)continue;let n=s.trim();if(t.includes("start_box")||t.includes("end_box")){let s=n.replace(/[()[\]]/g,"").split(",").filter(t=>""!==t).map((t,n)=>{let i=n%2;return o===vlm_UITarsModelVersion.V1_5&&d?Number.parseFloat(t)/d[i]:Number.parseFloat(t)/r[i]});if(2===s.length&&s.push(s[0],s[1]),c[t.trim()]=JSON.stringify(s),(null==i?void 0:i.width)&&(null==i?void 0:i.height)){let n=t.includes("start_box")?"start_coords":"end_coords",[o,l,u=o,d=l]=s,[h,f]=r;c[n]=[o,l,u,d].every(import_lodash.default)?[Math.round((o+u)/2*(null==i?void 0:i.width)*h)/h*(a??1),Math.round((l+d)/2*(null==i?void 0:i.height)*f)/f*(a??1)]:[]}}else c[t.trim()]=n}h.push({reflection:s,thought:l||"",action_type:u,action_inputs:c})}return h}function parseAction(t){try{t=(t=t.replace(/<\|box_start\|>|<\|box_end\|>/g,"")).replace(/(?<!start_|end_)point=/g,"start_box=").replace(/start_point=/g,"start_box=").replace(/end_point=/g,"end_box=");let r=/^(\w+)\((.*)\)$/,n=t.trim().match(r);if(!n)throw Error("Not a function call");let[i,a,o]=n,s={};if(o.trim())for(let t of o.match(/([^,']|'[^']*')+/g)||[]){let[r,...n]=t.split("=");if(!r)continue;let i=n.join("=").trim().replace(/^['"]|['"]$/g,"");i.includes("<bbox>")&&(i=i.replace(/<bbox>|<\/bbox>/g,"").replace(/\s+/g,","),i=`(${i})`),i.includes("<point>")&&(i=i.replace(/<point>|<\/point>/g,"").replace(/\s+/g,","),i=`(${i})`),s[r.trim()]=i}return{function:a,args:s}}catch(r){return import_console_browserify.default.error(`Failed to parse action '${t}': ${r}`),null}}var init_actionParser=__esm({"../../node_modules/.pnpm/@ui-tars+action-parser@1.2.3/node_modules/@ui-tars/action-parser/dist/actionParser.mjs"(){init_globals(),init_types(),import_lodash=__toESM(require_lodash(),1)}}),dist_exports2={};__export(dist_exports2,{actionParser:()=>actionParser});var ExtensionType,normalizeExtension,normalizeExtensionPriority,extensions,unsafeEval,init_dist3=__esm({"../../node_modules/.pnpm/@ui-tars+action-parser@1.2.3/node_modules/@ui-tars/action-parser/dist/index.mjs"(){init_globals(),init_actionParser()}}),
|
|
320
|
+
${n?n[1]:null}`,u=(i?i[1]:null)||""}let c=u.split("\n\n"),h=[];for(let t of c){let n=parseAction(t.replace(/\n/g,String.raw`\n`).trimStart()),u="",c={};if(n)for(let[t,s]of(u=n.function,c={},Object.entries(n.args))){if(!s)continue;let n=s.trim();if(t.includes("start_box")||t.includes("end_box")){let s=n.replace(/[()[\]]/g,"").split(",").filter(t=>""!==t).map((t,n)=>{let i=n%2;return o===vlm_UITarsModelVersion.V1_5&&d?Number.parseFloat(t)/d[i]:Number.parseFloat(t)/r[i]});if(2===s.length&&s.push(s[0],s[1]),c[t.trim()]=JSON.stringify(s),(null==i?void 0:i.width)&&(null==i?void 0:i.height)){let n=t.includes("start_box")?"start_coords":"end_coords",[o,l,u=o,d=l]=s,[h,f]=r;c[n]=[o,l,u,d].every(import_lodash.default)?[Math.round((o+u)/2*(null==i?void 0:i.width)*h)/h*(a??1),Math.round((l+d)/2*(null==i?void 0:i.height)*f)/f*(a??1)]:[]}}else c[t.trim()]=n}h.push({reflection:s,thought:l||"",action_type:u,action_inputs:c})}return h}function parseAction(t){try{t=(t=t.replace(/<\|box_start\|>|<\|box_end\|>/g,"")).replace(/(?<!start_|end_)point=/g,"start_box=").replace(/start_point=/g,"start_box=").replace(/end_point=/g,"end_box=");let r=/^(\w+)\((.*)\)$/,n=t.trim().match(r);if(!n)throw Error("Not a function call");let[i,a,o]=n,s={};if(o.trim())for(let t of o.match(/([^,']|'[^']*')+/g)||[]){let[r,...n]=t.split("=");if(!r)continue;let i=n.join("=").trim().replace(/^['"]|['"]$/g,"");i.includes("<bbox>")&&(i=i.replace(/<bbox>|<\/bbox>/g,"").replace(/\s+/g,","),i=`(${i})`),i.includes("<point>")&&(i=i.replace(/<point>|<\/point>/g,"").replace(/\s+/g,","),i=`(${i})`),s[r.trim()]=i}return{function:a,args:s}}catch(r){return import_console_browserify.default.error(`Failed to parse action '${t}': ${r}`),null}}var init_actionParser=__esm({"../../node_modules/.pnpm/@ui-tars+action-parser@1.2.3/node_modules/@ui-tars/action-parser/dist/actionParser.mjs"(){init_globals(),init_types(),import_lodash=__toESM(require_lodash(),1)}}),dist_exports2={};__export(dist_exports2,{actionParser:()=>actionParser});var ExtensionType,normalizeExtension,normalizeExtensionPriority,extensions,unsafeEval,init_dist3=__esm({"../../node_modules/.pnpm/@ui-tars+action-parser@1.2.3/node_modules/@ui-tars/action-parser/dist/index.mjs"(){init_globals(),init_actionParser()}}),require_chunk_DDYIQHOA=__commonJS({"../core/dist/lib/chunk-DDYIQHOA.js"(t){let r;function n(t){return t&&t.__esModule?t:{default:t}}function i(t,r){return null!=t?t:r()}function a(t){let r,n=t[0],i=1;for(;i<t.length;){let a=t[i],o=t[i+1];if(i+=2,("optionalAccess"===a||"optionalCall"===a)&&null==n)return;"access"===a||"optionalAccess"===a?(r=n,n=o(n)):"call"!==a&&"optionalCall"!==a||(n=o((...t)=>n.call(r,...t)),r=void 0)}return n}init_globals(),Object.defineProperty(t,"__esModule",{value:!0});var o=require_sdk(),s=(init_src(),__toCommonJS(src_exports)),l=require_env(),u=require_logger(),d=require_utils5(),c=require_dist2(),h=require_cjs(),f=require_openai(),p=n(f),m=require_dist3(),g=require_constants(),b=require_extractor(),y=require_img(),_=((r=_||{})[r.ASSERT=0]="ASSERT",r[r.INSPECT_ELEMENT=1]="INSPECT_ELEMENT",r[r.EXTRACT_DATA=2]="EXTRACT_DATA",r[r.PLAN=3]="PLAN",r[r.DESCRIBE_ELEMENT=4]="DESCRIBE_ELEMENT",r);async function v(t,r){let{content:n,usage:i}=await W(t,r);return{content:n,usage:i}}var A=20,w=u.getDebug.call(void 0,"ai:common");function x(t,r,n){return"doubao-vision"===l.vlLocateMode.call(void 0)||"vlm-ui-tars"===l.vlLocateMode.call(void 0)?function(t,r,n){if(d.assert.call(void 0,r>0&&n>0,"width and height must be greater than 0 in doubao mode"),"string"==typeof t){d.assert.call(void 0,/^(\d+)\s(\d+)\s(\d+)\s(\d+)$/.test(t.trim()),`invalid bbox data string for doubao-vision mode: ${t}`);let i=t.split(" ");if(4===i.length)return[Math.round(Number(i[0])*r/1e3),Math.round(Number(i[1])*n/1e3),Math.round(Number(i[2])*r/1e3),Math.round(Number(i[3])*n/1e3)];throw Error(`invalid bbox data string for doubao-vision mode: ${t}`)}Array.isArray(t)&&Array.isArray(t[0])&&(t=t[0]);let i=[];if(Array.isArray(t)&&"string"==typeof t[0]?t.forEach(t=>{if("string"==typeof t&&t.includes(",")){let[r,n]=t.split(",");i.push(Number(r.trim()),Number(n.trim()))}else if("string"==typeof t&&t.includes(" ")){let[r,n]=t.split(" ");i.push(Number(r.trim()),Number(n.trim()))}else i.push(Number(t))}):i=t,4===i.length||5===i.length)return[Math.round(i[0]*r/1e3),Math.round(i[1]*n/1e3),Math.round(i[2]*r/1e3),Math.round(i[3]*n/1e3)];if(6===i.length||2===i.length||3===i.length||7===i.length)return[Math.max(0,Math.round(i[0]*r/1e3)-10),Math.max(0,Math.round(i[1]*n/1e3)-10),Math.min(r,Math.round(i[0]*r/1e3)+10),Math.min(n,Math.round(i[1]*n/1e3)+10)];if(8===t.length)return[Math.round(i[0]*r/1e3),Math.round(i[1]*n/1e3),Math.round(i[4]*r/1e3),Math.round(i[5]*n/1e3)];throw Error(`invalid bbox data for doubao-vision mode: ${JSON.stringify(t)} `)}(t,r,n):"gemini"===l.vlLocateMode.call(void 0)?function(t,r,n){let i=Math.round(t[1]*r/1e3),a=Math.round(t[0]*n/1e3);return[i,a,Math.round(t[3]*r/1e3),Math.round(t[2]*n/1e3)]}(t,r,n):function(t){if(t.length<2)throw Error(`invalid bbox data for qwen-vl mode: ${JSON.stringify(t)} `);return[Math.round(t[0]),Math.round(t[1]),"number"==typeof t[2]?Math.round(t[2]):Math.round(t[0]+A),"number"==typeof t[3]?Math.round(t[3]):Math.round(t[1]+A)]}(t)}function E(t,r,n,i=0,a=0){w("adaptBboxToRect",t,r,n,i,a);let[o,s,l,u]=x(t,r,n),d={left:o+i,top:s+a,width:l-o,height:u-s};return w("adaptBboxToRect, result=",d),d}var S=!1;function C(t,r){let n="doubao-vision"===l.vlLocateMode.call(void 0)?500:300,i=t.width<n?Math.ceil((n-t.width)/2):160,a=t.height<n?Math.ceil((n-t.height)/2):160;return t.left=Math.max(0,t.left-i),t.width=Math.min(t.width+2*i,r.width-t.left),t.top=Math.max(0,t.top-a),t.height=Math.min(t.height+2*a,r.height-t.top),t}async function I(t,r,n){let i=b.treeToList.call(void 0,r).filter(t=>t.attributes.nodeType!==g.NodeType.TEXT);return await y.compositeElementInfoImg.call(void 0,{inputImgBase64:t,elementsPositionInfo:i,size:n})}function T(t,r){let n=[];for(let r of t){let t=r.type,i=a([r,"access",t=>t.locate,"optionalAccess",t=>t.prompt]);if("Tap"===t)n.push({aiTap:i});else if("Hover"===t)n.push({aiHover:i});else if("Input"===t){let t=r.param;n.push({aiInput:t.value,locate:i})}else if("KeyboardPress"===t){let t=r.param;n.push({aiKeyboardPress:t.value,locate:i})}else if("Scroll"===t){let t=r.param;n.push({aiScroll:null,locate:i,direction:t.direction,scrollType:t.scrollType,distance:t.distance})}else if("Sleep"===t){let t=r.param;n.push({sleep:t.timeMs})}else"AndroidBackButton"===t||"AndroidHomeButton"===t||"AndroidRecentAppsButton"===t||"AndroidLongPress"===t||"AndroidPull"===t||"Error"===t||"Assert"===t||"AssertWithoutThrow"===t||"Finished"===t||import_console_browserify.default.warn(`Cannot convert action ${t} to yaml flow. This should be a bug of Midscene.`)}return r&&n.push({sleep:r}),n}function k(t){return"You are a senior testing engineer. User will give an assertion and a screenshot of a page. By carefully viewing the screenshot, please tell whether the assertion is truthy.\n\n"+(t.isUITars?`## Output Json String Format
|
|
321
321
|
\`\`\`
|
|
322
322
|
"{
|
|
323
323
|
"pass": <<is a boolean value from the enum [true, false], true means the assertion is truthy>>,
|
|
@@ -379,166 +379,94 @@ When no element is found and the description is not order-sensitive:
|
|
|
379
379
|
"errors": ["I can see ..., but {some element} is not found"]
|
|
380
380
|
}
|
|
381
381
|
\`\`\`
|
|
382
|
-
`:'\n## Role:\nYou are an expert in software page image (2D) and page element text analysis.\n\n## Objective:\n- Identify elements in screenshots and text that match the user\'s description.\n- Return JSON data containing the selection reason and element ID.\n- Determine whether the user\'s description is order-sensitive (e.g., contains phrases like \'the third item in the list\', \'the last button\', etc.).\n\n## Skills:\n- Image analysis and recognition\n- Multilingual text understanding\n- Software UI design and testing\n\n## Workflow:\n1. Receive the user\'s element description, screenshot, and element description information. Note that the text may contain non-English characters (e.g., Chinese), indicating that the application may be non-English.\n2. Based on the user\'s description, locate the target element ID in the list of element descriptions and the screenshot.\n3. Found the required number of elements\n4. Return JSON data containing the selection reason and element ID.\n5. Judge whether the user\'s description is order-sensitive (see below for definition and examples).\n\n## Constraints:\n- Strictly adhere to the specified location when describing the required element; do not select elements from other locations.\n- Elements in the image with NodeType other than "TEXT Node" have been highlighted to identify the element among multiple non-text elements.\n- Accurately identify element information based on the user\'s description and return the corresponding element ID from the element description information, not extracted from the image.\n- If no elements are found, the "elements" array should be empty.\n- The returned data must conform to the specified JSON format.\n- The returned value id information must use the id from element info (important: **use id not indexId, id is hash content**)\n\n## Order-Sensitive Definition:\n- If the description contains phrases like "the third item in the list", "the last button", "the first input box", "the second row", etc., it is order-sensitive (isOrderSensitive = true).\n- If the description is like "confirm button", "search box", "password input", etc., it is not order-sensitive (isOrderSensitive = false).\n\n## Output Format:\n\nPlease return the result in JSON format as follows:\n\n```json\n{\n "elements": [\n // If no matching elements are found, return an empty array []\n {\n "reason": "PLACEHOLDER", // The thought process for finding the element, replace PLACEHOLDER with your thought process\n "text": "PLACEHOLDER", // Replace PLACEHOLDER with the text of elementInfo, if none, leave empty\n "id": "PLACEHOLDER" // Replace PLACEHOLDER with the ID (important: **use id not indexId, id is hash content**) of elementInfo\n }\n // More elements...\n ],\n "isOrderSensitive": true, // or false, depending on the user\'s description\n "errors": [] // Array of strings containing any error messages\n}\n```\n\n## Example:\nExample 1:\nInput Example:\n```json\n// Description: "Shopping cart icon in the upper right corner"\n{\n "description": "PLACEHOLDER", // Description of the target element\n "screenshot": "path/screenshot.png",\n "text": \'{\n "pageSize": {\n "width": 400, // Width of the page\n "height": 905 // Height of the page\n },\n "elementInfos": [\n {\n "id": "1231", // ID of the element\n "indexId": "0", // Index of the element,The image is labeled to the left of the element\n "attributes": { // Attributes of the element\n "nodeType": "IMG Node", // Type of element, types include: TEXT Node, IMG Node, BUTTON Node, INPUT Node\n "src": "https://ap-southeast-3.m",\n "class": ".img"\n },\n "content": "", // Text content of the element\n "rect": {\n "left": 280, // Distance from the left side of the page\n "top": 8, // Distance from the top of the page\n "width": 44, // Width of the element\n "height": 44 // Height of the element\n }\n },\n {\n "id": "66551", // ID of the element\n "indexId": "1", // Index of the element,The image is labeled to the left of the element\n "attributes": { // Attributes of the element\n "nodeType": "IMG Node", // Type of element, types include: TEXT Node, IMG Node, BUTTON Node, INPUT Node\n "src": "data:image/png;base64,iVBORw0KGgoAAAANSU...",\n "class": ".icon"\n },\n "content": "", // Text content of the element\n "rect": {\n "left": 350, // Distance from the left side of the page\n "top": 16, // Distance from the top of the page\n "width": 25, // Width of the element\n "height": 25 // Height of the element\n }\n },\n ...\n {\n "id": "12344",\n "indexId": "2", // Index of the element,The image is labeled to the left of the element\n "attributes": {\n "nodeType": "TEXT Node",\n "class": ".product-name"\n },\n "center": [\n 288,\n 834\n ],\n "content": "Mango Drink",\n "rect": {\n "left": 188,\n "top": 827,\n "width": 199,\n "height": 13\n }\n },\n ...\n ]\n }\n \'\n}\n```\nOutput Example:\n```json\n{\n "elements": [\n {\n // Describe the reason for finding this element, replace with actual value in practice\n "reason": "Reason for finding element 4: It is located in the upper right corner, is an image type, and according to the screenshot, it is a shopping cart icon button",\n "text": "",\n // ID(**use id not indexId**) of this element, replace with actual value in practice, **use id not indexId**\n "id": "1231"\n }\n ],\n "isOrderSensitive": true,\n "errors": []\n}\n```\n \n '}var j={type:"json_schema",json_schema:{name:"find_elements",strict:!0,schema:{type:"object",properties:{elements:{type:"array",items:{type:"object",properties:{reason:{type:"string",description:"Reason for finding this element"},text:{type:"string",description:"Text content of the element"},id:{type:"string",description:"ID of this element"}},required:["reason","text","id"],additionalProperties:!1},description:"List of found elements"},isOrderSensitive:{type:"boolean",description:"Whether the targetElementDescription is order-sensitive (true/false)"},errors:{type:"array",items:{type:"string"},description:"List of error messages, if any"}},required:["elements","isOrderSensitive","errors"],additionalProperties:!1}}},N=new(0,R.PromptTemplate)({template:"\nHere is the item user want to find:\n=====================================\n{targetElementDescription}\n=====================================\n\n{pageDescription}\n ",inputVariables:["pageDescription","targetElementDescription"]})
|
|
383
|
-
|
|
384
|
-
${
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
You are a versatile professional in software UI automation. Your outstanding contributions will impact the user experience of billions of users.
|
|
388
|
-
|
|
389
|
-
## Objective
|
|
390
|
-
|
|
391
|
-
- Decompose the instruction user asked into a series of actions
|
|
392
|
-
- Locate the target element if possible
|
|
393
|
-
- If the instruction cannot be accomplished, give a further plan.
|
|
394
|
-
|
|
395
|
-
## Workflow
|
|
396
|
-
|
|
397
|
-
1. Receive the screenshot, element description of screenshot(if any), user's instruction and previous logs.
|
|
398
|
-
2. Decompose the user's task into a sequence of actions, and place it in the \`actions\` field. There are different types of actions (Tap / Hover / Input / KeyboardPress / Scroll / FalsyConditionStatement / Sleep ${"android"===t?"/ AndroidBackButton / AndroidHomeButton / AndroidRecentAppsButton / AndroidLongPress / AndroidPull":""}). The "About the action" section below will give you more details.
|
|
399
|
-
3. Precisely locate the target element if it's already shown in the screenshot, put the location info in the \`locate\` field of the action.
|
|
400
|
-
4. If some target elements is not shown in the screenshot, consider the user's instruction is not feasible on this page. Follow the next steps.
|
|
401
|
-
5. Consider whether the user's instruction will be accomplished after all the actions
|
|
402
|
-
- If yes, set \`taskWillBeAccomplished\` to true
|
|
403
|
-
- If no, don't plan more actions by closing the array. Get ready to reevaluate the task. Some talent people like you will handle this. Give him a clear description of what have been done and what to do next. Put your new plan in the \`furtherPlan\` field. The "How to compose the \`taskWillBeAccomplished\` and \`furtherPlan\` fields" section will give you more details.
|
|
404
|
-
|
|
405
|
-
## Constraints
|
|
406
|
-
|
|
407
|
-
- All the actions you composed MUST be based on the page context information you get.
|
|
408
|
-
- Trust the "What have been done" field about the task (if any), don't repeat actions in it.
|
|
409
|
-
- Respond only with valid JSON. Do not write an introduction or summary or markdown prefix like \`\`\`json\`\`\`.
|
|
410
|
-
- If the screenshot and the instruction are totally irrelevant, set reason in the \`error\` field.
|
|
411
|
-
|
|
412
|
-
## About the \`actions\` field
|
|
413
|
-
|
|
414
|
-
The \`locate\` param is commonly used in the \`param\` field of the action, means to locate the target element to perform the action, it conforms to the following scheme:
|
|
415
|
-
|
|
416
|
-
type LocateParam = {{
|
|
417
|
-
"id": string, // the id of the element found. It should either be the id marked with a rectangle in the screenshot or the id described in the description.
|
|
418
|
-
"prompt"?: string // the description of the element to find. It can only be omitted when locate is null.
|
|
419
|
-
}} | null // If it's not on the page, the LocateParam should be null
|
|
420
|
-
|
|
421
|
-
## Supported actions
|
|
422
|
-
|
|
423
|
-
Each action has a \`type\` and corresponding \`param\`. To be detailed:
|
|
424
|
-
- type: 'Tap'
|
|
425
|
-
* {{ ${z} }}
|
|
426
|
-
- type: 'RightClick'
|
|
427
|
-
* {{ ${z} }}
|
|
428
|
-
- type: 'Hover'
|
|
429
|
-
* {{ ${z} }}
|
|
430
|
-
- type: 'Input', replace the value in the input field
|
|
431
|
-
* {{ ${z}, param: {{ value: string }} }}
|
|
432
|
-
* \`value\` is the final value that should be filled in the input field. No matter what modifications are required, just provide the final value user should see after the action is done.
|
|
433
|
-
- type: 'KeyboardPress', press a key
|
|
434
|
-
* {{ param: {{ value: string }} }}
|
|
435
|
-
- type: 'Scroll', scroll up or down.
|
|
436
|
-
* {{
|
|
437
|
-
${z},
|
|
438
|
-
param: {{
|
|
439
|
-
direction: 'down'(default) | 'up' | 'right' | 'left',
|
|
440
|
-
scrollType: 'once' (default) | 'untilBottom' | 'untilTop' | 'untilRight' | 'untilLeft',
|
|
441
|
-
distance: null | number
|
|
442
|
-
}}
|
|
443
|
-
}}
|
|
444
|
-
* To scroll some specific element, put the element at the center of the region in the \`locate\` field. If it's a page scroll, put \`null\` in the \`locate\` field.
|
|
445
|
-
* \`param\` is required in this action. If some fields are not specified, use direction \`down\`, \`once\` scroll type, and \`null\` distance.
|
|
446
|
-
* {{ param: {{ button: 'Back' | 'Home' | 'RecentApp' }} }}
|
|
447
|
-
- type: 'ExpectedFalsyCondition'
|
|
448
|
-
* {{ param: {{ reason: string }} }}
|
|
449
|
-
* use this action when the conditional statement talked about in the instruction is falsy.
|
|
450
|
-
- type: 'Sleep'
|
|
451
|
-
* {{ param: {{ timeMs: number }} }}
|
|
452
|
-
${"android"===t?"- type: 'AndroidBackButton', trigger the system \"back\" operation on Android devices\n * {{ param: {{}} }}\n- type: 'AndroidHomeButton', trigger the system \"home\" operation on Android devices\n * {{ param: {{}} }}\n- type: 'AndroidRecentAppsButton', trigger the system \"recent apps\" operation on Android devices\n * {{ param: {{}} }}\n- type: 'AndroidLongPress', trigger a long press on the screen at specified coordinates on Android devices\n * {{ param: {{ x: number, y: number, duration?: number }} }}\n- type: 'AndroidPull', trigger pull down to refresh or pull up actions on Android devices\n * {{ param: {{ direction: 'up' | 'down', startPoint?: {{ x: number, y: number }}, distance?: number, duration?: number }} }}":""}
|
|
453
|
-
`,H=`
|
|
382
|
+
`:'\n## Role:\nYou are an expert in software page image (2D) and page element text analysis.\n\n## Objective:\n- Identify elements in screenshots and text that match the user\'s description.\n- Return JSON data containing the selection reason and element ID.\n- Determine whether the user\'s description is order-sensitive (e.g., contains phrases like \'the third item in the list\', \'the last button\', etc.).\n\n## Skills:\n- Image analysis and recognition\n- Multilingual text understanding\n- Software UI design and testing\n\n## Workflow:\n1. Receive the user\'s element description, screenshot, and element description information. Note that the text may contain non-English characters (e.g., Chinese), indicating that the application may be non-English.\n2. Based on the user\'s description, locate the target element ID in the list of element descriptions and the screenshot.\n3. Found the required number of elements\n4. Return JSON data containing the selection reason and element ID.\n5. Judge whether the user\'s description is order-sensitive (see below for definition and examples).\n\n## Constraints:\n- Strictly adhere to the specified location when describing the required element; do not select elements from other locations.\n- Elements in the image with NodeType other than "TEXT Node" have been highlighted to identify the element among multiple non-text elements.\n- Accurately identify element information based on the user\'s description and return the corresponding element ID from the element description information, not extracted from the image.\n- If no elements are found, the "elements" array should be empty.\n- The returned data must conform to the specified JSON format.\n- The returned value id information must use the id from element info (important: **use id not indexId, id is hash content**)\n\n## Order-Sensitive Definition:\n- If the description contains phrases like "the third item in the list", "the last button", "the first input box", "the second row", etc., it is order-sensitive (isOrderSensitive = true).\n- If the description is like "confirm button", "search box", "password input", etc., it is not order-sensitive (isOrderSensitive = false).\n\n## Output Format:\n\nPlease return the result in JSON format as follows:\n\n```json\n{\n "elements": [\n // If no matching elements are found, return an empty array []\n {\n "reason": "PLACEHOLDER", // The thought process for finding the element, replace PLACEHOLDER with your thought process\n "text": "PLACEHOLDER", // Replace PLACEHOLDER with the text of elementInfo, if none, leave empty\n "id": "PLACEHOLDER" // Replace PLACEHOLDER with the ID (important: **use id not indexId, id is hash content**) of elementInfo\n }\n // More elements...\n ],\n "isOrderSensitive": true, // or false, depending on the user\'s description\n "errors": [] // Array of strings containing any error messages\n}\n```\n\n## Example:\nExample 1:\nInput Example:\n```json\n// Description: "Shopping cart icon in the upper right corner"\n{\n "description": "PLACEHOLDER", // Description of the target element\n "screenshot": "path/screenshot.png",\n "text": \'{\n "pageSize": {\n "width": 400, // Width of the page\n "height": 905 // Height of the page\n },\n "elementInfos": [\n {\n "id": "1231", // ID of the element\n "indexId": "0", // Index of the element,The image is labeled to the left of the element\n "attributes": { // Attributes of the element\n "nodeType": "IMG Node", // Type of element, types include: TEXT Node, IMG Node, BUTTON Node, INPUT Node\n "src": "https://ap-southeast-3.m",\n "class": ".img"\n },\n "content": "", // Text content of the element\n "rect": {\n "left": 280, // Distance from the left side of the page\n "top": 8, // Distance from the top of the page\n "width": 44, // Width of the element\n "height": 44 // Height of the element\n }\n },\n {\n "id": "66551", // ID of the element\n "indexId": "1", // Index of the element,The image is labeled to the left of the element\n "attributes": { // Attributes of the element\n "nodeType": "IMG Node", // Type of element, types include: TEXT Node, IMG Node, BUTTON Node, INPUT Node\n "src": "data:image/png;base64,iVBORw0KGgoAAAANSU...",\n "class": ".icon"\n },\n "content": "", // Text content of the element\n "rect": {\n "left": 350, // Distance from the left side of the page\n "top": 16, // Distance from the top of the page\n "width": 25, // Width of the element\n "height": 25 // Height of the element\n }\n },\n ...\n {\n "id": "12344",\n "indexId": "2", // Index of the element,The image is labeled to the left of the element\n "attributes": {\n "nodeType": "TEXT Node",\n "class": ".product-name"\n },\n "center": [\n 288,\n 834\n ],\n "content": "Mango Drink",\n "rect": {\n "left": 188,\n "top": 827,\n "width": 199,\n "height": 13\n }\n },\n ...\n ]\n }\n \'\n}\n```\nOutput Example:\n```json\n{\n "elements": [\n {\n // Describe the reason for finding this element, replace with actual value in practice\n "reason": "Reason for finding element 4: It is located in the upper right corner, is an image type, and according to the screenshot, it is a shopping cart icon button",\n "text": "",\n // ID(**use id not indexId**) of this element, replace with actual value in practice, **use id not indexId**\n "id": "1231"\n }\n ],\n "isOrderSensitive": true,\n "errors": []\n}\n```\n \n '}var j={type:"json_schema",json_schema:{name:"find_elements",strict:!0,schema:{type:"object",properties:{elements:{type:"array",items:{type:"object",properties:{reason:{type:"string",description:"Reason for finding this element"},text:{type:"string",description:"Text content of the element"},id:{type:"string",description:"ID of this element"}},required:["reason","text","id"],additionalProperties:!1},description:"List of found elements"},isOrderSensitive:{type:"boolean",description:"Whether the targetElementDescription is order-sensitive (true/false)"},errors:{type:"array",items:{type:"string"},description:"List of error messages, if any"}},required:["elements","isOrderSensitive","errors"],additionalProperties:!1}}},N=new(0,R.PromptTemplate)({template:"\nHere is the item user want to find:\n=====================================\n{targetElementDescription}\n=====================================\n\n{pageDescription}\n ",inputVariables:["pageDescription","targetElementDescription"]}),B=n(require_assert()),L='"error"?: string, // Error messages about unexpected situations, if any. Only think it is an error when the situation is not foreseeable according to the instruction. Use the same language as the user\'s instruction.\n "more_actions_needed_by_instruction": boolean, // Consider if there is still more action(s) to do after the action in "Log" is done, according to the instruction. If so, set this field to true. Otherwise, set it to false.',D=(t,r)=>{let n=" ",i="";"required"===t.location?i=r:"optional"===t.location?i=`${r} | null`:!1===t.location&&(i="");let a=i?`- ${i}`:"";t.whatToLocate&&(i?i+=` // ${t.whatToLocate}`:import_console_browserify.default.warn(`whatToLocate is provided for action ${t.name}, but location is not required or optional. The whatToLocate will be ignored.`));let o="";t.paramSchema&&(o=`- param: ${t.paramSchema}`),t.paramDescription&&(B.default.call(void 0,o,`paramSchema is required when paramDescription is provided for action ${t.name}, but got ${t.paramSchema}`),o+=` // ${t.paramDescription}`);let s=[o,a].filter(Boolean);return`- ${t.name}, ${t.description}
|
|
383
|
+
${n}- type: "${t.name}"
|
|
384
|
+
${n}${s.join(`
|
|
385
|
+
${n}`)}
|
|
386
|
+
`.trim()},U=`
|
|
454
387
|
## Output JSON Format:
|
|
455
388
|
|
|
456
389
|
The JSON format is as follows:
|
|
457
390
|
|
|
458
|
-
{
|
|
391
|
+
{
|
|
459
392
|
"actions": [
|
|
460
393
|
// ... some actions
|
|
461
394
|
],
|
|
462
|
-
"log": string, // Log what the next actions you can do according to the screenshot and the instruction. The typical log looks like "Now i want to use action '{
|
|
463
|
-
${
|
|
464
|
-
}
|
|
395
|
+
"log": string, // Log what the next actions you can do according to the screenshot and the instruction. The typical log looks like "Now i want to use action '{ action-type }' to do ..". If no action should be done, log the reason. ". Use the same language as the user's instruction.
|
|
396
|
+
${L}
|
|
397
|
+
}
|
|
465
398
|
|
|
466
399
|
## Examples
|
|
467
400
|
|
|
468
401
|
### Example: Decompose a task
|
|
469
402
|
|
|
470
|
-
When
|
|
403
|
+
When you received the following information:
|
|
404
|
+
|
|
405
|
+
* Instruction: 'Click the language switch button, wait 1s, click "English"'
|
|
406
|
+
* Logs: null
|
|
407
|
+
* Page Context (screenshot and description) shows: There is a language switch button, and the "English" option is not shown in the screenshot now.
|
|
471
408
|
|
|
472
409
|
By viewing the page screenshot and description, you should consider this and output the JSON:
|
|
473
410
|
|
|
474
|
-
* The
|
|
475
|
-
* The language switch button is shown in the screenshot,
|
|
411
|
+
* The user intent is: tap the switch button, sleep, and tap the 'English' option
|
|
412
|
+
* The language switch button is shown in the screenshot, and can be located by the page description or the id marked with a rectangle. So we can plan a Tap action to do this.
|
|
413
|
+
* Plan a Sleep action to wait for 1 second to ensure the language options are displayed.
|
|
476
414
|
* The "English" option button is not shown in the screenshot now, it means it may only show after the previous actions are finished. So don't plan any action to do this.
|
|
477
415
|
* Log what these action do: Click the language switch button to open the language options. Wait for 1 second.
|
|
478
|
-
* The task cannot be accomplished (because
|
|
416
|
+
* The task cannot be accomplished (because the last tapping action is not finished yet), so the \`more_actions_needed_by_instruction\` field is true. The \`error\` field is null.
|
|
479
417
|
|
|
480
|
-
{
|
|
418
|
+
{
|
|
481
419
|
"actions":[
|
|
482
|
-
{
|
|
483
|
-
"type": "Tap",
|
|
420
|
+
{
|
|
484
421
|
"thought": "Click the language switch button to open the language options.",
|
|
422
|
+
"type": "Tap",
|
|
485
423
|
"param": null,
|
|
486
|
-
"locate": {
|
|
487
|
-
}
|
|
488
|
-
{
|
|
489
|
-
"type": "Sleep",
|
|
424
|
+
"locate": { id: "c81c4e9a33", prompt: "The language switch button" }},
|
|
425
|
+
},
|
|
426
|
+
{
|
|
490
427
|
"thought": "Wait for 1 second to ensure the language options are displayed.",
|
|
491
|
-
"
|
|
492
|
-
|
|
428
|
+
"type": "Sleep",
|
|
429
|
+
"param": { "timeMs": 1000 },
|
|
430
|
+
}
|
|
493
431
|
],
|
|
494
432
|
"error": null,
|
|
495
433
|
"more_actions_needed_by_instruction": true,
|
|
496
434
|
"log": "Click the language switch button to open the language options. Wait for 1 second",
|
|
497
|
-
}
|
|
435
|
+
}
|
|
498
436
|
|
|
499
437
|
### Example: What NOT to do
|
|
500
438
|
Wrong output:
|
|
501
|
-
{
|
|
439
|
+
{
|
|
502
440
|
"actions":[
|
|
503
|
-
{
|
|
504
|
-
"type": "Tap",
|
|
441
|
+
{
|
|
505
442
|
"thought": "Click the language switch button to open the language options.",
|
|
443
|
+
"type": "Tap",
|
|
506
444
|
"param": null,
|
|
507
|
-
"locate": {
|
|
508
|
-
{
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
{
|
|
512
|
-
"type": "Tap",
|
|
445
|
+
"locate": {
|
|
446
|
+
{ "id": "c81c4e9a33" }, // WRONG: prompt is missing, this is not a valid LocateParam
|
|
447
|
+
}
|
|
448
|
+
},
|
|
449
|
+
{
|
|
513
450
|
"thought": "Click the English option",
|
|
451
|
+
"type": "Tap",
|
|
514
452
|
"param": null,
|
|
515
453
|
"locate": null, // This means the 'English' option is not shown in the screenshot, the task cannot be accomplished
|
|
516
|
-
}
|
|
454
|
+
}
|
|
517
455
|
],
|
|
518
456
|
"more_actions_needed_by_instruction": false, // WRONG: should be true
|
|
519
457
|
"log": "Click the language switch button to open the language options",
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
Reason:
|
|
523
|
-
* The \`prompt\` is missing in the first 'Locate' action
|
|
524
|
-
* Since the option button is not shown in the screenshot, there are still more actions to be done, so the \`more_actions_needed_by_instruction\` field should be true
|
|
525
|
-
`;async function q({pageType:t,vlMode:r}){if(r)return(({pageType:t,vlMode:r})=>`
|
|
458
|
+
}
|
|
459
|
+
`;async function F({actionSpace:t,vlMode:r}){return r?(({actionSpace:t,vlMode:r})=>{let n=t.map(t=>t.name).join(", "),i=t.map(t=>D(t,`locate${"required"===t.location?"":"?"}: {bbox: [number, number, number, number], prompt: string }`)).join("\n");return`
|
|
526
460
|
Target: User will give you a screenshot, an instruction and some previous logs indicating what have been done. Please tell what the next one action is (or null if no action should be done) to do the tasks the instruction requires.
|
|
527
461
|
|
|
528
462
|
Restriction:
|
|
529
463
|
- Don't give extra actions or plans beyond the instruction. ONLY plan for what the instruction requires. For example, don't try to submit the form if the instruction is only to fill something.
|
|
530
|
-
- Always give ONLY ONE action in \`log\` field (or null if no action should be done), instead of multiple actions. Supported actions are
|
|
464
|
+
- Always give ONLY ONE action in \`log\` field (or null if no action should be done), instead of multiple actions. Supported actions are ${n}.
|
|
531
465
|
- Don't repeat actions in the previous logs.
|
|
532
466
|
- Bbox is the bounding box of the element to be located. It's an array of 4 numbers, representing ${O(r)}.
|
|
533
467
|
|
|
534
468
|
Supporting actions:
|
|
535
|
-
|
|
536
|
-
- RightClick: { type: "RightClick", ${F} }
|
|
537
|
-
- Hover: { type: "Hover", ${F} }
|
|
538
|
-
- Input: { type: "Input", ${F}, param: { value: string } } // Replace the input field with a new value. \`value\` is the final that should be filled in the input box. No matter what modifications are required, just provide the final value to replace the existing input value. Giving a blank string means clear the input field.
|
|
539
|
-
- KeyboardPress: { type: "KeyboardPress", param: { value: string } }
|
|
540
|
-
- Scroll: { type: "Scroll", ${F} | null, param: { direction: 'down'(default) | 'up' | 'right' | 'left', scrollType: 'once' (default) | 'untilBottom' | 'untilTop' | 'untilRight' | 'untilLeft', distance: null | number }} // locate is the element to scroll. If it's a page scroll, put \`null\` in the \`locate\` field.
|
|
541
|
-
${"android"===t?'- AndroidBackButton: { type: "AndroidBackButton", param: {} }\n- AndroidHomeButton: { type: "AndroidHomeButton", param: {} }\n- AndroidRecentAppsButton: { type: "AndroidRecentAppsButton", param: {} }\n- AndroidLongPress: { type: "AndroidLongPress", param: { x: number, y: number, duration?: number } }\n- AndroidPull: { type: "AndroidPull", param: { direction: \'up\' | \'down\', startPoint?: { x: number, y: number }, distance?: number, duration?: number } } // Pull down to refresh (direction: \'down\') or pull up to load more (direction: \'up\')':""}
|
|
469
|
+
${i}
|
|
542
470
|
|
|
543
471
|
Field description:
|
|
544
472
|
* The \`prompt\` field inside the \`locate\` field is a short description that could be used to locate the element.
|
|
@@ -546,8 +474,8 @@ Field description:
|
|
|
546
474
|
Return in JSON format:
|
|
547
475
|
{
|
|
548
476
|
"what_the_user_wants_to_do_next_by_instruction": string, // What the user wants to do according to the instruction and previous logs.
|
|
549
|
-
"log": string, // Log what the next one action (ONLY ONE!) you can do according to the screenshot and the instruction. The typical log looks like "Now i want to use action '{
|
|
550
|
-
${
|
|
477
|
+
"log": string, // Log what the next one action (ONLY ONE!) you can do according to the screenshot and the instruction. The typical log looks like "Now i want to use action '{ action-type }' to do .. first". If no action should be done, log the reason. ". Use the same language as the user's instruction.
|
|
478
|
+
${L}
|
|
551
479
|
"action":
|
|
552
480
|
{
|
|
553
481
|
// one of the supporting actions
|
|
@@ -572,10 +500,53 @@ this and output the JSON:
|
|
|
572
500
|
}
|
|
573
501
|
}
|
|
574
502
|
}
|
|
575
|
-
`)({
|
|
503
|
+
`})({actionSpace:t,vlMode:r}):`${(({actionSpace:t})=>`
|
|
504
|
+
## Role
|
|
505
|
+
|
|
506
|
+
You are a versatile professional in software UI automation. Your outstanding contributions will impact the user experience of billions of users.
|
|
507
|
+
|
|
508
|
+
## Objective
|
|
509
|
+
|
|
510
|
+
- Decompose the instruction user asked into a series of actions
|
|
511
|
+
- Locate the target element if possible
|
|
512
|
+
- If the instruction cannot be accomplished, give a further plan.
|
|
513
|
+
|
|
514
|
+
## Workflow
|
|
576
515
|
|
|
577
|
-
|
|
578
|
-
Please check your config.`);r=new(0,p.default)({baseURL:l.getAIConfig.call(void 0,l.OPENAI_BASE_URL),apiKey:l.getAIConfig.call(void 0,l.OPENAI_API_KEY),httpAgent:n,...a,defaultHeaders:{...i([a,"optionalAccess",t=>t.defaultHeaders])||{},[l.MIDSCENE_API_TYPE]:t.toString()},dangerouslyAllowBrowser:!0})}if(r&&l.getAIConfigInBoolean.call(void 0,l.MIDSCENE_LANGSMITH_DEBUG)){if(d.ifInBrowser)throw Error("langsmith is not supported in browser");import_console_browserify.default.log("DEBUGGING MODE: langsmith wrapper enabled");let{wrapOpenAI:t}=await Promise.resolve().then(()=>require_wrappers3());r=t(r)}if(void 0!==r)return{completion:r.chat.completions,style:"openai"};if(l.getAIConfig.call(void 0,l.MIDSCENE_USE_ANTHROPIC_SDK)){let t=l.getAIConfig.call(void 0,l.ANTHROPIC_API_KEY);d.assert.call(void 0,t,"ANTHROPIC_API_KEY is required"),r=new(0,o.Anthropic)({apiKey:t,httpAgent:n,dangerouslyAllowBrowser:!0})}if(void 0!==r&&r.messages)return{completion:r.messages,style:"anthropic"};throw Error("Openai SDK or Anthropic SDK is not initialized")}async function Z(t,r,a,o){d.assert.call(void 0,function(){let t=l.getAIConfig.call(void 0,l.OPENAI_API_KEY),r=l.getAIConfig.call(void 0,l.MIDSCENE_USE_AZURE_OPENAI),n=l.getAIConfig.call(void 0,l.ANTHROPIC_API_KEY),i=l.getAIConfig.call(void 0,l.MIDSCENE_OPENAI_INIT_CONFIG_JSON);return!!t||!!r||!!n||!!i}(),"Cannot find config for AI model service. If you are using a self-hosted model without validating the API key, please set `OPENAI_API_KEY` to any non-null value. https://midscenejs.com/model-provider.html");let{completion:s,style:c}=await K({AIActionTypeValue:r}),h=l.getAIConfig.call(void 0,l.OPENAI_MAX_TOKENS),f=u.getDebug.call(void 0,"ai:call"),p=u.getDebug.call(void 0,"ai:profile:stats"),m=u.getDebug.call(void 0,"ai:profile:detail"),g=Date.now(),b=$(),y=i([o,"optionalAccess",t=>t.stream])&&i([o,"optionalAccess",t=>t.onChunk]),_,v,A,w="",x={temperature:.1*("vlm-ui-tars"!==l.vlLocateMode.call(void 0)),stream:!!y,max_tokens:"number"==typeof h?h:Number.parseInt(h||"2048",10),..."qwen-vl"===l.vlLocateMode.call(void 0)?{vl_high_resolution_images:!0}:{}};try{if("openai"===c){if(f(`sending ${y?"streaming ":""}request to ${b}`),y){for await(let r of(await s.create({model:b,messages:t,response_format:a,...x},{stream:!0}))){let t=i([r,"access",t=>t.choices,"optionalAccess",t=>t[0],"optionalAccess",t=>t.delta,"optionalAccess",t=>t.content])||"",a=i([r,"access",t=>t.choices,"optionalAccess",t=>t[0],"optionalAccess",t=>t.delta,"optionalAccess",t=>t.reasoning_content])||"";if(r.usage&&(v=r.usage),t||a){w+=t;let r={content:t,reasoning_content:a,accumulated:w,isComplete:!1,usage:void 0};o.onChunk(r)}if(i([r,"access",t=>t.choices,"optionalAccess",t=>t[0],"optionalAccess",t=>t.finish_reason])){if(A=Date.now()-g,!v){let t=Math.max(1,Math.floor(w.length/4));v={prompt_tokens:t,completion_tokens:t,total_tokens:2*t}}let t={content:"",accumulated:w,reasoning_content:"",isComplete:!0,usage:{prompt_tokens:n(v.prompt_tokens,()=>0),completion_tokens:n(v.completion_tokens,()=>0),total_tokens:n(v.total_tokens,()=>0),time_cost:n(A,()=>0)}};o.onChunk(t);break}}_=w,p(`streaming model, ${b}, mode, ${l.vlLocateMode.call(void 0)||"default"}, cost-ms, ${A}`)}else{let r=await s.create({model:b,messages:t,response_format:a,...x});A=Date.now()-g,p(`model, ${b}, mode, ${l.vlLocateMode.call(void 0)||"default"}, ui-tars-version, ${l.uiTarsModelVersion.call(void 0)}, prompt-tokens, ${i([r,"access",t=>t.usage,"optionalAccess",t=>t.prompt_tokens])||""}, completion-tokens, ${i([r,"access",t=>t.usage,"optionalAccess",t=>t.completion_tokens])||""}, total-tokens, ${i([r,"access",t=>t.usage,"optionalAccess",t=>t.total_tokens])||""}, cost-ms, ${A}, requestId, ${r._request_id||""}`),m(`model usage detail: ${JSON.stringify(r.usage)}`),d.assert.call(void 0,r.choices,`invalid response from LLM service: ${JSON.stringify(r)}`),_=r.choices[0].message.content,v=r.usage}f(`response: ${_}`),d.assert.call(void 0,_,"empty content")}else if("anthropic"===c){let r=t=>{if("image_url"===t.type){let r=t.image_url.url;return d.assert.call(void 0,r,"image_url is required"),{source:{type:"base64",media_type:r.includes("data:image/png;base64,")?"image/png":"image/jpeg",data:r.split(",")[1]},type:"image"}}return t};if(y){for await(let l of(await s.create({model:b,system:"You are a versatile professional in software UI automation",messages:t.map(t=>({role:"user",content:Array.isArray(t.content)?t.content.map(r):t.content})),response_format:a,...x}))){let t=i([l,"access",t=>t.delta,"optionalAccess",t=>t.text])||"";if(t){w+=t;let r={content:t,accumulated:w,reasoning_content:"",isComplete:!1,usage:void 0};o.onChunk(r)}if("message_stop"===l.type){A=Date.now()-g;let t=l.usage,r={content:"",accumulated:w,reasoning_content:"",isComplete:!0,usage:t?{prompt_tokens:n(t.input_tokens,()=>0),completion_tokens:n(t.output_tokens,()=>0),total_tokens:n(t.input_tokens,()=>0)+n(t.output_tokens,()=>0),time_cost:n(A,()=>0)}:void 0};o.onChunk(r);break}}_=w}else{let n=await s.create({model:b,system:"You are a versatile professional in software UI automation",messages:t.map(t=>({role:"user",content:Array.isArray(t.content)?t.content.map(r):t.content})),response_format:a,...x});A=Date.now()-g,_=n.content[0].text,v=n.usage}d.assert.call(void 0,_,"empty content")}if(y&&!v){let t=Math.max(1,Math.floor((_||"").length/4));v={prompt_tokens:t,completion_tokens:t,total_tokens:2*t}}return{content:_||"",usage:v?{prompt_tokens:n(v.prompt_tokens,()=>0),completion_tokens:n(v.completion_tokens,()=>0),total_tokens:n(v.total_tokens,()=>0),time_cost:n(A,()=>0)}:void 0,isStreamed:!!y}}catch(t){throw import_console_browserify.default.error(" call AI error",t),Error(`failed to call ${y?"streaming ":""}AI model service: ${t.message}. Trouble shooting: https://midscenejs.com/model-provider.html`,{cause:t})}}async function X(t,r){let n,a=$();if(a.includes("gpt-4"))switch(r){case 0:n=P;break;case 1:n=j;break;case 3:n=V;break;case 2:case 4:n={type:"json_object"}}"gpt-4o-2024-05-13"===a&&(n={type:"json_object"});let o=await Z(t,r,n);return d.assert.call(void 0,o,"empty response"),{content:function(t){let r=function(t){try{let r=t.match(/^\s*(\{[\s\S]*\})\s*$/);if(r)return r[1];let n=t.match(/```(?:json)?\s*(\{[\s\S]*?\})\s*```/);if(n)return n[1];let i=t.match(/\{[\s\S]*\}/);if(i)return i[0]}catch(t){}return t}(t);if(i([r,"optionalAccess",t=>t.match,"call",t=>t(/\((\d+),(\d+)\)/)]))return i([r,"access",t=>t.match,"call",t=>t(/\((\d+),(\d+)\)/),"optionalAccess",t=>t.slice,"call",t=>t(1),"access",t=>t.map,"call",t=>t(Number)]);try{return JSON.parse(r)}catch(t){}try{return JSON.parse(h.jsonrepair.call(void 0,r))}catch(t){}if("doubao-vision"===l.vlLocateMode.call(void 0)||"vlm-ui-tars"===l.vlLocateMode.call(void 0)){let t=function(t){if(t.includes("bbox"))for(;/\d+\s+\d+/.test(t);)t=t.replace(/(\d+)\s+(\d+)/g,"$1,$2");return t}(r);return JSON.parse(h.jsonrepair.call(void 0,t))}throw Error(`failed to parse json response: ${t}`)}(o.content),usage:o.usage}}var Y=(t,r=1)=>{let n=[...t.filter(t=>t.screenshotBefore||t.screenshotAfter||t.screenshotWithBox)].sort((t,r)=>"navigation"===t.type&&"navigation"!==r.type?-1:"navigation"!==t.type&&"navigation"===r.type?1:"click"===t.type&&"click"!==r.type?-1:+("click"!==t.type&&"click"===r.type)),i=[];for(let t of n){let n=t.screenshotWithBox||t.screenshotAfter||t.screenshotBefore;if(n&&!i.includes(n)&&(i.push(n),i.length>=r))break}return i},J=(t,r={})=>{let n,i,a,o={navigationEvents:(n=t).filter(t=>"navigation"===t.type),clickEvents:n.filter(t=>"click"===t.type),inputEvents:n.filter(t=>"input"===t.type),scrollEvents:n.filter(t=>"scroll"===t.type)},s=(i=o,a=t.length,{navigation:i.navigationEvents.length,click:i.clickEvents.length,input:i.inputEvents.length,scroll:i.scrollEvents.length,total:a}),l=o.navigationEvents.length>0&&o.navigationEvents[0].url||"",u=o.clickEvents.map(t=>t.elementDescription).filter(t=>!!t).slice(0,10),d=o.inputEvents.map(t=>({description:t.elementDescription||"",value:t.value||""})).filter(t=>t.description&&t.value).slice(0,10),c=o.navigationEvents.map(t=>t.url).filter(t=>!!t).slice(0,5),h=t.map(t=>({type:t.type,timestamp:t.timestamp,url:t.url,title:t.title,elementDescription:t.elementDescription,value:t.value,pageInfo:t.pageInfo,elementRect:t.elementRect}));return{testName:r.testName||"Automated test from recorded events",startUrl:l,eventCounts:s,urls:c,clickDescriptions:u,inputDescriptions:d,events:h}},Q=(t,r=[],n=!0)=>{let i=[{type:"text",text:t}];return n&&r.length>0&&(i.unshift({type:"text",text:"Here are screenshots from the recording session to help you understand the context:"}),r.forEach(t=>{i.push({type:"image_url",image_url:{url:t}})})),i},ee=t=>{if(!t.length)throw Error("No events provided for test generation")},et=new(0,R.PromptTemplate)({template:"Here is the target element user interested in:\n<targetDescription>\n{sectionDescription}\n</targetDescription>\n ",inputVariables:["sectionDescription"]}),er=u.getDebug.call(void 0,"ai:inspect"),en=u.getDebug.call(void 0,"ai:section"),ei=t=>"string"==typeof t?t:t.prompt,ea=async t=>{let r=[];if(i([t,"optionalAccess",t=>t.images,"optionalAccess",t=>t.length]))for(let n of(r.push({role:"user",content:[{type:"text",text:"Next, I will provide all the reference images."}]}),t.images)){let i=await y.preProcessImageUrl.call(void 0,n.url,!!t.convertHttpImage2Base64);r.push({role:"user",content:[{type:"text",text:`reference image ${n.name}:`}]}),r.push({role:"user",content:[{type:"image_url",image_url:{url:i,detail:"high"}}]})}return r},eo=require_us_keyboard_layout(),es=(init_dist3(),__toCommonJS(dist_exports2)),el=u.getDebug.call(void 0,"ui-tars-planning"),eu=(t,r,n)=>[Math.round(Math.max(t.x-5,0)),Math.round(Math.max(t.y-5,0)),Math.round(Math.min(t.x+5,r)),Math.round(Math.min(t.y+5,n))];function ed(t,r){let[n,i]=JSON.parse(t);return[n*r.width,i*r.height]}t.systemPromptToLocateElement=M,t.elementByPositionWithElementInfo=B,t.describeUserPage=D,t.call=Z,t.callToGetJSONObject=X,t.callAiFnWithStringResponse=async function(t,r){let{content:n,usage:i}=await Z(t,r);return{content:n,usage:i}},t.AIActionType=_,t.callAiFn=v,t.adaptBboxToRect=E,t.expandSearchArea=C,t.generateYamlTest=async(t,r={})=>{try{ee(t);let n={...J(t,{testName:r.testName,maxScreenshots:r.maxScreenshots||3}),includeTimestamps:r.includeTimestamps||!1},a=Y(t,r.maxScreenshots||3),o=[{role:"system",content:`You are an expert in Midscene.js YAML test generation. Generate clean, accurate YAML following these rules: ${g.YAML_EXAMPLE_CODE}`},{role:"user",content:`Generate YAML test for Midscene.js automation from recorded browser events.
|
|
516
|
+
1. Receive the screenshot, element description of screenshot(if any), user's instruction and previous logs.
|
|
517
|
+
2. Decompose the user's task into a sequence of feasible actions, and place it in the \`actions\` field. There are different types of actions (${t.map(t=>t.name).join(" / ")}). The "About the action" section below will give you more details.
|
|
518
|
+
3. Consider whether the user's instruction will be accomplished after the actions you composed.
|
|
519
|
+
- If the instruction is accomplished, set \`more_actions_needed_by_instruction\` to false.
|
|
520
|
+
- If more actions are needed, set \`more_actions_needed_by_instruction\` to true. Get ready to hand over to the next talent people like you. Carefully log what have been done in the \`log\` field, he or she will continue the task according to your logs.
|
|
521
|
+
4. If the task is not feasible on this page, set \`error\` field to the reason.
|
|
522
|
+
|
|
523
|
+
## Constraints
|
|
524
|
+
|
|
525
|
+
- All the actions you composed MUST be feasible, which means all the action fields can be filled with the page context information you get. If not, don't plan this action.
|
|
526
|
+
- Trust the "What have been done" field about the task (if any), don't repeat actions in it.
|
|
527
|
+
- Respond only with valid JSON. Do not write an introduction or summary or markdown prefix like \`\`\`json\`\`\`.
|
|
528
|
+
- If the screenshot and the instruction are totally irrelevant, set reason in the \`error\` field.
|
|
529
|
+
|
|
530
|
+
## About the \`actions\` field
|
|
531
|
+
|
|
532
|
+
The \`locate\` param is commonly used in the \`param\` field of the action, means to locate the target element to perform the action, it conforms to the following scheme:
|
|
533
|
+
|
|
534
|
+
type LocateParam = {
|
|
535
|
+
"id": string, // the id of the element found. It should either be the id marked with a rectangle in the screenshot or the id described in the description.
|
|
536
|
+
"prompt"?: string // the description of the element to find. It can only be omitted when locate is null.
|
|
537
|
+
} | null // If it's not on the page, the LocateParam should be null
|
|
538
|
+
|
|
539
|
+
## Supported actions
|
|
540
|
+
|
|
541
|
+
Each action has a \`type\` and corresponding \`param\`. To be detailed:
|
|
542
|
+
${t.map(t=>D(t,`locate${"required"===t.location?"":"?"}: {"id": string, "prompt": string}`)).join("\n")}
|
|
543
|
+
|
|
544
|
+
`.trim())({actionSpace:t})}
|
|
545
|
+
|
|
546
|
+
${U}`}var z={type:"json_schema",json_schema:{name:"action_items",strict:!1,schema:{type:"object",strict:!1,properties:{actions:{type:"array",items:{type:"object",strict:!1,properties:{thought:{type:"string",description:"Reasons for generating this task, and why this task is feasible on this page"},type:{type:"string",description:"Type of action"},param:{anyOf:[{type:"null"},{type:"object",additionalProperties:!0}],description:"Parameter of the action"},locate:{type:["object","null"],properties:{id:{type:"string"},prompt:{type:"string"}},required:["id","prompt"],additionalProperties:!1,description:"Location information for the target element"}},required:["thought","type","param","locate"],additionalProperties:!1},description:"List of actions to be performed"},more_actions_needed_by_instruction:{type:"boolean",description:"If all the actions described in the instruction have been covered by this action and logs, set this field to false."},log:{type:"string",description:"Log what these planned actions do. Do not include further actions that have not been planned."},error:{type:["string","null"],description:"Error messages about unexpected situations"}},required:["actions","more_actions_needed_by_instruction","log","error"],additionalProperties:!1}}},G=!1;function H(){let t="gpt-4o",r=l.getAIConfig.call(void 0,l.MIDSCENE_MODEL_NAME);return r&&(t=r),t}async function q({AIActionTypeValue:t}){let r,n;!function(){if(G)return;let t="";l.getAIConfigInBoolean.call(void 0,l.MIDSCENE_DEBUG_AI_PROFILE)&&(import_console_browserify.default.warn("MIDSCENE_DEBUG_AI_PROFILE is deprecated, use DEBUG=midscene:ai:profile instead"),t="ai:profile"),l.getAIConfigInBoolean.call(void 0,l.MIDSCENE_DEBUG_AI_RESPONSE)&&(import_console_browserify.default.warn("MIDSCENE_DEBUG_AI_RESPONSE is deprecated, use DEBUG=midscene:ai:response instead"),t=t?"ai:*":"ai:call"),t&&u.enableDebug.call(void 0,t),G=!0}();let i=l.getAIConfigInJson.call(void 0,l.MIDSCENE_OPENAI_INIT_CONFIG_JSON),h=l.getAIConfig.call(void 0,l.MIDSCENE_OPENAI_SOCKS_PROXY),g=l.getAIConfig.call(void 0,l.MIDSCENE_OPENAI_HTTP_PROXY),b=u.getDebug.call(void 0,"ai:call:proxy");if(g?(b("using http proxy",g),n=new(0,c.HttpsProxyAgent)(g)):h&&(b("using socks proxy",h),n=new(0,m.SocksProxyAgent)(h)),l.getAIConfig.call(void 0,l.OPENAI_USE_AZURE))r=new(0,f.AzureOpenAI)({baseURL:l.getAIConfig.call(void 0,l.OPENAI_BASE_URL),apiKey:l.getAIConfig.call(void 0,l.OPENAI_API_KEY),httpAgent:n,...i,dangerouslyAllowBrowser:!0});else if(l.getAIConfig.call(void 0,l.MIDSCENE_USE_AZURE_OPENAI)){let t,n=l.getAIConfigInJson.call(void 0,l.MIDSCENE_AZURE_OPENAI_INIT_CONFIG_JSON),a=l.getAIConfig.call(void 0,l.MIDSCENE_AZURE_OPENAI_SCOPE);if(a){d.assert.call(void 0,!d.ifInBrowser,"Azure OpenAI is not supported in browser with Midscene.");let o=new(0,s.DefaultAzureCredential);d.assert.call(void 0,a,"MIDSCENE_AZURE_OPENAI_SCOPE is required"),t=s.getBearerTokenProvider.call(void 0,o,a),r=new(0,f.AzureOpenAI)({azureADTokenProvider:t,endpoint:l.getAIConfig.call(void 0,l.AZURE_OPENAI_ENDPOINT),apiVersion:l.getAIConfig.call(void 0,l.AZURE_OPENAI_API_VERSION),deployment:l.getAIConfig.call(void 0,l.AZURE_OPENAI_DEPLOYMENT),...i,...n})}else r=new(0,f.AzureOpenAI)({apiKey:l.getAIConfig.call(void 0,l.AZURE_OPENAI_KEY),endpoint:l.getAIConfig.call(void 0,l.AZURE_OPENAI_ENDPOINT),apiVersion:l.getAIConfig.call(void 0,l.AZURE_OPENAI_API_VERSION),deployment:l.getAIConfig.call(void 0,l.AZURE_OPENAI_DEPLOYMENT),dangerouslyAllowBrowser:!0,...i,...n})}else if(!l.getAIConfig.call(void 0,l.MIDSCENE_USE_ANTHROPIC_SDK)){let o=l.getAIConfig.call(void 0,l.OPENAI_BASE_URL);if("string"==typeof o&&!/^https?:\/\//.test(o))throw Error(`OPENAI_BASE_URL must be a valid URL starting with http:// or https://, but got: ${o}
|
|
547
|
+
Please check your config.`);r=new(0,p.default)({baseURL:l.getAIConfig.call(void 0,l.OPENAI_BASE_URL),apiKey:l.getAIConfig.call(void 0,l.OPENAI_API_KEY),httpAgent:n,...i,defaultHeaders:{...a([i,"optionalAccess",t=>t.defaultHeaders])||{},[l.MIDSCENE_API_TYPE]:t.toString()},dangerouslyAllowBrowser:!0})}if(r&&l.getAIConfigInBoolean.call(void 0,l.MIDSCENE_LANGSMITH_DEBUG)){if(d.ifInBrowser)throw Error("langsmith is not supported in browser");import_console_browserify.default.log("DEBUGGING MODE: langsmith wrapper enabled");let{wrapOpenAI:t}=await Promise.resolve().then(()=>require_wrappers3());r=t(r)}if(void 0!==r)return{completion:r.chat.completions,style:"openai"};if(l.getAIConfig.call(void 0,l.MIDSCENE_USE_ANTHROPIC_SDK)){let t=l.getAIConfig.call(void 0,l.ANTHROPIC_API_KEY);d.assert.call(void 0,t,"ANTHROPIC_API_KEY is required"),r=new(0,o.Anthropic)({apiKey:t,httpAgent:n,dangerouslyAllowBrowser:!0})}if(void 0!==r&&r.messages)return{completion:r.messages,style:"anthropic"};throw Error("Openai SDK or Anthropic SDK is not initialized")}async function V(t,r,n,o){d.assert.call(void 0,function(){let t=l.getAIConfig.call(void 0,l.OPENAI_API_KEY),r=l.getAIConfig.call(void 0,l.MIDSCENE_USE_AZURE_OPENAI),n=l.getAIConfig.call(void 0,l.ANTHROPIC_API_KEY),i=l.getAIConfig.call(void 0,l.MIDSCENE_OPENAI_INIT_CONFIG_JSON);return!!t||!!r||!!n||!!i}(),"Cannot find config for AI model service. If you are using a self-hosted model without validating the API key, please set `OPENAI_API_KEY` to any non-null value. https://midscenejs.com/model-provider.html");let{completion:s,style:c}=await q({AIActionTypeValue:r}),h=l.getAIConfig.call(void 0,l.OPENAI_MAX_TOKENS),f=u.getDebug.call(void 0,"ai:call"),p=u.getDebug.call(void 0,"ai:profile:stats"),m=u.getDebug.call(void 0,"ai:profile:detail"),g=Date.now(),b=H(),y=a([o,"optionalAccess",t=>t.stream])&&a([o,"optionalAccess",t=>t.onChunk]),_,v,A,w="",x={temperature:.1*("vlm-ui-tars"!==l.vlLocateMode.call(void 0)),stream:!!y,max_tokens:"number"==typeof h?h:Number.parseInt(h||"2048",10),..."qwen-vl"===l.vlLocateMode.call(void 0)?{vl_high_resolution_images:!0}:{}};try{if("openai"===c){if(f(`sending ${y?"streaming ":""}request to ${b}`),y){for await(let r of(await s.create({model:b,messages:t,response_format:n,...x},{stream:!0}))){let t=a([r,"access",t=>t.choices,"optionalAccess",t=>t[0],"optionalAccess",t=>t.delta,"optionalAccess",t=>t.content])||"",n=a([r,"access",t=>t.choices,"optionalAccess",t=>t[0],"optionalAccess",t=>t.delta,"optionalAccess",t=>t.reasoning_content])||"";if(r.usage&&(v=r.usage),t||n){w+=t;let r={content:t,reasoning_content:n,accumulated:w,isComplete:!1,usage:void 0};o.onChunk(r)}if(a([r,"access",t=>t.choices,"optionalAccess",t=>t[0],"optionalAccess",t=>t.finish_reason])){if(A=Date.now()-g,!v){let t=Math.max(1,Math.floor(w.length/4));v={prompt_tokens:t,completion_tokens:t,total_tokens:2*t}}let t={content:"",accumulated:w,reasoning_content:"",isComplete:!0,usage:{prompt_tokens:i(v.prompt_tokens,()=>0),completion_tokens:i(v.completion_tokens,()=>0),total_tokens:i(v.total_tokens,()=>0),time_cost:i(A,()=>0)}};o.onChunk(t);break}}_=w,p(`streaming model, ${b}, mode, ${l.vlLocateMode.call(void 0)||"default"}, cost-ms, ${A}`)}else{let r=await s.create({model:b,messages:t,response_format:n,...x});A=Date.now()-g,p(`model, ${b}, mode, ${l.vlLocateMode.call(void 0)||"default"}, ui-tars-version, ${l.uiTarsModelVersion.call(void 0)}, prompt-tokens, ${a([r,"access",t=>t.usage,"optionalAccess",t=>t.prompt_tokens])||""}, completion-tokens, ${a([r,"access",t=>t.usage,"optionalAccess",t=>t.completion_tokens])||""}, total-tokens, ${a([r,"access",t=>t.usage,"optionalAccess",t=>t.total_tokens])||""}, cost-ms, ${A}, requestId, ${r._request_id||""}`),m(`model usage detail: ${JSON.stringify(r.usage)}`),d.assert.call(void 0,r.choices,`invalid response from LLM service: ${JSON.stringify(r)}`),_=r.choices[0].message.content,v=r.usage}f(`response: ${_}`),d.assert.call(void 0,_,"empty content")}else if("anthropic"===c){let r=t=>{if("image_url"===t.type){let r=t.image_url.url;return d.assert.call(void 0,r,"image_url is required"),{source:{type:"base64",media_type:r.includes("data:image/png;base64,")?"image/png":"image/jpeg",data:r.split(",")[1]},type:"image"}}return t};if(y){for await(let l of(await s.create({model:b,system:"You are a versatile professional in software UI automation",messages:t.map(t=>({role:"user",content:Array.isArray(t.content)?t.content.map(r):t.content})),response_format:n,...x}))){let t=a([l,"access",t=>t.delta,"optionalAccess",t=>t.text])||"";if(t){w+=t;let r={content:t,accumulated:w,reasoning_content:"",isComplete:!1,usage:void 0};o.onChunk(r)}if("message_stop"===l.type){A=Date.now()-g;let t=l.usage,r={content:"",accumulated:w,reasoning_content:"",isComplete:!0,usage:t?{prompt_tokens:i(t.input_tokens,()=>0),completion_tokens:i(t.output_tokens,()=>0),total_tokens:i(t.input_tokens,()=>0)+i(t.output_tokens,()=>0),time_cost:i(A,()=>0)}:void 0};o.onChunk(r);break}}_=w}else{let i=await s.create({model:b,system:"You are a versatile professional in software UI automation",messages:t.map(t=>({role:"user",content:Array.isArray(t.content)?t.content.map(r):t.content})),response_format:n,...x});A=Date.now()-g,_=i.content[0].text,v=i.usage}d.assert.call(void 0,_,"empty content")}if(y&&!v){let t=Math.max(1,Math.floor((_||"").length/4));v={prompt_tokens:t,completion_tokens:t,total_tokens:2*t}}return{content:_||"",usage:v?{prompt_tokens:i(v.prompt_tokens,()=>0),completion_tokens:i(v.completion_tokens,()=>0),total_tokens:i(v.total_tokens,()=>0),time_cost:i(A,()=>0)}:void 0,isStreamed:!!y}}catch(t){throw import_console_browserify.default.error(" call AI error",t),Error(`failed to call ${y?"streaming ":""}AI model service: ${t.message}. Trouble shooting: https://midscenejs.com/model-provider.html`,{cause:t})}}async function W(t,r){let n,i=H();if(i.includes("gpt-4"))switch(r){case 0:n=P;break;case 1:n=j;break;case 3:n=z;break;case 2:case 4:n={type:"json_object"}}"gpt-4o-2024-05-13"===i&&(n={type:"json_object"});let o=await V(t,r,n);return d.assert.call(void 0,o,"empty response"),{content:function(t){let r=function(t){try{let r=t.match(/^\s*(\{[\s\S]*\})\s*$/);if(r)return r[1];let n=t.match(/```(?:json)?\s*(\{[\s\S]*?\})\s*```/);if(n)return n[1];let i=t.match(/\{[\s\S]*\}/);if(i)return i[0]}catch(t){}return t}(t);if(a([r,"optionalAccess",t=>t.match,"call",t=>t(/\((\d+),(\d+)\)/)]))return a([r,"access",t=>t.match,"call",t=>t(/\((\d+),(\d+)\)/),"optionalAccess",t=>t.slice,"call",t=>t(1),"access",t=>t.map,"call",t=>t(Number)]);try{return JSON.parse(r)}catch(t){}try{return JSON.parse(h.jsonrepair.call(void 0,r))}catch(t){}if("doubao-vision"===l.vlLocateMode.call(void 0)||"vlm-ui-tars"===l.vlLocateMode.call(void 0)){let t=function(t){if(t.includes("bbox"))for(;/\d+\s+\d+/.test(t);)t=t.replace(/(\d+)\s+(\d+)/g,"$1,$2");return t}(r);return JSON.parse(h.jsonrepair.call(void 0,t))}throw Error(`failed to parse json response: ${t}`)}(o.content),usage:o.usage}}function $(t,r,n){let o=i(a([n,"optionalAccess",t=>t.requireStrictDistance]),()=>!0),s=i(a([n,"optionalAccess",t=>t.filterPositionElements]),()=>!1);d.assert.call(void 0,void 0!==r,"position is required for query");let l=[];if(function t(n){if(a([n,"optionalAccess",t=>t.node])){let t=n.node;t.rect.left<=r.x&&r.x<=t.rect.left+t.rect.width&&t.rect.top<=r.y&&r.y<=t.rect.top+t.rect.height&&(s&&a([t,"access",t=>t.attributes,"optionalAccess",t=>t.nodeType])===g.NodeType.POSITION||!t.isVisible||l.push(t))}for(let r of n.children)t(r)}(t),0===l.length)return;let u=l.reduce((t,r)=>{let n=t.rect.width*t.rect.height;return r.rect.width*r.rect.height<n?r:t}),c=K({x:u.center[0],y:u.center[1]},r);return o?c<=16?u:void 0:u}function K(t,r){return Math.sqrt((t.x-r.x)**2+(t.y-r.y)**2)}async function Z(t,r){var n;let o,s,{screenshotBase64:u}=t;if(t.size)({width:o,height:s}=t.size);else{let t=await y.imageInfoOfBase64.call(void 0,u);({width:o,height:s}=t)}let c=t.tree,h={},f=b.treeToList.call(void 0,c);!0===a([r,"optionalAccess",t=>t.domIncluded])&&f.length>=5e3&&import_console_browserify.default.warn('The number of elements is too large, it may cause the prompt to be too long, please use domIncluded: "visible-only" to reduce the number of elements'),f.forEach(t=>{h[t.id]=t,void 0!==t.indexId&&(h[`${t.indexId}`]=t)});let p="",m=i(a([r,"optionalAccess",t=>t.visibleOnly]),()=>"visible-only"===a([r,"optionalAccess",t=>t.domIncluded]));if(a([r,"optionalAccess",t=>t.domIncluded])||!l.vlLocateMode.call(void 0)){let t=await b.descriptionOfTree.call(void 0,c,a([r,"optionalAccess",t=>t.truncateTextLength]),a([r,"optionalAccess",t=>t.filterNonTextContent]),m);p=`The size of the page: ${(n={width:o,height:s}).width} x ${n.height}
|
|
548
|
+
The page elements tree:
|
|
549
|
+
${t}`}return{description:p,elementById:t=>(d.assert.call(void 0,void 0!==t,"id is required for query"),h[`${t}`]),elementByPosition:(t,r)=>$(c,t),insertElementByPosition(t){let r=b.generateElementByPosition.call(void 0,t);return c.children.push({node:r,children:[]}),f.push(r),h[r.id]=r,r},size:{width:o,height:s}}}var X=(t,r=1)=>{let n=[...t.filter(t=>t.screenshotBefore||t.screenshotAfter||t.screenshotWithBox)].sort((t,r)=>"navigation"===t.type&&"navigation"!==r.type?-1:"navigation"!==t.type&&"navigation"===r.type?1:"click"===t.type&&"click"!==r.type?-1:+("click"!==t.type&&"click"===r.type)),i=[];for(let t of n){let n=t.screenshotWithBox||t.screenshotAfter||t.screenshotBefore;if(n&&!i.includes(n)&&(i.push(n),i.length>=r))break}return i},Y=(t,r={})=>{let n,i,a,o={navigationEvents:(n=t).filter(t=>"navigation"===t.type),clickEvents:n.filter(t=>"click"===t.type),inputEvents:n.filter(t=>"input"===t.type),scrollEvents:n.filter(t=>"scroll"===t.type)},s=(i=o,a=t.length,{navigation:i.navigationEvents.length,click:i.clickEvents.length,input:i.inputEvents.length,scroll:i.scrollEvents.length,total:a}),l=o.navigationEvents.length>0&&o.navigationEvents[0].url||"",u=o.clickEvents.map(t=>t.elementDescription).filter(t=>!!t).slice(0,10),d=o.inputEvents.map(t=>({description:t.elementDescription||"",value:t.value||""})).filter(t=>t.description&&t.value).slice(0,10),c=o.navigationEvents.map(t=>t.url).filter(t=>!!t).slice(0,5),h=t.map(t=>({type:t.type,timestamp:t.timestamp,url:t.url,title:t.title,elementDescription:t.elementDescription,value:t.value,pageInfo:t.pageInfo,elementRect:t.elementRect}));return{testName:r.testName||"Automated test from recorded events",startUrl:l,eventCounts:s,urls:c,clickDescriptions:u,inputDescriptions:d,events:h}},J=(t,r=[],n=!0)=>{let i=[{type:"text",text:t}];return n&&r.length>0&&(i.unshift({type:"text",text:"Here are screenshots from the recording session to help you understand the context:"}),r.forEach(t=>{i.push({type:"image_url",image_url:{url:t}})})),i},Q=t=>{if(!t.length)throw Error("No events provided for test generation")},ee=new(0,R.PromptTemplate)({template:"Here is the target element user interested in:\n<targetDescription>\n{sectionDescription}\n</targetDescription>\n ",inputVariables:["sectionDescription"]}),et=u.getDebug.call(void 0,"ai:inspect"),er=u.getDebug.call(void 0,"ai:section"),en=t=>"string"==typeof t?t:t.prompt,ei=async t=>{let r=[];if(a([t,"optionalAccess",t=>t.images,"optionalAccess",t=>t.length]))for(let n of(r.push({role:"user",content:[{type:"text",text:"Next, I will provide all the reference images."}]}),t.images)){let i=await y.preProcessImageUrl.call(void 0,n.url,!!t.convertHttpImage2Base64);r.push({role:"user",content:[{type:"text",text:`reference image ${n.name}:`}]}),r.push({role:"user",content:[{type:"image_url",image_url:{url:i,detail:"high"}}]})}return r},ea=require_us_keyboard_layout(),eo=(init_dist3(),__toCommonJS(dist_exports2)),es=u.getDebug.call(void 0,"ui-tars-planning"),el=(t,r,n)=>[Math.round(Math.max(t.x-5,0)),Math.round(Math.max(t.y-5,0)),Math.round(Math.min(t.x+5,r)),Math.round(Math.min(t.y+5,n))];function eu(t,r){let[n,i]=JSON.parse(t);return[n*r.width,i*r.height]}t.systemPromptToLocateElement=M,t.call=V,t.callToGetJSONObject=W,t.callAiFnWithStringResponse=async function(t,r){let{content:n,usage:i}=await V(t,r);return{content:n,usage:i}},t.AIActionType=_,t.callAiFn=v,t.adaptBboxToRect=E,t.expandSearchArea=C,t.elementByPositionWithElementInfo=$,t.describeUserPage=Z,t.generateYamlTest=async(t,r={})=>{try{Q(t);let n={...Y(t,{testName:r.testName,maxScreenshots:r.maxScreenshots||3}),includeTimestamps:r.includeTimestamps||!1},i=X(t,r.maxScreenshots||3),o=[{role:"system",content:`You are an expert in Midscene.js YAML test generation. Generate clean, accurate YAML following these rules: ${g.YAML_EXAMPLE_CODE}`},{role:"user",content:`Generate YAML test for Midscene.js automation from recorded browser events.
|
|
579
550
|
|
|
580
551
|
Event Summary:
|
|
581
552
|
${JSON.stringify(n,null,2)}
|
|
@@ -587,7 +558,7 @@ Convert events:
|
|
|
587
558
|
- scroll → aiScroll with appropriate direction
|
|
588
559
|
- Add aiAssert for important state changes
|
|
589
560
|
|
|
590
|
-
Respond with YAML only, no explanations.`}];
|
|
561
|
+
Respond with YAML only, no explanations.`}];i.length>0&&(o.push({role:"user",content:"Here are screenshots from the recording session to help you understand the context:"}),o.push({role:"user",content:i.map(t=>({type:"image_url",image_url:{url:t}}))}));let s=await V(o,2);if(a([s,"optionalAccess",t=>t.content])&&"string"==typeof s.content)return s.content;throw Error("Failed to generate YAML test configuration")}catch(t){throw Error(`Failed to generate YAML test: ${t}`)}},t.generateYamlTestStream=async(t,r={})=>{try{Q(t);let n={...Y(t,{testName:r.testName,maxScreenshots:r.maxScreenshots||3}),includeTimestamps:r.includeTimestamps||!1},i=X(t,r.maxScreenshots||3),o=[{role:"system",content:`You are an expert in Midscene.js YAML test generation. Generate clean, accurate YAML following these rules: ${g.YAML_EXAMPLE_CODE}`},{role:"user",content:`Generate YAML test for Midscene.js automation from recorded browser events.
|
|
591
562
|
|
|
592
563
|
Event Summary:
|
|
593
564
|
${JSON.stringify(n,null,2)}
|
|
@@ -599,7 +570,7 @@ Convert events:
|
|
|
599
570
|
- scroll → aiScroll with appropriate direction
|
|
600
571
|
- Add aiAssert for important state changes
|
|
601
572
|
|
|
602
|
-
Respond with YAML only, no explanations.`}];if(
|
|
573
|
+
Respond with YAML only, no explanations.`}];if(i.length>0&&(o.push({role:"user",content:"Here are screenshots from the recording session to help you understand the context:"}),o.push({role:"user",content:i.map(t=>({type:"image_url",image_url:{url:t}}))})),r.stream&&r.onChunk)return await V(o,2,void 0,{stream:!0,onChunk:r.onChunk});{let t=await V(o,2);if(a([t,"optionalAccess",t=>t.content])&&"string"==typeof t.content)return{content:t.content,usage:t.usage,isStreamed:!1};throw Error("Failed to generate YAML test configuration")}}catch(t){throw Error(`Failed to generate YAML test: ${t}`)}},t.generatePlaywrightTest=async(t,r={})=>{Q(t);let n={...Y(t,{testName:r.testName,maxScreenshots:r.maxScreenshots||3}),waitForNetworkIdle:!1!==r.waitForNetworkIdle,waitForNetworkIdleTimeout:r.waitForNetworkIdleTimeout||2e3,viewportSize:r.viewportSize||{width:1280,height:800}},i=X(t,r.maxScreenshots||3),o=J(`Generate a Playwright test using @midscene/web/playwright that reproduces this recorded browser session. The test should be based on the following events and follow the structure of the example provided. Make the test descriptive with appropriate assertions and validations.
|
|
603
574
|
|
|
604
575
|
Event Summary:
|
|
605
576
|
${JSON.stringify(n,null,2)}
|
|
@@ -613,10 +584,10 @@ Generated code should:
|
|
|
613
584
|
6. Follow best practices for Playwright tests
|
|
614
585
|
7. Be ready to execute without further modification
|
|
615
586
|
|
|
616
|
-
Respond ONLY with the complete Playwright test code, no explanations.`,
|
|
587
|
+
Respond ONLY with the complete Playwright test code, no explanations.`,i,!1!==r.includeScreenshots),s=[{role:"system",content:`You are an expert test automation engineer specializing in Playwright and Midscene.
|
|
617
588
|
Your task is to generate a complete, executable Playwright test using @midscene/web/playwright that reproduces a recorded browser session.
|
|
618
589
|
|
|
619
|
-
${g.PLAYWRIGHT_EXAMPLE_CODE}`},{role:"user",content:o}],l=await
|
|
590
|
+
${g.PLAYWRIGHT_EXAMPLE_CODE}`},{role:"user",content:o}],l=await V(s,2);if(a([l,"optionalAccess",t=>t.content])&&"string"==typeof l.content)return l.content;throw Error("Failed to generate Playwright test code")},t.generatePlaywrightTestStream=async(t,r={})=>{Q(t);let n={...Y(t,{testName:r.testName,maxScreenshots:r.maxScreenshots||3}),waitForNetworkIdle:!1!==r.waitForNetworkIdle,waitForNetworkIdleTimeout:r.waitForNetworkIdleTimeout||2e3,viewportSize:r.viewportSize||{width:1280,height:800}},i=X(t,r.maxScreenshots||3),o=J(`Generate a Playwright test using @midscene/web/playwright that reproduces this recorded browser session. The test should be based on the following events and follow the structure of the example provided. Make the test descriptive with appropriate assertions and validations.
|
|
620
591
|
|
|
621
592
|
Event Summary:
|
|
622
593
|
${JSON.stringify(n,null,2)}
|
|
@@ -631,10 +602,10 @@ Generated code should:
|
|
|
631
602
|
7. Be ready to execute without further modification
|
|
632
603
|
8. can't wrap this test code in markdown code block
|
|
633
604
|
|
|
634
|
-
Respond ONLY with the complete Playwright test code, no explanations.`,
|
|
605
|
+
Respond ONLY with the complete Playwright test code, no explanations.`,i,!1!==r.includeScreenshots),s=[{role:"system",content:`You are an expert test automation engineer specializing in Playwright and Midscene.
|
|
635
606
|
Your task is to generate a complete, executable Playwright test using @midscene/web/playwright that reproduces a recorded browser session.
|
|
636
607
|
|
|
637
|
-
${g.PLAYWRIGHT_EXAMPLE_CODE}`},{role:"user",content:o}];if(r.stream&&r.onChunk)return await
|
|
608
|
+
${g.PLAYWRIGHT_EXAMPLE_CODE}`},{role:"user",content:o}];if(r.stream&&r.onChunk)return await V(s,2,void 0,{stream:!0,onChunk:r.onChunk});{let t=await V(s,2);if(a([t,"optionalAccess",t=>t.content])&&"string"==typeof t.content)return{content:t.content,usage:t.usage,isStreamed:!1};throw Error("Failed to generate Playwright test code")}},t.AiLocateElement=async function(t){let{context:r,targetElementDescription:n,callAI:i}=t,{screenshotBase64:o}=r,{description:s,elementById:u,insertElementByPosition:c}=await Z(r);d.assert.call(void 0,n,"cannot find the target element description");let h=await N.format({pageDescription:s,targetElementDescription:en(n)}),f=M(l.vlLocateMode.call(void 0)),p=o;t.searchConfig?(d.assert.call(void 0,t.searchConfig.rect,"searchArea is provided but its rect cannot be found. Failed to locate element"),d.assert.call(void 0,t.searchConfig.imageBase64,"searchArea is provided but its imageBase64 cannot be found. Failed to locate element"),p=t.searchConfig.imageBase64):"qwen-vl"===l.vlLocateMode.call(void 0)?p=await y.paddingToMatchBlockByBase64.call(void 0,p):l.vlLocateMode.call(void 0)||(p=await I(o,r.tree,r.size));let m=[{role:"system",content:f},{role:"user",content:[{type:"image_url",image_url:{url:p,detail:"high"}},{type:"text",text:h}]}];if("string"!=typeof n){let t=await ei({images:n.images,convertHttpImage2Base64:n.convertHttpImage2Base64});m.push(...t)}let g=i||W,b=await g(m,1),_=JSON.stringify(b.content),v,A="elements"in b.content?b.content.elements:[],w="errors"in b.content?b.content.errors:[];try{if("bbox"in b.content&&Array.isArray(b.content.bbox)){v=E(b.content.bbox,a([t,"access",t=>t.searchConfig,"optionalAccess",t=>t.rect,"optionalAccess",t=>t.width])||r.size.width,a([t,"access",t=>t.searchConfig,"optionalAccess",t=>t.rect,"optionalAccess",t=>t.height])||r.size.height,a([t,"access",t=>t.searchConfig,"optionalAccess",t=>t.rect,"optionalAccess",t=>t.left]),a([t,"access",t=>t.searchConfig,"optionalAccess",t=>t.rect,"optionalAccess",t=>t.top])),et("resRect",v);let n={x:v.left+v.width/2,y:v.top+v.height/2},i=$(r.tree,n),o=i?K({x:i.center[0],y:i.center[1]},n):0;(!i||o>16)&&(i=c(n)),i&&(A=[i],w=[])}}catch(r){let t=r instanceof Error?`Failed to parse bbox: ${r.message}`:"unknown error in locate";w&&0!==a([w,"optionalAccess",t=>t.length])?w.push(`(${t})`):w=[t]}return{rect:v,parseResult:{elements:A,errors:w},rawResponse:_,elementById:u,usage:b.usage,isOrderSensitive:"object"==typeof b.content&&null!==b.content&&"isOrderSensitive"in b.content?b.content.isOrderSensitive:void 0}},t.AiLocateSection=async function(t){let r,{context:n,sectionDescription:i}=t,{screenshotBase64:a}=n,o=[{role:"system",content:`
|
|
638
609
|
You goal is to find out one section containing the target element in the screenshot, put it in the \`bbox\` field. If the user describe the target element with some reference elements, you should also find the section containing the reference elements, put it in the \`references_bbox\` field.
|
|
639
610
|
|
|
640
611
|
Usually, it should be approximately an area not more than 300x300px. Changes of the size are allowed if there are many elements to cover.
|
|
@@ -663,12 +634,12 @@ the return value should be like this:
|
|
|
663
634
|
"references_bbox": [[100, 100, 200, 200]]
|
|
664
635
|
}
|
|
665
636
|
\`\`\`
|
|
666
|
-
`},{role:"user",content:[{type:"image_url",image_url:{url:a,detail:"high"}},{type:"text",text:await
|
|
637
|
+
`},{role:"user",content:[{type:"image_url",image_url:{url:a,detail:"high"}},{type:"text",text:await ee.format({sectionDescription:en(i)})}]}];if("string"!=typeof i){let t=await ei({images:i.images,convertHttpImage2Base64:i.convertHttpImage2Base64});o.push(...t)}let s=await v(o,2),u=s.content.bbox;if(u){let t=E(u,n.size.width,n.size.height);er("original targetRect %j",t);let i=s.content.references_bbox||[];er("referenceBboxList %j",i);let a=i.filter(t=>Array.isArray(t)).map(t=>E(t,n.size.width,n.size.height));er("referenceRects %j",a);let o=function(t){let r=Math.min(...t.map(t=>t.left)),n=Math.min(...t.map(t=>t.top));return{left:r,top:n,width:Math.max(...t.map(t=>t.left+t.width))-r,height:Math.max(...t.map(t=>t.top+t.height))-n}}([t,...a]);er("mergedRect %j",o),er("expanded sectionRect %j",r=C(o,n.size))}let d=a;return r&&(d=await y.cropByRect.call(void 0,a,r,l.getAIConfigInBoolean.call(void 0,l.MIDSCENE_USE_QWEN_VL))),{rect:r,imageBase64:d,error:s.content.error,rawResponse:JSON.stringify(s.content),usage:s.usage}},t.AiExtractElementInfo=async function(t){let{dataQuery:r,context:n,extractOption:i,multimodalPrompt:o}=t,{screenshotBase64:s}=n,{description:l,elementById:u}=await Z(n,{truncateTextLength:200,filterNonTextContent:!1,visibleOnly:!1,domIncluded:a([i,"optionalAccess",t=>t.domIncluded])}),d=await (async(t,r)=>{let n="";n="string"==typeof r?r:JSON.stringify(r,null,2);let i=new(0,R.PromptTemplate)({template:"\n<PageDescription>\n{pageDescription}\n</PageDescription>\n\n<DATA_DEMAND>\n{dataQuery}\n</DATA_DEMAND>\n ",inputVariables:["pageDescription","dataQuery"]});return await i.format({pageDescription:t,dataQuery:n})})(l,r),c=[];!1!==a([i,"optionalAccess",t=>t.screenshotIncluded])&&c.push({type:"image_url",image_url:{url:s,detail:"high"}}),c.push({type:"text",text:d});let h=[{role:"system",content:'\nYou are a versatile professional in software UI design and testing. Your outstanding contributions will impact the user experience of billions of users.\n\nThe user will give you a screenshot, the contents of it (optional), and some data requirements in <DATA_DEMAND>. You need to extract the data according to the <DATA_DEMAND>.\n\nIf a key specifies a JSON data type (such as Number, String, Boolean, Object, Array), ensure the returned value strictly matches that data type.\n\nIf the user provides multiple reference images, please carefully review the reference images with the screenshot and provide the correct answer for <DATA_DEMAND>.\n\nIf the user requests reasons to be provided, please provide the thought field in response, less then 100 words.\n\nReturn in the following JSON format:\n{\n thought: string, // the thought process of the extraction, less then 100 words, not required by default.\n data: any, // the extracted data. Make sure both the value and scheme meet the DATA_DEMAND. If you want to write some description in this field, use the same language as the DATA_DEMAND.\n errors: [], // string[], error message if any\n}\n\n# Example 1\nFor example, if the DATA_DEMAND is:\n\n<DATA_DEMAND>\n{\n "name": "name shows on the left panel, string",\n "age": "age shows on the right panel, number",\n "isAdmin": "if the user is admin, boolean"\n}\n</DATA_DEMAND>\n\nBy viewing the screenshot and page contents, you can extract the following data:\n\n{\n data: {\n name: "John",\n age: 30,\n isAdmin: true\n },\n}\n\n# Example 2\nIf the DATA_DEMAND is:\n\n<DATA_DEMAND>\nthe todo items list, string[]\n</DATA_DEMAND>\n\nBy viewing the screenshot and page contents, you can extract the following data:\n\n{\n data: ["todo 1", "todo 2", "todo 3"],\n}\n\n# Example 3\nIf the DATA_DEMAND is:\n\n<DATA_DEMAND>\nthe page title, string\n</DATA_DEMAND>\n\nBy viewing the screenshot and page contents, you can extract the following data:\n\n{\n data: "todo list",\n}\n\n# Example 4\nIf the DATA_DEMAND is:\n\n<DATA_DEMAND>\n{\n "result": "Boolean, is it currently the SMS page?"\n}\n</DATA_DEMAND>\n\nBy viewing the screenshot and page contents, you can extract the following data:\n\n{\n data: { result: true },\n}\n'},{role:"user",content:c}];if(a([t,"access",t=>t.extractOption,"optionalAccess",t=>t.returnThought])&&h.push({role:"user",content:"Please provide reasons."}),o){let t=await ei({images:o.images,convertHttpImage2Base64:o.convertHttpImage2Base64});h.push(...t)}let f=await v(h,2);return{parseResult:f.content,elementById:u,usage:f.usage}},t.AiAssert=async function(t){let{assertion:r,context:n}=t;d.assert.call(void 0,r,"assertion should not be empty");let{screenshotBase64:i}=n,a=[{role:"system",content:k({isUITars:l.getAIConfigInBoolean.call(void 0,l.MIDSCENE_USE_VLM_UI_TARS)})},{role:"user",content:[{type:"image_url",image_url:{url:i,detail:"high"}},{type:"text",text:`
|
|
667
638
|
Here is the assertion. Please tell whether it is truthy according to the screenshot.
|
|
668
639
|
=====================================
|
|
669
|
-
${
|
|
640
|
+
${en(r)}
|
|
670
641
|
=====================================
|
|
671
|
-
`}]}];if("string"!=typeof r){let t=await
|
|
642
|
+
`}]}];if("string"!=typeof r){let t=await ei({images:r.images,convertHttpImage2Base64:r.convertHttpImage2Base64});a.push(...t)}let{content:o,usage:s}=await v(a,0);return{content:o,usage:s}},t.plan=async function(t,r){var n;let i,o,s,{callAI:u,context:c}=r||{},{screenshotBase64:h,size:f}=c,{description:p,elementById:m}=await Z(c),g=await F({actionSpace:r.actionSpace,vlMode:l.vlLocateMode.call(void 0)}),b=(i=t,o=r.log,s=r.actionContext,o?`
|
|
672
643
|
Here is the user's instruction:
|
|
673
644
|
|
|
674
645
|
<instruction>
|
|
@@ -676,7 +647,7 @@ Here is the user's instruction:
|
|
|
676
647
|
${s}
|
|
677
648
|
</high_priority_knowledge>
|
|
678
649
|
|
|
679
|
-
${
|
|
650
|
+
${i}
|
|
680
651
|
</instruction>
|
|
681
652
|
|
|
682
653
|
These are the logs from previous executions, which indicate what was done in the previous actions.
|
|
@@ -691,9 +662,9 @@ Here is the user's instruction:
|
|
|
691
662
|
${s}
|
|
692
663
|
</high_priority_knowledge>
|
|
693
664
|
|
|
694
|
-
${
|
|
665
|
+
${i}
|
|
695
666
|
</instruction>
|
|
696
|
-
`),_=await (n=l.vlLocateMode.call(void 0),new(0,R.PromptTemplate)(n?{template:"{taskBackgroundContext}",inputVariables:["taskBackgroundContext"]}:{template:"\npageDescription:\n=====================================\n{pageDescription}\n=====================================\n\n{taskBackgroundContext}",inputVariables:["pageDescription","taskBackgroundContext"]})).format({pageDescription:p,taskBackgroundContext:b}),A=h;"qwen-vl"===l.vlLocateMode.call(void 0)?A=await y.paddingToMatchBlockByBase64.call(void 0,A):l.vlLocateMode.call(void 0)||(A=await I(h,c.tree,c.size)),function(t){if(!S)if(
|
|
667
|
+
`),_=await (n=l.vlLocateMode.call(void 0),new(0,R.PromptTemplate)(n?{template:"{taskBackgroundContext}",inputVariables:["taskBackgroundContext"]}:{template:"\npageDescription:\n=====================================\n{pageDescription}\n=====================================\n\n{taskBackgroundContext}",inputVariables:["pageDescription","taskBackgroundContext"]})).format({pageDescription:p,taskBackgroundContext:b}),A=h;"qwen-vl"===l.vlLocateMode.call(void 0)?A=await y.paddingToMatchBlockByBase64.call(void 0,A):l.vlLocateMode.call(void 0)||(A=await I(h,c.tree,c.size)),function(t){if(!S)if(a([H,"call",t=>t(),"optionalAccess",t=>t.toLowerCase,"call",t=>t(),"access",t=>t.includes,"call",t=>t("gpt-4o")])){let r=`GPT-4o has a maximum image input size of 2000x768 or 768x2000, but got ${t.width}x${t.height}. Please set your page to a smaller resolution. Otherwise, the result may be inaccurate.`;(Math.max(t.width,t.height)>2e3||Math.min(t.width,t.height)>768)&&(import_console_browserify.default.warn(r),S=!0)}else(t.width>1800||t.height>1800)&&(import_console_browserify.default.warn(`The image size seems too large (${t.width}x${t.height}). It may lead to more token usage, slower response, and inaccurate result.`),S=!0)}(f);let w=[{role:"system",content:g},{role:"user",content:[{type:"image_url",image_url:{url:A,detail:"high"}},{type:"text",text:_}]}],E=u||v,{content:C,usage:k}=await E(w,3),P=JSON.stringify(C,void 0,2),O=C,M=(a([O,"access",t=>t.action,"optionalAccess",t=>t.type])?[O.action]:O.actions)||[],j={...O,actions:M,rawResponse:P,usage:k,yamlFlow:T(M,O.sleep)};return d.assert.call(void 0,O,"can't get plans from AI"),l.vlLocateMode.call(void 0)?(M.forEach(t=>{var r,n,i;if(t.locate)try{r=t.locate,n=f.width,i=f.height,r.bbox_2d&&!a([r,"optionalAccess",t=>t.bbox])&&(r.bbox=r.bbox_2d,delete r.bbox_2d),a([r,"optionalAccess",t=>t.bbox])&&(r.bbox=x(r.bbox,n,i)),t.locate=r}catch(t){throw Error(`Failed to fill locate param: ${O.error} (${t instanceof Error?t.message:"unknown error"})`,{cause:t})}}),d.assert.call(void 0,!O.error,`Failed to plan actions: ${O.error}`)):M.forEach(t=>{if(a([t,"access",t=>t.locate,"optionalAccess",t=>t.id])){let r=m(t.locate.id);r&&(t.locate.id=r.id)}}),0===M.length&&j.more_actions_needed_by_instruction&&!j.sleep&&import_console_browserify.default.warn("No actions planned for the prompt, but model said more actions are needed:",t),j},t.vlmPlanning=async function(t){let{conversationHistory:r,userInstruction:n,size:i}=t,a=`
|
|
697
668
|
You are a GUI agent. You are given a task and your action history, with screenshots. You need to perform the next action to complete the task.
|
|
698
669
|
|
|
699
670
|
## Output Format
|
|
@@ -720,7 +691,7 @@ finished(content='xxx') # Use escape characters \\', \\", and \\n in content par
|
|
|
720
691
|
- Write a small plan and finally summarize your next action (with its target element) in one sentence in \`Thought\` part.
|
|
721
692
|
|
|
722
693
|
## User Instruction
|
|
723
|
-
`+n,o=await Z([{role:"user",content:a},...r],1),s=function(t){let r=/<bbox>(\d+)\s+(\d+)\s+(\d+)\s+(\d+)<\/bbox>/g;function n(t,r,n,i,a){let o=Number.parseInt(r,10),s=Number.parseInt(n,10),l=Number.parseInt(i,10),u=Number.parseInt(a,10);return`(${Math.floor((o+l)/2)},${Math.floor((s+u)/2)})`}return t.replace(/\[EOS\]/g,"").replace(r,n).trim()}(o.content),u=l.uiTarsModelVersion.call(void 0),{parsed:c}=es.actionParser.call(void 0,{prediction:s,factor:[1e3,1e3],screenContext:{width:i.width,height:i.height},modelVer:u||void 0});el("modelVer",u,"parsed",JSON.stringify(c));let h=[];if(c.forEach(t=>{if("click"===t.action_type){d.assert.call(void 0,t.action_inputs.start_box,"start_box is required");let r=ed(t.action_inputs.start_box,i);h.push({type:"Locate",param:{},locate:{prompt:t.thought||"",bbox:eu({x:r[0],y:r[1]},i.width,i.height)}}),h.push({type:"Tap",locate:{prompt:t.thought||"",bbox:eu({x:r[0],y:r[1]},i.width,i.height)},param:t.thought||""})}else if("drag"===t.action_type){d.assert.call(void 0,t.action_inputs.start_box,"start_box is required"),d.assert.call(void 0,t.action_inputs.end_box,"end_box is required");let r=ed(t.action_inputs.start_box,i),n=ed(t.action_inputs.end_box,i);h.push({type:"Drag",param:{start_box:{x:r[0],y:r[1]},end_box:{x:n[0],y:n[1]}},locate:null,thought:t.thought||""})}else if("type"===t.action_type)h.push({type:"Input",param:{value:t.action_inputs.content},locate:null,thought:t.thought||""});else if("scroll"===t.action_type)h.push({type:"Scroll",param:{direction:t.action_inputs.direction},locate:null,thought:t.thought||""});else if("finished"===t.action_type)h.push({type:"Finished",param:{},locate:null,thought:t.thought||""});else if("hotkey"===t.action_type)if(t.action_inputs.key){let r=eo.transformHotkeyInput.call(void 0,t.action_inputs.key);h.push({type:"KeyboardPress",param:{value:r},locate:null,thought:t.thought||""})}else import_console_browserify.default.warn("No key found in action: hotkey. Will not perform action.");else if("wait"===t.action_type)h.push({type:"Sleep",param:{timeMs:1e3},locate:null,thought:t.thought||""});else if("androidBackButton"===t.action_type)h.push({type:"AndroidBackButton",param:{},locate:null,thought:t.thought||""});else if("androidHomeButton"===t.action_type)h.push({type:"AndroidHomeButton",param:{},locate:null,thought:t.thought||""});else if("androidRecentAppsButton"===t.action_type)h.push({type:"AndroidRecentAppsButton",param:{}});else if("androidLongPress"===t.action_type){d.assert.call(void 0,t.action_inputs.start_coords,"start_coords is required for androidLongPress");let r=t.action_inputs.start_coords;h.push({type:"AndroidLongPress",param:{x:r[0],y:r[1],duration:1e3},locate:null,thought:t.thought||""})}else if("androidPull"===t.action_type){let r=t.action_inputs.direction||"down",n=t.action_inputs.start_coords?{x:t.action_inputs.start_coords[0],y:t.action_inputs.start_coords[1]}:void 0;h.push({type:"AndroidPull",param:{direction:r,startPoint:n,distance:t.action_inputs.distance,duration:t.action_inputs.duration||500},locate:null,thought:t.thought||""})}}),0===h.length)throw Error(`No actions found, response: ${o.content}`,{cause:{prediction:o.content,parsed:c}});return{actions:h,actionsFromModel:c,action_summary:o.content.replace(/Reflection:[\s\S]*?(?=Action_Summary:|Action:|$)/g,"").trim(),usage:o.usage,rawResponse:JSON.stringify(o.content,void 0,2)}},t.resizeImageForUiTars=async function(t,r){if("vlm-ui-tars"===l.vlLocateMode.call(void 0)&&l.uiTarsModelVersion.call(void 0)===l.UITarsModelVersion.V1_5){el("ui-tars-v1.5, will check image size",r);let n=r.width*r.height,i=0xc40000;if(n>0xc40000){let a=Math.sqrt(i/n),o=Math.floor(r.width*a),s=Math.floor(r.height*a);return el("resize image for ui-tars, new width: %s, new height: %s",o,s),await y.resizeImgBase64.call(void 0,t,{width:o,height:s})}}return t}}}),require_ai_model=__commonJS({"../core/dist/lib/ai-model.js"(t){init_globals(),Object.defineProperty(t,"__esModule",{value:!0});var r=require_chunk_I5LBWOQA();t.AIActionType=r.AIActionType,t.AiAssert=r.AiAssert,t.AiExtractElementInfo=r.AiExtractElementInfo,t.AiLocateElement=r.AiLocateElement,t.AiLocateSection=r.AiLocateSection,t.adaptBboxToRect=r.adaptBboxToRect,t.callAi=r.call,t.callAiFn=r.callAiFn,t.callAiFnWithStringResponse=r.callAiFnWithStringResponse,t.callToGetJSONObject=r.callToGetJSONObject,t.describeUserPage=r.describeUserPage,t.elementByPositionWithElementInfo=r.elementByPositionWithElementInfo,t.generatePlaywrightTest=r.generatePlaywrightTest,t.generatePlaywrightTestStream=r.generatePlaywrightTestStream,t.generateYamlTest=r.generateYamlTest,t.generateYamlTestStream=r.generateYamlTestStream,t.plan=r.plan,t.resizeImageForUiTars=r.resizeImageForUiTars,t.systemPromptToLocateElement=r.systemPromptToLocateElement,t.vlmPlanning=r.vlmPlanning}}),require_child_process=__commonJS({"../../node_modules/.pnpm/@modern-js+plugin-module-node-polyfill@2.60.6_@modern-js+module-tools@2.60.6_typescript@5.8.3_/node_modules/@modern-js/plugin-module-node-polyfill/dist/mock/child_process.js"(t,r){init_globals(),r.exports={}}}),require_common6=__commonJS({"../shared/dist/lib/common.js"(t,r){let n,i,a;init_globals();var o,s=Object.create,l=Object.defineProperty,u=Object.getOwnPropertyDescriptor,d=Object.getOwnPropertyNames,c=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty,f=(t,r,n,i)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of d(r))h.call(t,a)||a===n||l(t,a,{get:()=>r[a],enumerable:!(i=u(r,a))||i.enumerable});return t},p={};((t,r)=>{for(var n in r)l(t,n,{get:r[n],enumerable:!0})})(p,{defaultRunDirName:()=>es,getMidsceneRunBaseDir:()=>eu,getMidsceneRunDir:()=>el,getMidsceneRunSubDir:()=>ed}),o=p,r.exports=f(l({},"__esModule",{value:!0}),o);var m=require_fs(),g=require_browser3(),b=(a=null!=(n=require_path_browserify())?s(c(n)):{},f(!i&&n&&n.__esModule?a:l(a,"default",{value:n,enumerable:!0}),n)),y="MIDSCENE_OPENAI_INIT_CONFIG_JSON",_="MIDSCENE_MODEL_NAME",v="MIDSCENE_LANGSMITH_DEBUG",A="MIDSCENE_DEBUG_AI_PROFILE",w="MIDSCENE_DEBUG_AI_RESPONSE",x="MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG",E="MIDSCENE_DEBUG_MODE",S="MIDSCENE_MCP_USE_PUPPETEER_MODE",C="MIDSCENE_MCP_ANDROID_MODE",I="MIDSCENE_FORCE_DEEP_THINK",T="MIDSCENE_OPENAI_SOCKS_PROXY",k="MIDSCENE_OPENAI_HTTP_PROXY",P="OPENAI_API_KEY",R="OPENAI_BASE_URL",O="OPENAI_MAX_TOKENS",M="MIDSCENE_ADB_PATH",j="MIDSCENE_ADB_REMOTE_HOST",N="MIDSCENE_ADB_REMOTE_PORT",B="MIDSCENE_ANDROID_IME_STRATEGY",L="MIDSCENE_CACHE",D="MIDSCENE_USE_VLM_UI_TARS",U="MIDSCENE_USE_QWEN_VL",F="MIDSCENE_USE_DOUBAO_VISION",z="MIDSCENE_USE_GEMINI",G="MIDSCENE_USE_VL_MODEL",H="MATCH_BY_POSITION",q="MIDSCENE_REPORT_TAG_NAME",V="MIDSCENE_REPLANNING_CYCLE_LIMIT",W="MIDSCENE_PREFERRED_LANGUAGE",$="MIDSCENE_USE_AZURE_OPENAI",K="MIDSCENE_AZURE_OPENAI_SCOPE",Z="MIDSCENE_AZURE_OPENAI_INIT_CONFIG_JSON",X="MIDSCENE_CACHE_MAX_FILENAME_LENGTH",Y="AZURE_OPENAI_ENDPOINT",J="AZURE_OPENAI_KEY",Q="AZURE_OPENAI_API_VERSION",ee="AZURE_OPENAI_DEPLOYMENT",et="MIDSCENE_USE_ANTHROPIC_SDK",er="ANTHROPIC_API_KEY",en="MIDSCENE_RUN_DIR",ei="OPENAI_USE_AZURE",ea=()=>(globalThis.midsceneGlobalConfig||(globalThis.midsceneGlobalConfig={[C]:import_browser.default.env[C]||void 0,[y]:import_browser.default.env[y]||void 0,[_]:import_browser.default.env[_]||void 0,[E]:import_browser.default.env[E]||void 0,[I]:import_browser.default.env[I]||void 0,[v]:import_browser.default.env[v]||void 0,[A]:import_browser.default.env[A]||void 0,[w]:import_browser.default.env[w]||void 0,[x]:import_browser.default.env[x]||void 0,[P]:import_browser.default.env[P]||void 0,[R]:import_browser.default.env[R]||void 0,[O]:import_browser.default.env[O]||void 0,[ei]:import_browser.default.env[ei]||void 0,[M]:import_browser.default.env[M]||void 0,[j]:import_browser.default.env[j]||void 0,[N]:import_browser.default.env[N]||void 0,[B]:import_browser.default.env[B]||void 0,[L]:import_browser.default.env[L]||void 0,[H]:import_browser.default.env[H]||void 0,[q]:import_browser.default.env[q]||void 0,[T]:import_browser.default.env[T]||void 0,[k]:import_browser.default.env[k]||void 0,[$]:import_browser.default.env[$]||void 0,[K]:import_browser.default.env[K]||void 0,[Z]:import_browser.default.env[Z]||void 0,[et]:import_browser.default.env[et]||void 0,[D]:import_browser.default.env[D]||void 0,[U]:import_browser.default.env[U]||void 0,[F]:import_browser.default.env[F]||void 0,[z]:import_browser.default.env[z]||void 0,[G]:import_browser.default.env[G]||void 0,[er]:import_browser.default.env[er]||void 0,[Y]:import_browser.default.env[Y]||void 0,[J]:import_browser.default.env[J]||void 0,[Q]:import_browser.default.env[Q]||void 0,[ee]:import_browser.default.env[ee]||void 0,[S]:import_browser.default.env[S]||void 0,[en]:import_browser.default.env[en]||void 0,[W]:import_browser.default.env[W]||void 0,[V]:import_browser.default.env[V]||void 0,[X]:import_browser.default.env[X]||void 0}),globalThis.midsceneGlobalConfig),eo=(require_sha2562(),void 0!==import_browser.default&&import_browser.default.versions?.node),es="midscene_run",el=()=>eo?(t=>{if(t===H)throw Error("MATCH_BY_POSITION is deprecated, use MIDSCENE_USE_VL_MODEL instead");let r=ea()[t];return"string"==typeof r?r.trim():r})(en)||es:"",eu=()=>{if(!eo)return"";let t=b.default.resolve(import_browser.default.cwd(),el());if(!(0,m.existsSync)(t))try{(0,m.mkdirSync)(t,{recursive:!0})}catch(r){t=b.default.join((0,g.tmpdir)(),es),(0,m.mkdirSync)(t,{recursive:!0})}return t},ed=t=>{if(!eo)return"";let r=eu(),n=b.default.join(r,t);return(0,m.existsSync)(n)||(0,m.mkdirSync)(n,{recursive:!0}),n}}}),require_fs2=__commonJS({"../shared/dist/lib/fs.js"(t,r){init_globals();var n,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,l={};((t,r)=>{for(var n in r)i(t,n,{get:r[n],enumerable:!0})})(l,{findNearestPackageJson:()=>m,getElementInfosScriptContent:()=>g,getExtraReturnLogic:()=>b,getRunningPkgInfo:()=>p}),n=l,r.exports=((t,r,n,l)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let u of o(r))s.call(t,u)||u===n||i(t,u,{get:()=>r[u],enumerable:!(l=a(r,u))||l.enumerable});return t})(i({},"__esModule",{value:!0}),n);var u=require_fs(),d=require_path_browserify(),c=(require_sha2562(),"undefined"!=typeof window),h="undefined"!=typeof WorkerGlobalScope,f=(void 0!==import_browser.default&&import_browser.default.versions,{});function p(t){if(c||h)return null;let r=t||import_browser.default.cwd();if(f[r])return f[r];let n=m(r),i=n?(0,d.join)(n,"package.json"):null;if(n&&i){let{name:t,version:a}=JSON.parse((0,u.readFileSync)(i,"utf-8"));return f[r]={name:t||"midscene-unknown-package-name",version:a||"0.0.0",dir:n},f[r]}return{name:"midscene-unknown-package-name",version:"0.0.0",dir:r}}function m(t){let r=(0,d.join)(t,"package.json");if((0,u.existsSync)(r))return t;let n=(0,d.dirname)(t);return n===t?null:m(n)}function g(){return'"use strict";\nvar midscene_element_inspector = (() => {\n var __create = Object.create;\n var __defProp = Object.defineProperty;\n var __defProps = Object.defineProperties;\n var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n var __getOwnPropDescs = Object.getOwnPropertyDescriptors;\n var __getOwnPropNames = Object.getOwnPropertyNames;\n var __getOwnPropSymbols = Object.getOwnPropertySymbols;\n var __getProtoOf = Object.getPrototypeOf;\n var __hasOwnProp = Object.prototype.hasOwnProperty;\n var __propIsEnum = Object.prototype.propertyIsEnumerable;\n var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\n var __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n };\n var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n var __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n };\n var __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n };\n var __copyProps = (to, from, except, desc) => {\n if (from && typeof from === "object" || typeof from === "function") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n };\n var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. "__esModule" has not been set), then set\n // "default" to the CommonJS "module.exports" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,\n mod\n ));\n var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);\n\n // resolve-false:/empty-stub\n var require_empty_stub = __commonJS({\n "resolve-false:/empty-stub"(exports, module) {\n "use strict";\n module.exports = {};\n }\n });\n\n // ../../node_modules/.pnpm/js-sha256@0.11.0/node_modules/js-sha256/src/sha256.js\n var require_sha256 = __commonJS({\n "../../node_modules/.pnpm/js-sha256@0.11.0/node_modules/js-sha256/src/sha256.js"(exports, module) {\n "use strict";\n (function() {\n "use strict";\n var ERROR = "input is invalid type";\n var WINDOW = typeof window === "object";\n var root = WINDOW ? window : {};\n if (root.JS_SHA256_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === "object";\n var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === "object" && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && typeof module === "object" && module.exports;\n var AMD = typeof define === "function" && define.amd;\n var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== "undefined";\n var HEX_CHARS = "0123456789abcdef".split("");\n var EXTRA = [-2147483648, 8388608, 32768, 128];\n var SHIFT = [24, 16, 8, 0];\n var K = [\n 1116352408,\n 1899447441,\n 3049323471,\n 3921009573,\n 961987163,\n 1508970993,\n 2453635748,\n 2870763221,\n 3624381080,\n 310598401,\n 607225278,\n 1426881987,\n 1925078388,\n 2162078206,\n 2614888103,\n 3248222580,\n 3835390401,\n 4022224774,\n 264347078,\n 604807628,\n 770255983,\n 1249150122,\n 1555081692,\n 1996064986,\n 2554220882,\n 2821834349,\n 2952996808,\n 3210313671,\n 3336571891,\n 3584528711,\n 113926993,\n 338241895,\n 666307205,\n 773529912,\n 1294757372,\n 1396182291,\n 1695183700,\n 1986661051,\n 2177026350,\n 2456956037,\n 2730485921,\n 2820302411,\n 3259730800,\n 3345764771,\n 3516065817,\n 3600352804,\n 4094571909,\n 275423344,\n 430227734,\n 506948616,\n 659060556,\n 883997877,\n 958139571,\n 1322822218,\n 1537002063,\n 1747873779,\n 1955562222,\n 2024104815,\n 2227730452,\n 2361852424,\n 2428436474,\n 2756734187,\n 3204031479,\n 3329325298\n ];\n var OUTPUT_TYPES = ["hex", "array", "digest", "arrayBuffer"];\n var blocks = [];\n if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function(obj) {\n return Object.prototype.toString.call(obj) === "[object Array]";\n };\n }\n if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function(obj) {\n return typeof obj === "object" && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n var createOutputMethod = function(outputType, is224) {\n return function(message) {\n return new Sha256(is224, true).update(message)[outputType]();\n };\n };\n var createMethod = function(is224) {\n var method = createOutputMethod("hex", is224);\n if (NODE_JS) {\n method = nodeWrap(method, is224);\n }\n method.create = function() {\n return new Sha256(is224);\n };\n method.update = function(message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type, is224);\n }\n return method;\n };\n var nodeWrap = function(method, is224) {\n var crypto = require_empty_stub();\n var Buffer2 = require_empty_stub().Buffer;\n var algorithm = is224 ? "sha224" : "sha256";\n var bufferFrom;\n if (Buffer2.from && !root.JS_SHA256_NO_BUFFER_FROM) {\n bufferFrom = Buffer2.from;\n } else {\n bufferFrom = function(message) {\n return new Buffer2(message);\n };\n }\n var nodeMethod = function(message) {\n if (typeof message === "string") {\n return crypto.createHash(algorithm).update(message, "utf8").digest("hex");\n } else {\n if (message === null || message === void 0) {\n throw new Error(ERROR);\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) || message.constructor === Buffer2) {\n return crypto.createHash(algorithm).update(bufferFrom(message)).digest("hex");\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n var createHmacOutputMethod = function(outputType, is224) {\n return function(key, message) {\n return new HmacSha256(key, is224, true).update(message)[outputType]();\n };\n };\n var createHmacMethod = function(is224) {\n var method = createHmacOutputMethod("hex", is224);\n method.create = function(key) {\n return new HmacSha256(key, is224);\n };\n method.update = function(key, message) {\n return method.create(key).update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createHmacOutputMethod(type, is224);\n }\n return method;\n };\n function Sha256(is224, sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n if (is224) {\n this.h0 = 3238371032;\n this.h1 = 914150663;\n this.h2 = 812702999;\n this.h3 = 4144912697;\n this.h4 = 4290775857;\n this.h5 = 1750603025;\n this.h6 = 1694076839;\n this.h7 = 3204075428;\n } else {\n this.h0 = 1779033703;\n this.h1 = 3144134277;\n this.h2 = 1013904242;\n this.h3 = 2773480762;\n this.h4 = 1359893119;\n this.h5 = 2600822924;\n this.h6 = 528734635;\n this.h7 = 1541459225;\n }\n this.block = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n this.is224 = is224;\n }\n Sha256.prototype.update = function(message) {\n if (this.finalized) {\n return;\n }\n var notString, type = typeof message;\n if (type !== "string") {\n if (type === "object") {\n if (message === null) {\n throw new Error(ERROR);\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw new Error(ERROR);\n }\n }\n } else {\n throw new Error(ERROR);\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks2 = this.blocks;\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks2[0] = this.block;\n this.block = blocks2[16] = blocks2[1] = blocks2[2] = blocks2[3] = blocks2[4] = blocks2[5] = blocks2[6] = blocks2[7] = blocks2[8] = blocks2[9] = blocks2[10] = blocks2[11] = blocks2[12] = blocks2[13] = blocks2[14] = blocks2[15] = 0;\n }\n if (notString) {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks2[i >>> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 128) {\n blocks2[i >>> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 2048) {\n blocks2[i >>> 2] |= (192 | code >>> 6) << SHIFT[i++ & 3];\n blocks2[i >>> 2] |= (128 | code & 63) << SHIFT[i++ & 3];\n } else if (code < 55296 || code >= 57344) {\n blocks2[i >>> 2] |= (224 | code >>> 12) << SHIFT[i++ & 3];\n blocks2[i >>> 2] |= (128 | code >>> 6 & 63) << SHIFT[i++ & 3];\n blocks2[i >>> 2] |= (128 | code & 63) << SHIFT[i++ & 3];\n } else {\n code = 65536 + ((code & 1023) << 10 | message.charCodeAt(++index) & 1023);\n blocks2[i >>> 2] |= (240 | code >>> 18) << SHIFT[i++ & 3];\n blocks2[i >>> 2] |= (128 | code >>> 12 & 63) << SHIFT[i++ & 3];\n blocks2[i >>> 2] |= (128 | code >>> 6 & 63) << SHIFT[i++ & 3];\n blocks2[i >>> 2] |= (128 | code & 63) << SHIFT[i++ & 3];\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.block = blocks2[16];\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n Sha256.prototype.finalize = function() {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks2 = this.blocks, i = this.lastByteIndex;\n blocks2[16] = this.block;\n blocks2[i >>> 2] |= EXTRA[i & 3];\n this.block = blocks2[16];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks2[0] = this.block;\n blocks2[16] = blocks2[1] = blocks2[2] = blocks2[3] = blocks2[4] = blocks2[5] = blocks2[6] = blocks2[7] = blocks2[8] = blocks2[9] = blocks2[10] = blocks2[11] = blocks2[12] = blocks2[13] = blocks2[14] = blocks2[15] = 0;\n }\n blocks2[14] = this.hBytes << 3 | this.bytes >>> 29;\n blocks2[15] = this.bytes << 3;\n this.hash();\n };\n Sha256.prototype.hash = function() {\n var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6, h = this.h7, blocks2 = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc;\n for (j = 16; j < 64; ++j) {\n t1 = blocks2[j - 15];\n s0 = (t1 >>> 7 | t1 << 25) ^ (t1 >>> 18 | t1 << 14) ^ t1 >>> 3;\n t1 = blocks2[j - 2];\n s1 = (t1 >>> 17 | t1 << 15) ^ (t1 >>> 19 | t1 << 13) ^ t1 >>> 10;\n blocks2[j] = blocks2[j - 16] + s0 + blocks2[j - 7] + s1 << 0;\n }\n bc = b & c;\n for (j = 0; j < 64; j += 4) {\n if (this.first) {\n if (this.is224) {\n ab = 300032;\n t1 = blocks2[0] - 1413257819;\n h = t1 - 150054599 << 0;\n d = t1 + 24177077 << 0;\n } else {\n ab = 704751109;\n t1 = blocks2[0] - 210244248;\n h = t1 - 1521486534 << 0;\n d = t1 + 143694565 << 0;\n }\n this.first = false;\n } else {\n s0 = (a >>> 2 | a << 30) ^ (a >>> 13 | a << 19) ^ (a >>> 22 | a << 10);\n s1 = (e >>> 6 | e << 26) ^ (e >>> 11 | e << 21) ^ (e >>> 25 | e << 7);\n ab = a & b;\n maj = ab ^ a & c ^ bc;\n ch = e & f ^ ~e & g;\n t1 = h + s1 + ch + K[j] + blocks2[j];\n t2 = s0 + maj;\n h = d + t1 << 0;\n d = t1 + t2 << 0;\n }\n s0 = (d >>> 2 | d << 30) ^ (d >>> 13 | d << 19) ^ (d >>> 22 | d << 10);\n s1 = (h >>> 6 | h << 26) ^ (h >>> 11 | h << 21) ^ (h >>> 25 | h << 7);\n da = d & a;\n maj = da ^ d & b ^ ab;\n ch = h & e ^ ~h & f;\n t1 = g + s1 + ch + K[j + 1] + blocks2[j + 1];\n t2 = s0 + maj;\n g = c + t1 << 0;\n c = t1 + t2 << 0;\n s0 = (c >>> 2 | c << 30) ^ (c >>> 13 | c << 19) ^ (c >>> 22 | c << 10);\n s1 = (g >>> 6 | g << 26) ^ (g >>> 11 | g << 21) ^ (g >>> 25 | g << 7);\n cd = c & d;\n maj = cd ^ c & a ^ da;\n ch = g & h ^ ~g & e;\n t1 = f + s1 + ch + K[j + 2] + blocks2[j + 2];\n t2 = s0 + maj;\n f = b + t1 << 0;\n b = t1 + t2 << 0;\n s0 = (b >>> 2 | b << 30) ^ (b >>> 13 | b << 19) ^ (b >>> 22 | b << 10);\n s1 = (f >>> 6 | f << 26) ^ (f >>> 11 | f << 21) ^ (f >>> 25 | f << 7);\n bc = b & c;\n maj = bc ^ b & d ^ cd;\n ch = f & g ^ ~f & h;\n t1 = e + s1 + ch + K[j + 3] + blocks2[j + 3];\n t2 = s0 + maj;\n e = a + t1 << 0;\n a = t1 + t2 << 0;\n this.chromeBugWorkAround = true;\n }\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n this.h4 = this.h4 + e << 0;\n this.h5 = this.h5 + f << 0;\n this.h6 = this.h6 + g << 0;\n this.h7 = this.h7 + h << 0;\n };\n Sha256.prototype.hex = function() {\n this.finalize();\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5, h6 = this.h6, h7 = this.h7;\n var hex = HEX_CHARS[h0 >>> 28 & 15] + HEX_CHARS[h0 >>> 24 & 15] + HEX_CHARS[h0 >>> 20 & 15] + HEX_CHARS[h0 >>> 16 & 15] + HEX_CHARS[h0 >>> 12 & 15] + HEX_CHARS[h0 >>> 8 & 15] + HEX_CHARS[h0 >>> 4 & 15] + HEX_CHARS[h0 & 15] + HEX_CHARS[h1 >>> 28 & 15] + HEX_CHARS[h1 >>> 24 & 15] + HEX_CHARS[h1 >>> 20 & 15] + HEX_CHARS[h1 >>> 16 & 15] + HEX_CHARS[h1 >>> 12 & 15] + HEX_CHARS[h1 >>> 8 & 15] + HEX_CHARS[h1 >>> 4 & 15] + HEX_CHARS[h1 & 15] + HEX_CHARS[h2 >>> 28 & 15] + HEX_CHARS[h2 >>> 24 & 15] + HEX_CHARS[h2 >>> 20 & 15] + HEX_CHARS[h2 >>> 16 & 15] + HEX_CHARS[h2 >>> 12 & 15] + HEX_CHARS[h2 >>> 8 & 15] + HEX_CHARS[h2 >>> 4 & 15] + HEX_CHARS[h2 & 15] + HEX_CHARS[h3 >>> 28 & 15] + HEX_CHARS[h3 >>> 24 & 15] + HEX_CHARS[h3 >>> 20 & 15] + HEX_CHARS[h3 >>> 16 & 15] + HEX_CHARS[h3 >>> 12 & 15] + HEX_CHARS[h3 >>> 8 & 15] + HEX_CHARS[h3 >>> 4 & 15] + HEX_CHARS[h3 & 15] + HEX_CHARS[h4 >>> 28 & 15] + HEX_CHARS[h4 >>> 24 & 15] + HEX_CHARS[h4 >>> 20 & 15] + HEX_CHARS[h4 >>> 16 & 15] + HEX_CHARS[h4 >>> 12 & 15] + HEX_CHARS[h4 >>> 8 & 15] + HEX_CHARS[h4 >>> 4 & 15] + HEX_CHARS[h4 & 15] + HEX_CHARS[h5 >>> 28 & 15] + HEX_CHARS[h5 >>> 24 & 15] + HEX_CHARS[h5 >>> 20 & 15] + HEX_CHARS[h5 >>> 16 & 15] + HEX_CHARS[h5 >>> 12 & 15] + HEX_CHARS[h5 >>> 8 & 15] + HEX_CHARS[h5 >>> 4 & 15] + HEX_CHARS[h5 & 15] + HEX_CHARS[h6 >>> 28 & 15] + HEX_CHARS[h6 >>> 24 & 15] + HEX_CHARS[h6 >>> 20 & 15] + HEX_CHARS[h6 >>> 16 & 15] + HEX_CHARS[h6 >>> 12 & 15] + HEX_CHARS[h6 >>> 8 & 15] + HEX_CHARS[h6 >>> 4 & 15] + HEX_CHARS[h6 & 15];\n if (!this.is224) {\n hex += HEX_CHARS[h7 >>> 28 & 15] + HEX_CHARS[h7 >>> 24 & 15] + HEX_CHARS[h7 >>> 20 & 15] + HEX_CHARS[h7 >>> 16 & 15] + HEX_CHARS[h7 >>> 12 & 15] + HEX_CHARS[h7 >>> 8 & 15] + HEX_CHARS[h7 >>> 4 & 15] + HEX_CHARS[h7 & 15];\n }\n return hex;\n };\n Sha256.prototype.toString = Sha256.prototype.hex;\n Sha256.prototype.digest = function() {\n this.finalize();\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5, h6 = this.h6, h7 = this.h7;\n var arr = [\n h0 >>> 24 & 255,\n h0 >>> 16 & 255,\n h0 >>> 8 & 255,\n h0 & 255,\n h1 >>> 24 & 255,\n h1 >>> 16 & 255,\n h1 >>> 8 & 255,\n h1 & 255,\n h2 >>> 24 & 255,\n h2 >>> 16 & 255,\n h2 >>> 8 & 255,\n h2 & 255,\n h3 >>> 24 & 255,\n h3 >>> 16 & 255,\n h3 >>> 8 & 255,\n h3 & 255,\n h4 >>> 24 & 255,\n h4 >>> 16 & 255,\n h4 >>> 8 & 255,\n h4 & 255,\n h5 >>> 24 & 255,\n h5 >>> 16 & 255,\n h5 >>> 8 & 255,\n h5 & 255,\n h6 >>> 24 & 255,\n h6 >>> 16 & 255,\n h6 >>> 8 & 255,\n h6 & 255\n ];\n if (!this.is224) {\n arr.push(h7 >>> 24 & 255, h7 >>> 16 & 255, h7 >>> 8 & 255, h7 & 255);\n }\n return arr;\n };\n Sha256.prototype.array = Sha256.prototype.digest;\n Sha256.prototype.arrayBuffer = function() {\n this.finalize();\n var buffer = new ArrayBuffer(this.is224 ? 28 : 32);\n var dataView = new DataView(buffer);\n dataView.setUint32(0, this.h0);\n dataView.setUint32(4, this.h1);\n dataView.setUint32(8, this.h2);\n dataView.setUint32(12, this.h3);\n dataView.setUint32(16, this.h4);\n dataView.setUint32(20, this.h5);\n dataView.setUint32(24, this.h6);\n if (!this.is224) {\n dataView.setUint32(28, this.h7);\n }\n return buffer;\n };\n function HmacSha256(key, is224, sharedMemory) {\n var i, type = typeof key;\n if (type === "string") {\n var bytes = [], length = key.length, index = 0, code;\n for (i = 0; i < length; ++i) {\n code = key.charCodeAt(i);\n if (code < 128) {\n bytes[index++] = code;\n } else if (code < 2048) {\n bytes[index++] = 192 | code >>> 6;\n bytes[index++] = 128 | code & 63;\n } else if (code < 55296 || code >= 57344) {\n bytes[index++] = 224 | code >>> 12;\n bytes[index++] = 128 | code >>> 6 & 63;\n bytes[index++] = 128 | code & 63;\n } else {\n code = 65536 + ((code & 1023) << 10 | key.charCodeAt(++i) & 1023);\n bytes[index++] = 240 | code >>> 18;\n bytes[index++] = 128 | code >>> 12 & 63;\n bytes[index++] = 128 | code >>> 6 & 63;\n bytes[index++] = 128 | code & 63;\n }\n }\n key = bytes;\n } else {\n if (type === "object") {\n if (key === null) {\n throw new Error(ERROR);\n } else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) {\n key = new Uint8Array(key);\n } else if (!Array.isArray(key)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) {\n throw new Error(ERROR);\n }\n }\n } else {\n throw new Error(ERROR);\n }\n }\n if (key.length > 64) {\n key = new Sha256(is224, true).update(key).array();\n }\n var oKeyPad = [], iKeyPad = [];\n for (i = 0; i < 64; ++i) {\n var b = key[i] || 0;\n oKeyPad[i] = 92 ^ b;\n iKeyPad[i] = 54 ^ b;\n }\n Sha256.call(this, is224, sharedMemory);\n this.update(iKeyPad);\n this.oKeyPad = oKeyPad;\n this.inner = true;\n this.sharedMemory = sharedMemory;\n }\n HmacSha256.prototype = new Sha256();\n HmacSha256.prototype.finalize = function() {\n Sha256.prototype.finalize.call(this);\n if (this.inner) {\n this.inner = false;\n var innerHash = this.array();\n Sha256.call(this, this.is224, this.sharedMemory);\n this.update(this.oKeyPad);\n this.update(innerHash);\n Sha256.prototype.finalize.call(this);\n }\n };\n var exports2 = createMethod();\n exports2.sha256 = exports2;\n exports2.sha224 = createMethod(true);\n exports2.sha256.hmac = createHmacMethod();\n exports2.sha224.hmac = createHmacMethod(true);\n if (COMMON_JS) {\n module.exports = exports2;\n } else {\n root.sha256 = exports2.sha256;\n root.sha224 = exports2.sha224;\n if (AMD) {\n define(function() {\n return exports2;\n });\n }\n }\n })();\n }\n });\n\n // src/extractor/index.ts\n var extractor_exports = {};\n __export(extractor_exports, {\n descriptionOfTree: () => descriptionOfTree,\n generateElementByPosition: () => generateElementByPosition,\n getElementInfoByXpath: () => getElementInfoByXpath,\n getElementXpath: () => getElementXpath,\n getNodeFromCacheList: () => getNodeFromCacheList,\n getNodeInfoByXpath: () => getNodeInfoByXpath,\n getXpathsById: () => getXpathsById,\n getXpathsByPoint: () => getXpathsByPoint,\n isNotContainerElement: () => isNotContainerElement,\n setNodeHashCacheListOnWindow: () => setNodeHashCacheListOnWindow,\n traverseTree: () => traverseTree,\n treeToList: () => treeToList,\n trimAttributes: () => trimAttributes,\n truncateText: () => truncateText,\n webExtractNodeTree: () => extractTreeNode,\n webExtractNodeTreeAsString: () => extractTreeNodeAsString,\n webExtractTextWithPosition: () => extractTextWithPosition\n });\n\n // src/extractor/tree.ts\n function truncateText(text, maxLength = 150) {\n if (typeof text === "undefined") {\n return "";\n }\n if (typeof text === "object") {\n text = JSON.stringify(text);\n }\n if (typeof text === "number") {\n return text.toString();\n }\n if (typeof text === "string" && text.length > maxLength) {\n return `${text.slice(0, maxLength)}...`;\n }\n if (typeof text === "string") {\n return text.trim();\n }\n return "";\n }\n function trimAttributes(attributes, truncateTextLength) {\n const tailorAttributes = Object.keys(attributes).reduce(\n (res, currentKey) => {\n const attributeVal = attributes[currentKey];\n if (currentKey === "style" || currentKey === "htmlTagName" || currentKey === "nodeType") {\n return res;\n }\n res[currentKey] = truncateText(attributeVal, truncateTextLength);\n return res;\n },\n {}\n );\n return tailorAttributes;\n }\n var nodeSizeThreshold = 4;\n function descriptionOfTree(tree, truncateTextLength, filterNonTextContent = false, visibleOnly = true) {\n const attributesString = (kv) => {\n return Object.entries(kv).map(\n ([key, value]) => `${key}="${truncateText(value, truncateTextLength)}"`\n ).join(" ");\n };\n function buildContentTree(node, indent = 0, visibleOnly2 = true) {\n var _a2;\n let before = "";\n let contentWithIndent = "";\n let after = "";\n let emptyNode = true;\n const indentStr = " ".repeat(indent);\n let children = "";\n for (let i = 0; i < (node.children || []).length; i++) {\n const childContent = buildContentTree(\n node.children[i],\n indent + 1,\n visibleOnly2\n );\n if (childContent) {\n children += `\n${childContent}`;\n }\n }\n if (node.node && node.node.rect.width > nodeSizeThreshold && node.node.rect.height > nodeSizeThreshold && (!filterNonTextContent || filterNonTextContent && node.node.content) && (!visibleOnly2 || visibleOnly2 && node.node.isVisible)) {\n emptyNode = false;\n let nodeTypeString;\n if ((_a2 = node.node.attributes) == null ? void 0 : _a2.htmlTagName) {\n nodeTypeString = node.node.attributes.htmlTagName.replace(/[<>]/g, "");\n } else {\n nodeTypeString = node.node.attributes.nodeType.replace(/\\sNode$/, "").toLowerCase();\n }\n const markerId = node.node.indexId;\n const markerIdString = markerId ? `markerId="${markerId}"` : "";\n const rectAttribute = node.node.rect ? {\n left: node.node.rect.left,\n top: node.node.rect.top,\n width: node.node.rect.width,\n height: node.node.rect.height\n } : {};\n before = `<${nodeTypeString} id="${node.node.id}" ${markerIdString} ${attributesString(trimAttributes(node.node.attributes || {}, truncateTextLength))} ${attributesString(rectAttribute)}>`;\n const content = truncateText(node.node.content, truncateTextLength);\n contentWithIndent = content ? `\n${indentStr} ${content}` : "";\n after = `</${nodeTypeString}>`;\n } else if (!filterNonTextContent) {\n if (!children.trim().startsWith("<>")) {\n before = "<>";\n contentWithIndent = "";\n after = "</>";\n }\n }\n if (emptyNode && !children.trim()) {\n return "";\n }\n const result2 = `${indentStr}${before}${contentWithIndent}${children}\n${indentStr}${after}`;\n if (result2.trim()) {\n return result2;\n }\n return "";\n }\n const result = buildContentTree(tree, 0, visibleOnly);\n return result.replace(/^\\s*\\n/gm, "");\n }\n function treeToList(tree) {\n const result = [];\n function dfs(node) {\n if (node.node) {\n result.push(node.node);\n }\n for (const child of node.children) {\n dfs(child);\n }\n }\n dfs(tree);\n return result;\n }\n function traverseTree(tree, onNode) {\n function dfs(node) {\n if (node.node) {\n node.node = onNode(node.node);\n }\n for (const child of node.children) {\n dfs(child);\n }\n }\n dfs(tree);\n return tree;\n }\n\n // src/constants/index.ts\n var CONTAINER_MINI_HEIGHT = 3;\n var CONTAINER_MINI_WIDTH = 3;\n\n // src/utils.ts\n var import_js_sha256 = __toESM(require_sha256());\n var _a;\n var ifInNode = typeof process !== "undefined" && ((_a = process.versions) == null ? void 0 : _a.node);\n var hashMap = {};\n function generateHashId(rect, content = "") {\n const combined = JSON.stringify({\n content,\n rect\n });\n let sliceLength = 5;\n let slicedHash = "";\n const hashHex = import_js_sha256.sha256.create().update(combined).hex();\n const toLetters = (hex) => {\n return hex.split("").map((char) => {\n const code = Number.parseInt(char, 16);\n return String.fromCharCode(97 + code % 26);\n }).join("");\n };\n const hashLetters = toLetters(hashHex);\n while (sliceLength < hashLetters.length - 1) {\n slicedHash = hashLetters.slice(0, sliceLength);\n if (hashMap[slicedHash] && hashMap[slicedHash] !== combined) {\n sliceLength++;\n continue;\n }\n hashMap[slicedHash] = combined;\n break;\n }\n return slicedHash;\n }\n\n // src/extractor/dom-util.ts\n function isFormElement(node) {\n return node instanceof HTMLElement && (node.tagName.toLowerCase() === "input" || node.tagName.toLowerCase() === "textarea" || node.tagName.toLowerCase() === "select" || node.tagName.toLowerCase() === "option");\n }\n function isButtonElement(node) {\n return node instanceof HTMLElement && node.tagName.toLowerCase() === "button";\n }\n function isAElement(node) {\n return node instanceof HTMLElement && node.tagName.toLowerCase() === "a";\n }\n function isSvgElement(node) {\n return node instanceof SVGElement;\n }\n function isImgElement(node) {\n if (!includeBaseElement(node) && node instanceof Element) {\n const computedStyle = window.getComputedStyle(node);\n const backgroundImage = computedStyle.getPropertyValue("background-image");\n if (backgroundImage !== "none") {\n return true;\n }\n }\n if (isIconfont(node)) {\n return true;\n }\n return node instanceof HTMLElement && node.tagName.toLowerCase() === "img" || node instanceof SVGElement && node.tagName.toLowerCase() === "svg";\n }\n function isIconfont(node) {\n if (node instanceof Element) {\n const computedStyle = window.getComputedStyle(node);\n const fontFamilyValue = computedStyle.fontFamily || "";\n return fontFamilyValue.toLowerCase().indexOf("iconfont") >= 0;\n }\n return false;\n }\n function isNotContainerElement(node) {\n return isTextElement(node) || isIconfont(node) || isImgElement(node) || isButtonElement(node) || isAElement(node) || isFormElement(node);\n }\n function isTextElement(node) {\n var _a2, _b, _c;\n if (node instanceof Element) {\n if (((_a2 = node == null ? void 0 : node.childNodes) == null ? void 0 : _a2.length) === 1 && (node == null ? void 0 : node.childNodes[0]) instanceof Text) {\n return true;\n }\n }\n return ((_c = (_b = node.nodeName) == null ? void 0 : _b.toLowerCase) == null ? void 0 : _c.call(_b)) === "#text" && !isIconfont(node);\n }\n function isContainerElement(node) {\n if (!(node instanceof HTMLElement))\n return false;\n if (includeBaseElement(node)) {\n return false;\n }\n const computedStyle = window.getComputedStyle(node);\n const backgroundColor = computedStyle.getPropertyValue("background-color");\n if (backgroundColor) {\n return true;\n }\n return false;\n }\n function includeBaseElement(node) {\n if (!(node instanceof HTMLElement))\n return false;\n if (node.innerText) {\n return true;\n }\n const includeList = [\n "svg",\n "button",\n "input",\n "textarea",\n "select",\n "option",\n "img",\n "a"\n ];\n for (const tagName of includeList) {\n const element = node.querySelectorAll(tagName);\n if (element.length > 0) {\n return true;\n }\n }\n return false;\n }\n function generateElementByPosition(position) {\n const rect = {\n left: Math.max(position.x - 4, 0),\n top: Math.max(position.y - 4, 0),\n width: 8,\n height: 8\n };\n const id = generateHashId(rect);\n const element = {\n id,\n attributes: { nodeType: "POSITION Node" /* POSITION */ },\n rect,\n content: "",\n center: [position.x, position.y]\n };\n return element;\n }\n\n // src/extractor/util.ts\n var MAX_VALUE_LENGTH = 300;\n var debugMode = false;\n function setDebugMode(mode) {\n debugMode = mode;\n }\n function logger(..._msg) {\n if (!debugMode) {\n return;\n }\n console.log(..._msg);\n }\n function isElementPartiallyInViewport(rect, currentWindow, currentDocument, visibleAreaRatio = 2 / 3) {\n const elementHeight = rect.height;\n const elementWidth = rect.width;\n const viewportRect = {\n left: 0,\n top: 0,\n width: currentWindow.innerWidth || currentDocument.documentElement.clientWidth,\n height: currentWindow.innerHeight || currentDocument.documentElement.clientHeight,\n right: currentWindow.innerWidth || currentDocument.documentElement.clientWidth,\n bottom: currentWindow.innerHeight || currentDocument.documentElement.clientHeight,\n x: 0,\n y: 0,\n zoom: 1\n };\n const overlapRect = overlappedRect(rect, viewportRect);\n if (!overlapRect) {\n return false;\n }\n const visibleArea = overlapRect.width * overlapRect.height;\n const totalArea = elementHeight * elementWidth;\n return visibleArea / totalArea >= visibleAreaRatio;\n }\n function getPseudoElementContent(element, currentWindow) {\n if (!(element instanceof currentWindow.HTMLElement)) {\n return { before: "", after: "" };\n }\n const beforeContent = currentWindow.getComputedStyle(element, "::before").getPropertyValue("content");\n const afterContent = currentWindow.getComputedStyle(element, "::after").getPropertyValue("content");\n return {\n before: beforeContent === "none" ? "" : beforeContent.replace(/"/g, ""),\n after: afterContent === "none" ? "" : afterContent.replace(/"/g, "")\n };\n }\n function overlappedRect(rect1, rect2) {\n const left = Math.max(rect1.left, rect2.left);\n const top = Math.max(rect1.top, rect2.top);\n const right = Math.min(rect1.right, rect2.right);\n const bottom = Math.min(rect1.bottom, rect2.bottom);\n if (left < right && top < bottom) {\n return {\n left,\n top,\n right,\n bottom,\n width: right - left,\n height: bottom - top,\n x: left,\n y: top,\n zoom: 1\n };\n }\n return null;\n }\n function getRect(el, baseZoom, currentWindow) {\n let originalRect;\n let newZoom = 1;\n if (!(el instanceof currentWindow.HTMLElement)) {\n const range = currentWindow.document.createRange();\n range.selectNodeContents(el);\n originalRect = range.getBoundingClientRect();\n } else {\n originalRect = el.getBoundingClientRect();\n if (!("currentCSSZoom" in el)) {\n newZoom = Number.parseFloat(currentWindow.getComputedStyle(el).zoom) || 1;\n }\n }\n const zoom = newZoom * baseZoom;\n return {\n width: originalRect.width * zoom,\n height: originalRect.height * zoom,\n left: originalRect.left * zoom,\n top: originalRect.top * zoom,\n right: originalRect.right * zoom,\n bottom: originalRect.bottom * zoom,\n x: originalRect.x * zoom,\n y: originalRect.y * zoom,\n zoom\n };\n }\n var isElementCovered = (el, rect, currentWindow) => {\n const x = rect.left + rect.width / 2;\n const y = rect.top + rect.height / 2;\n const topElement = currentWindow.document.elementFromPoint(x, y);\n if (!topElement) {\n return false;\n }\n if (topElement === el) {\n return false;\n }\n if (el == null ? void 0 : el.contains(topElement)) {\n return false;\n }\n if (topElement == null ? void 0 : topElement.contains(el)) {\n return false;\n }\n const rectOfTopElement = getRect(topElement, 1, currentWindow);\n const overlapRect = overlappedRect(rect, rectOfTopElement);\n if (!overlapRect) {\n return false;\n }\n logger(el, "Element is covered by another element", {\n topElement,\n el,\n rect,\n x,\n y\n });\n return true;\n };\n function elementRect(el, currentWindow, currentDocument, baseZoom = 1) {\n if (!el) {\n logger(el, "Element is not in the DOM hierarchy");\n return false;\n }\n if (!(el instanceof currentWindow.HTMLElement) && el.nodeType !== Node.TEXT_NODE && el.nodeName.toLowerCase() !== "svg") {\n logger(el, "Element is not in the DOM hierarchy");\n return false;\n }\n if (el instanceof currentWindow.HTMLElement) {\n const style = currentWindow.getComputedStyle(el);\n if (style.display === "none" || style.visibility === "hidden" || style.opacity === "0" && el.tagName !== "INPUT") {\n logger(el, "Element is hidden");\n return false;\n }\n }\n const rect = getRect(el, baseZoom, currentWindow);\n if (rect.width === 0 && rect.height === 0) {\n logger(el, "Element has no size");\n return false;\n }\n if (baseZoom === 1 && isElementCovered(el, rect, currentWindow)) {\n return false;\n }\n const isVisible = isElementPartiallyInViewport(\n rect,\n currentWindow,\n currentDocument\n );\n let parent = el;\n const parentUntilNonStatic = (currentNode) => {\n let parent2 = currentNode == null ? void 0 : currentNode.parentElement;\n while (parent2) {\n const style = currentWindow.getComputedStyle(parent2);\n if (style.position !== "static") {\n return parent2;\n }\n parent2 = parent2.parentElement;\n }\n return null;\n };\n while (parent && parent !== currentDocument.body) {\n if (!(parent instanceof currentWindow.HTMLElement)) {\n parent = parent.parentElement;\n continue;\n }\n const parentStyle = currentWindow.getComputedStyle(parent);\n if (parentStyle.overflow === "hidden") {\n const parentRect = getRect(parent, 1, currentWindow);\n const tolerance = 10;\n if (rect.right < parentRect.left - tolerance || rect.left > parentRect.right + tolerance || rect.bottom < parentRect.top - tolerance || rect.top > parentRect.bottom + tolerance) {\n logger(el, "element is partially or totally hidden by an ancestor", {\n rect,\n parentRect\n });\n return false;\n }\n }\n if (parentStyle.position === "fixed" || parentStyle.position === "sticky") {\n break;\n }\n if (parentStyle.position === "absolute") {\n parent = parentUntilNonStatic(parent);\n } else {\n parent = parent.parentElement;\n }\n }\n return {\n left: Math.round(rect.left),\n top: Math.round(rect.top),\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n zoom: rect.zoom,\n isVisible\n };\n }\n function getNodeAttributes(node, currentWindow) {\n if (!node || !(node instanceof currentWindow.HTMLElement) || !node.attributes) {\n return {};\n }\n const attributesList = Array.from(node.attributes).map((attr) => {\n if (attr.name === "class") {\n return [attr.name, `.${attr.value.split(" ").join(".")}`];\n }\n if (!attr.value) {\n return [];\n }\n let value = attr.value;\n if (value.startsWith("data:image")) {\n value = "image";\n }\n if (value.length > MAX_VALUE_LENGTH) {\n value = `${value.slice(0, MAX_VALUE_LENGTH)}...`;\n }\n return [attr.name, value];\n });\n return Object.fromEntries(attributesList);\n }\n function midsceneGenerateHash(node, content, rect) {\n const slicedHash = generateHashId(rect, content);\n if (node) {\n if (!window.midsceneNodeHashCacheList) {\n setNodeHashCacheListOnWindow();\n }\n setNodeToCacheList(node, slicedHash);\n }\n return slicedHash;\n }\n function setNodeHashCacheListOnWindow() {\n if (typeof window !== "undefined") {\n window.midsceneNodeHashCacheList = [];\n }\n }\n function setNodeToCacheList(node, id) {\n var _a2;\n if (typeof window !== "undefined") {\n if (getNodeFromCacheList(id)) {\n return;\n }\n (_a2 = window.midsceneNodeHashCacheList) == null ? void 0 : _a2.push({ node, id });\n }\n }\n function getNodeFromCacheList(id) {\n var _a2, _b;\n if (typeof window !== "undefined") {\n return (_b = (_a2 = window.midsceneNodeHashCacheList) == null ? void 0 : _a2.find(\n (item) => item.id === id\n )) == null ? void 0 : _b.node;\n }\n return null;\n }\n function getTopDocument() {\n const container = document.body || document;\n return container;\n }\n\n // src/extractor/web-extractor.ts\n var indexId = 0;\n function tagNameOfNode(node) {\n var _a2, _b;\n let tagName = "";\n if (node instanceof HTMLElement) {\n tagName = (_a2 = node.tagName) == null ? void 0 : _a2.toLowerCase();\n } else {\n const parentElement = node.parentElement;\n if (parentElement && parentElement instanceof HTMLElement) {\n tagName = (_b = parentElement.tagName) == null ? void 0 : _b.toLowerCase();\n }\n }\n return tagName ? `<${tagName}>` : "";\n }\n function collectElementInfo(node, currentWindow, currentDocument, baseZoom = 1, basePoint = { left: 0, top: 0 }, isContainer = false) {\n var _a2, _b;\n const rect = elementRect(node, currentWindow, currentDocument, baseZoom);\n if (!rect) {\n return null;\n }\n if (rect.width < CONTAINER_MINI_WIDTH || rect.height < CONTAINER_MINI_HEIGHT) {\n return null;\n }\n if (basePoint.left !== 0 || basePoint.top !== 0) {\n rect.left += basePoint.left;\n rect.top += basePoint.top;\n }\n if (rect.height >= window.innerHeight && rect.width >= window.innerWidth) {\n return null;\n }\n if (isFormElement(node)) {\n const attributes = getNodeAttributes(node, currentWindow);\n let valueContent = attributes.value || attributes.placeholder || node.textContent || "";\n const nodeHashId = midsceneGenerateHash(node, valueContent, rect);\n const tagName = node.tagName.toLowerCase();\n if (node.tagName.toLowerCase() === "select") {\n const selectedOption = node.options[node.selectedIndex];\n valueContent = (selectedOption == null ? void 0 : selectedOption.textContent) || "";\n }\n if ((node.tagName.toLowerCase() === "input" || node.tagName.toLowerCase() === "textarea") && node.value) {\n valueContent = node.value;\n }\n const elementInfo = {\n id: nodeHashId,\n nodeHashId,\n nodeType: "FORM_ITEM Node" /* FORM_ITEM */,\n indexId: indexId++,\n attributes: __spreadProps(__spreadValues({}, attributes), {\n htmlTagName: `<${tagName}>`,\n nodeType: "FORM_ITEM Node" /* FORM_ITEM */\n }),\n content: valueContent.trim(),\n rect,\n center: [\n Math.round(rect.left + rect.width / 2),\n Math.round(rect.top + rect.height / 2)\n ],\n zoom: rect.zoom,\n isVisible: rect.isVisible\n };\n return elementInfo;\n }\n if (isButtonElement(node)) {\n const rect2 = mergeElementAndChildrenRects(\n node,\n currentWindow,\n currentDocument,\n baseZoom\n );\n if (!rect2) {\n return null;\n }\n const attributes = getNodeAttributes(node, currentWindow);\n const pseudo = getPseudoElementContent(node, currentWindow);\n const content = node.innerText || pseudo.before || pseudo.after || "";\n const nodeHashId = midsceneGenerateHash(node, content, rect2);\n const elementInfo = {\n id: nodeHashId,\n indexId: indexId++,\n nodeHashId,\n nodeType: "BUTTON Node" /* BUTTON */,\n attributes: __spreadProps(__spreadValues({}, attributes), {\n htmlTagName: tagNameOfNode(node),\n nodeType: "BUTTON Node" /* BUTTON */\n }),\n content,\n rect: rect2,\n center: [\n Math.round(rect2.left + rect2.width / 2),\n Math.round(rect2.top + rect2.height / 2)\n ],\n zoom: rect2.zoom,\n isVisible: rect2.isVisible\n };\n return elementInfo;\n }\n if (isImgElement(node)) {\n const attributes = getNodeAttributes(node, currentWindow);\n const nodeHashId = midsceneGenerateHash(node, "", rect);\n const elementInfo = {\n id: nodeHashId,\n indexId: indexId++,\n nodeHashId,\n attributes: __spreadProps(__spreadValues(__spreadValues({}, attributes), ((_a2 = node.nodeName) == null ? void 0 : _a2.toLowerCase()) === "svg" ? {\n svgContent: "true"\n } : {}), {\n nodeType: "IMG Node" /* IMG */,\n htmlTagName: tagNameOfNode(node)\n }),\n nodeType: "IMG Node" /* IMG */,\n content: "",\n rect,\n center: [\n Math.round(rect.left + rect.width / 2),\n Math.round(rect.top + rect.height / 2)\n ],\n zoom: rect.zoom,\n isVisible: rect.isVisible\n };\n return elementInfo;\n }\n if (isTextElement(node)) {\n const text = (_b = node.textContent) == null ? void 0 : _b.trim().replace(/\\n+/g, " ");\n if (!text) {\n return null;\n }\n const attributes = getNodeAttributes(node, currentWindow);\n const attributeKeys = Object.keys(attributes);\n if (!text.trim() && attributeKeys.length === 0) {\n return null;\n }\n const nodeHashId = midsceneGenerateHash(node, text, rect);\n const elementInfo = {\n id: nodeHashId,\n indexId: indexId++,\n nodeHashId,\n nodeType: "TEXT Node" /* TEXT */,\n attributes: __spreadProps(__spreadValues({}, attributes), {\n nodeType: "TEXT Node" /* TEXT */,\n htmlTagName: tagNameOfNode(node)\n }),\n center: [\n Math.round(rect.left + rect.width / 2),\n Math.round(rect.top + rect.height / 2)\n ],\n content: text,\n rect,\n zoom: rect.zoom,\n isVisible: rect.isVisible\n };\n return elementInfo;\n }\n if (isAElement(node)) {\n const attributes = getNodeAttributes(node, currentWindow);\n const pseudo = getPseudoElementContent(node, currentWindow);\n const content = node.innerText || pseudo.before || pseudo.after || "";\n const nodeHashId = midsceneGenerateHash(node, content, rect);\n const elementInfo = {\n id: nodeHashId,\n indexId: indexId++,\n nodeHashId,\n nodeType: "Anchor Node" /* A */,\n attributes: __spreadProps(__spreadValues({}, attributes), {\n htmlTagName: tagNameOfNode(node),\n nodeType: "Anchor Node" /* A */\n }),\n content,\n rect,\n center: [\n Math.round(rect.left + rect.width / 2),\n Math.round(rect.top + rect.height / 2)\n ],\n zoom: rect.zoom,\n isVisible: rect.isVisible\n };\n return elementInfo;\n }\n if (isContainerElement(node) || isContainer) {\n const attributes = getNodeAttributes(node, currentWindow);\n const nodeHashId = midsceneGenerateHash(node, "", rect);\n const elementInfo = {\n id: nodeHashId,\n nodeHashId,\n indexId: indexId++,\n nodeType: "CONTAINER Node" /* CONTAINER */,\n attributes: __spreadProps(__spreadValues({}, attributes), {\n nodeType: "CONTAINER Node" /* CONTAINER */,\n htmlTagName: tagNameOfNode(node)\n }),\n content: "",\n rect,\n center: [\n Math.round(rect.left + rect.width / 2),\n Math.round(rect.top + rect.height / 2)\n ],\n zoom: rect.zoom,\n isVisible: rect.isVisible\n };\n return elementInfo;\n }\n return null;\n }\n function extractTextWithPosition(initNode, debugMode2 = false) {\n const elementNode = extractTreeNode(initNode, debugMode2);\n const elementInfoArray = [];\n function dfsTopChildren(node) {\n if (node.node) {\n elementInfoArray.push(node.node);\n }\n for (let i = 0; i < node.children.length; i++) {\n dfsTopChildren(node.children[i]);\n }\n }\n dfsTopChildren({ children: elementNode.children, node: elementNode.node });\n return elementInfoArray;\n }\n function extractTreeNodeAsString(initNode, visibleOnly = false, debugMode2 = false) {\n const elementNode = extractTreeNode(initNode, debugMode2);\n return descriptionOfTree(elementNode, void 0, false, visibleOnly);\n }\n function extractTreeNode(initNode, debugMode2 = false) {\n setDebugMode(debugMode2);\n indexId = 0;\n const topDocument = getTopDocument();\n const startNode = initNode || topDocument;\n const topChildren = [];\n function dfs(node, currentWindow, currentDocument, baseZoom = 1, basePoint = { left: 0, top: 0 }) {\n if (!node) {\n return null;\n }\n if (node.nodeType && node.nodeType === 10) {\n return null;\n }\n const elementInfo = collectElementInfo(\n node,\n currentWindow,\n currentDocument,\n baseZoom,\n basePoint\n );\n if (node instanceof currentWindow.HTMLIFrameElement) {\n if (node.contentWindow && node.contentWindow) {\n return null;\n }\n }\n const nodeInfo = {\n node: elementInfo,\n children: []\n };\n if ((elementInfo == null ? void 0 : elementInfo.nodeType) === "BUTTON Node" /* BUTTON */ || (elementInfo == null ? void 0 : elementInfo.nodeType) === "IMG Node" /* IMG */ || (elementInfo == null ? void 0 : elementInfo.nodeType) === "TEXT Node" /* TEXT */ || (elementInfo == null ? void 0 : elementInfo.nodeType) === "FORM_ITEM Node" /* FORM_ITEM */ || (elementInfo == null ? void 0 : elementInfo.nodeType) === "CONTAINER Node" /* CONTAINER */) {\n return nodeInfo;\n }\n const rect = getRect(node, baseZoom, currentWindow);\n for (let i = 0; i < node.childNodes.length; i++) {\n logger("will dfs", node.childNodes[i]);\n const childNodeInfo = dfs(\n node.childNodes[i],\n currentWindow,\n currentDocument,\n rect.zoom,\n basePoint\n );\n if (Array.isArray(childNodeInfo)) {\n nodeInfo.children.push(...childNodeInfo);\n } else if (childNodeInfo) {\n nodeInfo.children.push(childNodeInfo);\n }\n }\n if (nodeInfo.node === null) {\n if (nodeInfo.children.length === 0) {\n return null;\n }\n return nodeInfo.children;\n }\n return nodeInfo;\n }\n const rootNodeInfo = dfs(startNode, window, document, 1, {\n left: 0,\n top: 0\n });\n if (Array.isArray(rootNodeInfo)) {\n topChildren.push(...rootNodeInfo);\n } else if (rootNodeInfo) {\n topChildren.push(rootNodeInfo);\n }\n if (startNode === topDocument) {\n const iframes = document.querySelectorAll("iframe");\n for (let i = 0; i < iframes.length; i++) {\n const iframe = iframes[i];\n if (iframe.contentDocument && iframe.contentWindow) {\n const iframeInfo = collectElementInfo(iframe, window, document, 1);\n if (iframeInfo) {\n const iframeChildren = dfs(\n iframe.contentDocument.body,\n iframe.contentWindow,\n iframe.contentDocument,\n 1,\n {\n left: iframeInfo.rect.left,\n top: iframeInfo.rect.top\n }\n );\n if (Array.isArray(iframeChildren)) {\n topChildren.push(...iframeChildren);\n } else if (iframeChildren) {\n topChildren.push(iframeChildren);\n }\n }\n }\n }\n }\n return {\n node: null,\n children: topChildren\n };\n }\n function mergeElementAndChildrenRects(node, currentWindow, currentDocument, baseZoom = 1) {\n const selfRect = elementRect(node, currentWindow, currentDocument, baseZoom);\n if (!selfRect)\n return null;\n let minLeft = selfRect.left;\n let minTop = selfRect.top;\n let maxRight = selfRect.left + selfRect.width;\n let maxBottom = selfRect.top + selfRect.height;\n function traverse(child) {\n for (let i = 0; i < child.childNodes.length; i++) {\n const sub = child.childNodes[i];\n if (sub.nodeType === 1) {\n const rect = elementRect(sub, currentWindow, currentDocument, baseZoom);\n if (rect) {\n minLeft = Math.min(minLeft, rect.left);\n minTop = Math.min(minTop, rect.top);\n maxRight = Math.max(maxRight, rect.left + rect.width);\n maxBottom = Math.max(maxBottom, rect.top + rect.height);\n }\n traverse(sub);\n }\n }\n }\n traverse(node);\n return __spreadProps(__spreadValues({}, selfRect), {\n left: minLeft,\n top: minTop,\n width: maxRight - minLeft,\n height: maxBottom - minTop\n });\n }\n\n // src/extractor/locator.ts\n var getElementXpathIndex = (element) => {\n let index = 1;\n let prev = element.previousElementSibling;\n while (prev) {\n if (prev.nodeName.toLowerCase() === element.nodeName.toLowerCase()) {\n index++;\n }\n prev = prev.previousElementSibling;\n }\n return index;\n };\n var normalizeXpathText = (text) => {\n if (typeof text !== "string") {\n return "";\n }\n return text.replace(/\\s+/g, " ").trim();\n };\n var buildCurrentElementXpath = (element, isOrderSensitive, isLeafElement) => {\n var _a2;\n const parentPath = element.parentNode ? getElementXpath(element.parentNode, isOrderSensitive) : "";\n const prefix = parentPath ? `${parentPath}/` : "/";\n const tagName = element.nodeName.toLowerCase();\n const textContent = (_a2 = element.textContent) == null ? void 0 : _a2.trim();\n if (isOrderSensitive) {\n const index2 = getElementXpathIndex(element);\n return `${prefix}${tagName}[${index2}]`;\n }\n if (isLeafElement && textContent) {\n return `${prefix}${tagName}[normalize-space()="${normalizeXpathText(textContent)}"]`;\n }\n const index = getElementXpathIndex(element);\n return `${prefix}${tagName}[${index}]`;\n };\n var getElementXpath = (element, isOrderSensitive = false, isLeafElement = false) => {\n var _a2;\n if (element.nodeType === Node.TEXT_NODE) {\n const parentNode = element.parentNode;\n if (parentNode && parentNode.nodeType === Node.ELEMENT_NODE) {\n const parentXPath = getElementXpath(parentNode, isOrderSensitive, true);\n const textContent = (_a2 = element.textContent) == null ? void 0 : _a2.trim();\n if (textContent) {\n return `${parentXPath}/text()[normalize-space()="${normalizeXpathText(textContent)}"]`;\n }\n return `${parentXPath}/text()`;\n }\n return "";\n }\n if (element.nodeType !== Node.ELEMENT_NODE)\n return "";\n const el = element;\n if (el === document.documentElement)\n return "/html";\n if (el === document.body)\n return "/html/body";\n if (isSvgElement(el)) {\n let parent = el.parentNode;\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n if (!isSvgElement(parent)) {\n return getElementXpath(parent, isOrderSensitive, isLeafElement);\n }\n parent = parent.parentNode;\n }\n return getElementXpath(el.parentNode, isOrderSensitive, isLeafElement);\n }\n return buildCurrentElementXpath(el, isOrderSensitive, isLeafElement);\n };\n function getXpathsById(id) {\n const node = getNodeFromCacheList(id);\n if (!node) {\n return null;\n }\n const fullXPath = getElementXpath(node, false, true);\n return [fullXPath];\n }\n function getXpathsByPoint(point, isOrderSensitive) {\n const element = document.elementFromPoint(point.left, point.top);\n if (!element) {\n return null;\n }\n const fullXPath = getElementXpath(element, isOrderSensitive, true);\n return [fullXPath];\n }\n function getNodeInfoByXpath(xpath) {\n const xpathResult = document.evaluate(\n xpath,\n document,\n null,\n XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,\n null\n );\n if (xpathResult.snapshotLength !== 1) {\n return null;\n }\n const node = xpathResult.snapshotItem(0);\n return node;\n }\n function getElementInfoByXpath(xpath) {\n const node = getNodeInfoByXpath(xpath);\n if (!node) {\n return null;\n }\n if (node instanceof HTMLElement) {\n const rect = getRect(node, 1, window);\n const isVisible = isElementPartiallyInViewport(rect, window, document, 1);\n if (!isVisible) {\n node.scrollIntoView({ behavior: "instant", block: "center" });\n }\n }\n return collectElementInfo(\n node,\n window,\n document,\n 1,\n {\n left: 0,\n top: 0\n },\n true\n );\n }\n return __toCommonJS(extractor_exports);\n})();\n/*! Bundled license information:\n\njs-sha256/src/sha256.js:\n (**\n * [js-sha256]{@link https://github.com/emn178/js-sha256}\n *\n * @version 0.11.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2024\n * @license MIT\n *)\n*/\n'}async function b(t=!1){if(c||h)return null;let r=`${g()}midscene_element_inspector.setNodeHashCacheListOnWindow();`;return t?`${r}midscene_element_inspector.webExtractNodeTree()`:`${r}midscene_element_inspector.webExtractTextWithPosition()`}}}),require_chunk_4CBFCRNS=__commonJS({"../core/dist/lib/chunk-4CBFCRNS.js"(t){function r(t){if(t&&t.__esModule)return t;var r={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(r[n]=t[n]);return r.default=t,r}function n(t){let r,n=t[0],i=1;for(;i<t.length;){let a=t[i],o=t[i+1];if(i+=2,("optionalAccess"===a||"optionalCall"===a)&&null==n)return;"access"===a||"optionalAccess"===a?(r=n,n=o(n)):"call"!==a&&"optionalCall"!==a||(n=o((...t)=>n.call(r,...t)),r=void 0)}return n}init_globals(),Object.defineProperty(t,"__esModule",{value:!0});var i=require_child_process(),a=require_fs(),o=r(a),s=require_browser3(),l=require_path_browserify(),u=r(l),d=require_common6(),c=require_env(),h=require_fs2(),f=require_utils5(),p=!1,m=new Map;function g(t,r){let n="</html>",i=o.statSync(t),a=Math.min(i.size,4096),s=Math.max(0,i.size-a),l=Buffer.alloc(i.size-s),u=o.openSync(t,"r");o.readSync(u,l,0,l.length,s),o.closeSync(u);let d=l.toString("utf8"),c=d.lastIndexOf(n);if(-1===c)throw Error(`No </html> found in file:${t}`);let h=d.slice(0,c),f=s+Buffer.byteLength(h,"utf8");o.truncateSync(t,f),o.appendFileSync(t,`${r}
|
|
694
|
+
`+n,o=await V([{role:"user",content:a},...r],1),s=function(t){let r=/<bbox>(\d+)\s+(\d+)\s+(\d+)\s+(\d+)<\/bbox>/g;function n(t,r,n,i,a){let o=Number.parseInt(r,10),s=Number.parseInt(n,10),l=Number.parseInt(i,10),u=Number.parseInt(a,10);return`(${Math.floor((o+l)/2)},${Math.floor((s+u)/2)})`}return t.replace(/\[EOS\]/g,"").replace(r,n).trim()}(o.content),u=l.uiTarsModelVersion.call(void 0),{parsed:c}=eo.actionParser.call(void 0,{prediction:s,factor:[1e3,1e3],screenContext:{width:i.width,height:i.height},modelVer:u||void 0});es("modelVer",u,"parsed",JSON.stringify(c));let h=[];if(c.forEach(t=>{if("click"===t.action_type){d.assert.call(void 0,t.action_inputs.start_box,"start_box is required");let r=eu(t.action_inputs.start_box,i);h.push({type:"Locate",param:{},locate:{prompt:t.thought||"",bbox:el({x:r[0],y:r[1]},i.width,i.height)}}),h.push({type:"Tap",locate:{prompt:t.thought||"",bbox:el({x:r[0],y:r[1]},i.width,i.height)},param:t.thought||""})}else if("drag"===t.action_type){d.assert.call(void 0,t.action_inputs.start_box,"start_box is required"),d.assert.call(void 0,t.action_inputs.end_box,"end_box is required");let r=eu(t.action_inputs.start_box,i),n=eu(t.action_inputs.end_box,i);h.push({type:"Drag",param:{start_box:{x:r[0],y:r[1]},end_box:{x:n[0],y:n[1]}},locate:null,thought:t.thought||""})}else if("type"===t.action_type)h.push({type:"Input",param:{value:t.action_inputs.content},locate:null,thought:t.thought||""});else if("scroll"===t.action_type)h.push({type:"Scroll",param:{direction:t.action_inputs.direction},locate:null,thought:t.thought||""});else if("finished"===t.action_type)h.push({type:"Finished",param:{},locate:null,thought:t.thought||""});else if("hotkey"===t.action_type)if(t.action_inputs.key){let r=ea.transformHotkeyInput.call(void 0,t.action_inputs.key);h.push({type:"KeyboardPress",param:{value:r},locate:null,thought:t.thought||""})}else import_console_browserify.default.warn("No key found in action: hotkey. Will not perform action.");else if("wait"===t.action_type)h.push({type:"Sleep",param:{timeMs:1e3},locate:null,thought:t.thought||""});else if("androidBackButton"===t.action_type)h.push({type:"AndroidBackButton",param:{},locate:null,thought:t.thought||""});else if("androidHomeButton"===t.action_type)h.push({type:"AndroidHomeButton",param:{},locate:null,thought:t.thought||""});else if("androidRecentAppsButton"===t.action_type)h.push({type:"AndroidRecentAppsButton",param:{}});else if("androidLongPress"===t.action_type){d.assert.call(void 0,t.action_inputs.start_coords,"start_coords is required for androidLongPress");let r=t.action_inputs.start_coords;h.push({type:"AndroidLongPress",param:{x:r[0],y:r[1],duration:1e3},locate:null,thought:t.thought||""})}else if("androidPull"===t.action_type){let r=t.action_inputs.direction||"down",n=t.action_inputs.start_coords?{x:t.action_inputs.start_coords[0],y:t.action_inputs.start_coords[1]}:void 0;h.push({type:"AndroidPull",param:{direction:r,startPoint:n,distance:t.action_inputs.distance,duration:t.action_inputs.duration||500},locate:null,thought:t.thought||""})}}),0===h.length)throw Error(`No actions found, response: ${o.content}`,{cause:{prediction:o.content,parsed:c}});return{actions:h,actionsFromModel:c,action_summary:o.content.replace(/Reflection:[\s\S]*?(?=Action_Summary:|Action:|$)/g,"").trim(),usage:o.usage,rawResponse:JSON.stringify(o.content,void 0,2)}},t.resizeImageForUiTars=async function(t,r){if("vlm-ui-tars"===l.vlLocateMode.call(void 0)&&l.uiTarsModelVersion.call(void 0)===l.UITarsModelVersion.V1_5){es("ui-tars-v1.5, will check image size",r);let n=r.width*r.height,i=0xc40000;if(n>0xc40000){let a=Math.sqrt(i/n),o=Math.floor(r.width*a),s=Math.floor(r.height*a);return es("resize image for ui-tars, new width: %s, new height: %s",o,s),await y.resizeImgBase64.call(void 0,t,{width:o,height:s})}}return t}}}),require_ai_model=__commonJS({"../core/dist/lib/ai-model.js"(t){init_globals(),Object.defineProperty(t,"__esModule",{value:!0});var r=require_chunk_DDYIQHOA();t.AIActionType=r.AIActionType,t.AiAssert=r.AiAssert,t.AiExtractElementInfo=r.AiExtractElementInfo,t.AiLocateElement=r.AiLocateElement,t.AiLocateSection=r.AiLocateSection,t.adaptBboxToRect=r.adaptBboxToRect,t.callAi=r.call,t.callAiFn=r.callAiFn,t.callAiFnWithStringResponse=r.callAiFnWithStringResponse,t.callToGetJSONObject=r.callToGetJSONObject,t.describeUserPage=r.describeUserPage,t.elementByPositionWithElementInfo=r.elementByPositionWithElementInfo,t.generatePlaywrightTest=r.generatePlaywrightTest,t.generatePlaywrightTestStream=r.generatePlaywrightTestStream,t.generateYamlTest=r.generateYamlTest,t.generateYamlTestStream=r.generateYamlTestStream,t.plan=r.plan,t.resizeImageForUiTars=r.resizeImageForUiTars,t.systemPromptToLocateElement=r.systemPromptToLocateElement,t.vlmPlanning=r.vlmPlanning}}),require_child_process=__commonJS({"../../node_modules/.pnpm/@modern-js+plugin-module-node-polyfill@2.60.6_@modern-js+module-tools@2.60.6_typescript@5.8.3_/node_modules/@modern-js/plugin-module-node-polyfill/dist/mock/child_process.js"(t,r){init_globals(),r.exports={}}}),require_common6=__commonJS({"../shared/dist/lib/common.js"(t,r){let n,i,a;init_globals();var o,s=Object.create,l=Object.defineProperty,u=Object.getOwnPropertyDescriptor,d=Object.getOwnPropertyNames,c=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty,f=(t,r,n,i)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let a of d(r))h.call(t,a)||a===n||l(t,a,{get:()=>r[a],enumerable:!(i=u(r,a))||i.enumerable});return t},p={};((t,r)=>{for(var n in r)l(t,n,{get:r[n],enumerable:!0})})(p,{defaultRunDirName:()=>es,getMidsceneRunBaseDir:()=>eu,getMidsceneRunDir:()=>el,getMidsceneRunSubDir:()=>ed}),o=p,r.exports=f(l({},"__esModule",{value:!0}),o);var m=require_fs(),g=require_browser3(),b=(a=null!=(n=require_path_browserify())?s(c(n)):{},f(!i&&n&&n.__esModule?a:l(a,"default",{value:n,enumerable:!0}),n)),y="MIDSCENE_OPENAI_INIT_CONFIG_JSON",_="MIDSCENE_MODEL_NAME",v="MIDSCENE_LANGSMITH_DEBUG",A="MIDSCENE_DEBUG_AI_PROFILE",w="MIDSCENE_DEBUG_AI_RESPONSE",x="MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG",E="MIDSCENE_DEBUG_MODE",S="MIDSCENE_MCP_USE_PUPPETEER_MODE",C="MIDSCENE_MCP_ANDROID_MODE",I="MIDSCENE_FORCE_DEEP_THINK",T="MIDSCENE_OPENAI_SOCKS_PROXY",k="MIDSCENE_OPENAI_HTTP_PROXY",P="OPENAI_API_KEY",R="OPENAI_BASE_URL",O="OPENAI_MAX_TOKENS",M="MIDSCENE_ADB_PATH",j="MIDSCENE_ADB_REMOTE_HOST",N="MIDSCENE_ADB_REMOTE_PORT",B="MIDSCENE_ANDROID_IME_STRATEGY",L="MIDSCENE_CACHE",D="MIDSCENE_USE_VLM_UI_TARS",U="MIDSCENE_USE_QWEN_VL",F="MIDSCENE_USE_DOUBAO_VISION",z="MIDSCENE_USE_GEMINI",G="MIDSCENE_USE_VL_MODEL",H="MATCH_BY_POSITION",q="MIDSCENE_REPORT_TAG_NAME",V="MIDSCENE_REPLANNING_CYCLE_LIMIT",W="MIDSCENE_PREFERRED_LANGUAGE",$="MIDSCENE_USE_AZURE_OPENAI",K="MIDSCENE_AZURE_OPENAI_SCOPE",Z="MIDSCENE_AZURE_OPENAI_INIT_CONFIG_JSON",X="MIDSCENE_CACHE_MAX_FILENAME_LENGTH",Y="AZURE_OPENAI_ENDPOINT",J="AZURE_OPENAI_KEY",Q="AZURE_OPENAI_API_VERSION",ee="AZURE_OPENAI_DEPLOYMENT",et="MIDSCENE_USE_ANTHROPIC_SDK",er="ANTHROPIC_API_KEY",en="MIDSCENE_RUN_DIR",ei="OPENAI_USE_AZURE",ea=()=>(globalThis.midsceneGlobalConfig||(globalThis.midsceneGlobalConfig={[C]:import_browser.default.env[C]||void 0,[y]:import_browser.default.env[y]||void 0,[_]:import_browser.default.env[_]||void 0,[E]:import_browser.default.env[E]||void 0,[I]:import_browser.default.env[I]||void 0,[v]:import_browser.default.env[v]||void 0,[A]:import_browser.default.env[A]||void 0,[w]:import_browser.default.env[w]||void 0,[x]:import_browser.default.env[x]||void 0,[P]:import_browser.default.env[P]||void 0,[R]:import_browser.default.env[R]||void 0,[O]:import_browser.default.env[O]||void 0,[ei]:import_browser.default.env[ei]||void 0,[M]:import_browser.default.env[M]||void 0,[j]:import_browser.default.env[j]||void 0,[N]:import_browser.default.env[N]||void 0,[B]:import_browser.default.env[B]||void 0,[L]:import_browser.default.env[L]||void 0,[H]:import_browser.default.env[H]||void 0,[q]:import_browser.default.env[q]||void 0,[T]:import_browser.default.env[T]||void 0,[k]:import_browser.default.env[k]||void 0,[$]:import_browser.default.env[$]||void 0,[K]:import_browser.default.env[K]||void 0,[Z]:import_browser.default.env[Z]||void 0,[et]:import_browser.default.env[et]||void 0,[D]:import_browser.default.env[D]||void 0,[U]:import_browser.default.env[U]||void 0,[F]:import_browser.default.env[F]||void 0,[z]:import_browser.default.env[z]||void 0,[G]:import_browser.default.env[G]||void 0,[er]:import_browser.default.env[er]||void 0,[Y]:import_browser.default.env[Y]||void 0,[J]:import_browser.default.env[J]||void 0,[Q]:import_browser.default.env[Q]||void 0,[ee]:import_browser.default.env[ee]||void 0,[S]:import_browser.default.env[S]||void 0,[en]:import_browser.default.env[en]||void 0,[W]:import_browser.default.env[W]||void 0,[V]:import_browser.default.env[V]||void 0,[X]:import_browser.default.env[X]||void 0}),globalThis.midsceneGlobalConfig),eo=(require_sha2562(),void 0!==import_browser.default&&import_browser.default.versions?.node),es="midscene_run",el=()=>eo?(t=>{if(t===H)throw Error("MATCH_BY_POSITION is deprecated, use MIDSCENE_USE_VL_MODEL instead");let r=ea()[t];return"string"==typeof r?r.trim():r})(en)||es:"",eu=()=>{if(!eo)return"";let t=b.default.resolve(import_browser.default.cwd(),el());if(!(0,m.existsSync)(t))try{(0,m.mkdirSync)(t,{recursive:!0})}catch(r){t=b.default.join((0,g.tmpdir)(),es),(0,m.mkdirSync)(t,{recursive:!0})}return t},ed=t=>{if(!eo)return"";let r=eu(),n=b.default.join(r,t);return(0,m.existsSync)(n)||(0,m.mkdirSync)(n,{recursive:!0}),n}}}),require_fs2=__commonJS({"../shared/dist/lib/fs.js"(t,r){init_globals();var n,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,l={};((t,r)=>{for(var n in r)i(t,n,{get:r[n],enumerable:!0})})(l,{findNearestPackageJson:()=>m,getElementInfosScriptContent:()=>g,getExtraReturnLogic:()=>b,getRunningPkgInfo:()=>p}),n=l,r.exports=((t,r,n,l)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let u of o(r))s.call(t,u)||u===n||i(t,u,{get:()=>r[u],enumerable:!(l=a(r,u))||l.enumerable});return t})(i({},"__esModule",{value:!0}),n);var u=require_fs(),d=require_path_browserify(),c=(require_sha2562(),"undefined"!=typeof window),h="undefined"!=typeof WorkerGlobalScope,f=(void 0!==import_browser.default&&import_browser.default.versions,{});function p(t){if(c||h)return null;let r=t||import_browser.default.cwd();if(f[r])return f[r];let n=m(r),i=n?(0,d.join)(n,"package.json"):null;if(n&&i){let{name:t,version:a}=JSON.parse((0,u.readFileSync)(i,"utf-8"));return f[r]={name:t||"midscene-unknown-package-name",version:a||"0.0.0",dir:n},f[r]}return{name:"midscene-unknown-package-name",version:"0.0.0",dir:r}}function m(t){let r=(0,d.join)(t,"package.json");if((0,u.existsSync)(r))return t;let n=(0,d.dirname)(t);return n===t?null:m(n)}function g(){return'"use strict";\nvar midscene_element_inspector = (() => {\n var __create = Object.create;\n var __defProp = Object.defineProperty;\n var __defProps = Object.defineProperties;\n var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n var __getOwnPropDescs = Object.getOwnPropertyDescriptors;\n var __getOwnPropNames = Object.getOwnPropertyNames;\n var __getOwnPropSymbols = Object.getOwnPropertySymbols;\n var __getProtoOf = Object.getPrototypeOf;\n var __hasOwnProp = Object.prototype.hasOwnProperty;\n var __propIsEnum = Object.prototype.propertyIsEnumerable;\n var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\n var __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n };\n var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n var __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n };\n var __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n };\n var __copyProps = (to, from, except, desc) => {\n if (from && typeof from === "object" || typeof from === "function") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n };\n var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. "__esModule" has not been set), then set\n // "default" to the CommonJS "module.exports" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,\n mod\n ));\n var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);\n\n // resolve-false:/empty-stub\n var require_empty_stub = __commonJS({\n "resolve-false:/empty-stub"(exports, module) {\n "use strict";\n module.exports = {};\n }\n });\n\n // ../../node_modules/.pnpm/js-sha256@0.11.0/node_modules/js-sha256/src/sha256.js\n var require_sha256 = __commonJS({\n "../../node_modules/.pnpm/js-sha256@0.11.0/node_modules/js-sha256/src/sha256.js"(exports, module) {\n "use strict";\n (function() {\n "use strict";\n var ERROR = "input is invalid type";\n var WINDOW = typeof window === "object";\n var root = WINDOW ? window : {};\n if (root.JS_SHA256_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === "object";\n var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === "object" && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && typeof module === "object" && module.exports;\n var AMD = typeof define === "function" && define.amd;\n var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== "undefined";\n var HEX_CHARS = "0123456789abcdef".split("");\n var EXTRA = [-2147483648, 8388608, 32768, 128];\n var SHIFT = [24, 16, 8, 0];\n var K = [\n 1116352408,\n 1899447441,\n 3049323471,\n 3921009573,\n 961987163,\n 1508970993,\n 2453635748,\n 2870763221,\n 3624381080,\n 310598401,\n 607225278,\n 1426881987,\n 1925078388,\n 2162078206,\n 2614888103,\n 3248222580,\n 3835390401,\n 4022224774,\n 264347078,\n 604807628,\n 770255983,\n 1249150122,\n 1555081692,\n 1996064986,\n 2554220882,\n 2821834349,\n 2952996808,\n 3210313671,\n 3336571891,\n 3584528711,\n 113926993,\n 338241895,\n 666307205,\n 773529912,\n 1294757372,\n 1396182291,\n 1695183700,\n 1986661051,\n 2177026350,\n 2456956037,\n 2730485921,\n 2820302411,\n 3259730800,\n 3345764771,\n 3516065817,\n 3600352804,\n 4094571909,\n 275423344,\n 430227734,\n 506948616,\n 659060556,\n 883997877,\n 958139571,\n 1322822218,\n 1537002063,\n 1747873779,\n 1955562222,\n 2024104815,\n 2227730452,\n 2361852424,\n 2428436474,\n 2756734187,\n 3204031479,\n 3329325298\n ];\n var OUTPUT_TYPES = ["hex", "array", "digest", "arrayBuffer"];\n var blocks = [];\n if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function(obj) {\n return Object.prototype.toString.call(obj) === "[object Array]";\n };\n }\n if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function(obj) {\n return typeof obj === "object" && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n var createOutputMethod = function(outputType, is224) {\n return function(message) {\n return new Sha256(is224, true).update(message)[outputType]();\n };\n };\n var createMethod = function(is224) {\n var method = createOutputMethod("hex", is224);\n if (NODE_JS) {\n method = nodeWrap(method, is224);\n }\n method.create = function() {\n return new Sha256(is224);\n };\n method.update = function(message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type, is224);\n }\n return method;\n };\n var nodeWrap = function(method, is224) {\n var crypto = require_empty_stub();\n var Buffer2 = require_empty_stub().Buffer;\n var algorithm = is224 ? "sha224" : "sha256";\n var bufferFrom;\n if (Buffer2.from && !root.JS_SHA256_NO_BUFFER_FROM) {\n bufferFrom = Buffer2.from;\n } else {\n bufferFrom = function(message) {\n return new Buffer2(message);\n };\n }\n var nodeMethod = function(message) {\n if (typeof message === "string") {\n return crypto.createHash(algorithm).update(message, "utf8").digest("hex");\n } else {\n if (message === null || message === void 0) {\n throw new Error(ERROR);\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) || message.constructor === Buffer2) {\n return crypto.createHash(algorithm).update(bufferFrom(message)).digest("hex");\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n var createHmacOutputMethod = function(outputType, is224) {\n return function(key, message) {\n return new HmacSha256(key, is224, true).update(message)[outputType]();\n };\n };\n var createHmacMethod = function(is224) {\n var method = createHmacOutputMethod("hex", is224);\n method.create = function(key) {\n return new HmacSha256(key, is224);\n };\n method.update = function(key, message) {\n return method.create(key).update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createHmacOutputMethod(type, is224);\n }\n return method;\n };\n function Sha256(is224, sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n if (is224) {\n this.h0 = 3238371032;\n this.h1 = 914150663;\n this.h2 = 812702999;\n this.h3 = 4144912697;\n this.h4 = 4290775857;\n this.h5 = 1750603025;\n this.h6 = 1694076839;\n this.h7 = 3204075428;\n } else {\n this.h0 = 1779033703;\n this.h1 = 3144134277;\n this.h2 = 1013904242;\n this.h3 = 2773480762;\n this.h4 = 1359893119;\n this.h5 = 2600822924;\n this.h6 = 528734635;\n this.h7 = 1541459225;\n }\n this.block = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n this.is224 = is224;\n }\n Sha256.prototype.update = function(message) {\n if (this.finalized) {\n return;\n }\n var notString, type = typeof message;\n if (type !== "string") {\n if (type === "object") {\n if (message === null) {\n throw new Error(ERROR);\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw new Error(ERROR);\n }\n }\n } else {\n throw new Error(ERROR);\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks2 = this.blocks;\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks2[0] = this.block;\n this.block = blocks2[16] = blocks2[1] = blocks2[2] = blocks2[3] = blocks2[4] = blocks2[5] = blocks2[6] = blocks2[7] = blocks2[8] = blocks2[9] = blocks2[10] = blocks2[11] = blocks2[12] = blocks2[13] = blocks2[14] = blocks2[15] = 0;\n }\n if (notString) {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks2[i >>> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 128) {\n blocks2[i >>> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 2048) {\n blocks2[i >>> 2] |= (192 | code >>> 6) << SHIFT[i++ & 3];\n blocks2[i >>> 2] |= (128 | code & 63) << SHIFT[i++ & 3];\n } else if (code < 55296 || code >= 57344) {\n blocks2[i >>> 2] |= (224 | code >>> 12) << SHIFT[i++ & 3];\n blocks2[i >>> 2] |= (128 | code >>> 6 & 63) << SHIFT[i++ & 3];\n blocks2[i >>> 2] |= (128 | code & 63) << SHIFT[i++ & 3];\n } else {\n code = 65536 + ((code & 1023) << 10 | message.charCodeAt(++index) & 1023);\n blocks2[i >>> 2] |= (240 | code >>> 18) << SHIFT[i++ & 3];\n blocks2[i >>> 2] |= (128 | code >>> 12 & 63) << SHIFT[i++ & 3];\n blocks2[i >>> 2] |= (128 | code >>> 6 & 63) << SHIFT[i++ & 3];\n blocks2[i >>> 2] |= (128 | code & 63) << SHIFT[i++ & 3];\n }\n }\n }\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.block = blocks2[16];\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n Sha256.prototype.finalize = function() {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks2 = this.blocks, i = this.lastByteIndex;\n blocks2[16] = this.block;\n blocks2[i >>> 2] |= EXTRA[i & 3];\n this.block = blocks2[16];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks2[0] = this.block;\n blocks2[16] = blocks2[1] = blocks2[2] = blocks2[3] = blocks2[4] = blocks2[5] = blocks2[6] = blocks2[7] = blocks2[8] = blocks2[9] = blocks2[10] = blocks2[11] = blocks2[12] = blocks2[13] = blocks2[14] = blocks2[15] = 0;\n }\n blocks2[14] = this.hBytes << 3 | this.bytes >>> 29;\n blocks2[15] = this.bytes << 3;\n this.hash();\n };\n Sha256.prototype.hash = function() {\n var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6, h = this.h7, blocks2 = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc;\n for (j = 16; j < 64; ++j) {\n t1 = blocks2[j - 15];\n s0 = (t1 >>> 7 | t1 << 25) ^ (t1 >>> 18 | t1 << 14) ^ t1 >>> 3;\n t1 = blocks2[j - 2];\n s1 = (t1 >>> 17 | t1 << 15) ^ (t1 >>> 19 | t1 << 13) ^ t1 >>> 10;\n blocks2[j] = blocks2[j - 16] + s0 + blocks2[j - 7] + s1 << 0;\n }\n bc = b & c;\n for (j = 0; j < 64; j += 4) {\n if (this.first) {\n if (this.is224) {\n ab = 300032;\n t1 = blocks2[0] - 1413257819;\n h = t1 - 150054599 << 0;\n d = t1 + 24177077 << 0;\n } else {\n ab = 704751109;\n t1 = blocks2[0] - 210244248;\n h = t1 - 1521486534 << 0;\n d = t1 + 143694565 << 0;\n }\n this.first = false;\n } else {\n s0 = (a >>> 2 | a << 30) ^ (a >>> 13 | a << 19) ^ (a >>> 22 | a << 10);\n s1 = (e >>> 6 | e << 26) ^ (e >>> 11 | e << 21) ^ (e >>> 25 | e << 7);\n ab = a & b;\n maj = ab ^ a & c ^ bc;\n ch = e & f ^ ~e & g;\n t1 = h + s1 + ch + K[j] + blocks2[j];\n t2 = s0 + maj;\n h = d + t1 << 0;\n d = t1 + t2 << 0;\n }\n s0 = (d >>> 2 | d << 30) ^ (d >>> 13 | d << 19) ^ (d >>> 22 | d << 10);\n s1 = (h >>> 6 | h << 26) ^ (h >>> 11 | h << 21) ^ (h >>> 25 | h << 7);\n da = d & a;\n maj = da ^ d & b ^ ab;\n ch = h & e ^ ~h & f;\n t1 = g + s1 + ch + K[j + 1] + blocks2[j + 1];\n t2 = s0 + maj;\n g = c + t1 << 0;\n c = t1 + t2 << 0;\n s0 = (c >>> 2 | c << 30) ^ (c >>> 13 | c << 19) ^ (c >>> 22 | c << 10);\n s1 = (g >>> 6 | g << 26) ^ (g >>> 11 | g << 21) ^ (g >>> 25 | g << 7);\n cd = c & d;\n maj = cd ^ c & a ^ da;\n ch = g & h ^ ~g & e;\n t1 = f + s1 + ch + K[j + 2] + blocks2[j + 2];\n t2 = s0 + maj;\n f = b + t1 << 0;\n b = t1 + t2 << 0;\n s0 = (b >>> 2 | b << 30) ^ (b >>> 13 | b << 19) ^ (b >>> 22 | b << 10);\n s1 = (f >>> 6 | f << 26) ^ (f >>> 11 | f << 21) ^ (f >>> 25 | f << 7);\n bc = b & c;\n maj = bc ^ b & d ^ cd;\n ch = f & g ^ ~f & h;\n t1 = e + s1 + ch + K[j + 3] + blocks2[j + 3];\n t2 = s0 + maj;\n e = a + t1 << 0;\n a = t1 + t2 << 0;\n this.chromeBugWorkAround = true;\n }\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n this.h4 = this.h4 + e << 0;\n this.h5 = this.h5 + f << 0;\n this.h6 = this.h6 + g << 0;\n this.h7 = this.h7 + h << 0;\n };\n Sha256.prototype.hex = function() {\n this.finalize();\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5, h6 = this.h6, h7 = this.h7;\n var hex = HEX_CHARS[h0 >>> 28 & 15] + HEX_CHARS[h0 >>> 24 & 15] + HEX_CHARS[h0 >>> 20 & 15] + HEX_CHARS[h0 >>> 16 & 15] + HEX_CHARS[h0 >>> 12 & 15] + HEX_CHARS[h0 >>> 8 & 15] + HEX_CHARS[h0 >>> 4 & 15] + HEX_CHARS[h0 & 15] + HEX_CHARS[h1 >>> 28 & 15] + HEX_CHARS[h1 >>> 24 & 15] + HEX_CHARS[h1 >>> 20 & 15] + HEX_CHARS[h1 >>> 16 & 15] + HEX_CHARS[h1 >>> 12 & 15] + HEX_CHARS[h1 >>> 8 & 15] + HEX_CHARS[h1 >>> 4 & 15] + HEX_CHARS[h1 & 15] + HEX_CHARS[h2 >>> 28 & 15] + HEX_CHARS[h2 >>> 24 & 15] + HEX_CHARS[h2 >>> 20 & 15] + HEX_CHARS[h2 >>> 16 & 15] + HEX_CHARS[h2 >>> 12 & 15] + HEX_CHARS[h2 >>> 8 & 15] + HEX_CHARS[h2 >>> 4 & 15] + HEX_CHARS[h2 & 15] + HEX_CHARS[h3 >>> 28 & 15] + HEX_CHARS[h3 >>> 24 & 15] + HEX_CHARS[h3 >>> 20 & 15] + HEX_CHARS[h3 >>> 16 & 15] + HEX_CHARS[h3 >>> 12 & 15] + HEX_CHARS[h3 >>> 8 & 15] + HEX_CHARS[h3 >>> 4 & 15] + HEX_CHARS[h3 & 15] + HEX_CHARS[h4 >>> 28 & 15] + HEX_CHARS[h4 >>> 24 & 15] + HEX_CHARS[h4 >>> 20 & 15] + HEX_CHARS[h4 >>> 16 & 15] + HEX_CHARS[h4 >>> 12 & 15] + HEX_CHARS[h4 >>> 8 & 15] + HEX_CHARS[h4 >>> 4 & 15] + HEX_CHARS[h4 & 15] + HEX_CHARS[h5 >>> 28 & 15] + HEX_CHARS[h5 >>> 24 & 15] + HEX_CHARS[h5 >>> 20 & 15] + HEX_CHARS[h5 >>> 16 & 15] + HEX_CHARS[h5 >>> 12 & 15] + HEX_CHARS[h5 >>> 8 & 15] + HEX_CHARS[h5 >>> 4 & 15] + HEX_CHARS[h5 & 15] + HEX_CHARS[h6 >>> 28 & 15] + HEX_CHARS[h6 >>> 24 & 15] + HEX_CHARS[h6 >>> 20 & 15] + HEX_CHARS[h6 >>> 16 & 15] + HEX_CHARS[h6 >>> 12 & 15] + HEX_CHARS[h6 >>> 8 & 15] + HEX_CHARS[h6 >>> 4 & 15] + HEX_CHARS[h6 & 15];\n if (!this.is224) {\n hex += HEX_CHARS[h7 >>> 28 & 15] + HEX_CHARS[h7 >>> 24 & 15] + HEX_CHARS[h7 >>> 20 & 15] + HEX_CHARS[h7 >>> 16 & 15] + HEX_CHARS[h7 >>> 12 & 15] + HEX_CHARS[h7 >>> 8 & 15] + HEX_CHARS[h7 >>> 4 & 15] + HEX_CHARS[h7 & 15];\n }\n return hex;\n };\n Sha256.prototype.toString = Sha256.prototype.hex;\n Sha256.prototype.digest = function() {\n this.finalize();\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5, h6 = this.h6, h7 = this.h7;\n var arr = [\n h0 >>> 24 & 255,\n h0 >>> 16 & 255,\n h0 >>> 8 & 255,\n h0 & 255,\n h1 >>> 24 & 255,\n h1 >>> 16 & 255,\n h1 >>> 8 & 255,\n h1 & 255,\n h2 >>> 24 & 255,\n h2 >>> 16 & 255,\n h2 >>> 8 & 255,\n h2 & 255,\n h3 >>> 24 & 255,\n h3 >>> 16 & 255,\n h3 >>> 8 & 255,\n h3 & 255,\n h4 >>> 24 & 255,\n h4 >>> 16 & 255,\n h4 >>> 8 & 255,\n h4 & 255,\n h5 >>> 24 & 255,\n h5 >>> 16 & 255,\n h5 >>> 8 & 255,\n h5 & 255,\n h6 >>> 24 & 255,\n h6 >>> 16 & 255,\n h6 >>> 8 & 255,\n h6 & 255\n ];\n if (!this.is224) {\n arr.push(h7 >>> 24 & 255, h7 >>> 16 & 255, h7 >>> 8 & 255, h7 & 255);\n }\n return arr;\n };\n Sha256.prototype.array = Sha256.prototype.digest;\n Sha256.prototype.arrayBuffer = function() {\n this.finalize();\n var buffer = new ArrayBuffer(this.is224 ? 28 : 32);\n var dataView = new DataView(buffer);\n dataView.setUint32(0, this.h0);\n dataView.setUint32(4, this.h1);\n dataView.setUint32(8, this.h2);\n dataView.setUint32(12, this.h3);\n dataView.setUint32(16, this.h4);\n dataView.setUint32(20, this.h5);\n dataView.setUint32(24, this.h6);\n if (!this.is224) {\n dataView.setUint32(28, this.h7);\n }\n return buffer;\n };\n function HmacSha256(key, is224, sharedMemory) {\n var i, type = typeof key;\n if (type === "string") {\n var bytes = [], length = key.length, index = 0, code;\n for (i = 0; i < length; ++i) {\n code = key.charCodeAt(i);\n if (code < 128) {\n bytes[index++] = code;\n } else if (code < 2048) {\n bytes[index++] = 192 | code >>> 6;\n bytes[index++] = 128 | code & 63;\n } else if (code < 55296 || code >= 57344) {\n bytes[index++] = 224 | code >>> 12;\n bytes[index++] = 128 | code >>> 6 & 63;\n bytes[index++] = 128 | code & 63;\n } else {\n code = 65536 + ((code & 1023) << 10 | key.charCodeAt(++i) & 1023);\n bytes[index++] = 240 | code >>> 18;\n bytes[index++] = 128 | code >>> 12 & 63;\n bytes[index++] = 128 | code >>> 6 & 63;\n bytes[index++] = 128 | code & 63;\n }\n }\n key = bytes;\n } else {\n if (type === "object") {\n if (key === null) {\n throw new Error(ERROR);\n } else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) {\n key = new Uint8Array(key);\n } else if (!Array.isArray(key)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) {\n throw new Error(ERROR);\n }\n }\n } else {\n throw new Error(ERROR);\n }\n }\n if (key.length > 64) {\n key = new Sha256(is224, true).update(key).array();\n }\n var oKeyPad = [], iKeyPad = [];\n for (i = 0; i < 64; ++i) {\n var b = key[i] || 0;\n oKeyPad[i] = 92 ^ b;\n iKeyPad[i] = 54 ^ b;\n }\n Sha256.call(this, is224, sharedMemory);\n this.update(iKeyPad);\n this.oKeyPad = oKeyPad;\n this.inner = true;\n this.sharedMemory = sharedMemory;\n }\n HmacSha256.prototype = new Sha256();\n HmacSha256.prototype.finalize = function() {\n Sha256.prototype.finalize.call(this);\n if (this.inner) {\n this.inner = false;\n var innerHash = this.array();\n Sha256.call(this, this.is224, this.sharedMemory);\n this.update(this.oKeyPad);\n this.update(innerHash);\n Sha256.prototype.finalize.call(this);\n }\n };\n var exports2 = createMethod();\n exports2.sha256 = exports2;\n exports2.sha224 = createMethod(true);\n exports2.sha256.hmac = createHmacMethod();\n exports2.sha224.hmac = createHmacMethod(true);\n if (COMMON_JS) {\n module.exports = exports2;\n } else {\n root.sha256 = exports2.sha256;\n root.sha224 = exports2.sha224;\n if (AMD) {\n define(function() {\n return exports2;\n });\n }\n }\n })();\n }\n });\n\n // src/extractor/index.ts\n var extractor_exports = {};\n __export(extractor_exports, {\n descriptionOfTree: () => descriptionOfTree,\n generateElementByPosition: () => generateElementByPosition,\n getElementInfoByXpath: () => getElementInfoByXpath,\n getElementXpath: () => getElementXpath,\n getNodeFromCacheList: () => getNodeFromCacheList,\n getNodeInfoByXpath: () => getNodeInfoByXpath,\n getXpathsById: () => getXpathsById,\n getXpathsByPoint: () => getXpathsByPoint,\n isNotContainerElement: () => isNotContainerElement,\n setNodeHashCacheListOnWindow: () => setNodeHashCacheListOnWindow,\n traverseTree: () => traverseTree,\n treeToList: () => treeToList,\n trimAttributes: () => trimAttributes,\n truncateText: () => truncateText,\n webExtractNodeTree: () => extractTreeNode,\n webExtractNodeTreeAsString: () => extractTreeNodeAsString,\n webExtractTextWithPosition: () => extractTextWithPosition\n });\n\n // src/extractor/tree.ts\n function truncateText(text, maxLength = 150) {\n if (typeof text === "undefined") {\n return "";\n }\n if (typeof text === "object") {\n text = JSON.stringify(text);\n }\n if (typeof text === "number") {\n return text.toString();\n }\n if (typeof text === "string" && text.length > maxLength) {\n return `${text.slice(0, maxLength)}...`;\n }\n if (typeof text === "string") {\n return text.trim();\n }\n return "";\n }\n function trimAttributes(attributes, truncateTextLength) {\n const tailorAttributes = Object.keys(attributes).reduce(\n (res, currentKey) => {\n const attributeVal = attributes[currentKey];\n if (currentKey === "style" || currentKey === "htmlTagName" || currentKey === "nodeType") {\n return res;\n }\n res[currentKey] = truncateText(attributeVal, truncateTextLength);\n return res;\n },\n {}\n );\n return tailorAttributes;\n }\n var nodeSizeThreshold = 4;\n function descriptionOfTree(tree, truncateTextLength, filterNonTextContent = false, visibleOnly = true) {\n const attributesString = (kv) => {\n return Object.entries(kv).map(\n ([key, value]) => `${key}="${truncateText(value, truncateTextLength)}"`\n ).join(" ");\n };\n function buildContentTree(node, indent = 0, visibleOnly2 = true) {\n var _a2;\n let before = "";\n let contentWithIndent = "";\n let after = "";\n let emptyNode = true;\n const indentStr = " ".repeat(indent);\n let children = "";\n for (let i = 0; i < (node.children || []).length; i++) {\n const childContent = buildContentTree(\n node.children[i],\n indent + 1,\n visibleOnly2\n );\n if (childContent) {\n children += `\n${childContent}`;\n }\n }\n if (node.node && node.node.rect.width > nodeSizeThreshold && node.node.rect.height > nodeSizeThreshold && (!filterNonTextContent || filterNonTextContent && node.node.content) && (!visibleOnly2 || visibleOnly2 && node.node.isVisible)) {\n emptyNode = false;\n let nodeTypeString;\n if ((_a2 = node.node.attributes) == null ? void 0 : _a2.htmlTagName) {\n nodeTypeString = node.node.attributes.htmlTagName.replace(/[<>]/g, "");\n } else {\n nodeTypeString = node.node.attributes.nodeType.replace(/\\sNode$/, "").toLowerCase();\n }\n const markerId = node.node.indexId;\n const markerIdString = markerId ? `markerId="${markerId}"` : "";\n const rectAttribute = node.node.rect ? {\n left: node.node.rect.left,\n top: node.node.rect.top,\n width: node.node.rect.width,\n height: node.node.rect.height\n } : {};\n before = `<${nodeTypeString} id="${node.node.id}" ${markerIdString} ${attributesString(trimAttributes(node.node.attributes || {}, truncateTextLength))} ${attributesString(rectAttribute)}>`;\n const content = truncateText(node.node.content, truncateTextLength);\n contentWithIndent = content ? `\n${indentStr} ${content}` : "";\n after = `</${nodeTypeString}>`;\n } else if (!filterNonTextContent) {\n if (!children.trim().startsWith("<>")) {\n before = "<>";\n contentWithIndent = "";\n after = "</>";\n }\n }\n if (emptyNode && !children.trim()) {\n return "";\n }\n const result2 = `${indentStr}${before}${contentWithIndent}${children}\n${indentStr}${after}`;\n if (result2.trim()) {\n return result2;\n }\n return "";\n }\n const result = buildContentTree(tree, 0, visibleOnly);\n return result.replace(/^\\s*\\n/gm, "");\n }\n function treeToList(tree) {\n const result = [];\n function dfs(node) {\n if (node.node) {\n result.push(node.node);\n }\n for (const child of node.children) {\n dfs(child);\n }\n }\n dfs(tree);\n return result;\n }\n function traverseTree(tree, onNode) {\n function dfs(node) {\n if (node.node) {\n node.node = onNode(node.node);\n }\n for (const child of node.children) {\n dfs(child);\n }\n }\n dfs(tree);\n return tree;\n }\n\n // src/constants/index.ts\n var CONTAINER_MINI_HEIGHT = 3;\n var CONTAINER_MINI_WIDTH = 3;\n\n // src/utils.ts\n var import_js_sha256 = __toESM(require_sha256());\n var _a;\n var ifInNode = typeof process !== "undefined" && ((_a = process.versions) == null ? void 0 : _a.node);\n var hashMap = {};\n function generateHashId(rect, content = "") {\n const combined = JSON.stringify({\n content,\n rect\n });\n let sliceLength = 5;\n let slicedHash = "";\n const hashHex = import_js_sha256.sha256.create().update(combined).hex();\n const toLetters = (hex) => {\n return hex.split("").map((char) => {\n const code = Number.parseInt(char, 16);\n return String.fromCharCode(97 + code % 26);\n }).join("");\n };\n const hashLetters = toLetters(hashHex);\n while (sliceLength < hashLetters.length - 1) {\n slicedHash = hashLetters.slice(0, sliceLength);\n if (hashMap[slicedHash] && hashMap[slicedHash] !== combined) {\n sliceLength++;\n continue;\n }\n hashMap[slicedHash] = combined;\n break;\n }\n return slicedHash;\n }\n\n // src/extractor/dom-util.ts\n function isFormElement(node) {\n return node instanceof HTMLElement && (node.tagName.toLowerCase() === "input" || node.tagName.toLowerCase() === "textarea" || node.tagName.toLowerCase() === "select" || node.tagName.toLowerCase() === "option");\n }\n function isButtonElement(node) {\n return node instanceof HTMLElement && node.tagName.toLowerCase() === "button";\n }\n function isAElement(node) {\n return node instanceof HTMLElement && node.tagName.toLowerCase() === "a";\n }\n function isSvgElement(node) {\n return node instanceof SVGElement;\n }\n function isImgElement(node) {\n if (!includeBaseElement(node) && node instanceof Element) {\n const computedStyle = window.getComputedStyle(node);\n const backgroundImage = computedStyle.getPropertyValue("background-image");\n if (backgroundImage !== "none") {\n return true;\n }\n }\n if (isIconfont(node)) {\n return true;\n }\n return node instanceof HTMLElement && node.tagName.toLowerCase() === "img" || node instanceof SVGElement && node.tagName.toLowerCase() === "svg";\n }\n function isIconfont(node) {\n if (node instanceof Element) {\n const computedStyle = window.getComputedStyle(node);\n const fontFamilyValue = computedStyle.fontFamily || "";\n return fontFamilyValue.toLowerCase().indexOf("iconfont") >= 0;\n }\n return false;\n }\n function isNotContainerElement(node) {\n return isTextElement(node) || isIconfont(node) || isImgElement(node) || isButtonElement(node) || isAElement(node) || isFormElement(node);\n }\n function isTextElement(node) {\n var _a2, _b, _c;\n if (node instanceof Element) {\n if (((_a2 = node == null ? void 0 : node.childNodes) == null ? void 0 : _a2.length) === 1 && (node == null ? void 0 : node.childNodes[0]) instanceof Text) {\n return true;\n }\n }\n return ((_c = (_b = node.nodeName) == null ? void 0 : _b.toLowerCase) == null ? void 0 : _c.call(_b)) === "#text" && !isIconfont(node);\n }\n function isContainerElement(node) {\n if (!(node instanceof HTMLElement))\n return false;\n if (includeBaseElement(node)) {\n return false;\n }\n const computedStyle = window.getComputedStyle(node);\n const backgroundColor = computedStyle.getPropertyValue("background-color");\n if (backgroundColor) {\n return true;\n }\n return false;\n }\n function includeBaseElement(node) {\n if (!(node instanceof HTMLElement))\n return false;\n if (node.innerText) {\n return true;\n }\n const includeList = [\n "svg",\n "button",\n "input",\n "textarea",\n "select",\n "option",\n "img",\n "a"\n ];\n for (const tagName of includeList) {\n const element = node.querySelectorAll(tagName);\n if (element.length > 0) {\n return true;\n }\n }\n return false;\n }\n function generateElementByPosition(position) {\n const rect = {\n left: Math.max(position.x - 4, 0),\n top: Math.max(position.y - 4, 0),\n width: 8,\n height: 8\n };\n const id = generateHashId(rect);\n const element = {\n id,\n attributes: { nodeType: "POSITION Node" /* POSITION */ },\n rect,\n content: "",\n center: [position.x, position.y]\n };\n return element;\n }\n\n // src/extractor/util.ts\n var MAX_VALUE_LENGTH = 300;\n var debugMode = false;\n function setDebugMode(mode) {\n debugMode = mode;\n }\n function logger(..._msg) {\n if (!debugMode) {\n return;\n }\n console.log(..._msg);\n }\n function isElementPartiallyInViewport(rect, currentWindow, currentDocument, visibleAreaRatio = 2 / 3) {\n const elementHeight = rect.height;\n const elementWidth = rect.width;\n const viewportRect = {\n left: 0,\n top: 0,\n width: currentWindow.innerWidth || currentDocument.documentElement.clientWidth,\n height: currentWindow.innerHeight || currentDocument.documentElement.clientHeight,\n right: currentWindow.innerWidth || currentDocument.documentElement.clientWidth,\n bottom: currentWindow.innerHeight || currentDocument.documentElement.clientHeight,\n x: 0,\n y: 0,\n zoom: 1\n };\n const overlapRect = overlappedRect(rect, viewportRect);\n if (!overlapRect) {\n return false;\n }\n const visibleArea = overlapRect.width * overlapRect.height;\n const totalArea = elementHeight * elementWidth;\n return visibleArea / totalArea >= visibleAreaRatio;\n }\n function getPseudoElementContent(element, currentWindow) {\n if (!(element instanceof currentWindow.HTMLElement)) {\n return { before: "", after: "" };\n }\n const beforeContent = currentWindow.getComputedStyle(element, "::before").getPropertyValue("content");\n const afterContent = currentWindow.getComputedStyle(element, "::after").getPropertyValue("content");\n return {\n before: beforeContent === "none" ? "" : beforeContent.replace(/"/g, ""),\n after: afterContent === "none" ? "" : afterContent.replace(/"/g, "")\n };\n }\n function overlappedRect(rect1, rect2) {\n const left = Math.max(rect1.left, rect2.left);\n const top = Math.max(rect1.top, rect2.top);\n const right = Math.min(rect1.right, rect2.right);\n const bottom = Math.min(rect1.bottom, rect2.bottom);\n if (left < right && top < bottom) {\n return {\n left,\n top,\n right,\n bottom,\n width: right - left,\n height: bottom - top,\n x: left,\n y: top,\n zoom: 1\n };\n }\n return null;\n }\n function getRect(el, baseZoom, currentWindow) {\n let originalRect;\n let newZoom = 1;\n if (!(el instanceof currentWindow.HTMLElement)) {\n const range = currentWindow.document.createRange();\n range.selectNodeContents(el);\n originalRect = range.getBoundingClientRect();\n } else {\n originalRect = el.getBoundingClientRect();\n if (!("currentCSSZoom" in el)) {\n newZoom = Number.parseFloat(currentWindow.getComputedStyle(el).zoom) || 1;\n }\n }\n const zoom = newZoom * baseZoom;\n return {\n width: originalRect.width * zoom,\n height: originalRect.height * zoom,\n left: originalRect.left * zoom,\n top: originalRect.top * zoom,\n right: originalRect.right * zoom,\n bottom: originalRect.bottom * zoom,\n x: originalRect.x * zoom,\n y: originalRect.y * zoom,\n zoom\n };\n }\n var isElementCovered = (el, rect, currentWindow) => {\n const x = rect.left + rect.width / 2;\n const y = rect.top + rect.height / 2;\n const topElement = currentWindow.document.elementFromPoint(x, y);\n if (!topElement) {\n return false;\n }\n if (topElement === el) {\n return false;\n }\n if (el == null ? void 0 : el.contains(topElement)) {\n return false;\n }\n if (topElement == null ? void 0 : topElement.contains(el)) {\n return false;\n }\n const rectOfTopElement = getRect(topElement, 1, currentWindow);\n const overlapRect = overlappedRect(rect, rectOfTopElement);\n if (!overlapRect) {\n return false;\n }\n logger(el, "Element is covered by another element", {\n topElement,\n el,\n rect,\n x,\n y\n });\n return true;\n };\n function elementRect(el, currentWindow, currentDocument, baseZoom = 1) {\n if (!el) {\n logger(el, "Element is not in the DOM hierarchy");\n return false;\n }\n if (!(el instanceof currentWindow.HTMLElement) && el.nodeType !== Node.TEXT_NODE && el.nodeName.toLowerCase() !== "svg") {\n logger(el, "Element is not in the DOM hierarchy");\n return false;\n }\n if (el instanceof currentWindow.HTMLElement) {\n const style = currentWindow.getComputedStyle(el);\n if (style.display === "none" || style.visibility === "hidden" || style.opacity === "0" && el.tagName !== "INPUT") {\n logger(el, "Element is hidden");\n return false;\n }\n }\n const rect = getRect(el, baseZoom, currentWindow);\n if (rect.width === 0 && rect.height === 0) {\n logger(el, "Element has no size");\n return false;\n }\n if (baseZoom === 1 && isElementCovered(el, rect, currentWindow)) {\n return false;\n }\n const isVisible = isElementPartiallyInViewport(\n rect,\n currentWindow,\n currentDocument\n );\n let parent = el;\n const parentUntilNonStatic = (currentNode) => {\n let parent2 = currentNode == null ? void 0 : currentNode.parentElement;\n while (parent2) {\n const style = currentWindow.getComputedStyle(parent2);\n if (style.position !== "static") {\n return parent2;\n }\n parent2 = parent2.parentElement;\n }\n return null;\n };\n while (parent && parent !== currentDocument.body) {\n if (!(parent instanceof currentWindow.HTMLElement)) {\n parent = parent.parentElement;\n continue;\n }\n const parentStyle = currentWindow.getComputedStyle(parent);\n if (parentStyle.overflow === "hidden") {\n const parentRect = getRect(parent, 1, currentWindow);\n const tolerance = 10;\n if (rect.right < parentRect.left - tolerance || rect.left > parentRect.right + tolerance || rect.bottom < parentRect.top - tolerance || rect.top > parentRect.bottom + tolerance) {\n logger(el, "element is partially or totally hidden by an ancestor", {\n rect,\n parentRect\n });\n return false;\n }\n }\n if (parentStyle.position === "fixed" || parentStyle.position === "sticky") {\n break;\n }\n if (parentStyle.position === "absolute") {\n parent = parentUntilNonStatic(parent);\n } else {\n parent = parent.parentElement;\n }\n }\n return {\n left: Math.round(rect.left),\n top: Math.round(rect.top),\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n zoom: rect.zoom,\n isVisible\n };\n }\n function getNodeAttributes(node, currentWindow) {\n if (!node || !(node instanceof currentWindow.HTMLElement) || !node.attributes) {\n return {};\n }\n const attributesList = Array.from(node.attributes).map((attr) => {\n if (attr.name === "class") {\n return [attr.name, `.${attr.value.split(" ").join(".")}`];\n }\n if (!attr.value) {\n return [];\n }\n let value = attr.value;\n if (value.startsWith("data:image")) {\n value = "image";\n }\n if (value.length > MAX_VALUE_LENGTH) {\n value = `${value.slice(0, MAX_VALUE_LENGTH)}...`;\n }\n return [attr.name, value];\n });\n return Object.fromEntries(attributesList);\n }\n function midsceneGenerateHash(node, content, rect) {\n const slicedHash = generateHashId(rect, content);\n if (node) {\n if (!window.midsceneNodeHashCacheList) {\n setNodeHashCacheListOnWindow();\n }\n setNodeToCacheList(node, slicedHash);\n }\n return slicedHash;\n }\n function setNodeHashCacheListOnWindow() {\n if (typeof window !== "undefined") {\n window.midsceneNodeHashCacheList = [];\n }\n }\n function setNodeToCacheList(node, id) {\n var _a2;\n if (typeof window !== "undefined") {\n if (getNodeFromCacheList(id)) {\n return;\n }\n (_a2 = window.midsceneNodeHashCacheList) == null ? void 0 : _a2.push({ node, id });\n }\n }\n function getNodeFromCacheList(id) {\n var _a2, _b;\n if (typeof window !== "undefined") {\n return (_b = (_a2 = window.midsceneNodeHashCacheList) == null ? void 0 : _a2.find(\n (item) => item.id === id\n )) == null ? void 0 : _b.node;\n }\n return null;\n }\n function getTopDocument() {\n const container = document.body || document;\n return container;\n }\n\n // src/extractor/web-extractor.ts\n var indexId = 0;\n function tagNameOfNode(node) {\n var _a2, _b;\n let tagName = "";\n if (node instanceof HTMLElement) {\n tagName = (_a2 = node.tagName) == null ? void 0 : _a2.toLowerCase();\n } else {\n const parentElement = node.parentElement;\n if (parentElement && parentElement instanceof HTMLElement) {\n tagName = (_b = parentElement.tagName) == null ? void 0 : _b.toLowerCase();\n }\n }\n return tagName ? `<${tagName}>` : "";\n }\n function collectElementInfo(node, currentWindow, currentDocument, baseZoom = 1, basePoint = { left: 0, top: 0 }, isContainer = false) {\n var _a2, _b;\n const rect = elementRect(node, currentWindow, currentDocument, baseZoom);\n if (!rect) {\n return null;\n }\n if (rect.width < CONTAINER_MINI_WIDTH || rect.height < CONTAINER_MINI_HEIGHT) {\n return null;\n }\n if (basePoint.left !== 0 || basePoint.top !== 0) {\n rect.left += basePoint.left;\n rect.top += basePoint.top;\n }\n if (rect.height >= window.innerHeight && rect.width >= window.innerWidth) {\n return null;\n }\n if (isFormElement(node)) {\n const attributes = getNodeAttributes(node, currentWindow);\n let valueContent = attributes.value || attributes.placeholder || node.textContent || "";\n const nodeHashId = midsceneGenerateHash(node, valueContent, rect);\n const tagName = node.tagName.toLowerCase();\n if (node.tagName.toLowerCase() === "select") {\n const selectedOption = node.options[node.selectedIndex];\n valueContent = (selectedOption == null ? void 0 : selectedOption.textContent) || "";\n }\n if ((node.tagName.toLowerCase() === "input" || node.tagName.toLowerCase() === "textarea") && node.value) {\n valueContent = node.value;\n }\n const elementInfo = {\n id: nodeHashId,\n nodeHashId,\n nodeType: "FORM_ITEM Node" /* FORM_ITEM */,\n indexId: indexId++,\n attributes: __spreadProps(__spreadValues({}, attributes), {\n htmlTagName: `<${tagName}>`,\n nodeType: "FORM_ITEM Node" /* FORM_ITEM */\n }),\n content: valueContent.trim(),\n rect,\n center: [\n Math.round(rect.left + rect.width / 2),\n Math.round(rect.top + rect.height / 2)\n ],\n zoom: rect.zoom,\n isVisible: rect.isVisible\n };\n return elementInfo;\n }\n if (isButtonElement(node)) {\n const rect2 = mergeElementAndChildrenRects(\n node,\n currentWindow,\n currentDocument,\n baseZoom\n );\n if (!rect2) {\n return null;\n }\n const attributes = getNodeAttributes(node, currentWindow);\n const pseudo = getPseudoElementContent(node, currentWindow);\n const content = node.innerText || pseudo.before || pseudo.after || "";\n const nodeHashId = midsceneGenerateHash(node, content, rect2);\n const elementInfo = {\n id: nodeHashId,\n indexId: indexId++,\n nodeHashId,\n nodeType: "BUTTON Node" /* BUTTON */,\n attributes: __spreadProps(__spreadValues({}, attributes), {\n htmlTagName: tagNameOfNode(node),\n nodeType: "BUTTON Node" /* BUTTON */\n }),\n content,\n rect: rect2,\n center: [\n Math.round(rect2.left + rect2.width / 2),\n Math.round(rect2.top + rect2.height / 2)\n ],\n zoom: rect2.zoom,\n isVisible: rect2.isVisible\n };\n return elementInfo;\n }\n if (isImgElement(node)) {\n const attributes = getNodeAttributes(node, currentWindow);\n const nodeHashId = midsceneGenerateHash(node, "", rect);\n const elementInfo = {\n id: nodeHashId,\n indexId: indexId++,\n nodeHashId,\n attributes: __spreadProps(__spreadValues(__spreadValues({}, attributes), ((_a2 = node.nodeName) == null ? void 0 : _a2.toLowerCase()) === "svg" ? {\n svgContent: "true"\n } : {}), {\n nodeType: "IMG Node" /* IMG */,\n htmlTagName: tagNameOfNode(node)\n }),\n nodeType: "IMG Node" /* IMG */,\n content: "",\n rect,\n center: [\n Math.round(rect.left + rect.width / 2),\n Math.round(rect.top + rect.height / 2)\n ],\n zoom: rect.zoom,\n isVisible: rect.isVisible\n };\n return elementInfo;\n }\n if (isTextElement(node)) {\n const text = (_b = node.textContent) == null ? void 0 : _b.trim().replace(/\\n+/g, " ");\n if (!text) {\n return null;\n }\n const attributes = getNodeAttributes(node, currentWindow);\n const attributeKeys = Object.keys(attributes);\n if (!text.trim() && attributeKeys.length === 0) {\n return null;\n }\n const nodeHashId = midsceneGenerateHash(node, text, rect);\n const elementInfo = {\n id: nodeHashId,\n indexId: indexId++,\n nodeHashId,\n nodeType: "TEXT Node" /* TEXT */,\n attributes: __spreadProps(__spreadValues({}, attributes), {\n nodeType: "TEXT Node" /* TEXT */,\n htmlTagName: tagNameOfNode(node)\n }),\n center: [\n Math.round(rect.left + rect.width / 2),\n Math.round(rect.top + rect.height / 2)\n ],\n content: text,\n rect,\n zoom: rect.zoom,\n isVisible: rect.isVisible\n };\n return elementInfo;\n }\n if (isAElement(node)) {\n const attributes = getNodeAttributes(node, currentWindow);\n const pseudo = getPseudoElementContent(node, currentWindow);\n const content = node.innerText || pseudo.before || pseudo.after || "";\n const nodeHashId = midsceneGenerateHash(node, content, rect);\n const elementInfo = {\n id: nodeHashId,\n indexId: indexId++,\n nodeHashId,\n nodeType: "Anchor Node" /* A */,\n attributes: __spreadProps(__spreadValues({}, attributes), {\n htmlTagName: tagNameOfNode(node),\n nodeType: "Anchor Node" /* A */\n }),\n content,\n rect,\n center: [\n Math.round(rect.left + rect.width / 2),\n Math.round(rect.top + rect.height / 2)\n ],\n zoom: rect.zoom,\n isVisible: rect.isVisible\n };\n return elementInfo;\n }\n if (isContainerElement(node) || isContainer) {\n const attributes = getNodeAttributes(node, currentWindow);\n const nodeHashId = midsceneGenerateHash(node, "", rect);\n const elementInfo = {\n id: nodeHashId,\n nodeHashId,\n indexId: indexId++,\n nodeType: "CONTAINER Node" /* CONTAINER */,\n attributes: __spreadProps(__spreadValues({}, attributes), {\n nodeType: "CONTAINER Node" /* CONTAINER */,\n htmlTagName: tagNameOfNode(node)\n }),\n content: "",\n rect,\n center: [\n Math.round(rect.left + rect.width / 2),\n Math.round(rect.top + rect.height / 2)\n ],\n zoom: rect.zoom,\n isVisible: rect.isVisible\n };\n return elementInfo;\n }\n return null;\n }\n function extractTextWithPosition(initNode, debugMode2 = false) {\n const elementNode = extractTreeNode(initNode, debugMode2);\n const elementInfoArray = [];\n function dfsTopChildren(node) {\n if (node.node) {\n elementInfoArray.push(node.node);\n }\n for (let i = 0; i < node.children.length; i++) {\n dfsTopChildren(node.children[i]);\n }\n }\n dfsTopChildren({ children: elementNode.children, node: elementNode.node });\n return elementInfoArray;\n }\n function extractTreeNodeAsString(initNode, visibleOnly = false, debugMode2 = false) {\n const elementNode = extractTreeNode(initNode, debugMode2);\n return descriptionOfTree(elementNode, void 0, false, visibleOnly);\n }\n function extractTreeNode(initNode, debugMode2 = false) {\n setDebugMode(debugMode2);\n indexId = 0;\n const topDocument = getTopDocument();\n const startNode = initNode || topDocument;\n const topChildren = [];\n function dfs(node, currentWindow, currentDocument, baseZoom = 1, basePoint = { left: 0, top: 0 }) {\n if (!node) {\n return null;\n }\n if (node.nodeType && node.nodeType === 10) {\n return null;\n }\n const elementInfo = collectElementInfo(\n node,\n currentWindow,\n currentDocument,\n baseZoom,\n basePoint\n );\n if (node instanceof currentWindow.HTMLIFrameElement) {\n if (node.contentWindow && node.contentWindow) {\n return null;\n }\n }\n const nodeInfo = {\n node: elementInfo,\n children: []\n };\n if ((elementInfo == null ? void 0 : elementInfo.nodeType) === "BUTTON Node" /* BUTTON */ || (elementInfo == null ? void 0 : elementInfo.nodeType) === "IMG Node" /* IMG */ || (elementInfo == null ? void 0 : elementInfo.nodeType) === "TEXT Node" /* TEXT */ || (elementInfo == null ? void 0 : elementInfo.nodeType) === "FORM_ITEM Node" /* FORM_ITEM */ || (elementInfo == null ? void 0 : elementInfo.nodeType) === "CONTAINER Node" /* CONTAINER */) {\n return nodeInfo;\n }\n const rect = getRect(node, baseZoom, currentWindow);\n for (let i = 0; i < node.childNodes.length; i++) {\n logger("will dfs", node.childNodes[i]);\n const childNodeInfo = dfs(\n node.childNodes[i],\n currentWindow,\n currentDocument,\n rect.zoom,\n basePoint\n );\n if (Array.isArray(childNodeInfo)) {\n nodeInfo.children.push(...childNodeInfo);\n } else if (childNodeInfo) {\n nodeInfo.children.push(childNodeInfo);\n }\n }\n if (nodeInfo.node === null) {\n if (nodeInfo.children.length === 0) {\n return null;\n }\n return nodeInfo.children;\n }\n return nodeInfo;\n }\n const rootNodeInfo = dfs(startNode, window, document, 1, {\n left: 0,\n top: 0\n });\n if (Array.isArray(rootNodeInfo)) {\n topChildren.push(...rootNodeInfo);\n } else if (rootNodeInfo) {\n topChildren.push(rootNodeInfo);\n }\n if (startNode === topDocument) {\n const iframes = document.querySelectorAll("iframe");\n for (let i = 0; i < iframes.length; i++) {\n const iframe = iframes[i];\n if (iframe.contentDocument && iframe.contentWindow) {\n const iframeInfo = collectElementInfo(iframe, window, document, 1);\n if (iframeInfo) {\n const iframeChildren = dfs(\n iframe.contentDocument.body,\n iframe.contentWindow,\n iframe.contentDocument,\n 1,\n {\n left: iframeInfo.rect.left,\n top: iframeInfo.rect.top\n }\n );\n if (Array.isArray(iframeChildren)) {\n topChildren.push(...iframeChildren);\n } else if (iframeChildren) {\n topChildren.push(iframeChildren);\n }\n }\n }\n }\n }\n return {\n node: null,\n children: topChildren\n };\n }\n function mergeElementAndChildrenRects(node, currentWindow, currentDocument, baseZoom = 1) {\n const selfRect = elementRect(node, currentWindow, currentDocument, baseZoom);\n if (!selfRect)\n return null;\n let minLeft = selfRect.left;\n let minTop = selfRect.top;\n let maxRight = selfRect.left + selfRect.width;\n let maxBottom = selfRect.top + selfRect.height;\n function traverse(child) {\n for (let i = 0; i < child.childNodes.length; i++) {\n const sub = child.childNodes[i];\n if (sub.nodeType === 1) {\n const rect = elementRect(sub, currentWindow, currentDocument, baseZoom);\n if (rect) {\n minLeft = Math.min(minLeft, rect.left);\n minTop = Math.min(minTop, rect.top);\n maxRight = Math.max(maxRight, rect.left + rect.width);\n maxBottom = Math.max(maxBottom, rect.top + rect.height);\n }\n traverse(sub);\n }\n }\n }\n traverse(node);\n return __spreadProps(__spreadValues({}, selfRect), {\n left: minLeft,\n top: minTop,\n width: maxRight - minLeft,\n height: maxBottom - minTop\n });\n }\n\n // src/extractor/locator.ts\n var getElementXpathIndex = (element) => {\n let index = 1;\n let prev = element.previousElementSibling;\n while (prev) {\n if (prev.nodeName.toLowerCase() === element.nodeName.toLowerCase()) {\n index++;\n }\n prev = prev.previousElementSibling;\n }\n return index;\n };\n var normalizeXpathText = (text) => {\n if (typeof text !== "string") {\n return "";\n }\n return text.replace(/\\s+/g, " ").trim();\n };\n var buildCurrentElementXpath = (element, isOrderSensitive, isLeafElement) => {\n var _a2;\n const parentPath = element.parentNode ? getElementXpath(element.parentNode, isOrderSensitive) : "";\n const prefix = parentPath ? `${parentPath}/` : "/";\n const tagName = element.nodeName.toLowerCase();\n const textContent = (_a2 = element.textContent) == null ? void 0 : _a2.trim();\n if (isOrderSensitive) {\n const index2 = getElementXpathIndex(element);\n return `${prefix}${tagName}[${index2}]`;\n }\n if (isLeafElement && textContent) {\n return `${prefix}${tagName}[normalize-space()="${normalizeXpathText(textContent)}"]`;\n }\n const index = getElementXpathIndex(element);\n return `${prefix}${tagName}[${index}]`;\n };\n var getElementXpath = (element, isOrderSensitive = false, isLeafElement = false) => {\n var _a2;\n if (element.nodeType === Node.TEXT_NODE) {\n const parentNode = element.parentNode;\n if (parentNode && parentNode.nodeType === Node.ELEMENT_NODE) {\n const parentXPath = getElementXpath(parentNode, isOrderSensitive, true);\n const textContent = (_a2 = element.textContent) == null ? void 0 : _a2.trim();\n if (textContent) {\n return `${parentXPath}/text()[normalize-space()="${normalizeXpathText(textContent)}"]`;\n }\n return `${parentXPath}/text()`;\n }\n return "";\n }\n if (element.nodeType !== Node.ELEMENT_NODE)\n return "";\n const el = element;\n if (el === document.documentElement)\n return "/html";\n if (el === document.body)\n return "/html/body";\n if (isSvgElement(el)) {\n let parent = el.parentNode;\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n if (!isSvgElement(parent)) {\n return getElementXpath(parent, isOrderSensitive, isLeafElement);\n }\n parent = parent.parentNode;\n }\n return getElementXpath(el.parentNode, isOrderSensitive, isLeafElement);\n }\n return buildCurrentElementXpath(el, isOrderSensitive, isLeafElement);\n };\n function getXpathsById(id) {\n const node = getNodeFromCacheList(id);\n if (!node) {\n return null;\n }\n const fullXPath = getElementXpath(node, false, true);\n return [fullXPath];\n }\n function getXpathsByPoint(point, isOrderSensitive) {\n const element = document.elementFromPoint(point.left, point.top);\n if (!element) {\n return null;\n }\n const fullXPath = getElementXpath(element, isOrderSensitive, true);\n return [fullXPath];\n }\n function getNodeInfoByXpath(xpath) {\n const xpathResult = document.evaluate(\n xpath,\n document,\n null,\n XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,\n null\n );\n if (xpathResult.snapshotLength !== 1) {\n return null;\n }\n const node = xpathResult.snapshotItem(0);\n return node;\n }\n function getElementInfoByXpath(xpath) {\n const node = getNodeInfoByXpath(xpath);\n if (!node) {\n return null;\n }\n if (node instanceof HTMLElement) {\n const rect = getRect(node, 1, window);\n const isVisible = isElementPartiallyInViewport(rect, window, document, 1);\n if (!isVisible) {\n node.scrollIntoView({ behavior: "instant", block: "center" });\n }\n }\n return collectElementInfo(\n node,\n window,\n document,\n 1,\n {\n left: 0,\n top: 0\n },\n true\n );\n }\n return __toCommonJS(extractor_exports);\n})();\n/*! Bundled license information:\n\njs-sha256/src/sha256.js:\n (**\n * [js-sha256]{@link https://github.com/emn178/js-sha256}\n *\n * @version 0.11.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2024\n * @license MIT\n *)\n*/\n'}async function b(t=!1){if(c||h)return null;let r=`${g()}midscene_element_inspector.setNodeHashCacheListOnWindow();`;return t?`${r}midscene_element_inspector.webExtractNodeTree()`:`${r}midscene_element_inspector.webExtractTextWithPosition()`}}}),require_chunk_WXNDYUNG=__commonJS({"../core/dist/lib/chunk-WXNDYUNG.js"(t){function r(t){if(t&&t.__esModule)return t;var r={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(r[n]=t[n]);return r.default=t,r}function n(t){let r,n=t[0],i=1;for(;i<t.length;){let a=t[i],o=t[i+1];if(i+=2,("optionalAccess"===a||"optionalCall"===a)&&null==n)return;"access"===a||"optionalAccess"===a?(r=n,n=o(n)):"call"!==a&&"optionalCall"!==a||(n=o((...t)=>n.call(r,...t)),r=void 0)}return n}init_globals(),Object.defineProperty(t,"__esModule",{value:!0});var i=require_child_process(),a=require_fs(),o=r(a),s=require_browser3(),l=require_path_browserify(),u=r(l),d=require_common6(),c=require_env(),h=require_fs2(),f=require_utils5(),p=!1,m=new Map;function g(t,r){let n="</html>",i=o.statSync(t),a=Math.min(i.size,4096),s=Math.max(0,i.size-a),l=Buffer.alloc(i.size-s),u=o.openSync(t,"r");o.readSync(u,l,0,l.length,s),o.closeSync(u);let d=l.toString("utf8"),c=d.lastIndexOf(n);if(-1===c)throw Error(`No </html> found in file:${t}`);let h=d.slice(0,c),f=s+Buffer.byteLength(h,"utf8");o.truncateSync(t,f),o.appendFileSync(t,`${r}
|
|
724
695
|
${n}
|
|
725
696
|
`)}function b(t,r,n){let i="REPLACE_ME_WITH_REPORT_HTML",o=r&&!f.ifInBrowser,s="";if("string"==typeof t)s='<script type="midscene_web_dump" type="application/json">\n'+f.escapeScriptTag.call(void 0,t)+"\n<\/script>";else{let{dumpString:r,attributes:n}=t;s='<script type="midscene_web_dump" type="application/json" '+Object.keys(n||{}).map(t=>`${t}="${encodeURIComponent(n[t])}"`).join(" ")+">\n"+f.escapeScriptTag.call(void 0,r)+"\n<\/script>"}return o?(n?(m.get(r)||(a.writeFileSync.call(void 0,r,i,{flag:"w"}),m.set(r,!0)),g(r,s)):a.writeFileSync.call(void 0,r,i+s,{flag:"w"}),r):i+s}function y(t,r,n){if(f.ifInBrowser||f.ifInWorker)return import_console_browserify.default.log("will not write report in browser"),null;let i=l.dirname.call(void 0,"/index.js");if(!h.getRunningPkgInfo.call(void 0,i))return import_console_browserify.default.warn("midscenePkgInfo not found, will not write report"),null;let o=u.join(d.getMidsceneRunSubDir.call(void 0,"report"),`${t}.html`);if(b(r,o,n),import_browser.default.env.MIDSCENE_DEBUG_LOG_JSON){let t,i=`${o}.json`;t="string"==typeof r?JSON.parse(r):r,a.writeFileSync.call(void 0,i,JSON.stringify(t,null,2),{flag:n?"a":"w"}),f.logMsg.call(void 0,`Midscene - dump file written: ${i}`)}return o}function _(){try{let t=h.getRunningPkgInfo.call(void 0);if(!t)return null;let{name:r}=t,n=u.join(s.tmpdir.call(void 0),r);return a.mkdirSync.call(void 0,n,{recursive:!0}),n}catch(t){return null}}function v(t,r){return r&&"Page"===n([r,"access",t=>t.constructor,"optionalAccess",t=>t.name])?"[Page object]":r&&"Browser"===n([r,"access",t=>t.constructor,"optionalAccess",t=>t.name])?"[Browser object]":r}function A(...t){c.getAIConfig.call(void 0,c.MIDSCENE_DEBUG_MODE)&&import_console_browserify.default.log("[Midscene]",...t)}var w="";t.groupedActionDumpFileExt="web-dump.json",t.insertScriptBeforeClosingHtml=g,t.reportHTMLContent=b,t.writeDumpReport=y,t.writeLogFile=function(t){if(f.ifInBrowser||f.ifInWorker)return"/mock/report.html";let{fileName:r,fileExt:i,fileContent:o,type:s="dump"}=t,l=d.getMidsceneRunSubDir.call(void 0,s);if(!p){f.assert.call(void 0,l,"logDir should be set before writing dump file");let t=u.join(l,"../../.gitignore"),r=u.join(l,"../../.git"),n="";a.existsSync.call(void 0,r)&&(a.existsSync.call(void 0,t)&&(n=a.readFileSync.call(void 0,t,"utf-8")),n.includes(`${d.defaultRunDirName}/`)||a.writeFileSync.call(void 0,t,`${n}
|
|
726
697
|
# Midscene.js dump files
|
|
@@ -728,7 +699,7 @@ ${d.defaultRunDirName}/dump
|
|
|
728
699
|
${d.defaultRunDirName}/report
|
|
729
700
|
${d.defaultRunDirName}/tmp
|
|
730
701
|
${d.defaultRunDirName}/log
|
|
731
|
-
`,"utf-8")),p=!0}let c=u.join(l,`${r}.${i}`);return"dump"!==s&&a.writeFileSync.call(void 0,c,o),n([t,"optionalAccess",t=>t.generateReport])?y(r,o,t.appendReport):c},t.getTmpDir=_,t.getTmpFile=function(t){if(f.ifInBrowser||f.ifInWorker)return null;let r=_(),n=`${f.uuid.call(void 0)}.${t}`;return u.join(r,n)},t.overlapped=function(t,r){return t.left<r.left+r.width&&t.left+t.width>r.left&&t.top<r.top+r.height&&t.top+t.height>r.top},t.sleep=async function(t){return new Promise(r=>setTimeout(r,t))},t.replacerForPageObject=v,t.stringifyDumpData=function(t,r){return JSON.stringify(t,v,r)},t.getVersion=function(){return"0.26.1"},t.uploadTestInfoToServer=function({testUrl:t}){let r="",a="",o=n([c.getAIConfigInJson.call(void 0,c.MIDSCENE_OPENAI_INIT_CONFIG_JSON),"optionalAccess",t=>t.REPORT_SERVER_URL]);try{r=i.execSync.call(void 0,"git config --get remote.origin.url").toString().trim(),a=i.execSync.call(void 0,"git config --get user.email").toString().trim()}catch(t){A("Failed to get git info:",t)}o&&(r&&r!==w||!r&&t)&&(A("Uploading test info to server",{serverUrl:o,repoUrl:r,testUrl:t,userEmail:a}),fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({repo_url:r,test_url:t,user_email:a})}).then(t=>t.json()).then(t=>{A("Successfully uploaded test info to server:",t)}).catch(t=>A("Failed to upload test info to server:",t)),w=r)}}}),require_utils12=__commonJS({"../core/dist/lib/utils.js"(t){init_globals(),Object.defineProperty(t,"__esModule",{value:!0});var r=require_chunk_4CBFCRNS();t.getTmpDir=r.getTmpDir,t.getTmpFile=r.getTmpFile,t.getVersion=r.getVersion,t.groupedActionDumpFileExt=r.groupedActionDumpFileExt,t.insertScriptBeforeClosingHtml=r.insertScriptBeforeClosingHtml,t.overlapped=r.overlapped,t.replacerForPageObject=r.replacerForPageObject,t.reportHTMLContent=r.reportHTMLContent,t.sleep=r.sleep,t.stringifyDumpData=r.stringifyDumpData,t.uploadTestInfoToServer=r.uploadTestInfoToServer,t.writeDumpReport=r.writeDumpReport,t.writeLogFile=r.writeLogFile}}),require_dayjs_min=__commonJS({"../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js"(t,r){var n,i;init_globals(),n=t,i=function(){var t=6e4,r=36e5,n="millisecond",i="second",a="minute",o="hour",s="day",l="week",u="month",d="quarter",c="year",h="date",f="Invalid Date",p=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,m=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,g={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var r=["th","st","nd","rd"],n=t%100;return"["+t+(r[(n-20)%10]||r[n]||r[0])+"]"}},b=function(t,r,n){var i=String(t);return!i||i.length>=r?t:""+Array(r+1-i.length).join(n)+t},y={s:b,z:function(t){var r=-t.utcOffset(),n=Math.abs(r),i=Math.floor(n/60),a=n%60;return(r<=0?"+":"-")+b(i,2,"0")+":"+b(a,2,"0")},m:function t(r,n){if(r.date()<n.date())return-t(n,r);var i=12*(n.year()-r.year())+(n.month()-r.month()),a=r.clone().add(i,u),o=n-a<0,s=r.clone().add(i+(o?-1:1),u);return+(-(i+(n-a)/(o?a-s:s-a))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return({M:u,y:c,w:l,d:s,D:h,h:o,m:a,s:i,ms:n,Q:d})[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},_="en",v={};v[_]=g;var A="$isDayjsObject",w=function(t){return t instanceof C||!(!t||!t[A])},x=function t(r,n,i){var a;if(!r)return _;if("string"==typeof r){var o=r.toLowerCase();v[o]&&(a=o),n&&(v[o]=n,a=o);var s=r.split("-");if(!a&&s.length>1)return t(s[0])}else{var l=r.name;v[l]=r,a=l}return!i&&a&&(_=a),a||!i&&_},E=function(t,r){if(w(t))return t.clone();var n="object"==typeof r?r:{};return n.date=t,n.args=arguments,new C(n)},S=y;S.l=x,S.i=w,S.w=function(t,r){return E(t,{locale:r.$L,utc:r.$u,x:r.$x,$offset:r.$offset})};var C=function(){function g(t){this.$L=x(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[A]=!0}var b=g.prototype;return b.parse=function(t){this.$d=function(t){var r=t.date,n=t.utc;if(null===r)return new Date(NaN);if(S.u(r))return new Date;if(r instanceof Date)return new Date(r);if("string"==typeof r&&!/Z$/i.test(r)){var i=r.match(p);if(i){var a=i[2]-1||0,o=(i[7]||"0").substring(0,3);return n?new Date(Date.UTC(i[1],a,i[3]||1,i[4]||0,i[5]||0,i[6]||0,o)):new Date(i[1],a,i[3]||1,i[4]||0,i[5]||0,i[6]||0,o)}}return new Date(r)}(t),this.init()},b.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},b.$utils=function(){return S},b.isValid=function(){return this.$d.toString()!==f},b.isSame=function(t,r){var n=E(t);return this.startOf(r)<=n&&n<=this.endOf(r)},b.isAfter=function(t,r){return E(t)<this.startOf(r)},b.isBefore=function(t,r){return this.endOf(r)<E(t)},b.$g=function(t,r,n){return S.u(t)?this[r]:this.set(n,t)},b.unix=function(){return Math.floor(this.valueOf()/1e3)},b.valueOf=function(){return this.$d.getTime()},b.startOf=function(t,r){var n=this,d=!!S.u(r)||r,f=S.p(t),p=function(t,r){var i=S.w(n.$u?Date.UTC(n.$y,r,t):new Date(n.$y,r,t),n);return d?i:i.endOf(s)},m=function(t,r){return S.w(n.toDate()[t].apply(n.toDate("s"),(d?[0,0,0,0]:[23,59,59,999]).slice(r)),n)},g=this.$W,b=this.$M,y=this.$D,_="set"+(this.$u?"UTC":"");switch(f){case c:return d?p(1,0):p(31,11);case u:return d?p(1,b):p(0,b+1);case l:var v=this.$locale().weekStart||0,A=(g<v?g+7:g)-v;return p(d?y-A:y+(6-A),b);case s:case h:return m(_+"Hours",0);case o:return m(_+"Minutes",1);case a:return m(_+"Seconds",2);case i:return m(_+"Milliseconds",3);default:return this.clone()}},b.endOf=function(t){return this.startOf(t,!1)},b.$set=function(t,r){var l,d=S.p(t),f="set"+(this.$u?"UTC":""),p=((l={})[s]=f+"Date",l[h]=f+"Date",l[u]=f+"Month",l[c]=f+"FullYear",l[o]=f+"Hours",l[a]=f+"Minutes",l[i]=f+"Seconds",l[n]=f+"Milliseconds",l)[d],m=d===s?this.$D+(r-this.$W):r;if(d===u||d===c){var g=this.clone().set(h,1);g.$d[p](m),g.init(),this.$d=g.set(h,Math.min(this.$D,g.daysInMonth())).$d}else p&&this.$d[p](m);return this.init(),this},b.set=function(t,r){return this.clone().$set(t,r)},b.get=function(t){return this[S.p(t)]()},b.add=function(n,d){var h,f=this;n=Number(n);var p=S.p(d),m=function(t){var r=E(f);return S.w(r.date(r.date()+Math.round(t*n)),f)};if(p===u)return this.set(u,this.$M+n);if(p===c)return this.set(c,this.$y+n);if(p===s)return m(1);if(p===l)return m(7);var g=((h={})[a]=t,h[o]=r,h[i]=1e3,h)[p]||1,b=this.$d.getTime()+n*g;return S.w(b,this)},b.subtract=function(t,r){return this.add(-1*t,r)},b.format=function(t){var r=this,n=this.$locale();if(!this.isValid())return n.invalidDate||f;var i=t||"YYYY-MM-DDTHH:mm:ssZ",a=S.z(this),o=this.$H,s=this.$m,l=this.$M,u=n.weekdays,d=n.months,c=n.meridiem,h=function(t,n,a,o){return t&&(t[n]||t(r,i))||a[n].slice(0,o)},p=function(t){return S.s(o%12||12,t,"0")},g=c||function(t,r,n){var i=t<12?"AM":"PM";return n?i.toLowerCase():i};return i.replace(m,function(t,i){return i||function(t){switch(t){case"YY":return String(r.$y).slice(-2);case"YYYY":return S.s(r.$y,4,"0");case"M":return l+1;case"MM":return S.s(l+1,2,"0");case"MMM":return h(n.monthsShort,l,d,3);case"MMMM":return h(d,l);case"D":return r.$D;case"DD":return S.s(r.$D,2,"0");case"d":return String(r.$W);case"dd":return h(n.weekdaysMin,r.$W,u,2);case"ddd":return h(n.weekdaysShort,r.$W,u,3);case"dddd":return u[r.$W];case"H":return String(o);case"HH":return S.s(o,2,"0");case"h":return p(1);case"hh":return p(2);case"a":return g(o,s,!0);case"A":return g(o,s,!1);case"m":return String(s);case"mm":return S.s(s,2,"0");case"s":return String(r.$s);case"ss":return S.s(r.$s,2,"0");case"SSS":return S.s(r.$ms,3,"0");case"Z":return a}return null}(t)||a.replace(":","")})},b.utcOffset=function(){return-(15*Math.round(this.$d.getTimezoneOffset()/15))},b.diff=function(n,h,f){var p,m=this,g=S.p(h),b=E(n),y=(b.utcOffset()-this.utcOffset())*t,_=this-b,v=function(){return S.m(m,b)};switch(g){case c:p=v()/12;break;case u:p=v();break;case d:p=v()/3;break;case l:p=(_-y)/6048e5;break;case s:p=(_-y)/864e5;break;case o:p=_/r;break;case a:p=_/t;break;case i:p=_/1e3;break;default:p=_}return f?p:S.a(p)},b.daysInMonth=function(){return this.endOf(u).$D},b.$locale=function(){return v[this.$L]},b.locale=function(t,r){if(!t)return this.$L;var n=this.clone(),i=x(t,r,!0);return i&&(n.$L=i),n},b.clone=function(){return S.w(this.$d,this)},b.toDate=function(){return new Date(this.valueOf())},b.toJSON=function(){return this.isValid()?this.toISOString():null},b.toISOString=function(){return this.$d.toISOString()},b.toString=function(){return this.$d.toUTCString()},g}(),I=C.prototype;return E.prototype=I,[["$ms",n],["$s",i],["$m",a],["$H",o],["$W",s],["$M",u],["$y",c],["$D",h]].forEach(function(t){I[t[1]]=function(r){return this.$g(r,t[0],t[1])}}),E.extend=function(t,r){return t.$i||(t(r,C,E),t.$i=!0),E},E.locale=x,E.isDayjs=w,E.unix=function(t){return E(1e3*t)},E.en=v[_],E.Ls=v,E.p={},E},"object"==typeof t&&void 0!==r?r.exports=i():"function"==typeof define&&define.amd?define(i):(n="undefined"!=typeof globalThis?globalThis:n||self).dayjs=i()}}),require_common7=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/common.js"(t,r){function n(t){return null==t}init_globals(),r.exports.isNothing=n,r.exports.isObject=function(t){return"object"==typeof t&&null!==t},r.exports.toArray=function(t){return Array.isArray(t)?t:n(t)?[]:[t]},r.exports.repeat=function(t,r){var n,i="";for(n=0;n<r;n+=1)i+=t;return i},r.exports.isNegativeZero=function(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t},r.exports.extend=function(t,r){var n,i,a,o;if(r)for(n=0,i=(o=Object.keys(r)).length;n<i;n+=1)t[a=o[n]]=r[a];return t}}}),require_exception=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/exception.js"(t,r){function n(t,r){var n="",i=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(n+='in "'+t.mark.name+'" '),n+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!r&&t.mark.snippet&&(n+="\n\n"+t.mark.snippet),i+" "+n):i}function i(t,r){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=r,this.message=n(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=Error().stack||""}init_globals(),i.prototype=Object.create(Error.prototype),i.prototype.constructor=i,i.prototype.toString=function(t){return this.name+": "+n(this,t)},r.exports=i}}),require_snippet=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/snippet.js"(t,r){init_globals();var n=require_common7();function i(t,r,n,i,a){var o="",s="",l=Math.floor(a/2)-1;return i-r>l&&(r=i-l+(o=" ... ").length),n-i>l&&(n=i+l-(s=" ...").length),{str:o+t.slice(r,n).replace(/\t/g,"→")+s,pos:i-r+o.length}}function a(t,r){return n.repeat(" ",r-t.length)+t}r.exports=function(t,r){if(r=Object.create(r||null),!t.buffer)return null;r.maxLength||(r.maxLength=79),"number"!=typeof r.indent&&(r.indent=1),"number"!=typeof r.linesBefore&&(r.linesBefore=3),"number"!=typeof r.linesAfter&&(r.linesAfter=2);for(var o,s=/\r?\n|\r|\0/g,l=[0],u=[],d=-1;o=s.exec(t.buffer);)u.push(o.index),l.push(o.index+o[0].length),t.position<=o.index&&d<0&&(d=l.length-2);d<0&&(d=l.length-1);var c,h,f="",p=Math.min(t.line+r.linesAfter,u.length).toString().length,m=r.maxLength-(r.indent+p+3);for(c=1;c<=r.linesBefore&&!(d-c<0);c++)h=i(t.buffer,l[d-c],u[d-c],t.position-(l[d]-l[d-c]),m),f=n.repeat(" ",r.indent)+a((t.line-c+1).toString(),p)+" | "+h.str+"\n"+f;for(h=i(t.buffer,l[d],u[d],t.position,m),f+=n.repeat(" ",r.indent)+a((t.line+1).toString(),p)+" | "+h.str+"\n"+n.repeat("-",r.indent+p+3+h.pos)+"^\n",c=1;c<=r.linesAfter&&!(d+c>=u.length);c++)h=i(t.buffer,l[d+c],u[d+c],t.position-(l[d]-l[d+c]),m),f+=n.repeat(" ",r.indent)+a((t.line+c+1).toString(),p)+" | "+h.str+"\n";return f.replace(/\n$/,"")}}}),require_type2=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type.js"(t,r){init_globals();var n=require_exception(),i=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],a=["scalar","sequence","mapping"];r.exports=function(t,r){var o,s;if(Object.keys(r=r||{}).forEach(function(r){if(-1===i.indexOf(r))throw new n('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.options=r,this.tag=t,this.kind=r.kind||null,this.resolve=r.resolve||function(){return!0},this.construct=r.construct||function(t){return t},this.instanceOf=r.instanceOf||null,this.predicate=r.predicate||null,this.represent=r.represent||null,this.representName=r.representName||null,this.defaultStyle=r.defaultStyle||null,this.multi=r.multi||!1,this.styleAliases=(o=r.styleAliases||null,s={},null!==o&&Object.keys(o).forEach(function(t){o[t].forEach(function(r){s[String(r)]=t})}),s),-1===a.indexOf(this.kind))throw new n('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}}}),require_schema=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/schema.js"(t,r){init_globals();var n=require_exception(),i=require_type2();function a(t,r){var n=[];return t[r].forEach(function(t){var r=n.length;n.forEach(function(n,i){n.tag===t.tag&&n.kind===t.kind&&n.multi===t.multi&&(r=i)}),n[r]=t}),n}function o(t){return this.extend(t)}o.prototype.extend=function(t){var r=[],s=[];if(t instanceof i)s.push(t);else if(Array.isArray(t))s=s.concat(t);else{if(!t||!Array.isArray(t.implicit)&&!Array.isArray(t.explicit))throw new n("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");t.implicit&&(r=r.concat(t.implicit)),t.explicit&&(s=s.concat(t.explicit))}r.forEach(function(t){if(!(t instanceof i))throw new n("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(t.loadKind&&"scalar"!==t.loadKind)throw new n("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(t.multi)throw new n("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),s.forEach(function(t){if(!(t instanceof i))throw new n("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var l=Object.create(o.prototype);return l.implicit=(this.implicit||[]).concat(r),l.explicit=(this.explicit||[]).concat(s),l.compiledImplicit=a(l,"implicit"),l.compiledExplicit=a(l,"explicit"),l.compiledTypeMap=function(){var t,r,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function i(t){t.multi?(n.multi[t.kind].push(t),n.multi.fallback.push(t)):n[t.kind][t.tag]=n.fallback[t.tag]=t}for(t=0,r=arguments.length;t<r;t+=1)arguments[t].forEach(i);return n}(l.compiledImplicit,l.compiledExplicit),l},r.exports=o}}),require_str=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/str.js"(t,r){init_globals(),r.exports=new(require_type2())("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}})}}),require_seq=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/seq.js"(t,r){init_globals(),r.exports=new(require_type2())("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}})}}),require_map2=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/map.js"(t,r){init_globals(),r.exports=new(require_type2())("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}})}}),require_failsafe=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/schema/failsafe.js"(t,r){init_globals(),r.exports=new(require_schema())({explicit:[require_str(),require_seq(),require_map2()]})}}),require_null2=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/null.js"(t,r){init_globals(),r.exports=new(require_type2())("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(t){if(null===t)return!0;var r=t.length;return 1===r&&"~"===t||4===r&&("null"===t||"Null"===t||"NULL"===t)},construct:function(){return null},predicate:function(t){return null===t},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"})}}),require_bool=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/bool.js"(t,r){init_globals(),r.exports=new(require_type2())("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(t){if(null===t)return!1;var r=t.length;return 4===r&&("true"===t||"True"===t||"TRUE"===t)||5===r&&("false"===t||"False"===t||"FALSE"===t)},construct:function(t){return"true"===t||"True"===t||"TRUE"===t},predicate:function(t){return"[object Boolean]"===Object.prototype.toString.call(t)},represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})}}),require_int=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/int.js"(t,r){init_globals();var n=require_common7();function i(t){return 48<=t&&t<=55}function a(t){return 48<=t&&t<=57}r.exports=new(require_type2())("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(t){if(null===t)return!1;var r,n,o=t.length,s=0,l=!1;if(!o)return!1;if("-"!==(r=t[s])&&"+"!==r||(r=t[++s]),"0"===r){if(s+1===o)return!0;if("b"===(r=t[++s])){for(s++;s<o;s++)if("_"!==(r=t[s])){if("0"!==r&&"1"!==r)return!1;l=!0}return l&&"_"!==r}if("x"===r){for(s++;s<o;s++)if("_"!==(r=t[s])){if(!(48<=(n=t.charCodeAt(s))&&n<=57||65<=n&&n<=70||97<=n&&n<=102))return!1;l=!0}return l&&"_"!==r}if("o"===r){for(s++;s<o;s++)if("_"!==(r=t[s])){if(!i(t.charCodeAt(s)))return!1;l=!0}return l&&"_"!==r}}if("_"===r)return!1;for(;s<o;s++)if("_"!==(r=t[s])){if(!a(t.charCodeAt(s)))return!1;l=!0}return!(!l||"_"===r)},construct:function(t){var r,n=t,i=1;if(-1!==n.indexOf("_")&&(n=n.replace(/_/g,"")),"-"!==(r=n[0])&&"+"!==r||("-"===r&&(i=-1),r=(n=n.slice(1))[0]),"0"===n)return 0;if("0"===r){if("b"===n[1])return i*parseInt(n.slice(2),2);if("x"===n[1])return i*parseInt(n.slice(2),16);if("o"===n[1])return i*parseInt(n.slice(2),8)}return i*parseInt(n,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1==0&&!n.isNegativeZero(t)},represent:{binary:function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})}}),require_float=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/float.js"(t,r){init_globals();var n=require_common7(),i=require_type2(),a=RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),o=/^[-+]?[0-9]+e/;r.exports=new i("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(t){return null!==t&&!(!a.test(t)||"_"===t[t.length-1])},construct:function(t){var r,n;return n="-"===(r=t.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(r[0])>=0&&(r=r.slice(1)),".inf"===r?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===r?NaN:n*parseFloat(r,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||n.isNegativeZero(t))},represent:function(t,r){var i;if(isNaN(t))switch(r){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(r){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(r){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(n.isNegativeZero(t))return"-0.0";return i=t.toString(10),o.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"})}}),require_json2=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/schema/json.js"(t,r){init_globals(),r.exports=require_failsafe().extend({implicit:[require_null2(),require_bool(),require_int(),require_float()]})}}),require_core6=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/schema/core.js"(t,r){init_globals(),r.exports=require_json2()}}),require_timestamp=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/timestamp.js"(t,r){init_globals();var n=require_type2(),i=RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),a=RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");r.exports=new n("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(t){return null!==t&&(null!==i.exec(t)||null!==a.exec(t))},construct:function(t){var r,n,o,s,l,u,d,c,h=0,f=null;if(null===(r=i.exec(t))&&(r=a.exec(t)),null===r)throw Error("Date resolve error");if(n=+r[1],o=r[2]-1,s=+r[3],!r[4])return new Date(Date.UTC(n,o,s));if(l=+r[4],u=+r[5],d=+r[6],r[7]){for(h=r[7].slice(0,3);h.length<3;)h+="0";h*=1}return r[9]&&(f=6e4*(60*r[10]+ +(r[11]||0)),"-"===r[9]&&(f=-f)),c=new Date(Date.UTC(n,o,s,l,u,d,h)),f&&c.setTime(c.getTime()-f),c},instanceOf:Date,represent:function(t){return t.toISOString()}})}}),require_merge=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/merge.js"(t,r){init_globals(),r.exports=new(require_type2())("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(t){return"<<"===t||null===t}})}}),require_binary=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/binary.js"(t,r){init_globals();var n=require_type2(),i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";r.exports=new n("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(t){if(null===t)return!1;var r,n,a=0,o=t.length,s=i;for(n=0;n<o;n++)if(!((r=s.indexOf(t.charAt(n)))>64)){if(r<0)return!1;a+=6}return a%8==0},construct:function(t){var r,n,a=t.replace(/[\r\n=]/g,""),o=a.length,s=i,l=0,u=[];for(r=0;r<o;r++)r%4==0&&r&&(u.push(l>>16&255),u.push(l>>8&255),u.push(255&l)),l=l<<6|s.indexOf(a.charAt(r));return 0==(n=o%4*6)?(u.push(l>>16&255),u.push(l>>8&255),u.push(255&l)):18===n?(u.push(l>>10&255),u.push(l>>2&255)):12===n&&u.push(l>>4&255),new Uint8Array(u)},predicate:function(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)},represent:function(t){var r,n,a="",o=0,s=t.length,l=i;for(r=0;r<s;r++)r%3==0&&r&&(a+=l[o>>18&63],a+=l[o>>12&63],a+=l[o>>6&63],a+=l[63&o]),o=(o<<8)+t[r];return 0==(n=s%3)?(a+=l[o>>18&63],a+=l[o>>12&63],a+=l[o>>6&63],a+=l[63&o]):2===n?(a+=l[o>>10&63],a+=l[o>>4&63],a+=l[o<<2&63],a+=l[64]):1===n&&(a+=l[o>>2&63],a+=l[o<<4&63],a+=l[64],a+=l[64]),a}})}}),require_omap=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/omap.js"(t,r){init_globals();var n=require_type2(),i=Object.prototype.hasOwnProperty,a=Object.prototype.toString;r.exports=new n("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(t){if(null===t)return!0;var r,n,o,s,l,u=[],d=t;for(r=0,n=d.length;r<n;r+=1){if(o=d[r],l=!1,"[object Object]"!==a.call(o))return!1;for(s in o)if(i.call(o,s)){if(l)return!1;l=!0}if(!l||-1!==u.indexOf(s))return!1;u.push(s)}return!0},construct:function(t){return null!==t?t:[]}})}}),require_pairs=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/pairs.js"(t,r){init_globals();var n=require_type2(),i=Object.prototype.toString;r.exports=new n("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(t){if(null===t)return!0;var r,n,a,o,s,l=t;for(s=Array(l.length),r=0,n=l.length;r<n;r+=1){if(a=l[r],"[object Object]"!==i.call(a)||1!==(o=Object.keys(a)).length)return!1;s[r]=[o[0],a[o[0]]]}return!0},construct:function(t){if(null===t)return[];var r,n,i,a,o,s=t;for(o=Array(s.length),r=0,n=s.length;r<n;r+=1)a=Object.keys(i=s[r]),o[r]=[a[0],i[a[0]]];return o}})}}),require_set2=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/set.js"(t,r){init_globals();var n=require_type2(),i=Object.prototype.hasOwnProperty;r.exports=new n("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(t){if(null===t)return!0;var r,n=t;for(r in n)if(i.call(n,r)&&null!==n[r])return!1;return!0},construct:function(t){return null!==t?t:{}}})}}),require_default2=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/schema/default.js"(t,r){init_globals(),r.exports=require_core6().extend({implicit:[require_timestamp(),require_merge()],explicit:[require_binary(),require_omap(),require_pairs(),require_set2()]})}}),require_loader=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/loader.js"(t,r){init_globals();var n=require_common7(),i=require_exception(),a=require_snippet(),o=require_default2(),s=Object.prototype.hasOwnProperty,l=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,u=/[\x85\u2028\u2029]/,d=/[,\[\]\{\}]/,c=/^(?:!|!!|![a-z\-]+!)$/i,h=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function f(t){return Object.prototype.toString.call(t)}function p(t){return 10===t||13===t}function m(t){return 9===t||32===t}function g(t){return 9===t||32===t||10===t||13===t}function b(t){return 44===t||91===t||93===t||123===t||125===t}function y(t){var r;return 48<=t&&t<=57?t-48:97<=(r=32|t)&&r<=102?r-97+10:-1}function _(t){return 48===t?"\0":97===t?"\x07":98===t?"\b":116===t||9===t?" ":110===t?"\n":118===t?"\v":102===t?"\f":114===t?"\r":101===t?"\x1b":32===t?" ":34===t?'"':47===t?"/":92===t?"\\":78===t?"\x85":95===t?"\xa0":76===t?"\u2028":80===t?"\u2029":""}function v(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(55296+(t-65536>>10),56320+(t-65536&1023))}var A,w=Array(256),x=Array(256);for(A=0;A<256;A++)w[A]=+!!_(A),x[A]=_(A);function E(t,r){this.input=t,this.filename=r.filename||null,this.schema=r.schema||o,this.onWarning=r.onWarning||null,this.legacy=r.legacy||!1,this.json=r.json||!1,this.listener=r.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function S(t,r){var n={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return n.snippet=a(n),new i(r,n)}function C(t,r){throw S(t,r)}function I(t,r){t.onWarning&&t.onWarning.call(null,S(t,r))}var T={YAML:function(t,r,n){var i,a,o;null!==t.version&&C(t,"duplication of %YAML directive"),1!==n.length&&C(t,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&C(t,"ill-formed argument of the YAML directive"),a=parseInt(i[1],10),o=parseInt(i[2],10),1!==a&&C(t,"unacceptable YAML version of the document"),t.version=n[0],t.checkLineBreaks=o<2,1!==o&&2!==o&&I(t,"unsupported YAML version of the document")},TAG:function(t,r,n){var i,a;2!==n.length&&C(t,"TAG directive accepts exactly two arguments"),i=n[0],a=n[1],c.test(i)||C(t,"ill-formed tag handle (first argument) of the TAG directive"),s.call(t.tagMap,i)&&C(t,'there is a previously declared suffix for "'+i+'" tag handle'),h.test(a)||C(t,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch(r){C(t,"tag prefix is malformed: "+a)}t.tagMap[i]=a}};function k(t,r,n,i){var a,o,s,u;if(r<n){if(u=t.input.slice(r,n),i)for(a=0,o=u.length;a<o;a+=1)9===(s=u.charCodeAt(a))||32<=s&&s<=1114111||C(t,"expected valid JSON character");else l.test(u)&&C(t,"the stream contains non-printable characters");t.result+=u}}function P(t,r,i,a){var o,l,u,d;for(n.isObject(i)||C(t,"cannot merge mappings; the provided source object is unacceptable"),u=0,d=(o=Object.keys(i)).length;u<d;u+=1)l=o[u],s.call(r,l)||(r[l]=i[l],a[l]=!0)}function R(t,r,n,i,a,o,l,u,d){var c,h;if(Array.isArray(a))for(c=0,h=(a=Array.prototype.slice.call(a)).length;c<h;c+=1)Array.isArray(a[c])&&C(t,"nested arrays are not supported inside keys"),"object"==typeof a&&"[object Object]"===f(a[c])&&(a[c]="[object Object]");if("object"==typeof a&&"[object Object]"===f(a)&&(a="[object Object]"),a=String(a),null===r&&(r={}),"tag:yaml.org,2002:merge"===i)if(Array.isArray(o))for(c=0,h=o.length;c<h;c+=1)P(t,r,o[c],n);else P(t,r,o,n);else t.json||s.call(n,a)||!s.call(r,a)||(t.line=l||t.line,t.lineStart=u||t.lineStart,t.position=d||t.position,C(t,"duplicated mapping key")),"__proto__"===a?Object.defineProperty(r,a,{configurable:!0,enumerable:!0,writable:!0,value:o}):r[a]=o,delete n[a];return r}function O(t){var r;10===(r=t.input.charCodeAt(t.position))?t.position++:13===r?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):C(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function M(t,r,n){for(var i=0,a=t.input.charCodeAt(t.position);0!==a;){for(;m(a);)9===a&&-1===t.firstTabInLine&&(t.firstTabInLine=t.position),a=t.input.charCodeAt(++t.position);if(r&&35===a)do a=t.input.charCodeAt(++t.position);while(10!==a&&13!==a&&0!==a);if(!p(a))break;for(O(t),a=t.input.charCodeAt(t.position),i++,t.lineIndent=0;32===a;)t.lineIndent++,a=t.input.charCodeAt(++t.position)}return -1!==n&&0!==i&&t.lineIndent<n&&I(t,"deficient indentation"),i}function j(t){var r,n=t.position;return!(45!==(r=t.input.charCodeAt(n))&&46!==r||r!==t.input.charCodeAt(n+1)||r!==t.input.charCodeAt(n+2)||(n+=3,0!==(r=t.input.charCodeAt(n))&&!g(r)))}function N(t,r){1===r?t.result+=" ":r>1&&(t.result+=n.repeat("\n",r-1))}function B(t,r){var n,i,a=t.tag,o=t.anchor,s=[],l=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=s),i=t.input.charCodeAt(t.position);0!==i&&(-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,C(t,"tab characters must not be used in indentation")),45===i)&&g(t.input.charCodeAt(t.position+1));)if(l=!0,t.position++,M(t,!0,-1)&&t.lineIndent<=r)s.push(null),i=t.input.charCodeAt(t.position);else if(n=t.line,U(t,r,3,!1,!0),s.push(t.result),M(t,!0,-1),i=t.input.charCodeAt(t.position),(t.line===n||t.lineIndent>r)&&0!==i)C(t,"bad indentation of a sequence entry");else if(t.lineIndent<r)break;return!!l&&(t.tag=a,t.anchor=o,t.kind="sequence",t.result=s,!0)}function L(t){var r,n,i,a,o=!1,l=!1;if(33!==(a=t.input.charCodeAt(t.position)))return!1;if(null!==t.tag&&C(t,"duplication of a tag property"),60===(a=t.input.charCodeAt(++t.position))?(o=!0,a=t.input.charCodeAt(++t.position)):33===a?(l=!0,n="!!",a=t.input.charCodeAt(++t.position)):n="!",r=t.position,o){do a=t.input.charCodeAt(++t.position);while(0!==a&&62!==a);t.position<t.length?(i=t.input.slice(r,t.position),a=t.input.charCodeAt(++t.position)):C(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==a&&!g(a);)33===a&&(l?C(t,"tag suffix cannot contain exclamation marks"):(n=t.input.slice(r-1,t.position+1),c.test(n)||C(t,"named tag handle cannot contain such characters"),l=!0,r=t.position+1)),a=t.input.charCodeAt(++t.position);i=t.input.slice(r,t.position),d.test(i)&&C(t,"tag suffix cannot contain flow indicator characters")}i&&!h.test(i)&&C(t,"tag name cannot contain such characters: "+i);try{i=decodeURIComponent(i)}catch(r){C(t,"tag name is malformed: "+i)}return o?t.tag=i:s.call(t.tagMap,n)?t.tag=t.tagMap[n]+i:"!"===n?t.tag="!"+i:"!!"===n?t.tag="tag:yaml.org,2002:"+i:C(t,'undeclared tag handle "'+n+'"'),!0}function D(t){var r,n;if(38!==(n=t.input.charCodeAt(t.position)))return!1;for(null!==t.anchor&&C(t,"duplication of an anchor property"),n=t.input.charCodeAt(++t.position),r=t.position;0!==n&&!g(n)&&!b(n);)n=t.input.charCodeAt(++t.position);return t.position===r&&C(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(r,t.position),!0}function U(t,r,i,a,o){var l,u,d,c,h,f,_,A,E,S=1,I=!1,T=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,l=u=d=4===i||3===i,a&&M(t,!0,-1)&&(I=!0,t.lineIndent>r?S=1:t.lineIndent===r?S=0:t.lineIndent<r&&(S=-1)),1===S)for(;L(t)||D(t);)M(t,!0,-1)?(I=!0,d=l,t.lineIndent>r?S=1:t.lineIndent===r?S=0:t.lineIndent<r&&(S=-1)):d=!1;if(d&&(d=I||o),1!==S&&4!==i||(A=1===i||2===i?r:r+1,E=t.position-t.lineStart,1===S?d&&(B(t,E)||function(t,r,n){var i,a,o,s,l,u,d,c=t.tag,h=t.anchor,f={},p=Object.create(null),b=null,y=null,_=null,v=!1,A=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=f),d=t.input.charCodeAt(t.position);0!==d;){if(v||-1===t.firstTabInLine||(t.position=t.firstTabInLine,C(t,"tab characters must not be used in indentation")),i=t.input.charCodeAt(t.position+1),o=t.line,(63===d||58===d)&&g(i))63===d?(v&&(R(t,f,p,b,y,null,s,l,u),b=y=_=null),A=!0,v=!0,a=!0):v?(v=!1,a=!0):C(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,d=i;else{if(s=t.line,l=t.lineStart,u=t.position,!U(t,n,2,!1,!0))break;if(t.line===o){for(d=t.input.charCodeAt(t.position);m(d);)d=t.input.charCodeAt(++t.position);if(58===d)g(d=t.input.charCodeAt(++t.position))||C(t,"a whitespace character is expected after the key-value separator within a block mapping"),v&&(R(t,f,p,b,y,null,s,l,u),b=y=_=null),A=!0,v=!1,a=!1,b=t.tag,y=t.result;else{if(!A)return t.tag=c,t.anchor=h,!0;C(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!A)return t.tag=c,t.anchor=h,!0;C(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}if((t.line===o||t.lineIndent>r)&&(v&&(s=t.line,l=t.lineStart,u=t.position),U(t,r,4,!0,a)&&(v?y=t.result:_=t.result),v||(R(t,f,p,b,y,_,s,l,u),b=y=_=null),M(t,!0,-1),d=t.input.charCodeAt(t.position)),(t.line===o||t.lineIndent>r)&&0!==d)C(t,"bad indentation of a mapping entry");else if(t.lineIndent<r)break}return v&&R(t,f,p,b,y,null,s,l,u),A&&(t.tag=c,t.anchor=h,t.kind="mapping",t.result=f),A}(t,E,A))||function(t,r){var n,i,a,o,s,l,u,d,c,h,f,p,m=!0,b=t.tag,y=t.anchor,_=Object.create(null);if(91===(p=t.input.charCodeAt(t.position)))s=93,d=!1,o=[];else{if(123!==p)return!1;s=125,d=!0,o={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=o),p=t.input.charCodeAt(++t.position);0!==p;){if(M(t,!0,r),(p=t.input.charCodeAt(t.position))===s)return t.position++,t.tag=b,t.anchor=y,t.kind=d?"mapping":"sequence",t.result=o,!0;m?44===p&&C(t,"expected the node content, but found ','"):C(t,"missed comma between flow collection entries"),f=null,l=u=!1,63===p&&g(t.input.charCodeAt(t.position+1))&&(l=u=!0,t.position++,M(t,!0,r)),n=t.line,i=t.lineStart,a=t.position,U(t,r,1,!1,!0),h=t.tag,c=t.result,M(t,!0,r),p=t.input.charCodeAt(t.position),(u||t.line===n)&&58===p&&(l=!0,p=t.input.charCodeAt(++t.position),M(t,!0,r),U(t,r,1,!1,!0),f=t.result),d?R(t,o,_,h,c,f,n,i,a):l?o.push(R(t,null,_,h,c,f,n,i,a)):o.push(c),M(t,!0,r),44===(p=t.input.charCodeAt(t.position))?(m=!0,p=t.input.charCodeAt(++t.position)):m=!1}C(t,"unexpected end of the stream within a flow collection")}(t,A)?T=!0:(u&&function(t,r){var i,a,o,s,l,u=1,d=!1,c=!1,h=r,f=0,g=!1;if(124===(s=t.input.charCodeAt(t.position)))a=!1;else{if(62!==s)return!1;a=!0}for(t.kind="scalar",t.result="";0!==s;)if(43===(s=t.input.charCodeAt(++t.position))||45===s)1===u?u=43===s?3:2:C(t,"repeat of a chomping mode identifier");else{if(!((o=48<=(l=s)&&l<=57?l-48:-1)>=0))break;0===o?C(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):c?C(t,"repeat of an indentation width identifier"):(h=r+o-1,c=!0)}if(m(s)){do s=t.input.charCodeAt(++t.position);while(m(s));if(35===s)do s=t.input.charCodeAt(++t.position);while(!p(s)&&0!==s)}for(;0!==s;){for(O(t),t.lineIndent=0,s=t.input.charCodeAt(t.position);(!c||t.lineIndent<h)&&32===s;)t.lineIndent++,s=t.input.charCodeAt(++t.position);if(!c&&t.lineIndent>h&&(h=t.lineIndent),p(s))f++;else{if(t.lineIndent<h){3===u?t.result+=n.repeat("\n",d?1+f:f):1===u&&d&&(t.result+="\n");break}for(a?m(s)?(g=!0,t.result+=n.repeat("\n",d?1+f:f)):g?(g=!1,t.result+=n.repeat("\n",f+1)):0===f?d&&(t.result+=" "):t.result+=n.repeat("\n",f):t.result+=n.repeat("\n",d?1+f:f),d=!0,c=!0,f=0,i=t.position;!p(s)&&0!==s;)s=t.input.charCodeAt(++t.position);k(t,i,t.position,!1)}}return!0}(t,A)||function(t,r){var n,i,a;if(39!==(n=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,i=a=t.position;0!==(n=t.input.charCodeAt(t.position));)if(39===n){if(k(t,i,t.position,!0),39!==(n=t.input.charCodeAt(++t.position)))return!0;i=t.position,t.position++,a=t.position}else p(n)?(k(t,i,a,!0),N(t,M(t,!1,r)),i=a=t.position):t.position===t.lineStart&&j(t)?C(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);C(t,"unexpected end of the stream within a single quoted scalar")}(t,A)||function(t,r){var n,i,a,o,s,l,u;if(34!==(l=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;0!==(l=t.input.charCodeAt(t.position));){if(34===l)return k(t,n,t.position,!0),t.position++,!0;if(92===l){if(k(t,n,t.position,!0),p(l=t.input.charCodeAt(++t.position)))M(t,!1,r);else if(l<256&&w[l])t.result+=x[l],t.position++;else if((s=120===(u=l)?2:117===u?4:8*(85===u))>0){for(a=s,o=0;a>0;a--)(s=y(l=t.input.charCodeAt(++t.position)))>=0?o=(o<<4)+s:C(t,"expected hexadecimal character");t.result+=v(o),t.position++}else C(t,"unknown escape sequence");n=i=t.position}else p(l)?(k(t,n,i,!0),N(t,M(t,!1,r)),n=i=t.position):t.position===t.lineStart&&j(t)?C(t,"unexpected end of the document within a double quoted scalar"):(t.position++,i=t.position)}C(t,"unexpected end of the stream within a double quoted scalar")}(t,A)?T=!0:!function(t){var r,n,i;if(42!==(i=t.input.charCodeAt(t.position)))return!1;for(i=t.input.charCodeAt(++t.position),r=t.position;0!==i&&!g(i)&&!b(i);)i=t.input.charCodeAt(++t.position);return t.position===r&&C(t,"name of an alias node must contain at least one character"),n=t.input.slice(r,t.position),s.call(t.anchorMap,n)||C(t,'unidentified alias "'+n+'"'),t.result=t.anchorMap[n],M(t,!0,-1),!0}(t)?function(t,r,n){var i,a,o,s,l,u,d,c,h=t.kind,f=t.result;if(g(c=t.input.charCodeAt(t.position))||b(c)||35===c||38===c||42===c||33===c||124===c||62===c||39===c||34===c||37===c||64===c||96===c||(63===c||45===c)&&(g(i=t.input.charCodeAt(t.position+1))||n&&b(i)))return!1;for(t.kind="scalar",t.result="",a=o=t.position,s=!1;0!==c;){if(58===c){if(g(i=t.input.charCodeAt(t.position+1))||n&&b(i))break}else if(35===c){if(g(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&j(t)||n&&b(c))break;if(p(c)){if(l=t.line,u=t.lineStart,d=t.lineIndent,M(t,!1,-1),t.lineIndent>=r){s=!0,c=t.input.charCodeAt(t.position);continue}t.position=o,t.line=l,t.lineStart=u,t.lineIndent=d;break}}s&&(k(t,a,o,!1),N(t,t.line-l),a=o=t.position,s=!1),m(c)||(o=t.position+1),c=t.input.charCodeAt(++t.position)}return k(t,a,o,!1),!!t.result||(t.kind=h,t.result=f,!1)}(t,A,1===i)&&(T=!0,null===t.tag&&(t.tag="?")):(T=!0,null===t.tag&&null===t.anchor||C(t,"alias node should not have any properties")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===S&&(T=d&&B(t,E))),null===t.tag)null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);else if("?"===t.tag){for(null!==t.result&&"scalar"!==t.kind&&C(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),c=0,h=t.implicitTypes.length;c<h;c+=1)if((_=t.implicitTypes[c]).resolve(t.result)){t.result=_.construct(t.result),t.tag=_.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else if("!"!==t.tag){if(s.call(t.typeMap[t.kind||"fallback"],t.tag))_=t.typeMap[t.kind||"fallback"][t.tag];else for(_=null,c=0,h=(f=t.typeMap.multi[t.kind||"fallback"]).length;c<h;c+=1)if(t.tag.slice(0,f[c].tag.length)===f[c].tag){_=f[c];break}_||C(t,"unknown tag !<"+t.tag+">"),null!==t.result&&_.kind!==t.kind&&C(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+_.kind+'", not "'+t.kind+'"'),_.resolve(t.result,t.tag)?(t.result=_.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):C(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||T}function F(t){var r,n,i,a,o=t.position,l=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(a=t.input.charCodeAt(t.position))&&(M(t,!0,-1),a=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==a));){for(l=!0,a=t.input.charCodeAt(++t.position),r=t.position;0!==a&&!g(a);)a=t.input.charCodeAt(++t.position);for(i=[],(n=t.input.slice(r,t.position)).length<1&&C(t,"directive name must not be less than one character in length");0!==a;){for(;m(a);)a=t.input.charCodeAt(++t.position);if(35===a){do a=t.input.charCodeAt(++t.position);while(0!==a&&!p(a));break}if(p(a))break;for(r=t.position;0!==a&&!g(a);)a=t.input.charCodeAt(++t.position);i.push(t.input.slice(r,t.position))}0!==a&&O(t),s.call(T,n)?T[n](t,n,i):I(t,'unknown document directive "'+n+'"')}M(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,M(t,!0,-1)):l&&C(t,"directives end mark is expected"),U(t,t.lineIndent-1,4,!1,!0),M(t,!0,-1),t.checkLineBreaks&&u.test(t.input.slice(o,t.position))&&I(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&j(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,M(t,!0,-1)):t.position<t.length-1&&C(t,"end of the stream or a document separator is expected")}function z(t,r){r=r||{},0!==(t=String(t)).length&&(10!==t.charCodeAt(t.length-1)&&13!==t.charCodeAt(t.length-1)&&(t+="\n"),65279===t.charCodeAt(0)&&(t=t.slice(1)));var n=new E(t,r),i=t.indexOf("\0");for(-1!==i&&(n.position=i,C(n,"null byte is not allowed in input")),n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)F(n);return n.documents}r.exports.loadAll=function(t,r,n){null!==r&&"object"==typeof r&&void 0===n&&(n=r,r=null);var i=z(t,n);if("function"!=typeof r)return i;for(var a=0,o=i.length;a<o;a+=1)r(i[a])},r.exports.load=function(t,r){var n=z(t,r);if(0!==n.length){if(1===n.length)return n[0];throw new i("expected a single document in the stream, but found more")}}}}),require_dumper=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/dumper.js"(t,r){init_globals();var n=require_common7(),i=require_exception(),a=require_default2(),o=Object.prototype.toString,s=Object.prototype.hasOwnProperty,l=65279,u={0:"\\0",7:"\\a",8:"\\b",9:"\\t",10:"\\n",11:"\\v",12:"\\f",13:"\\r",27:"\\e",34:'\\"',92:"\\\\",133:"\\N",160:"\\_",8232:"\\L",8233:"\\P"},d=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],c=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function h(t){var r,a,o;if(r=t.toString(16).toUpperCase(),t<=255)a="x",o=2;else if(t<=65535)a="u",o=4;else{if(!(t<=0xffffffff))throw new i("code point within a string may not be greater than 0xFFFFFFFF");a="U",o=8}return"\\"+a+n.repeat("0",o-r.length)+r}function f(t){this.schema=t.schema||a,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=n.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=function(t,r){var n,i,a,o,l,u,d;if(null===r)return{};for(n={},a=0,o=(i=Object.keys(r)).length;a<o;a+=1)u=String(r[l=i[a]]),"!!"===l.slice(0,2)&&(l="tag:yaml.org,2002:"+l.slice(2)),(d=t.compiledTypeMap.fallback[l])&&s.call(d.styleAliases,u)&&(u=d.styleAliases[u]),n[l]=u;return n}(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.condenseFlow=t.condenseFlow||!1,this.quotingType='"'===t.quotingType?2:1,this.forceQuotes=t.forceQuotes||!1,this.replacer="function"==typeof t.replacer?t.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function p(t,r){for(var i,a=n.repeat(" ",r),o=0,s=-1,l="",u=t.length;o<u;)-1===(s=t.indexOf("\n",o))?(i=t.slice(o),o=u):(i=t.slice(o,s+1),o=s+1),i.length&&"\n"!==i&&(l+=a),l+=i;return l}function m(t,r){return"\n"+n.repeat(" ",t.indent*r)}function g(t){return 32===t||9===t}function b(t){return 32<=t&&t<=126||161<=t&&t<=55295&&8232!==t&&8233!==t||57344<=t&&t<=65533&&t!==l||65536<=t&&t<=1114111}function y(t){return b(t)&&t!==l&&13!==t&&10!==t}function _(t,r,n){var i=y(t),a=i&&!g(t);return(n?i:i&&44!==t&&91!==t&&93!==t&&123!==t&&125!==t)&&35!==t&&!(58===r&&!a)||y(r)&&!g(r)&&35===t||58===r&&a}function v(t,r){var n,i=t.charCodeAt(r);return i>=55296&&i<=56319&&r+1<t.length&&(n=t.charCodeAt(r+1))>=56320&&n<=57343?1024*(i-55296)+n-56320+65536:i}function A(t){return/^\n* /.test(t)}function w(t,r,n,i,a,o,s,u){var d,c,h=0,f=null,p=!1,m=!1,y=-1!==i,w=-1,x=b(c=v(t,0))&&c!==l&&!g(c)&&45!==c&&63!==c&&58!==c&&44!==c&&91!==c&&93!==c&&123!==c&&125!==c&&35!==c&&38!==c&&42!==c&&33!==c&&124!==c&&61!==c&&62!==c&&39!==c&&34!==c&&37!==c&&64!==c&&96!==c&&function(t){return!g(t)&&58!==t}(v(t,t.length-1));if(r||s)for(d=0;d<t.length;h>=65536?d+=2:d++){if(!b(h=v(t,d)))return 5;x=x&&_(h,f,u),f=h}else{for(d=0;d<t.length;h>=65536?d+=2:d++){if(10===(h=v(t,d)))p=!0,y&&(m=m||d-w-1>i&&" "!==t[w+1],w=d);else if(!b(h))return 5;x=x&&_(h,f,u),f=h}m=m||y&&d-w-1>i&&" "!==t[w+1]}return p||m?n>9&&A(t)?5:s?2===o?5:2:m?4:3:!x||s||a(t)?2===o?5:2:1}function x(t,r,n,a,o){t.dump=function(){if(0===r.length)return 2===t.quotingType?'""':"''";if(!t.noCompatMode&&(-1!==d.indexOf(r)||c.test(r)))return 2===t.quotingType?'"'+r+'"':"'"+r+"'";var s=t.indent*Math.max(1,n),l=-1===t.lineWidth?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-s);switch(w(r,a||t.flowLevel>-1&&n>=t.flowLevel,t.indent,l,function(r){return function(t,r){var n,i;for(n=0,i=t.implicitTypes.length;n<i;n+=1)if(t.implicitTypes[n].resolve(r))return!0;return!1}(t,r)},t.quotingType,t.forceQuotes&&!a,o)){case 1:return r;case 2:return"'"+r.replace(/'/g,"''")+"'";case 3:return"|"+E(r,t.indent)+S(p(r,s));case 4:return">"+E(r,t.indent)+S(p(function(t,r){for(var n,i,a,o=/(\n+)([^\n]*)/g,s=(o.lastIndex=n=-1!==(n=t.indexOf("\n"))?n:t.length,C(t.slice(0,n),r)),l="\n"===t[0]||" "===t[0];a=o.exec(t);){var u=a[1],d=a[2];i=" "===d[0],s+=u+(l||i||""===d?"":"\n")+C(d,r),l=i}return s}(r,l),s));case 5:return'"'+function(t){for(var r,n="",i=0,a=0;a<t.length;i>=65536?a+=2:a++)!(r=u[i=v(t,a)])&&b(i)?(n+=t[a],i>=65536&&(n+=t[a+1])):n+=r||h(i);return n}(r)+'"';default:throw new i("impossible error: invalid scalar style")}}()}function E(t,r){var n=A(t)?String(r):"",i="\n"===t[t.length-1];return n+(i&&("\n"===t[t.length-2]||"\n"===t)?"+":i?"":"-")+"\n"}function S(t){return"\n"===t[t.length-1]?t.slice(0,-1):t}function C(t,r){if(""===t||" "===t[0])return t;for(var n,i,a=/ [^ ]/g,o=0,s=0,l=0,u="";n=a.exec(t);)(l=n.index)-o>r&&(i=s>o?s:l,u+="\n"+t.slice(o,i),o=i+1),s=l;return u+="\n",t.length-o>r&&s>o?u+=t.slice(o,s)+"\n"+t.slice(s+1):u+=t.slice(o),u.slice(1)}function I(t,r,n,i){var a,o,s,l="",u=t.tag;for(a=0,o=n.length;a<o;a+=1)s=n[a],t.replacer&&(s=t.replacer.call(n,String(a),s)),(k(t,r+1,s,!0,!0,!1,!0)||void 0===s&&k(t,r+1,null,!0,!0,!1,!0))&&(i&&""===l||(l+=m(t,r)),t.dump&&10===t.dump.charCodeAt(0)?l+="-":l+="- ",l+=t.dump);t.tag=u,t.dump=l||"[]"}function T(t,r,n){var a,l,u,d,c,h;for(u=0,d=(l=n?t.explicitTypes:t.implicitTypes).length;u<d;u+=1)if(((c=l[u]).instanceOf||c.predicate)&&(!c.instanceOf||"object"==typeof r&&r instanceof c.instanceOf)&&(!c.predicate||c.predicate(r))){if(n?c.multi&&c.representName?t.tag=c.representName(r):t.tag=c.tag:t.tag="?",c.represent){if(h=t.styleMap[c.tag]||c.defaultStyle,"[object Function]"===o.call(c.represent))a=c.represent(r,h);else{if(!s.call(c.represent,h))throw new i("!<"+c.tag+'> tag resolver accepts not "'+h+'" style');a=c.represent[h](r,h)}t.dump=a}return!0}return!1}function k(t,r,n,a,s,l,u){t.tag=null,t.dump=n,T(t,n,!1)||T(t,n,!0);var d,c=o.call(t.dump),h=a;a&&(a=t.flowLevel<0||t.flowLevel>r);var f,p,g="[object Object]"===c||"[object Array]"===c;if(g&&(p=-1!==(f=t.duplicates.indexOf(n))),(null!==t.tag&&"?"!==t.tag||p||2!==t.indent&&r>0)&&(s=!1),p&&t.usedDuplicates[f])t.dump="*ref_"+f;else{if(g&&p&&!t.usedDuplicates[f]&&(t.usedDuplicates[f]=!0),"[object Object]"===c)a&&0!==Object.keys(t.dump).length?(!function(t,r,n,a){var o,s,l,u,d,c,h="",f=t.tag,p=Object.keys(n);if(!0===t.sortKeys)p.sort();else if("function"==typeof t.sortKeys)p.sort(t.sortKeys);else if(t.sortKeys)throw new i("sortKeys must be a boolean or a function");for(o=0,s=p.length;o<s;o+=1)c="",a&&""===h||(c+=m(t,r)),u=n[l=p[o]],t.replacer&&(u=t.replacer.call(n,l,u)),k(t,r+1,l,!0,!0,!0)&&((d=null!==t.tag&&"?"!==t.tag||t.dump&&t.dump.length>1024)&&(t.dump&&10===t.dump.charCodeAt(0)?c+="?":c+="? "),c+=t.dump,d&&(c+=m(t,r)),k(t,r+1,u,!0,d)&&(t.dump&&10===t.dump.charCodeAt(0)?c+=":":c+=": ",h+=c+=t.dump));t.tag=f,t.dump=h||"{}"}(t,r,t.dump,s),p&&(t.dump="&ref_"+f+t.dump)):(!function(t,r,n){var i,a,o,s,l,u="",d=t.tag,c=Object.keys(n);for(i=0,a=c.length;i<a;i+=1)l="",""!==u&&(l+=", "),t.condenseFlow&&(l+='"'),s=n[o=c[i]],t.replacer&&(s=t.replacer.call(n,o,s)),k(t,r,o,!1,!1)&&(t.dump.length>1024&&(l+="? "),l+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),k(t,r,s,!1,!1)&&(u+=l+=t.dump));t.tag=d,t.dump="{"+u+"}"}(t,r,t.dump),p&&(t.dump="&ref_"+f+" "+t.dump));else if("[object Array]"===c)a&&0!==t.dump.length?(t.noArrayIndent&&!u&&r>0?I(t,r-1,t.dump,s):I(t,r,t.dump,s),p&&(t.dump="&ref_"+f+t.dump)):(!function(t,r,n){var i,a,o,s="",l=t.tag;for(i=0,a=n.length;i<a;i+=1)o=n[i],t.replacer&&(o=t.replacer.call(n,String(i),o)),(k(t,r,o,!1,!1)||void 0===o&&k(t,r,null,!1,!1))&&(""!==s&&(s+=","+(t.condenseFlow?"":" ")),s+=t.dump);t.tag=l,t.dump="["+s+"]"}(t,r,t.dump),p&&(t.dump="&ref_"+f+" "+t.dump));else{if("[object String]"!==c){if("[object Undefined]"===c||t.skipInvalid)return!1;throw new i("unacceptable kind of an object to dump "+c)}"?"!==t.tag&&x(t,t.dump,r,l,h)}null!==t.tag&&"?"!==t.tag&&(d=encodeURI("!"===t.tag[0]?t.tag.slice(1):t.tag).replace(/!/g,"%21"),d="!"===t.tag[0]?"!"+d:"tag:yaml.org,2002:"===d.slice(0,18)?"!!"+d.slice(18):"!<"+d+">",t.dump=d+" "+t.dump)}return!0}function P(t,r){var n,i,a=[],o=[];for(R(t,a,o),n=0,i=o.length;n<i;n+=1)r.duplicates.push(a[o[n]]);r.usedDuplicates=Array(i)}function R(t,r,n){var i,a,o;if(null!==t&&"object"==typeof t)if(-1!==(a=r.indexOf(t)))-1===n.indexOf(a)&&n.push(a);else if(r.push(t),Array.isArray(t))for(a=0,o=t.length;a<o;a+=1)R(t[a],r,n);else for(a=0,o=(i=Object.keys(t)).length;a<o;a+=1)R(t[i[a]],r,n)}r.exports.dump=function(t,r){var n=new f(r=r||{});n.noRefs||P(t,n);var i=t;return n.replacer&&(i=n.replacer.call({"":i},"",i)),k(n,0,i,!0,!0)?n.dump+"\n":""}}}),require_js_yaml=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/index.js"(t,r){init_globals();var n=require_loader(),i=require_dumper();function a(t,r){return function(){throw Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+r+" instead, which is now safe by default.")}}r.exports.Type=require_type2(),r.exports.Schema=require_schema(),r.exports.FAILSAFE_SCHEMA=require_failsafe(),r.exports.JSON_SCHEMA=require_json2(),r.exports.CORE_SCHEMA=require_core6(),r.exports.DEFAULT_SCHEMA=require_default2(),r.exports.load=n.load,r.exports.loadAll=n.loadAll,r.exports.dump=i.dump,r.exports.YAMLException=require_exception(),r.exports.types={binary:require_binary(),float:require_float(),map:require_map2(),null:require_null2(),pairs:require_pairs(),set:require_set2(),timestamp:require_timestamp(),bool:require_bool(),int:require_int(),merge:require_merge(),omap:require_omap(),seq:require_seq(),str:require_str()},r.exports.safeLoad=a("safeLoad","load"),r.exports.safeLoadAll=a("safeLoadAll","loadAll"),r.exports.safeDump=a("safeDump","dump")}}),require_constants11=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/internal/constants.js"(t,r){init_globals(),r.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:16,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER||0x1fffffffffffff,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:"2.0.0",FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}}}),require_debug2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/internal/debug.js"(t,r){init_globals(),r.exports="object"==typeof import_browser.default&&import_browser.default.env&&import_browser.default.env.NODE_DEBUG&&/\bsemver\b/i.test(import_browser.default.env.NODE_DEBUG)?(...t)=>import_console_browserify.default.error("SEMVER",...t):()=>{}}}),require_re2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/internal/re.js"(t,r){init_globals();var{MAX_SAFE_COMPONENT_LENGTH:n}=require_constants11(),i=require_debug2(),a=(t=r.exports={}).re=[],o=t.safeRe=[],s=t.src=[],l=t.t={},u=0,d=(t,r,n)=>{let d=r.split("\\s*").join("\\s{0,1}").split("\\s+").join("\\s"),c=u++;i(t,c,r),l[t]=c,s[c]=r,a[c]=new RegExp(r,n?"g":void 0),o[c]=new RegExp(d,n?"g":void 0)};d("NUMERICIDENTIFIER","0|[1-9]\\d*"),d("NUMERICIDENTIFIERLOOSE","[0-9]+"),d("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*"),d("MAINVERSION",`(${s[l.NUMERICIDENTIFIER]})\\.(${s[l.NUMERICIDENTIFIER]})\\.(${s[l.NUMERICIDENTIFIER]})`),d("MAINVERSIONLOOSE",`(${s[l.NUMERICIDENTIFIERLOOSE]})\\.(${s[l.NUMERICIDENTIFIERLOOSE]})\\.(${s[l.NUMERICIDENTIFIERLOOSE]})`),d("PRERELEASEIDENTIFIER",`(?:${s[l.NUMERICIDENTIFIER]}|${s[l.NONNUMERICIDENTIFIER]})`),d("PRERELEASEIDENTIFIERLOOSE",`(?:${s[l.NUMERICIDENTIFIERLOOSE]}|${s[l.NONNUMERICIDENTIFIER]})`),d("PRERELEASE",`(?:-(${s[l.PRERELEASEIDENTIFIER]}(?:\\.${s[l.PRERELEASEIDENTIFIER]})*))`),d("PRERELEASELOOSE",`(?:-?(${s[l.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${s[l.PRERELEASEIDENTIFIERLOOSE]})*))`),d("BUILDIDENTIFIER","[0-9A-Za-z-]+"),d("BUILD",`(?:\\+(${s[l.BUILDIDENTIFIER]}(?:\\.${s[l.BUILDIDENTIFIER]})*))`),d("FULLPLAIN",`v?${s[l.MAINVERSION]}${s[l.PRERELEASE]}?${s[l.BUILD]}?`),d("FULL",`^${s[l.FULLPLAIN]}$`),d("LOOSEPLAIN",`[v=\\s]*${s[l.MAINVERSIONLOOSE]}${s[l.PRERELEASELOOSE]}?${s[l.BUILD]}?`),d("LOOSE",`^${s[l.LOOSEPLAIN]}$`),d("GTLT","((?:<|>)?=?)"),d("XRANGEIDENTIFIERLOOSE",`${s[l.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),d("XRANGEIDENTIFIER",`${s[l.NUMERICIDENTIFIER]}|x|X|\\*`),d("XRANGEPLAIN",`[v=\\s]*(${s[l.XRANGEIDENTIFIER]})(?:\\.(${s[l.XRANGEIDENTIFIER]})(?:\\.(${s[l.XRANGEIDENTIFIER]})(?:${s[l.PRERELEASE]})?${s[l.BUILD]}?)?)?`),d("XRANGEPLAINLOOSE",`[v=\\s]*(${s[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${s[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${s[l.XRANGEIDENTIFIERLOOSE]})(?:${s[l.PRERELEASELOOSE]})?${s[l.BUILD]}?)?)?`),d("XRANGE",`^${s[l.GTLT]}\\s*${s[l.XRANGEPLAIN]}$`),d("XRANGELOOSE",`^${s[l.GTLT]}\\s*${s[l.XRANGEPLAINLOOSE]}$`),d("COERCE",`(^|[^\\d])(\\d{1,${n}})(?:\\.(\\d{1,${n}}))?(?:\\.(\\d{1,${n}}))?(?:$|[^\\d])`),d("COERCERTL",s[l.COERCE],!0),d("LONETILDE","(?:~>?)"),d("TILDETRIM",`(\\s*)${s[l.LONETILDE]}\\s+`,!0),t.tildeTrimReplace="$1~",d("TILDE",`^${s[l.LONETILDE]}${s[l.XRANGEPLAIN]}$`),d("TILDELOOSE",`^${s[l.LONETILDE]}${s[l.XRANGEPLAINLOOSE]}$`),d("LONECARET","(?:\\^)"),d("CARETTRIM",`(\\s*)${s[l.LONECARET]}\\s+`,!0),t.caretTrimReplace="$1^",d("CARET",`^${s[l.LONECARET]}${s[l.XRANGEPLAIN]}$`),d("CARETLOOSE",`^${s[l.LONECARET]}${s[l.XRANGEPLAINLOOSE]}$`),d("COMPARATORLOOSE",`^${s[l.GTLT]}\\s*(${s[l.LOOSEPLAIN]})$|^$`),d("COMPARATOR",`^${s[l.GTLT]}\\s*(${s[l.FULLPLAIN]})$|^$`),d("COMPARATORTRIM",`(\\s*)${s[l.GTLT]}\\s*(${s[l.LOOSEPLAIN]}|${s[l.XRANGEPLAIN]})`,!0),t.comparatorTrimReplace="$1$2$3",d("HYPHENRANGE",`^\\s*(${s[l.XRANGEPLAIN]})\\s+-\\s+(${s[l.XRANGEPLAIN]})\\s*$`),d("HYPHENRANGELOOSE",`^\\s*(${s[l.XRANGEPLAINLOOSE]})\\s+-\\s+(${s[l.XRANGEPLAINLOOSE]})\\s*$`),d("STAR","(<|>)?=?\\s*\\*"),d("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),d("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")}}),require_parse_options2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/internal/parse-options.js"(t,r){init_globals();var n=Object.freeze({loose:!0}),i=Object.freeze({});r.exports=t=>t?"object"!=typeof t?n:t:i}}),require_identifiers2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/internal/identifiers.js"(t,r){init_globals();var n=/^[0-9]+$/,i=(t,r)=>{let i=n.test(t),a=n.test(r);return i&&a&&(t*=1,r*=1),t===r?0:i&&!a?-1:a&&!i?1:t<r?-1:1};r.exports={compareIdentifiers:i,rcompareIdentifiers:(t,r)=>i(r,t)}}}),require_semver3=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/classes/semver.js"(t,r){init_globals();var n=require_debug2(),{MAX_LENGTH:i,MAX_SAFE_INTEGER:a}=require_constants11(),{safeRe:o,t:s}=require_re2(),l=require_parse_options2(),{compareIdentifiers:u}=require_identifiers2();r.exports=class t{constructor(r,u){if(u=l(u),r instanceof t){if(!!u.loose===r.loose&&!!u.includePrerelease===r.includePrerelease)return r;r=r.version}else if("string"!=typeof r)throw TypeError(`Invalid version. Must be a string. Got type "${typeof r}".`);if(r.length>i)throw TypeError(`version is longer than ${i} characters`);n("SemVer",r,u),this.options=u,this.loose=!!u.loose,this.includePrerelease=!!u.includePrerelease;let d=r.trim().match(u.loose?o[s.LOOSE]:o[s.FULL]);if(!d)throw TypeError(`Invalid Version: ${r}`);if(this.raw=r,this.major=+d[1],this.minor=+d[2],this.patch=+d[3],this.major>a||this.major<0)throw TypeError("Invalid major version");if(this.minor>a||this.minor<0)throw TypeError("Invalid minor version");if(this.patch>a||this.patch<0)throw TypeError("Invalid patch version");d[4]?this.prerelease=d[4].split(".").map(t=>{if(/^[0-9]+$/.test(t)){let r=+t;if(r>=0&&r<a)return r}return t}):this.prerelease=[],this.build=d[5]?d[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(r){if(n("SemVer.compare",this.version,this.options,r),!(r instanceof t)){if("string"==typeof r&&r===this.version)return 0;r=new t(r,this.options)}return r.version===this.version?0:this.compareMain(r)||this.comparePre(r)}compareMain(r){return r instanceof t||(r=new t(r,this.options)),u(this.major,r.major)||u(this.minor,r.minor)||u(this.patch,r.patch)}comparePre(r){if(r instanceof t||(r=new t(r,this.options)),this.prerelease.length&&!r.prerelease.length)return -1;if(!this.prerelease.length&&r.prerelease.length)return 1;if(!this.prerelease.length&&!r.prerelease.length)return 0;let i=0;do{let t=this.prerelease[i],a=r.prerelease[i];if(n("prerelease compare",i,t,a),void 0===t&&void 0===a)return 0;if(void 0===a)return 1;if(void 0===t)return -1;if(t!==a)return u(t,a)}while(++i)}compareBuild(r){r instanceof t||(r=new t(r,this.options));let i=0;do{let t=this.build[i],a=r.build[i];if(n("prerelease compare",i,t,a),void 0===t&&void 0===a)return 0;if(void 0===a)return 1;if(void 0===t)return -1;if(t!==a)return u(t,a)}while(++i)}inc(t,r,n){switch(t){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,n);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,n);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,n),this.inc("pre",r,n);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",r,n),this.inc("pre",r,n);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":{let t=+!!Number(n);if(!r&&!1===n)throw Error("invalid increment argument: identifier is empty");if(0===this.prerelease.length)this.prerelease=[t];else{let i=this.prerelease.length;for(;--i>=0;)"number"==typeof this.prerelease[i]&&(this.prerelease[i]++,i=-2);if(-1===i){if(r===this.prerelease.join(".")&&!1===n)throw Error("invalid increment argument: identifier already exists");this.prerelease.push(t)}}if(r){let i=[r,t];!1===n&&(i=[r]),0===u(this.prerelease[0],r)?isNaN(this.prerelease[1])&&(this.prerelease=i):this.prerelease=i}break}default:throw Error(`invalid increment argument: ${t}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}}}),require_parse4=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/parse.js"(t,r){init_globals();var n=require_semver3();r.exports=(t,r,i=!1)=>{if(t instanceof n)return t;try{return new n(t,r)}catch(t){if(!i)return null;throw t}}}}),require_valid3=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/valid.js"(t,r){init_globals();var n=require_parse4();r.exports=(t,r)=>{let i=n(t,r);return i?i.version:null}}}),require_clean2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/clean.js"(t,r){init_globals();var n=require_parse4();r.exports=(t,r)=>{let i=n(t.trim().replace(/^[=v]+/,""),r);return i?i.version:null}}}),require_inc2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/inc.js"(t,r){init_globals();var n=require_semver3();r.exports=(t,r,i,a,o)=>{"string"==typeof i&&(o=a,a=i,i=void 0);try{return new n(t instanceof n?t.version:t,i).inc(r,a,o).version}catch(t){return null}}}}),require_diff2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/diff.js"(t,r){init_globals();var n=require_parse4();r.exports=(t,r)=>{let i=n(t,null,!0),a=n(r,null,!0),o=i.compare(a);if(0===o)return null;let s=o>0,l=s?i:a,u=s?a:i,d=!!l.prerelease.length;if(u.prerelease.length&&!d)return u.patch||u.minor?l.patch?"patch":l.minor?"minor":"major":"major";let c=d?"pre":"";return i.major!==a.major?c+"major":i.minor!==a.minor?c+"minor":i.patch!==a.patch?c+"patch":"prerelease"}}}),require_major2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/major.js"(t,r){init_globals();var n=require_semver3();r.exports=(t,r)=>new n(t,r).major}}),require_minor2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/minor.js"(t,r){init_globals();var n=require_semver3();r.exports=(t,r)=>new n(t,r).minor}}),require_patch2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/patch.js"(t,r){init_globals();var n=require_semver3();r.exports=(t,r)=>new n(t,r).patch}}),require_prerelease2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/prerelease.js"(t,r){init_globals();var n=require_parse4();r.exports=(t,r)=>{let i=n(t,r);return i&&i.prerelease.length?i.prerelease:null}}}),require_compare2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/compare.js"(t,r){init_globals();var n=require_semver3();r.exports=(t,r,i)=>new n(t,i).compare(new n(r,i))}}),require_rcompare2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/rcompare.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r,i)=>n(r,t,i)}}),require_compare_loose2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/compare-loose.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r)=>n(t,r,!0)}}),require_compare_build2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/compare-build.js"(t,r){init_globals();var n=require_semver3();r.exports=(t,r,i)=>{let a=new n(t,i),o=new n(r,i);return a.compare(o)||a.compareBuild(o)}}}),require_sort2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/sort.js"(t,r){init_globals();var n=require_compare_build2();r.exports=(t,r)=>t.sort((t,i)=>n(t,i,r))}}),require_rsort2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/rsort.js"(t,r){init_globals();var n=require_compare_build2();r.exports=(t,r)=>t.sort((t,i)=>n(i,t,r))}}),require_gt2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/gt.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r,i)=>n(t,r,i)>0}}),require_lt2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/lt.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r,i)=>0>n(t,r,i)}}),require_eq2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/eq.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r,i)=>0===n(t,r,i)}}),require_neq2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/neq.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r,i)=>0!==n(t,r,i)}}),require_gte2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/gte.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r,i)=>n(t,r,i)>=0}}),require_lte2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/lte.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r,i)=>0>=n(t,r,i)}}),require_cmp2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/cmp.js"(t,r){init_globals();var n=require_eq2(),i=require_neq2(),a=require_gt2(),o=require_gte2(),s=require_lt2(),l=require_lte2();r.exports=(t,r,u,d)=>{switch(r){case"===":return"object"==typeof t&&(t=t.version),"object"==typeof u&&(u=u.version),t===u;case"!==":return"object"==typeof t&&(t=t.version),"object"==typeof u&&(u=u.version),t!==u;case"":case"=":case"==":return n(t,u,d);case"!=":return i(t,u,d);case">":return a(t,u,d);case">=":return o(t,u,d);case"<":return s(t,u,d);case"<=":return l(t,u,d);default:throw TypeError(`Invalid operator: ${r}`)}}}}),require_coerce2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/coerce.js"(t,r){init_globals();var n=require_semver3(),i=require_parse4(),{safeRe:a,t:o}=require_re2();r.exports=(t,r)=>{if(t instanceof n)return t;if("number"==typeof t&&(t=String(t)),"string"!=typeof t)return null;let s=null;if((r=r||{}).rtl){let r;for(;(r=a[o.COERCERTL].exec(t))&&(!s||s.index+s[0].length!==t.length);)s&&r.index+r[0].length===s.index+s[0].length||(s=r),a[o.COERCERTL].lastIndex=r.index+r[1].length+r[2].length;a[o.COERCERTL].lastIndex=-1}else s=t.match(a[o.COERCE]);return null===s?null:i(`${s[2]}.${s[3]||"0"}.${s[4]||"0"}`,r)}}}),require_iterator=__commonJS({"../../node_modules/.pnpm/yallist@4.0.0/node_modules/yallist/iterator.js"(t,r){init_globals(),r.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let t=this.head;t;t=t.next)yield t.value}}}}),require_yallist=__commonJS({"../../node_modules/.pnpm/yallist@4.0.0/node_modules/yallist/yallist.js"(t,r){function n(t){var r=this;if(r instanceof n||(r=new n),r.tail=null,r.head=null,r.length=0,t&&"function"==typeof t.forEach)t.forEach(function(t){r.push(t)});else if(arguments.length>0)for(var i=0,a=arguments.length;i<a;i++)r.push(arguments[i]);return r}function i(t,r,n){var i=r===t.head?new s(n,null,r,t):new s(n,r,r.next,t);return null===i.next&&(t.tail=i),null===i.prev&&(t.head=i),t.length++,i}function a(t,r){t.tail=new s(r,t.tail,null,t),t.head||(t.head=t.tail),t.length++}function o(t,r){t.head=new s(r,null,t.head,t),t.tail||(t.tail=t.head),t.length++}function s(t,r,n,i){if(!(this instanceof s))return new s(t,r,n,i);this.list=i,this.value=t,r?(r.next=this,this.prev=r):this.prev=null,n?(n.prev=this,this.next=n):this.next=null}init_globals(),r.exports=n,n.Node=s,n.create=n,n.prototype.removeNode=function(t){if(t.list!==this)throw Error("removing node which does not belong to this list");var r=t.next,n=t.prev;return r&&(r.prev=n),n&&(n.next=r),t===this.head&&(this.head=r),t===this.tail&&(this.tail=n),t.list.length--,t.next=null,t.prev=null,t.list=null,r},n.prototype.unshiftNode=function(t){if(t!==this.head){t.list&&t.list.removeNode(t);var r=this.head;t.list=this,t.next=r,r&&(r.prev=t),this.head=t,this.tail||(this.tail=t),this.length++}},n.prototype.pushNode=function(t){if(t!==this.tail){t.list&&t.list.removeNode(t);var r=this.tail;t.list=this,t.prev=r,r&&(r.next=t),this.tail=t,this.head||(this.head=t),this.length++}},n.prototype.push=function(){for(var t=0,r=arguments.length;t<r;t++)a(this,arguments[t]);return this.length},n.prototype.unshift=function(){for(var t=0,r=arguments.length;t<r;t++)o(this,arguments[t]);return this.length},n.prototype.pop=function(){if(this.tail){var t=this.tail.value;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,t}},n.prototype.shift=function(){if(this.head){var t=this.head.value;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,t}},n.prototype.forEach=function(t,r){r=r||this;for(var n=this.head,i=0;null!==n;i++)t.call(r,n.value,i,this),n=n.next},n.prototype.forEachReverse=function(t,r){r=r||this;for(var n=this.tail,i=this.length-1;null!==n;i--)t.call(r,n.value,i,this),n=n.prev},n.prototype.get=function(t){for(var r=0,n=this.head;null!==n&&r<t;r++)n=n.next;if(r===t&&null!==n)return n.value},n.prototype.getReverse=function(t){for(var r=0,n=this.tail;null!==n&&r<t;r++)n=n.prev;if(r===t&&null!==n)return n.value},n.prototype.map=function(t,r){r=r||this;for(var i=new n,a=this.head;null!==a;)i.push(t.call(r,a.value,this)),a=a.next;return i},n.prototype.mapReverse=function(t,r){r=r||this;for(var i=new n,a=this.tail;null!==a;)i.push(t.call(r,a.value,this)),a=a.prev;return i},n.prototype.reduce=function(t,r){var n,i=this.head;if(arguments.length>1)n=r;else{if(!this.head)throw TypeError("Reduce of empty list with no initial value");i=this.head.next,n=this.head.value}for(var a=0;null!==i;a++)n=t(n,i.value,a),i=i.next;return n},n.prototype.reduceReverse=function(t,r){var n,i=this.tail;if(arguments.length>1)n=r;else{if(!this.tail)throw TypeError("Reduce of empty list with no initial value");i=this.tail.prev,n=this.tail.value}for(var a=this.length-1;null!==i;a--)n=t(n,i.value,a),i=i.prev;return n},n.prototype.toArray=function(){for(var t=Array(this.length),r=0,n=this.head;null!==n;r++)t[r]=n.value,n=n.next;return t},n.prototype.toArrayReverse=function(){for(var t=Array(this.length),r=0,n=this.tail;null!==n;r++)t[r]=n.value,n=n.prev;return t},n.prototype.slice=function(t,r){(r=r||this.length)<0&&(r+=this.length),(t=t||0)<0&&(t+=this.length);var i=new n;if(r<t||r<0)return i;t<0&&(t=0),r>this.length&&(r=this.length);for(var a=0,o=this.head;null!==o&&a<t;a++)o=o.next;for(;null!==o&&a<r;a++,o=o.next)i.push(o.value);return i},n.prototype.sliceReverse=function(t,r){(r=r||this.length)<0&&(r+=this.length),(t=t||0)<0&&(t+=this.length);var i=new n;if(r<t||r<0)return i;t<0&&(t=0),r>this.length&&(r=this.length);for(var a=this.length,o=this.tail;null!==o&&a>r;a--)o=o.prev;for(;null!==o&&a>t;a--,o=o.prev)i.push(o.value);return i},n.prototype.splice=function(t,r,...n){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var a=0,o=this.head;null!==o&&a<t;a++)o=o.next;var s=[];for(a=0;o&&a<r;a++)s.push(o.value),o=this.removeNode(o);for(null===o&&(o=this.tail),o!==this.head&&o!==this.tail&&(o=o.prev),a=0;a<n.length;a++)o=i(this,o,n[a]);return s},n.prototype.reverse=function(){for(var t=this.head,r=this.tail,n=t;null!==n;n=n.prev){var i=n.prev;n.prev=n.next,n.next=i}return this.head=r,this.tail=t,this};try{require_iterator()(n)}catch(t){}}}),require_lru_cache=__commonJS({"../../node_modules/.pnpm/lru-cache@6.0.0/node_modules/lru-cache/index.js"(t,r){init_globals();var n=require_yallist(),i=Symbol("max"),a=Symbol("length"),o=Symbol("lengthCalculator"),s=Symbol("allowStale"),l=Symbol("maxAge"),u=Symbol("dispose"),d=Symbol("noDisposeOnSet"),c=Symbol("lruList"),h=Symbol("cache"),f=Symbol("updateAgeOnGet"),p=()=>1,m=(t,r,n)=>{let i=t[h].get(r);if(i){let r=i.value;if(g(t,r)){if(y(t,i),!t[s])return}else n&&(t[f]&&(i.value.now=Date.now()),t[c].unshiftNode(i));return r.value}},g=(t,r)=>{if(!r||!r.maxAge&&!t[l])return!1;let n=Date.now()-r.now;return r.maxAge?n>r.maxAge:t[l]&&n>t[l]},b=t=>{if(t[a]>t[i])for(let r=t[c].tail;t[a]>t[i]&&null!==r;){let n=r.prev;y(t,r),r=n}},y=(t,r)=>{if(r){let n=r.value;t[u]&&t[u](n.key,n.value),t[a]-=n.length,t[h].delete(n.key),t[c].removeNode(r)}},_=class{constructor(t,r,n,i,a){this.key=t,this.value=r,this.length=n,this.now=i,this.maxAge=a||0}},v=(t,r,n,i)=>{let a=n.value;g(t,a)&&(y(t,n),t[s]||(a=void 0)),a&&r.call(i,a.value,a.key,t)};r.exports=class{constructor(t){if("number"==typeof t&&(t={max:t}),t||(t={}),t.max&&("number"!=typeof t.max||t.max<0))throw TypeError("max must be a non-negative number");this[i]=t.max||1/0;let r=t.length||p;if(this[o]="function"!=typeof r?p:r,this[s]=t.stale||!1,t.maxAge&&"number"!=typeof t.maxAge)throw TypeError("maxAge must be a number");this[l]=t.maxAge||0,this[u]=t.dispose,this[d]=t.noDisposeOnSet||!1,this[f]=t.updateAgeOnGet||!1,this.reset()}set max(t){if("number"!=typeof t||t<0)throw TypeError("max must be a non-negative number");this[i]=t||1/0,b(this)}get max(){return this[i]}set allowStale(t){this[s]=!!t}get allowStale(){return this[s]}set maxAge(t){if("number"!=typeof t)throw TypeError("maxAge must be a non-negative number");this[l]=t,b(this)}get maxAge(){return this[l]}set lengthCalculator(t){"function"!=typeof t&&(t=p),t!==this[o]&&(this[o]=t,this[a]=0,this[c].forEach(t=>{t.length=this[o](t.value,t.key),this[a]+=t.length})),b(this)}get lengthCalculator(){return this[o]}get length(){return this[a]}get itemCount(){return this[c].length}rforEach(t,r){r=r||this;for(let n=this[c].tail;null!==n;){let i=n.prev;v(this,t,n,r),n=i}}forEach(t,r){r=r||this;for(let n=this[c].head;null!==n;){let i=n.next;v(this,t,n,r),n=i}}keys(){return this[c].toArray().map(t=>t.key)}values(){return this[c].toArray().map(t=>t.value)}reset(){this[u]&&this[c]&&this[c].length&&this[c].forEach(t=>this[u](t.key,t.value)),this[h]=new Map,this[c]=new n,this[a]=0}dump(){return this[c].map(t=>!g(this,t)&&{k:t.key,v:t.value,e:t.now+(t.maxAge||0)}).toArray().filter(t=>t)}dumpLru(){return this[c]}set(t,r,n){if((n=n||this[l])&&"number"!=typeof n)throw TypeError("maxAge must be a number");let s=n?Date.now():0,f=this[o](r,t);if(this[h].has(t)){if(f>this[i])return y(this,this[h].get(t)),!1;let o=this[h].get(t).value;return this[u]&&(this[d]||this[u](t,o.value)),o.now=s,o.maxAge=n,o.value=r,this[a]+=f-o.length,o.length=f,this.get(t),b(this),!0}let p=new _(t,r,f,s,n);return p.length>this[i]?(this[u]&&this[u](t,r),!1):(this[a]+=p.length,this[c].unshift(p),this[h].set(t,this[c].head),b(this),!0)}has(t){return!!this[h].has(t)&&!g(this,this[h].get(t).value)}get(t){return m(this,t,!0)}peek(t){return m(this,t,!1)}pop(){let t=this[c].tail;return t?(y(this,t),t.value):null}del(t){y(this,this[h].get(t))}load(t){this.reset();let r=Date.now();for(let n=t.length-1;n>=0;n--){let i=t[n],a=i.e||0;if(0===a)this.set(i.k,i.v);else{let t=a-r;t>0&&this.set(i.k,i.v,t)}}}prune(){this[h].forEach((t,r)=>m(this,r,!1))}}}}),require_range3=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/classes/range.js"(t,r){init_globals(),r.exports=class t{constructor(r,n){if(n=i(n),r instanceof t)return!!n.loose===r.loose&&!!n.includePrerelease===r.includePrerelease?r:new t(r.raw,n);if(r instanceof a)return this.raw=r.value,this.set=[[r]],this.format(),this;if(this.options=n,this.loose=!!n.loose,this.includePrerelease=!!n.includePrerelease,this.raw=r.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(t=>this.parseRange(t)).filter(t=>t.length),!this.set.length)throw TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let t=this.set[0];if(this.set=this.set.filter(t=>!m(t[0])),0===this.set.length)this.set=[t];else if(this.set.length>1){for(let t of this.set)if(1===t.length&&g(t[0])){this.set=[t];break}}}this.format()}format(){return this.range=this.set.map(t=>t.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(t){let r=((this.options.includePrerelease&&f)|(this.options.loose&&p))+":"+t,i=n.get(r);if(i)return i;let s=this.options.loose,g=s?l[u.HYPHENRANGELOOSE]:l[u.HYPHENRANGE];o("hyphen replace",t=t.replace(g,T(this.options.includePrerelease))),o("comparator trim",t=t.replace(l[u.COMPARATORTRIM],d));let b=(t=(t=t.replace(l[u.TILDETRIM],c)).replace(l[u.CARETTRIM],h)).split(" ").map(t=>y(t,this.options)).join(" ").split(/\s+/).map(t=>I(t,this.options));s&&(b=b.filter(t=>(o("loose invalid filter",t,this.options),!!t.match(l[u.COMPARATORLOOSE])))),o("range list",b);let _=new Map;for(let t of b.map(t=>new a(t,this.options))){if(m(t))return[t];_.set(t.value,t)}_.size>1&&_.has("")&&_.delete("");let v=[..._.values()];return n.set(r,v),v}intersects(r,n){if(!(r instanceof t))throw TypeError("a Range is required");return this.set.some(t=>b(t,n)&&r.set.some(r=>b(r,n)&&t.every(t=>r.every(r=>t.intersects(r,n)))))}test(t){if(!t)return!1;if("string"==typeof t)try{t=new s(t,this.options)}catch(t){return!1}for(let r=0;r<this.set.length;r++)if(k(this.set[r],t,this.options))return!0;return!1}};var n=new(require_lru_cache())({max:1e3}),i=require_parse_options2(),a=require_comparator2(),o=require_debug2(),s=require_semver3(),{safeRe:l,t:u,comparatorTrimReplace:d,tildeTrimReplace:c,caretTrimReplace:h}=require_re2(),{FLAG_INCLUDE_PRERELEASE:f,FLAG_LOOSE:p}=require_constants11(),m=t=>"<0.0.0-0"===t.value,g=t=>""===t.value,b=(t,r)=>{let n=!0,i=t.slice(),a=i.pop();for(;n&&i.length;)n=i.every(t=>a.intersects(t,r)),a=i.pop();return n},y=(t,r)=>(o("comp",t,r),o("caret",t=w(t,r)),o("tildes",t=v(t,r)),o("xrange",t=E(t,r)),o("stars",t=C(t,r)),t),_=t=>!t||"x"===t.toLowerCase()||"*"===t,v=(t,r)=>t.trim().split(/\s+/).map(t=>A(t,r)).join(" "),A=(t,r)=>{let n=r.loose?l[u.TILDELOOSE]:l[u.TILDE];return t.replace(n,(r,n,i,a,s)=>{let l;return o("tilde",t,r,n,i,a,s),_(n)?l="":_(i)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:_(a)?l=`>=${n}.${i}.0 <${n}.${+i+1}.0-0`:s?(o("replaceTilde pr",s),l=`>=${n}.${i}.${a}-${s} <${n}.${+i+1}.0-0`):l=`>=${n}.${i}.${a} <${n}.${+i+1}.0-0`,o("tilde return",l),l})},w=(t,r)=>t.trim().split(/\s+/).map(t=>x(t,r)).join(" "),x=(t,r)=>{o("caret",t,r);let n=r.loose?l[u.CARETLOOSE]:l[u.CARET],i=r.includePrerelease?"-0":"";return t.replace(n,(r,n,a,s,l)=>{let u;return o("caret",t,r,n,a,s,l),_(n)?u="":_(a)?u=`>=${n}.0.0${i} <${+n+1}.0.0-0`:_(s)?u="0"===n?`>=${n}.${a}.0${i} <${n}.${+a+1}.0-0`:`>=${n}.${a}.0${i} <${+n+1}.0.0-0`:l?(o("replaceCaret pr",l),u="0"===n?"0"===a?`>=${n}.${a}.${s}-${l} <${n}.${a}.${+s+1}-0`:`>=${n}.${a}.${s}-${l} <${n}.${+a+1}.0-0`:`>=${n}.${a}.${s}-${l} <${+n+1}.0.0-0`):(o("no pr"),u="0"===n?"0"===a?`>=${n}.${a}.${s}${i} <${n}.${a}.${+s+1}-0`:`>=${n}.${a}.${s}${i} <${n}.${+a+1}.0-0`:`>=${n}.${a}.${s} <${+n+1}.0.0-0`),o("caret return",u),u})},E=(t,r)=>(o("replaceXRanges",t,r),t.split(/\s+/).map(t=>S(t,r)).join(" ")),S=(t,r)=>{t=t.trim();let n=r.loose?l[u.XRANGELOOSE]:l[u.XRANGE];return t.replace(n,(n,i,a,s,l,u)=>{o("xRange",t,n,i,a,s,l,u);let d=_(a),c=d||_(s),h=c||_(l),f=h;return"="===i&&f&&(i=""),u=r.includePrerelease?"-0":"",d?n=">"===i||"<"===i?"<0.0.0-0":"*":i&&f?(c&&(s=0),l=0,">"===i?(i=">=",c?(a=+a+1,s=0):s=+s+1,l=0):"<="===i&&(i="<",c?a=+a+1:s=+s+1),"<"===i&&(u="-0"),n=`${i+a}.${s}.${l}${u}`):c?n=`>=${a}.0.0${u} <${+a+1}.0.0-0`:h&&(n=`>=${a}.${s}.0${u} <${a}.${+s+1}.0-0`),o("xRange return",n),n})},C=(t,r)=>(o("replaceStars",t,r),t.trim().replace(l[u.STAR],"")),I=(t,r)=>(o("replaceGTE0",t,r),t.trim().replace(l[r.includePrerelease?u.GTE0PRE:u.GTE0],"")),T=t=>(r,n,i,a,o,s,l,u,d,c,h,f,p)=>`${n=_(i)?"":_(a)?`>=${i}.0.0${t?"-0":""}`:_(o)?`>=${i}.${a}.0${t?"-0":""}`:s?`>=${n}`:`>=${n}${t?"-0":""}`} ${u=_(d)?"":_(c)?`<${+d+1}.0.0-0`:_(h)?`<${d}.${+c+1}.0-0`:f?`<=${d}.${c}.${h}-${f}`:t?`<${d}.${c}.${+h+1}-0`:`<=${u}`}`.trim(),k=(t,r,n)=>{for(let n=0;n<t.length;n++)if(!t[n].test(r))return!1;if(r.prerelease.length&&!n.includePrerelease){for(let n=0;n<t.length;n++)if(o(t[n].semver),t[n].semver!==a.ANY&&t[n].semver.prerelease.length>0){let i=t[n].semver;if(i.major===r.major&&i.minor===r.minor&&i.patch===r.patch)return!0}return!1}return!0}}}),require_comparator2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/classes/comparator.js"(t,r){init_globals();var n=Symbol("SemVer ANY");r.exports=class t{static get ANY(){return n}constructor(r,a){if(a=i(a),r instanceof t){if(!!a.loose===r.loose)return r;r=r.value}l("comparator",r=r.trim().split(/\s+/).join(" "),a),this.options=a,this.loose=!!a.loose,this.parse(r),this.semver===n?this.value="":this.value=this.operator+this.semver.version,l("comp",this)}parse(t){let r=this.options.loose?a[o.COMPARATORLOOSE]:a[o.COMPARATOR],i=t.match(r);if(!i)throw TypeError(`Invalid comparator: ${t}`);this.operator=void 0!==i[1]?i[1]:"","="===this.operator&&(this.operator=""),i[2]?this.semver=new u(i[2],this.options.loose):this.semver=n}toString(){return this.value}test(t){if(l("Comparator.test",t,this.options.loose),this.semver===n||t===n)return!0;if("string"==typeof t)try{t=new u(t,this.options)}catch(t){return!1}return s(t,this.operator,this.semver,this.options)}intersects(r,n){if(!(r instanceof t))throw TypeError("a Comparator is required");return""===this.operator?""===this.value||new d(r.value,n).test(this.value):""===r.operator?""===r.value||new d(this.value,n).test(r.semver):(!(n=i(n)).includePrerelease||"<0.0.0-0"!==this.value&&"<0.0.0-0"!==r.value)&&!(!n.includePrerelease&&(this.value.startsWith("<0.0.0")||r.value.startsWith("<0.0.0")))&&(!(!this.operator.startsWith(">")||!r.operator.startsWith(">"))||!(!this.operator.startsWith("<")||!r.operator.startsWith("<"))||!(this.semver.version!==r.semver.version||!this.operator.includes("=")||!r.operator.includes("="))||!!(s(this.semver,"<",r.semver,n)&&this.operator.startsWith(">")&&r.operator.startsWith("<"))||!!(s(this.semver,">",r.semver,n)&&this.operator.startsWith("<")&&r.operator.startsWith(">")))}};var i=require_parse_options2(),{safeRe:a,t:o}=require_re2(),s=require_cmp2(),l=require_debug2(),u=require_semver3(),d=require_range3()}}),require_satisfies2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/satisfies.js"(t,r){init_globals();var n=require_range3();r.exports=(t,r,i)=>{try{r=new n(r,i)}catch(t){return!1}return r.test(t)}}}),require_to_comparators2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/to-comparators.js"(t,r){init_globals();var n=require_range3();r.exports=(t,r)=>new n(t,r).set.map(t=>t.map(t=>t.value).join(" ").trim().split(" "))}}),require_max_satisfying2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/max-satisfying.js"(t,r){init_globals();var n=require_semver3(),i=require_range3();r.exports=(t,r,a)=>{let o=null,s=null,l=null;try{l=new i(r,a)}catch(t){return null}return t.forEach(t=>{l.test(t)&&(o&&-1!==s.compare(t)||(s=new n(o=t,a)))}),o}}}),require_min_satisfying2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/min-satisfying.js"(t,r){init_globals();var n=require_semver3(),i=require_range3();r.exports=(t,r,a)=>{let o=null,s=null,l=null;try{l=new i(r,a)}catch(t){return null}return t.forEach(t=>{l.test(t)&&(o&&1!==s.compare(t)||(s=new n(o=t,a)))}),o}}}),require_min_version2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/min-version.js"(t,r){init_globals();var n=require_semver3(),i=require_range3(),a=require_gt2();r.exports=(t,r)=>{t=new i(t,r);let o=new n("0.0.0");if(t.test(o)||(o=new n("0.0.0-0"),t.test(o)))return o;o=null;for(let r=0;r<t.set.length;++r){let i=t.set[r],s=null;i.forEach(t=>{let r=new n(t.semver.version);switch(t.operator){case">":0===r.prerelease.length?r.patch++:r.prerelease.push(0),r.raw=r.format();case"":case">=":s&&!a(r,s)||(s=r);break;case"<":case"<=":break;default:throw Error(`Unexpected operation: ${t.operator}`)}}),s&&(!o||a(o,s))&&(o=s)}return o&&t.test(o)?o:null}}}),require_valid4=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/valid.js"(t,r){init_globals();var n=require_range3();r.exports=(t,r)=>{try{return new n(t,r).range||"*"}catch(t){return null}}}}),require_outside2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/outside.js"(t,r){init_globals();var n=require_semver3(),i=require_comparator2(),{ANY:a}=i,o=require_range3(),s=require_satisfies2(),l=require_gt2(),u=require_lt2(),d=require_lte2(),c=require_gte2();r.exports=(t,r,h,f)=>{let p,m,g,b,y;switch(t=new n(t,f),r=new o(r,f),h){case">":p=l,m=d,g=u,b=">",y=">=";break;case"<":p=u,m=c,g=l,b="<",y="<=";break;default:throw TypeError('Must provide a hilo val of "<" or ">"')}if(s(t,r,f))return!1;for(let n=0;n<r.set.length;++n){let o=r.set[n],s=null,l=null;if(o.forEach(t=>{t.semver===a&&(t=new i(">=0.0.0")),s=s||t,l=l||t,p(t.semver,s.semver,f)?s=t:g(t.semver,l.semver,f)&&(l=t)}),s.operator===b||s.operator===y||(!l.operator||l.operator===b)&&m(t,l.semver)||l.operator===y&&g(t,l.semver))return!1}return!0}}}),require_gtr2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/gtr.js"(t,r){init_globals();var n=require_outside2();r.exports=(t,r,i)=>n(t,r,">",i)}}),require_ltr2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/ltr.js"(t,r){init_globals();var n=require_outside2();r.exports=(t,r,i)=>n(t,r,"<",i)}}),require_intersects2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/intersects.js"(t,r){init_globals();var n=require_range3();r.exports=(t,r,i)=>(t=new n(t,i),r=new n(r,i),t.intersects(r,i))}}),require_simplify3=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/simplify.js"(t,r){init_globals();var n=require_satisfies2(),i=require_compare2();r.exports=(t,r,a)=>{let o=[],s=null,l=null,u=t.sort((t,r)=>i(t,r,a));for(let t of u)n(t,r,a)?(l=t,s||(s=t)):(l&&o.push([s,l]),l=null,s=null);s&&o.push([s,null]);let d=[];for(let[t,r]of o)t===r?d.push(t):r||t!==u[0]?r?t===u[0]?d.push(`<=${r}`):d.push(`${t} - ${r}`):d.push(`>=${t}`):d.push("*");let c=d.join(" || "),h="string"==typeof r.raw?r.raw:String(r);return c.length<h.length?c:r}}}),require_subset2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/subset.js"(t,r){init_globals();var n=require_range3(),i=require_comparator2(),{ANY:a}=i,o=require_satisfies2(),s=require_compare2(),l=[new i(">=0.0.0-0")],u=[new i(">=0.0.0")],d=(t,r,n)=>{let i,d,f,p,m,g,b;if(t===r)return!0;if(1===t.length&&t[0].semver===a){if(1===r.length&&r[0].semver===a)return!0;t=n.includePrerelease?l:u}if(1===r.length&&r[0].semver===a){if(n.includePrerelease)return!0;r=u}let y=new Set;for(let r of t)">"===r.operator||">="===r.operator?i=c(i,r,n):"<"===r.operator||"<="===r.operator?d=h(d,r,n):y.add(r.semver);if(y.size>1||i&&d&&((f=s(i.semver,d.semver,n))>0||0===f&&(">="!==i.operator||"<="!==d.operator)))return null;for(let t of y){if(i&&!o(t,String(i),n)||d&&!o(t,String(d),n))return null;for(let i of r)if(!o(t,String(i),n))return!1;return!0}let _=!(!d||n.includePrerelease||!d.semver.prerelease.length)&&d.semver,v=!(!i||n.includePrerelease||!i.semver.prerelease.length)&&i.semver;for(let t of(_&&1===_.prerelease.length&&"<"===d.operator&&0===_.prerelease[0]&&(_=!1),r)){if(b=b||">"===t.operator||">="===t.operator,g=g||"<"===t.operator||"<="===t.operator,i){if(v&&t.semver.prerelease&&t.semver.prerelease.length&&t.semver.major===v.major&&t.semver.minor===v.minor&&t.semver.patch===v.patch&&(v=!1),">"===t.operator||">="===t.operator){if((p=c(i,t,n))===t&&p!==i)return!1}else if(">="===i.operator&&!o(i.semver,String(t),n))return!1}if(d){if(_&&t.semver.prerelease&&t.semver.prerelease.length&&t.semver.major===_.major&&t.semver.minor===_.minor&&t.semver.patch===_.patch&&(_=!1),"<"===t.operator||"<="===t.operator){if((m=h(d,t,n))===t&&m!==d)return!1}else if("<="===d.operator&&!o(d.semver,String(t),n))return!1}if(!t.operator&&(d||i)&&0!==f)return!1}return!(i&&g&&!d&&0!==f)&&!(d&&b&&!i&&0!==f)&&!v&&!_},c=(t,r,n)=>{if(!t)return r;let i=s(t.semver,r.semver,n);return i>0?t:i<0||">"===r.operator&&">="===t.operator?r:t},h=(t,r,n)=>{if(!t)return r;let i=s(t.semver,r.semver,n);return i<0?t:i>0||"<"===r.operator&&"<="===t.operator?r:t};r.exports=(t,r,i={})=>{if(t===r)return!0;t=new n(t,i),r=new n(r,i);let a=!1;e:for(let n of t.set){for(let t of r.set){let r=d(n,t,i);if(a=a||null!==r,r)continue e}if(a)return!1}return!0}}}),require_semver4=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/index.js"(t,r){init_globals();var n=require_re2(),i=require_constants11(),a=require_semver3(),o=require_identifiers2();r.exports={parse:require_parse4(),valid:require_valid3(),clean:require_clean2(),inc:require_inc2(),diff:require_diff2(),major:require_major2(),minor:require_minor2(),patch:require_patch2(),prerelease:require_prerelease2(),compare:require_compare2(),rcompare:require_rcompare2(),compareLoose:require_compare_loose2(),compareBuild:require_compare_build2(),sort:require_sort2(),rsort:require_rsort2(),gt:require_gt2(),lt:require_lt2(),eq:require_eq2(),neq:require_neq2(),gte:require_gte2(),lte:require_lte2(),cmp:require_cmp2(),coerce:require_coerce2(),Comparator:require_comparator2(),Range:require_range3(),satisfies:require_satisfies2(),toComparators:require_to_comparators2(),maxSatisfying:require_max_satisfying2(),minSatisfying:require_min_satisfying2(),minVersion:require_min_version2(),validRange:require_valid4(),outside:require_outside2(),gtr:require_gtr2(),ltr:require_ltr2(),intersects:require_intersects2(),simplifyRange:require_simplify3(),subset:require_subset2(),SemVer:a,re:n.re,src:n.src,tokens:n.t,SEMVER_SPEC_VERSION:i.SEMVER_SPEC_VERSION,RELEASE_TYPES:i.RELEASE_TYPES,compareIdentifiers:o.compareIdentifiers,rcompareIdentifiers:o.rcompareIdentifiers}}}),require_lib7=__commonJS({"../core/dist/lib/index.js"(t){function r(t){let r,n=t[0],i=1;for(;i<t.length;){let a=t[i],o=t[i+1];if(i+=2,("optionalAccess"===a||"optionalCall"===a)&&null==n)return;"access"===a||"optionalAccess"===a?(r=n,n=o(n)):"call"!==a&&"optionalCall"!==a||(n=o((...t)=>n.call(r,...t)),r=void 0)}return n}init_globals(),Object.defineProperty(t,"__esModule",{value:!0});var n=require_chunk_4CBFCRNS(),i=require_chunk_I5LBWOQA(),a=require_env(),o=require_utils5(),s=require_img();function l(t,i){let s={sdkVersion:n.getVersion.call(void 0),logTime:Date.now(),model_name:a.getAIConfig.call(void 0,a.MIDSCENE_MODEL_NAME)||""},l={logId:o.uuid.call(void 0),...s,...t};r([i,"optionalCall",t=>t(l)])}var u=require_logger().getDebug.call(void 0,"ai:insight"),d=class{constructor(t,n){this.aiVendorFn=i.callAiFn,o.assert.call(void 0,t,"context is required for Insight"),this.contextRetrieverFn="function"==typeof t?t:()=>Promise.resolve(t),void 0!==r([n,"optionalAccess",t=>t.aiVendorFn])&&(this.aiVendorFn=n.aiVendorFn),void 0!==r([n,"optionalAccess",t=>t.taskInfo])&&(this.taskInfo=n.taskInfo)}async locate(t,n){let s,d,c,h,f,p,{callAI:m}=n||{},g="string"==typeof t?t:t.prompt;o.assert.call(void 0,g,"query is required for locate");let b=this.onceDumpUpdatedFn;this.onceDumpUpdatedFn=void 0,o.assert.call(void 0,"object"==typeof t,"query should be an object for locate");let y=a.getAIConfigInBoolean.call(void 0,a.MIDSCENE_FORCE_DEEP_THINK);y&&u("globalDeepThinkSwitch",y),(t.deepThink||y)&&(s=t.prompt),s&&!a.vlLocateMode.call(void 0)&&(import_console_browserify.default.warn('The "deepThink" feature is not supported with multimodal LLM. Please config VL model for Midscene. https://midscenejs.com/choose-a-model'),s=void 0);let _=r([n,"optionalAccess",t=>t.context])||await this.contextRetrieverFn("locate");s&&(f=await i.AiLocateSection.call(void 0,{context:_,sectionDescription:s}),o.assert.call(void 0,f.rect,`cannot find search area for "${s}"${f.error?`: ${f.error}`:""}`),c=f.rawResponse,h=f.usage,d=f.rect);let v=Date.now(),{parseResult:A,rect:w,elementById:x,rawResponse:E,usage:S,isOrderSensitive:C}=await i.AiLocateElement.call(void 0,{callAI:m||this.aiVendorFn,context:_,targetElementDescription:g,searchConfig:f}),I=Date.now()-v,T={...this.taskInfo?this.taskInfo:{},durationMs:I,rawResponse:JSON.stringify(E),formatResponse:JSON.stringify(A),usage:S,searchArea:d,searchAreaRawResponse:c,searchAreaUsage:h};r([A,"access",t=>t.errors,"optionalAccess",t=>t.length])&&(p=`AI model failed to locate:
|
|
702
|
+
`,"utf-8")),p=!0}let c=u.join(l,`${r}.${i}`);return"dump"!==s&&a.writeFileSync.call(void 0,c,o),n([t,"optionalAccess",t=>t.generateReport])?y(r,o,t.appendReport):c},t.getTmpDir=_,t.getTmpFile=function(t){if(f.ifInBrowser||f.ifInWorker)return null;let r=_(),n=`${f.uuid.call(void 0)}.${t}`;return u.join(r,n)},t.overlapped=function(t,r){return t.left<r.left+r.width&&t.left+t.width>r.left&&t.top<r.top+r.height&&t.top+t.height>r.top},t.sleep=async function(t){return new Promise(r=>setTimeout(r,t))},t.replacerForPageObject=v,t.stringifyDumpData=function(t,r){return JSON.stringify(t,v,r)},t.getVersion=function(){return"0.26.2-beta-20250812091127.0"},t.uploadTestInfoToServer=function({testUrl:t}){let r="",a="",o=n([c.getAIConfigInJson.call(void 0,c.MIDSCENE_OPENAI_INIT_CONFIG_JSON),"optionalAccess",t=>t.REPORT_SERVER_URL]);try{r=i.execSync.call(void 0,"git config --get remote.origin.url").toString().trim(),a=i.execSync.call(void 0,"git config --get user.email").toString().trim()}catch(t){A("Failed to get git info:",t)}o&&(r&&r!==w||!r&&t)&&(A("Uploading test info to server",{serverUrl:o,repoUrl:r,testUrl:t,userEmail:a}),fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({repo_url:r,test_url:t,user_email:a})}).then(t=>t.json()).then(t=>{A("Successfully uploaded test info to server:",t)}).catch(t=>A("Failed to upload test info to server:",t)),w=r)}}}),require_utils12=__commonJS({"../core/dist/lib/utils.js"(t){init_globals(),Object.defineProperty(t,"__esModule",{value:!0});var r=require_chunk_WXNDYUNG();t.getTmpDir=r.getTmpDir,t.getTmpFile=r.getTmpFile,t.getVersion=r.getVersion,t.groupedActionDumpFileExt=r.groupedActionDumpFileExt,t.insertScriptBeforeClosingHtml=r.insertScriptBeforeClosingHtml,t.overlapped=r.overlapped,t.replacerForPageObject=r.replacerForPageObject,t.reportHTMLContent=r.reportHTMLContent,t.sleep=r.sleep,t.stringifyDumpData=r.stringifyDumpData,t.uploadTestInfoToServer=r.uploadTestInfoToServer,t.writeDumpReport=r.writeDumpReport,t.writeLogFile=r.writeLogFile}}),require_dayjs_min=__commonJS({"../../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js"(t,r){var n,i;init_globals(),n=t,i=function(){var t=6e4,r=36e5,n="millisecond",i="second",a="minute",o="hour",s="day",l="week",u="month",d="quarter",c="year",h="date",f="Invalid Date",p=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,m=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,g={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var r=["th","st","nd","rd"],n=t%100;return"["+t+(r[(n-20)%10]||r[n]||r[0])+"]"}},b=function(t,r,n){var i=String(t);return!i||i.length>=r?t:""+Array(r+1-i.length).join(n)+t},y={s:b,z:function(t){var r=-t.utcOffset(),n=Math.abs(r),i=Math.floor(n/60),a=n%60;return(r<=0?"+":"-")+b(i,2,"0")+":"+b(a,2,"0")},m:function t(r,n){if(r.date()<n.date())return-t(n,r);var i=12*(n.year()-r.year())+(n.month()-r.month()),a=r.clone().add(i,u),o=n-a<0,s=r.clone().add(i+(o?-1:1),u);return+(-(i+(n-a)/(o?a-s:s-a))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return({M:u,y:c,w:l,d:s,D:h,h:o,m:a,s:i,ms:n,Q:d})[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},_="en",v={};v[_]=g;var A="$isDayjsObject",w=function(t){return t instanceof C||!(!t||!t[A])},x=function t(r,n,i){var a;if(!r)return _;if("string"==typeof r){var o=r.toLowerCase();v[o]&&(a=o),n&&(v[o]=n,a=o);var s=r.split("-");if(!a&&s.length>1)return t(s[0])}else{var l=r.name;v[l]=r,a=l}return!i&&a&&(_=a),a||!i&&_},E=function(t,r){if(w(t))return t.clone();var n="object"==typeof r?r:{};return n.date=t,n.args=arguments,new C(n)},S=y;S.l=x,S.i=w,S.w=function(t,r){return E(t,{locale:r.$L,utc:r.$u,x:r.$x,$offset:r.$offset})};var C=function(){function g(t){this.$L=x(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[A]=!0}var b=g.prototype;return b.parse=function(t){this.$d=function(t){var r=t.date,n=t.utc;if(null===r)return new Date(NaN);if(S.u(r))return new Date;if(r instanceof Date)return new Date(r);if("string"==typeof r&&!/Z$/i.test(r)){var i=r.match(p);if(i){var a=i[2]-1||0,o=(i[7]||"0").substring(0,3);return n?new Date(Date.UTC(i[1],a,i[3]||1,i[4]||0,i[5]||0,i[6]||0,o)):new Date(i[1],a,i[3]||1,i[4]||0,i[5]||0,i[6]||0,o)}}return new Date(r)}(t),this.init()},b.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},b.$utils=function(){return S},b.isValid=function(){return this.$d.toString()!==f},b.isSame=function(t,r){var n=E(t);return this.startOf(r)<=n&&n<=this.endOf(r)},b.isAfter=function(t,r){return E(t)<this.startOf(r)},b.isBefore=function(t,r){return this.endOf(r)<E(t)},b.$g=function(t,r,n){return S.u(t)?this[r]:this.set(n,t)},b.unix=function(){return Math.floor(this.valueOf()/1e3)},b.valueOf=function(){return this.$d.getTime()},b.startOf=function(t,r){var n=this,d=!!S.u(r)||r,f=S.p(t),p=function(t,r){var i=S.w(n.$u?Date.UTC(n.$y,r,t):new Date(n.$y,r,t),n);return d?i:i.endOf(s)},m=function(t,r){return S.w(n.toDate()[t].apply(n.toDate("s"),(d?[0,0,0,0]:[23,59,59,999]).slice(r)),n)},g=this.$W,b=this.$M,y=this.$D,_="set"+(this.$u?"UTC":"");switch(f){case c:return d?p(1,0):p(31,11);case u:return d?p(1,b):p(0,b+1);case l:var v=this.$locale().weekStart||0,A=(g<v?g+7:g)-v;return p(d?y-A:y+(6-A),b);case s:case h:return m(_+"Hours",0);case o:return m(_+"Minutes",1);case a:return m(_+"Seconds",2);case i:return m(_+"Milliseconds",3);default:return this.clone()}},b.endOf=function(t){return this.startOf(t,!1)},b.$set=function(t,r){var l,d=S.p(t),f="set"+(this.$u?"UTC":""),p=((l={})[s]=f+"Date",l[h]=f+"Date",l[u]=f+"Month",l[c]=f+"FullYear",l[o]=f+"Hours",l[a]=f+"Minutes",l[i]=f+"Seconds",l[n]=f+"Milliseconds",l)[d],m=d===s?this.$D+(r-this.$W):r;if(d===u||d===c){var g=this.clone().set(h,1);g.$d[p](m),g.init(),this.$d=g.set(h,Math.min(this.$D,g.daysInMonth())).$d}else p&&this.$d[p](m);return this.init(),this},b.set=function(t,r){return this.clone().$set(t,r)},b.get=function(t){return this[S.p(t)]()},b.add=function(n,d){var h,f=this;n=Number(n);var p=S.p(d),m=function(t){var r=E(f);return S.w(r.date(r.date()+Math.round(t*n)),f)};if(p===u)return this.set(u,this.$M+n);if(p===c)return this.set(c,this.$y+n);if(p===s)return m(1);if(p===l)return m(7);var g=((h={})[a]=t,h[o]=r,h[i]=1e3,h)[p]||1,b=this.$d.getTime()+n*g;return S.w(b,this)},b.subtract=function(t,r){return this.add(-1*t,r)},b.format=function(t){var r=this,n=this.$locale();if(!this.isValid())return n.invalidDate||f;var i=t||"YYYY-MM-DDTHH:mm:ssZ",a=S.z(this),o=this.$H,s=this.$m,l=this.$M,u=n.weekdays,d=n.months,c=n.meridiem,h=function(t,n,a,o){return t&&(t[n]||t(r,i))||a[n].slice(0,o)},p=function(t){return S.s(o%12||12,t,"0")},g=c||function(t,r,n){var i=t<12?"AM":"PM";return n?i.toLowerCase():i};return i.replace(m,function(t,i){return i||function(t){switch(t){case"YY":return String(r.$y).slice(-2);case"YYYY":return S.s(r.$y,4,"0");case"M":return l+1;case"MM":return S.s(l+1,2,"0");case"MMM":return h(n.monthsShort,l,d,3);case"MMMM":return h(d,l);case"D":return r.$D;case"DD":return S.s(r.$D,2,"0");case"d":return String(r.$W);case"dd":return h(n.weekdaysMin,r.$W,u,2);case"ddd":return h(n.weekdaysShort,r.$W,u,3);case"dddd":return u[r.$W];case"H":return String(o);case"HH":return S.s(o,2,"0");case"h":return p(1);case"hh":return p(2);case"a":return g(o,s,!0);case"A":return g(o,s,!1);case"m":return String(s);case"mm":return S.s(s,2,"0");case"s":return String(r.$s);case"ss":return S.s(r.$s,2,"0");case"SSS":return S.s(r.$ms,3,"0");case"Z":return a}return null}(t)||a.replace(":","")})},b.utcOffset=function(){return-(15*Math.round(this.$d.getTimezoneOffset()/15))},b.diff=function(n,h,f){var p,m=this,g=S.p(h),b=E(n),y=(b.utcOffset()-this.utcOffset())*t,_=this-b,v=function(){return S.m(m,b)};switch(g){case c:p=v()/12;break;case u:p=v();break;case d:p=v()/3;break;case l:p=(_-y)/6048e5;break;case s:p=(_-y)/864e5;break;case o:p=_/r;break;case a:p=_/t;break;case i:p=_/1e3;break;default:p=_}return f?p:S.a(p)},b.daysInMonth=function(){return this.endOf(u).$D},b.$locale=function(){return v[this.$L]},b.locale=function(t,r){if(!t)return this.$L;var n=this.clone(),i=x(t,r,!0);return i&&(n.$L=i),n},b.clone=function(){return S.w(this.$d,this)},b.toDate=function(){return new Date(this.valueOf())},b.toJSON=function(){return this.isValid()?this.toISOString():null},b.toISOString=function(){return this.$d.toISOString()},b.toString=function(){return this.$d.toUTCString()},g}(),I=C.prototype;return E.prototype=I,[["$ms",n],["$s",i],["$m",a],["$H",o],["$W",s],["$M",u],["$y",c],["$D",h]].forEach(function(t){I[t[1]]=function(r){return this.$g(r,t[0],t[1])}}),E.extend=function(t,r){return t.$i||(t(r,C,E),t.$i=!0),E},E.locale=x,E.isDayjs=w,E.unix=function(t){return E(1e3*t)},E.en=v[_],E.Ls=v,E.p={},E},"object"==typeof t&&void 0!==r?r.exports=i():"function"==typeof define&&define.amd?define(i):(n="undefined"!=typeof globalThis?globalThis:n||self).dayjs=i()}}),require_common7=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/common.js"(t,r){function n(t){return null==t}init_globals(),r.exports.isNothing=n,r.exports.isObject=function(t){return"object"==typeof t&&null!==t},r.exports.toArray=function(t){return Array.isArray(t)?t:n(t)?[]:[t]},r.exports.repeat=function(t,r){var n,i="";for(n=0;n<r;n+=1)i+=t;return i},r.exports.isNegativeZero=function(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t},r.exports.extend=function(t,r){var n,i,a,o;if(r)for(n=0,i=(o=Object.keys(r)).length;n<i;n+=1)t[a=o[n]]=r[a];return t}}}),require_exception=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/exception.js"(t,r){function n(t,r){var n="",i=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(n+='in "'+t.mark.name+'" '),n+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!r&&t.mark.snippet&&(n+="\n\n"+t.mark.snippet),i+" "+n):i}function i(t,r){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=r,this.message=n(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=Error().stack||""}init_globals(),i.prototype=Object.create(Error.prototype),i.prototype.constructor=i,i.prototype.toString=function(t){return this.name+": "+n(this,t)},r.exports=i}}),require_snippet=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/snippet.js"(t,r){init_globals();var n=require_common7();function i(t,r,n,i,a){var o="",s="",l=Math.floor(a/2)-1;return i-r>l&&(r=i-l+(o=" ... ").length),n-i>l&&(n=i+l-(s=" ...").length),{str:o+t.slice(r,n).replace(/\t/g,"→")+s,pos:i-r+o.length}}function a(t,r){return n.repeat(" ",r-t.length)+t}r.exports=function(t,r){if(r=Object.create(r||null),!t.buffer)return null;r.maxLength||(r.maxLength=79),"number"!=typeof r.indent&&(r.indent=1),"number"!=typeof r.linesBefore&&(r.linesBefore=3),"number"!=typeof r.linesAfter&&(r.linesAfter=2);for(var o,s=/\r?\n|\r|\0/g,l=[0],u=[],d=-1;o=s.exec(t.buffer);)u.push(o.index),l.push(o.index+o[0].length),t.position<=o.index&&d<0&&(d=l.length-2);d<0&&(d=l.length-1);var c,h,f="",p=Math.min(t.line+r.linesAfter,u.length).toString().length,m=r.maxLength-(r.indent+p+3);for(c=1;c<=r.linesBefore&&!(d-c<0);c++)h=i(t.buffer,l[d-c],u[d-c],t.position-(l[d]-l[d-c]),m),f=n.repeat(" ",r.indent)+a((t.line-c+1).toString(),p)+" | "+h.str+"\n"+f;for(h=i(t.buffer,l[d],u[d],t.position,m),f+=n.repeat(" ",r.indent)+a((t.line+1).toString(),p)+" | "+h.str+"\n"+n.repeat("-",r.indent+p+3+h.pos)+"^\n",c=1;c<=r.linesAfter&&!(d+c>=u.length);c++)h=i(t.buffer,l[d+c],u[d+c],t.position-(l[d]-l[d+c]),m),f+=n.repeat(" ",r.indent)+a((t.line+c+1).toString(),p)+" | "+h.str+"\n";return f.replace(/\n$/,"")}}}),require_type2=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type.js"(t,r){init_globals();var n=require_exception(),i=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],a=["scalar","sequence","mapping"];r.exports=function(t,r){var o,s;if(Object.keys(r=r||{}).forEach(function(r){if(-1===i.indexOf(r))throw new n('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.options=r,this.tag=t,this.kind=r.kind||null,this.resolve=r.resolve||function(){return!0},this.construct=r.construct||function(t){return t},this.instanceOf=r.instanceOf||null,this.predicate=r.predicate||null,this.represent=r.represent||null,this.representName=r.representName||null,this.defaultStyle=r.defaultStyle||null,this.multi=r.multi||!1,this.styleAliases=(o=r.styleAliases||null,s={},null!==o&&Object.keys(o).forEach(function(t){o[t].forEach(function(r){s[String(r)]=t})}),s),-1===a.indexOf(this.kind))throw new n('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}}}),require_schema=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/schema.js"(t,r){init_globals();var n=require_exception(),i=require_type2();function a(t,r){var n=[];return t[r].forEach(function(t){var r=n.length;n.forEach(function(n,i){n.tag===t.tag&&n.kind===t.kind&&n.multi===t.multi&&(r=i)}),n[r]=t}),n}function o(t){return this.extend(t)}o.prototype.extend=function(t){var r=[],s=[];if(t instanceof i)s.push(t);else if(Array.isArray(t))s=s.concat(t);else{if(!t||!Array.isArray(t.implicit)&&!Array.isArray(t.explicit))throw new n("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");t.implicit&&(r=r.concat(t.implicit)),t.explicit&&(s=s.concat(t.explicit))}r.forEach(function(t){if(!(t instanceof i))throw new n("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(t.loadKind&&"scalar"!==t.loadKind)throw new n("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(t.multi)throw new n("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),s.forEach(function(t){if(!(t instanceof i))throw new n("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var l=Object.create(o.prototype);return l.implicit=(this.implicit||[]).concat(r),l.explicit=(this.explicit||[]).concat(s),l.compiledImplicit=a(l,"implicit"),l.compiledExplicit=a(l,"explicit"),l.compiledTypeMap=function(){var t,r,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function i(t){t.multi?(n.multi[t.kind].push(t),n.multi.fallback.push(t)):n[t.kind][t.tag]=n.fallback[t.tag]=t}for(t=0,r=arguments.length;t<r;t+=1)arguments[t].forEach(i);return n}(l.compiledImplicit,l.compiledExplicit),l},r.exports=o}}),require_str=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/str.js"(t,r){init_globals(),r.exports=new(require_type2())("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}})}}),require_seq=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/seq.js"(t,r){init_globals(),r.exports=new(require_type2())("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}})}}),require_map2=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/map.js"(t,r){init_globals(),r.exports=new(require_type2())("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}})}}),require_failsafe=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/schema/failsafe.js"(t,r){init_globals(),r.exports=new(require_schema())({explicit:[require_str(),require_seq(),require_map2()]})}}),require_null2=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/null.js"(t,r){init_globals(),r.exports=new(require_type2())("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(t){if(null===t)return!0;var r=t.length;return 1===r&&"~"===t||4===r&&("null"===t||"Null"===t||"NULL"===t)},construct:function(){return null},predicate:function(t){return null===t},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"})}}),require_bool=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/bool.js"(t,r){init_globals(),r.exports=new(require_type2())("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(t){if(null===t)return!1;var r=t.length;return 4===r&&("true"===t||"True"===t||"TRUE"===t)||5===r&&("false"===t||"False"===t||"FALSE"===t)},construct:function(t){return"true"===t||"True"===t||"TRUE"===t},predicate:function(t){return"[object Boolean]"===Object.prototype.toString.call(t)},represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})}}),require_int=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/int.js"(t,r){init_globals();var n=require_common7();function i(t){return 48<=t&&t<=55}function a(t){return 48<=t&&t<=57}r.exports=new(require_type2())("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(t){if(null===t)return!1;var r,n,o=t.length,s=0,l=!1;if(!o)return!1;if("-"!==(r=t[s])&&"+"!==r||(r=t[++s]),"0"===r){if(s+1===o)return!0;if("b"===(r=t[++s])){for(s++;s<o;s++)if("_"!==(r=t[s])){if("0"!==r&&"1"!==r)return!1;l=!0}return l&&"_"!==r}if("x"===r){for(s++;s<o;s++)if("_"!==(r=t[s])){if(!(48<=(n=t.charCodeAt(s))&&n<=57||65<=n&&n<=70||97<=n&&n<=102))return!1;l=!0}return l&&"_"!==r}if("o"===r){for(s++;s<o;s++)if("_"!==(r=t[s])){if(!i(t.charCodeAt(s)))return!1;l=!0}return l&&"_"!==r}}if("_"===r)return!1;for(;s<o;s++)if("_"!==(r=t[s])){if(!a(t.charCodeAt(s)))return!1;l=!0}return!(!l||"_"===r)},construct:function(t){var r,n=t,i=1;if(-1!==n.indexOf("_")&&(n=n.replace(/_/g,"")),"-"!==(r=n[0])&&"+"!==r||("-"===r&&(i=-1),r=(n=n.slice(1))[0]),"0"===n)return 0;if("0"===r){if("b"===n[1])return i*parseInt(n.slice(2),2);if("x"===n[1])return i*parseInt(n.slice(2),16);if("o"===n[1])return i*parseInt(n.slice(2),8)}return i*parseInt(n,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1==0&&!n.isNegativeZero(t)},represent:{binary:function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})}}),require_float=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/float.js"(t,r){init_globals();var n=require_common7(),i=require_type2(),a=RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),o=/^[-+]?[0-9]+e/;r.exports=new i("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(t){return null!==t&&!(!a.test(t)||"_"===t[t.length-1])},construct:function(t){var r,n;return n="-"===(r=t.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(r[0])>=0&&(r=r.slice(1)),".inf"===r?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===r?NaN:n*parseFloat(r,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||n.isNegativeZero(t))},represent:function(t,r){var i;if(isNaN(t))switch(r){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(r){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(r){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(n.isNegativeZero(t))return"-0.0";return i=t.toString(10),o.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"})}}),require_json2=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/schema/json.js"(t,r){init_globals(),r.exports=require_failsafe().extend({implicit:[require_null2(),require_bool(),require_int(),require_float()]})}}),require_core6=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/schema/core.js"(t,r){init_globals(),r.exports=require_json2()}}),require_timestamp=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/timestamp.js"(t,r){init_globals();var n=require_type2(),i=RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),a=RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");r.exports=new n("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(t){return null!==t&&(null!==i.exec(t)||null!==a.exec(t))},construct:function(t){var r,n,o,s,l,u,d,c,h=0,f=null;if(null===(r=i.exec(t))&&(r=a.exec(t)),null===r)throw Error("Date resolve error");if(n=+r[1],o=r[2]-1,s=+r[3],!r[4])return new Date(Date.UTC(n,o,s));if(l=+r[4],u=+r[5],d=+r[6],r[7]){for(h=r[7].slice(0,3);h.length<3;)h+="0";h*=1}return r[9]&&(f=6e4*(60*r[10]+ +(r[11]||0)),"-"===r[9]&&(f=-f)),c=new Date(Date.UTC(n,o,s,l,u,d,h)),f&&c.setTime(c.getTime()-f),c},instanceOf:Date,represent:function(t){return t.toISOString()}})}}),require_merge=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/merge.js"(t,r){init_globals(),r.exports=new(require_type2())("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(t){return"<<"===t||null===t}})}}),require_binary=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/binary.js"(t,r){init_globals();var n=require_type2(),i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";r.exports=new n("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(t){if(null===t)return!1;var r,n,a=0,o=t.length,s=i;for(n=0;n<o;n++)if(!((r=s.indexOf(t.charAt(n)))>64)){if(r<0)return!1;a+=6}return a%8==0},construct:function(t){var r,n,a=t.replace(/[\r\n=]/g,""),o=a.length,s=i,l=0,u=[];for(r=0;r<o;r++)r%4==0&&r&&(u.push(l>>16&255),u.push(l>>8&255),u.push(255&l)),l=l<<6|s.indexOf(a.charAt(r));return 0==(n=o%4*6)?(u.push(l>>16&255),u.push(l>>8&255),u.push(255&l)):18===n?(u.push(l>>10&255),u.push(l>>2&255)):12===n&&u.push(l>>4&255),new Uint8Array(u)},predicate:function(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)},represent:function(t){var r,n,a="",o=0,s=t.length,l=i;for(r=0;r<s;r++)r%3==0&&r&&(a+=l[o>>18&63],a+=l[o>>12&63],a+=l[o>>6&63],a+=l[63&o]),o=(o<<8)+t[r];return 0==(n=s%3)?(a+=l[o>>18&63],a+=l[o>>12&63],a+=l[o>>6&63],a+=l[63&o]):2===n?(a+=l[o>>10&63],a+=l[o>>4&63],a+=l[o<<2&63],a+=l[64]):1===n&&(a+=l[o>>2&63],a+=l[o<<4&63],a+=l[64],a+=l[64]),a}})}}),require_omap=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/omap.js"(t,r){init_globals();var n=require_type2(),i=Object.prototype.hasOwnProperty,a=Object.prototype.toString;r.exports=new n("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(t){if(null===t)return!0;var r,n,o,s,l,u=[],d=t;for(r=0,n=d.length;r<n;r+=1){if(o=d[r],l=!1,"[object Object]"!==a.call(o))return!1;for(s in o)if(i.call(o,s)){if(l)return!1;l=!0}if(!l||-1!==u.indexOf(s))return!1;u.push(s)}return!0},construct:function(t){return null!==t?t:[]}})}}),require_pairs=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/pairs.js"(t,r){init_globals();var n=require_type2(),i=Object.prototype.toString;r.exports=new n("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(t){if(null===t)return!0;var r,n,a,o,s,l=t;for(s=Array(l.length),r=0,n=l.length;r<n;r+=1){if(a=l[r],"[object Object]"!==i.call(a)||1!==(o=Object.keys(a)).length)return!1;s[r]=[o[0],a[o[0]]]}return!0},construct:function(t){if(null===t)return[];var r,n,i,a,o,s=t;for(o=Array(s.length),r=0,n=s.length;r<n;r+=1)a=Object.keys(i=s[r]),o[r]=[a[0],i[a[0]]];return o}})}}),require_set2=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/type/set.js"(t,r){init_globals();var n=require_type2(),i=Object.prototype.hasOwnProperty;r.exports=new n("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(t){if(null===t)return!0;var r,n=t;for(r in n)if(i.call(n,r)&&null!==n[r])return!1;return!0},construct:function(t){return null!==t?t:{}}})}}),require_default2=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/schema/default.js"(t,r){init_globals(),r.exports=require_core6().extend({implicit:[require_timestamp(),require_merge()],explicit:[require_binary(),require_omap(),require_pairs(),require_set2()]})}}),require_loader=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/loader.js"(t,r){init_globals();var n=require_common7(),i=require_exception(),a=require_snippet(),o=require_default2(),s=Object.prototype.hasOwnProperty,l=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,u=/[\x85\u2028\u2029]/,d=/[,\[\]\{\}]/,c=/^(?:!|!!|![a-z\-]+!)$/i,h=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function f(t){return Object.prototype.toString.call(t)}function p(t){return 10===t||13===t}function m(t){return 9===t||32===t}function g(t){return 9===t||32===t||10===t||13===t}function b(t){return 44===t||91===t||93===t||123===t||125===t}function y(t){var r;return 48<=t&&t<=57?t-48:97<=(r=32|t)&&r<=102?r-97+10:-1}function _(t){return 48===t?"\0":97===t?"\x07":98===t?"\b":116===t||9===t?" ":110===t?"\n":118===t?"\v":102===t?"\f":114===t?"\r":101===t?"\x1b":32===t?" ":34===t?'"':47===t?"/":92===t?"\\":78===t?"\x85":95===t?"\xa0":76===t?"\u2028":80===t?"\u2029":""}function v(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(55296+(t-65536>>10),56320+(t-65536&1023))}var A,w=Array(256),x=Array(256);for(A=0;A<256;A++)w[A]=+!!_(A),x[A]=_(A);function E(t,r){this.input=t,this.filename=r.filename||null,this.schema=r.schema||o,this.onWarning=r.onWarning||null,this.legacy=r.legacy||!1,this.json=r.json||!1,this.listener=r.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function S(t,r){var n={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return n.snippet=a(n),new i(r,n)}function C(t,r){throw S(t,r)}function I(t,r){t.onWarning&&t.onWarning.call(null,S(t,r))}var T={YAML:function(t,r,n){var i,a,o;null!==t.version&&C(t,"duplication of %YAML directive"),1!==n.length&&C(t,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&C(t,"ill-formed argument of the YAML directive"),a=parseInt(i[1],10),o=parseInt(i[2],10),1!==a&&C(t,"unacceptable YAML version of the document"),t.version=n[0],t.checkLineBreaks=o<2,1!==o&&2!==o&&I(t,"unsupported YAML version of the document")},TAG:function(t,r,n){var i,a;2!==n.length&&C(t,"TAG directive accepts exactly two arguments"),i=n[0],a=n[1],c.test(i)||C(t,"ill-formed tag handle (first argument) of the TAG directive"),s.call(t.tagMap,i)&&C(t,'there is a previously declared suffix for "'+i+'" tag handle'),h.test(a)||C(t,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch(r){C(t,"tag prefix is malformed: "+a)}t.tagMap[i]=a}};function k(t,r,n,i){var a,o,s,u;if(r<n){if(u=t.input.slice(r,n),i)for(a=0,o=u.length;a<o;a+=1)9===(s=u.charCodeAt(a))||32<=s&&s<=1114111||C(t,"expected valid JSON character");else l.test(u)&&C(t,"the stream contains non-printable characters");t.result+=u}}function P(t,r,i,a){var o,l,u,d;for(n.isObject(i)||C(t,"cannot merge mappings; the provided source object is unacceptable"),u=0,d=(o=Object.keys(i)).length;u<d;u+=1)l=o[u],s.call(r,l)||(r[l]=i[l],a[l]=!0)}function R(t,r,n,i,a,o,l,u,d){var c,h;if(Array.isArray(a))for(c=0,h=(a=Array.prototype.slice.call(a)).length;c<h;c+=1)Array.isArray(a[c])&&C(t,"nested arrays are not supported inside keys"),"object"==typeof a&&"[object Object]"===f(a[c])&&(a[c]="[object Object]");if("object"==typeof a&&"[object Object]"===f(a)&&(a="[object Object]"),a=String(a),null===r&&(r={}),"tag:yaml.org,2002:merge"===i)if(Array.isArray(o))for(c=0,h=o.length;c<h;c+=1)P(t,r,o[c],n);else P(t,r,o,n);else t.json||s.call(n,a)||!s.call(r,a)||(t.line=l||t.line,t.lineStart=u||t.lineStart,t.position=d||t.position,C(t,"duplicated mapping key")),"__proto__"===a?Object.defineProperty(r,a,{configurable:!0,enumerable:!0,writable:!0,value:o}):r[a]=o,delete n[a];return r}function O(t){var r;10===(r=t.input.charCodeAt(t.position))?t.position++:13===r?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):C(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function M(t,r,n){for(var i=0,a=t.input.charCodeAt(t.position);0!==a;){for(;m(a);)9===a&&-1===t.firstTabInLine&&(t.firstTabInLine=t.position),a=t.input.charCodeAt(++t.position);if(r&&35===a)do a=t.input.charCodeAt(++t.position);while(10!==a&&13!==a&&0!==a);if(!p(a))break;for(O(t),a=t.input.charCodeAt(t.position),i++,t.lineIndent=0;32===a;)t.lineIndent++,a=t.input.charCodeAt(++t.position)}return -1!==n&&0!==i&&t.lineIndent<n&&I(t,"deficient indentation"),i}function j(t){var r,n=t.position;return!(45!==(r=t.input.charCodeAt(n))&&46!==r||r!==t.input.charCodeAt(n+1)||r!==t.input.charCodeAt(n+2)||(n+=3,0!==(r=t.input.charCodeAt(n))&&!g(r)))}function N(t,r){1===r?t.result+=" ":r>1&&(t.result+=n.repeat("\n",r-1))}function B(t,r){var n,i,a=t.tag,o=t.anchor,s=[],l=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=s),i=t.input.charCodeAt(t.position);0!==i&&(-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,C(t,"tab characters must not be used in indentation")),45===i)&&g(t.input.charCodeAt(t.position+1));)if(l=!0,t.position++,M(t,!0,-1)&&t.lineIndent<=r)s.push(null),i=t.input.charCodeAt(t.position);else if(n=t.line,U(t,r,3,!1,!0),s.push(t.result),M(t,!0,-1),i=t.input.charCodeAt(t.position),(t.line===n||t.lineIndent>r)&&0!==i)C(t,"bad indentation of a sequence entry");else if(t.lineIndent<r)break;return!!l&&(t.tag=a,t.anchor=o,t.kind="sequence",t.result=s,!0)}function L(t){var r,n,i,a,o=!1,l=!1;if(33!==(a=t.input.charCodeAt(t.position)))return!1;if(null!==t.tag&&C(t,"duplication of a tag property"),60===(a=t.input.charCodeAt(++t.position))?(o=!0,a=t.input.charCodeAt(++t.position)):33===a?(l=!0,n="!!",a=t.input.charCodeAt(++t.position)):n="!",r=t.position,o){do a=t.input.charCodeAt(++t.position);while(0!==a&&62!==a);t.position<t.length?(i=t.input.slice(r,t.position),a=t.input.charCodeAt(++t.position)):C(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==a&&!g(a);)33===a&&(l?C(t,"tag suffix cannot contain exclamation marks"):(n=t.input.slice(r-1,t.position+1),c.test(n)||C(t,"named tag handle cannot contain such characters"),l=!0,r=t.position+1)),a=t.input.charCodeAt(++t.position);i=t.input.slice(r,t.position),d.test(i)&&C(t,"tag suffix cannot contain flow indicator characters")}i&&!h.test(i)&&C(t,"tag name cannot contain such characters: "+i);try{i=decodeURIComponent(i)}catch(r){C(t,"tag name is malformed: "+i)}return o?t.tag=i:s.call(t.tagMap,n)?t.tag=t.tagMap[n]+i:"!"===n?t.tag="!"+i:"!!"===n?t.tag="tag:yaml.org,2002:"+i:C(t,'undeclared tag handle "'+n+'"'),!0}function D(t){var r,n;if(38!==(n=t.input.charCodeAt(t.position)))return!1;for(null!==t.anchor&&C(t,"duplication of an anchor property"),n=t.input.charCodeAt(++t.position),r=t.position;0!==n&&!g(n)&&!b(n);)n=t.input.charCodeAt(++t.position);return t.position===r&&C(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(r,t.position),!0}function U(t,r,i,a,o){var l,u,d,c,h,f,_,A,E,S=1,I=!1,T=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,l=u=d=4===i||3===i,a&&M(t,!0,-1)&&(I=!0,t.lineIndent>r?S=1:t.lineIndent===r?S=0:t.lineIndent<r&&(S=-1)),1===S)for(;L(t)||D(t);)M(t,!0,-1)?(I=!0,d=l,t.lineIndent>r?S=1:t.lineIndent===r?S=0:t.lineIndent<r&&(S=-1)):d=!1;if(d&&(d=I||o),1!==S&&4!==i||(A=1===i||2===i?r:r+1,E=t.position-t.lineStart,1===S?d&&(B(t,E)||function(t,r,n){var i,a,o,s,l,u,d,c=t.tag,h=t.anchor,f={},p=Object.create(null),b=null,y=null,_=null,v=!1,A=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=f),d=t.input.charCodeAt(t.position);0!==d;){if(v||-1===t.firstTabInLine||(t.position=t.firstTabInLine,C(t,"tab characters must not be used in indentation")),i=t.input.charCodeAt(t.position+1),o=t.line,(63===d||58===d)&&g(i))63===d?(v&&(R(t,f,p,b,y,null,s,l,u),b=y=_=null),A=!0,v=!0,a=!0):v?(v=!1,a=!0):C(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,d=i;else{if(s=t.line,l=t.lineStart,u=t.position,!U(t,n,2,!1,!0))break;if(t.line===o){for(d=t.input.charCodeAt(t.position);m(d);)d=t.input.charCodeAt(++t.position);if(58===d)g(d=t.input.charCodeAt(++t.position))||C(t,"a whitespace character is expected after the key-value separator within a block mapping"),v&&(R(t,f,p,b,y,null,s,l,u),b=y=_=null),A=!0,v=!1,a=!1,b=t.tag,y=t.result;else{if(!A)return t.tag=c,t.anchor=h,!0;C(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!A)return t.tag=c,t.anchor=h,!0;C(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}if((t.line===o||t.lineIndent>r)&&(v&&(s=t.line,l=t.lineStart,u=t.position),U(t,r,4,!0,a)&&(v?y=t.result:_=t.result),v||(R(t,f,p,b,y,_,s,l,u),b=y=_=null),M(t,!0,-1),d=t.input.charCodeAt(t.position)),(t.line===o||t.lineIndent>r)&&0!==d)C(t,"bad indentation of a mapping entry");else if(t.lineIndent<r)break}return v&&R(t,f,p,b,y,null,s,l,u),A&&(t.tag=c,t.anchor=h,t.kind="mapping",t.result=f),A}(t,E,A))||function(t,r){var n,i,a,o,s,l,u,d,c,h,f,p,m=!0,b=t.tag,y=t.anchor,_=Object.create(null);if(91===(p=t.input.charCodeAt(t.position)))s=93,d=!1,o=[];else{if(123!==p)return!1;s=125,d=!0,o={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=o),p=t.input.charCodeAt(++t.position);0!==p;){if(M(t,!0,r),(p=t.input.charCodeAt(t.position))===s)return t.position++,t.tag=b,t.anchor=y,t.kind=d?"mapping":"sequence",t.result=o,!0;m?44===p&&C(t,"expected the node content, but found ','"):C(t,"missed comma between flow collection entries"),f=null,l=u=!1,63===p&&g(t.input.charCodeAt(t.position+1))&&(l=u=!0,t.position++,M(t,!0,r)),n=t.line,i=t.lineStart,a=t.position,U(t,r,1,!1,!0),h=t.tag,c=t.result,M(t,!0,r),p=t.input.charCodeAt(t.position),(u||t.line===n)&&58===p&&(l=!0,p=t.input.charCodeAt(++t.position),M(t,!0,r),U(t,r,1,!1,!0),f=t.result),d?R(t,o,_,h,c,f,n,i,a):l?o.push(R(t,null,_,h,c,f,n,i,a)):o.push(c),M(t,!0,r),44===(p=t.input.charCodeAt(t.position))?(m=!0,p=t.input.charCodeAt(++t.position)):m=!1}C(t,"unexpected end of the stream within a flow collection")}(t,A)?T=!0:(u&&function(t,r){var i,a,o,s,l,u=1,d=!1,c=!1,h=r,f=0,g=!1;if(124===(s=t.input.charCodeAt(t.position)))a=!1;else{if(62!==s)return!1;a=!0}for(t.kind="scalar",t.result="";0!==s;)if(43===(s=t.input.charCodeAt(++t.position))||45===s)1===u?u=43===s?3:2:C(t,"repeat of a chomping mode identifier");else{if(!((o=48<=(l=s)&&l<=57?l-48:-1)>=0))break;0===o?C(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):c?C(t,"repeat of an indentation width identifier"):(h=r+o-1,c=!0)}if(m(s)){do s=t.input.charCodeAt(++t.position);while(m(s));if(35===s)do s=t.input.charCodeAt(++t.position);while(!p(s)&&0!==s)}for(;0!==s;){for(O(t),t.lineIndent=0,s=t.input.charCodeAt(t.position);(!c||t.lineIndent<h)&&32===s;)t.lineIndent++,s=t.input.charCodeAt(++t.position);if(!c&&t.lineIndent>h&&(h=t.lineIndent),p(s))f++;else{if(t.lineIndent<h){3===u?t.result+=n.repeat("\n",d?1+f:f):1===u&&d&&(t.result+="\n");break}for(a?m(s)?(g=!0,t.result+=n.repeat("\n",d?1+f:f)):g?(g=!1,t.result+=n.repeat("\n",f+1)):0===f?d&&(t.result+=" "):t.result+=n.repeat("\n",f):t.result+=n.repeat("\n",d?1+f:f),d=!0,c=!0,f=0,i=t.position;!p(s)&&0!==s;)s=t.input.charCodeAt(++t.position);k(t,i,t.position,!1)}}return!0}(t,A)||function(t,r){var n,i,a;if(39!==(n=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,i=a=t.position;0!==(n=t.input.charCodeAt(t.position));)if(39===n){if(k(t,i,t.position,!0),39!==(n=t.input.charCodeAt(++t.position)))return!0;i=t.position,t.position++,a=t.position}else p(n)?(k(t,i,a,!0),N(t,M(t,!1,r)),i=a=t.position):t.position===t.lineStart&&j(t)?C(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);C(t,"unexpected end of the stream within a single quoted scalar")}(t,A)||function(t,r){var n,i,a,o,s,l,u;if(34!==(l=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;0!==(l=t.input.charCodeAt(t.position));){if(34===l)return k(t,n,t.position,!0),t.position++,!0;if(92===l){if(k(t,n,t.position,!0),p(l=t.input.charCodeAt(++t.position)))M(t,!1,r);else if(l<256&&w[l])t.result+=x[l],t.position++;else if((s=120===(u=l)?2:117===u?4:8*(85===u))>0){for(a=s,o=0;a>0;a--)(s=y(l=t.input.charCodeAt(++t.position)))>=0?o=(o<<4)+s:C(t,"expected hexadecimal character");t.result+=v(o),t.position++}else C(t,"unknown escape sequence");n=i=t.position}else p(l)?(k(t,n,i,!0),N(t,M(t,!1,r)),n=i=t.position):t.position===t.lineStart&&j(t)?C(t,"unexpected end of the document within a double quoted scalar"):(t.position++,i=t.position)}C(t,"unexpected end of the stream within a double quoted scalar")}(t,A)?T=!0:!function(t){var r,n,i;if(42!==(i=t.input.charCodeAt(t.position)))return!1;for(i=t.input.charCodeAt(++t.position),r=t.position;0!==i&&!g(i)&&!b(i);)i=t.input.charCodeAt(++t.position);return t.position===r&&C(t,"name of an alias node must contain at least one character"),n=t.input.slice(r,t.position),s.call(t.anchorMap,n)||C(t,'unidentified alias "'+n+'"'),t.result=t.anchorMap[n],M(t,!0,-1),!0}(t)?function(t,r,n){var i,a,o,s,l,u,d,c,h=t.kind,f=t.result;if(g(c=t.input.charCodeAt(t.position))||b(c)||35===c||38===c||42===c||33===c||124===c||62===c||39===c||34===c||37===c||64===c||96===c||(63===c||45===c)&&(g(i=t.input.charCodeAt(t.position+1))||n&&b(i)))return!1;for(t.kind="scalar",t.result="",a=o=t.position,s=!1;0!==c;){if(58===c){if(g(i=t.input.charCodeAt(t.position+1))||n&&b(i))break}else if(35===c){if(g(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&j(t)||n&&b(c))break;if(p(c)){if(l=t.line,u=t.lineStart,d=t.lineIndent,M(t,!1,-1),t.lineIndent>=r){s=!0,c=t.input.charCodeAt(t.position);continue}t.position=o,t.line=l,t.lineStart=u,t.lineIndent=d;break}}s&&(k(t,a,o,!1),N(t,t.line-l),a=o=t.position,s=!1),m(c)||(o=t.position+1),c=t.input.charCodeAt(++t.position)}return k(t,a,o,!1),!!t.result||(t.kind=h,t.result=f,!1)}(t,A,1===i)&&(T=!0,null===t.tag&&(t.tag="?")):(T=!0,null===t.tag&&null===t.anchor||C(t,"alias node should not have any properties")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===S&&(T=d&&B(t,E))),null===t.tag)null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);else if("?"===t.tag){for(null!==t.result&&"scalar"!==t.kind&&C(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),c=0,h=t.implicitTypes.length;c<h;c+=1)if((_=t.implicitTypes[c]).resolve(t.result)){t.result=_.construct(t.result),t.tag=_.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else if("!"!==t.tag){if(s.call(t.typeMap[t.kind||"fallback"],t.tag))_=t.typeMap[t.kind||"fallback"][t.tag];else for(_=null,c=0,h=(f=t.typeMap.multi[t.kind||"fallback"]).length;c<h;c+=1)if(t.tag.slice(0,f[c].tag.length)===f[c].tag){_=f[c];break}_||C(t,"unknown tag !<"+t.tag+">"),null!==t.result&&_.kind!==t.kind&&C(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+_.kind+'", not "'+t.kind+'"'),_.resolve(t.result,t.tag)?(t.result=_.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):C(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||T}function F(t){var r,n,i,a,o=t.position,l=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(a=t.input.charCodeAt(t.position))&&(M(t,!0,-1),a=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==a));){for(l=!0,a=t.input.charCodeAt(++t.position),r=t.position;0!==a&&!g(a);)a=t.input.charCodeAt(++t.position);for(i=[],(n=t.input.slice(r,t.position)).length<1&&C(t,"directive name must not be less than one character in length");0!==a;){for(;m(a);)a=t.input.charCodeAt(++t.position);if(35===a){do a=t.input.charCodeAt(++t.position);while(0!==a&&!p(a));break}if(p(a))break;for(r=t.position;0!==a&&!g(a);)a=t.input.charCodeAt(++t.position);i.push(t.input.slice(r,t.position))}0!==a&&O(t),s.call(T,n)?T[n](t,n,i):I(t,'unknown document directive "'+n+'"')}M(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,M(t,!0,-1)):l&&C(t,"directives end mark is expected"),U(t,t.lineIndent-1,4,!1,!0),M(t,!0,-1),t.checkLineBreaks&&u.test(t.input.slice(o,t.position))&&I(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&j(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,M(t,!0,-1)):t.position<t.length-1&&C(t,"end of the stream or a document separator is expected")}function z(t,r){r=r||{},0!==(t=String(t)).length&&(10!==t.charCodeAt(t.length-1)&&13!==t.charCodeAt(t.length-1)&&(t+="\n"),65279===t.charCodeAt(0)&&(t=t.slice(1)));var n=new E(t,r),i=t.indexOf("\0");for(-1!==i&&(n.position=i,C(n,"null byte is not allowed in input")),n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)F(n);return n.documents}r.exports.loadAll=function(t,r,n){null!==r&&"object"==typeof r&&void 0===n&&(n=r,r=null);var i=z(t,n);if("function"!=typeof r)return i;for(var a=0,o=i.length;a<o;a+=1)r(i[a])},r.exports.load=function(t,r){var n=z(t,r);if(0!==n.length){if(1===n.length)return n[0];throw new i("expected a single document in the stream, but found more")}}}}),require_dumper=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/lib/dumper.js"(t,r){init_globals();var n=require_common7(),i=require_exception(),a=require_default2(),o=Object.prototype.toString,s=Object.prototype.hasOwnProperty,l=65279,u={0:"\\0",7:"\\a",8:"\\b",9:"\\t",10:"\\n",11:"\\v",12:"\\f",13:"\\r",27:"\\e",34:'\\"',92:"\\\\",133:"\\N",160:"\\_",8232:"\\L",8233:"\\P"},d=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],c=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function h(t){var r,a,o;if(r=t.toString(16).toUpperCase(),t<=255)a="x",o=2;else if(t<=65535)a="u",o=4;else{if(!(t<=0xffffffff))throw new i("code point within a string may not be greater than 0xFFFFFFFF");a="U",o=8}return"\\"+a+n.repeat("0",o-r.length)+r}function f(t){this.schema=t.schema||a,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=n.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=function(t,r){var n,i,a,o,l,u,d;if(null===r)return{};for(n={},a=0,o=(i=Object.keys(r)).length;a<o;a+=1)u=String(r[l=i[a]]),"!!"===l.slice(0,2)&&(l="tag:yaml.org,2002:"+l.slice(2)),(d=t.compiledTypeMap.fallback[l])&&s.call(d.styleAliases,u)&&(u=d.styleAliases[u]),n[l]=u;return n}(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.condenseFlow=t.condenseFlow||!1,this.quotingType='"'===t.quotingType?2:1,this.forceQuotes=t.forceQuotes||!1,this.replacer="function"==typeof t.replacer?t.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function p(t,r){for(var i,a=n.repeat(" ",r),o=0,s=-1,l="",u=t.length;o<u;)-1===(s=t.indexOf("\n",o))?(i=t.slice(o),o=u):(i=t.slice(o,s+1),o=s+1),i.length&&"\n"!==i&&(l+=a),l+=i;return l}function m(t,r){return"\n"+n.repeat(" ",t.indent*r)}function g(t){return 32===t||9===t}function b(t){return 32<=t&&t<=126||161<=t&&t<=55295&&8232!==t&&8233!==t||57344<=t&&t<=65533&&t!==l||65536<=t&&t<=1114111}function y(t){return b(t)&&t!==l&&13!==t&&10!==t}function _(t,r,n){var i=y(t),a=i&&!g(t);return(n?i:i&&44!==t&&91!==t&&93!==t&&123!==t&&125!==t)&&35!==t&&!(58===r&&!a)||y(r)&&!g(r)&&35===t||58===r&&a}function v(t,r){var n,i=t.charCodeAt(r);return i>=55296&&i<=56319&&r+1<t.length&&(n=t.charCodeAt(r+1))>=56320&&n<=57343?1024*(i-55296)+n-56320+65536:i}function A(t){return/^\n* /.test(t)}function w(t,r,n,i,a,o,s,u){var d,c,h=0,f=null,p=!1,m=!1,y=-1!==i,w=-1,x=b(c=v(t,0))&&c!==l&&!g(c)&&45!==c&&63!==c&&58!==c&&44!==c&&91!==c&&93!==c&&123!==c&&125!==c&&35!==c&&38!==c&&42!==c&&33!==c&&124!==c&&61!==c&&62!==c&&39!==c&&34!==c&&37!==c&&64!==c&&96!==c&&function(t){return!g(t)&&58!==t}(v(t,t.length-1));if(r||s)for(d=0;d<t.length;h>=65536?d+=2:d++){if(!b(h=v(t,d)))return 5;x=x&&_(h,f,u),f=h}else{for(d=0;d<t.length;h>=65536?d+=2:d++){if(10===(h=v(t,d)))p=!0,y&&(m=m||d-w-1>i&&" "!==t[w+1],w=d);else if(!b(h))return 5;x=x&&_(h,f,u),f=h}m=m||y&&d-w-1>i&&" "!==t[w+1]}return p||m?n>9&&A(t)?5:s?2===o?5:2:m?4:3:!x||s||a(t)?2===o?5:2:1}function x(t,r,n,a,o){t.dump=function(){if(0===r.length)return 2===t.quotingType?'""':"''";if(!t.noCompatMode&&(-1!==d.indexOf(r)||c.test(r)))return 2===t.quotingType?'"'+r+'"':"'"+r+"'";var s=t.indent*Math.max(1,n),l=-1===t.lineWidth?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-s);switch(w(r,a||t.flowLevel>-1&&n>=t.flowLevel,t.indent,l,function(r){return function(t,r){var n,i;for(n=0,i=t.implicitTypes.length;n<i;n+=1)if(t.implicitTypes[n].resolve(r))return!0;return!1}(t,r)},t.quotingType,t.forceQuotes&&!a,o)){case 1:return r;case 2:return"'"+r.replace(/'/g,"''")+"'";case 3:return"|"+E(r,t.indent)+S(p(r,s));case 4:return">"+E(r,t.indent)+S(p(function(t,r){for(var n,i,a,o=/(\n+)([^\n]*)/g,s=(o.lastIndex=n=-1!==(n=t.indexOf("\n"))?n:t.length,C(t.slice(0,n),r)),l="\n"===t[0]||" "===t[0];a=o.exec(t);){var u=a[1],d=a[2];i=" "===d[0],s+=u+(l||i||""===d?"":"\n")+C(d,r),l=i}return s}(r,l),s));case 5:return'"'+function(t){for(var r,n="",i=0,a=0;a<t.length;i>=65536?a+=2:a++)!(r=u[i=v(t,a)])&&b(i)?(n+=t[a],i>=65536&&(n+=t[a+1])):n+=r||h(i);return n}(r)+'"';default:throw new i("impossible error: invalid scalar style")}}()}function E(t,r){var n=A(t)?String(r):"",i="\n"===t[t.length-1];return n+(i&&("\n"===t[t.length-2]||"\n"===t)?"+":i?"":"-")+"\n"}function S(t){return"\n"===t[t.length-1]?t.slice(0,-1):t}function C(t,r){if(""===t||" "===t[0])return t;for(var n,i,a=/ [^ ]/g,o=0,s=0,l=0,u="";n=a.exec(t);)(l=n.index)-o>r&&(i=s>o?s:l,u+="\n"+t.slice(o,i),o=i+1),s=l;return u+="\n",t.length-o>r&&s>o?u+=t.slice(o,s)+"\n"+t.slice(s+1):u+=t.slice(o),u.slice(1)}function I(t,r,n,i){var a,o,s,l="",u=t.tag;for(a=0,o=n.length;a<o;a+=1)s=n[a],t.replacer&&(s=t.replacer.call(n,String(a),s)),(k(t,r+1,s,!0,!0,!1,!0)||void 0===s&&k(t,r+1,null,!0,!0,!1,!0))&&(i&&""===l||(l+=m(t,r)),t.dump&&10===t.dump.charCodeAt(0)?l+="-":l+="- ",l+=t.dump);t.tag=u,t.dump=l||"[]"}function T(t,r,n){var a,l,u,d,c,h;for(u=0,d=(l=n?t.explicitTypes:t.implicitTypes).length;u<d;u+=1)if(((c=l[u]).instanceOf||c.predicate)&&(!c.instanceOf||"object"==typeof r&&r instanceof c.instanceOf)&&(!c.predicate||c.predicate(r))){if(n?c.multi&&c.representName?t.tag=c.representName(r):t.tag=c.tag:t.tag="?",c.represent){if(h=t.styleMap[c.tag]||c.defaultStyle,"[object Function]"===o.call(c.represent))a=c.represent(r,h);else{if(!s.call(c.represent,h))throw new i("!<"+c.tag+'> tag resolver accepts not "'+h+'" style');a=c.represent[h](r,h)}t.dump=a}return!0}return!1}function k(t,r,n,a,s,l,u){t.tag=null,t.dump=n,T(t,n,!1)||T(t,n,!0);var d,c=o.call(t.dump),h=a;a&&(a=t.flowLevel<0||t.flowLevel>r);var f,p,g="[object Object]"===c||"[object Array]"===c;if(g&&(p=-1!==(f=t.duplicates.indexOf(n))),(null!==t.tag&&"?"!==t.tag||p||2!==t.indent&&r>0)&&(s=!1),p&&t.usedDuplicates[f])t.dump="*ref_"+f;else{if(g&&p&&!t.usedDuplicates[f]&&(t.usedDuplicates[f]=!0),"[object Object]"===c)a&&0!==Object.keys(t.dump).length?(!function(t,r,n,a){var o,s,l,u,d,c,h="",f=t.tag,p=Object.keys(n);if(!0===t.sortKeys)p.sort();else if("function"==typeof t.sortKeys)p.sort(t.sortKeys);else if(t.sortKeys)throw new i("sortKeys must be a boolean or a function");for(o=0,s=p.length;o<s;o+=1)c="",a&&""===h||(c+=m(t,r)),u=n[l=p[o]],t.replacer&&(u=t.replacer.call(n,l,u)),k(t,r+1,l,!0,!0,!0)&&((d=null!==t.tag&&"?"!==t.tag||t.dump&&t.dump.length>1024)&&(t.dump&&10===t.dump.charCodeAt(0)?c+="?":c+="? "),c+=t.dump,d&&(c+=m(t,r)),k(t,r+1,u,!0,d)&&(t.dump&&10===t.dump.charCodeAt(0)?c+=":":c+=": ",h+=c+=t.dump));t.tag=f,t.dump=h||"{}"}(t,r,t.dump,s),p&&(t.dump="&ref_"+f+t.dump)):(!function(t,r,n){var i,a,o,s,l,u="",d=t.tag,c=Object.keys(n);for(i=0,a=c.length;i<a;i+=1)l="",""!==u&&(l+=", "),t.condenseFlow&&(l+='"'),s=n[o=c[i]],t.replacer&&(s=t.replacer.call(n,o,s)),k(t,r,o,!1,!1)&&(t.dump.length>1024&&(l+="? "),l+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),k(t,r,s,!1,!1)&&(u+=l+=t.dump));t.tag=d,t.dump="{"+u+"}"}(t,r,t.dump),p&&(t.dump="&ref_"+f+" "+t.dump));else if("[object Array]"===c)a&&0!==t.dump.length?(t.noArrayIndent&&!u&&r>0?I(t,r-1,t.dump,s):I(t,r,t.dump,s),p&&(t.dump="&ref_"+f+t.dump)):(!function(t,r,n){var i,a,o,s="",l=t.tag;for(i=0,a=n.length;i<a;i+=1)o=n[i],t.replacer&&(o=t.replacer.call(n,String(i),o)),(k(t,r,o,!1,!1)||void 0===o&&k(t,r,null,!1,!1))&&(""!==s&&(s+=","+(t.condenseFlow?"":" ")),s+=t.dump);t.tag=l,t.dump="["+s+"]"}(t,r,t.dump),p&&(t.dump="&ref_"+f+" "+t.dump));else{if("[object String]"!==c){if("[object Undefined]"===c||t.skipInvalid)return!1;throw new i("unacceptable kind of an object to dump "+c)}"?"!==t.tag&&x(t,t.dump,r,l,h)}null!==t.tag&&"?"!==t.tag&&(d=encodeURI("!"===t.tag[0]?t.tag.slice(1):t.tag).replace(/!/g,"%21"),d="!"===t.tag[0]?"!"+d:"tag:yaml.org,2002:"===d.slice(0,18)?"!!"+d.slice(18):"!<"+d+">",t.dump=d+" "+t.dump)}return!0}function P(t,r){var n,i,a=[],o=[];for(R(t,a,o),n=0,i=o.length;n<i;n+=1)r.duplicates.push(a[o[n]]);r.usedDuplicates=Array(i)}function R(t,r,n){var i,a,o;if(null!==t&&"object"==typeof t)if(-1!==(a=r.indexOf(t)))-1===n.indexOf(a)&&n.push(a);else if(r.push(t),Array.isArray(t))for(a=0,o=t.length;a<o;a+=1)R(t[a],r,n);else for(a=0,o=(i=Object.keys(t)).length;a<o;a+=1)R(t[i[a]],r,n)}r.exports.dump=function(t,r){var n=new f(r=r||{});n.noRefs||P(t,n);var i=t;return n.replacer&&(i=n.replacer.call({"":i},"",i)),k(n,0,i,!0,!0)?n.dump+"\n":""}}}),require_js_yaml=__commonJS({"../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/index.js"(t,r){init_globals();var n=require_loader(),i=require_dumper();function a(t,r){return function(){throw Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+r+" instead, which is now safe by default.")}}r.exports.Type=require_type2(),r.exports.Schema=require_schema(),r.exports.FAILSAFE_SCHEMA=require_failsafe(),r.exports.JSON_SCHEMA=require_json2(),r.exports.CORE_SCHEMA=require_core6(),r.exports.DEFAULT_SCHEMA=require_default2(),r.exports.load=n.load,r.exports.loadAll=n.loadAll,r.exports.dump=i.dump,r.exports.YAMLException=require_exception(),r.exports.types={binary:require_binary(),float:require_float(),map:require_map2(),null:require_null2(),pairs:require_pairs(),set:require_set2(),timestamp:require_timestamp(),bool:require_bool(),int:require_int(),merge:require_merge(),omap:require_omap(),seq:require_seq(),str:require_str()},r.exports.safeLoad=a("safeLoad","load"),r.exports.safeLoadAll=a("safeLoadAll","loadAll"),r.exports.safeDump=a("safeDump","dump")}}),require_constants11=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/internal/constants.js"(t,r){init_globals(),r.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:16,MAX_SAFE_INTEGER:Number.MAX_SAFE_INTEGER||0x1fffffffffffff,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:"2.0.0",FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}}}),require_debug2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/internal/debug.js"(t,r){init_globals(),r.exports="object"==typeof import_browser.default&&import_browser.default.env&&import_browser.default.env.NODE_DEBUG&&/\bsemver\b/i.test(import_browser.default.env.NODE_DEBUG)?(...t)=>import_console_browserify.default.error("SEMVER",...t):()=>{}}}),require_re2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/internal/re.js"(t,r){init_globals();var{MAX_SAFE_COMPONENT_LENGTH:n}=require_constants11(),i=require_debug2(),a=(t=r.exports={}).re=[],o=t.safeRe=[],s=t.src=[],l=t.t={},u=0,d=(t,r,n)=>{let d=r.split("\\s*").join("\\s{0,1}").split("\\s+").join("\\s"),c=u++;i(t,c,r),l[t]=c,s[c]=r,a[c]=new RegExp(r,n?"g":void 0),o[c]=new RegExp(d,n?"g":void 0)};d("NUMERICIDENTIFIER","0|[1-9]\\d*"),d("NUMERICIDENTIFIERLOOSE","[0-9]+"),d("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*"),d("MAINVERSION",`(${s[l.NUMERICIDENTIFIER]})\\.(${s[l.NUMERICIDENTIFIER]})\\.(${s[l.NUMERICIDENTIFIER]})`),d("MAINVERSIONLOOSE",`(${s[l.NUMERICIDENTIFIERLOOSE]})\\.(${s[l.NUMERICIDENTIFIERLOOSE]})\\.(${s[l.NUMERICIDENTIFIERLOOSE]})`),d("PRERELEASEIDENTIFIER",`(?:${s[l.NUMERICIDENTIFIER]}|${s[l.NONNUMERICIDENTIFIER]})`),d("PRERELEASEIDENTIFIERLOOSE",`(?:${s[l.NUMERICIDENTIFIERLOOSE]}|${s[l.NONNUMERICIDENTIFIER]})`),d("PRERELEASE",`(?:-(${s[l.PRERELEASEIDENTIFIER]}(?:\\.${s[l.PRERELEASEIDENTIFIER]})*))`),d("PRERELEASELOOSE",`(?:-?(${s[l.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${s[l.PRERELEASEIDENTIFIERLOOSE]})*))`),d("BUILDIDENTIFIER","[0-9A-Za-z-]+"),d("BUILD",`(?:\\+(${s[l.BUILDIDENTIFIER]}(?:\\.${s[l.BUILDIDENTIFIER]})*))`),d("FULLPLAIN",`v?${s[l.MAINVERSION]}${s[l.PRERELEASE]}?${s[l.BUILD]}?`),d("FULL",`^${s[l.FULLPLAIN]}$`),d("LOOSEPLAIN",`[v=\\s]*${s[l.MAINVERSIONLOOSE]}${s[l.PRERELEASELOOSE]}?${s[l.BUILD]}?`),d("LOOSE",`^${s[l.LOOSEPLAIN]}$`),d("GTLT","((?:<|>)?=?)"),d("XRANGEIDENTIFIERLOOSE",`${s[l.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),d("XRANGEIDENTIFIER",`${s[l.NUMERICIDENTIFIER]}|x|X|\\*`),d("XRANGEPLAIN",`[v=\\s]*(${s[l.XRANGEIDENTIFIER]})(?:\\.(${s[l.XRANGEIDENTIFIER]})(?:\\.(${s[l.XRANGEIDENTIFIER]})(?:${s[l.PRERELEASE]})?${s[l.BUILD]}?)?)?`),d("XRANGEPLAINLOOSE",`[v=\\s]*(${s[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${s[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${s[l.XRANGEIDENTIFIERLOOSE]})(?:${s[l.PRERELEASELOOSE]})?${s[l.BUILD]}?)?)?`),d("XRANGE",`^${s[l.GTLT]}\\s*${s[l.XRANGEPLAIN]}$`),d("XRANGELOOSE",`^${s[l.GTLT]}\\s*${s[l.XRANGEPLAINLOOSE]}$`),d("COERCE",`(^|[^\\d])(\\d{1,${n}})(?:\\.(\\d{1,${n}}))?(?:\\.(\\d{1,${n}}))?(?:$|[^\\d])`),d("COERCERTL",s[l.COERCE],!0),d("LONETILDE","(?:~>?)"),d("TILDETRIM",`(\\s*)${s[l.LONETILDE]}\\s+`,!0),t.tildeTrimReplace="$1~",d("TILDE",`^${s[l.LONETILDE]}${s[l.XRANGEPLAIN]}$`),d("TILDELOOSE",`^${s[l.LONETILDE]}${s[l.XRANGEPLAINLOOSE]}$`),d("LONECARET","(?:\\^)"),d("CARETTRIM",`(\\s*)${s[l.LONECARET]}\\s+`,!0),t.caretTrimReplace="$1^",d("CARET",`^${s[l.LONECARET]}${s[l.XRANGEPLAIN]}$`),d("CARETLOOSE",`^${s[l.LONECARET]}${s[l.XRANGEPLAINLOOSE]}$`),d("COMPARATORLOOSE",`^${s[l.GTLT]}\\s*(${s[l.LOOSEPLAIN]})$|^$`),d("COMPARATOR",`^${s[l.GTLT]}\\s*(${s[l.FULLPLAIN]})$|^$`),d("COMPARATORTRIM",`(\\s*)${s[l.GTLT]}\\s*(${s[l.LOOSEPLAIN]}|${s[l.XRANGEPLAIN]})`,!0),t.comparatorTrimReplace="$1$2$3",d("HYPHENRANGE",`^\\s*(${s[l.XRANGEPLAIN]})\\s+-\\s+(${s[l.XRANGEPLAIN]})\\s*$`),d("HYPHENRANGELOOSE",`^\\s*(${s[l.XRANGEPLAINLOOSE]})\\s+-\\s+(${s[l.XRANGEPLAINLOOSE]})\\s*$`),d("STAR","(<|>)?=?\\s*\\*"),d("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),d("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")}}),require_parse_options2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/internal/parse-options.js"(t,r){init_globals();var n=Object.freeze({loose:!0}),i=Object.freeze({});r.exports=t=>t?"object"!=typeof t?n:t:i}}),require_identifiers2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/internal/identifiers.js"(t,r){init_globals();var n=/^[0-9]+$/,i=(t,r)=>{let i=n.test(t),a=n.test(r);return i&&a&&(t*=1,r*=1),t===r?0:i&&!a?-1:a&&!i?1:t<r?-1:1};r.exports={compareIdentifiers:i,rcompareIdentifiers:(t,r)=>i(r,t)}}}),require_semver3=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/classes/semver.js"(t,r){init_globals();var n=require_debug2(),{MAX_LENGTH:i,MAX_SAFE_INTEGER:a}=require_constants11(),{safeRe:o,t:s}=require_re2(),l=require_parse_options2(),{compareIdentifiers:u}=require_identifiers2();r.exports=class t{constructor(r,u){if(u=l(u),r instanceof t){if(!!u.loose===r.loose&&!!u.includePrerelease===r.includePrerelease)return r;r=r.version}else if("string"!=typeof r)throw TypeError(`Invalid version. Must be a string. Got type "${typeof r}".`);if(r.length>i)throw TypeError(`version is longer than ${i} characters`);n("SemVer",r,u),this.options=u,this.loose=!!u.loose,this.includePrerelease=!!u.includePrerelease;let d=r.trim().match(u.loose?o[s.LOOSE]:o[s.FULL]);if(!d)throw TypeError(`Invalid Version: ${r}`);if(this.raw=r,this.major=+d[1],this.minor=+d[2],this.patch=+d[3],this.major>a||this.major<0)throw TypeError("Invalid major version");if(this.minor>a||this.minor<0)throw TypeError("Invalid minor version");if(this.patch>a||this.patch<0)throw TypeError("Invalid patch version");d[4]?this.prerelease=d[4].split(".").map(t=>{if(/^[0-9]+$/.test(t)){let r=+t;if(r>=0&&r<a)return r}return t}):this.prerelease=[],this.build=d[5]?d[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(r){if(n("SemVer.compare",this.version,this.options,r),!(r instanceof t)){if("string"==typeof r&&r===this.version)return 0;r=new t(r,this.options)}return r.version===this.version?0:this.compareMain(r)||this.comparePre(r)}compareMain(r){return r instanceof t||(r=new t(r,this.options)),u(this.major,r.major)||u(this.minor,r.minor)||u(this.patch,r.patch)}comparePre(r){if(r instanceof t||(r=new t(r,this.options)),this.prerelease.length&&!r.prerelease.length)return -1;if(!this.prerelease.length&&r.prerelease.length)return 1;if(!this.prerelease.length&&!r.prerelease.length)return 0;let i=0;do{let t=this.prerelease[i],a=r.prerelease[i];if(n("prerelease compare",i,t,a),void 0===t&&void 0===a)return 0;if(void 0===a)return 1;if(void 0===t)return -1;if(t!==a)return u(t,a)}while(++i)}compareBuild(r){r instanceof t||(r=new t(r,this.options));let i=0;do{let t=this.build[i],a=r.build[i];if(n("prerelease compare",i,t,a),void 0===t&&void 0===a)return 0;if(void 0===a)return 1;if(void 0===t)return -1;if(t!==a)return u(t,a)}while(++i)}inc(t,r,n){switch(t){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,n);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,n);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,n),this.inc("pre",r,n);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",r,n),this.inc("pre",r,n);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":{let t=+!!Number(n);if(!r&&!1===n)throw Error("invalid increment argument: identifier is empty");if(0===this.prerelease.length)this.prerelease=[t];else{let i=this.prerelease.length;for(;--i>=0;)"number"==typeof this.prerelease[i]&&(this.prerelease[i]++,i=-2);if(-1===i){if(r===this.prerelease.join(".")&&!1===n)throw Error("invalid increment argument: identifier already exists");this.prerelease.push(t)}}if(r){let i=[r,t];!1===n&&(i=[r]),0===u(this.prerelease[0],r)?isNaN(this.prerelease[1])&&(this.prerelease=i):this.prerelease=i}break}default:throw Error(`invalid increment argument: ${t}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}}}),require_parse4=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/parse.js"(t,r){init_globals();var n=require_semver3();r.exports=(t,r,i=!1)=>{if(t instanceof n)return t;try{return new n(t,r)}catch(t){if(!i)return null;throw t}}}}),require_valid3=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/valid.js"(t,r){init_globals();var n=require_parse4();r.exports=(t,r)=>{let i=n(t,r);return i?i.version:null}}}),require_clean2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/clean.js"(t,r){init_globals();var n=require_parse4();r.exports=(t,r)=>{let i=n(t.trim().replace(/^[=v]+/,""),r);return i?i.version:null}}}),require_inc2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/inc.js"(t,r){init_globals();var n=require_semver3();r.exports=(t,r,i,a,o)=>{"string"==typeof i&&(o=a,a=i,i=void 0);try{return new n(t instanceof n?t.version:t,i).inc(r,a,o).version}catch(t){return null}}}}),require_diff2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/diff.js"(t,r){init_globals();var n=require_parse4();r.exports=(t,r)=>{let i=n(t,null,!0),a=n(r,null,!0),o=i.compare(a);if(0===o)return null;let s=o>0,l=s?i:a,u=s?a:i,d=!!l.prerelease.length;if(u.prerelease.length&&!d)return u.patch||u.minor?l.patch?"patch":l.minor?"minor":"major":"major";let c=d?"pre":"";return i.major!==a.major?c+"major":i.minor!==a.minor?c+"minor":i.patch!==a.patch?c+"patch":"prerelease"}}}),require_major2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/major.js"(t,r){init_globals();var n=require_semver3();r.exports=(t,r)=>new n(t,r).major}}),require_minor2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/minor.js"(t,r){init_globals();var n=require_semver3();r.exports=(t,r)=>new n(t,r).minor}}),require_patch2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/patch.js"(t,r){init_globals();var n=require_semver3();r.exports=(t,r)=>new n(t,r).patch}}),require_prerelease2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/prerelease.js"(t,r){init_globals();var n=require_parse4();r.exports=(t,r)=>{let i=n(t,r);return i&&i.prerelease.length?i.prerelease:null}}}),require_compare2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/compare.js"(t,r){init_globals();var n=require_semver3();r.exports=(t,r,i)=>new n(t,i).compare(new n(r,i))}}),require_rcompare2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/rcompare.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r,i)=>n(r,t,i)}}),require_compare_loose2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/compare-loose.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r)=>n(t,r,!0)}}),require_compare_build2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/compare-build.js"(t,r){init_globals();var n=require_semver3();r.exports=(t,r,i)=>{let a=new n(t,i),o=new n(r,i);return a.compare(o)||a.compareBuild(o)}}}),require_sort2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/sort.js"(t,r){init_globals();var n=require_compare_build2();r.exports=(t,r)=>t.sort((t,i)=>n(t,i,r))}}),require_rsort2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/rsort.js"(t,r){init_globals();var n=require_compare_build2();r.exports=(t,r)=>t.sort((t,i)=>n(i,t,r))}}),require_gt2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/gt.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r,i)=>n(t,r,i)>0}}),require_lt2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/lt.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r,i)=>0>n(t,r,i)}}),require_eq2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/eq.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r,i)=>0===n(t,r,i)}}),require_neq2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/neq.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r,i)=>0!==n(t,r,i)}}),require_gte2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/gte.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r,i)=>n(t,r,i)>=0}}),require_lte2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/lte.js"(t,r){init_globals();var n=require_compare2();r.exports=(t,r,i)=>0>=n(t,r,i)}}),require_cmp2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/cmp.js"(t,r){init_globals();var n=require_eq2(),i=require_neq2(),a=require_gt2(),o=require_gte2(),s=require_lt2(),l=require_lte2();r.exports=(t,r,u,d)=>{switch(r){case"===":return"object"==typeof t&&(t=t.version),"object"==typeof u&&(u=u.version),t===u;case"!==":return"object"==typeof t&&(t=t.version),"object"==typeof u&&(u=u.version),t!==u;case"":case"=":case"==":return n(t,u,d);case"!=":return i(t,u,d);case">":return a(t,u,d);case">=":return o(t,u,d);case"<":return s(t,u,d);case"<=":return l(t,u,d);default:throw TypeError(`Invalid operator: ${r}`)}}}}),require_coerce2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/coerce.js"(t,r){init_globals();var n=require_semver3(),i=require_parse4(),{safeRe:a,t:o}=require_re2();r.exports=(t,r)=>{if(t instanceof n)return t;if("number"==typeof t&&(t=String(t)),"string"!=typeof t)return null;let s=null;if((r=r||{}).rtl){let r;for(;(r=a[o.COERCERTL].exec(t))&&(!s||s.index+s[0].length!==t.length);)s&&r.index+r[0].length===s.index+s[0].length||(s=r),a[o.COERCERTL].lastIndex=r.index+r[1].length+r[2].length;a[o.COERCERTL].lastIndex=-1}else s=t.match(a[o.COERCE]);return null===s?null:i(`${s[2]}.${s[3]||"0"}.${s[4]||"0"}`,r)}}}),require_iterator=__commonJS({"../../node_modules/.pnpm/yallist@4.0.0/node_modules/yallist/iterator.js"(t,r){init_globals(),r.exports=function(t){t.prototype[Symbol.iterator]=function*(){for(let t=this.head;t;t=t.next)yield t.value}}}}),require_yallist=__commonJS({"../../node_modules/.pnpm/yallist@4.0.0/node_modules/yallist/yallist.js"(t,r){function n(t){var r=this;if(r instanceof n||(r=new n),r.tail=null,r.head=null,r.length=0,t&&"function"==typeof t.forEach)t.forEach(function(t){r.push(t)});else if(arguments.length>0)for(var i=0,a=arguments.length;i<a;i++)r.push(arguments[i]);return r}function i(t,r,n){var i=r===t.head?new s(n,null,r,t):new s(n,r,r.next,t);return null===i.next&&(t.tail=i),null===i.prev&&(t.head=i),t.length++,i}function a(t,r){t.tail=new s(r,t.tail,null,t),t.head||(t.head=t.tail),t.length++}function o(t,r){t.head=new s(r,null,t.head,t),t.tail||(t.tail=t.head),t.length++}function s(t,r,n,i){if(!(this instanceof s))return new s(t,r,n,i);this.list=i,this.value=t,r?(r.next=this,this.prev=r):this.prev=null,n?(n.prev=this,this.next=n):this.next=null}init_globals(),r.exports=n,n.Node=s,n.create=n,n.prototype.removeNode=function(t){if(t.list!==this)throw Error("removing node which does not belong to this list");var r=t.next,n=t.prev;return r&&(r.prev=n),n&&(n.next=r),t===this.head&&(this.head=r),t===this.tail&&(this.tail=n),t.list.length--,t.next=null,t.prev=null,t.list=null,r},n.prototype.unshiftNode=function(t){if(t!==this.head){t.list&&t.list.removeNode(t);var r=this.head;t.list=this,t.next=r,r&&(r.prev=t),this.head=t,this.tail||(this.tail=t),this.length++}},n.prototype.pushNode=function(t){if(t!==this.tail){t.list&&t.list.removeNode(t);var r=this.tail;t.list=this,t.prev=r,r&&(r.next=t),this.tail=t,this.head||(this.head=t),this.length++}},n.prototype.push=function(){for(var t=0,r=arguments.length;t<r;t++)a(this,arguments[t]);return this.length},n.prototype.unshift=function(){for(var t=0,r=arguments.length;t<r;t++)o(this,arguments[t]);return this.length},n.prototype.pop=function(){if(this.tail){var t=this.tail.value;return this.tail=this.tail.prev,this.tail?this.tail.next=null:this.head=null,this.length--,t}},n.prototype.shift=function(){if(this.head){var t=this.head.value;return this.head=this.head.next,this.head?this.head.prev=null:this.tail=null,this.length--,t}},n.prototype.forEach=function(t,r){r=r||this;for(var n=this.head,i=0;null!==n;i++)t.call(r,n.value,i,this),n=n.next},n.prototype.forEachReverse=function(t,r){r=r||this;for(var n=this.tail,i=this.length-1;null!==n;i--)t.call(r,n.value,i,this),n=n.prev},n.prototype.get=function(t){for(var r=0,n=this.head;null!==n&&r<t;r++)n=n.next;if(r===t&&null!==n)return n.value},n.prototype.getReverse=function(t){for(var r=0,n=this.tail;null!==n&&r<t;r++)n=n.prev;if(r===t&&null!==n)return n.value},n.prototype.map=function(t,r){r=r||this;for(var i=new n,a=this.head;null!==a;)i.push(t.call(r,a.value,this)),a=a.next;return i},n.prototype.mapReverse=function(t,r){r=r||this;for(var i=new n,a=this.tail;null!==a;)i.push(t.call(r,a.value,this)),a=a.prev;return i},n.prototype.reduce=function(t,r){var n,i=this.head;if(arguments.length>1)n=r;else{if(!this.head)throw TypeError("Reduce of empty list with no initial value");i=this.head.next,n=this.head.value}for(var a=0;null!==i;a++)n=t(n,i.value,a),i=i.next;return n},n.prototype.reduceReverse=function(t,r){var n,i=this.tail;if(arguments.length>1)n=r;else{if(!this.tail)throw TypeError("Reduce of empty list with no initial value");i=this.tail.prev,n=this.tail.value}for(var a=this.length-1;null!==i;a--)n=t(n,i.value,a),i=i.prev;return n},n.prototype.toArray=function(){for(var t=Array(this.length),r=0,n=this.head;null!==n;r++)t[r]=n.value,n=n.next;return t},n.prototype.toArrayReverse=function(){for(var t=Array(this.length),r=0,n=this.tail;null!==n;r++)t[r]=n.value,n=n.prev;return t},n.prototype.slice=function(t,r){(r=r||this.length)<0&&(r+=this.length),(t=t||0)<0&&(t+=this.length);var i=new n;if(r<t||r<0)return i;t<0&&(t=0),r>this.length&&(r=this.length);for(var a=0,o=this.head;null!==o&&a<t;a++)o=o.next;for(;null!==o&&a<r;a++,o=o.next)i.push(o.value);return i},n.prototype.sliceReverse=function(t,r){(r=r||this.length)<0&&(r+=this.length),(t=t||0)<0&&(t+=this.length);var i=new n;if(r<t||r<0)return i;t<0&&(t=0),r>this.length&&(r=this.length);for(var a=this.length,o=this.tail;null!==o&&a>r;a--)o=o.prev;for(;null!==o&&a>t;a--,o=o.prev)i.push(o.value);return i},n.prototype.splice=function(t,r,...n){t>this.length&&(t=this.length-1),t<0&&(t=this.length+t);for(var a=0,o=this.head;null!==o&&a<t;a++)o=o.next;var s=[];for(a=0;o&&a<r;a++)s.push(o.value),o=this.removeNode(o);for(null===o&&(o=this.tail),o!==this.head&&o!==this.tail&&(o=o.prev),a=0;a<n.length;a++)o=i(this,o,n[a]);return s},n.prototype.reverse=function(){for(var t=this.head,r=this.tail,n=t;null!==n;n=n.prev){var i=n.prev;n.prev=n.next,n.next=i}return this.head=r,this.tail=t,this};try{require_iterator()(n)}catch(t){}}}),require_lru_cache=__commonJS({"../../node_modules/.pnpm/lru-cache@6.0.0/node_modules/lru-cache/index.js"(t,r){init_globals();var n=require_yallist(),i=Symbol("max"),a=Symbol("length"),o=Symbol("lengthCalculator"),s=Symbol("allowStale"),l=Symbol("maxAge"),u=Symbol("dispose"),d=Symbol("noDisposeOnSet"),c=Symbol("lruList"),h=Symbol("cache"),f=Symbol("updateAgeOnGet"),p=()=>1,m=(t,r,n)=>{let i=t[h].get(r);if(i){let r=i.value;if(g(t,r)){if(y(t,i),!t[s])return}else n&&(t[f]&&(i.value.now=Date.now()),t[c].unshiftNode(i));return r.value}},g=(t,r)=>{if(!r||!r.maxAge&&!t[l])return!1;let n=Date.now()-r.now;return r.maxAge?n>r.maxAge:t[l]&&n>t[l]},b=t=>{if(t[a]>t[i])for(let r=t[c].tail;t[a]>t[i]&&null!==r;){let n=r.prev;y(t,r),r=n}},y=(t,r)=>{if(r){let n=r.value;t[u]&&t[u](n.key,n.value),t[a]-=n.length,t[h].delete(n.key),t[c].removeNode(r)}},_=class{constructor(t,r,n,i,a){this.key=t,this.value=r,this.length=n,this.now=i,this.maxAge=a||0}},v=(t,r,n,i)=>{let a=n.value;g(t,a)&&(y(t,n),t[s]||(a=void 0)),a&&r.call(i,a.value,a.key,t)};r.exports=class{constructor(t){if("number"==typeof t&&(t={max:t}),t||(t={}),t.max&&("number"!=typeof t.max||t.max<0))throw TypeError("max must be a non-negative number");this[i]=t.max||1/0;let r=t.length||p;if(this[o]="function"!=typeof r?p:r,this[s]=t.stale||!1,t.maxAge&&"number"!=typeof t.maxAge)throw TypeError("maxAge must be a number");this[l]=t.maxAge||0,this[u]=t.dispose,this[d]=t.noDisposeOnSet||!1,this[f]=t.updateAgeOnGet||!1,this.reset()}set max(t){if("number"!=typeof t||t<0)throw TypeError("max must be a non-negative number");this[i]=t||1/0,b(this)}get max(){return this[i]}set allowStale(t){this[s]=!!t}get allowStale(){return this[s]}set maxAge(t){if("number"!=typeof t)throw TypeError("maxAge must be a non-negative number");this[l]=t,b(this)}get maxAge(){return this[l]}set lengthCalculator(t){"function"!=typeof t&&(t=p),t!==this[o]&&(this[o]=t,this[a]=0,this[c].forEach(t=>{t.length=this[o](t.value,t.key),this[a]+=t.length})),b(this)}get lengthCalculator(){return this[o]}get length(){return this[a]}get itemCount(){return this[c].length}rforEach(t,r){r=r||this;for(let n=this[c].tail;null!==n;){let i=n.prev;v(this,t,n,r),n=i}}forEach(t,r){r=r||this;for(let n=this[c].head;null!==n;){let i=n.next;v(this,t,n,r),n=i}}keys(){return this[c].toArray().map(t=>t.key)}values(){return this[c].toArray().map(t=>t.value)}reset(){this[u]&&this[c]&&this[c].length&&this[c].forEach(t=>this[u](t.key,t.value)),this[h]=new Map,this[c]=new n,this[a]=0}dump(){return this[c].map(t=>!g(this,t)&&{k:t.key,v:t.value,e:t.now+(t.maxAge||0)}).toArray().filter(t=>t)}dumpLru(){return this[c]}set(t,r,n){if((n=n||this[l])&&"number"!=typeof n)throw TypeError("maxAge must be a number");let s=n?Date.now():0,f=this[o](r,t);if(this[h].has(t)){if(f>this[i])return y(this,this[h].get(t)),!1;let o=this[h].get(t).value;return this[u]&&(this[d]||this[u](t,o.value)),o.now=s,o.maxAge=n,o.value=r,this[a]+=f-o.length,o.length=f,this.get(t),b(this),!0}let p=new _(t,r,f,s,n);return p.length>this[i]?(this[u]&&this[u](t,r),!1):(this[a]+=p.length,this[c].unshift(p),this[h].set(t,this[c].head),b(this),!0)}has(t){return!!this[h].has(t)&&!g(this,this[h].get(t).value)}get(t){return m(this,t,!0)}peek(t){return m(this,t,!1)}pop(){let t=this[c].tail;return t?(y(this,t),t.value):null}del(t){y(this,this[h].get(t))}load(t){this.reset();let r=Date.now();for(let n=t.length-1;n>=0;n--){let i=t[n],a=i.e||0;if(0===a)this.set(i.k,i.v);else{let t=a-r;t>0&&this.set(i.k,i.v,t)}}}prune(){this[h].forEach((t,r)=>m(this,r,!1))}}}}),require_range3=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/classes/range.js"(t,r){init_globals(),r.exports=class t{constructor(r,n){if(n=i(n),r instanceof t)return!!n.loose===r.loose&&!!n.includePrerelease===r.includePrerelease?r:new t(r.raw,n);if(r instanceof a)return this.raw=r.value,this.set=[[r]],this.format(),this;if(this.options=n,this.loose=!!n.loose,this.includePrerelease=!!n.includePrerelease,this.raw=r.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map(t=>this.parseRange(t)).filter(t=>t.length),!this.set.length)throw TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let t=this.set[0];if(this.set=this.set.filter(t=>!m(t[0])),0===this.set.length)this.set=[t];else if(this.set.length>1){for(let t of this.set)if(1===t.length&&g(t[0])){this.set=[t];break}}}this.format()}format(){return this.range=this.set.map(t=>t.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(t){let r=((this.options.includePrerelease&&f)|(this.options.loose&&p))+":"+t,i=n.get(r);if(i)return i;let s=this.options.loose,g=s?l[u.HYPHENRANGELOOSE]:l[u.HYPHENRANGE];o("hyphen replace",t=t.replace(g,T(this.options.includePrerelease))),o("comparator trim",t=t.replace(l[u.COMPARATORTRIM],d));let b=(t=(t=t.replace(l[u.TILDETRIM],c)).replace(l[u.CARETTRIM],h)).split(" ").map(t=>y(t,this.options)).join(" ").split(/\s+/).map(t=>I(t,this.options));s&&(b=b.filter(t=>(o("loose invalid filter",t,this.options),!!t.match(l[u.COMPARATORLOOSE])))),o("range list",b);let _=new Map;for(let t of b.map(t=>new a(t,this.options))){if(m(t))return[t];_.set(t.value,t)}_.size>1&&_.has("")&&_.delete("");let v=[..._.values()];return n.set(r,v),v}intersects(r,n){if(!(r instanceof t))throw TypeError("a Range is required");return this.set.some(t=>b(t,n)&&r.set.some(r=>b(r,n)&&t.every(t=>r.every(r=>t.intersects(r,n)))))}test(t){if(!t)return!1;if("string"==typeof t)try{t=new s(t,this.options)}catch(t){return!1}for(let r=0;r<this.set.length;r++)if(k(this.set[r],t,this.options))return!0;return!1}};var n=new(require_lru_cache())({max:1e3}),i=require_parse_options2(),a=require_comparator2(),o=require_debug2(),s=require_semver3(),{safeRe:l,t:u,comparatorTrimReplace:d,tildeTrimReplace:c,caretTrimReplace:h}=require_re2(),{FLAG_INCLUDE_PRERELEASE:f,FLAG_LOOSE:p}=require_constants11(),m=t=>"<0.0.0-0"===t.value,g=t=>""===t.value,b=(t,r)=>{let n=!0,i=t.slice(),a=i.pop();for(;n&&i.length;)n=i.every(t=>a.intersects(t,r)),a=i.pop();return n},y=(t,r)=>(o("comp",t,r),o("caret",t=w(t,r)),o("tildes",t=v(t,r)),o("xrange",t=E(t,r)),o("stars",t=C(t,r)),t),_=t=>!t||"x"===t.toLowerCase()||"*"===t,v=(t,r)=>t.trim().split(/\s+/).map(t=>A(t,r)).join(" "),A=(t,r)=>{let n=r.loose?l[u.TILDELOOSE]:l[u.TILDE];return t.replace(n,(r,n,i,a,s)=>{let l;return o("tilde",t,r,n,i,a,s),_(n)?l="":_(i)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:_(a)?l=`>=${n}.${i}.0 <${n}.${+i+1}.0-0`:s?(o("replaceTilde pr",s),l=`>=${n}.${i}.${a}-${s} <${n}.${+i+1}.0-0`):l=`>=${n}.${i}.${a} <${n}.${+i+1}.0-0`,o("tilde return",l),l})},w=(t,r)=>t.trim().split(/\s+/).map(t=>x(t,r)).join(" "),x=(t,r)=>{o("caret",t,r);let n=r.loose?l[u.CARETLOOSE]:l[u.CARET],i=r.includePrerelease?"-0":"";return t.replace(n,(r,n,a,s,l)=>{let u;return o("caret",t,r,n,a,s,l),_(n)?u="":_(a)?u=`>=${n}.0.0${i} <${+n+1}.0.0-0`:_(s)?u="0"===n?`>=${n}.${a}.0${i} <${n}.${+a+1}.0-0`:`>=${n}.${a}.0${i} <${+n+1}.0.0-0`:l?(o("replaceCaret pr",l),u="0"===n?"0"===a?`>=${n}.${a}.${s}-${l} <${n}.${a}.${+s+1}-0`:`>=${n}.${a}.${s}-${l} <${n}.${+a+1}.0-0`:`>=${n}.${a}.${s}-${l} <${+n+1}.0.0-0`):(o("no pr"),u="0"===n?"0"===a?`>=${n}.${a}.${s}${i} <${n}.${a}.${+s+1}-0`:`>=${n}.${a}.${s}${i} <${n}.${+a+1}.0-0`:`>=${n}.${a}.${s} <${+n+1}.0.0-0`),o("caret return",u),u})},E=(t,r)=>(o("replaceXRanges",t,r),t.split(/\s+/).map(t=>S(t,r)).join(" ")),S=(t,r)=>{t=t.trim();let n=r.loose?l[u.XRANGELOOSE]:l[u.XRANGE];return t.replace(n,(n,i,a,s,l,u)=>{o("xRange",t,n,i,a,s,l,u);let d=_(a),c=d||_(s),h=c||_(l),f=h;return"="===i&&f&&(i=""),u=r.includePrerelease?"-0":"",d?n=">"===i||"<"===i?"<0.0.0-0":"*":i&&f?(c&&(s=0),l=0,">"===i?(i=">=",c?(a=+a+1,s=0):s=+s+1,l=0):"<="===i&&(i="<",c?a=+a+1:s=+s+1),"<"===i&&(u="-0"),n=`${i+a}.${s}.${l}${u}`):c?n=`>=${a}.0.0${u} <${+a+1}.0.0-0`:h&&(n=`>=${a}.${s}.0${u} <${a}.${+s+1}.0-0`),o("xRange return",n),n})},C=(t,r)=>(o("replaceStars",t,r),t.trim().replace(l[u.STAR],"")),I=(t,r)=>(o("replaceGTE0",t,r),t.trim().replace(l[r.includePrerelease?u.GTE0PRE:u.GTE0],"")),T=t=>(r,n,i,a,o,s,l,u,d,c,h,f,p)=>`${n=_(i)?"":_(a)?`>=${i}.0.0${t?"-0":""}`:_(o)?`>=${i}.${a}.0${t?"-0":""}`:s?`>=${n}`:`>=${n}${t?"-0":""}`} ${u=_(d)?"":_(c)?`<${+d+1}.0.0-0`:_(h)?`<${d}.${+c+1}.0-0`:f?`<=${d}.${c}.${h}-${f}`:t?`<${d}.${c}.${+h+1}-0`:`<=${u}`}`.trim(),k=(t,r,n)=>{for(let n=0;n<t.length;n++)if(!t[n].test(r))return!1;if(r.prerelease.length&&!n.includePrerelease){for(let n=0;n<t.length;n++)if(o(t[n].semver),t[n].semver!==a.ANY&&t[n].semver.prerelease.length>0){let i=t[n].semver;if(i.major===r.major&&i.minor===r.minor&&i.patch===r.patch)return!0}return!1}return!0}}}),require_comparator2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/classes/comparator.js"(t,r){init_globals();var n=Symbol("SemVer ANY");r.exports=class t{static get ANY(){return n}constructor(r,a){if(a=i(a),r instanceof t){if(!!a.loose===r.loose)return r;r=r.value}l("comparator",r=r.trim().split(/\s+/).join(" "),a),this.options=a,this.loose=!!a.loose,this.parse(r),this.semver===n?this.value="":this.value=this.operator+this.semver.version,l("comp",this)}parse(t){let r=this.options.loose?a[o.COMPARATORLOOSE]:a[o.COMPARATOR],i=t.match(r);if(!i)throw TypeError(`Invalid comparator: ${t}`);this.operator=void 0!==i[1]?i[1]:"","="===this.operator&&(this.operator=""),i[2]?this.semver=new u(i[2],this.options.loose):this.semver=n}toString(){return this.value}test(t){if(l("Comparator.test",t,this.options.loose),this.semver===n||t===n)return!0;if("string"==typeof t)try{t=new u(t,this.options)}catch(t){return!1}return s(t,this.operator,this.semver,this.options)}intersects(r,n){if(!(r instanceof t))throw TypeError("a Comparator is required");return""===this.operator?""===this.value||new d(r.value,n).test(this.value):""===r.operator?""===r.value||new d(this.value,n).test(r.semver):(!(n=i(n)).includePrerelease||"<0.0.0-0"!==this.value&&"<0.0.0-0"!==r.value)&&!(!n.includePrerelease&&(this.value.startsWith("<0.0.0")||r.value.startsWith("<0.0.0")))&&(!(!this.operator.startsWith(">")||!r.operator.startsWith(">"))||!(!this.operator.startsWith("<")||!r.operator.startsWith("<"))||!(this.semver.version!==r.semver.version||!this.operator.includes("=")||!r.operator.includes("="))||!!(s(this.semver,"<",r.semver,n)&&this.operator.startsWith(">")&&r.operator.startsWith("<"))||!!(s(this.semver,">",r.semver,n)&&this.operator.startsWith("<")&&r.operator.startsWith(">")))}};var i=require_parse_options2(),{safeRe:a,t:o}=require_re2(),s=require_cmp2(),l=require_debug2(),u=require_semver3(),d=require_range3()}}),require_satisfies2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/functions/satisfies.js"(t,r){init_globals();var n=require_range3();r.exports=(t,r,i)=>{try{r=new n(r,i)}catch(t){return!1}return r.test(t)}}}),require_to_comparators2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/to-comparators.js"(t,r){init_globals();var n=require_range3();r.exports=(t,r)=>new n(t,r).set.map(t=>t.map(t=>t.value).join(" ").trim().split(" "))}}),require_max_satisfying2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/max-satisfying.js"(t,r){init_globals();var n=require_semver3(),i=require_range3();r.exports=(t,r,a)=>{let o=null,s=null,l=null;try{l=new i(r,a)}catch(t){return null}return t.forEach(t=>{l.test(t)&&(o&&-1!==s.compare(t)||(s=new n(o=t,a)))}),o}}}),require_min_satisfying2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/min-satisfying.js"(t,r){init_globals();var n=require_semver3(),i=require_range3();r.exports=(t,r,a)=>{let o=null,s=null,l=null;try{l=new i(r,a)}catch(t){return null}return t.forEach(t=>{l.test(t)&&(o&&1!==s.compare(t)||(s=new n(o=t,a)))}),o}}}),require_min_version2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/min-version.js"(t,r){init_globals();var n=require_semver3(),i=require_range3(),a=require_gt2();r.exports=(t,r)=>{t=new i(t,r);let o=new n("0.0.0");if(t.test(o)||(o=new n("0.0.0-0"),t.test(o)))return o;o=null;for(let r=0;r<t.set.length;++r){let i=t.set[r],s=null;i.forEach(t=>{let r=new n(t.semver.version);switch(t.operator){case">":0===r.prerelease.length?r.patch++:r.prerelease.push(0),r.raw=r.format();case"":case">=":s&&!a(r,s)||(s=r);break;case"<":case"<=":break;default:throw Error(`Unexpected operation: ${t.operator}`)}}),s&&(!o||a(o,s))&&(o=s)}return o&&t.test(o)?o:null}}}),require_valid4=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/valid.js"(t,r){init_globals();var n=require_range3();r.exports=(t,r)=>{try{return new n(t,r).range||"*"}catch(t){return null}}}}),require_outside2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/outside.js"(t,r){init_globals();var n=require_semver3(),i=require_comparator2(),{ANY:a}=i,o=require_range3(),s=require_satisfies2(),l=require_gt2(),u=require_lt2(),d=require_lte2(),c=require_gte2();r.exports=(t,r,h,f)=>{let p,m,g,b,y;switch(t=new n(t,f),r=new o(r,f),h){case">":p=l,m=d,g=u,b=">",y=">=";break;case"<":p=u,m=c,g=l,b="<",y="<=";break;default:throw TypeError('Must provide a hilo val of "<" or ">"')}if(s(t,r,f))return!1;for(let n=0;n<r.set.length;++n){let o=r.set[n],s=null,l=null;if(o.forEach(t=>{t.semver===a&&(t=new i(">=0.0.0")),s=s||t,l=l||t,p(t.semver,s.semver,f)?s=t:g(t.semver,l.semver,f)&&(l=t)}),s.operator===b||s.operator===y||(!l.operator||l.operator===b)&&m(t,l.semver)||l.operator===y&&g(t,l.semver))return!1}return!0}}}),require_gtr2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/gtr.js"(t,r){init_globals();var n=require_outside2();r.exports=(t,r,i)=>n(t,r,">",i)}}),require_ltr2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/ltr.js"(t,r){init_globals();var n=require_outside2();r.exports=(t,r,i)=>n(t,r,"<",i)}}),require_intersects2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/intersects.js"(t,r){init_globals();var n=require_range3();r.exports=(t,r,i)=>(t=new n(t,i),r=new n(r,i),t.intersects(r,i))}}),require_simplify3=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/simplify.js"(t,r){init_globals();var n=require_satisfies2(),i=require_compare2();r.exports=(t,r,a)=>{let o=[],s=null,l=null,u=t.sort((t,r)=>i(t,r,a));for(let t of u)n(t,r,a)?(l=t,s||(s=t)):(l&&o.push([s,l]),l=null,s=null);s&&o.push([s,null]);let d=[];for(let[t,r]of o)t===r?d.push(t):r||t!==u[0]?r?t===u[0]?d.push(`<=${r}`):d.push(`${t} - ${r}`):d.push(`>=${t}`):d.push("*");let c=d.join(" || "),h="string"==typeof r.raw?r.raw:String(r);return c.length<h.length?c:r}}}),require_subset2=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/ranges/subset.js"(t,r){init_globals();var n=require_range3(),i=require_comparator2(),{ANY:a}=i,o=require_satisfies2(),s=require_compare2(),l=[new i(">=0.0.0-0")],u=[new i(">=0.0.0")],d=(t,r,n)=>{let i,d,f,p,m,g,b;if(t===r)return!0;if(1===t.length&&t[0].semver===a){if(1===r.length&&r[0].semver===a)return!0;t=n.includePrerelease?l:u}if(1===r.length&&r[0].semver===a){if(n.includePrerelease)return!0;r=u}let y=new Set;for(let r of t)">"===r.operator||">="===r.operator?i=c(i,r,n):"<"===r.operator||"<="===r.operator?d=h(d,r,n):y.add(r.semver);if(y.size>1||i&&d&&((f=s(i.semver,d.semver,n))>0||0===f&&(">="!==i.operator||"<="!==d.operator)))return null;for(let t of y){if(i&&!o(t,String(i),n)||d&&!o(t,String(d),n))return null;for(let i of r)if(!o(t,String(i),n))return!1;return!0}let _=!(!d||n.includePrerelease||!d.semver.prerelease.length)&&d.semver,v=!(!i||n.includePrerelease||!i.semver.prerelease.length)&&i.semver;for(let t of(_&&1===_.prerelease.length&&"<"===d.operator&&0===_.prerelease[0]&&(_=!1),r)){if(b=b||">"===t.operator||">="===t.operator,g=g||"<"===t.operator||"<="===t.operator,i){if(v&&t.semver.prerelease&&t.semver.prerelease.length&&t.semver.major===v.major&&t.semver.minor===v.minor&&t.semver.patch===v.patch&&(v=!1),">"===t.operator||">="===t.operator){if((p=c(i,t,n))===t&&p!==i)return!1}else if(">="===i.operator&&!o(i.semver,String(t),n))return!1}if(d){if(_&&t.semver.prerelease&&t.semver.prerelease.length&&t.semver.major===_.major&&t.semver.minor===_.minor&&t.semver.patch===_.patch&&(_=!1),"<"===t.operator||"<="===t.operator){if((m=h(d,t,n))===t&&m!==d)return!1}else if("<="===d.operator&&!o(d.semver,String(t),n))return!1}if(!t.operator&&(d||i)&&0!==f)return!1}return!(i&&g&&!d&&0!==f)&&!(d&&b&&!i&&0!==f)&&!v&&!_},c=(t,r,n)=>{if(!t)return r;let i=s(t.semver,r.semver,n);return i>0?t:i<0||">"===r.operator&&">="===t.operator?r:t},h=(t,r,n)=>{if(!t)return r;let i=s(t.semver,r.semver,n);return i<0?t:i>0||"<"===r.operator&&"<="===t.operator?r:t};r.exports=(t,r,i={})=>{if(t===r)return!0;t=new n(t,i),r=new n(r,i);let a=!1;e:for(let n of t.set){for(let t of r.set){let r=d(n,t,i);if(a=a||null!==r,r)continue e}if(a)return!1}return!0}}}),require_semver4=__commonJS({"../../node_modules/.pnpm/semver@7.5.2/node_modules/semver/index.js"(t,r){init_globals();var n=require_re2(),i=require_constants11(),a=require_semver3(),o=require_identifiers2();r.exports={parse:require_parse4(),valid:require_valid3(),clean:require_clean2(),inc:require_inc2(),diff:require_diff2(),major:require_major2(),minor:require_minor2(),patch:require_patch2(),prerelease:require_prerelease2(),compare:require_compare2(),rcompare:require_rcompare2(),compareLoose:require_compare_loose2(),compareBuild:require_compare_build2(),sort:require_sort2(),rsort:require_rsort2(),gt:require_gt2(),lt:require_lt2(),eq:require_eq2(),neq:require_neq2(),gte:require_gte2(),lte:require_lte2(),cmp:require_cmp2(),coerce:require_coerce2(),Comparator:require_comparator2(),Range:require_range3(),satisfies:require_satisfies2(),toComparators:require_to_comparators2(),maxSatisfying:require_max_satisfying2(),minSatisfying:require_min_satisfying2(),minVersion:require_min_version2(),validRange:require_valid4(),outside:require_outside2(),gtr:require_gtr2(),ltr:require_ltr2(),intersects:require_intersects2(),simplifyRange:require_simplify3(),subset:require_subset2(),SemVer:a,re:n.re,src:n.src,tokens:n.t,SEMVER_SPEC_VERSION:i.SEMVER_SPEC_VERSION,RELEASE_TYPES:i.RELEASE_TYPES,compareIdentifiers:o.compareIdentifiers,rcompareIdentifiers:o.rcompareIdentifiers}}}),require_lib7=__commonJS({"../core/dist/lib/index.js"(t){function r(t){let r,n=t[0],i=1;for(;i<t.length;){let a=t[i],o=t[i+1];if(i+=2,("optionalAccess"===a||"optionalCall"===a)&&null==n)return;"access"===a||"optionalAccess"===a?(r=n,n=o(n)):"call"!==a&&"optionalCall"!==a||(n=o((...t)=>n.call(r,...t)),r=void 0)}return n}init_globals(),Object.defineProperty(t,"__esModule",{value:!0});var n=require_chunk_WXNDYUNG(),i=require_chunk_DDYIQHOA(),a=require_env(),o=require_utils5(),s=require_img();function l(t,i){let s={sdkVersion:n.getVersion.call(void 0),logTime:Date.now(),model_name:a.getAIConfig.call(void 0,a.MIDSCENE_MODEL_NAME)||""},l={logId:o.uuid.call(void 0),...s,...t};r([i,"optionalCall",t=>t(l)])}var u=require_logger().getDebug.call(void 0,"ai:insight"),d=class{constructor(t,n){this.aiVendorFn=i.callAiFn,o.assert.call(void 0,t,"context is required for Insight"),this.contextRetrieverFn="function"==typeof t?t:()=>Promise.resolve(t),void 0!==r([n,"optionalAccess",t=>t.aiVendorFn])&&(this.aiVendorFn=n.aiVendorFn),void 0!==r([n,"optionalAccess",t=>t.taskInfo])&&(this.taskInfo=n.taskInfo)}async locate(t,n){let s,d,c,h,f,p,{callAI:m}=n||{},g="string"==typeof t?t:t.prompt;o.assert.call(void 0,g,"query is required for locate");let b=this.onceDumpUpdatedFn;this.onceDumpUpdatedFn=void 0,o.assert.call(void 0,"object"==typeof t,"query should be an object for locate");let y=a.getAIConfigInBoolean.call(void 0,a.MIDSCENE_FORCE_DEEP_THINK);y&&u("globalDeepThinkSwitch",y),(t.deepThink||y)&&(s=t.prompt),s&&!a.vlLocateMode.call(void 0)&&(import_console_browserify.default.warn('The "deepThink" feature is not supported with multimodal LLM. Please config VL model for Midscene. https://midscenejs.com/choose-a-model'),s=void 0);let _=r([n,"optionalAccess",t=>t.context])||await this.contextRetrieverFn("locate");s&&(f=await i.AiLocateSection.call(void 0,{context:_,sectionDescription:s}),o.assert.call(void 0,f.rect,`cannot find search area for "${s}"${f.error?`: ${f.error}`:""}`),c=f.rawResponse,h=f.usage,d=f.rect);let v=Date.now(),{parseResult:A,rect:w,elementById:x,rawResponse:E,usage:S,isOrderSensitive:C}=await i.AiLocateElement.call(void 0,{callAI:m||this.aiVendorFn,context:_,targetElementDescription:g,searchConfig:f}),I=Date.now()-v,T={...this.taskInfo?this.taskInfo:{},durationMs:I,rawResponse:JSON.stringify(E),formatResponse:JSON.stringify(A),usage:S,searchArea:d,searchAreaRawResponse:c,searchAreaUsage:h};r([A,"access",t=>t.errors,"optionalAccess",t=>t.length])&&(p=`AI model failed to locate:
|
|
732
703
|
${A.errors.join("\n")}`);let k={type:"locate",userQuery:{element:g},matchedElement:[],matchedRect:w,data:null,taskInfo:T,deepThink:!!d,error:p},P=[];if((A.elements||[]).forEach(t=>{if("id"in t){let n=x(r([t,"optionalAccess",t=>t.id]));if(!n)return void import_console_browserify.default.warn(`locate: cannot find element id=${t.id}. Maybe an unstable response from AI model`);P.push(n)}}),l({...k,matchedElement:P},b),p)throw Error(p);return o.assert.call(void 0,P.length<=1,`locate: multiple elements found, length = ${P.length}`),1===P.length?{element:{id:P[0].id,indexId:P[0].indexId,center:P[0].center,rect:P[0].rect,xpaths:P[0].xpaths||[],attributes:P[0].attributes,isOrderSensitive:C},rect:w}:{element:null,rect:w}}async extract(t,n,a){let s;o.assert.call(void 0,"object"==typeof t||"string"==typeof t,"dataDemand should be object or string, but get "+typeof t);let u=this.onceDumpUpdatedFn;this.onceDumpUpdatedFn=void 0;let d=await this.contextRetrieverFn("extract"),c=Date.now(),{parseResult:h,usage:f}=await i.AiExtractElementInfo.call(void 0,{context:d,dataQuery:t,multimodalPrompt:a,extractOption:n}),p=Date.now()-c,m={...this.taskInfo?this.taskInfo:{},durationMs:p,rawResponse:JSON.stringify(h)};r([h,"access",t=>t.errors,"optionalAccess",t=>t.length])&&(s=`AI response error:
|
|
733
704
|
${h.errors.join("\n")}`);let{data:g,thought:b}=h||{};if(l({type:"extract",userQuery:{dataDemand:t},matchedElement:[],data:null,taskInfo:m,error:s,data:g},u),s&&!g)throw Error(s);return{data:g,thought:b,usage:f}}async assert(t){let r=this.onceDumpUpdatedFn;this.onceDumpUpdatedFn=void 0;let n=await this.contextRetrieverFn("assert"),a=Date.now(),o=await i.AiAssert.call(void 0,{assertion:t,context:n}),s=Date.now()-a,u={...this.taskInfo?this.taskInfo:{},durationMs:s,rawResponse:JSON.stringify(o.content)},{thought:d,pass:c}=o.content;return l({type:"assert",userQuery:{assertion:t},matchedElement:[],data:null,taskInfo:u,assertionPass:c,assertionThought:d,error:c?void 0:d},r),{pass:c,thought:d,usage:o.usage}}async describe(t,n){o.assert.call(void 0,t,"target is required for insight.describe");let l=await this.contextRetrieverFn("describe"),{screenshotBase64:d,size:c}=l;o.assert.call(void 0,d,"screenshot is required for insight.describe");let h=`
|
|
734
705
|
Describe the element in the red rectangle for precise identification. Use ${a.getPreferredLanguage.call(void 0)}.
|
|
@@ -771,13 +742,13 @@ Return JSON:
|
|
|
771
742
|
"error"?: "error message if any"
|
|
772
743
|
}`,f=Array.isArray(t)?{left:Math.floor(t[0]-15),top:Math.floor(t[1]-15),width:30,height:30}:t,p=await s.compositeElementInfoImg.call(void 0,{inputImgBase64:d,size:c,elementsPositionInfo:[{rect:f}],borderThickness:3});if(r([n,"optionalAccess",t=>t.deepThink])){let t=i.expandSearchArea.call(void 0,f,l.size);u("describe: set searchArea",t),p=await s.cropByRect.call(void 0,p,t,a.getAIConfigInBoolean.call(void 0,a.MIDSCENE_USE_QWEN_VL))}let m=[{role:"system",content:h},{role:"user",content:[{type:"image_url",image_url:{url:p,detail:"high"}}]}],g=this.aiVendorFn||i.callToGetJSONObject,{content:b}=await g(m,4);return o.assert.call(void 0,!b.error,`describe failed: ${b.error}`),o.assert.call(void 0,b.description,"failed to describe the element"),b}},c=d;t.AiAssert=i.AiAssert,t.AiLocateElement=i.AiLocateElement,t.Executor=class{constructor(t,n){this.status=r([n,"optionalAccess",t=>t.tasks])&&n.tasks.length>0?"pending":"init",this.name=t,this.tasks=(r([n,"optionalAccess",t=>t.tasks])||[]).map(t=>this.markTaskAsPending(t)),this.onTaskStart=r([n,"optionalAccess",t=>t.onTaskStart])}markTaskAsPending(t){return{status:"pending",...t}}async append(t){o.assert.call(void 0,"error"!==this.status,`executor is in error state, cannot append task
|
|
773
744
|
error=${r([this,"access",t=>t.latestErrorTask,"call",t=>t(),"optionalAccess",t=>t.error])}
|
|
774
|
-
${r([this,"access",t=>t.latestErrorTask,"call",t=>t(),"optionalAccess",t=>t.errorStack])}`),Array.isArray(t)?this.tasks.push(...t.map(t=>this.markTaskAsPending(t))):this.tasks.push(this.markTaskAsPending(t)),"running"!==this.status&&(this.status="pending")}async flush(){"init"===this.status&&this.tasks.length>0&&import_console_browserify.default.warn("illegal state for executor, status is init but tasks are not empty"),o.assert.call(void 0,"running"!==this.status,"executor is already running"),o.assert.call(void 0,"completed"!==this.status,"executor is already completed"),o.assert.call(void 0,"error"!==this.status,"executor is in error state");let t=this.tasks.findIndex(t=>"pending"===t.status);if(t<0)return;this.status="running";let n,i=t,a=!0;for(;i<this.tasks.length;){let t=this.tasks[i];o.assert.call(void 0,"pending"===t.status,`task status should be pending, but got: ${t.status}`),t.timing={start:Date.now()};try{let a;t.status="running";try{this.onTaskStart&&await this.onTaskStart(t)}catch(t){import_console_browserify.default.error("error in onTaskStart",t)}o.assert.call(void 0,["Insight","Action","Planning"].indexOf(t.type)>=0,`unsupported task type: ${t.type}`);let{executor:s,param:l}=t;o.assert.call(void 0,s,`executor is required for task type: ${t.type}`);let u={task:t,element:r([n,"optionalAccess",t=>t.element])};"Insight"===t.type?(o.assert.call(void 0,"Locate"===t.subType||"Query"===t.subType||"Assert"===t.subType||"Boolean"===t.subType||"Number"===t.subType||"String"===t.subType,`unsupported insight subType: ${t.subType}`),a=await t.executor(l,u),"Locate"===t.subType&&(n=r([a,"optionalAccess",t=>t.output]))):("Action"===t.type||"Planning"===t.type||import_console_browserify.default.warn(`unsupported task type: ${t.type}, will try to execute it directly`),a=await t.executor(l,u)),Object.assign(t,a),t.status="finished",t.timing.end=Date.now(),t.timing.cost=t.timing.end-t.timing.start,i++}catch(n){a=!1,t.error=n,t.errorMessage=r([n,"optionalAccess",t=>t.message])||("string"==typeof n?n:"error-without-message"),t.errorStack=n.stack,t.status="failed",t.timing.end=Date.now(),t.timing.cost=t.timing.end-t.timing.start;break}}for(let t=i+1;t<this.tasks.length;t++)this.tasks[t].status="cancelled";if(this.status=a?"completed":"error",this.tasks.length){let t=Math.min(i,this.tasks.length-1),{thought:r,output:n}=this.tasks[t];return{thought:r,output:n}}}isInErrorState(){return"error"===this.status}latestErrorTask(){if("error"!==this.status)return null;let t=this.tasks.findIndex(t=>"failed"===t.status);return t>=0?this.tasks[t]:null}dump(){let t="";if(a.vlLocateMode.call(void 0)){let r=a.uiTarsModelVersion.call(void 0);t=r?`UI-TARS=${r}`:`${a.vlLocateMode.call(void 0)} mode`}return{sdkVersion:n.getVersion.call(void 0),model_name:a.getAIConfig.call(void 0,a.MIDSCENE_MODEL_NAME)||"",model_description:t,logTime:Date.now(),name:this.name,tasks:this.tasks}}},t.Insight=d,t.MIDSCENE_MODEL_NAME=a.MIDSCENE_MODEL_NAME,t.default=c,t.describeUserPage=i.describeUserPage,t.getAIConfig=a.getAIConfig,t.getVersion=n.getVersion,t.plan=i.plan}}),require_playground=__commonJS({"../web-integration/dist/lib/playground.js"(t,r){init_globals();var n,i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,l=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,d=(t,r,n,i)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let l of s(r))u.call(t,l)||l===n||a(t,l,{get:()=>r[l],enumerable:!(i=o(r,l))||i.enumerable});return t},c=(t,r,n)=>(n=null!=t?i(l(t)):{},d(!r&&t&&t.__esModule?n:a(n,"default",{value:t,enumerable:!0}),t)),h={};((t,r)=>{for(var n in r)a(t,n,{get:r[n],enumerable:!0})})(h,{ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED:()=>U,StaticPage:()=>eS,StaticPageAgent:()=>ex}),n=h,r.exports=d(a({},"__esModule",{value:!0}),n);var f=require_ai_model(),p=require_utils12(),m=require_env(),g=require_extractor(),b=require_img(),y=require_logger(),_=require_utils5(),v=c(require_dayjs_min()),A=class{constructor({content:t,rect:r,id:n,attributes:i,indexId:a,xpaths:o,isVisible:s}){this.content=t,this.rect=r,this.center=[Math.floor(r.left+r.width/2),Math.floor(r.top+r.height/2)],this.id=n,this.attributes=i,this.indexId=a,this.xpaths=o,this.isVisible=s}},w=c(require_assert()),x=require_fs(),E=require_path_browserify(),S=require_util(),C=require_common6(),I=require_env(),T=require_logger(),k=require_utils5(),P=require_utils5(),R=c(require_js_yaml()),O=c(require_semver4()),M="0.26.
|
|
745
|
+
${r([this,"access",t=>t.latestErrorTask,"call",t=>t(),"optionalAccess",t=>t.errorStack])}`),Array.isArray(t)?this.tasks.push(...t.map(t=>this.markTaskAsPending(t))):this.tasks.push(this.markTaskAsPending(t)),"running"!==this.status&&(this.status="pending")}async flush(){"init"===this.status&&this.tasks.length>0&&import_console_browserify.default.warn("illegal state for executor, status is init but tasks are not empty"),o.assert.call(void 0,"running"!==this.status,"executor is already running"),o.assert.call(void 0,"completed"!==this.status,"executor is already completed"),o.assert.call(void 0,"error"!==this.status,"executor is in error state");let t=this.tasks.findIndex(t=>"pending"===t.status);if(t<0)return;this.status="running";let n,i=t,a=!0;for(;i<this.tasks.length;){let t=this.tasks[i];o.assert.call(void 0,"pending"===t.status,`task status should be pending, but got: ${t.status}`),t.timing={start:Date.now()};try{let a;t.status="running";try{this.onTaskStart&&await this.onTaskStart(t)}catch(t){import_console_browserify.default.error("error in onTaskStart",t)}o.assert.call(void 0,["Insight","Action","Planning"].indexOf(t.type)>=0,`unsupported task type: ${t.type}`);let{executor:s,param:l}=t;o.assert.call(void 0,s,`executor is required for task type: ${t.type}`);let u={task:t,element:r([n,"optionalAccess",t=>t.element])};"Insight"===t.type?(o.assert.call(void 0,"Locate"===t.subType||"Query"===t.subType||"Assert"===t.subType||"Boolean"===t.subType||"Number"===t.subType||"String"===t.subType,`unsupported insight subType: ${t.subType}`),a=await t.executor(l,u),"Locate"===t.subType&&(n=r([a,"optionalAccess",t=>t.output]))):("Action"===t.type||"Planning"===t.type||import_console_browserify.default.warn(`unsupported task type: ${t.type}, will try to execute it directly`),a=await t.executor(l,u)),Object.assign(t,a),t.status="finished",t.timing.end=Date.now(),t.timing.cost=t.timing.end-t.timing.start,i++}catch(n){a=!1,t.error=n,t.errorMessage=r([n,"optionalAccess",t=>t.message])||("string"==typeof n?n:"error-without-message"),t.errorStack=n.stack,t.status="failed",t.timing.end=Date.now(),t.timing.cost=t.timing.end-t.timing.start;break}}for(let t=i+1;t<this.tasks.length;t++)this.tasks[t].status="cancelled";if(this.status=a?"completed":"error",this.tasks.length){let t=Math.min(i,this.tasks.length-1),{thought:r,output:n}=this.tasks[t];return{thought:r,output:n}}}isInErrorState(){return"error"===this.status}latestErrorTask(){if("error"!==this.status)return null;let t=this.tasks.findIndex(t=>"failed"===t.status);return t>=0?this.tasks[t]:null}dump(){let t="";if(a.vlLocateMode.call(void 0)){let r=a.uiTarsModelVersion.call(void 0);t=r?`UI-TARS=${r}`:`${a.vlLocateMode.call(void 0)} mode`}return{sdkVersion:n.getVersion.call(void 0),model_name:a.getAIConfig.call(void 0,a.MIDSCENE_MODEL_NAME)||"",model_description:t,logTime:Date.now(),name:this.name,tasks:this.tasks}}},t.Insight=d,t.MIDSCENE_MODEL_NAME=a.MIDSCENE_MODEL_NAME,t.default=c,t.describeUserPage=i.describeUserPage,t.getAIConfig=a.getAIConfig,t.getVersion=n.getVersion,t.plan=i.plan}}),require_playground=__commonJS({"../web-integration/dist/lib/playground.js"(t,r){init_globals();var n,i=Object.create,a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,l=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,d=(t,r,n,i)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let l of s(r))u.call(t,l)||l===n||a(t,l,{get:()=>r[l],enumerable:!(i=o(r,l))||i.enumerable});return t},c=(t,r,n)=>(n=null!=t?i(l(t)):{},d(!r&&t&&t.__esModule?n:a(n,"default",{value:t,enumerable:!0}),t)),h={};((t,r)=>{for(var n in r)a(t,n,{get:r[n],enumerable:!0})})(h,{ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED:()=>U,StaticPage:()=>eS,StaticPageAgent:()=>ex}),n=h,r.exports=d(a({},"__esModule",{value:!0}),n);var f=require_ai_model(),p=require_utils12(),m=require_env(),g=require_extractor(),b=require_img(),y=require_logger(),_=require_utils5(),v=c(require_dayjs_min()),A=class{constructor({content:t,rect:r,id:n,attributes:i,indexId:a,xpaths:o,isVisible:s}){this.content=t,this.rect=r,this.center=[Math.floor(r.left+r.width/2),Math.floor(r.top+r.height/2)],this.id=n,this.attributes=i,this.indexId=a,this.xpaths=o,this.isVisible=s}},w=c(require_assert()),x=require_fs(),E=require_path_browserify(),S=require_util(),C=require_common6(),I=require_env(),T=require_logger(),k=require_utils5(),P=require_utils5(),R=c(require_js_yaml()),O=c(require_semver4()),M="0.26.2-beta-20250812091127.0",j=(0,T.getDebug)("cache"),N=".cache.yaml",B=class{constructor(t,r,n){let i;this.matchedCacheIndices=new Set,(0,w.default)(t,"cacheId is required");let a=t.replace(/[:*?"<>| ]/g,"-"),o=(0,I.getAIConfigInNumber)(I.MIDSCENE_CACHE_MAX_FILENAME_LENGTH)||200;if(Buffer.byteLength(a,"utf8")>o){let t=a.slice(0,32);a=`${t}-${(0,P.generateHashId)(void 0,a)}`}this.cacheId=a,this.cacheFilePath=k.ifInBrowser||k.ifInWorker?void 0:n||(0,E.join)((0,C.getMidsceneRunSubDir)("cache"),`${this.cacheId}${N}`),this.isCacheResultUsed=r,this.cacheFilePath&&(i=this.loadCacheFromFile()),i||(i={midsceneVersion:M,cacheId:this.cacheId,caches:[]}),this.cache=i,this.cacheOriginalLength=this.cache.caches.length}matchCache(t,r){for(let n=0;n<this.cacheOriginalLength;n++){let i=this.cache.caches[n],a="string"==typeof t?t:JSON.stringify(t),o=`${r}:${a}:${n}`;if(i.type===r&&(0,S.isDeepStrictEqual)(i.prompt,t)&&!this.matchedCacheIndices.has(o))return this.matchedCacheIndices.add(o),j("cache found and marked as used, type: %s, prompt: %s, index: %d",r,t,n),{cacheContent:i,updateFn:a=>{j("will call updateFn to update cache, type: %s, prompt: %s, index: %d",r,t,n),a(i),j("cache updated, will flush to file, type: %s, prompt: %s, index: %d",r,t,n),this.flushCacheToFile()}}}j("no unused cache found, type: %s, prompt: %s",r,t)}matchPlanCache(t){return this.matchCache(t,"plan")}matchLocateCache(t){return this.matchCache(t,"locate")}appendCache(t){j("will append cache",t),this.cache.caches.push(t),this.flushCacheToFile()}loadCacheFromFile(){let t=this.cacheFilePath;if((0,w.default)(t,"cache file path is required"),!(0,x.existsSync)(t))return void j("no cache file found, path: %s",t);let r=t.replace(N,".json");if((0,x.existsSync)(r)&&this.isCacheResultUsed)import_console_browserify.default.warn(`An outdated cache file from an earlier version of Midscene has been detected. Since version 0.17, we have implemented an improved caching strategy. Please delete the old file located at: ${r}.`);else try{let r=(0,x.readFileSync)(t,"utf8"),n=R.default.load(r);return O.default.lt(n.midsceneVersion,"0.16.10")&&!n.midsceneVersion.includes("beta")?void import_console_browserify.default.warn(`You are using an old version of Midscene cache file, and we cannot match any info from it. Starting from Midscene v0.17, we changed our strategy to use xpath for cache info, providing better performance.
|
|
775
746
|
Please delete the existing cache and rebuild it. Sorry for the inconvenience.
|
|
776
|
-
cache file: ${t}`):(j("cache loaded from file, path: %s, cache version: %s, record length: %s",t,n.midsceneVersion,n.caches.length),n.midsceneVersion=M,n)}catch(r){return void j("cache file exists but load failed, path: %s, error: %s",t,r)}}flushCacheToFile(){if(this.cacheFilePath)try{let t=(0,E.dirname)(this.cacheFilePath);(0,x.existsSync)(t)||((0,x.mkdirSync)(t,{recursive:!0}),j("created cache directory: %s",t));let r=[...this.cache.caches].sort((t,r)=>"plan"===t.type&&"locate"===r.type?-1:+("locate"===t.type&&"plan"===r.type)),n={...this.cache,caches:r},i=R.default.dump(n);(0,x.writeFileSync)(this.cacheFilePath,i),j("cache flushed to file: %s",this.cacheFilePath)}catch(t){j("write cache to file failed, path: %s, error: %s",this.cacheFilePath,t)}else j("no cache file path, will not write cache to file")}updateOrAppendCacheRecord(t,r){r?"plan"===t.type?r.updateFn(r=>{r.yamlWorkflow=t.yamlWorkflow}):r.updateFn(r=>{r.xpaths=t.xpaths}):this.appendCache(t)}},L=(0,y.getDebug)("tool:profile");async function D(t,r){let n,i;if((0,_.assert)(t,"page is required"),t._forceUsePageContext)return await t._forceUsePageContext();L("Getting page URL");let a=await t.url();L("URL end"),L("Uploading test info to server"),(0,p.uploadTestInfoToServer)({testUrl:a}),L("UploadTestInfoToServer end"),L("Starting parallel operations: screenshot and element tree"),await Promise.all([t.screenshotBase64().then(t=>{n=t,L("ScreenshotBase64 end")}),t.getElementsNodeTree().then(async t=>{i=t,L("GetElementsNodeTree end")})]),L("ParseContextFromWebPage end"),L("Traversing element tree");let o=(0,g.traverseTree)(i,t=>{let{rect:r,id:n,content:i,attributes:a,indexId:o,isVisible:s}=t;return new A({rect:r,id:n,content:i,attributes:a,indexId:o,isVisible:s})});L("TraverseTree end"),(0,_.assert)(n,"screenshotBase64 is required");let s=await t.size();return L(`size: ${s.width}x${s.height} dpr: ${s.dpr}`),s.dpr&&s.dpr>1&&(L("Resizing screenshot for high DPR display"),n=await (0,b.resizeImgBase64)(n,{width:s.width,height:s.height}),L("ResizeImgBase64 end")),{tree:o,size:s,screenshotBase64:n,url:a}}var U="NOT_IMPLEMENTED_AS_DESIGNED",F=t=>"string"==typeof t?{textPrompt:t,multimodalPrompt:void 0}:{textPrompt:t.prompt,multimodalPrompt:t.images?{images:t.images,convertHttpImage2Base64:!!t.convertHttpImage2Base64}:void 0},z=require_lib7(),G=c(require_js_yaml()),H=require_fs(),q=require_path_browserify(),V=require_utils5(),W=require_common6(),$=class{constructor(t,r,n,i){if(this.script=t,this.setupAgent=r,this.onTaskStatusChange=n,this.taskStatusList=[],this.status="init",this.unnamedResultIndex=0,this.pageAgent=null,this.scriptPath=i,this.result={},this.target=t.target||t.web||t.android,V.ifInBrowser||V.ifInWorker)this.output=void 0;else if(this.target?.output)this.output=(0,q.resolve)(import_browser.default.cwd(),this.target.output);else{let t=this.scriptPath?(0,q.basename)(this.scriptPath,".yaml").replace(/\.(ya?ml)$/i,""):"script";this.output=(0,q.join)((0,W.getMidsceneRunSubDir)("output"),`${t}-${Date.now()}.json`)}V.ifInBrowser||V.ifInWorker?this.unstableLogContent=void 0:"string"==typeof this.target?.unstableLogContent?this.unstableLogContent=(0,q.resolve)(import_browser.default.cwd(),this.target.unstableLogContent):!0===this.target?.unstableLogContent&&(this.unstableLogContent=(0,q.join)((0,W.getMidsceneRunSubDir)("output"),"unstableLogContent.json")),this.taskStatusList=(t.tasks||[]).map((t,r)=>({...t,index:r,status:"init",totalSteps:t.flow?.length||0}))}setResult(t,r){let n=t||this.unnamedResultIndex++;return this.result[n]&&import_console_browserify.default.warn(`result key ${n} already exists, will overwrite`),this.result[n]=r,this.flushResult()}setPlayerStatus(t,r){this.status=t,this.errorInSetup=r}notifyCurrentTaskStatusChange(t){let r="number"==typeof t?t:this.currentTaskIndex;if("number"!=typeof r)return;let n=this.taskStatusList[r];this.onTaskStatusChange&&this.onTaskStatusChange(n)}async setTaskStatus(t,r,n){this.taskStatusList[t].status=r,n&&(this.taskStatusList[t].error=n),this.notifyCurrentTaskStatusChange(t)}setTaskIndex(t){this.currentTaskIndex=t}flushResult(){if(this.output){let t=(0,q.resolve)(import_browser.default.cwd(),this.output),r=(0,q.dirname)(t);(0,H.existsSync)(r)||(0,H.mkdirSync)(r,{recursive:!0}),(0,H.writeFileSync)(t,JSON.stringify(this.result||{},void 0,2))}}flushUnstableLogContent(){if(this.unstableLogContent){let t=this.pageAgent?._unstableLogContent(),r=(0,q.resolve)(import_browser.default.cwd(),this.unstableLogContent),n=(0,q.dirname)(r);(0,H.existsSync)(n)||(0,H.mkdirSync)(n,{recursive:!0}),(0,H.writeFileSync)(r,JSON.stringify(t,null,2))}}async playTask(t,r){let{flow:n}=t;for(let i in(0,V.assert)(n,"missing flow in task"),n){t.currentStep=Number.parseInt(i,10);let a=n[i];if("aiAction"in a||"ai"in a){let t=a,n=t.aiAction||t.ai;(0,V.assert)(n,"missing prompt for ai (aiAction)"),(0,V.assert)("string"==typeof n,"prompt for aiAction must be a string"),await r.aiAction(n,{cacheable:t.cacheable})}else if("aiAssert"in a){let t=a,n=t.aiAssert,i=t.errorMessage;(0,V.assert)(n,"missing prompt for aiAssert"),(0,V.assert)("string"==typeof n,"prompt for aiAssert must be a string"),await r.aiAssert(n,i)}else if("aiQuery"in a){let t=a,n=t.aiQuery,i={domIncluded:t.domIncluded,screenshotIncluded:t.screenshotIncluded};(0,V.assert)(n,"missing prompt for aiQuery"),(0,V.assert)("string"==typeof n,"prompt for aiQuery must be a string");let o=await r.aiQuery(n,i);this.setResult(t.name,o)}else if("aiNumber"in a){let t=a,n=t.aiNumber,i={domIncluded:t.domIncluded,screenshotIncluded:t.screenshotIncluded};(0,V.assert)(n,"missing prompt for aiNumber"),(0,V.assert)("string"==typeof n,"prompt for number must be a string");let o=await r.aiNumber(n,i);this.setResult(t.name,o)}else if("aiString"in a){let t=a,n=t.aiString,i={domIncluded:t.domIncluded,screenshotIncluded:t.screenshotIncluded};(0,V.assert)(n,"missing prompt for aiString"),(0,V.assert)("string"==typeof n,"prompt for string must be a string");let o=await r.aiString(n,i);this.setResult(t.name,o)}else if("aiBoolean"in a){let t=a,n=t.aiBoolean,i={domIncluded:t.domIncluded,screenshotIncluded:t.screenshotIncluded};(0,V.assert)(n,"missing prompt for aiBoolean"),(0,V.assert)("string"==typeof n,"prompt for boolean must be a string");let o=await r.aiBoolean(n,i);this.setResult(t.name,o)}else if("aiAsk"in a){let t=a,n=t.aiAsk;(0,V.assert)(n,"missing prompt for aiAsk"),(0,V.assert)("string"==typeof n,"prompt for aiAsk must be a string");let i=await r.aiAsk(n);this.setResult(t.name,i)}else if("aiLocate"in a){let t=a,n=t.aiLocate;(0,V.assert)(n,"missing prompt for aiLocate"),(0,V.assert)("string"==typeof n,"prompt for aiLocate must be a string");let i=await r.aiLocate(n,t);this.setResult(t.name,i)}else if("aiWaitFor"in a){let t=a,n=t.aiWaitFor;(0,V.assert)(n,"missing prompt for aiWaitFor"),(0,V.assert)("string"==typeof n,"prompt for aiWaitFor must be a string");let i=t.timeout;await r.aiWaitFor(n,{timeoutMs:i})}else if("sleep"in a){let t=a.sleep,r=t;"string"==typeof t&&(r=Number.parseInt(t,10)),(0,V.assert)(r&&r>0,`ms for sleep must be greater than 0, but got ${t}`),await new Promise(t=>setTimeout(t,r))}else if("aiTap"in a){let t=a;await r.aiTap(t.aiTap,t)}else if("aiRightClick"in a){let t=a;await r.aiRightClick(t.aiRightClick,t)}else if("aiHover"in a){let t=a;await r.aiHover(t.aiHover,t)}else if("aiInput"in a){let t=a;await r.aiInput(t.aiInput,t.locate,t)}else if("aiKeyboardPress"in a){let t=a;await r.aiKeyboardPress(t.aiKeyboardPress,t.locate,t)}else if("aiScroll"in a){let t=a;await r.aiScroll(t,t.locate,t)}else if("javascript"in a){let t=a,n=await r.evaluateJavaScript(t.javascript);this.setResult(t.name,n)}else{if(!("logScreenshot"in a))throw Error(`unknown flowItem: ${JSON.stringify(a)}`);{let t=a;await r.logScreenshot(t.logScreenshot,{content:t.content||""})}}}this.reportFile=r.reportFile,await this.flushUnstableLogContent()}async run(){let{target:t,web:r,android:n,tasks:i}=this.script,a=r||t||n;this.setPlayerStatus("running");let o=null,s=[];try{let{agent:t,freeFn:r}=await this.setupAgent(a),n=(o=t).onTaskStartTip;o.onTaskStartTip=t=>{"running"===this.status&&(this.agentStatusTip=t),n?.(t)},s=[...r||[],{name:"restore-agent-onTaskStartTip",fn:()=>{o&&(o.onTaskStartTip=n)}}]}catch(t){return void this.setPlayerStatus("error",t)}this.pageAgent=o;let l=0;this.setPlayerStatus("running");let u=!1;for(;l<i.length;){let t=this.taskStatusList[l];this.setTaskStatus(l,"running"),this.setTaskIndex(l);try{await this.playTask(t,this.pageAgent),this.setTaskStatus(l,"done")}catch(r){if(this.setTaskStatus(l,"error",r),!t.continueOnError){this.reportFile=o.reportFile,u=!0;break}}this.reportFile=o?.reportFile,l++}for(let t of(u?this.setPlayerStatus("error"):this.setPlayerStatus("done"),this.agentStatusTip="",s))try{await t.fn()}catch(t){}}},K=(c(require_js_yaml()),require_utils5()),Z=c(require_js_yaml());function X(t,r,n){let i=t;if(-1!==t.indexOf("android")&&t.match(/deviceId:\s*(\d+)/)){let r;i=t.replace(/deviceId:\s*(\d+)/g,(t,n)=>(r=n,`deviceId: '${n}'`)),import_console_browserify.default.warn(`please use string-style deviceId in yaml script, for example: deviceId: "${r}"`)}let a=function(t){return t.replace(/\$\{([^}]+)\}/g,(t,r)=>{let n=import_browser.default.env[r.trim()];if(void 0===n)throw Error(`Environment variable "${r.trim()}" is not defined`);return n})}(i),o=Z.default.load(a,{schema:Z.default.JSON_SCHEMA}),s=r?`, failed to load ${r}`:"",l=void 0!==o.android?Object.assign({},o.android||{}):void 0,u=o.web||o.target,d=void 0!==u?Object.assign({},u||{}):void 0;return n||((0,K.assert)(d||l,`at least one of "target", "web", or "android" properties is required in yaml script${s}`),(0,K.assert)(d&&!l||!d&&l,`only one of "target", "web", or "android" properties is allowed in yaml script${s}`),(d||l)&&(0,K.assert)("object"==typeof d||"object"==typeof l,`property "target/web/android" must be an object${s}`)),(0,K.assert)(o.tasks,`property "tasks" is required in yaml script ${s}`),(0,K.assert)(Array.isArray(o.tasks),`property "tasks" must be an array in yaml script, but got ${o.tasks}`),o}var Y=require_utils12(),J=require_constants(),Q=require_env(),ee=require_logger(),et=require_utils5(),er=require_lib7(),en=require_ai_model(),ei=require_utils12(),ea=require_constants(),eo=require_env(),es=require_logger(),el=require_utils5();function eu(t){return t.subType&&"Plan"!==t.subType?`${t.type} / ${t.subType||""}`:t.type}function ed(t){return t?"string"==typeof t?t:"string"==typeof t.prompt?t.prompt:t.prompt.prompt:""}function ec(t){return t?`${t.direction||"down"}, ${t.scrollType||"once"}, ${t.distance||"distance-not-set"}`:""}function eh(t,r){return r?`${t} - ${r}`:t}var ef=(0,es.getDebug)("page-task-executor"),ep=t=>"android"===t.pageType,em=class{constructor(t,r,n){this.conversationHistory=[],this.page=t,this.insight=r,this.taskCache=n.taskCache,this.onTaskStartCallback=n?.onTaskStart}async recordScreenshot(t){let r=await this.page.screenshotBase64();return{type:"screenshot",ts:Date.now(),screenshot:r,timing:t}}async getElementXpath(t,r){let n=r?.id;if(void 0!==r?.isOrderSensitive)return await this.page.getXpathsByPoint({left:r.center[0],top:r.center[1]},r?.isOrderSensitive);if(r?.attributes?.nodeType===ea.NodeType.POSITION){await this.insight.contextRetrieverFn("locate");let i=(0,en.elementByPositionWithElementInfo)(t.tree,{x:r.center[0],y:r.center[1]},{requireStrictDistance:!1,filterPositionElements:!0});i?.id?n=i.id:ef("no element id found for position node, will not update cache",r)}if(n)try{return await this.page.getXpathsById(n)}catch(t){ef("getXpathsById error: ",t)}}prependExecutorWithScreenshot(t,r=!1){return{...t,executor:async(n,i,...a)=>{let o=[],{task:s}=i;s.recorder=o;let l=await this.recordScreenshot(`before ${s.type}`);o.push(l);let u=await t.executor(n,i,...a);if("Action"===t.type&&await Promise.all([(async()=>{if(await (0,ei.sleep)(100),this.page.waitUntilNetworkIdle)try{await this.page.waitUntilNetworkIdle()}catch(t){}})(),(0,ei.sleep)(200)]),r){let t=await this.recordScreenshot("after Action");o.push(t)}return u}}}async convertPlanToExecutable(t,r){let n=[];return t.forEach(t=>{if("Locate"===t.type){if(null===t.locate||null===t.locate?.id||"null"===t.locate?.id)return;let i={type:"Insight",subType:"Locate",param:t.locate?{...t.locate,cacheable:r?.cacheable}:void 0,thought:t.thought,locate:t.locate,executor:async(t,r)=>{let n,i,a,o,{task:s}=r;(0,el.assert)(t?.prompt||t?.id||t?.bbox,"No prompt or id or position or bbox to locate"),this.insight.onceDumpUpdatedFn=t=>{n=t,i=t?.taskInfo?.usage,s.log={dump:n},s.usage=i};let l=Date.now(),u=await this.insight.contextRetrieverFn("locate");s.pageContext=u,s.recorder=[{type:"screenshot",ts:l,screenshot:u.screenshotBase64,timing:"before Insight"}];let d=t.xpath?await this.page.getElementInfoByXpath(t.xpath):void 0,c=!!d,h=t.prompt,p=this.taskCache?.matchLocateCache(h),m=p?.cacheContent?.xpaths,b=c?null:await async function(t,r,n,i){try{if(r?.length&&t.taskCache?.isCacheResultUsed&&!1!==i)for(let i=0;i<r.length;i++){let a=await t.page.getElementInfoByXpath(r[i]);if(a?.id)return j("cache hit, prompt: %s",n),j("found a new element with same xpath, xpath: %s, id: %s",r[i],a?.id),a}}catch(t){j("get element info by xpath error: ",t)}}(this,m,h,t.cacheable),y=!!b,_=c||y?void 0:function(t,r){if(t){if(t.id)return(0,g.getNodeFromCacheList)(t.id);if(t.bbox){let n={x:Math.floor((t.bbox[0]+t.bbox[2])/2),y:Math.floor((t.bbox[1]+t.bbox[3])/2)},i=(0,f.elementByPositionWithElementInfo)(r,n);return i||(i=(0,g.generateElementByPosition)(n)),i}}}(t,u.tree),v=!!_,A=c||y||v?void 0:(await this.insight.locate(t,{context:u})).element,w=!!A,x=d||b||_||A;if(x&&this.taskCache&&!y&&!1!==t?.cacheable){let t=await this.getElementXpath(u,x);t?.length?(a=t,this.taskCache.updateOrAppendCacheRecord({type:"locate",prompt:h,xpaths:t},p)):ef("no xpaths found, will not update cache",h,t)}if(!x)throw Error(`Element not found: ${t.prompt}`);return c?o={from:"User expected path",context:{xpath:t.xpath}}:y?o={from:"Cache",context:{xpathsFromCache:m,xpathsToSave:a}}:v?o={from:"Planning",context:{id:_?.id,bbox:_?.bbox}}:w&&(o={from:"AI model",context:{prompt:t.prompt}}),{output:{element:x},pageContext:u,hitBy:o}}};n.push(i)}else if("Assert"===t.type||"AssertWithoutThrow"===t.type){let r=t,i={type:"Insight",subType:"Assert",param:r.param,thought:r.thought,locate:r.locate,executor:async(n,i)=>{let a,{task:o}=i;this.insight.onceDumpUpdatedFn=t=>{a=t};let s=Date.now(),l=await this.insight.contextRetrieverFn("assert");o.pageContext=l,o.recorder=[{type:"screenshot",ts:s,screenshot:l.screenshotBase64,timing:"before Insight"}];let u=await this.insight.assert(r.param.assertion);if(!u.pass){if("Assert"===t.type)throw o.output=u,o.log={dump:a},Error(u.thought||"Assertion failed without reason");o.error=Error(u.thought)}return{output:u,pageContext:l,log:{dump:a},usage:u.usage}}};n.push(i)}else if("Input"===t.type){let r={type:"Action",subType:"Input",param:t.param,thought:t.thought,locate:t.locate,executor:async(t,{element:r})=>{(!r||(await this.page.clearInput(r),t&&t.value))&&await this.page.keyboard.type(t.value,{autoDismissKeyboard:t.autoDismissKeyboard})}};n.push(r)}else if("KeyboardPress"===t.type){let r={type:"Action",subType:"KeyboardPress",param:t.param,thought:t.thought,locate:t.locate,executor:async t=>{let r=function(t){let r=Array.isArray(t)?t:[t];return r.reduce((t,n)=>{let i=r.includes("Meta")||r.includes("Control");return i&&("a"===n||"A"===n)?t.concat([{key:n,command:"SelectAll"}]):i&&("c"===n||"C"===n)?t.concat([{key:n,command:"Copy"}]):i&&("v"===n||"V"===n)?t.concat([{key:n,command:"Paste"}]):t.concat([{key:n}])},[])}(t.value);await this.page.keyboard.press(r)}};n.push(r)}else if("Tap"===t.type){let r={type:"Action",subType:"Tap",thought:t.thought,locate:t.locate,executor:async(t,{element:r})=>{(0,el.assert)(r,"Element not found, cannot tap"),await this.page.mouse.click(r.center[0],r.center[1])}};n.push(r)}else if("RightClick"===t.type){let r={type:"Action",subType:"RightClick",thought:t.thought,locate:t.locate,executor:async(t,{element:r})=>{(0,el.assert)(r,"Element not found, cannot right click"),await this.page.mouse.click(r.center[0],r.center[1],{button:"right"})}};n.push(r)}else if("Drag"===t.type){let r={type:"Action",subType:"Drag",param:t.param,thought:t.thought,locate:t.locate,executor:async t=>{(0,el.assert)(t?.start_box&&t?.end_box,"No start_box or end_box to drag"),await this.page.mouse.drag(t.start_box,t.end_box)}};n.push(r)}else if("Hover"===t.type){let r={type:"Action",subType:"Hover",thought:t.thought,locate:t.locate,executor:async(t,{element:r})=>{(0,el.assert)(r,"Element not found, cannot hover"),await this.page.mouse.move(r.center[0],r.center[1])}};n.push(r)}else if("Scroll"===t.type){let r={type:"Action",subType:"Scroll",param:t.param,thought:t.thought,locate:t.locate,executor:async(t,{element:r})=>{let n=r?{left:r.center[0],top:r.center[1]}:void 0,i=t?.scrollType;if("untilTop"===i)await this.page.scrollUntilTop(n);else if("untilBottom"===i)await this.page.scrollUntilBottom(n);else if("untilRight"===i)await this.page.scrollUntilRight(n);else if("untilLeft"===i)await this.page.scrollUntilLeft(n);else{if("once"!==i&&i)throw Error(`Unknown scroll event type: ${i}, taskParam: ${JSON.stringify(t)}`);if("down"!==t?.direction&&t&&t.direction)if("up"===t.direction)await this.page.scrollUp(t.distance||void 0,n);else if("left"===t.direction)await this.page.scrollLeft(t.distance||void 0,n);else{if("right"!==t.direction)throw Error(`Unknown scroll direction: ${t.direction}`);await this.page.scrollRight(t.distance||void 0,n)}else await this.page.scrollDown(t?.distance||void 0,n);await (0,ei.sleep)(500)}}};n.push(r)}else if("Sleep"===t.type){let r={type:"Action",subType:"Sleep",param:t.param,thought:t.thought,locate:t.locate,executor:async t=>{await (0,ei.sleep)(t?.timeMs||3e3)}};n.push(r)}else if("Error"===t.type){let r={type:"Action",subType:"Error",param:t.param,thought:t.thought||t.param?.thought,locate:t.locate,executor:async()=>{throw Error(t?.thought||t.param?.thought||"error without thought")}};n.push(r)}else if("ExpectedFalsyCondition"===t.type){let r={type:"Action",subType:"ExpectedFalsyCondition",param:null,thought:t.param?.reason,locate:t.locate,executor:async()=>{}};n.push(r)}else if("Finished"===t.type){let r={type:"Action",subType:"Finished",param:null,thought:t.thought,locate:t.locate,executor:async t=>{}};n.push(r)}else if("AndroidHomeButton"===t.type){let r={type:"Action",subType:"AndroidHomeButton",param:null,thought:t.thought,locate:t.locate,executor:async t=>{(0,el.assert)(ep(this.page),"Cannot use home button on non-Android devices"),await this.page.home()}};n.push(r)}else if("AndroidBackButton"===t.type){let r={type:"Action",subType:"AndroidBackButton",param:null,thought:t.thought,locate:t.locate,executor:async t=>{(0,el.assert)(ep(this.page),"Cannot use back button on non-Android devices"),await this.page.back()}};n.push(r)}else if("AndroidRecentAppsButton"===t.type){let r={type:"Action",subType:"AndroidRecentAppsButton",param:null,thought:t.thought,locate:t.locate,executor:async t=>{(0,el.assert)(ep(this.page),"Cannot use recent apps button on non-Android devices"),await this.page.recentApps()}};n.push(r)}else if("AndroidLongPress"===t.type){let r={type:"Action",subType:"AndroidLongPress",param:t.param,thought:t.thought,locate:t.locate,executor:async t=>{(0,el.assert)(ep(this.page),"Cannot use long press on non-Android devices");let{x:r,y:n,duration:i}=t;await this.page.longPress(r,n,i)}};n.push(r)}else{if("AndroidPull"!==t.type)throw Error(`Unknown or unsupported task type: ${t.type}`);{let r={type:"Action",subType:"AndroidPull",param:t.param,thought:t.thought,locate:t.locate,executor:async t=>{(0,el.assert)(ep(this.page),"Cannot use pull action on non-Android devices");let{direction:r,startPoint:n,distance:i,duration:a}=t,o=n?{left:n.x,top:n.y}:void 0;if("down"===r)await this.page.pullDown(o,i,a);else{if("up"!==r)throw Error(`Unknown pull direction: ${r}`);await this.page.pullUp(o,i,a)}}};n.push(r)}}}),{tasks:n.map((t,r)=>"Action"===t.type?this.prependExecutorWithScreenshot(t,r===n.length-1):t)}}async setupPlanningContext(t){let r=Date.now(),n=await this.insight.contextRetrieverFn("locate"),i={type:"screenshot",ts:r,screenshot:n.screenshotBase64,timing:"before Planning"};return t.task.recorder=[i],t.task.pageContext=n,{pageContext:n}}async loadYamlFlowAsPlanning(t,r){let n=new er.Executor(eh("Action",t),{onTaskStart:this.onTaskStartCallback}),i={type:"Planning",subType:"LoadYaml",locate:null,param:{userInstruction:t},executor:async(t,n)=>(await this.setupPlanningContext(n),{output:{actions:[],more_actions_needed_by_instruction:!1,log:"",yamlString:r},cache:{hit:!0}})};return await n.append(i),await n.flush(),{executor:n}}planningTaskFromPrompt(t,r,n){return{type:"Planning",subType:"Plan",locate:null,param:{userInstruction:t,log:r},executor:async(t,r)=>{let i=Date.now(),{pageContext:a}=await this.setupPlanningContext(r),o=await (0,er.plan)(t.userInstruction,{context:a,log:t.log,actionContext:n,pageType:this.page.pageType}),{actions:s,log:l,more_actions_needed_by_instruction:u,error:d,usage:c,rawResponse:h,sleep:f}=o;r.task.log={...r.task.log||{},rawResponse:h},r.task.usage=c;let p=!1,m=!1,g="",b=(s||[]).reduce((t,r)=>{if(p)return t;if(r.locate)m&&r.locate.bbox&&delete r.locate.bbox,r.locate.bbox&&(m=!0),t.push({type:"Locate",locate:r.locate,param:null,thought:r.locate.prompt});else if(["Tap","Hover","Input"].includes(r.type))return g=`invalid planning response: ${JSON.stringify(r)}`,p=!0,t;return t.push(r),t},[]);if(f){let t=f-(Date.now()-i);t>0&&b.push({type:"Sleep",param:{timeMs:t},locate:null})}return 0===b.length&&(0,el.assert)(!u||f,d?`Failed to plan: ${d}`:g||"No plan found"),{output:{actions:b,more_actions_needed_by_instruction:u,log:l,yamlFlow:o.yamlFlow},cache:{hit:!1},pageContext:a}}}}planningTaskToGoal(t){return{type:"Planning",subType:"Plan",locate:null,param:{userInstruction:t},executor:async(t,r)=>{let{pageContext:n}=await this.setupPlanningContext(r),i=await (0,en.resizeImageForUiTars)(n.screenshotBase64,n.size);this.appendConversationHistory({role:"user",content:[{type:"image_url",image_url:{url:i}}]});let a=await (0,en.vlmPlanning)({userInstruction:t.userInstruction,conversationHistory:this.conversationHistory,size:n.size}),{actions:o,action_summary:s,usage:l}=a;return r.task.log={...r.task.log||{},rawResponse:a.rawResponse},r.task.usage=l,this.appendConversationHistory({role:"assistant",content:s}),{output:{actions:o,thought:o[0]?.thought,actionType:o[0].type,more_actions_needed_by_instruction:!0,log:"",yamlFlow:a.yamlFlow},cache:{hit:!1}}}}}async runPlans(t,r,n){let i=new er.Executor(t,{onTaskStart:this.onTaskStartCallback}),{tasks:a}=await this.convertPlanToExecutable(r,n);await i.append(a);let{output:o}=await i.flush();return{output:o,executor:i}}async action(t,r,n){let i=new er.Executor(eh("Action",t),{onTaskStart:this.onTaskStartCallback}),a=this.planningTaskFromPrompt(t,void 0,r),o=0,s=[],l=[],u=(0,eo.getAIConfigInNumber)(eo.MIDSCENE_REPLANNING_CYCLE_LIMIT)||10;for(;a;){let d;if(o>u){let t="Replanning too many times, please split the task into multiple steps";return this.appendErrorPlan(i,t)}await i.append(a);let c=await i.flush(),h=c?.output;if(i.isInErrorState())return{output:h,executor:i};let f=h.actions||[];l.push(...h.yamlFlow||[]);try{d=await this.convertPlanToExecutable(f,n),i.append(d.tasks)}catch(t){return this.appendErrorPlan(i,`Error converting plans to executable tasks: ${t}, plans: ${JSON.stringify(f)}`)}if(await i.flush(),i.isInErrorState())return{output:void 0,executor:i};if(h?.log&&s.push(h.log),!h.more_actions_needed_by_instruction){a=null;break}a=this.planningTaskFromPrompt(t,s.length>0?`- ${s.join("\n- ")}`:void 0,r),o++}return{output:{yamlFlow:l},executor:i}}async actionToGoal(t,r){let n=new er.Executor(eh("Action",t),{onTaskStart:this.onTaskStartCallback});this.conversationHistory=[];let i=0,a=[];for(;i<40;){let o;i++;let s=this.planningTaskToGoal(t);await n.append(s);let l=await n.flush();if(n.isInErrorState())return{output:void 0,executor:n};if(!l)throw Error("result of taskExecutor.flush() is undefined in function actionToGoal");let{output:u}=l,d=u.actions;a.push(...u.yamlFlow||[]);try{o=await this.convertPlanToExecutable(d,r),n.append(o.tasks)}catch(t){return this.appendErrorPlan(n,`Error converting plans to executable tasks: ${t}, plans: ${JSON.stringify(d)}`)}if(await n.flush(),n.isInErrorState())return{output:void 0,executor:n};if("Finished"===d[0].type)break}return{output:{yamlFlow:a},executor:n}}async createTypeQueryTask(t,r,n,i){let a=new er.Executor(eh(t,"string"==typeof r?r:JSON.stringify(r)),{onTaskStart:this.onTaskStartCallback}),o={type:"Insight",subType:t,locate:null,param:{dataDemand:i?{demand:r,multimodalPrompt:i}:r},executor:async(a,o)=>{let s,{task:l}=o;this.insight.onceDumpUpdatedFn=t=>{s=t};let u=Date.now(),d=await this.insight.contextRetrieverFn("extract");l.pageContext=d,l.recorder=[{type:"screenshot",ts:u,screenshot:d.screenshotBase64,timing:"before Extract"}];let c="Query"!==t,h=r;c&&(h={result:`${t}, ${r}`});let{data:f,usage:p,thought:m}=await this.insight.extract(h,n,i),g=f;return c&&((0,el.assert)(void 0!==f?.result,"No result in query data"),g=f.result),{output:g,log:{dump:s},usage:p,thought:m}}};await a.append(this.prependExecutorWithScreenshot(o));let s=await a.flush();if(!s)throw Error("result of taskExecutor.flush() is undefined in function createTypeQueryTask");let{output:l,thought:u}=s;return{output:l,thought:u,executor:a}}async query(t,r){return this.createTypeQueryTask("Query",t,r)}async boolean(t,r){let{textPrompt:n,multimodalPrompt:i}=F(t);return this.createTypeQueryTask("Boolean",n,r,i)}async number(t,r){let{textPrompt:n,multimodalPrompt:i}=F(t);return this.createTypeQueryTask("Number",n,r,i)}async string(t,r){let{textPrompt:n,multimodalPrompt:i}=F(t);return this.createTypeQueryTask("String",n,r,i)}async assert(t,r){let{textPrompt:n,multimodalPrompt:i}=F(t);return await this.createTypeQueryTask("Assert",n,r,i)}appendConversationHistory(t){if("user"===t.role&&this.conversationHistory.filter(t=>"user"===t.role).length>=4&&"user"===t.role){let t=this.conversationHistory.findIndex(t=>"user"===t.role);t>=0&&this.conversationHistory.splice(t,1)}this.conversationHistory.push(t)}async appendErrorPlan(t,r){let n={type:"Error",param:{thought:r},locate:null},{tasks:i}=await this.convertPlanToExecutable([n]);return await t.append(this.prependExecutorWithScreenshot(i[0])),await t.flush(),{output:void 0,executor:t}}async waitFor(t,r){let n=`waitFor: ${t}`,i=new er.Executor(eh("WaitFor",n),{onTaskStart:this.onTaskStartCallback}),{timeoutMs:a,checkIntervalMs:o}=r;(0,el.assert)(t,"No assertion for waitFor"),(0,el.assert)(a,"No timeoutMs for waitFor"),(0,el.assert)(o,"No checkIntervalMs for waitFor");let s=Date.now(),l=Date.now(),u="";for(;Date.now()-s<a;){l=Date.now();let r={type:"AssertWithoutThrow",param:{assertion:t},locate:null},{tasks:n}=await this.convertPlanToExecutable([r]);await i.append(this.prependExecutorWithScreenshot(n[0]));let a=await i.flush();if(!a)throw Error("result of taskExecutor.flush() is undefined in function waitFor");let{output:s}=a;if(s?.pass)return{output:void 0,executor:i};u=s?.thought||`unknown error when waiting for assertion: ${t}`;let d=Date.now();if(d-l<o){let t={type:"Sleep",param:{timeMs:o-(d-l)},locate:null},{tasks:r}=await this.convertPlanToExecutable([t]);await i.append(this.prependExecutorWithScreenshot(r[0])),await i.flush()}}return this.appendErrorPlan(i,`waitFor timeout: ${u}`)}},eg=require_logger(),eb=require_utils5(),ey=(0,eg.getDebug)("plan-builder");function e_(t,r,n){let i=[],a=r?{type:"Locate",locate:r,param:r,thought:""}:null;if(("Tap"===t||"Hover"===t||"RightClick"===t)&&((0,eb.assert)(r,`missing locate info for action "${t}"`),(0,eb.assert)(a,`missing locate info for action "${t}"`),i=[a,{type:t,param:null,thought:"",locate:r}]),"Input"===t||"KeyboardPress"===t){"Input"===t&&(0,eb.assert)(r,`missing locate info for action "${t}"`),(0,eb.assert)(n,`missing param for action "${t}"`);let o={type:t,param:n,thought:"",locate:r};i=a?[a,o]:[o]}if("Scroll"===t){(0,eb.assert)(n,`missing param for action "${t}"`);let o={type:t,param:n,thought:"",locate:r};i=a?[a,o]:[o]}if("Sleep"===t&&((0,eb.assert)(n,`missing param for action "${t}"`),i=[{type:t,param:n,thought:"",locate:null}]),"Locate"===t&&((0,eb.assert)(r,`missing locate info for action "${t}"`),i=[{type:t,param:r,locate:r,thought:""}]),i)return ey("buildPlans",i),i;throw Error(`Not supported type: ${t}`)}var ev=(0,ee.getDebug)("web-integration"),eA={domIncluded:!1,screenshotIncluded:!0},ew=class{constructor(t,r){this.dryMode=!1,this.destroyed=!1,this.page=t,this.opts=Object.assign({generateReport:!0,autoPrintReportMsg:!0,groupName:"Midscene Report",groupDescription:""},r||{}),"puppeteer"!==this.page.pageType&&"playwright"!==this.page.pageType||(this.page.waitForNavigationTimeout=this.opts.waitForNavigationTimeout??J.DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT,this.page.waitForNetworkIdleTimeout=this.opts.waitForNetworkIdleTimeout??J.DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT),this.onTaskStartTip=this.opts.onTaskStartTip,this.insight=new z.Insight(async t=>this.getUIContext(t)),r?.cacheId&&"android"!==this.page.pageType&&(this.taskCache=new B(r.cacheId,(0,Q.getAIConfigInBoolean)("MIDSCENE_CACHE"))),this.taskExecutor=new em(this.page,this.insight,{taskCache:this.taskCache,onTaskStart:this.callbackOnTaskStartTip.bind(this)}),this.dump=this.resetDump(),this.reportFileName=r?.reportFileName||function(t="web"){return`${(0,m.getAIConfig)(m.MIDSCENE_REPORT_TAG_NAME)||t}-${(0,v.default)().format("YYYY-MM-DD_HH-mm-ss")}-${(0,_.uuid)().substring(0,8)}`}(r?.testId||this.page.pageType||"web")}async getUIContext(t){return this.frozenPageContext?(ev("Using frozen page context for action:",t),this.frozenPageContext):t&&("extract"===t||"assert"===t)?await D(this.page):await D(this.page,(0,Q.vlLocateMode)())}async _snapshotContext(){return await this.getUIContext("locate")}async setAIActionContext(t){this.opts.aiActionContext=t}resetDump(){return this.dump={groupName:this.opts.groupName,groupDescription:this.opts.groupDescription,executions:[]},this.dump}appendExecutionDump(t){let r=function(t){function r(t){if(!t)return null;let n=Array.isArray(t.children)?t.children.map(r).filter(t=>null!==t):[];return t.node&&!0===t.node.isVisible?{...t,children:n}:n.length>0?{node:null,children:n}:null}return{...t,tasks:Array.isArray(t.tasks)?t.tasks.map(t=>{let n={...t};return t.pageContext?.tree&&(n.pageContext={...t.pageContext,tree:r(t.pageContext.tree)||{node:null,children:[]}}),n}):t.tasks}}(t);this.dump.executions.push(r)}dumpDataString(){return this.dump.groupName=this.opts.groupName,this.dump.groupDescription=this.opts.groupDescription,(0,Y.stringifyDumpData)(this.dump)}reportHTMLString(){return(0,Y.reportHTMLContent)(this.dumpDataString())}writeOutActionDumps(){var t;if(this.destroyed)throw Error("PageAgent has been destroyed. Cannot update report file.");let{generateReport:r,autoPrintReportMsg:n}=this.opts;this.reportFile=(0,Y.writeLogFile)({fileName:this.reportFileName,fileExt:Y.groupedActionDumpFileExt,fileContent:this.dumpDataString(),type:"dump",generateReport:r}),ev("writeOutActionDumps",this.reportFile),r&&n&&this.reportFile&&(t=this.reportFile,(0,_.logMsg)(`Midscene - report file updated: ${t}`))}async callbackOnTaskStartTip(t){let r=function(t){let r;if("Planning"===t.type&&(r=t?.param?.userInstruction),"Insight"===t.type&&(r=t?.param?.prompt||t?.param?.id||t?.param?.dataDemand||t?.param?.assertion),"Action"===t.type){let n=t?.locate,i=n?ed(n):"";r=t.thought||"","number"==typeof t?.param?.timeMs?r=`${t?.param?.timeMs}ms`:"string"==typeof t?.param?.scrollType?r=ec(t?.param):"string"==typeof t?.param?.direction&&"AndroidPull"===t?.subType?r=function(t){if(!t)return"";let r=[];return r.push(`direction: ${t.direction||"down"}`),t.startPoint&&r.push(`start: (${t.startPoint.x}, ${t.startPoint.y})`),t.distance&&r.push(`distance: ${t.distance}`),t.duration&&r.push(`duration: ${t.duration}ms`),r.join(", ")}(t?.param):void 0!==t?.param?.value&&(r=t?.param?.value),i&&(r=r?`${i} - ${r}`:i)}return void 0===r?"":"string"==typeof r?r:JSON.stringify(r,void 0,2)}(t),n=r?`${eu(t)} - ${r}`:eu(t);this.onTaskStartTip&&await this.onTaskStartTip(n)}async afterTaskRunning(t,r=!1){this.appendExecutionDump(t.dump());try{await this.onDumpUpdate?.(this.dumpDataString())}catch(t){import_console_browserify.default.error("Error in onDumpUpdate",t)}if(this.writeOutActionDumps(),t.isInErrorState()&&!r){let r=t.latestErrorTask();throw Error(`${r?.errorMessage}
|
|
747
|
+
cache file: ${t}`):(j("cache loaded from file, path: %s, cache version: %s, record length: %s",t,n.midsceneVersion,n.caches.length),n.midsceneVersion=M,n)}catch(r){return void j("cache file exists but load failed, path: %s, error: %s",t,r)}}flushCacheToFile(){if(this.cacheFilePath)try{let t=(0,E.dirname)(this.cacheFilePath);(0,x.existsSync)(t)||((0,x.mkdirSync)(t,{recursive:!0}),j("created cache directory: %s",t));let r=[...this.cache.caches].sort((t,r)=>"plan"===t.type&&"locate"===r.type?-1:+("locate"===t.type&&"plan"===r.type)),n={...this.cache,caches:r},i=R.default.dump(n);(0,x.writeFileSync)(this.cacheFilePath,i),j("cache flushed to file: %s",this.cacheFilePath)}catch(t){j("write cache to file failed, path: %s, error: %s",this.cacheFilePath,t)}else j("no cache file path, will not write cache to file")}updateOrAppendCacheRecord(t,r){r?"plan"===t.type?r.updateFn(r=>{r.yamlWorkflow=t.yamlWorkflow}):r.updateFn(r=>{r.xpaths=t.xpaths}):this.appendCache(t)}},L=(0,y.getDebug)("tool:profile");async function D(t,r){let n,i;if((0,_.assert)(t,"page is required"),t._forceUsePageContext)return await t._forceUsePageContext();L("Getting page URL");let a=await t.url();L("URL end"),L("Uploading test info to server"),(0,p.uploadTestInfoToServer)({testUrl:a}),L("UploadTestInfoToServer end"),L("Starting parallel operations: screenshot and element tree"),await Promise.all([t.screenshotBase64().then(t=>{n=t,L("ScreenshotBase64 end")}),t.getElementsNodeTree().then(async t=>{i=t,L("GetElementsNodeTree end")})]),L("ParseContextFromWebPage end"),L("Traversing element tree");let o=(0,g.traverseTree)(i,t=>{let{rect:r,id:n,content:i,attributes:a,indexId:o,isVisible:s}=t;return new A({rect:r,id:n,content:i,attributes:a,indexId:o,isVisible:s})});L("TraverseTree end"),(0,_.assert)(n,"screenshotBase64 is required");let s=await t.size();return L(`size: ${s.width}x${s.height} dpr: ${s.dpr}`),s.dpr&&s.dpr>1&&(L("Resizing screenshot for high DPR display"),n=await (0,b.resizeImgBase64)(n,{width:s.width,height:s.height}),L("ResizeImgBase64 end")),{tree:o,size:s,screenshotBase64:n,url:a}}var U="NOT_IMPLEMENTED_AS_DESIGNED",F=t=>"string"==typeof t?{textPrompt:t,multimodalPrompt:void 0}:{textPrompt:t.prompt,multimodalPrompt:t.images?{images:t.images,convertHttpImage2Base64:!!t.convertHttpImage2Base64}:void 0},z=require_lib7(),G=c(require_js_yaml()),H=require_fs(),q=require_path_browserify(),V=require_utils5(),W=require_common6(),$=class{constructor(t,r,n,i){if(this.script=t,this.setupAgent=r,this.onTaskStatusChange=n,this.taskStatusList=[],this.status="init",this.unnamedResultIndex=0,this.pageAgent=null,this.scriptPath=i,this.result={},this.target=t.target||t.web||t.android,V.ifInBrowser||V.ifInWorker)this.output=void 0;else if(this.target?.output)this.output=(0,q.resolve)(import_browser.default.cwd(),this.target.output);else{let t=this.scriptPath?(0,q.basename)(this.scriptPath,".yaml").replace(/\.(ya?ml)$/i,""):"script";this.output=(0,q.join)((0,W.getMidsceneRunSubDir)("output"),`${t}-${Date.now()}.json`)}V.ifInBrowser||V.ifInWorker?this.unstableLogContent=void 0:"string"==typeof this.target?.unstableLogContent?this.unstableLogContent=(0,q.resolve)(import_browser.default.cwd(),this.target.unstableLogContent):!0===this.target?.unstableLogContent&&(this.unstableLogContent=(0,q.join)((0,W.getMidsceneRunSubDir)("output"),"unstableLogContent.json")),this.taskStatusList=(t.tasks||[]).map((t,r)=>({...t,index:r,status:"init",totalSteps:t.flow?.length||0}))}setResult(t,r){let n=t||this.unnamedResultIndex++;return this.result[n]&&import_console_browserify.default.warn(`result key ${n} already exists, will overwrite`),this.result[n]=r,this.flushResult()}setPlayerStatus(t,r){this.status=t,this.errorInSetup=r}notifyCurrentTaskStatusChange(t){let r="number"==typeof t?t:this.currentTaskIndex;if("number"!=typeof r)return;let n=this.taskStatusList[r];this.onTaskStatusChange&&this.onTaskStatusChange(n)}async setTaskStatus(t,r,n){this.taskStatusList[t].status=r,n&&(this.taskStatusList[t].error=n),this.notifyCurrentTaskStatusChange(t)}setTaskIndex(t){this.currentTaskIndex=t}flushResult(){if(this.output){let t=(0,q.resolve)(import_browser.default.cwd(),this.output),r=(0,q.dirname)(t);(0,H.existsSync)(r)||(0,H.mkdirSync)(r,{recursive:!0}),(0,H.writeFileSync)(t,JSON.stringify(this.result||{},void 0,2))}}flushUnstableLogContent(){if(this.unstableLogContent){let t=this.pageAgent?._unstableLogContent(),r=(0,q.resolve)(import_browser.default.cwd(),this.unstableLogContent),n=(0,q.dirname)(r);(0,H.existsSync)(n)||(0,H.mkdirSync)(n,{recursive:!0}),(0,H.writeFileSync)(r,JSON.stringify(t,null,2))}}async playTask(t,r){let{flow:n}=t;for(let i in(0,V.assert)(n,"missing flow in task"),n){t.currentStep=Number.parseInt(i,10);let a=n[i];if("aiAction"in a||"ai"in a){let t=a,n=t.aiAction||t.ai;(0,V.assert)(n,"missing prompt for ai (aiAction)"),(0,V.assert)("string"==typeof n,"prompt for aiAction must be a string"),await r.aiAction(n,{cacheable:t.cacheable})}else if("aiAssert"in a){let t=a,n=t.aiAssert,i=t.errorMessage;(0,V.assert)(n,"missing prompt for aiAssert"),(0,V.assert)("string"==typeof n,"prompt for aiAssert must be a string"),await r.aiAssert(n,i)}else if("aiQuery"in a){let t=a,n=t.aiQuery,i={domIncluded:t.domIncluded,screenshotIncluded:t.screenshotIncluded};(0,V.assert)(n,"missing prompt for aiQuery"),(0,V.assert)("string"==typeof n,"prompt for aiQuery must be a string");let o=await r.aiQuery(n,i);this.setResult(t.name,o)}else if("aiNumber"in a){let t=a,n=t.aiNumber,i={domIncluded:t.domIncluded,screenshotIncluded:t.screenshotIncluded};(0,V.assert)(n,"missing prompt for aiNumber"),(0,V.assert)("string"==typeof n,"prompt for number must be a string");let o=await r.aiNumber(n,i);this.setResult(t.name,o)}else if("aiString"in a){let t=a,n=t.aiString,i={domIncluded:t.domIncluded,screenshotIncluded:t.screenshotIncluded};(0,V.assert)(n,"missing prompt for aiString"),(0,V.assert)("string"==typeof n,"prompt for string must be a string");let o=await r.aiString(n,i);this.setResult(t.name,o)}else if("aiBoolean"in a){let t=a,n=t.aiBoolean,i={domIncluded:t.domIncluded,screenshotIncluded:t.screenshotIncluded};(0,V.assert)(n,"missing prompt for aiBoolean"),(0,V.assert)("string"==typeof n,"prompt for boolean must be a string");let o=await r.aiBoolean(n,i);this.setResult(t.name,o)}else if("aiAsk"in a){let t=a,n=t.aiAsk;(0,V.assert)(n,"missing prompt for aiAsk"),(0,V.assert)("string"==typeof n,"prompt for aiAsk must be a string");let i=await r.aiAsk(n);this.setResult(t.name,i)}else if("aiLocate"in a){let t=a,n=t.aiLocate;(0,V.assert)(n,"missing prompt for aiLocate"),(0,V.assert)("string"==typeof n,"prompt for aiLocate must be a string");let i=await r.aiLocate(n,t);this.setResult(t.name,i)}else if("aiWaitFor"in a){let t=a,n=t.aiWaitFor;(0,V.assert)(n,"missing prompt for aiWaitFor"),(0,V.assert)("string"==typeof n,"prompt for aiWaitFor must be a string");let i=t.timeout;await r.aiWaitFor(n,{timeoutMs:i})}else if("sleep"in a){let t=a.sleep,r=t;"string"==typeof t&&(r=Number.parseInt(t,10)),(0,V.assert)(r&&r>0,`ms for sleep must be greater than 0, but got ${t}`),await new Promise(t=>setTimeout(t,r))}else if("aiTap"in a){let t=a;await r.aiTap(t.aiTap,t)}else if("aiRightClick"in a){let t=a;await r.aiRightClick(t.aiRightClick,t)}else if("aiHover"in a){let t=a;await r.aiHover(t.aiHover,t)}else if("aiInput"in a){let t=a;await r.aiInput(t.aiInput,t.locate,t)}else if("aiKeyboardPress"in a){let t=a;await r.aiKeyboardPress(t.aiKeyboardPress,t.locate,t)}else if("aiScroll"in a){let t=a;await r.aiScroll(t,t.locate,t)}else if("javascript"in a){let t=a,n=await r.evaluateJavaScript(t.javascript);this.setResult(t.name,n)}else{if(!("logScreenshot"in a))throw Error(`unknown flowItem: ${JSON.stringify(a)}`);{let t=a;await r.logScreenshot(t.logScreenshot,{content:t.content||""})}}}this.reportFile=r.reportFile,await this.flushUnstableLogContent()}async run(){let{target:t,web:r,android:n,tasks:i}=this.script,a=r||t||n;this.setPlayerStatus("running");let o=null,s=[];try{let{agent:t,freeFn:r}=await this.setupAgent(a),n=(o=t).onTaskStartTip;o.onTaskStartTip=t=>{"running"===this.status&&(this.agentStatusTip=t),n?.(t)},s=[...r||[],{name:"restore-agent-onTaskStartTip",fn:()=>{o&&(o.onTaskStartTip=n)}}]}catch(t){return void this.setPlayerStatus("error",t)}this.pageAgent=o;let l=0;this.setPlayerStatus("running");let u=!1;for(;l<i.length;){let t=this.taskStatusList[l];this.setTaskStatus(l,"running"),this.setTaskIndex(l);try{await this.playTask(t,this.pageAgent),this.setTaskStatus(l,"done")}catch(r){if(this.setTaskStatus(l,"error",r),!t.continueOnError){this.reportFile=o.reportFile,u=!0;break}}this.reportFile=o?.reportFile,l++}for(let t of(u?this.setPlayerStatus("error"):this.setPlayerStatus("done"),this.agentStatusTip="",s))try{await t.fn()}catch(t){}}},K=(c(require_js_yaml()),require_utils5()),Z=c(require_js_yaml());function X(t,r,n){let i=t;if(-1!==t.indexOf("android")&&t.match(/deviceId:\s*(\d+)/)){let r;i=t.replace(/deviceId:\s*(\d+)/g,(t,n)=>(r=n,`deviceId: '${n}'`)),import_console_browserify.default.warn(`please use string-style deviceId in yaml script, for example: deviceId: "${r}"`)}let a=function(t){return t.replace(/\$\{([^}]+)\}/g,(t,r)=>{let n=import_browser.default.env[r.trim()];if(void 0===n)throw Error(`Environment variable "${r.trim()}" is not defined`);return n})}(i),o=Z.default.load(a,{schema:Z.default.JSON_SCHEMA}),s=r?`, failed to load ${r}`:"",l=void 0!==o.android?Object.assign({},o.android||{}):void 0,u=o.web||o.target,d=void 0!==u?Object.assign({},u||{}):void 0;return n||((0,K.assert)(d||l,`at least one of "target", "web", or "android" properties is required in yaml script${s}`),(0,K.assert)(d&&!l||!d&&l,`only one of "target", "web", or "android" properties is allowed in yaml script${s}`),(d||l)&&(0,K.assert)("object"==typeof d||"object"==typeof l,`property "target/web/android" must be an object${s}`)),(0,K.assert)(o.tasks,`property "tasks" is required in yaml script ${s}`),(0,K.assert)(Array.isArray(o.tasks),`property "tasks" must be an array in yaml script, but got ${o.tasks}`),o}var Y=require_utils12(),J=require_constants(),Q=require_env(),ee=require_logger(),et=require_utils5(),er=require_lib7(),en=require_ai_model(),ei=require_utils12(),ea=require_constants(),eo=require_env(),es=require_logger(),el=require_utils5();function eu(t){return t.subType&&"Plan"!==t.subType?`${t.type} / ${t.subType||""}`:t.type}function ed(t){return t?"string"==typeof t?t:"string"==typeof t.prompt?t.prompt:t.prompt.prompt:""}function ec(t){return t?`${t.direction||"down"}, ${t.scrollType||"once"}, ${t.distance||"distance-not-set"}`:""}function eh(t,r){return r?`${t} - ${r}`:t}var ef=(0,es.getDebug)("page-task-executor"),ep=t=>"android"===t.pageType,em=class{constructor(t,r,n){this.conversationHistory=[],this.page=t,this.insight=r,this.taskCache=n.taskCache,this.onTaskStartCallback=n?.onTaskStart}async recordScreenshot(t){let r=await this.page.screenshotBase64();return{type:"screenshot",ts:Date.now(),screenshot:r,timing:t}}async getElementXpath(t,r){let n=r?.id;if(void 0!==r?.isOrderSensitive)return await this.page.getXpathsByPoint({left:r.center[0],top:r.center[1]},r?.isOrderSensitive);if(r?.attributes?.nodeType===ea.NodeType.POSITION){await this.insight.contextRetrieverFn("locate");let i=(0,en.elementByPositionWithElementInfo)(t.tree,{x:r.center[0],y:r.center[1]},{requireStrictDistance:!1,filterPositionElements:!0});i?.id?n=i.id:ef("no element id found for position node, will not update cache",r)}if(n)try{return await this.page.getXpathsById(n)}catch(t){ef("getXpathsById error: ",t)}}prependExecutorWithScreenshot(t,r=!1){return{...t,executor:async(n,i,...a)=>{let o=[],{task:s}=i;s.recorder=o;let l=await this.recordScreenshot(`before ${s.type}`);o.push(l);let u=await t.executor(n,i,...a);if("Action"===t.type&&await Promise.all([(async()=>{if(await (0,ei.sleep)(100),this.page.waitUntilNetworkIdle)try{await this.page.waitUntilNetworkIdle()}catch(t){}})(),(0,ei.sleep)(200)]),r){let t=await this.recordScreenshot("after Action");o.push(t)}return u}}}async convertPlanToExecutable(t,r){let n=[];return t.forEach(t=>{if("Locate"===t.type){if(null===t.locate||null===t.locate?.id||"null"===t.locate?.id)return;let i={type:"Insight",subType:"Locate",param:t.locate?{...t.locate,cacheable:r?.cacheable}:void 0,thought:t.thought,locate:t.locate,executor:async(t,r)=>{let n,i,a,o,{task:s}=r;(0,el.assert)(t?.prompt||t?.id||t?.bbox,"No prompt or id or position or bbox to locate"),this.insight.onceDumpUpdatedFn=t=>{n=t,i=t?.taskInfo?.usage,s.log={dump:n},s.usage=i};let l=Date.now(),u=await this.insight.contextRetrieverFn("locate");s.pageContext=u,s.recorder=[{type:"screenshot",ts:l,screenshot:u.screenshotBase64,timing:"before Insight"}];let d=t.xpath?await this.page.getElementInfoByXpath(t.xpath):void 0,c=!!d,h=t.prompt,p=this.taskCache?.matchLocateCache(h),m=p?.cacheContent?.xpaths,b=c?null:await async function(t,r,n,i){try{if(r?.length&&t.taskCache?.isCacheResultUsed&&!1!==i)for(let i=0;i<r.length;i++){let a=await t.page.getElementInfoByXpath(r[i]);if(a?.id)return j("cache hit, prompt: %s",n),j("found a new element with same xpath, xpath: %s, id: %s",r[i],a?.id),a}}catch(t){j("get element info by xpath error: ",t)}}(this,m,h,t.cacheable),y=!!b,_=c||y?void 0:function(t,r){if(t){if(t.id)return(0,g.getNodeFromCacheList)(t.id);if(t.bbox){let n={x:Math.floor((t.bbox[0]+t.bbox[2])/2),y:Math.floor((t.bbox[1]+t.bbox[3])/2)},i=(0,f.elementByPositionWithElementInfo)(r,n);return i||(i=(0,g.generateElementByPosition)(n)),i}}}(t,u.tree),v=!!_,A=c||y||v?void 0:(await this.insight.locate(t,{context:u})).element,w=!!A,x=d||b||_||A;if(x&&this.taskCache&&!y&&!1!==t?.cacheable){let t=await this.getElementXpath(u,x);t?.length?(a=t,this.taskCache.updateOrAppendCacheRecord({type:"locate",prompt:h,xpaths:t},p)):ef("no xpaths found, will not update cache",h,t)}if(!x)throw Error(`Element not found: ${t.prompt}`);return c?o={from:"User expected path",context:{xpath:t.xpath}}:y?o={from:"Cache",context:{xpathsFromCache:m,xpathsToSave:a}}:v?o={from:"Planning",context:{id:_?.id,bbox:_?.bbox}}:w&&(o={from:"AI model",context:{prompt:t.prompt}}),{output:{element:x},pageContext:u,hitBy:o}}};n.push(i)}else if("Assert"===t.type||"AssertWithoutThrow"===t.type){let r=t,i={type:"Insight",subType:"Assert",param:r.param,thought:r.thought,locate:r.locate,executor:async(n,i)=>{let a,{task:o}=i;this.insight.onceDumpUpdatedFn=t=>{a=t};let s=Date.now(),l=await this.insight.contextRetrieverFn("assert");o.pageContext=l,o.recorder=[{type:"screenshot",ts:s,screenshot:l.screenshotBase64,timing:"before Insight"}];let u=await this.insight.assert(r.param.assertion);if(!u.pass){if("Assert"===t.type)throw o.output=u,o.log={dump:a},Error(u.thought||"Assertion failed without reason");o.error=Error(u.thought)}return{output:u,pageContext:l,log:{dump:a},usage:u.usage}}};n.push(i)}else if("Input"===t.type){let r={type:"Action",subType:"Input",param:t.param,thought:t.thought,locate:t.locate,executor:async(t,{element:r})=>{(!r||(await this.page.clearInput(r),t&&t.value))&&await this.page.keyboard.type(t.value,{autoDismissKeyboard:t.autoDismissKeyboard})}};n.push(r)}else if("KeyboardPress"===t.type){let r={type:"Action",subType:"KeyboardPress",param:t.param,thought:t.thought,locate:t.locate,executor:async t=>{let r=function(t){let r=Array.isArray(t)?t:[t];return r.reduce((t,n)=>{let i=r.includes("Meta")||r.includes("Control");return i&&("a"===n||"A"===n)?t.concat([{key:n,command:"SelectAll"}]):i&&("c"===n||"C"===n)?t.concat([{key:n,command:"Copy"}]):i&&("v"===n||"V"===n)?t.concat([{key:n,command:"Paste"}]):t.concat([{key:n}])},[])}(t.value);await this.page.keyboard.press(r)}};n.push(r)}else if("Tap"===t.type){let r={type:"Action",subType:"Tap",thought:t.thought,locate:t.locate,executor:async(t,{element:r})=>{(0,el.assert)(r,"Element not found, cannot tap"),await this.page.mouse.click(r.center[0],r.center[1])}};n.push(r)}else if("RightClick"===t.type){let r={type:"Action",subType:"RightClick",thought:t.thought,locate:t.locate,executor:async(t,{element:r})=>{(0,el.assert)(r,"Element not found, cannot right click"),await this.page.mouse.click(r.center[0],r.center[1],{button:"right"})}};n.push(r)}else if("Drag"===t.type){let r={type:"Action",subType:"Drag",param:t.param,thought:t.thought,locate:t.locate,executor:async t=>{(0,el.assert)(t?.start_box&&t?.end_box,"No start_box or end_box to drag"),await this.page.mouse.drag(t.start_box,t.end_box)}};n.push(r)}else if("Hover"===t.type){let r={type:"Action",subType:"Hover",thought:t.thought,locate:t.locate,executor:async(t,{element:r})=>{(0,el.assert)(r,"Element not found, cannot hover"),await this.page.mouse.move(r.center[0],r.center[1])}};n.push(r)}else if("Scroll"===t.type){let r={type:"Action",subType:"Scroll",param:t.param,thought:t.thought,locate:t.locate,executor:async(t,{element:r})=>{let n=r?{left:r.center[0],top:r.center[1]}:void 0,i=t?.scrollType;if("untilTop"===i)await this.page.scrollUntilTop(n);else if("untilBottom"===i)await this.page.scrollUntilBottom(n);else if("untilRight"===i)await this.page.scrollUntilRight(n);else if("untilLeft"===i)await this.page.scrollUntilLeft(n);else{if("once"!==i&&i)throw Error(`Unknown scroll event type: ${i}, taskParam: ${JSON.stringify(t)}`);if("down"!==t?.direction&&t&&t.direction)if("up"===t.direction)await this.page.scrollUp(t.distance||void 0,n);else if("left"===t.direction)await this.page.scrollLeft(t.distance||void 0,n);else{if("right"!==t.direction)throw Error(`Unknown scroll direction: ${t.direction}`);await this.page.scrollRight(t.distance||void 0,n)}else await this.page.scrollDown(t?.distance||void 0,n);await (0,ei.sleep)(500)}}};n.push(r)}else if("Sleep"===t.type){let r={type:"Action",subType:"Sleep",param:t.param,thought:t.thought,locate:t.locate,executor:async t=>{await (0,ei.sleep)(t?.timeMs||3e3)}};n.push(r)}else if("Error"===t.type){let r={type:"Action",subType:"Error",param:t.param,thought:t.thought||t.param?.thought,locate:t.locate,executor:async()=>{throw Error(t?.thought||t.param?.thought||"error without thought")}};n.push(r)}else if("Finished"===t.type){let r={type:"Action",subType:"Finished",param:null,thought:t.thought,locate:t.locate,executor:async t=>{}};n.push(r)}else if("AndroidHomeButton"===t.type){let r={type:"Action",subType:"AndroidHomeButton",param:null,thought:t.thought,locate:t.locate,executor:async t=>{(0,el.assert)(ep(this.page),"Cannot use home button on non-Android devices"),await this.page.home()}};n.push(r)}else if("AndroidBackButton"===t.type){let r={type:"Action",subType:"AndroidBackButton",param:null,thought:t.thought,locate:t.locate,executor:async t=>{(0,el.assert)(ep(this.page),"Cannot use back button on non-Android devices"),await this.page.back()}};n.push(r)}else if("AndroidRecentAppsButton"===t.type){let r={type:"Action",subType:"AndroidRecentAppsButton",param:null,thought:t.thought,locate:t.locate,executor:async t=>{(0,el.assert)(ep(this.page),"Cannot use recent apps button on non-Android devices"),await this.page.recentApps()}};n.push(r)}else if("AndroidLongPress"===t.type){let r={type:"Action",subType:"AndroidLongPress",param:t.param,thought:t.thought,locate:t.locate,executor:async t=>{(0,el.assert)(ep(this.page),"Cannot use long press on non-Android devices");let{x:r,y:n,duration:i}=t;await this.page.longPress(r,n,i)}};n.push(r)}else{if("AndroidPull"!==t.type)throw Error(`Unknown or unsupported task type: ${t.type}`);{let r={type:"Action",subType:"AndroidPull",param:t.param,thought:t.thought,locate:t.locate,executor:async t=>{(0,el.assert)(ep(this.page),"Cannot use pull action on non-Android devices");let{direction:r,startPoint:n,distance:i,duration:a}=t,o=n?{left:n.x,top:n.y}:void 0;if("down"===r)await this.page.pullDown(o,i,a);else{if("up"!==r)throw Error(`Unknown pull direction: ${r}`);await this.page.pullUp(o,i,a)}}};n.push(r)}}}),{tasks:n.map((t,r)=>"Action"===t.type?this.prependExecutorWithScreenshot(t,r===n.length-1):t)}}async setupPlanningContext(t){let r=Date.now(),n=await this.insight.contextRetrieverFn("locate"),i={type:"screenshot",ts:r,screenshot:n.screenshotBase64,timing:"before Planning"};return t.task.recorder=[i],t.task.pageContext=n,{pageContext:n}}async loadYamlFlowAsPlanning(t,r){let n=new er.Executor(eh("Action",t),{onTaskStart:this.onTaskStartCallback}),i={type:"Planning",subType:"LoadYaml",locate:null,param:{userInstruction:t},executor:async(t,n)=>(await this.setupPlanningContext(n),{output:{actions:[],more_actions_needed_by_instruction:!1,log:"",yamlString:r},cache:{hit:!0}})};return await n.append(i),await n.flush(),{executor:n}}planningTaskFromPrompt(t,r,n){return{type:"Planning",subType:"Plan",locate:null,param:{userInstruction:t,log:r},executor:async(t,r)=>{let i=Date.now(),{pageContext:a}=await this.setupPlanningContext(r);(0,el.assert)(this.page.actionSpace,"actionSpace for device is not implemented");let o=await this.page.actionSpace();ef("actionSpace for page",o.map(t=>t.name).join(", ")),(0,el.assert)(Array.isArray(o),"actionSpace must be an array"),0===o.length&&import_console_browserify.default.warn(`ActionSpace for ${this.page.pageType} is empty. This may lead to unexpected behavior.`);let s=await (0,er.plan)(t.userInstruction,{context:a,log:t.log,actionContext:n,pageType:this.page.pageType,actionSpace:o}),{actions:l,log:u,more_actions_needed_by_instruction:d,error:c,usage:h,rawResponse:f,sleep:p}=s;r.task.log={...r.task.log||{},rawResponse:f},r.task.usage=h;let m=!1,g=!1,b="",y=(l||[]).reduce((t,r)=>{if(m)return t;if(r.locate)g&&r.locate.bbox&&delete r.locate.bbox,r.locate.bbox&&(g=!0),t.push({type:"Locate",locate:r.locate,param:null,thought:r.locate.prompt});else if(["Tap","Hover","Input"].includes(r.type))return b=`invalid planning response: ${JSON.stringify(r)}`,m=!0,t;return t.push(r),t},[]);if(p){let t=p-(Date.now()-i);t>0&&y.push({type:"Sleep",param:{timeMs:t},locate:null})}return 0===y.length&&(0,el.assert)(!d||p,c?`Failed to plan: ${c}`:b||"No plan found"),{output:{actions:y,more_actions_needed_by_instruction:d,log:u,yamlFlow:s.yamlFlow},cache:{hit:!1},pageContext:a}}}}planningTaskToGoal(t){return{type:"Planning",subType:"Plan",locate:null,param:{userInstruction:t},executor:async(t,r)=>{let{pageContext:n}=await this.setupPlanningContext(r),i=await (0,en.resizeImageForUiTars)(n.screenshotBase64,n.size);this.appendConversationHistory({role:"user",content:[{type:"image_url",image_url:{url:i}}]});let a=await (0,en.vlmPlanning)({userInstruction:t.userInstruction,conversationHistory:this.conversationHistory,size:n.size}),{actions:o,action_summary:s,usage:l}=a;return r.task.log={...r.task.log||{},rawResponse:a.rawResponse},r.task.usage=l,this.appendConversationHistory({role:"assistant",content:s}),{output:{actions:o,thought:o[0]?.thought,actionType:o[0].type,more_actions_needed_by_instruction:!0,log:"",yamlFlow:a.yamlFlow},cache:{hit:!1}}}}}async runPlans(t,r,n){let i=new er.Executor(t,{onTaskStart:this.onTaskStartCallback}),{tasks:a}=await this.convertPlanToExecutable(r,n);await i.append(a);let{output:o}=await i.flush();return{output:o,executor:i}}async action(t,r,n){let i=new er.Executor(eh("Action",t),{onTaskStart:this.onTaskStartCallback}),a=this.planningTaskFromPrompt(t,void 0,r),o=0,s=[],l=[],u=(0,eo.getAIConfigInNumber)(eo.MIDSCENE_REPLANNING_CYCLE_LIMIT)||10;for(;a;){let d;if(o>u){let t="Replanning too many times, please split the task into multiple steps";return this.appendErrorPlan(i,t)}await i.append(a);let c=await i.flush(),h=c?.output;if(i.isInErrorState())return{output:h,executor:i};let f=h.actions||[];l.push(...h.yamlFlow||[]);try{d=await this.convertPlanToExecutable(f,n),i.append(d.tasks)}catch(t){return this.appendErrorPlan(i,`Error converting plans to executable tasks: ${t}, plans: ${JSON.stringify(f)}`)}if(await i.flush(),i.isInErrorState())return{output:void 0,executor:i};if(h?.log&&s.push(h.log),!h.more_actions_needed_by_instruction){a=null;break}a=this.planningTaskFromPrompt(t,s.length>0?`- ${s.join("\n- ")}`:void 0,r),o++}return{output:{yamlFlow:l},executor:i}}async actionToGoal(t,r){let n=new er.Executor(eh("Action",t),{onTaskStart:this.onTaskStartCallback});this.conversationHistory=[];let i=0,a=[];for(;i<40;){let o;i++;let s=this.planningTaskToGoal(t);await n.append(s);let l=await n.flush();if(n.isInErrorState())return{output:void 0,executor:n};if(!l)throw Error("result of taskExecutor.flush() is undefined in function actionToGoal");let{output:u}=l,d=u.actions;a.push(...u.yamlFlow||[]);try{o=await this.convertPlanToExecutable(d,r),n.append(o.tasks)}catch(t){return this.appendErrorPlan(n,`Error converting plans to executable tasks: ${t}, plans: ${JSON.stringify(d)}`)}if(await n.flush(),n.isInErrorState())return{output:void 0,executor:n};if("Finished"===d[0].type)break}return{output:{yamlFlow:a},executor:n}}async createTypeQueryTask(t,r,n,i){let a=new er.Executor(eh(t,"string"==typeof r?r:JSON.stringify(r)),{onTaskStart:this.onTaskStartCallback}),o={type:"Insight",subType:t,locate:null,param:{dataDemand:i?{demand:r,multimodalPrompt:i}:r},executor:async(a,o)=>{let s,{task:l}=o;this.insight.onceDumpUpdatedFn=t=>{s=t};let u=Date.now(),d=await this.insight.contextRetrieverFn("extract");l.pageContext=d,l.recorder=[{type:"screenshot",ts:u,screenshot:d.screenshotBase64,timing:"before Extract"}];let c="Query"!==t,h=r;c&&(h={result:`${t}, ${r}`});let{data:f,usage:p,thought:m}=await this.insight.extract(h,n,i),g=f;return c&&((0,el.assert)(void 0!==f?.result,"No result in query data"),g=f.result),{output:g,log:{dump:s},usage:p,thought:m}}};await a.append(this.prependExecutorWithScreenshot(o));let s=await a.flush();if(!s)throw Error("result of taskExecutor.flush() is undefined in function createTypeQueryTask");let{output:l,thought:u}=s;return{output:l,thought:u,executor:a}}async query(t,r){return this.createTypeQueryTask("Query",t,r)}async boolean(t,r){let{textPrompt:n,multimodalPrompt:i}=F(t);return this.createTypeQueryTask("Boolean",n,r,i)}async number(t,r){let{textPrompt:n,multimodalPrompt:i}=F(t);return this.createTypeQueryTask("Number",n,r,i)}async string(t,r){let{textPrompt:n,multimodalPrompt:i}=F(t);return this.createTypeQueryTask("String",n,r,i)}async assert(t,r){let{textPrompt:n,multimodalPrompt:i}=F(t);return await this.createTypeQueryTask("Assert",n,r,i)}appendConversationHistory(t){if("user"===t.role&&this.conversationHistory.filter(t=>"user"===t.role).length>=4&&"user"===t.role){let t=this.conversationHistory.findIndex(t=>"user"===t.role);t>=0&&this.conversationHistory.splice(t,1)}this.conversationHistory.push(t)}async appendErrorPlan(t,r){let n={type:"Error",param:{thought:r},locate:null},{tasks:i}=await this.convertPlanToExecutable([n]);return await t.append(this.prependExecutorWithScreenshot(i[0])),await t.flush(),{output:void 0,executor:t}}async waitFor(t,r){let n=`waitFor: ${t}`,i=new er.Executor(eh("WaitFor",n),{onTaskStart:this.onTaskStartCallback}),{timeoutMs:a,checkIntervalMs:o}=r;(0,el.assert)(t,"No assertion for waitFor"),(0,el.assert)(a,"No timeoutMs for waitFor"),(0,el.assert)(o,"No checkIntervalMs for waitFor");let s=Date.now(),l=Date.now(),u="";for(;Date.now()-s<a;){l=Date.now();let r={type:"AssertWithoutThrow",param:{assertion:t},locate:null},{tasks:n}=await this.convertPlanToExecutable([r]);await i.append(this.prependExecutorWithScreenshot(n[0]));let a=await i.flush();if(!a)throw Error("result of taskExecutor.flush() is undefined in function waitFor");let{output:s}=a;if(s?.pass)return{output:void 0,executor:i};u=s?.thought||`unknown error when waiting for assertion: ${t}`;let d=Date.now();if(d-l<o){let t={type:"Sleep",param:{timeMs:o-(d-l)},locate:null},{tasks:r}=await this.convertPlanToExecutable([t]);await i.append(this.prependExecutorWithScreenshot(r[0])),await i.flush()}}return this.appendErrorPlan(i,`waitFor timeout: ${u}`)}},eg=require_logger(),eb=require_utils5(),ey=(0,eg.getDebug)("plan-builder");function e_(t,r,n){let i=[],a=r?{type:"Locate",locate:r,param:r,thought:""}:null;if(("Tap"===t||"Hover"===t||"RightClick"===t)&&((0,eb.assert)(r,`missing locate info for action "${t}"`),(0,eb.assert)(a,`missing locate info for action "${t}"`),i=[a,{type:t,param:null,thought:"",locate:r}]),"Input"===t||"KeyboardPress"===t){"Input"===t&&(0,eb.assert)(r,`missing locate info for action "${t}"`),(0,eb.assert)(n,`missing param for action "${t}"`);let o={type:t,param:n,thought:"",locate:r};i=a?[a,o]:[o]}if("Scroll"===t){(0,eb.assert)(n,`missing param for action "${t}"`);let o={type:t,param:n,thought:"",locate:r};i=a?[a,o]:[o]}if("Sleep"===t&&((0,eb.assert)(n,`missing param for action "${t}"`),i=[{type:t,param:n,thought:"",locate:null}]),"Locate"===t&&((0,eb.assert)(r,`missing locate info for action "${t}"`),i=[{type:t,param:r,locate:r,thought:""}]),i)return ey("buildPlans",i),i;throw Error(`Not supported type: ${t}`)}var ev=(0,ee.getDebug)("web-integration"),eA={domIncluded:!1,screenshotIncluded:!0},ew=class{constructor(t,r){this.dryMode=!1,this.destroyed=!1,this.page=t,this.opts=Object.assign({generateReport:!0,autoPrintReportMsg:!0,groupName:"Midscene Report",groupDescription:""},r||{}),"puppeteer"!==this.page.pageType&&"playwright"!==this.page.pageType||(this.page.waitForNavigationTimeout=this.opts.waitForNavigationTimeout??J.DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT,this.page.waitForNetworkIdleTimeout=this.opts.waitForNetworkIdleTimeout??J.DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT),this.onTaskStartTip=this.opts.onTaskStartTip,this.insight=new z.Insight(async t=>this.getUIContext(t)),r?.cacheId&&"android"!==this.page.pageType&&(this.taskCache=new B(r.cacheId,(0,Q.getAIConfigInBoolean)("MIDSCENE_CACHE"))),this.taskExecutor=new em(this.page,this.insight,{taskCache:this.taskCache,onTaskStart:this.callbackOnTaskStartTip.bind(this)}),this.dump=this.resetDump(),this.reportFileName=r?.reportFileName||function(t="web"){return`${(0,m.getAIConfig)(m.MIDSCENE_REPORT_TAG_NAME)||t}-${(0,v.default)().format("YYYY-MM-DD_HH-mm-ss")}-${(0,_.uuid)().substring(0,8)}`}(r?.testId||this.page.pageType||"web")}async getUIContext(t){return this.frozenPageContext?(ev("Using frozen page context for action:",t),this.frozenPageContext):t&&("extract"===t||"assert"===t)?await D(this.page):await D(this.page,(0,Q.vlLocateMode)())}async _snapshotContext(){return await this.getUIContext("locate")}async setAIActionContext(t){this.opts.aiActionContext=t}resetDump(){return this.dump={groupName:this.opts.groupName,groupDescription:this.opts.groupDescription,executions:[]},this.dump}appendExecutionDump(t){let r=function(t){function r(t){if(!t)return null;let n=Array.isArray(t.children)?t.children.map(r).filter(t=>null!==t):[];return t.node&&!0===t.node.isVisible?{...t,children:n}:n.length>0?{node:null,children:n}:null}return{...t,tasks:Array.isArray(t.tasks)?t.tasks.map(t=>{let n={...t};return t.pageContext?.tree&&(n.pageContext={...t.pageContext,tree:r(t.pageContext.tree)||{node:null,children:[]}}),n}):t.tasks}}(t);this.dump.executions.push(r)}dumpDataString(){return this.dump.groupName=this.opts.groupName,this.dump.groupDescription=this.opts.groupDescription,(0,Y.stringifyDumpData)(this.dump)}reportHTMLString(){return(0,Y.reportHTMLContent)(this.dumpDataString())}writeOutActionDumps(){var t;if(this.destroyed)throw Error("PageAgent has been destroyed. Cannot update report file.");let{generateReport:r,autoPrintReportMsg:n}=this.opts;this.reportFile=(0,Y.writeLogFile)({fileName:this.reportFileName,fileExt:Y.groupedActionDumpFileExt,fileContent:this.dumpDataString(),type:"dump",generateReport:r}),ev("writeOutActionDumps",this.reportFile),r&&n&&this.reportFile&&(t=this.reportFile,(0,_.logMsg)(`Midscene - report file updated: ${t}`))}async callbackOnTaskStartTip(t){let r=function(t){let r;if("Planning"===t.type&&(r=t?.param?.userInstruction),"Insight"===t.type&&(r=t?.param?.prompt||t?.param?.id||t?.param?.dataDemand||t?.param?.assertion),"Action"===t.type){let n=t?.locate,i=n?ed(n):"";r=t.thought||"","number"==typeof t?.param?.timeMs?r=`${t?.param?.timeMs}ms`:"string"==typeof t?.param?.scrollType?r=ec(t?.param):"string"==typeof t?.param?.direction&&"AndroidPull"===t?.subType?r=function(t){if(!t)return"";let r=[];return r.push(`direction: ${t.direction||"down"}`),t.startPoint&&r.push(`start: (${t.startPoint.x}, ${t.startPoint.y})`),t.distance&&r.push(`distance: ${t.distance}`),t.duration&&r.push(`duration: ${t.duration}ms`),r.join(", ")}(t?.param):void 0!==t?.param?.value&&(r=t?.param?.value),i&&(r=r?`${i} - ${r}`:i)}return void 0===r?"":"string"==typeof r?r:JSON.stringify(r,void 0,2)}(t),n=r?`${eu(t)} - ${r}`:eu(t);this.onTaskStartTip&&await this.onTaskStartTip(n)}async afterTaskRunning(t,r=!1){this.appendExecutionDump(t.dump());try{await this.onDumpUpdate?.(this.dumpDataString())}catch(t){import_console_browserify.default.error("Error in onDumpUpdate",t)}if(this.writeOutActionDumps(),t.isInErrorState()&&!r){let r=t.latestErrorTask();throw Error(`${r?.errorMessage}
|
|
777
748
|
${r?.errorStack}`,{cause:r?.error})}}buildDetailedLocateParam(t,r){return((0,et.assert)(t,"missing locate prompt"),"object"==typeof r&&null!==r)?{prompt:t,deepThink:r.deepThink??!1,cacheable:r.cacheable??!0,xpath:r.xpath}:{prompt:t}}async aiTap(t,r){let n=this.buildDetailedLocateParam(t,r),i=e_("Tap",n),{executor:a,output:o}=await this.taskExecutor.runPlans(eh("Tap",ed(n)),i,{cacheable:r?.cacheable});return await this.afterTaskRunning(a),o}async aiRightClick(t,r){let n=this.buildDetailedLocateParam(t,r),i=e_("RightClick",n),{executor:a,output:o}=await this.taskExecutor.runPlans(eh("RightClick",ed(n)),i,{cacheable:r?.cacheable});return await this.afterTaskRunning(a),o}async aiHover(t,r){let n=this.buildDetailedLocateParam(t,r),i=e_("Hover",n),{executor:a,output:o}=await this.taskExecutor.runPlans(eh("Hover",ed(n)),i,{cacheable:r?.cacheable});return await this.afterTaskRunning(a),o}async aiInput(t,r,n){(0,et.assert)("string"==typeof t,"input value must be a string, use empty string if you want to clear the input"),(0,et.assert)(r,"missing locate prompt for input");let i=this.buildDetailedLocateParam(r,n),a=e_("Input",i,{value:t,autoDismissKeyboard:n?.autoDismissKeyboard}),{executor:o,output:s}=await this.taskExecutor.runPlans(eh("Input",ed(i)),a,{cacheable:n?.cacheable});return await this.afterTaskRunning(o),s}async aiKeyboardPress(t,r,n){(0,et.assert)(t,"missing keyName for keyboard press");let i=r?this.buildDetailedLocateParam(r,n):void 0,a=e_("KeyboardPress",i,{value:t}),{executor:o,output:s}=await this.taskExecutor.runPlans(eh("KeyboardPress",ed(i)),a,{cacheable:n?.cacheable});return await this.afterTaskRunning(o),s}async aiScroll(t,r,n){let i=r?this.buildDetailedLocateParam(r,n):void 0,a=e_("Scroll",i,t),o=r?`${ed(i)} - ${ec(t)}`:ec(t),{executor:s,output:l}=await this.taskExecutor.runPlans(eh("Scroll",o),a,{cacheable:n?.cacheable});return await this.afterTaskRunning(s),l}async aiAction(t,r){let n=r?.cacheable,i="vlm-ui-tars"===(0,Q.vlLocateMode)(),a=i||!1===n?void 0:this.taskCache?.matchPlanCache(t);if(a&&this.taskCache?.isCacheResultUsed){let{executor:r}=await this.taskExecutor.loadYamlFlowAsPlanning(t,a.cacheContent?.yamlWorkflow);await await this.afterTaskRunning(r),ev("matched cache, will call .runYaml to run the action");let n=a.cacheContent?.yamlWorkflow;return this.runYaml(n)}let{output:o,executor:s}=await (i?this.taskExecutor.actionToGoal(t,{cacheable:n}):this.taskExecutor.action(t,this.opts.aiActionContext,{cacheable:n}));if(this.taskCache&&o?.yamlFlow&&!1!==n){let r={tasks:[{name:t,flow:o.yamlFlow}]},n=G.default.dump(r);this.taskCache.updateOrAppendCacheRecord({type:"plan",prompt:t,yamlWorkflow:n},a)}return await this.afterTaskRunning(s),o}async aiQuery(t,r=eA){let{output:n,executor:i}=await this.taskExecutor.query(t,r);return await this.afterTaskRunning(i),n}async aiBoolean(t,r=eA){let{output:n,executor:i}=await this.taskExecutor.boolean(t,r);return await this.afterTaskRunning(i),n}async aiNumber(t,r=eA){let{output:n,executor:i}=await this.taskExecutor.number(t,r);return await this.afterTaskRunning(i),n}async aiString(t,r=eA){let{output:n,executor:i}=await this.taskExecutor.string(t,r);return await this.afterTaskRunning(i),n}async aiAsk(t,r=eA){return this.aiString(t,r)}async describeElementAtPoint(t,r){let{verifyPrompt:n=!0,retryLimit:i=3}=r||{},a,o=!1,s=0,l="",u=r?.deepThink||!1;for(;!o&&s<i;){s>=2&&(u=!0),ev("aiDescribe",t,"verifyPrompt",n,"retryCount",s,"deepThink",u);let i=await this.insight.describe(t,{deepThink:u});ev("aiDescribe text",i),(0,et.assert)(i.description,`failed to describe element at [${t}]`),l=i.description,(a=await this.verifyLocator(l,u?{deepThink:!0}:void 0,t,r)).pass?o=!0:s++}return{prompt:l,deepThink:u,verifyResult:a}}async verifyLocator(t,r,n,i){ev("verifyLocator",t,r,n,i);let{center:a,rect:o}=await this.aiLocate(t,r),s=((t,r)=>{let[n,i]=t,[a,o]=r;return Math.round(Math.sqrt((n-a)**2+(i-o)**2))})(n,a),l=((t,r)=>{let[n,i]=t,{left:a,top:o,width:s,height:l}=r;return n>=a&&n<=a+s&&i>=o&&i<=o+l})(n,o),u={pass:s<=(i?.centerDistanceThreshold||20)||l,rect:o,center:a,centerDistance:s};return ev("aiDescribe verifyResult",u),u}async aiLocate(t,r){let n=this.buildDetailedLocateParam(t,r),i=e_("Locate",n),{executor:a,output:o}=await this.taskExecutor.runPlans(eh("Locate",ed(n)),i,{cacheable:r?.cacheable});await this.afterTaskRunning(a);let{element:s}=o;return{rect:s?.rect,center:s?.center,scale:(await this.page.size()).dpr}}async aiAssert(t,r,n){let{output:i,executor:a,thought:o}=await this.taskExecutor.assert(t,{returnThought:!0});if(await this.afterTaskRunning(a,!0),n?.keepRawResponse)return{pass:i,thought:o};if(!i){let n=r||`Assertion failed: ${t}`,i=`Reason: ${o||a.latestErrorTask()?.error||"(no_reason)"}`;throw Error(`${n}
|
|
778
749
|
${i}`)}}async aiWaitFor(t,r){let{executor:n}=await this.taskExecutor.waitFor(t,{timeoutMs:r?.timeoutMs||15e3,checkIntervalMs:r?.checkIntervalMs||3e3,assertion:t});if(await this.afterTaskRunning(n,!0),n.isInErrorState()){let t=n.latestErrorTask();throw Error(`${t?.error}
|
|
779
750
|
${t?.errorStack}`)}}async ai(t,r="action"){if("action"===r)return this.aiAction(t);if("query"===r)return this.aiQuery(t);if("assert"===r)return this.aiAssert(t);if("tap"===r)return this.aiTap(t);if("rightClick"===r)return this.aiRightClick(t);throw Error(`Unknown type: ${r}, only support 'action', 'query', 'assert', 'tap', 'rightClick'`)}async runYaml(t){let r=new $(X(t,"yaml",!0),async t=>({agent:this,freeFn:[]}));if(await r.run(),"error"===r.status){let t=r.taskStatusList.filter(t=>"error"===t.status).map(t=>`task - ${t.name}: ${t.error?.message}`).join("\n");throw Error(`Error(s) occurred in running yaml script:
|
|
780
|
-
${t}`)}return{result:r.result}}async evaluateJavaScript(t){return(0,et.assert)(this.page.evaluateJavaScript,"evaluateJavaScript is not supported in current agent"),this.page.evaluateJavaScript(t)}async destroy(){await this.page.destroy(),this.resetDump(),this.destroyed=!0}async logScreenshot(t,r){let n=await this.page.screenshotBase64(),i=Date.now(),a={type:"Log",subType:"Screenshot",status:"finished",recorder:[{type:"screenshot",ts:i,screenshot:n}],timing:{start:i,end:i,cost:0},param:{content:r?.content||""},executor:async()=>{}},o={sdkVersion:"",logTime:i,model_name:"",model_description:"",name:`Log - ${t||"untitled"}`,description:r?.content||"",tasks:[a]};this.appendExecutionDump(o);try{this.onDumpUpdate?.(this.dumpDataString())}catch(t){import_console_browserify.default.error("Failed to update dump",t)}this.writeOutActionDumps()}_unstableLogContent(){let{groupName:t,groupDescription:r,executions:n}=this.dump;return{groupName:t,groupDescription:r,executions:Array.isArray(n)?n.map(t=>{let{tasks:r,...n}=t,i=r;return Array.isArray(r)&&(i=r.map(t=>{let{pageContext:r,log:n,...i}=t;return i})),{...n,...i?{tasks:i}:{}}}):[]}}async freezePageContext(){ev("Freezing page context");let t=await this._snapshotContext();t._isFrozen=!0,this.frozenPageContext=t,ev("Page context frozen successfully")}async unfreezePageContext(){ev("Unfreezing page context"),this.frozenPageContext=void 0,ev("Page context unfrozen successfully")}},ex=class extends ew{constructor(t){super(t,{}),this.dryMode=!0}},eE=t=>{throw Error(`The method "${t}" is not implemented as designed since this is a static UI context. (${U})`)},eS=class{constructor(t){this.pageType="static",this.mouse={click:eE.bind(null,"mouse.click"),wheel:eE.bind(null,"mouse.wheel"),move:eE.bind(null,"mouse.move"),drag:eE.bind(null,"mouse.drag")},this.keyboard={type:eE.bind(null,"keyboard.type"),press:eE.bind(null,"keyboard.press")},t.tree?this.uiContext=t:this.uiContext=Object.assign(t,{tree:{node:null,children:[]}})}async evaluateJavaScript(t){return eE("evaluateJavaScript")}async getElementsInfo(){return eE("getElementsInfo")}async getElementsNodeTree(){return eE("getElementsNodeTree")}async getXpathsById(t){return eE("getXpathsById")}async getXpathsByPoint(t){return eE("getXpathsByPoint")}async getElementInfoByXpath(t){return eE("getElementInfoByXpath")}async size(){return this.uiContext.size}async screenshotBase64(){let t=this.uiContext.screenshotBase64;if(!t)throw Error("screenshot base64 is empty");return t}async url(){return this.uiContext.url}async scrollUntilTop(t){return eE("scrollUntilTop")}async scrollUntilBottom(t){return eE("scrollUntilBottom")}async scrollUntilLeft(t){return eE("scrollUntilLeft")}async scrollUntilRight(t){return eE("scrollUntilRight")}async scrollUp(t,r){return eE("scrollUp")}async scrollDown(t,r){return eE("scrollDown")}async scrollLeft(t,r){return eE("scrollLeft")}async scrollRight(t,r){return eE("scrollRight")}async clearInput(){return eE("clearInput")}async _forceUsePageContext(){return this.uiContext}async destroy(){}}}}),require_ui_utils=__commonJS({"../web-integration/dist/lib/ui-utils.js"(t,r){init_globals();var n,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,l={};function u(t){return t.subType&&"Plan"!==t.subType?`${t.type} / ${t.subType||""}`:t.type}function d(t){let r=Array.isArray(t)?t:[t];return r.reduce((t,n)=>{let i=r.includes("Meta")||r.includes("Control");return i&&("a"===n||"A"===n)?t.concat([{key:n,command:"SelectAll"}]):i&&("c"===n||"C"===n)?t.concat([{key:n,command:"Copy"}]):i&&("v"===n||"V"===n)?t.concat([{key:n,command:"Paste"}]):t.concat([{key:n}])},[])}function c(t){return t?"string"==typeof t?t:"string"==typeof t.prompt?t.prompt:t.prompt.prompt:""}function h(t){return t?`${t.direction||"down"}, ${t.scrollType||"once"}, ${t.distance||"distance-not-set"}`:""}function f(t){if(!t)return"";let r=[];return r.push(`direction: ${t.direction||"down"}`),t.startPoint&&r.push(`start: (${t.startPoint.x}, ${t.startPoint.y})`),t.distance&&r.push(`distance: ${t.distance}`),t.duration&&r.push(`duration: ${t.duration}ms`),r.join(", ")}function p(t,r){return r?`${t} - ${r}`:t}function m(t){let r;if("Planning"===t.type&&(r=t?.param?.userInstruction),"Insight"===t.type&&(r=t?.param?.prompt||t?.param?.id||t?.param?.dataDemand||t?.param?.assertion),"Action"===t.type){let n=t?.locate,i=n?c(n):"";r=t.thought||"","number"==typeof t?.param?.timeMs?r=`${t?.param?.timeMs}ms`:"string"==typeof t?.param?.scrollType?r=h(t?.param):"string"==typeof t?.param?.direction&&"AndroidPull"===t?.subType?r=f(t?.param):void 0!==t?.param?.value&&(r=t?.param?.value),i&&(r=r?`${i} - ${r}`:i)}return void 0===r?"":"string"==typeof r?r:JSON.stringify(r,void 0,2)}((t,r)=>{for(var n in r)i(t,n,{get:r[n],enumerable:!0})})(l,{getKeyCommands:()=>d,limitOpenNewTabScript:()=>g,locateParamStr:()=>c,paramStr:()=>m,pullParamStr:()=>f,scrollParamStr:()=>h,taskTitleStr:()=>p,typeStr:()=>u}),n=l,r.exports=((t,r,n,l)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let u of o(r))s.call(t,u)||u===n||i(t,u,{get:()=>r[u],enumerable:!(l=a(r,u))||l.enumerable});return t})(i({},"__esModule",{value:!0}),n);var g="\nif (!window.__MIDSCENE_NEW_TAB_INTERCEPTOR_INITIALIZED__) {\n window.__MIDSCENE_NEW_TAB_INTERCEPTOR_INITIALIZED__ = true;\n\n // Intercept the window.open method (only once)\n window.open = function(url) {\n console.log('Blocked window.open:', url);\n window.location.href = url;\n return null;\n };\n\n // Block all a tag clicks with target=\"_blank\" (only once)\n document.addEventListener('click', function(e) {\n const target = e.target.closest('a');\n if (target && target.target === '_blank') {\n e.preventDefault();\n console.log('Blocked new tab:', target.href);\n window.location.href = target.href;\n target.removeAttribute('target');\n }\n }, true);\n}\n"}}),require_use_sync_external_store_shim_development=__commonJS({"../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.3.1/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(t){init_globals(),function(){"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var r=__webpack_require__(4194),n=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function i(t){for(var r=arguments.length,i=Array(r>1?r-1:0),a=1;a<r;a++)i[a-1]=arguments[a];!function(t,r,i){var a=n.ReactDebugCurrentFrame.getStackAddendum();""!==a&&(r+="%s",i=i.concat([a]));var o=i.map(function(t){return String(t)});o.unshift("Warning: "+r),Function.prototype.apply.call(import_console_browserify.default[t],import_console_browserify.default,o)}("error",t,i)}var a="function"==typeof Object.is?Object.is:function(t,r){return t===r&&(0!==t||1/t==1/r)||t!=t&&r!=r},o=r.useState,s=r.useEffect,l=r.useLayoutEffect,u=r.useDebugValue,d=!1,c=!1;function h(t){var r=t.getSnapshot,n=t.value;try{var i=r();return!a(n,i)}catch(t){return!0}}var f="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(t,r,n){return r()}:function(t,n,f){d||void 0!==r.startTransition&&(d=!0,i("You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."));var p=n();!c&&(a(p,n())||(i("The result of getSnapshot should be cached to avoid an infinite loop"),c=!0));var m=o({inst:{value:p,getSnapshot:n}}),g=m[0].inst,b=m[1];return l(function(){g.value=p,g.getSnapshot=n,h(g)&&b({inst:g})},[t,p,n]),s(function(){return h(g)&&b({inst:g}),t(function(){h(g)&&b({inst:g})})},[t]),u(p),p};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:f,"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())}()}}),require_shim3=__commonJS({"../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.3.1/node_modules/use-sync-external-store/shim/index.js"(t,r){init_globals(),r.exports=require_use_sync_external_store_shim_development()}}),require_with_selector_development=__commonJS({"../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.3.1/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js"(t){init_globals(),function(){"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var r=__webpack_require__(4194),n=require_shim3(),i="function"==typeof Object.is?Object.is:function(t,r){return t===r&&(0!==t||1/t==1/r)||t!=t&&r!=r},a=n.useSyncExternalStore,o=r.useRef,s=r.useEffect,l=r.useMemo,u=r.useDebugValue;t.useSyncExternalStoreWithSelector=function(t,r,n,d,c){var h,f=o(null);null===f.current?f.current=h={hasValue:!1,value:null}:h=f.current;var p=l(function(){var t,a,o=!1,s=function(r){if(!o){o=!0,t=r;var n=d(r);if(void 0!==c&&h.hasValue){var s=h.value;if(c(s,n))return a=s,s}return a=n,n}var l=a;if(i(t,r))return l;var u=d(r);return void 0!==c&&c(l,u)?l:(t=r,a=u,u)},l=void 0===n?null:n;return[function(){return s(r())},null===l?void 0:function(){return s(l())}]},[r,n,d,c]),m=a(t,p[0],p[1]);return s(function(){h.hasValue=!0,h.value=m},[m]),u(m),m},"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())}()}}),require_with_selector=__commonJS({"../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.3.1/node_modules/use-sync-external-store/shim/with-selector.js"(t,r){init_globals(),r.exports=require_with_selector_development()}}),require_react_jsx_runtime_development=__commonJS({"../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.development.js"(t){init_globals(),function(){var r=__webpack_require__(4194),n=Symbol.for("react.element"),i=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),l=Symbol.for("react.provider"),u=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),h=Symbol.for("react.suspense_list"),f=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),m=Symbol.for("react.offscreen"),g=Symbol.iterator,b=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function y(t){for(var r=arguments.length,n=Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];!function(t,r,n){var i=b.ReactDebugCurrentFrame.getStackAddendum();""!==i&&(r+="%s",n=n.concat([i]));var a=n.map(function(t){return String(t)});a.unshift("Warning: "+r),Function.prototype.apply.call(import_console_browserify.default[t],import_console_browserify.default,a)}("error",t,n)}function _(t){return t.displayName||"Context"}function v(t){if(null==t)return null;if("number"==typeof t.tag&&y("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),"function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t;switch(t){case a:return"Fragment";case i:return"Portal";case s:return"Profiler";case o:return"StrictMode";case c:return"Suspense";case h:return"SuspenseList"}if("object"==typeof t)switch(t.$$typeof){case u:return _(t)+".Consumer";case l:return _(t._context)+".Provider";case d:return function(t,r,n){var i=t.displayName;if(i)return i;var a=r.displayName||r.name||"";return""!==a?n+"("+a+")":n}(t,t.render,"ForwardRef");case f:var r=t.displayName||null;return null!==r?r:v(t.type)||"Memo";case p:var n=t,m=n._payload,g=n._init;try{return v(g(m))}catch(t){}}return null}var A,w,x,E,S,C,I,T=Symbol.for("react.module.reference"),k=Object.assign,P=0;function R(){}R.__reactDisabledLog=!0;var O,M=b.ReactCurrentDispatcher;function j(t,r,n){if(void 0===O)try{throw Error()}catch(t){var i=t.stack.trim().match(/\n( *(at )?)/);O=i&&i[1]||""}return"\n"+O+t}var N,B=!1;function L(t,r){if(!t||B)return"";var n,i=N.get(t);if(void 0!==i)return i;B=!0;var a,o=Error.prepareStackTrace;Error.prepareStackTrace=void 0,a=M.current,M.current=null,function(){if(0===P){A=import_console_browserify.default.log,w=import_console_browserify.default.info,x=import_console_browserify.default.warn,E=import_console_browserify.default.error,S=import_console_browserify.default.group,C=import_console_browserify.default.groupCollapsed,I=import_console_browserify.default.groupEnd;var t={configurable:!0,enumerable:!0,value:R,writable:!0};Object.defineProperties(import_console_browserify.default,{info:t,log:t,warn:t,error:t,group:t,groupCollapsed:t,groupEnd:t})}P++}();try{if(r){var s=function(){throw Error()};if(Object.defineProperty(s.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(s,[])}catch(t){n=t}Reflect.construct(t,[],s)}else{try{s.call()}catch(t){n=t}t.call(s.prototype)}}else{try{throw Error()}catch(t){n=t}t()}}catch(r){if(r&&n&&"string"==typeof r.stack){for(var l=r.stack.split("\n"),u=n.stack.split("\n"),d=l.length-1,c=u.length-1;d>=1&&c>=0&&l[d]!==u[c];)c--;for(;d>=1&&c>=0;d--,c--)if(l[d]!==u[c]){if(1!==d||1!==c)do if(d--,--c<0||l[d]!==u[c]){var h="\n"+l[d].replace(" at new "," at ");return t.displayName&&h.includes("<anonymous>")&&(h=h.replace("<anonymous>",t.displayName)),"function"==typeof t&&N.set(t,h),h}while(d>=1&&c>=0);break}}}finally{B=!1,M.current=a,function(){if(0==--P){var t={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(import_console_browserify.default,{log:k({},t,{value:A}),info:k({},t,{value:w}),warn:k({},t,{value:x}),error:k({},t,{value:E}),group:k({},t,{value:S}),groupCollapsed:k({},t,{value:C}),groupEnd:k({},t,{value:I})})}P<0&&y("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}(),Error.prepareStackTrace=o}var f=t?t.displayName||t.name:"",p=f?j(f):"";return"function"==typeof t&&N.set(t,p),p}function D(t,r,n){if(null==t)return"";if("function"==typeof t)return L(t,!(!(i=t.prototype)||!i.isReactComponent));if("string"==typeof t)return j(t);switch(t){case c:return j("Suspense");case h:return j("SuspenseList")}if("object"==typeof t)switch(t.$$typeof){case d:return L(t.render,!1);case f:return D(t.type,r,n);case p:var i,a=t,o=a._payload,s=a._init;try{return D(s(o),r,n)}catch(t){}}return""}N=new("function"==typeof WeakMap?WeakMap:Map);var U=Object.prototype.hasOwnProperty,F={},z=b.ReactDebugCurrentFrame;function G(t){if(t){var r=t._owner,n=D(t.type,t._source,r?r.type:null);z.setExtraStackFrame(n)}else z.setExtraStackFrame(null)}var H=Array.isArray;function q(t){return H(t)}function V(t){return""+t}function W(t){if(function(t){try{return V(t),!1}catch(t){return!0}}(t))return y("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",function(t){return"function"==typeof Symbol&&Symbol.toStringTag&&t[Symbol.toStringTag]||t.constructor.name||"Object"}(t)),V(t)}var $,K,Z,X=b.ReactCurrentOwner,Y={key:!0,ref:!0,__self:!0,__source:!0};function J(t,r,i,a,o){var s,l={},u=null,d=null;for(s in void 0!==i&&(W(i),u=""+i),function(t){if(U.call(t,"key")){var r=Object.getOwnPropertyDescriptor(t,"key").get;if(r&&r.isReactWarning)return!1}return void 0!==t.key}(r)&&(W(r.key),u=""+r.key),function(t){if(U.call(t,"ref")){var r=Object.getOwnPropertyDescriptor(t,"ref").get;if(r&&r.isReactWarning)return!1}return void 0!==t.ref}(r)&&(d=r.ref,function(t,r){if("string"==typeof t.ref&&X.current&&r&&X.current.stateNode!==r){var n=v(X.current.type);Z[n]||(y('Component "%s" contains the string ref "%s". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref',v(X.current.type),t.ref),Z[n]=!0)}}(r,o)),r)U.call(r,s)&&!Y.hasOwnProperty(s)&&(l[s]=r[s]);if(t&&t.defaultProps){var c=t.defaultProps;for(s in c)void 0===l[s]&&(l[s]=c[s])}if(u||d){var h="function"==typeof t?t.displayName||t.name||"Unknown":t;u&&function(t,r){var n=function(){$||($=!0,y("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",r))};n.isReactWarning=!0,Object.defineProperty(t,"key",{get:n,configurable:!0})}(l,h),d&&function(t,r){var n=function(){K||(K=!0,y("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",r))};n.isReactWarning=!0,Object.defineProperty(t,"ref",{get:n,configurable:!0})}(l,h)}return function(t,r,i,a,o,s,l){var u={$$typeof:n,type:t,key:r,ref:i,props:l,_owner:s,_store:{}};return Object.defineProperty(u._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(u,"_self",{configurable:!1,enumerable:!1,writable:!1,value:a}),Object.defineProperty(u,"_source",{configurable:!1,enumerable:!1,writable:!1,value:o}),Object.freeze&&(Object.freeze(u.props),Object.freeze(u)),u}(t,u,d,o,a,X.current,l)}Z={};var Q,ee=b.ReactCurrentOwner,et=b.ReactDebugCurrentFrame;function er(t){if(t){var r=t._owner,n=D(t.type,t._source,r?r.type:null);et.setExtraStackFrame(n)}else et.setExtraStackFrame(null)}function en(t){return"object"==typeof t&&null!==t&&t.$$typeof===n}function ei(){if(ee.current){var t=v(ee.current.type);if(t)return"\n\nCheck the render method of `"+t+"`."}return""}Q=!1;var ea={};function eo(t,r){if(t._store&&!t._store.validated&&null==t.key){t._store.validated=!0;var n=function(t){var r=ei();if(!r){var n="string"==typeof t?t:t.displayName||t.name;n&&(r="\n\nCheck the top-level render call using <"+n+">.")}return r}(r);if(!ea[n]){ea[n]=!0;var i="";t&&t._owner&&t._owner!==ee.current&&(i=" It was passed a child from "+v(t._owner.type)+"."),er(t),y('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',n,i),er(null)}}}function es(t,r){if("object"==typeof t){if(q(t))for(var n=0;n<t.length;n++){var i=t[n];en(i)&&eo(i,r)}else if(en(t))t._store&&(t._store.validated=!0);else if(t){var a=function(t){if(null===t||"object"!=typeof t)return null;var r=g&&t[g]||t["@@iterator"];return"function"==typeof r?r:null}(t);if("function"==typeof a&&a!==t.entries)for(var o,s=a.call(t);!(o=s.next()).done;)en(o.value)&&eo(o.value,r)}}}function el(t){var r,n=t.type;if(null!=n&&"string"!=typeof n){if("function"==typeof n)r=n.propTypes;else{if("object"!=typeof n||n.$$typeof!==d&&n.$$typeof!==f)return;r=n.propTypes}if(r){var i=v(n);!function(t,r,n,i,a){var o=Function.call.bind(U);for(var s in t)if(o(t,s)){var l=void 0;try{if("function"!=typeof t[s]){var u=Error((i||"React class")+": "+n+" type `"+s+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof t[s]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw u.name="Invariant Violation",u}l=t[s](r,s,i,n,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(t){l=t}!l||l instanceof Error||(G(a),y("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",i||"React class",n,s,typeof l),G(null)),l instanceof Error&&!(l.message in F)&&(F[l.message]=!0,G(a),y("Failed %s type: %s",n,l.message),G(null))}}(r,t.props,"prop",i,t)}else void 0===n.PropTypes||Q||(Q=!0,y("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",v(n)||"Unknown"));"function"!=typeof n.getDefaultProps||n.getDefaultProps.isReactClassApproved||y("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}var eu={};function ed(t,r,i,g,b,_){var A=function(t){return"string"==typeof t||"function"==typeof t||t===a||t===s||t===o||t===c||t===h||t===m||"object"==typeof t&&null!==t&&(t.$$typeof===p||t.$$typeof===f||t.$$typeof===l||t.$$typeof===u||t.$$typeof===d||t.$$typeof===T||void 0!==t.getModuleId)}(t);if(!A){var w,x="";(void 0===t||"object"==typeof t&&null!==t&&0===Object.keys(t).length)&&(x+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports."),x+=function(t){return void 0!==t?"\n\nCheck your code at "+t.fileName.replace(/^.*[\\\/]/,"")+":"+t.lineNumber+".":""}(b)||ei(),null===t?w="null":q(t)?w="array":void 0!==t&&t.$$typeof===n?(w="<"+(v(t.type)||"Unknown")+" />",x=" Did you accidentally export a JSX literal instead of a component?"):w=typeof t,y("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",w,x)}var E=J(t,r,i,b,_);if(null==E)return E;if(A){var S=r.children;if(void 0!==S)if(g)if(q(S)){for(var C=0;C<S.length;C++)es(S[C],t);Object.freeze&&Object.freeze(S)}else y("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else es(S,t)}if(U.call(r,"key")){var I=v(t),k=Object.keys(r).filter(function(t){return"key"!==t}),P=k.length>0?"{key: someKey, "+k.join(": ..., ")+": ...}":"{key: someKey}";eu[I+P]||(y('A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />',P,I,k.length>0?"{"+k.join(": ..., ")+": ...}":"{}",I),eu[I+P]=!0)}return t===a?function(t){for(var r=Object.keys(t.props),n=0;n<r.length;n++){var i=r[n];if("children"!==i&&"key"!==i){er(t),y("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",i),er(null);break}}null!==t.ref&&(er(t),y("Invalid attribute `ref` supplied to `React.Fragment`."),er(null))}(E):el(E),E}var ec=function(t,r,n){return ed(t,r,n,!1)},eh=function(t,r,n){return ed(t,r,n,!0)};t.Fragment=a,t.jsx=ec,t.jsxs=eh}()}}),require_jsx_runtime=__commonJS({"../../node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js"(t,r){init_globals(),r.exports=require_react_jsx_runtime_development()}}),init_Extensions=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/extensions/Extensions.mjs"(){let t;init_globals(),(t=ExtensionType||{}).Application="application",t.WebGLPipes="webgl-pipes",t.WebGLPipesAdaptor="webgl-pipes-adaptor",t.WebGLSystem="webgl-system",t.WebGPUPipes="webgpu-pipes",t.WebGPUPipesAdaptor="webgpu-pipes-adaptor",t.WebGPUSystem="webgpu-system",t.CanvasSystem="canvas-system",t.CanvasPipesAdaptor="canvas-pipes-adaptor",t.CanvasPipes="canvas-pipes",t.Asset="asset",t.LoadParser="load-parser",t.ResolveParser="resolve-parser",t.CacheParser="cache-parser",t.DetectionParser="detection-parser",t.MaskEffect="mask-effect",t.BlendMode="blend-mode",t.TextureSource="texture-source",t.Environment="environment",ExtensionType=t,normalizeExtension=t=>{if("function"==typeof t||"object"==typeof t&&t.extension){if(!t.extension)throw Error("Extension class must have an extension object");t={..."object"!=typeof t.extension?{type:t.extension}:t.extension,ref:t}}if("object"!=typeof t)throw Error("Invalid extension type");return"string"==typeof(t={...t}).type&&(t.type=[t.type]),t},normalizeExtensionPriority=(t,r)=>normalizeExtension(t).priority??r,extensions={_addHandlers:{},_removeHandlers:{},_queue:{},remove(...t){return t.map(normalizeExtension).forEach(t=>{t.type.forEach(r=>this._removeHandlers[r]?.(t))}),this},add(...t){return t.map(normalizeExtension).forEach(t=>{t.type.forEach(r=>{let n=this._addHandlers,i=this._queue;n[r]?n[r]?.(t):(i[r]=i[r]||[],i[r]?.push(t))})}),this},handle(t,r,n){let i=this._addHandlers,a=this._removeHandlers;if(i[t]||a[t])throw Error(`Extension type ${t} already has a handler`);i[t]=r,a[t]=n;let o=this._queue;return o[t]&&(o[t]?.forEach(t=>r(t)),delete o[t]),this},handleByMap(t,r){return this.handle(t,t=>{t.name&&(r[t.name]=t.ref)},t=>{t.name&&delete r[t.name]})},handleByNamedList(t,r,n=-1){return this.handle(t,t=>{r.findIndex(r=>r.name===t.name)>=0||(r.push({name:t.name,value:t.ref}),r.sort((t,r)=>normalizeExtensionPriority(r.value,n)-normalizeExtensionPriority(t.value,n)))},t=>{let n=r.findIndex(r=>r.name===t.name);-1!==n&&r.splice(n,1)})},handleByList(t,r,n=-1){return this.handle(t,t=>{r.includes(t.ref)||(r.push(t.ref),r.sort((t,r)=>normalizeExtensionPriority(r,n)-normalizeExtensionPriority(t,n)))},t=>{let n=r.indexOf(t.ref);-1!==n&&r.splice(n,1)})}}}});function unsafeEvalSupported(){if("boolean"==typeof unsafeEval)return unsafeEval;try{let t=Function("param1","param2","param3","return param1[param2] === param3;");unsafeEval=!0===t({a:"b"},"a","b")}catch(t){unsafeEval=!1}return unsafeEval}var eventemitter3_default,uidCache,init_unsafeEvalSupported=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/utils/browser/unsafeEvalSupported.mjs"(){init_globals()}}),require_eventemitter32=__commonJS({"../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js"(t,r){init_globals();var n=Object.prototype.hasOwnProperty,i="~";function a(){}function o(t,r,n){this.fn=t,this.context=r,this.once=n||!1}function s(t,r,n,a,s){if("function"!=typeof n)throw TypeError("The listener must be a function");var l=new o(n,a||t,s),u=i?i+r:r;return t._events[u]?t._events[u].fn?t._events[u]=[t._events[u],l]:t._events[u].push(l):(t._events[u]=l,t._eventsCount++),t}function l(t,r){0==--t._eventsCount?t._events=new a:delete t._events[r]}function u(){this._events=new a,this._eventsCount=0}Object.create&&(a.prototype=Object.create(null),(new a).__proto__||(i=!1)),u.prototype.eventNames=function(){var t,r,a=[];if(0===this._eventsCount)return a;for(r in t=this._events)n.call(t,r)&&a.push(i?r.slice(1):r);return Object.getOwnPropertySymbols?a.concat(Object.getOwnPropertySymbols(t)):a},u.prototype.listeners=function(t){var r=i?i+t:t,n=this._events[r];if(!n)return[];if(n.fn)return[n.fn];for(var a=0,o=n.length,s=Array(o);a<o;a++)s[a]=n[a].fn;return s},u.prototype.listenerCount=function(t){var r=i?i+t:t,n=this._events[r];return n?n.fn?1:n.length:0},u.prototype.emit=function(t,r,n,a,o,s){var l=i?i+t:t;if(!this._events[l])return!1;var u,d,c=this._events[l],h=arguments.length;if(c.fn){switch(c.once&&this.removeListener(t,c.fn,void 0,!0),h){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,r),!0;case 3:return c.fn.call(c.context,r,n),!0;case 4:return c.fn.call(c.context,r,n,a),!0;case 5:return c.fn.call(c.context,r,n,a,o),!0;case 6:return c.fn.call(c.context,r,n,a,o,s),!0}for(d=1,u=Array(h-1);d<h;d++)u[d-1]=arguments[d];c.fn.apply(c.context,u)}else{var f,p=c.length;for(d=0;d<p;d++)switch(c[d].once&&this.removeListener(t,c[d].fn,void 0,!0),h){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,r);break;case 3:c[d].fn.call(c[d].context,r,n);break;case 4:c[d].fn.call(c[d].context,r,n,a);break;default:if(!u)for(f=1,u=Array(h-1);f<h;f++)u[f-1]=arguments[f];c[d].fn.apply(c[d].context,u)}}return!0},u.prototype.on=function(t,r,n){return s(this,t,r,n,!1)},u.prototype.once=function(t,r,n){return s(this,t,r,n,!0)},u.prototype.removeListener=function(t,r,n,a){var o=i?i+t:t;if(!this._events[o])return this;if(!r)return l(this,o),this;var s=this._events[o];if(s.fn)s.fn!==r||a&&!s.once||n&&s.context!==n||l(this,o);else{for(var u=0,d=[],c=s.length;u<c;u++)(s[u].fn!==r||a&&!s[u].once||n&&s[u].context!==n)&&d.push(s[u]);d.length?this._events[o]=1===d.length?d[0]:d:l(this,o)}return this},u.prototype.removeAllListeners=function(t){var r;return t?(r=i?i+t:t,this._events[r]&&l(this,r)):(this._events=new a,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=i,u.EventEmitter=u,void 0!==r&&(r.exports=u)}}),init_eventemitter3=__esm({"../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.mjs"(){init_globals(),eventemitter3_default=__toESM(require_eventemitter32(),1).default}});function uid(t="default"){return void 0===uidCache[t]&&(uidCache[t]=-1),++uidCache[t]}var BufferUsage,Buffer3,UboSystem,WGSL_TO_STD40_SIZE,init_uid=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/utils/data/uid.mjs"(){init_globals(),uidCache={default:-1}}}),init_const=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/buffer/const.mjs"(){let t;init_globals(),(t=BufferUsage||{})[t.MAP_READ=1]="MAP_READ",t[t.MAP_WRITE=2]="MAP_WRITE",t[t.COPY_SRC=4]="COPY_SRC",t[t.COPY_DST=8]="COPY_DST",t[t.INDEX=16]="INDEX",t[t.VERTEX=32]="VERTEX",t[t.UNIFORM=64]="UNIFORM",t[t.STORAGE=128]="STORAGE",t[t.INDIRECT=256]="INDIRECT",t[t.QUERY_RESOLVE=512]="QUERY_RESOLVE",t[t.STATIC=1024]="STATIC",BufferUsage=t}}),init_Buffer=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/buffer/Buffer.mjs"(){init_globals(),init_eventemitter3(),init_uid(),init_const(),Buffer3=class extends eventemitter3_default{constructor(t){let{data:r,size:n}=t,{usage:i,label:a,shrinkToFit:o}=t;super(),this.uid=uid("buffer"),this._resourceType="buffer",this._resourceId=uid("resource"),this._touched=0,this._updateID=1,this.shrinkToFit=!0,this.destroyed=!1,r instanceof Array&&(r=new Float32Array(r)),this._data=r,n=n??r?.byteLength;let s=!!r;this.descriptor={size:n,usage:i,mappedAtCreation:s,label:a},this.shrinkToFit=o??!0}get data(){return this._data}set data(t){this.setDataWithSize(t,t.length,!0)}get static(){return!!(this.descriptor.usage&BufferUsage.STATIC)}set static(t){t?this.descriptor.usage|=BufferUsage.STATIC:this.descriptor.usage&=~BufferUsage.STATIC}setDataWithSize(t,r,n){if(this._updateID++,this._updateSize=r*t.BYTES_PER_ELEMENT,this._data===t)return void(n&&this.emit("update",this));let i=this._data;this._data=t,i.length===t.length||!this.shrinkToFit&&t.byteLength<i.byteLength?n&&this.emit("update",this):(this.descriptor.size=t.byteLength,this._resourceId=uid("resource"),this.emit("change",this))}update(t){this._updateSize=t??this._updateSize,this._updateID++,this.emit("update",this)}destroy(){this.destroyed=!0,this.emit("destroy",this),this.emit("change",this),this._data=null,this.descriptor=null,this.removeAllListeners()}}}}),init_UboSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/shader/UboSystem.mjs"(){init_globals(),init_unsafeEvalSupported(),init_Buffer(),init_const(),UboSystem=class{constructor(t){this._syncFunctionHash=Object.create(null),this._adaptor=t,this._systemCheck()}_systemCheck(){if(!unsafeEvalSupported())throw Error("Current environment does not allow unsafe-eval, please use pixi.js/unsafe-eval module to enable support.")}ensureUniformGroup(t){let r=this.getUniformGroupData(t);t.buffer||(t.buffer=new Buffer3({data:new Float32Array(r.layout.size/4),usage:BufferUsage.UNIFORM|BufferUsage.COPY_DST}))}getUniformGroupData(t){return this._syncFunctionHash[t._signature]||this._initUniformGroup(t)}_initUniformGroup(t){let r=t._signature,n=this._syncFunctionHash[r];if(!n){let i=Object.keys(t.uniformStructures).map(r=>t.uniformStructures[r]),a=this._adaptor.createUboElements(i),o=this._generateUboSync(a.uboElements);n=this._syncFunctionHash[r]={layout:a,syncFunction:o}}return this._syncFunctionHash[r]}_generateUboSync(t){return this._adaptor.generateUboSync(t)}syncUniformGroup(t,r,n){let i=this.getUniformGroupData(t);return t.buffer||(t.buffer=new Buffer3({data:new Float32Array(i.layout.size/4),usage:BufferUsage.UNIFORM|BufferUsage.COPY_DST})),r||(r=t.buffer.data),n||(n=0),i.syncFunction(t.uniforms,r,n),!0}updateUniformGroup(t){if(t.isStatic&&!t._dirtyId)return!1;t._dirtyId=0;let r=this.syncUniformGroup(t);return t.buffer.update(),r}destroy(){this._syncFunctionHash=null}}}});function createUboElementsSTD40(t){let r=t.map(t=>({data:t,offset:0,size:0})),n=0,i=0,a=0;for(let t=0;t<r.length;t++){let o=r[t];if(!(n=WGSL_TO_STD40_SIZE[o.data.type]))throw Error(`Unknown type ${o.data.type}`);if(o.data.size>1&&(n=Math.max(n,16)*o.data.size),o.size=n,i%n!=0&&i<16){let t=i%n%16;i+=t,a+=t}i+n>16?(o.offset=a=16*Math.ceil(a/16),a+=n,i=n):(o.offset=a,i+=n,a+=n)}return{uboElements:r,size:a=16*Math.ceil(a/16)}}var uniformParsers,init_createUboElementsSTD40=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/shader/utils/createUboElementsSTD40.mjs"(){init_globals(),WGSL_TO_STD40_SIZE={f32:4,"vec2<f32>":8,"vec3<f32>":12,"vec4<f32>":16,"mat2x2<f32>":32,"mat3x3<f32>":48,"mat4x4<f32>":64}}}),init_uniformParsers=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/shader/utils/uniformParsers.mjs"(){init_globals(),uniformParsers=[{type:"mat3x3<f32>",test:t=>void 0!==t.value.a,ubo:"\n var matrix = uv[name].toArray(true);\n data[offset] = matrix[0];\n data[offset + 1] = matrix[1];\n data[offset + 2] = matrix[2];\n data[offset + 4] = matrix[3];\n data[offset + 5] = matrix[4];\n data[offset + 6] = matrix[5];\n data[offset + 8] = matrix[6];\n data[offset + 9] = matrix[7];\n data[offset + 10] = matrix[8];\n ",uniform:" \n gl.uniformMatrix3fv(ud[name].location, false, uv[name].toArray(true));\n "},{type:"vec4<f32>",test:t=>"vec4<f32>"===t.type&&1===t.size&&void 0!==t.value.width,ubo:"\n v = uv[name];\n data[offset] = v.x;\n data[offset + 1] = v.y;\n data[offset + 2] = v.width;\n data[offset + 3] = v.height;\n ",uniform:"\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.x || cv[1] !== v.y || cv[2] !== v.width || cv[3] !== v.height) {\n cv[0] = v.x;\n cv[1] = v.y;\n cv[2] = v.width;\n cv[3] = v.height;\n gl.uniform4f(ud[name].location, v.x, v.y, v.width, v.height);\n }\n "},{type:"vec2<f32>",test:t=>"vec2<f32>"===t.type&&1===t.size&&void 0!==t.value.x,ubo:"\n v = uv[name];\n data[offset] = v.x;\n data[offset + 1] = v.y;\n ",uniform:"\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.x || cv[1] !== v.y) {\n cv[0] = v.x;\n cv[1] = v.y;\n gl.uniform2f(ud[name].location, v.x, v.y);\n }\n "},{type:"vec4<f32>",test:t=>"vec4<f32>"===t.type&&1===t.size&&void 0!==t.value.red,ubo:"\n v = uv[name];\n data[offset] = v.red;\n data[offset + 1] = v.green;\n data[offset + 2] = v.blue;\n data[offset + 3] = v.alpha;\n ",uniform:"\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.alpha) {\n cv[0] = v.red;\n cv[1] = v.green;\n cv[2] = v.blue;\n cv[3] = v.alpha;\n gl.uniform4f(ud[name].location, v.red, v.green, v.blue, v.alpha);\n }\n "},{type:"vec3<f32>",test:t=>"vec3<f32>"===t.type&&1===t.size&&void 0!==t.value.red,ubo:"\n v = uv[name];\n data[offset] = v.red;\n data[offset + 1] = v.green;\n data[offset + 2] = v.blue;\n ",uniform:"\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue) {\n cv[0] = v.red;\n cv[1] = v.green;\n cv[2] = v.blue;\n gl.uniform3f(ud[name].location, v.red, v.green, v.blue);\n }\n "}]}});function createUboSyncFunction(t,r,n,i){let a=["\n var v = null;\n var v2 = null;\n var t = 0;\n var index = 0;\n var name = null;\n var arrayOffset = null;\n "],o=0;for(let s=0;s<t.length;s++){let l=t[s],u=l.data.name,d=!1,c=0;for(let t=0;t<uniformParsers.length;t++)if(uniformParsers[t].test(l.data)){c=l.offset/4,a.push(`name = "${u}";`,`offset += ${c-o};`,uniformParsers[t][r]||uniformParsers[t].ubo),d=!0;break}if(!d)if(l.data.size>1)c=l.offset/4,a.push(n(l,c-o));else{let t=i[l.data.type];c=l.offset/4,a.push(`
|
|
751
|
+
${t}`)}return{result:r.result}}async evaluateJavaScript(t){return(0,et.assert)(this.page.evaluateJavaScript,"evaluateJavaScript is not supported in current agent"),this.page.evaluateJavaScript(t)}async destroy(){await this.page.destroy(),this.resetDump(),this.destroyed=!0}async logScreenshot(t,r){let n=await this.page.screenshotBase64(),i=Date.now(),a={type:"Log",subType:"Screenshot",status:"finished",recorder:[{type:"screenshot",ts:i,screenshot:n}],timing:{start:i,end:i,cost:0},param:{content:r?.content||""},executor:async()=>{}},o={sdkVersion:"",logTime:i,model_name:"",model_description:"",name:`Log - ${t||"untitled"}`,description:r?.content||"",tasks:[a]};this.appendExecutionDump(o);try{this.onDumpUpdate?.(this.dumpDataString())}catch(t){import_console_browserify.default.error("Failed to update dump",t)}this.writeOutActionDumps()}_unstableLogContent(){let{groupName:t,groupDescription:r,executions:n}=this.dump;return{groupName:t,groupDescription:r,executions:Array.isArray(n)?n.map(t=>{let{tasks:r,...n}=t,i=r;return Array.isArray(r)&&(i=r.map(t=>{let{pageContext:r,log:n,...i}=t;return i})),{...n,...i?{tasks:i}:{}}}):[]}}async freezePageContext(){ev("Freezing page context");let t=await this._snapshotContext();t._isFrozen=!0,this.frozenPageContext=t,ev("Page context frozen successfully")}async unfreezePageContext(){ev("Unfreezing page context"),this.frozenPageContext=void 0,ev("Page context unfrozen successfully")}},ex=class extends ew{constructor(t){super(t,{}),this.dryMode=!0}},eE=t=>{throw Error(`The method "${t}" is not implemented as designed since this is a static UI context. (${U})`)},eS=class{constructor(t){this.pageType="static",this.mouse={click:eE.bind(null,"mouse.click"),wheel:eE.bind(null,"mouse.wheel"),move:eE.bind(null,"mouse.move"),drag:eE.bind(null,"mouse.drag")},this.keyboard={type:eE.bind(null,"keyboard.type"),press:eE.bind(null,"keyboard.press")},t.tree?this.uiContext=t:this.uiContext=Object.assign(t,{tree:{node:null,children:[]}})}actionSpace(){return[]}async evaluateJavaScript(t){return eE("evaluateJavaScript")}async getElementsInfo(){return eE("getElementsInfo")}async getElementsNodeTree(){return eE("getElementsNodeTree")}async getXpathsById(t){return eE("getXpathsById")}async getXpathsByPoint(t){return eE("getXpathsByPoint")}async getElementInfoByXpath(t){return eE("getElementInfoByXpath")}async size(){return this.uiContext.size}async screenshotBase64(){let t=this.uiContext.screenshotBase64;if(!t)throw Error("screenshot base64 is empty");return t}async url(){return this.uiContext.url}async scrollUntilTop(t){return eE("scrollUntilTop")}async scrollUntilBottom(t){return eE("scrollUntilBottom")}async scrollUntilLeft(t){return eE("scrollUntilLeft")}async scrollUntilRight(t){return eE("scrollUntilRight")}async scrollUp(t,r){return eE("scrollUp")}async scrollDown(t,r){return eE("scrollDown")}async scrollLeft(t,r){return eE("scrollLeft")}async scrollRight(t,r){return eE("scrollRight")}async clearInput(){return eE("clearInput")}async _forceUsePageContext(){return this.uiContext}async destroy(){}}}}),require_ui_utils=__commonJS({"../web-integration/dist/lib/ui-utils.js"(t,r){init_globals();var n,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,l={};function u(t){return t.subType&&"Plan"!==t.subType?`${t.type} / ${t.subType||""}`:t.type}function d(t){let r=Array.isArray(t)?t:[t];return r.reduce((t,n)=>{let i=r.includes("Meta")||r.includes("Control");return i&&("a"===n||"A"===n)?t.concat([{key:n,command:"SelectAll"}]):i&&("c"===n||"C"===n)?t.concat([{key:n,command:"Copy"}]):i&&("v"===n||"V"===n)?t.concat([{key:n,command:"Paste"}]):t.concat([{key:n}])},[])}function c(t){return t?"string"==typeof t?t:"string"==typeof t.prompt?t.prompt:t.prompt.prompt:""}function h(t){return t?`${t.direction||"down"}, ${t.scrollType||"once"}, ${t.distance||"distance-not-set"}`:""}function f(t){if(!t)return"";let r=[];return r.push(`direction: ${t.direction||"down"}`),t.startPoint&&r.push(`start: (${t.startPoint.x}, ${t.startPoint.y})`),t.distance&&r.push(`distance: ${t.distance}`),t.duration&&r.push(`duration: ${t.duration}ms`),r.join(", ")}function p(t,r){return r?`${t} - ${r}`:t}function m(t){let r;if("Planning"===t.type&&(r=t?.param?.userInstruction),"Insight"===t.type&&(r=t?.param?.prompt||t?.param?.id||t?.param?.dataDemand||t?.param?.assertion),"Action"===t.type){let n=t?.locate,i=n?c(n):"";r=t.thought||"","number"==typeof t?.param?.timeMs?r=`${t?.param?.timeMs}ms`:"string"==typeof t?.param?.scrollType?r=h(t?.param):"string"==typeof t?.param?.direction&&"AndroidPull"===t?.subType?r=f(t?.param):void 0!==t?.param?.value&&(r=t?.param?.value),i&&(r=r?`${i} - ${r}`:i)}return void 0===r?"":"string"==typeof r?r:JSON.stringify(r,void 0,2)}((t,r)=>{for(var n in r)i(t,n,{get:r[n],enumerable:!0})})(l,{getKeyCommands:()=>d,limitOpenNewTabScript:()=>g,locateParamStr:()=>c,paramStr:()=>m,pullParamStr:()=>f,scrollParamStr:()=>h,taskTitleStr:()=>p,typeStr:()=>u}),n=l,r.exports=((t,r,n,l)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let u of o(r))s.call(t,u)||u===n||i(t,u,{get:()=>r[u],enumerable:!(l=a(r,u))||l.enumerable});return t})(i({},"__esModule",{value:!0}),n);var g="\nif (!window.__MIDSCENE_NEW_TAB_INTERCEPTOR_INITIALIZED__) {\n window.__MIDSCENE_NEW_TAB_INTERCEPTOR_INITIALIZED__ = true;\n\n // Intercept the window.open method (only once)\n window.open = function(url) {\n console.log('Blocked window.open:', url);\n window.location.href = url;\n return null;\n };\n\n // Block all a tag clicks with target=\"_blank\" (only once)\n document.addEventListener('click', function(e) {\n const target = e.target.closest('a');\n if (target && target.target === '_blank') {\n e.preventDefault();\n console.log('Blocked new tab:', target.href);\n window.location.href = target.href;\n target.removeAttribute('target');\n }\n }, true);\n}\n"}}),require_use_sync_external_store_shim_development=__commonJS({"../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.3.1/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(t){init_globals(),function(){"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var r=__webpack_require__(4194),n=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function i(t){for(var r=arguments.length,i=Array(r>1?r-1:0),a=1;a<r;a++)i[a-1]=arguments[a];!function(t,r,i){var a=n.ReactDebugCurrentFrame.getStackAddendum();""!==a&&(r+="%s",i=i.concat([a]));var o=i.map(function(t){return String(t)});o.unshift("Warning: "+r),Function.prototype.apply.call(import_console_browserify.default[t],import_console_browserify.default,o)}("error",t,i)}var a="function"==typeof Object.is?Object.is:function(t,r){return t===r&&(0!==t||1/t==1/r)||t!=t&&r!=r},o=r.useState,s=r.useEffect,l=r.useLayoutEffect,u=r.useDebugValue,d=!1,c=!1;function h(t){var r=t.getSnapshot,n=t.value;try{var i=r();return!a(n,i)}catch(t){return!0}}var f="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(t,r,n){return r()}:function(t,n,f){d||void 0!==r.startTransition&&(d=!0,i("You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."));var p=n();!c&&(a(p,n())||(i("The result of getSnapshot should be cached to avoid an infinite loop"),c=!0));var m=o({inst:{value:p,getSnapshot:n}}),g=m[0].inst,b=m[1];return l(function(){g.value=p,g.getSnapshot=n,h(g)&&b({inst:g})},[t,p,n]),s(function(){return h(g)&&b({inst:g}),t(function(){h(g)&&b({inst:g})})},[t]),u(p),p};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:f,"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())}()}}),require_shim3=__commonJS({"../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.3.1/node_modules/use-sync-external-store/shim/index.js"(t,r){init_globals(),r.exports=require_use_sync_external_store_shim_development()}}),require_with_selector_development=__commonJS({"../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.3.1/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js"(t){init_globals(),function(){"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var r=__webpack_require__(4194),n=require_shim3(),i="function"==typeof Object.is?Object.is:function(t,r){return t===r&&(0!==t||1/t==1/r)||t!=t&&r!=r},a=n.useSyncExternalStore,o=r.useRef,s=r.useEffect,l=r.useMemo,u=r.useDebugValue;t.useSyncExternalStoreWithSelector=function(t,r,n,d,c){var h,f=o(null);null===f.current?f.current=h={hasValue:!1,value:null}:h=f.current;var p=l(function(){var t,a,o=!1,s=function(r){if(!o){o=!0,t=r;var n=d(r);if(void 0!==c&&h.hasValue){var s=h.value;if(c(s,n))return a=s,s}return a=n,n}var l=a;if(i(t,r))return l;var u=d(r);return void 0!==c&&c(l,u)?l:(t=r,a=u,u)},l=void 0===n?null:n;return[function(){return s(r())},null===l?void 0:function(){return s(l())}]},[r,n,d,c]),m=a(t,p[0],p[1]);return s(function(){h.hasValue=!0,h.value=m},[m]),u(m),m},"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())}()}}),require_with_selector=__commonJS({"../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.3.1/node_modules/use-sync-external-store/shim/with-selector.js"(t,r){init_globals(),r.exports=require_with_selector_development()}}),require_react_jsx_runtime_development=__commonJS({"../../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react-jsx-runtime.development.js"(t){init_globals(),function(){var r=__webpack_require__(4194),n=Symbol.for("react.element"),i=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),l=Symbol.for("react.provider"),u=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),h=Symbol.for("react.suspense_list"),f=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),m=Symbol.for("react.offscreen"),g=Symbol.iterator,b=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function y(t){for(var r=arguments.length,n=Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];!function(t,r,n){var i=b.ReactDebugCurrentFrame.getStackAddendum();""!==i&&(r+="%s",n=n.concat([i]));var a=n.map(function(t){return String(t)});a.unshift("Warning: "+r),Function.prototype.apply.call(import_console_browserify.default[t],import_console_browserify.default,a)}("error",t,n)}function _(t){return t.displayName||"Context"}function v(t){if(null==t)return null;if("number"==typeof t.tag&&y("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),"function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t;switch(t){case a:return"Fragment";case i:return"Portal";case s:return"Profiler";case o:return"StrictMode";case c:return"Suspense";case h:return"SuspenseList"}if("object"==typeof t)switch(t.$$typeof){case u:return _(t)+".Consumer";case l:return _(t._context)+".Provider";case d:return function(t,r,n){var i=t.displayName;if(i)return i;var a=r.displayName||r.name||"";return""!==a?n+"("+a+")":n}(t,t.render,"ForwardRef");case f:var r=t.displayName||null;return null!==r?r:v(t.type)||"Memo";case p:var n=t,m=n._payload,g=n._init;try{return v(g(m))}catch(t){}}return null}var A,w,x,E,S,C,I,T=Symbol.for("react.module.reference"),k=Object.assign,P=0;function R(){}R.__reactDisabledLog=!0;var O,M=b.ReactCurrentDispatcher;function j(t,r,n){if(void 0===O)try{throw Error()}catch(t){var i=t.stack.trim().match(/\n( *(at )?)/);O=i&&i[1]||""}return"\n"+O+t}var N,B=!1;function L(t,r){if(!t||B)return"";var n,i=N.get(t);if(void 0!==i)return i;B=!0;var a,o=Error.prepareStackTrace;Error.prepareStackTrace=void 0,a=M.current,M.current=null,function(){if(0===P){A=import_console_browserify.default.log,w=import_console_browserify.default.info,x=import_console_browserify.default.warn,E=import_console_browserify.default.error,S=import_console_browserify.default.group,C=import_console_browserify.default.groupCollapsed,I=import_console_browserify.default.groupEnd;var t={configurable:!0,enumerable:!0,value:R,writable:!0};Object.defineProperties(import_console_browserify.default,{info:t,log:t,warn:t,error:t,group:t,groupCollapsed:t,groupEnd:t})}P++}();try{if(r){var s=function(){throw Error()};if(Object.defineProperty(s.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(s,[])}catch(t){n=t}Reflect.construct(t,[],s)}else{try{s.call()}catch(t){n=t}t.call(s.prototype)}}else{try{throw Error()}catch(t){n=t}t()}}catch(r){if(r&&n&&"string"==typeof r.stack){for(var l=r.stack.split("\n"),u=n.stack.split("\n"),d=l.length-1,c=u.length-1;d>=1&&c>=0&&l[d]!==u[c];)c--;for(;d>=1&&c>=0;d--,c--)if(l[d]!==u[c]){if(1!==d||1!==c)do if(d--,--c<0||l[d]!==u[c]){var h="\n"+l[d].replace(" at new "," at ");return t.displayName&&h.includes("<anonymous>")&&(h=h.replace("<anonymous>",t.displayName)),"function"==typeof t&&N.set(t,h),h}while(d>=1&&c>=0);break}}}finally{B=!1,M.current=a,function(){if(0==--P){var t={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(import_console_browserify.default,{log:k({},t,{value:A}),info:k({},t,{value:w}),warn:k({},t,{value:x}),error:k({},t,{value:E}),group:k({},t,{value:S}),groupCollapsed:k({},t,{value:C}),groupEnd:k({},t,{value:I})})}P<0&&y("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}(),Error.prepareStackTrace=o}var f=t?t.displayName||t.name:"",p=f?j(f):"";return"function"==typeof t&&N.set(t,p),p}function D(t,r,n){if(null==t)return"";if("function"==typeof t)return L(t,!(!(i=t.prototype)||!i.isReactComponent));if("string"==typeof t)return j(t);switch(t){case c:return j("Suspense");case h:return j("SuspenseList")}if("object"==typeof t)switch(t.$$typeof){case d:return L(t.render,!1);case f:return D(t.type,r,n);case p:var i,a=t,o=a._payload,s=a._init;try{return D(s(o),r,n)}catch(t){}}return""}N=new("function"==typeof WeakMap?WeakMap:Map);var U=Object.prototype.hasOwnProperty,F={},z=b.ReactDebugCurrentFrame;function G(t){if(t){var r=t._owner,n=D(t.type,t._source,r?r.type:null);z.setExtraStackFrame(n)}else z.setExtraStackFrame(null)}var H=Array.isArray;function q(t){return H(t)}function V(t){return""+t}function W(t){if(function(t){try{return V(t),!1}catch(t){return!0}}(t))return y("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",function(t){return"function"==typeof Symbol&&Symbol.toStringTag&&t[Symbol.toStringTag]||t.constructor.name||"Object"}(t)),V(t)}var $,K,Z,X=b.ReactCurrentOwner,Y={key:!0,ref:!0,__self:!0,__source:!0};function J(t,r,i,a,o){var s,l={},u=null,d=null;for(s in void 0!==i&&(W(i),u=""+i),function(t){if(U.call(t,"key")){var r=Object.getOwnPropertyDescriptor(t,"key").get;if(r&&r.isReactWarning)return!1}return void 0!==t.key}(r)&&(W(r.key),u=""+r.key),function(t){if(U.call(t,"ref")){var r=Object.getOwnPropertyDescriptor(t,"ref").get;if(r&&r.isReactWarning)return!1}return void 0!==t.ref}(r)&&(d=r.ref,function(t,r){if("string"==typeof t.ref&&X.current&&r&&X.current.stateNode!==r){var n=v(X.current.type);Z[n]||(y('Component "%s" contains the string ref "%s". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref',v(X.current.type),t.ref),Z[n]=!0)}}(r,o)),r)U.call(r,s)&&!Y.hasOwnProperty(s)&&(l[s]=r[s]);if(t&&t.defaultProps){var c=t.defaultProps;for(s in c)void 0===l[s]&&(l[s]=c[s])}if(u||d){var h="function"==typeof t?t.displayName||t.name||"Unknown":t;u&&function(t,r){var n=function(){$||($=!0,y("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",r))};n.isReactWarning=!0,Object.defineProperty(t,"key",{get:n,configurable:!0})}(l,h),d&&function(t,r){var n=function(){K||(K=!0,y("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",r))};n.isReactWarning=!0,Object.defineProperty(t,"ref",{get:n,configurable:!0})}(l,h)}return function(t,r,i,a,o,s,l){var u={$$typeof:n,type:t,key:r,ref:i,props:l,_owner:s,_store:{}};return Object.defineProperty(u._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(u,"_self",{configurable:!1,enumerable:!1,writable:!1,value:a}),Object.defineProperty(u,"_source",{configurable:!1,enumerable:!1,writable:!1,value:o}),Object.freeze&&(Object.freeze(u.props),Object.freeze(u)),u}(t,u,d,o,a,X.current,l)}Z={};var Q,ee=b.ReactCurrentOwner,et=b.ReactDebugCurrentFrame;function er(t){if(t){var r=t._owner,n=D(t.type,t._source,r?r.type:null);et.setExtraStackFrame(n)}else et.setExtraStackFrame(null)}function en(t){return"object"==typeof t&&null!==t&&t.$$typeof===n}function ei(){if(ee.current){var t=v(ee.current.type);if(t)return"\n\nCheck the render method of `"+t+"`."}return""}Q=!1;var ea={};function eo(t,r){if(t._store&&!t._store.validated&&null==t.key){t._store.validated=!0;var n=function(t){var r=ei();if(!r){var n="string"==typeof t?t:t.displayName||t.name;n&&(r="\n\nCheck the top-level render call using <"+n+">.")}return r}(r);if(!ea[n]){ea[n]=!0;var i="";t&&t._owner&&t._owner!==ee.current&&(i=" It was passed a child from "+v(t._owner.type)+"."),er(t),y('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',n,i),er(null)}}}function es(t,r){if("object"==typeof t){if(q(t))for(var n=0;n<t.length;n++){var i=t[n];en(i)&&eo(i,r)}else if(en(t))t._store&&(t._store.validated=!0);else if(t){var a=function(t){if(null===t||"object"!=typeof t)return null;var r=g&&t[g]||t["@@iterator"];return"function"==typeof r?r:null}(t);if("function"==typeof a&&a!==t.entries)for(var o,s=a.call(t);!(o=s.next()).done;)en(o.value)&&eo(o.value,r)}}}function el(t){var r,n=t.type;if(null!=n&&"string"!=typeof n){if("function"==typeof n)r=n.propTypes;else{if("object"!=typeof n||n.$$typeof!==d&&n.$$typeof!==f)return;r=n.propTypes}if(r){var i=v(n);!function(t,r,n,i,a){var o=Function.call.bind(U);for(var s in t)if(o(t,s)){var l=void 0;try{if("function"!=typeof t[s]){var u=Error((i||"React class")+": "+n+" type `"+s+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof t[s]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw u.name="Invariant Violation",u}l=t[s](r,s,i,n,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(t){l=t}!l||l instanceof Error||(G(a),y("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",i||"React class",n,s,typeof l),G(null)),l instanceof Error&&!(l.message in F)&&(F[l.message]=!0,G(a),y("Failed %s type: %s",n,l.message),G(null))}}(r,t.props,"prop",i,t)}else void 0===n.PropTypes||Q||(Q=!0,y("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",v(n)||"Unknown"));"function"!=typeof n.getDefaultProps||n.getDefaultProps.isReactClassApproved||y("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}var eu={};function ed(t,r,i,g,b,_){var A=function(t){return"string"==typeof t||"function"==typeof t||t===a||t===s||t===o||t===c||t===h||t===m||"object"==typeof t&&null!==t&&(t.$$typeof===p||t.$$typeof===f||t.$$typeof===l||t.$$typeof===u||t.$$typeof===d||t.$$typeof===T||void 0!==t.getModuleId)}(t);if(!A){var w,x="";(void 0===t||"object"==typeof t&&null!==t&&0===Object.keys(t).length)&&(x+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports."),x+=function(t){return void 0!==t?"\n\nCheck your code at "+t.fileName.replace(/^.*[\\\/]/,"")+":"+t.lineNumber+".":""}(b)||ei(),null===t?w="null":q(t)?w="array":void 0!==t&&t.$$typeof===n?(w="<"+(v(t.type)||"Unknown")+" />",x=" Did you accidentally export a JSX literal instead of a component?"):w=typeof t,y("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",w,x)}var E=J(t,r,i,b,_);if(null==E)return E;if(A){var S=r.children;if(void 0!==S)if(g)if(q(S)){for(var C=0;C<S.length;C++)es(S[C],t);Object.freeze&&Object.freeze(S)}else y("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else es(S,t)}if(U.call(r,"key")){var I=v(t),k=Object.keys(r).filter(function(t){return"key"!==t}),P=k.length>0?"{key: someKey, "+k.join(": ..., ")+": ...}":"{key: someKey}";eu[I+P]||(y('A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />',P,I,k.length>0?"{"+k.join(": ..., ")+": ...}":"{}",I),eu[I+P]=!0)}return t===a?function(t){for(var r=Object.keys(t.props),n=0;n<r.length;n++){var i=r[n];if("children"!==i&&"key"!==i){er(t),y("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",i),er(null);break}}null!==t.ref&&(er(t),y("Invalid attribute `ref` supplied to `React.Fragment`."),er(null))}(E):el(E),E}var ec=function(t,r,n){return ed(t,r,n,!1)},eh=function(t,r,n){return ed(t,r,n,!0)};t.Fragment=a,t.jsx=ec,t.jsxs=eh}()}}),require_jsx_runtime=__commonJS({"../../node_modules/.pnpm/react@18.3.1/node_modules/react/jsx-runtime.js"(t,r){init_globals(),r.exports=require_react_jsx_runtime_development()}}),init_Extensions=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/extensions/Extensions.mjs"(){let t;init_globals(),(t=ExtensionType||{}).Application="application",t.WebGLPipes="webgl-pipes",t.WebGLPipesAdaptor="webgl-pipes-adaptor",t.WebGLSystem="webgl-system",t.WebGPUPipes="webgpu-pipes",t.WebGPUPipesAdaptor="webgpu-pipes-adaptor",t.WebGPUSystem="webgpu-system",t.CanvasSystem="canvas-system",t.CanvasPipesAdaptor="canvas-pipes-adaptor",t.CanvasPipes="canvas-pipes",t.Asset="asset",t.LoadParser="load-parser",t.ResolveParser="resolve-parser",t.CacheParser="cache-parser",t.DetectionParser="detection-parser",t.MaskEffect="mask-effect",t.BlendMode="blend-mode",t.TextureSource="texture-source",t.Environment="environment",ExtensionType=t,normalizeExtension=t=>{if("function"==typeof t||"object"==typeof t&&t.extension){if(!t.extension)throw Error("Extension class must have an extension object");t={..."object"!=typeof t.extension?{type:t.extension}:t.extension,ref:t}}if("object"!=typeof t)throw Error("Invalid extension type");return"string"==typeof(t={...t}).type&&(t.type=[t.type]),t},normalizeExtensionPriority=(t,r)=>normalizeExtension(t).priority??r,extensions={_addHandlers:{},_removeHandlers:{},_queue:{},remove(...t){return t.map(normalizeExtension).forEach(t=>{t.type.forEach(r=>this._removeHandlers[r]?.(t))}),this},add(...t){return t.map(normalizeExtension).forEach(t=>{t.type.forEach(r=>{let n=this._addHandlers,i=this._queue;n[r]?n[r]?.(t):(i[r]=i[r]||[],i[r]?.push(t))})}),this},handle(t,r,n){let i=this._addHandlers,a=this._removeHandlers;if(i[t]||a[t])throw Error(`Extension type ${t} already has a handler`);i[t]=r,a[t]=n;let o=this._queue;return o[t]&&(o[t]?.forEach(t=>r(t)),delete o[t]),this},handleByMap(t,r){return this.handle(t,t=>{t.name&&(r[t.name]=t.ref)},t=>{t.name&&delete r[t.name]})},handleByNamedList(t,r,n=-1){return this.handle(t,t=>{r.findIndex(r=>r.name===t.name)>=0||(r.push({name:t.name,value:t.ref}),r.sort((t,r)=>normalizeExtensionPriority(r.value,n)-normalizeExtensionPriority(t.value,n)))},t=>{let n=r.findIndex(r=>r.name===t.name);-1!==n&&r.splice(n,1)})},handleByList(t,r,n=-1){return this.handle(t,t=>{r.includes(t.ref)||(r.push(t.ref),r.sort((t,r)=>normalizeExtensionPriority(r,n)-normalizeExtensionPriority(t,n)))},t=>{let n=r.indexOf(t.ref);-1!==n&&r.splice(n,1)})}}}});function unsafeEvalSupported(){if("boolean"==typeof unsafeEval)return unsafeEval;try{let t=Function("param1","param2","param3","return param1[param2] === param3;");unsafeEval=!0===t({a:"b"},"a","b")}catch(t){unsafeEval=!1}return unsafeEval}var eventemitter3_default,uidCache,init_unsafeEvalSupported=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/utils/browser/unsafeEvalSupported.mjs"(){init_globals()}}),require_eventemitter32=__commonJS({"../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js"(t,r){init_globals();var n=Object.prototype.hasOwnProperty,i="~";function a(){}function o(t,r,n){this.fn=t,this.context=r,this.once=n||!1}function s(t,r,n,a,s){if("function"!=typeof n)throw TypeError("The listener must be a function");var l=new o(n,a||t,s),u=i?i+r:r;return t._events[u]?t._events[u].fn?t._events[u]=[t._events[u],l]:t._events[u].push(l):(t._events[u]=l,t._eventsCount++),t}function l(t,r){0==--t._eventsCount?t._events=new a:delete t._events[r]}function u(){this._events=new a,this._eventsCount=0}Object.create&&(a.prototype=Object.create(null),(new a).__proto__||(i=!1)),u.prototype.eventNames=function(){var t,r,a=[];if(0===this._eventsCount)return a;for(r in t=this._events)n.call(t,r)&&a.push(i?r.slice(1):r);return Object.getOwnPropertySymbols?a.concat(Object.getOwnPropertySymbols(t)):a},u.prototype.listeners=function(t){var r=i?i+t:t,n=this._events[r];if(!n)return[];if(n.fn)return[n.fn];for(var a=0,o=n.length,s=Array(o);a<o;a++)s[a]=n[a].fn;return s},u.prototype.listenerCount=function(t){var r=i?i+t:t,n=this._events[r];return n?n.fn?1:n.length:0},u.prototype.emit=function(t,r,n,a,o,s){var l=i?i+t:t;if(!this._events[l])return!1;var u,d,c=this._events[l],h=arguments.length;if(c.fn){switch(c.once&&this.removeListener(t,c.fn,void 0,!0),h){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,r),!0;case 3:return c.fn.call(c.context,r,n),!0;case 4:return c.fn.call(c.context,r,n,a),!0;case 5:return c.fn.call(c.context,r,n,a,o),!0;case 6:return c.fn.call(c.context,r,n,a,o,s),!0}for(d=1,u=Array(h-1);d<h;d++)u[d-1]=arguments[d];c.fn.apply(c.context,u)}else{var f,p=c.length;for(d=0;d<p;d++)switch(c[d].once&&this.removeListener(t,c[d].fn,void 0,!0),h){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,r);break;case 3:c[d].fn.call(c[d].context,r,n);break;case 4:c[d].fn.call(c[d].context,r,n,a);break;default:if(!u)for(f=1,u=Array(h-1);f<h;f++)u[f-1]=arguments[f];c[d].fn.apply(c[d].context,u)}}return!0},u.prototype.on=function(t,r,n){return s(this,t,r,n,!1)},u.prototype.once=function(t,r,n){return s(this,t,r,n,!0)},u.prototype.removeListener=function(t,r,n,a){var o=i?i+t:t;if(!this._events[o])return this;if(!r)return l(this,o),this;var s=this._events[o];if(s.fn)s.fn!==r||a&&!s.once||n&&s.context!==n||l(this,o);else{for(var u=0,d=[],c=s.length;u<c;u++)(s[u].fn!==r||a&&!s[u].once||n&&s[u].context!==n)&&d.push(s[u]);d.length?this._events[o]=1===d.length?d[0]:d:l(this,o)}return this},u.prototype.removeAllListeners=function(t){var r;return t?(r=i?i+t:t,this._events[r]&&l(this,r)):(this._events=new a,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=i,u.EventEmitter=u,void 0!==r&&(r.exports=u)}}),init_eventemitter3=__esm({"../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.mjs"(){init_globals(),eventemitter3_default=__toESM(require_eventemitter32(),1).default}});function uid(t="default"){return void 0===uidCache[t]&&(uidCache[t]=-1),++uidCache[t]}var BufferUsage,Buffer3,UboSystem,WGSL_TO_STD40_SIZE,init_uid=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/utils/data/uid.mjs"(){init_globals(),uidCache={default:-1}}}),init_const=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/buffer/const.mjs"(){let t;init_globals(),(t=BufferUsage||{})[t.MAP_READ=1]="MAP_READ",t[t.MAP_WRITE=2]="MAP_WRITE",t[t.COPY_SRC=4]="COPY_SRC",t[t.COPY_DST=8]="COPY_DST",t[t.INDEX=16]="INDEX",t[t.VERTEX=32]="VERTEX",t[t.UNIFORM=64]="UNIFORM",t[t.STORAGE=128]="STORAGE",t[t.INDIRECT=256]="INDIRECT",t[t.QUERY_RESOLVE=512]="QUERY_RESOLVE",t[t.STATIC=1024]="STATIC",BufferUsage=t}}),init_Buffer=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/buffer/Buffer.mjs"(){init_globals(),init_eventemitter3(),init_uid(),init_const(),Buffer3=class extends eventemitter3_default{constructor(t){let{data:r,size:n}=t,{usage:i,label:a,shrinkToFit:o}=t;super(),this.uid=uid("buffer"),this._resourceType="buffer",this._resourceId=uid("resource"),this._touched=0,this._updateID=1,this.shrinkToFit=!0,this.destroyed=!1,r instanceof Array&&(r=new Float32Array(r)),this._data=r,n=n??r?.byteLength;let s=!!r;this.descriptor={size:n,usage:i,mappedAtCreation:s,label:a},this.shrinkToFit=o??!0}get data(){return this._data}set data(t){this.setDataWithSize(t,t.length,!0)}get static(){return!!(this.descriptor.usage&BufferUsage.STATIC)}set static(t){t?this.descriptor.usage|=BufferUsage.STATIC:this.descriptor.usage&=~BufferUsage.STATIC}setDataWithSize(t,r,n){if(this._updateID++,this._updateSize=r*t.BYTES_PER_ELEMENT,this._data===t)return void(n&&this.emit("update",this));let i=this._data;this._data=t,i.length===t.length||!this.shrinkToFit&&t.byteLength<i.byteLength?n&&this.emit("update",this):(this.descriptor.size=t.byteLength,this._resourceId=uid("resource"),this.emit("change",this))}update(t){this._updateSize=t??this._updateSize,this._updateID++,this.emit("update",this)}destroy(){this.destroyed=!0,this.emit("destroy",this),this.emit("change",this),this._data=null,this.descriptor=null,this.removeAllListeners()}}}}),init_UboSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/shader/UboSystem.mjs"(){init_globals(),init_unsafeEvalSupported(),init_Buffer(),init_const(),UboSystem=class{constructor(t){this._syncFunctionHash=Object.create(null),this._adaptor=t,this._systemCheck()}_systemCheck(){if(!unsafeEvalSupported())throw Error("Current environment does not allow unsafe-eval, please use pixi.js/unsafe-eval module to enable support.")}ensureUniformGroup(t){let r=this.getUniformGroupData(t);t.buffer||(t.buffer=new Buffer3({data:new Float32Array(r.layout.size/4),usage:BufferUsage.UNIFORM|BufferUsage.COPY_DST}))}getUniformGroupData(t){return this._syncFunctionHash[t._signature]||this._initUniformGroup(t)}_initUniformGroup(t){let r=t._signature,n=this._syncFunctionHash[r];if(!n){let i=Object.keys(t.uniformStructures).map(r=>t.uniformStructures[r]),a=this._adaptor.createUboElements(i),o=this._generateUboSync(a.uboElements);n=this._syncFunctionHash[r]={layout:a,syncFunction:o}}return this._syncFunctionHash[r]}_generateUboSync(t){return this._adaptor.generateUboSync(t)}syncUniformGroup(t,r,n){let i=this.getUniformGroupData(t);return t.buffer||(t.buffer=new Buffer3({data:new Float32Array(i.layout.size/4),usage:BufferUsage.UNIFORM|BufferUsage.COPY_DST})),r||(r=t.buffer.data),n||(n=0),i.syncFunction(t.uniforms,r,n),!0}updateUniformGroup(t){if(t.isStatic&&!t._dirtyId)return!1;t._dirtyId=0;let r=this.syncUniformGroup(t);return t.buffer.update(),r}destroy(){this._syncFunctionHash=null}}}});function createUboElementsSTD40(t){let r=t.map(t=>({data:t,offset:0,size:0})),n=0,i=0,a=0;for(let t=0;t<r.length;t++){let o=r[t];if(!(n=WGSL_TO_STD40_SIZE[o.data.type]))throw Error(`Unknown type ${o.data.type}`);if(o.data.size>1&&(n=Math.max(n,16)*o.data.size),o.size=n,i%n!=0&&i<16){let t=i%n%16;i+=t,a+=t}i+n>16?(o.offset=a=16*Math.ceil(a/16),a+=n,i=n):(o.offset=a,i+=n,a+=n)}return{uboElements:r,size:a=16*Math.ceil(a/16)}}var uniformParsers,init_createUboElementsSTD40=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/shader/utils/createUboElementsSTD40.mjs"(){init_globals(),WGSL_TO_STD40_SIZE={f32:4,"vec2<f32>":8,"vec3<f32>":12,"vec4<f32>":16,"mat2x2<f32>":32,"mat3x3<f32>":48,"mat4x4<f32>":64}}}),init_uniformParsers=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/shader/utils/uniformParsers.mjs"(){init_globals(),uniformParsers=[{type:"mat3x3<f32>",test:t=>void 0!==t.value.a,ubo:"\n var matrix = uv[name].toArray(true);\n data[offset] = matrix[0];\n data[offset + 1] = matrix[1];\n data[offset + 2] = matrix[2];\n data[offset + 4] = matrix[3];\n data[offset + 5] = matrix[4];\n data[offset + 6] = matrix[5];\n data[offset + 8] = matrix[6];\n data[offset + 9] = matrix[7];\n data[offset + 10] = matrix[8];\n ",uniform:" \n gl.uniformMatrix3fv(ud[name].location, false, uv[name].toArray(true));\n "},{type:"vec4<f32>",test:t=>"vec4<f32>"===t.type&&1===t.size&&void 0!==t.value.width,ubo:"\n v = uv[name];\n data[offset] = v.x;\n data[offset + 1] = v.y;\n data[offset + 2] = v.width;\n data[offset + 3] = v.height;\n ",uniform:"\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.x || cv[1] !== v.y || cv[2] !== v.width || cv[3] !== v.height) {\n cv[0] = v.x;\n cv[1] = v.y;\n cv[2] = v.width;\n cv[3] = v.height;\n gl.uniform4f(ud[name].location, v.x, v.y, v.width, v.height);\n }\n "},{type:"vec2<f32>",test:t=>"vec2<f32>"===t.type&&1===t.size&&void 0!==t.value.x,ubo:"\n v = uv[name];\n data[offset] = v.x;\n data[offset + 1] = v.y;\n ",uniform:"\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.x || cv[1] !== v.y) {\n cv[0] = v.x;\n cv[1] = v.y;\n gl.uniform2f(ud[name].location, v.x, v.y);\n }\n "},{type:"vec4<f32>",test:t=>"vec4<f32>"===t.type&&1===t.size&&void 0!==t.value.red,ubo:"\n v = uv[name];\n data[offset] = v.red;\n data[offset + 1] = v.green;\n data[offset + 2] = v.blue;\n data[offset + 3] = v.alpha;\n ",uniform:"\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.alpha) {\n cv[0] = v.red;\n cv[1] = v.green;\n cv[2] = v.blue;\n cv[3] = v.alpha;\n gl.uniform4f(ud[name].location, v.red, v.green, v.blue, v.alpha);\n }\n "},{type:"vec3<f32>",test:t=>"vec3<f32>"===t.type&&1===t.size&&void 0!==t.value.red,ubo:"\n v = uv[name];\n data[offset] = v.red;\n data[offset + 1] = v.green;\n data[offset + 2] = v.blue;\n ",uniform:"\n cv = ud[name].value;\n v = uv[name];\n if (cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue) {\n cv[0] = v.red;\n cv[1] = v.green;\n cv[2] = v.blue;\n gl.uniform3f(ud[name].location, v.red, v.green, v.blue);\n }\n "}]}});function createUboSyncFunction(t,r,n,i){let a=["\n var v = null;\n var v2 = null;\n var t = 0;\n var index = 0;\n var name = null;\n var arrayOffset = null;\n "],o=0;for(let s=0;s<t.length;s++){let l=t[s],u=l.data.name,d=!1,c=0;for(let t=0;t<uniformParsers.length;t++)if(uniformParsers[t].test(l.data)){c=l.offset/4,a.push(`name = "${u}";`,`offset += ${c-o};`,uniformParsers[t][r]||uniformParsers[t].ubo),d=!0;break}if(!d)if(l.data.size>1)c=l.offset/4,a.push(n(l,c-o));else{let t=i[l.data.type];c=l.offset/4,a.push(`
|
|
781
752
|
v = uv.${u};
|
|
782
753
|
offset += ${c-o};
|
|
783
754
|
${t};
|
|
@@ -904,4 +875,4 @@ ${i.join("\n")}
|
|
|
904
875
|
|
|
905
876
|
`,"background: #E72264; padding:5px 0;","background: #6CA2EA; padding:5px 0;","background: #B5D33D; padding:5px 0;","background: #FED23F; padding:5px 0;","color: #FFFFFF; background: #E72264; padding:5px 0;","color: #E72264; background: #FFFFFF; padding:5px 0;"];globalThis.console.log(...r)}else globalThis.console&&globalThis.console.log(`PixiJS ${VERSION} - ${t} - http://www.pixijs.com/`);saidHello=!0}}var HelloSystem,_TextureGCSystem,TextureGCSystem,_RenderTarget,RenderTarget,canvasCache,init_sayHello=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/utils/sayHello.mjs"(){init_globals(),init_adapter(),saidHello=!1,VERSION="8.1.1"}}),init_HelloSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/startup/HelloSystem.mjs"(){init_globals(),init_Extensions(),init_sayHello(),init_types2(),(HelloSystem=class{constructor(t){this._renderer=t}init(t){if(t.hello){let t=this._renderer.name;this._renderer.type===RendererType.WEBGL&&(t+=` ${this._renderer.context.webGLVersion}`),sayHello(t)}}}).extension={type:[ExtensionType.WebGLSystem,ExtensionType.WebGPUSystem,ExtensionType.CanvasSystem],name:"hello",priority:-2},HelloSystem.defaultOptions={hello:!1}}}),init_TextureGCSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/texture/TextureGCSystem.mjs"(){init_globals(),init_Extensions(),(_TextureGCSystem=class t{constructor(t){this._renderer=t,this.count=0,this.checkCount=0}init(r){r={...t.defaultOptions,...r},this.checkCountMax=r.textureGCCheckCountMax,this.maxIdle=r.textureGCAMaxIdle,this.active=r.textureGCActive}postrender(){this._renderer.renderingToScreen&&(this.count++,this.active&&(this.checkCount++,this.checkCount>this.checkCountMax&&(this.checkCount=0,this.run())))}run(){let t=this._renderer.texture.managedTextures;for(let r=0;r<t.length;r++){let n=t[r];n.autoGarbageCollect&&n.resource&&n._touched>-1&&this.count-n._touched>this.maxIdle&&(n._touched=-1,n.unload())}}destroy(){this._renderer=null}}).extension={type:[ExtensionType.WebGLSystem,ExtensionType.WebGPUSystem],name:"textureGC"},_TextureGCSystem.defaultOptions={textureGCActive:!0,textureGCAMaxIdle:3600,textureGCCheckCountMax:600},TextureGCSystem=_TextureGCSystem,extensions.add(TextureGCSystem)}}),init_RenderTarget=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/renderTarget/RenderTarget.mjs"(){init_globals(),init_uid(),init_TextureSource(),init_Texture(),(_RenderTarget=class t{constructor(r={}){if(this.uid=uid("renderTarget"),this.colorTextures=[],this.dirtyId=0,this.isRoot=!1,this._size=new Float32Array(2),this._managedColorTextures=!1,r={...t.defaultOptions,...r},this.stencil=r.stencil,this.depth=r.depth,this.isRoot=r.isRoot,"number"==typeof r.colorTextures){this._managedColorTextures=!0;for(let t=0;t<r.colorTextures;t++)this.colorTextures.push(new TextureSource({width:r.width,height:r.height,resolution:r.resolution,antialias:r.antialias}))}else{this.colorTextures=[...r.colorTextures.map(t=>t.source)];let t=this.colorTexture.source;this.resize(t.width,t.height,t._resolution)}this.colorTexture.source.on("resize",this.onSourceResize,this),(r.depthStencilTexture||this.stencil)&&(r.depthStencilTexture instanceof Texture||r.depthStencilTexture instanceof TextureSource?this.depthStencilTexture=r.depthStencilTexture.source:this.ensureDepthStencilTexture())}get size(){let t=this._size;return t[0]=this.pixelWidth,t[1]=this.pixelHeight,t}get width(){return this.colorTexture.source.width}get height(){return this.colorTexture.source.height}get pixelWidth(){return this.colorTexture.source.pixelWidth}get pixelHeight(){return this.colorTexture.source.pixelHeight}get resolution(){return this.colorTexture.source._resolution}get colorTexture(){return this.colorTextures[0]}onSourceResize(t){this.resize(t.width,t.height,t._resolution,!0)}ensureDepthStencilTexture(){this.depthStencilTexture||(this.depthStencilTexture=new TextureSource({width:this.width,height:this.height,resolution:this.resolution,format:"depth24plus-stencil8",autoGenerateMipmaps:!1,antialias:!1,mipLevelCount:1}))}resize(t,r,n=this.resolution,i=!1){this.dirtyId++,this.colorTextures.forEach((a,o)=>{i&&0===o||a.source.resize(t,r,n)}),this.depthStencilTexture&&this.depthStencilTexture.source.resize(t,r,n)}destroy(){this.colorTexture.source.off("resize",this.onSourceResize,this),this._managedColorTextures&&this.colorTextures.forEach(t=>{t.destroy()}),this.depthStencilTexture&&(this.depthStencilTexture.destroy(),delete this.depthStencilTexture)}}).defaultOptions={width:0,height:0,resolution:1,colorTextures:1,stencil:!1,depth:!1,antialias:!1,isRoot:!1},RenderTarget=_RenderTarget}});function getCanvasTexture(t,r){if(!canvasCache.has(t)){let n=new Texture({source:new CanvasSource({resource:t,...r})}),i=()=>{canvasCache.get(t)===n&&canvasCache.delete(t)};n.once("destroy",i),n.source.once("destroy",i),canvasCache.set(t,n)}return canvasCache.get(t)}var _ViewSystem,ViewSystem,SharedSystems,SharedRenderPipes,BindGroupSystem,GpuBufferSystem,GpuColorMaskSystem,GpuDeviceSystem,GpuEncoderSystem,GpuStencilSystem,UboBatch,minUniformOffsetAlignment,GpuUniformBatchPipe,init_getCanvasTexture=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/texture/utils/getCanvasTexture.mjs"(){init_globals(),init_CanvasSource(),init_Texture(),canvasCache=new Map}}),init_ViewSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/view/ViewSystem.mjs"(){init_globals(),init_adapter(),init_Extensions(),init_Rectangle(),init_deprecation(),init_RenderTarget(),init_getCanvasTexture(),(_ViewSystem=class t{get resolution(){return this.texture.source._resolution}set resolution(t){this.texture.source.resize(this.texture.source.width,this.texture.source.height,t)}init(r){(r={...t.defaultOptions,...r}).view&&(deprecation(v8_0_0,"ViewSystem.view has been renamed to ViewSystem.canvas"),r.canvas=r.view),this.screen=new Rectangle(0,0,r.width,r.height),this.canvas=r.canvas||DOMAdapter.get().createCanvas(),this.antialias=!!r.antialias,this.texture=getCanvasTexture(this.canvas,r),this.renderTarget=new RenderTarget({colorTextures:[this.texture],depth:!!r.depth,isRoot:!0}),this.texture.source.transparent=r.backgroundAlpha<1,this.multiView=!!r.multiView,this.autoDensity&&(this.canvas.style.width=`${this.texture.width}px`,this.canvas.style.height=`${this.texture.height}px`),this.resolution=r.resolution}resize(t,r,n){this.texture.source.resize(t,r,n),this.screen.width=this.texture.frame.width,this.screen.height=this.texture.frame.height,this.autoDensity&&(this.canvas.style.width=`${t}px`,this.canvas.style.height=`${r}px`)}destroy(t=!1){("boolean"==typeof t?t:!!t?.removeView)&&this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas)}}).extension={type:[ExtensionType.WebGLSystem,ExtensionType.WebGPUSystem,ExtensionType.CanvasSystem],name:"view",priority:0},_ViewSystem.defaultOptions={width:800,height:600,autoDensity:!1,antialias:!1},ViewSystem=_ViewSystem}}),init_SharedSystems=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/system/SharedSystems.mjs"(){init_globals(),init_CustomRenderPipe(),init_RenderGroupPipe(),init_RenderGroupSystem(),init_SpritePipe(),init_BatcherPipe(),init_AlphaMaskPipe(),init_ColorMaskPipe(),init_StencilMaskPipe(),init_BackgroundSystem(),init_BlendModePipe(),init_ExtractSystem(),init_GenerateTextureSystem(),init_GlobalUniformSystem(),init_HelloSystem(),init_TextureGCSystem(),init_ViewSystem(),SharedSystems=[BackgroundSystem,GlobalUniformSystem,HelloSystem,ViewSystem,RenderGroupSystem,TextureGCSystem,GenerateTextureSystem,ExtractSystem],SharedRenderPipes=[BlendModePipe,BatcherPipe,SpritePipe,RenderGroupPipe,AlphaMaskPipe,StencilMaskPipe,ColorMaskPipe,CustomRenderPipe]}}),init_BindGroupSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/BindGroupSystem.mjs"(){init_globals(),init_Extensions(),(BindGroupSystem=class{constructor(t){this._hash=Object.create(null),this._renderer=t}contextChange(t){this._gpu=t}getBindGroup(t,r,n){return t._updateKey(),this._hash[t._key]||this._createBindGroup(t,r,n)}_createBindGroup(t,r,n){let i=this._gpu.device,a=r.layout[n],o=[],s=this._renderer;for(let r in a){let n,i=t.resources[r]??t.resources[a[r]];if("uniformGroup"===i._resourceType){let t=i;s.ubo.updateUniformGroup(t);let r=t.buffer;n={buffer:s.buffer.getGPUBuffer(r),offset:0,size:r.descriptor.size}}else if("buffer"===i._resourceType){let t=i;n={buffer:s.buffer.getGPUBuffer(t),offset:0,size:t.descriptor.size}}else if("bufferResource"===i._resourceType){let t=i;n={buffer:s.buffer.getGPUBuffer(t.buffer),offset:t.offset,size:t.size}}else if("textureSampler"===i._resourceType){let t=i;n=s.texture.getGpuSampler(t)}else if("textureSource"===i._resourceType){let t=i;n=s.texture.getGpuSource(t).createView({})}o.push({binding:a[r],resource:n})}let l=s.shader.getProgramData(r).bindGroups[n],u=i.createBindGroup({layout:l,entries:o});return this._hash[t._key]=u,u}destroy(){for(let t of Object.keys(this._hash))this._hash[t]=null;this._hash=null,this._renderer=null}}).extension={type:[ExtensionType.WebGPUSystem],name:"bindGroup"}}}),init_GpuBufferSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/buffer/GpuBufferSystem.mjs"(){init_globals(),init_Extensions(),init_fastCopy(),(GpuBufferSystem=class{constructor(){this._gpuBuffers=Object.create(null),this._managedBuffers=[]}contextChange(t){this._gpu=t}getGPUBuffer(t){return this._gpuBuffers[t.uid]||this.createGPUBuffer(t)}updateBuffer(t){let r=this._gpuBuffers[t.uid]||this.createGPUBuffer(t),n=t.data;return t._updateID&&n&&(t._updateID=0,this._gpu.device.queue.writeBuffer(r,0,n.buffer,0,(t._updateSize||n.byteLength)+3&-4)),r}destroyAll(){for(let t in this._gpuBuffers)this._gpuBuffers[t].destroy();this._gpuBuffers={}}createGPUBuffer(t){this._gpuBuffers[t.uid]||(t.on("update",this.updateBuffer,this),t.on("change",this.onBufferChange,this),t.on("destroy",this.onBufferDestroy,this));let r=this._gpu.device.createBuffer(t.descriptor);return t._updateID=0,t.data&&(fastCopy(t.data.buffer,r.getMappedRange()),r.unmap()),this._gpuBuffers[t.uid]=r,this._managedBuffers.push(t),r}onBufferChange(t){this._gpuBuffers[t.uid].destroy(),t._updateID=0,this._gpuBuffers[t.uid]=this.createGPUBuffer(t)}onBufferDestroy(t){this._managedBuffers.splice(this._managedBuffers.indexOf(t),1),this._destroyBuffer(t)}destroy(){this._managedBuffers.forEach(t=>this._destroyBuffer(t)),this._managedBuffers=null,this._gpuBuffers=null}_destroyBuffer(t){this._gpuBuffers[t.uid].destroy(),t.off("update",this.updateBuffer,this),t.off("change",this.onBufferChange,this),t.off("destroy",this.onBufferDestroy,this),this._gpuBuffers[t.uid]=null}}).extension={type:[ExtensionType.WebGPUSystem],name:"buffer"}}}),init_GpuColorMaskSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/GpuColorMaskSystem.mjs"(){init_globals(),init_Extensions(),(GpuColorMaskSystem=class{constructor(t){this._colorMaskCache=15,this._renderer=t}setMask(t){this._colorMaskCache!==t&&(this._colorMaskCache=t,this._renderer.pipeline.setColorMask(t))}destroy(){this._renderer=null,this._colorMaskCache=null}}).extension={type:[ExtensionType.WebGPUSystem],name:"colorMask"}}}),init_GpuDeviceSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/GpuDeviceSystem.mjs"(){init_globals(),init_Extensions(),(GpuDeviceSystem=class{constructor(t){this._renderer=t}async init(t){return this._initPromise||(this._initPromise=this._createDeviceAndAdaptor(t).then(t=>{this.gpu=t,this._renderer.runners.contextChange.emit(this.gpu)})),this._initPromise}contextChange(t){this._renderer.gpu=t}async _createDeviceAndAdaptor(t){let r=await navigator.gpu.requestAdapter({powerPreference:t.powerPreference,forceFallbackAdapter:t.forceFallbackAdapter}),n=["texture-compression-bc","texture-compression-astc","texture-compression-etc2"].filter(t=>r.features.has(t)),i=await r.requestDevice({requiredFeatures:n});return{adapter:r,device:i}}destroy(){this.gpu=null,this._renderer=null}}).extension={type:[ExtensionType.WebGPUSystem],name:"device"},GpuDeviceSystem.defaultOptions={powerPreference:void 0,forceFallbackAdapter:!1}}}),init_GpuEncoderSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/GpuEncoderSystem.mjs"(){init_globals(),init_Extensions(),(GpuEncoderSystem=class{constructor(t){this._boundBindGroup=Object.create(null),this._boundVertexBuffer=Object.create(null),this._renderer=t}renderStart(){this.commandFinished=new Promise(t=>{this._resolveCommandFinished=t}),this.commandEncoder=this._renderer.gpu.device.createCommandEncoder()}beginRenderPass(t){this.endRenderPass(),this._clearCache(),this.renderPassEncoder=this.commandEncoder.beginRenderPass(t.descriptor)}endRenderPass(){this.renderPassEncoder&&this.renderPassEncoder.end(),this.renderPassEncoder=null}setViewport(t){this.renderPassEncoder.setViewport(t.x,t.y,t.width,t.height,0,1)}setPipelineFromGeometryProgramAndState(t,r,n,i){let a=this._renderer.pipeline.getPipeline(t,r,n,i);this.setPipeline(a)}setPipeline(t){this._boundPipeline!==t&&(this._boundPipeline=t,this.renderPassEncoder.setPipeline(t))}_setVertexBuffer(t,r){this._boundVertexBuffer[t]!==r&&(this._boundVertexBuffer[t]=r,this.renderPassEncoder.setVertexBuffer(t,this._renderer.buffer.updateBuffer(r)))}_setIndexBuffer(t){if(this._boundIndexBuffer===t)return;this._boundIndexBuffer=t;let r=2===t.data.BYTES_PER_ELEMENT?"uint16":"uint32";this.renderPassEncoder.setIndexBuffer(this._renderer.buffer.updateBuffer(t),r)}resetBindGroup(t){this._boundBindGroup[t]=null}setBindGroup(t,r,n){if(this._boundBindGroup[t]===r)return;this._boundBindGroup[t]=r,r._touch(this._renderer.textureGC.count);let i=this._renderer.bindGroup.getBindGroup(r,n,t);this.renderPassEncoder.setBindGroup(t,i)}setGeometry(t){for(let r in t.attributes){let n=t.attributes[r];this._setVertexBuffer(n.location,n.buffer)}t.indexBuffer&&this._setIndexBuffer(t.indexBuffer)}_setShaderBindGroups(t,r){for(let n in t.groups){let i=t.groups[n];r||this._syncBindGroup(i),this.setBindGroup(n,i,t.gpuProgram)}}_syncBindGroup(t){for(let r in t.resources){let n=t.resources[r];n.isUniformGroup&&this._renderer.ubo.updateUniformGroup(n)}}draw(t){let{geometry:r,shader:n,state:i,topology:a,size:o,start:s,instanceCount:l,skipSync:u}=t;this.setPipelineFromGeometryProgramAndState(r,n.gpuProgram,i,a),this.setGeometry(r),this._setShaderBindGroups(n,u),r.indexBuffer?this.renderPassEncoder.drawIndexed(o||r.indexBuffer.data.length,l||r.instanceCount,s||0):this.renderPassEncoder.draw(o||r.getSize(),l||r.instanceCount,s||0)}finishRenderPass(){this.renderPassEncoder&&(this.renderPassEncoder.end(),this.renderPassEncoder=null)}postrender(){this.finishRenderPass(),this._gpu.device.queue.submit([this.commandEncoder.finish()]),this._resolveCommandFinished(),this.commandEncoder=null}restoreRenderPass(){let t=this._renderer.renderTarget.adaptor.getDescriptor(this._renderer.renderTarget.renderTarget,!1,[0,0,0,1]);this.renderPassEncoder=this.commandEncoder.beginRenderPass(t);let r=this._boundPipeline,n={...this._boundVertexBuffer},i=this._boundIndexBuffer,a={...this._boundBindGroup};this._clearCache();let o=this._renderer.renderTarget.viewport;for(let t in this.renderPassEncoder.setViewport(o.x,o.y,o.width,o.height,0,1),this.setPipeline(r),n)this._setVertexBuffer(t,n[t]);for(let t in a)this.setBindGroup(t,a[t],null);this._setIndexBuffer(i)}_clearCache(){for(let t=0;t<16;t++)this._boundBindGroup[t]=null,this._boundVertexBuffer[t]=null;this._boundIndexBuffer=null,this._boundPipeline=null}destroy(){this._renderer=null,this._gpu=null,this._boundBindGroup=null,this._boundVertexBuffer=null,this._boundIndexBuffer=null,this._boundPipeline=null}contextChange(t){this._gpu=t}}).extension={type:[ExtensionType.WebGPUSystem],name:"encoder",priority:1}}}),init_GpuStencilSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/GpuStencilSystem.mjs"(){init_globals(),init_Extensions(),init_const6(),(GpuStencilSystem=class{constructor(t){this._renderTargetStencilState=Object.create(null),this._renderer=t,t.renderTarget.onRenderTargetChange.add(this)}onRenderTargetChange(t){let r=this._renderTargetStencilState[t.uid];r||(r=this._renderTargetStencilState[t.uid]={stencilMode:STENCIL_MODES.DISABLED,stencilReference:0}),this._activeRenderTarget=t,this.setStencilMode(r.stencilMode,r.stencilReference)}setStencilMode(t,r){let n=this._renderTargetStencilState[this._activeRenderTarget.uid];n.stencilMode=t,n.stencilReference=r;let i=this._renderer;i.pipeline.setStencilMode(t),i.encoder.renderPassEncoder.setStencilReference(r)}destroy(){this._renderer.renderTarget.onRenderTargetChange.remove(this),this._renderer=null,this._activeRenderTarget=null,this._renderTargetStencilState=null}}).extension={type:[ExtensionType.WebGPUSystem],name:"stencil"}}}),init_UboBatch=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/buffer/UboBatch.mjs"(){init_globals(),UboBatch=class{constructor({minUniformOffsetAlignment:t}){this._minUniformOffsetAlignment=256,this.byteIndex=0,this._minUniformOffsetAlignment=t,this.data=new Float32Array(65535)}clear(){this.byteIndex=0}addEmptyGroup(t){if(t>this._minUniformOffsetAlignment/4)throw Error("UniformBufferBatch: array is too large: "+4*t);let r=this.byteIndex,n=r+4*t;if((n=Math.ceil(n/this._minUniformOffsetAlignment)*this._minUniformOffsetAlignment)>4*this.data.length)throw Error("UniformBufferBatch: ubo batch got too big");return this.byteIndex=n,r}addGroup(t){let r=this.addEmptyGroup(t.length);for(let n=0;n<t.length;n++)this.data[r/4+n]=t[n];return r}destroy(){this._buffer.destroy(),this._buffer=null,this.data=null}}}}),init_GpuUniformBatchPipe=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/GpuUniformBatchPipe.mjs"(){init_globals(),init_Extensions(),init_Buffer(),init_BufferResource(),init_const(),init_UboBatch(),init_BindGroup(),minUniformOffsetAlignment=128,(GpuUniformBatchPipe=class{constructor(t){this._bindGroupHash=Object.create(null),this._buffers=[],this._bindGroups=[],this._bufferResources=[],this._renderer=t,this._batchBuffer=new UboBatch({minUniformOffsetAlignment:minUniformOffsetAlignment});let r=256/minUniformOffsetAlignment;for(let t=0;t<r;t++){let r=BufferUsage.UNIFORM|BufferUsage.COPY_DST;0===t&&(r|=BufferUsage.COPY_SRC),this._buffers.push(new Buffer3({data:this._batchBuffer.data,usage:r}))}}renderEnd(){this._uploadBindGroups(),this._resetBindGroups()}_resetBindGroups(){for(let t in this._bindGroupHash)this._bindGroupHash[t]=null;this._batchBuffer.clear()}getUniformBindGroup(t,r){if(!r&&this._bindGroupHash[t.uid])return this._bindGroupHash[t.uid];this._renderer.ubo.ensureUniformGroup(t);let n=t.buffer.data,i=this._batchBuffer.addEmptyGroup(n.length);return this._renderer.ubo.syncUniformGroup(t,this._batchBuffer.data,i/4),this._bindGroupHash[t.uid]=this._getBindGroup(i/minUniformOffsetAlignment),this._bindGroupHash[t.uid]}getUboResource(t){this._renderer.ubo.updateUniformGroup(t);let r=t.buffer.data,n=this._batchBuffer.addGroup(r);return this._getBufferResource(n/minUniformOffsetAlignment)}getArrayBindGroup(t){let r=this._batchBuffer.addGroup(t);return this._getBindGroup(r/minUniformOffsetAlignment)}getArrayBufferResource(t){let r=this._batchBuffer.addGroup(t)/minUniformOffsetAlignment;return this._getBufferResource(r)}_getBufferResource(t){if(!this._bufferResources[t]){let r=this._buffers[t%2];this._bufferResources[t]=new BufferResource({buffer:r,offset:256*(t/2|0),size:minUniformOffsetAlignment})}return this._bufferResources[t]}_getBindGroup(t){if(!this._bindGroups[t]){let r=new BindGroup({0:this._getBufferResource(t)});this._bindGroups[t]=r}return this._bindGroups[t]}_uploadBindGroups(){let t=this._renderer.buffer,r=this._buffers[0];r.update(this._batchBuffer.byteIndex),t.updateBuffer(r);let n=this._renderer.gpu.device.createCommandEncoder();for(let i=1;i<this._buffers.length;i++){let a=this._buffers[i];n.copyBufferToBuffer(t.getGPUBuffer(r),minUniformOffsetAlignment,t.getGPUBuffer(a),0,this._batchBuffer.byteIndex)}this._renderer.gpu.device.queue.submit([n.finish()])}destroy(){for(let t=0;t<this._bindGroups.length;t++)this._bindGroups[t].destroy();this._bindGroups=null,this._bindGroupHash=null;for(let t=0;t<this._buffers.length;t++)this._buffers[t].destroy();this._buffers=null;for(let t=0;t<this._bufferResources.length;t++)this._bufferResources[t].destroy();this._bufferResources=null,this._batchBuffer.destroy(),this._bindGroupHash=null,this._renderer=null}}).extension={type:[ExtensionType.WebGPUPipes],name:"uniformBatch"}}});function ensureAttributes(t,r){for(let n in t.attributes){let i=t.attributes[n],a=r[n];a?(i.location??(i.location=a.location),i.format??(i.format=a.format),i.offset??(i.offset=a.offset),i.instance??(i.instance=a.instance)):warn(`Attribute ${n} is not present in the shader, but is present in the geometry. Unable to infer attribute details.`)}ensureStartAndStride(t)}function ensureStartAndStride(t){let{buffers:r,attributes:n}=t,i={},a={};for(let t in r){let n=r[t];i[n.uid]=0,a[n.uid]=0}for(let t in n){let r=n[t];i[r.buffer.uid]+=getAttributeInfoFromFormat(r.format).stride}for(let t in n){let r=n[t];r.stride??(r.stride=i[r.buffer.uid]),r.start??(r.start=a[r.buffer.uid]),a[r.buffer.uid]+=getAttributeInfoFromFormat(r.format).stride}}var GpuStencilModesToPixi,topologyStringToId,PipelineSystem,init_ensureAttributes=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/shader/program/ensureAttributes.mjs"(){init_globals(),init_warn2(),init_getAttributeInfoFromFormat()}}),init_GpuStencilModesToPixi=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/state/GpuStencilModesToPixi.mjs"(){init_globals(),init_const6(),(GpuStencilModesToPixi=[])[STENCIL_MODES.NONE]=void 0,GpuStencilModesToPixi[STENCIL_MODES.DISABLED]={stencilWriteMask:0,stencilReadMask:0},GpuStencilModesToPixi[STENCIL_MODES.RENDERING_MASK_ADD]={stencilFront:{compare:"equal",passOp:"increment-clamp"},stencilBack:{compare:"equal",passOp:"increment-clamp"}},GpuStencilModesToPixi[STENCIL_MODES.RENDERING_MASK_REMOVE]={stencilFront:{compare:"equal",passOp:"decrement-clamp"},stencilBack:{compare:"equal",passOp:"decrement-clamp"}},GpuStencilModesToPixi[STENCIL_MODES.MASK_ACTIVE]={stencilWriteMask:0,stencilFront:{compare:"equal",passOp:"keep"},stencilBack:{compare:"equal",passOp:"keep"}}}});function getGraphicsStateKey(t,r,n,i,a){return t<<24|r<<16|n<<10|i<<5|a}function getGlobalStateKey(t,r,n,i){return n<<6|t<<3|i<<1|r}var init_PipelineSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/pipeline/PipelineSystem.mjs"(){init_globals(),init_Extensions(),init_ensureAttributes(),init_const6(),init_createIdFromString(),init_GpuStencilModesToPixi(),topologyStringToId={"point-list":0,"line-list":1,"line-strip":2,"triangle-list":3,"triangle-strip":4},(PipelineSystem=class{constructor(t){this._moduleCache=Object.create(null),this._bufferLayoutsCache=Object.create(null),this._pipeCache=Object.create(null),this._pipeStateCaches=Object.create(null),this._colorMask=15,this._multisampleCount=1,this._renderer=t}contextChange(t){this._gpu=t,this.setStencilMode(STENCIL_MODES.DISABLED),this._updatePipeHash()}setMultisampleCount(t){this._multisampleCount!==t&&(this._multisampleCount=t,this._updatePipeHash())}setRenderTarget(t){this._multisampleCount=t.msaaSamples,this._depthStencilAttachment=+!!t.descriptor.depthStencilAttachment,this._updatePipeHash()}setColorMask(t){this._colorMask!==t&&(this._colorMask=t,this._updatePipeHash())}setStencilMode(t){this._stencilMode!==t&&(this._stencilMode=t,this._stencilState=GpuStencilModesToPixi[t],this._updatePipeHash())}setPipeline(t,r,n,i){let a=this.getPipeline(t,r,n);i.setPipeline(a)}getPipeline(t,r,n,i){t._layoutKey||(ensureAttributes(t,r.attributeData),this._generateBufferKey(t)),i=i||t.topology;let a=getGraphicsStateKey(t._layoutKey,r._layoutKey,n.data,n._blendModeId,topologyStringToId[i]);return this._pipeCache[a]||(this._pipeCache[a]=this._createPipeline(t,r,n,i)),this._pipeCache[a]}_createPipeline(t,r,n,i){let a=this._gpu.device,o=this._createVertexBufferLayouts(t),s=this._renderer.state.getColorTargets(n);s[0].writeMask=this._stencilMode===STENCIL_MODES.RENDERING_MASK_ADD?0:this._colorMask;let l=this._renderer.shader.getProgramData(r).pipeline,u={vertex:{module:this._getModule(r.vertex.source),entryPoint:r.vertex.entryPoint,buffers:o},fragment:{module:this._getModule(r.fragment.source),entryPoint:r.fragment.entryPoint,targets:s},primitive:{topology:i,cullMode:n.cullMode},layout:l,multisample:{count:this._multisampleCount},label:"PIXI Pipeline"};return this._depthStencilAttachment&&(u.depthStencil={...this._stencilState,format:"depth24plus-stencil8",depthWriteEnabled:n.depthTest,depthCompare:n.depthTest?"less":"always"}),a.createRenderPipeline(u)}_getModule(t){return this._moduleCache[t]||this._createModule(t)}_createModule(t){let r=this._gpu.device;return this._moduleCache[t]=r.createShaderModule({code:t}),this._moduleCache[t]}_generateBufferKey(t){let r=[],n=0,i=Object.keys(t.attributes).sort();for(let a=0;a<i.length;a++){let o=t.attributes[i[a]];r[n++]=o.location,r[n++]=o.offset,r[n++]=o.format,r[n++]=o.stride}return t._layoutKey=createIdFromString(r.join(""),"geometry"),t._layoutKey}_createVertexBufferLayouts(t){if(this._bufferLayoutsCache[t._layoutKey])return this._bufferLayoutsCache[t._layoutKey];let r=[];return t.buffers.forEach(n=>{let i={arrayStride:0,stepMode:"vertex",attributes:[]},a=i.attributes;for(let r in t.attributes){let o=t.attributes[r];o.buffer===n&&(i.arrayStride=o.stride,i.stepMode=o.instance?"instance":"vertex",a.push({shaderLocation:o.location,offset:o.offset,format:o.format}))}a.length&&r.push(i)}),this._bufferLayoutsCache[t._layoutKey]=r,r}_updatePipeHash(){let t=getGlobalStateKey(this._stencilMode,this._multisampleCount,this._colorMask,this._depthStencilAttachment);this._pipeStateCaches[t]||(this._pipeStateCaches[t]=Object.create(null)),this._pipeCache=this._pipeStateCaches[t]}destroy(){this._renderer=null,this._bufferLayoutsCache=null}}).extension={type:[ExtensionType.WebGPUSystem],name:"pipeline"}}});function calculateProjection(t,r,n,i,a,o){let s=o?1:-1;return t.identity(),t.a=1/i*2,t.d=1/a*2*s,t.tx=-1-r*t.a,t.ty=-s-n*t.d,t}var init_calculateProjection=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/renderTarget/calculateProjection.mjs"(){init_globals()}});function isRenderingToScreen(t){let r=t.colorTexture.source.resource;return globalThis.HTMLCanvasElement&&r instanceof HTMLCanvasElement&&document.body.contains(r)}var RenderTargetSystem,GpuRenderTarget,GpuRenderTargetAdaptor,GpuRenderTargetSystem,GpuShaderSystem,GpuBlendModesToPixi,GpuStateSystem,gpuUploadBufferImageResource,blockDataMap,defaultBlockData,gpuUploadCompressedTextureResource,gpuUploadImageResource,gpuUploadVideoResource,GpuMipmapGenerator,GpuTextureSystem,DefaultWebGPUSystems,DefaultWebGPUPipes,DefaultWebGPUAdapters,systems,renderPipes,renderPipeAdaptors,WebGPURenderer,init_isRenderingToScreen=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/renderTarget/isRenderingToScreen.mjs"(){init_globals()}}),init_RenderTargetSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/shared/renderTarget/RenderTargetSystem.mjs"(){init_globals(),init_Matrix(),init_Rectangle(),init_const3(),init_calculateProjection(),init_SystemRunner(),init_CanvasSource(),init_TextureSource(),init_Texture(),init_getCanvasTexture(),init_isRenderingToScreen(),init_RenderTarget(),RenderTargetSystem=class{constructor(t){this.rootViewPort=new Rectangle,this.viewport=new Rectangle,this.onRenderTargetChange=new SystemRunner("onRenderTargetChange"),this.projectionMatrix=new Matrix,this.defaultClearColor=[0,0,0,0],this._renderSurfaceToRenderTargetHash=new Map,this._gpuRenderTargetHash=Object.create(null),this._renderTargetStack=[],this._renderer=t}finishRenderPass(){this.adaptor.finishRenderPass(this.renderTarget)}renderStart({target:t,clear:r,clearColor:n,frame:i}){this._renderTargetStack.length=0,this.push(t,r,n,i),this.rootViewPort.copyFrom(this.viewport),this.rootRenderTarget=this.renderTarget,this.renderingToScreen=isRenderingToScreen(this.rootRenderTarget)}bind(t,r=!0,n,i){let a=this.getRenderTarget(t),o=this.renderTarget!==a;this.renderTarget=a,this.renderSurface=t;let s=this.getGpuRenderTarget(a);a.pixelWidth===s.width&&a.pixelHeight===s.height||(this.adaptor.resizeGpuRenderTarget(a),s.width=a.pixelWidth,s.height=a.pixelHeight);let l=a.colorTexture,u=this.viewport,d=l.pixelWidth,c=l.pixelHeight;if(!i&&t instanceof Texture&&(i=t.frame),i){let t=l._resolution;u.x=i.x*t+.5|0,u.y=i.y*t+.5|0,u.width=i.width*t+.5|0,u.height=i.height*t+.5|0}else u.x=0,u.y=0,u.width=d,u.height=c;return calculateProjection(this.projectionMatrix,0,0,u.width/l.resolution,u.height/l.resolution,!a.isRoot),this.adaptor.startRenderPass(a,r,n,u),o&&this.onRenderTargetChange.emit(a),a}clear(t,r=CLEAR.ALL,n){r&&(t&&(t=this.getRenderTarget(t)),this.adaptor.clear(t||this.renderTarget,r,n,this.viewport))}contextChange(){this._gpuRenderTargetHash=Object.create(null)}push(t,r=CLEAR.ALL,n,i){let a=this.bind(t,r,n,i);return this._renderTargetStack.push({renderTarget:a,frame:i}),a}pop(){this._renderTargetStack.pop();let t=this._renderTargetStack[this._renderTargetStack.length-1];this.bind(t.renderTarget,!1,null,t.frame)}getRenderTarget(t){return t.isTexture&&(t=t.source),this._renderSurfaceToRenderTargetHash.get(t)??this._initRenderTarget(t)}copyToTexture(t,r,n,i,a){n.x<0&&(i.width+=n.x,a.x-=n.x,n.x=0),n.y<0&&(i.height+=n.y,a.y-=n.y,n.y=0);let{pixelWidth:o,pixelHeight:s}=t;return i.width=Math.min(i.width,o-n.x),i.height=Math.min(i.height,s-n.y),this.adaptor.copyToTexture(t,r,n,i,a)}ensureDepthStencil(){this.renderTarget.stencil||(this.renderTarget.stencil=!0,this.adaptor.startRenderPass(this.renderTarget,!1,null,this.viewport))}destroy(){this._renderer=null,this._renderSurfaceToRenderTargetHash.forEach((t,r)=>{t!==r&&t.destroy()}),this._renderSurfaceToRenderTargetHash.clear(),this._gpuRenderTargetHash=Object.create(null)}_initRenderTarget(t){let r=null;return CanvasSource.test(t)&&(t=getCanvasTexture(t)),t instanceof RenderTarget?r=t:t instanceof TextureSource&&(r=new RenderTarget({colorTextures:[t]}),CanvasSource.test(t.source.resource)&&(r.isRoot=!0),t.once("destroy",()=>{r.destroy();let t=this._gpuRenderTargetHash[r.uid];t&&(this._gpuRenderTargetHash[r.uid]=null,this.adaptor.destroyGpuRenderTarget(t))})),this._renderSurfaceToRenderTargetHash.set(t,r),r}getGpuRenderTarget(t){return this._gpuRenderTargetHash[t.uid]||(this._gpuRenderTargetHash[t.uid]=this.adaptor.initGpuRenderTarget(t))}}}}),init_GpuRenderTarget=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/renderTarget/GpuRenderTarget.mjs"(){init_globals(),GpuRenderTarget=class{constructor(){this.contexts=[],this.msaaTextures=[],this.msaaSamples=1}}}}),init_GpuRenderTargetAdaptor=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/renderTarget/GpuRenderTargetAdaptor.mjs"(){init_globals(),init_const3(),init_CanvasSource(),init_TextureSource(),init_GpuRenderTarget(),GpuRenderTargetAdaptor=class{init(t,r){this._renderer=t,this._renderTargetSystem=r}copyToTexture(t,r,n,i,a){let o=this._renderer,s=this._getGpuColorTexture(t),l=o.texture.getGpuSource(r.source);return o.encoder.commandEncoder.copyTextureToTexture({texture:s,origin:n},{texture:l,origin:a},i),r}startRenderPass(t,r=!0,n,i){let a=this._renderTargetSystem.getGpuRenderTarget(t);a.descriptor=this.getDescriptor(t,r,n),this._renderer.pipeline.setRenderTarget(a),this._renderer.encoder.beginRenderPass(a),this._renderer.encoder.setViewport(i)}finishRenderPass(){this._renderer.encoder.endRenderPass()}_getGpuColorTexture(t){let r=this._renderTargetSystem.getGpuRenderTarget(t);return r.contexts[0]?r.contexts[0].getCurrentTexture():this._renderer.texture.getGpuSource(t.colorTextures[0].source)}getDescriptor(t,r,n){let i;"boolean"==typeof r&&(r=r?CLEAR.ALL:CLEAR.NONE);let a=this._renderTargetSystem,o=a.getGpuRenderTarget(t),s=t.colorTextures.map((t,i)=>{let s,l,u=o.contexts[i];s=u?u.getCurrentTexture().createView():this._renderer.texture.getGpuSource(t).createView({mipLevelCount:1}),o.msaaTextures[i]&&(l=s,s=this._renderer.texture.getTextureView(o.msaaTextures[i]));let d=r&CLEAR.COLOR?"clear":"load";return n??(n=a.defaultClearColor),{view:s,resolveTarget:l,clearValue:n,storeOp:"store",loadOp:d}});if((t.stencil||t.depth)&&!t.depthStencilTexture&&(t.ensureDepthStencilTexture(),t.depthStencilTexture.source.sampleCount=o.msaa?4:1),t.depthStencilTexture){let n=r&CLEAR.STENCIL?"clear":"load",a=r&CLEAR.DEPTH?"clear":"load";i={view:this._renderer.texture.getGpuSource(t.depthStencilTexture.source).createView(),stencilStoreOp:"store",stencilLoadOp:n,depthClearValue:1,depthLoadOp:a,depthStoreOp:"store"}}return{colorAttachments:s,depthStencilAttachment:i}}clear(t,r=!0,n,i){if(!r)return;let{gpu:a,encoder:o}=this._renderer,s=a.device;if(null===o.commandEncoder){let a=s.createCommandEncoder(),o=this.getDescriptor(t,r,n),l=a.beginRenderPass(o);l.setViewport(i.x,i.y,i.width,i.height,0,1),l.end();let u=a.finish();s.queue.submit([u])}else this.startRenderPass(t,r,n,i)}initGpuRenderTarget(t){t.isRoot=!0;let r=new GpuRenderTarget;return t.colorTextures.forEach((t,n)=>{if(CanvasSource.test(t.resource)){let i=t.resource.getContext("webgpu"),a=t.transparent?"premultiplied":"opaque";try{i.configure({device:this._renderer.gpu.device,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC,format:"bgra8unorm",alphaMode:a})}catch(t){import_console_browserify.default.error(t)}r.contexts[n]=i}if(r.msaa=t.source.antialias,t.source.antialias){let t=new TextureSource({width:0,height:0,sampleCount:4});r.msaaTextures[n]=t}}),r.msaa&&(r.msaaSamples=4,t.depthStencilTexture&&(t.depthStencilTexture.source.sampleCount=4)),r}destroyGpuRenderTarget(t){t.contexts.forEach(t=>{t.unconfigure()}),t.msaaTextures.forEach(t=>{t.destroy()}),t.msaaTextures.length=0,t.contexts.length=0}ensureDepthStencilTexture(t){let r=this._renderTargetSystem.getGpuRenderTarget(t);t.depthStencilTexture&&r.msaa&&(t.depthStencilTexture.source.sampleCount=4)}resizeGpuRenderTarget(t){let r=this._renderTargetSystem.getGpuRenderTarget(t);r.width=t.width,r.height=t.height,r.msaa&&t.colorTextures.forEach((t,n)=>{let i=r.msaaTextures[n];i?.resize(t.source.width,t.source.height,t.source._resolution)})}}}}),init_GpuRenderTargetSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/renderTarget/GpuRenderTargetSystem.mjs"(){init_globals(),init_Extensions(),init_RenderTargetSystem(),init_GpuRenderTargetAdaptor(),(GpuRenderTargetSystem=class extends RenderTargetSystem{constructor(t){super(t),this.adaptor=new GpuRenderTargetAdaptor,this.adaptor.init(t,this)}}).extension={type:[ExtensionType.WebGPUSystem],name:"renderTarget"}}}),init_GpuShaderSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/shader/GpuShaderSystem.mjs"(){init_globals(),init_Extensions(),(GpuShaderSystem=class{constructor(){this._gpuProgramData=Object.create(null)}contextChange(t){this._gpu=t}getProgramData(t){return this._gpuProgramData[t._layoutKey]||this._createGPUProgramData(t)}_createGPUProgramData(t){let r=this._gpu.device,n=t.gpuLayout.map(t=>r.createBindGroupLayout({entries:t})),i={bindGroupLayouts:n};return this._gpuProgramData[t._layoutKey]={bindGroups:n,pipeline:r.createPipelineLayout(i)},this._gpuProgramData[t._layoutKey]}destroy(){this._gpu=null,this._gpuProgramData=null}}).extension={type:[ExtensionType.WebGPUSystem],name:"shader"}}}),init_GpuBlendModesToPixi=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/state/GpuBlendModesToPixi.mjs"(){init_globals(),(GpuBlendModesToPixi={}).normal={alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}},GpuBlendModesToPixi.add={alpha:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"one",dstFactor:"one",operation:"add"}},GpuBlendModesToPixi.multiply={alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"dst",dstFactor:"one-minus-src-alpha",operation:"add"}},GpuBlendModesToPixi.screen={alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"one",dstFactor:"one-minus-src",operation:"add"}},GpuBlendModesToPixi.overlay={alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"one",dstFactor:"one-minus-src",operation:"add"}},GpuBlendModesToPixi.none={alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"zero",dstFactor:"zero",operation:"add"}},GpuBlendModesToPixi["normal-npm"]={alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"}},GpuBlendModesToPixi["add-npm"]={alpha:{srcFactor:"one",dstFactor:"one",operation:"add"},color:{srcFactor:"src-alpha",dstFactor:"one",operation:"add"}},GpuBlendModesToPixi["screen-npm"]={alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"src-alpha",dstFactor:"one-minus-src",operation:"add"}},GpuBlendModesToPixi.erase={alpha:{srcFactor:"zero",dstFactor:"one-minus-src-alpha",operation:"add"},color:{srcFactor:"zero",dstFactor:"one-minus-src",operation:"add"}}}}),init_GpuStateSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/state/GpuStateSystem.mjs"(){init_globals(),init_Extensions(),init_State(),init_GpuBlendModesToPixi(),(GpuStateSystem=class{constructor(){this.defaultState=new State,this.defaultState.blend=!0}contextChange(t){this.gpu=t}getColorTargets(t){return[{format:"bgra8unorm",writeMask:0,blend:GpuBlendModesToPixi[t.blendMode]||GpuBlendModesToPixi.normal}]}destroy(){this.gpu=null}}).extension={type:[ExtensionType.WebGPUSystem],name:"state"}}}),init_gpuUploadBufferImageResource=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/texture/uploaders/gpuUploadBufferImageResource.mjs"(){init_globals(),gpuUploadBufferImageResource={type:"image",upload(t,r,n){let i=t.resource,a=(0|t.pixelWidth)*(0|t.pixelHeight),o=i.byteLength/a;n.device.queue.writeTexture({texture:r},i,{offset:0,rowsPerImage:t.pixelHeight,bytesPerRow:t.pixelHeight*o},{width:t.pixelWidth,height:t.pixelHeight,depthOrArrayLayers:1})}}}}),init_gpuUploadCompressedTextureResource=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/texture/uploaders/gpuUploadCompressedTextureResource.mjs"(){init_globals(),blockDataMap={"bc1-rgba-unorm":{blockBytes:8,blockWidth:4,blockHeight:4},"bc2-rgba-unorm":{blockBytes:16,blockWidth:4,blockHeight:4},"bc3-rgba-unorm":{blockBytes:16,blockWidth:4,blockHeight:4},"bc7-rgba-unorm":{blockBytes:16,blockWidth:4,blockHeight:4},"etc1-rgb-unorm":{blockBytes:8,blockWidth:4,blockHeight:4},"etc2-rgba8unorm":{blockBytes:16,blockWidth:4,blockHeight:4},"astc-4x4-unorm":{blockBytes:16,blockWidth:4,blockHeight:4}},defaultBlockData={blockBytes:4,blockWidth:1,blockHeight:1},gpuUploadCompressedTextureResource={type:"compressed",upload(t,r,n){let i=t.pixelWidth,a=t.pixelHeight,o=blockDataMap[t.format]||defaultBlockData;for(let s=0;s<t.resource.length;s++){let l=t.resource[s],u=Math.ceil(i/o.blockWidth)*o.blockBytes;n.device.queue.writeTexture({texture:r,mipLevel:s},l,{offset:0,bytesPerRow:u},{width:Math.ceil(i/o.blockWidth)*o.blockWidth,height:Math.ceil(a/o.blockHeight)*o.blockHeight,depthOrArrayLayers:1}),i=Math.max(i>>1,1),a=Math.max(a>>1,1)}}}}}),init_gpuUploadImageSource=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/texture/uploaders/gpuUploadImageSource.mjs"(){init_globals(),gpuUploadImageResource={type:"image",upload(t,r,n){let i=t.resource;if(!i)return;let a=Math.min(r.width,t.resourceWidth||t.pixelWidth),o=Math.min(r.height,t.resourceHeight||t.pixelHeight),s="premultiply-alpha-on-upload"===t.alphaMode;n.device.queue.copyExternalImageToTexture({source:i},{texture:r,premultipliedAlpha:s},{width:a,height:o})}}}}),init_gpuUploadVideoSource=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/texture/uploaders/gpuUploadVideoSource.mjs"(){init_globals(),init_gpuUploadImageSource(),gpuUploadVideoResource={type:"video",upload(t,r,n){gpuUploadImageResource.upload(t,r,n)}}}}),init_GpuMipmapGenerator=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/texture/utils/GpuMipmapGenerator.mjs"(){init_globals(),GpuMipmapGenerator=class{constructor(t){this.device=t,this.sampler=t.createSampler({minFilter:"linear"}),this.pipelines={}}_getMipmapPipeline(t){let r=this.pipelines[t];return r||(this.mipmapShaderModule||(this.mipmapShaderModule=this.device.createShaderModule({code:"\n var<private> pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(\n vec2<f32>(-1.0, -1.0), vec2<f32>(-1.0, 3.0), vec2<f32>(3.0, -1.0));\n\n struct VertexOutput {\n @builtin(position) position : vec4<f32>,\n @location(0) texCoord : vec2<f32>,\n };\n\n @vertex\n fn vertexMain(@builtin(vertex_index) vertexIndex : u32) -> VertexOutput {\n var output : VertexOutput;\n output.texCoord = pos[vertexIndex] * vec2<f32>(0.5, -0.5) + vec2<f32>(0.5);\n output.position = vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n return output;\n }\n\n @group(0) @binding(0) var imgSampler : sampler;\n @group(0) @binding(1) var img : texture_2d<f32>;\n\n @fragment\n fn fragmentMain(@location(0) texCoord : vec2<f32>) -> @location(0) vec4<f32> {\n return textureSample(img, imgSampler, texCoord);\n }\n "})),r=this.device.createRenderPipeline({layout:"auto",vertex:{module:this.mipmapShaderModule,entryPoint:"vertexMain"},fragment:{module:this.mipmapShaderModule,entryPoint:"fragmentMain",targets:[{format:t}]}}),this.pipelines[t]=r),r}generateMipmap(t){let r=this._getMipmapPipeline(t.format);if("3d"===t.dimension||"1d"===t.dimension)throw Error("Generating mipmaps for non-2d textures is currently unsupported!");let n=t,i=t.depthOrArrayLayers||1,a=t.usage&GPUTextureUsage.RENDER_ATTACHMENT;if(!a){let r={size:{width:Math.ceil(t.width/2),height:Math.ceil(t.height/2),depthOrArrayLayers:i},format:t.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.RENDER_ATTACHMENT,mipLevelCount:t.mipLevelCount-1};n=this.device.createTexture(r)}let o=this.device.createCommandEncoder({}),s=r.getBindGroupLayout(0);for(let l=0;l<i;++l){let i=t.createView({baseMipLevel:0,mipLevelCount:1,dimension:"2d",baseArrayLayer:l,arrayLayerCount:1}),u=+!!a;for(let a=1;a<t.mipLevelCount;++a){let t=n.createView({baseMipLevel:u++,mipLevelCount:1,dimension:"2d",baseArrayLayer:l,arrayLayerCount:1}),a=o.beginRenderPass({colorAttachments:[{view:t,storeOp:"store",loadOp:"clear",clearValue:{r:0,g:0,b:0,a:0}}]}),d=this.device.createBindGroup({layout:s,entries:[{binding:0,resource:this.sampler},{binding:1,resource:i}]});a.setPipeline(r),a.setBindGroup(0,d),a.draw(3,1,0,0),a.end(),i=t}}if(!a){let r={width:Math.ceil(t.width/2),height:Math.ceil(t.height/2),depthOrArrayLayers:i};for(let i=1;i<t.mipLevelCount;++i)o.copyTextureToTexture({texture:n,mipLevel:i-1},{texture:t,mipLevel:i},r),r.width=Math.ceil(r.width/2),r.height=Math.ceil(r.height/2)}return this.device.queue.submit([o.finish()]),a||n.destroy(),t}}}}),init_GpuTextureSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/texture/GpuTextureSystem.mjs"(){init_globals(),init_adapter(),init_Extensions(),init_CanvasPool(),init_BindGroup(),init_gpuUploadBufferImageResource(),init_gpuUploadCompressedTextureResource(),init_gpuUploadImageSource(),init_gpuUploadVideoSource(),init_GpuMipmapGenerator(),(GpuTextureSystem=class{constructor(t){this.managedTextures=[],this._gpuSources=Object.create(null),this._gpuSamplers=Object.create(null),this._bindGroupHash=Object.create(null),this._textureViewHash=Object.create(null),this._uploads={image:gpuUploadImageResource,buffer:gpuUploadBufferImageResource,video:gpuUploadVideoResource,compressed:gpuUploadCompressedTextureResource},this._renderer=t}contextChange(t){this._gpu=t}initSource(t){if(t.autoGenerateMipmaps){let r=Math.max(t.pixelWidth,t.pixelHeight);t.mipLevelCount=Math.floor(Math.log2(r))+1}let r=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST;"compressed"!==t.uploadMethodId&&(r|=GPUTextureUsage.RENDER_ATTACHMENT,r|=GPUTextureUsage.COPY_SRC);let n=blockDataMap[t.format]||{blockBytes:4,blockWidth:1,blockHeight:1},i=Math.ceil(t.pixelWidth/n.blockWidth)*n.blockWidth,a=Math.ceil(t.pixelHeight/n.blockHeight)*n.blockHeight,o={label:t.label,size:{width:i,height:a},format:t.format,sampleCount:t.sampleCount,mipLevelCount:t.mipLevelCount,dimension:t.dimension,usage:r},s=this._gpu.device.createTexture(o);return this._gpuSources[t.uid]=s,this.managedTextures.includes(t)||(t.on("update",this.onSourceUpdate,this),t.on("resize",this.onSourceResize,this),t.on("destroy",this.onSourceDestroy,this),t.on("unload",this.onSourceUnload,this),t.on("updateMipmaps",this.onUpdateMipmaps,this),this.managedTextures.push(t)),this.onSourceUpdate(t),s}onSourceUpdate(t){let r=this.getGpuSource(t);r&&(this._uploads[t.uploadMethodId]&&this._uploads[t.uploadMethodId].upload(t,r,this._gpu),t.autoGenerateMipmaps&&t.mipLevelCount>1&&this.onUpdateMipmaps(t))}onSourceUnload(t){let r=this._gpuSources[t.uid];r&&(this._gpuSources[t.uid]=null,r.destroy())}onUpdateMipmaps(t){this._mipmapGenerator||(this._mipmapGenerator=new GpuMipmapGenerator(this._gpu.device));let r=this.getGpuSource(t);this._mipmapGenerator.generateMipmap(r)}onSourceDestroy(t){t.off("update",this.onSourceUpdate,this),t.off("unload",this.onSourceUnload,this),t.off("destroy",this.onSourceDestroy,this),t.off("resize",this.onSourceResize,this),t.off("updateMipmaps",this.onUpdateMipmaps,this),this.managedTextures.splice(this.managedTextures.indexOf(t),1),this.onSourceUnload(t)}onSourceResize(t){let r=this._gpuSources[t.uid];r?r.width===t.pixelWidth&&r.height===t.pixelHeight||(this._textureViewHash[t.uid]=null,this._bindGroupHash[t.uid]=null,this.onSourceUnload(t),this.initSource(t)):this.initSource(t)}_initSampler(t){return this._gpuSamplers[t._resourceId]=this._gpu.device.createSampler(t),this._gpuSamplers[t._resourceId]}getGpuSampler(t){return this._gpuSamplers[t._resourceId]||this._initSampler(t)}getGpuSource(t){return this._gpuSources[t.uid]||this.initSource(t)}getTextureBindGroup(t){return this._bindGroupHash[t.uid]??this._createTextureBindGroup(t)}_createTextureBindGroup(t){let r=t.source,n=r.uid;return this._bindGroupHash[n]=new BindGroup({0:r,1:r.style}),this._bindGroupHash[n]}getTextureView(t){let r=t.source;return this._textureViewHash[r.uid]??this._createTextureView(r)}_createTextureView(t){return this._textureViewHash[t.uid]=this.getGpuSource(t).createView(),this._textureViewHash[t.uid]}generateCanvas(t){let r=this._renderer,n=r.gpu.device.createCommandEncoder(),i=DOMAdapter.get().createCanvas();i.width=t.source.pixelWidth,i.height=t.source.pixelHeight;let a=i.getContext("webgpu");return a.configure({device:r.gpu.device,usage:GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC,format:navigator.gpu.getPreferredCanvasFormat(),alphaMode:"premultiplied"}),n.copyTextureToTexture({texture:r.texture.getGpuSource(t.source),origin:{x:0,y:0}},{texture:a.getCurrentTexture()},{width:i.width,height:i.height}),r.gpu.device.queue.submit([n.finish()]),i}getPixels(t){let r=this.generateCanvas(t),n=CanvasPool.getOptimalCanvasAndContext(r.width,r.height),i=n.context;i.drawImage(r,0,0);let{width:a,height:o}=r,s=new Uint8ClampedArray(i.getImageData(0,0,a,o).data.buffer);return CanvasPool.returnCanvasAndContext(n),{pixels:s,width:a,height:o}}destroy(){for(let t of(this.managedTextures.slice().forEach(t=>this.onSourceDestroy(t)),this.managedTextures=null,Object.keys(this._bindGroupHash))){let r=Number(t),n=this._bindGroupHash[r];n?.destroy(),this._bindGroupHash[r]=null}this._gpu=null,this._mipmapGenerator=null,this._gpuSources=null,this._bindGroupHash=null,this._textureViewHash=null,this._gpuSamplers=null}}).extension={type:[ExtensionType.WebGPUSystem],name:"texture"}}}),WebGPURenderer_exports={};__export(WebGPURenderer_exports,{WebGPURenderer:()=>WebGPURenderer});var GlGraphicsAdaptor,GlMeshAdaptor,GlBatchAdaptor,BUFFER_TYPE,GlBuffer,GlBufferSystem,_GlContextSystem,GlContextSystem,GL_FORMATS,GL_TARGETS,GL_TYPES,infoMap,init_WebGPURenderer=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gpu/WebGPURenderer.mjs"(){init_globals(),init_Extensions(),init_GpuGraphicsAdaptor(),init_GpuMeshAdapter(),init_GpuBatchAdaptor(),init_AbstractRenderer(),init_SharedSystems(),init_types2(),init_BindGroupSystem(),init_GpuBufferSystem(),init_GpuColorMaskSystem(),init_GpuDeviceSystem(),init_GpuEncoderSystem(),init_GpuStencilSystem(),init_GpuUboSystem(),init_GpuUniformBatchPipe(),init_PipelineSystem(),init_GpuRenderTargetSystem(),init_GpuShaderSystem(),init_GpuStateSystem(),init_GpuTextureSystem(),DefaultWebGPUSystems=[...SharedSystems,GpuUboSystem,GpuEncoderSystem,GpuDeviceSystem,GpuBufferSystem,GpuTextureSystem,GpuRenderTargetSystem,GpuShaderSystem,GpuStateSystem,PipelineSystem,GpuColorMaskSystem,GpuStencilSystem,BindGroupSystem],DefaultWebGPUPipes=[...SharedRenderPipes,GpuUniformBatchPipe],DefaultWebGPUAdapters=[GpuBatchAdaptor,GpuMeshAdapter,GpuGraphicsAdaptor],systems=[],renderPipes=[],renderPipeAdaptors=[],extensions.handleByNamedList(ExtensionType.WebGPUSystem,systems),extensions.handleByNamedList(ExtensionType.WebGPUPipes,renderPipes),extensions.handleByNamedList(ExtensionType.WebGPUPipesAdaptor,renderPipeAdaptors),extensions.add(...DefaultWebGPUSystems,...DefaultWebGPUPipes,...DefaultWebGPUAdapters),WebGPURenderer=class extends AbstractRenderer{constructor(){super({name:"webgpu",type:RendererType.WEBGPU,systems:systems,renderPipes:renderPipes,renderPipeAdaptors:renderPipeAdaptors})}}}}),init_GlGraphicsAdaptor=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/scene/graphics/gl/GlGraphicsAdaptor.mjs"(){init_globals(),init_Extensions(),init_Matrix(),init_const5(),init_compileHighShaderToProgram(),init_colorBit(),init_generateTextureBatchBit(),init_localUniformBit(),init_roundPixelsBit(),init_batchSamplersUniformGroup(),init_Shader(),init_UniformGroup(),(GlGraphicsAdaptor=class{init(){let t=new UniformGroup({uColor:{value:new Float32Array([1,1,1,1]),type:"vec4<f32>"},uTransformMatrix:{value:new Matrix,type:"mat3x3<f32>"},uRound:{value:0,type:"f32"}}),r=compileHighShaderGlProgram({name:"graphics",bits:[colorBitGl,generateTextureBatchBitGl(MAX_TEXTURES),localUniformBitGl,roundPixelsBitGl]});this.shader=new Shader({glProgram:r,resources:{localUniforms:t,batchSamplers:batchSamplersUniformGroup}})}execute(t,r){let n=r.context,i=n.customShader||this.shader,a=t.renderer,{geometry:o,instructions:s}=a.graphicsContext.getContextRenderData(n);i.groups[0]=a.globalUniforms.bindGroup,a.state.set(t.state),a.shader.bind(i),a.geometry.bind(o,i.glProgram);let l=s.instructions;for(let t=0;t<s.instructionSize;t++){let r=l[t];if(r.size){for(let t=0;t<r.textures.textures.length;t++)a.texture.bind(r.textures.textures[t],t);a.geometry.draw("triangle-list",r.size,r.start)}}}destroy(){this.shader.destroy(!0),this.shader=null}}).extension={type:[ExtensionType.WebGLPipesAdaptor],name:"graphics"}}}),init_GlMeshAdaptor=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/scene/mesh/gl/GlMeshAdaptor.mjs"(){init_globals(),init_Extensions(),init_Matrix(),init_compileHighShaderToProgram(),init_localUniformBit(),init_roundPixelsBit(),init_textureBit(),init_Shader(),init_Texture(),init_warn2(),(GlMeshAdaptor=class{init(){let t=compileHighShaderGlProgram({name:"mesh",bits:[localUniformBitGl,textureBitGl,roundPixelsBitGl]});this._shader=new Shader({glProgram:t,resources:{uTexture:Texture.EMPTY.source,textureUniforms:{uTextureMatrix:{type:"mat3x3<f32>",value:new Matrix}}}})}execute(t,r){let n=t.renderer,i=r._shader;if(i){if(!i.glProgram)return void warn("Mesh shader has no glProgram",r.shader)}else{i=this._shader;let t=r.texture,n=t.source;i.resources.uTexture=n,i.resources.uSampler=n.style,i.resources.textureUniforms.uniforms.uTextureMatrix=t.textureMatrix.mapCoord}i.groups[100]=n.globalUniforms.bindGroup,i.groups[101]=t.localUniformsBindGroup,n.encoder.draw({geometry:r._geometry,shader:i,state:r.state})}destroy(){this._shader.destroy(!0),this._shader=null}}).extension={type:[ExtensionType.WebGLPipesAdaptor],name:"mesh"}}}),init_GlBatchAdaptor=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/batcher/gl/GlBatchAdaptor.mjs"(){init_globals(),init_Extensions(),init_compileHighShaderToProgram(),init_colorBit(),init_generateTextureBatchBit(),init_roundPixelsBit(),init_batchSamplersUniformGroup(),init_Shader(),init_State(),init_const5(),(GlBatchAdaptor=class{constructor(){this._didUpload=!1,this._tempState=State.for2d()}init(t){let r=compileHighShaderGlProgram({name:"batch",bits:[colorBitGl,generateTextureBatchBitGl(MAX_TEXTURES),roundPixelsBitGl]});this._shader=new Shader({glProgram:r,resources:{batchSamplers:batchSamplersUniformGroup}}),t.renderer.runners.contextChange.add(this)}contextChange(){this._didUpload=!1}start(t,r){let n=t.renderer;n.shader.bind(this._shader,this._didUpload),n.shader.updateUniformGroup(n.globalUniforms.uniformGroup),n.geometry.bind(r,this._shader.glProgram)}execute(t,r){let n=t.renderer;this._didUpload=!0,this._tempState.blendMode=r.blendMode,n.state.set(this._tempState);let i=r.textures.textures;for(let t=0;t<i.length;t++)n.texture.bind(i[t],t);n.geometry.draw("triangle-list",r.size,r.start)}destroy(){this._shader.destroy(!0),this._shader=null}}).extension={type:[ExtensionType.WebGLPipesAdaptor],name:"batch"}}}),init_const9=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/buffer/const.mjs"(){let t;init_globals(),(t=BUFFER_TYPE||{})[t.ELEMENT_ARRAY_BUFFER=34963]="ELEMENT_ARRAY_BUFFER",t[t.ARRAY_BUFFER=34962]="ARRAY_BUFFER",t[t.UNIFORM_BUFFER=35345]="UNIFORM_BUFFER",BUFFER_TYPE=t}}),init_GlBuffer=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/buffer/GlBuffer.mjs"(){init_globals(),GlBuffer=class{constructor(t,r){this.buffer=t||null,this.updateID=-1,this.byteLength=-1,this.type=r}}}}),init_GlBufferSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/buffer/GlBufferSystem.mjs"(){init_globals(),init_Extensions(),init_const(),init_const9(),init_GlBuffer(),(GlBufferSystem=class{constructor(t){this._gpuBuffers=Object.create(null),this._boundBufferBases=Object.create(null),this._renderer=t}destroy(){this._renderer=null,this._gl=null,this._gpuBuffers=null,this._boundBufferBases=null}contextChange(){this._gpuBuffers=Object.create(null),this._gl=this._renderer.gl}getGlBuffer(t){return this._gpuBuffers[t.uid]||this.createGLBuffer(t)}bind(t){let{_gl:r}=this,n=this.getGlBuffer(t);r.bindBuffer(n.type,n.buffer)}bindBufferBase(t,r){let{_gl:n}=this;if(this._boundBufferBases[r]!==t){let i=this.getGlBuffer(t);this._boundBufferBases[r]=t,n.bindBufferBase(n.UNIFORM_BUFFER,r,i.buffer)}}bindBufferRange(t,r,n){let{_gl:i}=this;n=n||0;let a=this.getGlBuffer(t);i.bindBufferRange(i.UNIFORM_BUFFER,r||0,a.buffer,256*n,256)}updateBuffer(t){let{_gl:r}=this,n=this.getGlBuffer(t);if(t._updateID===n.updateID)return n;n.updateID=t._updateID,r.bindBuffer(n.type,n.buffer);let i=t.data;if(n.byteLength>=t.data.byteLength)r.bufferSubData(n.type,0,i,0,t._updateSize/i.BYTES_PER_ELEMENT);else{let a=t.descriptor.usage&BufferUsage.STATIC?r.STATIC_DRAW:r.DYNAMIC_DRAW;n.byteLength=i.byteLength,r.bufferData(n.type,i,a)}return n}destroyAll(){let t=this._gl;for(let r in this._gpuBuffers)t.deleteBuffer(this._gpuBuffers[r].buffer);this._gpuBuffers=Object.create(null)}onBufferDestroy(t,r){let n=this._gpuBuffers[t.uid],i=this._gl;r||i.deleteBuffer(n.buffer),this._gpuBuffers[t.uid]=null}createGLBuffer(t){let{_gl:r}=this,n=BUFFER_TYPE.ARRAY_BUFFER;t.descriptor.usage&BufferUsage.INDEX?n=BUFFER_TYPE.ELEMENT_ARRAY_BUFFER:t.descriptor.usage&BufferUsage.UNIFORM&&(n=BUFFER_TYPE.UNIFORM_BUFFER);let i=new GlBuffer(r.createBuffer(),n);return this._gpuBuffers[t.uid]=i,t.on("destroy",this.onBufferDestroy,this),i}}).extension={type:[ExtensionType.WebGLSystem],name:"buffer"}}}),init_GlContextSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/context/GlContextSystem.mjs"(){init_globals(),init_adapter(),init_Extensions(),init_warn2(),(_GlContextSystem=class t{constructor(t){this.supports={uint32Indices:!0,uniformBufferObject:!0,vertexArrayObject:!0,srgbTextures:!0,nonPowOf2wrapping:!0,msaa:!0,nonPowOf2mipmaps:!0},this._renderer=t,this.extensions=Object.create(null),this.handleContextLost=this.handleContextLost.bind(this),this.handleContextRestored=this.handleContextRestored.bind(this)}get isLost(){return!this.gl||this.gl.isContextLost()}contextChange(t){this.gl=t,this._renderer.gl=t}init(r){if((r={...t.defaultOptions,...r}).context)this.initFromContext(r.context);else{let t=this._renderer.background.alpha<1,n=r.premultipliedAlpha??!0,i=r.antialias&&!this._renderer.backBuffer.useBackBuffer;this.createContext(r.preferWebGLVersion,{alpha:t,premultipliedAlpha:n,antialias:i,stencil:!0,preserveDrawingBuffer:r.preserveDrawingBuffer,powerPreference:r.powerPreference??"default"})}}initFromContext(t){this.gl=t,this.webGLVersion=t instanceof DOMAdapter.get().getWebGLRenderingContext()?1:2,this.getExtensions(),this.validateContext(t),this._renderer.runners.contextChange.emit(t);let r=this._renderer.view.canvas;r.addEventListener("webglcontextlost",this.handleContextLost,!1),r.addEventListener("webglcontextrestored",this.handleContextRestored,!1)}createContext(t,r){let n,i=this._renderer.view.canvas;if(2===t&&(n=i.getContext("webgl2",r)),!n&&!(n=i.getContext("webgl",r)))throw Error("This browser does not support WebGL. Try using the canvas renderer");this.gl=n,this.initFromContext(this.gl)}getExtensions(){let{gl:t}=this,r={anisotropicFiltering:t.getExtension("EXT_texture_filter_anisotropic"),floatTextureLinear:t.getExtension("OES_texture_float_linear"),s3tc:t.getExtension("WEBGL_compressed_texture_s3tc"),s3tc_sRGB:t.getExtension("WEBGL_compressed_texture_s3tc_srgb"),etc:t.getExtension("WEBGL_compressed_texture_etc"),etc1:t.getExtension("WEBGL_compressed_texture_etc1"),pvrtc:t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),atc:t.getExtension("WEBGL_compressed_texture_atc"),astc:t.getExtension("WEBGL_compressed_texture_astc"),bptc:t.getExtension("EXT_texture_compression_bptc"),rgtc:t.getExtension("EXT_texture_compression_rgtc"),loseContext:t.getExtension("WEBGL_lose_context")};if(1===this.webGLVersion)this.extensions={...r,drawBuffers:t.getExtension("WEBGL_draw_buffers"),depthTexture:t.getExtension("WEBGL_depth_texture"),vertexArrayObject:t.getExtension("OES_vertex_array_object")||t.getExtension("MOZ_OES_vertex_array_object")||t.getExtension("WEBKIT_OES_vertex_array_object"),uint32ElementIndex:t.getExtension("OES_element_index_uint"),floatTexture:t.getExtension("OES_texture_float"),floatTextureLinear:t.getExtension("OES_texture_float_linear"),textureHalfFloat:t.getExtension("OES_texture_half_float"),textureHalfFloatLinear:t.getExtension("OES_texture_half_float_linear"),vertexAttribDivisorANGLE:t.getExtension("ANGLE_instanced_arrays"),srgb:t.getExtension("EXT_sRGB")};else{this.extensions={...r,colorBufferFloat:t.getExtension("EXT_color_buffer_float")};let n=t.getExtension("WEBGL_provoking_vertex");n&&n.provokingVertexWEBGL(n.FIRST_VERTEX_CONVENTION_WEBGL)}}handleContextLost(t){t.preventDefault(),this._contextLossForced&&(this._contextLossForced=!1,setTimeout(()=>{this.gl.isContextLost()&&this.extensions.loseContext?.restoreContext()},0))}handleContextRestored(){this._renderer.runners.contextChange.emit(this.gl)}destroy(){let t=this._renderer.view.canvas;this._renderer=null,t.removeEventListener("webglcontextlost",this.handleContextLost),t.removeEventListener("webglcontextrestored",this.handleContextRestored),this.gl.useProgram(null),this.extensions.loseContext?.loseContext()}forceContextLoss(){this.extensions.loseContext?.loseContext(),this._contextLossForced=!0}validateContext(t){let r=t.getContextAttributes();r&&!r.stencil&&warn("Provided WebGL context does not have a stencil buffer, masks may not render correctly");let n=this.supports,i=2===this.webGLVersion,a=this.extensions;n.uint32Indices=i||!!a.uint32ElementIndex,n.uniformBufferObject=i,n.vertexArrayObject=i||!!a.vertexArrayObject,n.srgbTextures=i||!!a.srgb,n.nonPowOf2wrapping=i,n.nonPowOf2mipmaps=i,n.msaa=i,n.uint32Indices||warn("Provided WebGL context does not support 32 index buffer, large scenes may not render correctly")}}).extension={type:[ExtensionType.WebGLSystem],name:"context"},_GlContextSystem.defaultOptions={context:null,premultipliedAlpha:!0,preserveDrawingBuffer:!1,powerPreference:void 0,preferWebGLVersion:2},GlContextSystem=_GlContextSystem}}),init_const10=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/texture/const.mjs"(){let t,r,n;init_globals(),(t=GL_FORMATS||{})[t.RGBA=6408]="RGBA",t[t.RGB=6407]="RGB",t[t.RG=33319]="RG",t[t.RED=6403]="RED",t[t.RGBA_INTEGER=36249]="RGBA_INTEGER",t[t.RGB_INTEGER=36248]="RGB_INTEGER",t[t.RG_INTEGER=33320]="RG_INTEGER",t[t.RED_INTEGER=36244]="RED_INTEGER",t[t.ALPHA=6406]="ALPHA",t[t.LUMINANCE=6409]="LUMINANCE",t[t.LUMINANCE_ALPHA=6410]="LUMINANCE_ALPHA",t[t.DEPTH_COMPONENT=6402]="DEPTH_COMPONENT",t[t.DEPTH_STENCIL=34041]="DEPTH_STENCIL",GL_FORMATS=t,(r=GL_TARGETS||{})[r.TEXTURE_2D=3553]="TEXTURE_2D",r[r.TEXTURE_CUBE_MAP=34067]="TEXTURE_CUBE_MAP",r[r.TEXTURE_2D_ARRAY=35866]="TEXTURE_2D_ARRAY",r[r.TEXTURE_CUBE_MAP_POSITIVE_X=34069]="TEXTURE_CUBE_MAP_POSITIVE_X",r[r.TEXTURE_CUBE_MAP_NEGATIVE_X=34070]="TEXTURE_CUBE_MAP_NEGATIVE_X",r[r.TEXTURE_CUBE_MAP_POSITIVE_Y=34071]="TEXTURE_CUBE_MAP_POSITIVE_Y",r[r.TEXTURE_CUBE_MAP_NEGATIVE_Y=34072]="TEXTURE_CUBE_MAP_NEGATIVE_Y",r[r.TEXTURE_CUBE_MAP_POSITIVE_Z=34073]="TEXTURE_CUBE_MAP_POSITIVE_Z",r[r.TEXTURE_CUBE_MAP_NEGATIVE_Z=34074]="TEXTURE_CUBE_MAP_NEGATIVE_Z",GL_TARGETS=r,(n=GL_TYPES||{})[n.UNSIGNED_BYTE=5121]="UNSIGNED_BYTE",n[n.UNSIGNED_SHORT=5123]="UNSIGNED_SHORT",n[n.UNSIGNED_SHORT_5_6_5=33635]="UNSIGNED_SHORT_5_6_5",n[n.UNSIGNED_SHORT_4_4_4_4=32819]="UNSIGNED_SHORT_4_4_4_4",n[n.UNSIGNED_SHORT_5_5_5_1=32820]="UNSIGNED_SHORT_5_5_5_1",n[n.UNSIGNED_INT=5125]="UNSIGNED_INT",n[n.UNSIGNED_INT_10F_11F_11F_REV=35899]="UNSIGNED_INT_10F_11F_11F_REV",n[n.UNSIGNED_INT_2_10_10_10_REV=33640]="UNSIGNED_INT_2_10_10_10_REV",n[n.UNSIGNED_INT_24_8=34042]="UNSIGNED_INT_24_8",n[n.UNSIGNED_INT_5_9_9_9_REV=35902]="UNSIGNED_INT_5_9_9_9_REV",n[n.BYTE=5120]="BYTE",n[n.SHORT=5122]="SHORT",n[n.INT=5124]="INT",n[n.FLOAT=5126]="FLOAT",n[n.FLOAT_32_UNSIGNED_INT_24_8_REV=36269]="FLOAT_32_UNSIGNED_INT_24_8_REV",n[n.HALF_FLOAT=36193]="HALF_FLOAT",GL_TYPES=n}});function getGlTypeFromFormat(t){return infoMap[t]??infoMap.float32}var topologyToGlMap,GlGeometrySystem,bigTriangleGeometry,_GlBackBufferSystem,GlBackBufferSystem,GlColorMaskSystem,GlEncoderSystem,GlStencilSystem,GlRenderTarget,GlRenderTargetAdaptor,GlRenderTargetSystem,init_getGlTypeFromFormat=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/geometry/utils/getGlTypeFromFormat.mjs"(){init_globals(),init_const10(),infoMap={uint8x2:GL_TYPES.UNSIGNED_BYTE,uint8x4:GL_TYPES.UNSIGNED_BYTE,sint8x2:GL_TYPES.BYTE,sint8x4:GL_TYPES.BYTE,unorm8x2:GL_TYPES.UNSIGNED_BYTE,unorm8x4:GL_TYPES.UNSIGNED_BYTE,snorm8x2:GL_TYPES.BYTE,snorm8x4:GL_TYPES.BYTE,uint16x2:GL_TYPES.UNSIGNED_SHORT,uint16x4:GL_TYPES.UNSIGNED_SHORT,sint16x2:GL_TYPES.SHORT,sint16x4:GL_TYPES.SHORT,unorm16x2:GL_TYPES.UNSIGNED_SHORT,unorm16x4:GL_TYPES.UNSIGNED_SHORT,snorm16x2:GL_TYPES.SHORT,snorm16x4:GL_TYPES.SHORT,float16x2:GL_TYPES.HALF_FLOAT,float16x4:GL_TYPES.HALF_FLOAT,float32:GL_TYPES.FLOAT,float32x2:GL_TYPES.FLOAT,float32x3:GL_TYPES.FLOAT,float32x4:GL_TYPES.FLOAT,uint32:GL_TYPES.UNSIGNED_INT,uint32x2:GL_TYPES.UNSIGNED_INT,uint32x3:GL_TYPES.UNSIGNED_INT,uint32x4:GL_TYPES.UNSIGNED_INT,sint32:GL_TYPES.INT,sint32x2:GL_TYPES.INT,sint32x3:GL_TYPES.INT,sint32x4:GL_TYPES.INT}}}),init_GlGeometrySystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/geometry/GlGeometrySystem.mjs"(){init_globals(),init_Extensions(),init_getAttributeInfoFromFormat(),init_ensureAttributes(),init_getGlTypeFromFormat(),topologyToGlMap={"point-list":0,"line-list":1,"line-strip":3,"triangle-list":4,"triangle-strip":5},(GlGeometrySystem=class{constructor(t){this._geometryVaoHash=Object.create(null),this._renderer=t,this._activeGeometry=null,this._activeVao=null,this.hasVao=!0,this.hasInstance=!0}contextChange(){let t=this.gl=this._renderer.gl;if(!this._renderer.context.supports.vertexArrayObject)throw Error("[PixiJS] Vertex Array Objects are not supported on this device");let r=this._renderer.context.extensions.vertexArrayObject;r&&(t.createVertexArray=()=>r.createVertexArrayOES(),t.bindVertexArray=t=>r.bindVertexArrayOES(t),t.deleteVertexArray=t=>r.deleteVertexArrayOES(t));let n=this._renderer.context.extensions.vertexAttribDivisorANGLE;n&&(t.drawArraysInstanced=(t,r,i,a)=>{n.drawArraysInstancedANGLE(t,r,i,a)},t.drawElementsInstanced=(t,r,i,a,o)=>{n.drawElementsInstancedANGLE(t,r,i,a,o)},t.vertexAttribDivisor=(t,r)=>n.vertexAttribDivisorANGLE(t,r)),this._activeGeometry=null,this._activeVao=null,this._geometryVaoHash=Object.create(null)}bind(t,r){let n=this.gl;this._activeGeometry=t;let i=this.getVao(t,r);this._activeVao!==i&&(this._activeVao=i,n.bindVertexArray(i)),this.updateBuffers()}reset(){this.unbind()}updateBuffers(){let t=this._activeGeometry,r=this._renderer.buffer;for(let n=0;n<t.buffers.length;n++){let i=t.buffers[n];r.updateBuffer(i)}}checkCompatibility(t,r){let n=t.attributes,i=r._attributeData;for(let t in i)if(!n[t])throw Error(`shader and geometry incompatible, geometry missing the "${t}" attribute`)}getSignature(t,r){let n=t.attributes,i=r._attributeData,a=["g",t.uid];for(let t in n)i[t]&&a.push(t,i[t].location);return a.join("-")}getVao(t,r){return this._geometryVaoHash[t.uid]?.[r._key]||this.initGeometryVao(t,r)}initGeometryVao(t,r,n=!0){let i=this._renderer.gl,a=this._renderer.buffer;this._renderer.shader._getProgramData(r),this.checkCompatibility(t,r);let o=this.getSignature(t,r);this._geometryVaoHash[t.uid]||(this._geometryVaoHash[t.uid]=Object.create(null),t.on("destroy",this.onGeometryDestroy,this));let s=this._geometryVaoHash[t.uid],l=s[o];if(l)return s[r._key]=l,l;ensureAttributes(t,r._attributeData);let u=t.buffers;l=i.createVertexArray(),i.bindVertexArray(l);for(let t=0;t<u.length;t++){let r=u[t];a.bind(r)}return this.activateVao(t,r),s[r._key]=l,s[o]=l,i.bindVertexArray(null),l}onGeometryDestroy(t,r){let n=this._geometryVaoHash[t.uid],i=this.gl;if(n){if(r)for(let t in n)this._activeVao!==n[t]&&this.unbind(),i.deleteVertexArray(n[t]);this._geometryVaoHash[t.uid]=null}}destroyAll(t=!1){let r=this.gl;for(let n in this._geometryVaoHash){if(t)for(let t in this._geometryVaoHash[n]){let i=this._geometryVaoHash[n];this._activeVao!==i&&this.unbind(),r.deleteVertexArray(i[t])}this._geometryVaoHash[n]=null}}activateVao(t,r){let n=this._renderer.gl,i=this._renderer.buffer,a=t.attributes;t.indexBuffer&&i.bind(t.indexBuffer);let o=null;for(let t in a){let s=a[t],l=s.buffer,u=i.getGlBuffer(l),d=r._attributeData[t];if(d){o!==u&&(i.bind(l),o=u);let t=s.location;n.enableVertexAttribArray(t);let r=getAttributeInfoFromFormat(s.format),a=getGlTypeFromFormat(s.format);if("int"===d.format?.substring(1,4)?n.vertexAttribIPointer(t,r.size,a,s.stride,s.offset):n.vertexAttribPointer(t,r.size,a,r.normalised,s.stride,s.offset),s.instance){if(!this.hasInstance)throw Error("geometry error, GPU Instancing is not supported on this device");n.vertexAttribDivisor(t,1)}}}}draw(t,r,n,i){let{gl:a}=this._renderer,o=this._activeGeometry,s=topologyToGlMap[o.topology||t];if(i||(i=o.instanceCount),o.indexBuffer){let t=o.indexBuffer.data.BYTES_PER_ELEMENT,l=2===t?a.UNSIGNED_SHORT:a.UNSIGNED_INT;i>1?a.drawElementsInstanced(s,r||o.indexBuffer.data.length,l,(n||0)*t,i):a.drawElements(s,r||o.indexBuffer.data.length,l,(n||0)*t)}else i>1?a.drawArraysInstanced(s,n||0,r||o.getSize(),i):a.drawArrays(s,n||0,r||o.getSize());return this}unbind(){this.gl.bindVertexArray(null),this._activeVao=null,this._activeGeometry=null}destroy(){this._renderer=null,this.gl=null,this._activeVao=null,this._activeGeometry=null}}).extension={type:[ExtensionType.WebGLSystem],name:"geometry"}}}),init_GlBackBufferSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/GlBackBufferSystem.mjs"(){init_globals(),init_Extensions(),init_warn2(),init_Geometry(),init_Shader(),init_State(),init_TextureSource(),init_Texture(),init_GlProgram(),bigTriangleGeometry=new Geometry({attributes:{aPosition:[-1,-1,3,-1,-1,3]}}),(_GlBackBufferSystem=class t{constructor(t){this.useBackBuffer=!1,this._useBackBufferThisRender=!1,this._renderer=t}init(r={}){let{useBackBuffer:n,antialias:i}={...t.defaultOptions,...r};this.useBackBuffer=n,this._antialias=i,this._renderer.context.supports.msaa||(warn("antialiasing, is not supported on when using the back buffer"),this._antialias=!1),this._state=State.for2d();let a=new GlProgram({vertex:"\n attribute vec2 aPosition;\n out vec2 vUv;\n\n void main() {\n gl_Position = vec4(aPosition, 0.0, 1.0);\n\n vUv = (aPosition + 1.0) / 2.0;\n\n // flip dem UVs\n vUv.y = 1.0 - vUv.y;\n }",fragment:"\n in vec2 vUv;\n out vec4 finalColor;\n\n uniform sampler2D uTexture;\n\n void main() {\n finalColor = texture(uTexture, vUv);\n }",name:"big-triangle"});this._bigTriangleShader=new Shader({glProgram:a,resources:{uTexture:Texture.WHITE.source}})}renderStart(t){let r=this._renderer.renderTarget.getRenderTarget(t.target);if(this._useBackBufferThisRender=this.useBackBuffer&&!!r.isRoot,this._useBackBufferThisRender){let r=this._renderer.renderTarget.getRenderTarget(t.target);this._targetTexture=r.colorTexture,t.target=this._getBackBufferTexture(r.colorTexture)}}renderEnd(){this._presentBackBuffer()}_presentBackBuffer(){let t=this._renderer;t.renderTarget.finishRenderPass(),this._useBackBufferThisRender&&(t.renderTarget.bind(this._targetTexture,!1),this._bigTriangleShader.resources.uTexture=this._backBufferTexture.source,t.encoder.draw({geometry:bigTriangleGeometry,shader:this._bigTriangleShader,state:this._state}))}_getBackBufferTexture(t){return this._backBufferTexture=this._backBufferTexture||new Texture({source:new TextureSource({width:t.width,height:t.height,resolution:t._resolution,antialias:this._antialias})}),this._backBufferTexture.source.resize(t.width,t.height,t._resolution),this._backBufferTexture}destroy(){this._backBufferTexture&&(this._backBufferTexture.destroy(),this._backBufferTexture=null)}}).extension={type:[ExtensionType.WebGLSystem],name:"backBuffer",priority:1},_GlBackBufferSystem.defaultOptions={useBackBuffer:!1},GlBackBufferSystem=_GlBackBufferSystem}}),init_GlColorMaskSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/GlColorMaskSystem.mjs"(){init_globals(),init_Extensions(),(GlColorMaskSystem=class{constructor(t){this._colorMaskCache=15,this._renderer=t}setMask(t){this._colorMaskCache!==t&&(this._colorMaskCache=t,this._renderer.gl.colorMask(!!(8&t),!!(4&t),!!(2&t),!!(1&t)))}}).extension={type:[ExtensionType.WebGLSystem],name:"colorMask"}}}),init_GlEncoderSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/GlEncoderSystem.mjs"(){init_globals(),init_Extensions(),(GlEncoderSystem=class{constructor(t){this.commandFinished=Promise.resolve(),this._renderer=t}setGeometry(t,r){this._renderer.geometry.bind(t,r.glProgram)}finishRenderPass(){}draw(t){let r=this._renderer,{geometry:n,shader:i,state:a,skipSync:o,topology:s,size:l,start:u,instanceCount:d}=t;r.shader.bind(i,o),r.geometry.bind(n,r.shader._activeProgram),a&&r.state.set(a),r.geometry.draw(s,l,u,d??n.instanceCount)}destroy(){this._renderer=null}}).extension={type:[ExtensionType.WebGLSystem],name:"encoder"}}}),init_GlStencilSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/GlStencilSystem.mjs"(){init_globals(),init_Extensions(),init_GpuStencilModesToPixi(),init_const6(),(GlStencilSystem=class{constructor(t){this._stencilCache={enabled:!1,stencilReference:0,stencilMode:STENCIL_MODES.NONE},this._renderTargetStencilState=Object.create(null),t.renderTarget.onRenderTargetChange.add(this)}contextChange(t){this._gl=t,this._comparisonFuncMapping={always:t.ALWAYS,never:t.NEVER,equal:t.EQUAL,"not-equal":t.NOTEQUAL,less:t.LESS,"less-equal":t.LEQUAL,greater:t.GREATER,"greater-equal":t.GEQUAL},this._stencilOpsMapping={keep:t.KEEP,zero:t.ZERO,replace:t.REPLACE,invert:t.INVERT,"increment-clamp":t.INCR,"decrement-clamp":t.DECR,"increment-wrap":t.INCR_WRAP,"decrement-wrap":t.DECR_WRAP},this._stencilCache.enabled=!1,this._stencilCache.stencilMode=STENCIL_MODES.NONE,this._stencilCache.stencilReference=0}onRenderTargetChange(t){if(this._activeRenderTarget===t)return;this._activeRenderTarget=t;let r=this._renderTargetStencilState[t.uid];r||(r=this._renderTargetStencilState[t.uid]={stencilMode:STENCIL_MODES.DISABLED,stencilReference:0}),this.setStencilMode(r.stencilMode,r.stencilReference)}setStencilMode(t,r){let n=this._renderTargetStencilState[this._activeRenderTarget.uid],i=this._gl,a=GpuStencilModesToPixi[t],o=this._stencilCache;n.stencilMode=t,n.stencilReference=r,t!==STENCIL_MODES.DISABLED?(this._stencilCache.enabled||(this._stencilCache.enabled=!0,i.enable(i.STENCIL_TEST)),t===o.stencilMode&&o.stencilReference===r||(o.stencilMode=t,o.stencilReference=r,i.stencilFunc(this._comparisonFuncMapping[a.stencilBack.compare],r,255),i.stencilOp(i.KEEP,i.KEEP,this._stencilOpsMapping[a.stencilBack.passOp]))):this._stencilCache.enabled&&(this._stencilCache.enabled=!1,i.disable(i.STENCIL_TEST))}}).extension={type:[ExtensionType.WebGLSystem],name:"stencil"}}}),init_GlRenderTarget=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/GlRenderTarget.mjs"(){init_globals(),GlRenderTarget=class{constructor(){this.width=-1,this.height=-1,this.msaa=!1,this.msaaRenderBuffer=[]}}}}),init_GlRenderTargetAdaptor=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/renderTarget/GlRenderTargetAdaptor.mjs"(){init_globals(),init_Rectangle(),init_warn2(),init_const3(),init_GlRenderTarget(),GlRenderTargetAdaptor=class{constructor(){this._clearColorCache=[0,0,0,0],this._viewPortCache=new Rectangle}init(t,r){this._renderer=t,this._renderTargetSystem=r,t.runners.contextChange.add(this)}contextChange(){this._clearColorCache=[0,0,0,0],this._viewPortCache=new Rectangle}copyToTexture(t,r,n,i,a){let o=this._renderTargetSystem,s=this._renderer,l=o.getGpuRenderTarget(t),u=s.gl;return this.finishRenderPass(t),u.bindFramebuffer(u.FRAMEBUFFER,l.resolveTargetFramebuffer),s.texture.bind(r,0),u.copyTexSubImage2D(u.TEXTURE_2D,0,a.x,a.y,n.x,n.y,i.width,i.height),r}startRenderPass(t,r=!0,n,i){let a=this._renderTargetSystem,o=t.colorTexture,s=a.getGpuRenderTarget(t),l=i.y;t.isRoot&&(l=o.pixelHeight-i.height),t.colorTextures.forEach(t=>{this._renderer.texture.unbind(t)});let u=this._renderer.gl;u.bindFramebuffer(u.FRAMEBUFFER,s.framebuffer);let d=this._viewPortCache;d.x===i.x&&d.y===l&&d.width===i.width&&d.height===i.height||(d.x=i.x,d.y=l,d.width=i.width,d.height=i.height,u.viewport(i.x,l,i.width,i.height)),!s.depthStencilRenderBuffer&&(t.stencil||t.depth)&&this._initStencil(s),this.clear(t,r,n)}finishRenderPass(t){let r=this._renderTargetSystem.getGpuRenderTarget(t);if(!r.msaa)return;let n=this._renderer.gl;n.bindFramebuffer(n.FRAMEBUFFER,r.resolveTargetFramebuffer),n.bindFramebuffer(n.READ_FRAMEBUFFER,r.framebuffer),n.blitFramebuffer(0,0,r.width,r.height,0,0,r.width,r.height,n.COLOR_BUFFER_BIT,n.NEAREST),n.bindFramebuffer(n.FRAMEBUFFER,r.framebuffer)}initGpuRenderTarget(t){let r=this._renderer,n=r.gl,i=new GlRenderTarget;return t.colorTexture.resource===r.gl.canvas?i.framebuffer=null:(this._initColor(t,i),n.bindFramebuffer(n.FRAMEBUFFER,null)),i}destroyGpuRenderTarget(t){let r=this._renderer.gl;t.framebuffer&&(r.deleteFramebuffer(t.framebuffer),t.framebuffer=null),t.resolveTargetFramebuffer&&(r.deleteFramebuffer(t.resolveTargetFramebuffer),t.resolveTargetFramebuffer=null),t.depthStencilRenderBuffer&&(r.deleteRenderbuffer(t.depthStencilRenderBuffer),t.depthStencilRenderBuffer=null),t.msaaRenderBuffer.forEach(t=>{r.deleteRenderbuffer(t)}),t.msaaRenderBuffer=null}clear(t,r,n){if(!r)return;let i=this._renderTargetSystem;"boolean"==typeof r&&(r=r?CLEAR.ALL:CLEAR.NONE);let a=this._renderer.gl;if(r&CLEAR.COLOR){n??(n=i.defaultClearColor);let t=this._clearColorCache,r=n;t[0]===r[0]&&t[1]===r[1]&&t[2]===r[2]&&t[3]===r[3]||(t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=r[3],a.clearColor(r[0],r[1],r[2],r[3]))}a.clear(r)}resizeGpuRenderTarget(t){if(t.isRoot)return;let r=this._renderTargetSystem.getGpuRenderTarget(t);this._resizeColor(t,r),t.stencil&&this._resizeStencil(r)}_initColor(t,r){let n=this._renderer,i=n.gl,a=i.createFramebuffer();if(r.resolveTargetFramebuffer=a,i.bindFramebuffer(i.FRAMEBUFFER,a),r.width=t.colorTexture.source.pixelWidth,r.height=t.colorTexture.source.pixelHeight,t.colorTextures.forEach((t,a)=>{let o=t.source;o.antialias&&(n.context.supports.msaa?r.msaa=!0:warn("[RenderTexture] Antialiasing on textures is not supported in WebGL1")),n.texture.bindSource(o,0);let s=n.texture.getGlSource(o).texture;i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0+a,3553,s,0)}),r.msaa){let n=i.createFramebuffer();r.framebuffer=n,i.bindFramebuffer(i.FRAMEBUFFER,n),t.colorTextures.forEach((t,n)=>{let a=i.createRenderbuffer();r.msaaRenderBuffer[n]=a})}else r.framebuffer=a;this._resizeColor(t,r)}_resizeColor(t,r){let n=t.colorTexture.source;if(r.width=n.pixelWidth,r.height=n.pixelHeight,t.colorTextures.forEach((t,r)=>{0!==r&&t.source.resize(n.width,n.height,n._resolution)}),r.msaa){let n=this._renderer,i=n.gl,a=r.framebuffer;i.bindFramebuffer(i.FRAMEBUFFER,a),t.colorTextures.forEach((t,a)=>{let o=t.source;n.texture.bindSource(o,0);let s=n.texture.getGlSource(o).internalFormat,l=r.msaaRenderBuffer[a];i.bindRenderbuffer(i.RENDERBUFFER,l),i.renderbufferStorageMultisample(i.RENDERBUFFER,4,s,o.pixelWidth,o.pixelHeight),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0+a,i.RENDERBUFFER,l)})}}_initStencil(t){if(null===t.framebuffer)return;let r=this._renderer.gl,n=r.createRenderbuffer();t.depthStencilRenderBuffer=n,r.bindRenderbuffer(r.RENDERBUFFER,n),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_STENCIL_ATTACHMENT,r.RENDERBUFFER,n),this._resizeStencil(t)}_resizeStencil(t){let r=this._renderer.gl;r.bindRenderbuffer(r.RENDERBUFFER,t.depthStencilRenderBuffer),t.msaa?r.renderbufferStorageMultisample(r.RENDERBUFFER,4,r.DEPTH24_STENCIL8,t.width,t.height):r.renderbufferStorage(r.RENDERBUFFER,2===this._renderer.context.webGLVersion?r.DEPTH24_STENCIL8:r.DEPTH_STENCIL,t.width,t.height)}}}}),init_GlRenderTargetSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/renderTarget/GlRenderTargetSystem.mjs"(){init_globals(),init_Extensions(),init_RenderTargetSystem(),init_GlRenderTargetAdaptor(),(GlRenderTargetSystem=class extends RenderTargetSystem{constructor(t){super(t),this.adaptor=new GlRenderTargetAdaptor,this.adaptor.init(t,this)}}).extension={type:[ExtensionType.WebGLSystem],name:"renderTarget"}}});function mapWebGLBlendModesToPixi(t){let r={};return r.normal=[t.ONE,t.ONE_MINUS_SRC_ALPHA],r.add=[t.ONE,t.ONE],r.multiply=[t.DST_COLOR,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA],r.screen=[t.ONE,t.ONE_MINUS_SRC_COLOR,t.ONE,t.ONE_MINUS_SRC_ALPHA],r.none=[0,0],r["normal-npm"]=[t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA],r["add-npm"]=[t.SRC_ALPHA,t.ONE,t.ONE,t.ONE],r["screen-npm"]=[t.SRC_ALPHA,t.ONE_MINUS_SRC_COLOR,t.ONE,t.ONE_MINUS_SRC_ALPHA],r.erase=[t.ZERO,t.ONE_MINUS_SRC_ALPHA],r}var BLEND2,OFFSET2,CULLING2,DEPTH_TEST2,WINDING2,DEPTH_MASK2,_GlStateSystem,GlStateSystem,GlTexture,glUploadBufferImageResource,compressedFormatMap,glUploadCompressedTextureResource,glUploadImageResource,glUploadVideoResource,scaleModeToGlFilter,mipmapScaleModeToGlFilter,wrapModeToGlAddress,compareModeToGlCompare,init_mapWebGLBlendModesToPixi=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/state/mapWebGLBlendModesToPixi.mjs"(){init_globals()}}),init_GlStateSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/state/GlStateSystem.mjs"(){init_globals(),init_Extensions(),init_State(),init_mapWebGLBlendModesToPixi(),BLEND2=0,OFFSET2=1,CULLING2=2,DEPTH_TEST2=3,WINDING2=4,DEPTH_MASK2=5,(_GlStateSystem=class t{constructor(){this.gl=null,this.stateId=0,this.polygonOffset=0,this.blendMode="none",this._blendEq=!1,this.map=[],this.map[BLEND2]=this.setBlend,this.map[OFFSET2]=this.setOffset,this.map[CULLING2]=this.setCullFace,this.map[DEPTH_TEST2]=this.setDepthTest,this.map[WINDING2]=this.setFrontFace,this.map[DEPTH_MASK2]=this.setDepthMask,this.checks=[],this.defaultState=State.for2d()}contextChange(t){this.gl=t,this.blendModesMap=mapWebGLBlendModesToPixi(t),this.reset()}set(t){if(t=t||this.defaultState,this.stateId!==t.data){let r=this.stateId^t.data,n=0;for(;r;)1&r&&this.map[n].call(this,!!(t.data&1<<n)),r>>=1,n++;this.stateId=t.data}for(let r=0;r<this.checks.length;r++)this.checks[r](this,t)}forceState(t){t=t||this.defaultState;for(let r=0;r<this.map.length;r++)this.map[r].call(this,!!(t.data&1<<r));for(let r=0;r<this.checks.length;r++)this.checks[r](this,t);this.stateId=t.data}setBlend(r){this._updateCheck(t._checkBlendMode,r),this.gl[r?"enable":"disable"](this.gl.BLEND)}setOffset(r){this._updateCheck(t._checkPolygonOffset,r),this.gl[r?"enable":"disable"](this.gl.POLYGON_OFFSET_FILL)}setDepthTest(t){this.gl[t?"enable":"disable"](this.gl.DEPTH_TEST)}setDepthMask(t){this.gl.depthMask(t)}setCullFace(t){this.gl[t?"enable":"disable"](this.gl.CULL_FACE)}setFrontFace(t){this.gl.frontFace(this.gl[t?"CW":"CCW"])}setBlendMode(t){if(this.blendModesMap[t]||(t="normal"),t===this.blendMode)return;this.blendMode=t;let r=this.blendModesMap[t],n=this.gl;2===r.length?n.blendFunc(r[0],r[1]):n.blendFuncSeparate(r[0],r[1],r[2],r[3]),6===r.length?(this._blendEq=!0,n.blendEquationSeparate(r[4],r[5])):this._blendEq&&(this._blendEq=!1,n.blendEquationSeparate(n.FUNC_ADD,n.FUNC_ADD))}setPolygonOffset(t,r){this.gl.polygonOffset(t,r)}reset(){this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL,!1),this.forceState(this.defaultState),this._blendEq=!0,this.blendMode="",this.setBlendMode("normal")}_updateCheck(t,r){let n=this.checks.indexOf(t);r&&-1===n?this.checks.push(t):r||-1===n||this.checks.splice(n,1)}static _checkBlendMode(t,r){t.setBlendMode(r.blendMode)}static _checkPolygonOffset(t,r){t.setPolygonOffset(1,r.polygonOffset)}destroy(){this.gl=null,this.checks.length=0}}).extension={type:[ExtensionType.WebGLSystem],name:"state"},GlStateSystem=_GlStateSystem}}),init_GlTexture=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/texture/GlTexture.mjs"(){init_globals(),init_const10(),GlTexture=class{constructor(t){this.target=GL_TARGETS.TEXTURE_2D,this.texture=t,this.width=-1,this.height=-1,this.type=GL_TYPES.UNSIGNED_BYTE,this.internalFormat=GL_FORMATS.RGBA,this.format=GL_FORMATS.RGBA,this.samplerType=0}}}}),init_glUploadBufferImageResource=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/texture/uploaders/glUploadBufferImageResource.mjs"(){init_globals(),glUploadBufferImageResource={id:"image",upload(t,r,n){r.width===t.width||r.height===t.height?n.texSubImage2D(n.TEXTURE_2D,0,0,0,r.format,r.type,t.resource):n.texImage2D(r.target,0,r.internalFormat,t.width,t.height,0,r.format,r.type,t.resource),r.width=t.width,r.height=t.height}}}}),init_glUploadCompressedTextureResource=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/texture/uploaders/glUploadCompressedTextureResource.mjs"(){init_globals(),compressedFormatMap={"bc1-rgba-unorm":!0,"bc1-rgba-unorm-srgb":!0,"bc2-rgba-unorm":!0,"bc2-rgba-unorm-srgb":!0,"bc3-rgba-unorm":!0,"bc3-rgba-unorm-srgb":!0,"bc4-r-unorm":!0,"bc4-r-snorm":!0,"bc5-rg-unorm":!0,"bc5-rg-snorm":!0,"bc6h-rgb-ufloat":!0,"bc6h-rgb-float":!0,"bc7-rgba-unorm":!0,"bc7-rgba-unorm-srgb":!0,"etc2-rgb8unorm":!0,"etc2-rgb8unorm-srgb":!0,"etc2-rgb8a1unorm":!0,"etc2-rgb8a1unorm-srgb":!0,"etc2-rgba8unorm":!0,"etc2-rgba8unorm-srgb":!0,"eac-r11unorm":!0,"eac-r11snorm":!0,"eac-rg11unorm":!0,"eac-rg11snorm":!0,"astc-4x4-unorm":!0,"astc-4x4-unorm-srgb":!0,"astc-5x4-unorm":!0,"astc-5x4-unorm-srgb":!0,"astc-5x5-unorm":!0,"astc-5x5-unorm-srgb":!0,"astc-6x5-unorm":!0,"astc-6x5-unorm-srgb":!0,"astc-6x6-unorm":!0,"astc-6x6-unorm-srgb":!0,"astc-8x5-unorm":!0,"astc-8x5-unorm-srgb":!0,"astc-8x6-unorm":!0,"astc-8x6-unorm-srgb":!0,"astc-8x8-unorm":!0,"astc-8x8-unorm-srgb":!0,"astc-10x5-unorm":!0,"astc-10x5-unorm-srgb":!0,"astc-10x6-unorm":!0,"astc-10x6-unorm-srgb":!0,"astc-10x8-unorm":!0,"astc-10x8-unorm-srgb":!0,"astc-10x10-unorm":!0,"astc-10x10-unorm-srgb":!0,"astc-12x10-unorm":!0,"astc-12x10-unorm-srgb":!0,"astc-12x12-unorm":!0,"astc-12x12-unorm-srgb":!0},glUploadCompressedTextureResource={id:"compressed",upload(t,r,n){n.pixelStorei(n.UNPACK_ALIGNMENT,4);let i=t.pixelWidth,a=t.pixelHeight,o=!!compressedFormatMap[t.format];for(let s=0;s<t.resource.length;s++){let l=t.resource[s];o?n.compressedTexImage2D(n.TEXTURE_2D,s,r.internalFormat,i,a,0,l):n.texImage2D(n.TEXTURE_2D,s,r.internalFormat,i,a,0,r.format,r.type,l),i=Math.max(i>>1,1),a=Math.max(a>>1,1)}}}}}),init_glUploadImageResource=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/texture/uploaders/glUploadImageResource.mjs"(){init_globals(),glUploadImageResource={id:"image",upload(t,r,n,i){let a="premultiply-alpha-on-upload"===t.alphaMode;n.pixelStorei(n.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a);let o=r.width,s=r.height,l=t.pixelWidth,u=t.pixelHeight,d=t.resourceWidth,c=t.resourceHeight;d<l||c<u?(o===l&&s===u||n.texImage2D(r.target,0,r.internalFormat,l,u,0,r.format,r.type,null),2===i?n.texSubImage2D(n.TEXTURE_2D,0,0,0,d,c,r.format,r.type,t.resource):n.texSubImage2D(n.TEXTURE_2D,0,0,0,r.format,r.type,t.resource)):o===l||s===u?n.texSubImage2D(n.TEXTURE_2D,0,0,0,r.format,r.type,t.resource):2===i?n.texImage2D(r.target,0,r.internalFormat,l,u,0,r.format,r.type,t.resource):n.texImage2D(r.target,0,r.internalFormat,r.format,r.type,t.resource),r.width=l,r.height=u}}}}),init_glUploadVideoResource=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/texture/uploaders/glUploadVideoResource.mjs"(){init_globals(),init_glUploadImageResource(),glUploadVideoResource={id:"video",upload(t,r,n,i){t.isValid?glUploadImageResource.upload(t,r,n,i):n.texImage2D(r.target,0,r.internalFormat,1,1,0,r.format,r.type,null)}}}}),init_pixiToGlMaps=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/texture/utils/pixiToGlMaps.mjs"(){init_globals(),scaleModeToGlFilter={linear:9729,nearest:9728},mipmapScaleModeToGlFilter={linear:{linear:9987,nearest:9985},nearest:{linear:9986,nearest:9984}},wrapModeToGlAddress={"clamp-to-edge":33071,repeat:10497,"mirror-repeat":33648},compareModeToGlCompare={never:512,less:513,equal:514,"less-equal":515,greater:516,"not-equal":517,"greater-equal":518,always:519}}});function applyStyleParams(t,r,n,i,a,o,s,l){let u=o;if(!l||"repeat"!==t.addressModeU||"repeat"!==t.addressModeV||"repeat"!==t.addressModeW){let n=wrapModeToGlAddress[s?"clamp-to-edge":t.addressModeU],i=wrapModeToGlAddress[s?"clamp-to-edge":t.addressModeV],o=wrapModeToGlAddress[s?"clamp-to-edge":t.addressModeW];r[a](u,r.TEXTURE_WRAP_S,n),r[a](u,r.TEXTURE_WRAP_T,i),r.TEXTURE_WRAP_R&&r[a](u,r.TEXTURE_WRAP_R,o)}if(l&&"linear"===t.magFilter||r[a](u,r.TEXTURE_MAG_FILTER,scaleModeToGlFilter[t.magFilter]),n){if(!l||"linear"!==t.mipmapFilter){let n=mipmapScaleModeToGlFilter[t.minFilter][t.mipmapFilter];r[a](u,r.TEXTURE_MIN_FILTER,n)}}else r[a](u,r.TEXTURE_MIN_FILTER,scaleModeToGlFilter[t.minFilter]);if(i&&t.maxAnisotropy>1){let n=Math.min(t.maxAnisotropy,r.getParameter(i.MAX_TEXTURE_MAX_ANISOTROPY_EXT));r[a](u,i.TEXTURE_MAX_ANISOTROPY_EXT,n)}t.compare&&r[a](u,r.TEXTURE_COMPARE_FUNC,compareModeToGlCompare[t.compare])}var init_applyStyleParams=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/texture/utils/applyStyleParams.mjs"(){init_globals(),init_pixiToGlMaps()}});function mapFormatToGlFormat(t){return{r8unorm:t.RED,r8snorm:t.RED,r8uint:t.RED,r8sint:t.RED,r16uint:t.RED,r16sint:t.RED,r16float:t.RED,rg8unorm:t.RG,rg8snorm:t.RG,rg8uint:t.RG,rg8sint:t.RG,r32uint:t.RED,r32sint:t.RED,r32float:t.RED,rg16uint:t.RG,rg16sint:t.RG,rg16float:t.RG,rgba8unorm:t.RGBA,"rgba8unorm-srgb":t.RGBA,rgba8snorm:t.RGBA,rgba8uint:t.RGBA,rgba8sint:t.RGBA,bgra8unorm:t.RGBA,"bgra8unorm-srgb":t.RGBA,rgb9e5ufloat:t.RGB,rgb10a2unorm:t.RGBA,rg11b10ufloat:t.RGB,rg32uint:t.RG,rg32sint:t.RG,rg32float:t.RG,rgba16uint:t.RGBA,rgba16sint:t.RGBA,rgba16float:t.RGBA,rgba32uint:t.RGBA,rgba32sint:t.RGBA,rgba32float:t.RGBA,stencil8:t.STENCIL_INDEX8,depth16unorm:t.DEPTH_COMPONENT,depth24plus:t.DEPTH_COMPONENT,"depth24plus-stencil8":t.DEPTH_STENCIL,depth32float:t.DEPTH_COMPONENT,"depth32float-stencil8":t.DEPTH_STENCIL}}var init_mapFormatToGlFormat=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/texture/utils/mapFormatToGlFormat.mjs"(){init_globals()}});function mapFormatToGlInternalFormat(t,r){let n={},i=t.RGBA;return t instanceof DOMAdapter.get().getWebGLRenderingContext()?r.srgb&&(n={"rgba8unorm-srgb":r.srgb.SRGB8_ALPHA8_EXT,"bgra8unorm-srgb":r.srgb.SRGB8_ALPHA8_EXT}):(n={"rgba8unorm-srgb":t.SRGB8_ALPHA8,"bgra8unorm-srgb":t.SRGB8_ALPHA8},i=t.RGBA8),{r8unorm:t.R8,r8snorm:t.R8_SNORM,r8uint:t.R8UI,r8sint:t.R8I,r16uint:t.R16UI,r16sint:t.R16I,r16float:t.R16F,rg8unorm:t.RG8,rg8snorm:t.RG8_SNORM,rg8uint:t.RG8UI,rg8sint:t.RG8I,r32uint:t.R32UI,r32sint:t.R32I,r32float:t.R32F,rg16uint:t.RG16UI,rg16sint:t.RG16I,rg16float:t.RG16F,rgba8unorm:t.RGBA,...n,rgba8snorm:t.RGBA8_SNORM,rgba8uint:t.RGBA8UI,rgba8sint:t.RGBA8I,bgra8unorm:i,rgb9e5ufloat:t.RGB9_E5,rgb10a2unorm:t.RGB10_A2,rg11b10ufloat:t.R11F_G11F_B10F,rg32uint:t.RG32UI,rg32sint:t.RG32I,rg32float:t.RG32F,rgba16uint:t.RGBA16UI,rgba16sint:t.RGBA16I,rgba16float:t.RGBA16F,rgba32uint:t.RGBA32UI,rgba32sint:t.RGBA32I,rgba32float:t.RGBA32F,stencil8:t.STENCIL_INDEX8,depth16unorm:t.DEPTH_COMPONENT16,depth24plus:t.DEPTH_COMPONENT24,"depth24plus-stencil8":t.DEPTH24_STENCIL8,depth32float:t.DEPTH_COMPONENT32F,"depth32float-stencil8":t.DEPTH32F_STENCIL8,...r.s3tc?{"bc1-rgba-unorm":r.s3tc.COMPRESSED_RGBA_S3TC_DXT1_EXT,"bc2-rgba-unorm":r.s3tc.COMPRESSED_RGBA_S3TC_DXT3_EXT,"bc3-rgba-unorm":r.s3tc.COMPRESSED_RGBA_S3TC_DXT5_EXT}:{},...r.s3tc_sRGB?{"bc1-rgba-unorm-srgb":r.s3tc_sRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,"bc2-rgba-unorm-srgb":r.s3tc_sRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,"bc3-rgba-unorm-srgb":r.s3tc_sRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}:{},...r.rgtc?{"bc4-r-unorm":r.rgtc.COMPRESSED_RED_RGTC1_EXT,"bc4-r-snorm":r.rgtc.COMPRESSED_SIGNED_RED_RGTC1_EXT,"bc5-rg-unorm":r.rgtc.COMPRESSED_RED_GREEN_RGTC2_EXT,"bc5-rg-snorm":r.rgtc.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}:{},...r.bptc?{"bc6h-rgb-float":r.bptc.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT,"bc6h-rgb-ufloat":r.bptc.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT,"bc7-rgba-unorm":r.bptc.COMPRESSED_RGBA_BPTC_UNORM_EXT,"bc7-rgba-unorm-srgb":r.bptc.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT}:{},...r.etc?{"etc2-rgb8unorm":r.etc.COMPRESSED_RGB8_ETC2,"etc2-rgb8unorm-srgb":r.etc.COMPRESSED_SRGB8_ETC2,"etc2-rgb8a1unorm":r.etc.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,"etc2-rgb8a1unorm-srgb":r.etc.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,"etc2-rgba8unorm":r.etc.COMPRESSED_RGBA8_ETC2_EAC,"etc2-rgba8unorm-srgb":r.etc.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,"eac-r11unorm":r.etc.COMPRESSED_R11_EAC,"eac-rg11unorm":r.etc.COMPRESSED_SIGNED_RG11_EAC}:{},...r.astc?{"astc-4x4-unorm":r.astc.COMPRESSED_RGBA_ASTC_4x4_KHR,"astc-4x4-unorm-srgb":r.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,"astc-5x4-unorm":r.astc.COMPRESSED_RGBA_ASTC_5x4_KHR,"astc-5x4-unorm-srgb":r.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,"astc-5x5-unorm":r.astc.COMPRESSED_RGBA_ASTC_5x5_KHR,"astc-5x5-unorm-srgb":r.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,"astc-6x5-unorm":r.astc.COMPRESSED_RGBA_ASTC_6x5_KHR,"astc-6x5-unorm-srgb":r.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,"astc-6x6-unorm":r.astc.COMPRESSED_RGBA_ASTC_6x6_KHR,"astc-6x6-unorm-srgb":r.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,"astc-8x5-unorm":r.astc.COMPRESSED_RGBA_ASTC_8x5_KHR,"astc-8x5-unorm-srgb":r.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,"astc-8x6-unorm":r.astc.COMPRESSED_RGBA_ASTC_8x6_KHR,"astc-8x6-unorm-srgb":r.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,"astc-8x8-unorm":r.astc.COMPRESSED_RGBA_ASTC_8x8_KHR,"astc-8x8-unorm-srgb":r.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,"astc-10x5-unorm":r.astc.COMPRESSED_RGBA_ASTC_10x5_KHR,"astc-10x5-unorm-srgb":r.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,"astc-10x6-unorm":r.astc.COMPRESSED_RGBA_ASTC_10x6_KHR,"astc-10x6-unorm-srgb":r.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,"astc-10x8-unorm":r.astc.COMPRESSED_RGBA_ASTC_10x8_KHR,"astc-10x8-unorm-srgb":r.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,"astc-10x10-unorm":r.astc.COMPRESSED_RGBA_ASTC_10x10_KHR,"astc-10x10-unorm-srgb":r.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,"astc-12x10-unorm":r.astc.COMPRESSED_RGBA_ASTC_12x10_KHR,"astc-12x10-unorm-srgb":r.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,"astc-12x12-unorm":r.astc.COMPRESSED_RGBA_ASTC_12x12_KHR,"astc-12x12-unorm-srgb":r.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR}:{}}}var init_mapFormatToGlInternalFormat=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/texture/utils/mapFormatToGlInternalFormat.mjs"(){init_globals(),init_adapter()}});function mapFormatToGlType(t){return{r8unorm:t.UNSIGNED_BYTE,r8snorm:t.BYTE,r8uint:t.UNSIGNED_BYTE,r8sint:t.BYTE,r16uint:t.UNSIGNED_SHORT,r16sint:t.SHORT,r16float:t.HALF_FLOAT,rg8unorm:t.UNSIGNED_BYTE,rg8snorm:t.BYTE,rg8uint:t.UNSIGNED_BYTE,rg8sint:t.BYTE,r32uint:t.UNSIGNED_INT,r32sint:t.INT,r32float:t.FLOAT,rg16uint:t.UNSIGNED_SHORT,rg16sint:t.SHORT,rg16float:t.HALF_FLOAT,rgba8unorm:t.UNSIGNED_BYTE,"rgba8unorm-srgb":t.UNSIGNED_BYTE,rgba8snorm:t.BYTE,rgba8uint:t.UNSIGNED_BYTE,rgba8sint:t.BYTE,bgra8unorm:t.UNSIGNED_BYTE,"bgra8unorm-srgb":t.UNSIGNED_BYTE,rgb9e5ufloat:t.UNSIGNED_INT_5_9_9_9_REV,rgb10a2unorm:t.UNSIGNED_INT_2_10_10_10_REV,rg11b10ufloat:t.UNSIGNED_INT_10F_11F_11F_REV,rg32uint:t.UNSIGNED_INT,rg32sint:t.INT,rg32float:t.FLOAT,rgba16uint:t.UNSIGNED_SHORT,rgba16sint:t.SHORT,rgba16float:t.HALF_FLOAT,rgba32uint:t.UNSIGNED_INT,rgba32sint:t.INT,rgba32float:t.FLOAT,stencil8:t.UNSIGNED_BYTE,depth16unorm:t.UNSIGNED_SHORT,depth24plus:t.UNSIGNED_INT,"depth24plus-stencil8":t.UNSIGNED_INT_24_8,depth32float:t.FLOAT,"depth32float-stencil8":t.FLOAT_32_UNSIGNED_INT_24_8_REV}}var BYTES_PER_PIXEL,GlTextureSystem,DefaultWebGLSystems,DefaultWebGLPipes,DefaultWebGLAdapters,systems2,renderPipes2,renderPipeAdaptors2,WebGLRenderer,init_mapFormatToGlType=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/texture/utils/mapFormatToGlType.mjs"(){init_globals()}}),init_GlTextureSystem=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/texture/GlTextureSystem.mjs"(){init_globals(),init_adapter(),init_Extensions(),init_Texture(),init_GlTexture(),init_glUploadBufferImageResource(),init_glUploadCompressedTextureResource(),init_glUploadImageResource(),init_glUploadVideoResource(),init_applyStyleParams(),init_mapFormatToGlFormat(),init_mapFormatToGlInternalFormat(),init_mapFormatToGlType(),BYTES_PER_PIXEL=4,(GlTextureSystem=class{constructor(t){this.managedTextures=[],this._glTextures=Object.create(null),this._glSamplers=Object.create(null),this._boundTextures=[],this._activeTextureLocation=-1,this._boundSamplers=Object.create(null),this._uploads={image:glUploadImageResource,buffer:glUploadBufferImageResource,video:glUploadVideoResource,compressed:glUploadCompressedTextureResource},this._useSeparateSamplers=!1,this._renderer=t}contextChange(t){this._gl=t,this._mapFormatToInternalFormat||(this._mapFormatToInternalFormat=mapFormatToGlInternalFormat(t,this._renderer.context.extensions),this._mapFormatToType=mapFormatToGlType(t),this._mapFormatToFormat=mapFormatToGlFormat(t)),this._glTextures=Object.create(null),this._glSamplers=Object.create(null),this._boundSamplers=Object.create(null);for(let t=0;t<16;t++)this.bind(Texture.EMPTY,t)}initSource(t){this.bind(t)}bind(t,r=0){let n=t.source;t?(this.bindSource(n,r),this._useSeparateSamplers&&this._bindSampler(n.style,r)):(this.bindSource(null,r),this._useSeparateSamplers&&this._bindSampler(null,r))}bindSource(t,r=0){let n=this._gl;if(t._touched=this._renderer.textureGC.count,this._boundTextures[r]!==t){this._boundTextures[r]=t,this._activateLocation(r),t=t||Texture.EMPTY.source;let i=this.getGlSource(t);n.bindTexture(i.target,i.texture)}}_bindSampler(t,r=0){let n=this._gl;if(!t)return this._boundSamplers[r]=null,void n.bindSampler(r,null);let i=this._getGlSampler(t);this._boundSamplers[r]!==i&&(this._boundSamplers[r]=i,n.bindSampler(r,i))}unbind(t){let r=t.source,n=this._boundTextures,i=this._gl;for(let t=0;t<n.length;t++)if(n[t]===r){this._activateLocation(t);let a=this.getGlSource(r);i.bindTexture(a.target,null),n[t]=null}}_activateLocation(t){this._activeTextureLocation!==t&&(this._activeTextureLocation=t,this._gl.activeTexture(this._gl.TEXTURE0+t))}_initSource(t){let r=this._gl,n=new GlTexture(r.createTexture());if(n.type=this._mapFormatToType[t.format],n.internalFormat=this._mapFormatToInternalFormat[t.format],n.format=this._mapFormatToFormat[t.format],t.autoGenerateMipmaps&&(this._renderer.context.supports.nonPowOf2mipmaps||t.isPowerOfTwo)){let r=Math.max(t.width,t.height);t.mipLevelCount=Math.floor(Math.log2(r))+1}return this._glTextures[t.uid]=n,this.managedTextures.includes(t)||(t.on("update",this.onSourceUpdate,this),t.on("resize",this.onSourceUpdate,this),t.on("styleChange",this.onStyleChange,this),t.on("destroy",this.onSourceDestroy,this),t.on("unload",this.onSourceUnload,this),t.on("updateMipmaps",this.onUpdateMipmaps,this),this.managedTextures.push(t)),this.onSourceUpdate(t),this.updateStyle(t,!1),n}onStyleChange(t){this.updateStyle(t,!1)}updateStyle(t,r){let n=this._gl,i=this.getGlSource(t);n.bindTexture(n.TEXTURE_2D,i.texture),this._boundTextures[this._activeTextureLocation]=t,applyStyleParams(t.style,n,t.mipLevelCount>1,this._renderer.context.extensions.anisotropicFiltering,"texParameteri",n.TEXTURE_2D,!this._renderer.context.supports.nonPowOf2wrapping&&!t.isPowerOfTwo,r)}onSourceUnload(t){let r=this._glTextures[t.uid];r&&(this.unbind(t),this._glTextures[t.uid]=null,this._gl.deleteTexture(r.texture))}onSourceUpdate(t){let r=this._gl,n=this.getGlSource(t);r.bindTexture(r.TEXTURE_2D,n.texture),this._boundTextures[this._activeTextureLocation]=t,this._uploads[t.uploadMethodId]?this._uploads[t.uploadMethodId].upload(t,n,r,this._renderer.context.webGLVersion):r.texImage2D(r.TEXTURE_2D,0,r.RGBA,t.pixelWidth,t.pixelHeight,0,r.RGBA,r.UNSIGNED_BYTE,null),t.autoGenerateMipmaps&&t.mipLevelCount>1&&this.onUpdateMipmaps(t,!1)}onUpdateMipmaps(t,r=!0){r&&this.bindSource(t,0);let n=this.getGlSource(t);this._gl.generateMipmap(n.target)}onSourceDestroy(t){t.off("destroy",this.onSourceDestroy,this),t.off("update",this.onSourceUpdate,this),t.off("resize",this.onSourceUpdate,this),t.off("unload",this.onSourceUnload,this),t.off("styleChange",this.onStyleChange,this),t.off("updateMipmaps",this.onUpdateMipmaps,this),this.managedTextures.splice(this.managedTextures.indexOf(t),1),this.onSourceUnload(t)}_initSampler(t){let r=this._gl,n=this._gl.createSampler();return this._glSamplers[t._resourceId]=n,applyStyleParams(t,r,this._boundTextures[this._activeTextureLocation].mipLevelCount>1,this._renderer.context.extensions.anisotropicFiltering,"samplerParameteri",n,!1,!0),this._glSamplers[t._resourceId]}_getGlSampler(t){return this._glSamplers[t._resourceId]||this._initSampler(t)}getGlSource(t){return this._glTextures[t.uid]||this._initSource(t)}generateCanvas(t){let{pixels:r,width:n,height:i}=this.getPixels(t),a=DOMAdapter.get().createCanvas();a.width=n,a.height=i;let o=a.getContext("2d");if(o){let t=o.createImageData(n,i);t.data.set(r),o.putImageData(t,0,0)}return a}getPixels(t){let r=t.source.resolution,n=t.frame,i=Math.max(Math.round(n.width*r),1),a=Math.max(Math.round(n.height*r),1),o=new Uint8Array(BYTES_PER_PIXEL*i*a),s=this._renderer,l=s.renderTarget.getRenderTarget(t),u=s.renderTarget.getGpuRenderTarget(l),d=s.gl;return d.bindFramebuffer(d.FRAMEBUFFER,u.resolveTargetFramebuffer),d.readPixels(Math.round(n.x*r),Math.round(n.y*r),i,a,d.RGBA,d.UNSIGNED_BYTE,o),{pixels:new Uint8ClampedArray(o.buffer),width:i,height:a}}destroy(){this.managedTextures.slice().forEach(t=>this.onSourceDestroy(t)),this.managedTextures=null,this._renderer=null}}).extension={type:[ExtensionType.WebGLSystem],name:"texture"}}}),WebGLRenderer_exports={};__export(WebGLRenderer_exports,{WebGLRenderer:()=>WebGLRenderer});var init_WebGLRenderer=__esm({"../../node_modules/.pnpm/pixi.js@8.1.1/node_modules/pixi.js/lib/rendering/renderers/gl/WebGLRenderer.mjs"(){init_globals(),init_Extensions(),init_GlGraphicsAdaptor(),init_GlMeshAdaptor(),init_GlBatchAdaptor(),init_AbstractRenderer(),init_SharedSystems(),init_types2(),init_GlBufferSystem(),init_GlContextSystem(),init_GlGeometrySystem(),init_GlBackBufferSystem(),init_GlColorMaskSystem(),init_GlEncoderSystem(),init_GlStencilSystem(),init_GlUboSystem(),init_GlRenderTargetSystem(),init_GlShaderSystem(),init_GlUniformGroupSystem(),init_GlStateSystem(),init_GlTextureSystem(),DefaultWebGLSystems=[...SharedSystems,GlUboSystem,GlBackBufferSystem,GlContextSystem,GlBufferSystem,GlTextureSystem,GlRenderTargetSystem,GlGeometrySystem,GlUniformGroupSystem,GlShaderSystem,GlEncoderSystem,GlStateSystem,GlStencilSystem,GlColorMaskSystem],DefaultWebGLPipes=[...SharedRenderPipes],DefaultWebGLAdapters=[GlBatchAdaptor,GlMeshAdaptor,GlGraphicsAdaptor],systems2=[],renderPipes2=[],renderPipeAdaptors2=[],extensions.handleByNamedList(ExtensionType.WebGLSystem,systems2),extensions.handleByNamedList(ExtensionType.WebGLPipes,renderPipes2),extensions.handleByNamedList(ExtensionType.WebGLPipesAdaptor,renderPipeAdaptors2),extensions.add(...DefaultWebGLSystems,...DefaultWebGLPipes,...DefaultWebGLAdapters),WebGLRenderer=class extends AbstractRenderer{constructor(){super({name:"webgl",type:RendererType.WEBGL,systems:systems2,renderPipes:renderPipes2,renderPipeAdaptors:renderPipeAdaptors2})}}}}),src_exports2={};__export(src_exports2,{Blackboard:()=>Blackboard,ContextPreview:()=>ContextPreview,Describer:()=>Describer,EnvConfig:()=>EnvConfig,GithubStar:()=>GithubStar,Logo:()=>Logo,Player:()=>Player,PlaygroundResultView:()=>PlaygroundResultView,PromptInput:()=>PromptInput,ServiceModeControl:()=>ServiceModeControl,ShinyText:()=>shiny_text_default,actionNameForType:()=>actionNameForType,allScriptsFromDump:()=>allScriptsFromDump,blankResult:()=>blankResult,cancelTask:()=>cancelTask,checkServerStatus:()=>checkServerStatus,colorForName:()=>colorForName,filterBase64Value:()=>filterBase64Value,formatErrorMessage:()=>formatErrorMessage,generateAnimationScripts:()=>generateAnimationScripts,getPlaceholderForType:()=>getPlaceholderForType,getTaskProgress:()=>getTaskProgress,globalThemeConfig:()=>globalThemeConfig,highlightColorForType:()=>highlightColorForType,iconForStatus:()=>iconForStatus,overrideServerConfig:()=>overrideServerConfig,requestPlaygroundServer:()=>requestPlaygroundServer,staticAgentFromContext:()=>staticAgentFromContext,timeCostStrElement:()=>timeCostStrElement,timeStr:()=>timeStr,useEnvConfig:()=>useEnvConfig,useServerValid:()=>useServerValid,useStaticPageAgent:()=>useStaticPageAgent}),module.exports=__toCommonJS(src_exports2),init_globals(),init_globals();var import_react=__webpack_require__(4194);init_globals();var import_constants15=__toESM(require_constants()),import_playground=__toESM(require_playground()),serverBase=`http://localhost:${import_constants15.PLAYGROUND_SERVER_PORT}`,checkServerStatus=async()=>{try{return 200===(await fetch(`${serverBase}/status`)).status}catch(t){return!1}},requestPlaygroundServer=async(t,r,n,{requestId:i,deepThink:a}={})=>{let o={context:t,type:r,prompt:n};return i&&(o.requestId=i),a&&(o.deepThink=a),(await fetch(`${serverBase}/execute`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)})).json()},overrideServerConfig=async t=>fetch(`${serverBase}/config`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({aiConfig:t})}),cancelTask=async t=>{try{return(await fetch(`${serverBase}/cancel/${t}`)).json()}catch(t){return import_console_browserify.default.error("Failed to cancel task:",t),{error:"Failed to cancel task"}}},getTaskProgress=async t=>{try{let r=await fetch(`${serverBase}/task-progress/${t}`);return await r.json()}catch(t){return import_console_browserify.default.error("Failed to poll task progress:",t),{tip:null}}},actionNameForType=t=>"aiAction"===t?"Action":"aiQuery"===t?"Query":"aiAssert"===t?"Assert":"aiTap"===t?"Tap":t,staticAgentFromContext=t=>{let r=new import_playground.StaticPage(t);return new import_playground.StaticPageAgent(r)},formatErrorMessage=t=>{let r=t?.message||"";return r.includes("of different extension")?"Conflicting extension detected. Please disable the suspicious plugins and refresh the page. Guide: https://midscenejs.com/quick-experience.html#faq":r?.includes(import_playground.ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED)?"Unknown error":r},getPlaceholderForType=t=>"aiQuery"===t?"What do you want to query?":"aiAssert"===t?"What do you want to assert?":"What do you want to do?",blankResult={result:null,dump:null,reportHTML:null,error:null},useStaticPageAgent=t=>(0,import_react.useMemo)(()=>t?staticAgentFromContext(t):null,[t]);init_globals(),init_globals();var import_dayjs=__toESM(require_dayjs_min());function timeStr(t){return t?(0,import_dayjs.default)(t).format("YYYY-MM-DD HH:mm:ss"):"-"}function filterBase64Value(t){return t.replace(/data:image\/[^"]+"/g,'data:image..."')}var mousePointer="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABfCAYAAACgCTpnAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAS6ADAAQAAAABAAAAXwAAAAARa1b5AAAaTElEQVR4AeVcB7iUxbme3T2FKl1BlKZgFDWo2JCiPCpgohQBsRB7iTwmJrZriD0RSACDBb3Gq6i5sWCEq6KiCNhBrKBIUzw0KYfqKbtn233f2X1/5vzssntOaJrveWa/mW/6+38z883882+osrLyTwcddNCX06ZNCxhjiuCKHcdwYdoVgIfSLgjO9HLwVvMz/NOjWCw2NxqNvv/JJ5/0QO8awzVxHMON4PaDawBXD64uHAEliAIwE3iI/olReXn5E0lQPB4vWbJkySXo3v6OawF/c7imcATOBY2AUfP+YwALAqyl6LAJBoNtOnbs+NjatWtHnnHGGdQmAuF3rjYRJGqUX6s4NEnuEE1Jfuy/n3322QBqlktbtmx5c9y4caehbx3g2sG1gTsIriUctY2aRi2rD/efMywnT57cLZFIVLhg0R8Oh7974403rgYYh8F1hCNwbeFawx0A1wyOGqi57Cc/jwWXL19egUm+FJ020RfH4CdMrykuLm57+umnT1i4cOH1xx9/POerOhQ7zl0ptUqS/2SHZah58+aNzz777LMKCwtbRv9vvIm996wJHX6KCdRvbAKBQEGLFi26nnPOOR0ikciijz76qAJgcC4iICTNS+QiyRimP5nmDJPctCnJj+W3ZcuW7TBHvWWH3t9/kyy/5tBkxfVdkrFPp1cbmVgISiZNmjQC/ToG7kg4Ds/2cJzL/MPyJzmPBbH6JTA/bUCHTbD5wWQmGS4zkUdHmOi/RhuTiFtZvXr12lx00UVj3nvvveGtW7duCKE7LLVqarWUOfGTGpZ2foHWrCUigTRYFh38RGf8jwmPv9Akt6yzolAoVP+UU0753TvvvDNyyJAh1CgBRi7ANJcJMNYhpyEoznJdP8P7LFmwNm/e/D1amPCDxVYnvvnEhP98jokv+sDrRIcOHX7xxBNPPPjkk0/2glCAafIXWH4tE2C2TuRzQXL9Xj37mocNN2vWrFkH8yEabE5zakdKlm0ykfsvNdHXJmKMcr6GgVW/frsLLrjgz2+++eaQZs2a0d4SaNIwguUH7Ec9LNn4xm3btg327t17cLBew+Lo6w97gCDOoaRJLJ5jEt99YUKde5lAUR1a/UXQsu5Dhw5tDRNk4eLFi2l3UEtcpzL82uOGs/mVd5/gBKsR5qzkZZddNqygsLBBbO4UYyq2Zm1cckOJic97xYQ6HGsCTWjQA+3GjTtii3RUkyZNlr/11lubIBJYjJZfgIgzjuQPZ5PZxHvzh8Mw+dVXX0WqqqrWsyFaEXfWqCSmuPC4YSY2+2kvGey1n994440TXn/99XNhs9F04LB0h2a+w1JlZgJRcXuFW7AAVALatZItyDTJZ2xZPGaqnrvbRB77LUyNcpsEIDU688wzb/3iiy9uOO2007iH9AOmyZ8rZbbVkiAJKNdv69ibPxYsNCC5devWNFiZJ/lsjYx/8qqJjB5oEmuW2CSw+gOHH374ec8///xfbr/99s4QCjByd/IXYDsDTdUKPIX3CvfA2rhxowUrn2Hob2li3XITHjPYxOZO9aIwLI+99dZbJ+AE9hwINRxlXpDvTMukUS5Irt+rZ096PLDWrVtn56y8h6G/lVWVpmrSTabqn7cZE6uysXXq1GnWr1+/2z7//PMR2JRzS+SCJrBc84JaxjbJ+UFT2Ja/p39CqJBHLKFevXo1PfbYY38RLK5TGHvj0Vq3I7HiSxP/6u3UZrxeI27GA9h/dgFonXG6sXjOnDnbULg6La76GCaJ+/020hcv2W7nnmatWLFiM87itwTYQbh/hxIrvjLheweY+Py3vGJwenHcPffcMw5W/2kQah7TsNRcpnmMD5GO7ROg4hBZcgGVbLdyNojWN0yswuB5553Xt6ioaP/4p69hxrejsvaVxyIm/sk0Y6rCJnTYSehy0KDs/Y466qjeOPIpnD179iLMkwlUIBDEWacLhOtXeyRz8yhut3E+OVJy1qxZZdAsa43Wet5KlbX9F1ujKIZ0+G/DAb492KDVX3jcccddgc34mN///vedkDiTlrk2mbRMmuZqm+oSeArvFu4NQ5SexAEfre+8DNOatCaxdB6GJTbjS+Z62Q444IBud99997innnpKm/GdTf6ZgPJr1W4HzAUrgdOHEvYm0CJ1ruX1bBd4kttKTWTCxSY6/b/xWLzN+MEXXnjhaEz6lzZt2lSb8Uyg5TuX+QHcBS3fXoQLVnLDhg0rGRXIcvqwPVstfThIjE4dayITrzLJ9P4Tw7L4xBNPHIGXvHdcfPHFbVGyOyw18cvMkAHrahr7QHI1y/WnYnfBbzWwVq1atQZnyYnaGKY1aUv8y9kYlv1NomSBl61du3Z977///vGPP/54Dwhd7XINWNlkBEuAERj2w69VuxywamDNnTt3FSqNB5oeiOrZlt1HyY2rTXgsNuPvPONVst9++x0yfPjwUR9++OEl8GtYuuaFO/H7tUxgibNc1+/VU1sPEeFTJC/AUUsRzqbOgR3RMDbnXziqof24GwnDMv7lLJNc/50JHdGTBoxdLXFR5YTBgwc3w6Hksq+//roSLVCnxdUohl1yw9n8bvoa+TXeOeMm169fH8HLizUsIdupaY1KzzNxbN7L2FsOMom133g5cJVgIIbkfRMnToSRVm0e07B05zFpGfsjlwtYr658PdWGIV6ohisqKtYy826b5LO0LPH9MhMePcgeLCoJhmKnyy+/fBTOyAbVrVuXN3jcuUxgaR4TYO5ctksBqwYW7KzEDz/8sJqN3R3mg0DIyiMVJvL470zVs3dhMx61yWD1N+7Tp89IbMZvwarJKwMELBNoBEuASbvIBRg5SeFUqAa/1cBCvuSmTZvSw3DX21r5tiv29j/s5J/cZJ+bzdapU6dBr7766t/uu+++rhC4gFHDpGUCbGegqRkCT+GcnGCROGdxn0awSmk+7LItD0uvBSVK5lvzgmaGCIbr0ddcc80ogNYfMgGWS8t22bCUZrE9dpLHClTKWzV7GyzboPKt1oCNvnSf92YcZ2TN+/bt+8dFixbd1LVr16Zp0HKZF+ynnIahNEthVrlTIupUYWs6kHfu3Lluz549zy6oW79BbOYk7yAPcXuNEsvmmcSyj9G4niZQXM+ekeEktjMutHTCcdmyDz74gDaOOi2u9rqg+GUKkyudK6vmF1hEnf5QWVkZX4sNxJFNk9RRTeq0oFquvRBIblyFlfIlE2r3c2ONZrShYcOGB3fv3v0UnGJswpl/CUQCSh3Pxf09UXq/3IY1DO0QhCSJVacSb3s2M3ZfGIq2lekfHvOE77vIRN98zBPjwsqBAwYMuAtmzw0Yllot3WGpyZ8mhlUI8ExDUkCRy+/VQw8zsxBPs+AvuO66607GUzssiSPixDefQrQPEU4sEl+/bxKrvk69GS8s5rAM4ST2KAzLQ2H+LME9sh/QYnVanJ1wQcgmV2fdtFZGkESedsHWWkPhnjZM1ZB8ePyLGanN+MqFXvJWrVp1HzNmzP0Ykn0g1Grpt/ipHDItqCzEQMCJQ2SpGmBM6IGU9iew7VnBpPvaMGSbXEqWrjThvw41sfef98Qclueee+6dOBS4HLYZXya4oAk4AuYOy52B5gGYcRji3kITnJUPYKrYrKe8huyTHm7G5880XABCR3THxFLIYVmAC3fH9+/fvw32uss+/vjjMrTd67TjdzXHH08lqhZPsKSS1DIbxiux+lhlhgTqNAhFX38Eusd8+zYlVi0y8QUz8XLkZBNowI9EcOOlUaMOPXr0OAbArXzttdf4BkaAiDOZCwjDoh3kBIgkNOyQxCFgGVbEjSZU4N2USSXbt38TqxdjMz7Q0OQRAbBOv/71r8dj0r88fXStlVJDUqultkpUGDpiI1AtV4QiyQuwEhbgXKsPrnfvn0irOOQ/DsIG3NqHldtM6Gfd0OWgPSPjsDz//PPbYDu3GBdXdOvaBSNn/yw4SEUUvWG4bdu2IJ7GaZgs2/GaJF+a/tgosfwLE4eJETqihwnU5X1hOywPOfXUU7tg1SzBsY//xahGV9auEiA79FwO9GOYGO2HBPv6ipi1Z4hILP88tRlf+K6XDBfujhgxYsQE3Lq+EEIOQQ3DnCYFwfITweN9LYv87n554a98V4eTZZtN5MErTPSV+6EWPFjBPFNQwFvXN3777bcjMd3wwormKy12HHF0xEdD1QYQ3lG7SktLV0G+149q2Lh/mwBSdNoDJvLAZYaXiUXt27cf/Oijj47D0fVRkAkocoLkOgsYBRqr1YbjahCOaiL7shWPtteIOIfZV3Dfbt/CYbU85oorrpg4b968IShM2iTuahZua6RoB8AWLFjwPcCqCtTHrZr0BFmjlu2jiZOb19oPIdxXcDhhaY5N+D3Qjz/icJEfo2roudwKZfZT/ein/VGHW4X58+e/QfPBPg1nD4b4PUt4hxkoxmvEOvXteZaBPwC/4dkWXEqeik/J3LRIY9MyL+XMA57lvSiOqN6bOXPm3bD+P0cnY2kXB48ToGrDT2F8AhzGDn4NwbIr4h4AK9D4AFN8JSZiCwbu2AkMnCzUlPAZcxSOt7Ar+UEEqDJWFQvHK8sq4/GtlbhYx08H6XhwWI6+boZ/K64TVEDTiMsOlEnogYfXYqvxOqoLV0RCu7uJ3wgl8MK14KRBtio0PoYv1jYnk9vojaPDYfxbQAU6Vo62lWHFroAmlMFfCVaOj7a2godh+lQiTRTyKC4WhwFYHOVEcJpShbgwZLzHSa3hKyRx+iknpyNperKBrJrFhDBOv8cVxz16VBOdMtaEuvSxQwcaEb/zzjufx6d73wCYCNqkYeFyO0QQR7vAdXro9kWME6f05G459Cs/8yqfyvFMB8RVG442IW7mrWDEnnyHmNy2wcRefZDV8qZgMY64TwJQfNLqnDSA4NGF4fiKn1uYTI5xrmN65XU1ScAJTIHkcf9qiHK2g/Y9iII9bZhGZz1p7z+w7i6gO+6443B4/WCxowKLALigZQJPgCltNsAEFnk17RJYkG8HKe1PYA7YgkmyItC0ddbVgxnzIpxgFA66Ja+kfBtdNfnPNi0m3NDVV199FjbCnDIEGLWAYAkwgSZAqGHyu1xAiSs/uTSLXEC5w9IOQ6qZSH6reiUlJfYGsz2qadxSaWrFC3/5W1N4xhUmdMyZeeXny1VeESdh49vu3nvvPQFeNt4FzD8kpS0EwwVJfoGkdOQEiuXQuUCxHm8I0i/NkhCy7Qnwnw9buSBR+O8MxeChXU1hn6tYjCk69w+w5vIzBax24Rsh0qBBg/rjzkNTeNnWbKBJU1wwsvmZ1gVKYLmAuZrlgYV8lqqB9vbbb/MQ0IJV20kep62m+JKxWCWCBkM6VtWgeWXh6Zervp3yJD5zic6cZNM0aNCgKT5v6Y1PjxkWYAJN2iYNIRcY0h4BKbmbln6CJKDcYShMsoJlEwAofmxuTx9qu0csHHaHCTRrjXYYg5cI82AGvFTY95q8T2Bjrz4EG8aeFhmcFPTDZ3qH2sJSP+qIHzR1XCAIGMpdmdIRHDlpE7nKJ/fmLAkpIymcgDFnzYfaDMPQsf1MwYkDbIEwCLfiKveMG2644cNV6zd+WzTwFivP9cN/AohO/atNhqOVupjsB+HVPbdl3LeJvPZC4AInjRMoLhc44i5IAkqc9excs5gA1m7qELCG1725dSm68B5WYmBcJp555pmXp0+fvho2U+WECRNeTB7Ttyp4yHE2PtdPbM4UXNadb5Phou4JY8eO7YYA51u6aptdmyj1sN3OExCGXZ4NJAGkByBuK0uXb7WJfkVajgOy5akrSG2ULjcPBEzRr8Z43wDhBGMeNOo9ZLTzBsD6El/Pzi0aepudy3IWiLdLVc8BeHC+fcbnLENgfu2HfJzA6Fzg3OLcvrjgUe6G5XfT0y+yclZCUoTLbQIcv64CWDiqwd+tYLLOhwpOHW6/CmNaaOYGTMxTsGfj8m3B4h5v9OjRU6r2P2RrQbfB+RRpj4j1PSOOhg99+OGHmZG2F8EiZ18EnLQNouoPPx0mOLZ/eXIkS1VgPc5PtUKWLl1ajlWMdwfyekMdbHmIKRp4s4pLTpky5SW8s1sFAVcl2jl2KX/22WeXv//++y8XDrgh7/Myzl36xPjoo4/uiyPhA1Ee5y+CJeD82qahiiQeufOdJ8zlkWYxnQuSF4YVX4XdOzube48IK73o0nGeHYXzsA/wlmg2slqNAhdg1jiExr2yLR4qKfzFdYjKTbxFE3vtIZsQb56a33XXXb9CgGC5zgVNQEnTagWSWuaCJRm5Bxy+Q4zgWGQNhbmue7PTwTadmdTgxKIUnZkC08PTJohlQVuOo9wN+JRucqjXRYlgyw42X64f2l38uwQSrn+filMJnp/739D4AfODxuw1Bo6FEBiSB5Drx5IfxwdQK5lgZ6/Fgh2OgZV+NZNhHk5y9XvuxRdfXIGgtKoaUJDbMF5Lvb6udOO8wiF/ZNbc5OwbYaDWufLKKy/GCsnJ1A+YhqPmMQGWu44sKVgASYClQj7gANhaRmQFq7iuKb4EtlD6qBbz3KcYYh8gi4Cy8xTC4gTK+nHuXfbyyy8/E/jZKVWho3tDnJviC2Zh3/iOTXjggQd2HTVqVE8ENHeJU7vYPzl3KNZYq1gZC3JJ2kUZ/XbVwLmWfX+UzTAtGvRfmM/a2nIAbOnIkSP/F9qo1c8PmIASj1x11VUfLlu2bFrR4D9gmmZfc1N08p9gNdHGNOass866CG5/eF2gpFnsowsUs4hqBJofLBayA2CY5NdjRSyzRzXeC6FUfXw9XtDzAhuA7RmbOnXqC6AVELggZfK7sgi+CHs62qjVxsLel6YKzvHLv0fguRcJR98H33zzzX3gpTbJCSx3GDJ5jQBiBpELFkESCTDLcY26FKcPZXzq+v8ZJuSH50XDRymPgXZ8fO21186CgPsvgiHHISd/Rv7QQw8tx4WN5wr6XWsCjVogeW6KTXvQ2zeefPLJQ7Fv7IhcmUDya1etAHPBYusEkutP4m+fSqlZFLpD0W6Ssa0h4QXBNnz98ELa+MwFjsAk9xy0Y3J5LPlt4YAbbZm5flL7xrE2GY6gG+Gd3xB848OhyH5JowiM62z6tEz+vLgfLGUSaJbjXKsSVnfqqCb97208xCs4/mybHqtf8pVXXvnnI488sgSCTJrjAYJ4+TnhyG85zIhNuN0yMXTCgFiw/c9t2bl+YnNe9PaN7du3Px2v4rsijzSJXP5MgOUqvlp8PmBxkudRzWrm5IoYaNDUFJ1/t1fQypUr511//fVvQOAHqhoYiHd3/a5f6apgxL69obT046Kht6OyPEYL5tDEioW2LfyyH9e8r8IHUXiL6mkT4/wF+cM2f64fgVVNk9KZXBmPakooD7ZoA6DuMoGGvHIOYykc3oil+zHeFkQw0/AjEC4w2u2LK86mw4WUMGy0h5MHdy4vOHEgq8hKwVaHmjo3P28KegyzaWjf4VTj+yOPPFKbWPZBVCuAlJmcK0cmqgYUEiSwIU5pVrODTLB9Fy8PNtocft9AoE672iWNYZzAseYIwmy8OsOHxjRMH7rpppvm4/X5jLYDb+wf/3y6tx9EXIpgz/E8v/CXv0EPaIsawxt9M2bMeBZf80/HYkSzhfWI1B+Fa8WlWW5mdYAy+u0wxB/7rOR1HV50FcH++gx/xzkV4Xw1ypalMsEFoMC0gGF+jIwfP/7vkaKGawv6jVB1lgdbdbTaZBcBAAVNKsXx99PdunW7Gf948haAUlluXW6fqpVXk4AfLBVK7gEFfxz/6bc2vmB2vKD7ebZ8rI7l+Cz3bwCxHAJpk0CTRpELEHK3A34/O2nBAo8+8MADJdiIP13Y+5KkNXipTTiOrvOHqSbY9mgDTCpgakzD3xvcgquP/8D/DW5L5xdYbn3qj8uRvPbEYUHwODT5+oWTJC/dN4dr9cLvhp4d2bSef2VgCR0ZDznHIx2Xrs5wh8EdAtcGrhUcJzYe0uGqiy2TyzrL57JOzjDrYjzTMT3ztYXrdNJJJ52IufJT/NNIMv7dfFWdxIIy97bbbrseafrAnQ7XC64b3HFwR8J1gmMZbhvYH9bFOl2zAsH8iA3ORHoCevrxf60NLT2rTgO+vGiFLc1Hw4YNexp+ahSJ6aRB1CZpiPt0mUblkoso54NSGczLhxbEP4lswd8WTML3hXwgAdS7FPPSM9g8v4spgOlYDutQfWyPtJqybPUjquaUCSx1hI1no1lh4N133/0B2xncaEmW40DvHnyF9QPlcEzPtHRsoBrJfHKMYzrXIegR42094CyTzhLmxDfxhcTTWHUj2Jy/gO3UFkQonuWpDj0kAea2xa2f5aod9OdNqlQZCA5l9smCU101ZEJYER9CozfgT3fGpNOAeRWr0eIuaGysv8HMy7r89fEB0mnIilOm9qjdKpd1ChxyAScZ0zGN2wYCRhJPhXby69csZmRDhDy5KjJ4nf8CzqgWQMbGqKNKq8YILHUkUwOR3RLzklSGV1dKvIOcYKle5VMe1SuAFFY7VIfqTFeRP9MTUg41JJOGSdvElVeNUKPUeDesNGooufKrTnKWTUDEPa1Oy1Q3gpZUruoUQOLZ2uC2Q2Xl5H7NUga3MPpZuRpGzka4JJm4GunmoZ/kcgKksOLcspWf9Qsogaz0TKP6XK42U6ZyxJm3xpQPWKxMDVTDGHZlaoTiFXYbysZRno2Ul/HKL06gVKfqVTnKJ646/Vzluvnkz4v7K1bYbVgmv79wdSoTZ1rKSeKpUOrXXyelfnDcsJuXfrdOAeTKVKe48vjLyRlWQ5VQ4UycMr+c+dQIl9Pvht109PvJX67qcjnzKJ2b31+Xwv76mUcyN3/e/kyVSybOwuj3h1WJ2wD5s3Hl8fNMZUvm5/68DLO+XHUqPlP+vGRqiJvYL3PDrt/NQ7/bGNfvj/PnU9hftht2/Urvcrc+1880/rCbr0b+bI3IJM8k81eWqWGZZP58Cu+sjmxx2crPJlddNeb/D/KyIM/aYvSmAAAAAElFTkSuQmCC",mouseLoading="data:image/png;base64,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",import_ui_utils=__toESM(require_ui_utils()),import_extractor=__toESM(require_extractor()),stillDuration=900,actionSpinningPointerDuration=300,stillAfterInsightDuration=300,locateDuration=800,actionDuration=1e3,clearInsightDuration=200,cameraStateForRect=(t,r,n)=>{let i,a=r/n,o=(i=t.width/t.height>=a?t.width:t.height/n*r)>400?.1:i>50?.2:.3,s=Math.min(r,i+r*o*2),l=n/r*s,u=Math.min(t.left-r*o,r-s);u=Math.max(u,0);let d=Math.min(t.top-n*o,n-l);return{left:Math.round(u),top:Math.round(d=Math.max(d,0)),width:Math.round(s)}},mergeTwoCameraState=(t,r)=>{let n=Math.min(t.left,r.left);return{left:n,top:Math.min(t.top,r.top),width:Math.max(t.left+t.width,r.left+r.width)-n}},allScriptsFromDump=t=>{let r,n,i,a,o;if(t.executions.forEach(t=>{t.sdkVersion&&(i=t.sdkVersion),t.model_name&&(a=t.model_name),t.model_description&&(o=t.model_description),t.tasks.forEach(t=>{let i=t;i.pageContext?.size?.width&&(r=i.pageContext.size.width,n=i.pageContext.size.height)})}),!r||!n)return import_console_browserify.default.warn("width or height is missing in dump file"),{scripts:[],sdkVersion:i,modelName:a,modelDescription:o};let s=[];return t.executions.forEach(t=>{let i=generateAnimationScripts(t,-1,r,n);i&&s.push(...i)}),{scripts:s.filter((t,r)=>r===s.length-1||"Done"!==t.title),width:r,height:n,sdkVersion:i,modelName:a,modelDescription:o}},generateAnimationScripts=(t,r,n,i)=>{if(!t||!t.tasks.length||0===n||0===i)return null;let a=[];if(-1===r)a=t.tasks;else{let n=t.tasks.findIndex(t=>t===r);if(-1===n)return import_console_browserify.default.error("task not found, cannot generate animation scripts"),null;if(n===t.tasks.length-1)return null;for(let r=n;r<t.tasks.length&&!(r>n&&"Planning"===t.tasks[r].type);r++)a.push(t.tasks[r])}if(0===a.length)return null;let o=cameraStateForRect({left:0,top:0,width:n,height:i},n,i),s=(t,r,n)=>({type:"pointer",img:t,duration:0,title:r,subTitle:n}),l=[],u,d=o,c=!1,h=a.length,f="",p=!1;return a.forEach((t,r)=>{if(!p){if(0===r&&(f=(0,import_ui_utils.paramStr)(t)),"Planning"===t.type){let n=t;n.recorder&&n.recorder.length>0&&l.push({type:"img",img:n.recorder?.[0]?.screenshot,camera:0===r?o:void 0,duration:stillDuration,title:(0,import_ui_utils.typeStr)(t),subTitle:(0,import_ui_utils.paramStr)(t)})}else if("Insight"===t.type&&"Locate"===t.subType){let r=t,a=r.output?.element,s=(0,import_ui_utils.typeStr)(t),h=(0,import_ui_utils.paramStr)(t);a?.rect&&(u={...cameraStateForRect(a.rect,n,i),pointerLeft:a.center[0],pointerTop:a.center[1]});let f=r.pageContext;if(f?.screenshotBase64){let t,n=r.log?.dump,i=f.tree?(0,import_extractor.treeToList)(f.tree).length:0;f.screenshotBase64&&l.push({type:"img",img:f.screenshotBase64,duration:stillAfterInsightDuration,title:s,subTitle:h}),t=d===o?void 0:u?mergeTwoCameraState(d,u):void 0,l.push({type:"insight",img:f.screenshotBase64,context:f,camera:t,highlightElement:r.output?.element||void 0,searchArea:n?.taskInfo?.searchArea,duration:i>20?locateDuration:.5*locateDuration,insightCameraDuration:locateDuration,title:s,subTitle:h}),l.push({type:"sleep",duration:stillAfterInsightDuration,title:s,subTitle:h}),c=!0}}else if("Action"===t.type&&"FalsyConditionStatement"!==t.subType){let n=(0,import_ui_utils.typeStr)(t),i=(0,import_ui_utils.paramStr)(t);l.push(s(mousePointer,n,i)),d=u??o,l.push({type:"img",img:t.recorder?.[0]?.screenshot,duration:actionDuration,camera:"Sleep"===t.subType?o:u,title:n,subTitle:i}),c&&(l.push({type:"clear-insight",duration:clearInsightDuration,title:n,subTitle:i}),c=!1);let a=r<h-1?stillDuration:0;t.recorder?.[1]?.screenshot?(l.push({type:"spinning-pointer",duration:actionSpinningPointerDuration,title:n,subTitle:i}),l.push(s(mousePointer,n,i)),l.push({type:"img",img:t.recorder?.[1]?.screenshot,duration:a,title:n,subTitle:i})):l.push({type:"sleep",duration:a,title:n,subTitle:i})}else{let r=(0,import_ui_utils.typeStr)(t),n=(0,import_ui_utils.paramStr)(t),i=t.recorder?.[t.recorder.length-1]?.screenshot;i&&l.push({type:"img",img:i,duration:stillDuration,camera:o,title:r,subTitle:n})}if("finished"===t.status);else{p=!0;let r=(0,import_ui_utils.typeStr)(t),n=t.errorMessage||"unknown error",i=n.indexOf("NOT_IMPLEMENTED_AS_DESIGNED")>0?"Further actions cannot be performed in the current environment":n;l.push({type:"img",img:t.recorder&&t.recorder.length>0?t.recorder[t.recorder.length-1].screenshot:"",camera:o,duration:stillDuration,title:r,subTitle:i})}}}),p||l.push({title:"Done",subTitle:f,type:"img",duration:stillDuration,camera:o}),l};init_globals();var esm_exports={};__export(esm_exports,{create:()=>create,createStore:()=>createStore,default:()=>react,useStore:()=>useStore}),init_globals(),init_globals();var import_meta2={},createStoreImpl=t=>{let r,n=new Set,i=(t,i)=>{let a="function"==typeof t?t(r):t;if(!Object.is(a,r)){let t=r;r=(null!=i?i:"object"!=typeof a||null===a)?a:Object.assign({},r,a),n.forEach(n=>n(r,t))}},a=()=>r,o={setState:i,getState:a,getInitialState:()=>s,subscribe:t=>(n.add(t),()=>n.delete(t)),destroy:()=>{"production"!==(import_meta2.env?import_meta2.env.MODE:void 0)&&import_console_browserify.default.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),n.clear()}},s=r=t(i,a,o);return o},createStore=t=>t?createStoreImpl(t):createStoreImpl,import_react2=__toESM(__webpack_require__(4194),1),import_with_selector=__toESM(require_with_selector(),1),import_meta3={},{useDebugValue:useDebugValue}=import_react2.default,{useSyncExternalStoreWithSelector:useSyncExternalStoreWithSelector}=import_with_selector.default,didWarnAboutEqualityFn=!1,identity2=t=>t;function useStore(t,r=identity2,n){"production"!==(import_meta3.env?import_meta3.env.MODE:void 0)&&n&&!didWarnAboutEqualityFn&&(import_console_browserify.default.warn("[DEPRECATED] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`. They can be imported from 'zustand/traditional'. https://github.com/pmndrs/zustand/discussions/1937"),didWarnAboutEqualityFn=!0);let i=useSyncExternalStoreWithSelector(t.subscribe,t.getState,t.getServerState||t.getInitialState,r,n);return useDebugValue(i),i}var createImpl=t=>{"production"!==(import_meta3.env?import_meta3.env.MODE:void 0)&&"function"!=typeof t&&import_console_browserify.default.warn("[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.");let r="function"==typeof t?createStore(t):t,n=(t,n)=>useStore(r,t,n);return Object.assign(n,r),n},create=t=>t?createImpl(t):createImpl,react=t=>("production"!==(import_meta3.env?import_meta3.env.MODE:void 0)&&import_console_browserify.default.warn("[DEPRECATED] Default export is deprecated. Instead use `import { create } from 'zustand'`."),create(t)),{create:create2}=esm_exports,useBlackboardPreference=create2(t=>({markerVisible:!0,elementsVisible:!0,setMarkerVisible:r=>{t({markerVisible:r})},setTextsVisible:r=>{t({elementsVisible:r})}})),CONFIG_KEY="midscene-env-config",SERVICE_MODE_KEY="midscene-service-mode",TRACKING_ACTIVE_TAB_KEY="midscene-tracking-active-tab",DEEP_THINK_KEY="midscene-deep-think",getConfigStringFromLocalStorage=()=>localStorage.getItem(CONFIG_KEY)||"",parseConfig=t=>{let r=t.split("\n"),n={};return r.forEach(t=>{let r=t.trim();if(r.startsWith("#"))return;let i=r.replace(/^export\s+/i,"").replace(/;$/,"").trim().match(/^(\w+)=(.*)$/);if(i){let[,t,r]=i,a=r.trim();(a.startsWith("'")&&a.endsWith("'")||a.startsWith('"')&&a.endsWith('"'))&&(a=a.slice(1,-1)),n[t]=a}}),n},useEnvConfig=create2((t,r)=>{let n=getConfigStringFromLocalStorage(),i=parseConfig(n),a=window.location.href.startsWith("chrome-extension"),o=localStorage.getItem(SERVICE_MODE_KEY);return{serviceMode:a?"In-Browser-Extension":o||"Server",setServiceMode:r=>{if(a)throw Error("serviceMode cannot be set in extension");t({serviceMode:r}),localStorage.setItem(SERVICE_MODE_KEY,r)},config:i,configString:n,setConfig:r=>t({config:r}),loadConfig:r=>{t({config:parseConfig(r),configString:r}),localStorage.setItem(CONFIG_KEY,r)},syncFromStorage:()=>{let r=getConfigStringFromLocalStorage();t({config:parseConfig(r),configString:r})},forceSameTabNavigation:"false"!==localStorage.getItem(TRACKING_ACTIVE_TAB_KEY),setForceSameTabNavigation:r=>{t({forceSameTabNavigation:r}),localStorage.setItem(TRACKING_ACTIVE_TAB_KEY,r.toString())},deepThink:"true"===localStorage.getItem(DEEP_THINK_KEY),setDeepThink:r=>{t({deepThink:r}),localStorage.setItem(DEEP_THINK_KEY,r.toString())},popupTab:"playground",setPopupTab:r=>{t({popupTab:r})}}});init_globals();var elementColor=["#01204E"],highlightColorForSearchArea="#028391",highlightColorForElement="#fd5907";function djb2Hash(t){t||(t="unnamed");let r=5381;for(let n=0;n<t.length;n++)r=(r<<5)+r+t.charCodeAt(n);return r>>>0}function colorForName(t){return elementColor[djb2Hash(t)%elementColor.length]}function highlightColorForType(t){return"searchArea"===t?highlightColorForSearchArea:highlightColorForElement}function globalThemeConfig(){return{token:{colorPrimary:"#2B83FF"},components:{Layout:{headerHeight:60,headerPadding:"0 30px",headerBg:"#FFF",bodyBg:"#FFF"}}}}init_globals();var import_icons=__webpack_require__(8405),import_antd=__webpack_require__(1542),import_react3=__webpack_require__(4194),import_jsx_runtime=__toESM(require_jsx_runtime());function EnvConfig({showTooltipWhenEmpty:t=!0,showModelName:r=!0,tooltipPlacement:n="bottom",mode:i="icon"}){let{config:a,configString:o,loadConfig:s,syncFromStorage:l}=useEnvConfig(),[u,d]=(0,import_react3.useState)(!1),[c,h]=(0,import_react3.useState)(o),f=a.MIDSCENE_MODEL_NAME,p=(0,import_react3.useRef)(null),m=t=>{l(),d(!0),t.preventDefault(),t.stopPropagation()};return(0,import_react3.useEffect)(()=>{u&&h(o)},[u,o]),(0,import_jsx_runtime.jsxs)("div",{style:{display:"flex",justifyContent:"flex-end",gap:"10px",alignItems:"center",height:"100%",minHeight:"32px"},ref:p,children:[r?f:null,(0,import_jsx_runtime.jsx)(import_antd.Tooltip,{title:"Please set up your environment variables before using.",placement:n,align:{offset:[-10,5]},getPopupContainer:()=>p.current,open:!u&&(t?0===Object.keys(a).length:void 0),children:"icon"===i?(0,import_jsx_runtime.jsx)(import_icons.SettingOutlined,{onClick:m}):(0,import_jsx_runtime.jsx)("span",{onClick:m,style:{color:"#006AFF",cursor:"pointer"},children:"set up"})}),(0,import_jsx_runtime.jsxs)(import_antd.Modal,{title:"Model Env Config",open:u,onOk:()=>{d(!1),s(c)},onCancel:()=>{d(!1)},okText:"Save",style:{width:"800px",height:"100%",marginTop:"10%"},destroyOnClose:!0,maskClosable:!0,centered:!0,children:[(0,import_jsx_runtime.jsx)(import_antd.Input.TextArea,{rows:7,placeholder:"OPENAI_API_KEY=sk-...\nMIDSCENE_MODEL_NAME=gpt-4o-2024-08-06\n...",value:c,onChange:t=>h(t.target.value),style:{whiteSpace:"nowrap",wordWrap:"break-word"}}),(0,import_jsx_runtime.jsxs)("div",{children:[(0,import_jsx_runtime.jsx)("p",{children:"The format is KEY=VALUE and separated by new lines."}),(0,import_jsx_runtime.jsxs)("p",{children:["These data will be saved ",(0,import_jsx_runtime.jsx)("strong",{children:"locally in your browser"}),"."]})]})]})]})}init_globals();var import_jsx_runtime2=__toESM(require_jsx_runtime()),Logo=({hideLogo:t=!1})=>t?null:(0,import_jsx_runtime2.jsx)("div",{className:"logo",children:(0,import_jsx_runtime2.jsx)("a",{href:"https://midscenejs.com/",target:"_blank",rel:"noreferrer",children:(0,import_jsx_runtime2.jsx)("img",{alt:"Midscene_logo",src:"https://lf3-static.bytednsdoc.com/obj/eden-cn/vhaeh7vhabf/Midscene.png"})})});init_globals();var import_icons2=__webpack_require__(8405),import_jsx_runtime3=__toESM(require_jsx_runtime());function timeCostStrElement(t){let r;return r="number"!=typeof t?"-":`${(t/1e3).toFixed(2)}s`,(0,import_jsx_runtime3.jsx)("span",{style:{fontVariantNumeric:"tabular-nums",fontFeatureSettings:"tnum"},children:r})}var iconForStatus=t=>{switch(t){case"finished":case"passed":case"success":case"connected":return(0,import_jsx_runtime3.jsx)("span",{style:{color:"#00AD4B"},children:(0,import_jsx_runtime3.jsx)(import_icons2.CheckOutlined,{})});case"finishedWithWarning":return(0,import_jsx_runtime3.jsx)("span",{style:{color:"#f7bb05"},children:(0,import_jsx_runtime3.jsx)(import_icons2.WarningOutlined,{})});case"failed":case"closed":case"timedOut":case"interrupted":return(0,import_jsx_runtime3.jsx)("span",{style:{color:"#FF0A0A"},children:(0,import_jsx_runtime3.jsx)(import_icons2.CloseOutlined,{})});case"pending":return(0,import_jsx_runtime3.jsx)(import_icons2.ClockCircleOutlined,{});case"cancelled":case"skipped":return(0,import_jsx_runtime3.jsx)(import_icons2.LogoutOutlined,{});case"running":return(0,import_jsx_runtime3.jsx)(import_icons2.ArrowRightOutlined,{});default:return(0,import_jsx_runtime3.jsx)(import_icons2.MinusOutlined,{})}};init_globals();var import_react4=__webpack_require__(4194),useServerValid=(t=!0)=>{let[r,n]=(0,import_react4.useState)(!0),{serviceMode:i}=useEnvConfig();return(0,import_react4.useEffect)(()=>{let r=!1;if(t)return Promise.resolve((async()=>{for(;!r;)n(!!await checkServerStatus()),await new Promise(t=>setTimeout(t,1e3))})()),()=>{r=!0}},[i,t]),r};init_globals();var import_icons4=__webpack_require__(8405),import_antd5=__webpack_require__(1542);function generateShaderSyncPolyfill(){return syncShader}function syncShader(t,r,n){let i=t.gl,a=t.shader,o=a._getProgramData(r.glProgram);for(let s in r.groups){let l=r.groups[s];for(let u in l.resources){let d=l.resources[u];if(d instanceof UniformGroup)d.ubo?a.bindUniformBlock(d,r._uniformBindMap[s][u],n.blockIndex++):a.updateUniformGroup(d);else if(d instanceof BufferResource)a.bindUniformBlock(d,r._uniformBindMap[s][u],n.blockIndex++);else if(d instanceof TextureSource){t.texture.bind(d,n.textureCount);let a=r._uniformBindMap[s][u],l=o.uniformData[a];l&&(l.value!==n.textureCount&&i.uniform1i(l.location,n.textureCount),n.textureCount++)}}}}init_globals(),init_globals(),init_GlUboSystem(),init_GlShaderSystem(),init_GlUniformGroupSystem(),init_GpuUboSystem(),init_UboSystem(),init_AbstractRenderer(),init_globals(),init_BufferResource(),init_UniformGroup(),init_TextureSource(),init_TextureStyle(),init_globals(),init_createUboElementsSTD40(),init_createUboElementsWGSL(),init_uniformParsers(),init_globals();var uboParserFunctions=[(t,r,n,i,a)=>{let o=i[t].toArray(!0);r[n]=o[0],r[n+1]=o[1],r[n+2]=o[2],r[n+4]=o[3],r[n+5]=o[4],r[n+6]=o[5],r[n+8]=o[6],r[n+9]=o[7],r[n+10]=o[8]},(t,r,n,i,a)=>{a=i[t],r[n]=a.x,r[n+1]=a.y,r[n+2]=a.width,r[n+3]=a.height},(t,r,n,i,a)=>{a=i[t],r[n]=a.x,r[n+1]=a.y},(t,r,n,i,a)=>{a=i[t],r[n]=a.red,r[n+1]=a.green,r[n+2]=a.blue,r[n+3]=a.alpha},(t,r,n,i,a)=>{a=i[t],r[n]=a.red,r[n+1]=a.green,r[n+2]=a.blue}],uboSingleFunctionsWGSL={f32:(t,r,n,i,a)=>{r[n]=a},i32:(t,r,n,i,a)=>{r[n]=a},"vec2<f32>":(t,r,n,i,a)=>{r[n]=a[0],r[n+1]=a[1]},"vec3<f32>":(t,r,n,i,a)=>{r[n]=a[0],r[n+1]=a[1],r[n+2]=a[2]},"vec4<f32>":(t,r,n,i,a)=>{r[n]=a[0],r[n+1]=a[1],r[n+2]=a[2],r[n+3]=a[3]},"mat2x2<f32>":(t,r,n,i,a)=>{r[n]=a[0],r[n+1]=a[1],r[n+2]=a[2],r[n+3]=a[3]},"mat3x3<f32>":(t,r,n,i,a)=>{r[n]=a[0],r[n+1]=a[1],r[n+2]=a[2],r[n+4]=a[3],r[n+5]=a[4],r[n+6]=a[5],r[n+8]=a[6],r[n+9]=a[7],r[n+10]=a[8]},"mat4x4<f32>":(t,r,n,i,a)=>{for(let t=0;t<16;t++)r[n+t]=a[t]},"mat3x2<f32>":(t,r,n,i,a)=>{for(let t=0;t<6;t++)r[n+4*(t/3|0)+t%3]=a[t]},"mat4x2<f32>":(t,r,n,i,a)=>{for(let t=0;t<8;t++)r[n+4*(t/4|0)+t%4]=a[t]},"mat2x3<f32>":(t,r,n,i,a)=>{for(let t=0;t<6;t++)r[n+4*(t/2|0)+t%2]=a[t]},"mat4x3<f32>":(t,r,n,i,a)=>{for(let t=0;t<12;t++)r[n+4*(t/4|0)+t%4]=a[t]},"mat2x4<f32>":(t,r,n,i,a)=>{for(let t=0;t<8;t++)r[n+4*(t/2|0)+t%2]=a[t]},"mat3x4<f32>":(t,r,n,i,a)=>{for(let t=0;t<12;t++)r[n+4*(t/3|0)+t%3]=a[t]}},uboSingleFunctionsSTD40={f32:(t,r,n,i,a)=>{r[n]=a},i32:(t,r,n,i,a)=>{r[n]=a},"vec2<f32>":(t,r,n,i,a)=>{r[n]=a[0],r[n+1]=a[1]},"vec3<f32>":(t,r,n,i,a)=>{r[n]=a[0],r[n+1]=a[1],r[n+2]=a[2]},"vec4<f32>":(t,r,n,i,a)=>{r[n]=a[0],r[n+1]=a[1],r[n+2]=a[2],r[n+3]=a[3]},"mat2x2<f32>":(t,r,n,i,a)=>{r[n]=a[0],r[n+1]=a[1],r[n+4]=a[2],r[n+5]=a[3]},"mat3x3<f32>":(t,r,n,i,a)=>{r[n]=a[0],r[n+1]=a[1],r[n+2]=a[2],r[n+4]=a[3],r[n+5]=a[4],r[n+6]=a[5],r[n+8]=a[6],r[n+9]=a[7],r[n+10]=a[8]},"mat4x4<f32>":(t,r,n,i,a)=>{for(let t=0;t<16;t++)r[n+t]=a[t]},"mat3x2<f32>":(t,r,n,i,a)=>{for(let t=0;t<6;t++)r[n+4*(t/3|0)+t%3]=a[t]},"mat4x2<f32>":(t,r,n,i,a)=>{for(let t=0;t<8;t++)r[n+4*(t/4|0)+t%4]=a[t]},"mat2x3<f32>":(t,r,n,i,a)=>{for(let t=0;t<6;t++)r[n+4*(t/2|0)+t%2]=a[t]},"mat4x3<f32>":(t,r,n,i,a)=>{for(let t=0;t<12;t++)r[n+4*(t/4|0)+t%4]=a[t]},"mat2x4<f32>":(t,r,n,i,a)=>{for(let t=0;t<8;t++)r[n+4*(t/2|0)+t%2]=a[t]},"mat3x4<f32>":(t,r,n,i,a)=>{for(let t=0;t<12;t++)r[n+4*(t/3|0)+t%3]=a[t]}};function generateUboSyncPolyfillSTD40(t){return generateUboSyncPolyfill(t,uboSingleFunctionsSTD40,t=>{let r=Math.max(WGSL_TO_STD40_SIZE[t.data.type]/16,1),n=t.data.value.length/t.data.size,i=(4-n%4)%4;return(a,o,s,l,u)=>{let d=0;for(let a=0;a<t.data.size*r;a++){for(let t=0;t<n;t++)o[s++]=u[d++];s+=i}}})}function generateUboSyncPolyfillWGSL(t){return generateUboSyncPolyfill(t,uboSingleFunctionsWGSL,t=>{let{size:r,align:n}=WGSL_ALIGN_SIZE_DATA[t.data.type],i=(r-n)/4;return(n,a,o,s,l)=>{let u=0;for(let n=0;n<t.data.size*(r/4);n++){for(let t=0;t<r/4;t++)a[o++]=l[u++];o+=i}}})}function generateUboSyncPolyfill(t,r,n){let i={};for(let a in t){let o=t[a],s=o.data,l=!1;i[s.name]={offset:o.offset/4,func:null};for(let t=0;t<uniformParsers.length;t++){let r=uniformParsers[t];if(s.type===r.type&&r.test(s)){i[s.name].func=uboParserFunctions[t],l=!0;break}}l||(1===s.size?i[s.name].func=r[s.type]:i[s.name].func=n(o))}return(t,r,n)=>{for(let a in i)i[a].func(a,r,n+i[a].offset,t,t[a])}}init_globals(),init_uniformParsers(),init_globals();var uniformSingleParserFunctions={f32(t,r,n,i,a,o,s){n!==i&&(r.value=i,s.uniform1f(a[t].location,i))},"vec2<f32>"(t,r,n,i,a,o,s){n[0]===i[0]&&n[1]===i[1]||(n[0]=i[0],n[1]=i[1],s.uniform2f(a[t].location,i[0],i[1]))},"vec3<f32>"(t,r,n,i,a,o,s){n[0]===i[0]&&n[1]===i[1]&&n[2]===i[2]||(n[0]=i[0],n[1]=i[1],n[2]=i[2],s.uniform3f(a[t].location,i[0],i[1],i[2]))},"vec4<f32>"(t,r,n,i,a,o,s){n[0]===i[0]&&n[1]===i[1]&&n[2]===i[2]&&n[3]===i[3]||(n[0]=i[0],n[1]=i[1],n[2]=i[2],n[3]=i[3],s.uniform4f(a[t].location,i[0],i[1],i[2],i[3]))},i32(t,r,n,i,a,o,s){n!==i&&(r.value=i,s.uniform1i(a[t].location,i))},"vec2<i32>"(t,r,n,i,a,o,s){n[0]===i[0]&&n[1]===i[1]||(n[0]=i[0],n[1]=i[1],s.uniform2i(a[t].location,i[0],i[1]))},"vec3<i32>"(t,r,n,i,a,o,s){n[0]===i[0]&&n[1]===i[1]&&n[2]===i[2]||(n[0]=i[0],n[1]=i[1],n[2]=i[2],s.uniform3i(a[t].location,i[0],i[1],i[2]))},"vec4<i32>"(t,r,n,i,a,o,s){n[0]===i[0]&&n[1]===i[1]&&n[2]===i[2]&&n[3]===i[3]||(n[0]=i[0],n[1]=i[1],n[2]=i[2],n[3]=i[3],s.uniform4i(a[t].location,i[0],i[1],i[2],i[3]))},u32(t,r,n,i,a,o,s){n!==i&&(r.value=i,s.uniform1ui(a[t].location,i))},"vec2<u32>"(t,r,n,i,a,o,s){n[0]===i[0]&&n[1]===i[1]||(n[0]=i[0],n[1]=i[1],s.uniform2ui(a[t].location,i[0],i[1]))},"vec3<u32>"(t,r,n,i,a,o,s){n[0]===i[0]&&n[1]===i[1]&&n[2]===i[2]||(n[0]=i[0],n[1]=i[1],n[2]=i[2],s.uniform3ui(a[t].location,i[0],i[1],i[2]))},"vec4<u32>"(t,r,n,i,a,o,s){n[0]===i[0]&&n[1]===i[1]&&n[2]===i[2]&&n[3]===i[3]||(n[0]=i[0],n[1]=i[1],n[2]=i[2],n[3]=i[3],s.uniform4ui(a[t].location,i[0],i[1],i[2],i[3]))},bool(t,r,n,i,a,o,s){n!==i&&(r.value=i,s.uniform1i(a[t].location,i))},"vec2<bool>"(t,r,n,i,a,o,s){n[0]===i[0]&&n[1]===i[1]||(n[0]=i[0],n[1]=i[1],s.uniform2i(a[t].location,i[0],i[1]))},"vec3<bool>"(t,r,n,i,a,o,s){n[0]===i[0]&&n[1]===i[1]&&n[2]===i[2]||(n[0]=i[0],n[1]=i[1],n[2]=i[2],s.uniform3i(a[t].location,i[0],i[1],i[2]))},"vec4<bool>"(t,r,n,i,a,o,s){n[0]===i[0]&&n[1]===i[1]&&n[2]===i[2]&&n[3]===i[3]||(n[0]=i[0],n[1]=i[1],n[2]=i[2],n[3]=i[3],s.uniform4i(a[t].location,i[0],i[1],i[2],i[3]))},"mat2x2<f32>"(t,r,n,i,a,o,s){s.uniformMatrix2fv(a[t].location,!1,i)},"mat3x3<f32>"(t,r,n,i,a,o,s){s.uniformMatrix3fv(a[t].location,!1,i)},"mat4x4<f32>"(t,r,n,i,a,o,s){s.uniformMatrix4fv(a[t].location,!1,i)}},uniformArrayParserFunctions={f32(t,r,n,i,a,o,s){s.uniform1fv(a[t].location,i)},"vec2<f32>"(t,r,n,i,a,o,s){s.uniform2fv(a[t].location,i)},"vec3<f32>"(t,r,n,i,a,o,s){s.uniform3fv(a[t].location,i)},"vec4<f32>"(t,r,n,i,a,o,s){s.uniform4fv(a[t].location,i)},"mat2x2<f32>"(t,r,n,i,a,o,s){s.uniformMatrix2fv(a[t].location,!1,i)},"mat3x3<f32>"(t,r,n,i,a,o,s){s.uniformMatrix3fv(a[t].location,!1,i)},"mat4x4<f32>"(t,r,n,i,a,o,s){s.uniformMatrix4fv(a[t].location,!1,i)},i32(t,r,n,i,a,o,s){s.uniform1iv(a[t].location,i)},"vec2<i32>"(t,r,n,i,a,o,s){s.uniform2iv(a[t].location,i)},"vec3<i32>"(t,r,n,i,a,o,s){s.uniform3iv(a[t].location,i)},"vec4<i32>"(t,r,n,i,a,o,s){s.uniform4iv(a[t].location,i)},u32(t,r,n,i,a,o,s){s.uniform1iv(a[t].location,i)},"vec2<u32>"(t,r,n,i,a,o,s){s.uniform2iv(a[t].location,i)},"vec3<u32>"(t,r,n,i,a,o,s){s.uniform3iv(a[t].location,i)},"vec4<u32>"(t,r,n,i,a,o,s){s.uniform4iv(a[t].location,i)},bool(t,r,n,i,a,o,s){s.uniform1iv(a[t].location,i)},"vec2<bool>"(t,r,n,i,a,o,s){s.uniform2iv(a[t].location,i)},"vec3<bool>"(t,r,n,i,a,o,s){s.uniform3iv(a[t].location,i)},"vec4<bool>"(t,r,n,i,a,o,s){s.uniform4iv(a[t].location,i)}},uniformParserFunctions=[(t,r,n,i,a,o,s)=>{s.uniformMatrix3fv(a[t].location,!1,o[t].toArray(!0))},(t,r,n,i,a,o,s)=>{n=a[t].value,i=o[t],n[0]===i.x&&n[1]===i.y&&n[2]===i.width&&n[3]===i.height||(n[0]=i.x,n[1]=i.y,n[2]=i.width,n[3]=i.height,s.uniform4f(a[t].location,i.x,i.y,i.width,i.height))},(t,r,n,i,a,o,s)=>{n=a[t].value,i=o[t],n[0]===i.x&&n[1]===i.y||(n[0]=i.x,n[1]=i.y,s.uniform2f(a[t].location,i.x,i.y))},(t,r,n,i,a,o,s)=>{n=a[t].value,i=o[t],n[0]===i.red&&n[1]===i.green&&n[2]===i.blue&&n[3]===i.alpha||(n[0]=i.red,n[1]=i.green,n[2]=i.blue,n[3]=i.alpha,s.uniform4f(a[t].location,i.red,i.green,i.blue,i.alpha))},(t,r,n,i,a,o,s)=>{n=a[t].value,i=o[t],n[0]===i.red&&n[1]===i.green&&n[2]===i.blue||(n[0]=i.red,n[1]=i.green,n[2]=i.blue,s.uniform3f(a[t].location,i.red,i.green,i.blue))}];function generateUniformsSyncPolyfill(t,r){let n={};for(let i in t.uniformStructures){if(!r[i])continue;let a=t.uniformStructures[i],o=!1;for(let t=0;t<uniformParsers.length;t++){let r=uniformParsers[t];if(a.type===r.type&&r.test(a)){n[i]=uniformParserFunctions[t],o=!0;break}}if(!o){let t=1===a.size?uniformSingleParserFunctions:uniformArrayParserFunctions;n[i]=t[a.type]}}return(t,r,i)=>{let a=i.gl;for(let i in n){let o=r[i],s=t[i],l=t[i].value;n[i](i,s,l,o,t,r,a)}}}function selfInstall(){Object.assign(AbstractRenderer.prototype,{_unsafeEvalCheck(){}}),Object.assign(UboSystem.prototype,{_systemCheck(){}}),Object.assign(GlUniformGroupSystem.prototype,{_generateUniformsSync:generateUniformsSyncPolyfill}),Object.assign(GlUboSystem.prototype,{_generateUboSync:generateUboSyncPolyfillSTD40}),Object.assign(GpuUboSystem.prototype,{_generateUboSync:generateUboSyncPolyfillWGSL}),Object.assign(GlShaderSystem.prototype,{_generateShaderSync:generateShaderSyncPolyfill})}selfInstall(),init_globals(),init_globals(),init_Extensions();var browserExt={extension:{type:ExtensionType.Environment,name:"browser",priority:-1},test:()=>!0,load:async()=>{await Promise.resolve().then(()=>(init_browserAll(),browserAll_exports))}};init_globals(),init_Extensions();var webworkerExt={extension:{type:ExtensionType.Environment,name:"webworker",priority:0},test:()=>"undefined"!=typeof self&&void 0!==self.WorkerGlobalScope,load:async()=>{await Promise.resolve().then(()=>(init_webworkerAll(),webworkerAll_exports))}};init_Extensions(),init_init5(),init_init4(),init_globals(),init_Extensions(),init_globals(),init_globals(),init_Extensions();var _isWebGLSupported,_isWebGPUSupported,environments=[];async function autoDetectEnvironment(t){if(t)for(let t=0;t<environments.length;t++){let r=environments[t];if(r.value.test())return void await r.value.load()}}function isWebGLSupported(t){return void 0!==_isWebGLSupported?_isWebGLSupported:_isWebGLSupported=(()=>{let r={stencil:!0,failIfMajorPerformanceCaveat:t??AbstractRenderer.defaultOptions.failIfMajorPerformanceCaveat};try{if(!DOMAdapter.get().getWebGLRenderingContext())return!1;let t=DOMAdapter.get().createCanvas().getContext("webgl",r),n=!!t?.getContextAttributes()?.stencil;if(t){let r=t.getExtension("WEBGL_lose_context");r&&r.loseContext()}return t=null,n}catch(t){return!1}})()}async function isWebGPUSupported(t={}){return void 0!==_isWebGPUSupported?_isWebGPUSupported:_isWebGPUSupported=await (async()=>{if(!DOMAdapter.get().getNavigator().gpu)return!1;try{let r=await navigator.gpu.requestAdapter(t);return await r.requestDevice(),!0}catch(t){return!1}})()}extensions.handleByNamedList(ExtensionType.Environment,environments),init_globals(),init_adapter(),init_AbstractRenderer(),init_globals(),init_adapter(),init_AbstractRenderer();var renderPriority=["webgl","webgpu","canvas"];async function autoDetectRenderer(t){let r,n=[];t.preference?(n.push(t.preference),renderPriority.forEach(r=>{r!==t.preference&&n.push(r)})):n=renderPriority.slice(),await autoDetectEnvironment(t.manageImports??!0);let i={};for(let a=0;a<n.length;a++){let o=n[a];if("webgpu"===o&&await isWebGPUSupported()){let{WebGPURenderer:n}=await Promise.resolve().then(()=>(init_WebGPURenderer(),WebGPURenderer_exports));r=n,i={...t,...t.webgpu};break}if("webgl"===o&&isWebGLSupported(t.failIfMajorPerformanceCaveat??AbstractRenderer.defaultOptions.failIfMajorPerformanceCaveat)){let{WebGLRenderer:n}=await Promise.resolve().then(()=>(init_WebGLRenderer(),WebGLRenderer_exports));r=n,i={...t,...t.webgl};break}if("canvas"===o)throw i={...t},Error("CanvasRenderer is not yet implemented")}if(delete i.webgpu,delete i.webgl,!r)throw Error("No available renderer for the current environment");let a=new r;return await a.init(i),a}init_Container(),init_deprecation();var _Application=class e{constructor(...t){this.stage=new Container,void 0!==t[0]&&deprecation(v8_0_0,"Application constructor options are deprecated, please use Application.init() instead.")}async init(t){t={...t},this.renderer=await autoDetectRenderer(t),e._plugins.forEach(r=>{r.init.call(this,t)})}render(){this.renderer.render({container:this.stage})}get canvas(){return this.renderer.canvas}get view(){return deprecation(v8_0_0,"Application.view is deprecated, please use Application.canvas instead."),this.renderer.canvas}get screen(){return this.renderer.screen}destroy(t=!1,r=!1){let n=e._plugins.slice(0);n.reverse(),n.forEach(t=>{t.destroy.call(this)}),this.stage.destroy(r),this.stage=null,this.renderer.destroy(t),this.renderer=null}};_Application._plugins=[];var Application=_Application;extensions.handleByList(ExtensionType.Application,Application._plugins),init_globals(),init_Extensions(),init_warn2(),init_globals();var BackgroundLoader=class{constructor(t,r=!1){this._loader=t,this._assetList=[],this._isLoading=!1,this._maxConcurrent=1,this.verbose=r}add(t){t.forEach(t=>{this._assetList.push(t)}),this.verbose&&import_console_browserify.default.log("[BackgroundLoader] assets: ",this._assetList),this._isActive&&!this._isLoading&&this._next()}async _next(){if(this._assetList.length&&this._isActive){this._isLoading=!0;let t=[],r=Math.min(this._assetList.length,this._maxConcurrent);for(let n=0;n<r;n++)t.push(this._assetList.pop());await this._loader.load(t),this._isLoading=!1,this._next()}}get active(){return this._isActive}set active(t){this._isActive!==t&&(this._isActive=t,t&&!this._isLoading&&this._next())}};init_Cache(),init_globals(),init_Extensions(),init_Texture();var cacheTextureArray={extension:ExtensionType.CacheParser,test:t=>Array.isArray(t)&&t.every(t=>t instanceof Texture),getCacheableAssets:(t,r)=>{let n={};return t.forEach(t=>{r.forEach((r,i)=>{n[t+(0===i?"":i+1)]=r})}),n}};async function testImageFormat(t){if("Image"in globalThis)return new Promise(r=>{let n=new Image;n.onload=()=>{r(!0)},n.onerror=()=>{r(!1)},n.src=t});if("createImageBitmap"in globalThis&&"fetch"in globalThis){try{let r=await (await fetch(t)).blob();await createImageBitmap(r)}catch(t){return!1}return!0}return!1}init_globals(),init_Extensions(),init_globals();var detectAvif={extension:{type:ExtensionType.DetectionParser,priority:1},test:async()=>testImageFormat("data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A="),add:async t=>[...t,"avif"],remove:async t=>t.filter(t=>"avif"!==t)};init_globals(),init_Extensions();var imageFormats=["png","jpg","jpeg"],detectDefaults={extension:{type:ExtensionType.DetectionParser,priority:-1},test:()=>Promise.resolve(!0),add:async t=>[...t,...imageFormats],remove:async t=>t.filter(t=>!imageFormats.includes(t))};init_globals(),init_Extensions(),init_globals();var inWorker="WorkerGlobalScope"in globalThis&&globalThis instanceof globalThis.WorkerGlobalScope;function testVideoFormat(t){return!inWorker&&""!==document.createElement("video").canPlayType(t)}var detectMp4={extension:{type:ExtensionType.DetectionParser,priority:0},test:async()=>testVideoFormat("video/mp4"),add:async t=>[...t,"mp4","m4v"],remove:async t=>t.filter(t=>"mp4"!==t&&"m4v"!==t)};init_globals(),init_Extensions();var detectOgv={extension:{type:ExtensionType.DetectionParser,priority:0},test:async()=>testVideoFormat("video/ogg"),add:async t=>[...t,"ogv"],remove:async t=>t.filter(t=>"ogv"!==t)};init_globals(),init_Extensions();var detectWebm={extension:{type:ExtensionType.DetectionParser,priority:0},test:async()=>testVideoFormat("video/webm"),add:async t=>[...t,"webm"],remove:async t=>t.filter(t=>"webm"!==t)};init_globals(),init_Extensions();var detectWebp={extension:{type:ExtensionType.DetectionParser,priority:0},test:async()=>testImageFormat("data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA="),add:async t=>[...t,"webp"],remove:async t=>t.filter(t=>"webp"!==t)};init_globals(),init_warn2(),init_path(),init_convertToList(),init_isSingleItem();var Loader=class{constructor(){this._parsers=[],this._parsersValidated=!1,this.parsers=new Proxy(this._parsers,{set:(t,r,n)=>(this._parsersValidated=!1,t[r]=n,!0)}),this.promiseCache={}}reset(){this._parsersValidated=!1,this.promiseCache={}}_getLoadPromiseAndParser(t,r){let n={promise:null,parser:null};return n.promise=(async()=>{let i=null,a=null;if(r.loadParser&&((a=this._parserHash[r.loadParser])||warn(`[Assets] specified load parser "${r.loadParser}" not found while loading ${t}`)),!a){for(let n=0;n<this.parsers.length;n++){let i=this.parsers[n];if(i.load&&i.test?.(t,r,this)){a=i;break}}if(!a)return warn(`[Assets] ${t} could not be loaded as we don't know how to parse it, ensure the correct parser has been added`),null}i=await a.load(t,r,this),n.parser=a;for(let t=0;t<this.parsers.length;t++){let a=this.parsers[t];a.parse&&a.parse&&await a.testParse?.(i,r,this)&&(i=await a.parse(i,r,this)||i,n.parser=a)}return i})(),n}async load(t,r){this._parsersValidated||this._validateParsers();let n=0,i={},a=isSingleItem(t),o=convertToList(t,t=>({alias:[t],src:t})),s=o.length,l=o.map(async t=>{let a=path.toAbsolute(t.src);if(!i[t.src])try{this.promiseCache[a]||(this.promiseCache[a]=this._getLoadPromiseAndParser(a,t)),i[t.src]=await this.promiseCache[a].promise,r&&r(++n/s)}catch(r){throw delete this.promiseCache[a],delete i[t.src],Error(`[Loader.load] Failed to load ${a}.
|
|
906
877
|
${r}`)}});return await Promise.all(l),a?i[o[0].src]:i}async unload(t){let r=convertToList(t,t=>({alias:[t],src:t})).map(async t=>{let r=path.toAbsolute(t.src),n=this.promiseCache[r];if(n){let i=await n.promise;delete this.promiseCache[r],await n.parser?.unload?.(i,t,this)}});await Promise.all(r)}_validateParsers(){this._parsersValidated=!0,this._parserHash=this._parsers.filter(t=>t.name).reduce((t,r)=>(r.name?t[r.name]&&warn(`[Assets] loadParser name conflict "${r.name}"`):warn("[Assets] loadParser should have a name"),{...t,[r.name]:r}),{})}};function checkDataUrl(t,r){if(Array.isArray(r)){for(let n of r)if(t.startsWith(`data:${n}`))return!0;return!1}return t.startsWith(`data:${r}`)}function checkExtension(t,r){let n=t.split("?")[0],i=path.extname(n).toLowerCase();return Array.isArray(r)?r.includes(i):i===r}init_globals(),init_adapter(),init_Extensions(),init_globals(),init_globals(),init_path(),init_LoaderParser();var validJSONExtension=".json",validJSONMIME="application/json",loadJson={extension:{type:ExtensionType.LoadParser,priority:LoaderParserPriority.Low},name:"loadJson",test:t=>checkDataUrl(t,validJSONMIME)||checkExtension(t,validJSONExtension),async load(t){let r=await DOMAdapter.get().fetch(t);return await r.json()}};init_globals(),init_adapter(),init_Extensions(),init_LoaderParser();var validTXTExtension=".txt",validTXTMIME="text/plain",loadTxt={name:"loadTxt",extension:{type:ExtensionType.LoadParser,priority:LoaderParserPriority.Low},test:t=>checkDataUrl(t,validTXTMIME)||checkExtension(t,validTXTExtension),async load(t){let r=await DOMAdapter.get().fetch(t);return await r.text()}};init_globals(),init_adapter(),init_Extensions(),init_warn2(),init_path(),init_Cache(),init_LoaderParser();var validWeights=["normal","bold","100","200","300","400","500","600","700","800","900"],validFontExtensions=[".ttf",".otf",".woff",".woff2"],validFontMIMEs=["font/ttf","font/otf","font/woff","font/woff2"],CSS_IDENT_TOKEN_REGEX=/^(--|-?[A-Z_])[0-9A-Z_-]*$/i;function getFontFamilyName(t){let r=path.extname(t),n=path.basename(t,r).replace(/(-|_)/g," ").toLowerCase().split(" ").map(t=>t.charAt(0).toUpperCase()+t.slice(1)),i=n.length>0;for(let t of n)if(!t.match(CSS_IDENT_TOKEN_REGEX)){i=!1;break}let a=n.join(" ");return i||(a=`"${a.replace(/[\\"]/g,"\\$&")}"`),a}var validURICharactersRegex=/^[0-9A-Za-z%:/?#\[\]@!\$&'()\*\+,;=\-._~]*$/;function encodeURIWhenNeeded(t){return validURICharactersRegex.test(t)?t:encodeURI(t)}var loadWebFont={extension:{type:ExtensionType.LoadParser,priority:LoaderParserPriority.Low},name:"loadWebFont",test:t=>checkDataUrl(t,validFontMIMEs)||checkExtension(t,validFontExtensions),async load(t,r){let n=DOMAdapter.get().getFontFaceSet();if(n){let i=[],a=r.data?.family??getFontFamilyName(t),o=r.data?.weights?.filter(t=>validWeights.includes(t))??["normal"],s=r.data??{};for(let r=0;r<o.length;r++){let l=o[r],u=new FontFace(a,`url(${encodeURIWhenNeeded(t)})`,{...s,weight:l});await u.load(),n.add(u),i.push(u)}return Cache.set(`${a}-and-url`,{url:t,fontFaces:i}),1===i.length?i[0]:i}return warn("[loadWebFont] FontFace API is not supported. Skipping loading font"),null},unload(t){(Array.isArray(t)?t:[t]).forEach(t=>{Cache.remove(t.family),DOMAdapter.get().getFontFaceSet().delete(t)})}};function getResolutionOfUrl(t,r=1){let n=Resolver.RETINA_PREFIX?.exec(t);return n?parseFloat(n[1]):r}function createTexture(t,r,n){t.label=n,t._sourceOrigin=n;let i=new Texture({source:t,label:n}),a=()=>{delete r.promiseCache[n],Cache.has(n)&&Cache.remove(n)};return i.source.once("destroy",()=>{r.promiseCache[n]&&(warn("[Assets] A TextureSource managed by Assets was destroyed instead of unloaded! Use Assets.unload() instead of destroying the TextureSource."),a())}),i.once("destroy",()=>{t.destroyed||(warn("[Assets] A Texture managed by Assets was destroyed instead of unloaded! Use Assets.unload() instead of destroying the Texture."),a())}),i}init_globals(),init_adapter(),init_Extensions(),init_ImageSource(),init_GraphicsContext(),init_globals(),init_Resolver(),init_LoaderParser(),init_globals(),init_Texture(),init_warn2(),init_Cache();var validSVGExtension=".svg",validSVGMIME="image/svg+xml",loadSvg={extension:{type:ExtensionType.LoadParser,priority:LoaderParserPriority.Low},name:"loadSVG",config:{crossOrigin:"anonymous",parseAsGraphicsContext:!1},test:t=>checkDataUrl(t,validSVGMIME)||checkExtension(t,validSVGExtension),async load(t,r,n){return r.data.parseAsGraphicsContext??this.config.parseAsGraphicsContext?loadAsGraphics(t):loadAsTexture(t,r,n,this.config.crossOrigin)},unload(t){t.destroy(!0)}};async function loadAsTexture(t,r,n,i){let a=await DOMAdapter.get().fetch(t),o=await a.blob(),s=URL.createObjectURL(o),l=new Image;l.src=s,l.crossOrigin=i,await l.decode(),URL.revokeObjectURL(s);let u=document.createElement("canvas"),d=u.getContext("2d"),c=r.data?.resolution||getResolutionOfUrl(t),h=r.data?.width??l.width,f=r.data?.height??l.height;u.width=h*c,u.height=f*c,d.drawImage(l,0,0,h*c,f*c);let{parseAsGraphicsContext:p,...m}=r.data;return createTexture(new ImageSource({resource:u,alphaMode:"premultiply-alpha-on-upload",resolution:c,...m}),n,t)}async function loadAsGraphics(t){let r=await DOMAdapter.get().fetch(t),n=await r.text(),i=new GraphicsContext;return i.svg(n),i}init_globals(),init_adapter(),init_Extensions(),init_ImageSource(),init_globals(),init_globals();var WORKER_CODE='(function () {\n \'use strict\';\n\n const WHITE_PNG = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+ip1sAAAAASUVORK5CYII=";\n async function checkImageBitmap() {\n try {\n if (typeof createImageBitmap !== "function")\n return false;\n const response = await fetch(WHITE_PNG);\n const imageBlob = await response.blob();\n const imageBitmap = await createImageBitmap(imageBlob);\n return imageBitmap.width === 1 && imageBitmap.height === 1;\n } catch (e) {\n return false;\n }\n }\n void checkImageBitmap().then((result) => {\n self.postMessage(result);\n });\n\n})();\n',WORKER_URL=null,WorkerInstance=class{constructor(){WORKER_URL||(WORKER_URL=URL.createObjectURL(new Blob([WORKER_CODE],{type:"application/javascript"}))),this.worker=new Worker(WORKER_URL)}};WorkerInstance.revokeObjectURL=function(){WORKER_URL&&(URL.revokeObjectURL(WORKER_URL),WORKER_URL=null)},init_globals();var WORKER_CODE2="(function () {\n 'use strict';\n\n async function loadImageBitmap(url) {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`[WorkerManager.loadImageBitmap] Failed to fetch ${url}: ${response.status} ${response.statusText}`);\n }\n const imageBlob = await response.blob();\n const imageBitmap = await createImageBitmap(imageBlob);\n return imageBitmap;\n }\n self.onmessage = async (event) => {\n try {\n const imageBitmap = await loadImageBitmap(event.data.data[0]);\n self.postMessage({\n data: imageBitmap,\n uuid: event.data.uuid,\n id: event.data.id\n }, [imageBitmap]);\n } catch (e) {\n self.postMessage({\n error: e,\n uuid: event.data.uuid,\n id: event.data.id\n });\n }\n };\n\n})();\n",WORKER_URL2=null,WorkerInstance2=class{constructor(){WORKER_URL2||(WORKER_URL2=URL.createObjectURL(new Blob([WORKER_CODE2],{type:"application/javascript"}))),this.worker=new Worker(WORKER_URL2)}};WorkerInstance2.revokeObjectURL=function(){WORKER_URL2&&(URL.revokeObjectURL(WORKER_URL2),WORKER_URL2=null)};var MAX_WORKERS,UUID=0,WorkerManagerClass=class{constructor(){this._initialized=!1,this._createdWorkers=0,this._workerPool=[],this._queue=[],this._resolveHash={}}isImageBitmapSupported(){return void 0!==this._isImageBitmapSupported||(this._isImageBitmapSupported=new Promise(t=>{let{worker:r}=new WorkerInstance;r.addEventListener("message",n=>{r.terminate(),WorkerInstance.revokeObjectURL(),t(n.data)})})),this._isImageBitmapSupported}loadImageBitmap(t){return this._run("loadImageBitmap",[t])}async _initWorkers(){this._initialized||(this._initialized=!0)}_getWorker(){void 0===MAX_WORKERS&&(MAX_WORKERS=navigator.hardwareConcurrency||4);let t=this._workerPool.pop();return!t&&this._createdWorkers<MAX_WORKERS&&(this._createdWorkers++,(t=(new WorkerInstance2).worker).addEventListener("message",t=>{this._complete(t.data),this._returnWorker(t.target),this._next()})),t}_returnWorker(t){this._workerPool.push(t)}_complete(t){void 0!==t.error?this._resolveHash[t.uuid].reject(t.error):this._resolveHash[t.uuid].resolve(t.data),this._resolveHash[t.uuid]=null}async _run(t,r){await this._initWorkers();let n=new Promise((n,i)=>{this._queue.push({id:t,arguments:r,resolve:n,reject:i})});return this._next(),n}_next(){if(!this._queue.length)return;let t=this._getWorker();if(!t)return;let r=this._queue.pop(),n=r.id;this._resolveHash[UUID]={resolve:r.resolve,reject:r.reject},t.postMessage({data:r.arguments,uuid:UUID++,id:n})}},WorkerManager=new WorkerManagerClass;init_LoaderParser();var validImageExtensions=[".jpeg",".jpg",".png",".webp",".avif"],validImageMIMEs=["image/jpeg","image/png","image/webp","image/avif"];async function loadImageBitmap(t){let r=await DOMAdapter.get().fetch(t);if(!r.ok)throw Error(`[loadImageBitmap] Failed to fetch ${t}: ${r.status} ${r.statusText}`);let n=await r.blob();return await createImageBitmap(n)}var loadTextures={name:"loadTextures",extension:{type:ExtensionType.LoadParser,priority:LoaderParserPriority.High},config:{preferWorkers:!0,preferCreateImageBitmap:!0,crossOrigin:"anonymous"},test:t=>checkDataUrl(t,validImageMIMEs)||checkExtension(t,validImageExtensions),async load(t,r,n){let i=null;return i=globalThis.createImageBitmap&&this.config.preferCreateImageBitmap?this.config.preferWorkers&&await WorkerManager.isImageBitmapSupported()?await WorkerManager.loadImageBitmap(t):await loadImageBitmap(t):await new Promise(r=>{(i=new Image).crossOrigin=this.config.crossOrigin,i.src=t,i.complete?r(i):i.onload=()=>{r(i)}}),createTexture(new ImageSource({resource:i,alphaMode:"premultiply-alpha-on-upload",resolution:r.data?.resolution||getResolutionOfUrl(t),...r.data}),n,t)},unload(t){t.destroy(!0)}};init_globals(),init_Extensions(),init_VideoSource(),init_detectVideoAlphaMode();var validVideoExtensions=[".mp4",".m4v",".webm",".ogg",".ogv",".h264",".avi",".mov"],validVideoMIMEs=validVideoExtensions.map(t=>`video/${t.substring(1)}`);function crossOrigin(t,r,n){void 0!==n||r.startsWith("data:")?!1!==n&&(t.crossOrigin="string"==typeof n?n:"anonymous"):t.crossOrigin=determineCrossOrigin(r)}function preloadVideo(t){return new Promise((r,n)=>{function i(){o(),r()}function a(t){o(),n(t)}function o(){t.removeEventListener("canplaythrough",i),t.removeEventListener("error",a)}t.addEventListener("canplaythrough",i),t.addEventListener("error",a),t.load()})}function determineCrossOrigin(t,r=globalThis.location){if(t.startsWith("data:"))return"";r=r||globalThis.location;let n=new URL(t,document.baseURI);return n.hostname!==r.hostname||n.port!==r.port||n.protocol!==r.protocol?"anonymous":""}var loadVideoTextures={name:"loadVideo",extension:{type:ExtensionType.LoadParser},config:null,test(t){let r=checkDataUrl(t,validVideoMIMEs),n=checkExtension(t,validVideoExtensions);return r||n},async load(t,r,n){let i,a={...VideoSource.defaultOptions,resolution:r.data?.resolution||getResolutionOfUrl(t),alphaMode:r.data?.alphaMode||await detectVideoAlphaMode(),...r.data},o=document.createElement("video"),s={preload:!1!==a.autoLoad?"auto":void 0,"webkit-playsinline":!1!==a.playsinline?"":void 0,playsinline:!1!==a.playsinline?"":void 0,muted:!0===a.muted?"":void 0,loop:!0===a.loop?"":void 0,autoplay:!1!==a.autoPlay?"":void 0};Object.keys(s).forEach(t=>{let r=s[t];void 0!==r&&o.setAttribute(t,r)}),!0===a.muted&&(o.muted=!0),crossOrigin(o,t,a.crossorigin);let l=document.createElement("source");if(t.startsWith("data:"))i=t.slice(5,t.indexOf(";"));else if(!t.startsWith("blob:")){let r=t.split("?")[0].slice(t.lastIndexOf(".")+1).toLowerCase();i=VideoSource.MIME_TYPES[r]||`video/${r}`}return l.src=t,i&&(l.type=i),new Promise(i=>{let s=async()=>{let l=new VideoSource({...a,resource:o});o.removeEventListener("canplay",s),r.data.preload&&await preloadVideo(o),i(createTexture(l,n,t))};o.addEventListener("canplay",s),o.appendChild(l)})},unload(t){t.destroy(!0)}};init_globals(),init_Extensions(),init_Resolver(),init_globals(),init_Extensions(),init_Resolver();var resolveTextureUrl={extension:ExtensionType.ResolveParser,test:loadTextures.test,parse:t=>({resolution:parseFloat(Resolver.RETINA_PREFIX.exec(t)?.[1]??"1"),format:t.split(".").pop(),src:t})},resolveJsonUrl={extension:ExtensionType.ResolveParser,test:t=>Resolver.RETINA_PREFIX.test(t)&&t.endsWith(".json"),parse:resolveTextureUrl.parse};init_Resolver(),init_convertToList(),init_isSingleItem();var AssetsClass=class{constructor(){this._detections=[],this._initialized=!1,this.resolver=new Resolver,this.loader=new Loader,this.cache=Cache,this._backgroundLoader=new BackgroundLoader(this.loader),this._backgroundLoader.active=!0,this.reset()}async init(t={}){if(this._initialized)return void warn("[Assets]AssetManager already initialized, did you load before calling this Assets.init()?");if(this._initialized=!0,t.defaultSearchParams&&this.resolver.setDefaultSearchParams(t.defaultSearchParams),t.basePath&&(this.resolver.basePath=t.basePath),t.bundleIdentifier&&this.resolver.setBundleIdentifier(t.bundleIdentifier),t.manifest){let r=t.manifest;"string"==typeof r&&(r=await this.load(r)),this.resolver.addManifest(r)}let r=t.texturePreference?.resolution??1,n="number"==typeof r?[r]:r,i=await this._detectFormats({preferredFormats:t.texturePreference?.format,skipDetections:t.skipDetections,detections:this._detections});this.resolver.prefer({params:{format:i,resolution:n}}),t.preferences&&this.setPreferences(t.preferences)}add(t){this.resolver.add(t)}async load(t,r){this._initialized||await this.init();let n=isSingleItem(t),i=convertToList(t).map(t=>{if("string"!=typeof t){let r=this.resolver.getAlias(t);return r.some(t=>!this.resolver.hasKey(t))&&this.add(t),Array.isArray(r)?r[0]:r}return this.resolver.hasKey(t)||this.add({alias:t,src:t}),t}),a=this.resolver.resolve(i),o=await this._mapLoadToResolve(a,r);return n?o[i[0]]:o}addBundle(t,r){this.resolver.addBundle(t,r)}async loadBundle(t,r){this._initialized||await this.init();let n=!1;"string"==typeof t&&(n=!0,t=[t]);let i=this.resolver.resolveBundle(t),a={},o=Object.keys(i),s=0,l=0,u=()=>{r?.(++s/l)},d=o.map(t=>{let r=i[t];return l+=Object.keys(r).length,this._mapLoadToResolve(r,u).then(r=>{a[t]=r})});return await Promise.all(d),n?a[t[0]]:a}async backgroundLoad(t){this._initialized||await this.init(),"string"==typeof t&&(t=[t]);let r=this.resolver.resolve(t);this._backgroundLoader.add(Object.values(r))}async backgroundLoadBundle(t){this._initialized||await this.init(),"string"==typeof t&&(t=[t]),Object.values(this.resolver.resolveBundle(t)).forEach(t=>{this._backgroundLoader.add(Object.values(t))})}reset(){this.resolver.reset(),this.loader.reset(),this.cache.reset(),this._initialized=!1}get(t){if("string"==typeof t)return Cache.get(t);let r={};for(let n=0;n<t.length;n++)r[n]=Cache.get(t[n]);return r}async _mapLoadToResolve(t,r){let n=[...new Set(Object.values(t))];this._backgroundLoader.active=!1;let i=await this.loader.load(n,r);this._backgroundLoader.active=!0;let a={};return n.forEach(t=>{let r=i[t.src],n=[t.src];t.alias&&n.push(...t.alias),n.forEach(t=>{a[t]=r}),Cache.set(n,r)}),a}async unload(t){this._initialized||await this.init();let r=convertToList(t).map(t=>"string"!=typeof t?t.src:t),n=this.resolver.resolve(r);await this._unloadFromResolved(n)}async unloadBundle(t){this._initialized||await this.init(),t=convertToList(t);let r=this.resolver.resolveBundle(t),n=Object.keys(r).map(t=>this._unloadFromResolved(r[t]));await Promise.all(n)}async _unloadFromResolved(t){let r=Object.values(t);r.forEach(t=>{Cache.remove(t.src)}),await this.loader.unload(r)}async _detectFormats(t){let r=[];for(let n of(t.preferredFormats&&(r=Array.isArray(t.preferredFormats)?t.preferredFormats:[t.preferredFormats]),t.detections))t.skipDetections||await n.test()?r=await n.add(r):t.skipDetections||(r=await n.remove(r));return r=r.filter((t,n)=>r.indexOf(t)===n)}get detections(){return this._detections}setPreferences(t){this.loader.parsers.forEach(r=>{r.config&&Object.keys(r.config).filter(r=>r in t).forEach(n=>{r.config[n]=t[n]})})}},Assets=new AssetsClass;extensions.handleByList(ExtensionType.LoadParser,Assets.loader.parsers).handleByList(ExtensionType.ResolveParser,Assets.resolver.parsers).handleByList(ExtensionType.CacheParser,Assets.cache.parsers).handleByList(ExtensionType.DetectionParser,Assets.detections),extensions.add(cacheTextureArray,detectDefaults,detectAvif,detectWebp,detectMp4,detectOgv,detectWebm,loadJson,loadTxt,loadWebFont,loadSvg,loadTextures,loadVideoTextures,resolveTextureUrl,resolveJsonUrl);var assetKeyMap={loader:ExtensionType.LoadParser,resolver:ExtensionType.ResolveParser,cache:ExtensionType.CacheParser,detection:ExtensionType.DetectionParser};extensions.handle(ExtensionType.Asset,t=>{let r=t.ref;Object.entries(assetKeyMap).filter(([t])=>!!r[t]).forEach(([t,n])=>extensions.add(Object.assign(r[t],{extension:r[t].extension??n})))},t=>{let r=t.ref;Object.keys(assetKeyMap).filter(t=>!!r[t]).forEach(t=>extensions.remove(r[t]))}),init_globals(),init_GlProgram(),init_GpuProgram(),init_UniformGroup(),init_Filter(),init_globals();var vertex2="in vec2 aPosition;\nout vec2 vTextureCoord;\n\nuniform vec4 uInputSize;\nuniform vec4 uOutputFrame;\nuniform vec4 uOutputTexture;\n\nvec4 filterVertexPosition( void )\n{\n vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;\n \n position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0*uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;\n\n return vec4(position, 0.0, 1.0);\n}\n\nvec2 filterTextureCoord( void )\n{\n return aPosition * (uOutputFrame.zw * uInputSize.zw);\n}\n\nvoid main(void)\n{\n gl_Position = filterVertexPosition();\n vTextureCoord = filterTextureCoord();\n}\n";init_globals();var fragment2="\nin vec2 vTextureCoord;\n\nout vec4 finalColor;\n\nuniform float uAlpha;\nuniform sampler2D uTexture;\n\nvoid main()\n{\n finalColor = texture(uTexture, vTextureCoord) * uAlpha;\n}\n";init_globals();var source2="struct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\nstruct AlphaUniforms {\n uAlpha:f32,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n@group(0) @binding(1) var uTexture: texture_2d<f32>;\n@group(0) @binding(2) var uSampler : sampler;\n\n@group(1) @binding(0) var<uniform> alphaUniforms : AlphaUniforms;\n\nstruct VSOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n };\n\nfn filterVertexPosition(aPosition:vec2<f32>) -> vec4<f32>\n{\n var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;\n\n position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0*gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;\n\n return vec4(position, 0.0, 1.0);\n}\n\nfn filterTextureCoord( aPosition:vec2<f32> ) -> vec2<f32>\n{\n return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);\n}\n\nfn globalTextureCoord( aPosition:vec2<f32> ) -> vec2<f32>\n{\n return (aPosition.xy / gfu.uGlobalFrame.zw) + (gfu.uGlobalFrame.xy / gfu.uGlobalFrame.zw); \n}\n\nfn getSize() -> vec2<f32>\n{\n return gfu.uGlobalFrame.zw;\n}\n \n@vertex\nfn mainVertex(\n @location(0) aPosition : vec2<f32>, \n) -> VSOutput {\n return VSOutput(\n filterVertexPosition(aPosition),\n filterTextureCoord(aPosition)\n );\n}\n\n@fragment\nfn mainFragment(\n @location(0) uv: vec2<f32>,\n @builtin(position) position: vec4<f32>\n) -> @location(0) vec4<f32> {\n \n var sample = textureSample(uTexture, uSampler, uv);\n \n return sample * alphaUniforms.uAlpha;\n}",_AlphaFilter=class e extends Filter{constructor(t){t={...e.defaultOptions,...t};let r=GpuProgram.from({vertex:{source:source2,entryPoint:"mainVertex"},fragment:{source:source2,entryPoint:"mainFragment"}}),n=GlProgram.from({vertex:vertex2,fragment:fragment2,name:"alpha-filter"}),{alpha:i,...a}=t;super({...a,gpuProgram:r,glProgram:n,resources:{alphaUniforms:new UniformGroup({uAlpha:{value:i,type:"f32"}})}})}get alpha(){return this.resources.alphaUniforms.uniforms.uAlpha}set alpha(t){this.resources.alphaUniforms.uniforms.uAlpha=t}};_AlphaFilter.defaultOptions={alpha:1};var AlphaFilter=_AlphaFilter;init_globals(),init_TexturePool(),init_types2(),init_Filter(),init_globals(),init_GlProgram(),init_globals(),init_globals();var GAUSSIAN_VALUES={5:[.153388,.221461,.250301],7:[.071303,.131514,.189879,.214607],9:[.028532,.067234,.124009,.179044,.20236],11:[.0093,.028002,.065984,.121703,.175713,.198596],13:[.002406,.009255,.027867,.065666,.121117,.174868,.197641],15:[489e-6,.002403,.009246,.02784,.065602,.120999,.174697,.197448]},fragTemplate="in vec2 vBlurTexCoords[%size%];\nuniform sampler2D uTexture;\nout vec4 finalColor;\nvoid main(void)\n{\n finalColor = vec4(0.0);\n %blur%\n}";function generateBlurFragSource(t){let r,n=GAUSSIAN_VALUES[t],i=n.length,a=fragTemplate,o="";for(let a=0;a<t;a++){let s="finalColor += texture(uTexture, vBlurTexCoords[%index%]) * %value%;".replace("%index%",a.toString());r=a,a>=i&&(r=t-a-1),o+=s=s.replace("%value%",n[r].toString()),o+="\n"}return(a=a.replace("%blur%",o)).replace("%size%",t.toString())}init_globals();var vertTemplate="\n in vec2 aPosition;\n\n uniform float uStrength;\n\n out vec2 vBlurTexCoords[%size%];\n\n uniform vec4 uInputSize;\n uniform vec4 uOutputFrame;\n uniform vec4 uOutputTexture;\n\n vec4 filterVertexPosition( void )\n{\n vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;\n \n position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0*uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;\n\n return vec4(position, 0.0, 1.0);\n}\n\n vec2 filterTextureCoord( void )\n {\n return aPosition * (uOutputFrame.zw * uInputSize.zw);\n }\n\n void main(void)\n {\n gl_Position = filterVertexPosition();\n\n float pixelStrength = uInputSize.%dimension% * uStrength;\n\n vec2 textureCoord = filterTextureCoord();\n %blur%\n }";function generateBlurVertSource(t,r){let n=Math.ceil(t/2),i,a=vertTemplate,o="";i=r?"vBlurTexCoords[%index%] = textureCoord + vec2(%sampleIndex% * pixelStrength, 0.0);":"vBlurTexCoords[%index%] = textureCoord + vec2(0.0, %sampleIndex% * pixelStrength);";for(let r=0;r<t;r++){let t=i.replace("%index%",r.toString());o+=t=t.replace("%sampleIndex%",r-(n-1)+".0"),o+="\n"}return(a=(a=a.replace("%blur%",o)).replace("%size%",t.toString())).replace("%dimension%",r?"z":"w")}function generateBlurGlProgram(t,r){let n=generateBlurVertSource(r,t),i=generateBlurFragSource(r);return GlProgram.from({vertex:n,fragment:i,name:`blur-${t?"horizontal":"vertical"}-pass-filter`})}init_globals(),init_GpuProgram(),init_globals();var source3="\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\nstruct BlurUniforms {\n uStrength:f32,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n@group(0) @binding(1) var uTexture: texture_2d<f32>;\n@group(0) @binding(2) var uSampler : sampler;\n\n@group(1) @binding(0) var<uniform> blurUniforms : BlurUniforms;\n\n\nstruct VSOutput {\n @builtin(position) position: vec4<f32>,\n %blur-struct%\n };\n\nfn filterVertexPosition(aPosition:vec2<f32>) -> vec4<f32>\n{\n var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;\n\n position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0*gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;\n\n return vec4(position, 0.0, 1.0);\n}\n\nfn filterTextureCoord( aPosition:vec2<f32> ) -> vec2<f32>\n{\n return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);\n}\n\nfn globalTextureCoord( aPosition:vec2<f32> ) -> vec2<f32>\n{\n return (aPosition.xy / gfu.uGlobalFrame.zw) + (gfu.uGlobalFrame.xy / gfu.uGlobalFrame.zw); \n}\n\nfn getSize() -> vec2<f32>\n{\n return gfu.uGlobalFrame.zw;\n}\n\n\n@vertex\nfn mainVertex(\n @location(0) aPosition : vec2<f32>, \n) -> VSOutput {\n\n let filteredCord = filterTextureCoord(aPosition);\n\n let strength = gfu.uInputSize.w * blurUniforms.uStrength;\n\n return VSOutput(\n filterVertexPosition(aPosition),\n %blur-vertex-out%\n );\n}\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n %blur-fragment-in%\n) -> @location(0) vec4<f32> {\n\n var finalColor = vec4(0.0);\n\n %blur-sampling%\n\n return finalColor;\n}";function generateBlurProgram(t,r){let n=GAUSSIAN_VALUES[r],i=n.length,a=[],o=[],s=[];for(let l=0;l<r;l++){a[l]=`@location(${l}) offset${l}: vec2<f32>,`,o[l]=t?`filteredCord + vec2(${l-i+1} * strength, 0.0),`:`filteredCord + vec2(0.0, ${l-i+1} * strength),`;let u=n[l<i?l:r-l-1].toString();s[l]=`finalColor += textureSample(uTexture, uSampler, offset${l}) * ${u};`}let l=a.join("\n"),u=o.join("\n"),d=s.join("\n"),c=source3.replace("%blur-struct%",l).replace("%blur-vertex-out%",u).replace("%blur-fragment-in%",l).replace("%blur-sampling%",d);return GpuProgram.from({vertex:{source:c,entryPoint:"mainVertex"},fragment:{source:c,entryPoint:"mainFragment"}})}var _BlurFilterPass=class e extends Filter{constructor(t){super({glProgram:generateBlurGlProgram((t={...e.defaultOptions,...t}).horizontal,t.kernelSize),gpuProgram:generateBlurProgram(t.horizontal,t.kernelSize),resources:{blurUniforms:{uStrength:{value:0,type:"f32"}}},...t}),this.horizontal=t.horizontal,this._quality=0,this.quality=t.quality,this.blur=t.strength,this._uniforms=this.resources.blurUniforms.uniforms}apply(t,r,n,i){if(this._uniforms.uStrength=this.strength/this.passes,1===this.passes)t.applyFilter(this,r,n,i);else{let a=TexturePool.getSameSizeTexture(r),o=r,s=a;this._state.blend=!1;for(let r=0;r<this.passes-1;r++){t.applyFilter(this,o,s,t.renderer.type===RendererType.WEBGPU);let r=s;s=o,o=r}this._state.blend=!0,t.applyFilter(this,o,n,i),TexturePool.returnTexture(a)}}get blur(){return this.strength}set blur(t){this.padding=1+2*Math.abs(t),this.strength=t}get quality(){return this._quality}set quality(t){this._quality=t,this.passes=t}};_BlurFilterPass.defaultOptions={strength:8,quality:4,kernelSize:5};var BlurFilterPass=_BlurFilterPass;init_globals(),init_globals(),init_ObservablePoint(),init_deprecation(),init_Bounds(),init_Container();var AbstractText=class extends Container{constructor(t,r){let{text:n,resolution:i,style:a,anchor:o,width:s,height:l,roundPixels:u,...d}=t;super({...d}),this.batched=!0,this.resolution=null,this._didTextUpdate=!0,this._roundPixels=0,this._bounds=new Bounds,this._boundsDirty=!0,this._styleClass=r,this.text=n??"",this.style=a,this.resolution=i??null,this.allowChildren=!1,this._anchor=new ObservablePoint({_onUpdate:()=>{this.onViewUpdate()}}),o&&(this.anchor=o),this.roundPixels=u??!1,s&&(this.width=s),l&&(this.height=l)}get anchor(){return this._anchor}set anchor(t){"number"==typeof t?this._anchor.set(t):this._anchor.copyFrom(t)}get roundPixels(){return!!this._roundPixels}set roundPixels(t){this._roundPixels=+!!t}set text(t){t=t.toString(),this._text!==t&&(this._text=t,this.onViewUpdate())}get text(){return this._text}get style(){return this._style}set style(t){t=t||{},this._style?.off("update",this.onViewUpdate,this),t instanceof this._styleClass?this._style=t:this._style=new this._styleClass(t),this._style.on("update",this.onViewUpdate,this),this.onViewUpdate()}get bounds(){return this._boundsDirty&&(this._updateBounds(),this._boundsDirty=!1),this._bounds}get width(){return Math.abs(this.scale.x)*this.bounds.width}set width(t){this._setWidth(t,this.bounds.width)}get height(){return Math.abs(this.scale.y)*this.bounds.height}set height(t){this._setHeight(t,this.bounds.height)}getSize(t){return t||(t={}),t.width=Math.abs(this.scale.x)*this.bounds.width,t.height=Math.abs(this.scale.y)*this.bounds.height,t}setSize(t,r){let n,i;"object"!=typeof t?(n=t,i=r??t):(n=t.width,i=t.height??t.width),void 0!==n&&this._setWidth(n,this.bounds.width),void 0!==i&&this._setHeight(i,this.bounds.height)}addBounds(t){let r=this.bounds;t.addFrame(r.minX,r.minY,r.maxX,r.maxY)}containsPoint(t){let r=this.bounds.maxX,n=this.bounds.maxY,i=-r*this.anchor.x,a=0;return t.x>=i&&t.x<=i+r&&(a=-n*this.anchor.y,t.y>=a&&t.y<=a+n)}onViewUpdate(){this._didChangeId+=4096,this._boundsDirty=!0,this.didViewUpdate||(this.didViewUpdate=!0,this._didTextUpdate=!0,this.renderGroup&&this.renderGroup.onChildViewUpdate(this))}_getKey(){return`${this.text}:${this._style.styleKey}`}destroy(t=!1){super.destroy(t),this.owner=null,this._bounds=null,this._anchor=null,("boolean"==typeof t?t:t?.style)&&this._style.destroy(t),this._style=null,this._text=null}};function ensureOptions(t,r){let n=t[0]??{};return("string"==typeof n||t[1])&&(deprecation(v8_0_0,`use new ${r}({ text: "hi!", style }) instead`),n={text:n,style:t[1]}),n}init_CanvasTextMetrics(),init_TextStyle();var Text2=class extends AbstractText{constructor(...t){super(ensureOptions(t,"Text"),TextStyle),this.renderPipeId="text"}_updateBounds(){let t=this._bounds,r=this._style.padding,n=this._anchor,{width:i,height:a}=CanvasTextMetrics.measureText(this._text,this._style);t.minX=-n._x*i-r,t.maxX=t.minX+i,t.minY=-n._y*a-r,t.maxY=t.minY+a}};init_Color(),init_Filter(),init_const2(),init_ObservablePoint(),init_Rectangle(),init_GlProgram(),init_GpuProgram(),init_ImageSource(),init_TextureSource(),init_Texture(),init_TexturePool(),init_textureFrom(),init_ViewSystem(),init_Container(),init_Graphics(),init_Sprite(),init_eventemitter3(),init_deprecation();var import_earcut2=__toESM(require_earcut(),1);extensions.add(browserExt,webworkerExt);var import_react6=__webpack_require__(4194),import_icons3=__webpack_require__(8405),import_extractor3=__toESM(require_extractor()),import_antd3=__webpack_require__(1542);init_globals();var import_antd2=__webpack_require__(1542),import_react5=__webpack_require__(4194),import_extractor2=__toESM(require_extractor());init_globals(),init_globals(),init_globals();var vertex3="in vec2 aPosition;\nout vec2 vTextureCoord;\n\nuniform vec4 uInputSize;\nuniform vec4 uOutputFrame;\nuniform vec4 uOutputTexture;\n\nvec4 filterVertexPosition( void )\n{\n vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;\n \n position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0*uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;\n\n return vec4(position, 0.0, 1.0);\n}\n\nvec2 filterTextureCoord( void )\n{\n return aPosition * (uOutputFrame.zw * uInputSize.zw);\n}\n\nvoid main(void)\n{\n gl_Position = filterVertexPosition();\n vTextureCoord = filterTextureCoord();\n}\n";init_globals();var wgslVertex="struct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\nstruct VSOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n };\n\nfn filterVertexPosition(aPosition:vec2<f32>) -> vec4<f32>\n{\n var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;\n\n position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0*gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;\n\n return vec4(position, 0.0, 1.0);\n}\n\nfn filterTextureCoord( aPosition:vec2<f32> ) -> vec2<f32>\n{\n return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);\n}\n\nfn globalTextureCoord( aPosition:vec2<f32> ) -> vec2<f32>\n{\n return (aPosition.xy / gfu.uGlobalFrame.zw) + (gfu.uGlobalFrame.xy / gfu.uGlobalFrame.zw); \n}\n\nfn getSize() -> vec2<f32>\n{\n return gfu.uGlobalFrame.zw;\n}\n \n@vertex\nfn mainVertex(\n @location(0) aPosition : vec2<f32>, \n) -> VSOutput {\n return VSOutput(\n filterVertexPosition(aPosition),\n filterTextureCoord(aPosition)\n );\n}";init_globals();var fragment3="in vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform float uGamma;\nuniform float uContrast;\nuniform float uSaturation;\nuniform float uBrightness;\nuniform vec4 uColor;\n\nvoid main()\n{\n vec4 c = texture(uTexture, vTextureCoord);\n\n if (c.a > 0.0) {\n c.rgb /= c.a;\n\n vec3 rgb = pow(c.rgb, vec3(1. / uGamma));\n rgb = mix(vec3(.5), mix(vec3(dot(vec3(.2125, .7154, .0721), rgb)), rgb, uSaturation), uContrast);\n rgb.r *= uColor.r;\n rgb.g *= uColor.g;\n rgb.b *= uColor.b;\n c.rgb = rgb * uBrightness;\n\n c.rgb *= c.a;\n }\n\n finalColor = c * uColor.a;\n}\n";init_globals();var source4="struct AdjustmentUniforms {\n uGamma: f32,\n uContrast: f32,\n uSaturation: f32,\n uBrightness: f32,\n uColor: vec4<f32>,\n};\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> adjustmentUniforms : AdjustmentUniforms;\n\n@fragment\nfn mainFragment(\n @location(0) uv: vec2<f32>,\n @builtin(position) position: vec4<f32>\n) -> @location(0) vec4<f32> {\n var sample = textureSample(uTexture, uSampler, uv);\n let color = adjustmentUniforms.uColor;\n\n if (sample.a > 0.0) \n {\n sample = vec4<f32>(sample.rgb / sample.a, sample.a);\n var rgb: vec3<f32> = pow(sample.rgb, vec3<f32>(1. / adjustmentUniforms.uGamma));\n rgb = mix(vec3<f32>(.5), mix(vec3<f32>(dot(vec3<f32>(.2125, .7154, .0721), rgb)), rgb, adjustmentUniforms.uSaturation), adjustmentUniforms.uContrast);\n rgb.r *= color.r;\n rgb.g *= color.g;\n rgb.b *= color.b;\n sample = vec4<f32>(rgb.rgb * adjustmentUniforms.uBrightness, sample.a);\n sample = vec4<f32>(sample.rgb * sample.a, sample.a);\n }\n\n return sample * color.a;\n}",__defProp2=Object.defineProperty,__defNormalProp2=(t,r,n)=>r in t?__defProp2(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField2=(t,r,n)=>(__defNormalProp2(t,"symbol"!=typeof r?r+"":r,n),n),_AdjustmentFilter=class e extends Filter{constructor(t){t={...e.DEFAULT_OPTIONS,...t},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source4,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment3,name:"adjustment-filter"}),resources:{adjustmentUniforms:{uGamma:{value:t.gamma,type:"f32"},uContrast:{value:t.contrast,type:"f32"},uSaturation:{value:t.saturation,type:"f32"},uBrightness:{value:t.brightness,type:"f32"},uColor:{value:[t.red,t.green,t.blue,t.alpha],type:"vec4<f32>"}}}}),__publicField2(this,"uniforms"),this.uniforms=this.resources.adjustmentUniforms.uniforms}get gamma(){return this.uniforms.uGamma}set gamma(t){this.uniforms.uGamma=t}get contrast(){return this.uniforms.uContrast}set contrast(t){this.uniforms.uContrast=t}get saturation(){return this.uniforms.uSaturation}set saturation(t){this.uniforms.uSaturation=t}get brightness(){return this.uniforms.uBrightness}set brightness(t){this.uniforms.uBrightness=t}get red(){return this.uniforms.uColor[0]}set red(t){this.uniforms.uColor[0]=t}get green(){return this.uniforms.uColor[1]}set green(t){this.uniforms.uColor[1]=t}get blue(){return this.uniforms.uColor[2]}set blue(t){this.uniforms.uColor[2]=t}get alpha(){return this.uniforms.uColor[3]}set alpha(t){this.uniforms.uColor[3]=t}};__publicField2(_AdjustmentFilter,"DEFAULT_OPTIONS",{gamma:1,contrast:1,saturation:1,brightness:1,red:1,green:1,blue:1,alpha:1}),init_globals(),init_globals(),init_globals();var fragment4="\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec2 uOffset;\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n\n // Sample top left pixel\n color += texture(uTexture, vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y + uOffset.y));\n\n // Sample top right pixel\n color += texture(uTexture, vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y + uOffset.y));\n\n // Sample bottom right pixel\n color += texture(uTexture, vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y - uOffset.y));\n\n // Sample bottom left pixel\n color += texture(uTexture, vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y - uOffset.y));\n\n // Average\n color *= 0.25;\n\n finalColor = color;\n}";init_globals();var source5="struct KawaseBlurUniforms {\n uOffset:vec2<f32>,\n};\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> kawaseBlurUniforms : KawaseBlurUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let uOffset = kawaseBlurUniforms.uOffset;\n var color: vec4<f32> = vec4<f32>(0.0);\n\n // Sample top left pixel\n color += textureSample(uTexture, uSampler, vec2<f32>(uv.x - uOffset.x, uv.y + uOffset.y));\n // Sample top right pixel\n color += textureSample(uTexture, uSampler, vec2<f32>(uv.x + uOffset.x, uv.y + uOffset.y));\n // Sample bottom right pixel\n color += textureSample(uTexture, uSampler, vec2<f32>(uv.x + uOffset.x, uv.y - uOffset.y));\n // Sample bottom left pixel\n color += textureSample(uTexture, uSampler, vec2<f32>(uv.x - uOffset.x, uv.y - uOffset.y));\n // Average\n color *= 0.25;\n\n return color;\n}";init_globals();var fragmentClamp="\nprecision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec2 uOffset;\n\nuniform vec4 uInputClamp;\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n\n // Sample top left pixel\n color += texture(uTexture, clamp(vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y + uOffset.y), uInputClamp.xy, uInputClamp.zw));\n\n // Sample top right pixel\n color += texture(uTexture, clamp(vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y + uOffset.y), uInputClamp.xy, uInputClamp.zw));\n\n // Sample bottom right pixel\n color += texture(uTexture, clamp(vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y - uOffset.y), uInputClamp.xy, uInputClamp.zw));\n\n // Sample bottom left pixel\n color += texture(uTexture, clamp(vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y - uOffset.y), uInputClamp.xy, uInputClamp.zw));\n\n // Average\n color *= 0.25;\n\n finalColor = color;\n}\n";init_globals();var sourceClamp="struct KawaseBlurUniforms {\n uOffset:vec2<f32>,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> kawaseBlurUniforms : KawaseBlurUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let uOffset = kawaseBlurUniforms.uOffset;\n var color: vec4<f32> = vec4(0.0);\n\n // Sample top left pixel\n color += textureSample(uTexture, uSampler, clamp(vec2<f32>(uv.x - uOffset.x, uv.y + uOffset.y), gfu.uInputClamp.xy, gfu.uInputClamp.zw));\n // Sample top right pixel\n color += textureSample(uTexture, uSampler, clamp(vec2<f32>(uv.x + uOffset.x, uv.y + uOffset.y), gfu.uInputClamp.xy, gfu.uInputClamp.zw));\n // Sample bottom right pixel\n color += textureSample(uTexture, uSampler, clamp(vec2<f32>(uv.x + uOffset.x, uv.y - uOffset.y), gfu.uInputClamp.xy, gfu.uInputClamp.zw));\n // Sample bottom left pixel\n color += textureSample(uTexture, uSampler, clamp(vec2<f32>(uv.x - uOffset.x, uv.y - uOffset.y), gfu.uInputClamp.xy, gfu.uInputClamp.zw));\n // Average\n color *= 0.25;\n \n return color;\n}",__defProp3=Object.defineProperty,__defNormalProp3=(t,r,n)=>r in t?__defProp3(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField3=(t,r,n)=>(__defNormalProp3(t,"symbol"!=typeof r?r+"":r,n),n),_KawaseBlurFilter=class e extends Filter{constructor(...t){let r=t[0]??{};("number"==typeof r||Array.isArray(r))&&(deprecation("6.0.0","KawaseBlurFilter constructor params are now options object. See params: { strength, quality, clamp, pixelSize }"),r={strength:r},void 0!==t[1]&&(r.quality=t[1]),void 0!==t[2]&&(r.clamp=t[2])),r={...e.DEFAULT_OPTIONS,...r},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:r?.clamp?sourceClamp:source5,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:r?.clamp?fragmentClamp:fragment4,name:"kawase-blur-filter"}),resources:{kawaseBlurUniforms:{uOffset:{value:new Float32Array(2),type:"vec2<f32>"}}}}),__publicField3(this,"uniforms"),__publicField3(this,"_pixelSize",{x:0,y:0}),__publicField3(this,"_clamp"),__publicField3(this,"_kernels",[]),__publicField3(this,"_blur"),__publicField3(this,"_quality"),this.uniforms=this.resources.kawaseBlurUniforms.uniforms,this.pixelSize=r.pixelSize??{x:1,y:1},Array.isArray(r.strength)?this.kernels=r.strength:"number"==typeof r.strength&&(this._blur=r.strength,this.quality=r.quality??3),this._clamp=!!r.clamp}apply(t,r,n,i){let a,o=this.pixelSizeX/r.source.width,s=this.pixelSizeY/r.source.height;if(1===this._quality||0===this._blur)a=this._kernels[0]+.5,this.uniforms.uOffset[0]=a*o,this.uniforms.uOffset[1]=a*s,t.applyFilter(this,r,n,i);else{let l=TexturePool.getSameSizeTexture(r),u,d=r,c=l,h=this._quality-1;for(let r=0;r<h;r++)a=this._kernels[r]+.5,this.uniforms.uOffset[0]=a*o,this.uniforms.uOffset[1]=a*s,t.applyFilter(this,d,c,!0),u=d,d=c,c=u;a=this._kernels[h]+.5,this.uniforms.uOffset[0]=a*o,this.uniforms.uOffset[1]=a*s,t.applyFilter(this,d,n,i),TexturePool.returnTexture(l)}}get strength(){return this._blur}set strength(t){this._blur=t,this._generateKernels()}get quality(){return this._quality}set quality(t){this._quality=Math.max(1,Math.round(t)),this._generateKernels()}get kernels(){return this._kernels}set kernels(t){Array.isArray(t)&&t.length>0?(this._kernels=t,this._quality=t.length,this._blur=Math.max(...t)):(this._kernels=[0],this._quality=1)}get pixelSize(){return this._pixelSize}set pixelSize(t){if("number"!=typeof t)return Array.isArray(t)?(this.pixelSizeX=t[0],void(this.pixelSizeY=t[1])):void(this._pixelSize=t);this.pixelSizeX=this.pixelSizeY=t}get pixelSizeX(){return this.pixelSize.x}set pixelSizeX(t){this.pixelSize.x=t}get pixelSizeY(){return this.pixelSize.y}set pixelSizeY(t){this.pixelSize.y=t}get clamp(){return this._clamp}_updatePadding(){this.padding=Math.ceil(this._kernels.reduce((t,r)=>t+r+.5,0))}_generateKernels(){let t=this._blur,r=this._quality,n=[t];if(t>0){let i=t,a=t/r;for(let t=1;t<r;t++)i-=a,n.push(i)}this._kernels=n,this._updatePadding()}};__publicField3(_KawaseBlurFilter,"DEFAULT_OPTIONS",{strength:4,quality:3,clamp:!1,pixelSize:{x:1,y:1}});var KawaseBlurFilter=_KawaseBlurFilter;init_globals();var fragment5="in vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform sampler2D uMapTexture;\nuniform float uBloomScale;\nuniform float uBrightness;\n\nvoid main() {\n vec4 color = texture(uTexture, vTextureCoord);\n color.rgb *= uBrightness;\n vec4 bloomColor = vec4(texture(uMapTexture, vTextureCoord).rgb, 0.0);\n bloomColor.rgb *= uBloomScale;\n finalColor = color + bloomColor;\n}\n";init_globals();var source6="struct AdvancedBloomUniforms {\n uBloomScale: f32,\n uBrightness: f32,\n};\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> advancedBloomUniforms : AdvancedBloomUniforms;\n@group(1) @binding(1) var uMapTexture: texture_2d<f32>;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n var color = textureSample(uTexture, uSampler, uv);\n color = vec4<f32>(color.rgb * advancedBloomUniforms.uBrightness, color.a);\n\n var bloomColor = vec4<f32>(textureSample(uMapTexture, uSampler, uv).rgb, 0.0);\n bloomColor = vec4<f32>(bloomColor.rgb * advancedBloomUniforms.uBloomScale, bloomColor.a);\n \n return color + bloomColor;\n}\n";init_globals(),init_globals();var fragment6="\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform float uThreshold;\n\nvoid main() {\n vec4 color = texture(uTexture, vTextureCoord);\n\n // A simple & fast algorithm for getting brightness.\n // It's inaccuracy , but good enought for this feature.\n float _max = max(max(color.r, color.g), color.b);\n float _min = min(min(color.r, color.g), color.b);\n float brightness = (_max + _min) * 0.5;\n\n if(brightness > uThreshold) {\n finalColor = color;\n } else {\n finalColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n}\n";init_globals();var source7="struct ExtractBrightnessUniforms {\n uThreshold: f32,\n};\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> extractBrightnessUniforms : ExtractBrightnessUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let color: vec4<f32> = textureSample(uTexture, uSampler, uv);\n\n // A simple & fast algorithm for getting brightness.\n // It's inaccurate, but good enough for this feature.\n let max: f32 = max(max(color.r, color.g), color.b);\n let min: f32 = min(min(color.r, color.g), color.b);\n let brightness: f32 = (max + min) * 0.5;\n\n return select(vec4<f32>(0.), color, brightness > extractBrightnessUniforms.uThreshold);\n}\n",__defProp4=Object.defineProperty,__defNormalProp4=(t,r,n)=>r in t?__defProp4(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField4=(t,r,n)=>(__defNormalProp4(t,"symbol"!=typeof r?r+"":r,n),n),_ExtractBrightnessFilter=class e extends Filter{constructor(t){super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source7,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment6,name:"extract-brightness-filter"}),resources:{extractBrightnessUniforms:{uThreshold:{value:(t={...e.DEFAULT_OPTIONS,...t}).threshold,type:"f32"}}}}),__publicField4(this,"uniforms"),this.uniforms=this.resources.extractBrightnessUniforms.uniforms}get threshold(){return this.uniforms.uThreshold}set threshold(t){this.uniforms.uThreshold=t}};__publicField4(_ExtractBrightnessFilter,"DEFAULT_OPTIONS",{threshold:.5});var ExtractBrightnessFilter=_ExtractBrightnessFilter,__defProp5=Object.defineProperty,__defNormalProp5=(t,r,n)=>r in t?__defProp5(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField5=(t,r,n)=>(__defNormalProp5(t,"symbol"!=typeof r?r+"":r,n),n),_AdvancedBloomFilter=class e extends Filter{constructor(t){t={...e.DEFAULT_OPTIONS,...t},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source6,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment5,name:"advanced-bloom-filter"}),resources:{advancedBloomUniforms:{uBloomScale:{value:t.bloomScale,type:"f32"},uBrightness:{value:t.brightness,type:"f32"}},uMapTexture:Texture.WHITE}}),__publicField5(this,"uniforms"),__publicField5(this,"bloomScale",1),__publicField5(this,"brightness",1),__publicField5(this,"_extractFilter"),__publicField5(this,"_blurFilter"),this.uniforms=this.resources.advancedBloomUniforms.uniforms,this._extractFilter=new ExtractBrightnessFilter({threshold:t.threshold}),this._blurFilter=new KawaseBlurFilter({strength:t.kernels??t.blur,quality:t.kernels?void 0:t.quality}),Object.assign(this,t)}apply(t,r,n,i){let a=TexturePool.getSameSizeTexture(r);this._extractFilter.apply(t,r,a,!0);let o=TexturePool.getSameSizeTexture(r);this._blurFilter.apply(t,a,o,!0),this.uniforms.uBloomScale=this.bloomScale,this.uniforms.uBrightness=this.brightness,this.resources.uMapTexture=o.source,t.applyFilter(this,r,n,i),TexturePool.returnTexture(o),TexturePool.returnTexture(a)}get threshold(){return this._extractFilter.threshold}set threshold(t){this._extractFilter.threshold=t}get kernels(){return this._blurFilter.kernels}set kernels(t){this._blurFilter.kernels=t}get blur(){return this._blurFilter.strength}set blur(t){this._blurFilter.strength=t}get quality(){return this._blurFilter.quality}set quality(t){this._blurFilter.quality=t}get pixelSize(){return this._blurFilter.pixelSize}set pixelSize(t){"number"==typeof t&&(t={x:t,y:t}),Array.isArray(t)&&(t={x:t[0],y:t[1]}),this._blurFilter.pixelSize=t}get pixelSizeX(){return this._blurFilter.pixelSizeX}set pixelSizeX(t){this._blurFilter.pixelSizeX=t}get pixelSizeY(){return this._blurFilter.pixelSizeY}set pixelSizeY(t){this._blurFilter.pixelSizeY=t}};__publicField5(_AdvancedBloomFilter,"DEFAULT_OPTIONS",{threshold:.5,bloomScale:1,brightness:1,blur:8,quality:4,pixelSize:{x:1,y:1}}),init_globals(),init_globals();var fragment7="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform float uSize;\nuniform vec3 uColor;\nuniform float uReplaceColor;\n\nuniform vec4 uInputSize;\n\nvec2 mapCoord( vec2 coord )\n{\n coord *= uInputSize.xy;\n coord += uInputSize.zw;\n\n return coord;\n}\n\nvec2 unmapCoord( vec2 coord )\n{\n coord -= uInputSize.zw;\n coord /= uInputSize.xy;\n\n return coord;\n}\n\nvec2 pixelate(vec2 coord, vec2 size)\n{\n return floor(coord / size) * size;\n}\n\nvec2 getMod(vec2 coord, vec2 size)\n{\n return mod(coord, size) / size;\n}\n\nfloat character(float n, vec2 p)\n{\n p = floor(p*vec2(4.0, 4.0) + 2.5);\n\n if (clamp(p.x, 0.0, 4.0) == p.x)\n {\n if (clamp(p.y, 0.0, 4.0) == p.y)\n {\n if (int(mod(n/exp2(p.x + 5.0*p.y), 2.0)) == 1) return 1.0;\n }\n }\n return 0.0;\n}\n\nvoid main()\n{\n vec2 coord = mapCoord(vTextureCoord);\n\n // get the grid position\n vec2 pixCoord = pixelate(coord, vec2(uSize));\n pixCoord = unmapCoord(pixCoord);\n\n // sample the color at grid position\n vec4 color = texture(uTexture, pixCoord);\n\n // brightness of the color as it's perceived by the human eye\n float gray = 0.3 * color.r + 0.59 * color.g + 0.11 * color.b;\n\n // determine the character to use\n float n = 65536.0; // .\n if (gray > 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n // get the mod..\n vec2 modd = getMod(coord, vec2(uSize));\n\n finalColor = (uReplaceColor > 0.5 ? vec4(uColor, 1.) : color) * character( n, vec2(-1.0) + modd * 2.0);\n}\n";init_globals();var source8="struct AsciiUniforms {\n uSize: f32,\n uColor: vec3<f32>,\n uReplaceColor: f32,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> asciiUniforms : AsciiUniforms;\n\n@fragment\nfn mainFragment(\n @location(0) uv: vec2<f32>,\n @builtin(position) position: vec4<f32>\n) -> @location(0) vec4<f32> {\n let pixelSize: f32 = asciiUniforms.uSize;\n let coord: vec2<f32> = mapCoord(uv);\n\n // get the rounded color..\n var pixCoord: vec2<f32> = pixelate(coord, vec2<f32>(pixelSize));\n pixCoord = unmapCoord(pixCoord);\n\n var color = textureSample(uTexture, uSampler, pixCoord);\n\n // determine the character to use\n let gray: f32 = 0.3 * color.r + 0.59 * color.g + 0.11 * color.b;\n \n var n: f32 = 65536.0; // .\n if (gray > 0.2) {\n n = 65600.0; // :\n }\n if (gray > 0.3) {\n n = 332772.0; // *\n }\n if (gray > 0.4) {\n n = 15255086.0; // o\n }\n if (gray > 0.5) {\n n = 23385164.0; // &\n }\n if (gray > 0.6) {\n n = 15252014.0; // 8\n }\n if (gray > 0.7) {\n n = 13199452.0; // @\n }\n if (gray > 0.8) {\n n = 11512810.0; // #\n }\n\n // get the mod..\n let modd: vec2<f32> = getMod(coord, vec2<f32>(pixelSize));\n return select(color, vec4<f32>(asciiUniforms.uColor, 1.), asciiUniforms.uReplaceColor > 0.5) * character(n, vec2<f32>(-1.0) + modd * 2.0);\n}\n\nfn pixelate(coord: vec2<f32>, size: vec2<f32>) -> vec2<f32>\n{\n return floor( coord / size ) * size;\n}\n\nfn getMod(coord: vec2<f32>, size: vec2<f32>) -> vec2<f32>\n{\n return moduloVec2( coord , size) / size;\n}\n\nfn character(n: f32, p: vec2<f32>) -> f32\n{\n var q: vec2<f32> = floor(p*vec2<f32>(4.0, 4.0) + 2.5);\n\n if (clamp(q.x, 0.0, 4.0) == q.x)\n {\n if (clamp(q.y, 0.0, 4.0) == q.y)\n {\n if (i32(modulo(n/exp2(q.x + 5.0*q.y), 2.0)) == 1)\n {\n return 1.0;\n }\n }\n }\n\n return 0.0;\n}\n\nfn modulo(x: f32, y: f32) -> f32\n{\n return x - y * floor(x/y);\n}\n\nfn moduloVec2(x: vec2<f32>, y: vec2<f32>) -> vec2<f32>\n{\n return x - y * floor(x/y);\n}\n\nfn mapCoord(coord: vec2<f32> ) -> vec2<f32>\n{\n var mappedCoord: vec2<f32> = coord;\n mappedCoord *= gfu.uInputSize.xy;\n mappedCoord += gfu.uOutputFrame.xy;\n return mappedCoord;\n}\n\nfn unmapCoord(coord: vec2<f32> ) -> vec2<f32>\n{\n var mappedCoord: vec2<f32> = coord;\n mappedCoord -= gfu.uOutputFrame.xy;\n mappedCoord /= gfu.uInputSize.xy;\n return mappedCoord;\n}",__defProp6=Object.defineProperty,__defNormalProp6=(t,r,n)=>r in t?__defProp6(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField6=(t,r,n)=>(__defNormalProp6(t,"symbol"!=typeof r?r+"":r,n),n),_AsciiFilter=class e extends Filter{constructor(...t){let r=t[0]??{};"number"==typeof r&&(deprecation("6.0.0","AsciiFilter constructor params are now options object. See params: { size, color, replaceColor }"),r={size:r}),super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source8,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment7,name:"ascii-filter"}),resources:{asciiUniforms:{uSize:{value:(r={...e.DEFAULT_OPTIONS,...r}).size,type:"f32"},uColor:{value:new Float32Array(3),type:"vec3<f32>"},uReplaceColor:{value:Number(r?.color&&!1!==r.replaceColor),type:"f32"}}}}),__publicField6(this,"uniforms"),__publicField6(this,"_color"),this.uniforms=this.resources.asciiUniforms.uniforms,this._color=new Color,this.color=r.color??0xffffff}get size(){return this.uniforms.uSize}set size(t){this.uniforms.uSize=t}get color(){return this._color.value}set color(t){this._color.setValue(t);let[r,n,i]=this._color.toArray();this.uniforms.uColor[0]=r,this.uniforms.uColor[1]=n,this.uniforms.uColor[2]=i}get replaceColor(){return this.uniforms.uReplaceColor>.5}set replaceColor(t){this.uniforms.uReplaceColor=+!!t}};__publicField6(_AsciiFilter,"DEFAULT_OPTIONS",{size:8,color:0xffffff,replaceColor:!1}),init_globals(),init_globals(),init_globals(),init_globals(),init_globals();var fragment9="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec2 uTransform;\nuniform vec3 uLightColor;\nuniform float uLightAlpha;\nuniform vec3 uShadowColor;\nuniform float uShadowAlpha;\n\nuniform vec4 uInputSize;\n\nvoid main(void) {\n vec2 transform = vec2(1.0 / uInputSize) * vec2(uTransform.x, uTransform.y);\n vec4 color = texture(uTexture, vTextureCoord);\n float light = texture(uTexture, vTextureCoord - transform).a;\n float shadow = texture(uTexture, vTextureCoord + transform).a;\n\n color.rgb = mix(color.rgb, uLightColor, clamp((color.a - light) * uLightAlpha, 0.0, 1.0));\n color.rgb = mix(color.rgb, uShadowColor, clamp((color.a - shadow) * uShadowAlpha, 0.0, 1.0));\n finalColor = vec4(color.rgb * color.a, color.a);\n}\n";init_globals();var source9="struct BevelUniforms {\n uLightColor: vec3<f32>,\n uLightAlpha: f32,\n uShadowColor: vec3<f32>,\n uShadowAlpha: f32,\n uTransform: vec2<f32>,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> bevelUniforms : BevelUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let transform = vec2<f32>(1.0 / gfu.uInputSize.xy) * vec2<f32>(bevelUniforms.uTransform.x, bevelUniforms.uTransform.y);\n var color: vec4<f32> = textureSample(uTexture, uSampler, uv);\n let lightSample: f32 = textureSample(uTexture, uSampler, uv - transform).a;\n let shadowSample: f32 = textureSample(uTexture, uSampler, uv + transform).a;\n\n let light = vec4<f32>(bevelUniforms.uLightColor, bevelUniforms.uLightAlpha);\n let shadow = vec4<f32>(bevelUniforms.uShadowColor, bevelUniforms.uShadowAlpha);\n\n color = vec4<f32>(mix(color.rgb, light.rgb, clamp((color.a - lightSample) * light.a, 0.0, 1.0)), color.a);\n color = vec4<f32>(mix(color.rgb, shadow.rgb, clamp((color.a - shadowSample) * shadow.a, 0.0, 1.0)), color.a);\n \n return vec4<f32>(color.rgb * color.a, color.a);\n}",__defProp7=Object.defineProperty,__defNormalProp7=(t,r,n)=>r in t?__defProp7(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField7=(t,r,n)=>(__defNormalProp7(t,"symbol"!=typeof r?r+"":r,n),n),_BevelFilter=class e extends Filter{constructor(t){t={...e.DEFAULT_OPTIONS,...t},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source9,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment9,name:"bevel-filter"}),resources:{bevelUniforms:{uLightColor:{value:new Float32Array(3),type:"vec3<f32>"},uLightAlpha:{value:t.lightAlpha,type:"f32"},uShadowColor:{value:new Float32Array(3),type:"vec3<f32>"},uShadowAlpha:{value:t.shadowAlpha,type:"f32"},uTransform:{value:new Float32Array(2),type:"vec2<f32>"}}},padding:1}),__publicField7(this,"uniforms"),__publicField7(this,"_thickness"),__publicField7(this,"_rotation"),__publicField7(this,"_lightColor"),__publicField7(this,"_shadowColor"),this.uniforms=this.resources.bevelUniforms.uniforms,this._lightColor=new Color,this._shadowColor=new Color,this.lightColor=t.lightColor??0xffffff,this.shadowColor=t.shadowColor??0,Object.assign(this,t)}get rotation(){return this._rotation/DEG_TO_RAD}set rotation(t){this._rotation=t*DEG_TO_RAD,this._updateTransform()}get thickness(){return this._thickness}set thickness(t){this._thickness=t,this._updateTransform()}get lightColor(){return this._lightColor.value}set lightColor(t){this._lightColor.setValue(t);let[r,n,i]=this._lightColor.toArray();this.uniforms.uLightColor[0]=r,this.uniforms.uLightColor[1]=n,this.uniforms.uLightColor[2]=i}get lightAlpha(){return this.uniforms.uLightAlpha}set lightAlpha(t){this.uniforms.uLightAlpha=t}get shadowColor(){return this._shadowColor.value}set shadowColor(t){this._shadowColor.setValue(t);let[r,n,i]=this._shadowColor.toArray();this.uniforms.uShadowColor[0]=r,this.uniforms.uShadowColor[1]=n,this.uniforms.uShadowColor[2]=i}get shadowAlpha(){return this.uniforms.uShadowAlpha}set shadowAlpha(t){this.uniforms.uShadowAlpha=t}_updateTransform(){this.uniforms.uTransform[0]=this.thickness*Math.cos(this._rotation),this.uniforms.uTransform[1]=this.thickness*Math.sin(this._rotation)}};__publicField7(_BevelFilter,"DEFAULT_OPTIONS",{rotation:45,thickness:2,lightColor:0xffffff,lightAlpha:.7,shadowColor:0,shadowAlpha:.7}),init_globals();var __defProp8=Object.defineProperty,__defNormalProp8=(t,r,n)=>r in t?__defProp8(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField8=(t,r,n)=>(__defNormalProp8(t,"symbol"!=typeof r?r+"":r,n),n),_BloomFilter=class e extends AlphaFilter{constructor(...t){let r=t[0]??{};if("number"==typeof r||Array.isArray(r)||"x"in r&&"y"in r){deprecation("6.0.0","BloomFilter constructor params are now options object. See params: { strength, quality, resolution, kernelSize }");let n=r;Array.isArray(n)&&(n={x:n[0],y:n[1]}),r={strength:n},void 0!==t[1]&&(r.quality=t[1]),void 0!==t[2]&&(r.resolution=t[2]),void 0!==t[3]&&(r.kernelSize=t[3])}r={...e.DEFAULT_OPTIONS,...r},super(),__publicField8(this,"_blurXFilter"),__publicField8(this,"_blurYFilter"),__publicField8(this,"_strength"),this._strength={x:2,y:2},r.strength&&("number"==typeof r.strength?(this._strength.x=r.strength,this._strength.y=r.strength):(this._strength.x=r.strength.x,this._strength.y=r.strength.y)),this._blurXFilter=new BlurFilterPass({...r,horizontal:!0,strength:this.strengthX}),this._blurYFilter=new BlurFilterPass({...r,horizontal:!1,strength:this.strengthY}),this._blurYFilter.blendMode="screen",Object.assign(this,r)}apply(t,r,n,i){let a=TexturePool.getSameSizeTexture(r);t.applyFilter(this,r,n,i),this._blurXFilter.apply(t,r,a,!0),this._blurYFilter.apply(t,a,n,!1),TexturePool.returnTexture(a)}get strength(){return this._strength}set strength(t){this._strength="number"==typeof t?{x:t,y:t}:t,this._updateStrength()}get strengthX(){return this.strength.x}set strengthX(t){this.strength.x=t,this._updateStrength()}get strengthY(){return this.strength.y}set strengthY(t){this.strength.y=t,this._updateStrength()}_updateStrength(){this._blurXFilter.blur=this.strengthX,this._blurYFilter.blur=this.strengthY}get blur(){return deprecation("6.0.0","BloomFilter.blur is deprecated, please use BloomFilter.strength instead"),this.strengthX}set blur(t){deprecation("6.0.0","BloomFilter.blur is deprecated, please use BloomFilter.strength instead"),this.strength=t}get blurX(){return deprecation("6.0.0","BloomFilter.blurX is deprecated, please use BloomFilter.strengthX instead"),this.strengthX}set blurX(t){deprecation("6.0.0","BloomFilter.blurX is deprecated, please use BloomFilter.strengthX instead"),this.strengthX=t}get blurY(){return deprecation("6.0.0","BloomFilter.blurY is deprecated, please use BloomFilter.strengthY instead"),this.strengthY}set blurY(t){deprecation("6.0.0","BloomFilter.blurY is deprecated, please use BloomFilter.strengthY instead"),this.strengthY=t}};__publicField8(_BloomFilter,"DEFAULT_OPTIONS",{strength:{x:2,y:2},quality:4,resolution:1,kernelSize:5}),init_globals(),init_globals();var fragment10="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec2 uDimensions;\nuniform vec2 uCenter;\nuniform float uRadius;\nuniform float uStrength;\n\nuniform vec4 uInputSize;\nuniform vec4 uInputClamp;\n\nvoid main()\n{\n vec2 coord = vTextureCoord * uInputSize.xy;\n coord -= uCenter * uDimensions.xy;\n float distance = length(coord);\n\n if (distance < uRadius) {\n float percent = distance / uRadius;\n if (uStrength > 0.0) {\n coord *= mix(1.0, smoothstep(0.0, uRadius / distance, percent), uStrength * 0.75);\n } else {\n coord *= mix(1.0, pow(percent, 1.0 + uStrength * 0.75) * uRadius / distance, 1.0 - percent);\n }\n }\n\n coord += uCenter * uDimensions.xy;\n coord /= uInputSize.xy;\n vec2 clampedCoord = clamp(coord, uInputClamp.xy, uInputClamp.zw);\n vec4 color = texture(uTexture, clampedCoord);\n\n if (coord != clampedCoord) {\n color *= max(0.0, 1.0 - length(coord - clampedCoord));\n }\n\n finalColor = color;\n}\n";init_globals();var source10="struct BulgePinchUniforms {\n uDimensions: vec2<f32>,\n uCenter: vec2<f32>,\n uRadius: f32,\n uStrength: f32,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> bulgePinchUniforms : BulgePinchUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let dimensions: vec2<f32> = bulgePinchUniforms.uDimensions;\n let center: vec2<f32> = bulgePinchUniforms.uCenter;\n let radius: f32 = bulgePinchUniforms.uRadius;\n let strength: f32 = bulgePinchUniforms.uStrength;\n var coord: vec2<f32> = (uv * gfu.uInputSize.xy) - center * dimensions.xy;\n\n let distance: f32 = length(coord);\n\n if (distance < radius) {\n let percent: f32 = distance / radius;\n if (strength > 0.0) {\n coord *= mix(1.0, smoothstep(0.0, radius / distance, percent), strength * 0.75);\n } else {\n coord *= mix(1.0, pow(percent, 1.0 + strength * 0.75) * radius / distance, 1.0 - percent);\n }\n }\n coord += (center * dimensions.xy);\n coord /= gfu.uInputSize.xy;\n\n let clampedCoord: vec2<f32> = clamp(coord, gfu.uInputClamp.xy, gfu.uInputClamp.zw);\n var color: vec4<f32> = textureSample(uTexture, uSampler, clampedCoord);\n if (coord.x != clampedCoord.x && coord.y != clampedCoord.y) {\n color *= max(0.0, 1.0 - length(coord - clampedCoord));\n }\n\n return color;\n}\n\nfn compareVec2(x: vec2<f32>, y: vec2<f32>) -> bool\n{\n if (x.x == y.x && x.y == y.y)\n {\n return true;\n }\n\n return false;\n}",__defProp9=Object.defineProperty,__defNormalProp9=(t,r,n)=>r in t?__defProp9(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField9=(t,r,n)=>(__defNormalProp9(t,"symbol"!=typeof r?r+"":r,n),n),_BulgePinchFilter=class e extends Filter{constructor(t){t={...e.DEFAULT_OPTIONS,...t},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source10,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment10,name:"bulge-pinch-filter"}),resources:{bulgePinchUniforms:{uDimensions:{value:[0,0],type:"vec2<f32>"},uCenter:{value:t.center,type:"vec2<f32>"},uRadius:{value:t.radius,type:"f32"},uStrength:{value:t.strength,type:"f32"}}}}),__publicField9(this,"uniforms"),this.uniforms=this.resources.bulgePinchUniforms.uniforms,Object.assign(this,t)}apply(t,r,n,i){this.uniforms.uDimensions[0]=r.frame.width,this.uniforms.uDimensions[1]=r.frame.height,t.applyFilter(this,r,n,i)}get center(){return this.uniforms.uCenter}set center(t){"number"==typeof t&&(t={x:t,y:t}),Array.isArray(t)&&(t={x:t[0],y:t[1]}),this.uniforms.uCenter=t}get centerX(){return this.uniforms.uCenter.x}set centerX(t){this.uniforms.uCenter.x=t}get centerY(){return this.uniforms.uCenter.y}set centerY(t){this.uniforms.uCenter.y=t}get radius(){return this.uniforms.uRadius}set radius(t){this.uniforms.uRadius=t}get strength(){return this.uniforms.uStrength}set strength(t){this.uniforms.uStrength=t}};__publicField9(_BulgePinchFilter,"DEFAULT_OPTIONS",{center:{x:.5,y:.5},radius:100,strength:1}),init_globals(),init_globals();var fragment11="precision highp float;\nin vec2 vTextureCoord;\nin vec2 vFilterCoord;\nout vec4 finalColor;\n\nconst int TYPE_LINEAR = 0;\nconst int TYPE_RADIAL = 1;\nconst int TYPE_CONIC = 2;\nconst int MAX_STOPS = 32;\n\nuniform sampler2D uTexture;\nuniform vec4 uOptions;\nuniform vec2 uCounts;\nuniform vec3 uColors[MAX_STOPS];\nuniform vec4 uStops[MAX_STOPS];\n\nconst float PI = 3.1415926538;\nconst float PI_2 = PI*2.;\n\nstruct ColorStop {\n float offset;\n vec3 color;\n float alpha;\n};\n\nmat2 rotate2d(float angle){\n return mat2(cos(angle), -sin(angle),\n sin(angle), cos(angle));\n}\n\nfloat projectLinearPosition(vec2 pos, float angle){\n vec2 center = vec2(0.5);\n vec2 result = pos - center;\n result = rotate2d(angle) * result;\n result = result + center;\n return clamp(result.x, 0., 1.);\n}\n\nfloat projectRadialPosition(vec2 pos) {\n float r = distance(pos, vec2(0.5));\n return clamp(2.*r, 0., 1.);\n}\n\nfloat projectAnglePosition(vec2 pos, float angle) {\n vec2 center = pos - vec2(0.5);\n float polarAngle=atan(-center.y, center.x);\n return mod(polarAngle + angle, PI_2) / PI_2;\n}\n\nfloat projectPosition(vec2 pos, int type, float angle) {\n if (type == TYPE_LINEAR) {\n return projectLinearPosition(pos, angle);\n } else if (type == TYPE_RADIAL) {\n return projectRadialPosition(pos);\n } else if (type == TYPE_CONIC) {\n return projectAnglePosition(pos, angle);\n }\n\n return pos.y;\n}\n\nvoid main(void) {\n int uType = int(uOptions[0]);\n float uAngle = uOptions[1];\n float uAlpha = uOptions[2];\n float uReplace = uOptions[3];\n\n int uNumStops = int(uCounts[0]);\n float uMaxColors = uCounts[1];\n\n // current/original color\n vec4 currentColor = texture(uTexture, vTextureCoord);\n\n // skip calculations if gradient alpha is 0\n if (0.0 == uAlpha) {\n finalColor = currentColor;\n return;\n }\n\n // project position\n float y = projectPosition(vFilterCoord, int(uType), radians(uAngle));\n\n // check gradient bounds\n float offsetMin = uStops[0][0];\n float offsetMax = 0.0;\n\n int numStops = int(uNumStops);\n\n for (int i = 0; i < MAX_STOPS; i++) {\n if (i == numStops-1){ // last index\n offsetMax = uStops[i][0];\n }\n }\n\n if (y < offsetMin || y > offsetMax) {\n finalColor = currentColor;\n return;\n }\n\n // limit colors\n if (uMaxColors > 0.) {\n float stepSize = 1./uMaxColors;\n float stepNumber = float(floor(y/stepSize));\n y = stepSize * (stepNumber + 0.5);// offset by 0.5 to use color from middle of segment\n }\n\n // find color stops\n ColorStop from;\n ColorStop to;\n\n for (int i = 0; i < MAX_STOPS; i++) {\n if (y >= uStops[i][0]) {\n from = ColorStop(uStops[i][0], uColors[i], uStops[i][1]);\n to = ColorStop(uStops[i+1][0], uColors[i+1], uStops[i+1][1]);\n }\n\n if (i == numStops-1){ // last index\n break;\n }\n }\n\n // mix colors from stops\n vec4 colorFrom = vec4(from.color * from.alpha, from.alpha);\n vec4 colorTo = vec4(to.color * to.alpha, to.alpha);\n\n float segmentHeight = to.offset - from.offset;\n float relativePos = y - from.offset;// position from 0 to [segmentHeight]\n float relativePercent = relativePos / segmentHeight;// position in percent between [from.offset] and [to.offset].\n\n float gradientAlpha = uAlpha * currentColor.a;\n vec4 gradientColor = mix(colorFrom, colorTo, relativePercent) * gradientAlpha;\n\n if (uReplace < 0.5) {\n // mix resulting color with current color\n finalColor = gradientColor + currentColor*(1.-gradientColor.a);\n } else {\n // replace with gradient color\n finalColor = gradientColor;\n }\n}\n";init_globals();var vertex4="in vec2 aPosition;\nout vec2 vTextureCoord;\nout vec2 vFilterCoord;\n\nuniform vec4 uInputSize;\nuniform vec4 uOutputFrame;\nuniform vec4 uOutputTexture;\n\nvec4 filterVertexPosition( void )\n{\n vec2 position = aPosition * uOutputFrame.zw + uOutputFrame.xy;\n \n position.x = position.x * (2.0 / uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0*uOutputTexture.z / uOutputTexture.y) - uOutputTexture.z;\n\n return vec4(position, 0.0, 1.0);\n}\n\nvec2 filterTextureCoord( void )\n{\n return aPosition * (uOutputFrame.zw * uInputSize.zw);\n}\n\nvoid main(void)\n{\n gl_Position = filterVertexPosition();\n vTextureCoord = filterTextureCoord();\n vFilterCoord = vTextureCoord * uInputSize.xy / uOutputFrame.zw;\n}\n";init_globals();var source11="struct BaseUniforms {\n uOptions: vec4<f32>,\n uCounts: vec2<f32>,\n};\n\nstruct StopsUniforms {\n uColors: array<vec3<f32>, MAX_STOPS>,\n uStops: array<vec4<f32>, MAX_STOPS>,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> baseUniforms : BaseUniforms;\n@group(1) @binding(1) var<uniform> stopsUniforms : StopsUniforms;\n\nstruct VSOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>,\n @location(1) coord : vec2<f32>\n};\n\nfn filterVertexPosition(aPosition:vec2<f32>) -> vec4<f32>\n{\n var position = aPosition * gfu.uOutputFrame.zw + gfu.uOutputFrame.xy;\n\n position.x = position.x * (2.0 / gfu.uOutputTexture.x) - 1.0;\n position.y = position.y * (2.0*gfu.uOutputTexture.z / gfu.uOutputTexture.y) - gfu.uOutputTexture.z;\n\n return vec4(position, 0.0, 1.0);\n}\n\nfn filterTextureCoord( aPosition:vec2<f32> ) -> vec2<f32>\n{\n return aPosition * (gfu.uOutputFrame.zw * gfu.uInputSize.zw);\n}\n\nfn filterCoord( vTextureCoord:vec2<f32> ) -> vec2<f32>\n{\n return vTextureCoord * gfu.uInputSize.xy / gfu.uOutputFrame.zw;\n}\n\nfn globalTextureCoord( aPosition:vec2<f32> ) -> vec2<f32>\n{\n return (aPosition.xy / gfu.uGlobalFrame.zw) + (gfu.uGlobalFrame.xy / gfu.uGlobalFrame.zw); \n}\n\nfn getSize() -> vec2<f32>\n{\n return gfu.uGlobalFrame.zw;\n}\n \n@vertex\nfn mainVertex(\n @location(0) aPosition : vec2<f32>, \n) -> VSOutput {\n let vTextureCoord: vec2<f32> = filterTextureCoord(aPosition);\n return VSOutput(\n filterVertexPosition(aPosition),\n vTextureCoord,\n filterCoord(vTextureCoord),\n );\n}\n\nstruct ColorStop {\n offset: f32,\n color: vec3<f32>,\n alpha: f32,\n};\n\nfn rotate2d(angle: f32) -> mat2x2<f32>{\n return mat2x2(cos(angle), -sin(angle),\n sin(angle), cos(angle));\n}\n\nfn projectLinearPosition(pos: vec2<f32>, angle: f32) -> f32 {\n var center: vec2<f32> = vec2<f32>(0.5);\n var result: vec2<f32> = pos - center;\n result = rotate2d(angle) * result;\n result = result + center;\n return clamp(result.x, 0.0, 1.0);\n}\n\nfn projectRadialPosition(pos: vec2<f32>) -> f32 {\n var r: f32 = distance(pos, vec2<f32>(0.5));\n return clamp(2.0 * r, 0.0, 1.0);\n}\n\nfn projectAnglePosition(pos: vec2<f32>, angle: f32) -> f32 {\n var center: vec2<f32> = pos - vec2<f32>(0.5, 0.5);\n var polarAngle: f32 = atan2(-center.y, center.x);\n return ((polarAngle + angle) % PI_2) / PI_2;\n}\n\nfn projectPosition(pos: vec2<f32>, gradientType: i32, angle: f32) -> f32 {\n if (gradientType == TYPE_LINEAR) {\n return projectLinearPosition(pos, angle);\n } else if (gradientType == TYPE_RADIAL) {\n return projectRadialPosition(pos);\n } else if (gradientType == TYPE_CONIC) {\n return projectAnglePosition(pos, angle);\n }\n\n return pos.y;\n}\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>,\n @location(1) coord : vec2<f32>\n) -> @location(0) vec4<f32> {\n let uType: i32 = i32(baseUniforms.uOptions[0]);\n let uAngle: f32 = baseUniforms.uOptions[1];\n let uAlpha: f32 = baseUniforms.uOptions[2];\n let uReplace: f32 = baseUniforms.uOptions[3];\n\n let uNumStops: i32 = i32(baseUniforms.uCounts[0]);\n let uMaxColors: f32 = baseUniforms.uCounts[1];\n\n // current/original color\n var currentColor: vec4<f32> = textureSample(uTexture, uSampler, uv);\n\n // skip calculations if gradient alpha is 0\n if (uAlpha == 0.0) { return currentColor; }\n\n // project position\n var y: f32 = projectPosition(coord, uType, radians(uAngle));\n\n // check gradient bounds\n var offsetMin: f32 = stopsUniforms.uStops[0][0];\n var offsetMax: f32 = 0.0;\n\n let numStops: i32 = uNumStops;\n\n for (var i: i32 = 0; i < MAX_STOPS; i = i + 1) {\n if (i == numStops - 1) { // last index\n offsetMax = stopsUniforms.uStops[i][0];\n }\n }\n\n if (y < offsetMin || y > offsetMax) { return currentColor; }\n\n // limit colors\n if (uMaxColors > 0.0) {\n var stepSize: f32 = 1.0 / uMaxColors;\n var stepNumber: f32 = floor(y / stepSize);\n y = stepSize * (stepNumber + 0.5); // offset by 0.5 to use color from middle of segment\n }\n\n // find color stops\n var stopFrom: ColorStop;\n var stopTo: ColorStop;\n\n for (var i: i32 = 0; i < MAX_STOPS; i = i + 1) {\n if (y >= stopsUniforms.uStops[i][0]) {\n stopFrom = ColorStop(stopsUniforms.uStops[i][0], stopsUniforms.uColors[i], stopsUniforms.uStops[i][1]);\n stopTo = ColorStop(stopsUniforms.uStops[i + 1][0], stopsUniforms.uColors[i + 1], stopsUniforms.uStops[i + 1][1]);\n }\n\n if (i == numStops - 1) { // last index\n break;\n }\n }\n\n // mix colors from stops\n var colorFrom: vec4<f32> = vec4<f32>(stopFrom.color * stopFrom.alpha, stopFrom.alpha);\n var colorTo: vec4<f32> = vec4<f32>(stopTo.color * stopTo.alpha, stopTo.alpha);\n\n var segmentHeight: f32 = stopTo.offset - stopFrom.offset;\n var relativePos: f32 = y - stopFrom.offset; // position from 0 to [segmentHeight]\n var relativePercent: f32 = relativePos / segmentHeight; // position in percent between [from.offset] and [to.offset].\n\n var gradientAlpha: f32 = uAlpha * currentColor.a;\n var gradientColor: vec4<f32> = mix(colorFrom, colorTo, relativePercent) * gradientAlpha;\n\n if (uReplace < 0.5) {\n // mix resulting color with current color\n return gradientColor + currentColor * (1.0 - gradientColor.a);\n } else {\n // replace with gradient color\n return gradientColor;\n }\n}\n\nconst PI: f32 = 3.14159265358979323846264;\nconst PI_2: f32 = PI * 2.0;\n\nconst TYPE_LINEAR: i32 = 0;\nconst TYPE_RADIAL: i32 = 1;\nconst TYPE_CONIC: i32 = 2;\nconst MAX_STOPS: i32 = 32;";init_globals(),init_globals();var visitor,GradientParser=GradientParser||{};GradientParser.stringify=(visitor={"visit_linear-gradient":function(t){return visitor.visit_gradient(t)},"visit_repeating-linear-gradient":function(t){return visitor.visit_gradient(t)},"visit_radial-gradient":function(t){return visitor.visit_gradient(t)},"visit_repeating-radial-gradient":function(t){return visitor.visit_gradient(t)},visit_gradient:function(t){var r=visitor.visit(t.orientation);return r&&(r+=", "),t.type+"("+r+visitor.visit(t.colorStops)+")"},visit_shape:function(t){var r=t.value,n=visitor.visit(t.at),i=visitor.visit(t.style);return i&&(r+=" "+i),n&&(r+=" at "+n),r},"visit_default-radial":function(t){var r="",n=visitor.visit(t.at);return n&&(r+=n),r},"visit_extent-keyword":function(t){var r=t.value,n=visitor.visit(t.at);return n&&(r+=" at "+n),r},"visit_position-keyword":function(t){return t.value},visit_position:function(t){return visitor.visit(t.value.x)+" "+visitor.visit(t.value.y)},"visit_%":function(t){return t.value+"%"},visit_em:function(t){return t.value+"em"},visit_px:function(t){return t.value+"px"},visit_literal:function(t){return visitor.visit_color(t.value,t)},visit_hex:function(t){return visitor.visit_color("#"+t.value,t)},visit_rgb:function(t){return visitor.visit_color("rgb("+t.value.join(", ")+")",t)},visit_rgba:function(t){return visitor.visit_color("rgba("+t.value.join(", ")+")",t)},visit_color:function(t,r){var n=t,i=visitor.visit(r.length);return i&&(n+=" "+i),n},visit_angular:function(t){return t.value+"deg"},visit_directional:function(t){return"to "+t.value},visit_array:function(t){var r="",n=t.length;return t.forEach(function(t,i){r+=visitor.visit(t),i<n-1&&(r+=", ")}),r},visit:function(t){if(!t)return"";if(t instanceof Array)return visitor.visit_array(t,"");if(t.type){var r=visitor["visit_"+t.type];if(r)return r(t);throw Error("Missing visitor visit_"+t.type)}throw Error("Invalid node.")}},function(t){return visitor.visit(t)});var GradientParser=GradientParser||{};GradientParser.parse=function(){var t=/^(\-(webkit|o|ms|moz)\-)?(linear\-gradient)/i,r=/^(\-(webkit|o|ms|moz)\-)?(repeating\-linear\-gradient)/i,n=/^(\-(webkit|o|ms|moz)\-)?(radial\-gradient)/i,i=/^(\-(webkit|o|ms|moz)\-)?(repeating\-radial\-gradient)/i,a=/^to (left (top|bottom)|right (top|bottom)|left|right|top|bottom)/i,o=/^(closest\-side|closest\-corner|farthest\-side|farthest\-corner|contain|cover)/,s=/^(left|center|right|top|bottom)/i,l=/^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))px/,u=/^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))\%/,d=/^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))em/,c=/^(-?(([0-9]*\.[0-9]+)|([0-9]+\.?)))deg/,h=/^\(/,f=/^\)/,p=/^,/,m=/^\#([0-9a-fA-F]+)/,g=/^([a-zA-Z]+)/,b=/^rgb/i,y=/^rgba/i,_=/^(([0-9]*\.[0-9]+)|([0-9]+\.?))/,v="";function A(t){var r=Error(v+": "+t);throw r.source=v,r}function w(){var t=O(x);return v.length>0&&A("Invalid input not EOF"),t}function x(){return E("linear-gradient",t,C)||E("repeating-linear-gradient",r,C)||E("radial-gradient",n,I)||E("repeating-radial-gradient",i,I)}function E(t,r,n){return S(r,function(r){var i=n();return i&&(D(p)||A("Missing comma before color stops")),{type:t,orientation:i,colorStops:O(M)}})}function S(t,r){var n=D(t);if(n){D(h)||A("Missing (");var i=r(n);return D(f)||A("Missing )"),i}}function C(){return L("directional",a,1)||L("angular",c,1)}function I(){var t,r,n=T();return n&&((t=[]).push(n),r=v,D(p)&&((n=T())?t.push(n):v=r)),t}function T(){var t=function(){var t=L("shape",/^(circle)/i,0);return t&&(t.style=B()||k()),t}()||function(){var t=L("shape",/^(ellipse)/i,0);return t&&(t.style=N()||k()),t}();if(t)t.at=P();else{var r=k();if(r){t=r;var n=P();n&&(t.at=n)}else{var i=R();i&&(t={type:"default-radial",at:i})}}return t}function k(){return L("extent-keyword",o,1)}function P(){if(L("position",/^at/,0)){var t=R();return t||A("Missing positioning value"),t}}function R(){var t={x:N(),y:N()};if(t.x||t.y)return{type:"position",value:t}}function O(t){var r=t(),n=[];if(r)for(n.push(r);D(p);)(r=t())?n.push(r):A("One extra comma");return n}function M(){var t=L("hex",m,1)||S(y,function(){return{type:"rgba",value:O(j)}})||S(b,function(){return{type:"rgb",value:O(j)}})||L("literal",g,0);return t||A("Expected color definition"),t.length=N(),t}function j(){return D(_)[1]}function N(){return L("%",u,1)||L("position-keyword",s,1)||B()}function B(){return L("px",l,1)||L("em",d,1)}function L(t,r,n){var i=D(r);if(i)return{type:t,value:i[n]}}function D(t){var r,n;return(n=/^[\n\r\t\s]+/.exec(v))&&U(n[0].length),(r=t.exec(v))&&U(r[0].length),r}function U(t){v=v.substr(t)}return function(t){return v=t.toString(),w()}}();var parse5=GradientParser.parse;function parseCssGradient(t){let r=parse5(trimCssGradient(t));if(0===r.length)throw Error("Invalid CSS gradient.");if(1!==r.length)throw Error("Unsupported CSS gradient (multiple gradients is not supported).");let n=r[0];return{type:typeFromCssType(n.type),stops:stopsFromCssStops(n.colorStops),angle:angleFromCssOrientation(n.orientation)}}function typeFromCssType(t){let r={"linear-gradient":0,"radial-gradient":1};if(!(t in r))throw Error(`Unsupported gradient type "${t}"`);return r[t]}function stopsFromCssStops(t){let r=offsetsFromCssColorStops(t),n=[],i=new Color;for(let a=0;a<t.length;a++){let o=colorAsStringFromCssStop(t[a]),s=i.setValue(o).toArray();n.push({offset:r[a],color:s.slice(0,3),alpha:s[3]})}return n}function colorAsStringFromCssStop(t){switch(t.type){case"hex":return`#${t.value}`;case"literal":return t.value;default:return`${t.type}(${t.value.join(",")})`}}function offsetsFromCssColorStops(t){let r=[];for(let n=0;n<t.length;n++){let i=t[n],a=-1;"literal"===i.type&&i.length&&"type"in i.length&&"%"===i.length.type&&"value"in i.length&&(a=parseFloat(i.length.value)/100),r.push(a)}let n=t=>{for(let n=t;n<r.length;n++)if(-1!==r[n])return{indexDelta:n-t,offset:r[n]};return{indexDelta:r.length-1-t,offset:1}},i=0;for(let t=0;t<r.length;t++){let a=r[t];if(-1!==a)i=a;else if(0===t)r[t]=0;else if(t+1===r.length)r[t]=1;else{let a=n(t),o=(a.offset-i)/(1+a.indexDelta);for(let n=0;n<=a.indexDelta;n++)r[t+n]=i+(n+1)*o;t+=a.indexDelta,i=r[t]}}return r.map(fixFloatRounding)}function fixFloatRounding(t){return t.toString().length>6?parseFloat(t.toString().substring(0,6)):t}function angleFromCssOrientation(t){if(void 0===t)return 0;if("type"in t&&"value"in t)switch(t.type){case"angular":return parseFloat(t.value);case"directional":return angleFromDirectionalValue(t.value)}return 0}function angleFromDirectionalValue(t){let r={left:270,top:0,bottom:180,right:90,"left top":315,"top left":315,"left bottom":225,"bottom left":225,"right top":45,"top right":45,"right bottom":135,"bottom right":135};if(!(t in r))throw Error(`Unsupported directional value "${t}"`);return r[t]}function trimCssGradient(t){let r=t.replace(/\s{2,}/gu," ");return(r=(r=(r=(r=r.replace(/;/g,"")).replace(/ ,/g,",")).replace(/\( /g,"(")).replace(/ \)/g,")")).trim()}GradientParser.stringify;var __defProp10=Object.defineProperty,__defNormalProp10=(t,r,n)=>r in t?__defProp10(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField10=(t,r,n)=>(__defNormalProp10(t,"symbol"!=typeof r?r+"":r,n),n),ANGLE_OFFSET=90;function sortColorStops(t){return[...t].sort((t,r)=>t.offset-r.offset)}var _ColorGradientFilter=class e extends Filter{constructor(t){if(!(t=t&&"css"in t?{...parseCssGradient(t.css||""),alpha:t.alpha??e.defaults.alpha,maxColors:t.maxColors??e.defaults.maxColors}:{...e.defaults,...t}).stops||t.stops.length<2)throw Error("ColorGradientFilter requires at least 2 color stops.");super({gpuProgram:GpuProgram.from({vertex:{source:source11,entryPoint:"mainVertex"},fragment:{source:source11,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex4,fragment:fragment11,name:"color-gradient-filter"}),resources:{baseUniforms:{uOptions:{value:[t.type,t.angle??ANGLE_OFFSET,t.alpha,+!!t.replace],type:"vec4<f32>"},uCounts:{value:[t.stops.length,t.maxColors],type:"vec2<f32>"}},stopsUniforms:{uColors:{value:new Float32Array(96),type:"vec3<f32>",size:32},uStops:{value:new Float32Array(128),type:"vec4<f32>",size:32}}}}),__publicField10(this,"baseUniforms"),__publicField10(this,"stopsUniforms"),__publicField10(this,"_stops",[]),this.baseUniforms=this.resources.baseUniforms.uniforms,this.stopsUniforms=this.resources.stopsUniforms.uniforms,Object.assign(this,t)}get stops(){return this._stops}set stops(t){let r,n,i,a=sortColorStops(t),o=new Color;for(let t=0;t<a.length;t++){o.setValue(a[t].color);let s=3*t;[r,n,i]=o.toArray(),this.stopsUniforms.uColors[s]=r,this.stopsUniforms.uColors[s+1]=n,this.stopsUniforms.uColors[s+2]=i,this.stopsUniforms.uStops[4*t]=a[t].offset,this.stopsUniforms.uStops[4*t+1]=a[t].alpha}this.baseUniforms.uCounts[0]=a.length,this._stops=a}get type(){return this.baseUniforms.uOptions[0]}set type(t){this.baseUniforms.uOptions[0]=t}get angle(){return this.baseUniforms.uOptions[1]+ANGLE_OFFSET}set angle(t){this.baseUniforms.uOptions[1]=t-ANGLE_OFFSET}get alpha(){return this.baseUniforms.uOptions[2]}set alpha(t){this.baseUniforms.uOptions[2]=t}get maxColors(){return this.baseUniforms.uCounts[1]}set maxColors(t){this.baseUniforms.uCounts[1]=t}get replace(){return this.baseUniforms.uOptions[3]>.5}set replace(t){this.baseUniforms.uOptions[3]=+!!t}};__publicField10(_ColorGradientFilter,"LINEAR",0),__publicField10(_ColorGradientFilter,"RADIAL",1),__publicField10(_ColorGradientFilter,"CONIC",2),__publicField10(_ColorGradientFilter,"defaults",{type:_ColorGradientFilter.LINEAR,stops:[{offset:0,color:0xff0000,alpha:1},{offset:1,color:255,alpha:1}],alpha:1,angle:90,maxColors:0,replace:!1}),init_globals(),init_globals();var fragment12="in vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform sampler2D uMapTexture;\nuniform float uMix;\nuniform float uSize;\nuniform float uSliceSize;\nuniform float uSlicePixelSize;\nuniform float uSliceInnerSize;\n\nvoid main() {\n vec4 color = texture(uTexture, vTextureCoord.xy);\n vec4 adjusted;\n\n if (color.a > 0.0) {\n color.rgb /= color.a;\n float innerWidth = uSize - 1.0;\n float zSlice0 = min(floor(color.b * innerWidth), innerWidth);\n float zSlice1 = min(zSlice0 + 1.0, innerWidth);\n float xOffset = uSlicePixelSize * 0.5 + color.r * uSliceInnerSize;\n float s0 = xOffset + (zSlice0 * uSliceSize);\n float s1 = xOffset + (zSlice1 * uSliceSize);\n float yOffset = uSliceSize * 0.5 + color.g * (1.0 - uSliceSize);\n vec4 slice0Color = texture(uMapTexture, vec2(s0,yOffset));\n vec4 slice1Color = texture(uMapTexture, vec2(s1,yOffset));\n float zOffset = fract(color.b * innerWidth);\n adjusted = mix(slice0Color, slice1Color, zOffset);\n\n color.rgb *= color.a;\n }\n\n finalColor = vec4(mix(color, adjusted, uMix).rgb, color.a);\n\n}";init_globals();var source12="struct ColorMapUniforms {\n uMix: f32,\n uSize: f32,\n uSliceSize: f32,\n uSlicePixelSize: f32,\n uSliceInnerSize: f32,\n};\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> colorMapUniforms : ColorMapUniforms;\n@group(1) @binding(1) var uMapTexture: texture_2d<f32>;\n@group(1) @binding(2) var uMapSampler: sampler;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n var color:vec4<f32> = textureSample(uTexture, uSampler, uv);\n\n var adjusted: vec4<f32>;\n\n var altColor: vec4<f32> = vec4<f32>(color.rgb / color.a, color.a);\n let innerWidth: f32 = colorMapUniforms.uSize - 1.0;\n let zSlice0: f32 = min(floor(color.b * innerWidth), innerWidth);\n let zSlice1: f32 = min(zSlice0 + 1.0, innerWidth);\n let xOffset: f32 = colorMapUniforms.uSlicePixelSize * 0.5 + color.r * colorMapUniforms.uSliceInnerSize;\n let s0: f32 = xOffset + (zSlice0 * colorMapUniforms.uSliceSize);\n let s1: f32 = xOffset + (zSlice1 * colorMapUniforms.uSliceSize);\n let yOffset: f32 = colorMapUniforms.uSliceSize * 0.5 + color.g * (1.0 - colorMapUniforms.uSliceSize);\n let slice0Color: vec4<f32> = textureSample(uMapTexture, uMapSampler, vec2(s0,yOffset));\n let slice1Color: vec4<f32> = textureSample(uMapTexture, uMapSampler, vec2(s1,yOffset));\n let zOffset: f32 = fract(color.b * innerWidth);\n adjusted = mix(slice0Color, slice1Color, zOffset);\n altColor = vec4<f32>(color.rgb * color.a, color.a);\n\n let realColor: vec4<f32> = select(color, altColor, color.a > 0.0);\n\n return vec4<f32>(mix(realColor, adjusted, colorMapUniforms.uMix).rgb, realColor.a);\n}",__defProp11=Object.defineProperty,__defNormalProp11=(t,r,n)=>r in t?__defProp11(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField11=(t,r,n)=>(__defNormalProp11(t,"symbol"!=typeof r?r+"":r,n),n),_ColorMapFilter=class e extends Filter{constructor(...t){let r=t[0]??{};if((r instanceof Texture||r instanceof TextureSource)&&(deprecation("6.0.0","ColorMapFilter constructor params are now options object. See params: { colorMap, nearest, mix }"),r={colorMap:r},void 0!==t[1]&&(r.nearest=t[1]),void 0!==t[2]&&(r.mix=t[2])),!(r={...e.DEFAULT_OPTIONS,...r}).colorMap)throw Error("No color map texture source was provided to ColorMapFilter");super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source12,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment12,name:"color-map-filter"}),resources:{colorMapUniforms:{uMix:{value:r.mix,type:"f32"},uSize:{value:0,type:"f32"},uSliceSize:{value:0,type:"f32"},uSlicePixelSize:{value:0,type:"f32"},uSliceInnerSize:{value:0,type:"f32"}},uMapTexture:r.colorMap.source,uMapSampler:r.colorMap.source.style}}),__publicField11(this,"uniforms"),__publicField11(this,"_size",0),__publicField11(this,"_sliceSize",0),__publicField11(this,"_slicePixelSize",0),__publicField11(this,"_sliceInnerSize",0),__publicField11(this,"_nearest",!1),__publicField11(this,"_scaleMode","linear"),__publicField11(this,"_colorMap"),this.uniforms=this.resources.colorMapUniforms.uniforms,Object.assign(this,r)}get mix(){return this.uniforms.uMix}set mix(t){this.uniforms.uMix=t}get colorSize(){return this._size}get colorMap(){return this._colorMap}set colorMap(t){if(!t||t===this.colorMap)return;let r=t instanceof Texture?t.source:t;r.style.scaleMode=this._scaleMode,r.autoGenerateMipmaps=!1,this._size=r.height,this._sliceSize=1/this._size,this._slicePixelSize=this._sliceSize/this._size,this._sliceInnerSize=this._slicePixelSize*(this._size-1),this.uniforms.uSize=this._size,this.uniforms.uSliceSize=this._sliceSize,this.uniforms.uSlicePixelSize=this._slicePixelSize,this.uniforms.uSliceInnerSize=this._sliceInnerSize,this.resources.uMapTexture=r,this._colorMap=t}get nearest(){return this._nearest}set nearest(t){this._nearest=t,this._scaleMode=t?"nearest":"linear";let r=this._colorMap;r&&r.source&&(r.source.scaleMode=this._scaleMode,r.source.autoGenerateMipmaps=!1,r.source.style.update(),r.source.update())}updateColorMap(){let t=this._colorMap;t?.source&&(t.source.update(),this.colorMap=t)}destroy(){this._colorMap?.destroy(),super.destroy()}};__publicField11(_ColorMapFilter,"DEFAULT_OPTIONS",{colorMap:Texture.WHITE,nearest:!1,mix:1}),init_globals(),init_globals();var fragment13="in vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec3 uColor;\nuniform float uAlpha;\n\nvoid main(void) {\n vec4 c = texture(uTexture, vTextureCoord);\n finalColor = vec4(mix(c.rgb, uColor.rgb, c.a * uAlpha), c.a);\n}\n";init_globals();var source13="struct ColorOverlayUniforms {\n uColor: vec3<f32>,\n uAlpha: f32,\n};\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> colorOverlayUniforms : ColorOverlayUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let c = textureSample(uTexture, uSampler, uv);\n return vec4<f32>(mix(c.rgb, colorOverlayUniforms.uColor.rgb, c.a * colorOverlayUniforms.uAlpha), c.a);\n}\n",__defProp12=Object.defineProperty,__defNormalProp12=(t,r,n)=>r in t?__defProp12(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField12=(t,r,n)=>(__defNormalProp12(t,"symbol"!=typeof r?r+"":r,n),n),_ColorOverlayFilter=class e extends Filter{constructor(...t){let r=t[0]??{};("number"==typeof r||Array.isArray(r)||r instanceof Float32Array)&&(deprecation("6.0.0","ColorOverlayFilter constructor params are now options object. See params: { color, alpha }"),r={color:r},void 0!==t[1]&&(r.alpha=t[1])),super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source13,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment13,name:"color-overlay-filter"}),resources:{colorOverlayUniforms:{uColor:{value:new Float32Array(3),type:"vec3<f32>"},uAlpha:{value:(r={...e.DEFAULT_OPTIONS,...r}).alpha,type:"f32"}}}}),__publicField12(this,"uniforms"),__publicField12(this,"_color"),this.uniforms=this.resources.colorOverlayUniforms.uniforms,this._color=new Color,this.color=r.color??0}get color(){return this._color.value}set color(t){this._color.setValue(t);let[r,n,i]=this._color.toArray();this.uniforms.uColor[0]=r,this.uniforms.uColor[1]=n,this.uniforms.uColor[2]=i}get alpha(){return this.uniforms.uAlpha}set alpha(t){this.uniforms.uAlpha=t}};__publicField12(_ColorOverlayFilter,"DEFAULT_OPTIONS",{color:0,alpha:1}),init_globals(),init_globals();var fragment14="in vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec3 uOriginalColor;\nuniform vec3 uTargetColor;\nuniform float uTolerance;\n\nvoid main(void) {\n vec4 c = texture(uTexture, vTextureCoord);\n vec3 colorDiff = uOriginalColor - (c.rgb / max(c.a, 0.0000000001));\n float colorDistance = length(colorDiff);\n float doReplace = step(colorDistance, uTolerance);\n finalColor = vec4(mix(c.rgb, (uTargetColor + colorDiff) * c.a, doReplace), c.a);\n}\n";init_globals();var source14="struct ColorReplaceUniforms {\n uOriginalColor: vec3<f32>,\n uTargetColor: vec3<f32>,\n uTolerance: f32,\n};\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> colorReplaceUniforms : ColorReplaceUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let sample: vec4<f32> = textureSample(uTexture, uSampler, uv);\n\n let colorDiff: vec3<f32> = colorReplaceUniforms.uOriginalColor - (sample.rgb / max(sample.a, 0.0000000001));\n let colorDistance: f32 = length(colorDiff);\n let doReplace: f32 = step(colorDistance, colorReplaceUniforms.uTolerance);\n\n return vec4<f32>(mix(sample.rgb, (colorReplaceUniforms.uTargetColor + colorDiff) * sample.a, doReplace), sample.a);\n}",__defProp13=Object.defineProperty,__defNormalProp13=(t,r,n)=>r in t?__defProp13(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField13=(t,r,n)=>(__defNormalProp13(t,"symbol"!=typeof r?r+"":r,n),n),_ColorReplaceFilter=class e extends Filter{constructor(...t){let r=t[0]??{};("number"==typeof r||Array.isArray(r)||r instanceof Float32Array)&&(deprecation("6.0.0","ColorReplaceFilter constructor params are now options object. See params: { originalColor, targetColor, tolerance }"),r={originalColor:r},void 0!==t[1]&&(r.targetColor=t[1]),void 0!==t[2]&&(r.tolerance=t[2])),super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source14,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment14,name:"color-replace-filter"}),resources:{colorReplaceUniforms:{uOriginalColor:{value:new Float32Array(3),type:"vec3<f32>"},uTargetColor:{value:new Float32Array(3),type:"vec3<f32>"},uTolerance:{value:(r={...e.DEFAULT_OPTIONS,...r}).tolerance,type:"f32"}}}}),__publicField13(this,"uniforms"),__publicField13(this,"_originalColor"),__publicField13(this,"_targetColor"),this.uniforms=this.resources.colorReplaceUniforms.uniforms,this._originalColor=new Color,this._targetColor=new Color,this.originalColor=r.originalColor??0xff0000,this.targetColor=r.targetColor??0,Object.assign(this,r)}get originalColor(){return this._originalColor.value}set originalColor(t){this._originalColor.setValue(t);let[r,n,i]=this._originalColor.toArray();this.uniforms.uOriginalColor[0]=r,this.uniforms.uOriginalColor[1]=n,this.uniforms.uOriginalColor[2]=i}get targetColor(){return this._targetColor.value}set targetColor(t){this._targetColor.setValue(t);let[r,n,i]=this._targetColor.toArray();this.uniforms.uTargetColor[0]=r,this.uniforms.uTargetColor[1]=n,this.uniforms.uTargetColor[2]=i}get tolerance(){return this.uniforms.uTolerance}set tolerance(t){this.uniforms.uTolerance=t}set newColor(t){deprecation("6.0.0","ColorReplaceFilter.newColor is deprecated, please use ColorReplaceFilter.targetColor instead"),this.targetColor=t}get newColor(){return deprecation("6.0.0","ColorReplaceFilter.newColor is deprecated, please use ColorReplaceFilter.targetColor instead"),this.targetColor}set epsilon(t){deprecation("6.0.0","ColorReplaceFilter.epsilon is deprecated, please use ColorReplaceFilter.tolerance instead"),this.tolerance=t}get epsilon(){return deprecation("6.0.0","ColorReplaceFilter.epsilon is deprecated, please use ColorReplaceFilter.tolerance instead"),this.tolerance}};__publicField13(_ColorReplaceFilter,"DEFAULT_OPTIONS",{originalColor:0xff0000,targetColor:0,tolerance:.4}),init_globals(),init_globals();var fragment15="in vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec2 uTexelSize;\nuniform mat3 uMatrix;\n\nvoid main(void)\n{\n vec4 c11 = texture(uTexture, vTextureCoord - uTexelSize); // top left\n vec4 c12 = texture(uTexture, vec2(vTextureCoord.x, vTextureCoord.y - uTexelSize.y)); // top center\n vec4 c13 = texture(uTexture, vec2(vTextureCoord.x + uTexelSize.x, vTextureCoord.y - uTexelSize.y)); // top right\n\n vec4 c21 = texture(uTexture, vec2(vTextureCoord.x - uTexelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture(uTexture, vTextureCoord); // mid center\n vec4 c23 = texture(uTexture, vec2(vTextureCoord.x + uTexelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture(uTexture, vec2(vTextureCoord.x - uTexelSize.x, vTextureCoord.y + uTexelSize.y)); // bottom left\n vec4 c32 = texture(uTexture, vec2(vTextureCoord.x, vTextureCoord.y + uTexelSize.y)); // bottom center\n vec4 c33 = texture(uTexture, vTextureCoord + uTexelSize); // bottom right\n\n finalColor =\n c11 * uMatrix[0][0] + c12 * uMatrix[0][1] + c13 * uMatrix[0][2] +\n c21 * uMatrix[1][0] + c22 * uMatrix[1][1] + c23 * uMatrix[1][2] +\n c31 * uMatrix[2][0] + c32 * uMatrix[2][1] + c33 * uMatrix[2][2];\n\n finalColor.a = c22.a;\n}";init_globals();var source15="struct ConvolutionUniforms {\n uMatrix: mat3x3<f32>,\n uTexelSize: vec2<f32>,\n};\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> convolutionUniforms : ConvolutionUniforms;\n\n@fragment\nfn mainFragment(\n @location(0) uv: vec2<f32>,\n @builtin(position) position: vec4<f32>\n) -> @location(0) vec4<f32> {\n let texelSize = convolutionUniforms.uTexelSize;\n let matrix = convolutionUniforms.uMatrix;\n\n let c11: vec4<f32> = textureSample(uTexture, uSampler, uv - texelSize); // top left\n let c12: vec4<f32> = textureSample(uTexture, uSampler, vec2<f32>(uv.x, uv.y - texelSize.y)); // top center\n let c13: vec4<f32> = textureSample(uTexture, uSampler, vec2<f32>(uv.x + texelSize.x, uv.y - texelSize.y)); // top right\n\n let c21: vec4<f32> = textureSample(uTexture, uSampler, vec2<f32>(uv.x - texelSize.x, uv.y)); // mid left\n let c22: vec4<f32> = textureSample(uTexture, uSampler, uv); // mid center\n let c23: vec4<f32> = textureSample(uTexture, uSampler, vec2<f32>(uv.x + texelSize.x, uv.y)); // mid right\n\n let c31: vec4<f32> = textureSample(uTexture, uSampler, vec2<f32>(uv.x - texelSize.x, uv.y + texelSize.y)); // bottom left\n let c32: vec4<f32> = textureSample(uTexture, uSampler, vec2<f32>(uv.x, uv.y + texelSize.y)); // bottom center\n let c33: vec4<f32> = textureSample(uTexture, uSampler, uv + texelSize); // bottom right\n\n var finalColor: vec4<f32> = vec4<f32>(\n c11 * matrix[0][0] + c12 * matrix[0][1] + c13 * matrix[0][2] +\n c21 * matrix[1][0] + c22 * matrix[1][1] + c23 * matrix[1][2] +\n c31 * matrix[2][0] + c32 * matrix[2][1] + c33 * matrix[2][2]\n );\n\n finalColor.a = c22.a;\n\n return finalColor;\n}",__defProp14=Object.defineProperty,__defNormalProp14=(t,r,n)=>r in t?__defProp14(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField14=(t,r,n)=>(__defNormalProp14(t,"symbol"!=typeof r?r+"":r,n),n),_ConvolutionFilter=class e extends Filter{constructor(...t){let r=t[0]??{};Array.isArray(r)&&(deprecation("6.0.0","ConvolutionFilter constructor params are now options object. See params: { matrix, width, height }"),r={matrix:r},void 0!==t[1]&&(r.width=t[1]),void 0!==t[2]&&(r.height=t[2]));let n=(r={...e.DEFAULT_OPTIONS,...r}).width??200,i=r.height??200;super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source15,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment15,name:"convolution-filter"}),resources:{convolutionUniforms:{uMatrix:{value:r.matrix,type:"mat3x3<f32>"},uTexelSize:{value:{x:1/n,y:1/i},type:"vec2<f32>"}}}}),__publicField14(this,"uniforms"),this.uniforms=this.resources.convolutionUniforms.uniforms,this.width=n,this.height=i}get matrix(){return this.uniforms.uMatrix}set matrix(t){t.forEach((t,r)=>{this.uniforms.uMatrix[r]=t})}get width(){return 1/this.uniforms.uTexelSize.x}set width(t){this.uniforms.uTexelSize.x=1/t}get height(){return 1/this.uniforms.uTexelSize.y}set height(t){this.uniforms.uTexelSize.y=1/t}};__publicField14(_ConvolutionFilter,"DEFAULT_OPTIONS",{matrix:new Float32Array(9),width:200,height:200}),init_globals(),init_globals(),init_globals(),init_globals(),init_globals();var fragment17="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec4 uLine;\nuniform vec2 uNoise;\nuniform vec3 uVignette;\nuniform float uSeed;\nuniform float uTime;\nuniform vec2 uDimensions;\n\nuniform vec4 uInputSize;\n\nconst float SQRT_2 = 1.414213;\n\nfloat rand(vec2 co) {\n return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);\n}\n\nfloat vignette(vec3 co, vec2 coord)\n{\n float outter = SQRT_2 - uVignette[0] * SQRT_2;\n vec2 dir = vec2(0.5) - coord;\n dir.y *= uDimensions.y / uDimensions.x;\n float darker = clamp((outter - length(dir) * SQRT_2) / ( 0.00001 + uVignette[2] * SQRT_2), 0.0, 1.0);\n return darker + (1.0 - darker) * (1.0 - uVignette[1]);\n}\n\nfloat noise(vec2 coord)\n{\n vec2 pixelCoord = coord * uInputSize.xy;\n pixelCoord.x = floor(pixelCoord.x / uNoise[1]);\n pixelCoord.y = floor(pixelCoord.y / uNoise[1]);\n return (rand(pixelCoord * uNoise[1] * uSeed) - 0.5) * uNoise[0];\n}\n\nvec3 interlaceLines(vec3 co, vec2 coord)\n{\n vec3 color = co;\n\n float curvature = uLine[0];\n float lineWidth = uLine[1];\n float lineContrast = uLine[2];\n float verticalLine = uLine[3];\n\n vec2 dir = vec2(coord * uInputSize.xy / uDimensions - 0.5);\n\n float _c = curvature > 0. ? curvature : 1.;\n float k = curvature > 0. ? (length(dir * dir) * 0.25 * _c * _c + 0.935 * _c) : 1.;\n vec2 uv = dir * k;\n float v = verticalLine > 0.5 ? uv.x * uDimensions.x : uv.y * uDimensions.y;\n v *= min(1.0, 2.0 / lineWidth ) / _c;\n float j = 1. + cos(v * 1.2 - uTime) * 0.5 * lineContrast;\n color *= j;\n\n float segment = verticalLine > 0.5 ? mod((dir.x + .5) * uDimensions.x, 4.) : mod((dir.y + .5) * uDimensions.y, 4.);\n color *= 0.99 + ceil(segment) * 0.015;\n\n return color;\n}\n\nvoid main(void)\n{\n finalColor = texture(uTexture, vTextureCoord);\n vec2 coord = vTextureCoord * uInputSize.xy / uDimensions;\n\n if (uNoise[0] > 0.0 && uNoise[1] > 0.0)\n {\n float n = noise(vTextureCoord);\n finalColor += vec4(n, n, n, finalColor.a);\n }\n\n if (uVignette[0] > 0.)\n {\n float v = vignette(finalColor.rgb, coord);\n finalColor *= vec4(v, v, v, finalColor.a);\n }\n\n if (uLine[1] > 0.0)\n {\n finalColor = vec4(interlaceLines(finalColor.rgb, vTextureCoord), finalColor.a); \n }\n}\n";init_globals();var source17="struct CRTUniforms {\n uLine: vec4<f32>,\n uNoise: vec2<f32>,\n uVignette: vec3<f32>,\n uSeed: f32,\n uTime: f32,\n uDimensions: vec2<f32>,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> crtUniforms : CRTUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n \n var color: vec4<f32> = textureSample(uTexture, uSampler, uv);\n let coord: vec2<f32> = uv * gfu.uInputSize.xy / crtUniforms.uDimensions;\n\n let uNoise = crtUniforms.uNoise;\n\n if (uNoise[0] > 0.0 && uNoise[1] > 0.0)\n {\n color += vec4<f32>(vec3<f32>(noise(uv)), color.a);\n }\n\n if (crtUniforms.uVignette[0] > 0.)\n {\n color *= vec4<f32>(vec3<f32>(vignette(color.rgb, coord)), color.a);\n }\n\n if (crtUniforms.uLine[1] > 0.0)\n {\n color = vec4<f32>(vec3<f32>(interlaceLines(color.rgb, uv)), color.a); \n }\n\n return color;\n}\n\nconst SQRT_2: f32 = 1.414213;\n\nfn modulo(x: f32, y: f32) -> f32\n{\n return x - y * floor(x/y);\n}\n\nfn rand(co: vec2<f32>) -> f32\n{\n return fract(sin(dot(co, vec2<f32>(12.9898, 78.233))) * 43758.5453);\n}\n\nfn vignette(co: vec3<f32>, coord: vec2<f32>) -> f32\n{\n let uVignette = crtUniforms.uVignette;\n let uDimensions = crtUniforms.uDimensions;\n \n let outter: f32 = SQRT_2 - uVignette[0] * SQRT_2;\n var dir: vec2<f32> = vec2<f32>(0.5) - coord;\n dir.y *= uDimensions.y / uDimensions.x;\n let darker: f32 = clamp((outter - length(dir) * SQRT_2) / ( 0.00001 + uVignette[2] * SQRT_2), 0.0, 1.0);\n return darker + (1.0 - darker) * (1.0 - uVignette[1]);\n}\n\nfn noise(coord: vec2<f32>) -> f32\n{\n let uNoise = crtUniforms.uNoise;\n let uSeed = crtUniforms.uSeed;\n\n var pixelCoord: vec2<f32> = coord * gfu.uInputSize.xy;\n pixelCoord.x = floor(pixelCoord.x / uNoise[1]);\n pixelCoord.y = floor(pixelCoord.y / uNoise[1]);\n return (rand(pixelCoord * uNoise[1] * uSeed) - 0.5) * uNoise[0];\n}\n\nfn interlaceLines(co: vec3<f32>, coord: vec2<f32>) -> vec3<f32>\n{\n var color = co;\n\n let uDimensions = crtUniforms.uDimensions;\n\n let curvature: f32 = crtUniforms.uLine[0];\n let lineWidth: f32 = crtUniforms.uLine[1];\n let lineContrast: f32 = crtUniforms.uLine[2];\n let verticalLine: f32 = crtUniforms.uLine[3];\n\n let dir: vec2<f32> = vec2<f32>(coord * gfu.uInputSize.xy / uDimensions - 0.5);\n\n let _c: f32 = select(1., curvature, curvature > 0.);\n let k: f32 = select(1., (length(dir * dir) * 0.25 * _c * _c + 0.935 * _c), curvature > 0.);\n let uv: vec2<f32> = dir * k;\n let v: f32 = select(uv.y * uDimensions.y, uv.x * uDimensions.x, verticalLine > 0.5) * min(1.0, 2.0 / lineWidth ) / _c;\n let j: f32 = 1. + cos(v * 1.2 - crtUniforms.uTime) * 0.5 * lineContrast;\n color *= j;\n\n let segment: f32 = select(modulo((dir.y + .5) * uDimensions.y, 4.), modulo((dir.x + .5) * uDimensions.x, 4.), verticalLine > 0.5);\n color *= 0.99 + ceil(segment) * 0.015;\n\n return color;\n}",__defProp15=Object.defineProperty,__defNormalProp15=(t,r,n)=>r in t?__defProp15(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField15=(t,r,n)=>(__defNormalProp15(t,"symbol"!=typeof r?r+"":r,n),n),_CRTFilter=class e extends Filter{constructor(t){t={...e.DEFAULT_OPTIONS,...t},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source17,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment17,name:"crt-filter"}),resources:{crtUniforms:{uLine:{value:new Float32Array(4),type:"vec4<f32>"},uNoise:{value:new Float32Array(2),type:"vec2<f32>"},uVignette:{value:new Float32Array(3),type:"vec3<f32>"},uSeed:{value:t.seed,type:"f32"},uTime:{value:t.time,type:"f32"},uDimensions:{value:new Float32Array(2),type:"vec2<f32>"}}}}),__publicField15(this,"uniforms"),__publicField15(this,"seed"),__publicField15(this,"time"),this.uniforms=this.resources.crtUniforms.uniforms,Object.assign(this,t)}apply(t,r,n,i){this.uniforms.uDimensions[0]=r.frame.width,this.uniforms.uDimensions[1]=r.frame.height,this.uniforms.uSeed=this.seed,this.uniforms.uTime=this.time,t.applyFilter(this,r,n,i)}get curvature(){return this.uniforms.uLine[0]}set curvature(t){this.uniforms.uLine[0]=t}get lineWidth(){return this.uniforms.uLine[1]}set lineWidth(t){this.uniforms.uLine[1]=t}get lineContrast(){return this.uniforms.uLine[2]}set lineContrast(t){this.uniforms.uLine[2]=t}get verticalLine(){return this.uniforms.uLine[3]>.5}set verticalLine(t){this.uniforms.uLine[3]=+!!t}get noise(){return this.uniforms.uNoise[0]}set noise(t){this.uniforms.uNoise[0]=t}get noiseSize(){return this.uniforms.uNoise[1]}set noiseSize(t){this.uniforms.uNoise[1]=t}get vignetting(){return this.uniforms.uVignette[0]}set vignetting(t){this.uniforms.uVignette[0]=t}get vignettingAlpha(){return this.uniforms.uVignette[1]}set vignettingAlpha(t){this.uniforms.uVignette[1]=t}get vignettingBlur(){return this.uniforms.uVignette[2]}set vignettingBlur(t){this.uniforms.uVignette[2]=t}};__publicField15(_CRTFilter,"DEFAULT_OPTIONS",{curvature:1,lineWidth:1,lineContrast:.25,verticalLine:!1,noise:0,noiseSize:1,vignetting:.3,vignettingAlpha:1,vignettingBlur:.3,time:0,seed:0}),init_globals(),init_globals();var fragment18="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform float uAngle;\nuniform float uScale;\nuniform bool uGrayScale;\n\nuniform vec4 uInputSize;\n\nfloat pattern()\n{\n float s = sin(uAngle), c = cos(uAngle);\n vec2 tex = vTextureCoord * uInputSize.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * uScale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n }\n\n void main()\n {\n vec4 color = texture(uTexture, vTextureCoord);\n vec3 colorRGB = vec3(color);\n\n if (uGrayScale)\n {\n colorRGB = vec3(color.r + color.g + color.b) / 3.0;\n }\n\n finalColor = vec4(colorRGB * 10.0 - 5.0 + pattern(), color.a);\n}\n";init_globals();var source18="struct DotUniforms {\n uScale:f32,\n uAngle:f32,\n uGrayScale:f32,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> dotUniforms : DotUniforms;\n\n@fragment\nfn mainFragment(\n @location(0) uv: vec2<f32>,\n @builtin(position) position: vec4<f32>\n) -> @location(0) vec4<f32> {\n let color: vec4<f32> = textureSample(uTexture, uSampler, uv);\n let gray: vec3<f32> = vec3<f32>(dot(color.rgb, vec3<f32>(0.299, 0.587, 0.114)));\n // dotUniforms.uGrayScale == 1 doesn't ever pass so it is converted to a float and compared to 0.5 instead \n let finalColor: vec3<f32> = select(color.rgb, gray, f32(dotUniforms.uGrayScale) >= 0.5);\n\n return vec4<f32>(finalColor * 10.0 - 5.0 + pattern(uv), color.a);\n}\n\nfn pattern(uv: vec2<f32>) -> f32\n{\n let s: f32 = sin(dotUniforms.uAngle);\n let c: f32 = cos(dotUniforms.uAngle);\n \n let tex: vec2<f32> = uv * gfu.uInputSize.xy;\n \n let p: vec2<f32> = vec2<f32>(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * dotUniforms.uScale;\n\n return (sin(p.x) * sin(p.y)) * 4.0;\n}",__defProp16=Object.defineProperty,__defNormalProp16=(t,r,n)=>r in t?__defProp16(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField16=(t,r,n)=>(__defNormalProp16(t,"symbol"!=typeof r?r+"":r,n),n),_DotFilter=class e extends Filter{constructor(...t){let r=t[0]??{};"number"==typeof r&&(deprecation("6.0.0","DotFilter constructor params are now options object. See params: { scale, angle, grayscale }"),r={scale:r},void 0!==t[1]&&(r.angle=t[1]),void 0!==t[2]&&(r.grayscale=t[2])),super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source18,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment18,name:"dot-filter"}),resources:{dotUniforms:{uScale:{value:(r={...e.DEFAULT_OPTIONS,...r}).scale,type:"f32"},uAngle:{value:r.angle,type:"f32"},uGrayScale:{value:+!!r.grayscale,type:"f32"}}}})}get scale(){return this.resources.dotUniforms.uniforms.uScale}set scale(t){this.resources.dotUniforms.uniforms.uScale=t}get angle(){return this.resources.dotUniforms.uniforms.uAngle}set angle(t){this.resources.dotUniforms.uniforms.uAngle=t}get grayscale(){return 1===this.resources.dotUniforms.uniforms.uGrayScale}set grayscale(t){this.resources.dotUniforms.uniforms.uGrayScale=+!!t}};__publicField16(_DotFilter,"DEFAULT_OPTIONS",{scale:1,angle:5,grayscale:!0}),init_globals(),init_globals();var fragment19="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform float uAlpha;\nuniform vec3 uColor;\nuniform vec2 uOffset;\n\nuniform vec4 uInputSize;\n\nvoid main(void){\n vec4 sample = texture(uTexture, vTextureCoord - uOffset * uInputSize.zw);\n\n // Premultiply alpha\n sample.rgb = uColor.rgb * sample.a;\n\n // alpha user alpha\n sample *= uAlpha;\n\n finalColor = sample;\n}";init_globals();var source19="struct DropShadowUniforms {\n uAlpha: f32,\n uColor: vec3<f32>,\n uOffset: vec2<f32>,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> dropShadowUniforms : DropShadowUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n var color: vec4<f32> = textureSample(uTexture, uSampler, uv - dropShadowUniforms.uOffset * gfu.uInputSize.zw);\n\n // Premultiply alpha\n color = vec4<f32>(vec3<f32>(dropShadowUniforms.uColor.rgb * color.a), color.a);\n // alpha user alpha\n color *= dropShadowUniforms.uAlpha;\n\n return color;\n}",__defProp17=Object.defineProperty,__defNormalProp17=(t,r,n)=>r in t?__defProp17(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField17=(t,r,n)=>(__defNormalProp17(t,"symbol"!=typeof r?r+"":r,n),n),_DropShadowFilter=class e extends Filter{constructor(t){t={...e.DEFAULT_OPTIONS,...t},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source19,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment19,name:"drop-shadow-filter"}),resources:{dropShadowUniforms:{uAlpha:{value:t.alpha,type:"f32"},uColor:{value:new Float32Array(3),type:"vec3<f32>"},uOffset:{value:t.offset,type:"vec2<f32>"}}},resolution:t.resolution}),__publicField17(this,"uniforms"),__publicField17(this,"shadowOnly",!1),__publicField17(this,"_color"),__publicField17(this,"_blurFilter"),__publicField17(this,"_basePass"),this.uniforms=this.resources.dropShadowUniforms.uniforms,this._color=new Color,this.color=t.color??0,this._blurFilter=new KawaseBlurFilter({strength:t.kernels??t.blur,quality:t.kernels?void 0:t.quality}),this._basePass=new Filter({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:"\n @group(0) @binding(1) var uTexture: texture_2d<f32>; \n @group(0) @binding(2) var uSampler: sampler;\n @fragment\n fn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n ) -> @location(0) vec4<f32> {\n return textureSample(uTexture, uSampler, uv);\n }\n ",entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:"\n in vec2 vTextureCoord;\n out vec4 finalColor;\n uniform sampler2D uTexture;\n\n void main(void){\n finalColor = texture(uTexture, vTextureCoord);\n }\n ",name:"drop-shadow-filter"}),resources:{}}),Object.assign(this,t)}apply(t,r,n,i){let a=TexturePool.getSameSizeTexture(r);t.applyFilter(this,r,a,!0),this._blurFilter.apply(t,a,n,i),this.shadowOnly||t.applyFilter(this._basePass,r,n,!1),TexturePool.returnTexture(a)}get offset(){return this.uniforms.uOffset}set offset(t){this.uniforms.uOffset=t,this._updatePadding()}get offsetX(){return this.offset.x}set offsetX(t){this.offset.x=t,this._updatePadding()}get offsetY(){return this.offset.y}set offsetY(t){this.offset.y=t,this._updatePadding()}get color(){return this._color.value}set color(t){this._color.setValue(t);let[r,n,i]=this._color.toArray();this.uniforms.uColor[0]=r,this.uniforms.uColor[1]=n,this.uniforms.uColor[2]=i}get alpha(){return this.uniforms.uAlpha}set alpha(t){this.uniforms.uAlpha=t}get blur(){return this._blurFilter.strength}set blur(t){this._blurFilter.strength=t,this._updatePadding()}get quality(){return this._blurFilter.quality}set quality(t){this._blurFilter.quality=t,this._updatePadding()}get kernels(){return this._blurFilter.kernels}set kernels(t){this._blurFilter.kernels=t}get pixelSize(){return this._blurFilter.pixelSize}set pixelSize(t){"number"==typeof t&&(t={x:t,y:t}),Array.isArray(t)&&(t={x:t[0],y:t[1]}),this._blurFilter.pixelSize=t}get pixelSizeX(){return this._blurFilter.pixelSizeX}set pixelSizeX(t){this._blurFilter.pixelSizeX=t}get pixelSizeY(){return this._blurFilter.pixelSizeY}set pixelSizeY(t){this._blurFilter.pixelSizeY=t}_updatePadding(){let t=Math.max(Math.abs(this.offsetX),Math.abs(this.offsetY));this.padding=t+2*this.blur+4*this.quality}};__publicField17(_DropShadowFilter,"DEFAULT_OPTIONS",{offset:{x:4,y:4},color:0,alpha:.5,shadowOnly:!1,kernels:void 0,blur:2,quality:3,pixelSize:{x:1,y:1},resolution:1});var DropShadowFilter=_DropShadowFilter;init_globals(),init_globals(),init_globals(),init_globals(),init_globals();var fragment21="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform sampler2D uDisplacementMap;\nuniform float uSeed;\nuniform vec2 uDimensions;\nuniform float uAspect;\nuniform float uFillMode;\nuniform float uOffset;\nuniform float uDirection;\nuniform vec2 uRed;\nuniform vec2 uGreen;\nuniform vec2 uBlue;\n\nuniform vec4 uInputSize;\nuniform vec4 uInputClamp;\n\nconst int TRANSPARENT = 0;\nconst int ORIGINAL = 1;\nconst int LOOP = 2;\nconst int CLAMP = 3;\nconst int MIRROR = 4;\n\nvoid main(void)\n{\n vec2 coord = (vTextureCoord * uInputSize.xy) / uDimensions;\n\n if (coord.x > 1.0 || coord.y > 1.0) {\n return;\n }\n\n float sinDir = sin(uDirection);\n float cosDir = cos(uDirection);\n\n float cx = coord.x - 0.5;\n float cy = (coord.y - 0.5) * uAspect;\n float ny = (-sinDir * cx + cosDir * cy) / uAspect + 0.5;\n\n // displacementMap: repeat\n // ny = ny > 1.0 ? ny - 1.0 : (ny < 0.0 ? 1.0 + ny : ny);\n\n // displacementMap: mirror\n ny = ny > 1.0 ? 2.0 - ny : (ny < 0.0 ? -ny : ny);\n\n vec4 dc = texture(uDisplacementMap, vec2(0.5, ny));\n\n float displacement = (dc.r - dc.g) * (uOffset / uInputSize.x);\n\n coord = vTextureCoord + vec2(cosDir * displacement, sinDir * displacement * uAspect);\n\n int fillMode = int(uFillMode);\n\n if (fillMode == CLAMP) {\n coord = clamp(coord, uInputClamp.xy, uInputClamp.zw);\n } else {\n if( coord.x > uInputClamp.z ) {\n if (fillMode == TRANSPARENT) {\n discard;\n } else if (fillMode == LOOP) {\n coord.x -= uInputClamp.z;\n } else if (fillMode == MIRROR) {\n coord.x = uInputClamp.z * 2.0 - coord.x;\n }\n } else if( coord.x < uInputClamp.x ) {\n if (fillMode == TRANSPARENT) {\n discard;\n } else if (fillMode == LOOP) {\n coord.x += uInputClamp.z;\n } else if (fillMode == MIRROR) {\n coord.x *= -uInputClamp.z;\n }\n }\n\n if( coord.y > uInputClamp.w ) {\n if (fillMode == TRANSPARENT) {\n discard;\n } else if (fillMode == LOOP) {\n coord.y -= uInputClamp.w;\n } else if (fillMode == MIRROR) {\n coord.y = uInputClamp.w * 2.0 - coord.y;\n }\n } else if( coord.y < uInputClamp.y ) {\n if (fillMode == TRANSPARENT) {\n discard;\n } else if (fillMode == LOOP) {\n coord.y += uInputClamp.w;\n } else if (fillMode == MIRROR) {\n coord.y *= -uInputClamp.w;\n }\n }\n }\n\n finalColor.r = texture(uTexture, coord + uRed * (1.0 - uSeed * 0.4) / uInputSize.xy).r;\n finalColor.g = texture(uTexture, coord + uGreen * (1.0 - uSeed * 0.3) / uInputSize.xy).g;\n finalColor.b = texture(uTexture, coord + uBlue * (1.0 - uSeed * 0.2) / uInputSize.xy).b;\n finalColor.a = texture(uTexture, coord).a;\n}\n";init_globals();var source21="struct GlitchUniforms {\n uSeed: f32,\n uDimensions: vec2<f32>,\n uAspect: f32,\n uFillMode: f32,\n uOffset: f32,\n uDirection: f32,\n uRed: vec2<f32>,\n uGreen: vec2<f32>,\n uBlue: vec2<f32>,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> glitchUniforms : GlitchUniforms;\n@group(1) @binding(1) var uDisplacementMap: texture_2d<f32>; \n@group(1) @binding(2) var uDisplacementSampler: sampler; \n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let uSeed: f32 = glitchUniforms.uSeed;\n let uDimensions: vec2<f32> = glitchUniforms.uDimensions;\n let uAspect: f32 = glitchUniforms.uAspect;\n let uOffset: f32 = glitchUniforms.uOffset;\n let uDirection: f32 = glitchUniforms.uDirection;\n let uRed: vec2<f32> = glitchUniforms.uRed;\n let uGreen: vec2<f32> = glitchUniforms.uGreen;\n let uBlue: vec2<f32> = glitchUniforms.uBlue;\n\n let uInputSize: vec4<f32> = gfu.uInputSize;\n let uInputClamp: vec4<f32> = gfu.uInputClamp;\n\n var discarded: bool = false;\n var coord: vec2<f32> = (uv * uInputSize.xy) / uDimensions;\n\n if (coord.x > 1.0 || coord.y > 1.0) {\n discarded = true;\n }\n\n let sinDir: f32 = sin(uDirection);\n let cosDir: f32 = cos(uDirection);\n\n let cx: f32 = coord.x - 0.5;\n let cy: f32 = (coord.y - 0.5) * uAspect;\n var ny: f32 = (-sinDir * cx + cosDir * cy) / uAspect + 0.5;\n\n ny = select(select(ny, -ny, ny < 0.0), 2.0 - ny, ny > 1.0);\n\n let dc: vec4<f32> = textureSample(uDisplacementMap, uDisplacementSampler, vec2<f32>(0.5, ny));\n\n let displacement: f32 = (dc.r - dc.g) * (uOffset / uInputSize.x);\n\n coord = uv + vec2<f32>(cosDir * displacement, sinDir * displacement * uAspect);\n\n let fillMode: i32 = i32(glitchUniforms.uFillMode);\n\n if (fillMode == CLAMP) {\n coord = clamp(coord, uInputClamp.xy, uInputClamp.zw);\n } else {\n if (coord.x > uInputClamp.z) {\n if (fillMode == TRANSPARENT) {\n discarded = true;\n } else if (fillMode == LOOP) {\n coord.x = coord.x - uInputClamp.z;\n } else if (fillMode == MIRROR) {\n coord.x = uInputClamp.z * 2.0 - coord.x;\n }\n } else if (coord.x < uInputClamp.x) {\n if (fillMode == TRANSPARENT) {\n discarded = true;\n } else if (fillMode == LOOP) {\n coord.x = coord.x + uInputClamp.z;\n } else if (fillMode == MIRROR) {\n coord.x = coord.x * -uInputClamp.z;\n }\n }\n\n if (coord.y > uInputClamp.w) {\n if (fillMode == TRANSPARENT) {\n discarded = true;\n } else if (fillMode == LOOP) {\n coord.y = coord.y - uInputClamp.w;\n } else if (fillMode == MIRROR) {\n coord.y = uInputClamp.w * 2.0 - coord.y;\n }\n } else if (coord.y < uInputClamp.y) {\n if (fillMode == TRANSPARENT) {\n discarded = true;\n } else if (fillMode == LOOP) {\n coord.y = coord.y + uInputClamp.w;\n } else if (fillMode == MIRROR) {\n coord.y = coord.y * -uInputClamp.w;\n }\n }\n }\n\n let seedR: f32 = 1.0 - uSeed * 0.4;\n let seedG: f32 = 1.0 - uSeed * 0.3;\n let seedB: f32 = 1.0 - uSeed * 0.2;\n\n let offsetR: vec2<f32> = vec2(uRed.x * seedR / uInputSize.x, uRed.y * seedR / uInputSize.y);\n let offsetG: vec2<f32> = vec2(uGreen.x * seedG / uInputSize.x, uGreen.y * seedG / uInputSize.y);\n let offsetB: vec2<f32> = vec2(uBlue.x * seedB / uInputSize.x, uBlue.y * seedB / uInputSize.y);\n\n let r = textureSample(uTexture, uSampler, coord + offsetR).r;\n let g = textureSample(uTexture, uSampler, coord + offsetG).g;\n let b = textureSample(uTexture, uSampler, coord + offsetB).b;\n let a = textureSample(uTexture, uSampler, coord).a;\n\n return select(vec4<f32>(r, g, b, a), vec4<f32>(0.0,0.0,0.0,0.0), discarded);\n}\n\nconst TRANSPARENT: i32 = 0;\nconst ORIGINAL: i32 = 1;\nconst LOOP: i32 = 2;\nconst CLAMP: i32 = 3;\nconst MIRROR: i32 = 4;",__defProp18=Object.defineProperty,__defNormalProp18=(t,r,n)=>r in t?__defProp18(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField18=(t,r,n)=>(__defNormalProp18(t,"symbol"!=typeof r?r+"":r,n),n),_GlitchFilter=class e extends Filter{constructor(t){t={...e.defaults,...t};let r=GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source21,entryPoint:"mainFragment"}}),n=GlProgram.from({vertex:vertex3,fragment:fragment21,name:"glitch-filter"}),i=document.createElement("canvas");i.width=4,i.height=t.sampleSize??512;let a=new Texture({source:new ImageSource({resource:i})});super({gpuProgram:r,glProgram:n,resources:{glitchUniforms:{uSeed:{value:t?.seed??0,type:"f32"},uDimensions:{value:new Float32Array(2),type:"vec2<f32>"},uAspect:{value:1,type:"f32"},uFillMode:{value:t?.fillMode??0,type:"f32"},uOffset:{value:t?.offset??100,type:"f32"},uDirection:{value:t?.direction??0,type:"f32"},uRed:{value:t.red,type:"vec2<f32>"},uGreen:{value:t.green,type:"vec2<f32>"},uBlue:{value:t.blue,type:"vec2<f32>"}},uDisplacementMap:a.source,uDisplacementSampler:a.source.style}}),__publicField18(this,"uniforms"),__publicField18(this,"average",!1),__publicField18(this,"minSize",8),__publicField18(this,"sampleSize",512),__publicField18(this,"_canvas"),__publicField18(this,"texture"),__publicField18(this,"_slices",0),__publicField18(this,"_sizes",new Float32Array(1)),__publicField18(this,"_offsets",new Float32Array(1)),this.uniforms=this.resources.glitchUniforms.uniforms,this._canvas=i,this.texture=a,Object.assign(this,t)}apply(t,r,n,i){let{width:a,height:o}=r.frame;this.uniforms.uDimensions[0]=a,this.uniforms.uDimensions[1]=o,this.uniforms.uAspect=o/a,t.applyFilter(this,r,n,i)}_randomizeSizes(){let t=this._sizes,r=this._slices-1,n=this.sampleSize,i=Math.min(this.minSize/n,.9/this._slices);if(this.average){let n=this._slices,a=1;for(let o=0;o<r;o++){let r=Math.max(a/(n-o)*(1-.6*Math.random()),i);t[o]=r,a-=r}t[r]=a}else{let n=1,a=Math.sqrt(1/this._slices);for(let o=0;o<r;o++){let r=Math.max(a*n*Math.random(),i);t[o]=r,n-=r}t[r]=n}this.shuffle()}shuffle(){let t=this._sizes;for(let r=this._slices-1;r>0;r--){let n=Math.random()*r|0,i=t[r];t[r]=t[n],t[n]=i}}_randomizeOffsets(){for(let t=0;t<this._slices;t++)this._offsets[t]=Math.random()*(.5>Math.random()?-1:1)}refresh(){this._randomizeSizes(),this._randomizeOffsets(),this.redraw()}redraw(){let t,r=this.sampleSize,n=this.texture,i=this._canvas.getContext("2d");i.clearRect(0,0,8,r);let a=0;for(let n=0;n<this._slices;n++){t=Math.floor(256*this._offsets[n]);let o=this._sizes[n]*r,s=t>0?t:0,l=t<0?-t:0;i.fillStyle=`rgba(${s}, ${l}, 0, 1)`,i.fillRect(0,0|a,r,o+1|0),a+=o}n.source.update()}set sizes(t){let r=Math.min(this._slices,t.length);for(let n=0;n<r;n++)this._sizes[n]=t[n]}get sizes(){return this._sizes}set offsets(t){let r=Math.min(this._slices,t.length);for(let n=0;n<r;n++)this._offsets[n]=t[n]}get offsets(){return this._offsets}get slices(){return this._slices}set slices(t){this._slices!==t&&(this._slices=t,this._sizes=new Float32Array(t),this._offsets=new Float32Array(t),this.refresh())}get offset(){return this.uniforms.uOffset}set offset(t){this.uniforms.uOffset=t}get seed(){return this.uniforms.uSeed}set seed(t){this.uniforms.uSeed=t}get fillMode(){return this.uniforms.uFillMode}set fillMode(t){this.uniforms.uFillMode=t}get direction(){return this.uniforms.uDirection/DEG_TO_RAD}set direction(t){this.uniforms.uDirection=t*DEG_TO_RAD}get red(){return this.uniforms.uRed}set red(t){Array.isArray(t)&&(t={x:t[0],y:t[1]}),this.uniforms.uRed=t}get green(){return this.uniforms.uGreen}set green(t){Array.isArray(t)&&(t={x:t[0],y:t[1]}),this.uniforms.uGreen=t}get blue(){return this.uniforms.uBlue}set blue(t){Array.isArray(t)&&(t={x:t[0],y:t[1]}),this.uniforms.uBlue=t}destroy(){this.texture?.destroy(!0),this.texture=this._canvas=this.red=this.green=this.blue=this._sizes=this._offsets=null}};__publicField18(_GlitchFilter,"defaults",{slices:5,offset:100,direction:0,fillMode:0,average:!1,seed:0,red:{x:0,y:0},green:{x:0,y:0},blue:{x:0,y:0},minSize:8,sampleSize:512}),init_globals(),init_globals();var fragment22="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec2 uStrength;\nuniform vec3 uColor;\nuniform float uKnockout;\nuniform float uAlpha;\n\nuniform vec4 uInputSize;\nuniform vec4 uInputClamp;\n\nconst float PI = 3.14159265358979323846264;\n\n// Hard-assignment of DIST and ANGLE_STEP_SIZE instead of using uDistance and uQuality to allow them to be use on GLSL loop conditions\nconst float DIST = __DIST__;\nconst float ANGLE_STEP_SIZE = min(__ANGLE_STEP_SIZE__, PI * 2.);\nconst float ANGLE_STEP_NUM = ceil(PI * 2. / ANGLE_STEP_SIZE);\nconst float MAX_TOTAL_ALPHA = ANGLE_STEP_NUM * DIST * (DIST + 1.) / 2.;\n\nvoid main(void) {\n vec2 px = vec2(1.) / uInputSize.xy;\n\n float totalAlpha = 0.;\n\n vec2 direction;\n vec2 displaced;\n vec4 curColor;\n\n for (float angle = 0.; angle < PI * 2.; angle += ANGLE_STEP_SIZE) {\n direction = vec2(cos(angle), sin(angle)) * px;\n\n for (float curDistance = 0.; curDistance < DIST; curDistance++) {\n displaced = clamp(vTextureCoord + direction * (curDistance + 1.), uInputClamp.xy, uInputClamp.zw);\n curColor = texture(uTexture, displaced);\n totalAlpha += (DIST - curDistance) * curColor.a;\n }\n }\n \n curColor = texture(uTexture, vTextureCoord);\n\n vec4 glowColor = vec4(uColor, uAlpha);\n bool knockout = uKnockout > .5;\n float innerStrength = uStrength[0];\n float outerStrength = uStrength[1];\n\n float alphaRatio = totalAlpha / MAX_TOTAL_ALPHA;\n float innerGlowAlpha = (1. - alphaRatio) * innerStrength * curColor.a * uAlpha;\n float innerGlowStrength = min(1., innerGlowAlpha);\n \n vec4 innerColor = mix(curColor, glowColor, innerGlowStrength);\n float outerGlowAlpha = alphaRatio * outerStrength * (1. - curColor.a) * uAlpha;\n float outerGlowStrength = min(1. - innerColor.a, outerGlowAlpha);\n vec4 outerGlowColor = outerGlowStrength * glowColor.rgba;\n\n if (knockout) {\n float resultAlpha = outerGlowAlpha + innerGlowAlpha;\n finalColor = vec4(glowColor.rgb * resultAlpha, resultAlpha);\n }\n else {\n finalColor = innerColor + outerGlowColor;\n }\n}\n";init_globals();var source22="struct GlowUniforms {\n uDistance: f32,\n uStrength: vec2<f32>,\n uColor: vec3<f32>,\n uAlpha: f32,\n uQuality: f32,\n uKnockout: f32,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> glowUniforms : GlowUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let quality = glowUniforms.uQuality;\n let distance = glowUniforms.uDistance;\n\n let dist: f32 = glowUniforms.uDistance;\n let angleStepSize: f32 = min(1. / quality / distance, PI * 2.0);\n let angleStepNum: f32 = ceil(PI * 2.0 / angleStepSize);\n\n let px: vec2<f32> = vec2<f32>(1.0 / gfu.uInputSize.xy);\n\n var totalAlpha: f32 = 0.0;\n\n var direction: vec2<f32>;\n var displaced: vec2<f32>;\n var curColor: vec4<f32>;\n\n for (var angle = 0.0; angle < PI * 2.0; angle += angleStepSize) {\n direction = vec2<f32>(cos(angle), sin(angle)) * px;\n for (var curDistance = 0.0; curDistance < dist; curDistance+=1) {\n displaced = vec2<f32>(clamp(uv + direction * (curDistance + 1.0), gfu.uInputClamp.xy, gfu.uInputClamp.zw));\n curColor = textureSample(uTexture, uSampler, displaced);\n totalAlpha += (dist - curDistance) * curColor.a;\n }\n }\n \n curColor = textureSample(uTexture, uSampler, uv);\n\n let glowColorRGB = glowUniforms.uColor;\n let glowAlpha = glowUniforms.uAlpha;\n let glowColor = vec4<f32>(glowColorRGB, glowAlpha);\n let knockout: bool = glowUniforms.uKnockout > 0.5;\n let innerStrength = glowUniforms.uStrength[0];\n let outerStrength = glowUniforms.uStrength[1];\n\n let alphaRatio: f32 = (totalAlpha / (angleStepNum * dist * (dist + 1.0) / 2.0));\n let innerGlowAlpha: f32 = (1.0 - alphaRatio) * innerStrength * curColor.a * glowAlpha;\n let innerGlowStrength: f32 = min(1.0, innerGlowAlpha);\n \n let innerColor: vec4<f32> = mix(curColor, glowColor, innerGlowStrength);\n let outerGlowAlpha: f32 = alphaRatio * outerStrength * (1. - curColor.a) * glowAlpha;\n let outerGlowStrength: f32 = min(1.0 - innerColor.a, outerGlowAlpha);\n let outerGlowColor: vec4<f32> = outerGlowStrength * glowColor.rgba;\n \n if (knockout) {\n let resultAlpha: f32 = outerGlowAlpha + innerGlowAlpha;\n return vec4<f32>(glowColor.rgb * resultAlpha, resultAlpha);\n }\n else {\n return innerColor + outerGlowColor;\n }\n}\n\nconst PI: f32 = 3.14159265358979323846264;",__defProp19=Object.defineProperty,__defNormalProp19=(t,r,n)=>r in t?__defProp19(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField19=(t,r,n)=>(__defNormalProp19(t,"symbol"!=typeof r?r+"":r,n),n),_GlowFilter=class e extends Filter{constructor(t){let r=(t={...e.DEFAULT_OPTIONS,...t}).distance??10,n=t.quality??.1;super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source22,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment22.replace(/__ANGLE_STEP_SIZE__/gi,`${(1/n/r).toFixed(7)}`).replace(/__DIST__/gi,`${r.toFixed(0)}.0`),name:"glow-filter"}),resources:{glowUniforms:{uDistance:{value:r,type:"f32"},uStrength:{value:[t.innerStrength,t.outerStrength],type:"vec2<f32>"},uColor:{value:new Float32Array(3),type:"vec3<f32>"},uAlpha:{value:t.alpha,type:"f32"},uQuality:{value:n,type:"f32"},uKnockout:{value:+!!t?.knockout,type:"f32"}}},padding:r}),__publicField19(this,"uniforms"),__publicField19(this,"_color"),this.uniforms=this.resources.glowUniforms.uniforms,this._color=new Color,this.color=t.color??0xffffff}get distance(){return this.uniforms.uDistance}set distance(t){this.uniforms.uDistance=this.padding=t}get innerStrength(){return this.uniforms.uStrength[0]}set innerStrength(t){this.uniforms.uStrength[0]=t}get outerStrength(){return this.uniforms.uStrength[1]}set outerStrength(t){this.uniforms.uStrength[1]=t}get color(){return this._color.value}set color(t){this._color.setValue(t);let[r,n,i]=this._color.toArray();this.uniforms.uColor[0]=r,this.uniforms.uColor[1]=n,this.uniforms.uColor[2]=i}get alpha(){return this.uniforms.uAlpha}set alpha(t){this.uniforms.uAlpha=t}get quality(){return this.uniforms.uQuality}set quality(t){this.uniforms.uQuality=t}get knockout(){return 1===this.uniforms.uKnockout}set knockout(t){this.uniforms.uKnockout=+!!t}};__publicField19(_GlowFilter,"DEFAULT_OPTIONS",{distance:10,outerStrength:4,innerStrength:0,color:0xffffff,alpha:1,quality:.1,knockout:!1}),init_globals(),init_globals();var fragment23="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec2 uDimensions;\nuniform float uParallel;\nuniform vec2 uLight;\nuniform float uAspect;\nuniform float uTime;\nuniform vec3 uRay;\n\nuniform vec4 uInputSize;\n\n${PERLIN}\n\nvoid main(void) {\n vec2 uDimensions = uDimensions;\n bool uParallel = uParallel > 0.5;\n vec2 uLight = uLight;\n float uAspect = uAspect;\n\n vec2 coord = vTextureCoord * uInputSize.xy / uDimensions;\n\n float d;\n\n if (uParallel) {\n float _cos = uLight.x;\n float _sin = uLight.y;\n d = (_cos * coord.x) + (_sin * coord.y * uAspect);\n } else {\n float dx = coord.x - uLight.x / uDimensions.x;\n float dy = (coord.y - uLight.y / uDimensions.y) * uAspect;\n float dis = sqrt(dx * dx + dy * dy) + 0.00001;\n d = dy / dis;\n }\n\n float uTime = uTime;\n vec3 uRay = uRay;\n\n float gain = uRay[0];\n float lacunarity = uRay[1];\n float alpha = uRay[2];\n\n vec3 dir = vec3(d, d, 0.0);\n float noise = turb(dir + vec3(uTime, 0.0, 62.1 + uTime) * 0.05, vec3(480.0, 320.0, 480.0), lacunarity, gain);\n noise = mix(noise, 0.0, 0.3);\n //fade vertically.\n vec4 mist = vec4(vec3(noise), 1.0) * (1.0 - coord.y);\n mist.a = 1.0;\n // apply user alpha\n mist *= alpha;\n\n finalColor = texture(uTexture, vTextureCoord) + mist;\n}\n";init_globals();var source23="struct GodrayUniforms {\n uLight: vec2<f32>,\n uParallel: f32,\n uAspect: f32,\n uTime: f32,\n uRay: vec3<f32>,\n uDimensions: vec2<f32>,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> godrayUniforms : GodrayUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let uDimensions: vec2<f32> = godrayUniforms.uDimensions;\n let uParallel: bool = godrayUniforms.uParallel > 0.5;\n let uLight: vec2<f32> = godrayUniforms.uLight;\n let uAspect: f32 = godrayUniforms.uAspect;\n\n let coord: vec2<f32> = uv * gfu.uInputSize.xy / uDimensions;\n\n var d: f32;\n\n if (uParallel) {\n let _cos: f32 = uLight.x;\n let _sin: f32 = uLight.y;\n d = (_cos * coord.x) + (_sin * coord.y * uAspect);\n } else {\n let dx: f32 = coord.x - uLight.x / uDimensions.x;\n let dy: f32 = (coord.y - uLight.y / uDimensions.y) * uAspect;\n let dis: f32 = sqrt(dx * dx + dy * dy) + 0.00001;\n d = dy / dis;\n }\n\n let uTime: f32 = godrayUniforms.uTime;\n let uRay: vec3<f32> = godrayUniforms.uRay;\n \n let gain = uRay[0];\n let lacunarity = uRay[1];\n let alpha = uRay[2];\n\n let dir: vec3<f32> = vec3<f32>(d, d, 0.0);\n var noise: f32 = turb(dir + vec3<f32>(uTime, 0.0, 62.1 + uTime) * 0.05, vec3<f32>(480.0, 320.0, 480.0), lacunarity, gain);\n noise = mix(noise, 0.0, 0.3);\n //fade vertically.\n var mist: vec4<f32> = vec4<f32>(vec3<f32>(noise), 1.0) * (1.0 - coord.y);\n mist.a = 1.0;\n // apply user alpha\n mist *= alpha;\n return textureSample(uTexture, uSampler, uv) + mist;\n}\n\n${PERLIN}";init_globals();var perlin="vec3 mod289(vec3 x)\n{\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\nvec4 mod289(vec4 x)\n{\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\nvec4 permute(vec4 x)\n{\n return mod289(((x * 34.0) + 1.0) * x);\n}\nvec4 taylorInvSqrt(vec4 r)\n{\n return 1.79284291400159 - 0.85373472095314 * r;\n}\nvec3 fade(vec3 t)\n{\n return t * t * t * (t * (t * 6.0 - 15.0) + 10.0);\n}\n// Classic Perlin noise, periodic variant\nfloat pnoise(vec3 P, vec3 rep)\n{\n vec3 Pi0 = mod(floor(P), rep); // Integer part, modulo period\n vec3 Pi1 = mod(Pi0 + vec3(1.0), rep); // Integer part + 1, mod period\n Pi0 = mod289(Pi0);\n Pi1 = mod289(Pi1);\n vec3 Pf0 = fract(P); // Fractional part for interpolation\n vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0\n vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n vec4 iy = vec4(Pi0.yy, Pi1.yy);\n vec4 iz0 = Pi0.zzzz;\n vec4 iz1 = Pi1.zzzz;\n vec4 ixy = permute(permute(ix) + iy);\n vec4 ixy0 = permute(ixy + iz0);\n vec4 ixy1 = permute(ixy + iz1);\n vec4 gx0 = ixy0 * (1.0 / 7.0);\n vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;\n gx0 = fract(gx0);\n vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);\n vec4 sz0 = step(gz0, vec4(0.0));\n gx0 -= sz0 * (step(0.0, gx0) - 0.5);\n gy0 -= sz0 * (step(0.0, gy0) - 0.5);\n vec4 gx1 = ixy1 * (1.0 / 7.0);\n vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;\n gx1 = fract(gx1);\n vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);\n vec4 sz1 = step(gz1, vec4(0.0));\n gx1 -= sz1 * (step(0.0, gx1) - 0.5);\n gy1 -= sz1 * (step(0.0, gy1) - 0.5);\n vec3 g000 = vec3(gx0.x, gy0.x, gz0.x);\n vec3 g100 = vec3(gx0.y, gy0.y, gz0.y);\n vec3 g010 = vec3(gx0.z, gy0.z, gz0.z);\n vec3 g110 = vec3(gx0.w, gy0.w, gz0.w);\n vec3 g001 = vec3(gx1.x, gy1.x, gz1.x);\n vec3 g101 = vec3(gx1.y, gy1.y, gz1.y);\n vec3 g011 = vec3(gx1.z, gy1.z, gz1.z);\n vec3 g111 = vec3(gx1.w, gy1.w, gz1.w);\n vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n g000 *= norm0.x;\n g010 *= norm0.y;\n g100 *= norm0.z;\n g110 *= norm0.w;\n vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n g001 *= norm1.x;\n g011 *= norm1.y;\n g101 *= norm1.z;\n g111 *= norm1.w;\n float n000 = dot(g000, Pf0);\n float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));\n float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));\n float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));\n float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));\n float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));\n float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));\n float n111 = dot(g111, Pf1);\n vec3 fade_xyz = fade(Pf0);\n vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);\n vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);\n float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);\n return 2.2 * n_xyz;\n}\nfloat turb(vec3 P, vec3 rep, float lacunarity, float gain)\n{\n float sum = 0.0;\n float sc = 1.0;\n float totalgain = 1.0;\n for (float i = 0.0; i < 6.0; i++)\n {\n sum += totalgain * pnoise(P * sc, rep);\n sc *= lacunarity;\n totalgain *= gain;\n }\n return abs(sum);\n}\n";init_globals();var sourcePerlin="// Taken from https://gist.github.com/munrocket/236ed5ba7e409b8bdf1ff6eca5dcdc39\n\nfn moduloVec3(x: vec3<f32>, y: vec3<f32>) -> vec3<f32>\n{\n return x - y * floor(x/y);\n}\nfn mod289Vec3(x: vec3<f32>) -> vec3<f32>\n{\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\nfn mod289Vec4(x: vec4<f32>) -> vec4<f32>\n{\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\nfn permute4(x: vec4<f32>) -> vec4<f32>\n{\n return mod289Vec4(((x * 34.0) + 1.0) * x);\n}\nfn taylorInvSqrt(r: vec4<f32>) -> vec4<f32>\n{\n return 1.79284291400159 - 0.85373472095314 * r;\n}\nfn fade3(t: vec3<f32>) -> vec3<f32>\n{\n return t * t * t * (t * (t * 6.0 - 15.0) + 10.0);\n}\nfn fade2(t: vec2<f32>) -> vec2<f32> { return t * t * t * (t * (t * 6. - 15.) + 10.); }\n\nfn perlinNoise2(P: vec2<f32>) -> f32 {\n var Pi: vec4<f32> = floor(P.xyxy) + vec4<f32>(0., 0., 1., 1.);\n let Pf = fract(P.xyxy) - vec4<f32>(0., 0., 1., 1.);\n Pi = Pi % vec4<f32>(289.); // To avoid truncation effects in permutation\n let ix = Pi.xzxz;\n let iy = Pi.yyww;\n let fx = Pf.xzxz;\n let fy = Pf.yyww;\n let i = permute4(permute4(ix) + iy);\n var gx: vec4<f32> = 2. * fract(i * 0.0243902439) - 1.; // 1/41 = 0.024...\n let gy = abs(gx) - 0.5;\n let tx = floor(gx + 0.5);\n gx = gx - tx;\n var g00: vec2<f32> = vec2<f32>(gx.x, gy.x);\n var g10: vec2<f32> = vec2<f32>(gx.y, gy.y);\n var g01: vec2<f32> = vec2<f32>(gx.z, gy.z);\n var g11: vec2<f32> = vec2<f32>(gx.w, gy.w);\n let norm = 1.79284291400159 - 0.85373472095314 *\n vec4<f32>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11));\n g00 = g00 * norm.x;\n g01 = g01 * norm.y;\n g10 = g10 * norm.z;\n g11 = g11 * norm.w;\n let n00 = dot(g00, vec2<f32>(fx.x, fy.x));\n let n10 = dot(g10, vec2<f32>(fx.y, fy.y));\n let n01 = dot(g01, vec2<f32>(fx.z, fy.z));\n let n11 = dot(g11, vec2<f32>(fx.w, fy.w));\n let fade_xy = fade2(Pf.xy);\n let n_x = mix(vec2<f32>(n00, n01), vec2<f32>(n10, n11), vec2<f32>(fade_xy.x));\n let n_xy = mix(n_x.x, n_x.y, fade_xy.y);\n return 2.3 * n_xy;\n}\n\n// Classic Perlin noise, periodic variant\nfn perlinNoise3(P: vec3<f32>, rep: vec3<f32>) -> f32\n{\n var Pi0: vec3<f32> = moduloVec3(floor(P), rep); // Integer part, modulo period\n var Pi1: vec3<f32> = moduloVec3(Pi0 + vec3<f32>(1.0), rep); // Integer part + 1, mod period\n Pi0 = mod289Vec3(Pi0);\n Pi1 = mod289Vec3(Pi1);\n let Pf0: vec3<f32> = fract(P); // Fractional part for interpolation\n let Pf1: vec3<f32> = Pf0 - vec3<f32>(1.0); // Fractional part - 1.0\n let ix: vec4<f32> = vec4<f32>(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n let iy: vec4<f32> = vec4<f32>(Pi0.yy, Pi1.yy);\n let iz0: vec4<f32> = Pi0.zzzz;\n let iz1: vec4<f32> = Pi1.zzzz;\n let ixy: vec4<f32> = permute4(permute4(ix) + iy);\n let ixy0: vec4<f32> = permute4(ixy + iz0);\n let ixy1: vec4<f32> = permute4(ixy + iz1);\n var gx0: vec4<f32> = ixy0 * (1.0 / 7.0);\n var gy0: vec4<f32> = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;\n gx0 = fract(gx0);\n let gz0: vec4<f32> = vec4<f32>(0.5) - abs(gx0) - abs(gy0);\n let sz0: vec4<f32> = step(gz0, vec4<f32>(0.0));\n gx0 -= sz0 * (step(vec4<f32>(0.0), gx0) - 0.5);\n gy0 -= sz0 * (step(vec4<f32>(0.0), gy0) - 0.5);\n var gx1: vec4<f32> = ixy1 * (1.0 / 7.0);\n var gy1: vec4<f32> = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;\n gx1 = fract(gx1);\n let gz1: vec4<f32> = vec4<f32>(0.5) - abs(gx1) - abs(gy1);\n let sz1: vec4<f32> = step(gz1, vec4<f32>(0.0));\n gx1 -= sz1 * (step(vec4<f32>(0.0), gx1) - 0.5);\n gy1 -= sz1 * (step(vec4<f32>(0.0), gy1) - 0.5);\n var g000: vec3<f32> = vec3<f32>(gx0.x, gy0.x, gz0.x);\n var g100: vec3<f32> = vec3<f32>(gx0.y, gy0.y, gz0.y);\n var g010: vec3<f32> = vec3<f32>(gx0.z, gy0.z, gz0.z);\n var g110: vec3<f32> = vec3<f32>(gx0.w, gy0.w, gz0.w);\n var g001: vec3<f32> = vec3<f32>(gx1.x, gy1.x, gz1.x);\n var g101: vec3<f32> = vec3<f32>(gx1.y, gy1.y, gz1.y);\n var g011: vec3<f32> = vec3<f32>(gx1.z, gy1.z, gz1.z);\n var g111: vec3<f32> = vec3<f32>(gx1.w, gy1.w, gz1.w);\n let norm0: vec4<f32> = taylorInvSqrt(vec4<f32>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n g000 *= norm0.x;\n g010 *= norm0.y;\n g100 *= norm0.z;\n g110 *= norm0.w;\n let norm1: vec4<f32> = taylorInvSqrt(vec4<f32>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n g001 *= norm1.x;\n g011 *= norm1.y;\n g101 *= norm1.z;\n g111 *= norm1.w;\n let n000: f32 = dot(g000, Pf0);\n let n100: f32 = dot(g100, vec3<f32>(Pf1.x, Pf0.yz));\n let n010: f32 = dot(g010, vec3<f32>(Pf0.x, Pf1.y, Pf0.z));\n let n110: f32 = dot(g110, vec3<f32>(Pf1.xy, Pf0.z));\n let n001: f32 = dot(g001, vec3<f32>(Pf0.xy, Pf1.z));\n let n101: f32 = dot(g101, vec3<f32>(Pf1.x, Pf0.y, Pf1.z));\n let n011: f32 = dot(g011, vec3<f32>(Pf0.x, Pf1.yz));\n let n111: f32 = dot(g111, Pf1);\n let fade_xyz: vec3<f32> = fade3(Pf0);\n let n_z: vec4<f32> = mix(vec4<f32>(n000, n100, n010, n110), vec4<f32>(n001, n101, n011, n111), fade_xyz.z);\n let n_yz: vec2<f32> = mix(n_z.xy, n_z.zw, fade_xyz.y);\n let n_xyz: f32 = mix(n_yz.x, n_yz.y, fade_xyz.x);\n return 2.2 * n_xyz;\n}\nfn turb(P: vec3<f32>, rep: vec3<f32>, lacunarity: f32, gain: f32) -> f32\n{\n var sum: f32 = 0.0;\n var sc: f32 = 1.0;\n var totalgain: f32 = 1.0;\n for (var i = 0.0; i < 6.0; i += 1)\n {\n sum += totalgain * perlinNoise3(P * sc, rep);\n sc *= lacunarity;\n totalgain *= gain;\n }\n return abs(sum);\n}",__defProp20=Object.defineProperty,__defNormalProp20=(t,r,n)=>r in t?__defProp20(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField20=(t,r,n)=>(__defNormalProp20(t,"symbol"!=typeof r?r+"":r,n),n),_GodrayFilter=class e extends Filter{constructor(t){super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source23.replace("${PERLIN}",sourcePerlin),entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment23.replace("${PERLIN}",perlin),name:"god-ray-filter"}),resources:{godrayUniforms:{uLight:{value:new Float32Array(2),type:"vec2<f32>"},uParallel:{value:0,type:"f32"},uAspect:{value:0,type:"f32"},uTime:{value:(t={...e.DEFAULT_OPTIONS,...t}).time,type:"f32"},uRay:{value:new Float32Array(3),type:"vec3<f32>"},uDimensions:{value:new Float32Array(2),type:"vec2<f32>"}}}}),__publicField20(this,"uniforms"),__publicField20(this,"time",0),__publicField20(this,"_angleLight",[0,0]),__publicField20(this,"_angle",0),__publicField20(this,"_center"),this.uniforms=this.resources.godrayUniforms.uniforms,Object.assign(this,t)}apply(t,r,n,i){let a=r.frame.width,o=r.frame.height;this.uniforms.uLight[0]=this.parallel?this._angleLight[0]:this._center.x,this.uniforms.uLight[1]=this.parallel?this._angleLight[1]:this._center.y,this.uniforms.uDimensions[0]=a,this.uniforms.uDimensions[1]=o,this.uniforms.uAspect=o/a,this.uniforms.uTime=this.time,t.applyFilter(this,r,n,i)}get angle(){return this._angle}set angle(t){this._angle=t;let r=t*DEG_TO_RAD;this._angleLight[0]=Math.cos(r),this._angleLight[1]=Math.sin(r)}get parallel(){return this.uniforms.uParallel>.5}set parallel(t){this.uniforms.uParallel=+!!t}get center(){return this._center}set center(t){Array.isArray(t)&&(t={x:t[0],y:t[1]}),this._center=t}get centerX(){return this.center.x}set centerX(t){this.center.x=t}get centerY(){return this.center.y}set centerY(t){this.center.y=t}get gain(){return this.uniforms.uRay[0]}set gain(t){this.uniforms.uRay[0]=t}get lacunarity(){return this.uniforms.uRay[1]}set lacunarity(t){this.uniforms.uRay[1]=t}get alpha(){return this.uniforms.uRay[2]}set alpha(t){this.uniforms.uRay[2]=t}};__publicField20(_GodrayFilter,"DEFAULT_OPTIONS",{angle:30,gain:.5,lacunarity:2.5,parallel:!0,time:0,center:{x:0,y:0},alpha:1}),init_globals(),init_globals(),init_globals(),init_globals(),init_globals();var fragment25="in vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec3 uHsl;\nuniform float uAlpha;\nuniform float uColorize;\n\n// https://en.wikipedia.org/wiki/Luma_(video)\nconst vec3 weight = vec3(0.299, 0.587, 0.114);\n\nfloat getWeightedAverage(vec3 rgb) {\n return rgb.r * weight.r + rgb.g * weight.g + rgb.b * weight.b;\n}\n\n// https://gist.github.com/mairod/a75e7b44f68110e1576d77419d608786?permalink_comment_id=3195243#gistcomment-3195243\nconst vec3 k = vec3(0.57735, 0.57735, 0.57735);\n\nvec3 hueShift(vec3 color, float angle) {\n float cosAngle = cos(angle);\n return vec3(\n color * cosAngle +\n cross(k, color) * sin(angle) +\n k * dot(k, color) * (1.0 - cosAngle)\n );\n}\n\nvoid main()\n{\n vec4 color = texture(uTexture, vTextureCoord);\n vec3 resultRGB = color.rgb;\n\n float hue = uHsl[0];\n float saturation = uHsl[1];\n float lightness = uHsl[2];\n\n // colorize\n if (uColorize > 0.5) {\n resultRGB = vec3(getWeightedAverage(resultRGB), 0., 0.);\n }\n\n // hue\n resultRGB = hueShift(resultRGB, hue);\n\n // saturation\n // https://github.com/evanw/glfx.js/blob/master/src/filters/adjust/huesaturation.js\n float average = (resultRGB.r + resultRGB.g + resultRGB.b) / 3.0;\n\n if (saturation > 0.) {\n resultRGB += (average - resultRGB) * (1. - 1. / (1.001 - saturation));\n } else {\n resultRGB -= (average - resultRGB) * saturation;\n }\n\n // lightness\n resultRGB = mix(resultRGB, vec3(ceil(lightness)) * color.a, abs(lightness));\n\n // alpha\n finalColor = mix(color, vec4(resultRGB, color.a), uAlpha);\n}\n";init_globals();var source25="struct HslUniforms {\n uHsl:vec3<f32>,\n uColorize:f32,\n uAlpha:f32,\n};\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> hslUniforms : HslUniforms;\n\n@fragment\nfn mainFragment(\n @location(0) uv: vec2<f32>,\n @builtin(position) position: vec4<f32>\n) -> @location(0) vec4<f32> {\n let color: vec4<f32> = textureSample(uTexture, uSampler, uv);\n var resultRGB: vec3<f32> = color.rgb;\n\n let hue: f32 = hslUniforms.uHsl[0];\n let saturation: f32 = hslUniforms.uHsl[1];\n let lightness: f32 = hslUniforms.uHsl[2];\n\n // colorize\n if (hslUniforms.uColorize > 0.5) {\n resultRGB = vec3<f32>(dot(color.rgb, vec3<f32>(0.299, 0.587, 0.114)), 0., 0.);\n }\n\n // hue\n resultRGB = hueShift(resultRGB, hue);\n\n // saturation\n // https://github.com/evanw/glfx.js/blob/master/src/filters/adjust/huesaturation.js\n let average: f32 = (resultRGB.r + resultRGB.g + resultRGB.b) / 3.0;\n\n if (saturation > 0.) {\n resultRGB += (average - resultRGB) * (1. - 1. / (1.001 - saturation));\n } else {\n resultRGB -= (average - resultRGB) * saturation;\n }\n\n // lightness\n resultRGB = mix(resultRGB, vec3<f32>(ceil(lightness)) * color.a, abs(lightness));\n\n // alpha\n return mix(color, vec4<f32>(resultRGB, color.a), hslUniforms.uAlpha);\n}\n\n// https://gist.github.com/mairod/a75e7b44f68110e1576d77419d608786?permalink_comment_id=3195243#gistcomment-3195243\nconst k: vec3<f32> = vec3(0.57735, 0.57735, 0.57735);\n\nfn hueShift(color: vec3<f32>, angle: f32) -> vec3<f32> \n{\n let cosAngle: f32 = cos(angle);\n return vec3<f32>(\n color * cosAngle +\n cross(k, color) * sin(angle) +\n k * dot(k, color) * (1.0 - cosAngle)\n );\n}",__defProp21=Object.defineProperty,__defNormalProp21=(t,r,n)=>r in t?__defProp21(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField21=(t,r,n)=>(__defNormalProp21(t,"symbol"!=typeof r?r+"":r,n),n),_HslAdjustmentFilter=class e extends Filter{constructor(t){t={...e.DEFAULT_OPTIONS,...t},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source25,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment25,name:"hsl-adjustment-filter"}),resources:{hslUniforms:{uHsl:{value:new Float32Array(3),type:"vec3<f32>"},uColorize:{value:+!!t.colorize,type:"f32"},uAlpha:{value:t.alpha,type:"f32"}}}}),__publicField21(this,"uniforms"),__publicField21(this,"_hue"),this.uniforms=this.resources.hslUniforms.uniforms,Object.assign(this,t)}get hue(){return this._hue}set hue(t){this._hue=t,this.uniforms.uHsl[0]=Math.PI/180*t}get saturation(){return this.uniforms.uHsl[1]}set saturation(t){this.uniforms.uHsl[1]=t}get lightness(){return this.uniforms.uHsl[2]}set lightness(t){this.uniforms.uHsl[2]=t}get colorize(){return 1===this.uniforms.uColorize}set colorize(t){this.uniforms.uColorize=+!!t}get alpha(){return this.uniforms.uAlpha}set alpha(t){this.uniforms.uAlpha=t}};__publicField21(_HslAdjustmentFilter,"DEFAULT_OPTIONS",{hue:0,saturation:0,lightness:0,colorize:!1,alpha:1}),init_globals(),init_globals();var fragment26="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec2 uVelocity;\nuniform int uKernelSize;\nuniform float uOffset;\n\nuniform vec4 uInputSize;\n\nconst int MAX_KERNEL_SIZE = 2048;\n\n// Notice:\n// the perfect way:\n// int kernelSize = min(uKernelSize, MAX_KERNELSIZE);\n// BUT in real use-case , uKernelSize < MAX_KERNELSIZE almost always.\n// So use uKernelSize directly.\n\nvoid main(void)\n{\n vec4 color = texture(uTexture, vTextureCoord);\n\n if (uKernelSize == 0)\n {\n finalColor = color;\n return;\n }\n\n vec2 velocity = uVelocity / uInputSize.xy;\n float offset = -uOffset / length(uVelocity) - 0.5;\n int k = uKernelSize - 1;\n\n for(int i = 0; i < MAX_KERNEL_SIZE - 1; i++) {\n if (i == k) {\n break;\n }\n vec2 bias = velocity * (float(i) / float(k) + offset);\n color += texture(uTexture, vTextureCoord + bias);\n }\n finalColor = color / float(uKernelSize);\n}\n";init_globals();var source26="struct MotionBlurUniforms {\n uVelocity: vec2<f32>,\n uKernelSize: f32,\n uOffset: f32,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> motionBlurUniforms : MotionBlurUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let uVelocity = motionBlurUniforms.uVelocity;\n let uKernelSize = motionBlurUniforms.uKernelSize;\n let uOffset = motionBlurUniforms.uOffset;\n\n let velocity: vec2<f32> = uVelocity / gfu.uInputSize.xy;\n let offset: f32 = -uOffset / length(uVelocity) - 0.5;\n let k: i32 = i32(min(uKernelSize - 1, MAX_KERNEL_SIZE - 1));\n\n var color: vec4<f32> = textureSample(uTexture, uSampler, uv);\n\n for(var i: i32 = 0; i < k; i += 1) {\n let bias: vec2<f32> = velocity * (f32(i) / f32(k) + offset);\n color += textureSample(uTexture, uSampler, uv + bias);\n }\n \n return select(color / f32(uKernelSize), textureSample(uTexture, uSampler, uv), uKernelSize == 0);\n}\n\nconst MAX_KERNEL_SIZE: f32 = 2048;",__defProp22=Object.defineProperty,__defNormalProp22=(t,r,n)=>r in t?__defProp22(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField22=(t,r,n)=>(__defNormalProp22(t,"symbol"!=typeof r?r+"":r,n),n),_MotionBlurFilter=class e extends Filter{constructor(...t){let r=t[0]??{};(Array.isArray(r)||"x"in r&&"y"in r||r instanceof ObservablePoint)&&(deprecation("6.0.0","MotionBlurFilter constructor params are now options object. See params: { velocity, kernelSize, offset }"),r={velocity:{x:"x"in r?r.x:r[0],y:"y"in r?r.y:r[1]}},void 0!==t[1]&&(r.kernelSize=t[1]),void 0!==t[2]&&(r.offset=t[2])),r={...e.DEFAULT_OPTIONS,...r},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source26,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment26,name:"motion-blur-filter"}),resources:{motionBlurUniforms:{uVelocity:{value:r.velocity,type:"vec2<f32>"},uKernelSize:{value:Math.trunc(r.kernelSize??5),type:"i32"},uOffset:{value:r.offset,type:"f32"}}}}),__publicField22(this,"uniforms"),__publicField22(this,"_kernelSize"),this.uniforms=this.resources.motionBlurUniforms.uniforms,Object.assign(this,r)}get velocity(){return this.uniforms.uVelocity}set velocity(t){Array.isArray(t)&&(t={x:t[0],y:t[1]}),this.uniforms.uVelocity=t,this._updateDirty()}get velocityX(){return this.velocity.x}set velocityX(t){this.velocity.x=t,this._updateDirty()}get velocityY(){return this.velocity.y}set velocityY(t){this.velocity.y=t,this._updateDirty()}get kernelSize(){return this._kernelSize}set kernelSize(t){this._kernelSize=t,this._updateDirty()}get offset(){return this.uniforms.uOffset}set offset(t){this.uniforms.uOffset=t}_updateDirty(){this.padding=1+(0|Math.max(Math.abs(this.velocityX),Math.abs(this.velocityY))),this.uniforms.uKernelSize=0!==this.velocityX||0!==this.velocityY?this._kernelSize:0}};__publicField22(_MotionBlurFilter,"DEFAULT_OPTIONS",{velocity:{x:0,y:0},kernelSize:5,offset:0}),init_globals(),init_globals();var fragment27="in vec2 vTextureCoord;\nout vec4 finalColor;\n\nconst int MAX_COLORS = ${MAX_COLORS};\n\nuniform sampler2D uTexture;\nuniform vec3 uOriginalColors[MAX_COLORS];\nuniform vec3 uTargetColors[MAX_COLORS];\nuniform float uTolerance;\n\nvoid main(void)\n{\n finalColor = texture(uTexture, vTextureCoord);\n\n float alpha = finalColor.a;\n if (alpha < 0.0001)\n {\n return;\n }\n\n vec3 color = finalColor.rgb / alpha;\n\n for(int i = 0; i < MAX_COLORS; i++)\n {\n vec3 origColor = uOriginalColors[i];\n if (origColor.r < 0.0)\n {\n break;\n }\n vec3 colorDiff = origColor - color;\n if (length(colorDiff) < uTolerance)\n {\n vec3 targetColor = uTargetColors[i];\n finalColor = vec4((targetColor + colorDiff) * alpha, alpha);\n return;\n }\n }\n}\n";init_globals();var source27="struct MultiColorReplaceUniforms {\n uOriginalColors: array<vec3<f32>, MAX_COLORS>,\n uTargetColors: array<vec3<f32>, MAX_COLORS>,\n uTolerance:f32,\n};\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> multiColorReplaceUniforms : MultiColorReplaceUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let uOriginalColors = multiColorReplaceUniforms.uOriginalColors;\n let uTargetColors = multiColorReplaceUniforms.uTargetColors;\n let uTolerance = multiColorReplaceUniforms.uTolerance;\n\n var color: vec4<f32> = textureSample(uTexture, uSampler, uv);\n\n let alpha: f32 = color.a;\n\n if (alpha > 0.0001)\n {\n var modColor: vec3<f32> = vec3<f32>(color.rgb) / alpha;\n\n for(var i: i32 = 0; i < MAX_COLORS; i += 1)\n {\n let origColor: vec3<f32> = uOriginalColors[i];\n if (origColor.r < 0.0)\n {\n break;\n }\n let colorDiff: vec3<f32> = origColor - modColor;\n \n if (length(colorDiff) < uTolerance)\n {\n let targetColor: vec3<f32> = uTargetColors[i];\n color = vec4((targetColor + colorDiff) * alpha, alpha);\n return color;\n }\n }\n }\n\n return color;\n}\n\nconst MAX_COLORS: i32 = ${MAX_COLORS};",__defProp23=Object.defineProperty,__defNormalProp23=(t,r,n)=>r in t?__defProp23(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField23=(t,r,n)=>(__defNormalProp23(t,"symbol"!=typeof r?r+"":r,n),n),_MultiColorReplaceFilter=class e extends Filter{constructor(...t){let r=t[0]??{};Array.isArray(r)&&(deprecation("6.0.0","MultiColorReplaceFilter constructor params are now options object. See params: { replacements, tolerance, maxColors }"),r={replacements:r},t[1]&&(r.tolerance=t[1]),t[2]&&(r.maxColors=t[2]));let n=(r={...e.DEFAULT_OPTIONS,...r}).maxColors??r.replacements.length;super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source27.replace(/\$\{MAX_COLORS\}/g,n.toFixed(0)),entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment27.replace(/\$\{MAX_COLORS\}/g,n.toFixed(0)),name:"multi-color-replace-filter"}),resources:{multiColorReplaceUniforms:{uOriginalColors:{value:new Float32Array(3*n),type:"vec3<f32>",size:n},uTargetColors:{value:new Float32Array(3*n),type:"vec3<f32>",size:n},uTolerance:{value:r.tolerance,type:"f32"}}}}),__publicField23(this,"uniforms"),__publicField23(this,"_replacements",[]),__publicField23(this,"_maxColors"),this._maxColors=n,this.uniforms=this.resources.multiColorReplaceUniforms.uniforms,this.replacements=r.replacements}set replacements(t){let r,n,i,a=this.uniforms.uOriginalColors,o=this.uniforms.uTargetColors,s=t.length,l=new Color;if(s>this._maxColors)throw Error(`Length of replacements (${s}) exceeds the maximum colors length (${this._maxColors})`);a[3*s]=-1;for(let u=0;u<s;u++){let s=t[u];l.setValue(s[0]),[r,n,i]=l.toArray(),a[3*u]=r,a[3*u+1]=n,a[3*u+2]=i,l.setValue(s[1]),[r,n,i]=l.toArray(),o[3*u]=r,o[3*u+1]=n,o[3*u+2]=i}this._replacements=t}get replacements(){return this._replacements}refresh(){this.replacements=this._replacements}get maxColors(){return this._maxColors}get tolerance(){return this.uniforms.uTolerance}set tolerance(t){this.uniforms.uTolerance=t}set epsilon(t){deprecation("6.0.0","MultiColorReplaceFilter.epsilon is deprecated, please use MultiColorReplaceFilter.tolerance instead"),this.tolerance=t}get epsilon(){return deprecation("6.0.0","MultiColorReplaceFilter.epsilon is deprecated, please use MultiColorReplaceFilter.tolerance instead"),this.tolerance}};__publicField23(_MultiColorReplaceFilter,"DEFAULT_OPTIONS",{replacements:[[0xff0000,255]],tolerance:.05,maxColors:void 0}),init_globals(),init_globals();var fragment28="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform float uSepia;\nuniform vec2 uNoise;\nuniform vec3 uScratch;\nuniform vec3 uVignetting;\nuniform float uSeed;\nuniform vec2 uDimensions;\n\nuniform vec4 uInputSize;\n\nconst float SQRT_2 = 1.414213;\nconst vec3 SEPIA_RGB = vec3(112.0 / 255.0, 66.0 / 255.0, 20.0 / 255.0);\n\nfloat rand(vec2 co) {\n return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);\n}\n\nvec3 Overlay(vec3 src, vec3 dst)\n{\n // if (dst <= 0.5) then: 2 * src * dst\n // if (dst > 0.5) then: 1 - 2 * (1 - dst) * (1 - src)\n return vec3((dst.x <= 0.5) ? (2.0 * src.x * dst.x) : (1.0 - 2.0 * (1.0 - dst.x) * (1.0 - src.x)),\n (dst.y <= 0.5) ? (2.0 * src.y * dst.y) : (1.0 - 2.0 * (1.0 - dst.y) * (1.0 - src.y)),\n (dst.z <= 0.5) ? (2.0 * src.z * dst.z) : (1.0 - 2.0 * (1.0 - dst.z) * (1.0 - src.z)));\n}\n\n\nvoid main()\n{\n finalColor = texture(uTexture, vTextureCoord);\n vec3 color = finalColor.rgb;\n\n if (uSepia > 0.0)\n {\n float gray = (color.x + color.y + color.z) / 3.0;\n vec3 grayscale = vec3(gray);\n\n color = Overlay(SEPIA_RGB, grayscale);\n\n color = grayscale + uSepia * (color - grayscale);\n }\n\n vec2 coord = vTextureCoord * uInputSize.xy / uDimensions.xy;\n\n float vignette = uVignetting[0];\n float vignetteAlpha = uVignetting[1];\n float vignetteBlur = uVignetting[2];\n\n if (vignette > 0.0)\n {\n float outter = SQRT_2 - vignette * SQRT_2;\n vec2 dir = vec2(vec2(0.5, 0.5) - coord);\n dir.y *= uDimensions.y / uDimensions.x;\n float darker = clamp((outter - length(dir) * SQRT_2) / ( 0.00001 + vignetteBlur * SQRT_2), 0.0, 1.0);\n color.rgb *= darker + (1.0 - darker) * (1.0 - vignetteAlpha);\n }\n\n float scratch = uScratch[0];\n float scratchDensity = uScratch[1];\n float scratchWidth = uScratch[2];\n\n if (scratchDensity > uSeed && scratch != 0.0)\n {\n float phase = uSeed * 256.0;\n float s = mod(floor(phase), 2.0);\n float dist = 1.0 / scratchDensity;\n float d = distance(coord, vec2(uSeed * dist, abs(s - uSeed * dist)));\n if (d < uSeed * 0.6 + 0.4)\n {\n highp float period = scratchDensity * 10.0;\n\n float xx = coord.x * period + phase;\n float aa = abs(mod(xx, 0.5) * 4.0);\n float bb = mod(floor(xx / 0.5), 2.0);\n float yy = (1.0 - bb) * aa + bb * (2.0 - aa);\n\n float kk = 2.0 * period;\n float dw = scratchWidth / uDimensions.x * (0.75 + uSeed);\n float dh = dw * kk;\n\n float tine = (yy - (2.0 - dh));\n\n if (tine > 0.0) {\n float _sign = sign(scratch);\n\n tine = s * tine / period + scratch + 0.1;\n tine = clamp(tine + 1.0, 0.5 + _sign * 0.5, 1.5 + _sign * 0.5);\n\n color.rgb *= tine;\n }\n }\n }\n\n float noise = uNoise[0];\n float noiseSize = uNoise[1];\n\n if (noise > 0.0 && noiseSize > 0.0)\n {\n vec2 pixelCoord = vTextureCoord.xy * uInputSize.xy;\n pixelCoord.x = floor(pixelCoord.x / noiseSize);\n pixelCoord.y = floor(pixelCoord.y / noiseSize);\n // vec2 d = pixelCoord * noiseSize * vec2(1024.0 + uSeed * 512.0, 1024.0 - uSeed * 512.0);\n // float _noise = snoise(d) * 0.5;\n float _noise = rand(pixelCoord * noiseSize * uSeed) - 0.5;\n color += _noise * noise;\n }\n\n finalColor.rgb = color;\n}";init_globals();var source28="struct OldFilmUniforms {\n uSepia: f32,\n uNoise: vec2<f32>,\n uScratch: vec3<f32>,\n uVignetting: vec3<f32>,\n uSeed: f32,\n uDimensions: vec2<f32>,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> oldFilmUniforms : OldFilmUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n var color: vec4<f32> = textureSample(uTexture, uSampler, uv);\n\n if (oldFilmUniforms.uSepia > 0.)\n {\n color = vec4<f32>(sepia(color.rgb), color.a);\n }\n\n let coord: vec2<f32> = uv * gfu.uInputSize.xy / oldFilmUniforms.uDimensions;\n\n if (oldFilmUniforms.uVignetting[0] > 0.)\n {\n color *= vec4<f32>(vec3<f32>(vignette(color.rgb, coord)), color.a);\n }\n\n let uScratch = oldFilmUniforms.uScratch; \n\n if (uScratch[1] > oldFilmUniforms.uSeed && uScratch[0] != 0.)\n {\n color = vec4<f32>(scratch(color.rgb, coord), color.a);\n }\n\n let uNoise = oldFilmUniforms.uNoise;\n\n if (uNoise[0] > 0.0 && uNoise[1] > 0.0)\n {\n color += vec4<f32>(vec3<f32>(noise(uv)), color.a);\n }\n\n return color;\n}\n\nconst SQRT_2: f32 = 1.414213;\nconst SEPIA_RGB: vec3<f32> = vec3<f32>(112.0 / 255.0, 66.0 / 255.0, 20.0 / 255.0);\n\nfn modulo(x: f32, y: f32) -> f32\n{\n return x - y * floor(x/y);\n}\n\nfn rand(co: vec2<f32>) -> f32\n{\n return fract(sin(dot(co, vec2<f32>(12.9898, 78.233))) * 43758.5453);\n}\n\nfn overlay(src: vec3<f32>, dst: vec3<f32>) -> vec3<f32>\n{\n // if (dst <= 0.5) then: 2 * src * dst\n // if (dst > 0.5) then: 1 - 2 * (1 - dst) * (1 - src)\n\n return vec3<f32>(\n select((1.0 - 2.0 * (1.0 - dst.x) * (1.0 - src.x)), (2.0 * src.x * dst.x), (dst.x <= 0.5)), \n select((1.0 - 2.0 * (1.0 - dst.y) * (1.0 - src.y)), (2.0 * src.y * dst.y), (dst.y <= 0.5)),\n select((1.0 - 2.0 * (1.0 - dst.z) * (1.0 - src.z)), (2.0 * src.z * dst.z), (dst.z <= 0.5))\n );\n}\n\nfn sepia(co: vec3<f32>) -> vec3<f32>\n{\n let gray: f32 = (co.x + co.y + co.z) / 3.0;\n let grayscale: vec3<f32> = vec3<f32>(gray);\n let color = overlay(SEPIA_RGB, grayscale);\n return grayscale + oldFilmUniforms.uSepia * (color - grayscale);\n}\n\nfn vignette(co: vec3<f32>, coord: vec2<f32>) -> f32\n{\n let uVignetting = oldFilmUniforms.uVignetting;\n let uDimensions = oldFilmUniforms.uDimensions;\n \n let outter: f32 = SQRT_2 - uVignetting[0] * SQRT_2;\n var dir: vec2<f32> = vec2<f32>(vec2<f32>(0.5) - coord);\n dir.y *= uDimensions.y / uDimensions.x;\n let darker: f32 = clamp((outter - length(dir) * SQRT_2) / ( 0.00001 + uVignetting[2] * SQRT_2), 0.0, 1.0);\n return darker + (1.0 - darker) * (1.0 - uVignetting[1]);\n}\n\nfn scratch(co: vec3<f32>, coord: vec2<f32>) -> vec3<f32>\n{\n var color = co;\n let uScratch = oldFilmUniforms.uScratch;\n let uSeed = oldFilmUniforms.uSeed;\n let uDimensions = oldFilmUniforms.uDimensions;\n\n let phase: f32 = uSeed * 256.0;\n let s: f32 = modulo(floor(phase), 2.0);\n let dist: f32 = 1.0 / uScratch[1];\n let d: f32 = distance(coord, vec2<f32>(uSeed * dist, abs(s - uSeed * dist)));\n\n if (d < uSeed * 0.6 + 0.4)\n {\n let period: f32 = uScratch[1] * 10.0;\n\n let xx: f32 = coord.x * period + phase;\n let aa: f32 = abs(modulo(xx, 0.5) * 4.0);\n let bb: f32 = modulo(floor(xx / 0.5), 2.0);\n let yy: f32 = (1.0 - bb) * aa + bb * (2.0 - aa);\n\n let kk: f32 = 2.0 * period;\n let dw: f32 = uScratch[2] / uDimensions.x * (0.75 + uSeed);\n let dh: f32 = dw * kk;\n\n var tine: f32 = (yy - (2.0 - dh));\n\n if (tine > 0.0) {\n let _sign: f32 = sign(uScratch[0]);\n\n tine = s * tine / period + uScratch[0] + 0.1;\n tine = clamp(tine + 1.0, 0.5 + _sign * 0.5, 1.5 + _sign * 0.5);\n\n color *= tine;\n }\n }\n\n return color;\n}\n\nfn noise(coord: vec2<f32>) -> f32\n{\n let uNoise = oldFilmUniforms.uNoise;\n let uSeed = oldFilmUniforms.uSeed;\n\n var pixelCoord: vec2<f32> = coord * gfu.uInputSize.xy;\n pixelCoord.x = floor(pixelCoord.x / uNoise[1]);\n pixelCoord.y = floor(pixelCoord.y / uNoise[1]);\n return (rand(pixelCoord * uNoise[1] * uSeed) - 0.5) * uNoise[0];\n}",__defProp24=Object.defineProperty,__defNormalProp24=(t,r,n)=>r in t?__defProp24(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField24=(t,r,n)=>(__defNormalProp24(t,"symbol"!=typeof r?r+"":r,n),n),_OldFilmFilter=class e extends Filter{constructor(t){t={...e.DEFAULT_OPTIONS,...t},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source28,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment28,name:"old-film-filter"}),resources:{oldFilmUniforms:{uSepia:{value:t.sepia,type:"f32"},uNoise:{value:new Float32Array(2),type:"vec2<f32>"},uScratch:{value:new Float32Array(3),type:"vec3<f32>"},uVignetting:{value:new Float32Array(3),type:"vec3<f32>"},uSeed:{value:t.seed,type:"f32"},uDimensions:{value:new Float32Array(2),type:"vec2<f32>"}}}}),__publicField24(this,"uniforms"),__publicField24(this,"seed"),this.uniforms=this.resources.oldFilmUniforms.uniforms,Object.assign(this,t)}apply(t,r,n,i){this.uniforms.uDimensions[0]=r.frame.width,this.uniforms.uDimensions[1]=r.frame.height,this.uniforms.uSeed=this.seed,t.applyFilter(this,r,n,i)}get sepia(){return this.uniforms.uSepia}set sepia(t){this.uniforms.uSepia=t}get noise(){return this.uniforms.uNoise[0]}set noise(t){this.uniforms.uNoise[0]=t}get noiseSize(){return this.uniforms.uNoise[1]}set noiseSize(t){this.uniforms.uNoise[1]=t}get scratch(){return this.uniforms.uScratch[0]}set scratch(t){this.uniforms.uScratch[0]=t}get scratchDensity(){return this.uniforms.uScratch[1]}set scratchDensity(t){this.uniforms.uScratch[1]=t}get scratchWidth(){return this.uniforms.uScratch[2]}set scratchWidth(t){this.uniforms.uScratch[2]=t}get vignetting(){return this.uniforms.uVignetting[0]}set vignetting(t){this.uniforms.uVignetting[0]=t}get vignettingAlpha(){return this.uniforms.uVignetting[1]}set vignettingAlpha(t){this.uniforms.uVignetting[1]=t}get vignettingBlur(){return this.uniforms.uVignetting[2]}set vignettingBlur(t){this.uniforms.uVignetting[2]=t}};__publicField24(_OldFilmFilter,"DEFAULT_OPTIONS",{sepia:.3,noise:.3,noiseSize:1,scratch:.5,scratchDensity:.3,scratchWidth:1,vignetting:.3,vignettingAlpha:1,vignettingBlur:.3,seed:0}),init_globals(),init_globals();var fragment29="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec2 uThickness;\nuniform vec3 uColor;\nuniform float uAlpha;\nuniform float uKnockout;\n\nuniform vec4 uInputClamp;\n\nconst float DOUBLE_PI = 2. * 3.14159265358979323846264;\nconst float ANGLE_STEP = ${ANGLE_STEP};\n\nfloat outlineMaxAlphaAtPos(vec2 pos) {\n if (uThickness.x == 0. || uThickness.y == 0.) {\n return 0.;\n }\n\n vec4 displacedColor;\n vec2 displacedPos;\n float maxAlpha = 0.;\n\n for (float angle = 0.; angle <= DOUBLE_PI; angle += ANGLE_STEP) {\n displacedPos.x = vTextureCoord.x + uThickness.x * cos(angle);\n displacedPos.y = vTextureCoord.y + uThickness.y * sin(angle);\n displacedColor = texture(uTexture, clamp(displacedPos, uInputClamp.xy, uInputClamp.zw));\n maxAlpha = max(maxAlpha, displacedColor.a);\n }\n\n return maxAlpha;\n}\n\nvoid main(void) {\n vec4 sourceColor = texture(uTexture, vTextureCoord);\n vec4 contentColor = sourceColor * float(uKnockout < 0.5);\n float outlineAlpha = uAlpha * outlineMaxAlphaAtPos(vTextureCoord.xy) * (1.-sourceColor.a);\n vec4 outlineColor = vec4(vec3(uColor) * outlineAlpha, outlineAlpha);\n finalColor = contentColor + outlineColor;\n}\n";init_globals();var source29="struct OutlineUniforms {\n uThickness:vec2<f32>,\n uColor:vec3<f32>,\n uAlpha:f32,\n uAngleStep:f32,\n uKnockout:f32,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> outlineUniforms : OutlineUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let sourceColor: vec4<f32> = textureSample(uTexture, uSampler, uv);\n let contentColor: vec4<f32> = sourceColor * (1. - outlineUniforms.uKnockout);\n \n let outlineAlpha: f32 = outlineUniforms.uAlpha * outlineMaxAlphaAtPos(uv) * (1. - sourceColor.a);\n let outlineColor: vec4<f32> = vec4<f32>(vec3<f32>(outlineUniforms.uColor) * outlineAlpha, outlineAlpha);\n \n return contentColor + outlineColor;\n}\n\nfn outlineMaxAlphaAtPos(uv: vec2<f32>) -> f32 {\n let thickness = outlineUniforms.uThickness;\n\n if (thickness.x == 0. || thickness.y == 0.) {\n return 0.;\n }\n \n let angleStep = outlineUniforms.uAngleStep;\n\n var displacedColor: vec4<f32>;\n var displacedPos: vec2<f32>;\n\n var maxAlpha: f32 = 0.;\n var displaced: vec2<f32>;\n var curColor: vec4<f32>;\n\n for (var angle = 0.; angle <= DOUBLE_PI; angle += angleStep)\n {\n displaced.x = uv.x + thickness.x * cos(angle);\n displaced.y = uv.y + thickness.y * sin(angle);\n curColor = textureSample(uTexture, uSampler, clamp(displaced, gfu.uInputClamp.xy, gfu.uInputClamp.zw));\n maxAlpha = max(maxAlpha, curColor.a);\n }\n\n return maxAlpha;\n}\n\nconst DOUBLE_PI: f32 = 3.14159265358979323846264 * 2.;",__defProp25=Object.defineProperty,__defNormalProp25=(t,r,n)=>r in t?__defProp25(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField25=(t,r,n)=>(__defNormalProp25(t,"symbol"!=typeof r?r+"":r,n),n),_OutlineFilter=class e extends Filter{constructor(...t){let r=t[0]??{};"number"==typeof r&&(deprecation("6.0.0","OutlineFilter constructor params are now options object. See params: { thickness, color, quality, alpha, knockout }"),r={thickness:r},void 0!==t[1]&&(r.color=t[1]),void 0!==t[2]&&(r.quality=t[2]),void 0!==t[3]&&(r.alpha=t[3]),void 0!==t[4]&&(r.knockout=t[4]));let n=(r={...e.DEFAULT_OPTIONS,...r}).quality??.1;super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source29,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment29.replace(/\$\{ANGLE_STEP\}/,e.getAngleStep(n).toFixed(7)),name:"outline-filter"}),resources:{outlineUniforms:{uThickness:{value:new Float32Array(2),type:"vec2<f32>"},uColor:{value:new Float32Array(3),type:"vec3<f32>"},uAlpha:{value:r.alpha,type:"f32"},uAngleStep:{value:0,type:"f32"},uKnockout:{value:+!!r.knockout,type:"f32"}}}}),__publicField25(this,"uniforms"),__publicField25(this,"_thickness"),__publicField25(this,"_quality"),__publicField25(this,"_color"),this.uniforms=this.resources.outlineUniforms.uniforms,this.uniforms.uAngleStep=e.getAngleStep(n),this._color=new Color,this.color=r.color??0,Object.assign(this,r)}apply(t,r,n,i){this.uniforms.uThickness[0]=this.thickness/r.source.width,this.uniforms.uThickness[1]=this.thickness/r.source.height,t.applyFilter(this,r,n,i)}static getAngleStep(t){return parseFloat((2*Math.PI/Math.max(t*e.MAX_SAMPLES,e.MIN_SAMPLES)).toFixed(7))}get thickness(){return this._thickness}set thickness(t){this._thickness=this.padding=t}get color(){return this._color.value}set color(t){this._color.setValue(t);let[r,n,i]=this._color.toArray();this.uniforms.uColor[0]=r,this.uniforms.uColor[1]=n,this.uniforms.uColor[2]=i}get alpha(){return this.uniforms.uAlpha}set alpha(t){this.uniforms.uAlpha=t}get quality(){return this._quality}set quality(t){this._quality=t,this.uniforms.uAngleStep=e.getAngleStep(t)}get knockout(){return 1===this.uniforms.uKnockout}set knockout(t){this.uniforms.uKnockout=+!!t}};__publicField25(_OutlineFilter,"DEFAULT_OPTIONS",{thickness:1,color:0,alpha:1,quality:.1,knockout:!1}),__publicField25(_OutlineFilter,"MIN_SAMPLES",1),__publicField25(_OutlineFilter,"MAX_SAMPLES",100),init_globals(),init_globals(),init_globals(),init_globals(),init_globals();var fragment31="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform float uRadian;\nuniform vec2 uCenter;\nuniform float uRadius;\nuniform int uKernelSize;\n\nuniform vec4 uInputSize;\n\nconst int MAX_KERNEL_SIZE = 2048;\n\nvoid main(void)\n{\n vec4 color = texture(uTexture, vTextureCoord);\n\n if (uKernelSize == 0)\n {\n finalColor = color;\n return;\n }\n\n float aspect = uInputSize.y / uInputSize.x;\n vec2 center = uCenter.xy / uInputSize.xy;\n float gradient = uRadius / uInputSize.x * 0.3;\n float radius = uRadius / uInputSize.x - gradient * 0.5;\n int k = uKernelSize - 1;\n\n vec2 coord = vTextureCoord;\n vec2 dir = vec2(center - coord);\n float dist = length(vec2(dir.x, dir.y * aspect));\n\n float radianStep = uRadian;\n if (radius >= 0.0 && dist > radius) {\n float delta = dist - radius;\n float gap = gradient;\n float scale = 1.0 - abs(delta / gap);\n if (scale <= 0.0) {\n finalColor = color;\n return;\n }\n radianStep *= scale;\n }\n radianStep /= float(k);\n\n float s = sin(radianStep);\n float c = cos(radianStep);\n mat2 rotationMatrix = mat2(vec2(c, -s), vec2(s, c));\n\n for(int i = 0; i < MAX_KERNEL_SIZE - 1; i++) {\n if (i == k) {\n break;\n }\n\n coord -= center;\n coord.y *= aspect;\n coord = rotationMatrix * coord;\n coord.y /= aspect;\n coord += center;\n\n vec4 sample = texture(uTexture, coord);\n\n // switch to pre-multiplied alpha to correctly blur transparent images\n // sample.rgb *= sample.a;\n\n color += sample;\n }\n\n finalColor = color / float(uKernelSize);\n}\n";init_globals();var source31="struct RadialBlurUniforms {\n uRadian: f32,\n uCenter: vec2<f32>,\n uKernelSize: f32,\n uRadius: f32,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> radialBlurUniforms : RadialBlurUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let uRadian = radialBlurUniforms.uRadian;\n let uCenter = radialBlurUniforms.uCenter;\n let uKernelSize = radialBlurUniforms.uKernelSize;\n let uRadius = radialBlurUniforms.uRadius;\n \n var returnColorOnly = false;\n\n if (uKernelSize == 0)\n {\n returnColorOnly = true;\n }\n\n let aspect: f32 = gfu.uInputSize.y / gfu.uInputSize.x;\n let center: vec2<f32> = uCenter.xy / gfu.uInputSize.xy;\n let gradient: f32 = uRadius / gfu.uInputSize.x * 0.3;\n let radius: f32 = uRadius / gfu.uInputSize.x - gradient * 0.5;\n let k: i32 = i32(uKernelSize - 1);\n\n var coord: vec2<f32> = uv;\n let dir: vec2<f32> = vec2<f32>(center - coord);\n let dist: f32 = length(vec2<f32>(dir.x, dir.y * aspect));\n\n var radianStep: f32 = uRadian;\n \n if (radius >= 0.0 && dist > radius)\n {\n let delta: f32 = dist - radius;\n let gap: f32 = gradient;\n let scale: f32 = 1.0 - abs(delta / gap);\n if (scale <= 0.0) {\n returnColorOnly = true;\n }\n radianStep *= scale;\n }\n\n radianStep /= f32(k);\n\n let s: f32 = sin(radianStep);\n let c: f32 = cos(radianStep);\n let rotationMatrix: mat2x2<f32> = mat2x2<f32>(vec2<f32>(c, -s), vec2<f32>(s, c));\n \n var color: vec4<f32> = textureSample(uTexture, uSampler, uv);\n let baseColor = vec4<f32>(color);\n\n let minK: i32 = min(i32(uKernelSize) - 1, MAX_KERNEL_SIZE - 1);\n\n for(var i: i32 = 0; i < minK; i += 1) \n {\n coord -= center;\n coord.y *= aspect;\n coord = rotationMatrix * coord;\n coord.y /= aspect;\n coord += center;\n let sample: vec4<f32> = textureSample(uTexture, uSampler, coord);\n // switch to pre-multiplied alpha to correctly blur transparent images\n // sample.rgb *= sample.a;\n color += sample;\n }\n\n return select(color / f32(uKernelSize), baseColor, returnColorOnly);\n}\n\nconst MAX_KERNEL_SIZE: i32 = 2048;",__defProp26=Object.defineProperty,__defNormalProp26=(t,r,n)=>r in t?__defProp26(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField26=(t,r,n)=>(__defNormalProp26(t,"symbol"!=typeof r?r+"":r,n),n),_RadialBlurFilter=class e extends Filter{constructor(...t){let r=t[0]??{};if("number"==typeof r){if(deprecation("6.0.0","RadialBlurFilter constructor params are now options object. See params: { angle, center, kernelSize, radius }"),r={angle:r},t[1]){let n="x"in t[1]?t[1].x:t[1][0],i="y"in t[1]?t[1].y:t[1][1];r.center={x:n,y:i}}t[2]&&(r.kernelSize=t[2]),t[3]&&(r.radius=t[3])}r={...e.DEFAULT_OPTIONS,...r},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source31,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment31,name:"radial-blur-filter"}),resources:{radialBlurUniforms:{uRadian:{value:0,type:"f32"},uCenter:{value:r.center,type:"vec2<f32>"},uKernelSize:{value:r.kernelSize,type:"i32"},uRadius:{value:r.radius,type:"f32"}}}}),__publicField26(this,"uniforms"),__publicField26(this,"_angle"),__publicField26(this,"_kernelSize"),this.uniforms=this.resources.radialBlurUniforms.uniforms,Object.assign(this,r)}_updateKernelSize(){this.uniforms.uKernelSize=0!==this._angle?this.kernelSize:0}get angle(){return this._angle}set angle(t){this._angle=t,this.uniforms.uRadian=t*Math.PI/180,this._updateKernelSize()}get center(){return this.uniforms.uCenter}set center(t){Array.isArray(t)&&(t={x:t[0],y:t[1]}),this.uniforms.uCenter=t}get centerX(){return this.center.x}set centerX(t){this.center.x=t}get centerY(){return this.center.y}set centerY(t){this.center.y=t}get kernelSize(){return this._kernelSize}set kernelSize(t){this._kernelSize=t,this._updateKernelSize()}get radius(){return this.uniforms.uRadius}set radius(t){this.uniforms.uRadius=t<0||t===1/0?-1:t}};__publicField26(_RadialBlurFilter,"DEFAULT_OPTIONS",{angle:0,center:{x:0,y:0},kernelSize:5,radius:-1}),init_globals(),init_globals();var fragment32="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform float uMirror;\nuniform float uBoundary;\nuniform vec2 uAmplitude;\nuniform vec2 uWavelength;\nuniform vec2 uAlpha;\nuniform float uTime;\nuniform vec2 uDimensions;\n\nuniform vec4 uInputSize;\nuniform vec4 uInputClamp;\n\nfloat rand(vec2 co) {\n return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);\n}\n\nvoid main(void)\n{\n vec2 pixelCoord = vTextureCoord.xy * uInputSize.xy;\n vec2 coord = pixelCoord / uDimensions;\n\n if (coord.y < uBoundary) {\n finalColor = texture(uTexture, vTextureCoord);\n return;\n }\n\n float k = (coord.y - uBoundary) / (1. - uBoundary + 0.0001);\n float areaY = uBoundary * uDimensions.y / uInputSize.y;\n float v = areaY + areaY - vTextureCoord.y;\n float y = uMirror > 0.5 ? v : vTextureCoord.y;\n\n float _amplitude = ((uAmplitude.y - uAmplitude.x) * k + uAmplitude.x ) / uInputSize.x;\n float _waveLength = ((uWavelength.y - uWavelength.x) * k + uWavelength.x) / uInputSize.y;\n float _alpha = (uAlpha.y - uAlpha.x) * k + uAlpha.x;\n\n float x = vTextureCoord.x + cos(v * 6.28 / _waveLength - uTime) * _amplitude;\n x = clamp(x, uInputClamp.x, uInputClamp.z);\n\n vec4 color = texture(uTexture, vec2(x, y));\n\n finalColor = color * _alpha;\n}\n";init_globals();var source32="struct ReflectionUniforms {\n uMirror: f32,\n uBoundary: f32,\n uAmplitude: vec2<f32>,\n uWavelength: vec2<f32>,\n uAlpha: vec2<f32>,\n uTime: f32,\n uDimensions: vec2<f32>,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> reflectionUniforms : ReflectionUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let uDimensions: vec2<f32> = reflectionUniforms.uDimensions;\n let uBoundary: f32 = reflectionUniforms.uBoundary;\n let uMirror: bool = reflectionUniforms.uMirror > 0.5;\n let uAmplitude: vec2<f32> = reflectionUniforms.uAmplitude;\n let uWavelength: vec2<f32> = reflectionUniforms.uWavelength;\n let uAlpha: vec2<f32> = reflectionUniforms.uAlpha;\n let uTime: f32 = reflectionUniforms.uTime;\n\n let pixelCoord: vec2<f32> = uv * gfu.uInputSize.xy;\n let coord: vec2<f32> = pixelCoord /uDimensions;\n var returnColorOnly: bool = false;\n\n if (coord.y < uBoundary) {\n returnColorOnly = true;\n }\n\n let k: f32 = (coord.y - uBoundary) / (1. - uBoundary + 0.0001);\n let areaY: f32 = uBoundary * uDimensions.y / gfu.uInputSize.y;\n let v: f32 = areaY + areaY - uv.y;\n let y: f32 = select(uv.y, v, uMirror);\n\n let amplitude: f32 = ((uAmplitude.y - uAmplitude.x) * k + uAmplitude.x ) / gfu.uInputSize.x;\n let waveLength: f32 = ((uWavelength.y - uWavelength.x) * k + uWavelength.x) / gfu.uInputSize.y;\n let alpha: f32 = select((uAlpha.y - uAlpha.x) * k + uAlpha.x, 1., returnColorOnly);\n\n var x: f32 = uv.x + cos(v * 6.28 / waveLength - uTime) * amplitude;\n x = clamp(x, gfu.uInputClamp.x, gfu.uInputClamp.z);\n \n return textureSample(uTexture, uSampler, select(vec2<f32>(x, y), uv, returnColorOnly)) * alpha;\n}\n\nfn rand(co: vec2<f32>) -> f32 \n{\n return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);\n}",__defProp27=Object.defineProperty,__defNormalProp27=(t,r,n)=>r in t?__defProp27(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField27=(t,r,n)=>(__defNormalProp27(t,"symbol"!=typeof r?r+"":r,n),n),_ReflectionFilter=class e extends Filter{constructor(t){t={...e.DEFAULT_OPTIONS,...t},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source32,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment32,name:"reflection-filter"}),resources:{reflectionUniforms:{uMirror:{value:+!!t.mirror,type:"f32"},uBoundary:{value:t.boundary,type:"f32"},uAmplitude:{value:t.amplitude,type:"vec2<f32>"},uWavelength:{value:t.waveLength,type:"vec2<f32>"},uAlpha:{value:t.alpha,type:"vec2<f32>"},uTime:{value:t.time,type:"f32"},uDimensions:{value:new Float32Array(2),type:"vec2<f32>"}}}}),__publicField27(this,"uniforms"),__publicField27(this,"time",0),this.uniforms=this.resources.reflectionUniforms.uniforms,Object.assign(this,t)}apply(t,r,n,i){this.uniforms.uDimensions[0]=r.frame.width,this.uniforms.uDimensions[1]=r.frame.height,this.uniforms.uTime=this.time,t.applyFilter(this,r,n,i)}get mirror(){return this.uniforms.uMirror>.5}set mirror(t){this.uniforms.uMirror=+!!t}get boundary(){return this.uniforms.uBoundary}set boundary(t){this.uniforms.uBoundary=t}get amplitude(){return Array.from(this.uniforms.uAmplitude)}set amplitude(t){this.uniforms.uAmplitude[0]=t[0],this.uniforms.uAmplitude[1]=t[1]}get amplitudeStart(){return this.uniforms.uAmplitude[0]}set amplitudeStart(t){this.uniforms.uAmplitude[0]=t}get amplitudeEnd(){return this.uniforms.uAmplitude[1]}set amplitudeEnd(t){this.uniforms.uAmplitude[1]=t}get waveLength(){return Array.from(this.uniforms.uWavelength)}set waveLength(t){this.uniforms.uWavelength[0]=t[0],this.uniforms.uWavelength[1]=t[1]}get wavelengthStart(){return this.uniforms.uWavelength[0]}set wavelengthStart(t){this.uniforms.uWavelength[0]=t}get wavelengthEnd(){return this.uniforms.uWavelength[1]}set wavelengthEnd(t){this.uniforms.uWavelength[1]=t}get alpha(){return Array.from(this.uniforms.uAlpha)}set alpha(t){this.uniforms.uAlpha[0]=t[0],this.uniforms.uAlpha[1]=t[1]}get alphaStart(){return this.uniforms.uAlpha[0]}set alphaStart(t){this.uniforms.uAlpha[0]=t}get alphaEnd(){return this.uniforms.uAlpha[1]}set alphaEnd(t){this.uniforms.uAlpha[1]=t}};__publicField27(_ReflectionFilter,"DEFAULT_OPTIONS",{mirror:!0,boundary:.5,amplitude:[0,20],waveLength:[30,100],alpha:[1,1],time:0}),init_globals(),init_globals();var fragment33="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec4 uInputSize;\nuniform vec2 uRed;\nuniform vec2 uGreen;\nuniform vec2 uBlue;\n\nvoid main(void)\n{\n float r = texture(uTexture, vTextureCoord + uRed/uInputSize.xy).r;\n float g = texture(uTexture, vTextureCoord + uGreen/uInputSize.xy).g;\n float b = texture(uTexture, vTextureCoord + uBlue/uInputSize.xy).b;\n float a = texture(uTexture, vTextureCoord).a;\n finalColor = vec4(r, g, b, a);\n}\n";init_globals();var source33="struct RgbSplitUniforms {\n uRed: vec2<f32>,\n uGreen: vec2<f32>,\n uBlue: vec3<f32>,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> rgbSplitUniforms : RgbSplitUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let r = textureSample(uTexture, uSampler, uv + vec2<f32>(rgbSplitUniforms.uRed.x / gfu.uInputSize.x, rgbSplitUniforms.uRed.y / gfu.uInputSize.y)).r;\n let g = textureSample(uTexture, uSampler, uv + vec2<f32>(rgbSplitUniforms.uGreen.x / gfu.uInputSize.x, rgbSplitUniforms.uGreen.y / gfu.uInputSize.y)).g;\n let b = textureSample(uTexture, uSampler, uv + vec2<f32>(rgbSplitUniforms.uBlue.x / gfu.uInputSize.x, rgbSplitUniforms.uBlue.y / gfu.uInputSize.y)).b;\n let a = textureSample(uTexture, uSampler, uv).a;\n return vec4<f32>(r, g, b, a);\n}\n",__defProp28=Object.defineProperty,__defNormalProp28=(t,r,n)=>r in t?__defProp28(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField28=(t,r,n)=>(__defNormalProp28(t,"symbol"!=typeof r?r+"":r,n),n),_RGBSplitFilter=class e extends Filter{constructor(...t){let r=t[0]??{};(Array.isArray(r)||"x"in r&&"y"in r)&&(deprecation("6.0.0","RGBSplitFilter constructor params are now options object. See params: { red, green, blue }"),r={red:r},void 0!==t[1]&&(r.green=t[1]),void 0!==t[2]&&(r.blue=t[2])),r={...e.DEFAULT_OPTIONS,...r},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source33,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment33,name:"rgb-split-filter"}),resources:{rgbSplitUniforms:{uRed:{value:r.red,type:"vec2<f32>"},uGreen:{value:r.green,type:"vec2<f32>"},uBlue:{value:r.blue,type:"vec2<f32>"}}}}),__publicField28(this,"uniforms"),this.uniforms=this.resources.rgbSplitUniforms.uniforms,Object.assign(this,r)}get red(){return this.uniforms.uRed}set red(t){Array.isArray(t)&&(t={x:t[0],y:t[1]}),this.uniforms.uRed=t}get redX(){return this.red.x}set redX(t){this.red.x=t}get redY(){return this.red.y}set redY(t){this.red.y=t}get green(){return this.uniforms.uGreen}set green(t){Array.isArray(t)&&(t={x:t[0],y:t[1]}),this.uniforms.uGreen=t}get greenX(){return this.green.x}set greenX(t){this.green.x=t}get greenY(){return this.green.y}set greenY(t){this.green.y=t}get blue(){return this.uniforms.uBlue}set blue(t){Array.isArray(t)&&(t={x:t[0],y:t[1]}),this.uniforms.uBlue=t}get blueX(){return this.blue.x}set blueX(t){this.blue.x=t}get blueY(){return this.blue.y}set blueY(t){this.blue.y=t}};__publicField28(_RGBSplitFilter,"DEFAULT_OPTIONS",{red:{x:-10,y:0},green:{x:0,y:10},blue:{x:0,y:0}}),init_globals(),init_globals();var fragment34="\nprecision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec2 uCenter;\nuniform float uTime;\nuniform float uSpeed;\nuniform vec4 uWave;\n\nuniform vec4 uInputSize;\nuniform vec4 uInputClamp;\n\nconst float PI = 3.14159;\n\nvoid main()\n{\n float uAmplitude = uWave[0];\n float uWavelength = uWave[1];\n float uBrightness = uWave[2];\n float uRadius = uWave[3];\n\n float halfWavelength = uWavelength * 0.5 / uInputSize.x;\n float maxRadius = uRadius / uInputSize.x;\n float currentRadius = uTime * uSpeed / uInputSize.x;\n\n float fade = 1.0;\n\n if (maxRadius > 0.0) {\n if (currentRadius > maxRadius) {\n finalColor = texture(uTexture, vTextureCoord);\n return;\n }\n fade = 1.0 - pow(currentRadius / maxRadius, 2.0);\n }\n\n vec2 dir = vec2(vTextureCoord - uCenter / uInputSize.xy);\n dir.y *= uInputSize.y / uInputSize.x;\n float dist = length(dir);\n\n if (dist <= 0.0 || dist < currentRadius - halfWavelength || dist > currentRadius + halfWavelength) {\n finalColor = texture(uTexture, vTextureCoord);\n return;\n }\n\n vec2 diffUV = normalize(dir);\n\n float diff = (dist - currentRadius) / halfWavelength;\n\n float p = 1.0 - pow(abs(diff), 2.0);\n\n // float powDiff = diff * pow(p, 2.0) * ( amplitude * fade );\n float powDiff = 1.25 * sin(diff * PI) * p * ( uAmplitude * fade );\n\n vec2 offset = diffUV * powDiff / uInputSize.xy;\n\n // Do clamp :\n vec2 coord = vTextureCoord + offset;\n vec2 clampedCoord = clamp(coord, uInputClamp.xy, uInputClamp.zw);\n vec4 color = texture(uTexture, clampedCoord);\n if (coord != clampedCoord) {\n color *= max(0.0, 1.0 - length(coord - clampedCoord));\n }\n\n // No clamp :\n // finalColor = texture(uTexture, vTextureCoord + offset);\n\n color.rgb *= 1.0 + (uBrightness - 1.0) * p * fade;\n\n finalColor = color;\n}\n";init_globals();var source34="\nstruct ShockWaveUniforms {\n uTime: f32,\n uOffset: vec2<f32>,\n uSpeed: f32,\n uWave: vec4<f32>,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> shockwaveUniforms : ShockWaveUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n\n let uTime = shockwaveUniforms.uTime;\n let uOffset = shockwaveUniforms.uOffset;\n let uSpeed = shockwaveUniforms.uSpeed;\n let uAmplitude = shockwaveUniforms.uWave[0];\n let uWavelength = shockwaveUniforms.uWave[1];\n let uBrightness = shockwaveUniforms.uWave[2];\n let uRadius = shockwaveUniforms.uWave[3];\n let halfWavelength: f32 = uWavelength * 0.5 / gfu.uInputSize.x;\n let maxRadius: f32 = uRadius / gfu.uInputSize.x;\n let currentRadius: f32 = uTime * uSpeed / gfu.uInputSize.x;\n var fade: f32 = 1.0;\n var returnColorOnly: bool = false;\n \n if (maxRadius > 0.0) {\n if (currentRadius > maxRadius) {\n returnColorOnly = true;\n }\n fade = 1.0 - pow(currentRadius / maxRadius, 2.0);\n }\n var dir: vec2<f32> = vec2<f32>(uv - uOffset / gfu.uInputSize.xy);\n dir.y *= gfu.uInputSize.y / gfu.uInputSize.x;\n\n let dist:f32 = length(dir);\n\n if (dist <= 0.0 || dist < currentRadius - halfWavelength || dist > currentRadius + halfWavelength) {\n returnColorOnly = true;\n }\n\n let diffUV: vec2<f32> = normalize(dir);\n let diff: f32 = (dist - currentRadius) / halfWavelength;\n let p: f32 = 1.0 - pow(abs(diff), 2.0);\n let powDiff: f32 = 1.25 * sin(diff * PI) * p * ( uAmplitude * fade );\n let offset: vec2<f32> = diffUV * powDiff / gfu.uInputSize.xy;\n // Do clamp :\n let coord: vec2<f32> = uv + offset;\n let clampedCoord: vec2<f32> = clamp(coord, gfu.uInputClamp.xy, gfu.uInputClamp.zw);\n\n var clampedColor: vec4<f32> = textureSample(uTexture, uSampler, clampedCoord);\n \n if (boolVec2(coord, clampedCoord)) \n {\n clampedColor *= max(0.0, 1.0 - length(coord - clampedCoord));\n }\n // No clamp :\n var finalColor = clampedColor;\n\n return select(finalColor, textureSample(uTexture, uSampler, uv), returnColorOnly);\n}\n\nfn boolVec2(x: vec2<f32>, y: vec2<f32>) -> bool\n{\n if (x.x == y.x && x.y == y.y)\n {\n return true;\n }\n \n return false;\n}\n\nconst PI: f32 = 3.14159265358979323846264;\n",__defProp29=Object.defineProperty,__defNormalProp29=(t,r,n)=>r in t?__defProp29(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField29=(t,r,n)=>(__defNormalProp29(t,"symbol"!=typeof r?r+"":r,n),n),_ShockwaveFilter=class e extends Filter{constructor(...t){let r=t[0]??{};(Array.isArray(r)||"x"in r&&"y"in r)&&(deprecation("6.0.0","ShockwaveFilter constructor params are now options object. See params: { center, speed, amplitude, wavelength, brightness, radius, time }"),r={center:r,...t[1]},void 0!==t[2]&&(r.time=t[2])),r={...e.DEFAULT_OPTIONS,...r},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source34,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment34,name:"shockwave-filter"}),resources:{shockwaveUniforms:{uTime:{value:r.time,type:"f32"},uCenter:{value:r.center,type:"vec2<f32>"},uSpeed:{value:r.speed,type:"f32"},uWave:{value:new Float32Array(4),type:"vec4<f32>"}}}}),__publicField29(this,"uniforms"),__publicField29(this,"time"),this.time=0,this.uniforms=this.resources.shockwaveUniforms.uniforms,Object.assign(this,r)}apply(t,r,n,i){this.uniforms.uTime=this.time,t.applyFilter(this,r,n,i)}get center(){return this.uniforms.uCenter}set center(t){Array.isArray(t)&&(t={x:t[0],y:t[1]}),this.uniforms.uCenter=t}get centerX(){return this.uniforms.uCenter.x}set centerX(t){this.uniforms.uCenter.x=t}get centerY(){return this.uniforms.uCenter.y}set centerY(t){this.uniforms.uCenter.y=t}get speed(){return this.uniforms.uSpeed}set speed(t){this.uniforms.uSpeed=t}get amplitude(){return this.uniforms.uWave[0]}set amplitude(t){this.uniforms.uWave[0]=t}get wavelength(){return this.uniforms.uWave[1]}set wavelength(t){this.uniforms.uWave[1]=t}get brightness(){return this.uniforms.uWave[2]}set brightness(t){this.uniforms.uWave[2]=t}get radius(){return this.uniforms.uWave[3]}set radius(t){this.uniforms.uWave[3]=t}};__publicField29(_ShockwaveFilter,"DEFAULT_OPTIONS",{center:{x:0,y:0},speed:500,amplitude:30,wavelength:160,brightness:1,radius:-1}),init_globals(),init_globals();var fragment35="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform sampler2D uMapTexture;\nuniform vec3 uColor;\nuniform float uAlpha;\nuniform vec2 uDimensions;\n\nuniform vec4 uInputSize;\n\nvoid main() {\n vec4 diffuseColor = texture(uTexture, vTextureCoord);\n vec2 lightCoord = (vTextureCoord * uInputSize.xy) / uDimensions;\n vec4 light = texture(uMapTexture, lightCoord);\n vec3 ambient = uColor.rgb * uAlpha;\n vec3 intensity = ambient + light.rgb;\n vec3 color = diffuseColor.rgb * intensity;\n finalColor = vec4(color, diffuseColor.a);\n}\n";init_globals();var source35="struct SimpleLightmapUniforms {\n uColor: vec3<f32>,\n uAlpha: f32,\n uDimensions: vec2<f32>,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> simpleLightmapUniforms : SimpleLightmapUniforms;\n@group(1) @binding(1) var uMapTexture: texture_2d<f32>;\n@group(1) @binding(2) var uMapSampler: sampler;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>,\n) -> @location(0) vec4<f32> {\n let uColor = simpleLightmapUniforms.uColor;\n let uAlpha = simpleLightmapUniforms.uAlpha;\n let uDimensions = simpleLightmapUniforms.uDimensions;\n\n let diffuseColor: vec4<f32> = textureSample(uTexture, uSampler, uv);\n let lightCoord: vec2<f32> = (uv * gfu.uInputSize.xy) / simpleLightmapUniforms.uDimensions;\n let light: vec4<f32> = textureSample(uMapTexture, uMapSampler, lightCoord);\n let ambient: vec3<f32> = uColor * uAlpha;\n let intensity: vec3<f32> = ambient + light.rgb;\n let finalColor: vec3<f32> = diffuseColor.rgb * intensity;\n return vec4<f32>(finalColor, diffuseColor.a);\n}",__defProp30=Object.defineProperty,__defNormalProp30=(t,r,n)=>r in t?__defProp30(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField30=(t,r,n)=>(__defNormalProp30(t,"symbol"!=typeof r?r+"":r,n),n),_SimpleLightmapFilter=class e extends Filter{constructor(...t){let r=t[0]??{};if(r instanceof Texture&&(deprecation("6.0.0","SimpleLightmapFilter constructor params are now options object. See params: { lightMap, color, alpha }"),r={lightMap:r},void 0!==t[1]&&(r.color=t[1]),void 0!==t[2]&&(r.alpha=t[2])),!(r={...e.DEFAULT_OPTIONS,...r}).lightMap)throw Error("No light map texture source was provided to SimpleLightmapFilter");super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source35,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment35,name:"simple-lightmap-filter"}),resources:{simpleLightmapUniforms:{uColor:{value:new Float32Array(3),type:"vec3<f32>"},uAlpha:{value:r.alpha,type:"f32"},uDimensions:{value:new Float32Array(2),type:"vec2<f32>"}},uMapTexture:r.lightMap.source,uMapSampler:r.lightMap.source.style}}),__publicField30(this,"uniforms"),__publicField30(this,"_color"),__publicField30(this,"_lightMap"),this.uniforms=this.resources.simpleLightmapUniforms.uniforms,this._color=new Color,this.color=r.color??0,Object.assign(this,r)}apply(t,r,n,i){this.uniforms.uDimensions[0]=r.frame.width,this.uniforms.uDimensions[1]=r.frame.height,t.applyFilter(this,r,n,i)}get lightMap(){return this._lightMap}set lightMap(t){this._lightMap=t,this.resources.uMapTexture=t.source,this.resources.uMapSampler=t.source.style}get color(){return this._color.value}set color(t){this._color.setValue(t);let[r,n,i]=this._color.toArray();this.uniforms.uColor[0]=r,this.uniforms.uColor[1]=n,this.uniforms.uColor[2]=i}get alpha(){return this.uniforms.uAlpha}set alpha(t){this.uniforms.uAlpha=t}};__publicField30(_SimpleLightmapFilter,"DEFAULT_OPTIONS",{lightMap:Texture.WHITE,color:0,alpha:1}),init_globals(),init_globals();var fragment36="in vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec2 uBlur;\nuniform vec2 uStart;\nuniform vec2 uEnd;\nuniform vec2 uDelta;\nuniform vec2 uDimensions;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float blur = uBlur[0];\n float gradientBlur = uBlur[1];\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(uStart.y - uEnd.y, uEnd.x - uStart.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * uDimensions - uStart, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture(uTexture, vTextureCoord + uDelta / uDimensions * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n color /= total;\n color.rgb /= color.a + 0.00001;\n\n finalColor = color;\n}\n";init_globals();var source36="struct TiltShiftUniforms {\n uBlur: vec2<f32>,\n uStart: vec2<f32>,\n uEnd: vec2<f32>,\n uDelta: vec2<f32>,\n uDimensions: vec2<f32>,\n};\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> tiltShiftUniforms : TiltShiftUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let uBlur = tiltShiftUniforms.uBlur[0];\n let uBlurGradient = tiltShiftUniforms.uBlur[1];\n let uStart = tiltShiftUniforms.uStart;\n let uEnd = tiltShiftUniforms.uEnd;\n let uDelta = tiltShiftUniforms.uDelta;\n let uDimensions = tiltShiftUniforms.uDimensions;\n\n var color: vec4<f32> = vec4<f32>(0.0);\n var total: f32 = 0.0;\n\n let offset: f32 = random(position, vec3<f32>(12.9898, 78.233, 151.7182), 0.0);\n let normal: vec2<f32> = normalize(vec2<f32>(uStart.y - uEnd.y, uEnd.x - uStart.x));\n let radius: f32 = smoothstep(0.0, 1.0, abs(dot(uv * uDimensions - uStart, normal)) / uBlurGradient) * uBlur;\n\n for (var t: f32 = -30.0; t <= 30.0; t += 1.0)\n {\n var percent: f32 = (t + offset - 0.5) / 30.0;\n var weight: f32 = 1.0 - abs(percent);\n var sample: vec4<f32> = textureSample(uTexture, uSampler, uv + uDelta / uDimensions * percent * radius);\n sample = vec4<f32>(sample.xyz * sample.a, sample.a); // multiply sample.rgb with sample.a\n color += sample * weight;\n total += weight;\n }\n\n color /= total;\n color = vec4<f32>(color.xyz / (color.a + 0.00001), color.a); // divide color.rgb by color.a + 0.00001\n\n return color;\n}\n\n\nfn random(position: vec4<f32>, scale: vec3<f32>, seed: f32) -> f32\n{\n return fract(sin(dot(position.xyz + seed, scale)) * 43758.5453 + seed);\n}",__defProp31=Object.defineProperty,__defNormalProp31=(t,r,n)=>r in t?__defProp31(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField31=(t,r,n)=>(__defNormalProp31(t,"symbol"!=typeof r?r+"":r,n),n),_TiltShiftAxisFilter=class e extends Filter{constructor(t){let{width:r,height:n}=ViewSystem.defaultOptions;t={...e.DEFAULT_OPTIONS,start:{x:0,y:n/2},end:{x:r,y:n/2},...t},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source36,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment36,name:"tilt-shift-axis-filter"}),resources:{tiltShiftUniforms:{uBlur:{value:new Float32Array([t.blur,t.gradientBlur]),type:"vec2<f32>"},uStart:{value:t.start,type:"vec2<f32>"},uEnd:{value:t.end,type:"vec2<f32>"},uDelta:{value:new Float32Array([0,0]),type:"vec2<f32>"},uDimensions:{value:new Float32Array([r,n]),type:"vec2<f32>"}}}}),__publicField31(this,"uniforms"),__publicField31(this,"_tiltAxis"),this.uniforms=this.resources.tiltShiftUniforms.uniforms,this._tiltAxis=t.axis}updateDimensions(t){let{uDimensions:r}=this.uniforms;r[0]=t.frame.width,r[1]=t.frame.height}updateDelta(){if(this.uniforms.uDelta[0]=0,this.uniforms.uDelta[1]=0,void 0===this._tiltAxis)return;let t=this.uniforms.uEnd,r=this.uniforms.uStart,n=t.x-r.x,i=t.y-r.y,a=Math.sqrt(n*n+i*i),o="vertical"===this._tiltAxis;this.uniforms.uDelta[0]=o?-i/a:n/a,this.uniforms.uDelta[1]=o?n/a:i/a}};__publicField31(_TiltShiftAxisFilter,"DEFAULT_OPTIONS",{blur:100,gradientBlur:600}),init_globals(),init_globals(),init_globals();var fragment37="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform vec2 uTwist;\nuniform vec2 uOffset;\nuniform vec4 uInputSize;\n\nvec2 mapCoord( vec2 coord )\n{\n coord *= uInputSize.xy;\n coord += uInputSize.zw;\n\n return coord;\n}\n\nvec2 unmapCoord( vec2 coord )\n{\n coord -= uInputSize.zw;\n coord /= uInputSize.xy;\n\n return coord;\n}\n\nvec2 twist(vec2 coord)\n{\n coord -= uOffset;\n\n float dist = length(coord);\n float uRadius = uTwist[0];\n float uAngle = uTwist[1];\n\n if (dist < uRadius)\n {\n float ratioDist = (uRadius - dist) / uRadius;\n float angleMod = ratioDist * ratioDist * uAngle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n coord += uOffset;\n\n return coord;\n}\n\nvoid main(void)\n{\n vec2 coord = mapCoord(vTextureCoord);\n coord = twist(coord);\n coord = unmapCoord(coord);\n finalColor = texture(uTexture, coord);\n}\n";init_globals();var source37="struct TwistUniforms {\n uTwist:vec2<f32>,\n uOffset:vec2<f32>,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> twistUniforms : TwistUniforms;\n\n@fragment\nfn mainFragment(\n @location(0) uv: vec2<f32>,\n @builtin(position) position: vec4<f32>\n) -> @location(0) vec4<f32> {\n return textureSample(uTexture, uSampler, unmapCoord(twist(mapCoord(uv))));\n}\n\nfn mapCoord(coord: vec2<f32> ) -> vec2<f32>\n{\n var mappedCoord: vec2<f32> = coord;\n mappedCoord *= gfu.uInputSize.xy;\n mappedCoord += gfu.uOutputFrame.xy;\n return mappedCoord;\n}\n\nfn unmapCoord(coord: vec2<f32> ) -> vec2<f32>\n{\n var mappedCoord: vec2<f32> = coord;\n mappedCoord -= gfu.uOutputFrame.xy;\n mappedCoord /= gfu.uInputSize.xy;\n return mappedCoord;\n}\n\nfn twist(coord: vec2<f32>) -> vec2<f32>\n{\n var twistedCoord: vec2<f32> = coord;\n let uRadius = twistUniforms.uTwist[0];\n let uAngle = twistUniforms.uTwist[1];\n let uOffset = twistUniforms.uOffset;\n\n twistedCoord -= uOffset;\n \n let dist = length(twistedCoord);\n\n if (dist < uRadius)\n {\n let ratioDist: f32 = (uRadius - dist) / uRadius;\n let angleMod: f32 = ratioDist * ratioDist * uAngle;\n let s: f32 = sin(angleMod);\n let c: f32 = cos(angleMod);\n twistedCoord = vec2<f32>(twistedCoord.x * c - twistedCoord.y * s, twistedCoord.x * s + twistedCoord.y * c);\n }\n\n twistedCoord += uOffset;\n return twistedCoord;\n}\n",__defProp32=Object.defineProperty,__defNormalProp32=(t,r,n)=>r in t?__defProp32(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField32=(t,r,n)=>(__defNormalProp32(t,"symbol"!=typeof r?r+"":r,n),n),_TwistFilter=class e extends Filter{constructor(t){t={...e.DEFAULT_OPTIONS,...t},super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source37,entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment37,name:"twist-filter"}),resources:{twistUniforms:{uTwist:{value:[t.radius??0,t.angle??0],type:"vec2<f32>"},uOffset:{value:t.offset,type:"vec2<f32>"}}},...t}),__publicField32(this,"uniforms"),this.uniforms=this.resources.twistUniforms.uniforms}get radius(){return this.uniforms.uTwist[0]}set radius(t){this.uniforms.uTwist[0]=t}get angle(){return this.uniforms.uTwist[1]}set angle(t){this.uniforms.uTwist[1]=t}get offset(){return this.uniforms.uOffset}set offset(t){this.uniforms.uOffset=t}get offsetX(){return this.offset.x}set offsetX(t){this.offset.x=t}get offsetY(){return this.offset.y}set offsetY(t){this.offset.y=t}};__publicField32(_TwistFilter,"DEFAULT_OPTIONS",{padding:20,radius:200,angle:4,offset:{x:0,y:0}}),init_globals(),init_globals();var fragment38="precision highp float;\nin vec2 vTextureCoord;\nout vec4 finalColor;\n\nuniform sampler2D uTexture;\nuniform float uStrength;\nuniform vec2 uCenter;\nuniform vec2 uRadii;\n\nuniform vec4 uInputSize;\n\nconst float MAX_KERNEL_SIZE = ${MAX_KERNEL_SIZE};\n\n// author: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/\nhighp float rand(vec2 co, float seed) {\n const highp float a = 12.9898, b = 78.233, c = 43758.5453;\n highp float dt = dot(co + seed, vec2(a, b)), sn = mod(dt, 3.14159);\n return fract(sin(sn) * c + seed);\n}\n\nvoid main() {\n float minGradient = uRadii[0] * 0.3;\n float innerRadius = (uRadii[0] + minGradient * 0.5) / uInputSize.x;\n\n float gradient = uRadii[1] * 0.3;\n float radius = (uRadii[1] - gradient * 0.5) / uInputSize.x;\n\n float countLimit = MAX_KERNEL_SIZE;\n\n vec2 dir = vec2(uCenter.xy / uInputSize.xy - vTextureCoord);\n float dist = length(vec2(dir.x, dir.y * uInputSize.y / uInputSize.x));\n\n float strength = uStrength;\n\n float delta = 0.0;\n float gap;\n if (dist < innerRadius) {\n delta = innerRadius - dist;\n gap = minGradient;\n } else if (radius >= 0.0 && dist > radius) { // radius < 0 means it's infinity\n delta = dist - radius;\n gap = gradient;\n }\n\n if (delta > 0.0) {\n float normalCount = gap / uInputSize.x;\n delta = (normalCount - delta) / normalCount;\n countLimit *= delta;\n strength *= delta;\n if (countLimit < 1.0)\n {\n gl_FragColor = texture(uTexture, vTextureCoord);\n return;\n }\n }\n\n // randomize the lookup values to hide the fixed number of samples\n float offset = rand(vTextureCoord, 0.0);\n\n float total = 0.0;\n vec4 color = vec4(0.0);\n\n dir *= strength;\n\n for (float t = 0.0; t < MAX_KERNEL_SIZE; t++) {\n float percent = (t + offset) / MAX_KERNEL_SIZE;\n float weight = 4.0 * (percent - percent * percent);\n vec2 p = vTextureCoord + dir * percent;\n vec4 sample = texture(uTexture, p);\n\n // switch to pre-multiplied alpha to correctly blur transparent images\n // sample.rgb *= sample.a;\n\n color += sample * weight;\n total += weight;\n\n if (t > countLimit){\n break;\n }\n }\n\n color /= total;\n // switch back from pre-multiplied alpha\n // color.rgb /= color.a + 0.00001;\n\n gl_FragColor = color;\n}\n";init_globals();var source38="struct ZoomBlurUniforms {\n uStrength:f32,\n uCenter:vec2<f32>,\n uRadii:vec2<f32>,\n};\n\nstruct GlobalFilterUniforms {\n uInputSize:vec4<f32>,\n uInputPixel:vec4<f32>,\n uInputClamp:vec4<f32>,\n uOutputFrame:vec4<f32>,\n uGlobalFrame:vec4<f32>,\n uOutputTexture:vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> gfu: GlobalFilterUniforms;\n\n@group(0) @binding(1) var uTexture: texture_2d<f32>; \n@group(0) @binding(2) var uSampler: sampler;\n@group(1) @binding(0) var<uniform> zoomBlurUniforms : ZoomBlurUniforms;\n\n@fragment\nfn mainFragment(\n @builtin(position) position: vec4<f32>,\n @location(0) uv : vec2<f32>\n) -> @location(0) vec4<f32> {\n let uStrength = zoomBlurUniforms.uStrength;\n let uCenter = zoomBlurUniforms.uCenter;\n let uRadii = zoomBlurUniforms.uRadii;\n\n let minGradient: f32 = uRadii[0] * 0.3;\n let innerRadius: f32 = (uRadii[0] + minGradient * 0.5) / gfu.uInputSize.x;\n\n let gradient: f32 = uRadii[1] * 0.3;\n let radius: f32 = (uRadii[1] - gradient * 0.5) / gfu.uInputSize.x;\n\n let MAX_KERNEL_SIZE: f32 = ${MAX_KERNEL_SIZE};\n\n var countLimit: f32 = MAX_KERNEL_SIZE;\n\n var dir: vec2<f32> = vec2<f32>(uCenter / gfu.uInputSize.xy - uv);\n let dist: f32 = length(vec2<f32>(dir.x, dir.y * gfu.uInputSize.y / gfu.uInputSize.x));\n\n var strength: f32 = uStrength;\n\n var delta: f32 = 0.0;\n var gap: f32;\n\n if (dist < innerRadius) {\n delta = innerRadius - dist;\n gap = minGradient;\n } else if (radius >= 0.0 && dist > radius) { // radius < 0 means it's infinity\n delta = dist - radius;\n gap = gradient;\n }\n\n var returnColorOnly: bool = false;\n\n if (delta > 0.0) {\n let normalCount: f32 = gap / gfu.uInputSize.x;\n delta = (normalCount - delta) / normalCount;\n countLimit *= delta;\n strength *= delta;\n \n if (countLimit < 1.0)\n {\n returnColorOnly = true;;\n }\n }\n\n // randomize the lookup values to hide the fixed number of samples\n let offset: f32 = rand(uv, 0.0);\n\n var total: f32 = 0.0;\n var color: vec4<f32> = vec4<f32>(0.);\n\n dir *= strength;\n\n for (var t = 0.0; t < MAX_KERNEL_SIZE; t += 1.0) {\n let percent: f32 = (t + offset) / MAX_KERNEL_SIZE;\n let weight: f32 = 4.0 * (percent - percent * percent);\n let p: vec2<f32> = uv + dir * percent;\n let sample: vec4<f32> = textureSample(uTexture, uSampler, p);\n \n if (t < countLimit)\n {\n color += sample * weight;\n total += weight;\n }\n }\n\n color /= total;\n\n return select(color, textureSample(uTexture, uSampler, uv), returnColorOnly);\n}\n\nfn modulo(x: f32, y: f32) -> f32\n{\n return x - y * floor(x/y);\n}\n\n// author: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/\nfn rand(co: vec2<f32>, seed: f32) -> f32\n{\n let a: f32 = 12.9898;\n let b: f32 = 78.233;\n let c: f32 = 43758.5453;\n let dt: f32 = dot(co + seed, vec2<f32>(a, b));\n let sn: f32 = modulo(dt, 3.14159);\n return fract(sin(sn) * c + seed);\n}",__defProp33=Object.defineProperty,__defNormalProp33=(t,r,n)=>r in t?__defProp33(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n,__publicField33=(t,r,n)=>(__defNormalProp33(t,"symbol"!=typeof r?r+"":r,n),n),_ZoomBlurFilter=class e extends Filter{constructor(t){let r=(t={...e.DEFAULT_OPTIONS,...t}).maxKernelSize??32;super({gpuProgram:GpuProgram.from({vertex:{source:wgslVertex,entryPoint:"mainVertex"},fragment:{source:source38.replace("${MAX_KERNEL_SIZE}",r.toFixed(1)),entryPoint:"mainFragment"}}),glProgram:GlProgram.from({vertex:vertex3,fragment:fragment38.replace("${MAX_KERNEL_SIZE}",r.toFixed(1)),name:"zoom-blur-filter"}),resources:{zoomBlurUniforms:{uStrength:{value:t.strength,type:"f32"},uCenter:{value:t.center,type:"vec2<f32>"},uRadii:{value:new Float32Array(2),type:"vec2<f32>"}}}}),__publicField33(this,"uniforms"),this.uniforms=this.resources.zoomBlurUniforms.uniforms,Object.assign(this,t)}get strength(){return this.uniforms.uStrength}set strength(t){this.uniforms.uStrength=t}get center(){return this.uniforms.uCenter}set center(t){Array.isArray(t)&&(t={x:t[0],y:t[1]}),this.uniforms.uCenter=t}get centerX(){return this.uniforms.uCenter.x}set centerX(t){this.uniforms.uCenter.x=t}get centerY(){return this.uniforms.uCenter.y}set centerY(t){this.uniforms.uCenter.y=t}get innerRadius(){return this.uniforms.uRadii[0]}set innerRadius(t){this.uniforms.uRadii[0]=t}get radius(){return this.uniforms.uRadii[1]}set radius(t){this.uniforms.uRadii[1]=t<0||t===1/0?-1:t}};__publicField33(_ZoomBlurFilter,"DEFAULT_OPTIONS",{strength:.1,center:{x:0,y:0},innerRadius:0,radius:-1,maxKernelSize:32});var import_jsx_runtime4=__toESM(require_jsx_runtime()),itemFillAlpha=.4,highlightAlpha=.4,pointRadius=10,pointMarkForItem=(t,r)=>{let[n,i]=t,a=highlightColorForType("element"),o=new Graphics;return o.beginFill(a,itemFillAlpha),o.drawCircle(n,i,pointRadius),o.endFill(),o},rectMarkForItem=(t,r,n)=>{let i,{left:a,top:o,width:s,height:l}=t;i="element"===n?colorForName(r):highlightColorForType("searchArea"===n?"searchArea":"element");let u="highlight"===n?highlightAlpha:itemFillAlpha,d=new Graphics;if(d.beginFill(i,u),d.lineStyle(1,i,1),d.drawRect(a,o,s,l),d.endFill(),d.filters=[new DropShadowFilter({blur:2,quality:3,alpha:.4,offset:{x:4,y:4},color:3355443})],!r)return[d];let c=new Text2(r,{fontSize:18,fill:0});return c.x=a,c.y=Math.max(o-22,0),[d,c]},Blackboard=t=>{let r=t.highlightElements||[],n=r.map(t=>t.id),i=t.highlightRect,a=t.highlightPoints,o=t.uiContext,{size:s,screenshotBase64:l}=o,u=s.width,d=s.height,c=(0,import_react5.useRef)(null),h=(0,import_react5.useMemo)(()=>new Application,[]),[f,p]=(0,import_react5.useState)(!1),m=(0,import_react5.useMemo)(()=>new Container,[]),g=(0,import_react5.useMemo)(()=>new Container,[]),[b,y]=(0,import_react5.useState)(null),_=(0,import_react5.useRef)(void 0),{markerVisible:v,setMarkerVisible:A,elementsVisible:w,setTextsVisible:x}=useBlackboardPreference();(0,import_react5.useEffect)(()=>(Promise.resolve((async()=>{if(!c.current||!u)return;await h.init({width:u,height:d,background:0xffffff});let t=c.current;c.current.appendChild(h.canvas);let{clientWidth:r}=c.current.parentElement,n=.6*window.innerHeight;if(u/d<=r/n){let r=n/d;t.style.width=`${Math.floor(u*r)}px`,t.style.height=`${Math.floor(d*r)}px`}h.stage.addChild(m),h.stage.addChild(g),p(!0)})()),()=>{import_console_browserify.default.log("will destroy");try{h.destroy(!0,{children:!0,texture:!0})}catch(t){import_console_browserify.default.warn("destroy failed",t)}}),[h,u,d]),(0,import_react5.useEffect)(()=>{if(f)return h.stage.eventMode="static",h.stage.hitArea=new Rectangle(0,0,u,d),h.stage.on("click",r=>{import_console_browserify.default.log("pixi click",r);let{x:n,y:i}=r.data.global;t.onCanvasClick?.([Math.round(n),Math.round(i)])}),()=>{h?.stage?.off("click")}},[f,t.onCanvasClick,u,d]),(0,import_react5.useEffect)(()=>{if(!f)return;let t=new Image;t.onload=()=>{if(!h.stage)return;let r=Texture.from(t),n=new Sprite(r);n.x=0,n.y=0,n.width=u,n.height=d,n.eventMode="passive",h.stage.addChildAt(n,0),_.current=n},t.onerror=t=>{import_console_browserify.default.error("load screenshot failed",t)},t.src=l},[h.stage,f,u,d]);let{highlightElementRects:E}=(0,import_react5.useMemo)(()=>{if(m.removeChildren(),g.removeChildren(),m.eventMode="passive",g.eventMode="passive",i){let[t]=rectMarkForItem(i,"Search Area","searchArea");m.addChild(t)}return r.length&&r.forEach(t=>{let{rect:r,content:n,id:i}=t,[a]=rectMarkForItem(r,n,"highlight");m.addChild(a)}),a?.length&&a.forEach(t=>{let r=pointMarkForItem(t,"highlightPoint");m.addChild(r)}),(0,import_extractor2.treeToList)(o.tree).forEach(t=>{let{rect:r,content:i,id:a}=t;if(n.includes(a)||b?.id===a)return;let[o]=rectMarkForItem(r,i,"element");g.addChild(o)}),g.visible=w,{highlightElementRects:[]}},[h,f,r,o.tree,b,i,a]),S=null;return 1===E.length?S=(0,import_jsx_runtime4.jsx)("div",{className:"bottom-tip",children:(0,import_jsx_runtime4.jsxs)("div",{className:"bottom-tip-item",children:["Element: ",JSON.stringify(E[0])]})}):E.length>1&&(S=(0,import_jsx_runtime4.jsx)("div",{className:"bottom-tip",children:(0,import_jsx_runtime4.jsxs)("div",{className:"bottom-tip-item",children:["Element: ",JSON.stringify(E)]})})),(0,import_jsx_runtime4.jsxs)("div",{className:"blackboard",children:[(0,import_jsx_runtime4.jsx)("div",{className:"blackboard-main-content",style:{width:"100%"},ref:c}),(0,import_jsx_runtime4.jsx)("div",{className:"blackboard-filter",style:{display:t.hideController?"none":"block"},children:(0,import_jsx_runtime4.jsx)("div",{className:"overlay-control",children:(0,import_jsx_runtime4.jsx)(import_antd2.Checkbox,{checked:w,onChange:t=>{x(t.target.checked),g.visible=t.target.checked},children:"Elements"})})}),(0,import_jsx_runtime4.jsx)("div",{className:"bottom-tip",style:{display:t.hideController?"none":"block"},children:S})]})},blackboard_default=Blackboard;init_globals();var globalTextureMap=new Map,loadTexture=async t=>{if(!globalTextureMap.has(t))return Assets.load(t).then(r=>{globalTextureMap.set(t,r)})},getTextureFromCache=t=>globalTextureMap.get(t),import_jsx_runtime5=__toESM(require_jsx_runtime()),canvasPaddingLeft=0,canvasPaddingTop=0,cubicBezier=(t,r,n,i,a)=>{let o=1-t;return r*o*o*o+3*n*t*o*o+3*i*t*t*o+a*t*t*t},cubicImage=t=>linear(t),cubicInsightElement=t=>cubicBezier(t,0,.5,.5,1),cubicMouse=t=>linear(t),linear=t=>t,sleep=t=>new Promise(r=>setTimeout(r,t)),ERROR_FRAME_CANCEL="frame cancel (this is an error on purpose)",frameKit=()=>{let t=!1;return{frame:r=>{if(t)throw Error(ERROR_FRAME_CANCEL);requestAnimationFrame(()=>{if(t)throw Error(ERROR_FRAME_CANCEL);r(performance.now())})},timeout:(r,n)=>{if(t)throw Error(ERROR_FRAME_CANCEL);setTimeout(()=>{if(t)throw Error(ERROR_FRAME_CANCEL);r()},n)},cancel:()=>{t=!0}}},singleElementFadeInDuration=80,LAYER_ORDER_IMG=0,LAYER_ORDER_INSIGHT=1,LAYER_ORDER_POINTER=2,LAYER_ORDER_SPINNING_POINTER=3,downloadReport=t=>{let r=new Blob([t],{type:"text/html"}),n=URL.createObjectURL(r),i=document.createElement("a");i.href=n,i.download="midscene_report.html",i.click()},RecordingSession=class{constructor(t){__publicField(this,"canvas"),__publicField(this,"mediaRecorder",null),__publicField(this,"chunks"),__publicField(this,"recording",!1),this.canvas=t,this.chunks=[]}start(){let t=new MediaRecorder(this.canvas.captureStream(60),{mimeType:"video/webm"});return t.ondataavailable=t=>{t.data.size>0&&this.chunks.push(t.data)},this.mediaRecorder=t,this.recording=!0,this.mediaRecorder.start()}stop(){this.recording&&this.mediaRecorder?(this.mediaRecorder.onstop=()=>{let t=new Blob(this.chunks,{type:"video/webm"}),r=URL.createObjectURL(t),n=document.createElement("a");n.href=r,n.download="midscene_replay.webm",n.click(),URL.revokeObjectURL(r)},this.mediaRecorder?.stop(),this.recording=!1,this.mediaRecorder=null):import_console_browserify.default.warn("not recording")}};function Player(t){let r,[n,i]=(0,import_react6.useState)(""),[a,o]=(0,import_react6.useState)(""),s=t?.replayScripts,l=t?.imageWidth||1920,u=t?.imageHeight||1080,d=t?.fitMode||"height",c=(0,import_react6.useRef)(s?.[0]?.img||null),h=(0,import_react6.useRef)(null),f=(0,import_react6.useMemo)(()=>new Application,[]),p=(0,import_react6.useRef)(null),m=(0,import_react6.useRef)(null),[g,b]=(0,import_react6.useState)(0),y=()=>{b(Date.now())},_=(0,import_react6.useMemo)(()=>new Container,[]),v=(0,import_react6.useMemo)(()=>{let t=new Container;return t.zIndex=LAYER_ORDER_INSIGHT,t},[]),A={left:0,top:0,width:l,pointerLeft:Math.round(l/2),pointerTop:Math.round(u/2)},[w,x]=(0,import_react6.useState)(-1),E=(0,import_react6.useRef)(!1);(0,import_react6.useEffect)(()=>(E.current=!1,()=>{E.current=!0}),[]);let S=(0,import_react6.useRef)({...A}),C=async()=>{let t=c.current;if(!t)return void import_console_browserify.default.warn("no image to update");getTextureFromCache(t)||(import_console_browserify.default.warn("image not loaded",t),await loadTexture(t));let r=getTextureFromCache(t);if(!r)throw Error("texture not found");let n=Sprite.from(r);if(!n)throw Error("sprite not found");let i="main-img",a=_.getChildByLabel(i);a&&_.removeChild(a),n.label=i,n.zIndex=LAYER_ORDER_IMG,n.width=l,n.height=u,_.addChild(n)},I=t=>{let r;m.current||(m.current=Sprite.from(mouseLoading),m.current.zIndex=LAYER_ORDER_SPINNING_POINTER,m.current.anchor.set(.5,.5),m.current.scale.set(.5),m.current.label="spinning-pointer"),m.current.x=p.current?.x||0,m.current.y=p.current?.y||0,_.addChild(m.current);let n=!1,i=a=>{if(n)return;r||(r=a);let o=(Math.sin((a-r)/500-Math.PI/2)+1)/2*Math.PI*2;m.current&&(m.current.rotation=o),t(i)};return t(i),()=>{m.current&&_.removeChild(m.current),n=!0}},T=async(t,r,n)=>{getTextureFromCache(t)||(import_console_browserify.default.warn("image not loaded",t),await loadTexture(t));let i=getTextureFromCache(t);if(!i)throw Error("texture not found");let a=Sprite.from(i),o=p.current?.x,s=p.current?.y;if("number"==typeof r&&(o=r),"number"==typeof n&&(s=n),void 0!==o&&void 0!==s){if(p.current){let t=_.getChildByLabel("pointer");t&&_.removeChild(t)}p.current=a,p.current.x=o,p.current.y=s,p.current.label="pointer",p.current.zIndex=LAYER_ORDER_POINTER,_.addChild(p.current)}else import_console_browserify.default.warn("invalid pointer position",r,n)},k=t=>{S.current=t;let r=Math.max(1,l/t.width);_.scale.set(r),_.x=Math.round(canvasPaddingLeft-t.left*r),_.y=Math.round(canvasPaddingTop-t.top*r);let n=_.getChildByLabel("pointer");n&&(n.scale.set(1/r),"number"==typeof t.pointerLeft&&"number"==typeof t.pointerTop&&(n.x=t.pointerLeft,n.y=t.pointerTop))},P=async(t,r,n)=>{let i={...S.current},a=i.left,o=i.top,s=i.pointerLeft,d=i.pointerTop,c=i.width/l,h=performance.now(),f="number"==typeof t.pointerLeft&&"number"==typeof t.pointerTop&&(t.pointerLeft!==s||t.pointerTop!==d),p=f?.375*r:0,m=p,g=r-p;await new Promise(i=>{let b=y=>{let _={...S.current},v=y-h;if(f)if(v<=p){let r=cubicMouse(Math.min(v/p,1));_.pointerLeft=s+(t.pointerLeft-s)*r,_.pointerTop=d+(t.pointerTop-d)*r}else _.pointerLeft=t.pointerLeft,_.pointerTop=t.pointerTop;if(v>m){let r=cubicImage(Math.min((v-m)/g,1)),n=c+(t.width/l-c)*r,i=l*n,s=u*n;_.width=i;let d=a+(t.left-a)*r,h=o+(t.top-o)*r,f=d+i-l,p=h+s-u;_.left=f>0?d+f:d,_.top=p>0?h+p:h}k(_),v<r?n(b):i()};n(b)})},R=(t,r,n,i=1)=>new Promise(a=>{let o=performance.now(),s=l=>{let u=l-o,d=Math.min(u/r,1);t.alpha=0===i?1-linear(d):linear(d),u<r?n(s):a()};n(s)}),O=async(t,r,n)=>R(t,r,n,0),M=async(t,r,n,i,a)=>{v.removeChildren();let o=[...t],s=o.length,l=0;await new Promise(t=>{let u=performance.now(),d=c=>{let h=c-u,f=Math.floor(cubicInsightElement(Math.min(h/i,1))*s);for(;l<f;){let t=Math.floor(Math.random()*o.length),r=o.splice(t,1)[0];if(r){let[t]=rectMarkForItem(r.rect,r.content,"element");t.alpha=0,v.addChild(t),l++,R(t,singleElementFadeInDuration,a)}}if(h<i)a(d);else{for(;o.length>0;){let t=Math.floor(Math.random()*o.length),r=o.splice(t,1)[0],[n]=rectMarkForItem(r.rect,r.content,"element");n.alpha=1,v.addChild(n)}if(n){let[t]=rectMarkForItem(n,"Search Area","searchArea");t.alpha=1,v.addChild(t)}r.map(t=>{let[r]=rectMarkForItem(t.rect,t.content||"","highlight");r.alpha=1,v.addChild(r)}),t()}};a(d)})},[j,N]=(0,import_react6.useState)(!1),B=(0,import_react6.useRef)(null);(0,import_react6.useEffect)(()=>(Promise.resolve((async()=>{if(await (async()=>{h.current&&s&&(await f.init({width:l,height:u,background:0xf4f4f4,autoDensity:!0,antialias:!0}),h.current&&(h.current.appendChild(f.canvas),_.x=0,_.y=0,f.stage.addChild(_),v.x=0,v.y=0,_.addChild(v)))})(),h.current&&l&&u){let t=l/u;h.current.style.setProperty("--canvas-aspect-ratio",t.toString()),h.current.setAttribute("data-fit-mode",d);let r=h.current.closest(".player-container");r&&r.setAttribute("data-fit-mode",d)}y()})()),()=>{try{f.destroy(!0,{children:!0,texture:!0})}catch(t){import_console_browserify.default.warn("destroy failed",t)}}),[l,u,d]),(0,import_react6.useEffect)(()=>{if(g)return(()=>{let t;return Promise.resolve((async()=>{if(!f)throw Error("app is not initialized");if(!s)throw Error("scripts is required");let{frame:r,cancel:n,timeout:a}=frameKit();t=n;let d=s.filter(t=>!!t.img).map(t=>t.img);await Promise.all([...d,mouseLoading,mousePointer].map(loadTexture)),v.removeChildren(),await T(mousePointer,l/2,u/2),await C(),await k({...A});let h=s.reduce((t,r)=>t+r.duration+(r.camera&&r.insightCameraDuration?r.insightCameraDuration:0),0),p=performance.now();x(0);let m=()=>{let t=Math.min((performance.now()-p)/h,1);if(x(t),t<1)return a(m,200)};for(let t in r(m),B.current&&B.current.start(),s){let n=s[t];if(i(n.title||""),o(n.subTitle||""),"sleep"===n.type)await sleep(n.duration);else if("insight"===n.type){if(!n.img)throw Error("img is required");c.current=n.img,await C();let t=n.context?.tree?(0,import_extractor3.treeToList)(n.context.tree):[],i=n.highlightElement?[n.highlightElement]:[];if(await M(t,i,n.searchArea,n.duration,r),n.camera){if(!n.insightCameraDuration)throw Error("insightCameraDuration is required");await P(n.camera,n.insightCameraDuration,r)}}else if("clear-insight"===n.type)await O(v,n.duration,r),v.removeChildren(),v.alpha=1;else if("img"===n.type)n.img&&n.img!==c.current&&(c.current=n.img,await C()),n.camera?await P(n.camera,n.duration,r):await sleep(n.duration);else if("pointer"===n.type){if(!n.img)throw Error("pointer img is required");await T(n.img)}else if("spinning-pointer"===n.type){let t=I(r);await sleep(n.duration),t()}}B.current&&(B.current.stop(),B.current=null,N(!1))})().catch(t=>{import_console_browserify.default.error("player error",t)})),()=>{t?.()}})()},[g]);let[L,D]=(0,import_react6.useState)(!1),U=Math.round(100*w),F=0===w?"none":"0.3s",z=1===w;(0,import_react6.useEffect)(()=>{if(z){let t=t=>{" "===t.key&&y()};return window.addEventListener("keydown",t),()=>{window.removeEventListener("keydown",t)}}},[z]);let G=()=>{};return w<1?r=(0,import_jsx_runtime5.jsx)(import_antd3.Spin,{indicator:(0,import_jsx_runtime5.jsx)(import_icons3.LoadingOutlined,{spin:!0,color:"#333"}),size:"default"}):L?(r=(0,import_jsx_runtime5.jsx)(import_antd3.Spin,{indicator:(0,import_jsx_runtime5.jsx)(import_icons3.CaretRightOutlined,{color:"#333"}),size:"default"}),G=()=>y()):r=(0,import_jsx_runtime5.jsx)(import_antd3.Spin,{indicator:(0,import_jsx_runtime5.jsx)(import_icons3.CaretRightOutlined,{color:"#333"}),size:"default"}),(0,import_jsx_runtime5.jsxs)("div",{className:"player-container",children:[(0,import_jsx_runtime5.jsx)("div",{className:"canvas-container",ref:h}),(0,import_jsx_runtime5.jsx)("div",{className:"player-timeline-wrapper",children:(0,import_jsx_runtime5.jsx)("div",{className:"player-timeline",children:(0,import_jsx_runtime5.jsx)("div",{className:"player-timeline-progress",style:{width:`${U}%`,transition:F}})})}),(0,import_jsx_runtime5.jsx)("div",{className:"player-tools-wrapper",children:(0,import_jsx_runtime5.jsx)("div",{className:"player-tools",children:(0,import_jsx_runtime5.jsxs)("div",{className:"player-control",children:[(0,import_jsx_runtime5.jsxs)("div",{className:"status-text",children:[(0,import_jsx_runtime5.jsx)("div",{className:"title",children:n}),(0,import_jsx_runtime5.jsx)(import_antd3.Tooltip,{title:a,children:(0,import_jsx_runtime5.jsx)("div",{className:"subtitle",children:a})})]}),j?null:(0,import_jsx_runtime5.jsx)("div",{className:"status-icon",onMouseEnter:()=>D(!0),onMouseLeave:()=>D(!1),onClick:G,children:r}),t?.reportFileContent?(0,import_jsx_runtime5.jsx)(import_antd3.Tooltip,{title:"Download Report",children:(0,import_jsx_runtime5.jsx)("div",{className:"status-icon",onMouseEnter:()=>D(!0),onMouseLeave:()=>D(!1),onClick:()=>downloadReport(t.reportFileContent),children:(0,import_jsx_runtime5.jsx)(import_icons3.DownloadOutlined,{color:"#333"})})}):null,(0,import_jsx_runtime5.jsx)(import_antd3.Tooltip,{title:j?"Generating...":"Export Video",children:(0,import_jsx_runtime5.jsx)("div",{className:"status-icon",onClick:j?void 0:()=>{B.current?import_console_browserify.default.warn("recorderSession exists"):f.canvas?(B.current=new RecordingSession(f.canvas),N(!0),y()):import_console_browserify.default.warn("canvas is not initialized")},style:{opacity:j?.5:1,cursor:j?"not-allowed":"pointer"},children:j?(0,import_jsx_runtime5.jsx)(import_antd3.Spin,{size:"default",percent:U}):(0,import_jsx_runtime5.jsx)(import_icons3.ExportOutlined,{})})})]})})})]})}init_globals();var import_jsx_runtime6=__toESM(require_jsx_runtime()),ShinyText=({text:t,disabled:r=!1,speed:n=5,className:i=""})=>{let a={"--animation-duration":`${n}s`};return(0,import_jsx_runtime6.jsx)("div",{className:`shiny-text ${r?"disabled":""} ${i}`,style:a,children:t})},shiny_text_default=ShinyText;init_globals();var import_antd4=__webpack_require__(1542),import_jsx_runtime7=__toESM(require_jsx_runtime()),errorMessageServerNotReady=(0,import_jsx_runtime7.jsxs)("span",{children:["Don't worry, just one more step to launch the playground server.",(0,import_jsx_runtime7.jsx)("br",{}),"Please run one of the commands under the midscene project directory:",(0,import_jsx_runtime7.jsx)("br",{}),"a. ",(0,import_jsx_runtime7.jsx)("strong",{children:"npx midscene-playground"}),(0,import_jsx_runtime7.jsx)("br",{}),"b. ",(0,import_jsx_runtime7.jsx)("strong",{children:"npx --yes @midscene/web"})]}),serverLaunchTip=(t=errorMessageServerNotReady)=>(0,import_jsx_runtime7.jsx)("div",{className:"server-tip",children:(0,import_jsx_runtime7.jsx)(import_antd4.Alert,{message:"Playground Server Not Ready",description:t,type:"warning"})}),emptyResultTip=(0,import_jsx_runtime7.jsx)("div",{className:"result-empty-tip",style:{textAlign:"center"},children:(0,import_jsx_runtime7.jsx)(shiny_text_default,{disabled:!0,text:"The result will be shown here"})}),trackingTip="limit popup to current tab",deepThinkTip="deep think",import_jsx_runtime8=__toESM(require_jsx_runtime()),PlaygroundResultView=({result:t,loading:r,serverValid:n,serviceMode:i,replayScriptsInfo:a,replayCounter:o,loadingProgressText:s,verticalMode:l=!1,notReadyMessage:u,fitMode:d})=>{let c="result-wrapper";l&&(c+=" vertical-mode-result"),a&&l&&(c+=" result-wrapper-compact");let h=emptyResultTip;return n||"Server"!==i?r?h=(0,import_jsx_runtime8.jsxs)("div",{className:"loading-container",children:[(0,import_jsx_runtime8.jsx)(import_antd5.Spin,{spinning:r,indicator:(0,import_jsx_runtime8.jsx)(import_icons4.LoadingOutlined,{spin:!0})}),(0,import_jsx_runtime8.jsx)("div",{className:"loading-progress-text loading-progress-text-progress",children:(0,import_jsx_runtime8.jsx)(shiny_text_default,{text:s,speed:3})})]}):a?h=(0,import_jsx_runtime8.jsx)(Player,{replayScripts:a.scripts,imageWidth:a.width,imageHeight:a.height,reportFileContent:("In-Browser-Extension"===i||"Server"===i)&&t?.reportHTML?t?.reportHTML:null,fitMode:d},o):t?.error?h=(0,import_jsx_runtime8.jsx)("pre",{children:t?.error}):void 0!==t?.result&&(h="string"==typeof t?.result?(0,import_jsx_runtime8.jsx)("pre",{children:t?.result}):(0,import_jsx_runtime8.jsx)("pre",{children:JSON.stringify(t?.result,null,2)})):h=serverLaunchTip(u),(0,import_jsx_runtime8.jsx)("div",{className:c,style:{height:"100%",display:"flex",flexDirection:"column",flex:"1 1 auto"},children:h})};init_globals();var import_env10=__toESM(require_env()),import_antd6=__webpack_require__(1542),import_react7=__webpack_require__(4194),import_jsx_runtime9=__toESM(require_jsx_runtime()),TITLE_TEXT={Server:"Server Status","In-Browser":"In-Browser"},SWITCH_BUTTON_TEXT={Server:"Switch to In-Browser Mode","In-Browser":"Switch to Server Mode"},ServiceModeControl=({serviceMode:t})=>{let{setServiceMode:r,config:n}=useEnvConfig(),i=useServerValid("Server"===t);(0,import_react7.useEffect)(()=>{(0,import_env10.overrideAIConfig)(n),"Server"===t&&overrideServerConfig(n)},[n,t]);let a="Server"===t&&(i?(0,import_jsx_runtime9.jsx)(import_antd6.Tooltip,{title:"Connected",children:(0,import_jsx_runtime9.jsx)("div",{className:"server-tip",children:iconForStatus("connected")})}):(0,import_jsx_runtime9.jsx)(import_antd6.Tooltip,{title:"Connection failed",children:(0,import_jsx_runtime9.jsx)("div",{className:"server-tip",children:iconForStatus("failed")})})),o=TITLE_TEXT[t];return(0,import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment,{children:[(0,import_jsx_runtime9.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"10px"},children:[(0,import_jsx_runtime9.jsx)("h3",{style:{whiteSpace:"nowrap",margin:0,flexShrink:0},children:o}),a,(0,import_jsx_runtime9.jsx)(EnvConfig,{showTooltipWhenEmpty:"Server"!==t})]}),(0,import_jsx_runtime9.jsx)("div",{className:"switch-btn-wrapper",children:(()=>{let n="Server"===t?"In-Browser":"Server",i=SWITCH_BUTTON_TEXT[t];return(0,import_jsx_runtime9.jsx)(import_antd6.Tooltip,{title:(0,import_jsx_runtime9.jsxs)("span",{children:["Server Mode: send the request through the server ",(0,import_jsx_runtime9.jsx)("br",{}),"In-Browser Mode: send the request through the browser fetch API (The AI service should support CORS in this case)"]}),children:(0,import_jsx_runtime9.jsx)(import_antd6.Button,{type:"link",onClick:t=>{t.preventDefault(),r(n)},children:i})})})()})]})};init_globals();var import_antd7=__webpack_require__(1542),playground_demo_ui_context_default={content:[{content:"Swag Labs",rect:{left:895,top:38,width:130,height:32,zoom:1},center:[960,54],page:{page:{_isDragging:!1,_timeoutSettings:{}},pageType:"puppeteer"},locator:"",id:"d6c5e2f100",attributes:{nodeType:"TEXT Node"},indexId:0},{content:"Username",rect:{left:814,top:154,width:292,height:40,zoom:1},center:[960,174],page:{page:{_isDragging:!1,_timeoutSettings:{}},pageType:"puppeteer"},locator:"[_midscene_retrieve_task_id='a9021f480e']",id:"a9021f480e",attributes:{class:".input_error.form_input",placeholder:"Username",type:"text","data-test":"username",id:"user-name",name:"user-name",autocorrect:"off",autocapitalize:"none",htmlTagName:"<input>",nodeType:"FORM_ITEM Node"},indexId:1},{content:"Password",rect:{left:814,top:209,width:292,height:40,zoom:1},center:[960,229],page:{page:{_isDragging:!1,_timeoutSettings:{}},pageType:"puppeteer"},locator:"[_midscene_retrieve_task_id='580f3b761d']",id:"580f3b761d",attributes:{class:".input_error.form_input",placeholder:"Password",type:"password","data-test":"password",id:"password",name:"password",autocorrect:"off",autocapitalize:"none",htmlTagName:"<input>",nodeType:"FORM_ITEM Node"},indexId:2},{content:"",rect:{left:814,top:253,width:292,height:45,zoom:1},center:[960,275],page:{page:{_isDragging:!1,_timeoutSettings:{}},pageType:"puppeteer"},locator:"[_midscene_retrieve_task_id='3e1faf0fd6']",id:"3e1faf0fd6",attributes:{class:".error-message-container",nodeType:"CONTAINER Node"},indexId:3},{content:"Login",rect:{left:814,top:303,width:292,height:49,zoom:1},center:[960,327],page:{page:{_isDragging:!1,_timeoutSettings:{}},pageType:"puppeteer"},locator:"[_midscene_retrieve_task_id='6db0b64062']",id:"6db0b64062",attributes:{type:"submit",class:".submit-button.btn_action","data-test":"login-button",id:"login-button",name:"login-button",value:"Login",htmlTagName:"<input>",nodeType:"FORM_ITEM Node"},indexId:4},{content:"Accepted usernames are:",rect:{left:570,top:435,width:221,height:21,zoom:1},center:[680,445],page:{page:{_isDragging:!1,_timeoutSettings:{}},pageType:"puppeteer"},locator:"",id:"5ca36a5942",attributes:{nodeType:"TEXT Node"},indexId:5},{content:"standard_user",rect:{left:570,top:479,width:109,height:19,zoom:1},center:[624,488],page:{page:{_isDragging:!1,_timeoutSettings:{}},pageType:"puppeteer"},locator:"",id:"fd2fe54174",attributes:{nodeType:"TEXT Node"},indexId:6},{content:"locked_out_user",rect:{left:570,top:503,width:126,height:19,zoom:1},center:[633,512],page:{page:{_isDragging:!1,_timeoutSettings:{}},pageType:"puppeteer"},locator:"",id:"403daee75b",attributes:{nodeType:"TEXT Node"},indexId:7},{content:"problem_user",rect:{left:570,top:527,width:101,height:19,zoom:1},center:[620,536],page:{page:{_isDragging:!1,_timeoutSettings:{}},pageType:"puppeteer"},locator:"",id:"2b34f1e161",attributes:{nodeType:"TEXT Node"},indexId:8},{content:"performance_glitch_user",rect:{left:570,top:551,width:193,height:19,zoom:1},center:[666,560],page:{page:{_isDragging:!1,_timeoutSettings:{}},pageType:"puppeteer"},locator:"",id:"6ae63a4d9e",attributes:{nodeType:"TEXT Node"},indexId:9},{content:"error_user",rect:{left:570,top:575,width:84,height:19,zoom:1},center:[612,584],page:{page:{_isDragging:!1,_timeoutSettings:{}},pageType:"puppeteer"},locator:"",id:"76030282f1",attributes:{nodeType:"TEXT Node"},indexId:10},{content:"visual_user",rect:{left:570,top:599,width:92,height:19,zoom:1},center:[616,608],page:{page:{_isDragging:!1,_timeoutSettings:{}},pageType:"puppeteer"},locator:"",id:"f34b057726",attributes:{nodeType:"TEXT Node"},indexId:11},{content:"Password for all users:",rect:{left:960,top:435,width:221,height:21,zoom:1},center:[1070,445],page:{page:{_isDragging:!1,_timeoutSettings:{}},pageType:"puppeteer"},locator:"",id:"e693f608cd",attributes:{nodeType:"TEXT Node"},indexId:12},{content:"secret_sauce",rect:{left:960,top:477,width:101,height:19,zoom:1},center:[1010,486],page:{page:{_isDragging:!1,_timeoutSettings:{}},pageType:"puppeteer"},locator:"",id:"cde9de9828",attributes:{nodeType:"TEXT Node"},indexId:13}],size:{width:1920,height:1080},screenshotBase64:"data:image/png;base64,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8xecP25c2/qkSycuun/hzOuuG3nIiEcWLlz56xfbBgYAAIBPMwEagO3AQ4sW9evb9/h3q2tdXd2EsWN/8eCDlbeXfPOKsy+84OBhww4YMmTrb108YUJ9fd3Io46ccMklZ5xy6ueHD6+s9+nd1Kd3U9thu/bdpbFHQ1EUpVJp3uzZzzz/3NAv/uV5Ey+dMHbsgP79t23gqqqqAf37V1VVVd7W19f1/9znKq//dKedpl151Xev/96Bo7647De/mTJpUmW9saHhntvn/tfLr3xp9PGTp0z5m+OOG3/m2MpHN98255Irrjjh6GMuu+jCmbfOOXz06AcffnjbBgMAAIBPki04ANgObNq0afYP5559+uk/vvvuoihOPOaYt9ata9vxefkrLxdFsf7tt2u6dNn6W2vWvrnnwD0+22/Xp5Y8PeywUa2trR9+leqqqjETxv/n88/X1NQseeaZR375y6OOOOKaG25o359lwzvvbNmyZff+/ZcuW3b131+3Q8+epVKptbX1C8MPbm1tnXvXneVyefkrL9/xk5+cfPzxN82eVRTFaytWvPXWuqIofnD77Xf/9KftOw8AAADkCNAAbB9u/dGPLvzyOQcNPeDRxY+PGzPmlttu27Jly4d/ZcYPbimXSzdMndqvb99Fjz9+2ZWTX1q+/EOO39zcvN/gwdOnTOnevfuGDe/s1NT06muvtffPUbyxZs3Y888//eSTr7rs8tdXrZo1d26lMg8a+Bc79Oz5DzfNbDtyS3Pze767+Mkn230eAAAAyBGgAdg+rFq9+q5/vHfcmDFda2t3auoz9647P/IrfZqarp0x4+rrruvT1HTjtGu+dtFXzrrwgqIoVq5evc+gQZVjamtrBw0ceO+CBZXjr7zssr867rjnli6tbC29zdO+tW7dpk2b+u6888pVqyp7QBel3z29cIfGxueWvnD6+HO6VFePOvTQ22fe/PN/+edfL1u29MVlL7z44hEnjK4cVl9XX1fX9b3n/Yh7uAEAAODTxR7QAGw3Zt465/BRo75+8cVz75y3bv36tvVyuVwul4uiKJXL5XK59G7qnTxx4pRJk+rr6tesXbvmzbUtLS2V9V88+OCIgw46eNiwno2NE8+/4E+6daus79q3b9farpUzHHX4EYcceFDbJUqlUrlcLhWl37149xK/z8aNGx9+7LFxY8bs0Nh44P77/+2J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QoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoCE6ZwSAAAInUlEQVQGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIEKABgAAAAAgQoAGAAAAACBCgAYAAAAAIOJ/AFTldxexlFiCAAAAAElFTkSuQmCC",screenshotBase64WithElementMarker:"data:image/png;base64,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vn9Zpk27K62tozJ7ztxMn/5g9t9vdGruvufebGqvPQen5nOf/1K+9e2L06mpqTE77NAv+++3X0495eTstNNOebVd8J9fy/cvuSwvpl+/fvnhD76fTgfsv1923nmnPPXUghz+pqNyyCFvSEPXrrlj6rQ899zz+dAH359vf+fivJj9998v69evz2lnvCvDhg5J//79M/ePf8xTTy1IfX19vvPtr6d//x2yse2375NzPvyhfO0b38qnJ3w2l1z2g4wZ84YsXbI00+68MytWrMzee++V17/+oAAAALDtqA8AAADbjPr6+vznBV/Orrvskttu+02m3XlX7pg6LTU77NAvJ580Pp/8xL+nqakxmxq178jMn/9kRreOysZGj25NTV1dkZEjhmdTp/3TKVm3bl2+9/3LMvPhWZn58Kz06NEjb37TEfnSFz+bL37pq7n7nnuzqeOPPy5fvfCirF69JnvvtWcqlUqq1WqWr1iRRx+dlwcffCg/nXh1fnLl5Rk6dEheTU8//UyefvqZvJiVq1ZnY926dcvEn/w4Hz7n3Myc+XBuvPGm1AwevEc+8R8fT+uoUfn2dy7Oixm8x+4596Mfzoc/8i+597778/Cs2amrKzJy5Ii8591n5vUHH5QX8oEPvDfb990+3734kjz11IL87Gc/T0337t0zfvwJ+cynPpGGhoYAAACw7ags3rC6GgAAALZJq1atyh//9EgG7rxT+vXrl83tySf/kuUrVmTI3nunrq7I/+RTn/lsfvazn+ezEz6dU045ORtbt25dzj3v47nttt/kiMP/IRd/95vZWqxZsyZ//OMj2WWXgenTp3derjVr1uZPf/pTXve616W5uWdeio6Ojvz1r4uyYMGC9OnTJ7vuukuKoggAAADbnvoAAACwzerevXtGt47KlrLLLgPzUt1yy22pOfbYo7OphoaGfOB9Z+W2236TeY89lq1JU1NTRo0amVeqqakx++47Mi9HURQZMKB/BgzoHwAAALZtRQAAAGArtF2vXqmZPWduXsjDD89KzfB99gkAAADwX+oDAAAAW6Gjj/7HfOe738v73n92xh1zVIYP3yev221Q5sz9Y+6774Hc/pvfpq6uLm95y7EBAAAA/kt9AAAAYCv0kQ9/MGvWrMlPJ/4sP7v6mvzs6muysZ49e+Rb3/ha3vCGgwMAAAD8l/oAAADAVqhSqeTf/+1f84EPvDd3/GFqnn7mmSxduiyDBu2avffeK4P32CONjQ0BAAAA/j/1AQAAgK1YS3Nzxo07OgAAAMD/rggAAAAAAAAApVAEAAAAAAAAgFIoAgAAAAAAAEApFAEAAAAAAACgFIoAAAAAAAAAUApFAAAAAAAAACiFIgAAAAAAAACUQhEAAAAAAAAASqEIAAAAAAAAAKVQBAAAAAAAAIBSKAIAAAAAAABAKRQBAAAAAAAAoBSKAAAAAAAAAFAKRQAAAAAAAAAohSIAAAAAAAAAlEIRAAAAAAAAAEqhCAAAAAAAAAClUAQAAAAAAACAUigCAAAAAAAAQCkUAQAAAAAAAKAUigAAAAAAAABQCkUAAAAAAAAAKIUiAAAAAAAAAJRCEQAAAAAAAABKoQgAAAAAAAAApVAEAAAAAAAAgFIoAgAAAAAAAEApFAEAAAAAAACgFIoAAAAAAAAAUApFAAAAAAAAACiFIgAAAAAAAACUQhEAAAAAAAAASqEIAAAAAAAAAKVQBAAAAAAAAIBSKAIAAAAAAABAKRQBAAAAAAAAoBSKAAAAAAAAAFAKRQAAAAAAAAAohSIAAAAAAAAAlEJ9AAC2pPaOpK092dCRakdHAAAAyqhSFEl9kXStS+qKAABsKfUBANhS1qxPZUNHGhsb06WpS+rq6gIAAFBG7e3tWb9+fdauXptqfZE0dQkAwJZQHwCALWFVW7rU1adHr+YAAACUXV1dXerq6tLY2JiVq1Zl/aq2pHvXAABsbkUAADa3NevTpa4+Pbp3DwAAwLamR/fu6VJXn6xZHwCAza0IAMDm1N6RyoaO9OjePQAAANuqHt27p7KhI2nvCADA5lQEAGBzamtPY2NjAAAAtnWNjY1JW3sAADanIgAAm9OGjnTp0iUAAADbui5duiQbOgIAsDkVAQDYjKodHamrqwsAAMC2rq6uLtWOjgAAbE5FAAAAAAAAACiFIgAAAAAAAACUQhEAAAAAAAAASqEIAAAAAAAAAKVQBAAAAAAAAIBSKAIAAAAAAABAKRQBAAAAAAAAoBSKAAAAAAAAAFAKRQAAAAAAAAAohSIAAAAAAAAAlEIRAAAAAAAAAEqhCAAAAAAAAAClUAQAAAAAAACAUigCAAAAAAAAQCkUAQAAAAAAAKAUigAAAAAAAABQCkUAAAAAAAAAKIUiAAAAAAAAAJRCEQAAAAAAAABKoQgAAAAAAAAApVAEAAAAAAAAgFIoAgAAAAAAAEApFAEAAAAAAACgFIoAAAAAAAAAUApFAAAAAAAAACiFIgAAAAAAAACUQhEAAAAAAAAASqEIAAAAAAAAAKVQBAAAAAAAAIBSKAIAAAAAAABAKRQBAAAAAAAAoBSKAAAAAAAAAFAKRQAAAAAAAAAohfoAAABsTSqVALymVKsBAADYWtQHAABga1OtBuA1oVIJAADA1qQIAAAAAAAAAKVQBAAAAAAAAIBSKAIAAAAAAABAKRQBAAAAAAAAoBSKAAAAAAAAAFAKRQAAAAAAAAAohSIAAAAAAAAAlEIRAAAAAAAAAEqhCAAAAAAAAAClUAQAAAAAAACAUigCAAAAAAAAQCkUAQAAAAAAAKAUigAAAAAAAABQCkUAAAAAAAAAKIUiAAAAAAAAAJRCfQAAADaXSiUAAAAAbDlFAAAAAAAAACiFIgAAAFtaS0uqjz2WjB2bl2L9+vX55je/meXLl2dT3/ve9/L0008HAAAAgKQIAADAltTSkup116Wy2255qarVap566qm0t7dnUwsXLsy6desCAAAAQFIfAACALWXs2GTSpFQCAAAAwOZQHwAAgC1l8uTk619PJk1KJk/Oq23x4sW59tprs2DBguywww45+OCDM2rUqHS66667cv/99+f555/PLrvskje96U0ZOHBgaiZOnJgRI0Zk7ty5mT17ds4777zccMMNGTFiRB566KE88sgj6dmzZ4444oiMHDkyne6+++5MnTo1K1asyIABA3LMMcdk4MCB6ejoyEUXXZSjjjoqt912W55//vnsvvvuOfnkk3PHHXdk+vTpqVQq2X///XPEEUek07x58/L73/8+Tz31VPr27ZuDDjooo0ePDgAAAMBLUR8AAIAtZdCgZP78ZOzYbA7XX399+vXrl3e+851ZsGBBLr/88uy+++5pbm7OnXfemXvuuSennnpqWlpaMmPGjFx22WX5yEc+kt69e2fx4sWZNGlSxowZk3e9611pamrK4sWLc91112X8+PF561vfmvvvvz8TJ07MwIED07t378yePTu//vWv8573vCc77rhj7r777lx22WX59Kc/nZpFixbl9ttvzzve8Y5s2LAhEydOzIUXXpghQ4bknHPOycKFC/PjH/84AwYMyLBhw/KXv/wlEydOzIknnpg99tgj8+bNyzXXXJOuXbtm+PDhAQAAAPjfFAEAANhS5s/P5lStVvPss89m8eLFGTRoUD75yU+mR48eqbnrrrtyxBFHpLm5OdVqNSNHjswOO+yQWbNmpdOQIUMyduzYDBw4MEVRpGafffbJkCFD0tjYmDe84Q3p0aNHnnzyydQMGDAgZ599dnbcccesWLEiQ4YMSVtbWxYuXJhORxxxRHr37p1+/fpl9OjRWb16dY477rh069Yte+yxRwYPHpzHH388NdOnT88+++yTXXfdNevXr88uu+yS1tbWPPDAAwEAAAB4KeoDAACwlSuKIkVRZMOGDdlYtVrNhg0b0qVLl9ScfPLJue222/KDH/wgGzZsSGtra4488sjU/PWvf80vf/nLtLS0ZGNtbW3p1L9//2xqhx12SKdKpZK+fftm5cqVqalUKvnFL36RZcuWpaWlJZVKJTVr1qxJp759+6bT9ttvn549e6axsTGdtt9++yxbtiw1Tz/9dB577LE88cQT2VivXr0CAAAA8FLUBwAAYCtXX1+fAQMGZOHChenbt286Pffcc6lUKunfv386OjqyZs2avOUtb0lRFHnuuedy2WWXpW/fvjnwwAPTt2/fHH/88dlzzz3Tqb29PZVKJZ2KosimKpVKXsztt9+eXr165X3ve19q1q5dmwkTJmRjRVFkY5VKJS+mX79+2XXXXXPUUUelU0dHRwAAAABeqiIAAACvASNGjMgtt9ySRYsWpWbVqlWZNGlShg4dmrq6ulQqlVx66aWZOnVqarbbbrt069Yt7e3tqRk1alRuueWWrFq1KjWPP/54JkyYkOeffz6v1Pr167N+/fpUq9V0dHTkxhtvTKVSySs1YsSI3HfffXnqqadSs3z58lxwwQWZPn16AAAAAF6K+gAAALwGvPGNb8yGDRvy3e9+Nx0dHeno6Mjw4cNz4oknpqZSqeS0007LxIkTM3ny5HR0dGTXXXdNa2trag4//PCsXbs2F1xwQerr69PR0ZG3ve1t6du3b16pN7/5zbn88svzuc99Lh0dHdl///3Tv3//vFJ77LFHxo0blx//+MepVqtZvXp1Dj300IwePToAAAAAL0V9AAAAXiPe9KY35U1velOWLVuWnj17piiKbGyXXXbJxz/+8axcuTL19fVpbGxMp0qlknHjxuXoo4/OihUr0tLSko198IMfzKY++MEPZlPvfe97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3LuXoyeO4xZcsSKB5ctzN0d+/pl8m437VbFCBZ576mkSkhLZtW8fQYGB+JYqxelz50jPyKBW9er4+fpyN7du3ebnX07g5elFo/r1+D0XL18m6eZN7kdxb2/atmlDGb/S7D6wn8tXr9KkUSNu3brNz7+cwM3L04snW7agauXKnDl3ngOHD5GXn8+dqlSqROcXXsBms3PyzBl27d+H0+nExTAMmjdpwt3cSEgg5upVCioXEMATjzfH38+Pn45GceLUKZxOJ3fzWMNGWCxmjhw7hsPhQET+2MUjUZisnoiIiIg8LKYUW44TERERkYfEmZ5LjaZNkP+vj5a8T6cOHVj+yUpCQkMRERH5b1azWjVK+/nR65VX6PbSy1y4dImW7doiIiL/08UjUZisnoiIiIg8LBZERERERERERP4N40aMpFOHDrjt3r8fERERERER+c+wICIiIiJ/uQvRFzlwuDRXrsYiIiLy3+7ipWgOHjmMS0xsLPOXLEZERERERET+MyyIiIiIyF9uwdKlLFi6FBERkcLg3Q8+4N0PPkBERERERET+8wxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERET+cmX8/WncoAEPk4eHB61btMBsNiMiIv+ddm/Z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QdGiRek/YgRff/sNNrudkLlzCZ0ylZBx40lNS2PuwoWMGjyEe3X5yhWGjBnD/BkzCBk3nhsJCcyYN4/+vXvj9s6iRaz+cAWXjh3n1u3bTJkzm0cbNsDthbZt+fSfy3Dr3qkTZ86d48mOL+DidDrp3r8fq5Yv59juPeTk5jJ+2jQWzpnDvcq32ZgZNp9Rg4cwa/LbnDh9irkL36NhvXq4ha9ZTYO6dTnw7XYsFgs5OTkMnzAep9OJS2JSEj0G9Gdp2LvMeXsKWdnZfLltK59Gfo5LKR8foo/+jFvixWhcqjZuRHpGBiIifxW73U58YgJ/JDklhT+Sk5vDvys5JYU/I3x1BGs3buBOdoeDO+Xk5pCTm8PvuZmczB9xOBwkp6byR+x2O8kpKfyR5JQURERERERE5OEzpdhynIiIiIg8JM70XGo0bcJ/mtlsxt+vNPGJCfwZFrOZ0n6liU9M4N9RtkwA8YkJ/J5yAQEkJCXhcDj4s/xLlyY1NRWb3U5Bn//rI557+mnutGrtWsZMnYKbYRiUslpJTk3l95jNZvz9ShOfmMDv8fP1JS09HbvdjoiIiIiI/P9dPBKFyeqJiIiIyMNiQURERORvwG63E5+YwJ9ls9uJT0zg3xWfmMAfuZGQwL8r6eZN7mbQW6MpWqQId7p1O4+CHA4Hyamp/BG73U58YgJ/JDklBREREREREREREflrWRARERGRv4Ws7GxERERERERERESkcDMQEREREREREREREREREZFCwUBERERERERERERERERERAoFAxERERERERERERERERERKRQMRERERERERERERERERESkUDAQEREREREREREREREREZFCwUBERERERERERERERERERAoFAxERERERERERERERERERKRQMRERERERERERERERERESkUDAQEREREREREREREREREZFCwUBERERERERERERERERERAoFAxEREZFCrE7t2rRu0YJ6jzzCw1Lc25tWzZvzoDVt3Bi/UqUQERERERERERERuVcGIiIiIoVYx7btGDloMJs/j2Rgnz48DFUqVWL9J5/yoC1fuJAmjR9FRERERERERERE5F5ZEBERESnE5i1ehMu7M2dRs1p15H/XuWNHalWvztyFCxEREREREREREZH/LhZERERE/gacODFhQv53zR9rwu28PEREREREREREROS/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2Wxw9PgJwldH4Fbaz4+lYe/SunlzihYtSv8RI/j622+4V6+/9hqjBg+hfNmynDh9im3ffUfDevXo9+abuFSrUoV506bzWKNGWMxmzkdH03/ECGKvxeHW+5XuTBw9ilJWH+KuX2f5Jyv5LDISlxfatuXTfy6joDPnzvFkxxcQEREREfm/7uKRKExWT0REREQeFlOKLceJiIiIyEPiTM+lRtMm/DfwL12a1NRUbHY7d+Pl6YVhmMjKzubP8vP1JS09Hbvdzt2ULFECu91Odk4OBQ3rP4BZkydzp8tXrtDs2WcoqGSJEthsdnJyc7gbT09PDJOJ7Jwc7lfsyVN4e3lxp0FvjWbTli24GYZBKauV5NRUfo+XpxfFPIqSkpbG7ynj709iUhIiIiIiIoXFxSNRmKyeiIiIiDwsFkRERETk/yfp5k3+SE5uDv+u5JQU/khGZiZ3E746grUbN3Anu8PBnTIyM/kjubm5/FkNW7fCxP+UlZ1NQQ6Hg+TUVP5ITm4OObk5/JHEpCRERERERERERETk3lkQERERkf/zbt++ze3bt/lPS01LQ0RERERERERERP7vMhARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgUDEREREREREREREREREREpFAxERERERERERERERERERKRQMBARERERERERERERERERkULBQERERERERERERERERERECgULIiIiIvJvqV2jBrm3bnH111+5m+Le3jRu0ACn08mps2dJS09HRERERERERERE5GGwICIiIiL/ljHD3+RK7FXmLlzI3fiXLs3IQYMp7edL2TIB1GnRHLvdjoiIiIiIiIiIiMiDZiAiIiIiD9WV2Fi6vt6Xrq+/Tmk/P3xLlUJERERERERERETkYTAQERERkb+E0+lERERERERERERE5GGyICIiIlKIbY1cy+TZs5g2YQKN6tXnl9OnmTJnNuejo3EJLF+edSs/4fbt28yYP4+eXbvR/tlnuBGfQLNnn8GluLc3oVND+McTT5Cfn893u3YxY9475OXn41aieAn+tWgxT7VqxZXYWN7/1wq27tjB/RjUty/dO3WmYmAgh48eZWbYfC7F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RERERERERAoFAxERERERERERERERERERKRQMRERERERERERERERERESkUDAQEREREREREREREREREZFCwUBERERERERERERERERERAoFAxERERERERERERERERERKRQMREREROSBKVq0KI8/9hitW7TAw8MDuX+B5cvTukULHn/sMYoWKcIfqVmtGkUsFh60IhYLrVu0oIjFgoiIiIiIiIiIyH8TAxERERF5IOo98ggXo47y7qzZTBk7FmvJksj9a1S/PiMHDWb5ewv51+Il/J4WTZtxYPsO3hw4iAfNarWyaVUEVqsVERERERERERGR/yYWREREROSB6NiuHTt27mTwmLeQP2/L9u1s2b6dl5/vwMRRo/g9p86e4cNPPmHLju38nt1bttDx1VfJzMpCRERERERERETk78CCiIiIiDwQ5cuWIyEpEXkwnE4nfyQzK4upoXP4PWX8/alTqzYmkwkREREREREREZG/CwsiIiIihdjWyLVMnj2LaRMm0KhefX45fZopc2ZzPjoat6DAQGZMmkTLps2IT0xk45bNvL9iBW5frV5DaT8/ItatxWIpwvD+/Snj70+dFs1JSEzkmX/8g5mTJlMuIACb3U6bJ/+BS5c+fYhPTMClVvXqhIwfT9PGj/LrtWt8vmED4asjcJs+YSLPPf00J8+cZv2XXxEaMpUaVasx6K3RbNqyhT1bt7Fh89e8OXAQu/ft45fTpxk5eDA79+5l+PhxuFhLliR0aghtWrfGYrGwa98+xk0LISMzE5dBfftiMpkoWyaALi++yG/xNwiPWM0XX3+Fm5+vL/OmTeeJxx8n7vp1tn3/He+vWIHT6cRtUN++dO/UmYqBgRw+epSZYfO5FBPDvSru7c17s+fwj1atyMvLIyMzE5fl4eGs/mI992L9J59QoVx5Ll+5wqC3RnPr1i0K2rQqggZ162Iymfhu4ybsDgdXYq/Sa/Bg3Px8fZk3bTpPPP44cdevs+3773h/xQqcTiduzR59lBGDBlE5KJivvtnG0o8+Iu76de5Fm9at6d+rN68NGojbgN59CA6qSEhoKC4mk4mpY8fRtk0bShQvzo979zBj/nzSMzJwCwoMZMakSbRs2oz4xEQ2btnM+ytW4PbV6jWU9vMjYt1aLJYiDO/fnzL+/tRp0ZyExEREREREREREROTvxTxx2pQZiIiIiDwst218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AFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAIAqlAAAAAAAAABQhRIAAAAAAAAAqlACAAAAAAAAQBVKAAAAAAAAAKhCCQAAAAAAAABVKAEAAAAAAACgCiUAAAAAAAAAVKEEAAAAAAAAgCqUAAAAAAAAAFCFEgAAAAAAAACqUAIAAAAAAABAFUoAAAAAAAAAqEIJAAAAAAAAAFUoAQAAAAAAAKAKJQAAAAAAAABUoQQAAAAAAACAKpQAAAAAAAAAUIUSAAAAAAAAAKpQAgAAAAAAAEAVSgAAAAAAAACoQgkAAAAAAAAAVSgBAAAAAAAAoAolAAAAAAAAAFShBAAAAAAAAP5ve3BAAgAAgAAo+j+6H6ECFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwoQEAAAAAAADgQgMAAAAAAADAhQYAAAAAAACACw0AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwoQEAAAAAAADgQgMAAAAAAADAhQYAAAAAAACACw0AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwoQEAAAAAAADgQgMAAAAAAADAhQYAAAAAAACACw0AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwoQEAAAAAAADgQgMAAAAAAADAhQYAAAAAAACACw0AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwoQEAAAAAAADgQgMAAAAAAADAhQYAAAAAAACACw0AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAAAcKEBAAAAAAAA4EIDAAAAAAAAwIUGAAAAAAAAgAsNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAAFxoAAAAAAAAALjQAAAAAAAAAHChAQAAAAAAAOBCAwAAAAAAAMCFBgAAAAAAAIALDQAAAAAAAAAXGgAAAAAAAAAuNAAAAAAAAABcaAAAAAAAAAC40AAAAAAAAABwYYkQHKd0AqxtAAAAAElFTkSuQmCC",url:"https://www.saucedemo.com/"},import_jsx_runtime10=__toESM(require_jsx_runtime()),ContextPreview=({uiContextPreview:t,setUiContextPreview:r,showContextPreview:n})=>n?(0,import_jsx_runtime10.jsxs)("div",{className:"form-part context-panel",children:[(0,import_jsx_runtime10.jsx)("h3",{children:"UI Context"}),t?(0,import_jsx_runtime10.jsx)(blackboard_default,{uiContext:t,hideController:!0}):(0,import_jsx_runtime10.jsxs)("div",{children:[iconForStatus("failed")," No UI context",(0,import_jsx_runtime10.jsx)(import_antd7.Button,{type:"link",onClick:t=>{t.preventDefault(),r(playground_demo_ui_context_default)},children:"Load Demo"}),(0,import_jsx_runtime10.jsx)("div",{children:"To load the UI context, you can either use the demo data above, or click the 'Send to Playground' in the report page."})]})]}):null;init_globals();var import_icons5=__webpack_require__(8405),import_antd10=__webpack_require__(1542),import_react9=__webpack_require__(4194);init_globals();var{create:create3}=esm_exports,HISTORY_KEY="midscene-prompt-history",getHistoryFromLocalStorage=()=>{let t=localStorage.getItem(HISTORY_KEY);return t?JSON.parse(t):[]},useHistoryStore=create3((t,r)=>({history:getHistoryFromLocalStorage(),clearHistory:()=>{t({history:[]}),localStorage.removeItem(HISTORY_KEY)},addHistory:n=>{let i=[n,...r().history.filter(t=>t.prompt!==n.prompt)];for(;i.length>10;)i.pop();t({history:i}),localStorage.setItem(HISTORY_KEY,JSON.stringify(i))}}));init_globals();var import_antd8=__webpack_require__(1542);init_globals();var React=__toESM(__webpack_require__(4194)),import_jsx_runtime11=__toESM(require_jsx_runtime()),SvgSetting=t=>(0,import_jsx_runtime11.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:27,height:27,fill:"none",viewBox:"0 0 27 27",...t,children:(0,import_jsx_runtime11.jsx)("path",{stroke:"#000",strokeLinecap:"round",strokeLinejoin:"round",strokeOpacity:.85,strokeWidth:1.333,d:"M19.527 8.855h-2M14.86 7.522v2.667M14.86 8.855H7.527M10.194 13.522H7.527M12.86 12.189v2.666M20.193 13.522H12.86M19.527 18.189h-2M14.86 16.855v2.667M14.86 18.189H7.527"})}),setting_default=SvgSetting,import_jsx_runtime12=__toESM(require_jsx_runtime()),ConfigSelector=({showDeepThinkOption:t=!1,enableTracking:r=!1})=>{let n=useEnvConfig(t=>t.forceSameTabNavigation),i=useEnvConfig(t=>t.setForceSameTabNavigation),a=useEnvConfig(t=>t.deepThink),o=useEnvConfig(t=>t.setDeepThink);if(!r&&!t)return null;let s=function(){let s=[];return r&&s.push({label:(0,import_jsx_runtime12.jsx)(import_antd8.Checkbox,{onChange:t=>i(t.target.checked),checked:n,children:trackingTip}),key:"track-config"}),t&&s.push({label:(0,import_jsx_runtime12.jsx)(import_antd8.Checkbox,{onChange:t=>{o(t.target.checked)},checked:a,children:deepThinkTip}),key:"deep-think-config"}),s}();return(0,import_jsx_runtime12.jsx)("div",{className:"selector-trigger",children:(0,import_jsx_runtime12.jsx)(import_antd8.Dropdown,{menu:{items:s},trigger:["click"],children:(0,import_jsx_runtime12.jsx)(setting_default,{width:24,height:24})})})};init_globals();var import_antd9=__webpack_require__(1542),import_react8=__webpack_require__(4194);init_globals();var React2=__toESM(__webpack_require__(4194)),import_jsx_runtime13=__toESM(require_jsx_runtime()),SvgClose=t=>(0,import_jsx_runtime13.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:18,height:16,fill:"none",viewBox:"0 0 18 16",...t,children:(0,import_jsx_runtime13.jsx)("path",{stroke:"#333",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.333,d:"m3.124 2.667 11.162 10.666M3.124 13.333 14.286 2.667"})}),close_default=SvgClose;init_globals();var React3=__toESM(__webpack_require__(4194)),import_jsx_runtime14=__toESM(require_jsx_runtime()),SvgHistory=t=>(0,import_jsx_runtime14.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:25,height:25,fill:"none",viewBox:"0 0 25 25",...t,children:[(0,import_jsx_runtime14.jsx)("path",{stroke:"#000",strokeLinecap:"round",strokeLinejoin:"round",strokeOpacity:.85,strokeWidth:1.33,d:"M6.63 9.021c-2.862 6.126 2.197 10.501 6.063 10.501a7 7 0 1 0-6.063-10.5Z"}),(0,import_jsx_runtime14.jsx)("path",{stroke:"#000",strokeLinecap:"round",strokeLinejoin:"round",strokeOpacity:.85,strokeWidth:1.33,d:"M12.695 8.322v4.203l2.967 2.968"})]}),history_default=SvgHistory;init_globals();var React4=__toESM(__webpack_require__(4194)),import_jsx_runtime15=__toESM(require_jsx_runtime()),SvgMagnifyingGlass=t=>(0,import_jsx_runtime15.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:19,height:19,fill:"none",viewBox:"0 0 19 19",...t,children:[(0,import_jsx_runtime15.jsxs)("g",{stroke:"#000",strokeLinejoin:"round",strokeOpacity:.65,strokeWidth:1.5,clipPath:"url(#magnifying-glass_svg__a)",children:[(0,import_jsx_runtime15.jsx)("path",{d:"M8.397 14.29a6.375 6.375 0 1 0 0-12.75 6.375 6.375 0 0 0 0 12.75Z"}),(0,import_jsx_runtime15.jsx)("path",{strokeLinecap:"round",d:"M10.518 5.42a2.99 2.99 0 0 0-2.12-.88 2.99 2.99 0 0 0-2.122.88M12.98 12.499l3.182 3.182"})]}),(0,import_jsx_runtime15.jsx)("defs",{children:(0,import_jsx_runtime15.jsx)("clipPath",{id:"magnifying-glass_svg__a",children:(0,import_jsx_runtime15.jsx)("path",{fill:"#fff",d:"M.522.04h18v18h-18z"})})})]}),magnifying_glass_default=SvgMagnifyingGlass,import_jsx_runtime16=__toESM(require_jsx_runtime()),{Text:Text3}=import_antd9.Typography,HistorySelector=({onSelect:t})=>{let[r,n]=(0,import_react8.useState)(!1),[i,a]=(0,import_react8.useState)(""),o=useHistoryStore(t=>t.history),s=useHistoryStore(t=>t.clearHistory),l=(0,import_react8.useMemo)(()=>{let t=Date.now(),r=t-6048e5,n=t-31536e6,a=o.filter(t=>t.prompt.toLowerCase().includes(i.toLowerCase()));return{recent7Days:a.filter(t=>t.timestamp>=r),recent1Year:a.filter(t=>t.timestamp<r&&t.timestamp>=n),older:a.filter(t=>t.timestamp<n)}},[o,i]),u=(r,i)=>0===i.length?null:(0,import_jsx_runtime16.jsxs)("div",{className:"history-group",children:[(0,import_jsx_runtime16.jsx)("div",{className:"history-group-title",children:r}),i.map((r,i)=>(0,import_jsx_runtime16.jsx)("div",{className:"history-item",onClick:()=>(r=>{t(r),n(!1)})(r),children:r.prompt},`${r.timestamp}-${i}`))]},r);return(0,import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment,{children:[(0,import_jsx_runtime16.jsx)("div",{className:"selector-trigger",onClick:()=>n(!0),children:(0,import_jsx_runtime16.jsx)(history_default,{width:24,height:24})}),(0,import_jsx_runtime16.jsx)(import_antd9.Modal,{open:r,onCancel:()=>n(!1),footer:null,width:"100%",closable:!1,centered:!1,transitionName:"",maskTransitionName:"",style:{margin:0,padding:0,maxWidth:"none",top:"auto",bottom:0},styles:{wrapper:{alignItems:"flex-end",justifyContent:"center",paddingBottom:0,display:"flex"},body:{height:"70vh",padding:0,margin:0},content:{height:"70vh",borderRadius:"12px 12px 0 0",margin:0,padding:0,marginBottom:0,position:"fixed",bottom:0,left:0,right:0}},maskClosable:!0,destroyOnClose:!0,children:(0,import_jsx_runtime16.jsxs)("div",{className:"history-modal-container",children:[(0,import_jsx_runtime16.jsxs)("div",{className:"history-modal-header",children:[(0,import_jsx_runtime16.jsxs)(Text3,{strong:!0,style:{fontSize:"16px"},children:["History (",o.length,")"]}),(0,import_jsx_runtime16.jsx)(import_antd9.Button,{size:"small",type:"text",icon:(0,import_jsx_runtime16.jsx)(close_default,{width:16,height:16}),onClick:()=>n(!1),className:"close-button"})]}),(0,import_jsx_runtime16.jsx)("div",{className:"history-search-section",children:(0,import_jsx_runtime16.jsxs)("div",{className:"search-input-wrapper",children:[(0,import_jsx_runtime16.jsx)(import_antd9.Input,{placeholder:"Search",value:i,onChange:t=>a(t.target.value),prefix:(0,import_jsx_runtime16.jsx)(magnifying_glass_default,{width:18,height:18}),className:"search-input",allowClear:!0}),(0,import_jsx_runtime16.jsx)(import_antd9.Button,{type:"link",onClick:()=>{s(),a(""),n(!1)},className:"clear-button",disabled:0===o.length,children:"Clear"})]})}),(0,import_jsx_runtime16.jsx)("div",{className:"history-content",children:0===o.length?(0,import_jsx_runtime16.jsx)("div",{className:"no-results",children:(0,import_jsx_runtime16.jsx)(Text3,{type:"secondary",children:"No history record"})}):(0,import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment,{children:[u("Last 7 days",l.recent7Days),u("Last 1 year",l.recent1Year),u("Earlier",l.older),i&&0===l.recent7Days.length&&0===l.recent1Year.length&&0===l.older.length&&(0,import_jsx_runtime16.jsx)("div",{className:"no-results",children:(0,import_jsx_runtime16.jsx)(Text3,{type:"secondary",children:"No matching history record"})})]})})]})})]})},import_jsx_runtime17=__toESM(require_jsx_runtime()),{TextArea:TextArea}=import_antd10.Input,PromptInput=({runButtonEnabled:t,form:r,serviceMode:n,selectedType:i,dryMode:a,stoppable:o,loading:s,onRun:l,onStop:u,clearPromptAfterRun:d=!0})=>{let[c,h]=(0,import_react9.useState)(!1),[f,p]=(0,import_react9.useState)(""),m=getPlaceholderForType(i),g=(0,import_react9.useRef)(null),b=useHistoryStore(t=>t.history),y=useHistoryStore(t=>t.addHistory),_=b[0];(0,import_react9.useEffect)(()=>{_?(r.setFieldsValue({type:_.type||"aiAction",prompt:_.prompt||""}),p(_.prompt||"")):(r.setFieldsValue({type:"aiAction",prompt:""}),p(""))},[]);let v=(0,import_react9.useCallback)(t=>{r.setFieldsValue({prompt:t.prompt,type:t.type}),p(t.prompt)},[r]),A=(0,import_react9.useCallback)(t=>{let n=t.target.value;p(n),r.setFieldValue("prompt",n)},[r]),w=t&&f.trim().length>0,x=(0,import_react9.useCallback)(()=>{let t=r.getFieldsValue();t.prompt&&y({type:t.type,prompt:t.prompt,timestamp:Date.now()}),l(),d&&(p(""),r.setFieldValue("prompt",""))},[r,y,l]),E=(0,import_react9.useCallback)(t=>{"Enter"===t.key&&t.metaKey&&w?(x(),t.preventDefault(),t.stopPropagation()):"Enter"===t.key&&setTimeout(()=>{if(g.current){let t=g.current.resizableTextArea.textArea,r=t.selectionStart,n=t.value.lastIndexOf("\n");(-1===n||r>n)&&(t.scrollTop=t.scrollHeight)}},0)},[x,w]),S=(0,import_react9.useCallback)(()=>{h(!0)},[]),C=(0,import_react9.useCallback)(()=>{h(!1)},[]),I=(0,import_react9.useCallback)(()=>{let t=t=>(0,import_jsx_runtime17.jsx)(import_antd10.Button,{type:"primary",icon:(0,import_jsx_runtime17.jsx)(import_icons5.SendOutlined,{}),style:{borderRadius:20,zIndex:999},onClick:x,disabled:!w,loading:s,children:t});return a?"aiAction"===i?(0,import_jsx_runtime17.jsx)(import_antd10.Tooltip,{title:"Start executing until some interaction actions need to be performed. You can see the process of planning and locating.",children:t("Dry Run")}):t("Run"):o?(0,import_jsx_runtime17.jsx)(import_antd10.Button,{icon:(0,import_jsx_runtime17.jsx)(import_icons5.BorderOutlined,{}),onClick:u,style:{borderRadius:20,zIndex:999},children:"Stop"}):t("Run")},[a,s,x,u,w,i,o]);return(0,import_jsx_runtime17.jsxs)("div",{className:"prompt-input-wrapper",children:[(0,import_jsx_runtime17.jsxs)(import_antd10.Space,{className:"mode-radio-group-wrapper",children:[(0,import_jsx_runtime17.jsx)(import_antd10.Form.Item,{name:"type",style:{margin:0},children:(0,import_jsx_runtime17.jsxs)(import_antd10.Radio.Group,{buttonStyle:"solid",disabled:!t,className:"mode-radio-group",children:[(0,import_jsx_runtime17.jsx)(import_antd10.Tooltip,{title:"Auto Planning: plan the steps and execute",children:(0,import_jsx_runtime17.jsx)(import_antd10.Radio.Button,{value:"aiAction",children:actionNameForType("aiAction")})}),(0,import_jsx_runtime17.jsx)(import_antd10.Tooltip,{title:"Extract data directly from the UI",children:(0,import_jsx_runtime17.jsx)(import_antd10.Radio.Button,{value:"aiQuery",children:actionNameForType("aiQuery")})}),(0,import_jsx_runtime17.jsx)(import_antd10.Tooltip,{title:"Understand the UI and determine if the assertion is true",children:(0,import_jsx_runtime17.jsx)(import_antd10.Radio.Button,{value:"aiAssert",children:actionNameForType("aiAssert")})}),(0,import_jsx_runtime17.jsx)(import_antd10.Tooltip,{title:"Instant Action: click something",children:(0,import_jsx_runtime17.jsx)(import_antd10.Radio.Button,{value:"aiTap",children:actionNameForType("aiTap")})})]})}),(0,import_jsx_runtime17.jsxs)("div",{className:"action-icons",children:[(0,import_jsx_runtime17.jsx)(HistorySelector,{onSelect:v}),(0,import_jsx_runtime17.jsx)("div",{className:c?"settings-wrapper settings-wrapper-hover":"settings-wrapper",onMouseEnter:S,onMouseLeave:C,children:(0,import_jsx_runtime17.jsx)(ConfigSelector,{enableTracking:"In-Browser-Extension"===n,showDeepThinkOption:"aiTap"===i})})]})]}),(0,import_jsx_runtime17.jsxs)("div",{className:`main-side-console-input ${t?"":"disabled"} ${s?"loading":""}`,children:[(0,import_jsx_runtime17.jsx)(import_antd10.Form.Item,{name:"prompt",style:{margin:0},children:(0,import_jsx_runtime17.jsx)(TextArea,{className:"main-side-console-input-textarea",disabled:!t,rows:4,placeholder:m,autoFocus:!0,onKeyDown:E,onChange:A,value:f,ref:g})}),(0,import_jsx_runtime17.jsx)("div",{className:"form-controller-wrapper",children:I()})]})]})};init_globals();var import_jsx_runtime18=__toESM(require_jsx_runtime()),GithubStar=()=>(0,import_jsx_runtime18.jsx)("a",{href:"https://github.com/web-infra-dev/midscene",target:"_blank",rel:"noreferrer",style:{display:"flex",alignItems:"center"},children:(0,import_jsx_runtime18.jsx)("img",{className:"github-star",src:"https://img.shields.io/github/stars/web-infra-dev/midscene?style=social",alt:"Github star",style:{display:"block"}})});init_globals();var import_react10=__webpack_require__(4194);init_globals();var React5=__toESM(__webpack_require__(4194)),{createElement:createElement,createContext:createContext,createRef:createRef,forwardRef:forwardRef,useCallback:useCallback2,useContext:useContext,useEffect:useEffect7,useImperativeHandle:useImperativeHandle,useLayoutEffect:useLayoutEffect,useMemo:useMemo5,useRef:useRef5,useState:useState7}=React5,useId=React5["useId".toString()],useLayoutEffect_do_not_use_directly=useLayoutEffect,PanelGroupContext=createContext(null);PanelGroupContext.displayName="PanelGroupContext";var useIsomorphicLayoutEffect=useLayoutEffect_do_not_use_directly,wrappedUseId="function"==typeof useId?useId:()=>null,counter=0;function useUniqueId(t=null){let r=wrappedUseId(),n=useRef5(t||r||null);return null===n.current&&(n.current=""+counter++),null!=t?t:n.current}function PanelWithForwardedRef({children:t,className:r="",collapsedSize:n,collapsible:i,defaultSize:a,forwardedRef:o,id:s,maxSize:l,minSize:u,onCollapse:d,onExpand:c,onResize:h,order:f,style:p,tagName:m="div",...g}){let b=useContext(PanelGroupContext);if(null===b)throw Error("Panel components must be rendered within a PanelGroup container");let{collapsePanel:y,expandPanel:_,getPanelSize:v,getPanelStyle:A,groupId:w,isPanelCollapsed:x,reevaluatePanelConstraints:E,registerPanel:S,resizePanel:C,unregisterPanel:I}=b,T=useUniqueId(s),k=useRef5({callbacks:{onCollapse:d,onExpand:c,onResize:h},constraints:{collapsedSize:n,collapsible:i,defaultSize:a,maxSize:l,minSize:u},id:T,idIsFromProps:void 0!==s,order:f});useRef5({didLogMissingDefaultSizeWarning:!1}),useIsomorphicLayoutEffect(()=>{let{callbacks:t,constraints:r}=k.current,o={...r};k.current.id=T,k.current.idIsFromProps=void 0!==s,k.current.order=f,t.onCollapse=d,t.onExpand=c,t.onResize=h,r.collapsedSize=n,r.collapsible=i,r.defaultSize=a,r.maxSize=l,r.minSize=u,o.collapsedSize===r.collapsedSize&&o.collapsible===r.collapsible&&o.maxSize===r.maxSize&&o.minSize===r.minSize||E(k.current,o)}),useIsomorphicLayoutEffect(()=>{let t=k.current;return S(t),()=>{I(t)}},[f,T,S,I]),useImperativeHandle(o,()=>({collapse:()=>{y(k.current)},expand:t=>{_(k.current,t)},getId:()=>T,getSize:()=>v(k.current),isCollapsed:()=>x(k.current),isExpanded:()=>!x(k.current),resize:t=>{C(k.current,t)}}),[y,_,v,x,T,C]);let P=A(k.current,a);return createElement(m,{...g,children:t,className:r,id:s,style:{...P,...p},"data-panel":"","data-panel-collapsible":i||void 0,"data-panel-group-id":w,"data-panel-id":T,"data-panel-size":parseFloat(""+P.flexGrow).toFixed(1)})}var Panel=forwardRef((t,r)=>createElement(PanelWithForwardedRef,{...t,forwardedRef:r}));PanelWithForwardedRef.displayName="Panel",Panel.displayName="forwardRef(Panel)";var currentCursorStyle=null,styleElement=null;function getCursorStyle(t,r){if(r){let t=!!(r&EXCEEDED_VERTICAL_MIN),n=!!(r&EXCEEDED_VERTICAL_MAX);if(r&EXCEEDED_HORIZONTAL_MIN)return t?"se-resize":n?"ne-resize":"e-resize";if(r&EXCEEDED_HORIZONTAL_MAX)return t?"sw-resize":n?"nw-resize":"w-resize";if(t)return"s-resize";if(n)return"n-resize"}switch(t){case"horizontal":return"ew-resize";case"intersection":return"move";case"vertical":return"ns-resize"}}function resetGlobalCursorStyle(){null!==styleElement&&(document.head.removeChild(styleElement),currentCursorStyle=null,styleElement=null)}function setGlobalCursorStyle(t,r){let n=getCursorStyle(t,r);currentCursorStyle!==n&&(currentCursorStyle=n,null===styleElement&&(styleElement=document.createElement("style"),document.head.appendChild(styleElement)),styleElement.innerHTML=`*{cursor: ${n}!important;}`)}function isKeyDown(t){return"keydown"===t.type}function isPointerEvent(t){return t.type.startsWith("pointer")}function isMouseEvent(t){return t.type.startsWith("mouse")}function getResizeEventCoordinates(t){if(isPointerEvent(t)){if(t.isPrimary)return{x:t.clientX,y:t.clientY}}else if(isMouseEvent(t))return{x:t.clientX,y:t.clientY};return{x:1/0,y:1/0}}function getInputType(){if("function"==typeof matchMedia)return matchMedia("(pointer:coarse)").matches?"coarse":"fine"}function intersects(t,r,n){return n?t.x<r.x+r.width&&t.x+t.width>r.x&&t.y<r.y+r.height&&t.y+t.height>r.y:t.x<=r.x+r.width&&t.x+t.width>=r.x&&t.y<=r.y+r.height&&t.y+t.height>=r.y}function compare(t,r){let n;if(t===r)throw Error("Cannot compare node with itself");let i={a:get_ancestors(t),b:get_ancestors(r)};for(;i.a.at(-1)===i.b.at(-1);)t=i.a.pop(),r=i.b.pop(),n=t;assert(n,"Stacking order can only be calculated for elements with a common ancestor");let a=get_z_index(find_stacking_context(i.a)),o=get_z_index(find_stacking_context(i.b));if(a===o){let t=n.childNodes,r={a:i.a.at(-1),b:i.b.at(-1)},a=t.length;for(;a--;){let n=t[a];if(n===r.a)return 1;if(n===r.b)return -1}}return Math.sign(a-o)}var props=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function is_flex_item(t){var r;let n=getComputedStyle(null!=(r=get_parent(t))?r:t).display;return"flex"===n||"inline-flex"===n}function creates_stacking_context(t){let r=getComputedStyle(t);return"fixed"===r.position||!("auto"===r.zIndex||"static"===r.position&&!is_flex_item(t))||1>+r.opacity||"transform"in r&&"none"!==r.transform||"webkitTransform"in r&&"none"!==r.webkitTransform||"mixBlendMode"in r&&"normal"!==r.mixBlendMode||"filter"in r&&"none"!==r.filter||"webkitFilter"in r&&"none"!==r.webkitFilter||"isolation"in r&&"isolate"===r.isolation||!!props.test(r.willChange)||"touch"===r.webkitOverflowScrolling}function find_stacking_context(t){let r=t.length;for(;r--;){let n=t[r];if(assert(n,"Missing node"),creates_stacking_context(n))return n}return null}function get_z_index(t){return t&&Number(getComputedStyle(t).zIndex)||0}function get_ancestors(t){let r=[];for(;t;)r.push(t),t=get_parent(t);return r}function get_parent(t){let{parentNode:r}=t;return r&&r instanceof ShadowRoot?r.host:r}var EXCEEDED_HORIZONTAL_MIN=1,EXCEEDED_HORIZONTAL_MAX=2,EXCEEDED_VERTICAL_MIN=4,EXCEEDED_VERTICAL_MAX=8,isCoarsePointer="coarse"===getInputType(),intersectingHandles=[],isPointerDown=!1,ownerDocumentCounts=new Map,panelConstraintFlags=new Map,registeredResizeHandlers=new Set;function registerResizeHandle(t,r,n,i,a){var o;let{ownerDocument:s}=r,l={direction:n,element:r,hitAreaMargins:i,setResizeHandlerState:a},u=null!=(o=ownerDocumentCounts.get(s))?o:0;return ownerDocumentCounts.set(s,u+1),registeredResizeHandlers.add(l),updateListeners(),function(){var r;panelConstraintFlags.delete(t),registeredResizeHandlers.delete(l);let n=null!=(r=ownerDocumentCounts.get(s))?r:1;if(ownerDocumentCounts.set(s,n-1),updateListeners(),1===n&&ownerDocumentCounts.delete(s),intersectingHandles.includes(l)){let t=intersectingHandles.indexOf(l);t>=0&&intersectingHandles.splice(t,1),updateCursor()}}}function handlePointerDown(t){let{target:r}=t,{x:n,y:i}=getResizeEventCoordinates(t);isPointerDown=!0,recalculateIntersectingHandles({target:r,x:n,y:i}),updateListeners(),intersectingHandles.length>0&&(updateResizeHandlerStates("down",t),t.preventDefault(),t.stopPropagation())}function handlePointerMove(t){let{x:r,y:n}=getResizeEventCoordinates(t);if(0===t.buttons&&(isPointerDown=!1,updateResizeHandlerStates("up",t)),!isPointerDown){let{target:i}=t;recalculateIntersectingHandles({target:i,x:r,y:n})}updateResizeHandlerStates("move",t),updateCursor(),intersectingHandles.length>0&&t.preventDefault()}function handlePointerUp(t){let{target:r}=t,{x:n,y:i}=getResizeEventCoordinates(t);panelConstraintFlags.clear(),isPointerDown=!1,intersectingHandles.length>0&&t.preventDefault(),updateResizeHandlerStates("up",t),recalculateIntersectingHandles({target:r,x:n,y:i}),updateCursor(),updateListeners()}function recalculateIntersectingHandles({target:t,x:r,y:n}){intersectingHandles.splice(0);let i=null;t instanceof HTMLElement&&(i=t),registeredResizeHandlers.forEach(t=>{let{element:a,hitAreaMargins:o}=t,s=a.getBoundingClientRect(),{bottom:l,left:u,right:d,top:c}=s,h=isCoarsePointer?o.coarse:o.fine;if(r>=u-h&&r<=d+h&&n>=c-h&&n<=l+h){if(null!==i&&a!==i&&!a.contains(i)&&!i.contains(a)&&compare(i,a)>0){let t=i,r=!1;for(;t&&!t.contains(a);){if(intersects(t.getBoundingClientRect(),s,!0)){r=!0;break}t=t.parentElement}if(r)return}intersectingHandles.push(t)}})}function reportConstraintsViolation(t,r){panelConstraintFlags.set(t,r)}function updateCursor(){let t=!1,r=!1;intersectingHandles.forEach(n=>{let{direction:i}=n;"horizontal"===i?t=!0:r=!0});let n=0;panelConstraintFlags.forEach(t=>{n|=t}),t&&r?setGlobalCursorStyle("intersection",n):t?setGlobalCursorStyle("horizontal",n):r?setGlobalCursorStyle("vertical",n):resetGlobalCursorStyle()}function updateListeners(){ownerDocumentCounts.forEach((t,r)=>{let{body:n}=r;n.removeEventListener("contextmenu",handlePointerUp),n.removeEventListener("pointerdown",handlePointerDown),n.removeEventListener("pointerleave",handlePointerMove),n.removeEventListener("pointermove",handlePointerMove)}),window.removeEventListener("pointerup",handlePointerUp),window.removeEventListener("pointercancel",handlePointerUp),registeredResizeHandlers.size>0&&(isPointerDown?(intersectingHandles.length>0&&ownerDocumentCounts.forEach((t,r)=>{let{body:n}=r;t>0&&(n.addEventListener("contextmenu",handlePointerUp),n.addEventListener("pointerleave",handlePointerMove),n.addEventListener("pointermove",handlePointerMove))}),window.addEventListener("pointerup",handlePointerUp),window.addEventListener("pointercancel",handlePointerUp)):ownerDocumentCounts.forEach((t,r)=>{let{body:n}=r;t>0&&(n.addEventListener("pointerdown",handlePointerDown,{capture:!0}),n.addEventListener("pointermove",handlePointerMove))}))}function updateResizeHandlerStates(t,r){registeredResizeHandlers.forEach(n=>{let{setResizeHandlerState:i}=n;i(t,intersectingHandles.includes(n),r)})}function useForceUpdate(){let[t,r]=useState7(0);return useCallback2(()=>r(t=>t+1),[])}function assert(t,r){if(!t)throw import_console_browserify.default.error(r),Error(r)}var PRECISION=10;function fuzzyCompareNumbers(t,r,n=PRECISION){return t.toFixed(n)===r.toFixed(n)?0:t>r?1:-1}function fuzzyNumbersEqual$1(t,r,n=PRECISION){return 0===fuzzyCompareNumbers(t,r,n)}function fuzzyNumbersEqual(t,r,n){return 0===fuzzyCompareNumbers(t,r,n)}function fuzzyLayoutsEqual(t,r,n){if(t.length!==r.length)return!1;for(let i=0;i<t.length;i++)if(!fuzzyNumbersEqual(t[i],r[i],n))return!1;return!0}function resizePanel({panelConstraints:t,panelIndex:r,size:n}){let i=t[r];assert(null!=i,`Panel constraints not found for index ${r}`);let{collapsedSize:a=0,collapsible:o,maxSize:s=100,minSize:l=0}=i;return 0>fuzzyCompareNumbers(n,l)&&(n=o&&0>fuzzyCompareNumbers(n,(a+l)/2)?a:l),n=parseFloat((n=Math.min(s,n)).toFixed(PRECISION))}function adjustLayoutByDelta({delta:t,initialLayout:r,panelConstraints:n,pivotIndices:i,prevLayout:a,trigger:o}){if(fuzzyNumbersEqual(t,0))return r;let s=[...r],[l,u]=i;assert(null!=l,"Invalid first pivot index"),assert(null!=u,"Invalid second pivot index");let d=0;if("keyboard"===o){{let i=t<0?u:l,a=n[i];assert(a,`Panel constraints not found for index ${i}`);let{collapsedSize:o=0,collapsible:s,minSize:d=0}=a;if(s){let n=r[i];if(assert(null!=n,`Previous layout not found for panel index ${i}`),fuzzyNumbersEqual(n,o)){let r=d-n;fuzzyCompareNumbers(r,Math.abs(t))>0&&(t=t<0?0-r:r)}}}{let i=t<0?l:u,a=n[i];assert(a,`No panel constraints found for index ${i}`);let{collapsedSize:o=0,collapsible:s,minSize:d=0}=a;if(s){let n=r[i];if(assert(null!=n,`Previous layout not found for panel index ${i}`),fuzzyNumbersEqual(n,d)){let r=n-o;fuzzyCompareNumbers(r,Math.abs(t))>0&&(t=t<0?0-r:r)}}}}{let i=t<0?1:-1,a=t<0?u:l,o=0;for(;;){let t=r[a];if(assert(null!=t,`Previous layout not found for panel index ${a}`),o+=resizePanel({panelConstraints:n,panelIndex:a,size:100})-t,(a+=i)<0||a>=n.length)break}let s=Math.min(Math.abs(t),Math.abs(o));t=t<0?0-s:s}{let i=t<0?l:u;for(;i>=0&&i<n.length;){let a=Math.abs(t)-Math.abs(d),o=r[i];assert(null!=o,`Previous layout not found for panel index ${i}`);let l=resizePanel({panelConstraints:n,panelIndex:i,size:o-a});if(!fuzzyNumbersEqual(o,l)&&(d+=o-l,s[i]=l,d.toPrecision(3).localeCompare(Math.abs(t).toPrecision(3),void 0,{numeric:!0})>=0))break;t<0?i--:i++}}if(fuzzyLayoutsEqual(a,s))return a;{let i=t<0?u:l,a=r[i];assert(null!=a,`Previous layout not found for panel index ${i}`);let o=a+d,c=resizePanel({panelConstraints:n,panelIndex:i,size:o});if(s[i]=c,!fuzzyNumbersEqual(c,o)){let r=o-c,i=t<0?u:l;for(;i>=0&&i<n.length;){let a=s[i];assert(null!=a,`Previous layout not found for panel index ${i}`);let o=resizePanel({panelConstraints:n,panelIndex:i,size:a+r});if(fuzzyNumbersEqual(a,o)||(r-=o-a,s[i]=o),fuzzyNumbersEqual(r,0))break;t>0?i--:i++}}}return fuzzyNumbersEqual(s.reduce((t,r)=>r+t,0),100)?s:a}function calculateAriaValues({layout:t,panelsArray:r,pivotIndices:n}){let i=0,a=100,o=0,s=0,l=n[0];return assert(null!=l,"No pivot index found"),r.forEach((t,r)=>{let{constraints:n}=t,{maxSize:u=100,minSize:d=0}=n;r===l?(i=d,a=u):(o+=d,s+=u)}),{valueMax:Math.min(a,100-o),valueMin:Math.max(i,100-s),valueNow:t[l]}}function getResizeHandleElementsForGroup(t,r=document){return Array.from(r.querySelectorAll(`[data-panel-resize-handle-id][data-panel-group-id="${t}"]`))}function getResizeHandleElementIndex(t,r,n=document){let i=getResizeHandleElementsForGroup(t,n).findIndex(t=>t.getAttribute("data-panel-resize-handle-id")===r);return null!=i?i:null}function determinePivotIndices(t,r,n){let i=getResizeHandleElementIndex(t,r,n);return null!=i?[i,i+1]:[-1,-1]}function getPanelGroupElement(t,r=document){var n;return r instanceof HTMLElement&&(null==r||null==(n=r.dataset)?void 0:n.panelGroupId)==t?r:r.querySelector(`[data-panel-group][data-panel-group-id="${t}"]`)||null}function getResizeHandleElement(t,r=document){return r.querySelector(`[data-panel-resize-handle-id="${t}"]`)||null}function getResizeHandlePanelIds(t,r,n,i=document){var a,o,s,l;let u=getResizeHandleElement(r,i),d=getResizeHandleElementsForGroup(t,i),c=u?d.indexOf(u):-1;return[null!=(a=null==(o=n[c])?void 0:o.id)?a:null,null!=(s=null==(l=n[c+1])?void 0:l.id)?s:null]}function useWindowSplitterPanelGroupBehavior({committedValuesRef:t,eagerValuesRef:r,groupId:n,layout:i,panelDataArray:a,panelGroupElement:o,setLayout:s}){useRef5({didWarnAboutMissingResizeHandle:!1}),useIsomorphicLayoutEffect(()=>{if(!o)return;let t=getResizeHandleElementsForGroup(n,o);for(let r=0;r<a.length-1;r++){let{valueMax:n,valueMin:o,valueNow:s}=calculateAriaValues({layout:i,panelsArray:a,pivotIndices:[r,r+1]}),l=t[r];if(null==l);else{let t=a[r];assert(t,`No panel data found for index "${r}"`),l.setAttribute("aria-controls",t.id),l.setAttribute("aria-valuemax",""+Math.round(n)),l.setAttribute("aria-valuemin",""+Math.round(o)),l.setAttribute("aria-valuenow",null!=s?""+Math.round(s):"")}}return()=>{t.forEach((t,r)=>{t.removeAttribute("aria-controls"),t.removeAttribute("aria-valuemax"),t.removeAttribute("aria-valuemin"),t.removeAttribute("aria-valuenow")})}},[n,i,a,o]),useEffect7(()=>{if(!o)return;let t=r.current;assert(t,"Eager values not found");let{panelDataArray:a}=t;assert(null!=getPanelGroupElement(n,o),`No group found for id "${n}"`);let l=getResizeHandleElementsForGroup(n,o);assert(l,`No resize handles found for group id "${n}"`);let u=l.map(t=>{let r=t.getAttribute("data-panel-resize-handle-id");assert(r,"Resize handle element has no handle id attribute");let[l,u]=getResizeHandlePanelIds(n,r,a,o);if(null==l||null==u)return()=>{};let d=t=>{if(!t.defaultPrevented&&"Enter"===t.key){t.preventDefault();let u=a.findIndex(t=>t.id===l);if(u>=0){let t=a[u];assert(t,`No panel data found for index ${u}`);let l=i[u],{collapsedSize:d=0,collapsible:c,minSize:h=0}=t.constraints;if(null!=l&&c){let t=adjustLayoutByDelta({delta:fuzzyNumbersEqual(l,d)?h-d:d-l,initialLayout:i,panelConstraints:a.map(t=>t.constraints),pivotIndices:determinePivotIndices(n,r,o),prevLayout:i,trigger:"keyboard"});i!==t&&s(t)}}}};return t.addEventListener("keydown",d),()=>{t.removeEventListener("keydown",d)}});return()=>{u.forEach(t=>t())}},[o,t,r,n,i,a,s])}function areEqual(t,r){if(t.length!==r.length)return!1;for(let n=0;n<t.length;n++)if(t[n]!==r[n])return!1;return!0}function getResizeEventCursorPosition(t,r){let n="horizontal"===t,{x:i,y:a}=getResizeEventCoordinates(r);return n?i:a}function calculateDragOffsetPercentage(t,r,n,i,a){let o="horizontal"===n,s=getResizeHandleElement(r,a);assert(s,`No resize handle element found for id "${r}"`);let l=s.getAttribute("data-panel-group-id");assert(l,"Resize handle element has no group id attribute");let{initialCursorPosition:u}=i,d=getResizeEventCursorPosition(n,t),c=getPanelGroupElement(l,a);assert(c,`No group element found for id "${l}"`);let h=c.getBoundingClientRect();return(d-u)/(o?h.width:h.height)*100}function calculateDeltaPercentage(t,r,n,i,a,o){if(isKeyDown(t)){let r="horizontal"===n,i=0;i=t.shiftKey?100:null!=a?a:10;let o=0;switch(t.key){case"ArrowDown":o=r?0:i;break;case"ArrowLeft":o=r?-i:0;break;case"ArrowRight":o=r?i:0;break;case"ArrowUp":o=r?0:-i;break;case"End":o=100;break;case"Home":o=-100}return o}return null==i?0:calculateDragOffsetPercentage(t,r,n,i,o)}function calculateUnsafeDefaultLayout({panelDataArray:t}){let r=Array(t.length),n=t.map(t=>t.constraints),i=0,a=100;for(let o=0;o<t.length;o++){let t=n[o];assert(t,`Panel constraints not found for index ${o}`);let{defaultSize:s}=t;null!=s&&(i++,r[o]=s,a-=s)}for(let o=0;o<t.length;o++){let s=n[o];assert(s,`Panel constraints not found for index ${o}`);let{defaultSize:l}=s;if(null!=l)continue;let u=a/(t.length-i);i++,r[o]=u,a-=u}return r}function callPanelCallbacks(t,r,n){r.forEach((r,i)=>{let a=t[i];assert(a,`Panel data not found for index ${i}`);let{callbacks:o,constraints:s,id:l}=a,{collapsedSize:u=0,collapsible:d}=s,c=n[l];if(null==c||r!==c){n[l]=r;let{onCollapse:t,onExpand:i,onResize:a}=o;a&&a(r,c),d&&(t||i)&&(!i||null!=c&&!fuzzyNumbersEqual$1(c,u)||fuzzyNumbersEqual$1(r,u)||i(),!t||null!=c&&fuzzyNumbersEqual$1(c,u)||!fuzzyNumbersEqual$1(r,u)||t())}})}function compareLayouts(t,r){if(t.length!==r.length)return!1;for(let n=0;n<t.length;n++)if(t[n]!=r[n])return!1;return!0}function computePanelFlexBoxStyle({defaultSize:t,dragState:r,layout:n,panelData:i,panelIndex:a,precision:o=3}){let s=n[a];return{flexBasis:0,flexGrow:null==s?null!=t?t.toPrecision(o):"1":1===i.length?"1":s.toPrecision(o),flexShrink:1,overflow:"hidden",pointerEvents:null!==r?"none":void 0}}function debounce(t,r=10){let n=null;return(...i)=>{null!==n&&clearTimeout(n),n=setTimeout(()=>{t(...i)},r)}}function initializeDefaultStorage(t){try{if("undefined"==typeof localStorage)throw Error("localStorage not supported in this environment");t.getItem=t=>localStorage.getItem(t),t.setItem=(t,r)=>{localStorage.setItem(t,r)}}catch(r){import_console_browserify.default.error(r),t.getItem=()=>null,t.setItem=()=>{}}}function getPanelGroupKey(t){return`react-resizable-panels:${t}`}function getPanelKey(t){return t.map(t=>{let{constraints:r,id:n,idIsFromProps:i,order:a}=t;return i?n:a?`${a}:${JSON.stringify(r)}`:JSON.stringify(r)}).sort((t,r)=>t.localeCompare(r)).join(",")}function loadSerializedPanelGroupState(t,r){try{let n=getPanelGroupKey(t),i=r.getItem(n);if(i){let t=JSON.parse(i);if("object"==typeof t&&null!=t)return t}}catch(t){}return null}function loadPanelGroupState(t,r,n){var i,a;return null!=(a=(null!=(i=loadSerializedPanelGroupState(t,n))?i:{})[getPanelKey(r)])?a:null}function savePanelGroupState(t,r,n,i,a){var o;let s=getPanelGroupKey(t),l=getPanelKey(r),u=null!=(o=loadSerializedPanelGroupState(t,a))?o:{};u[l]={expandToSizes:Object.fromEntries(n.entries()),layout:i};try{a.setItem(s,JSON.stringify(u))}catch(t){import_console_browserify.default.error(t)}}function validatePanelGroupLayout({layout:t,panelConstraints:r}){let n=[...t],i=n.reduce((t,r)=>t+r,0);if(n.length!==r.length)throw Error(`Invalid ${r.length} panel layout: ${n.map(t=>`${t}%`).join(", ")}`);if(!fuzzyNumbersEqual(i,100))for(let t=0;t<r.length;t++){let r=n[t];assert(null!=r,`No layout data found for index ${t}`);let a=100/i*r;n[t]=a}let a=0;for(let t=0;t<r.length;t++){let i=n[t];assert(null!=i,`No layout data found for index ${t}`);let o=resizePanel({panelConstraints:r,panelIndex:t,size:i});i!=o&&(a+=i-o,n[t]=o)}if(!fuzzyNumbersEqual(a,0))for(let t=0;t<r.length;t++){let i=n[t];assert(null!=i,`No layout data found for index ${t}`);let o=resizePanel({panelConstraints:r,panelIndex:t,size:i+a});if(i!==o&&(a-=o-i,n[t]=o,fuzzyNumbersEqual(a,0)))break}return n}var LOCAL_STORAGE_DEBOUNCE_INTERVAL=100,defaultStorage={getItem:t=>(initializeDefaultStorage(defaultStorage),defaultStorage.getItem(t)),setItem:(t,r)=>{initializeDefaultStorage(defaultStorage),defaultStorage.setItem(t,r)}},debounceMap={};function PanelGroupWithForwardedRef({autoSaveId:t=null,children:r,className:n="",direction:i,forwardedRef:a,id:o=null,onLayout:s=null,keyboardResizeBy:l=null,storage:u=defaultStorage,style:d,tagName:c="div",...h}){let f=useUniqueId(o),p=useRef5(null),[m,g]=useState7(null),[b,y]=useState7([]),_=useForceUpdate(),v=useRef5({}),A=useRef5(new Map),w=useRef5(0),x=useRef5({autoSaveId:t,direction:i,dragState:m,id:f,keyboardResizeBy:l,onLayout:s,storage:u}),E=useRef5({layout:b,panelDataArray:[],panelDataArrayChanged:!1});useRef5({didLogIdAndOrderWarning:!1,didLogPanelConstraintsWarning:!1,prevPanelIds:[]}),useImperativeHandle(a,()=>({getId:()=>x.current.id,getLayout:()=>{let{layout:t}=E.current;return t},setLayout:t=>{let{onLayout:r}=x.current,{layout:n,panelDataArray:i}=E.current,a=validatePanelGroupLayout({layout:t,panelConstraints:i.map(t=>t.constraints)});areEqual(n,a)||(y(a),E.current.layout=a,r&&r(a),callPanelCallbacks(i,a,v.current))}}),[]),useIsomorphicLayoutEffect(()=>{x.current.autoSaveId=t,x.current.direction=i,x.current.dragState=m,x.current.id=f,x.current.onLayout=s,x.current.storage=u}),useWindowSplitterPanelGroupBehavior({committedValuesRef:x,eagerValuesRef:E,groupId:f,layout:b,panelDataArray:E.current.panelDataArray,setLayout:y,panelGroupElement:p.current}),useEffect7(()=>{let{panelDataArray:r}=E.current;if(t){if(0===b.length||b.length!==r.length)return;let n=debounceMap[t];null==n&&(n=debounce(savePanelGroupState,LOCAL_STORAGE_DEBOUNCE_INTERVAL),debounceMap[t]=n),n(t,[...r],new Map(A.current),b,u)}},[t,b,u]),useEffect7(()=>{});let S=useCallback2(t=>{let{onLayout:r}=x.current,{layout:n,panelDataArray:i}=E.current;if(t.constraints.collapsible){let a=i.map(t=>t.constraints),{collapsedSize:o=0,panelSize:s,pivotIndices:l}=panelDataHelper(i,t,n);if(assert(null!=s,`Panel size not found for panel "${t.id}"`),!fuzzyNumbersEqual$1(s,o)){A.current.set(t.id,s);let u=adjustLayoutByDelta({delta:findPanelDataIndex(i,t)===i.length-1?s-o:o-s,initialLayout:n,panelConstraints:a,pivotIndices:l,prevLayout:n,trigger:"imperative-api"});compareLayouts(n,u)||(y(u),E.current.layout=u,r&&r(u),callPanelCallbacks(i,u,v.current))}}},[]),C=useCallback2((t,r)=>{let{onLayout:n}=x.current,{layout:i,panelDataArray:a}=E.current;if(t.constraints.collapsible){let o=a.map(t=>t.constraints),{collapsedSize:s=0,panelSize:l=0,minSize:u=0,pivotIndices:d}=panelDataHelper(a,t,i),c=null!=r?r:u;if(fuzzyNumbersEqual$1(l,s)){let r=A.current.get(t.id),s=null!=r&&r>=c?r:c,u=adjustLayoutByDelta({delta:findPanelDataIndex(a,t)===a.length-1?l-s:s-l,initialLayout:i,panelConstraints:o,pivotIndices:d,prevLayout:i,trigger:"imperative-api"});compareLayouts(i,u)||(y(u),E.current.layout=u,n&&n(u),callPanelCallbacks(a,u,v.current))}}},[]),I=useCallback2(t=>{let{layout:r,panelDataArray:n}=E.current,{panelSize:i}=panelDataHelper(n,t,r);return assert(null!=i,`Panel size not found for panel "${t.id}"`),i},[]),T=useCallback2((t,r)=>{let{panelDataArray:n}=E.current,i=findPanelDataIndex(n,t);return computePanelFlexBoxStyle({defaultSize:r,dragState:m,layout:b,panelData:n,panelIndex:i})},[m,b]),k=useCallback2(t=>{let{layout:r,panelDataArray:n}=E.current,{collapsedSize:i=0,collapsible:a,panelSize:o}=panelDataHelper(n,t,r);return assert(null!=o,`Panel size not found for panel "${t.id}"`),!0===a&&fuzzyNumbersEqual$1(o,i)},[]),P=useCallback2(t=>{let{layout:r,panelDataArray:n}=E.current,{collapsedSize:i=0,collapsible:a,panelSize:o}=panelDataHelper(n,t,r);return assert(null!=o,`Panel size not found for panel "${t.id}"`),!a||fuzzyCompareNumbers(o,i)>0},[]),R=useCallback2(t=>{let{panelDataArray:r}=E.current;r.push(t),r.sort((t,r)=>{let n=t.order,i=r.order;return null==n&&null==i?0:null==n?-1:null==i?1:n-i}),E.current.panelDataArrayChanged=!0,_()},[_]);useIsomorphicLayoutEffect(()=>{if(E.current.panelDataArrayChanged){E.current.panelDataArrayChanged=!1;let{autoSaveId:t,onLayout:r,storage:n}=x.current,{layout:i,panelDataArray:a}=E.current,o=null;if(t){let r=loadPanelGroupState(t,a,n);r&&(A.current=new Map(Object.entries(r.expandToSizes)),o=r.layout)}null==o&&(o=calculateUnsafeDefaultLayout({panelDataArray:a}));let s=validatePanelGroupLayout({layout:o,panelConstraints:a.map(t=>t.constraints)});areEqual(i,s)||(y(s),E.current.layout=s,r&&r(s),callPanelCallbacks(a,s,v.current))}}),useIsomorphicLayoutEffect(()=>{let t=E.current;return()=>{t.layout=[]}},[]);let O=useCallback2(t=>function(r){r.preventDefault();let n=p.current;if(!n)return()=>null;let{direction:i,dragState:a,id:o,keyboardResizeBy:s,onLayout:l}=x.current,{layout:u,panelDataArray:d}=E.current,{initialLayout:c}=null!=a?a:{},h=determinePivotIndices(o,t,n),f=calculateDeltaPercentage(r,t,i,a,s,n),m="horizontal"===i;"rtl"===document.dir&&m&&(f=-f);let g=adjustLayoutByDelta({delta:f,initialLayout:null!=c?c:u,panelConstraints:d.map(t=>t.constraints),pivotIndices:h,prevLayout:u,trigger:isKeyDown(r)?"keyboard":"mouse-or-touch"}),b=!compareLayouts(u,g);(isPointerEvent(r)||isMouseEvent(r))&&w.current!=f&&(w.current=f,reportConstraintsViolation(t,b?0:m?f<0?EXCEEDED_HORIZONTAL_MIN:EXCEEDED_HORIZONTAL_MAX:f<0?EXCEEDED_VERTICAL_MIN:EXCEEDED_VERTICAL_MAX)),b&&(y(g),E.current.layout=g,l&&l(g),callPanelCallbacks(d,g,v.current))},[]),M=useCallback2((t,r)=>{let{onLayout:n}=x.current,{layout:i,panelDataArray:a}=E.current,o=a.map(t=>t.constraints),{panelSize:s,pivotIndices:l}=panelDataHelper(a,t,i);assert(null!=s,`Panel size not found for panel "${t.id}"`);let u=adjustLayoutByDelta({delta:findPanelDataIndex(a,t)===a.length-1?s-r:r-s,initialLayout:i,panelConstraints:o,pivotIndices:l,prevLayout:i,trigger:"imperative-api"});compareLayouts(i,u)||(y(u),E.current.layout=u,n&&n(u),callPanelCallbacks(a,u,v.current))},[]),j=useCallback2((t,r)=>{let{layout:n,panelDataArray:i}=E.current,{collapsedSize:a=0,collapsible:o}=r,{collapsedSize:s=0,collapsible:l,maxSize:u=100,minSize:d=0}=t.constraints,{panelSize:c}=panelDataHelper(i,t,n);null!=c&&(o&&l&&fuzzyNumbersEqual$1(c,a)?fuzzyNumbersEqual$1(a,s)||M(t,s):c<d?M(t,d):c>u&&M(t,u))},[M]),N=useCallback2((t,r)=>{let{direction:n}=x.current,{layout:i}=E.current;if(!p.current)return;let a=getResizeHandleElement(t,p.current);assert(a,`Drag handle element not found for id "${t}"`);let o=getResizeEventCursorPosition(n,r);g({dragHandleId:t,dragHandleRect:a.getBoundingClientRect(),initialCursorPosition:o,initialLayout:i})},[]),B=useCallback2(()=>{g(null)},[]),L=useCallback2(t=>{let{panelDataArray:r}=E.current,n=findPanelDataIndex(r,t);n>=0&&(r.splice(n,1),delete v.current[t.id],E.current.panelDataArrayChanged=!0,_())},[_]),D=useMemo5(()=>({collapsePanel:S,direction:i,dragState:m,expandPanel:C,getPanelSize:I,getPanelStyle:T,groupId:f,isPanelCollapsed:k,isPanelExpanded:P,reevaluatePanelConstraints:j,registerPanel:R,registerResizeHandle:O,resizePanel:M,startDragging:N,stopDragging:B,unregisterPanel:L,panelGroupElement:p.current}),[S,m,i,C,I,T,f,k,P,j,R,O,M,N,B,L]),U={display:"flex",flexDirection:"horizontal"===i?"row":"column",height:"100%",overflow:"hidden",width:"100%"};return createElement(PanelGroupContext.Provider,{value:D},createElement(c,{...h,children:r,className:n,id:o,ref:p,style:{...U,...d},"data-panel-group":"","data-panel-group-direction":i,"data-panel-group-id":f}))}var PanelGroup=forwardRef((t,r)=>createElement(PanelGroupWithForwardedRef,{...t,forwardedRef:r}));function findPanelDataIndex(t,r){return t.findIndex(t=>t===r||t.id===r.id)}function panelDataHelper(t,r,n){let i=findPanelDataIndex(t,r),a=i===t.length-1?[i-1,i]:[i,i+1],o=n[i];return{...r.constraints,panelSize:o,pivotIndices:a}}function useWindowSplitterResizeHandlerBehavior({disabled:t,handleId:r,resizeHandler:n,panelGroupElement:i}){useEffect7(()=>{if(t||null==n||null==i)return;let a=getResizeHandleElement(r,i);if(null==a)return;let o=t=>{if(!t.defaultPrevented)switch(t.key){case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"ArrowUp":case"End":case"Home":t.preventDefault(),n(t);break;case"F6":{t.preventDefault();let n=a.getAttribute("data-panel-group-id");assert(n,`No group element found for id "${n}"`);let o=getResizeHandleElementsForGroup(n,i),s=getResizeHandleElementIndex(n,r,i);assert(null!==s,`No resize element found for id "${r}"`),o[t.shiftKey?s>0?s-1:o.length-1:s+1<o.length?s+1:0].focus()}}};return a.addEventListener("keydown",o),()=>{a.removeEventListener("keydown",o)}},[i,t,r,n])}function PanelResizeHandle({children:t=null,className:r="",disabled:n=!1,hitAreaMargins:i,id:a,onBlur:o,onDragging:s,onFocus:l,style:u={},tabIndex:d=0,tagName:c="div",...h}){var f,p;let m=useRef5(null),g=useRef5({onDragging:s});useEffect7(()=>{g.current.onDragging=s});let b=useContext(PanelGroupContext);if(null===b)throw Error("PanelResizeHandle components must be rendered within a PanelGroup container");let{direction:y,groupId:_,registerResizeHandle:v,startDragging:A,stopDragging:w,panelGroupElement:x}=b,E=useUniqueId(a),[S,C]=useState7("inactive"),[I,T]=useState7(!1),[k,P]=useState7(null),R=useRef5({state:S});useIsomorphicLayoutEffect(()=>{R.current.state=S}),useEffect7(()=>{if(n)P(null);else{let t=v(E);P(()=>t)}},[n,E,v]);let O=null!=(f=null==i?void 0:i.coarse)?f:15,M=null!=(p=null==i?void 0:i.fine)?p:5;return useEffect7(()=>{if(n||null==k)return;let t=m.current;return assert(t,"Element ref not attached"),registerResizeHandle(E,t,y,{coarse:O,fine:M},(t,r,n)=>{if(r)switch(t){case"down":{C("drag"),A(E,n);let{onDragging:t}=g.current;t&&t(!0);break}case"move":{let{state:t}=R.current;"drag"!==t&&C("hover"),k(n);break}case"up":{C("hover"),w();let{onDragging:t}=g.current;t&&t(!1)}}else C("inactive")})},[O,y,n,M,v,E,k,A,w]),useWindowSplitterResizeHandlerBehavior({disabled:n,handleId:E,resizeHandler:k,panelGroupElement:x}),createElement(c,{...h,children:t,className:r,id:a,onBlur:()=>{T(!1),null==o||o()},onFocus:()=>{T(!0),null==l||l()},ref:m,role:"separator",style:{touchAction:"none",userSelect:"none",...u},tabIndex:d,"data-panel-group-direction":y,"data-panel-group-id":_,"data-resize-handle":"","data-resize-handle-active":"drag"===S?"pointer":I?"keyboard":void 0,"data-resize-handle-state":S,"data-panel-resize-handle-enabled":!n,"data-panel-resize-handle-id":E})}PanelGroupWithForwardedRef.displayName="PanelGroup",PanelGroup.displayName="forwardRef(PanelGroup)",PanelResizeHandle.displayName="PanelResizeHandle";var import_jsx_runtime19=__toESM(require_jsx_runtime()),Describer=t=>{let{uiContext:r}=t,n=r.screenshotBase64,i=(0,import_react10.useRef)(null),[a,o]=(0,import_react10.useState)([]),[s,l]=(0,import_react10.useState)(),[u,d]=(0,import_react10.useState)(),[c,h]=(0,import_react10.useState)(!1),[f,p]=(0,import_react10.useState)(),m=useStaticPageAgent(r);(0,import_react10.useEffect)(()=>{let t=i.current;if(!t||!n)return;let r=t.getContext("2d");if(!r)return;let a=new Image;a.onload=()=>{t.width=a.width,t.height=a.height,r.drawImage(a,0,0)},a.src=n},[n]);let g="";return u?g=u:f&&!f.verifyResult?.pass?g=`Locate failed with prompt: ${f.prompt}`:f?g=f.deepThink?`Deep think: ${f.prompt}`:f.prompt:c&&(g="Loading..."),(0,import_jsx_runtime19.jsx)("div",{className:"image-describer",children:(0,import_jsx_runtime19.jsxs)(PanelGroup,{autoSaveId:"describer-layout",direction:"horizontal",children:[(0,import_jsx_runtime19.jsx)(Panel,{defaultSize:32,maxSize:60,minSize:20,style:{paddingRight:"24px"},children:(0,import_jsx_runtime19.jsxs)("div",{className:"form-part context-panel",children:[(0,import_jsx_runtime19.jsx)("h3",{children:"Screenshot"}),(0,import_jsx_runtime19.jsx)("div",{className:"form-sub-title",children:"Click on the screenshot, Midscene will help you describe the element at the clicked point."}),(0,import_jsx_runtime19.jsx)(Blackboard,{uiContext:{...r,tree:{node:null,children:[]}},highlightPoints:a,highlightRect:s,onCanvasClick:async t=>{if(m){h(!0),d(void 0),p(void 0),o([]),l(void 0);try{let r=[t[0],t[1]];o([r]);let n=await m?.describeElementAtPoint(r);import_console_browserify.default.log("describe result",n),p(n),n.verifyResult?.rect&&l(n.verifyResult.rect)}catch(t){d(t.message)}finally{h(!1)}}else import_console_browserify.default.error("agent is not initialized")},hideController:!0})]})}),(0,import_jsx_runtime19.jsx)(PanelResizeHandle,{className:"panel-resize-handle"}),(0,import_jsx_runtime19.jsx)(Panel,{children:(0,import_jsx_runtime19.jsx)(PlaygroundResultView,{result:{result:g,error:u||null},loading:c,serverValid:!0,serviceMode:"In-Browser",replayScriptsInfo:null,replayCounter:0,loadingProgressText:""})})]})})}},9084:function(t,r,n){var i=n(1549),a=n(8082),o=n(8409),s=n(7966),l=n(5222),u=n(247),d=n(2957),c=n(9576),h=n(6327),f=n(3636),p=n(4465),m=n(4194),g=n(2726),b=n(3876),y=n(3648),_=n(4838),v=n(8941);let A=t=>(0,i.jsx)("span",{className:"status-dot",style:{color:t},children:"●"}),w=t=>{var r,n,a;let{devices:o,loadingDevices:s,selectedDeviceId:u,onDeviceSelect:d,socketRef:h,scrcpyPlayerRef:f}=t,[p,g]=(0,m.useState)(!1),w=(0,m.useRef)(null),[x,E]=c.ZP.useMessage(),S=(0,l.useServerValid)(!0),C=(0,m.useCallback)(t=>{t!==w.current&&h.current&&h.current.connected&&(g(!1),d(t),w.current=t)},[d,h]),I=(0,m.useCallback)(()=>{f.current&&(f.current.disconnectDevice(),x.info("Device disconnected"))},[f,x]),T=!!u&&(null==(r=o.find(t=>t.id===u))?void 0:r.status.toLowerCase())!=="device";return(0,m.useEffect)(()=>{T&&u&&I()},[T,u,I,x]),(0,i.jsxs)("div",{className:"device-header",children:[E,(0,i.jsxs)("div",{className:"device-title-container",children:[(0,i.jsx)("h2",{className:"device-title",children:"Device"}),(0,i.jsx)(y.Z,{trigger:["click"],placement:"bottomLeft",open:p,onOpenChange:g,dropdownRender:()=>(0,i.jsxs)("div",{className:"device-dropdown",children:[(0,i.jsx)("div",{className:"dropdown-header",children:(0,i.jsx)("span",{className:"dropdown-title",children:"Devices list"})}),(0,i.jsxs)("div",{className:"device-list",children:[o.map(t=>(0,i.jsx)("div",{onClick:()=>{"device"===t.status.toLowerCase()&&C(t.id)},className:`device-list-item ${"device"===t.status.toLowerCase()&&u===t.id?"selected":""} ${"device"!==t.status.toLowerCase()?"offline":""}`,children:(0,i.jsxs)("div",{className:"device-item-content",children:[(0,i.jsx)("div",{className:"device-item-icon-container",children:(0,i.jsx)(b.Z,{className:"device-item-icon"})}),(0,i.jsxs)("div",{className:"device-item-info",children:[(0,i.jsx)("div",{className:"device-item-name",children:t.name||t.id}),(0,i.jsxs)("div",{className:"device-item-status",children:[(0,i.jsx)("div",{className:"status-badge",children:"device"===t.status.toLowerCase()?(0,i.jsxs)(i.Fragment,{children:[A("#52c41a"),(0,i.jsx)("span",{className:"status-text",children:"Online"})]}):(0,i.jsxs)(i.Fragment,{children:[A("#f5222d"),(0,i.jsx)("span",{className:"status-text",children:"Offline"})]})}),(0,i.jsx)(_.Z,{type:"vertical",className:"status-divider"}),(0,i.jsxs)("div",{className:"device-id-container",children:["Device ID: ",t.id]})]})]}),"device"===t.status.toLowerCase()&&u===t.id&&(0,i.jsx)("div",{className:"current-device-indicator",children:"Current device"})]})},t.id)),0===o.length&&(0,i.jsx)("div",{className:"device-list-empty",children:"No devices found"})]})]}),children:(0,i.jsxs)(v.ZP,{className:"device-dropdown-button",children:[(0,i.jsxs)("div",{className:"device-icon-container",children:[(0,i.jsx)(b.Z,{className:"device-icon"}),u&&S&&(0,i.jsx)("div",{className:"status-indicator",children:(null==(n=o.find(t=>t.id===u))?void 0:n.status.toLowerCase())==="device"?(0,i.jsx)(i.Fragment,{children:A("#52c41a")}):(0,i.jsx)(i.Fragment,{children:A("#f5222d")})})]}),u&&!T&&S?(0,i.jsx)("span",{className:"device-name",children:(null==(a=o.find(t=>t.id===u))?void 0:a.name)||u}):(0,i.jsx)("span",{className:"device-name no-device",children:"No device"}),(0,i.jsx)("span",{className:"dropdown-arrow",children:"▼"})]})})]})]})};var x=n(7379),E=n(2882),S=n(1138),C=n(2686),I=n(2688),T=n(1547),k=n(6112),P=n(8275),R=n(3405);let O=t=>(0,i.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16",...t,children:(0,i.jsx)("path",{fill:"#000",fillOpacity:.25,fillRule:"evenodd",d:"M9.68 2c1.2-1.2 3.2-1.28 4.4-.08s1.12 3.2-.08 4.4l-2.16 2.16c-.24.24-.56.24-.8 0s-.24-.56 0-.8l2.16-2.16c.8-.8.8-2.08.08-2.8s-2-.72-2.8.08L8.32 4.96c-.24.24-.56.24-.8 0s-.24-.56 0-.8zM5.6 13.2l2.16-2.16c.24-.24.56-.24.8 0s.24.56 0 .8L6.4 14c-1.2 1.2-3.12 1.36-4.4.08-1.36-1.28-1.2-3.2.08-4.4l2.16-2.16c.24-.24.56-.24.8 0s.24.56 0 .8l-2.16 2.16c-.8.8-.88 2-.08 2.8s2 .72 2.8-.08m4.64-8.24c.24-.24.64-.24.96 0 .24.24.24.64 0 .96L5.92 11.2c-.24.24-.64.24-.96 0-.24-.24-.24-.64 0-.96z",clipRule:"evenodd"})}),M=t=>(0,i.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16",...t,children:[(0,i.jsxs)("g",{fill:"#606266",clipPath:"url(#screenshot_svg__a)",children:[(0,i.jsx)("path",{d:"m4.883 2.663-.858 2.001h-2.69v8.673h13.341V4.664H11.32l-.859-2zm-1.738.667.858-2.001h7.338l.858 2.001h2.477a1.334 1.334 0 0 1 1.334 1.334v8.673a1.335 1.335 0 0 1-1.334 1.334H1.334A1.334 1.334 0 0 1 0 13.337V4.664A1.334 1.334 0 0 1 1.334 3.33z"}),(0,i.jsx)("path",{d:"M8.005 10.001a1.334 1.334 0 1 0 0-2.668 1.334 1.334 0 0 0 0 2.668m0 1.335a2.668 2.668 0 1 1 0-5.337 2.668 2.668 0 0 1 0 5.337m3.336-6.004h.667q.667 0 .667.667 0 .666-.667.667h-.667q-.667 0-.667-.667t.667-.667"})]}),(0,i.jsx)("defs",{children:(0,i.jsx)("clipPath",{id:"screenshot_svg__a",children:(0,i.jsx)("path",{fill:"#fff",d:"M0 0h16v16H0z"})})})]}),j=t=>(0,i.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16",...t,children:(0,i.jsx)("path",{fill:"#FF4550",d:"M14.08 1.92C12.88.72 10.88.8 9.68 2L7.52 4.16c-.24.24-.24.56 0 .8s.56.24.8 0l2.16-2.16c.8-.8 2.08-.8 2.8-.08s.72 2-.08 2.8l-2.16 2.16c-.24.24-.24.56 0 .8s.56.24.8 0L14 6.32c1.2-1.2 1.28-3.2.08-4.4m-6.32 9.12L5.6 13.2c-.8.8-2 .88-2.8.08s-.72-2 .08-2.8l2.16-2.16c.24-.24.24-.56 0-.8s-.56-.24-.8 0L2.08 9.68C.8 10.88.64 12.8 2 14.08c1.28 1.28 3.2 1.12 4.4-.08l2.16-2.16c.24-.24.24-.56 0-.8s-.56-.24-.8 0M5.92 4.96c-.24-.24-.64-.24-.96 0-.24.24-.24.64 0 .96l5.28 5.28c.24.24.64.24.96 0 .24-.24.24-.64 0-.96z"})}),{Text:N}=T.Z,B=(0,m.forwardRef)((t,r)=>{let{serverUrl:n,maxSize:a=1024,autoConnect:o=!0,autoReconnect:s=!0,reconnectInterval:u=5e3,onConnectionStatusChange:d}=t,[h,b]=(0,m.useState)(!1),[y,A]=(0,m.useState)(!1),[w,T]=(0,m.useState)(null),[B,L]=(0,m.useState)(""),D=(0,m.useRef)(null),U=(0,m.useRef)(null),F=(0,m.useRef)(null),z=(0,m.useRef)(null),G=(0,m.useRef)(null),H=(0,m.useRef)(null),q=(0,l.useServerValid)(!0),V=(0,m.useCallback)(t=>{if(t)try{for(;t.firstChild;)try{t.removeChild(t.firstChild)}catch(r){if(console.warn("Failed to remove child, skipping:",r),t.firstChild){t.innerHTML="";break}}}catch(r){console.error("Error clearing container:",r);try{t.innerHTML=""}catch(t){console.error("Failed to reset innerHTML:",t)}}},[]),W=(0,m.useCallback)(()=>{if(!F.current||!U.current||!w)return;let t=U.current,r=F.current,n=t.clientWidth,i=t.clientHeight,{width:a,height:o}=w,s=i-40,l=a/o,u=n,d=n/l;d>s&&(d=s,u=s*l),r.width=a,r.height=o,r.style.width=`${u}px`,r.style.height=`${d}px`,r.style.marginTop="20px",r.style.marginBottom="20px"},[w]);(0,m.useEffect)(()=>{let t=()=>{W()};return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[W]),(0,m.useEffect)(()=>{W()},[w,W]);let $=async()=>{if(C.P.isSupported){let t=new C.P;return{renderer:t,element:t.canvas}}let t=new I.I;return{renderer:t,element:t.canvas}},K=async t=>{if(!S.h.isSupported)throw Error("Current browser does not support WebCodecs API, please use the latest version of Chrome/Edge browser");let{renderer:r,element:n}=await $();if(F.current=n,U.current){let t=U.current.querySelector(".canvas-wrapper");t&&(V(t),t.appendChild(F.current))}return new S.h({codec:t,renderer:r})},Z=t=>{let r=!1,n=[],i=new TransformStream({transform(t,i){let a={type:t.type,data:new Uint8Array(t.data),timestamp:t.timestamp};"configuration"===a.type?(i.enqueue(a),r=!0,n.length>0&&(n.forEach(t=>i.enqueue(t)),n=[])):"data"===a.type?r?i.enqueue(a):n.push(a):i.enqueue(a)}});return new ReadableStream({start(t){let r=!1,n=n=>{if(!r)try{t.enqueue(n)}catch(t){console.error("error occurred while enqueuing video data:",t),r=!0,o()}},i=n=>{console.error("stream error:",n),r||(t.error(Error(n.message)),r=!0,o())},a=()=>{r||(t.close(),r=!0,o())},o=()=>{D.current&&(D.current.off("video-data",n),D.current.off("error",i),D.current.off("disconnect",a))};return D.current&&(D.current.on("video-data",n),D.current.on("error",i),D.current.on("disconnect",a)),()=>{r=!0,o()}}}).pipeThrough(i)},X=async()=>{if(z.current)try{let t=await z.current.snapshot();if(t){let r=URL.createObjectURL(t),n=document.createElement("a");n.href=r,n.download=`screenshot_${new Date().toISOString().replace(/:/g,"-")}.png`,n.click(),URL.revokeObjectURL(r)}}catch(t){console.error("screenshot failed:",t),alert("screenshot failed")}},Y=(0,m.useCallback)(()=>{if(z.current)try{z.current.dispose(),z.current=null}catch(t){console.error("Error disposing decoder:",t)}U.current&&V(U.current.querySelector(".canvas-wrapper")),D.current&&(D.current.disconnect(),D.current=null),G.current&&(clearTimeout(G.current),G.current=null),H.current&&(clearTimeout(H.current),H.current=null),A(!1),b(!1),T(null)},[V]);(0,m.useImperativeHandle)(r,()=>({disconnectDevice:Y}),[Y]);let J=(0,m.useCallback)(async()=>{try{if(Y(),A(!1),b(!0),T(null),await new Promise(t=>setTimeout(t,150)),!n){console.error("Cannot connect: missing server URL"),b(!1),null==d||d(!1);return}let t=()=>{H.current&&(clearTimeout(H.current),H.current=null),H.current=setTimeout(()=>{var r;if(null==(r=D.current)?void 0:r.connected)try{D.current.emit("connect-device",{maxSize:a}),t()}catch(t){console.error("Failed to request connection:",t),null==d||d(!1),c.ZP.error("connection request failed, please refresh the page")}else{null==d||d(!1);try{D.current&&setTimeout(()=>{D.current&&D.current.connect()},500)}catch(t){console.error("Failed to reconnect:",t),c.ZP.error("reconnection failed, please refresh the page")}}},5e3)};if(D.current)D.current.connected?(D.current.emit("connect-device",{maxSize:a}),t()):D.current.connect();else try{D.current=(0,g.io)(n,{withCredentials:!0,reconnection:!0,reconnectionAttempts:5,reconnectionDelay:1e3,timeout:1e4}),D.current.on("connect",()=>{var r,n;null==d||d(!0),(null==(r=D.current)?void 0:r.id)&&L(D.current.id),G.current&&(clearTimeout(G.current),G.current=null),null==(n=D.current)||n.emit("connect-device",{maxSize:a}),t()}),D.current.on("video-metadata",async t=>{try{if(H.current&&(clearTimeout(H.current),H.current=null),z.current)try{z.current.dispose(),z.current=null}catch(t){console.error("Error disposing old decoder:",t)}if(U.current){let t=U.current.querySelector(".canvas-wrapper");V(t)}let r=(null==t?void 0:t.codec)?t.codec:E.W.H264;if(z.current=await K(r),!z.current)throw Error("Failed to create decoder");z.current.sizeChanged(t=>{let{width:r,height:n}=t;T({width:r,height:n})}),Z(t).pipeTo(z.current.writable).catch(t=>{console.error("video stream processing error:",t),null==d||d(!1)}),A(!0),b(!1),null==d||d(!0)}catch(t){console.error("Failed to initialize decoder:",t),b(!1),null==d||d(!1)}}),D.current.on("error",t=>{console.error("server error:",t),c.ZP.error("server error"),b(!1),null==d||d(!1),H.current&&(clearTimeout(H.current),H.current=null)}),D.current.on("disconnect",()=>{A(!1),null==d||d(!1),H.current&&(clearTimeout(H.current),H.current=null),z.current&&(z.current.dispose(),z.current=null),U.current&&V(U.current.querySelector(".canvas-wrapper")),s&&!G.current&&(G.current=setTimeout(()=>{G.current=null,J()},u))})}catch(t){console.error("Failed to create socket connection:",t),b(!1),null==d||d(!1),s&&!G.current&&(G.current=setTimeout(()=>{G.current=null,J()},u))}}catch(t){b(!1),null==d||d(!1),console.error(`Failed to connect: ${t.message}`),c.ZP.error("connection failed"),s&&!G.current&&(G.current=setTimeout(()=>{G.current=null,J()},u))}},[n,a,s,u,d,Y]);return(0,m.useEffect)(()=>{if(o&&!y&&!h){let t=setTimeout(()=>{J()},300);return()=>clearTimeout(t)}},[o,y,h,J]),(0,m.useEffect)(()=>()=>{if(null==d||d(!1),z.current)try{z.current.dispose(),z.current=null}catch(t){console.error("Error disposing decoder during unmount:",t)}if(U.current)try{let t=U.current.querySelector(".canvas-wrapper");t&&(t.innerHTML="")}catch(t){console.error("Error clearing canvas wrapper during unmount:",t)}D.current&&(D.current.disconnect(),D.current=null),G.current&&(clearTimeout(G.current),G.current=null),H.current&&(clearTimeout(H.current),H.current=null)},[d]),(0,i.jsx)("div",{className:"scrcpy-container",children:(0,i.jsxs)(k.Z,{children:[y&&(0,i.jsxs)("div",{className:"header-bar",children:[(0,i.jsxs)("div",{className:"header-left",children:[(0,i.jsx)(N,{style:{fontWeight:600,fontSize:12},children:"Screen Projection"}),(0,i.jsx)(P.Z,{placement:"bottom",title:`Device ID: ${B||"Unknown"}`,children:(0,i.jsx)(x.Z,{})})]}),(0,i.jsx)("div",{className:"screen-info",children:(0,i.jsxs)(N,{type:"secondary",children:["size : ",null==w?void 0:w.width,"\xd7",null==w?void 0:w.height]})}),(0,i.jsxs)("div",{className:"header-right",children:[(0,i.jsx)(P.Z,{placement:"bottom",title:"Screenshot",children:(0,i.jsx)(v.ZP,{icon:(0,i.jsx)(M,{}),onClick:X})}),(0,i.jsx)(_.Z,{type:"vertical",style:{margin:"0 16px"}}),(0,i.jsx)(P.Z,{placement:"bottom",title:"Connect Device",children:(0,i.jsx)(v.ZP,{disabled:y,style:{backgroundColor:"#fff"},icon:(0,i.jsx)(O,{}),onClick:J})}),y&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(_.Z,{type:"vertical",style:{margin:"0 16px"}}),(0,i.jsx)(P.Z,{title:"Disconnect Device",children:(0,i.jsx)(v.ZP,{icon:(0,i.jsx)(j,{}),onClick:Y})})]})]})]}),(0,i.jsx)(f.Z,{gutter:[16,16],children:(0,i.jsx)(p.Z,{span:24,children:(0,i.jsx)("div",{className:"video-section",children:(0,i.jsxs)("div",{ref:U,className:"video-container",children:[(0,i.jsx)("div",{className:"canvas-wrapper"}),!y&&q&&(0,i.jsxs)("div",{className:"empty-state",children:[(0,i.jsx)("div",{className:"empty-state-icon",children:"\uD83D\uDCF1"}),(0,i.jsx)("div",{className:"empty-state-text",children:h?"Connecting to device...":"No device connected"}),!h&&(0,i.jsx)(v.ZP,{type:"primary",onClick:()=>{J()},children:"Connect now"}),h&&(0,i.jsx)("div",{className:"loading-spinner",children:(0,i.jsx)(R.Z,{size:"large"})})]}),!q&&(0,i.jsx)("span",{children:"Please launch playground server!"})]})})})})]})})}),{Content:L}=u.Z,D=`http://localhost:${o.SCRCPY_SERVER_PORT}`;function U(){let[t]=d.Z.useForm(),r=d.Z.useWatch("type",t),[n,a]=(0,m.useState)(!1),[o,b]=(0,m.useState)(null),[y,_]=(0,m.useState)(!1),[v,A]=(0,m.useState)([]),[x,E]=(0,m.useState)(!0),S=(0,m.useRef)(null),[C,I]=c.ZP.useMessage(),[T,k]=(0,m.useState)(!1),[P,R]=(0,m.useState)({result:void 0,dump:null,reportHTML:null,error:null}),[O,M]=(0,m.useState)(0),[j,N]=(0,m.useState)(null),{config:U,deepThink:F}=(0,l.useEnvConfig)(),[z,G]=(0,m.useState)(""),H=(0,m.useRef)(null),q=(0,m.useRef)(null),V=Object.keys(U||{}).length>=1,W=(0,l.useServerValid)(!0),$=(0,m.useRef)(null),K=(0,m.useRef)(null),Z=(0,m.useCallback)(()=>{q.current&&(clearInterval(q.current),q.current=null)},[]);(0,m.useEffect)(()=>{let t=(0,g.io)(D,{withCredentials:!0,reconnectionAttempts:5,reconnectionDelay:1e3,timeout:5e3});t.on("connect",()=>{t.emit("get-devices")}),t.on("disconnect",t=>{E(!0)}),t.on("devices-list",t=>{A(t.devices),t.currentDeviceId&&(b(t.currentDeviceId),1===t.devices.length&&X(t.devices[0].id,!0)),E(!1)}),t.on("global-device-switched",t=>{b(t.deviceId)}),t.on("connect_error",t=>{console.error("Socket.IO connection error:",t),C.error("Waiting for device server connection, please try again later"),E(!1)}),t.on("error",t=>{console.error("Socket.IO error:",t),C.error(`Error occurred while communicating with the server: ${t.message||"Unknown error"}`)}),$.current=t;let r=setTimeout(()=>{t.connected&&t.emit("get-devices")},2e3);return()=>{clearTimeout(r),t.disconnect()}},[C]);let X=(0,m.useCallback)(function(t){let r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(t!==S.current){if(!$.current||!$.current.connected)return void C.warning("Waiting for device server connection, please try again later");_(!1),k(!1),R(null),N(null),a(!1),Z(),setTimeout(()=>{if(b(t),S.current=t,E(!0),$.current){$.current.emit("switch-device",t);let n=setTimeout(()=>{E(!1),C.error("Device switch timeout, please try again")},1e4);$.current.once("device-switched",()=>{clearTimeout(n),E(!1),setTimeout(()=>{_(!0),r||C.success(`Device selected: ${t}`)},500)}),$.current.once("error",t=>{clearTimeout(n),E(!1),C.error(`Device switch failed: ${t.message}`)})}else E(!1),C.error("Socket connection lost, please refresh the page")},500)}},[C,Z]),Y=(0,m.useCallback)(t=>{Z(),q.current=setInterval(async()=>{try{let r=await (0,l.getTaskProgress)(t);r.tip&&G(r.tip)}catch(t){console.error("Failed to poll task progress:",t)}},500)},[Z]);(0,m.useEffect)(()=>()=>{Z()},[Z]);let J=(0,m.useCallback)(t=>{k(t),t&&o&&!y&&setTimeout(()=>{_(!0)},100)},[o]);(0,m.useEffect)(()=>{if(y){let t=setTimeout(()=>{o===S.current&&_(!1)},800);return()=>clearTimeout(t)}},[y,o]),(0,m.useEffect)(()=>{(0,s.overrideAIConfig)(U),(0,l.overrideServerConfig)(U)},[U]);let Q=(0,m.useCallback)(async()=>{if(!o)return void C.warning("Please select a device first");if(!T)return void C.warning("Waiting for connection establishment, please try again later");a(!0),R(null),N(null),G("");let{type:r,prompt:n}=t.getFieldsValue(),i=Date.now().toString();H.current=i,Y(i);try{let t=await (0,l.requestPlaygroundServer)(o,r,n,{requestId:i,deepThink:F});if(Z(),R(t),a(!1),!t)throw Error("server returned empty response");if((null==t?void 0:t.dump)&&!["aiQuery","aiAssert"].includes(r)){let r=(0,l.allScriptsFromDump)(t.dump);N(r),M(t=>t+1)}else N(null);C.success("Command executed")}catch(t){Z(),a(!1),console.error("execute command error:",t),C.error(`Command execution failed: ${t instanceof Error?t.message:"Unknown error"}`)}},[o,C,T,t,Y,Z,F]),ee=()=>{R(null),N(null),a(!1)},et=(0,m.useCallback)(async()=>{Z(),a(!1),ee(),H.current&&await (0,l.cancelTask)(H.current),C.info("Operation stopped")},[C,Z]);return(0,i.jsxs)(h.ZP,{theme:(0,l.globalThemeConfig)(),children:[I,(0,i.jsx)(u.Z,{className:"app-container playground-container vertical-mode",children:(0,i.jsx)(L,{className:"app-content",children:(0,i.jsx)("div",{className:"app-grid-layout",children:(0,i.jsxs)(f.Z,{className:"app-grid-layout",children:[(0,i.jsx)(p.Z,{className:"app-panel left-panel",children:(0,i.jsxs)("div",{className:"panel-content left-panel-content",children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"10px"},children:[(0,i.jsx)(l.Logo,{}),(0,i.jsx)(l.EnvConfig,{})]}),(0,i.jsx)("h2",{children:"Command input"}),(0,i.jsx)(d.Z,{form:t,className:"command-form",children:(0,i.jsxs)("div",{className:"form-content",children:[(0,i.jsx)("div",{className:"command-input-wrapper",children:(0,i.jsx)(l.PromptInput,{runButtonEnabled:!!o&&V,form:t,serviceMode:"Server",selectedType:r,dryMode:!1,stoppable:n,loading:n,onRun:Q,onStop:et})}),(0,i.jsx)("div",{className:"result-container",style:P?{}:{border:"1px solid #0000001f",borderRadius:"8px"},children:(0,i.jsx)(l.PlaygroundResultView,{result:P,loading:n,serverValid:W,serviceMode:"Server",replayScriptsInfo:j,replayCounter:O,loadingProgressText:z,verticalMode:!1,notReadyMessage:(0,i.jsxs)("span",{children:["Don't worry, just one more step to launch the playground server.",(0,i.jsx)("br",{}),(0,i.jsx)("strong",{children:"npx --yes @midscene/android-playground"})]})})})]})})]})}),(0,i.jsx)(p.Z,{className:"app-panel right-panel",children:(0,i.jsxs)("div",{className:"panel-content right-panel-content",children:[(0,i.jsx)(w,{devices:v,loadingDevices:x,selectedDeviceId:o,onDeviceSelect:X,socketRef:$,scrcpyPlayerRef:K}),(0,i.jsx)(B,{ref:K,serverUrl:D,autoConnect:y,onConnectionStatusChange:J})]})})]})})})})]})}let F=document.getElementById("root");F&&a.createRoot(F).render((0,i.jsx)(U,{}))},7752:function(t,r,n){n.r(r),n.d(r,{default:()=>i});let i={}}},__webpack_module_cache__={};function __webpack_require__(t){var r=__webpack_module_cache__[t];if(void 0!==r)return r.exports;var n=__webpack_module_cache__[t]={exports:{}};return __webpack_modules__[t].call(n.exports,n,n.exports,__webpack_require__),n.exports}__webpack_require__.m=__webpack_modules__,(()=>{__webpack_require__.n=t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return __webpack_require__.d(r,{a:r}),r}})(),(()=>{var t,r=Object.getPrototypeOf?t=>Object.getPrototypeOf(t):t=>t.__proto__;__webpack_require__.t=function(n,i){if(1&i&&(n=this(n)),8&i||"object"==typeof n&&n&&(4&i&&n.__esModule||16&i&&"function"==typeof n.then))return n;var a=Object.create(null);__webpack_require__.r(a);var o={};t=t||[null,r({}),r([]),r(r)];for(var s=2&i&&n;"object"==typeof s&&!~t.indexOf(s);s=r(s))Object.getOwnPropertyNames(s).forEach(t=>{o[t]=()=>n[t]});return o.default=()=>n,__webpack_require__.d(a,o),a}})(),(()=>{__webpack_require__.d=(t,r)=>{for(var n in r)__webpack_require__.o(r,n)&&!__webpack_require__.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})}})(),(()=>{__webpack_require__.u=t=>"static/js/async/"+t+".834644b5.js"})(),(()=>{__webpack_require__.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(t){if("object"==typeof window)return window}})()})(),(()=>{__webpack_require__.o=(t,r)=>Object.prototype.hasOwnProperty.call(t,r)})(),(()=>{__webpack_require__.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}})(),(()=>{var t=[];__webpack_require__.O=(r,n,i,a)=>{if(n){a=a||0;for(var o=t.length;o>0&&t[o-1][2]>a;o--)t[o]=t[o-1];t[o]=[n,i,a];return}for(var s=1/0,o=0;o<t.length;o++){for(var[n,i,a]=t[o],l=!0,u=0;u<n.length;u++)(!1&a||s>=a)&&Object.keys(__webpack_require__.O).every(t=>__webpack_require__.O[t](n[u]))?n.splice(u--,1):(l=!1,a<s&&(s=a));if(l){t.splice(o--,1);var d=i();void 0!==d&&(r=d)}}return r}})(),(()=>{__webpack_require__.p="/"})(),(()=>{__webpack_require__.rv=()=>"1.3.12"})(),(()=>{__webpack_require__.b=document.baseURI||self.location.href;var t={980:0};__webpack_require__.O.j=r=>0===t[r];var r=(r,n)=>{var i,a,[o,s,l]=n,u=0;if(o.some(r=>0!==t[r])){for(i in s)__webpack_require__.o(s,i)&&(__webpack_require__.m[i]=s[i]);if(l)var d=l(__webpack_require__)}for(r&&r(n);u<o.length;u++)a=o[u],__webpack_require__.o(t,a)&&t[a]&&t[a][0](),t[a]=0;return __webpack_require__.O(d)},n=self.webpackChunkandroid_playground=self.webpackChunkandroid_playground||[];n.forEach(r.bind(null,0)),n.push=r.bind(null,n.push.bind(n))})(),(()=>{__webpack_require__.ruid="bundler=rspack@1.3.12"})();var __webpack_exports__=__webpack_require__.O(void 0,["361","770"],function(){return __webpack_require__(9084)});__webpack_exports__=__webpack_require__.O(__webpack_exports__)})();
|
|
907
|
-
//# sourceMappingURL=index.
|
|
878
|
+
//# sourceMappingURL=index.df45cc29.js.map
|