diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c5bcb54 --- /dev/null +++ b/.gitignore @@ -0,0 +1,106 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# docs/ diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..4c32d74 --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +registry=https://registry.npmmirror.com +auto-install-peers = true \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..bbabebc --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,10 @@ +{ + "tabWidth": 2, + "useTabs": false, + "endOfLine": "auto", + "singleQuote": true, + "semi": true, + "trailingComma": "none", + "bracketSpacing": true, + "printWidth": 160 +} diff --git a/.vitepress/cache/deps/_metadata.json b/.vitepress/cache/deps/_metadata.json new file mode 100644 index 0000000..2fb90f2 --- /dev/null +++ b/.vitepress/cache/deps/_metadata.json @@ -0,0 +1,19 @@ +{ + "hash": "92263481", + "browserHash": "61214b4d", + "optimized": { + "vue": { + "src": "../../../node_modules/.pnpm/vue@3.3.11/node_modules/vue/dist/vue.runtime.esm-bundler.js", + "file": "vue.js", + "fileHash": "faa725aa", + "needsInterop": false + }, + "vitepress > @vue/devtools-api": { + "src": "../../../node_modules/.pnpm/@vue+devtools-api@6.5.1/node_modules/@vue/devtools-api/lib/esm/index.js", + "file": "vitepress___@vue_devtools-api.js", + "fileHash": "e1aabb22", + "needsInterop": false + } + }, + "chunks": {} +} \ No newline at end of file diff --git a/.vitepress/cache/deps/chunk-OOO2W3XR.js b/.vitepress/cache/deps/chunk-OOO2W3XR.js new file mode 100644 index 0000000..a2fa676 --- /dev/null +++ b/.vitepress/cache/deps/chunk-OOO2W3XR.js @@ -0,0 +1,11402 @@ +// node_modules/.pnpm/@vue+shared@3.4.21/node_modules/@vue/shared/dist/shared.esm-bundler.js +function makeMap(str, expectsLowerCase) { + const set2 = new Set(str.split(",")); + return expectsLowerCase ? (val) => set2.has(val.toLowerCase()) : (val) => set2.has(val); +} +var EMPTY_OBJ = true ? Object.freeze({}) : {}; +var EMPTY_ARR = true ? Object.freeze([]) : []; +var NOOP = () => { +}; +var NO = () => false; +var isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter +(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97); +var isModelListener = (key) => key.startsWith("onUpdate:"); +var extend = Object.assign; +var remove = (arr, el) => { + const i = arr.indexOf(el); + if (i > -1) { + arr.splice(i, 1); + } +}; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var hasOwn = (val, key) => hasOwnProperty.call(val, key); +var isArray = Array.isArray; +var isMap = (val) => toTypeString(val) === "[object Map]"; +var isSet = (val) => toTypeString(val) === "[object Set]"; +var isDate = (val) => toTypeString(val) === "[object Date]"; +var isRegExp = (val) => toTypeString(val) === "[object RegExp]"; +var isFunction = (val) => typeof val === "function"; +var isString = (val) => typeof val === "string"; +var isSymbol = (val) => typeof val === "symbol"; +var isObject = (val) => val !== null && typeof val === "object"; +var isPromise = (val) => { + return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch); +}; +var objectToString = Object.prototype.toString; +var toTypeString = (value) => objectToString.call(value); +var toRawType = (value) => { + return toTypeString(value).slice(8, -1); +}; +var isPlainObject = (val) => toTypeString(val) === "[object Object]"; +var isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key; +var isReservedProp = makeMap( + // the leading comma is intentional so empty string "" is also included + ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted" +); +var isBuiltInDirective = makeMap( + "bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo" +); +var cacheStringFunction = (fn) => { + const cache = /* @__PURE__ */ Object.create(null); + return (str) => { + const hit = cache[str]; + return hit || (cache[str] = fn(str)); + }; +}; +var camelizeRE = /-(\w)/g; +var camelize = cacheStringFunction((str) => { + return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ""); +}); +var hyphenateRE = /\B([A-Z])/g; +var hyphenate = cacheStringFunction( + (str) => str.replace(hyphenateRE, "-$1").toLowerCase() +); +var capitalize = cacheStringFunction((str) => { + return str.charAt(0).toUpperCase() + str.slice(1); +}); +var toHandlerKey = cacheStringFunction((str) => { + const s = str ? `on${capitalize(str)}` : ``; + return s; +}); +var hasChanged = (value, oldValue) => !Object.is(value, oldValue); +var invokeArrayFns = (fns, arg) => { + for (let i = 0; i < fns.length; i++) { + fns[i](arg); + } +}; +var def = (obj, key, value) => { + Object.defineProperty(obj, key, { + configurable: true, + enumerable: false, + value + }); +}; +var looseToNumber = (val) => { + const n = parseFloat(val); + return isNaN(n) ? val : n; +}; +var toNumber = (val) => { + const n = isString(val) ? Number(val) : NaN; + return isNaN(n) ? val : n; +}; +var _globalThis; +var getGlobalThis = () => { + return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {}); +}; +var GLOBALS_ALLOWED = "Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error"; +var isGloballyAllowed = makeMap(GLOBALS_ALLOWED); +function normalizeStyle(value) { + if (isArray(value)) { + const res = {}; + for (let i = 0; i < value.length; i++) { + const item = value[i]; + const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item); + if (normalized) { + for (const key in normalized) { + res[key] = normalized[key]; + } + } + } + return res; + } else if (isString(value) || isObject(value)) { + return value; + } +} +var listDelimiterRE = /;(?![^(]*\))/g; +var propertyDelimiterRE = /:([^]+)/; +var styleCommentRE = /\/\*[^]*?\*\//g; +function parseStringStyle(cssText) { + const ret = {}; + cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => { + if (item) { + const tmp = item.split(propertyDelimiterRE); + tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); + } + }); + return ret; +} +function stringifyStyle(styles) { + let ret = ""; + if (!styles || isString(styles)) { + return ret; + } + for (const key in styles) { + const value = styles[key]; + const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key); + if (isString(value) || typeof value === "number") { + ret += `${normalizedKey}:${value};`; + } + } + return ret; +} +function normalizeClass(value) { + let res = ""; + if (isString(value)) { + res = value; + } else if (isArray(value)) { + for (let i = 0; i < value.length; i++) { + const normalized = normalizeClass(value[i]); + if (normalized) { + res += normalized + " "; + } + } + } else if (isObject(value)) { + for (const name in value) { + if (value[name]) { + res += name + " "; + } + } + } + return res.trim(); +} +function normalizeProps(props) { + if (!props) + return null; + let { class: klass, style } = props; + if (klass && !isString(klass)) { + props.class = normalizeClass(klass); + } + if (style) { + props.style = normalizeStyle(style); + } + return props; +} +var HTML_TAGS = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot"; +var SVG_TAGS = "svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view"; +var MATH_TAGS = "annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics"; +var VOID_TAGS = "area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr"; +var isHTMLTag = makeMap(HTML_TAGS); +var isSVGTag = makeMap(SVG_TAGS); +var isMathMLTag = makeMap(MATH_TAGS); +var isVoidTag = makeMap(VOID_TAGS); +var specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`; +var isSpecialBooleanAttr = makeMap(specialBooleanAttrs); +var isBooleanAttr = makeMap( + specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected` +); +function includeBooleanAttr(value) { + return !!value || value === ""; +} +var isKnownHtmlAttr = makeMap( + `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap` +); +var isKnownSvgAttr = makeMap( + `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan` +); +function isRenderableAttrValue(value) { + if (value == null) { + return false; + } + const type = typeof value; + return type === "string" || type === "number" || type === "boolean"; +} +function looseCompareArrays(a, b) { + if (a.length !== b.length) + return false; + let equal = true; + for (let i = 0; equal && i < a.length; i++) { + equal = looseEqual(a[i], b[i]); + } + return equal; +} +function looseEqual(a, b) { + if (a === b) + return true; + let aValidType = isDate(a); + let bValidType = isDate(b); + if (aValidType || bValidType) { + return aValidType && bValidType ? a.getTime() === b.getTime() : false; + } + aValidType = isSymbol(a); + bValidType = isSymbol(b); + if (aValidType || bValidType) { + return a === b; + } + aValidType = isArray(a); + bValidType = isArray(b); + if (aValidType || bValidType) { + return aValidType && bValidType ? looseCompareArrays(a, b) : false; + } + aValidType = isObject(a); + bValidType = isObject(b); + if (aValidType || bValidType) { + if (!aValidType || !bValidType) { + return false; + } + const aKeysCount = Object.keys(a).length; + const bKeysCount = Object.keys(b).length; + if (aKeysCount !== bKeysCount) { + return false; + } + for (const key in a) { + const aHasKey = a.hasOwnProperty(key); + const bHasKey = b.hasOwnProperty(key); + if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) { + return false; + } + } + } + return String(a) === String(b); +} +function looseIndexOf(arr, val) { + return arr.findIndex((item) => looseEqual(item, val)); +} +var toDisplayString = (val) => { + return isString(val) ? val : val == null ? "" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val); +}; +var replacer = (_key, val) => { + if (val && val.__v_isRef) { + return replacer(_key, val.value); + } else if (isMap(val)) { + return { + [`Map(${val.size})`]: [...val.entries()].reduce( + (entries, [key, val2], i) => { + entries[stringifySymbol(key, i) + " =>"] = val2; + return entries; + }, + {} + ) + }; + } else if (isSet(val)) { + return { + [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v)) + }; + } else if (isSymbol(val)) { + return stringifySymbol(val); + } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) { + return String(val); + } + return val; +}; +var stringifySymbol = (v, i = "") => { + var _a; + return isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v; +}; + +// node_modules/.pnpm/@vue+reactivity@3.4.21/node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js +function warn(msg, ...args) { + console.warn(`[Vue warn] ${msg}`, ...args); +} +var activeEffectScope; +var EffectScope = class { + constructor(detached = false) { + this.detached = detached; + this._active = true; + this.effects = []; + this.cleanups = []; + this.parent = activeEffectScope; + if (!detached && activeEffectScope) { + this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push( + this + ) - 1; + } + } + get active() { + return this._active; + } + run(fn) { + if (this._active) { + const currentEffectScope = activeEffectScope; + try { + activeEffectScope = this; + return fn(); + } finally { + activeEffectScope = currentEffectScope; + } + } else if (true) { + warn(`cannot run an inactive effect scope.`); + } + } + /** + * This should only be called on non-detached scopes + * @internal + */ + on() { + activeEffectScope = this; + } + /** + * This should only be called on non-detached scopes + * @internal + */ + off() { + activeEffectScope = this.parent; + } + stop(fromParent) { + if (this._active) { + let i, l; + for (i = 0, l = this.effects.length; i < l; i++) { + this.effects[i].stop(); + } + for (i = 0, l = this.cleanups.length; i < l; i++) { + this.cleanups[i](); + } + if (this.scopes) { + for (i = 0, l = this.scopes.length; i < l; i++) { + this.scopes[i].stop(true); + } + } + if (!this.detached && this.parent && !fromParent) { + const last = this.parent.scopes.pop(); + if (last && last !== this) { + this.parent.scopes[this.index] = last; + last.index = this.index; + } + } + this.parent = void 0; + this._active = false; + } + } +}; +function effectScope(detached) { + return new EffectScope(detached); +} +function recordEffectScope(effect2, scope = activeEffectScope) { + if (scope && scope.active) { + scope.effects.push(effect2); + } +} +function getCurrentScope() { + return activeEffectScope; +} +function onScopeDispose(fn) { + if (activeEffectScope) { + activeEffectScope.cleanups.push(fn); + } else if (true) { + warn( + `onScopeDispose() is called when there is no active effect scope to be associated with.` + ); + } +} +var activeEffect; +var ReactiveEffect = class { + constructor(fn, trigger2, scheduler, scope) { + this.fn = fn; + this.trigger = trigger2; + this.scheduler = scheduler; + this.active = true; + this.deps = []; + this._dirtyLevel = 4; + this._trackId = 0; + this._runnings = 0; + this._shouldSchedule = false; + this._depsLength = 0; + recordEffectScope(this, scope); + } + get dirty() { + if (this._dirtyLevel === 2 || this._dirtyLevel === 3) { + this._dirtyLevel = 1; + pauseTracking(); + for (let i = 0; i < this._depsLength; i++) { + const dep = this.deps[i]; + if (dep.computed) { + triggerComputed(dep.computed); + if (this._dirtyLevel >= 4) { + break; + } + } + } + if (this._dirtyLevel === 1) { + this._dirtyLevel = 0; + } + resetTracking(); + } + return this._dirtyLevel >= 4; + } + set dirty(v) { + this._dirtyLevel = v ? 4 : 0; + } + run() { + this._dirtyLevel = 0; + if (!this.active) { + return this.fn(); + } + let lastShouldTrack = shouldTrack; + let lastEffect = activeEffect; + try { + shouldTrack = true; + activeEffect = this; + this._runnings++; + preCleanupEffect(this); + return this.fn(); + } finally { + postCleanupEffect(this); + this._runnings--; + activeEffect = lastEffect; + shouldTrack = lastShouldTrack; + } + } + stop() { + var _a; + if (this.active) { + preCleanupEffect(this); + postCleanupEffect(this); + (_a = this.onStop) == null ? void 0 : _a.call(this); + this.active = false; + } + } +}; +function triggerComputed(computed3) { + return computed3.value; +} +function preCleanupEffect(effect2) { + effect2._trackId++; + effect2._depsLength = 0; +} +function postCleanupEffect(effect2) { + if (effect2.deps.length > effect2._depsLength) { + for (let i = effect2._depsLength; i < effect2.deps.length; i++) { + cleanupDepEffect(effect2.deps[i], effect2); + } + effect2.deps.length = effect2._depsLength; + } +} +function cleanupDepEffect(dep, effect2) { + const trackId = dep.get(effect2); + if (trackId !== void 0 && effect2._trackId !== trackId) { + dep.delete(effect2); + if (dep.size === 0) { + dep.cleanup(); + } + } +} +function effect(fn, options) { + if (fn.effect instanceof ReactiveEffect) { + fn = fn.effect.fn; + } + const _effect = new ReactiveEffect(fn, NOOP, () => { + if (_effect.dirty) { + _effect.run(); + } + }); + if (options) { + extend(_effect, options); + if (options.scope) + recordEffectScope(_effect, options.scope); + } + if (!options || !options.lazy) { + _effect.run(); + } + const runner = _effect.run.bind(_effect); + runner.effect = _effect; + return runner; +} +function stop(runner) { + runner.effect.stop(); +} +var shouldTrack = true; +var pauseScheduleStack = 0; +var trackStack = []; +function pauseTracking() { + trackStack.push(shouldTrack); + shouldTrack = false; +} +function resetTracking() { + const last = trackStack.pop(); + shouldTrack = last === void 0 ? true : last; +} +function pauseScheduling() { + pauseScheduleStack++; +} +function resetScheduling() { + pauseScheduleStack--; + while (!pauseScheduleStack && queueEffectSchedulers.length) { + queueEffectSchedulers.shift()(); + } +} +function trackEffect(effect2, dep, debuggerEventExtraInfo) { + var _a; + if (dep.get(effect2) !== effect2._trackId) { + dep.set(effect2, effect2._trackId); + const oldDep = effect2.deps[effect2._depsLength]; + if (oldDep !== dep) { + if (oldDep) { + cleanupDepEffect(oldDep, effect2); + } + effect2.deps[effect2._depsLength++] = dep; + } else { + effect2._depsLength++; + } + if (true) { + (_a = effect2.onTrack) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo)); + } + } +} +var queueEffectSchedulers = []; +function triggerEffects(dep, dirtyLevel, debuggerEventExtraInfo) { + var _a; + pauseScheduling(); + for (const effect2 of dep.keys()) { + let tracking; + if (effect2._dirtyLevel < dirtyLevel && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) { + effect2._shouldSchedule || (effect2._shouldSchedule = effect2._dirtyLevel === 0); + effect2._dirtyLevel = dirtyLevel; + } + if (effect2._shouldSchedule && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) { + if (true) { + (_a = effect2.onTrigger) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo)); + } + effect2.trigger(); + if ((!effect2._runnings || effect2.allowRecurse) && effect2._dirtyLevel !== 2) { + effect2._shouldSchedule = false; + if (effect2.scheduler) { + queueEffectSchedulers.push(effect2.scheduler); + } + } + } + } + resetScheduling(); +} +var createDep = (cleanup, computed3) => { + const dep = /* @__PURE__ */ new Map(); + dep.cleanup = cleanup; + dep.computed = computed3; + return dep; +}; +var targetMap = /* @__PURE__ */ new WeakMap(); +var ITERATE_KEY = Symbol(true ? "iterate" : ""); +var MAP_KEY_ITERATE_KEY = Symbol(true ? "Map key iterate" : ""); +function track(target, type, key) { + if (shouldTrack && activeEffect) { + let depsMap = targetMap.get(target); + if (!depsMap) { + targetMap.set(target, depsMap = /* @__PURE__ */ new Map()); + } + let dep = depsMap.get(key); + if (!dep) { + depsMap.set(key, dep = createDep(() => depsMap.delete(key))); + } + trackEffect( + activeEffect, + dep, + true ? { + target, + type, + key + } : void 0 + ); + } +} +function trigger(target, type, key, newValue, oldValue, oldTarget) { + const depsMap = targetMap.get(target); + if (!depsMap) { + return; + } + let deps = []; + if (type === "clear") { + deps = [...depsMap.values()]; + } else if (key === "length" && isArray(target)) { + const newLength = Number(newValue); + depsMap.forEach((dep, key2) => { + if (key2 === "length" || !isSymbol(key2) && key2 >= newLength) { + deps.push(dep); + } + }); + } else { + if (key !== void 0) { + deps.push(depsMap.get(key)); + } + switch (type) { + case "add": + if (!isArray(target)) { + deps.push(depsMap.get(ITERATE_KEY)); + if (isMap(target)) { + deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } else if (isIntegerKey(key)) { + deps.push(depsMap.get("length")); + } + break; + case "delete": + if (!isArray(target)) { + deps.push(depsMap.get(ITERATE_KEY)); + if (isMap(target)) { + deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)); + } + } + break; + case "set": + if (isMap(target)) { + deps.push(depsMap.get(ITERATE_KEY)); + } + break; + } + } + pauseScheduling(); + for (const dep of deps) { + if (dep) { + triggerEffects( + dep, + 4, + true ? { + target, + type, + key, + newValue, + oldValue, + oldTarget + } : void 0 + ); + } + } + resetScheduling(); +} +function getDepFromReactive(object, key) { + var _a; + return (_a = targetMap.get(object)) == null ? void 0 : _a.get(key); +} +var isNonTrackableKeys = makeMap(`__proto__,__v_isRef,__isVue`); +var builtInSymbols = new Set( + Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol) +); +var arrayInstrumentations = createArrayInstrumentations(); +function createArrayInstrumentations() { + const instrumentations = {}; + ["includes", "indexOf", "lastIndexOf"].forEach((key) => { + instrumentations[key] = function(...args) { + const arr = toRaw(this); + for (let i = 0, l = this.length; i < l; i++) { + track(arr, "get", i + ""); + } + const res = arr[key](...args); + if (res === -1 || res === false) { + return arr[key](...args.map(toRaw)); + } else { + return res; + } + }; + }); + ["push", "pop", "shift", "unshift", "splice"].forEach((key) => { + instrumentations[key] = function(...args) { + pauseTracking(); + pauseScheduling(); + const res = toRaw(this)[key].apply(this, args); + resetScheduling(); + resetTracking(); + return res; + }; + }); + return instrumentations; +} +function hasOwnProperty2(key) { + const obj = toRaw(this); + track(obj, "has", key); + return obj.hasOwnProperty(key); +} +var BaseReactiveHandler = class { + constructor(_isReadonly = false, _isShallow = false) { + this._isReadonly = _isReadonly; + this._isShallow = _isShallow; + } + get(target, key, receiver) { + const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow; + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_isShallow") { + return isShallow2; + } else if (key === "__v_raw") { + if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype + // this means the reciever is a user proxy of the reactive proxy + Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) { + return target; + } + return; + } + const targetIsArray = isArray(target); + if (!isReadonly2) { + if (targetIsArray && hasOwn(arrayInstrumentations, key)) { + return Reflect.get(arrayInstrumentations, key, receiver); + } + if (key === "hasOwnProperty") { + return hasOwnProperty2; + } + } + const res = Reflect.get(target, key, receiver); + if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { + return res; + } + if (!isReadonly2) { + track(target, "get", key); + } + if (isShallow2) { + return res; + } + if (isRef(res)) { + return targetIsArray && isIntegerKey(key) ? res : res.value; + } + if (isObject(res)) { + return isReadonly2 ? readonly(res) : reactive(res); + } + return res; + } +}; +var MutableReactiveHandler = class extends BaseReactiveHandler { + constructor(isShallow2 = false) { + super(false, isShallow2); + } + set(target, key, value, receiver) { + let oldValue = target[key]; + if (!this._isShallow) { + const isOldValueReadonly = isReadonly(oldValue); + if (!isShallow(value) && !isReadonly(value)) { + oldValue = toRaw(oldValue); + value = toRaw(value); + } + if (!isArray(target) && isRef(oldValue) && !isRef(value)) { + if (isOldValueReadonly) { + return false; + } else { + oldValue.value = value; + return true; + } + } + } + const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key); + const result = Reflect.set(target, key, value, receiver); + if (target === toRaw(receiver)) { + if (!hadKey) { + trigger(target, "add", key, value); + } else if (hasChanged(value, oldValue)) { + trigger(target, "set", key, value, oldValue); + } + } + return result; + } + deleteProperty(target, key) { + const hadKey = hasOwn(target, key); + const oldValue = target[key]; + const result = Reflect.deleteProperty(target, key); + if (result && hadKey) { + trigger(target, "delete", key, void 0, oldValue); + } + return result; + } + has(target, key) { + const result = Reflect.has(target, key); + if (!isSymbol(key) || !builtInSymbols.has(key)) { + track(target, "has", key); + } + return result; + } + ownKeys(target) { + track( + target, + "iterate", + isArray(target) ? "length" : ITERATE_KEY + ); + return Reflect.ownKeys(target); + } +}; +var ReadonlyReactiveHandler = class extends BaseReactiveHandler { + constructor(isShallow2 = false) { + super(true, isShallow2); + } + set(target, key) { + if (true) { + warn( + `Set operation on key "${String(key)}" failed: target is readonly.`, + target + ); + } + return true; + } + deleteProperty(target, key) { + if (true) { + warn( + `Delete operation on key "${String(key)}" failed: target is readonly.`, + target + ); + } + return true; + } +}; +var mutableHandlers = new MutableReactiveHandler(); +var readonlyHandlers = new ReadonlyReactiveHandler(); +var shallowReactiveHandlers = new MutableReactiveHandler( + true +); +var shallowReadonlyHandlers = new ReadonlyReactiveHandler(true); +var toShallow = (value) => value; +var getProto = (v) => Reflect.getPrototypeOf(v); +function get(target, key, isReadonly2 = false, isShallow2 = false) { + target = target["__v_raw"]; + const rawTarget = toRaw(target); + const rawKey = toRaw(key); + if (!isReadonly2) { + if (hasChanged(key, rawKey)) { + track(rawTarget, "get", key); + } + track(rawTarget, "get", rawKey); + } + const { has: has2 } = getProto(rawTarget); + const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive; + if (has2.call(rawTarget, key)) { + return wrap(target.get(key)); + } else if (has2.call(rawTarget, rawKey)) { + return wrap(target.get(rawKey)); + } else if (target !== rawTarget) { + target.get(key); + } +} +function has(key, isReadonly2 = false) { + const target = this["__v_raw"]; + const rawTarget = toRaw(target); + const rawKey = toRaw(key); + if (!isReadonly2) { + if (hasChanged(key, rawKey)) { + track(rawTarget, "has", key); + } + track(rawTarget, "has", rawKey); + } + return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey); +} +function size(target, isReadonly2 = false) { + target = target["__v_raw"]; + !isReadonly2 && track(toRaw(target), "iterate", ITERATE_KEY); + return Reflect.get(target, "size", target); +} +function add(value) { + value = toRaw(value); + const target = toRaw(this); + const proto = getProto(target); + const hadKey = proto.has.call(target, value); + if (!hadKey) { + target.add(value); + trigger(target, "add", value, value); + } + return this; +} +function set(key, value) { + value = toRaw(value); + const target = toRaw(this); + const { has: has2, get: get2 } = getProto(target); + let hadKey = has2.call(target, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has2.call(target, key); + } else if (true) { + checkIdentityKeys(target, has2, key); + } + const oldValue = get2.call(target, key); + target.set(key, value); + if (!hadKey) { + trigger(target, "add", key, value); + } else if (hasChanged(value, oldValue)) { + trigger(target, "set", key, value, oldValue); + } + return this; +} +function deleteEntry(key) { + const target = toRaw(this); + const { has: has2, get: get2 } = getProto(target); + let hadKey = has2.call(target, key); + if (!hadKey) { + key = toRaw(key); + hadKey = has2.call(target, key); + } else if (true) { + checkIdentityKeys(target, has2, key); + } + const oldValue = get2 ? get2.call(target, key) : void 0; + const result = target.delete(key); + if (hadKey) { + trigger(target, "delete", key, void 0, oldValue); + } + return result; +} +function clear() { + const target = toRaw(this); + const hadItems = target.size !== 0; + const oldTarget = true ? isMap(target) ? new Map(target) : new Set(target) : void 0; + const result = target.clear(); + if (hadItems) { + trigger(target, "clear", void 0, void 0, oldTarget); + } + return result; +} +function createForEach(isReadonly2, isShallow2) { + return function forEach(callback, thisArg) { + const observed = this; + const target = observed["__v_raw"]; + const rawTarget = toRaw(target); + const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive; + !isReadonly2 && track(rawTarget, "iterate", ITERATE_KEY); + return target.forEach((value, key) => { + return callback.call(thisArg, wrap(value), wrap(key), observed); + }); + }; +} +function createIterableMethod(method, isReadonly2, isShallow2) { + return function(...args) { + const target = this["__v_raw"]; + const rawTarget = toRaw(target); + const targetIsMap = isMap(rawTarget); + const isPair = method === "entries" || method === Symbol.iterator && targetIsMap; + const isKeyOnly = method === "keys" && targetIsMap; + const innerIterator = target[method](...args); + const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive; + !isReadonly2 && track( + rawTarget, + "iterate", + isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY + ); + return { + // iterator protocol + next() { + const { value, done } = innerIterator.next(); + return done ? { value, done } : { + value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), + done + }; + }, + // iterable protocol + [Symbol.iterator]() { + return this; + } + }; + }; +} +function createReadonlyMethod(type) { + return function(...args) { + if (true) { + const key = args[0] ? `on key "${args[0]}" ` : ``; + warn( + `${capitalize(type)} operation ${key}failed: target is readonly.`, + toRaw(this) + ); + } + return type === "delete" ? false : type === "clear" ? void 0 : this; + }; +} +function createInstrumentations() { + const mutableInstrumentations2 = { + get(key) { + return get(this, key); + }, + get size() { + return size(this); + }, + has, + add, + set, + delete: deleteEntry, + clear, + forEach: createForEach(false, false) + }; + const shallowInstrumentations2 = { + get(key) { + return get(this, key, false, true); + }, + get size() { + return size(this); + }, + has, + add, + set, + delete: deleteEntry, + clear, + forEach: createForEach(false, true) + }; + const readonlyInstrumentations2 = { + get(key) { + return get(this, key, true); + }, + get size() { + return size(this, true); + }, + has(key) { + return has.call(this, key, true); + }, + add: createReadonlyMethod("add"), + set: createReadonlyMethod("set"), + delete: createReadonlyMethod("delete"), + clear: createReadonlyMethod("clear"), + forEach: createForEach(true, false) + }; + const shallowReadonlyInstrumentations2 = { + get(key) { + return get(this, key, true, true); + }, + get size() { + return size(this, true); + }, + has(key) { + return has.call(this, key, true); + }, + add: createReadonlyMethod("add"), + set: createReadonlyMethod("set"), + delete: createReadonlyMethod("delete"), + clear: createReadonlyMethod("clear"), + forEach: createForEach(true, true) + }; + const iteratorMethods = ["keys", "values", "entries", Symbol.iterator]; + iteratorMethods.forEach((method) => { + mutableInstrumentations2[method] = createIterableMethod( + method, + false, + false + ); + readonlyInstrumentations2[method] = createIterableMethod( + method, + true, + false + ); + shallowInstrumentations2[method] = createIterableMethod( + method, + false, + true + ); + shallowReadonlyInstrumentations2[method] = createIterableMethod( + method, + true, + true + ); + }); + return [ + mutableInstrumentations2, + readonlyInstrumentations2, + shallowInstrumentations2, + shallowReadonlyInstrumentations2 + ]; +} +var [ + mutableInstrumentations, + readonlyInstrumentations, + shallowInstrumentations, + shallowReadonlyInstrumentations +] = createInstrumentations(); +function createInstrumentationGetter(isReadonly2, shallow) { + const instrumentations = shallow ? isReadonly2 ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly2 ? readonlyInstrumentations : mutableInstrumentations; + return (target, key, receiver) => { + if (key === "__v_isReactive") { + return !isReadonly2; + } else if (key === "__v_isReadonly") { + return isReadonly2; + } else if (key === "__v_raw") { + return target; + } + return Reflect.get( + hasOwn(instrumentations, key) && key in target ? instrumentations : target, + key, + receiver + ); + }; +} +var mutableCollectionHandlers = { + get: createInstrumentationGetter(false, false) +}; +var shallowCollectionHandlers = { + get: createInstrumentationGetter(false, true) +}; +var readonlyCollectionHandlers = { + get: createInstrumentationGetter(true, false) +}; +var shallowReadonlyCollectionHandlers = { + get: createInstrumentationGetter(true, true) +}; +function checkIdentityKeys(target, has2, key) { + const rawKey = toRaw(key); + if (rawKey !== key && has2.call(target, rawKey)) { + const type = toRawType(target); + warn( + `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.` + ); + } +} +var reactiveMap = /* @__PURE__ */ new WeakMap(); +var shallowReactiveMap = /* @__PURE__ */ new WeakMap(); +var readonlyMap = /* @__PURE__ */ new WeakMap(); +var shallowReadonlyMap = /* @__PURE__ */ new WeakMap(); +function targetTypeMap(rawType) { + switch (rawType) { + case "Object": + case "Array": + return 1; + case "Map": + case "Set": + case "WeakMap": + case "WeakSet": + return 2; + default: + return 0; + } +} +function getTargetType(value) { + return value["__v_skip"] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value)); +} +function reactive(target) { + if (isReadonly(target)) { + return target; + } + return createReactiveObject( + target, + false, + mutableHandlers, + mutableCollectionHandlers, + reactiveMap + ); +} +function shallowReactive(target) { + return createReactiveObject( + target, + false, + shallowReactiveHandlers, + shallowCollectionHandlers, + shallowReactiveMap + ); +} +function readonly(target) { + return createReactiveObject( + target, + true, + readonlyHandlers, + readonlyCollectionHandlers, + readonlyMap + ); +} +function shallowReadonly(target) { + return createReactiveObject( + target, + true, + shallowReadonlyHandlers, + shallowReadonlyCollectionHandlers, + shallowReadonlyMap + ); +} +function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { + if (!isObject(target)) { + if (true) { + warn(`value cannot be made reactive: ${String(target)}`); + } + return target; + } + if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) { + return target; + } + const existingProxy = proxyMap.get(target); + if (existingProxy) { + return existingProxy; + } + const targetType = getTargetType(target); + if (targetType === 0) { + return target; + } + const proxy = new Proxy( + target, + targetType === 2 ? collectionHandlers : baseHandlers + ); + proxyMap.set(target, proxy); + return proxy; +} +function isReactive(value) { + if (isReadonly(value)) { + return isReactive(value["__v_raw"]); + } + return !!(value && value["__v_isReactive"]); +} +function isReadonly(value) { + return !!(value && value["__v_isReadonly"]); +} +function isShallow(value) { + return !!(value && value["__v_isShallow"]); +} +function isProxy(value) { + return isReactive(value) || isReadonly(value); +} +function toRaw(observed) { + const raw = observed && observed["__v_raw"]; + return raw ? toRaw(raw) : observed; +} +function markRaw(value) { + if (Object.isExtensible(value)) { + def(value, "__v_skip", true); + } + return value; +} +var toReactive = (value) => isObject(value) ? reactive(value) : value; +var toReadonly = (value) => isObject(value) ? readonly(value) : value; +var COMPUTED_SIDE_EFFECT_WARN = `Computed is still dirty after getter evaluation, likely because a computed is mutating its own dependency in its getter. State mutations in computed getters should be avoided. Check the docs for more details: https://vuejs.org/guide/essentials/computed.html#getters-should-be-side-effect-free`; +var ComputedRefImpl = class { + constructor(getter, _setter, isReadonly2, isSSR) { + this.getter = getter; + this._setter = _setter; + this.dep = void 0; + this.__v_isRef = true; + this["__v_isReadonly"] = false; + this.effect = new ReactiveEffect( + () => getter(this._value), + () => triggerRefValue( + this, + this.effect._dirtyLevel === 2 ? 2 : 3 + ) + ); + this.effect.computed = this; + this.effect.active = this._cacheable = !isSSR; + this["__v_isReadonly"] = isReadonly2; + } + get value() { + const self2 = toRaw(this); + if ((!self2._cacheable || self2.effect.dirty) && hasChanged(self2._value, self2._value = self2.effect.run())) { + triggerRefValue(self2, 4); + } + trackRefValue(self2); + if (self2.effect._dirtyLevel >= 2) { + if (this._warnRecursive) { + warn(COMPUTED_SIDE_EFFECT_WARN, ` + +getter: `, this.getter); + } + triggerRefValue(self2, 2); + } + return self2._value; + } + set value(newValue) { + this._setter(newValue); + } + // #region polyfill _dirty for backward compatibility third party code for Vue <= 3.3.x + get _dirty() { + return this.effect.dirty; + } + set _dirty(v) { + this.effect.dirty = v; + } + // #endregion +}; +function computed(getterOrOptions, debugOptions, isSSR = false) { + let getter; + let setter; + const onlyGetter = isFunction(getterOrOptions); + if (onlyGetter) { + getter = getterOrOptions; + setter = true ? () => { + warn("Write operation failed: computed value is readonly"); + } : NOOP; + } else { + getter = getterOrOptions.get; + setter = getterOrOptions.set; + } + const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR); + if (debugOptions && !isSSR) { + cRef.effect.onTrack = debugOptions.onTrack; + cRef.effect.onTrigger = debugOptions.onTrigger; + } + return cRef; +} +function trackRefValue(ref2) { + var _a; + if (shouldTrack && activeEffect) { + ref2 = toRaw(ref2); + trackEffect( + activeEffect, + (_a = ref2.dep) != null ? _a : ref2.dep = createDep( + () => ref2.dep = void 0, + ref2 instanceof ComputedRefImpl ? ref2 : void 0 + ), + true ? { + target: ref2, + type: "get", + key: "value" + } : void 0 + ); + } +} +function triggerRefValue(ref2, dirtyLevel = 4, newVal) { + ref2 = toRaw(ref2); + const dep = ref2.dep; + if (dep) { + triggerEffects( + dep, + dirtyLevel, + true ? { + target: ref2, + type: "set", + key: "value", + newValue: newVal + } : void 0 + ); + } +} +function isRef(r) { + return !!(r && r.__v_isRef === true); +} +function ref(value) { + return createRef(value, false); +} +function shallowRef(value) { + return createRef(value, true); +} +function createRef(rawValue, shallow) { + if (isRef(rawValue)) { + return rawValue; + } + return new RefImpl(rawValue, shallow); +} +var RefImpl = class { + constructor(value, __v_isShallow) { + this.__v_isShallow = __v_isShallow; + this.dep = void 0; + this.__v_isRef = true; + this._rawValue = __v_isShallow ? value : toRaw(value); + this._value = __v_isShallow ? value : toReactive(value); + } + get value() { + trackRefValue(this); + return this._value; + } + set value(newVal) { + const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal); + newVal = useDirectValue ? newVal : toRaw(newVal); + if (hasChanged(newVal, this._rawValue)) { + this._rawValue = newVal; + this._value = useDirectValue ? newVal : toReactive(newVal); + triggerRefValue(this, 4, newVal); + } + } +}; +function triggerRef(ref2) { + triggerRefValue(ref2, 4, true ? ref2.value : void 0); +} +function unref(ref2) { + return isRef(ref2) ? ref2.value : ref2; +} +function toValue(source) { + return isFunction(source) ? source() : unref(source); +} +var shallowUnwrapHandlers = { + get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)), + set: (target, key, value, receiver) => { + const oldValue = target[key]; + if (isRef(oldValue) && !isRef(value)) { + oldValue.value = value; + return true; + } else { + return Reflect.set(target, key, value, receiver); + } + } +}; +function proxyRefs(objectWithRefs) { + return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); +} +var CustomRefImpl = class { + constructor(factory) { + this.dep = void 0; + this.__v_isRef = true; + const { get: get2, set: set2 } = factory( + () => trackRefValue(this), + () => triggerRefValue(this) + ); + this._get = get2; + this._set = set2; + } + get value() { + return this._get(); + } + set value(newVal) { + this._set(newVal); + } +}; +function customRef(factory) { + return new CustomRefImpl(factory); +} +function toRefs(object) { + if (!isProxy(object)) { + warn(`toRefs() expects a reactive object but received a plain one.`); + } + const ret = isArray(object) ? new Array(object.length) : {}; + for (const key in object) { + ret[key] = propertyToRef(object, key); + } + return ret; +} +var ObjectRefImpl = class { + constructor(_object, _key, _defaultValue) { + this._object = _object; + this._key = _key; + this._defaultValue = _defaultValue; + this.__v_isRef = true; + } + get value() { + const val = this._object[this._key]; + return val === void 0 ? this._defaultValue : val; + } + set value(newVal) { + this._object[this._key] = newVal; + } + get dep() { + return getDepFromReactive(toRaw(this._object), this._key); + } +}; +var GetterRefImpl = class { + constructor(_getter) { + this._getter = _getter; + this.__v_isRef = true; + this.__v_isReadonly = true; + } + get value() { + return this._getter(); + } +}; +function toRef(source, key, defaultValue) { + if (isRef(source)) { + return source; + } else if (isFunction(source)) { + return new GetterRefImpl(source); + } else if (isObject(source) && arguments.length > 1) { + return propertyToRef(source, key, defaultValue); + } else { + return ref(source); + } +} +function propertyToRef(source, key, defaultValue) { + const val = source[key]; + return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue); +} +var TrackOpTypes = { + "GET": "get", + "HAS": "has", + "ITERATE": "iterate" +}; +var TriggerOpTypes = { + "SET": "set", + "ADD": "add", + "DELETE": "delete", + "CLEAR": "clear" +}; + +// node_modules/.pnpm/@vue+runtime-core@3.4.21/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js +var stack = []; +function pushWarningContext(vnode) { + stack.push(vnode); +} +function popWarningContext() { + stack.pop(); +} +function warn$1(msg, ...args) { + pauseTracking(); + const instance = stack.length ? stack[stack.length - 1].component : null; + const appWarnHandler = instance && instance.appContext.config.warnHandler; + const trace = getComponentTrace(); + if (appWarnHandler) { + callWithErrorHandling( + appWarnHandler, + instance, + 11, + [ + msg + args.map((a) => { + var _a, _b; + return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a); + }).join(""), + instance && instance.proxy, + trace.map( + ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>` + ).join("\n"), + trace + ] + ); + } else { + const warnArgs = [`[Vue warn]: ${msg}`, ...args]; + if (trace.length && // avoid spamming console during tests + true) { + warnArgs.push(` +`, ...formatTrace(trace)); + } + console.warn(...warnArgs); + } + resetTracking(); +} +function getComponentTrace() { + let currentVNode = stack[stack.length - 1]; + if (!currentVNode) { + return []; + } + const normalizedStack = []; + while (currentVNode) { + const last = normalizedStack[0]; + if (last && last.vnode === currentVNode) { + last.recurseCount++; + } else { + normalizedStack.push({ + vnode: currentVNode, + recurseCount: 0 + }); + } + const parentInstance = currentVNode.component && currentVNode.component.parent; + currentVNode = parentInstance && parentInstance.vnode; + } + return normalizedStack; +} +function formatTrace(trace) { + const logs = []; + trace.forEach((entry, i) => { + logs.push(...i === 0 ? [] : [` +`], ...formatTraceEntry(entry)); + }); + return logs; +} +function formatTraceEntry({ vnode, recurseCount }) { + const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``; + const isRoot = vnode.component ? vnode.component.parent == null : false; + const open = ` at <${formatComponentName( + vnode.component, + vnode.type, + isRoot + )}`; + const close = `>` + postfix; + return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close]; +} +function formatProps(props) { + const res = []; + const keys = Object.keys(props); + keys.slice(0, 3).forEach((key) => { + res.push(...formatProp(key, props[key])); + }); + if (keys.length > 3) { + res.push(` ...`); + } + return res; +} +function formatProp(key, value, raw) { + if (isString(value)) { + value = JSON.stringify(value); + return raw ? value : [`${key}=${value}`]; + } else if (typeof value === "number" || typeof value === "boolean" || value == null) { + return raw ? value : [`${key}=${value}`]; + } else if (isRef(value)) { + value = formatProp(key, toRaw(value.value), true); + return raw ? value : [`${key}=Ref<`, value, `>`]; + } else if (isFunction(value)) { + return [`${key}=fn${value.name ? `<${value.name}>` : ``}`]; + } else { + value = toRaw(value); + return raw ? value : [`${key}=`, value]; + } +} +function assertNumber(val, type) { + if (false) + return; + if (val === void 0) { + return; + } else if (typeof val !== "number") { + warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`); + } else if (isNaN(val)) { + warn$1(`${type} is NaN - the duration expression might be incorrect.`); + } +} +var ErrorCodes = { + "SETUP_FUNCTION": 0, + "0": "SETUP_FUNCTION", + "RENDER_FUNCTION": 1, + "1": "RENDER_FUNCTION", + "WATCH_GETTER": 2, + "2": "WATCH_GETTER", + "WATCH_CALLBACK": 3, + "3": "WATCH_CALLBACK", + "WATCH_CLEANUP": 4, + "4": "WATCH_CLEANUP", + "NATIVE_EVENT_HANDLER": 5, + "5": "NATIVE_EVENT_HANDLER", + "COMPONENT_EVENT_HANDLER": 6, + "6": "COMPONENT_EVENT_HANDLER", + "VNODE_HOOK": 7, + "7": "VNODE_HOOK", + "DIRECTIVE_HOOK": 8, + "8": "DIRECTIVE_HOOK", + "TRANSITION_HOOK": 9, + "9": "TRANSITION_HOOK", + "APP_ERROR_HANDLER": 10, + "10": "APP_ERROR_HANDLER", + "APP_WARN_HANDLER": 11, + "11": "APP_WARN_HANDLER", + "FUNCTION_REF": 12, + "12": "FUNCTION_REF", + "ASYNC_COMPONENT_LOADER": 13, + "13": "ASYNC_COMPONENT_LOADER", + "SCHEDULER": 14, + "14": "SCHEDULER" +}; +var ErrorTypeStrings$1 = { + ["sp"]: "serverPrefetch hook", + ["bc"]: "beforeCreate hook", + ["c"]: "created hook", + ["bm"]: "beforeMount hook", + ["m"]: "mounted hook", + ["bu"]: "beforeUpdate hook", + ["u"]: "updated", + ["bum"]: "beforeUnmount hook", + ["um"]: "unmounted hook", + ["a"]: "activated hook", + ["da"]: "deactivated hook", + ["ec"]: "errorCaptured hook", + ["rtc"]: "renderTracked hook", + ["rtg"]: "renderTriggered hook", + [0]: "setup function", + [1]: "render function", + [2]: "watcher getter", + [3]: "watcher callback", + [4]: "watcher cleanup function", + [5]: "native event handler", + [6]: "component event handler", + [7]: "vnode hook", + [8]: "directive hook", + [9]: "transition hook", + [10]: "app errorHandler", + [11]: "app warnHandler", + [12]: "ref function", + [13]: "async component loader", + [14]: "scheduler flush. This is likely a Vue internals bug. Please open an issue at https://github.com/vuejs/core ." +}; +function callWithErrorHandling(fn, instance, type, args) { + try { + return args ? fn(...args) : fn(); + } catch (err) { + handleError(err, instance, type); + } +} +function callWithAsyncErrorHandling(fn, instance, type, args) { + if (isFunction(fn)) { + const res = callWithErrorHandling(fn, instance, type, args); + if (res && isPromise(res)) { + res.catch((err) => { + handleError(err, instance, type); + }); + } + return res; + } + const values = []; + for (let i = 0; i < fn.length; i++) { + values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)); + } + return values; +} +function handleError(err, instance, type, throwInDev = true) { + const contextVNode = instance ? instance.vnode : null; + if (instance) { + let cur = instance.parent; + const exposedInstance = instance.proxy; + const errorInfo = true ? ErrorTypeStrings$1[type] : `https://vuejs.org/error-reference/#runtime-${type}`; + while (cur) { + const errorCapturedHooks = cur.ec; + if (errorCapturedHooks) { + for (let i = 0; i < errorCapturedHooks.length; i++) { + if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) { + return; + } + } + } + cur = cur.parent; + } + const appErrorHandler = instance.appContext.config.errorHandler; + if (appErrorHandler) { + callWithErrorHandling( + appErrorHandler, + null, + 10, + [err, exposedInstance, errorInfo] + ); + return; + } + } + logError(err, type, contextVNode, throwInDev); +} +function logError(err, type, contextVNode, throwInDev = true) { + if (true) { + const info = ErrorTypeStrings$1[type]; + if (contextVNode) { + pushWarningContext(contextVNode); + } + warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`); + if (contextVNode) { + popWarningContext(); + } + if (throwInDev) { + throw err; + } else { + console.error(err); + } + } else { + console.error(err); + } +} +var isFlushing = false; +var isFlushPending = false; +var queue = []; +var flushIndex = 0; +var pendingPostFlushCbs = []; +var activePostFlushCbs = null; +var postFlushIndex = 0; +var resolvedPromise = Promise.resolve(); +var currentFlushPromise = null; +var RECURSION_LIMIT = 100; +function nextTick(fn) { + const p2 = currentFlushPromise || resolvedPromise; + return fn ? p2.then(this ? fn.bind(this) : fn) : p2; +} +function findInsertionIndex(id) { + let start = flushIndex + 1; + let end = queue.length; + while (start < end) { + const middle = start + end >>> 1; + const middleJob = queue[middle]; + const middleJobId = getId(middleJob); + if (middleJobId < id || middleJobId === id && middleJob.pre) { + start = middle + 1; + } else { + end = middle; + } + } + return start; +} +function queueJob(job) { + if (!queue.length || !queue.includes( + job, + isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex + )) { + if (job.id == null) { + queue.push(job); + } else { + queue.splice(findInsertionIndex(job.id), 0, job); + } + queueFlush(); + } +} +function queueFlush() { + if (!isFlushing && !isFlushPending) { + isFlushPending = true; + currentFlushPromise = resolvedPromise.then(flushJobs); + } +} +function invalidateJob(job) { + const i = queue.indexOf(job); + if (i > flushIndex) { + queue.splice(i, 1); + } +} +function queuePostFlushCb(cb) { + if (!isArray(cb)) { + if (!activePostFlushCbs || !activePostFlushCbs.includes( + cb, + cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex + )) { + pendingPostFlushCbs.push(cb); + } + } else { + pendingPostFlushCbs.push(...cb); + } + queueFlush(); +} +function flushPreFlushCbs(instance, seen, i = isFlushing ? flushIndex + 1 : 0) { + if (true) { + seen = seen || /* @__PURE__ */ new Map(); + } + for (; i < queue.length; i++) { + const cb = queue[i]; + if (cb && cb.pre) { + if (instance && cb.id !== instance.uid) { + continue; + } + if (checkRecursiveUpdates(seen, cb)) { + continue; + } + queue.splice(i, 1); + i--; + cb(); + } + } +} +function flushPostFlushCbs(seen) { + if (pendingPostFlushCbs.length) { + const deduped = [...new Set(pendingPostFlushCbs)].sort( + (a, b) => getId(a) - getId(b) + ); + pendingPostFlushCbs.length = 0; + if (activePostFlushCbs) { + activePostFlushCbs.push(...deduped); + return; + } + activePostFlushCbs = deduped; + if (true) { + seen = seen || /* @__PURE__ */ new Map(); + } + for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) { + if (checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) { + continue; + } + activePostFlushCbs[postFlushIndex](); + } + activePostFlushCbs = null; + postFlushIndex = 0; + } +} +var getId = (job) => job.id == null ? Infinity : job.id; +var comparator = (a, b) => { + const diff = getId(a) - getId(b); + if (diff === 0) { + if (a.pre && !b.pre) + return -1; + if (b.pre && !a.pre) + return 1; + } + return diff; +}; +function flushJobs(seen) { + isFlushPending = false; + isFlushing = true; + if (true) { + seen = seen || /* @__PURE__ */ new Map(); + } + queue.sort(comparator); + const check = true ? (job) => checkRecursiveUpdates(seen, job) : NOOP; + try { + for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { + const job = queue[flushIndex]; + if (job && job.active !== false) { + if (check(job)) { + continue; + } + callWithErrorHandling(job, null, 14); + } + } + } finally { + flushIndex = 0; + queue.length = 0; + flushPostFlushCbs(seen); + isFlushing = false; + currentFlushPromise = null; + if (queue.length || pendingPostFlushCbs.length) { + flushJobs(seen); + } + } +} +function checkRecursiveUpdates(seen, fn) { + if (!seen.has(fn)) { + seen.set(fn, 1); + } else { + const count = seen.get(fn); + if (count > RECURSION_LIMIT) { + const instance = fn.ownerInstance; + const componentName = instance && getComponentName(instance.type); + handleError( + `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`, + null, + 10 + ); + return true; + } else { + seen.set(fn, count + 1); + } + } +} +var isHmrUpdating = false; +var hmrDirtyComponents = /* @__PURE__ */ new Set(); +if (true) { + getGlobalThis().__VUE_HMR_RUNTIME__ = { + createRecord: tryWrap(createRecord), + rerender: tryWrap(rerender), + reload: tryWrap(reload) + }; +} +var map = /* @__PURE__ */ new Map(); +function registerHMR(instance) { + const id = instance.type.__hmrId; + let record = map.get(id); + if (!record) { + createRecord(id, instance.type); + record = map.get(id); + } + record.instances.add(instance); +} +function unregisterHMR(instance) { + map.get(instance.type.__hmrId).instances.delete(instance); +} +function createRecord(id, initialDef) { + if (map.has(id)) { + return false; + } + map.set(id, { + initialDef: normalizeClassComponent(initialDef), + instances: /* @__PURE__ */ new Set() + }); + return true; +} +function normalizeClassComponent(component) { + return isClassComponent(component) ? component.__vccOpts : component; +} +function rerender(id, newRender) { + const record = map.get(id); + if (!record) { + return; + } + record.initialDef.render = newRender; + [...record.instances].forEach((instance) => { + if (newRender) { + instance.render = newRender; + normalizeClassComponent(instance.type).render = newRender; + } + instance.renderCache = []; + isHmrUpdating = true; + instance.effect.dirty = true; + instance.update(); + isHmrUpdating = false; + }); +} +function reload(id, newComp) { + const record = map.get(id); + if (!record) + return; + newComp = normalizeClassComponent(newComp); + updateComponentDef(record.initialDef, newComp); + const instances = [...record.instances]; + for (const instance of instances) { + const oldComp = normalizeClassComponent(instance.type); + if (!hmrDirtyComponents.has(oldComp)) { + if (oldComp !== record.initialDef) { + updateComponentDef(oldComp, newComp); + } + hmrDirtyComponents.add(oldComp); + } + instance.appContext.propsCache.delete(instance.type); + instance.appContext.emitsCache.delete(instance.type); + instance.appContext.optionsCache.delete(instance.type); + if (instance.ceReload) { + hmrDirtyComponents.add(oldComp); + instance.ceReload(newComp.styles); + hmrDirtyComponents.delete(oldComp); + } else if (instance.parent) { + instance.parent.effect.dirty = true; + queueJob(instance.parent.update); + } else if (instance.appContext.reload) { + instance.appContext.reload(); + } else if (typeof window !== "undefined") { + window.location.reload(); + } else { + console.warn( + "[HMR] Root or manually mounted instance modified. Full reload required." + ); + } + } + queuePostFlushCb(() => { + for (const instance of instances) { + hmrDirtyComponents.delete( + normalizeClassComponent(instance.type) + ); + } + }); +} +function updateComponentDef(oldComp, newComp) { + extend(oldComp, newComp); + for (const key in oldComp) { + if (key !== "__file" && !(key in newComp)) { + delete oldComp[key]; + } + } +} +function tryWrap(fn) { + return (id, arg) => { + try { + return fn(id, arg); + } catch (e) { + console.error(e); + console.warn( + `[HMR] Something went wrong during Vue component hot-reload. Full reload required.` + ); + } + }; +} +var devtools$1; +var buffer = []; +var devtoolsNotInstalled = false; +function emit$1(event, ...args) { + if (devtools$1) { + devtools$1.emit(event, ...args); + } else if (!devtoolsNotInstalled) { + buffer.push({ event, args }); + } +} +function setDevtoolsHook$1(hook, target) { + var _a, _b; + devtools$1 = hook; + if (devtools$1) { + devtools$1.enabled = true; + buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args)); + buffer = []; + } else if ( + // handle late devtools injection - only do this if we are in an actual + // browser environment to avoid the timer handle stalling test runner exit + // (#4815) + typeof window !== "undefined" && // some envs mock window but not fully + window.HTMLElement && // also exclude jsdom + !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes("jsdom")) + ) { + const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []; + replay.push((newHook) => { + setDevtoolsHook$1(newHook, target); + }); + setTimeout(() => { + if (!devtools$1) { + target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null; + devtoolsNotInstalled = true; + buffer = []; + } + }, 3e3); + } else { + devtoolsNotInstalled = true; + buffer = []; + } +} +function devtoolsInitApp(app, version2) { + emit$1("app:init", app, version2, { + Fragment, + Text, + Comment, + Static + }); +} +function devtoolsUnmountApp(app) { + emit$1("app:unmount", app); +} +var devtoolsComponentAdded = createDevtoolsComponentHook( + "component:added" + /* COMPONENT_ADDED */ +); +var devtoolsComponentUpdated = createDevtoolsComponentHook( + "component:updated" + /* COMPONENT_UPDATED */ +); +var _devtoolsComponentRemoved = createDevtoolsComponentHook( + "component:removed" + /* COMPONENT_REMOVED */ +); +var devtoolsComponentRemoved = (component) => { + if (devtools$1 && typeof devtools$1.cleanupBuffer === "function" && // remove the component if it wasn't buffered + !devtools$1.cleanupBuffer(component)) { + _devtoolsComponentRemoved(component); + } +}; +function createDevtoolsComponentHook(hook) { + return (component) => { + emit$1( + hook, + component.appContext.app, + component.uid, + component.parent ? component.parent.uid : void 0, + component + ); + }; +} +var devtoolsPerfStart = createDevtoolsPerformanceHook( + "perf:start" + /* PERFORMANCE_START */ +); +var devtoolsPerfEnd = createDevtoolsPerformanceHook( + "perf:end" + /* PERFORMANCE_END */ +); +function createDevtoolsPerformanceHook(hook) { + return (component, type, time) => { + emit$1(hook, component.appContext.app, component.uid, component, type, time); + }; +} +function devtoolsComponentEmit(component, event, params) { + emit$1( + "component:emit", + component.appContext.app, + component, + event, + params + ); +} +function emit(instance, event, ...rawArgs) { + if (instance.isUnmounted) + return; + const props = instance.vnode.props || EMPTY_OBJ; + if (true) { + const { + emitsOptions, + propsOptions: [propsOptions] + } = instance; + if (emitsOptions) { + if (!(event in emitsOptions) && true) { + if (!propsOptions || !(toHandlerKey(event) in propsOptions)) { + warn$1( + `Component emitted event "${event}" but it is neither declared in the emits option nor as an "${toHandlerKey(event)}" prop.` + ); + } + } else { + const validator = emitsOptions[event]; + if (isFunction(validator)) { + const isValid = validator(...rawArgs); + if (!isValid) { + warn$1( + `Invalid event arguments: event validation failed for event "${event}".` + ); + } + } + } + } + } + let args = rawArgs; + const isModelListener2 = event.startsWith("update:"); + const modelArg = isModelListener2 && event.slice(7); + if (modelArg && modelArg in props) { + const modifiersKey = `${modelArg === "modelValue" ? "model" : modelArg}Modifiers`; + const { number, trim } = props[modifiersKey] || EMPTY_OBJ; + if (trim) { + args = rawArgs.map((a) => isString(a) ? a.trim() : a); + } + if (number) { + args = rawArgs.map(looseToNumber); + } + } + if (true) { + devtoolsComponentEmit(instance, event, args); + } + if (true) { + const lowerCaseEvent = event.toLowerCase(); + if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) { + warn$1( + `Event "${lowerCaseEvent}" is emitted in component ${formatComponentName( + instance, + instance.type + )} but the handler is registered for "${event}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${hyphenate( + event + )}" instead of "${event}".` + ); + } + } + let handlerName; + let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249) + props[handlerName = toHandlerKey(camelize(event))]; + if (!handler && isModelListener2) { + handler = props[handlerName = toHandlerKey(hyphenate(event))]; + } + if (handler) { + callWithAsyncErrorHandling( + handler, + instance, + 6, + args + ); + } + const onceHandler = props[handlerName + `Once`]; + if (onceHandler) { + if (!instance.emitted) { + instance.emitted = {}; + } else if (instance.emitted[handlerName]) { + return; + } + instance.emitted[handlerName] = true; + callWithAsyncErrorHandling( + onceHandler, + instance, + 6, + args + ); + } +} +function normalizeEmitsOptions(comp, appContext, asMixin = false) { + const cache = appContext.emitsCache; + const cached = cache.get(comp); + if (cached !== void 0) { + return cached; + } + const raw = comp.emits; + let normalized = {}; + let hasExtends = false; + if (__VUE_OPTIONS_API__ && !isFunction(comp)) { + const extendEmits = (raw2) => { + const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true); + if (normalizedFromExtend) { + hasExtends = true; + extend(normalized, normalizedFromExtend); + } + }; + if (!asMixin && appContext.mixins.length) { + appContext.mixins.forEach(extendEmits); + } + if (comp.extends) { + extendEmits(comp.extends); + } + if (comp.mixins) { + comp.mixins.forEach(extendEmits); + } + } + if (!raw && !hasExtends) { + if (isObject(comp)) { + cache.set(comp, null); + } + return null; + } + if (isArray(raw)) { + raw.forEach((key) => normalized[key] = null); + } else { + extend(normalized, raw); + } + if (isObject(comp)) { + cache.set(comp, normalized); + } + return normalized; +} +function isEmitListener(options, key) { + if (!options || !isOn(key)) { + return false; + } + key = key.slice(2).replace(/Once$/, ""); + return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key); +} +var currentRenderingInstance = null; +var currentScopeId = null; +function setCurrentRenderingInstance(instance) { + const prev = currentRenderingInstance; + currentRenderingInstance = instance; + currentScopeId = instance && instance.type.__scopeId || null; + return prev; +} +function pushScopeId(id) { + currentScopeId = id; +} +function popScopeId() { + currentScopeId = null; +} +var withScopeId = (_id) => withCtx; +function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) { + if (!ctx) + return fn; + if (fn._n) { + return fn; + } + const renderFnWithContext = (...args) => { + if (renderFnWithContext._d) { + setBlockTracking(-1); + } + const prevInstance = setCurrentRenderingInstance(ctx); + let res; + try { + res = fn(...args); + } finally { + setCurrentRenderingInstance(prevInstance); + if (renderFnWithContext._d) { + setBlockTracking(1); + } + } + if (true) { + devtoolsComponentUpdated(ctx); + } + return res; + }; + renderFnWithContext._n = true; + renderFnWithContext._c = true; + renderFnWithContext._d = true; + return renderFnWithContext; +} +var accessedAttrs = false; +function markAttrsAccessed() { + accessedAttrs = true; +} +function renderComponentRoot(instance) { + const { + type: Component, + vnode, + proxy, + withProxy, + props, + propsOptions: [propsOptions], + slots, + attrs, + emit: emit2, + render: render2, + renderCache, + data, + setupState, + ctx, + inheritAttrs + } = instance; + let result; + let fallthroughAttrs; + const prev = setCurrentRenderingInstance(instance); + if (true) { + accessedAttrs = false; + } + try { + if (vnode.shapeFlag & 4) { + const proxyToUse = withProxy || proxy; + const thisProxy = setupState.__isScriptSetup ? new Proxy(proxyToUse, { + get(target, key, receiver) { + warn$1( + `Property '${String( + key + )}' was accessed via 'this'. Avoid using 'this' in templates.` + ); + return Reflect.get(target, key, receiver); + } + }) : proxyToUse; + result = normalizeVNode( + render2.call( + thisProxy, + proxyToUse, + renderCache, + props, + setupState, + data, + ctx + ) + ); + fallthroughAttrs = attrs; + } else { + const render22 = Component; + if (attrs === props) { + markAttrsAccessed(); + } + result = normalizeVNode( + render22.length > 1 ? render22( + props, + true ? { + get attrs() { + markAttrsAccessed(); + return attrs; + }, + slots, + emit: emit2 + } : { attrs, slots, emit: emit2 } + ) : render22( + props, + null + /* we know it doesn't need it */ + ) + ); + fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs); + } + } catch (err) { + blockStack.length = 0; + handleError(err, instance, 1); + result = createVNode(Comment); + } + let root = result; + let setRoot = void 0; + if (result.patchFlag > 0 && result.patchFlag & 2048) { + [root, setRoot] = getChildRoot(result); + } + if (fallthroughAttrs && inheritAttrs !== false) { + const keys = Object.keys(fallthroughAttrs); + const { shapeFlag } = root; + if (keys.length) { + if (shapeFlag & (1 | 6)) { + if (propsOptions && keys.some(isModelListener)) { + fallthroughAttrs = filterModelListeners( + fallthroughAttrs, + propsOptions + ); + } + root = cloneVNode(root, fallthroughAttrs); + } else if (!accessedAttrs && root.type !== Comment) { + const allAttrs = Object.keys(attrs); + const eventAttrs = []; + const extraAttrs = []; + for (let i = 0, l = allAttrs.length; i < l; i++) { + const key = allAttrs[i]; + if (isOn(key)) { + if (!isModelListener(key)) { + eventAttrs.push(key[2].toLowerCase() + key.slice(3)); + } + } else { + extraAttrs.push(key); + } + } + if (extraAttrs.length) { + warn$1( + `Extraneous non-props attributes (${extraAttrs.join(", ")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes.` + ); + } + if (eventAttrs.length) { + warn$1( + `Extraneous non-emits event listeners (${eventAttrs.join(", ")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the "emits" option.` + ); + } + } + } + } + if (vnode.dirs) { + if (!isElementRoot(root)) { + warn$1( + `Runtime directive used on component with non-element root node. The directives will not function as intended.` + ); + } + root = cloneVNode(root); + root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs; + } + if (vnode.transition) { + if (!isElementRoot(root)) { + warn$1( + `Component inside renders non-element root node that cannot be animated.` + ); + } + root.transition = vnode.transition; + } + if (setRoot) { + setRoot(root); + } else { + result = root; + } + setCurrentRenderingInstance(prev); + return result; +} +var getChildRoot = (vnode) => { + const rawChildren = vnode.children; + const dynamicChildren = vnode.dynamicChildren; + const childRoot = filterSingleRoot(rawChildren, false); + if (!childRoot) { + return [vnode, void 0]; + } else if (childRoot.patchFlag > 0 && childRoot.patchFlag & 2048) { + return getChildRoot(childRoot); + } + const index = rawChildren.indexOf(childRoot); + const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1; + const setRoot = (updatedRoot) => { + rawChildren[index] = updatedRoot; + if (dynamicChildren) { + if (dynamicIndex > -1) { + dynamicChildren[dynamicIndex] = updatedRoot; + } else if (updatedRoot.patchFlag > 0) { + vnode.dynamicChildren = [...dynamicChildren, updatedRoot]; + } + } + }; + return [normalizeVNode(childRoot), setRoot]; +}; +function filterSingleRoot(children, recurse = true) { + let singleRoot; + for (let i = 0; i < children.length; i++) { + const child = children[i]; + if (isVNode(child)) { + if (child.type !== Comment || child.children === "v-if") { + if (singleRoot) { + return; + } else { + singleRoot = child; + if (recurse && singleRoot.patchFlag > 0 && singleRoot.patchFlag & 2048) { + return filterSingleRoot(singleRoot.children); + } + } + } + } else { + return; + } + } + return singleRoot; +} +var getFunctionalFallthrough = (attrs) => { + let res; + for (const key in attrs) { + if (key === "class" || key === "style" || isOn(key)) { + (res || (res = {}))[key] = attrs[key]; + } + } + return res; +}; +var filterModelListeners = (attrs, props) => { + const res = {}; + for (const key in attrs) { + if (!isModelListener(key) || !(key.slice(9) in props)) { + res[key] = attrs[key]; + } + } + return res; +}; +var isElementRoot = (vnode) => { + return vnode.shapeFlag & (6 | 1) || vnode.type === Comment; +}; +function shouldUpdateComponent(prevVNode, nextVNode, optimized) { + const { props: prevProps, children: prevChildren, component } = prevVNode; + const { props: nextProps, children: nextChildren, patchFlag } = nextVNode; + const emits = component.emitsOptions; + if ((prevChildren || nextChildren) && isHmrUpdating) { + return true; + } + if (nextVNode.dirs || nextVNode.transition) { + return true; + } + if (optimized && patchFlag >= 0) { + if (patchFlag & 1024) { + return true; + } + if (patchFlag & 16) { + if (!prevProps) { + return !!nextProps; + } + return hasPropsChanged(prevProps, nextProps, emits); + } else if (patchFlag & 8) { + const dynamicProps = nextVNode.dynamicProps; + for (let i = 0; i < dynamicProps.length; i++) { + const key = dynamicProps[i]; + if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) { + return true; + } + } + } + } else { + if (prevChildren || nextChildren) { + if (!nextChildren || !nextChildren.$stable) { + return true; + } + } + if (prevProps === nextProps) { + return false; + } + if (!prevProps) { + return !!nextProps; + } + if (!nextProps) { + return true; + } + return hasPropsChanged(prevProps, nextProps, emits); + } + return false; +} +function hasPropsChanged(prevProps, nextProps, emitsOptions) { + const nextKeys = Object.keys(nextProps); + if (nextKeys.length !== Object.keys(prevProps).length) { + return true; + } + for (let i = 0; i < nextKeys.length; i++) { + const key = nextKeys[i]; + if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) { + return true; + } + } + return false; +} +function updateHOCHostEl({ vnode, parent }, el) { + while (parent) { + const root = parent.subTree; + if (root.suspense && root.suspense.activeBranch === vnode) { + root.el = vnode.el; + } + if (root === vnode) { + (vnode = parent.vnode).el = el; + parent = parent.parent; + } else { + break; + } + } +} +var COMPONENTS = "components"; +var DIRECTIVES = "directives"; +function resolveComponent(name, maybeSelfReference) { + return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name; +} +var NULL_DYNAMIC_COMPONENT = Symbol.for("v-ndc"); +function resolveDynamicComponent(component) { + if (isString(component)) { + return resolveAsset(COMPONENTS, component, false) || component; + } else { + return component || NULL_DYNAMIC_COMPONENT; + } +} +function resolveDirective(name) { + return resolveAsset(DIRECTIVES, name); +} +function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) { + const instance = currentRenderingInstance || currentInstance; + if (instance) { + const Component = instance.type; + if (type === COMPONENTS) { + const selfName = getComponentName( + Component, + false + ); + if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) { + return Component; + } + } + const res = ( + // local registration + // check instance[type] first which is resolved for options API + resolve(instance[type] || Component[type], name) || // global registration + resolve(instance.appContext[type], name) + ); + if (!res && maybeSelfReference) { + return Component; + } + if (warnMissing && !res) { + const extra = type === COMPONENTS ? ` +If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``; + warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`); + } + return res; + } else if (true) { + warn$1( + `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().` + ); + } +} +function resolve(registry, name) { + return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]); +} +var isSuspense = (type) => type.__isSuspense; +var suspenseId = 0; +var SuspenseImpl = { + name: "Suspense", + // In order to make Suspense tree-shakable, we need to avoid importing it + // directly in the renderer. The renderer checks for the __isSuspense flag + // on a vnode's type and calls the `process` method, passing in renderer + // internals. + __isSuspense: true, + process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) { + if (n1 == null) { + mountSuspense( + n2, + container, + anchor, + parentComponent, + parentSuspense, + namespace, + slotScopeIds, + optimized, + rendererInternals + ); + } else { + if (parentSuspense && parentSuspense.deps > 0 && !n1.suspense.isInFallback) { + n2.suspense = n1.suspense; + n2.suspense.vnode = n2; + n2.el = n1.el; + return; + } + patchSuspense( + n1, + n2, + container, + anchor, + parentComponent, + namespace, + slotScopeIds, + optimized, + rendererInternals + ); + } + }, + hydrate: hydrateSuspense, + create: createSuspenseBoundary, + normalize: normalizeSuspenseChildren +}; +var Suspense = SuspenseImpl; +function triggerEvent(vnode, name) { + const eventListener = vnode.props && vnode.props[name]; + if (isFunction(eventListener)) { + eventListener(); + } +} +function mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) { + const { + p: patch, + o: { createElement } + } = rendererInternals; + const hiddenContainer = createElement("div"); + const suspense = vnode.suspense = createSuspenseBoundary( + vnode, + parentSuspense, + parentComponent, + container, + hiddenContainer, + anchor, + namespace, + slotScopeIds, + optimized, + rendererInternals + ); + patch( + null, + suspense.pendingBranch = vnode.ssContent, + hiddenContainer, + null, + parentComponent, + suspense, + namespace, + slotScopeIds + ); + if (suspense.deps > 0) { + triggerEvent(vnode, "onPending"); + triggerEvent(vnode, "onFallback"); + patch( + null, + vnode.ssFallback, + container, + anchor, + parentComponent, + null, + // fallback tree will not have suspense context + namespace, + slotScopeIds + ); + setActiveBranch(suspense, vnode.ssFallback); + } else { + suspense.resolve(false, true); + } +} +function patchSuspense(n1, n2, container, anchor, parentComponent, namespace, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) { + const suspense = n2.suspense = n1.suspense; + suspense.vnode = n2; + n2.el = n1.el; + const newBranch = n2.ssContent; + const newFallback = n2.ssFallback; + const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense; + if (pendingBranch) { + suspense.pendingBranch = newBranch; + if (isSameVNodeType(newBranch, pendingBranch)) { + patch( + pendingBranch, + newBranch, + suspense.hiddenContainer, + null, + parentComponent, + suspense, + namespace, + slotScopeIds, + optimized + ); + if (suspense.deps <= 0) { + suspense.resolve(); + } else if (isInFallback) { + if (!isHydrating) { + patch( + activeBranch, + newFallback, + container, + anchor, + parentComponent, + null, + // fallback tree will not have suspense context + namespace, + slotScopeIds, + optimized + ); + setActiveBranch(suspense, newFallback); + } + } + } else { + suspense.pendingId = suspenseId++; + if (isHydrating) { + suspense.isHydrating = false; + suspense.activeBranch = pendingBranch; + } else { + unmount(pendingBranch, parentComponent, suspense); + } + suspense.deps = 0; + suspense.effects.length = 0; + suspense.hiddenContainer = createElement("div"); + if (isInFallback) { + patch( + null, + newBranch, + suspense.hiddenContainer, + null, + parentComponent, + suspense, + namespace, + slotScopeIds, + optimized + ); + if (suspense.deps <= 0) { + suspense.resolve(); + } else { + patch( + activeBranch, + newFallback, + container, + anchor, + parentComponent, + null, + // fallback tree will not have suspense context + namespace, + slotScopeIds, + optimized + ); + setActiveBranch(suspense, newFallback); + } + } else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) { + patch( + activeBranch, + newBranch, + container, + anchor, + parentComponent, + suspense, + namespace, + slotScopeIds, + optimized + ); + suspense.resolve(true); + } else { + patch( + null, + newBranch, + suspense.hiddenContainer, + null, + parentComponent, + suspense, + namespace, + slotScopeIds, + optimized + ); + if (suspense.deps <= 0) { + suspense.resolve(); + } + } + } + } else { + if (activeBranch && isSameVNodeType(newBranch, activeBranch)) { + patch( + activeBranch, + newBranch, + container, + anchor, + parentComponent, + suspense, + namespace, + slotScopeIds, + optimized + ); + setActiveBranch(suspense, newBranch); + } else { + triggerEvent(n2, "onPending"); + suspense.pendingBranch = newBranch; + if (newBranch.shapeFlag & 512) { + suspense.pendingId = newBranch.component.suspenseId; + } else { + suspense.pendingId = suspenseId++; + } + patch( + null, + newBranch, + suspense.hiddenContainer, + null, + parentComponent, + suspense, + namespace, + slotScopeIds, + optimized + ); + if (suspense.deps <= 0) { + suspense.resolve(); + } else { + const { timeout, pendingId } = suspense; + if (timeout > 0) { + setTimeout(() => { + if (suspense.pendingId === pendingId) { + suspense.fallback(newFallback); + } + }, timeout); + } else if (timeout === 0) { + suspense.fallback(newFallback); + } + } + } + } +} +var hasWarned = false; +function createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, namespace, slotScopeIds, optimized, rendererInternals, isHydrating = false) { + if (!hasWarned) { + hasWarned = true; + console[console.info ? "info" : "log"]( + ` is an experimental feature and its API will likely change.` + ); + } + const { + p: patch, + m: move, + um: unmount, + n: next, + o: { parentNode, remove: remove2 } + } = rendererInternals; + let parentSuspenseId; + const isSuspensible = isVNodeSuspensible(vnode); + if (isSuspensible) { + if (parentSuspense == null ? void 0 : parentSuspense.pendingBranch) { + parentSuspenseId = parentSuspense.pendingId; + parentSuspense.deps++; + } + } + const timeout = vnode.props ? toNumber(vnode.props.timeout) : void 0; + if (true) { + assertNumber(timeout, `Suspense timeout`); + } + const initialAnchor = anchor; + const suspense = { + vnode, + parent: parentSuspense, + parentComponent, + namespace, + container, + hiddenContainer, + deps: 0, + pendingId: suspenseId++, + timeout: typeof timeout === "number" ? timeout : -1, + activeBranch: null, + pendingBranch: null, + isInFallback: !isHydrating, + isHydrating, + isUnmounted: false, + effects: [], + resolve(resume = false, sync = false) { + if (true) { + if (!resume && !suspense.pendingBranch) { + throw new Error( + `suspense.resolve() is called without a pending branch.` + ); + } + if (suspense.isUnmounted) { + throw new Error( + `suspense.resolve() is called on an already unmounted suspense boundary.` + ); + } + } + const { + vnode: vnode2, + activeBranch, + pendingBranch, + pendingId, + effects, + parentComponent: parentComponent2, + container: container2 + } = suspense; + let delayEnter = false; + if (suspense.isHydrating) { + suspense.isHydrating = false; + } else if (!resume) { + delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === "out-in"; + if (delayEnter) { + activeBranch.transition.afterLeave = () => { + if (pendingId === suspense.pendingId) { + move( + pendingBranch, + container2, + anchor === initialAnchor ? next(activeBranch) : anchor, + 0 + ); + queuePostFlushCb(effects); + } + }; + } + if (activeBranch) { + if (parentNode(activeBranch.el) !== suspense.hiddenContainer) { + anchor = next(activeBranch); + } + unmount(activeBranch, parentComponent2, suspense, true); + } + if (!delayEnter) { + move(pendingBranch, container2, anchor, 0); + } + } + setActiveBranch(suspense, pendingBranch); + suspense.pendingBranch = null; + suspense.isInFallback = false; + let parent = suspense.parent; + let hasUnresolvedAncestor = false; + while (parent) { + if (parent.pendingBranch) { + parent.effects.push(...effects); + hasUnresolvedAncestor = true; + break; + } + parent = parent.parent; + } + if (!hasUnresolvedAncestor && !delayEnter) { + queuePostFlushCb(effects); + } + suspense.effects = []; + if (isSuspensible) { + if (parentSuspense && parentSuspense.pendingBranch && parentSuspenseId === parentSuspense.pendingId) { + parentSuspense.deps--; + if (parentSuspense.deps === 0 && !sync) { + parentSuspense.resolve(); + } + } + } + triggerEvent(vnode2, "onResolve"); + }, + fallback(fallbackVNode) { + if (!suspense.pendingBranch) { + return; + } + const { vnode: vnode2, activeBranch, parentComponent: parentComponent2, container: container2, namespace: namespace2 } = suspense; + triggerEvent(vnode2, "onFallback"); + const anchor2 = next(activeBranch); + const mountFallback = () => { + if (!suspense.isInFallback) { + return; + } + patch( + null, + fallbackVNode, + container2, + anchor2, + parentComponent2, + null, + // fallback tree will not have suspense context + namespace2, + slotScopeIds, + optimized + ); + setActiveBranch(suspense, fallbackVNode); + }; + const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === "out-in"; + if (delayEnter) { + activeBranch.transition.afterLeave = mountFallback; + } + suspense.isInFallback = true; + unmount( + activeBranch, + parentComponent2, + null, + // no suspense so unmount hooks fire now + true + // shouldRemove + ); + if (!delayEnter) { + mountFallback(); + } + }, + move(container2, anchor2, type) { + suspense.activeBranch && move(suspense.activeBranch, container2, anchor2, type); + suspense.container = container2; + }, + next() { + return suspense.activeBranch && next(suspense.activeBranch); + }, + registerDep(instance, setupRenderEffect) { + const isInPendingSuspense = !!suspense.pendingBranch; + if (isInPendingSuspense) { + suspense.deps++; + } + const hydratedEl = instance.vnode.el; + instance.asyncDep.catch((err) => { + handleError(err, instance, 0); + }).then((asyncSetupResult) => { + if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) { + return; + } + instance.asyncResolved = true; + const { vnode: vnode2 } = instance; + if (true) { + pushWarningContext(vnode2); + } + handleSetupResult(instance, asyncSetupResult, false); + if (hydratedEl) { + vnode2.el = hydratedEl; + } + const placeholder = !hydratedEl && instance.subTree.el; + setupRenderEffect( + instance, + vnode2, + // component may have been moved before resolve. + // if this is not a hydration, instance.subTree will be the comment + // placeholder. + parentNode(hydratedEl || instance.subTree.el), + // anchor will not be used if this is hydration, so only need to + // consider the comment placeholder case. + hydratedEl ? null : next(instance.subTree), + suspense, + namespace, + optimized + ); + if (placeholder) { + remove2(placeholder); + } + updateHOCHostEl(instance, vnode2.el); + if (true) { + popWarningContext(); + } + if (isInPendingSuspense && --suspense.deps === 0) { + suspense.resolve(); + } + }); + }, + unmount(parentSuspense2, doRemove) { + suspense.isUnmounted = true; + if (suspense.activeBranch) { + unmount( + suspense.activeBranch, + parentComponent, + parentSuspense2, + doRemove + ); + } + if (suspense.pendingBranch) { + unmount( + suspense.pendingBranch, + parentComponent, + parentSuspense2, + doRemove + ); + } + } + }; + return suspense; +} +function hydrateSuspense(node, vnode, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals, hydrateNode) { + const suspense = vnode.suspense = createSuspenseBoundary( + vnode, + parentSuspense, + parentComponent, + node.parentNode, + // eslint-disable-next-line no-restricted-globals + document.createElement("div"), + null, + namespace, + slotScopeIds, + optimized, + rendererInternals, + true + ); + const result = hydrateNode( + node, + suspense.pendingBranch = vnode.ssContent, + parentComponent, + suspense, + slotScopeIds, + optimized + ); + if (suspense.deps === 0) { + suspense.resolve(false, true); + } + return result; +} +function normalizeSuspenseChildren(vnode) { + const { shapeFlag, children } = vnode; + const isSlotChildren = shapeFlag & 32; + vnode.ssContent = normalizeSuspenseSlot( + isSlotChildren ? children.default : children + ); + vnode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createVNode(Comment); +} +function normalizeSuspenseSlot(s) { + let block; + if (isFunction(s)) { + const trackBlock = isBlockTreeEnabled && s._c; + if (trackBlock) { + s._d = false; + openBlock(); + } + s = s(); + if (trackBlock) { + s._d = true; + block = currentBlock; + closeBlock(); + } + } + if (isArray(s)) { + const singleChild = filterSingleRoot(s); + if (!singleChild && s.filter((child) => child !== NULL_DYNAMIC_COMPONENT).length > 0) { + warn$1(` slots expect a single root node.`); + } + s = singleChild; + } + s = normalizeVNode(s); + if (block && !s.dynamicChildren) { + s.dynamicChildren = block.filter((c) => c !== s); + } + return s; +} +function queueEffectWithSuspense(fn, suspense) { + if (suspense && suspense.pendingBranch) { + if (isArray(fn)) { + suspense.effects.push(...fn); + } else { + suspense.effects.push(fn); + } + } else { + queuePostFlushCb(fn); + } +} +function setActiveBranch(suspense, branch) { + suspense.activeBranch = branch; + const { vnode, parentComponent } = suspense; + let el = branch.el; + while (!el && branch.component) { + branch = branch.component.subTree; + el = branch.el; + } + vnode.el = el; + if (parentComponent && parentComponent.subTree === vnode) { + parentComponent.vnode.el = el; + updateHOCHostEl(parentComponent, el); + } +} +function isVNodeSuspensible(vnode) { + var _a; + return ((_a = vnode.props) == null ? void 0 : _a.suspensible) != null && vnode.props.suspensible !== false; +} +var ssrContextKey = Symbol.for("v-scx"); +var useSSRContext = () => { + { + const ctx = inject(ssrContextKey); + if (!ctx) { + warn$1( + `Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build.` + ); + } + return ctx; + } +}; +function watchEffect(effect2, options) { + return doWatch(effect2, null, options); +} +function watchPostEffect(effect2, options) { + return doWatch( + effect2, + null, + true ? extend({}, options, { flush: "post" }) : { flush: "post" } + ); +} +function watchSyncEffect(effect2, options) { + return doWatch( + effect2, + null, + true ? extend({}, options, { flush: "sync" }) : { flush: "sync" } + ); +} +var INITIAL_WATCHER_VALUE = {}; +function watch(source, cb, options) { + if (!isFunction(cb)) { + warn$1( + `\`watch(fn, options?)\` signature has been moved to a separate API. Use \`watchEffect(fn, options?)\` instead. \`watch\` now only supports \`watch(source, cb, options?) signature.` + ); + } + return doWatch(source, cb, options); +} +function doWatch(source, cb, { + immediate, + deep, + flush, + once, + onTrack, + onTrigger +} = EMPTY_OBJ) { + if (cb && once) { + const _cb = cb; + cb = (...args) => { + _cb(...args); + unwatch(); + }; + } + if (deep !== void 0 && typeof deep === "number") { + warn$1( + `watch() "deep" option with number value will be used as watch depth in future versions. Please use a boolean instead to avoid potential breakage.` + ); + } + if (!cb) { + if (immediate !== void 0) { + warn$1( + `watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.` + ); + } + if (deep !== void 0) { + warn$1( + `watch() "deep" option is only respected when using the watch(source, callback, options?) signature.` + ); + } + if (once !== void 0) { + warn$1( + `watch() "once" option is only respected when using the watch(source, callback, options?) signature.` + ); + } + } + const warnInvalidSource = (s) => { + warn$1( + `Invalid watch source: `, + s, + `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.` + ); + }; + const instance = currentInstance; + const reactiveGetter = (source2) => deep === true ? source2 : ( + // for deep: false, only traverse root-level properties + traverse(source2, deep === false ? 1 : void 0) + ); + let getter; + let forceTrigger = false; + let isMultiSource = false; + if (isRef(source)) { + getter = () => source.value; + forceTrigger = isShallow(source); + } else if (isReactive(source)) { + getter = () => reactiveGetter(source); + forceTrigger = true; + } else if (isArray(source)) { + isMultiSource = true; + forceTrigger = source.some((s) => isReactive(s) || isShallow(s)); + getter = () => source.map((s) => { + if (isRef(s)) { + return s.value; + } else if (isReactive(s)) { + return reactiveGetter(s); + } else if (isFunction(s)) { + return callWithErrorHandling(s, instance, 2); + } else { + warnInvalidSource(s); + } + }); + } else if (isFunction(source)) { + if (cb) { + getter = () => callWithErrorHandling(source, instance, 2); + } else { + getter = () => { + if (cleanup) { + cleanup(); + } + return callWithAsyncErrorHandling( + source, + instance, + 3, + [onCleanup] + ); + }; + } + } else { + getter = NOOP; + warnInvalidSource(source); + } + if (cb && deep) { + const baseGetter = getter; + getter = () => traverse(baseGetter()); + } + let cleanup; + let onCleanup = (fn) => { + cleanup = effect2.onStop = () => { + callWithErrorHandling(fn, instance, 4); + cleanup = effect2.onStop = void 0; + }; + }; + let ssrCleanup; + if (isInSSRComponentSetup) { + onCleanup = NOOP; + if (!cb) { + getter(); + } else if (immediate) { + callWithAsyncErrorHandling(cb, instance, 3, [ + getter(), + isMultiSource ? [] : void 0, + onCleanup + ]); + } + if (flush === "sync") { + const ctx = useSSRContext(); + ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []); + } else { + return NOOP; + } + } + let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE; + const job = () => { + if (!effect2.active || !effect2.dirty) { + return; + } + if (cb) { + const newValue = effect2.run(); + if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue)) || false) { + if (cleanup) { + cleanup(); + } + callWithAsyncErrorHandling(cb, instance, 3, [ + newValue, + // pass undefined as the old value when it's changed for the first time + oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue, + onCleanup + ]); + oldValue = newValue; + } + } else { + effect2.run(); + } + }; + job.allowRecurse = !!cb; + let scheduler; + if (flush === "sync") { + scheduler = job; + } else if (flush === "post") { + scheduler = () => queuePostRenderEffect(job, instance && instance.suspense); + } else { + job.pre = true; + if (instance) + job.id = instance.uid; + scheduler = () => queueJob(job); + } + const effect2 = new ReactiveEffect(getter, NOOP, scheduler); + const scope = getCurrentScope(); + const unwatch = () => { + effect2.stop(); + if (scope) { + remove(scope.effects, effect2); + } + }; + if (true) { + effect2.onTrack = onTrack; + effect2.onTrigger = onTrigger; + } + if (cb) { + if (immediate) { + job(); + } else { + oldValue = effect2.run(); + } + } else if (flush === "post") { + queuePostRenderEffect( + effect2.run.bind(effect2), + instance && instance.suspense + ); + } else { + effect2.run(); + } + if (ssrCleanup) + ssrCleanup.push(unwatch); + return unwatch; +} +function instanceWatch(source, value, options) { + const publicThis = this.proxy; + const getter = isString(source) ? source.includes(".") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis); + let cb; + if (isFunction(value)) { + cb = value; + } else { + cb = value.handler; + options = value; + } + const reset = setCurrentInstance(this); + const res = doWatch(getter, cb.bind(publicThis), options); + reset(); + return res; +} +function createPathGetter(ctx, path) { + const segments = path.split("."); + return () => { + let cur = ctx; + for (let i = 0; i < segments.length && cur; i++) { + cur = cur[segments[i]]; + } + return cur; + }; +} +function traverse(value, depth, currentDepth = 0, seen) { + if (!isObject(value) || value["__v_skip"]) { + return value; + } + if (depth && depth > 0) { + if (currentDepth >= depth) { + return value; + } + currentDepth++; + } + seen = seen || /* @__PURE__ */ new Set(); + if (seen.has(value)) { + return value; + } + seen.add(value); + if (isRef(value)) { + traverse(value.value, depth, currentDepth, seen); + } else if (isArray(value)) { + for (let i = 0; i < value.length; i++) { + traverse(value[i], depth, currentDepth, seen); + } + } else if (isSet(value) || isMap(value)) { + value.forEach((v) => { + traverse(v, depth, currentDepth, seen); + }); + } else if (isPlainObject(value)) { + for (const key in value) { + traverse(value[key], depth, currentDepth, seen); + } + } + return value; +} +function validateDirectiveName(name) { + if (isBuiltInDirective(name)) { + warn$1("Do not use built-in directive ids as custom directive id: " + name); + } +} +function withDirectives(vnode, directives) { + if (currentRenderingInstance === null) { + warn$1(`withDirectives can only be used inside render functions.`); + return vnode; + } + const instance = getExposeProxy(currentRenderingInstance) || currentRenderingInstance.proxy; + const bindings = vnode.dirs || (vnode.dirs = []); + for (let i = 0; i < directives.length; i++) { + let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i]; + if (dir) { + if (isFunction(dir)) { + dir = { + mounted: dir, + updated: dir + }; + } + if (dir.deep) { + traverse(value); + } + bindings.push({ + dir, + instance, + value, + oldValue: void 0, + arg, + modifiers + }); + } + } + return vnode; +} +function invokeDirectiveHook(vnode, prevVNode, instance, name) { + const bindings = vnode.dirs; + const oldBindings = prevVNode && prevVNode.dirs; + for (let i = 0; i < bindings.length; i++) { + const binding = bindings[i]; + if (oldBindings) { + binding.oldValue = oldBindings[i].value; + } + let hook = binding.dir[name]; + if (hook) { + pauseTracking(); + callWithAsyncErrorHandling(hook, instance, 8, [ + vnode.el, + binding, + vnode, + prevVNode + ]); + resetTracking(); + } + } +} +var leaveCbKey = Symbol("_leaveCb"); +var enterCbKey = Symbol("_enterCb"); +function useTransitionState() { + const state = { + isMounted: false, + isLeaving: false, + isUnmounting: false, + leavingVNodes: /* @__PURE__ */ new Map() + }; + onMounted(() => { + state.isMounted = true; + }); + onBeforeUnmount(() => { + state.isUnmounting = true; + }); + return state; +} +var TransitionHookValidator = [Function, Array]; +var BaseTransitionPropsValidators = { + mode: String, + appear: Boolean, + persisted: Boolean, + // enter + onBeforeEnter: TransitionHookValidator, + onEnter: TransitionHookValidator, + onAfterEnter: TransitionHookValidator, + onEnterCancelled: TransitionHookValidator, + // leave + onBeforeLeave: TransitionHookValidator, + onLeave: TransitionHookValidator, + onAfterLeave: TransitionHookValidator, + onLeaveCancelled: TransitionHookValidator, + // appear + onBeforeAppear: TransitionHookValidator, + onAppear: TransitionHookValidator, + onAfterAppear: TransitionHookValidator, + onAppearCancelled: TransitionHookValidator +}; +var BaseTransitionImpl = { + name: `BaseTransition`, + props: BaseTransitionPropsValidators, + setup(props, { slots }) { + const instance = getCurrentInstance(); + const state = useTransitionState(); + return () => { + const children = slots.default && getTransitionRawChildren(slots.default(), true); + if (!children || !children.length) { + return; + } + let child = children[0]; + if (children.length > 1) { + let hasFound = false; + for (const c of children) { + if (c.type !== Comment) { + if (hasFound) { + warn$1( + " can only be used on a single element or component. Use for lists." + ); + break; + } + child = c; + hasFound = true; + if (false) + break; + } + } + } + const rawProps = toRaw(props); + const { mode } = rawProps; + if (mode && mode !== "in-out" && mode !== "out-in" && mode !== "default") { + warn$1(`invalid mode: ${mode}`); + } + if (state.isLeaving) { + return emptyPlaceholder(child); + } + const innerChild = getKeepAliveChild(child); + if (!innerChild) { + return emptyPlaceholder(child); + } + const enterHooks = resolveTransitionHooks( + innerChild, + rawProps, + state, + instance + ); + setTransitionHooks(innerChild, enterHooks); + const oldChild = instance.subTree; + const oldInnerChild = oldChild && getKeepAliveChild(oldChild); + if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(innerChild, oldInnerChild)) { + const leavingHooks = resolveTransitionHooks( + oldInnerChild, + rawProps, + state, + instance + ); + setTransitionHooks(oldInnerChild, leavingHooks); + if (mode === "out-in") { + state.isLeaving = true; + leavingHooks.afterLeave = () => { + state.isLeaving = false; + if (instance.update.active !== false) { + instance.effect.dirty = true; + instance.update(); + } + }; + return emptyPlaceholder(child); + } else if (mode === "in-out" && innerChild.type !== Comment) { + leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => { + const leavingVNodesCache = getLeavingNodesForType( + state, + oldInnerChild + ); + leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild; + el[leaveCbKey] = () => { + earlyRemove(); + el[leaveCbKey] = void 0; + delete enterHooks.delayedLeave; + }; + enterHooks.delayedLeave = delayedLeave; + }; + } + } + return child; + }; + } +}; +var BaseTransition = BaseTransitionImpl; +function getLeavingNodesForType(state, vnode) { + const { leavingVNodes } = state; + let leavingVNodesCache = leavingVNodes.get(vnode.type); + if (!leavingVNodesCache) { + leavingVNodesCache = /* @__PURE__ */ Object.create(null); + leavingVNodes.set(vnode.type, leavingVNodesCache); + } + return leavingVNodesCache; +} +function resolveTransitionHooks(vnode, props, state, instance) { + const { + appear, + mode, + persisted = false, + onBeforeEnter, + onEnter, + onAfterEnter, + onEnterCancelled, + onBeforeLeave, + onLeave, + onAfterLeave, + onLeaveCancelled, + onBeforeAppear, + onAppear, + onAfterAppear, + onAppearCancelled + } = props; + const key = String(vnode.key); + const leavingVNodesCache = getLeavingNodesForType(state, vnode); + const callHook3 = (hook, args) => { + hook && callWithAsyncErrorHandling( + hook, + instance, + 9, + args + ); + }; + const callAsyncHook = (hook, args) => { + const done = args[1]; + callHook3(hook, args); + if (isArray(hook)) { + if (hook.every((hook2) => hook2.length <= 1)) + done(); + } else if (hook.length <= 1) { + done(); + } + }; + const hooks = { + mode, + persisted, + beforeEnter(el) { + let hook = onBeforeEnter; + if (!state.isMounted) { + if (appear) { + hook = onBeforeAppear || onBeforeEnter; + } else { + return; + } + } + if (el[leaveCbKey]) { + el[leaveCbKey]( + true + /* cancelled */ + ); + } + const leavingVNode = leavingVNodesCache[key]; + if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) { + leavingVNode.el[leaveCbKey](); + } + callHook3(hook, [el]); + }, + enter(el) { + let hook = onEnter; + let afterHook = onAfterEnter; + let cancelHook = onEnterCancelled; + if (!state.isMounted) { + if (appear) { + hook = onAppear || onEnter; + afterHook = onAfterAppear || onAfterEnter; + cancelHook = onAppearCancelled || onEnterCancelled; + } else { + return; + } + } + let called = false; + const done = el[enterCbKey] = (cancelled) => { + if (called) + return; + called = true; + if (cancelled) { + callHook3(cancelHook, [el]); + } else { + callHook3(afterHook, [el]); + } + if (hooks.delayedLeave) { + hooks.delayedLeave(); + } + el[enterCbKey] = void 0; + }; + if (hook) { + callAsyncHook(hook, [el, done]); + } else { + done(); + } + }, + leave(el, remove2) { + const key2 = String(vnode.key); + if (el[enterCbKey]) { + el[enterCbKey]( + true + /* cancelled */ + ); + } + if (state.isUnmounting) { + return remove2(); + } + callHook3(onBeforeLeave, [el]); + let called = false; + const done = el[leaveCbKey] = (cancelled) => { + if (called) + return; + called = true; + remove2(); + if (cancelled) { + callHook3(onLeaveCancelled, [el]); + } else { + callHook3(onAfterLeave, [el]); + } + el[leaveCbKey] = void 0; + if (leavingVNodesCache[key2] === vnode) { + delete leavingVNodesCache[key2]; + } + }; + leavingVNodesCache[key2] = vnode; + if (onLeave) { + callAsyncHook(onLeave, [el, done]); + } else { + done(); + } + }, + clone(vnode2) { + return resolveTransitionHooks(vnode2, props, state, instance); + } + }; + return hooks; +} +function emptyPlaceholder(vnode) { + if (isKeepAlive(vnode)) { + vnode = cloneVNode(vnode); + vnode.children = null; + return vnode; + } +} +function getKeepAliveChild(vnode) { + return isKeepAlive(vnode) ? ( + // #7121 ensure get the child component subtree in case + // it's been replaced during HMR + vnode.component ? vnode.component.subTree : vnode.children ? vnode.children[0] : void 0 + ) : vnode; +} +function setTransitionHooks(vnode, hooks) { + if (vnode.shapeFlag & 6 && vnode.component) { + setTransitionHooks(vnode.component.subTree, hooks); + } else if (vnode.shapeFlag & 128) { + vnode.ssContent.transition = hooks.clone(vnode.ssContent); + vnode.ssFallback.transition = hooks.clone(vnode.ssFallback); + } else { + vnode.transition = hooks; + } +} +function getTransitionRawChildren(children, keepComment = false, parentKey) { + let ret = []; + let keyedFragmentCount = 0; + for (let i = 0; i < children.length; i++) { + let child = children[i]; + const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i); + if (child.type === Fragment) { + if (child.patchFlag & 128) + keyedFragmentCount++; + ret = ret.concat( + getTransitionRawChildren(child.children, keepComment, key) + ); + } else if (keepComment || child.type !== Comment) { + ret.push(key != null ? cloneVNode(child, { key }) : child); + } + } + if (keyedFragmentCount > 1) { + for (let i = 0; i < ret.length; i++) { + ret[i].patchFlag = -2; + } + } + return ret; +} +function defineComponent(options, extraOptions) { + return isFunction(options) ? ( + // #8326: extend call and options.name access are considered side-effects + // by Rollup, so we have to wrap it in a pure-annotated IIFE. + (() => extend({ name: options.name }, extraOptions, { setup: options }))() + ) : options; +} +var isAsyncWrapper = (i) => !!i.type.__asyncLoader; +function defineAsyncComponent(source) { + if (isFunction(source)) { + source = { loader: source }; + } + const { + loader, + loadingComponent, + errorComponent, + delay = 200, + timeout, + // undefined = never times out + suspensible = true, + onError: userOnError + } = source; + let pendingRequest = null; + let resolvedComp; + let retries = 0; + const retry = () => { + retries++; + pendingRequest = null; + return load(); + }; + const load = () => { + let thisRequest; + return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => { + err = err instanceof Error ? err : new Error(String(err)); + if (userOnError) { + return new Promise((resolve2, reject) => { + const userRetry = () => resolve2(retry()); + const userFail = () => reject(err); + userOnError(err, userRetry, userFail, retries + 1); + }); + } else { + throw err; + } + }).then((comp) => { + if (thisRequest !== pendingRequest && pendingRequest) { + return pendingRequest; + } + if (!comp) { + warn$1( + `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.` + ); + } + if (comp && (comp.__esModule || comp[Symbol.toStringTag] === "Module")) { + comp = comp.default; + } + if (comp && !isObject(comp) && !isFunction(comp)) { + throw new Error(`Invalid async component load result: ${comp}`); + } + resolvedComp = comp; + return comp; + })); + }; + return defineComponent({ + name: "AsyncComponentWrapper", + __asyncLoader: load, + get __asyncResolved() { + return resolvedComp; + }, + setup() { + const instance = currentInstance; + if (resolvedComp) { + return () => createInnerComp(resolvedComp, instance); + } + const onError = (err) => { + pendingRequest = null; + handleError( + err, + instance, + 13, + !errorComponent + ); + }; + if (suspensible && instance.suspense || isInSSRComponentSetup) { + return load().then((comp) => { + return () => createInnerComp(comp, instance); + }).catch((err) => { + onError(err); + return () => errorComponent ? createVNode(errorComponent, { + error: err + }) : null; + }); + } + const loaded = ref(false); + const error = ref(); + const delayed = ref(!!delay); + if (delay) { + setTimeout(() => { + delayed.value = false; + }, delay); + } + if (timeout != null) { + setTimeout(() => { + if (!loaded.value && !error.value) { + const err = new Error( + `Async component timed out after ${timeout}ms.` + ); + onError(err); + error.value = err; + } + }, timeout); + } + load().then(() => { + loaded.value = true; + if (instance.parent && isKeepAlive(instance.parent.vnode)) { + instance.parent.effect.dirty = true; + queueJob(instance.parent.update); + } + }).catch((err) => { + onError(err); + error.value = err; + }); + return () => { + if (loaded.value && resolvedComp) { + return createInnerComp(resolvedComp, instance); + } else if (error.value && errorComponent) { + return createVNode(errorComponent, { + error: error.value + }); + } else if (loadingComponent && !delayed.value) { + return createVNode(loadingComponent); + } + }; + } + }); +} +function createInnerComp(comp, parent) { + const { ref: ref2, props, children, ce } = parent.vnode; + const vnode = createVNode(comp, props, children); + vnode.ref = ref2; + vnode.ce = ce; + delete parent.vnode.ce; + return vnode; +} +var isKeepAlive = (vnode) => vnode.type.__isKeepAlive; +var KeepAliveImpl = { + name: `KeepAlive`, + // Marker for special handling inside the renderer. We are not using a === + // check directly on KeepAlive in the renderer, because importing it directly + // would prevent it from being tree-shaken. + __isKeepAlive: true, + props: { + include: [String, RegExp, Array], + exclude: [String, RegExp, Array], + max: [String, Number] + }, + setup(props, { slots }) { + const instance = getCurrentInstance(); + const sharedContext = instance.ctx; + if (!sharedContext.renderer) { + return () => { + const children = slots.default && slots.default(); + return children && children.length === 1 ? children[0] : children; + }; + } + const cache = /* @__PURE__ */ new Map(); + const keys = /* @__PURE__ */ new Set(); + let current = null; + if (true) { + instance.__v_cache = cache; + } + const parentSuspense = instance.suspense; + const { + renderer: { + p: patch, + m: move, + um: _unmount, + o: { createElement } + } + } = sharedContext; + const storageContainer = createElement("div"); + sharedContext.activate = (vnode, container, anchor, namespace, optimized) => { + const instance2 = vnode.component; + move(vnode, container, anchor, 0, parentSuspense); + patch( + instance2.vnode, + vnode, + container, + anchor, + instance2, + parentSuspense, + namespace, + vnode.slotScopeIds, + optimized + ); + queuePostRenderEffect(() => { + instance2.isDeactivated = false; + if (instance2.a) { + invokeArrayFns(instance2.a); + } + const vnodeHook = vnode.props && vnode.props.onVnodeMounted; + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode); + } + }, parentSuspense); + if (true) { + devtoolsComponentAdded(instance2); + } + }; + sharedContext.deactivate = (vnode) => { + const instance2 = vnode.component; + move(vnode, storageContainer, null, 1, parentSuspense); + queuePostRenderEffect(() => { + if (instance2.da) { + invokeArrayFns(instance2.da); + } + const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted; + if (vnodeHook) { + invokeVNodeHook(vnodeHook, instance2.parent, vnode); + } + instance2.isDeactivated = true; + }, parentSuspense); + if (true) { + devtoolsComponentAdded(instance2); + } + }; + function unmount(vnode) { + resetShapeFlag(vnode); + _unmount(vnode, instance, parentSuspense, true); + } + function pruneCache(filter) { + cache.forEach((vnode, key) => { + const name = getComponentName(vnode.type); + if (name && (!filter || !filter(name))) { + pruneCacheEntry(key); + } + }); + } + function pruneCacheEntry(key) { + const cached = cache.get(key); + if (!current || !isSameVNodeType(cached, current)) { + unmount(cached); + } else if (current) { + resetShapeFlag(current); + } + cache.delete(key); + keys.delete(key); + } + watch( + () => [props.include, props.exclude], + ([include, exclude]) => { + include && pruneCache((name) => matches(include, name)); + exclude && pruneCache((name) => !matches(exclude, name)); + }, + // prune post-render after `current` has been updated + { flush: "post", deep: true } + ); + let pendingCacheKey = null; + const cacheSubtree = () => { + if (pendingCacheKey != null) { + cache.set(pendingCacheKey, getInnerChild(instance.subTree)); + } + }; + onMounted(cacheSubtree); + onUpdated(cacheSubtree); + onBeforeUnmount(() => { + cache.forEach((cached) => { + const { subTree, suspense } = instance; + const vnode = getInnerChild(subTree); + if (cached.type === vnode.type && cached.key === vnode.key) { + resetShapeFlag(vnode); + const da = vnode.component.da; + da && queuePostRenderEffect(da, suspense); + return; + } + unmount(cached); + }); + }); + return () => { + pendingCacheKey = null; + if (!slots.default) { + return null; + } + const children = slots.default(); + const rawVNode = children[0]; + if (children.length > 1) { + if (true) { + warn$1(`KeepAlive should contain exactly one component child.`); + } + current = null; + return children; + } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) { + current = null; + return rawVNode; + } + let vnode = getInnerChild(rawVNode); + const comp = vnode.type; + const name = getComponentName( + isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp + ); + const { include, exclude, max } = props; + if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) { + current = vnode; + return rawVNode; + } + const key = vnode.key == null ? comp : vnode.key; + const cachedVNode = cache.get(key); + if (vnode.el) { + vnode = cloneVNode(vnode); + if (rawVNode.shapeFlag & 128) { + rawVNode.ssContent = vnode; + } + } + pendingCacheKey = key; + if (cachedVNode) { + vnode.el = cachedVNode.el; + vnode.component = cachedVNode.component; + if (vnode.transition) { + setTransitionHooks(vnode, vnode.transition); + } + vnode.shapeFlag |= 512; + keys.delete(key); + keys.add(key); + } else { + keys.add(key); + if (max && keys.size > parseInt(max, 10)) { + pruneCacheEntry(keys.values().next().value); + } + } + vnode.shapeFlag |= 256; + current = vnode; + return isSuspense(rawVNode.type) ? rawVNode : vnode; + }; + } +}; +var KeepAlive = KeepAliveImpl; +function matches(pattern, name) { + if (isArray(pattern)) { + return pattern.some((p2) => matches(p2, name)); + } else if (isString(pattern)) { + return pattern.split(",").includes(name); + } else if (isRegExp(pattern)) { + return pattern.test(name); + } + return false; +} +function onActivated(hook, target) { + registerKeepAliveHook(hook, "a", target); +} +function onDeactivated(hook, target) { + registerKeepAliveHook(hook, "da", target); +} +function registerKeepAliveHook(hook, type, target = currentInstance) { + const wrappedHook = hook.__wdc || (hook.__wdc = () => { + let current = target; + while (current) { + if (current.isDeactivated) { + return; + } + current = current.parent; + } + return hook(); + }); + injectHook(type, wrappedHook, target); + if (target) { + let current = target.parent; + while (current && current.parent) { + if (isKeepAlive(current.parent.vnode)) { + injectToKeepAliveRoot(wrappedHook, type, target, current); + } + current = current.parent; + } + } +} +function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) { + const injected = injectHook( + type, + hook, + keepAliveRoot, + true + /* prepend */ + ); + onUnmounted(() => { + remove(keepAliveRoot[type], injected); + }, target); +} +function resetShapeFlag(vnode) { + vnode.shapeFlag &= ~256; + vnode.shapeFlag &= ~512; +} +function getInnerChild(vnode) { + return vnode.shapeFlag & 128 ? vnode.ssContent : vnode; +} +function injectHook(type, hook, target = currentInstance, prepend = false) { + if (target) { + const hooks = target[type] || (target[type] = []); + const wrappedHook = hook.__weh || (hook.__weh = (...args) => { + if (target.isUnmounted) { + return; + } + pauseTracking(); + const reset = setCurrentInstance(target); + const res = callWithAsyncErrorHandling(hook, target, type, args); + reset(); + resetTracking(); + return res; + }); + if (prepend) { + hooks.unshift(wrappedHook); + } else { + hooks.push(wrappedHook); + } + return wrappedHook; + } else if (true) { + const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, "")); + warn$1( + `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` + ); + } +} +var createHook = (lifecycle) => (hook, target = currentInstance) => ( + // post-create lifecycle registrations are noops during SSR (except for serverPrefetch) + (!isInSSRComponentSetup || lifecycle === "sp") && injectHook(lifecycle, (...args) => hook(...args), target) +); +var onBeforeMount = createHook("bm"); +var onMounted = createHook("m"); +var onBeforeUpdate = createHook("bu"); +var onUpdated = createHook("u"); +var onBeforeUnmount = createHook("bum"); +var onUnmounted = createHook("um"); +var onServerPrefetch = createHook("sp"); +var onRenderTriggered = createHook( + "rtg" +); +var onRenderTracked = createHook( + "rtc" +); +function onErrorCaptured(hook, target = currentInstance) { + injectHook("ec", hook, target); +} +function renderList(source, renderItem, cache, index) { + let ret; + const cached = cache && cache[index]; + if (isArray(source) || isString(source)) { + ret = new Array(source.length); + for (let i = 0, l = source.length; i < l; i++) { + ret[i] = renderItem(source[i], i, void 0, cached && cached[i]); + } + } else if (typeof source === "number") { + if (!Number.isInteger(source)) { + warn$1(`The v-for range expect an integer value but got ${source}.`); + } + ret = new Array(source); + for (let i = 0; i < source; i++) { + ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]); + } + } else if (isObject(source)) { + if (source[Symbol.iterator]) { + ret = Array.from( + source, + (item, i) => renderItem(item, i, void 0, cached && cached[i]) + ); + } else { + const keys = Object.keys(source); + ret = new Array(keys.length); + for (let i = 0, l = keys.length; i < l; i++) { + const key = keys[i]; + ret[i] = renderItem(source[key], key, i, cached && cached[i]); + } + } + } else { + ret = []; + } + if (cache) { + cache[index] = ret; + } + return ret; +} +function createSlots(slots, dynamicSlots) { + for (let i = 0; i < dynamicSlots.length; i++) { + const slot = dynamicSlots[i]; + if (isArray(slot)) { + for (let j = 0; j < slot.length; j++) { + slots[slot[j].name] = slot[j].fn; + } + } else if (slot) { + slots[slot.name] = slot.key ? (...args) => { + const res = slot.fn(...args); + if (res) + res.key = slot.key; + return res; + } : slot.fn; + } + } + return slots; +} +function renderSlot(slots, name, props = {}, fallback, noSlotted) { + if (currentRenderingInstance.isCE || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.isCE) { + if (name !== "default") + props.name = name; + return createVNode("slot", props, fallback && fallback()); + } + let slot = slots[name]; + if (slot && slot.length > 1) { + warn$1( + `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.` + ); + slot = () => []; + } + if (slot && slot._c) { + slot._d = false; + } + openBlock(); + const validSlotContent = slot && ensureValidVNode(slot(props)); + const rendered = createBlock( + Fragment, + { + key: props.key || // slot content array of a dynamic conditional slot may have a branch + // key attached in the `createSlots` helper, respect that + validSlotContent && validSlotContent.key || `_${name}` + }, + validSlotContent || (fallback ? fallback() : []), + validSlotContent && slots._ === 1 ? 64 : -2 + ); + if (!noSlotted && rendered.scopeId) { + rendered.slotScopeIds = [rendered.scopeId + "-s"]; + } + if (slot && slot._c) { + slot._d = true; + } + return rendered; +} +function ensureValidVNode(vnodes) { + return vnodes.some((child) => { + if (!isVNode(child)) + return true; + if (child.type === Comment) + return false; + if (child.type === Fragment && !ensureValidVNode(child.children)) + return false; + return true; + }) ? vnodes : null; +} +function toHandlers(obj, preserveCaseIfNecessary) { + const ret = {}; + if (!isObject(obj)) { + warn$1(`v-on with no argument expects an object value.`); + return ret; + } + for (const key in obj) { + ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key]; + } + return ret; +} +var getPublicInstance = (i) => { + if (!i) + return null; + if (isStatefulComponent(i)) + return getExposeProxy(i) || i.proxy; + return getPublicInstance(i.parent); +}; +var publicPropertiesMap = ( + // Move PURE marker to new line to workaround compiler discarding it + // due to type annotation + extend(/* @__PURE__ */ Object.create(null), { + $: (i) => i, + $el: (i) => i.vnode.el, + $data: (i) => i.data, + $props: (i) => true ? shallowReadonly(i.props) : i.props, + $attrs: (i) => true ? shallowReadonly(i.attrs) : i.attrs, + $slots: (i) => true ? shallowReadonly(i.slots) : i.slots, + $refs: (i) => true ? shallowReadonly(i.refs) : i.refs, + $parent: (i) => getPublicInstance(i.parent), + $root: (i) => getPublicInstance(i.root), + $emit: (i) => i.emit, + $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type, + $forceUpdate: (i) => i.f || (i.f = () => { + i.effect.dirty = true; + queueJob(i.update); + }), + $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)), + $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP + }) +); +var isReservedPrefix = (key) => key === "_" || key === "$"; +var hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key); +var PublicInstanceProxyHandlers = { + get({ _: instance }, key) { + const { ctx, setupState, data, props, accessCache, type, appContext } = instance; + if (key === "__isVue") { + return true; + } + let normalizedProps; + if (key[0] !== "$") { + const n = accessCache[key]; + if (n !== void 0) { + switch (n) { + case 1: + return setupState[key]; + case 2: + return data[key]; + case 4: + return ctx[key]; + case 3: + return props[key]; + } + } else if (hasSetupBinding(setupState, key)) { + accessCache[key] = 1; + return setupState[key]; + } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { + accessCache[key] = 2; + return data[key]; + } else if ( + // only cache other properties when instance has declared (thus stable) + // props + (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key) + ) { + accessCache[key] = 3; + return props[key]; + } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { + accessCache[key] = 4; + return ctx[key]; + } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) { + accessCache[key] = 0; + } + } + const publicGetter = publicPropertiesMap[key]; + let cssModule, globalProperties; + if (publicGetter) { + if (key === "$attrs") { + track(instance, "get", key); + markAttrsAccessed(); + } else if (key === "$slots") { + track(instance, "get", key); + } + return publicGetter(instance); + } else if ( + // css module (injected by vue-loader) + (cssModule = type.__cssModules) && (cssModule = cssModule[key]) + ) { + return cssModule; + } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { + accessCache[key] = 4; + return ctx[key]; + } else if ( + // global properties + globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key) + ) { + { + return globalProperties[key]; + } + } else if (currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading + // to infinite warning loop + key.indexOf("__v") !== 0)) { + if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) { + warn$1( + `Property ${JSON.stringify( + key + )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.` + ); + } else if (instance === currentRenderingInstance) { + warn$1( + `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.` + ); + } + } + }, + set({ _: instance }, key, value) { + const { data, setupState, ctx } = instance; + if (hasSetupBinding(setupState, key)) { + setupState[key] = value; + return true; + } else if (setupState.__isScriptSetup && hasOwn(setupState, key)) { + warn$1(`Cannot mutate + + + + + +
Skip to content

404

PAGE NOT FOUND

But if you don't change your direction, and if you keep looking, you may end up where you are heading.
+ + + + \ No newline at end of file diff --git a/docs/assets/app.AAl1BPiw.js b/docs/assets/app.AAl1BPiw.js new file mode 100644 index 0000000..7da9007 --- /dev/null +++ b/docs/assets/app.AAl1BPiw.js @@ -0,0 +1,7 @@ +function __vite__mapDeps(indexes) { + if (!__vite__mapDeps.viteFileDeps) { + __vite__mapDeps.viteFileDeps = [] + } + return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) +} +import{j as o,a3 as p,a4 as u,a5 as l,a6 as c,a7 as f,a8 as d,a9 as m,aa as h,ab as g,ac as A,ad as P,d as _,u as v,l as y,z as C,ae as E,af as b,ag as w,ah as R}from"./chunks/framework.PNNbM9mo.js";import{t as S}from"./chunks/theme.PSGgyvwz.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(S),T=_({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return y(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&E(),b(),w(),s.setup&&s.setup(),()=>R(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=L(),a=j();a.provide(u,e);const t=l(e.route);return a.provide(c,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return h(T)}function L(){let e=o,a;return g(t=>{let n=A(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=P(()=>import(n),__vite__mapDeps([]))),o&&(e=!1),r},s.NotFound)}o&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{p(a.route,t.site),e.mount("#app")})});export{D as createApp}; diff --git a/docs/assets/chunks/framework.PNNbM9mo.js b/docs/assets/chunks/framework.PNNbM9mo.js new file mode 100644 index 0000000..c491ea4 --- /dev/null +++ b/docs/assets/chunks/framework.PNNbM9mo.js @@ -0,0 +1,17 @@ +/** +* @vue/shared v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function ms(e,t){const n=new Set(e.split(","));return t?s=>n.has(s.toLowerCase()):s=>n.has(s)}const te={},mt=[],xe=()=>{},lo=()=>!1,Bt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),_s=e=>e.startsWith("onUpdate:"),ie=Object.assign,ys=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},co=Object.prototype.hasOwnProperty,X=(e,t)=>co.call(e,t),B=Array.isArray,_t=e=>bn(e)==="[object Map]",jr=e=>bn(e)==="[object Set]",K=e=>typeof e=="function",ne=e=>typeof e=="string",St=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",Vr=e=>(Z(e)||K(e))&&K(e.then)&&K(e.catch),Dr=Object.prototype.toString,bn=e=>Dr.call(e),ao=e=>bn(e).slice(8,-1),Ur=e=>bn(e)==="[object Object]",vs=e=>ne(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,yt=ms(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),wn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},uo=/-(\w)/g,Me=wn(e=>e.replace(uo,(t,n)=>n?n.toUpperCase():"")),fo=/\B([A-Z])/g,at=wn(e=>e.replace(fo,"-$1").toLowerCase()),En=wn(e=>e.charAt(0).toUpperCase()+e.slice(1)),on=wn(e=>e?`on${En(e)}`:""),Qe=(e,t)=>!Object.is(e,t),Dn=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},ho=e=>{const t=parseFloat(e);return isNaN(t)?e:t},po=e=>{const t=ne(e)?Number(e):NaN;return isNaN(t)?e:t};let Ws;const Br=()=>Ws||(Ws=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function bs(e){if(B(e)){const t={};for(let n=0;n{if(n){const s=n.split(mo);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ws(e){let t="";if(ne(e))t=e;else if(B(e))for(let n=0;nne(e)?e:e==null?"":B(e)||Z(e)&&(e.toString===Dr||!K(e.toString))?JSON.stringify(e,Kr,2):String(e),Kr=(e,t)=>t&&t.__v_isRef?Kr(e,t.value):_t(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[Un(s,i)+" =>"]=r,n),{})}:jr(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Un(n))}:St(t)?Un(t):Z(t)&&!B(t)&&!Ur(t)?String(t):t,Un=(e,t="")=>{var n;return St(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ve;class wo{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=ve,!t&&ve&&(this.index=(ve.scopes||(ve.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=ve;try{return ve=this,t()}finally{ve=n}}}on(){ve=this}off(){ve=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),ft()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Xe,n=ot;try{return Xe=!0,ot=this,this._runnings++,qs(this),this.fn()}finally{Gs(this),this._runnings--,ot=n,Xe=t}}stop(){var t;this.active&&(qs(this),Gs(this),(t=this.onStop)==null||t.call(this),this.active=!1)}}function xo(e){return e.value}function qs(e){e._trackId++,e._depsLength=0}function Gs(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},fn=new WeakMap,lt=Symbol(""),is=Symbol("");function _e(e,t,n){if(Xe&&ot){let s=fn.get(e);s||fn.set(e,s=new Map);let r=s.get(n);r||s.set(n,r=Yr(()=>s.delete(n))),zr(ot,r)}}function He(e,t,n,s,r,i){const o=fn.get(e);if(!o)return;let l=[];if(t==="clear")l=[...o.values()];else if(n==="length"&&B(e)){const c=Number(s);o.forEach((u,d)=>{(d==="length"||!St(d)&&d>=c)&&l.push(u)})}else switch(n!==void 0&&l.push(o.get(n)),t){case"add":B(e)?vs(n)&&l.push(o.get("length")):(l.push(o.get(lt)),_t(e)&&l.push(o.get(is)));break;case"delete":B(e)||(l.push(o.get(lt)),_t(e)&&l.push(o.get(is)));break;case"set":_t(e)&&l.push(o.get(lt));break}Cs();for(const c of l)c&&Xr(c,4);xs()}function So(e,t){var n;return(n=fn.get(e))==null?void 0:n.get(t)}const To=ms("__proto__,__v_isRef,__isVue"),Jr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(St)),zs=Ao();function Ao(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=Y(this);for(let i=0,o=this.length;i{e[t]=function(...n){ut(),Cs();const s=Y(this)[t].apply(this,n);return xs(),ft(),s}}),e}function Ro(e){const t=Y(this);return _e(t,"has",e),t.hasOwnProperty(e)}class Qr{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Uo:ni:i?ti:ei).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=B(t);if(!r){if(o&&X(zs,n))return Reflect.get(zs,n,s);if(n==="hasOwnProperty")return Ro}const l=Reflect.get(t,n,s);return(St(n)?Jr.has(n):To(n))||(r||_e(t,"get",n),i)?l:he(l)?o&&vs(n)?l:l.value:Z(l)?r?Sn(l):xn(l):l}}class Zr extends Qr{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=Ct(i);if(!dn(s)&&!Ct(s)&&(i=Y(i),s=Y(s)),!B(t)&&he(i)&&!he(s))return c?!1:(i.value=s,!0)}const o=B(t)&&vs(n)?Number(n)e,Cn=e=>Reflect.getPrototypeOf(e);function qt(e,t,n=!1,s=!1){e=e.__v_raw;const r=Y(e),i=Y(t);n||(Qe(t,i)&&_e(r,"get",t),_e(r,"get",i));const{has:o}=Cn(r),l=s?Ss:n?Rs:Ht;if(o.call(r,t))return l(e.get(t));if(o.call(r,i))return l(e.get(i));e!==r&&e.get(t)}function Gt(e,t=!1){const n=this.__v_raw,s=Y(n),r=Y(e);return t||(Qe(e,r)&&_e(s,"has",e),_e(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function zt(e,t=!1){return e=e.__v_raw,!t&&_e(Y(e),"iterate",lt),Reflect.get(e,"size",e)}function Xs(e){e=Y(e);const t=Y(this);return Cn(t).has.call(t,e)||(t.add(e),He(t,"add",e,e)),this}function Ys(e,t){t=Y(t);const n=Y(this),{has:s,get:r}=Cn(n);let i=s.call(n,e);i||(e=Y(e),i=s.call(n,e));const o=r.call(n,e);return n.set(e,t),i?Qe(t,o)&&He(n,"set",e,t):He(n,"add",e,t),this}function Js(e){const t=Y(this),{has:n,get:s}=Cn(t);let r=n.call(t,e);r||(e=Y(e),r=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return r&&He(t,"delete",e,void 0),i}function Qs(){const e=Y(this),t=e.size!==0,n=e.clear();return t&&He(e,"clear",void 0,void 0),n}function Xt(e,t){return function(s,r){const i=this,o=i.__v_raw,l=Y(o),c=t?Ss:e?Rs:Ht;return!e&&_e(l,"iterate",lt),o.forEach((u,d)=>s.call(r,c(u),c(d),i))}}function Yt(e,t,n){return function(...s){const r=this.__v_raw,i=Y(r),o=_t(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,u=r[e](...s),d=n?Ss:t?Rs:Ht;return!t&&_e(i,"iterate",c?is:lt),{next(){const{value:h,done:m}=u.next();return m?{value:h,done:m}:{value:l?[d(h[0]),d(h[1])]:d(h),done:m}},[Symbol.iterator](){return this}}}}function Ue(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Mo(){const e={get(i){return qt(this,i)},get size(){return zt(this)},has:Gt,add:Xs,set:Ys,delete:Js,clear:Qs,forEach:Xt(!1,!1)},t={get(i){return qt(this,i,!1,!0)},get size(){return zt(this)},has:Gt,add:Xs,set:Ys,delete:Js,clear:Qs,forEach:Xt(!1,!0)},n={get(i){return qt(this,i,!0)},get size(){return zt(this,!0)},has(i){return Gt.call(this,i,!0)},add:Ue("add"),set:Ue("set"),delete:Ue("delete"),clear:Ue("clear"),forEach:Xt(!0,!1)},s={get(i){return qt(this,i,!0,!0)},get size(){return zt(this,!0)},has(i){return Gt.call(this,i,!0)},add:Ue("add"),set:Ue("set"),delete:Ue("delete"),clear:Ue("clear"),forEach:Xt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=Yt(i,!1,!1),n[i]=Yt(i,!0,!1),t[i]=Yt(i,!1,!0),s[i]=Yt(i,!0,!0)}),[e,n,t,s]}const[No,Fo,$o,Ho]=Mo();function Ts(e,t){const n=t?e?Ho:$o:e?Fo:No;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(X(n,r)&&r in s?n:s,r,i)}const jo={get:Ts(!1,!1)},Vo={get:Ts(!1,!0)},Do={get:Ts(!0,!1)},ei=new WeakMap,ti=new WeakMap,ni=new WeakMap,Uo=new WeakMap;function Bo(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ko(e){return e.__v_skip||!Object.isExtensible(e)?0:Bo(ao(e))}function xn(e){return Ct(e)?e:As(e,!1,Io,jo,ei)}function Ko(e){return As(e,!1,Po,Vo,ti)}function Sn(e){return As(e,!0,Lo,Do,ni)}function As(e,t,n,s,r){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=ko(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function vt(e){return Ct(e)?vt(e.__v_raw):!!(e&&e.__v_isReactive)}function Ct(e){return!!(e&&e.__v_isReadonly)}function dn(e){return!!(e&&e.__v_isShallow)}function si(e){return vt(e)||Ct(e)}function Y(e){const t=e&&e.__v_raw;return t?Y(t):e}function It(e){return Object.isExtensible(e)&&un(e,"__v_skip",!0),e}const Ht=e=>Z(e)?xn(e):e,Rs=e=>Z(e)?Sn(e):e;class ri{constructor(t,n,s,r){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Es(()=>t(this._value),()=>Lt(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!r,this.__v_isReadonly=s}get value(){const t=Y(this);return(!t._cacheable||t.effect.dirty)&&Qe(t._value,t._value=t.effect.run())&&Lt(t,4),Os(t),t.effect._dirtyLevel>=2&&Lt(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function Wo(e,t,n=!1){let s,r;const i=K(e);return i?(s=e,r=xe):(s=e.get,r=e.set),new ri(s,r,i||!r,n)}function Os(e){var t;Xe&&ot&&(e=Y(e),zr(ot,(t=e.dep)!=null?t:e.dep=Yr(()=>e.dep=void 0,e instanceof ri?e:void 0)))}function Lt(e,t=4,n){e=Y(e);const s=e.dep;s&&Xr(s,t)}function he(e){return!!(e&&e.__v_isRef===!0)}function fe(e){return oi(e,!1)}function ii(e){return oi(e,!0)}function oi(e,t){return he(e)?e:new qo(e,t)}class qo{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:Y(t),this._value=n?t:Ht(t)}get value(){return Os(this),this._value}set value(t){const n=this.__v_isShallow||dn(t)||Ct(t);t=n?t:Y(t),Qe(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Ht(t),Lt(this,4))}}function li(e){return he(e)?e.value:e}const Go={get:(e,t,n)=>li(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return he(r)&&!he(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function ci(e){return vt(e)?e:new Proxy(e,Go)}class zo{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:s}=t(()=>Os(this),()=>Lt(this));this._get=n,this._set=s}get value(){return this._get()}set value(t){this._set(t)}}function Xo(e){return new zo(e)}class Yo{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return So(Y(this._object),this._key)}}class Jo{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Qo(e,t,n){return he(e)?e:K(e)?new Jo(e):Z(e)&&arguments.length>1?Zo(e,t,n):fe(e)}function Zo(e,t,n){const s=e[t];return he(s)?s:new Yo(e,t,n)}/** +* @vue/runtime-core v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Ye(e,t,n,s){try{return s?e(...s):e()}catch(r){Tn(r,t,n)}}function Se(e,t,n,s){if(K(e)){const i=Ye(e,t,n,s);return i&&Vr(i)&&i.catch(o=>{Tn(o,t,n)}),i}const r=[];for(let i=0;i>>1,r=ue[s],i=Vt(r);iPe&&ue.splice(t,1)}function sl(e){B(e)?bt.push(...e):(!We||!We.includes(e,e.allowRecurse?rt+1:rt))&&bt.push(e),ui()}function Zs(e,t,n=jt?Pe+1:0){for(;nVt(n)-Vt(s));if(bt.length=0,We){We.push(...t);return}for(We=t,rt=0;rte.id==null?1/0:e.id,rl=(e,t)=>{const n=Vt(e)-Vt(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function fi(e){os=!1,jt=!0,ue.sort(rl);try{for(Pe=0;Pene(w)?w.trim():w)),h&&(r=n.map(ho))}let l,c=s[l=on(t)]||s[l=on(Me(t))];!c&&i&&(c=s[l=on(at(t))]),c&&Se(c,e,6,r);const u=s[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Se(u,e,6,r)}}function di(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!K(e)){const c=u=>{const d=di(u,t,!0);d&&(l=!0,ie(o,d))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(Z(e)&&s.set(e,null),null):(B(i)?i.forEach(c=>o[c]=null):ie(o,i),Z(e)&&s.set(e,o),o)}function Rn(e,t){return!e||!Bt(t)?!1:(t=t.slice(2).replace(/Once$/,""),X(e,t[0].toLowerCase()+t.slice(1))||X(e,at(t))||X(e,t))}let de=null,On=null;function pn(e){const t=de;return de=e,On=e&&e.type.__scopeId||null,t}function Ha(e){On=e}function ja(){On=null}function ol(e,t=de,n){if(!t||e._n)return e;const s=(...r)=>{s._d&&fr(-1);const i=pn(t);let o;try{o=e(...r)}finally{pn(i),s._d&&fr(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Bn(e){const{type:t,vnode:n,proxy:s,withProxy:r,props:i,propsOptions:[o],slots:l,attrs:c,emit:u,render:d,renderCache:h,data:m,setupState:w,ctx:O,inheritAttrs:M}=e;let V,q;const J=pn(e);try{if(n.shapeFlag&4){const _=r||s,P=_;V=Ae(d.call(P,_,h,i,w,m,O)),q=c}else{const _=t;V=Ae(_.length>1?_(i,{attrs:c,slots:l,emit:u}):_(i,null)),q=t.props?c:ll(c)}}catch(_){Ft.length=0,Tn(_,e,1),V=ae(be)}let g=V;if(q&&M!==!1){const _=Object.keys(q),{shapeFlag:P}=g;_.length&&P&7&&(o&&_.some(_s)&&(q=cl(q,o)),g=Ze(g,q))}return n.dirs&&(g=Ze(g),g.dirs=g.dirs?g.dirs.concat(n.dirs):n.dirs),n.transition&&(g.transition=n.transition),V=g,pn(J),V}const ll=e=>{let t;for(const n in e)(n==="class"||n==="style"||Bt(n))&&((t||(t={}))[n]=e[n]);return t},cl=(e,t)=>{const n={};for(const s in e)(!_s(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function al(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?er(s,o,u):!!o;if(c&8){const d=t.dynamicProps;for(let h=0;he.__isSuspense;function gi(e,t){t&&t.pendingBranch?B(e)?t.effects.push(...e):t.effects.push(e):sl(e)}const dl=Symbol.for("v-scx"),hl=()=>Et(dl);function mi(e,t){return In(e,null,t)}function Ua(e,t){return In(e,null,{flush:"post"})}const Jt={};function je(e,t,n){return In(e,t,n)}function In(e,t,{immediate:n,deep:s,flush:r,once:i,onTrack:o,onTrigger:l}=te){if(t&&i){const I=t;t=(...D)=>{I(...D),P()}}const c=ce,u=I=>s===!0?I:pt(I,s===!1?1:void 0);let d,h=!1,m=!1;if(he(e)?(d=()=>e.value,h=dn(e)):vt(e)?(d=()=>u(e),h=!0):B(e)?(m=!0,h=e.some(I=>vt(I)||dn(I)),d=()=>e.map(I=>{if(he(I))return I.value;if(vt(I))return u(I);if(K(I))return Ye(I,c,2)})):K(e)?t?d=()=>Ye(e,c,2):d=()=>(w&&w(),Se(e,c,3,[O])):d=xe,t&&s){const I=d;d=()=>pt(I())}let w,O=I=>{w=g.onStop=()=>{Ye(I,c,4),w=g.onStop=void 0}},M;if($n)if(O=xe,t?n&&Se(t,c,3,[d(),m?[]:void 0,O]):d(),r==="sync"){const I=hl();M=I.__watcherHandles||(I.__watcherHandles=[])}else return xe;let V=m?new Array(e.length).fill(Jt):Jt;const q=()=>{if(!(!g.active||!g.dirty))if(t){const I=g.run();(s||h||(m?I.some((D,R)=>Qe(D,V[R])):Qe(I,V)))&&(w&&w(),Se(t,c,3,[I,V===Jt?void 0:m&&V[0]===Jt?[]:V,O]),V=I)}else g.run()};q.allowRecurse=!!t;let J;r==="sync"?J=q:r==="post"?J=()=>ge(q,c&&c.suspense):(q.pre=!0,c&&(q.id=c.uid),J=()=>Ls(q));const g=new Es(d,xe,J),_=Wr(),P=()=>{g.stop(),_&&ys(_.effects,g)};return t?n?q():V=g.run():r==="post"?ge(g.run.bind(g),c&&c.suspense):g.run(),M&&M.push(P),P}function pl(e,t,n){const s=this.proxy,r=ne(e)?e.includes(".")?_i(s,e):()=>s[e]:e.bind(s,s);let i;K(t)?i=t:(i=t.handler,n=t);const o=kt(this),l=In(r,i.bind(s),n);return o(),l}function _i(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;r0){if(n>=t)return e;n++}if(s=s||new Set,s.has(e))return e;if(s.add(e),he(e))pt(e.value,t,n,s);else if(B(e))for(let r=0;r{pt(r,t,n,s)});else if(Ur(e))for(const r in e)pt(e[r],t,n,s);return e}function Le(e,t,n,s){const r=e.dirs,i=t&&t.dirs;for(let o=0;o{e.isMounted=!0}),Ci(()=>{e.isUnmounting=!0}),e}const we=[Function,Array],yi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:we,onEnter:we,onAfterEnter:we,onEnterCancelled:we,onBeforeLeave:we,onLeave:we,onAfterLeave:we,onLeaveCancelled:we,onBeforeAppear:we,onAppear:we,onAfterAppear:we,onAppearCancelled:we},ml={name:"BaseTransition",props:yi,setup(e,{slots:t}){const n=Fn(),s=gl();return()=>{const r=t.default&&bi(t.default(),!0);if(!r||!r.length)return;let i=r[0];if(r.length>1){for(const m of r)if(m.type!==be){i=m;break}}const o=Y(e),{mode:l}=o;if(s.isLeaving)return kn(i);const c=nr(i);if(!c)return kn(i);const u=ls(c,o,s,n);cs(c,u);const d=n.subTree,h=d&&nr(d);if(h&&h.type!==be&&!it(c,h)){const m=ls(h,o,s,n);if(cs(h,m),l==="out-in")return s.isLeaving=!0,m.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},kn(i);l==="in-out"&&c.type!==be&&(m.delayLeave=(w,O,M)=>{const V=vi(s,h);V[String(h.key)]=h,w[qe]=()=>{O(),w[qe]=void 0,delete u.delayedLeave},u.delayedLeave=M})}return i}}},_l=ml;function vi(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function ls(e,t,n,s){const{appear:r,mode:i,persisted:o=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:u,onEnterCancelled:d,onBeforeLeave:h,onLeave:m,onAfterLeave:w,onLeaveCancelled:O,onBeforeAppear:M,onAppear:V,onAfterAppear:q,onAppearCancelled:J}=t,g=String(e.key),_=vi(n,e),P=(R,H)=>{R&&Se(R,s,9,H)},I=(R,H)=>{const E=H[1];P(R,H),B(R)?R.every(U=>U.length<=1)&&E():R.length<=1&&E()},D={mode:i,persisted:o,beforeEnter(R){let H=l;if(!n.isMounted)if(r)H=M||l;else return;R[qe]&&R[qe](!0);const E=_[g];E&&it(e,E)&&E.el[qe]&&E.el[qe](),P(H,[R])},enter(R){let H=c,E=u,U=d;if(!n.isMounted)if(r)H=V||c,E=q||u,U=J||d;else return;let S=!1;const W=R[Qt]=re=>{S||(S=!0,re?P(U,[R]):P(E,[R]),D.delayedLeave&&D.delayedLeave(),R[Qt]=void 0)};H?I(H,[R,W]):W()},leave(R,H){const E=String(e.key);if(R[Qt]&&R[Qt](!0),n.isUnmounting)return H();P(h,[R]);let U=!1;const S=R[qe]=W=>{U||(U=!0,H(),W?P(O,[R]):P(w,[R]),R[qe]=void 0,_[E]===e&&delete _[E])};_[E]=e,m?I(m,[R,S]):S()},clone(R){return ls(R,t,n,s)}};return D}function kn(e){if(Ln(e))return e=Ze(e),e.children=null,e}function nr(e){return Ln(e)?e.children?e.children[0]:void 0:e}function cs(e,t){e.shapeFlag&6&&e.component?cs(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function bi(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader,Ln=e=>e.type.__isKeepAlive;function yl(e,t){Ei(e,"a",t)}function vl(e,t){Ei(e,"da",t)}function Ei(e,t,n=ce){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Pn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)Ln(r.parent.vnode)&&bl(s,t,n,r),r=r.parent}}function bl(e,t,n,s){const r=Pn(t,e,s,!0);Mn(()=>{ys(s[t],r)},n)}function Pn(e,t,n=ce,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;ut();const l=kt(n),c=Se(t,n,e,o);return l(),ft(),c});return s?r.unshift(i):r.push(i),i}}const De=e=>(t,n=ce)=>(!$n||e==="sp")&&Pn(e,(...s)=>t(...s),n),wl=De("bm"),Tt=De("m"),El=De("bu"),Cl=De("u"),Ci=De("bum"),Mn=De("um"),xl=De("sp"),Sl=De("rtg"),Tl=De("rtc");function Al(e,t=ce){Pn("ec",e,t)}function Ba(e,t,n,s){let r;const i=n&&n[s];if(B(e)||ne(e)){r=new Array(e.length);for(let o=0,l=e.length;ot(o,l,void 0,i&&i[l]));else{const o=Object.keys(e);r=new Array(o.length);for(let l=0,c=o.length;l_n(t)?!(t.type===be||t.type===me&&!xi(t.children)):!0)?e:null}function Ka(e,t){const n={};for(const s in e)n[t&&/[A-Z]/.test(s)?`on:${s}`:on(s)]=e[s];return n}const as=e=>e?Ui(e)?$s(e)||e.proxy:as(e.parent):null,Pt=ie(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>as(e.parent),$root:e=>as(e.root),$emit:e=>e.emit,$options:e=>Ms(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Ls(e.update)}),$nextTick:e=>e.n||(e.n=An.bind(e.proxy)),$watch:e=>pl.bind(e)}),Kn=(e,t)=>e!==te&&!e.__isScriptSetup&&X(e,t),Rl={get({_:e},t){const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let u;if(t[0]!=="$"){const w=o[t];if(w!==void 0)switch(w){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(Kn(s,t))return o[t]=1,s[t];if(r!==te&&X(r,t))return o[t]=2,r[t];if((u=e.propsOptions[0])&&X(u,t))return o[t]=3,i[t];if(n!==te&&X(n,t))return o[t]=4,n[t];us&&(o[t]=0)}}const d=Pt[t];let h,m;if(d)return t==="$attrs"&&_e(e,"get",t),d(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==te&&X(n,t))return o[t]=4,n[t];if(m=c.config.globalProperties,X(m,t))return m[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return Kn(r,t)?(r[t]=n,!0):s!==te&&X(s,t)?(s[t]=n,!0):X(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==te&&X(e,o)||Kn(t,o)||(l=i[0])&&X(l,o)||X(s,o)||X(Pt,o)||X(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:X(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Wa(){return Ol().slots}function Ol(){const e=Fn();return e.setupContext||(e.setupContext=ki(e))}function sr(e){return B(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let us=!0;function Il(e){const t=Ms(e),n=e.proxy,s=e.ctx;us=!1,t.beforeCreate&&rr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:u,created:d,beforeMount:h,mounted:m,beforeUpdate:w,updated:O,activated:M,deactivated:V,beforeDestroy:q,beforeUnmount:J,destroyed:g,unmounted:_,render:P,renderTracked:I,renderTriggered:D,errorCaptured:R,serverPrefetch:H,expose:E,inheritAttrs:U,components:S,directives:W,filters:re}=t;if(u&&Ll(u,s,null),o)for(const z in o){const F=o[z];K(F)&&(s[z]=F.bind(n))}if(r){const z=r.call(n,n);Z(z)&&(e.data=xn(z))}if(us=!0,i)for(const z in i){const F=i[z],Fe=K(F)?F.bind(n,n):K(F.get)?F.get.bind(n,n):xe,Kt=!K(F)&&K(F.set)?F.set.bind(n):xe,et=se({get:Fe,set:Kt});Object.defineProperty(s,z,{enumerable:!0,configurable:!0,get:()=>et.value,set:Oe=>et.value=Oe})}if(l)for(const z in l)Si(l[z],s,n,z);if(c){const z=K(c)?c.call(n):c;Reflect.ownKeys(z).forEach(F=>{Hl(F,z[F])})}d&&rr(d,e,"c");function $(z,F){B(F)?F.forEach(Fe=>z(Fe.bind(n))):F&&z(F.bind(n))}if($(wl,h),$(Tt,m),$(El,w),$(Cl,O),$(yl,M),$(vl,V),$(Al,R),$(Tl,I),$(Sl,D),$(Ci,J),$(Mn,_),$(xl,H),B(E))if(E.length){const z=e.exposed||(e.exposed={});E.forEach(F=>{Object.defineProperty(z,F,{get:()=>n[F],set:Fe=>n[F]=Fe})})}else e.exposed||(e.exposed={});P&&e.render===xe&&(e.render=P),U!=null&&(e.inheritAttrs=U),S&&(e.components=S),W&&(e.directives=W)}function Ll(e,t,n=xe){B(e)&&(e=fs(e));for(const s in e){const r=e[s];let i;Z(r)?"default"in r?i=Et(r.from||s,r.default,!0):i=Et(r.from||s):i=Et(r),he(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function rr(e,t,n){Se(B(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Si(e,t,n,s){const r=s.includes(".")?_i(n,s):()=>n[s];if(ne(e)){const i=t[e];K(i)&&je(r,i)}else if(K(e))je(r,e.bind(n));else if(Z(e))if(B(e))e.forEach(i=>Si(i,t,n,s));else{const i=K(e.handler)?e.handler.bind(n):t[e.handler];K(i)&&je(r,i,e)}}function Ms(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(u=>gn(c,u,o,!0)),gn(c,t,o)),Z(t)&&i.set(t,c),c}function gn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&gn(e,i,n,!0),r&&r.forEach(o=>gn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Pl[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Pl={data:ir,props:or,emits:or,methods:Ot,computed:Ot,beforeCreate:pe,created:pe,beforeMount:pe,mounted:pe,beforeUpdate:pe,updated:pe,beforeDestroy:pe,beforeUnmount:pe,destroyed:pe,unmounted:pe,activated:pe,deactivated:pe,errorCaptured:pe,serverPrefetch:pe,components:Ot,directives:Ot,watch:Nl,provide:ir,inject:Ml};function ir(e,t){return t?e?function(){return ie(K(e)?e.call(this,this):e,K(t)?t.call(this,this):t)}:t:e}function Ml(e,t){return Ot(fs(e),fs(t))}function fs(e){if(B(e)){const t={};for(let n=0;n1)return n&&K(t)?t.call(s&&s.proxy):t}}function jl(e,t,n,s=!1){const r={},i={};un(i,Nn,1),e.propsDefaults=Object.create(null),Ai(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Ko(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Vl(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=Y(r),[c]=e.propsOptions;let u=!1;if((s||o>0)&&!(o&16)){if(o&8){const d=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[m,w]=Ri(h,t,!0);ie(o,m),w&&l.push(...w)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!i&&!c)return Z(e)&&s.set(e,mt),mt;if(B(i))for(let d=0;d-1,w[1]=M<0||O-1||X(w,"default"))&&l.push(h)}}}const u=[o,l];return Z(e)&&s.set(e,u),u}function lr(e){return e[0]!=="$"&&!yt(e)}function cr(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function ar(e,t){return cr(e)===cr(t)}function ur(e,t){return B(t)?t.findIndex(n=>ar(n,e)):K(t)&&ar(t,e)?0:-1}const Oi=e=>e[0]==="_"||e==="$stable",Ns=e=>B(e)?e.map(Ae):[Ae(e)],Dl=(e,t,n)=>{if(t._n)return t;const s=ol((...r)=>Ns(t(...r)),n);return s._c=!1,s},Ii=(e,t,n)=>{const s=e._ctx;for(const r in e){if(Oi(r))continue;const i=e[r];if(K(i))t[r]=Dl(r,i,s);else if(i!=null){const o=Ns(i);t[r]=()=>o}}},Li=(e,t)=>{const n=Ns(t);e.slots.default=()=>n},Ul=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=Y(t),un(t,"_",n)):Ii(t,e.slots={})}else e.slots={},t&&Li(e,t);un(e.slots,Nn,1)},Bl=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=te;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:(ie(r,t),!n&&l===1&&delete r._):(i=!t.$stable,Ii(t,r)),o=t}else t&&(Li(e,t),o={default:1});if(i)for(const l in r)!Oi(l)&&o[l]==null&&delete r[l]};function mn(e,t,n,s,r=!1){if(B(e)){e.forEach((m,w)=>mn(m,t&&(B(t)?t[w]:t),n,s,r));return}if(wt(s)&&!r)return;const i=s.shapeFlag&4?$s(s.component)||s.component.proxy:s.el,o=r?null:i,{i:l,r:c}=e,u=t&&t.r,d=l.refs===te?l.refs={}:l.refs,h=l.setupState;if(u!=null&&u!==c&&(ne(u)?(d[u]=null,X(h,u)&&(h[u]=null)):he(u)&&(u.value=null)),K(c))Ye(c,l,12,[o,d]);else{const m=ne(c),w=he(c);if(m||w){const O=()=>{if(e.f){const M=m?X(h,c)?h[c]:d[c]:c.value;r?B(M)&&ys(M,i):B(M)?M.includes(i)||M.push(i):m?(d[c]=[i],X(h,c)&&(h[c]=d[c])):(c.value=[i],e.k&&(d[e.k]=c.value))}else m?(d[c]=o,X(h,c)&&(h[c]=o)):w&&(c.value=o,e.k&&(d[e.k]=o))};o?(O.id=-1,ge(O,n)):O()}}}let Be=!1;const kl=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Kl=e=>e.namespaceURI.includes("MathML"),Zt=e=>{if(kl(e))return"svg";if(Kl(e))return"mathml"},en=e=>e.nodeType===8;function Wl(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:u}}=e,d=(g,_)=>{if(!_.hasChildNodes()){n(null,g,_),hn(),_._vnode=g;return}Be=!1,h(_.firstChild,g,null,null,null),hn(),_._vnode=g,Be&&console.error("Hydration completed but contains mismatches.")},h=(g,_,P,I,D,R=!1)=>{const H=en(g)&&g.data==="[",E=()=>M(g,_,P,I,D,H),{type:U,ref:S,shapeFlag:W,patchFlag:re}=_;let le=g.nodeType;_.el=g,re===-2&&(R=!1,_.dynamicChildren=null);let $=null;switch(U){case xt:le!==3?_.children===""?(c(_.el=r(""),o(g),g),$=g):$=E():(g.data!==_.children&&(Be=!0,g.data=_.children),$=i(g));break;case be:J(g)?($=i(g),q(_.el=g.content.firstChild,g,P)):le!==8||H?$=E():$=i(g);break;case Nt:if(H&&(g=i(g),le=g.nodeType),le===1||le===3){$=g;const z=!_.children.length;for(let F=0;F<_.staticCount;F++)z&&(_.children+=$.nodeType===1?$.outerHTML:$.data),F===_.staticCount-1&&(_.anchor=$),$=i($);return H?i($):$}else E();break;case me:H?$=O(g,_,P,I,D,R):$=E();break;default:if(W&1)(le!==1||_.type.toLowerCase()!==g.tagName.toLowerCase())&&!J(g)?$=E():$=m(g,_,P,I,D,R);else if(W&6){_.slotScopeIds=D;const z=o(g);if(H?$=V(g):en(g)&&g.data==="teleport start"?$=V(g,g.data,"teleport end"):$=i(g),t(_,z,null,P,I,Zt(z),R),wt(_)){let F;H?(F=ae(me),F.anchor=$?$.previousSibling:z.lastChild):F=g.nodeType===3?Di(""):ae("div"),F.el=g,_.component.subTree=F}}else W&64?le!==8?$=E():$=_.type.hydrate(g,_,P,I,D,R,e,w):W&128&&($=_.type.hydrate(g,_,P,I,Zt(o(g)),D,R,e,h))}return S!=null&&mn(S,null,I,_),$},m=(g,_,P,I,D,R)=>{R=R||!!_.dynamicChildren;const{type:H,props:E,patchFlag:U,shapeFlag:S,dirs:W,transition:re}=_,le=H==="input"||H==="option";if(le||U!==-1){W&&Le(_,null,P,"created");let $=!1;if(J(g)){$=Pi(I,re)&&P&&P.vnode.props&&P.vnode.props.appear;const F=g.content.firstChild;$&&re.beforeEnter(F),q(F,g,P),_.el=g=F}if(S&16&&!(E&&(E.innerHTML||E.textContent))){let F=w(g.firstChild,_,g,P,I,D,R);for(;F;){Be=!0;const Fe=F;F=F.nextSibling,l(Fe)}}else S&8&&g.textContent!==_.children&&(Be=!0,g.textContent=_.children);if(E)if(le||!R||U&48)for(const F in E)(le&&(F.endsWith("value")||F==="indeterminate")||Bt(F)&&!yt(F)||F[0]===".")&&s(g,F,null,E[F],void 0,void 0,P);else E.onClick&&s(g,"onClick",null,E.onClick,void 0,void 0,P);let z;(z=E&&E.onVnodeBeforeMount)&&Ee(z,P,_),W&&Le(_,null,P,"beforeMount"),((z=E&&E.onVnodeMounted)||W||$)&&gi(()=>{z&&Ee(z,P,_),$&&re.enter(g),W&&Le(_,null,P,"mounted")},I)}return g.nextSibling},w=(g,_,P,I,D,R,H)=>{H=H||!!_.dynamicChildren;const E=_.children,U=E.length;for(let S=0;S{const{slotScopeIds:H}=_;H&&(D=D?D.concat(H):H);const E=o(g),U=w(i(g),_,E,P,I,D,R);return U&&en(U)&&U.data==="]"?i(_.anchor=U):(Be=!0,c(_.anchor=u("]"),E,U),U)},M=(g,_,P,I,D,R)=>{if(Be=!0,_.el=null,R){const U=V(g);for(;;){const S=i(g);if(S&&S!==U)l(S);else break}}const H=i(g),E=o(g);return l(g),n(null,_,E,H,P,I,Zt(E),D),H},V=(g,_="[",P="]")=>{let I=0;for(;g;)if(g=i(g),g&&en(g)&&(g.data===_&&I++,g.data===P)){if(I===0)return i(g);I--}return g},q=(g,_,P)=>{const I=_.parentNode;I&&I.replaceChild(g,_);let D=P;for(;D;)D.vnode.el===_&&(D.vnode.el=D.subTree.el=g),D=D.parent},J=g=>g.nodeType===1&&g.tagName.toLowerCase()==="template";return[d,h]}const ge=gi;function ql(e){return Gl(e,Wl)}function Gl(e,t){const n=Br();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:u,setElementText:d,parentNode:h,nextSibling:m,setScopeId:w=xe,insertStaticContent:O}=e,M=(a,f,p,y=null,v=null,x=null,A=void 0,C=null,T=!!f.dynamicChildren)=>{if(a===f)return;a&&!it(a,f)&&(y=Wt(a),Oe(a,v,x,!0),a=null),f.patchFlag===-2&&(T=!1,f.dynamicChildren=null);const{type:b,ref:L,shapeFlag:j}=f;switch(b){case xt:V(a,f,p,y);break;case be:q(a,f,p,y);break;case Nt:a==null&&J(f,p,y,A);break;case me:S(a,f,p,y,v,x,A,C,T);break;default:j&1?P(a,f,p,y,v,x,A,C,T):j&6?W(a,f,p,y,v,x,A,C,T):(j&64||j&128)&&b.process(a,f,p,y,v,x,A,C,T,dt)}L!=null&&v&&mn(L,a&&a.ref,x,f||a,!f)},V=(a,f,p,y)=>{if(a==null)s(f.el=l(f.children),p,y);else{const v=f.el=a.el;f.children!==a.children&&u(v,f.children)}},q=(a,f,p,y)=>{a==null?s(f.el=c(f.children||""),p,y):f.el=a.el},J=(a,f,p,y)=>{[a.el,a.anchor]=O(a.children,f,p,y,a.el,a.anchor)},g=({el:a,anchor:f},p,y)=>{let v;for(;a&&a!==f;)v=m(a),s(a,p,y),a=v;s(f,p,y)},_=({el:a,anchor:f})=>{let p;for(;a&&a!==f;)p=m(a),r(a),a=p;r(f)},P=(a,f,p,y,v,x,A,C,T)=>{f.type==="svg"?A="svg":f.type==="math"&&(A="mathml"),a==null?I(f,p,y,v,x,A,C,T):H(a,f,v,x,A,C,T)},I=(a,f,p,y,v,x,A,C)=>{let T,b;const{props:L,shapeFlag:j,transition:N,dirs:k}=a;if(T=a.el=o(a.type,x,L&&L.is,L),j&8?d(T,a.children):j&16&&R(a.children,T,null,y,v,Wn(a,x),A,C),k&&Le(a,null,y,"created"),D(T,a,a.scopeId,A,y),L){for(const Q in L)Q!=="value"&&!yt(Q)&&i(T,Q,null,L[Q],x,a.children,y,v,$e);"value"in L&&i(T,"value",null,L.value,x),(b=L.onVnodeBeforeMount)&&Ee(b,y,a)}k&&Le(a,null,y,"beforeMount");const G=Pi(v,N);G&&N.beforeEnter(T),s(T,f,p),((b=L&&L.onVnodeMounted)||G||k)&&ge(()=>{b&&Ee(b,y,a),G&&N.enter(T),k&&Le(a,null,y,"mounted")},v)},D=(a,f,p,y,v)=>{if(p&&w(a,p),y)for(let x=0;x{for(let b=T;b{const C=f.el=a.el;let{patchFlag:T,dynamicChildren:b,dirs:L}=f;T|=a.patchFlag&16;const j=a.props||te,N=f.props||te;let k;if(p&&tt(p,!1),(k=N.onVnodeBeforeUpdate)&&Ee(k,p,f,a),L&&Le(f,a,p,"beforeUpdate"),p&&tt(p,!0),b?E(a.dynamicChildren,b,C,p,y,Wn(f,v),x):A||F(a,f,C,null,p,y,Wn(f,v),x,!1),T>0){if(T&16)U(C,f,j,N,p,y,v);else if(T&2&&j.class!==N.class&&i(C,"class",null,N.class,v),T&4&&i(C,"style",j.style,N.style,v),T&8){const G=f.dynamicProps;for(let Q=0;Q{k&&Ee(k,p,f,a),L&&Le(f,a,p,"updated")},y)},E=(a,f,p,y,v,x,A)=>{for(let C=0;C{if(p!==y){if(p!==te)for(const C in p)!yt(C)&&!(C in y)&&i(a,C,p[C],null,A,f.children,v,x,$e);for(const C in y){if(yt(C))continue;const T=y[C],b=p[C];T!==b&&C!=="value"&&i(a,C,b,T,A,f.children,v,x,$e)}"value"in y&&i(a,"value",p.value,y.value,A)}},S=(a,f,p,y,v,x,A,C,T)=>{const b=f.el=a?a.el:l(""),L=f.anchor=a?a.anchor:l("");let{patchFlag:j,dynamicChildren:N,slotScopeIds:k}=f;k&&(C=C?C.concat(k):k),a==null?(s(b,p,y),s(L,p,y),R(f.children||[],p,L,v,x,A,C,T)):j>0&&j&64&&N&&a.dynamicChildren?(E(a.dynamicChildren,N,p,v,x,A,C),(f.key!=null||v&&f===v.subTree)&&Mi(a,f,!0)):F(a,f,p,L,v,x,A,C,T)},W=(a,f,p,y,v,x,A,C,T)=>{f.slotScopeIds=C,a==null?f.shapeFlag&512?v.ctx.activate(f,p,y,A,T):re(f,p,y,v,x,A,T):le(a,f,T)},re=(a,f,p,y,v,x,A)=>{const C=a.component=nc(a,y,v);if(Ln(a)&&(C.ctx.renderer=dt),sc(C),C.asyncDep){if(v&&v.registerDep(C,$),!a.el){const T=C.subTree=ae(be);q(null,T,f,p)}}else $(C,a,f,p,v,x,A)},le=(a,f,p)=>{const y=f.component=a.component;if(al(a,f,p))if(y.asyncDep&&!y.asyncResolved){z(y,f,p);return}else y.next=f,nl(y.update),y.effect.dirty=!0,y.update();else f.el=a.el,y.vnode=f},$=(a,f,p,y,v,x,A)=>{const C=()=>{if(a.isMounted){let{next:L,bu:j,u:N,parent:k,vnode:G}=a;{const ht=Ni(a);if(ht){L&&(L.el=G.el,z(a,L,A)),ht.asyncDep.then(()=>{a.isUnmounted||C()});return}}let Q=L,ee;tt(a,!1),L?(L.el=G.el,z(a,L,A)):L=G,j&&Dn(j),(ee=L.props&&L.props.onVnodeBeforeUpdate)&&Ee(ee,k,L,G),tt(a,!0);const oe=Bn(a),Te=a.subTree;a.subTree=oe,M(Te,oe,h(Te.el),Wt(Te),a,v,x),L.el=oe.el,Q===null&&ul(a,oe.el),N&&ge(N,v),(ee=L.props&&L.props.onVnodeUpdated)&&ge(()=>Ee(ee,k,L,G),v)}else{let L;const{el:j,props:N}=f,{bm:k,m:G,parent:Q}=a,ee=wt(f);if(tt(a,!1),k&&Dn(k),!ee&&(L=N&&N.onVnodeBeforeMount)&&Ee(L,Q,f),tt(a,!0),j&&Vn){const oe=()=>{a.subTree=Bn(a),Vn(j,a.subTree,a,v,null)};ee?f.type.__asyncLoader().then(()=>!a.isUnmounted&&oe()):oe()}else{const oe=a.subTree=Bn(a);M(null,oe,p,y,a,v,x),f.el=oe.el}if(G&&ge(G,v),!ee&&(L=N&&N.onVnodeMounted)){const oe=f;ge(()=>Ee(L,Q,oe),v)}(f.shapeFlag&256||Q&&wt(Q.vnode)&&Q.vnode.shapeFlag&256)&&a.a&&ge(a.a,v),a.isMounted=!0,f=p=y=null}},T=a.effect=new Es(C,xe,()=>Ls(b),a.scope),b=a.update=()=>{T.dirty&&T.run()};b.id=a.uid,tt(a,!0),b()},z=(a,f,p)=>{f.component=a;const y=a.vnode.props;a.vnode=f,a.next=null,Vl(a,f.props,y,p),Bl(a,f.children,p),ut(),Zs(a),ft()},F=(a,f,p,y,v,x,A,C,T=!1)=>{const b=a&&a.children,L=a?a.shapeFlag:0,j=f.children,{patchFlag:N,shapeFlag:k}=f;if(N>0){if(N&128){Kt(b,j,p,y,v,x,A,C,T);return}else if(N&256){Fe(b,j,p,y,v,x,A,C,T);return}}k&8?(L&16&&$e(b,v,x),j!==b&&d(p,j)):L&16?k&16?Kt(b,j,p,y,v,x,A,C,T):$e(b,v,x,!0):(L&8&&d(p,""),k&16&&R(j,p,y,v,x,A,C,T))},Fe=(a,f,p,y,v,x,A,C,T)=>{a=a||mt,f=f||mt;const b=a.length,L=f.length,j=Math.min(b,L);let N;for(N=0;NL?$e(a,v,x,!0,!1,j):R(f,p,y,v,x,A,C,T,j)},Kt=(a,f,p,y,v,x,A,C,T)=>{let b=0;const L=f.length;let j=a.length-1,N=L-1;for(;b<=j&&b<=N;){const k=a[b],G=f[b]=T?Ge(f[b]):Ae(f[b]);if(it(k,G))M(k,G,p,null,v,x,A,C,T);else break;b++}for(;b<=j&&b<=N;){const k=a[j],G=f[N]=T?Ge(f[N]):Ae(f[N]);if(it(k,G))M(k,G,p,null,v,x,A,C,T);else break;j--,N--}if(b>j){if(b<=N){const k=N+1,G=kN)for(;b<=j;)Oe(a[b],v,x,!0),b++;else{const k=b,G=b,Q=new Map;for(b=G;b<=N;b++){const ye=f[b]=T?Ge(f[b]):Ae(f[b]);ye.key!=null&&Q.set(ye.key,b)}let ee,oe=0;const Te=N-G+1;let ht=!1,Bs=0;const At=new Array(Te);for(b=0;b=Te){Oe(ye,v,x,!0);continue}let Ie;if(ye.key!=null)Ie=Q.get(ye.key);else for(ee=G;ee<=N;ee++)if(At[ee-G]===0&&it(ye,f[ee])){Ie=ee;break}Ie===void 0?Oe(ye,v,x,!0):(At[Ie-G]=b+1,Ie>=Bs?Bs=Ie:ht=!0,M(ye,f[Ie],p,null,v,x,A,C,T),oe++)}const ks=ht?zl(At):mt;for(ee=ks.length-1,b=Te-1;b>=0;b--){const ye=G+b,Ie=f[ye],Ks=ye+1{const{el:x,type:A,transition:C,children:T,shapeFlag:b}=a;if(b&6){et(a.component.subTree,f,p,y);return}if(b&128){a.suspense.move(f,p,y);return}if(b&64){A.move(a,f,p,dt);return}if(A===me){s(x,f,p);for(let j=0;jC.enter(x),v);else{const{leave:j,delayLeave:N,afterLeave:k}=C,G=()=>s(x,f,p),Q=()=>{j(x,()=>{G(),k&&k()})};N?N(x,G,Q):Q()}else s(x,f,p)},Oe=(a,f,p,y=!1,v=!1)=>{const{type:x,props:A,ref:C,children:T,dynamicChildren:b,shapeFlag:L,patchFlag:j,dirs:N}=a;if(C!=null&&mn(C,null,p,a,!0),L&256){f.ctx.deactivate(a);return}const k=L&1&&N,G=!wt(a);let Q;if(G&&(Q=A&&A.onVnodeBeforeUnmount)&&Ee(Q,f,a),L&6)oo(a.component,p,y);else{if(L&128){a.suspense.unmount(p,y);return}k&&Le(a,null,f,"beforeUnmount"),L&64?a.type.remove(a,f,p,v,dt,y):b&&(x!==me||j>0&&j&64)?$e(b,f,p,!1,!0):(x===me&&j&384||!v&&L&16)&&$e(T,f,p),y&&Ds(a)}(G&&(Q=A&&A.onVnodeUnmounted)||k)&&ge(()=>{Q&&Ee(Q,f,a),k&&Le(a,null,f,"unmounted")},p)},Ds=a=>{const{type:f,el:p,anchor:y,transition:v}=a;if(f===me){io(p,y);return}if(f===Nt){_(a);return}const x=()=>{r(p),v&&!v.persisted&&v.afterLeave&&v.afterLeave()};if(a.shapeFlag&1&&v&&!v.persisted){const{leave:A,delayLeave:C}=v,T=()=>A(p,x);C?C(a.el,x,T):T()}else x()},io=(a,f)=>{let p;for(;a!==f;)p=m(a),r(a),a=p;r(f)},oo=(a,f,p)=>{const{bum:y,scope:v,update:x,subTree:A,um:C}=a;y&&Dn(y),v.stop(),x&&(x.active=!1,Oe(A,a,f,p)),C&&ge(C,f),ge(()=>{a.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},$e=(a,f,p,y=!1,v=!1,x=0)=>{for(let A=x;Aa.shapeFlag&6?Wt(a.component.subTree):a.shapeFlag&128?a.suspense.next():m(a.anchor||a.el);let Hn=!1;const Us=(a,f,p)=>{a==null?f._vnode&&Oe(f._vnode,null,null,!0):M(f._vnode||null,a,f,null,null,null,p),Hn||(Hn=!0,Zs(),hn(),Hn=!1),f._vnode=a},dt={p:M,um:Oe,m:et,r:Ds,mt:re,mc:R,pc:F,pbc:E,n:Wt,o:e};let jn,Vn;return t&&([jn,Vn]=t(dt)),{render:Us,hydrate:jn,createApp:$l(Us,jn)}}function Wn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function tt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Pi(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Mi(e,t,n=!1){const s=e.children,r=t.children;if(B(s)&&B(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Ni(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Ni(t)}const Xl=e=>e.__isTeleport,me=Symbol.for("v-fgt"),xt=Symbol.for("v-txt"),be=Symbol.for("v-cmt"),Nt=Symbol.for("v-stc"),Ft=[];let Re=null;function Fi(e=!1){Ft.push(Re=e?null:[])}function Yl(){Ft.pop(),Re=Ft[Ft.length-1]||null}let Dt=1;function fr(e){Dt+=e}function $i(e){return e.dynamicChildren=Dt>0?Re||mt:null,Yl(),Dt>0&&Re&&Re.push(e),e}function qa(e,t,n,s,r,i){return $i(Vi(e,t,n,s,r,i,!0))}function Hi(e,t,n,s,r){return $i(ae(e,t,n,s,r,!0))}function _n(e){return e?e.__v_isVNode===!0:!1}function it(e,t){return e.type===t.type&&e.key===t.key}const Nn="__vInternal",ji=({key:e})=>e??null,ln=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ne(e)||he(e)||K(e)?{i:de,r:e,k:t,f:!!n}:e:null);function Vi(e,t=null,n=null,s=0,r=null,i=e===me?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ji(t),ref:t&&ln(t),scopeId:On,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:de};return l?(Fs(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=ne(n)?8:16),Dt>0&&!o&&Re&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Re.push(c),c}const ae=Jl;function Jl(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===hi)&&(e=be),_n(e)){const l=Ze(e,t,!0);return n&&Fs(l,n),Dt>0&&!i&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag|=-2,l}if(lc(e)&&(e=e.__vccOpts),t){t=Ql(t);let{class:l,style:c}=t;l&&!ne(l)&&(t.class=ws(l)),Z(c)&&(si(c)&&!B(c)&&(c=ie({},c)),t.style=bs(c))}const o=ne(e)?1:fl(e)?128:Xl(e)?64:Z(e)?4:K(e)?2:0;return Vi(e,t,n,s,r,o,i,!0)}function Ql(e){return e?si(e)||Nn in e?ie({},e):e:null}function Ze(e,t,n=!1){const{props:s,ref:r,patchFlag:i,children:o}=e,l=t?Zl(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&ji(l),ref:t&&t.ref?n&&r?B(r)?r.concat(ln(t)):[r,ln(t)]:ln(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==me?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ze(e.ssContent),ssFallback:e.ssFallback&&Ze(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Di(e=" ",t=0){return ae(xt,null,e,t)}function Ga(e,t){const n=ae(Nt,null,e);return n.staticCount=t,n}function za(e="",t=!1){return t?(Fi(),Hi(be,null,e)):ae(be,null,e)}function Ae(e){return e==null||typeof e=="boolean"?ae(be):B(e)?ae(me,null,e.slice()):typeof e=="object"?Ge(e):ae(xt,null,String(e))}function Ge(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Ze(e)}function Fs(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(B(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),Fs(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(Nn in t)?t._ctx=de:r===3&&de&&(de.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else K(t)?(t={default:t,_ctx:de},n=32):(t=String(t),s&64?(n=16,t=[Di(t)]):n=8);e.children=t,e.shapeFlag|=n}function Zl(...e){const t={};for(let n=0;nce||de;let yn,hs;{const e=Br(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};yn=t("__VUE_INSTANCE_SETTERS__",n=>ce=n),hs=t("__VUE_SSR_SETTERS__",n=>$n=n)}const kt=e=>{const t=ce;return yn(e),e.scope.on(),()=>{e.scope.off(),yn(t)}},dr=()=>{ce&&ce.scope.off(),yn(null)};function Ui(e){return e.vnode.shapeFlag&4}let $n=!1;function sc(e,t=!1){t&&hs(t);const{props:n,children:s}=e.vnode,r=Ui(e);jl(e,n,r,t),Ul(e,s);const i=r?rc(e,t):void 0;return t&&hs(!1),i}function rc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=It(new Proxy(e.ctx,Rl));const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?ki(e):null,i=kt(e);ut();const o=Ye(s,e,0,[e.props,r]);if(ft(),i(),Vr(o)){if(o.then(dr,dr),t)return o.then(l=>{hr(e,l,t)}).catch(l=>{Tn(l,e,0)});e.asyncDep=o}else hr(e,o,t)}else Bi(e,t)}function hr(e,t,n){K(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=ci(t)),Bi(e,n)}let pr;function Bi(e,t,n){const s=e.type;if(!e.render){if(!t&&pr&&!s.render){const r=s.template||Ms(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,u=ie(ie({isCustomElement:i,delimiters:l},o),c);s.render=pr(r,u)}}e.render=s.render||xe}{const r=kt(e);ut();try{Il(e)}finally{ft(),r()}}}function ic(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return _e(e,"get","$attrs"),t[n]}}))}function ki(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return ic(e)},slots:e.slots,emit:e.emit,expose:t}}function $s(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(ci(It(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Pt)return Pt[n](e)},has(t,n){return n in t||n in Pt}}))}function oc(e,t=!0){return K(e)?e.displayName||e.name:e.name||t&&e.__name}function lc(e){return K(e)&&"__vccOpts"in e}const se=(e,t)=>Wo(e,t,$n);function ps(e,t,n){const s=arguments.length;return s===2?Z(t)&&!B(t)?_n(t)?ae(e,null,[t]):ae(e,t):ae(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&_n(n)&&(n=[n]),ae(e,t,n))}const cc="3.4.21";/** +* @vue/runtime-dom v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const ac="http://www.w3.org/2000/svg",uc="http://www.w3.org/1998/Math/MathML",ze=typeof document<"u"?document:null,gr=ze&&ze.createElement("template"),fc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?ze.createElementNS(ac,e):t==="mathml"?ze.createElementNS(uc,e):ze.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>ze.createTextNode(e),createComment:e=>ze.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ze.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{gr.innerHTML=s==="svg"?`${e}`:s==="mathml"?`${e}`:e;const l=gr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ke="transition",Rt="animation",Ut=Symbol("_vtc"),Ki=(e,{slots:t})=>ps(_l,dc(e),t);Ki.displayName="Transition";const Wi={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Ki.props=ie({},yi,Wi);const nt=(e,t=[])=>{B(e)?e.forEach(n=>n(...t)):e&&e(...t)},mr=e=>e?B(e)?e.some(t=>t.length>1):e.length>1:!1;function dc(e){const t={};for(const S in e)S in Wi||(t[S]=e[S]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:u=o,appearToClass:d=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:m=`${n}-leave-active`,leaveToClass:w=`${n}-leave-to`}=e,O=hc(r),M=O&&O[0],V=O&&O[1],{onBeforeEnter:q,onEnter:J,onEnterCancelled:g,onLeave:_,onLeaveCancelled:P,onBeforeAppear:I=q,onAppear:D=J,onAppearCancelled:R=g}=t,H=(S,W,re)=>{st(S,W?d:l),st(S,W?u:o),re&&re()},E=(S,W)=>{S._isLeaving=!1,st(S,h),st(S,w),st(S,m),W&&W()},U=S=>(W,re)=>{const le=S?D:J,$=()=>H(W,S,re);nt(le,[W,$]),_r(()=>{st(W,S?c:i),Ke(W,S?d:l),mr(le)||yr(W,s,M,$)})};return ie(t,{onBeforeEnter(S){nt(q,[S]),Ke(S,i),Ke(S,o)},onBeforeAppear(S){nt(I,[S]),Ke(S,c),Ke(S,u)},onEnter:U(!1),onAppear:U(!0),onLeave(S,W){S._isLeaving=!0;const re=()=>E(S,W);Ke(S,h),mc(),Ke(S,m),_r(()=>{S._isLeaving&&(st(S,h),Ke(S,w),mr(_)||yr(S,s,V,re))}),nt(_,[S,re])},onEnterCancelled(S){H(S,!1),nt(g,[S])},onAppearCancelled(S){H(S,!0),nt(R,[S])},onLeaveCancelled(S){E(S),nt(P,[S])}})}function hc(e){if(e==null)return null;if(Z(e))return[qn(e.enter),qn(e.leave)];{const t=qn(e);return[t,t]}}function qn(e){return po(e)}function Ke(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Ut]||(e[Ut]=new Set)).add(t)}function st(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Ut];n&&(n.delete(t),n.size||(e[Ut]=void 0))}function _r(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let pc=0;function yr(e,t,n,s){const r=e._endId=++pc,i=()=>{r===e._endId&&s()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=gc(e,t);if(!o)return s();const u=o+"end";let d=0;const h=()=>{e.removeEventListener(u,m),i()},m=w=>{w.target===e&&++d>=c&&h()};setTimeout(()=>{d(n[O]||"").split(", "),r=s(`${ke}Delay`),i=s(`${ke}Duration`),o=vr(r,i),l=s(`${Rt}Delay`),c=s(`${Rt}Duration`),u=vr(l,c);let d=null,h=0,m=0;t===ke?o>0&&(d=ke,h=o,m=i.length):t===Rt?u>0&&(d=Rt,h=u,m=c.length):(h=Math.max(o,u),d=h>0?o>u?ke:Rt:null,m=d?d===ke?i.length:c.length:0);const w=d===ke&&/\b(transform|all)(,|$)/.test(s(`${ke}Property`).toString());return{type:d,timeout:h,propCount:m,hasTransform:w}}function vr(e,t){for(;e.lengthbr(n)+br(e[s])))}function br(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function mc(){return document.body.offsetHeight}function _c(e,t,n){const s=e[Ut];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const wr=Symbol("_vod"),yc=Symbol("_vsh"),vc=Symbol(""),bc=/(^|;)\s*display\s*:/;function wc(e,t,n){const s=e.style,r=ne(n);let i=!1;if(n&&!r){if(t)if(ne(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&cn(s,l,"")}else for(const o in t)n[o]==null&&cn(s,o,"");for(const o in n)o==="display"&&(i=!0),cn(s,o,n[o])}else if(r){if(t!==n){const o=s[vc];o&&(n+=";"+o),s.cssText=n,i=bc.test(n)}}else t&&e.removeAttribute("style");wr in e&&(e[wr]=i?s.display:"",e[yc]&&(s.display="none"))}const Er=/\s*!important$/;function cn(e,t,n){if(B(n))n.forEach(s=>cn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Ec(e,t);Er.test(n)?e.setProperty(at(s),n.replace(Er,""),"important"):e[s]=n}}const Cr=["Webkit","Moz","ms"],Gn={};function Ec(e,t){const n=Gn[t];if(n)return n;let s=Me(t);if(s!=="filter"&&s in e)return Gn[t]=s;s=En(s);for(let r=0;rzn||(Oc.then(()=>zn=0),zn=Date.now());function Lc(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Se(Pc(s,n.value),t,5,[s])};return n.value=e,n.attached=Ic(),n}function Pc(e,t){if(B(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Ar=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Mc=(e,t,n,s,r,i,o,l,c)=>{const u=r==="svg";t==="class"?_c(e,s,u):t==="style"?wc(e,n,s):Bt(t)?_s(t)||Ac(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Nc(e,t,s,u))?xc(e,t,s,i,o,l,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Cc(e,t,s,u))};function Nc(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ar(t)&&K(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Ar(t)&&ne(n)?!1:t in e}const Fc=["ctrl","shift","alt","meta"],$c={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Fc.some(n=>e[`${n}Key`]&&!t.includes(n))},Xa=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=at(r.key);if(t.some(o=>o===i||Hc[o]===i))return e(r)})},jc=ie({patchProp:Mc},fc);let Xn,Rr=!1;function Vc(){return Xn=Rr?Xn:ql(jc),Rr=!0,Xn}const Ja=(...e)=>{const t=Vc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Uc(s);if(r)return n(r,!0,Dc(r))},t};function Dc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Uc(e){return ne(e)?document.querySelector(e):e}const Qa=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Bc="modulepreload",kc=function(e){return"/docs/"+e},Or={},Za=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){const i=document.getElementsByTagName("link");r=Promise.all(n.map(o=>{if(o=kc(o),o in Or)return;Or[o]=!0;const l=o.endsWith(".css"),c=l?'[rel="stylesheet"]':"";if(!!s)for(let h=i.length-1;h>=0;h--){const m=i[h];if(m.href===o&&(!l||m.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${c}`))return;const d=document.createElement("link");if(d.rel=l?"stylesheet":Bc,l||(d.as="script",d.crossOrigin=""),d.href=o,document.head.appendChild(d),l)return new Promise((h,m)=>{d.addEventListener("load",h),d.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${o}`)))})}))}return r.then(()=>t()).catch(i=>{const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=i,window.dispatchEvent(o),!o.defaultPrevented)throw i})},Kc=window.__VP_SITE_DATA__;function Hs(e){return Wr()?(Co(e),!0):!1}function Je(e){return typeof e=="function"?e():li(e)}const qi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Wc=Object.prototype.toString,qc=e=>Wc.call(e)==="[object Object]",$t=()=>{},gs=Gc();function Gc(){var e,t;return qi&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function zc(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const Gi=e=>e();function Xc(e=Gi){const t=fe(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:Sn(t),pause:n,resume:s,eventFilter:r}}function Yc(e){return e||Fn()}function zi(...e){if(e.length!==1)return Qo(...e);const t=e[0];return typeof t=="function"?Sn(Xo(()=>({get:t,set:$t}))):fe(t)}function Jc(e,t,n={}){const{eventFilter:s=Gi,...r}=n;return je(e,zc(s,t),r)}function Qc(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=Xc(s);return{stop:Jc(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function js(e,t=!0,n){Yc()?Tt(e,n):t?e():An(e)}function gt(e){var t;const n=Je(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Ne=qi?window:void 0;function Ve(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=Ne):[t,n,s,r]=e,!t)return $t;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],o=()=>{i.forEach(d=>d()),i.length=0},l=(d,h,m,w)=>(d.addEventListener(h,m,w),()=>d.removeEventListener(h,m,w)),c=je(()=>[gt(t),Je(r)],([d,h])=>{if(o(),!d)return;const m=qc(h)?{...h}:h;i.push(...n.flatMap(w=>s.map(O=>l(d,w,O,m))))},{immediate:!0,flush:"post"}),u=()=>{c(),o()};return Hs(u),u}let Ir=!1;function eu(e,t,n={}){const{window:s=Ne,ignore:r=[],capture:i=!0,detectIframe:o=!1}=n;if(!s)return $t;gs&&!Ir&&(Ir=!0,Array.from(s.document.body.children).forEach(m=>m.addEventListener("click",$t)),s.document.documentElement.addEventListener("click",$t));let l=!0;const c=m=>r.some(w=>{if(typeof w=="string")return Array.from(s.document.querySelectorAll(w)).some(O=>O===m.target||m.composedPath().includes(O));{const O=gt(w);return O&&(m.target===O||m.composedPath().includes(O))}}),d=[Ve(s,"click",m=>{const w=gt(e);if(!(!w||w===m.target||m.composedPath().includes(w))){if(m.detail===0&&(l=!c(m)),!l){l=!0;return}t(m)}},{passive:!0,capture:i}),Ve(s,"pointerdown",m=>{const w=gt(e);l=!c(m)&&!!(w&&!m.composedPath().includes(w))},{passive:!0}),o&&Ve(s,"blur",m=>{setTimeout(()=>{var w;const O=gt(e);((w=s.document.activeElement)==null?void 0:w.tagName)==="IFRAME"&&!(O!=null&&O.contains(s.document.activeElement))&&t(m)},0)})].filter(Boolean);return()=>d.forEach(m=>m())}function Zc(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function tu(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=Ne,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Zc(t);return Ve(r,i,d=>{d.repeat&&Je(l)||c(d)&&n(d)},o)}function ea(){const e=fe(!1),t=Fn();return t&&Tt(()=>{e.value=!0},t),e}function ta(e){const t=ea();return se(()=>(t.value,!!e()))}function Xi(e,t={}){const{window:n=Ne}=t,s=ta(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=fe(!1),o=u=>{i.value=u.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o))},c=mi(()=>{s.value&&(l(),r=n.matchMedia(Je(e)),"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),i.value=r.matches)});return Hs(()=>{c(),l(),r=void 0}),i}const tn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},nn="__vueuse_ssr_handlers__",na=sa();function sa(){return nn in tn||(tn[nn]=tn[nn]||{}),tn[nn]}function Yi(e,t){return na[e]||t}function ra(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const ia={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Lr="vueuse-storage";function oa(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:d,window:h=Ne,eventFilter:m,onError:w=E=>{console.error(E)},initOnMounted:O}=s,M=(d?ii:fe)(typeof t=="function"?t():t);if(!n)try{n=Yi("getDefaultStorage",()=>{var E;return(E=Ne)==null?void 0:E.localStorage})()}catch(E){w(E)}if(!n)return M;const V=Je(t),q=ra(V),J=(r=s.serializer)!=null?r:ia[q],{pause:g,resume:_}=Qc(M,()=>I(M.value),{flush:i,deep:o,eventFilter:m});h&&l&&js(()=>{Ve(h,"storage",R),Ve(h,Lr,H),O&&R()}),O||R();function P(E,U){h&&h.dispatchEvent(new CustomEvent(Lr,{detail:{key:e,oldValue:E,newValue:U,storageArea:n}}))}function I(E){try{const U=n.getItem(e);if(E==null)P(U,null),n.removeItem(e);else{const S=J.write(E);U!==S&&(n.setItem(e,S),P(U,S))}}catch(U){w(U)}}function D(E){const U=E?E.newValue:n.getItem(e);if(U==null)return c&&V!=null&&n.setItem(e,J.write(V)),V;if(!E&&u){const S=J.read(U);return typeof u=="function"?u(S,V):q==="object"&&!Array.isArray(S)?{...V,...S}:S}else return typeof U!="string"?U:J.read(U)}function R(E){if(!(E&&E.storageArea!==n)){if(E&&E.key==null){M.value=V;return}if(!(E&&E.key!==e)){g();try{(E==null?void 0:E.newValue)!==J.write(M.value)&&(M.value=D(E))}catch(U){w(U)}finally{E?An(_):_()}}}}function H(E){R(E.detail)}return M}function Ji(e){return Xi("(prefers-color-scheme: dark)",e)}function la(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=Ne,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:u,disableTransition:d=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},m=Ji({window:r}),w=se(()=>m.value?"dark":"light"),O=c||(o==null?zi(s):oa(o,s,i,{window:r,listenToStorageChanges:l})),M=se(()=>O.value==="auto"?w.value:O.value),V=Yi("updateHTMLAttrs",(_,P,I)=>{const D=typeof _=="string"?r==null?void 0:r.document.querySelector(_):gt(_);if(!D)return;let R;if(d){R=r.document.createElement("style");const H="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";R.appendChild(document.createTextNode(H)),r.document.head.appendChild(R)}if(P==="class"){const H=I.split(/\s/g);Object.values(h).flatMap(E=>(E||"").split(/\s/g)).filter(Boolean).forEach(E=>{H.includes(E)?D.classList.add(E):D.classList.remove(E)})}else D.setAttribute(P,I);d&&(r.getComputedStyle(R).opacity,document.head.removeChild(R))});function q(_){var P;V(t,n,(P=h[_])!=null?P:_)}function J(_){e.onChanged?e.onChanged(_,q):q(_)}je(M,J,{flush:"post",immediate:!0}),js(()=>J(M.value));const g=se({get(){return u?O.value:M.value},set(_){O.value=_}});try{return Object.assign(g,{store:O,system:w,state:M})}catch{return g}}function ca(e={}){const{valueDark:t="dark",valueLight:n="",window:s=Ne}=e,r=la({...e,onChanged:(l,c)=>{var u;e.onChanged?(u=e.onChanged)==null||u.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=se(()=>r.system?r.system.value:Ji({window:s}).value?"dark":"light");return se({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?r.value="auto":r.value=c}})}function Yn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Qi(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const sn=new WeakMap;function nu(e,t=!1){const n=fe(t);let s=null;je(zi(e),o=>{const l=Yn(Je(o));if(l){const c=l;sn.get(c)||sn.set(c,c.style.overflow),n.value&&(c.style.overflow="hidden")}},{immediate:!0});const r=()=>{const o=Yn(Je(e));!o||n.value||(gs&&(s=Ve(o,"touchmove",l=>{aa(l)},{passive:!1})),o.style.overflow="hidden",n.value=!0)},i=()=>{var o;const l=Yn(Je(e));!l||!n.value||(gs&&(s==null||s()),l.style.overflow=(o=sn.get(l))!=null?o:"",sn.delete(l),n.value=!1)};return Hs(i),se({get(){return n.value},set(o){o?r():i()}})}function su(e={}){const{window:t=Ne,behavior:n="auto"}=e;if(!t)return{x:fe(0),y:fe(0)};const s=fe(t.scrollX),r=fe(t.scrollY),i=se({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),o=se({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return Ve(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function ru(e={}){const{window:t=Ne,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0}=e,o=fe(n),l=fe(s),c=()=>{t&&(i?(o.value=t.innerWidth,l.value=t.innerHeight):(o.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight))};if(c(),js(c),Ve("resize",c,{passive:!0}),r){const u=Xi("(orientation: portrait)");je(u,()=>c())}return{width:o,height:l}}var Jn={BASE_URL:"/docs/",MODE:"production",DEV:!1,PROD:!0,SSR:!1},Qn={};const Zi=/^(?:[a-z]+:|\/\/)/i,ua="vitepress-theme-appearance",fa=/#.*$/,da=/[?#].*$/,ha=/(?:(^|\/)index)?\.(?:md|html)$/,Ce=typeof document<"u",eo={relativePath:"",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function pa(e,t,n=!1){if(t===void 0)return!1;if(e=Pr(`/${e}`),n)return new RegExp(t).test(e);if(Pr(t)!==e)return!1;const s=t.match(fa);return s?(Ce?location.hash:"")===s[0]:!0}function Pr(e){return decodeURI(e).replace(da,"").replace(ha,"$1")}function ga(e){return Zi.test(e)}function ma(e,t){var s,r,i,o,l,c,u;const n=Object.keys(e.locales).find(d=>d!=="root"&&!ga(d)&&pa(t,`/${d}/`,!0))||"root";return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:no(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function to(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=_a(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function _a(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function ya(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function no(e,t){return[...e.filter(n=>!ya(t,n)),...t]}const va=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,ba=/^[a-z]:/i;function Mr(e){const t=ba.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(va,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Zn=new Set;function wa(e){if(Zn.size===0){const n=typeof process=="object"&&(Qn==null?void 0:Qn.VITE_EXTRA_EXTENSIONS)||(Jn==null?void 0:Jn.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>Zn.add(s))}const t=e.split(".").pop();return t==null||!Zn.has(t.toLowerCase())}const Ea=Symbol(),ct=ii(Kc);function iu(e){const t=se(()=>ma(ct.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?fe(!0):n?ca({storageKey:ua,initialValue:()=>typeof n=="string"?n:"auto",...typeof n=="object"?n:{}}):fe(!1);return{site:t,theme:se(()=>t.value.themeConfig),page:se(()=>e.data),frontmatter:se(()=>e.data.frontmatter),params:se(()=>e.data.params),lang:se(()=>t.value.lang),dir:se(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:se(()=>t.value.localeIndex||"root"),title:se(()=>to(t.value,e.data)),description:se(()=>e.data.description||t.value.description),isDark:s}}function Ca(){const e=Et(Ea);if(!e)throw new Error("vitepress data not properly injected in app");return e}function xa(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Nr(e){return Zi.test(e)||!e.startsWith("/")?e:xa(ct.value.base,e)}function Sa(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),Ce){const n="/docs/";t=Mr(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${Mr(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let an=[];function ou(e){an.push(e),Mn(()=>{an=an.filter(t=>t!==e)})}function Ta(){let e=ct.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Fr(e,n);else if(Array.isArray(e))for(const s of e){const r=Fr(s,n);if(r){t=r;break}}return t}function Fr(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const Aa=Symbol(),Vs="http://a.com",Ra=()=>({path:"/",component:null,data:eo});function lu(e,t){const n=xn(Ra()),s={route:n,go:r};async function r(l=Ce?location.href:"/"){var c,u;l=vn(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(Hr(l),await o(l),await((u=s.onAfterRouteChanged)==null?void 0:u.call(s,l)))}let i=null;async function o(l,c=0,u=!1){var m;if(await((m=s.onBeforePageLoad)==null?void 0:m.call(s,l))===!1)return;const d=new URL(l,Vs),h=i=d.pathname;try{let w=await e(h);if(!w)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:O,__pageData:M}=w;if(!O)throw new Error(`Invalid route component: ${O}`);n.path=Ce?h:Nr(h),n.component=It(O),n.data=It(M),Ce&&An(()=>{let V=ct.value.base+M.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!ct.value.cleanUrls&&!V.endsWith("/")&&(V+=".html"),V!==d.pathname&&(d.pathname=V,l=V+d.search+d.hash,history.replaceState(null,"",l)),d.hash&&!c){let q=null;try{q=document.getElementById(decodeURIComponent(d.hash).slice(1))}catch(J){console.warn(J)}if(q){$r(q,d.hash);return}}window.scrollTo(0,c)})}}catch(w){if(!/fetch|Page not found/.test(w.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(w),!u)try{const O=await fetch(ct.value.base+"hashmap.json");window.__VP_HASH_MAP__=await O.json(),await o(l,c,!0);return}catch{}i===h&&(i=null,n.path=Ce?h:Nr(h),n.component=t?It(t):null,n.data=eo)}}return Ce&&(window.addEventListener("click",l=>{if(l.target.closest("button"))return;const u=l.target.closest("a");if(u&&!u.closest(".vp-raw")&&(u instanceof SVGElement||!u.download)){const{target:d}=u,{href:h,origin:m,pathname:w,hash:O,search:M}=new URL(u.href instanceof SVGAnimatedString?u.href.animVal:u.href,u.baseURI),V=new URL(window.location.href);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&!d&&m===V.origin&&wa(w)&&(l.preventDefault(),w===V.pathname&&M===V.search?(O!==V.hash&&(history.pushState(null,"",O),window.dispatchEvent(new Event("hashchange"))),O?$r(u,O,u.classList.contains("header-anchor")):(Hr(h,!1),window.scrollTo(0,0))):r(h))}},{capture:!0}),window.addEventListener("popstate",async l=>{var c;await o(vn(location.href),l.state&&l.state.scrollPosition||0),(c=s.onAfterRouteChanged)==null||c.call(s,location.href)}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Oa(){const e=Et(Aa);if(!e)throw new Error("useRouter() is called without provider.");return e}function so(){return Oa().route}function $r(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-Ta()+i;requestAnimationFrame(r)}}function Hr(e,t=!0){if(Ce&&vn(e)!==vn(location.href)){const n=location.hash;history.replaceState({scrollPosition:window.scrollY},document.title),history.pushState(null,"",e),t&&new URL(e,Vs).hash!==n&&window.dispatchEvent(new Event("hashchange"))}}function vn(e){const t=new URL(e,Vs);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),ct.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const es=()=>an.forEach(e=>e()),cu=wi({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=so(),{site:n}=Ca();return()=>ps(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?ps(t.component,{onVnodeMounted:es,onVnodeUpdated:es,onVnodeUnmounted:es}):"404 Page Not Found"])}}),au=wi({setup(e,{slots:t}){const n=fe(!1);return Tt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function uu(){Ce&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(u=>u.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function fu(){if(Ce){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(d=>d.remove());let u=c.textContent||"";o&&(u=u.replace(/^ *(\$|>) /gm,"").trim()),Ia(u).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const d=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,d)})}})}}async function Ia(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function du(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=ts(l);for(const u of document.head.children)if(u.isEqualNode(c)){s.push(u);return}});return}const o=i.map(ts);s.forEach((l,c)=>{const u=o.findIndex(d=>d==null?void 0:d.isEqualNode(l??null));u!==-1?delete o[u]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};mi(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],u=to(o,i);u!==document.title&&(document.title=u);const d=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==d&&h.setAttribute("content",d):ts(["meta",{name:"description",content:d}]),r(no(o.head,Pa(c)))})}function ts([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&!t.async&&(s.async=!1),s}function La(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Pa(e){return e.filter(t=>!La(t))}const ns=new Set,ro=()=>document.createElement("link"),Ma=e=>{const t=ro();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Na=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let rn;const Fa=Ce&&(rn=ro())&&rn.relList&&rn.relList.supports&&rn.relList.supports("prefetch")?Ma:Na;function hu(){if(!Ce||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!ns.has(c)){ns.add(c);const u=Sa(c);u&&Fa(u)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):ns.add(l))})})};Tt(s);const r=so();je(()=>r.path,s),Mn(()=>{n&&n.disconnect()})}export{Ka as $,Mn as A,Ua as B,Cl as C,Ta as D,Va as E,me as F,Ba as G,ii as H,ou as I,ae as J,Da as K,Zi as L,so as M,Zl as N,Et as O,ru as P,bs as Q,eu as R,tu as S,Ki as T,An as U,su as V,Sn as W,nu as X,Hl as Y,Ya as Z,Qa as _,Di as a,Xa as a0,Wa as a1,Ga as a2,du as a3,Aa as a4,iu as a5,Ea as a6,cu as a7,au as a8,ct as a9,Ja as aa,lu as ab,Sa as ac,Za as ad,hu as ae,fu as af,uu as ag,ps as ah,Hi as b,qa as c,wi as d,za as e,wa as f,Nr as g,fe as h,ga as i,Ce as j,se as k,Tt as l,Vi as m,ws as n,Fi as o,li as p,Ha as q,ka as r,ja as s,$a as t,Ca as u,pa as v,ol as w,Xi as x,je as y,mi as z}; diff --git a/docs/assets/chunks/theme.PSGgyvwz.js b/docs/assets/chunks/theme.PSGgyvwz.js new file mode 100644 index 0000000..240c1c3 --- /dev/null +++ b/docs/assets/chunks/theme.PSGgyvwz.js @@ -0,0 +1 @@ +import{d as _,o as a,c,r as l,n as T,a as F,t as L,b as $,w as v,T as de,e as f,_ as k,u as Ue,i as Ge,f as je,g as ve,h as S,j as R,k as b,l as j,m as p,p as r,q as C,s as H,v as G,x as ie,y as z,z as x,A as pe,B as ye,C as ze,D as qe,E as q,F as M,G as E,H as Pe,I as ee,J as m,K,L as Ve,M as te,N as Q,O as oe,P as We,Q as Le,R as Ke,S as Re,U as Je,V as Se,W as Ye,X as we,Y as Ie,Z as Qe,$ as Xe,a0 as Ze,a1 as xe}from"./framework.PNNbM9mo.js";const et=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),c("span",{class:T(["VPBadge",e.type])},[l(e.$slots,"default",{},()=>[F(L(e.text),1)])],2))}}),tt={key:0,class:"VPBackdrop"},ot=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),$(de,{name:"fade"},{default:v(()=>[e.show?(a(),c("div",tt)):f("",!0)]),_:1}))}}),st=k(ot,[["__scopeId","data-v-245d2ac5"]]),V=Ue;function nt(o,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(o,e):(o(),(n=!0)&&setTimeout(()=>n=!1,e))}}function le(o){return/^\//.test(o)?o:`/${o}`}function he(o){const{pathname:e,search:t,hash:n,protocol:s}=new URL(o,"http://a.com");if(Ge(o)||o.startsWith("#")||!s.startsWith("http")||!je(e))return o;const{site:i}=V(),u=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${n}`);return ve(u)}const fe=S(R?location.hash:"");R&&window.addEventListener("hashchange",()=>{fe.value=location.hash});function J({removeCurrent:o=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:s,theme:i}=V(),u=b(()=>{var d,g;return{label:(d=t.value.locales[n.value])==null?void 0:d.label,link:((g=t.value.locales[n.value])==null?void 0:g.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:b(()=>Object.entries(t.value.locales).flatMap(([d,g])=>o&&u.value.label===g.label?[]:{text:g.label,link:at(g.link||(d==="root"?"/":`/${d}/`),i.value.i18nRouting!==!1&&e,s.value.relativePath.slice(u.value.link.length-1),!t.value.cleanUrls)+fe.value})),currentLang:u}}function at(o,e,t,n){return e?o.replace(/\/$/,"")+le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):o}const rt=o=>(C("data-v-3124a226"),o=o(),H(),o),it={class:"NotFound"},lt={class:"code"},ct={class:"title"},ut=rt(()=>p("div",{class:"divider"},null,-1)),dt={class:"quote"},vt={class:"action"},pt=["href","aria-label"],ht=_({__name:"NotFound",setup(o){const{site:e,theme:t}=V(),{localeLinks:n}=J({removeCurrent:!1}),s=S("/");return j(()=>{var u;const i=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");n.value.length&&(s.value=((u=n.value.find(({link:h})=>h.startsWith(i)))==null?void 0:u.link)||n.value[0].link)}),(i,u)=>{var h,d,g,y,P;return a(),c("div",it,[p("p",lt,L(((h=r(t).notFound)==null?void 0:h.code)??"404"),1),p("h1",ct,L(((d=r(t).notFound)==null?void 0:d.title)??"PAGE NOT FOUND"),1),ut,p("blockquote",dt,L(((g=r(t).notFound)==null?void 0:g.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),p("div",vt,[p("a",{class:"link",href:r(ve)(s.value),"aria-label":((y=r(t).notFound)==null?void 0:y.linkLabel)??"go to home"},L(((P=r(t).notFound)==null?void 0:P.linkText)??"Take me home"),9,pt)])])}}}),ft=k(ht,[["__scopeId","data-v-3124a226"]]);function Te(o,e){if(Array.isArray(o))return X(o);if(o==null)return[];e=le(e);const t=Object.keys(o).sort((s,i)=>i.split("/").length-s.split("/").length).find(s=>e.startsWith(le(s))),n=t?o[t]:[];return Array.isArray(n)?X(n):X(n.items,n.base)}function _t(o){const e=[];let t=0;for(const n in o){const s=o[n];if(s.items){t=e.push(s);continue}e[t]||e.push({items:[]}),e[t].items.push(s)}return e}function mt(o){const e=[];function t(n){for(const s of n)s.text&&s.link&&e.push({text:s.text,link:s.link,docFooterText:s.docFooterText}),s.items&&t(s.items)}return t(o),e}function ce(o,e){return Array.isArray(e)?e.some(t=>ce(o,t)):G(o,e.link)?!0:e.items?ce(o,e.items):!1}function X(o,e){return[...o].map(t=>{const n={...t},s=n.base||e;return s&&n.link&&(n.link=s+n.link),n.items&&(n.items=X(n.items,s)),n})}function O(){const{frontmatter:o,page:e,theme:t}=V(),n=ie("(min-width: 960px)"),s=S(!1),i=b(()=>{const B=t.value.sidebar,w=e.value.relativePath;return B?Te(B,w):[]}),u=S(i.value);z(i,(B,w)=>{JSON.stringify(B)!==JSON.stringify(w)&&(u.value=i.value)});const h=b(()=>o.value.sidebar!==!1&&u.value.length>0&&o.value.layout!=="home"),d=b(()=>g?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),g=b(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),y=b(()=>h.value&&n.value),P=b(()=>h.value?_t(u.value):[]);function I(){s.value=!0}function N(){s.value=!1}function A(){s.value?N():I()}return{isOpen:s,sidebar:u,sidebarGroups:P,hasSidebar:h,hasAside:g,leftAside:d,isSidebarEnabled:y,open:I,close:N,toggle:A}}function kt(o,e){let t;x(()=>{t=o.value?document.activeElement:void 0}),j(()=>{window.addEventListener("keyup",n)}),pe(()=>{window.removeEventListener("keyup",n)});function n(s){s.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function $t(o){const{page:e}=V(),t=S(!1),n=b(()=>o.value.collapsed!=null),s=b(()=>!!o.value.link),i=S(!1),u=()=>{i.value=G(e.value.relativePath,o.value.link)};z([e,o,fe],u),j(u);const h=b(()=>i.value?!0:o.value.items?ce(e.value.relativePath,o.value.items):!1),d=b(()=>!!(o.value.items&&o.value.items.length));x(()=>{t.value=!!(n.value&&o.value.collapsed)}),ye(()=>{(i.value||h.value)&&(t.value=!1)});function g(){n.value&&(t.value=!t.value)}return{collapsed:t,collapsible:n,isLink:s,isActiveLink:i,hasActiveLink:h,hasChildren:d,toggle:g}}function bt(){const{hasSidebar:o}=O(),e=ie("(min-width: 960px)"),t=ie("(min-width: 1280px)");return{isAsideEnabled:b(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const ue=[];function Ne(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const n=Number(t.tagName[1]);return{element:t,title:gt(t),link:"#"+t.id,level:n}});return yt(e,o)}function gt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function yt(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,s]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(u=>u.level>=n&&u.level<=s),ue.length=0;for(const{element:u,link:h}of o)ue.push({element:u,link:h});const i=[];e:for(let u=0;u=0;d--){const g=o[d];if(g.level{requestAnimationFrame(i),window.addEventListener("scroll",n)}),ze(()=>{u(location.hash)}),pe(()=>{window.removeEventListener("scroll",n)});function i(){if(!t.value)return;const h=window.scrollY,d=window.innerHeight,g=document.body.offsetHeight,y=Math.abs(h+d-g)<1,P=ue.map(({element:N,link:A})=>({link:A,top:Vt(N)})).filter(({top:N})=>!Number.isNaN(N)).sort((N,A)=>N.top-A.top);if(!P.length){u(null);return}if(h<1){u(null);return}if(y){u(P[P.length-1].link);return}let I=null;for(const{link:N,top:A}of P){if(A>h+qe()+4)break;I=N}u(I)}function u(h){s&&s.classList.remove("active"),h==null?s=null:s=o.value.querySelector(`a[href="${decodeURIComponent(h)}"]`);const d=s;d?(d.classList.add("active"),e.value.style.top=d.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Vt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const Lt=["href","title"],St=_({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const n=t.href.split("#")[1],s=document.getElementById(decodeURIComponent(n));s==null||s.focus({preventScroll:!0})}return(t,n)=>{const s=q("VPDocOutlineItem",!0);return a(),c("ul",{class:T(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),c(M,null,E(t.headers,({children:i,link:u,title:h})=>(a(),c("li",null,[p("a",{class:"outline-link",href:u,onClick:e,title:h},L(h),9,Lt),i!=null&&i.length?(a(),$(s,{key:0,headers:i},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Me=k(St,[["__scopeId","data-v-58ec0246"]]),wt=o=>(C("data-v-4a63de48"),o=o(),H(),o),It={class:"content"},Tt={class:"outline-title",role:"heading","aria-level":"2"},Nt={"aria-labelledby":"doc-outline-aria-label"},Mt=wt(()=>p("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),At=_({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=V(),n=Pe([]);ee(()=>{n.value=_e(e.value.outline??t.value.outline)});const s=S(),i=S();return Pt(s,i),(u,h)=>(a(),c("div",{class:T(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:s,role:"navigation"},[p("div",It,[p("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),p("div",Tt,L(r(Ne)(r(t))),1),p("nav",Nt,[Mt,m(Me,{headers:n.value,root:!0},null,8,["headers"])])])],2))}}),Bt=k(At,[["__scopeId","data-v-4a63de48"]]),Ct={class:"VPDocAsideCarbonAds"},Ht=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,n)=>(a(),c("div",Ct,[m(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Et=o=>(C("data-v-465fd2fa"),o=o(),H(),o),Ft={class:"VPDocAside"},Dt=Et(()=>p("div",{class:"spacer"},null,-1)),Ot=_({__name:"VPDocAside",setup(o){const{theme:e}=V();return(t,n)=>(a(),c("div",Ft,[l(t.$slots,"aside-top",{},void 0,!0),l(t.$slots,"aside-outline-before",{},void 0,!0),m(Bt),l(t.$slots,"aside-outline-after",{},void 0,!0),Dt,l(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),$(Ht,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):f("",!0),l(t.$slots,"aside-ads-after",{},void 0,!0),l(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Ut=k(Ot,[["__scopeId","data-v-465fd2fa"]]);function Gt(){const{theme:o,page:e}=V();return b(()=>{const{text:t="Edit this page",pattern:n=""}=o.value.editLink||{};let s;return typeof n=="function"?s=n(e.value):s=n.replace(/:path/g,e.value.filePath),{url:s,text:t}})}function jt(){const{page:o,theme:e,frontmatter:t}=V();return b(()=>{var d,g,y,P,I,N,A,B;const n=Te(e.value.sidebar,o.value.relativePath),s=mt(n),i=s.findIndex(w=>G(o.value.relativePath,w.link)),u=((d=e.value.docFooter)==null?void 0:d.prev)===!1&&!t.value.prev||t.value.prev===!1,h=((g=e.value.docFooter)==null?void 0:g.next)===!1&&!t.value.next||t.value.next===!1;return{prev:u?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((y=s[i-1])==null?void 0:y.docFooterText)??((P=s[i-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((I=s[i-1])==null?void 0:I.link)},next:h?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((N=s[i+1])==null?void 0:N.docFooterText)??((A=s[i+1])==null?void 0:A.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((B=s[i+1])==null?void 0:B.link)}}})}const D=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=b(()=>e.tag??(e.href?"a":"span")),n=b(()=>e.href&&Ve.test(e.href));return(s,i)=>(a(),$(K(t.value),{class:T(["VPLink",{link:s.href,"vp-external-link-icon":n.value,"no-icon":s.noIcon}]),href:s.href?r(he)(s.href):void 0,target:s.target??(n.value?"_blank":void 0),rel:s.rel??(n.value?"noreferrer":void 0)},{default:v(()=>[l(s.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),zt={class:"VPLastUpdated"},qt=["datetime"],Wt=_({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,frontmatter:n,lang:s}=V(),i=b(()=>new Date(n.value.lastUpdated??t.value.lastUpdated)),u=b(()=>i.value.toISOString()),h=S("");return j(()=>{x(()=>{var d,g,y;h.value=new Intl.DateTimeFormat((g=(d=e.value.lastUpdated)==null?void 0:d.formatOptions)!=null&&g.forceLocale?s.value:void 0,((y=e.value.lastUpdated)==null?void 0:y.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(i.value)})}),(d,g)=>{var y;return a(),c("p",zt,[F(L(((y=r(e).lastUpdated)==null?void 0:y.text)||r(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:u.value},L(h.value),9,qt)])}}}),Kt=k(Wt,[["__scopeId","data-v-4fc3eeca"]]),Rt=o=>(C("data-v-311e5358"),o=o(),H(),o),Jt={key:0,class:"VPDocFooter"},Yt={key:0,class:"edit-info"},Qt={key:0,class:"edit-link"},Xt=Rt(()=>p("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),Zt={key:1,class:"last-updated"},xt={key:1,class:"prev-next"},eo={class:"pager"},to=["innerHTML"],oo=["innerHTML"],so={class:"pager"},no=["innerHTML"],ao=["innerHTML"],ro=_({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:n}=V(),s=Gt(),i=jt(),u=b(()=>e.value.editLink&&n.value.editLink!==!1),h=b(()=>t.value.lastUpdated&&n.value.lastUpdated!==!1),d=b(()=>u.value||h.value||i.value.prev||i.value.next);return(g,y)=>{var P,I,N,A;return d.value?(a(),c("footer",Jt,[l(g.$slots,"doc-footer-before",{},void 0,!0),u.value||h.value?(a(),c("div",Yt,[u.value?(a(),c("div",Qt,[m(D,{class:"edit-link-button",href:r(s).url,"no-icon":!0},{default:v(()=>[Xt,F(" "+L(r(s).text),1)]),_:1},8,["href"])])):f("",!0),h.value?(a(),c("div",Zt,[m(Kt)])):f("",!0)])):f("",!0),(P=r(i).prev)!=null&&P.link||(I=r(i).next)!=null&&I.link?(a(),c("nav",xt,[p("div",eo,[(N=r(i).prev)!=null&&N.link?(a(),$(D,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:v(()=>{var B;return[p("span",{class:"desc",innerHTML:((B=r(e).docFooter)==null?void 0:B.prev)||"Previous page"},null,8,to),p("span",{class:"title",innerHTML:r(i).prev.text},null,8,oo)]}),_:1},8,["href"])):f("",!0)]),p("div",so,[(A=r(i).next)!=null&&A.link?(a(),$(D,{key:0,class:"pager-link next",href:r(i).next.link},{default:v(()=>{var B;return[p("span",{class:"desc",innerHTML:((B=r(e).docFooter)==null?void 0:B.next)||"Next page"},null,8,no),p("span",{class:"title",innerHTML:r(i).next.text},null,8,ao)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),io=k(ro,[["__scopeId","data-v-311e5358"]]),lo=o=>(C("data-v-13d3b166"),o=o(),H(),o),co={class:"container"},uo=lo(()=>p("div",{class:"aside-curtain"},null,-1)),vo={class:"aside-container"},po={class:"aside-content"},ho={class:"content"},fo={class:"content-container"},_o={class:"main"},mo=_({__name:"VPDoc",setup(o){const{theme:e}=V(),t=te(),{hasSidebar:n,hasAside:s,leftAside:i}=O(),u=b(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(h,d)=>{const g=q("Content");return a(),c("div",{class:T(["VPDoc",{"has-sidebar":r(n),"has-aside":r(s)}])},[l(h.$slots,"doc-top",{},void 0,!0),p("div",co,[r(s)?(a(),c("div",{key:0,class:T(["aside",{"left-aside":r(i)}])},[uo,p("div",vo,[p("div",po,[m(Ut,null,{"aside-top":v(()=>[l(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[l(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[l(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[l(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[l(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[l(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),p("div",ho,[p("div",fo,[l(h.$slots,"doc-before",{},void 0,!0),p("main",_o,[m(g,{class:T(["vp-doc",[u.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),m(io,null,{"doc-footer-before":v(()=>[l(h.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),l(h.$slots,"doc-after",{},void 0,!0)])])]),l(h.$slots,"doc-bottom",{},void 0,!0)],2)}}}),ko=k(mo,[["__scopeId","data-v-13d3b166"]]),$o=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=b(()=>e.href&&Ve.test(e.href)),n=b(()=>e.tag||e.href?"a":"button");return(s,i)=>(a(),$(K(n.value),{class:T(["VPButton",[s.size,s.theme]]),href:s.href?r(he)(s.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:v(()=>[F(L(s.text),1)]),_:1},8,["class","href","target","rel"]))}}),bo=k($o,[["__scopeId","data-v-12f1d0a0"]]),go=["src","alt"],yo=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const n=q("VPImage",!0);return e.image?(a(),c(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),c("img",Q({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(ve)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,go)):(a(),c(M,{key:1},[m(n,Q({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),m(n,Q({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),Z=k(yo,[["__scopeId","data-v-17155ade"]]),Po=o=>(C("data-v-99eed858"),o=o(),H(),o),Vo={class:"container"},Lo={class:"main"},So={key:0,class:"name"},wo=["innerHTML"],Io=["innerHTML"],To=["innerHTML"],No={key:0,class:"actions"},Mo={key:0,class:"image"},Ao={class:"image-container"},Bo=Po(()=>p("div",{class:"image-bg"},null,-1)),Co=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=oe("hero-image-slot-exists");return(t,n)=>(a(),c("div",{class:T(["VPHero",{"has-image":t.image||r(e)}])},[p("div",Vo,[p("div",Lo,[l(t.$slots,"home-hero-info-before",{},void 0,!0),l(t.$slots,"home-hero-info",{},()=>[t.name?(a(),c("h1",So,[p("span",{innerHTML:t.name,class:"clip"},null,8,wo)])):f("",!0),t.text?(a(),c("p",{key:1,innerHTML:t.text,class:"text"},null,8,Io)):f("",!0),t.tagline?(a(),c("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,To)):f("",!0)],!0),l(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),c("div",No,[(a(!0),c(M,null,E(t.actions,s=>(a(),c("div",{key:s.link,class:"action"},[m(bo,{tag:"a",size:"medium",theme:s.theme,text:s.text,href:s.link,target:s.target,rel:s.rel},null,8,["theme","text","href","target","rel"])]))),128))])):f("",!0),l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),c("div",Mo,[p("div",Ao,[Bo,l(t.$slots,"home-hero-image",{},()=>[t.image?(a(),$(Z,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),Ho=k(Co,[["__scopeId","data-v-99eed858"]]),Eo=_({__name:"VPHomeHero",setup(o){const{frontmatter:e}=V();return(t,n)=>r(e).hero?(a(),$(Ho,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":v(()=>[l(t.$slots,"home-hero-info-before")]),"home-hero-info":v(()=>[l(t.$slots,"home-hero-info")]),"home-hero-info-after":v(()=>[l(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":v(()=>[l(t.$slots,"home-hero-actions-after")]),"home-hero-image":v(()=>[l(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Fo=o=>(C("data-v-4d50477a"),o=o(),H(),o),Do={class:"box"},Oo={key:0,class:"icon"},Uo=["innerHTML"],Go=["innerHTML"],jo=["innerHTML"],zo={key:4,class:"link-text"},qo={class:"link-text-value"},Wo=Fo(()=>p("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),Ko=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),$(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:v(()=>[p("article",Do,[typeof e.icon=="object"&&e.icon.wrap?(a(),c("div",Oo,[m(Z,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),$(Z,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Uo)):f("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,Go),e.details?(a(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,jo)):f("",!0),e.linkText?(a(),c("div",zo,[p("p",qo,[F(L(e.linkText)+" ",1),Wo])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Ro=k(Ko,[["__scopeId","data-v-4d50477a"]]),Jo={key:0,class:"VPFeatures"},Yo={class:"container"},Qo={class:"items"},Xo=_({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=b(()=>{const n=e.features.length;if(n){if(n===2)return"grid-2";if(n===3)return"grid-3";if(n%3===0)return"grid-6";if(n>3)return"grid-4"}else return});return(n,s)=>n.features?(a(),c("div",Jo,[p("div",Yo,[p("div",Qo,[(a(!0),c(M,null,E(n.features,i=>(a(),c("div",{key:i.title,class:T(["item",[t.value]])},[m(Ro,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),Zo=k(Xo,[["__scopeId","data-v-ac86b7e6"]]),xo=_({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=V();return(t,n)=>r(e).features?(a(),$(Zo,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):f("",!0)}}),es=_({__name:"VPHomeContent",setup(o){const{width:e}=We({includeScrollbar:!1});return(t,n)=>(a(),c("div",{class:"vp-doc container",style:Le(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[l(t.$slots,"default",{},void 0,!0)],4))}}),ts=k(es,[["__scopeId","data-v-5fb900b2"]]),os={class:"VPHome"},ss=_({__name:"VPHome",setup(o){const{frontmatter:e}=V();return(t,n)=>{const s=q("Content");return a(),c("div",os,[l(t.$slots,"home-hero-before",{},void 0,!0),m(Eo,null,{"home-hero-info-before":v(()=>[l(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[l(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[l(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[l(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),l(t.$slots,"home-hero-after",{},void 0,!0),l(t.$slots,"home-features-before",{},void 0,!0),m(xo),l(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),$(ts,{key:0},{default:v(()=>[m(s)]),_:1})):(a(),$(s,{key:1}))])}}}),ns=k(ss,[["__scopeId","data-v-c5e107f6"]]),as={},rs={class:"VPPage"};function is(o,e){const t=q("Content");return a(),c("div",rs,[l(o.$slots,"page-top"),m(t),l(o.$slots,"page-bottom")])}const ls=k(as,[["render",is]]),cs=_({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=V(),{hasSidebar:n}=O();return(s,i)=>(a(),c("div",{class:T(["VPContent",{"has-sidebar":r(n),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?l(s.$slots,"not-found",{key:0},()=>[m(ft)],!0):r(t).layout==="page"?(a(),$(ls,{key:1},{"page-top":v(()=>[l(s.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[l(s.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),$(ns,{key:2},{"home-hero-before":v(()=>[l(s.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[l(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[l(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[l(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[l(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[l(s.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[l(s.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[l(s.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[l(s.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),$(K(r(t).layout),{key:3})):(a(),$(ko,{key:4},{"doc-top":v(()=>[l(s.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[l(s.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":v(()=>[l(s.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[l(s.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[l(s.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[l(s.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[l(s.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[l(s.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[l(s.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[l(s.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[l(s.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),us=k(cs,[["__scopeId","data-v-787a1e06"]]),ds={class:"container"},vs=["innerHTML"],ps=["innerHTML"],hs=_({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:n}=O();return(s,i)=>r(e).footer&&r(t).footer!==!1?(a(),c("footer",{key:0,class:T(["VPFooter",{"has-sidebar":r(n)}])},[p("div",ds,[r(e).footer.message?(a(),c("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,vs)):f("",!0),r(e).footer.copyright?(a(),c("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,ps)):f("",!0)])],2)):f("",!0)}}),fs=k(hs,[["__scopeId","data-v-0a38b38c"]]);function Ae(){const{theme:o,frontmatter:e}=V(),t=Pe([]),n=b(()=>t.value.length>0);return ee(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:n}}const _s=o=>(C("data-v-ce15bf42"),o=o(),H(),o),ms=_s(()=>p("span",{class:"vpi-chevron-right icon"},null,-1)),ks={class:"header"},$s={class:"outline"},bs=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=V(),n=S(!1),s=S(0),i=S(),u=S();Ke(i,()=>{n.value=!1}),Re("Escape",()=>{n.value=!1}),ee(()=>{n.value=!1});function h(){n.value=!n.value,s.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function d(y){y.target.classList.contains("outline-link")&&(u.value&&(u.value.style.transition="none"),Je(()=>{n.value=!1}))}function g(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(y,P)=>(a(),c("div",{class:"VPLocalNavOutlineDropdown",style:Le({"--vp-vh":s.value+"px"}),ref_key:"main",ref:i},[y.headers.length>0?(a(),c("button",{key:0,onClick:h,class:T({open:n.value})},[F(L(r(Ne)(r(t)))+" ",1),ms],2)):(a(),c("button",{key:1,onClick:g},L(r(t).returnToTopLabel||"Return to top"),1)),m(de,{name:"flyout"},{default:v(()=>[n.value?(a(),c("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:d},[p("div",ks,[p("a",{class:"top-link",href:"#",onClick:g},L(r(t).returnToTopLabel||"Return to top"),1)]),p("div",$s,[m(Me,{headers:y.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),gs=k(bs,[["__scopeId","data-v-ce15bf42"]]),ys=o=>(C("data-v-c7fa3a03"),o=o(),H(),o),Ps={class:"container"},Vs=["aria-expanded"],Ls=ys(()=>p("span",{class:"vpi-align-left menu-icon"},null,-1)),Ss={class:"menu-text"},ws=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:n}=O(),{headers:s}=Ae(),{y:i}=Se(),u=S(0);j(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),ee(()=>{s.value=_e(t.value.outline??e.value.outline)});const h=b(()=>s.value.length===0),d=b(()=>h.value&&!n.value),g=b(()=>({VPLocalNav:!0,"has-sidebar":n.value,empty:h.value,fixed:d.value}));return(y,P)=>r(t).layout!=="home"&&(!d.value||r(i)>=u.value)?(a(),c("div",{key:0,class:T(g.value)},[p("div",Ps,[r(n)?(a(),c("button",{key:0,class:"menu","aria-expanded":y.open,"aria-controls":"VPSidebarNav",onClick:P[0]||(P[0]=I=>y.$emit("open-menu"))},[Ls,p("span",Ss,L(r(e).sidebarMenuLabel||"Menu"),1)],8,Vs)):f("",!0),m(gs,{headers:r(s),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Is=k(ws,[["__scopeId","data-v-c7fa3a03"]]);function Ts(){const o=S(!1);function e(){o.value=!0,window.addEventListener("resize",s)}function t(){o.value=!1,window.removeEventListener("resize",s)}function n(){o.value?t():e()}function s(){window.outerWidth>=768&&t()}const i=te();return z(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:n}}const Ns={},Ms={class:"VPSwitch",type:"button",role:"switch"},As={class:"check"},Bs={key:0,class:"icon"};function Cs(o,e){return a(),c("button",Ms,[p("span",As,[o.$slots.default?(a(),c("span",Bs,[l(o.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Hs=k(Ns,[["render",Cs],["__scopeId","data-v-e775a51b"]]),Be=o=>(C("data-v-f327c0eb"),o=o(),H(),o),Es=Be(()=>p("span",{class:"vpi-sun sun"},null,-1)),Fs=Be(()=>p("span",{class:"vpi-moon moon"},null,-1)),Ds=_({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=V(),n=oe("toggle-appearance",()=>{e.value=!e.value}),s=b(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(i,u)=>(a(),$(Hs,{title:s.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(n)},{default:v(()=>[Es,Fs]),_:1},8,["title","aria-checked","onClick"]))}}),me=k(Ds,[["__scopeId","data-v-f327c0eb"]]),Os={key:0,class:"VPNavBarAppearance"},Us=_({__name:"VPNavBarAppearance",setup(o){const{site:e}=V();return(t,n)=>r(e).appearance&&r(e).appearance!=="force-dark"?(a(),c("div",Os,[m(me)])):f("",!0)}}),Gs=k(Us,[["__scopeId","data-v-920ea739"]]),ke=S();let Ce=!1,re=0;function js(o){const e=S(!1);if(R){!Ce&&zs(),re++;const t=z(ke,n=>{var s,i,u;n===o.el.value||(s=o.el.value)!=null&&s.contains(n)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(u=o.onBlur)==null||u.call(o))});pe(()=>{t(),re--,re||qs()})}return Ye(e)}function zs(){document.addEventListener("focusin",He),Ce=!0,ke.value=document.activeElement}function qs(){document.removeEventListener("focusin",He)}function He(){ke.value=document.activeElement}const Ws={class:"VPMenuLink"},Ks=_({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,n)=>(a(),c("div",Ws,[m(D,{class:T({active:r(G)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:v(()=>[F(L(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),se=k(Ks,[["__scopeId","data-v-84ccf230"]]),Rs={class:"VPMenuGroup"},Js={key:0,class:"title"},Ys=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Rs,[e.text?(a(),c("p",Js,L(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,n=>(a(),c(M,null,["link"in n?(a(),$(se,{key:0,item:n},null,8,["item"])):f("",!0)],64))),256))]))}}),Qs=k(Ys,[["__scopeId","data-v-f7f49da0"]]),Xs={class:"VPMenu"},Zs={key:0,class:"items"},xs=_({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),c("div",Xs,[e.items?(a(),c("div",Zs,[(a(!0),c(M,null,E(e.items,n=>(a(),c(M,{key:n.text},["link"in n?(a(),$(se,{key:0,item:n},null,8,["item"])):(a(),$(Qs,{key:1,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0),l(e.$slots,"default",{},void 0,!0)]))}}),en=k(xs,[["__scopeId","data-v-e8d68d95"]]),tn=o=>(C("data-v-c0b03d55"),o=o(),H(),o),on=["aria-expanded","aria-label"],sn={key:0,class:"text"},nn=["innerHTML"],an=tn(()=>p("span",{class:"vpi-chevron-down text-icon"},null,-1)),rn={key:1,class:"vpi-more-horizontal icon"},ln={class:"menu"},cn=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=S(!1),t=S();js({el:t,onBlur:n});function n(){e.value=!1}return(s,i)=>(a(),c("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=u=>e.value=!0),onMouseleave:i[2]||(i[2]=u=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":s.label,onClick:i[0]||(i[0]=u=>e.value=!e.value)},[s.button||s.icon?(a(),c("span",sn,[s.icon?(a(),c("span",{key:0,class:T([s.icon,"option-icon"])},null,2)):f("",!0),s.button?(a(),c("span",{key:1,innerHTML:s.button},null,8,nn)):f("",!0),an])):(a(),c("span",rn))],8,on),p("div",ln,[m(en,{items:s.items},{default:v(()=>[l(s.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),$e=k(cn,[["__scopeId","data-v-c0b03d55"]]),un=["href","aria-label","innerHTML"],dn=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=b(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,s)=>(a(),c("a",{class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,un))}}),vn=k(dn,[["__scopeId","data-v-054ad44b"]]),pn={class:"VPSocialLinks"},hn=_({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),c("div",pn,[(a(!0),c(M,null,E(e.links,({link:n,icon:s,ariaLabel:i})=>(a(),$(vn,{key:n,icon:s,link:n,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),be=k(hn,[["__scopeId","data-v-26c7e433"]]),fn={key:0,class:"group translations"},_n={class:"trans-title"},mn={key:1,class:"group"},kn={class:"item appearance"},$n={class:"label"},bn={class:"appearance-action"},gn={key:2,class:"group"},yn={class:"item social-links"},Pn=_({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=V(),{localeLinks:n,currentLang:s}=J({correspondingLink:!0}),i=b(()=>n.value.length&&s.value.label||e.value.appearance||t.value.socialLinks);return(u,h)=>i.value?(a(),$($e,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[r(n).length&&r(s).label?(a(),c("div",fn,[p("p",_n,L(r(s).label),1),(a(!0),c(M,null,E(r(n),d=>(a(),$(se,{key:d.link,item:d},null,8,["item"]))),128))])):f("",!0),r(e).appearance&&r(e).appearance!=="force-dark"?(a(),c("div",mn,[p("div",kn,[p("p",$n,L(r(t).darkModeSwitchLabel||"Appearance"),1),p("div",bn,[m(me)])])])):f("",!0),r(t).socialLinks?(a(),c("div",gn,[p("div",yn,[m(be,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Vn=k(Pn,[["__scopeId","data-v-3d53e9c7"]]),Ln=o=>(C("data-v-3428b086"),o=o(),H(),o),Sn=["aria-expanded"],wn=Ln(()=>p("span",{class:"container"},[p("span",{class:"top"}),p("span",{class:"middle"}),p("span",{class:"bottom"})],-1)),In=[wn],Tn=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),c("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},In,10,Sn))}}),Nn=k(Tn,[["__scopeId","data-v-3428b086"]]),Mn=["innerHTML"],An=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,n)=>(a(),$(D,{class:T({VPNavBarMenuLink:!0,active:r(G)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:v(()=>[p("span",{innerHTML:t.item.text},null,8,Mn)]),_:1},8,["class","href","target","rel"]))}}),Bn=k(An,[["__scopeId","data-v-a12bafb5"]]),Cn=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=V(),n=i=>"link"in i?G(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(n),s=b(()=>n(e.item));return(i,u)=>(a(),$($e,{class:T({VPNavBarMenuGroup:!0,active:r(G)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||s.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),Hn=o=>(C("data-v-25f68e44"),o=o(),H(),o),En={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Fn=Hn(()=>p("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Dn=_({__name:"VPNavBarMenu",setup(o){const{theme:e}=V();return(t,n)=>r(e).nav?(a(),c("nav",En,[Fn,(a(!0),c(M,null,E(r(e).nav,s=>(a(),c(M,{key:s.text},["link"in s?(a(),$(Bn,{key:0,item:s},null,8,["item"])):(a(),$(Cn,{key:1,item:s},null,8,["item"]))],64))),128))])):f("",!0)}}),On=k(Dn,[["__scopeId","data-v-25f68e44"]]);function Un(o){const{localeIndex:e,theme:t}=V();function n(s){var A,B,w;const i=s.split("."),u=(A=t.value.search)==null?void 0:A.options,h=u&&typeof u=="object",d=h&&((w=(B=u.locales)==null?void 0:B[e.value])==null?void 0:w.translations)||null,g=h&&u.translations||null;let y=d,P=g,I=o;const N=i.pop();for(const Y of i){let U=null;const W=I==null?void 0:I[Y];W&&(U=I=W);const ne=P==null?void 0:P[Y];ne&&(U=P=ne);const ae=y==null?void 0:y[Y];ae&&(U=y=ae),W||(I=U),ne||(P=U),ae||(y=U)}return(y==null?void 0:y[N])??(P==null?void 0:P[N])??(I==null?void 0:I[N])??""}return n}const Gn=["aria-label"],jn={class:"DocSearch-Button-Container"},zn=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),qn={class:"DocSearch-Button-Placeholder"},Wn=p("span",{class:"DocSearch-Button-Keys"},[p("kbd",{class:"DocSearch-Button-Key"}),p("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ge=_({__name:"VPNavBarSearchButton",setup(o){const t=Un({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(n,s)=>(a(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[p("span",jn,[zn,p("span",qn,L(r(t)("button.buttonText")),1)]),Wn],8,Gn))}}),Kn={class:"VPNavBarSearch"},Rn={id:"local-search"},Jn={key:1,id:"docsearch"},Yn=_({__name:"VPNavBarSearch",setup(o){const e=()=>null,t=()=>null,{theme:n}=V(),s=S(!1),i=S(!1);j(()=>{});function u(){s.value||(s.value=!0,setTimeout(h,16))}function h(){const y=new Event("keydown");y.key="k",y.metaKey=!0,window.dispatchEvent(y),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||h()},16)}const d=S(!1),g="";return(y,P)=>{var I;return a(),c("div",Kn,[r(g)==="local"?(a(),c(M,{key:0},[d.value?(a(),$(r(e),{key:0,onClose:P[0]||(P[0]=N=>d.value=!1)})):f("",!0),p("div",Rn,[m(ge,{onClick:P[1]||(P[1]=N=>d.value=!0)})])],64)):r(g)==="algolia"?(a(),c(M,{key:1},[s.value?(a(),$(r(t),{key:0,algolia:((I=r(n).search)==null?void 0:I.options)??r(n).algolia,onVnodeBeforeMount:P[2]||(P[2]=N=>i.value=!0)},null,8,["algolia"])):f("",!0),i.value?f("",!0):(a(),c("div",Jn,[m(ge,{onClick:u})]))],64)):f("",!0)])}}}),Qn=_({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=V();return(t,n)=>r(e).socialLinks?(a(),$(be,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Xn=k(Qn,[["__scopeId","data-v-1db4960e"]]),Zn=["href","rel","target"],xn={key:1},ea={key:2},ta=_({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=V(),{hasSidebar:n}=O(),{currentLang:s}=J(),i=b(()=>{var d;return typeof t.value.logoLink=="string"?t.value.logoLink:(d=t.value.logoLink)==null?void 0:d.link}),u=b(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.rel}),h=b(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.target});return(d,g)=>(a(),c("div",{class:T(["VPNavBarTitle",{"has-sidebar":r(n)}])},[p("a",{class:"title",href:i.value??r(he)(r(s).link),rel:u.value,target:h.value},[l(d.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),$(Z,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):f("",!0),r(t).siteTitle?(a(),c("span",xn,L(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),c("span",ea,L(r(e).title),1)):f("",!0),l(d.$slots,"nav-bar-title-after",{},void 0,!0)],8,Zn)],2))}}),oa=k(ta,[["__scopeId","data-v-bd7b7032"]]),sa={class:"items"},na={class:"title"},aa=_({__name:"VPNavBarTranslations",setup(o){const{theme:e}=V(),{localeLinks:t,currentLang:n}=J({correspondingLink:!0});return(s,i)=>r(t).length&&r(n).label?(a(),$($e,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:v(()=>[p("div",sa,[p("p",na,L(r(n).label),1),(a(!0),c(M,null,E(r(t),u=>(a(),$(se,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),ra=k(aa,[["__scopeId","data-v-e020314f"]]),ia=o=>(C("data-v-50076c89"),o=o(),H(),o),la={class:"wrapper"},ca={class:"container"},ua={class:"title"},da={class:"content"},va={class:"content-body"},pa=ia(()=>p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1)),ha=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const{y:e}=Se(),{hasSidebar:t}=O(),{hasLocalNav:n}=Ae(),{frontmatter:s}=V(),i=S({});return ye(()=>{i.value={"has-sidebar":t.value,"has-local-nav":n.value,top:s.value.layout==="home"&&e.value===0}}),(u,h)=>(a(),c("div",{class:T(["VPNavBar",i.value])},[p("div",la,[p("div",ca,[p("div",ua,[m(oa,null,{"nav-bar-title-before":v(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",da,[p("div",va,[l(u.$slots,"nav-bar-content-before",{},void 0,!0),m(Yn,{class:"search"}),m(On,{class:"menu"}),m(ra,{class:"translations"}),m(Gs,{class:"appearance"}),m(Xn,{class:"social-links"}),m(Vn,{class:"extra"}),l(u.$slots,"nav-bar-content-after",{},void 0,!0),m(Nn,{class:"hamburger",active:u.isScreenOpen,onClick:h[0]||(h[0]=d=>u.$emit("toggle-screen"))},null,8,["active"])])])])]),pa],2))}}),fa=k(ha,[["__scopeId","data-v-50076c89"]]),_a={key:0,class:"VPNavScreenAppearance"},ma={class:"text"},ka=_({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=V();return(n,s)=>r(e).appearance&&r(e).appearance!=="force-dark"?(a(),c("div",_a,[p("p",ma,L(r(t).darkModeSwitchLabel||"Appearance"),1),m(me)])):f("",!0)}}),$a=k(ka,[["__scopeId","data-v-624c4525"]]),ba=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=oe("close-screen");return(t,n)=>(a(),$(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:v(()=>[F(L(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),ga=k(ba,[["__scopeId","data-v-8291b0a7"]]),ya=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=oe("close-screen");return(t,n)=>(a(),$(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:v(()=>[F(L(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Ee=k(ya,[["__scopeId","data-v-83f458d8"]]),Pa={class:"VPNavScreenMenuGroupSection"},Va={key:0,class:"title"},La=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Pa,[e.text?(a(),c("p",Va,L(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,n=>(a(),$(Ee,{key:n.text,item:n},null,8,["item"]))),128))]))}}),Sa=k(La,[["__scopeId","data-v-b6357329"]]),wa=o=>(C("data-v-4a5b86bc"),o=o(),H(),o),Ia=["aria-controls","aria-expanded"],Ta=["innerHTML"],Na=wa(()=>p("span",{class:"vpi-plus button-icon"},null,-1)),Ma=["id"],Aa={key:1,class:"group"},Ba=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=S(!1),n=b(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function s(){t.value=!t.value}return(i,u)=>(a(),c("div",{class:T(["VPNavScreenMenuGroup",{open:t.value}])},[p("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:s},[p("span",{class:"button-text",innerHTML:i.text},null,8,Ta),Na],8,Ia),p("div",{id:n.value,class:"items"},[(a(!0),c(M,null,E(i.items,h=>(a(),c(M,{key:h.text},["link"in h?(a(),c("div",{key:h.text,class:"item"},[m(Ee,{item:h},null,8,["item"])])):(a(),c("div",Aa,[m(Sa,{text:h.text,items:h.items},null,8,["text","items"])]))],64))),128))],8,Ma)],2))}}),Ca=k(Ba,[["__scopeId","data-v-4a5b86bc"]]),Ha={key:0,class:"VPNavScreenMenu"},Ea=_({__name:"VPNavScreenMenu",setup(o){const{theme:e}=V();return(t,n)=>r(e).nav?(a(),c("nav",Ha,[(a(!0),c(M,null,E(r(e).nav,s=>(a(),c(M,{key:s.text},["link"in s?(a(),$(ga,{key:0,item:s},null,8,["item"])):(a(),$(Ca,{key:1,text:s.text||"",items:s.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Fa=_({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=V();return(t,n)=>r(e).socialLinks?(a(),$(be,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Fe=o=>(C("data-v-af240698"),o=o(),H(),o),Da=Fe(()=>p("span",{class:"vpi-languages icon lang"},null,-1)),Oa=Fe(()=>p("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Ua={class:"list"},Ga=_({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=J({correspondingLink:!0}),n=S(!1);function s(){n.value=!n.value}return(i,u)=>r(e).length&&r(t).label?(a(),c("div",{key:0,class:T(["VPNavScreenTranslations",{open:n.value}])},[p("button",{class:"title",onClick:s},[Da,F(" "+L(r(t).label)+" ",1),Oa]),p("ul",Ua,[(a(!0),c(M,null,E(r(e),h=>(a(),c("li",{key:h.link,class:"item"},[m(D,{class:"link",href:h.link},{default:v(()=>[F(L(h.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),ja=k(Ga,[["__scopeId","data-v-af240698"]]),za={class:"container"},qa=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=S(null),t=we(R?document.body:null);return(n,s)=>(a(),$(de,{name:"fade",onEnter:s[0]||(s[0]=i=>t.value=!0),onAfterLeave:s[1]||(s[1]=i=>t.value=!1)},{default:v(()=>[n.open?(a(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",za,[l(n.$slots,"nav-screen-content-before",{},void 0,!0),m(Ea,{class:"menu"}),m(ja,{class:"translations"}),m($a,{class:"appearance"}),m(Fa,{class:"social-links"}),l(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),Wa=k(qa,[["__scopeId","data-v-dd8956c7"]]),Ka={key:0,class:"VPNav"},Ra=_({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=Ts(),{frontmatter:s}=V(),i=b(()=>s.value.navbar!==!1);return Ie("close-screen",t),x(()=>{R&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(u,h)=>i.value?(a(),c("header",Ka,[m(fa,{"is-screen-open":r(e),onToggleScreen:r(n)},{"nav-bar-title-before":v(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[l(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[l(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),m(Wa,{open:r(e)},{"nav-screen-content-before":v(()=>[l(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[l(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),Ja=k(Ra,[["__scopeId","data-v-2892230d"]]),De=o=>(C("data-v-8f61602b"),o=o(),H(),o),Ya=["role","tabindex"],Qa=De(()=>p("div",{class:"indicator"},null,-1)),Xa=De(()=>p("span",{class:"vpi-chevron-right caret-icon"},null,-1)),Za=[Xa],xa={key:1,class:"items"},er=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:n,isLink:s,isActiveLink:i,hasActiveLink:u,hasChildren:h,toggle:d}=$t(b(()=>e.item)),g=b(()=>h.value?"section":"div"),y=b(()=>s.value?"a":"div"),P=b(()=>h.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),I=b(()=>s.value?void 0:"button"),N=b(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":s.value},{"is-active":i.value},{"has-active":u.value}]);function A(w){"key"in w&&w.key!=="Enter"||!e.item.link&&d()}function B(){e.item.link&&d()}return(w,Y)=>{const U=q("VPSidebarItem",!0);return a(),$(K(g.value),{class:T(["VPSidebarItem",N.value])},{default:v(()=>[w.item.text?(a(),c("div",Q({key:0,class:"item",role:I.value},Xe(w.item.items?{click:A,keydown:A}:{},!0),{tabindex:w.item.items&&0}),[Qa,w.item.link?(a(),$(D,{key:0,tag:y.value,class:"link",href:w.item.link,rel:w.item.rel,target:w.item.target},{default:v(()=>[(a(),$(K(P.value),{class:"text",innerHTML:w.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),$(K(P.value),{key:1,class:"text",innerHTML:w.item.text},null,8,["innerHTML"])),w.item.collapsed!=null?(a(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:B,onKeydown:Qe(B,["enter"]),tabindex:"0"},Za,32)):f("",!0)],16,Ya)):f("",!0),w.item.items&&w.item.items.length?(a(),c("div",xa,[w.depth<5?(a(!0),c(M,{key:0},E(w.item.items,W=>(a(),$(U,{key:W.text,item:W,depth:w.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),tr=k(er,[["__scopeId","data-v-8f61602b"]]),Oe=o=>(C("data-v-eb38e9cf"),o=o(),H(),o),or=Oe(()=>p("div",{class:"curtain"},null,-1)),sr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},nr=Oe(()=>p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),ar=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=O(),n=o,s=S(null),i=we(R?document.body:null);return z([n,s],()=>{var u;n.open?(i.value=!0,(u=s.value)==null||u.focus()):i.value=!1},{immediate:!0,flush:"post"}),(u,h)=>r(t)?(a(),c("aside",{key:0,class:T(["VPSidebar",{open:u.open}]),ref_key:"navEl",ref:s,onClick:h[0]||(h[0]=Ze(()=>{},["stop"]))},[or,p("nav",sr,[nr,l(u.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),c(M,null,E(r(e),d=>(a(),c("div",{key:d.text,class:"group"},[m(tr,{item:d,depth:0},null,8,["item"])]))),128)),l(u.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),rr=k(ar,[["__scopeId","data-v-eb38e9cf"]]),ir=_({__name:"VPSkipLink",setup(o){const e=te(),t=S();z(()=>e.path,()=>t.value.focus());function n({target:s}){const i=document.getElementById(decodeURIComponent(s.hash).slice(1));if(i){const u=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",u)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",u),i.focus(),window.scrollTo(0,0)}}return(s,i)=>(a(),c(M,null,[p("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n}," Skip to content ")],64))}}),lr=k(ir,[["__scopeId","data-v-ce070715"]]),cr=_({__name:"Layout",setup(o){const{isOpen:e,open:t,close:n}=O(),s=te();z(()=>s.path,n),kt(e,n);const{frontmatter:i}=V(),u=xe(),h=b(()=>!!u["home-hero-image"]);return Ie("hero-image-slot-exists",h),(d,g)=>{const y=q("Content");return r(i).layout!==!1?(a(),c("div",{key:0,class:T(["Layout",r(i).pageClass])},[l(d.$slots,"layout-top",{},void 0,!0),m(lr),m(st,{class:"backdrop",show:r(e),onClick:r(n)},null,8,["show","onClick"]),m(Ja,null,{"nav-bar-title-before":v(()=>[l(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[l(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[l(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[l(d.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[l(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[l(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),m(Is,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),m(rr,{open:r(e)},{"sidebar-nav-before":v(()=>[l(d.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[l(d.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),m(us,null,{"page-top":v(()=>[l(d.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[l(d.$slots,"page-bottom",{},void 0,!0)]),"not-found":v(()=>[l(d.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[l(d.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[l(d.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[l(d.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[l(d.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[l(d.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[l(d.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[l(d.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[l(d.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[l(d.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[l(d.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[l(d.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[l(d.$slots,"doc-after",{},void 0,!0)]),"doc-top":v(()=>[l(d.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[l(d.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":v(()=>[l(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[l(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[l(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[l(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[l(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[l(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),m(fs),l(d.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),$(y,{key:1}))}}}),ur=k(cr,[["__scopeId","data-v-a534ac59"]]),vr={Layout:ur,enhanceApp:({app:o})=>{o.component("Badge",et)}};export{vr as t}; diff --git a/docs/assets/en-US_api_add-element.md.CSft2v_9.js b/docs/assets/en-US_api_add-element.md.CSft2v_9.js new file mode 100644 index 0000000..eead908 --- /dev/null +++ b/docs/assets/en-US_api_add-element.md.CSft2v_9.js @@ -0,0 +1,25 @@ +import{_ as s,o as i,c as a,a2 as n,m as e}from"./chunks/framework.PNNbM9mo.js";const m=JSON.parse('{"title":"addElement","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/add-element.md","filePath":"en-US/api/add-element.md"}'),t={name:"en-US/api/add-element.md"},l=n(`

addElement

Introduction

addElement Add elements to the drawing and trigger a rerender.

Arguments

  • {object} element More Element Infomation>> .

  • {object} { position?: number[] },Optional configuration, position element index position, for example [1, 2] means adding the element to the third position of the second element (must be of type Group).

Returns

  • {object}

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData({ elements: [] });
+
+idraw.addElement({
+  name: 'rect',
+  x: 140,
+  y: 120,
+  w: 200,
+  h: 100,
+  type: 'rect',
+  detail: {
+    background: '#f7d3c1',
+    borderRadius: 20,
+    borderWidth: 4,
+    borderColor: '#ff6032'
+  }
+});

Example

More Demo >>

`,11),h=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-addElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(d,r,E,o,c,g){return i(),a("div",null,p)}const F=s(t,[["render",k]]);export{m as __pageData,F as default}; diff --git a/docs/assets/en-US_api_add-element.md.CSft2v_9.lean.js b/docs/assets/en-US_api_add-element.md.CSft2v_9.lean.js new file mode 100644 index 0000000..255d730 --- /dev/null +++ b/docs/assets/en-US_api_add-element.md.CSft2v_9.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as n,m as e}from"./chunks/framework.PNNbM9mo.js";const m=JSON.parse('{"title":"addElement","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/add-element.md","filePath":"en-US/api/add-element.md"}'),t={name:"en-US/api/add-element.md"},l=n("",11),h=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-addElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(d,r,E,o,c,g){return i(),a("div",null,p)}const F=s(t,[["render",k]]);export{m as __pageData,F as default}; diff --git a/docs/assets/en-US_api_center-content.md.HDti-yp1.js b/docs/assets/en-US_api_center-content.md.HDti-yp1.js new file mode 100644 index 0000000..dc18fef --- /dev/null +++ b/docs/assets/en-US_api_center-content.md.HDti-yp1.js @@ -0,0 +1,16 @@ +import{_ as s,o as a,c as i,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const y=JSON.parse('{"title":"centerContent","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/center-content.md","filePath":"en-US/api/center-content.md"}'),t={name:"en-US/api/center-content.md"},l=e(`

centerContent

Introduction

centerContent Display the content in the center of the view. If the content size exceeds the view, the content will be proportionally reduced and centered in the view.

Arguments

  • {object} options
    • {Data} options.data Optionally, calculate new content data for centered dimensions.

Returns

N/A

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData({
+  element: [
+    /* ... */
+  ]
+});
+
+idraw.centerContent();

Example

More Demo

`,11),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-centerContent&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function r(k,o,d,c,E,g){return a(),i("div",null,p)}const m=s(t,[["render",r]]);export{y as __pageData,m as default}; diff --git a/docs/assets/en-US_api_center-content.md.HDti-yp1.lean.js b/docs/assets/en-US_api_center-content.md.HDti-yp1.lean.js new file mode 100644 index 0000000..4e056b1 --- /dev/null +++ b/docs/assets/en-US_api_center-content.md.HDti-yp1.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as i,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const y=JSON.parse('{"title":"centerContent","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/center-content.md","filePath":"en-US/api/center-content.md"}'),t={name:"en-US/api/center-content.md"},l=e("",11),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-centerContent&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function r(k,o,d,c,E,g){return a(),i("div",null,p)}const m=s(t,[["render",r]]);export{y as __pageData,m as default}; diff --git a/docs/assets/en-US_api_delete-element.md.5FA1Myw8.js b/docs/assets/en-US_api_delete-element.md.5FA1Myw8.js new file mode 100644 index 0000000..7d6ed2f --- /dev/null +++ b/docs/assets/en-US_api_delete-element.md.5FA1Myw8.js @@ -0,0 +1,19 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"deleteElement","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/delete-element.md","filePath":"en-US/api/delete-element.md"}'),t={name:"en-US/api/delete-element.md"},l=e(`

deleteElement

Introduction

addElement Delete elements to the drawing and trigger a rerender.

Arugments

  • {string} uuid

Returns

None

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+
+const uuid = idraw.getData().elements[0].uuid;
+
+idraw.deleteElement(uuid);

示例

Example

More Demo >>

`,12),h=n("iframe",{src:"https://idrawjs.com/playground/?demo=api-deleteElement&header=false&sider=false&default-editor-split=37",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,o,E,c,g){return i(),a("div",null,p)}const m=s(t,[["render",k]]);export{u as __pageData,m as default}; diff --git a/docs/assets/en-US_api_delete-element.md.5FA1Myw8.lean.js b/docs/assets/en-US_api_delete-element.md.5FA1Myw8.lean.js new file mode 100644 index 0000000..2ece6d5 --- /dev/null +++ b/docs/assets/en-US_api_delete-element.md.5FA1Myw8.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"deleteElement","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/delete-element.md","filePath":"en-US/api/delete-element.md"}'),t={name:"en-US/api/delete-element.md"},l=e("",12),h=n("iframe",{src:"https://idrawjs.com/playground/?demo=api-deleteElement&header=false&sider=false&default-editor-split=37",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,o,E,c,g){return i(),a("div",null,p)}const m=s(t,[["render",k]]);export{u as __pageData,m as default}; diff --git a/docs/assets/en-US_api_enable-disable.md.Xl16Owsf.js b/docs/assets/en-US_api_enable-disable.md.Xl16Owsf.js new file mode 100644 index 0000000..96e2ce3 --- /dev/null +++ b/docs/assets/en-US_api_enable-disable.md.Xl16Owsf.js @@ -0,0 +1,15 @@ +import{_ as s,o as i,c as a,a2 as e,m as l}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"enable/disable","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/enable-disable.md","filePath":"en-US/api/enable-disable.md"}'),n={name:"en-US/api/enable-disable.md"},t=e(`

enable/disable

Introduction

  • enable(...) Turn on a feature
  • disable(...) Turn off a feature

Arguments

  • {IDrawFeature} feat Feature type
    • 'ruler': Ruler feature
    • 'scroll': Scroll feature
    • 'scale': Scale feature
    • 'info': Display information, eg. element size
    • - Other features are to be developed...
ts
type IDrawFeature = 'ruler' | 'scroll' | 'scale' | 'info'; // TODO other feature

Returns

N/A

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+idraw.disable('ruler');
+
+setTimeout(() => {
+  idraw.enable('ruler');
+}, 1000);

Example

More Demo >>

`,12),h=l("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-enable&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[t,h];function k(r,d,o,E,c,g){return i(),a("div",null,p)}const F=s(n,[["render",k]]);export{u as __pageData,F as default}; diff --git a/docs/assets/en-US_api_enable-disable.md.Xl16Owsf.lean.js b/docs/assets/en-US_api_enable-disable.md.Xl16Owsf.lean.js new file mode 100644 index 0000000..5485ee4 --- /dev/null +++ b/docs/assets/en-US_api_enable-disable.md.Xl16Owsf.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as e,m as l}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"enable/disable","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/enable-disable.md","filePath":"en-US/api/enable-disable.md"}'),n={name:"en-US/api/enable-disable.md"},t=e("",12),h=l("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-enable&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[t,h];function k(r,d,o,E,c,g){return i(),a("div",null,p)}const F=s(n,[["render",k]]);export{u as __pageData,F as default}; diff --git a/docs/assets/en-US_api_get-data.md.zaCOgLDU.js b/docs/assets/en-US_api_get-data.md.zaCOgLDU.js new file mode 100644 index 0000000..09be6d7 --- /dev/null +++ b/docs/assets/en-US_api_get-data.md.zaCOgLDU.js @@ -0,0 +1,33 @@ +import{_ as s,o as i,c as a,a2 as n,m as t}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"getData","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/get-data.md","filePath":"en-US/api/get-data.md"}'),l={name:"en-US/api/get-data.md"},h=n(`

getData

Introduction

getData The function can be used to get lastest Drawing-Data of Image;

Arguments

  • {object} options
    • {boolean} options.compact

Returns

  • {object} data Drawing-Data

Usage

js
import { iDraw } from 'idraw';
+
+const data = {
+  elements: [
+    {
+      name: 'rect',
+      x: 160,
+      y: 120,
+      w: 200,
+      h: 100,
+      angle: 30,
+      type: 'rect',
+      detail: {
+        background: '#d5f5f9',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+
+const resultData = idraw.getData();
+console.log(resultData);

Example

More Demo

`,11),e=t("iframe",{src:"https://idrawjs.com/playground/?demo=api-getData&header=false&sider=false&default-editor-split=37",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,e];function k(r,E,d,o,g,c){return i(),a("div",null,p)}const u=s(l,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/en-US_api_get-data.md.zaCOgLDU.lean.js b/docs/assets/en-US_api_get-data.md.zaCOgLDU.lean.js new file mode 100644 index 0000000..6c77108 --- /dev/null +++ b/docs/assets/en-US_api_get-data.md.zaCOgLDU.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as n,m as t}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"getData","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/get-data.md","filePath":"en-US/api/get-data.md"}'),l={name:"en-US/api/get-data.md"},h=n("",11),e=t("iframe",{src:"https://idrawjs.com/playground/?demo=api-getData&header=false&sider=false&default-editor-split=37",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,e];function k(r,E,d,o,g,c){return i(),a("div",null,p)}const u=s(l,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/en-US_api_move-element.md.erz1dvw_.js b/docs/assets/en-US_api_move-element.md.erz1dvw_.js new file mode 100644 index 0000000..de1aa18 --- /dev/null +++ b/docs/assets/en-US_api_move-element.md.erz1dvw_.js @@ -0,0 +1,19 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const y=JSON.parse('{"title":"moveElement","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/move-element.md","filePath":"en-US/api/move-element.md"}'),t={name:"en-US/api/move-element.md"},l=e(`

moveElement

Introduction

moveElement deletes the corresponding element in the picture according to the uuid of the element and triggers re-rendering.

Arguments

  • {string} uuid
  • {number[]} position Moves the element to the specified index position. For example, [1, 2] means moving the element to the third position of the second element (must be of type Group).

Returns

N/A

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+
+const uuid = idraw.getData().elements[0].uuid;
+
+idraw.moveElement(uuid, { position: [1, 2] });

Example

More Demo

`,11),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-moveElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,o,E,c,g){return i(),a("div",null,p)}const u=s(t,[["render",k]]);export{y as __pageData,u as default}; diff --git a/docs/assets/en-US_api_move-element.md.erz1dvw_.lean.js b/docs/assets/en-US_api_move-element.md.erz1dvw_.lean.js new file mode 100644 index 0000000..161b469 --- /dev/null +++ b/docs/assets/en-US_api_move-element.md.erz1dvw_.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const y=JSON.parse('{"title":"moveElement","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/move-element.md","filePath":"en-US/api/move-element.md"}'),t={name:"en-US/api/move-element.md"},l=e("",11),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-moveElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,o,E,c,g){return i(),a("div",null,p)}const u=s(t,[["render",k]]);export{y as __pageData,u as default}; diff --git a/docs/assets/en-US_api_resize.md.Us45idBF.js b/docs/assets/en-US_api_resize.md.Us45idBF.js new file mode 100644 index 0000000..4854fd2 --- /dev/null +++ b/docs/assets/en-US_api_resize.md.Us45idBF.js @@ -0,0 +1,20 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"resize","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/resize.md","filePath":"en-US/api/resize.md"}'),t={name:"en-US/api/resize.md"},l=e(`

resize

Introduction

resize The drawing view size can be modified again

Arguments

  • {object} options
    • {number} options.width
    • {number} options.height
    • {number} options.devicePixelRatio

Returns

N/A

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData({
+  element: [
+    /* ... */
+  ]
+});
+
+idraw.resize({
+  width: 300,
+  height: 200,
+  devicePixelRatio: 2
+});

Example

More Demo

`,11),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-resize&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function r(k,d,o,E,c,g){return i(),a("div",null,p)}const m=s(t,[["render",r]]);export{u as __pageData,m as default}; diff --git a/docs/assets/en-US_api_resize.md.Us45idBF.lean.js b/docs/assets/en-US_api_resize.md.Us45idBF.lean.js new file mode 100644 index 0000000..cfa012d --- /dev/null +++ b/docs/assets/en-US_api_resize.md.Us45idBF.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"resize","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/resize.md","filePath":"en-US/api/resize.md"}'),t={name:"en-US/api/resize.md"},l=e("",11),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-resize&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function r(k,d,o,E,c,g){return i(),a("div",null,p)}const m=s(t,[["render",r]]);export{u as __pageData,m as default}; diff --git a/docs/assets/en-US_api_select-element.md.M70Ah2tn.js b/docs/assets/en-US_api_select-element.md.M70Ah2tn.js new file mode 100644 index 0000000..d179697 --- /dev/null +++ b/docs/assets/en-US_api_select-element.md.M70Ah2tn.js @@ -0,0 +1,18 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"selectElement","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/select-element.md","filePath":"en-US/api/select-element.md"}'),t={name:"en-US/api/select-element.md"},l=e(`

selectElement

Introduction

selectElement It receives a uuid of Element to select Element on Drawing-Image and then change the Element' status on Canvas.

Arguments

  • {string} uuid Element's uuid

Returns

None

Usage

js
import { iDraw } from 'idraw';
+
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+const resultData = idraw.getData();
+
+idraw.selectElement(resultData.elements[0].uuid);

Example

More Demo >>

`,11),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-selectElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,E,o,c,g){return i(),a("div",null,p)}const m=s(t,[["render",k]]);export{u as __pageData,m as default}; diff --git a/docs/assets/en-US_api_select-element.md.M70Ah2tn.lean.js b/docs/assets/en-US_api_select-element.md.M70Ah2tn.lean.js new file mode 100644 index 0000000..ac7aa92 --- /dev/null +++ b/docs/assets/en-US_api_select-element.md.M70Ah2tn.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"selectElement","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/select-element.md","filePath":"en-US/api/select-element.md"}'),t={name:"en-US/api/select-element.md"},l=e("",11),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-selectElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,E,o,c,g){return i(),a("div",null,p)}const m=s(t,[["render",k]]);export{u as __pageData,m as default}; diff --git a/docs/assets/en-US_api_set-data.md.ZwngY3kQ.js b/docs/assets/en-US_api_set-data.md.ZwngY3kQ.js new file mode 100644 index 0000000..6af05b2 --- /dev/null +++ b/docs/assets/en-US_api_set-data.md.ZwngY3kQ.js @@ -0,0 +1,29 @@ +import{_ as s,o as i,c as a,a2 as n,m as t}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"setData","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/set-data.md","filePath":"en-US/api/set-data.md"}'),e={name:"en-US/api/set-data.md"},h=n(`

setData

Introduction

setData The function receives a Drawing-Data to set drawing content. After that, it will re-render image base on Drawing-Data.

Arguments

  • {object} data Drawing-Data

Returns

None

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+const data = {
+  elements: [
+    {
+      name: 'rect',
+      x: 160,
+      y: 120,
+      w: 200,
+      h: 100,
+      angle: 30,
+      type: 'rect',
+      detail: {
+        background: '#d5f5f9',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+idraw.setData(data);

Example

More Demo

`,11),l=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-setData&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,l];function k(r,E,d,o,g,c){return i(),a("div",null,p)}const u=s(e,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/en-US_api_set-data.md.ZwngY3kQ.lean.js b/docs/assets/en-US_api_set-data.md.ZwngY3kQ.lean.js new file mode 100644 index 0000000..f882655 --- /dev/null +++ b/docs/assets/en-US_api_set-data.md.ZwngY3kQ.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as n,m as t}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"setData","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/set-data.md","filePath":"en-US/api/set-data.md"}'),e={name:"en-US/api/set-data.md"},h=n("",11),l=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-setData&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,l];function k(r,E,d,o,g,c){return i(),a("div",null,p)}const u=s(e,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/en-US_api_set-mode.md.wBD5SPSr.js b/docs/assets/en-US_api_set-mode.md.wBD5SPSr.js new file mode 100644 index 0000000..18be57d --- /dev/null +++ b/docs/assets/en-US_api_set-mode.md.wBD5SPSr.js @@ -0,0 +1,10 @@ +import{_ as s,o as i,c as a,a2 as e,m as t}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"setMode","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/set-mode.md","filePath":"en-US/api/set-mode.md"}'),n={name:"en-US/api/set-mode.md"},l=e(`

setMode

Introduction

setMode Can switch view operation mode

Arguments

  • {IDrawType} mode View operating mode
    • 'select': Selection mode, also the default mode, is used to select and edit elements
    • 'drag': Drag mode, used to drag and move the overall canvas position
    • 'readOnly': Read-only mode, only displays the view content and cannot be edited
ts
type IDrawMode = 'select' | 'drag' | 'readOnly';

Returns

N/A

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setMode('readOnly');

Example

More Demo >>

`,12),h=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-setMode&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function d(r,k,o,c,g,E){return i(),a("div",null,p)}const m=s(n,[["render",d]]);export{u as __pageData,m as default}; diff --git a/docs/assets/en-US_api_set-mode.md.wBD5SPSr.lean.js b/docs/assets/en-US_api_set-mode.md.wBD5SPSr.lean.js new file mode 100644 index 0000000..189e5aa --- /dev/null +++ b/docs/assets/en-US_api_set-mode.md.wBD5SPSr.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as e,m as t}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"setMode","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/set-mode.md","filePath":"en-US/api/set-mode.md"}'),n={name:"en-US/api/set-mode.md"},l=e("",12),h=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-setMode&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function d(r,k,o,c,g,E){return i(),a("div",null,p)}const m=s(n,[["render",d]]);export{u as __pageData,m as default}; diff --git a/docs/assets/en-US_api_update-element.md.-iahCtBO.js b/docs/assets/en-US_api_update-element.md.-iahCtBO.js new file mode 100644 index 0000000..e88a289 --- /dev/null +++ b/docs/assets/en-US_api_update-element.md.-iahCtBO.js @@ -0,0 +1,22 @@ +import{_ as s,o as a,c as i,a2 as n,m as e}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"updateElement","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/update-element.md","filePath":"en-US/api/update-element.md"}'),t={name:"en-US/api/update-element.md"},l=n(`

updateElement

Introduction

updateElement updates an element in the drawing and triggers a re-rendering.

Arguments

  • {object} element

Returns

N/A

Usage

js
import { iDraw } from 'idraw';
+
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+const resultData = idraw.getData();
+
+const elem = resultData.elements[0];
+
+elem.detail.color = '#f0f0f0';
+
+idraw.updateData(elem);

Example

More Demo >>

`,11),h=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-updateElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,E,o,c,g){return a(),i("div",null,p)}const m=s(t,[["render",k]]);export{u as __pageData,m as default}; diff --git a/docs/assets/en-US_api_update-element.md.-iahCtBO.lean.js b/docs/assets/en-US_api_update-element.md.-iahCtBO.lean.js new file mode 100644 index 0000000..b84c2a9 --- /dev/null +++ b/docs/assets/en-US_api_update-element.md.-iahCtBO.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as i,a2 as n,m as e}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"updateElement","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/api/update-element.md","filePath":"en-US/api/update-element.md"}'),t={name:"en-US/api/update-element.md"},l=n("",11),h=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-updateElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,E,o,c,g){return a(),i("div",null,p)}const m=s(t,[["render",k]]);export{u as __pageData,m as default}; diff --git a/docs/assets/en-US_element_circle.md.9LkWREaD.js b/docs/assets/en-US_element_circle.md.9LkWREaD.js new file mode 100644 index 0000000..d784da6 --- /dev/null +++ b/docs/assets/en-US_element_circle.md.9LkWREaD.js @@ -0,0 +1,33 @@ +import{_ as s,o as i,c as a,a2 as e,m as t}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"Circle","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/circle.md","filePath":"en-US/element/circle.md"}'),n={name:"en-US/element/circle.md"},l=e(`

Circle

Circle

It is used to render circular or oval content. The specific type is as follows:

ts
type Circle = {
+  type: 'circle';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    background: string;
+    borderRadius?: string;
+    borderWidth?: number;
+    borderColor?: number;
+  };
+};

Circle.detail

The basic attribute details of the element can be viewed Element's Detail # .

Circle.detail Data-Type

The Data-Type of Circle.detail

ts
type CircleDetail = {
+  background?: string;
+  background?: string;
+  borderWidth?: number;
+  borderColor?: string;
+};

Circle.detail Properties

PropertyDescriptionTypeDefaultRequiredOthers
colorCircle Colorstring-trueeg. #000000
borderRadiusCircle radius of border cornernumber0false-
borderWidthBorder width of Circlenumber0false-
borderColorBorder color of Circlenumber0falseeg. #000000

Circle.detail Properties

js
const elementCircle = {
+  name: 'circle',
+  x: 160,
+  y: 100,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'circle',
+  detail: {
+    background: '#d5f5f9',
+    borderRadius: 10,
+    borderWidth: 4,
+    borderColor: '#3f51b5'
+  }
+};

Demo Preview

More Demo >>

`,15),h=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-circle&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,c,E,o,g){return i(),a("div",null,p)}const C=s(n,[["render",k]]);export{F as __pageData,C as default}; diff --git a/docs/assets/en-US_element_circle.md.9LkWREaD.lean.js b/docs/assets/en-US_element_circle.md.9LkWREaD.lean.js new file mode 100644 index 0000000..6ad3beb --- /dev/null +++ b/docs/assets/en-US_element_circle.md.9LkWREaD.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as e,m as t}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"Circle","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/circle.md","filePath":"en-US/element/circle.md"}'),n={name:"en-US/element/circle.md"},l=e("",15),h=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-circle&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,c,E,o,g){return i(),a("div",null,p)}const C=s(n,[["render",k]]);export{F as __pageData,C as default}; diff --git a/docs/assets/en-US_element_group.md.yL0oQCBe.js b/docs/assets/en-US_element_group.md.yL0oQCBe.js new file mode 100644 index 0000000..223854f --- /dev/null +++ b/docs/assets/en-US_element_group.md.yL0oQCBe.js @@ -0,0 +1,32 @@ +import{_ as s,o as i,c as a,a2 as t,m as e}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"Group","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/group.md","filePath":"en-US/element/group.md"}'),n={name:"en-US/element/group.md"},h=t(`

Group

Group

It is used to render group or oval content. The specific type is as follows:

ts
type Group = {
+  type: 'group';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    children: Element;
+    background: string;
+    borderRadius?: string;
+    borderWidth?: number;
+    borderColor?: number;
+  };
+};

Group.detail

The basic attribute details of the element can be viewed Element's Detail # .

Group.detail Data-Type

The Data-Type of Group.detail

ts
type GroupDetail = {
+  children: Array<Element>;
+  background?: string;
+  background?: string;
+  borderWidth?: number;
+  borderColor?: string;
+};

Group.detail Properties

PropertyDescriptionTypeDefaultRequiredOthers
childrenChildren element listArray<Element>-trueeg. #000000
backgroundGroup background colorstring-falseeg. #000000
borderRadiusGroup radius of border cornernumber0false-
borderWidthBorder width of Groupnumber0false-
borderColorBorder color of Groupnumber0falseeg. #000000

Complete Data Example

js
const elementGroup = {
+  name: 'group',
+  x: 160,
+  y: 120,
+  w: 200,
+  h: 100,
+  angle: 30,
+  type: 'group',
+  detail: {
+    children: []
+  }
+};

Demo Preview

More Demo >>

`,15),l=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-group&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,l];function k(d,r,o,E,g,c){return i(),a("div",null,p)}const u=s(n,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/en-US_element_group.md.yL0oQCBe.lean.js b/docs/assets/en-US_element_group.md.yL0oQCBe.lean.js new file mode 100644 index 0000000..1b9bfd4 --- /dev/null +++ b/docs/assets/en-US_element_group.md.yL0oQCBe.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as t,m as e}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"Group","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/group.md","filePath":"en-US/element/group.md"}'),n={name:"en-US/element/group.md"},h=t("",15),l=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-group&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,l];function k(d,r,o,E,g,c){return i(),a("div",null,p)}const u=s(n,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/en-US_element_html.md.tsHVUPVh.js b/docs/assets/en-US_element_html.md.tsHVUPVh.js new file mode 100644 index 0000000..6b78747 --- /dev/null +++ b/docs/assets/en-US_element_html.md.tsHVUPVh.js @@ -0,0 +1,69 @@ +import{_ as s,o as i,c as a,a2 as n,m as t}from"./chunks/framework.PNNbM9mo.js";const y=JSON.parse('{"title":"HTML","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/html.md","filePath":"en-US/element/html.md"}'),l={name:"en-US/element/html.md"},e=n(`

HTML

HTML

It is used to render HTML code snippet. The specific type is as follows:

ts
type HTML = {
+  type: 'html';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    html: string;
+  };
+};

HTML.detail

The basic attribute details of the element can be viewed Element's Detail #.

HTML.detail Data-Type

The Data-Type of HTML.detail

ts
type HTMLDetail = {
+  html: string;
+};

HTML.detail Properties

PropertyDescriptionTypeDefaultRequiredOthers
htmlHTML code snippetstring-true-

Complete Data Example

js
const elementHTML = {
+  name: 'html',
+  x: 200,
+  y: 120,
+  w: 150,
+  h: 100,
+  type: 'html',
+  angle: 0,
+  detail: {
+    html: \`
+      <style>
+      .btn-box {
+        margin: 10px 0;
+      }
+      .btn {
+        line-height: 1.5715;
+        position: relative;
+        display: inline-block;
+        font-weight: 400;
+        white-space: nowrap;
+        text-align: center;
+        background-image: none;
+        border: 1px solid transparent;
+        box-shadow: 0 2px #00000004;
+        cursor: pointer;
+        user-select: none;
+        height: 32px;
+        padding: 4px 15px;
+        font-size: 14px;
+        border-radius: 2px;
+        color: #000000d9;
+        background: #fff;
+        border-color: #d9d9d9;
+      }
+      .btn-primary {
+        color: #fff;
+        background: #1890ff;
+        border-color: #1890ff;
+        text-shadow: 0 -1px 0 rgb(0 0 0 / 12%);
+        box-shadow: 0 2px #0000000b;
+      }
+      </style>
+      <div>
+        <div class="btn-box">
+          <button class="btn">
+            <span>Button</span>
+          </button>
+        </div>
+        <div class="btn-box">
+          <button class="btn btn-primary">
+            <span>Button Primary</span>
+          </button> 
+        </div>
+      </div>
+    \`
+  }
+};

Demo Preview

More Demo >>

`,15),p=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-html&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),h=[e,p];function k(r,d,F,E,g,o){return i(),a("div",null,h)}const m=s(l,[["render",k]]);export{y as __pageData,m as default}; diff --git a/docs/assets/en-US_element_html.md.tsHVUPVh.lean.js b/docs/assets/en-US_element_html.md.tsHVUPVh.lean.js new file mode 100644 index 0000000..f80c4a3 --- /dev/null +++ b/docs/assets/en-US_element_html.md.tsHVUPVh.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as n,m as t}from"./chunks/framework.PNNbM9mo.js";const y=JSON.parse('{"title":"HTML","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/html.md","filePath":"en-US/element/html.md"}'),l={name:"en-US/element/html.md"},e=n("",15),p=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-html&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),h=[e,p];function k(r,d,F,E,g,o){return i(),a("div",null,h)}const m=s(l,[["render",k]]);export{y as __pageData,m as default}; diff --git a/docs/assets/en-US_element_image.md.EjC1u2Xj.js b/docs/assets/en-US_element_image.md.EjC1u2Xj.js new file mode 100644 index 0000000..5fb3d39 --- /dev/null +++ b/docs/assets/en-US_element_image.md.EjC1u2Xj.js @@ -0,0 +1,24 @@ +import{_ as s,o as i,c as a,a2 as e,m as t}from"./chunks/framework.PNNbM9mo.js";const m=JSON.parse('{"title":"Image","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/image.md","filePath":"en-US/element/image.md"}'),n={name:"en-US/element/image.md"},h=e(`

Image

Image

It is used to render image content. The specific type is as follows:

ts
type Image = {
+  type: 'image';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    src: string;
+  };
+};

Image.detail

The basic attribute details of the element can be viewed Element's Detail # .

Image.detail Data-Type

The Data-Type of Image.detail

ts
type ImageDetail = {
+  src: string;
+};

Image.detail Properties

PropertyDescriptionTypeDefaultRequiredOthers
srcThe image URL or DataURLstring-true-

Complete Data Example

js
const elementImage = {
+  name: 'image',
+  x: 160,
+  y: 100,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'image',
+  detail: {
+    src: './image/github.png'
+  }
+};

Demo Preview

More Demo >>

`,15),l=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-image&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,l];function k(r,d,E,g,o,c){return i(),a("div",null,p)}const F=s(n,[["render",k]]);export{m as __pageData,F as default}; diff --git a/docs/assets/en-US_element_image.md.EjC1u2Xj.lean.js b/docs/assets/en-US_element_image.md.EjC1u2Xj.lean.js new file mode 100644 index 0000000..fc92d81 --- /dev/null +++ b/docs/assets/en-US_element_image.md.EjC1u2Xj.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as e,m as t}from"./chunks/framework.PNNbM9mo.js";const m=JSON.parse('{"title":"Image","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/image.md","filePath":"en-US/element/image.md"}'),n={name:"en-US/element/image.md"},h=e("",15),l=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-image&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,l];function k(r,d,E,g,o,c){return i(),a("div",null,p)}const F=s(n,[["render",k]]);export{m as __pageData,F as default}; diff --git a/docs/assets/en-US_element_info.md.xj25PwHX.js b/docs/assets/en-US_element_info.md.xj25PwHX.js new file mode 100644 index 0000000..83e0568 --- /dev/null +++ b/docs/assets/en-US_element_info.md.xj25PwHX.js @@ -0,0 +1,51 @@ +import{_ as s,o as i,c as a,a2 as t,m as n}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"Element Information","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/info.md","filePath":"en-US/element/info.md"}'),e={name:"en-US/element/info.md"},l=t(`

Element Information

What is iDraw.js's Element

The content of drawing is based on "Element" in iDraw.js. Further more, the process of drawing is basically to realize the function of drawing around the layout, style, content and other attributes of controlling elements.

There eight types of elements are currently supported in iDraw.js :

  1. Text
  2. Rect
  3. Circle
  4. Image
  5. SVG
  6. HTML
  7. Path
  8. Group

Element's Detail

Element Basic Content

tsx
type Element = {
+  type: 'text' | 'rect' | 'circle' | 'image' | 'svg' | 'html' | 'path' | 'group';
+  uuid: string;
+  name?: string;
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle?: number;
+  detail: any; // Different element has different description
+  operations?: {
+    lock?: boolean;
+    invisible?: boolean;
+    limitRatio?: boolean;
+  };
+  extension?: { [key: string]: any } | any;
+};

Element Basic Properties

PropertyDescriptionTypeDefaultRequiredOthers
typeElement typetext| rect| circle| image| svg | html-true-
uuidElement unique IDstring-falseThe UUID is automatically added internally in iDraw.js
nameElement namestring-false-
xX-axis offsetnumber-true-
yY-axis offsetnumber-true-
wElement widthnumber-true-
hElement heightnumber-true-
angleElement rotation anglenumber0false[0, 360]
lockSet the lock-staus of elementbooleanfalsefalseThe view operation cannot be controlled after the element is locked
detailDetail of different elementsobject (Please check the description of each element for details)-true-
operation.lockSet the lock-staus of elementbooleanfalsefalseThe view operation cannot be controlled after the element is locked
operation.invisible-booleanfalsefalse-
operation.limitRatioLimit element width and height ratioboolean-falseWhen the element is scaled, it is scaled according to its width and height ratio

Usage of Elements

js
import { iDraw } from 'idraw';
+
+import { iDraw } from 'idraw';
+const data = {
+  elements: [
+    {
+      type: 'text',
+      name: 'rect-001',
+      x: 50,
+      y: 50,
+      w: 200,
+      h: 200,
+      angle: 0,
+      detail: {
+        text: 'Hello World',
+        color: '#3f51b5',
+        fontSize: 60,
+        textAlign: 'center',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const idraw = new iDraw(app, {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+});
+
+// Set drawing-data for rendering view
+idraw.setData(data);

Demo Preview

More Demo >>

`,14),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-rect&header=false&sider=false&default-editor-split=50",frameborder:"no",border:"0"},null,-1),k=[l,h];function p(d,r,E,o,c,g){return i(),a("div",null,k)}const m=s(e,[["render",p]]);export{F as __pageData,m as default}; diff --git a/docs/assets/en-US_element_info.md.xj25PwHX.lean.js b/docs/assets/en-US_element_info.md.xj25PwHX.lean.js new file mode 100644 index 0000000..22f87b5 --- /dev/null +++ b/docs/assets/en-US_element_info.md.xj25PwHX.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as t,m as n}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"Element Information","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/info.md","filePath":"en-US/element/info.md"}'),e={name:"en-US/element/info.md"},l=t("",14),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-rect&header=false&sider=false&default-editor-split=50",frameborder:"no",border:"0"},null,-1),k=[l,h];function p(d,r,E,o,c,g){return i(),a("div",null,k)}const m=s(e,[["render",p]]);export{F as __pageData,m as default}; diff --git a/docs/assets/en-US_element_path.md.Hel0-4hv.js b/docs/assets/en-US_element_path.md.Hel0-4hv.js new file mode 100644 index 0000000..f7f7be9 --- /dev/null +++ b/docs/assets/en-US_element_path.md.Hel0-4hv.js @@ -0,0 +1,60 @@ +import{_ as s,o as i,c as a,a2 as h,m as t}from"./chunks/framework.PNNbM9mo.js";const c=JSON.parse('{"title":"Path","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/path.md","filePath":"en-US/element/path.md"}'),n={name:"en-US/element/path.md"},k=h(`

Path

Path

It is used to render image content. The specific type is as follows:

ts
type Path = {
+  type: 'path';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    commands: Array<{
+      type: 'M' | 'm' | 'L' | 'l' | 'H' | 'h' | 'V' | 'v' | 'C' | 'c' | 'S' | 's' | 'Q' | 'q' | 'T' | 't' | 'A' | 'a' | 'Z' | 'z';
+      params: number[];
+    }>;
+    originX: number;
+    originY: number;
+    originW: number;
+    originH: number;
+    fill?: string;
+    stroke?: string;
+    strokeWidth?: number;
+    strokeLineCap?: 'butt' | 'round' | 'square';
+  };
+};

Path.detail Properties

The basic attribute details of the element can be viewed Element's Detail # .

Path.detail Data-Type

ts
type PathDetail = {
+  commands: Array<{
+    type: 'M' | 'm' | 'L' | 'l' | 'H' | 'h' | 'V' | 'v' | 'C' | 'c' | 'S' | 's' | 'Q' | 'q' | 'T' | 't' | 'A' | 'a' | 'Z' | 'z';
+    params: number[];
+  }>;
+  originX: number;
+  originY: number;
+  originW: number;
+  originH: number;
+  fill?: string;
+  stroke?: string;
+  strokeWidth?: number;
+  strokeLineCap?: 'butt' | 'round' | 'square';
+};

Path.detail Properties

PropertyDescriptionTypeDefaultRequiredOthers
fillfill colorstring-trueeg. #000000
strokepath colorstring-trueeg. #000000
strokeWidthpath widthnumber0false-
strokeLineCapPath turning type'butt' | 'round' | 'square'-true-
originXPath original X positionnumber0false-
originYPath original Y positionnumber0false-
originWPath original widthnumber0false-
originHPath original heightnumber0false-

Complete Data Example

js
const elementPath = {
+  uuid: '41d437b8-afbd-2d3d-14bc-912e26d3491f',
+  x: 100,
+  y: 100,
+  w: 80,
+  h: 80,
+  angle: 0,
+  type: 'path',
+  detail: {
+    commands: [
+      { type: 'M', params: [10, 30] },
+      { type: 'A', params: [20, 20, 0, 0, 1, 50, 30] },
+      { type: 'A', params: [20, 20, 0, 0, 1, 90, 30] },
+      { type: 'Q', params: [90, 60, 50, 90] },
+      { type: 'Q', params: [10, 60, 10, 30] },
+      { type: 'z', params: [] }
+    ],
+    fill: '#FF00006F',
+    stroke: '#000000',
+    strokeWidth: 1,
+    originX: 10,
+    originY: 10,
+    originH: 80,
+    originW: 80
+  }
+};

Demo Preview

More Demo >>

`,14),l=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-path&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[k,l];function e(d,r,E,F,g,y){return i(),a("div",null,p)}const C=s(n,[["render",e]]);export{c as __pageData,C as default}; diff --git a/docs/assets/en-US_element_path.md.Hel0-4hv.lean.js b/docs/assets/en-US_element_path.md.Hel0-4hv.lean.js new file mode 100644 index 0000000..072987d --- /dev/null +++ b/docs/assets/en-US_element_path.md.Hel0-4hv.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as h,m as t}from"./chunks/framework.PNNbM9mo.js";const c=JSON.parse('{"title":"Path","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/path.md","filePath":"en-US/element/path.md"}'),n={name:"en-US/element/path.md"},k=h("",14),l=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-path&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[k,l];function e(d,r,E,F,g,y){return i(),a("div",null,p)}const C=s(n,[["render",e]]);export{c as __pageData,C as default}; diff --git a/docs/assets/en-US_element_rect.md.jl7sqBwM.js b/docs/assets/en-US_element_rect.md.jl7sqBwM.js new file mode 100644 index 0000000..f8e61ae --- /dev/null +++ b/docs/assets/en-US_element_rect.md.jl7sqBwM.js @@ -0,0 +1,33 @@ +import{_ as s,o as i,c as a,a2 as t,m as e}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"矩形元素","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/rect.md","filePath":"en-US/element/rect.md"}'),n={name:"en-US/element/rect.md"},l=t(`

矩形元素

Rectangle

It is used to render rectangle content. The specific type is as follows:

ts
type Rect = {
+  type: 'rect';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    background: string;
+    borderRadius?: string;
+    borderWidth?: number;
+    borderColor?: number;
+  };
+};

Rect.detail

The basic attribute details of the element can be viewed Element's Detail # .

Rect.detail Data-Type

The Data-Type of Rect.detail

ts
type RectDetail = {
+  background?: string;
+  background?: string;
+  borderWidth?: number;
+  borderColor?: string;
+};

Rect.detail Properties

PropertyDescriptionTypeDefaultRequiredOthers
colorRectangle colorstring-trueeg. #000000
backgroundRectangle background colorstring-trueeg. #000000
borderRadiusRectangle radius of border cornernumber0false-
borderWidthBorder width of Rectanglenumber0false-
borderColorBorder color of Rectanglestring-falseeg. #000000

Complete Data Example

js
const elementRect = {
+  name: 'rect',
+  x: 160,
+  y: 120,
+  w: 200,
+  h: 100,
+  angle: 30,
+  type: 'rect',
+  detail: {
+    background: '#d5f5f9',
+    borderRadius: 10,
+    borderWidth: 2,
+    borderColor: '#3f51b5'
+  }
+};

Demo Preview

More Demo >>

`,15),h=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-rect&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(d,r,E,o,c,g){return i(),a("div",null,p)}const b=s(n,[["render",k]]);export{F as __pageData,b as default}; diff --git a/docs/assets/en-US_element_rect.md.jl7sqBwM.lean.js b/docs/assets/en-US_element_rect.md.jl7sqBwM.lean.js new file mode 100644 index 0000000..45d992a --- /dev/null +++ b/docs/assets/en-US_element_rect.md.jl7sqBwM.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as t,m as e}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"矩形元素","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/rect.md","filePath":"en-US/element/rect.md"}'),n={name:"en-US/element/rect.md"},l=t("",15),h=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-rect&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(d,r,E,o,c,g){return i(),a("div",null,p)}const b=s(n,[["render",k]]);export{F as __pageData,b as default}; diff --git a/docs/assets/en-US_element_svg.md.yAlcGznY.js b/docs/assets/en-US_element_svg.md.yAlcGznY.js new file mode 100644 index 0000000..2d417a9 --- /dev/null +++ b/docs/assets/en-US_element_svg.md.yAlcGznY.js @@ -0,0 +1,24 @@ +import{_ as s,o as i,c as a,a2 as t,m as e}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"SVG","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/svg.md","filePath":"en-US/element/svg.md"}'),n={name:"en-US/element/svg.md"},h=t(`

SVG

SVG

It is used to render SVG code snippet. The specific type is as follows:

ts
type SVG = {
+  type: 'svg';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    svg: string;
+  };
+};

SVG.detail

The basic attribute details of the element can be viewed Element's Detail #.

SVG.detail Data-Type

The Data-Type of SVG.detail

ts
type SVGDetail = {
+  svg: string;
+};

SVG.detail 数据属性内容

PropertyDescriptionTypeDefaultRequiredOthers
svgHTML code snippetstring-true-

完整数据示例

js
const elementSVG = {
+  name: 'svg',
+  x: 160,
+  y: 100,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'svg',
+  detail: {
+    svg: \`<svg  viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"  width="400" height="400"><path d="M512 1013.76c-277.11488 0-501.76-224.64512-501.76-501.76S234.88512 10.24 512 10.24s501.76 224.64512 501.76 501.76-224.64512 501.76-501.76 501.76z m0-51.02592c248.9344 0 450.73408-201.79968 450.73408-450.73408 0-248.9344-201.79968-450.73408-450.73408-450.73408-248.9344 0-450.73408 201.79968-450.73408 450.73408 0 248.9344 201.79968 450.73408 450.73408 450.73408zM456.9856 637.9008l295.45984-339.94752a26.4192 26.4192 0 0 1 37.59616-2.31936 28.32896 28.32896 0 0 1 3.10784 38.8608l-307.01568 380.38016a30.72 30.72 0 0 1-42.90048 4.84864L235.44832 556.2368a32.128 32.128 0 0 1-5.74976-44.6464 32.1536 32.1536 0 0 1 44.544-6.58944l182.74304 132.90496z" fill="#1890ff"></path></svg>\`
+  }
+};

Demo Preview

More Demo >>

`,15),l=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-svg&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,l];function k(d,r,E,g,o,c){return i(),a("div",null,p)}const u=s(n,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/en-US_element_svg.md.yAlcGznY.lean.js b/docs/assets/en-US_element_svg.md.yAlcGznY.lean.js new file mode 100644 index 0000000..0171a2f --- /dev/null +++ b/docs/assets/en-US_element_svg.md.yAlcGznY.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as t,m as e}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"SVG","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/svg.md","filePath":"en-US/element/svg.md"}'),n={name:"en-US/element/svg.md"},h=t("",15),l=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-svg&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,l];function k(d,r,E,g,o,c){return i(),a("div",null,p)}const u=s(n,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/en-US_element_text.md.9k45uKEt.js b/docs/assets/en-US_element_text.md.9k45uKEt.js new file mode 100644 index 0000000..b0af1dd --- /dev/null +++ b/docs/assets/en-US_element_text.md.9k45uKEt.js @@ -0,0 +1,41 @@ +import{_ as s,o as i,c as a,a2 as t,m as n}from"./chunks/framework.PNNbM9mo.js";const c=JSON.parse('{"title":"Text","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/text.md","filePath":"en-US/element/text.md"}'),e={name:"en-US/element/text.md"},h=t(`

Text

Text

It is used to render text content. The specific type is as follows:

ts
type Text = {
+  type: 'text';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    text: string;
+    color?: string;
+    fontSize?: string;
+    fontFamily?: string;
+    textAlign?: 'left' | 'center' | 'right';
+};

Text.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

Text.detail 数据格式

Text元素的detail属性

ts
type TextDetail = {
+  text: string;
+  color?: string;
+  fontSize?: number;
+  lineHeight?: number;
+  fontWeight?: 'bold' | string | number;
+  fontFamily?: string;
+  textAlign?: 'center' | 'left' | 'right';
+  verticalAlign?: 'middle' | 'top' | 'bottom';
+};

Text.detail Properties

PropertyDescriptionTypeDefaultRequiredOthers
textText Contentstring-true-
colorFont color of Textstring-trueeg. #000000
fontSizeFont size of Textnumber12false-
lineHeightLine height of Textnumber-false-
fontWeightFont boldnumber-false-
fontFamilyFont family of Textstring-false-
textAlignText align'left' | 'center' | 'right''left'false-
verticalAlignVertical Align'top' | 'middle' | 'bottom''top'false-

Complete Data Example

js
const elementText = {
+  name: 'text',
+  x: 160,
+  y: 80,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'text',
+  detail: {
+    text: 'Hello World',
+    color: '#3f51b5',
+    fontSize: 60,
+    textAlign: 'center',
+    background: '#3f51b51f',
+    borderRadius: 10,
+    borderWidth: 2,
+    borderColor: '#3f51b5'
+  }
+};

Demo Preview

More Demo

`,15),l=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-text&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),k=[h,l];function p(d,r,E,g,o,F){return i(),a("div",null,k)}const C=s(e,[["render",p]]);export{c as __pageData,C as default}; diff --git a/docs/assets/en-US_element_text.md.9k45uKEt.lean.js b/docs/assets/en-US_element_text.md.9k45uKEt.lean.js new file mode 100644 index 0000000..b9d8332 --- /dev/null +++ b/docs/assets/en-US_element_text.md.9k45uKEt.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as t,m as n}from"./chunks/framework.PNNbM9mo.js";const c=JSON.parse('{"title":"Text","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/element/text.md","filePath":"en-US/element/text.md"}'),e={name:"en-US/element/text.md"},h=t("",15),l=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-text&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),k=[h,l];function p(d,r,E,g,o,F){return i(),a("div",null,k)}const C=s(e,[["render",p]]);export{c as __pageData,C as default}; diff --git a/docs/assets/en-US_guide_class-idraw.md.NV45iEKs.js b/docs/assets/en-US_guide_class-idraw.md.NV45iEKs.js new file mode 100644 index 0000000..4a015f0 --- /dev/null +++ b/docs/assets/en-US_guide_class-idraw.md.NV45iEKs.js @@ -0,0 +1,13 @@ +import{_ as s,o as i,c as t,a2 as a,m as e}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"Class iDraw","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/class-idraw.md","filePath":"en-US/guide/class-idraw.md"}'),n={name:"en-US/guide/class-idraw.md"},h=a(`

Class iDraw

Arguments

js
import { iDraw } from 'idraw';
+const dom = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+
+const idraw = new iDraw(dom, options);
ArugmentDescriptionTypeDefaultRequiredOthers
domCanvas mounted DOMHTMLDivElement-true-
optionsImage rendering options[Object]-true-

Options

ts
type Options = {
+  width: number;
+  height: number;
+  devicePixelRatio: number;
+};

Options Properties

PropertyDescriptionTypeDefaultRequiredOthers
widthDrawing board's widthnumber-true-
heightDrawing board's heightnumber-true-
devicePixelRatioDevice pixel scalenumber1false-

Options Preivew

More Demo >>

`,10),d=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=basic-options&header=false&sider=false&default-editor-split=50",width:"1000",height:"440",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),l=[h,d];function p(r,k,o,c,g,E){return i(),t("div",null,l)}const F=s(n,[["render",p]]);export{u as __pageData,F as default}; diff --git a/docs/assets/en-US_guide_class-idraw.md.NV45iEKs.lean.js b/docs/assets/en-US_guide_class-idraw.md.NV45iEKs.lean.js new file mode 100644 index 0000000..6d1df07 --- /dev/null +++ b/docs/assets/en-US_guide_class-idraw.md.NV45iEKs.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as t,a2 as a,m as e}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"Class iDraw","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/class-idraw.md","filePath":"en-US/guide/class-idraw.md"}'),n={name:"en-US/guide/class-idraw.md"},h=a("",10),d=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=basic-options&header=false&sider=false&default-editor-split=50",width:"1000",height:"440",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),l=[h,d];function p(r,k,o,c,g,E){return i(),t("div",null,l)}const F=s(n,[["render",p]]);export{u as __pageData,F as default}; diff --git a/docs/assets/en-US_guide_installation.md.LCva9Prm.js b/docs/assets/en-US_guide_installation.md.LCva9Prm.js new file mode 100644 index 0000000..ed9377f --- /dev/null +++ b/docs/assets/en-US_guide_installation.md.LCva9Prm.js @@ -0,0 +1,12 @@ +import{_ as s,o as i,c as a,a2 as t}from"./chunks/framework.PNNbM9mo.js";const g=JSON.parse('{"title":"Installation","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/installation.md","filePath":"en-US/guide/installation.md"}'),n={name:"en-US/guide/installation.md"},l=t(`

Installation

Lastest Version

iDraw.js

Installation

There are three ways of adding iDraw.js to a project:

  1. Install it using NPM.
  2. Import it as a CDN Package on the page.
  3. Download the JavaScript file and host them yourself.

NPM

NPM is the recommended installation method when building large scale with iDraw.js. It pairs nicely with module bundlers such as Webpack, Rollup or Vite.

sh
npm install idraw

CDN

For prototyping or learning purposes, you can use the latest version with:

html
<script src="https://unpkg.com/idraw"></script>
html
<!-- use global value -->
+<script>
+  (function () {
+    const { iDraw } = window.iDraw;
+    const app = document.querySelector('#app');
+    const idraw = new iDraw(app, {
+      width: 600,
+      height: 400,
+      devicePixelRatio: 2
+    });
+  })();
+</script>

Download and Self Host

If you want to avoid using build tools but can't use CDN in production then you can download the relevant .js file and host it using your own web server. You can include it using a <script> tag, just like with the CDN approach.

The files can be browsed and download from a CDN such as unpkg .

`,16),e=[l];function h(p,k,r,o,d,c){return i(),a("div",null,e)}const u=s(n,[["render",h]]);export{g as __pageData,u as default}; diff --git a/docs/assets/en-US_guide_installation.md.LCva9Prm.lean.js b/docs/assets/en-US_guide_installation.md.LCva9Prm.lean.js new file mode 100644 index 0000000..7680788 --- /dev/null +++ b/docs/assets/en-US_guide_installation.md.LCva9Prm.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as t}from"./chunks/framework.PNNbM9mo.js";const g=JSON.parse('{"title":"Installation","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/installation.md","filePath":"en-US/guide/installation.md"}'),n={name:"en-US/guide/installation.md"},l=t("",16),e=[l];function h(p,k,r,o,d,c){return i(),a("div",null,e)}const u=s(n,[["render",h]]);export{g as __pageData,u as default}; diff --git a/docs/assets/en-US_guide_introduction.md.oAtGMDCn.js b/docs/assets/en-US_guide_introduction.md.oAtGMDCn.js new file mode 100644 index 0000000..23337cf --- /dev/null +++ b/docs/assets/en-US_guide_introduction.md.oAtGMDCn.js @@ -0,0 +1,30 @@ +import{_ as s,o as i,c as a,a2 as n,m as t}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/introduction.md","filePath":"en-US/guide/introduction.md"}'),e={name:"en-US/guide/introduction.md"},h=n(`

Introduction

What is iDraw.js

iDraw.js is a JavaScript framework for drawing on web. It is based on the Canvas API in the browser.

It can be data-driven to render Image on Canvas in the browser. Furthermore, it can also visually handle the position, shape and layout of Drawing-Element.

iDraw.js is open source based on MIT License and it's code is stored in GitHub and NPM So that you can use iDraw.js for free in your own projects.

Getting started

sh
npm install idraw
js
import { iDraw } from 'idraw';
+const data = {
+  elements: [
+    {
+      name: 'rect-001',
+      x: 160,
+      y: 80,
+      w: 200,
+      h: 200,
+      type: 'text',
+      detail: {
+        text: 'Hello World',
+        color: '#3f51b5',
+        fontSize: 60,
+        textAlign: 'center',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const idraw = new iDraw(app, {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+});
+idraw.setData(data);
`,8),l=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-text&header=false&sider=false&default-editor-split=50",width:"1000",height:"450",frameborder:"no",border:"0",style:{border:"1px solid #cecece"}},null,-1),p=[h,l];function k(r,d,E,o,c,g){return i(),a("div",null,p)}const C=s(e,[["render",k]]);export{F as __pageData,C as default}; diff --git a/docs/assets/en-US_guide_introduction.md.oAtGMDCn.lean.js b/docs/assets/en-US_guide_introduction.md.oAtGMDCn.lean.js new file mode 100644 index 0000000..7496031 --- /dev/null +++ b/docs/assets/en-US_guide_introduction.md.oAtGMDCn.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as n,m as t}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/introduction.md","filePath":"en-US/guide/introduction.md"}'),e={name:"en-US/guide/introduction.md"},h=n("",8),l=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-text&header=false&sider=false&default-editor-split=50",width:"1000",height:"450",frameborder:"no",border:"0",style:{border:"1px solid #cecece"}},null,-1),p=[h,l];function k(r,d,E,o,c,g){return i(),a("div",null,p)}const C=s(e,[["render",k]]);export{F as __pageData,C as default}; diff --git a/docs/assets/en-US_guide_quickstart.md.j-SOaCU1.js b/docs/assets/en-US_guide_quickstart.md.j-SOaCU1.js new file mode 100644 index 0000000..37d3367 --- /dev/null +++ b/docs/assets/en-US_guide_quickstart.md.j-SOaCU1.js @@ -0,0 +1,30 @@ +import{_ as a,o as n,c as t,m as s,a as i,a2 as l}from"./chunks/framework.PNNbM9mo.js";const _=JSON.parse('{"title":"Quick Start","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/quickstart.md","filePath":"en-US/guide/quickstart.md"}'),h={name:"en-US/guide/quickstart.md"},e=s("h1",{id:"quick-start",tabindex:"-1"},[i("Quick Start "),s("a",{class:"header-anchor",href:"#quick-start","aria-label":'Permalink to "Quick Start"'},"​")],-1),p=s("h2",{id:"the-first-example",tabindex:"-1"},[i("The First Example "),s("a",{class:"header-anchor",href:"#the-first-example","aria-label":'Permalink to "The First Example"'},"​")],-1),k=s("p",null,[i("It is a simple example of "),s("code",null,"iDraw.js"),i(" that drawing a rotating rectangle.")],-1),r=s("div",null,[s("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-rect&header=false&sider=false&default-editor-split=50",width:"800",height:"520",frameborder:"no",border:"0",style:{border:"1px solid #cecece"}})],-1),E=l(`

Install NPM Module

sh
npm install idraw

Mounted DOM

html
<div id="app"></div>

Use iDraw.js

js
import { iDraw } from 'idraw';
+const data = {
+  elements: [
+    {
+      name: 'rect-001',
+      x: 160,
+      y: 120,
+      w: 200,
+      h: 100,
+      angle: 30,
+      type: 'rect',
+      detail: {
+        background: '#d5f5f9',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const idraw = new iDraw(app, {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+});
+
+// Setting data
+idraw.setData(data);

Now, we can start the tutorials for using iDraw.js. O(∩_∩)O~

`,7),d=[e,p,k,r,E];function c(g,o,y,F,u,C){return n(),t("div",null,d)}const b=a(h,[["render",c]]);export{_ as __pageData,b as default}; diff --git a/docs/assets/en-US_guide_quickstart.md.j-SOaCU1.lean.js b/docs/assets/en-US_guide_quickstart.md.j-SOaCU1.lean.js new file mode 100644 index 0000000..a2eda36 --- /dev/null +++ b/docs/assets/en-US_guide_quickstart.md.j-SOaCU1.lean.js @@ -0,0 +1 @@ +import{_ as a,o as n,c as t,m as s,a as i,a2 as l}from"./chunks/framework.PNNbM9mo.js";const _=JSON.parse('{"title":"Quick Start","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/guide/quickstart.md","filePath":"en-US/guide/quickstart.md"}'),h={name:"en-US/guide/quickstart.md"},e=s("h1",{id:"quick-start",tabindex:"-1"},[i("Quick Start "),s("a",{class:"header-anchor",href:"#quick-start","aria-label":'Permalink to "Quick Start"'},"​")],-1),p=s("h2",{id:"the-first-example",tabindex:"-1"},[i("The First Example "),s("a",{class:"header-anchor",href:"#the-first-example","aria-label":'Permalink to "The First Example"'},"​")],-1),k=s("p",null,[i("It is a simple example of "),s("code",null,"iDraw.js"),i(" that drawing a rotating rectangle.")],-1),r=s("div",null,[s("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-rect&header=false&sider=false&default-editor-split=50",width:"800",height:"520",frameborder:"no",border:"0",style:{border:"1px solid #cecece"}})],-1),E=l("",7),d=[e,p,k,r,E];function c(g,o,y,F,u,C){return n(),t("div",null,d)}const b=a(h,[["render",c]]);export{_ as __pageData,b as default}; diff --git a/docs/assets/en-US_index.md.WN7UD5Qv.js b/docs/assets/en-US_index.md.WN7UD5Qv.js new file mode 100644 index 0000000..249eb95 --- /dev/null +++ b/docs/assets/en-US_index.md.WN7UD5Qv.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./chunks/framework.PNNbM9mo.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"iDraw.js","text":"Drawing easier on the web.","tagline":"A simple JavaScript framework for Drawing on the web.","actions":[{"theme":"brand","text":"Quick Started","link":"/en-US/guide/quickstart"},{"theme":"alt","text":"Playground","link":"https://idrawjs.com/playground/"},{"theme":"brand","text":"iDraw Studio","link":"https://idrawjs.com/studio/"}],"image":"/assets/idraw.png"},"features":[{"title":"High web compatibility","details":"All based on Canvas 2D API drawing"},{"title":"Extremely simple way to use","details":"There are no complicated operations, only a few simple APIs for drawing operations"},{"title":"Data-Driven drawing","details":"Rely on data to control drawing operations"}]},"headers":[],"relativePath":"en-US/index.md","filePath":"en-US/index.md"}'),i={name:"en-US/index.md"};function n(r,o,s,d,l,c){return t(),a("div")}const w=e(i,[["render",n]]);export{p as __pageData,w as default}; diff --git a/docs/assets/en-US_index.md.WN7UD5Qv.lean.js b/docs/assets/en-US_index.md.WN7UD5Qv.lean.js new file mode 100644 index 0000000..249eb95 --- /dev/null +++ b/docs/assets/en-US_index.md.WN7UD5Qv.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./chunks/framework.PNNbM9mo.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"iDraw.js","text":"Drawing easier on the web.","tagline":"A simple JavaScript framework for Drawing on the web.","actions":[{"theme":"brand","text":"Quick Started","link":"/en-US/guide/quickstart"},{"theme":"alt","text":"Playground","link":"https://idrawjs.com/playground/"},{"theme":"brand","text":"iDraw Studio","link":"https://idrawjs.com/studio/"}],"image":"/assets/idraw.png"},"features":[{"title":"High web compatibility","details":"All based on Canvas 2D API drawing"},{"title":"Extremely simple way to use","details":"There are no complicated operations, only a few simple APIs for drawing operations"},{"title":"Data-Driven drawing","details":"Rely on data to control drawing operations"}]},"headers":[],"relativePath":"en-US/index.md","filePath":"en-US/index.md"}'),i={name:"en-US/index.md"};function n(r,o,s,d,l,c){return t(),a("div")}const w=e(i,[["render",n]]);export{p as __pageData,w as default}; diff --git a/docs/assets/en-US_sponsor.md.OjMNo1xz.js b/docs/assets/en-US_sponsor.md.OjMNo1xz.js new file mode 100644 index 0000000..3f49b60 --- /dev/null +++ b/docs/assets/en-US_sponsor.md.OjMNo1xz.js @@ -0,0 +1 @@ +import{_ as e,o,c as s,a2 as a}from"./chunks/framework.PNNbM9mo.js";const f=JSON.parse('{"title":"Become an iDraw.js Sponsor","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/sponsor.md","filePath":"en-US/sponsor.md"}'),r={name:"en-US/sponsor.md"},n=a('

Become an iDraw.js Sponsor

iDraw.js is an MIT licensed open source project and completely free to use. The tremendous amount of effort needed to maintain this framework and develop new features for the project is only made sustainable thanks to the generous financial backing of our sponsors.

How to Sponsor

Sponsorships can be done via OpenCollective (https://opencollective.com/idrawjs). Both monthly-recurring sponsorships and one-time donations are accepted. Recurring sponsorships are entitled to logo placements as specified in Sponsorship Tiers.

',4),t=[n];function i(c,p,l,d,h,_){return o(),s("div",null,t)}const u=e(r,[["render",i]]);export{f as __pageData,u as default}; diff --git a/docs/assets/en-US_sponsor.md.OjMNo1xz.lean.js b/docs/assets/en-US_sponsor.md.OjMNo1xz.lean.js new file mode 100644 index 0000000..66f0a18 --- /dev/null +++ b/docs/assets/en-US_sponsor.md.OjMNo1xz.lean.js @@ -0,0 +1 @@ +import{_ as e,o,c as s,a2 as a}from"./chunks/framework.PNNbM9mo.js";const f=JSON.parse('{"title":"Become an iDraw.js Sponsor","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/sponsor.md","filePath":"en-US/sponsor.md"}'),r={name:"en-US/sponsor.md"},n=a("",4),t=[n];function i(c,p,l,d,h,_){return o(),s("div",null,t)}const u=e(r,[["render",i]]);export{f as __pageData,u as default}; diff --git a/docs/assets/idraw-logo-DKtM0M08.png b/docs/assets/idraw-logo-DKtM0M08.png deleted file mode 100644 index 886a681..0000000 Binary files a/docs/assets/idraw-logo-DKtM0M08.png and /dev/null differ diff --git a/docs/assets/idraw-with-bg.png b/docs/assets/idraw-with-bg.png new file mode 100644 index 0000000..39e27cf Binary files /dev/null and b/docs/assets/idraw-with-bg.png differ diff --git a/docs/assets/idraw.png b/docs/assets/idraw.png new file mode 100644 index 0000000..3b25b90 Binary files /dev/null and b/docs/assets/idraw.png differ diff --git a/docs/assets/index-CD0CTQBa.css b/docs/assets/index-CD0CTQBa.css deleted file mode 100644 index 91504bd..0000000 --- a/docs/assets/index-CD0CTQBa.css +++ /dev/null @@ -1 +0,0 @@ -body{--page-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--page-layer-1: 100;--page-layer-2: 200;--page-layer-3: 300;--page-layer-4: 400;--page-layer-5: 500;--page-layer-6: 600;--page-layer-7: 700;--page-layer-8: 800;--page-layer-9: 900;--page-bg: #ffffff;--page-bg-primary: #f5f5f5;--page-bg-secondary: #f0f0f0;--page-border-color: #d9d9d9;--page-text-color-primary: #141414;--page-text-color-secondary: #262626;--page-text-color-tertiary: #595959;--page-link-hover: #1890ff;--page-link-active: #096dd9;--page-btn-bg: #d9d9d9;--page-btn-hover-bg: #bfbfbf;--page-btn-active-bg: #8c8c8c;--page-btn-color: #262626;--page-btn-primary-bg: #003a8c;--page-btn-primary-hover-bg: #0050b3;--page-btn-primary-active-bg: #096dd9;--page-btn-primary-color: #f5f5f5;--page-btn-secondary-bg: #006d75;--page-btn-secondary-hover-bg: #08979c;--page-btn-secondary-active-bg: #13c2c2;--page-btn-secondary-color: #f5f5f5}body.theme-dark{--page-bg: #141414;--page-bg-primary: #1f1f1f;--page-bg-secondary: #262626;--page-border-color: #434343;--page-text-color-primary: #f5f5f5;--page-text-color-secondary: #f0f0f0;--page-text-color-tertiary: #bfbfbf;--page-link-hover: #69c0ff;--page-link-active: #91d5ff;--page-btn-bg: #434343;--page-btn-hover-bg: #595959;--page-btn-active-bg: #8c8c8c;--page-btn-color: #f0f0f0;--page-btn-primary-bg: #003a8c;--page-btn-primary-hover-bg: #0050b3;--page-btn-primary-active-bg: #096dd9;--page-btn-primary-color: #f5f5f5;--page-btn-secondary-bg: #006d75;--page-btn-secondary-hover-bg: #08979c;--page-btn-secondary-active-bg: #13c2c2;--page-btn-secondary-color: #f5f5f5}body.theme-dark .page-header .page-header-content .theme-switch-btn .btn-theme-light-icon{display:none}body.theme-dark .page-header .page-header-content .theme-switch-btn .btn-theme-dark-icon{display:inline-flex}.common-loading-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;background:#262626}.common-loading-container .common-loading,.common-loading-container .common-loading>.common-loading-dot{position:relative;box-sizing:border-box}.common-loading-container .common-loading{width:32px;height:32px;display:flex;font-size:0;color:#40a9ff}.common-loading-container .common-loading>.common-loading-dot{position:absolute;top:50%;left:50%;width:8px;height:8px;margin-top:-4px;margin-left:-4px;border-radius:100%;animation:ball-spin 1s infinite ease-in-out;display:inline-block;float:none;background-color:currentColor;border:0 solid currentColor}.common-loading-container .common-loading>.common-loading-dot:nth-child(1){top:5%;left:50%;animation-delay:-1.125s}.common-loading-container .common-loading>.common-loading-dot:nth-child(2){top:18.18019485%;left:81.81980515%;animation-delay:-1.25s}.common-loading-container .common-loading>.common-loading-dot:nth-child(3){top:50%;left:95%;animation-delay:-1.375s}.common-loading-container .common-loading>.common-loading-dot:nth-child(4){top:81.81980515%;left:81.81980515%;animation-delay:-1.5s}.common-loading-container .common-loading>.common-loading-dot:nth-child(5){top:95%;left:50%;animation-delay:-1.625s}.common-loading-container .common-loading>.common-loading-dot:nth-child(6){top:81.8198047%;left:18.18019492%;animation-delay:-1.75s}.common-loading-container .common-loading>.common-loading-dot:nth-child(7){top:49.99997508%;left:5.00000512%;animation-delay:-1.875s}.common-loading-container .common-loading>.common-loading-dot:nth-child(8){top:18.17946497%;left:18.18037005%;animation-delay:-2s}.common-loading-container .common-loading.loading-size-l{width:64px;height:64px}.common-loading-container .common-loading.loading-size-l>.common-loading-dot{width:16px;height:16px;margin-top:-8px;margin-left:-8px}.common-loading-container .common-loading.loading-size-xl{width:96px;height:96px}.common-loading-container .common-loading.loading-size-xl>.common-loading-dot{width:24px;height:24px;margin-top:-12px;margin-left:-12px}@keyframes ball-spin{0%,to{opacity:1;transform:scale(1)}20%{opacity:1}80%{opacity:0;transform:scale(0)}}html,body{margin:0;padding:0;background:var(--page-bg-primary)}.page{display:flex;flex-direction:column;background:var(--page-bg-primary);color:var(--page-text-color-primary);font-family:var(--page-font-family);font-size:14px;font-weight:400}.page a{color:var(--page-text-color-primary);text-decoration:none}.page a:hover{color:var(--page-link-hover)}.page a:active{color:var(--page-link-active)}.page button,.page div,.page span{color:var(--page-text-color-primary)}.page-header{display:flex;align-items:center;justify-content:center;flex-direction:column;position:sticky;top:0;z-index:var(--page-layer-1);border-bottom:1px solid var(--page-border-color);padding:14px 0;background:var(--page-bg)}.page-header .page-header-content{display:flex;align-items:center;justify-content:space-between;flex-direction:row;height:36px;width:100%;box-sizing:border-box;padding:0 40px}.page-header .page-header-content .header-logo{display:inline-flex;flex-direction:row;justify-content:center;align-items:center;font-size:16px;font-weight:500}.page-header .page-header-content .header-logo .header-logo-text{padding-left:8px}.page-header .page-header-content .header-nav{display:flex;flex-direction:row}.page-header .page-header-content .header-nav .header-nav-item{display:inline-flex;padding:0 12px;font-size:14px;font-weight:500;transition:color .5s;white-space:nowrap;justify-content:center;align-items:center}.page-header .page-header-content .header-nav .theme-switch-btn{display:inline-flex;border:none;background:none;cursor:pointer}.page-header .page-header-content .header-nav .theme-switch-btn .btn-theme-light-icon{display:inline-flex}.page-header .page-header-content .header-nav .theme-switch-btn .btn-theme-dark-icon{display:none}.page-content{display:flex;flex-direction:column;justify-content:space-between;background:var(--page-bg-primary)}.page-text-h1{font-weight:400;font-size:70px;text-align:center;padding:0;line-height:1.25;margin:20px 0;font-weight:800;background:-webkit-linear-gradient(315deg,#08979c 25%,#003a8c);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.page-text-h2{font-weight:400;font-size:40px;text-align:center;padding:0;line-height:1.25;margin:10px auto;font-weight:800;max-width:720px;color:var(--page-text-color-secondary)}.page-actions{display:flex;flex-direction:row;justify-content:center;align-items:center;flex-wrap:wrap;margin:10px 0 30px}.page-actions .page-action-btn{background:var(--page-btn-bg);color:var(--page-btn-color);margin:0 10px;font-size:16px;display:inline-flex;padding:8px 18px;font-weight:500;border-radius:8px;transition:background-color .5s,color .5s;text-decoration:none}.page-actions .page-action-btn:hover{background:var(--page-btn-hover-bg);color:var(--page-btn-color)}.page-actions .page-action-btn:active{background:var(--page-btn-active-bg);color:var(--page-btn-color)}.page-actions .page-action-btn.btn-primary{background:var(--page-btn-primary-bg);color:var(--page-btn-primary-color)}.page-actions .page-action-btn.btn-primary:hover{background:var(--page-btn-primary-hover-bg)}.page-actions .page-action-btn.btn-primary:active{background:var(--page-btn-primary-active-bg)}.page-actions .page-action-btn.btn-secondary{background:var(--page-btn-secondary-bg);color:var(--page-btn-secondary-color)}.page-actions .page-action-btn.btn-secondary:hover{background:var(--page-btn-secondary-hover-bg)}.page-actions .page-action-btn.btn-secondary:active{background:var(--page-btn-secondary-active-bg)}.page-preview{display:flex;flex-direction:column;align-items:center}.page-preview .screen-container{display:flex;flex-direction:column;background-color:#000;border:4px solid #707070;border-radius:20px;box-shadow:0 0 40px 2px #1c1f2f1a;padding:20px;height:600px;width:80%;max-width:1000px}.page-preview .screen-container .screen-content{background-color:#fff;border-radius:0;overflow:hidden;width:100%;height:100%}.page-description{margin:40px 0}.page-description .description-list{display:flex;flex-direction:row;max-width:900px;margin:0 auto}.page-description .description-item{display:flex;flex-direction:column;width:33.33%;margin:0 20px;border-radius:20px;padding:20px;background:var(--page-bg)}.page-description .description-title{line-height:24px;font-size:16px;font-weight:600;color:var(--page-text-color-primary)}.page-description .description-text{font-size:16px;font-weight:600;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--page-text-color-tertiary)}.page-footer{display:flex;width:100%;margin-top:60px;padding:20px 0;border-top:1px solid var(--page-border-color)}.page-footer .page-footer-content{display:flex;flex-direction:row;flex-wrap:wrap;max-width:900px;margin:0 auto;padding:24px 32px;box-sizing:border-box}.page-footer .footer-info-box{width:270px;margin-bottom:32px}.page-footer .footer-info-box .footer-info-title{font-weight:500;font-size:16px;line-height:24px;margin-bottom:4px;color:var(--page-text-color-primary)}.page-footer .footer-info-box .footer-info-text{font-size:14px;line-height:24px;color:var(--page-text-color-secondary)}.page-footer .footer-info-box .footer-info-text a{color:var(--page-text-color-tertiary);text-decoration:none}.page-footer .footer-info-box .footer-info-text a:hover{text-decoration:underline;color:var(--page-link-hover)}.page-footer .footer-info-box .footer-info-text a:active{color:var(--page-link-active)}.page .page-header .header-more-btn{display:none;justify-content:center;align-items:center;cursor:pointer;background:none;border:none}.page .page-header .header-more-btn:hover{color:var(--page-link-hover)}@media (max-width: 768px){.page .page-header .header-nav{display:none;visibility:hidden;opacity:0;transition:.5s;position:fixed;z-index:100;top:70px;right:20px;flex-direction:column;background:var(--page-bg);border-radius:10px;border:1px solid var(--page-border-color);box-shadow:0 0 6px #0000001a}.page .page-header .header-nav.show-header-nav{visibility:visible;opacity:1;display:flex}.page .page-header .header-nav-item{height:40px;min-width:100px;border-bottom:1px solid var(--page-border-color)}.page .page-header .header-nav-item:last-child{border-bottom:none}.page .page-header .header-more-btn{display:inline-flex}} diff --git a/docs/assets/index-CenB0RI_.js b/docs/assets/index-CenB0RI_.js deleted file mode 100644 index f202201..0000000 --- a/docs/assets/index-CenB0RI_.js +++ /dev/null @@ -1 +0,0 @@ -(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))l(e);new MutationObserver(e=>{for(const t of e)if(t.type==="childList")for(const n of t.addedNodes)n.tagName==="LINK"&&n.rel==="modulepreload"&&l(n)}).observe(document,{childList:!0,subtree:!0});function a(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?t.credentials="include":e.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function l(e){if(e.ep)return;e.ep=!0;const t=a(e);fetch(e.href,t)}})();const w=document.body,L=document.querySelector("#btn-switch-theme"),y="theme-dark",m="show-header-nav",h=document.querySelector("#btn-nav-more"),v=document.querySelector("#nav-menu");L.addEventListener("click",()=>{w.classList.contains(y)?w.classList.remove(y):w.classList.add(y)});h.addEventListener("click",()=>{v.classList.contains(m)?v.classList.remove(m):v.classList.add(m)});window.addEventListener("click",o=>{h&&(o.target===h||h.contains(o.target))||v.classList.remove(m)});const P="modulepreload",E=function(o,s){return new URL(o,s).href},p={},b=function(s,a,l){let e=Promise.resolve();if(a&&a.length>0){const t=document.getElementsByTagName("link"),n=document.querySelector("meta[property=csp-nonce]"),d=(n==null?void 0:n.nonce)||(n==null?void 0:n.getAttribute("nonce"));e=Promise.all(a.map(r=>{if(r=E(r,l),r in p)return;p[r]=!0;const i=r.endsWith(".css"),g=i?'[rel="stylesheet"]':"";if(!!l)for(let u=t.length-1;u>=0;u--){const f=t[u];if(f.href===r&&(!i||f.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${r}"]${g}`))return;const c=document.createElement("link");if(c.rel=i?"stylesheet":P,i||(c.as="script",c.crossOrigin=""),c.href=r,d&&c.setAttribute("nonce",d),document.head.appendChild(c),i)return new Promise((u,f)=>{c.addEventListener("load",u),c.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${r}`)))})}))}return e.then(()=>s()).catch(t=>{const n=new Event("vite:preloadError",{cancelable:!0});if(n.payload=t,window.dispatchEvent(n),!n.defaultPrevented)throw t})};async function S(){const o=document.querySelector("#app-scree-preview"),s=()=>{const i=o.getBoundingClientRect();return{width:i.width,height:i.height,devicePixelRatio:window.devicePixelRatio}},a="/data/ios-native-demo.json",l=await b(()=>import("./index-KE3p3UsH.js"),[],import.meta.url),{iDraw:e}=l,n=await(await window.fetch(a)).json();o.innerHTML="";const d=s(),r=new e(o,{width:d.width,height:d.height,devicePixelRatio:d.devicePixelRatio});r.setData(n),r.centerContent({data:n}),window.addEventListener("resize",()=>{const i=s();r.resize(i),r.centerContent()})}setTimeout(async()=>{await S()},0); diff --git a/docs/assets/index-KE3p3UsH.js b/docs/assets/index-KE3p3UsH.js deleted file mode 100644 index 78ec078..0000000 --- a/docs/assets/index-KE3p3UsH.js +++ /dev/null @@ -1,14 +0,0 @@ -function Gl(e){return function(t,i){return n(0);function n(o){let s=e[o];if(o===e.length&&i&&(s=i),!s)return Promise.resolve();try{return Promise.resolve(s(t,n.bind(null,o+1)))}catch(r){return Promise.reject(r)}}}}function Xl(e){return new Promise(t=>{setTimeout(()=>{t()},e)})}function Hl(e,t){let i=-1;return function(...n){i>=0||(i=setTimeout(()=>{e(...n),i=-1},t))}}function Nl(e,t){let i=-1;return function(...n){i>=0&&window.clearTimeout(i),i=setTimeout(()=>{e(...n),i=-1},t)}}function Ul(e,t){const{fileName:i,type:n="image/jpeg"}=t,o=e.toDataURL(n);let s=document.createElement("a");s.href=o,s.download=i,s.click(),s=null}function $l(e){const{accept:t,success:i,error:n}=e;let o=document.createElement("input");o.type="file",t&&(o.accept=t),o.addEventListener("change",function(){var s;const r=(s=o.files)===null||s===void 0?void 0:s[0];i({file:r}),o=null}),o.addEventListener("error",function(s){typeof n=="function"&&n(s),o=null}),o.click()}function Ql(e){return new Promise(function(t,i){let n=new FileReader;n.addEventListener("load",function(){t(n.result),n=null}),n.addEventListener("error",function(o){i(o),n=null}),n.addEventListener("abort",function(){i(new Error("abort")),n=null}),n.readAsDataURL(e)})}function Zl(e){return new Promise(function(t,i){let n=new FileReader;n.addEventListener("load",function(){t(n.result),n=null}),n.addEventListener("error",function(o){i(o),n=null}),n.addEventListener("abort",function(){i(new Error("abort")),n=null}),n.readAsText(e)})}function $s(e){const t=new TextEncoder().encode(e),i=new Blob([t],{type:"text/plain;charset=utf-8"});return window.URL.createObjectURL(i)}function Jl(e,t){const{fileName:i}=t,n=$s(e);let o=document.createElement("a");o.href=n,o.download=i,o.click(),o=null}function Kl(e){return parseInt(e.replace(/^\#/,"0x"))}function ql(e){return"#"+e.toString(16)}function Ni(e){return typeof e=="string"&&(/^\#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(e)||/^[a-z]{1,}$/i.test(e))}const Qs={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4","indianred ":"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function ec(e){const t=e.toLowerCase(),i=Qs[t];return typeof i=="string"?i:null}function tc(e){let t="transparent";if(typeof e=="string")t=e;else if((e==null?void 0:e.type)==="linear-gradient"){const i=[];typeof e.angle=="number"?i.push(`${e.angle}deg`):i.push("180deg"),Array.isArray(e.stops)&&e.stops.forEach(n=>{i.push(`${n.color} ${n.offset*100}%`)}),t=`linear-gradient(${i.join(", ")})`}else if((e==null?void 0:e.type)==="radial-gradient"){const i=[];Array.isArray(e.stops)&&e.stops.forEach(n=>{i.push(`${n.color} ${n.offset*100}%`)}),t=`radial-gradient(circle, ${i.join(", ")})`}return t}function ic(e){let t="transparent";if(typeof e=="string")t=e;else if((e==null?void 0:e.type)==="radial-gradient"||(e==null?void 0:e.type)==="linear-gradient"){const i=[];Array.isArray(e.stops)&&e.stops.length>0&&(e.stops.forEach((n,o)=>{i.push(`${n.color} ${n.offset*100}%`),o===e.stops.length-1&&n.offset<1&&i.push(`${n.color} ${n.offset*100}%`)}),t=`linear-gradient(90deg, ${i.join(", ")})`)}return t}function Kn(e,t){if(t===1)return e;let i=1;const n=/^\#[0-9a-f]{6,6}$/i,o=/^\#[0-9a-f]{8,8}$/i;let s=e;if(n.test(e)?i=parseInt(e.substring(5,7).replace(/^\#/,"0x")):o.test(e)&&(i=parseInt(e.substring(7,9).replace(/^\#/,"0x")),s=e.substring(0,7)),i=i*t,n.test(s)&&i>0&&i<1){const r=Math.max(0,Math.min(255,Math.ceil(i*256)));s=`${s.toUpperCase()}${r.toString(16).toUpperCase()}`}return s}function gt(){function e(){return((1+Math.random())*65536|0).toString(16).substring(1)}return`${e()}${e()}-${e()}-${e()}-${e()}-${e()}${e()}${e()}`}function tt(e){let t=0;for(let i=0;i=0)return i;if(n==="Array"){const o=[];return i.forEach(s=>{o.push(t(s))}),o}else if(n==="Object"){const o={};return Object.keys(i).forEach(a=>{o[a]=t(i[a])}),Object.getOwnPropertySymbols(i).forEach(a=>{o[a]=t(i[a])}),o}}return t(e)}function nc(e){const t=Vt(e),i=n=>{n.uuid=gt(),n.type==="group"&&n.detail.children&&n.detail.children.forEach(o=>{i(o)})};return i(t),t}function Zs(e){return Object.prototype.toString.call(e).replace(/[\]|\[]{1,1}/gi,"").split(" ")[1]}function oc(e,t){const i=e.assets||{};let n=e;(t==null?void 0:t.clone)===!0&&(n=Vt(e));const o=s=>{s.forEach(r=>{if(r.type==="image"&&r.detail.src){const a=r.detail.src,c=qe(a);i[c]||(i[c]={type:"image",value:a}),r.detail.src=c}else if(r.type==="svg"){const a=r.detail.svg,c=qe(a);i[c]||(i[c]={type:"svg",value:a}),r.detail.svg=c}else if(r.type==="html"){const a=r.detail.html,c=qe(a);i[c]||(i[c]={type:"html",value:a}),r.detail.html=c}else if(r.type==="group"&&Array.isArray(r.detail.children)){const a=r.detail.assets||{};Object.keys(a).forEach(c=>{i[c]||(i[c]=a[c])}),delete r.detail.assets,o(r.detail.children)}})};return o(n.elements),n.assets=i,n}function Js(e,t){const i=e.assets||{},n=Vt(e),o=(t==null?void 0:t.loadItemMap)||{},s=r=>{r.forEach(a=>{var c,l,d;if(a.type==="image"&&a.detail.src){const f=a.detail.src;if(vt(f)&&!i[f]&&o[f]&&typeof((c=o[f])===null||c===void 0?void 0:c.source)=="string")i[f]={type:"image",value:o[f].source};else if(!i[f]){const u=qe(f);i[u]||(i[u]={type:"image",value:f}),a.detail.src=u}}else if(a.type==="svg"){const f=a.detail.svg;if(vt(f)&&!i[f]&&o[f]&&typeof((l=o[f])===null||l===void 0?void 0:l.source)=="string")i[f]={type:"svg",value:o[f].source};else if(!i[f]){const u=qe(f);i[u]||(i[u]={type:"svg",value:f}),a.detail.svg=u}}else if(a.type==="html"){const f=a.detail.html;if(vt(f)&&!i[f]&&o[f]&&typeof((d=o[f])===null||d===void 0?void 0:d.source)=="string")i[f]={type:"html",value:o[f].source};else if(!i[f]){const u=qe(f);i[u]||(i[u]={type:"html",value:f}),a.detail.html=u}}else if(a.type==="group"&&Array.isArray(a.detail.children)){const f=a.detail.assets||{};Object.keys(f).forEach(u=>{i[u]||(i[u]=f[u])}),delete a.detail.assets,s(a.detail.children)}})};return s(n.elements),n.assets=i,n}function Oe(e){return(Object.prototype.toString.call(e)||"").replace(/(\[object|\])/gi,"").trim()}const Ut={type(e,t){const i=Oe(e);return t===!0?i.toLocaleLowerCase():i},array(e){return Oe(e)==="Array"},json(e){return Oe(e)==="Object"},function(e){return Oe(e)==="Function"},asyncFunction(e){return Oe(e)==="AsyncFunction"},boolean(e){return Oe(e)==="Boolean"},string(e){return Oe(e)==="String"},number(e){return Oe(e)==="Number"},undefined(e){return Oe(e)==="Undefined"},null(e){return Oe(e)==="Null"},promise(e){return Oe(e)==="Promise"}};function Ks(e,t){const{width:i,height:n}=t;return new Promise((o,s)=>{const r=` - - -
- ${e} -
-
-
- `,a=new Blob([r],{type:"image/svg+xml;charset=utf-8"}),c=new FileReader;c.readAsDataURL(a),c.onload=function(l){var d;const f=(d=l==null?void 0:l.target)===null||d===void 0?void 0:d.result;o(f)},c.onerror=function(l){s(l)}})}function qs(e){return new Promise((t,i)=>{const n=e,o=new Blob([n],{type:"image/svg+xml;charset=utf-8"}),s=new FileReader;s.readAsDataURL(o),s.onload=function(r){var a;const c=(a=r==null?void 0:r.target)===null||a===void 0?void 0:a.result;t(c)},s.onerror=function(r){i(r)}})}var $o=function(e,t,i,n){function o(s){return s instanceof i?s:new i(function(r){r(s)})}return new(i||(i=Promise))(function(s,r){function a(d){try{l(n.next(d))}catch(f){r(f)}}function c(d){try{l(n.throw(d))}catch(f){r(f)}}function l(d){d.done?s(d.value):o(d.value).then(a,c)}l((n=n.apply(e,t||[])).next())})};const{Image:er}=window;function nn(e){return new Promise((t,i)=>{const n=new er;n.crossOrigin="anonymous",n.onload=function(){t(n)},n.onabort=i,n.onerror=i,n.src=e})}function tr(e){return $o(this,void 0,void 0,function*(){const t=yield qs(e);return yield nn(t)})}function ir(e){return e.replace(/\&/gi,"&")}function nr(e,t){return $o(this,void 0,void 0,function*(){e=ir(e);const i=yield Ks(e,t);return yield nn(i)})}function yt(e){return typeof e=="number"&&(e>0||e<=0)}function or(e){return yt(e)}function sr(e){return yt(e)}function Qo(e){return typeof e=="number"&&e>=0}function rr(e){return typeof e=="number"&&e>=0}function ar(e){return typeof e=="number"&&e>=-360&&e<=360}function lr(e){return Qo(e)}function cr(e){return yt(e)&&e>=0}function dr(e){return Ni(e)}function Zo(e){return typeof e=="string"&&/^(http:\/\/|https:\/\/|\.\/|\/)/.test(`${e}`)}function Jo(e){return typeof e=="string"&&/^(data:image\/)/.test(`${e}`)}function fr(e){return Jo(e)||Zo(e)}function hr(e){return typeof e=="string"&&/^()/i.test(`${e}`.trim())&&/<\/[\s]{0,}svg>$/i.test(`${e}`.trim())}function ur(e){let t=!1;if(typeof e=="string"){let i=document.createElement("div");i.innerHTML=e,i.children.length>0&&(t=!0),i=null}return t}function gr(e){return typeof e=="string"}function vr(e){return yt(e)&&e>0}function mr(e){return yt(e)&&e>0}function yr(e){return yt(e)&&e>0}function wr(e){return["center","left","right"].includes(e)}function pr(e){return typeof e=="string"&&e.length>0}function br(e){return["bold"].includes(e)}function Sr(e){return/^(-?\d+(?:\.\d+)?)$/.test(`${e}`)}const J={x:or,y:sr,w:Qo,h:rr,angle:ar,number:yt,numberStr:Sr,borderWidth:lr,borderRadius:cr,color:dr,imageSrc:fr,imageURL:Zo,imageBase64:Jo,svg:hr,html:ur,text:gr,fontSize:vr,lineHeight:mr,textAlign:wr,fontFamily:pr,fontWeight:br,strokeWidth:yr};function Mr(e){const{x:t,y:i,w:n,h:o,angle:s}=e;return!(!(J.x(t)&&J.y(i)&&J.w(n)&&J.h(o)&&J.angle(s))||!(s>=-360&&s<=360))}function Ko(e={}){const{borderColor:t,borderRadius:i,borderWidth:n}=e;return!(e.hasOwnProperty("borderColor")&&!J.color(t)||e.hasOwnProperty("borderRadius")&&!J.number(i)||e.hasOwnProperty("borderWidth")&&!J.number(n))}function xr(e){const{background:t}=e;return!(e.hasOwnProperty("background")&&!J.color(t)||!Ko(e))}function Ar(e){const{background:t,borderColor:i,borderWidth:n}=e;return!(e.hasOwnProperty("background")&&!J.color(t)||e.hasOwnProperty("borderColor")&&!J.color(i)||e.hasOwnProperty("borderWidth")&&!J.number(n))}function Ir(e){const{src:t}=e;return!!J.imageSrc(t)}function Rr(e){const{svg:t}=e;return!!J.svg(t)}function Pr(e){const{html:t}=e;return!!J.html(t)}function zr(e){const{text:t,color:i,fontSize:n,lineHeight:o,fontFamily:s,textAlign:r,fontWeight:a,background:c,strokeWidth:l,strokeColor:d}=e;return!(!J.text(t)||!J.color(i)||!J.fontSize(n)||e.hasOwnProperty("background")&&!J.color(c)||e.hasOwnProperty("fontWeight")&&!J.fontWeight(a)||e.hasOwnProperty("lineHeight")&&!J.lineHeight(o)||e.hasOwnProperty("fontFamily")&&!J.fontFamily(s)||e.hasOwnProperty("textAlign")&&!J.textAlign(r)||e.hasOwnProperty("strokeWidth")&&!J.strokeWidth(l)||e.hasOwnProperty("strokeColor")&&!J.color(d)||!Ko(e))}const sc={attrs:Mr,textDesc:zr,rectDesc:xr,circleDesc:Ar,imageDesc:Ir,svgDesc:Rr,htmlDesc:Pr};var ui=function(e,t,i,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(e,i):o?o.value=i:t.set(e,i),i},V=function(e,t,i,n){if(i==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?n:i==="a"?n.call(e):n?n.value:t.get(e)},B,Xe;const Lr=12,Er="400",Tr="-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'";class qo{constructor(t,i){B.set(this,void 0),Xe.set(this,void 0),ui(this,B,t,"f"),ui(this,Xe,Object.assign({devicePixelRatio:1,offscreenCanvas:null},i),"f"),this.$resetFont()}$undoPixelRatio(t){return t/V(this,Xe,"f").devicePixelRatio}$doPixelRatio(t){return V(this,Xe,"f").devicePixelRatio*t}$getContext(){return V(this,B,"f")}$setContext(t){ui(this,B,t,"f")}$setFont(t){const i=[];t.fontWeight&&i.push(`${t.fontWeight}`),i.push(`${this.$doPixelRatio(t.fontSize||12)}px`),i.push(`${t.fontFamily||"sans-serif"}`),V(this,B,"f").font=`${i.join(" ")}`}$resetFont(){this.$setFont({fontSize:Lr,fontFamily:Tr,fontWeight:Er})}$getOffscreenCanvas(){return V(this,Xe,"f").offscreenCanvas}$resize(t){const{width:i,height:n,devicePixelRatio:o,resetStyle:s}=t,{canvas:r}=V(this,B,"f");r.width=i*o,r.height=n*o,ui(this,Xe,Object.assign(Object.assign({},V(this,Xe,"f")),{devicePixelRatio:o}),"f"),s===!0&&(r.style.width=`${i}px`,r.style.height=`${n}px`)}$getSize(){const{devicePixelRatio:t}=V(this,Xe,"f"),{width:i,height:n}=V(this,B,"f").canvas;return{width:i/t,height:n/t,devicePixelRatio:t}}get canvas(){return V(this,B,"f").canvas}get fillStyle(){return V(this,B,"f").fillStyle}set fillStyle(t){V(this,B,"f").fillStyle=t}get strokeStyle(){return V(this,B,"f").strokeStyle}set strokeStyle(t){V(this,B,"f").strokeStyle=t}get lineWidth(){return this.$undoPixelRatio(V(this,B,"f").lineWidth)}set lineWidth(t){V(this,B,"f").lineWidth=this.$doPixelRatio(t)}get textAlign(){return V(this,B,"f").textAlign}set textAlign(t){V(this,B,"f").textAlign=t}get textBaseline(){return V(this,B,"f").textBaseline}set textBaseline(t){V(this,B,"f").textBaseline=t}get globalAlpha(){return V(this,B,"f").globalAlpha}set globalAlpha(t){V(this,B,"f").globalAlpha=t}get shadowColor(){return V(this,B,"f").shadowColor}set shadowColor(t){V(this,B,"f").shadowColor=t}get shadowOffsetX(){return this.$undoPixelRatio(V(this,B,"f").shadowOffsetX)}set shadowOffsetX(t){V(this,B,"f").shadowOffsetX=this.$doPixelRatio(t)}get shadowOffsetY(){return this.$undoPixelRatio(V(this,B,"f").shadowOffsetY)}set shadowOffsetY(t){V(this,B,"f").shadowOffsetY=this.$doPixelRatio(t)}get shadowBlur(){return this.$undoPixelRatio(V(this,B,"f").shadowBlur)}set shadowBlur(t){V(this,B,"f").shadowBlur=this.$doPixelRatio(t)}get lineCap(){return V(this,B,"f").lineCap}set lineCap(t){V(this,B,"f").lineCap=t}get globalCompositeOperation(){return V(this,B,"f").globalCompositeOperation}set globalCompositeOperation(t){V(this,B,"f").globalCompositeOperation=t}fill(...t){return V(this,B,"f").fill(...t)}arc(t,i,n,o,s,r){return V(this,B,"f").arc(this.$doPixelRatio(t),this.$doPixelRatio(i),this.$doPixelRatio(n),o,s,r)}rect(t,i,n,o){return V(this,B,"f").rect(this.$doPixelRatio(t),this.$doPixelRatio(i),this.$doPixelRatio(n),this.$doPixelRatio(o))}fillRect(t,i,n,o){return V(this,B,"f").fillRect(this.$doPixelRatio(t),this.$doPixelRatio(i),this.$doPixelRatio(n),this.$doPixelRatio(o))}clearRect(t,i,n,o){return V(this,B,"f").clearRect(this.$doPixelRatio(t),this.$doPixelRatio(i),this.$doPixelRatio(n),this.$doPixelRatio(o))}beginPath(){return V(this,B,"f").beginPath()}closePath(){return V(this,B,"f").closePath()}lineTo(t,i){return V(this,B,"f").lineTo(this.$doPixelRatio(t),this.$doPixelRatio(i))}moveTo(t,i){return V(this,B,"f").moveTo(this.$doPixelRatio(t),this.$doPixelRatio(i))}arcTo(t,i,n,o,s){return V(this,B,"f").arcTo(this.$doPixelRatio(t),this.$doPixelRatio(i),this.$doPixelRatio(n),this.$doPixelRatio(o),this.$doPixelRatio(s))}getLineDash(){return V(this,B,"f").getLineDash()}setLineDash(t){const i=t.map(n=>this.$doPixelRatio(n));return V(this,B,"f").setLineDash(i)}stroke(t){return t?V(this,B,"f").stroke(t):V(this,B,"f").stroke()}translate(t,i){return V(this,B,"f").translate(this.$doPixelRatio(t),this.$doPixelRatio(i))}rotate(t){return V(this,B,"f").rotate(t)}drawImage(...t){const i=t[0],n=t[1],o=t[2],s=t[3],r=t[4],a=t[t.length-4],c=t[t.length-3],l=t[t.length-2],d=t[t.length-1];return t.length===9?V(this,B,"f").drawImage(i,this.$doPixelRatio(n),this.$doPixelRatio(o),this.$doPixelRatio(s),this.$doPixelRatio(r),this.$doPixelRatio(a),this.$doPixelRatio(c),this.$doPixelRatio(l),this.$doPixelRatio(d)):V(this,B,"f").drawImage(i,this.$doPixelRatio(a),this.$doPixelRatio(c),this.$doPixelRatio(l),this.$doPixelRatio(d))}createPattern(t,i){return V(this,B,"f").createPattern(t,i)}measureText(t){return V(this,B,"f").measureText(t)}fillText(t,i,n,o){return o!==void 0?V(this,B,"f").fillText(t,this.$doPixelRatio(i),this.$doPixelRatio(n),this.$doPixelRatio(o)):V(this,B,"f").fillText(t,this.$doPixelRatio(i),this.$doPixelRatio(n))}strokeText(t,i,n,o){return o!==void 0?V(this,B,"f").strokeText(t,this.$doPixelRatio(i),this.$doPixelRatio(n),this.$doPixelRatio(o)):V(this,B,"f").strokeText(t,this.$doPixelRatio(i),this.$doPixelRatio(n))}save(){V(this,B,"f").save()}restore(){V(this,B,"f").restore()}scale(t,i){V(this,B,"f").scale(t,i)}circle(t,i,n,o,s,r,a,c){V(this,B,"f").ellipse(this.$doPixelRatio(t),this.$doPixelRatio(i),this.$doPixelRatio(n),this.$doPixelRatio(o),s,r,a,c)}isPointInPath(t,i){return V(this,B,"f").isPointInPath(this.$doPixelRatio(t),this.$doPixelRatio(i))}clip(...t){return V(this,B,"f").clip(...t)}setTransform(t,i,n,o,s,r){return V(this,B,"f").setTransform(t,i,n,o,s,r)}getTransform(){return V(this,B,"f").getTransform()}createLinearGradient(t,i,n,o){return V(this,B,"f").createLinearGradient(this.$doPixelRatio(t),this.$doPixelRatio(i),this.$doPixelRatio(n),this.$doPixelRatio(o))}createRadialGradient(t,i,n,o,s,r){return V(this,B,"f").createRadialGradient(this.$doPixelRatio(t),this.$doPixelRatio(i),this.$doPixelRatio(n),this.$doPixelRatio(o),this.$doPixelRatio(s),this.$doPixelRatio(r))}createConicGradient(t,i,n){return V(this,B,"f").createConicGradient(t,this.$doPixelRatio(i),this.$doPixelRatio(n))}}B=new WeakMap,Xe=new WeakMap;function bt(e){const{width:t,height:i,ctx:n,devicePixelRatio:o}=e;let s=n;if(!s){const a=document.createElement("canvas");a.width=t*o,a.height=i*o,s=a.getContext("2d")}return new qo(s,e)}function Ii(e){const{width:t,height:i,devicePixelRatio:n}=e,o=new OffscreenCanvas(t*n,i*n),r=o.getContext("2d").canvas.getContext("2d");return new qo(r,{devicePixelRatio:n,offscreenCanvas:o})}function Cr(e,t){const{width:i,height:n,devicePixelRatio:o,offscreen:s,createCustomContext2D:r}=t,a={width:i,height:n,devicePixelRatio:o},c=e.getContext("2d");if(r){const l=r(a),d=r(a),f=r(a),u=bt(Object.assign({ctx:c},a));return{underlayContext:f,viewContext:l,overlayContext:d,boardContext:u,drawView:()=>{const{width:h,height:m}=l.$getSize();u.clearRect(0,0,h,m),u.drawImage(f.canvas,0,0,h,m),u.drawImage(l.canvas,0,0,h,m),u.drawImage(d.canvas,0,0,h,m),f.clearRect(0,0,h,m),l.clearRect(0,0,h,m),d.clearRect(0,0,h,m)}}}if(s===!0){const l=Ii(a),d=Ii(a),f=Ii(a),u=bt(Object.assign({ctx:c},a));return{underlayContext:f,viewContext:l,overlayContext:d,boardContext:u,drawView:()=>{const{width:h,height:m}=l.$getSize();u.clearRect(0,0,h,m),u.drawImage(f.canvas,0,0,h,m),u.drawImage(l.canvas,0,0,h,m),u.drawImage(d.canvas,0,0,h,m),f.clearRect(0,0,h,m),l.clearRect(0,0,h,m),d.clearRect(0,0,h,m)}}}else{const l=bt(a),d=bt(a),f=bt(a),u=bt(Object.assign({ctx:c},a));return{underlayContext:f,viewContext:l,overlayContext:d,boardContext:u,drawView:()=>{u.clearRect(0,0,i,n),u.drawImage(f.canvas,0,0,i,n),u.drawImage(l.canvas,0,0,i,n),u.drawImage(d.canvas,0,0,i,n),f.clearRect(0,0,i,n),l.clearRect(0,0,i,n),d.clearRect(0,0,i,n)}}}}var Dr=function(e,t,i,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(e,i):o?o.value=i:t.set(e,i),i},We=function(e,t,i,n){if(i==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?n:i==="a"?n.call(e):n?n.value:t.get(e)},Pe;class ri{constructor(){Pe.set(this,void 0),Dr(this,Pe,new Map,"f")}on(t,i){if(We(this,Pe,"f").has(t)){const n=We(this,Pe,"f").get(t)||[];n==null||n.push(i),We(this,Pe,"f").set(t,n)}else We(this,Pe,"f").set(t,[i])}off(t,i){if(We(this,Pe,"f").has(t)){const n=We(this,Pe,"f").get(t);if(Array.isArray(n)){for(let o=0;o<(n==null?void 0:n.length);o++)if(n[o]===i){n.splice(o,1);break}}We(this,Pe,"f").set(t,n||[])}}trigger(t,i){const n=We(this,Pe,"f").get(t);return Array.isArray(n)?(n.forEach(o=>{o(i)}),!0):!1}has(t){if(We(this,Pe,"f").has(t)){const i=We(this,Pe,"f").get(t);if(Array.isArray(i)&&i.length>0)return!0}return!1}destroy(){this.clear()}clear(){We(this,Pe,"f").clear()}}Pe=new WeakMap;function es(e,t){const i=(e.x-t.x)*(e.x-t.x)+(e.y-t.y)*(e.y-t.y);return i===0?i:Math.sqrt(i)}function rc(e,t){return es(e,t)/Math.abs(t.t-e.t)}function _r(e,t){return e.x===t.x&&e.y===t.y&&e.t===t.t}function ac(e,t){return _r(e,t)===!0&&e.f===t.f}function qn(e){return e>=0||e<0}function Or(e){return qn(e.x)&&qn(e.y)&&e.t>0}function lc(e){return Or(e)===!0&&e.f>=0}function ue(e,t){return{x:e.x+(t.x-e.x)/2,y:e.y+(t.y-e.y)/2}}var gi=function(e,t,i,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(e,i):o?o.value=i:t.set(e,i),i},ct=function(e,t,i,n){if(i==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?n:i==="a"?n.call(e):n?n.value:t.get(e)},Ri,He,Ui,Rn;class oi{constructor(t){Ri.add(this),He.set(this,void 0),Ui.set(this,void 0),gi(this,Ui,Vt(t.defaultStorage),"f"),gi(this,He,ct(this,Ri,"m",Rn).call(this),"f")}set(t,i){ct(this,He,"f")[t]=i}get(t){return ct(this,He,"f")[t]}getSnapshot(t){return(t==null?void 0:t.deepClone)===!0?Vt(ct(this,He,"f")):Object.assign({},ct(this,He,"f"))}clear(){gi(this,He,ct(this,Ri,"m",Rn).call(this),"f")}destroy(){gi(this,He,null,"f")}}He=new WeakMap,Ui=new WeakMap,Ri=new WeakSet,Rn=function(){return Vt(ct(this,Ui,"f"))};function ai(e){const{activeStore:t}=e;return{scale:t==null?void 0:t.scale,offsetTop:t==null?void 0:t.offsetTop,offsetBottom:t==null?void 0:t.offsetBottom,offsetLeft:t==null?void 0:t.offsetLeft,offsetRight:t==null?void 0:t.offsetRight}}function on(e){const{activeStore:t}=e;return{devicePixelRatio:t.devicePixelRatio,width:t==null?void 0:t.width,height:t==null?void 0:t.height,contextWidth:t==null?void 0:t.contextWidth,contextHeight:t==null?void 0:t.contextHeight}}function Wr(e){return e/Math.PI*180}function et(e){return e/180*Math.PI}function li(e,t,i,n){const o=et(t||0);i&&(o>0||o<0)&&(e.translate(i.x,i.y),e.rotate(o),e.translate(-i.x,-i.y)),n(e),i&&(o>0||o<0)&&(e.translate(i.x,i.y),e.rotate(-o),e.translate(-i.x,-i.y))}function Ye(e,t,i){const n=Fe(t);li(e,t.angle||0,n,()=>{i(e)})}function Fe(e){return{x:e.x+e.w/2,y:e.y+e.h/2}}function ts(e){const t=Math.min(e[0].x,e[1].x,e[2].x,e[3].x),i=Math.min(e[0].y,e[1].y,e[2].y,e[3].y),n=Math.max(e[0].x,e[1].x,e[2].x,e[3].x),o=Math.max(e[0].y,e[1].y,e[2].y,e[3].y),s={x:t,y:i,w:n-t,h:o-i};return Fe(s)}function kr(e,t,i){const n=Pn(e,t),o=Pn(e,i);return o!==null&&n!==null?n>Math.PI*3/2&&oMath.PI*3/2&&n0)return Math.PI}else if(n===0){if(i<0)return Math.PI*3/2;if(i>0)return Math.PI/2}return i>0&&n<0?Math.atan(Math.abs(i)/Math.abs(n)):i>0&&n>0?Math.PI-Math.atan(Math.abs(i)/Math.abs(n)):i<0&&n>0?Math.PI+Math.atan(Math.abs(i)/Math.abs(n)):i<0&&n<0?2*Math.PI-Math.atan(Math.abs(i)/Math.abs(n)):0}function le(e,t,i){let s=Pn(e,t)+i;s>Math.PI*2?s=s-Math.PI*2:s<0-Math.PI*2&&(s=s+Math.PI*2),s<0&&(s=s+Math.PI*2);const r=es(e,t);let a=0,c=0;return s===0?(a=0,c=0-r):s>0&&sMath.PI/2&&sMath.PI&&s<3/2*Math.PI?(a=0-Math.sin(s-Math.PI)*r,c=Math.cos(s-Math.PI)*r):s===3/2*Math.PI?(a=0-r,c=0):s>3/2*Math.PI&&s<2*Math.PI?(a=0-Math.sin(2*Math.PI-s)*r,c=0-Math.cos(2*Math.PI-s)*r):s===2*Math.PI&&(a=0,c=0-r),a+=e.x,c+=e.y,{x:a,y:c}}function $i(e,t){if((t==null?void 0:t.length)>0){let i=e.x,n=e.y;return t.forEach(o=>{const{x:s,y:r,w:a,h:c,angle:l=0}=o,d=Fe({x:s,y:r,w:a,h:c,angle:l}),f=le(d,{x:i,y:n},et(l));i=f.x,n=f.y}),{x:i,y:n}}return e}function is(e,t,i){const{x:n,y:o,w:s,h:r}=e;let a={x:n,y:o},c={x:n+s,y:o},l={x:n+s,y:o+r},d={x:n,y:o+r};if(i&&(i>0||i<0)){const f=et(Be(i));a=le(t,a,f),c=le(t,c,f),l=le(t,l,f),d=le(t,d,f)}return[a,c,l,d]}function wt(e){const{angle:t=0}=e,i=Fe(e);return is(e,i,t)}function eo(e,t,i){return[le(e,{x:t[0].x,y:t[0].y},i),le(e,{x:t[1].x,y:t[1].y},i),le(e,{x:t[2].x,y:t[2].y},i),le(e,{x:t[3].x,y:t[3].y},i)]}function Be(e){if(!(e>0||e<0)||e===0)return 0;let t=e%360;return t<0&&(t+=360),t}function jr(e,t){var i;const n=[];if(typeof t=="string"&&/^\d+(\.\d+)*$/.test(t)){const o=t.split(".");let s=e;for(;o.length>0;){const r=o.shift();if(typeof r=="string"){const a=s[parseInt(r)];a&&o.length===0?n.push(a.uuid):a.type==="group"&&o.length>0&&(s=((i=a==null?void 0:a.detail)===null||i===void 0?void 0:i.children)||[])}break}}return n}function cc(e,t){var i;let n=[];return Array.isArray(e==null?void 0:e.elements)&&((i=e==null?void 0:e.elements)===null||i===void 0?void 0:i.length)>0&&Array.isArray(t)&&t.length>0&&t.forEach(o=>{var s;typeof o=="number"?!((s=e==null?void 0:e.elements)===null||s===void 0)&&s[o]&&n.push(e.elements[o].uuid):typeof o=="string"&&(n=n.concat(jr(e.elements,o)))}),n}function ns(e){let t=!0;if(Array.isArray(e)){const i=[];e.forEach(n=>{var o;typeof n.uuid=="string"&&n.uuid?i.includes(n.uuid)?(t=!1,console.warn(`Duplicate uuids: ${n.uuid}`)):i.push(n.uuid):(t=!1,console.warn("Element missing uuid",n)),n.type==="group"&&(t=ns((o=n==null?void 0:n.detail)===null||o===void 0?void 0:o.children))})}return t}function Vr(e){var t;const i={x:0,y:0,w:0,h:0};let n=null;for(let s=0;s0||a.angle<0)){const c=wt(a);if(c.length===4){const l=[c[0].x,c[1].x,c[2].x,c[3].x],d=[c[0].y,c[1].y,c[2].y,c[3].y];a.x=Math.min(...l),a.y=Math.min(...d),a.w=Math.abs(Math.max(...l)-Math.min(...l)),a.h=Math.abs(Math.max(...d)-Math.min(...d))}}if(n){const c=Math.min(a.x,i.x),l=Math.min(a.y,i.y),d=Math.max(a.x+a.w,i.x+i.w),f=Math.max(a.y+a.h,i.y+i.h);i.x=c,i.y=l,i.w=Math.abs(d-c),i.h=Math.abs(f-l)}else i.x=a.x,i.y=a.y,i.w=a.w,i.h=a.h;n=a}return{x:Math.floor(i.x),y:Math.floor(i.y),w:Math.ceil(i.w),h:Math.ceil(i.h)}}function os(e,t){const i={x:0,y:0,w:0,h:0};e.forEach(o=>{const s={x:o.x,y:o.y,w:o.w,h:o.h,angle:o.angle};if(s.angle&&(s.angle>0||s.angle<0)){const d=wt(s);if(d.length===4){const f=[d[0].x,d[1].x,d[2].x,d[3].x],u=[d[0].y,d[1].y,d[2].y,d[3].y];s.x=Math.min(...f),s.y=Math.min(...u),s.w=Math.abs(Math.max(...f)-Math.min(...f)),s.h=Math.abs(Math.max(...u)-Math.min(...u))}}const r=Math.min(s.x,i.x),a=Math.min(s.y,i.y),c=Math.max(s.x+s.w,i.x+i.w),l=Math.max(s.y+s.h,i.y+i.h);i.x=r,i.y=a,i.w=Math.abs(c-r),i.h=Math.abs(l-a)}),t!=null&&t.extend&&(i.x=Math.min(i.x,0),i.y=Math.min(i.y,0));const n={contextWidth:i.w,contextHeight:i.h};return t!=null&&t.viewWidth&&(t!=null&&t.viewHeight)&&(t==null?void 0:t.viewWidth)>0&&(t==null?void 0:t.viewHeight)>0&&(t.viewWidth>i.x+i.w&&(n.contextWidth=t.viewWidth-i.x),t.viewHeight>i.y+i.h&&(n.contextHeight=t.viewHeight-i.y)),n}function Br(e,t,i){const n=os(e,{viewWidth:t.width,viewHeight:t.height,extend:i==null?void 0:i.extend});return(i==null?void 0:i.extend)===!0&&(n.contextWidth=Math.max(n.contextWidth,t.contextWidth),n.contextHeight=Math.max(n.contextHeight,t.contextHeight)),{contextSize:n}}function dc(e){const t=[],i=n=>{n.forEach(o=>{o.type==="image"&&vt(o.detail.src)?t.push(o.detail.src):o.type==="svg"&&vt(o.detail.svg)?t.push(o.detail.svg):o.type==="html"&&o.detail.html?t.push(o.detail.html):o.type==="group"&&Array.isArray(o.detail.children)&&i(o.detail.children)})};return i(e),t}function Yr(e,t){var i;let n=null;for(let o=0;o1)for(let s=0;s{const o=sn(n,t);o&&i.push(o)}),i}function sn(e,t){let i=null,n=t;for(let o=0;o{var r;for(let a=0;a=r&&n<=l&&s>=a}function rs(e){const{x:t,y:i,h:n,w:o}=e;return[{x:t,y:i},{x:t+o,y:i},{x:t+o,y:i+n},{x:t,y:i+n}]}function me(e){const{x:t,y:i,w:n,h:o,angle:s=0}=e;return s===0?rs(e):is(e,Fe({x:t,y:i,w:n,h:o,angle:s}),s)}function Gn(e){const t=[];let i=0,n=0;const o=[],s=[...e];for(let r=0;r0||f<0){const h=et(f);u=eo(g,u,h)}o.push({center:g,angle:f,radian:et(f)})}t.push(u)}return t}function Nr(e,t){const{groupQueue:i}=t;if(!(i.length>0))return[me(e)];const n=[...i,e];return Gn(n)}function si(e,t){return Nr(e,t).pop()||null}function Ur(e,t){const{scale:i,offsetX:n,offsetY:o}=e,{viewSizeInfo:s}=t,{width:r,height:a,contextWidth:c,contextHeight:l}=s,d=c*i,f=l*i,u=0-n*i,v=0-o*i,g=r-(d+u/i),h=a-(f+v/i);return{scale:i,offsetLeft:u,offsetTop:v,offsetRight:g,offsetBottom:h}}function $r(e){const{scale:t,point:i,viewScaleInfo:n}=e,{offsetLeft:o,offsetTop:s}=n,r=t/n.scale,a=i.x,c=i.y,l=a-a*r+(o*r-o),d=c-c*r+(s*r-s);return{moveX:l,moveY:d}}function Qr(e){const{moveX:t=0,moveY:i=0,viewScaleInfo:n,viewSizeInfo:o}=e,{scale:s}=n,{width:r,height:a,contextWidth:c,contextHeight:l}=o;let d=n.offsetLeft,f=n.offsetRight,u=n.offsetTop,v=n.offsetBottom;d+=t,u+=i;const g=c*s,h=l*s;return f=r-(g+d),v=a-(h+u),{scale:s,offsetTop:u,offsetLeft:d,offsetRight:f,offsetBottom:v}}function Ie(e,t){const{viewScaleInfo:i}=t,{x:n,y:o,w:s,h:r,angle:a}=e,{scale:c,offsetTop:l,offsetLeft:d}=i;return{x:n*c+d,y:o*c+l,w:s*c,h:r*c,angle:a}}function N(e,t){const{viewScaleInfo:i}=t,{x:n,y:o}=e,{scale:s,offsetTop:r,offsetLeft:a}=i;return{x:n*s+a,y:o*s+r}}function xe(e,t){return[N(e[0],t),N(e[1],t),N(e[2],t),N(e[3],t)]}function zn(e,t){const{context2d:i,element:n,viewScaleInfo:o}=t,{angle:s=0}=n,{x:r,y:a,w:c,h:l}=Ie(n,{viewScaleInfo:o}),d=wt({x:r,y:a,w:c,h:l,angle:s});if(d.length>=2){i.beginPath(),i.moveTo(d[0].x,d[0].y);for(let f=1;fs&&e.xa&&e.y0)for(let f=l.length-1;f>=0;f--){let u=0,v=0,g=0;for(let m=0;m<=f;m++)u+=l[m].x,v+=l[m].y,g+=l[m].angle||0;const h=l[f];if(h&&h.type==="group"&&Array.isArray((i=h.detail)===null||i===void 0?void 0:i.children))for(let m=0;m=0;f--){const u=r.elements[f];if(((o=u==null?void 0:u.operations)===null||o===void 0?void 0:o.invisible)!==!0&&zn(e,{context2d:s,element:u,viewScaleInfo:a,viewSizeInfo:c})){d.index=f,d.element=u;break}}return d}function mc(e,t){const{viewSizeInfo:i,viewScaleInfo:n}=t,{width:o,height:s}=i,{angle:r}=e,{x:a,y:c,w:l,h:d}=Ie(e,{viewScaleInfo:n}),f=wt({x:a,y:c,w:l,h:d,angle:r}),u={x:0,y:0,w:o,h:s},v=Math.min(f[0].x,f[1].x,f[2].x,f[3].x),g=Math.min(f[0].y,f[1].y,f[2].y,f[3].y),h=Math.max(f[0].x,f[1].x,f[2].x,f[3].x),m=Math.max(f[0].y,f[1].y,f[2].y,f[3].y),p={x:v,y:g,w:h-v,h:m-g};return Hr(u,p)}function rn(e,t){const{groupQueue:i}=t,n=si(e,{groupQueue:i}),o=ue(n[0],n[1]),s=ue(n[1],n[2]),r=ue(n[2],n[3]),a=ue(n[3],n[0]),c=n[0],l=n[1],d=n[2],f=n[3],u=Math.max(c.x,l.x,d.x,f.x),v=Math.max(c.y,l.y,d.y,f.y),g=Math.min(c.x,l.x,d.x,f.x),h=Math.min(c.y,l.y,d.y,f.y);return{center:{x:(u+g)/2,y:(v+h)/2},topLeft:c,topRight:l,bottomLeft:f,bottomRight:d,top:o,right:s,left:a,bottom:r}}function as(e){const t=Math.max(e.topLeft.x,e.topRight.x,e.bottomRight.x,e.bottomLeft.x),i=Math.max(e.topLeft.y,e.topRight.y,e.bottomRight.y,e.bottomLeft.y),n=Math.min(e.topLeft.x,e.topRight.x,e.bottomRight.x,e.bottomLeft.x),o=Math.min(e.topLeft.y,e.topRight.y,e.bottomRight.y,e.bottomLeft.y),s={x:e.center.x,y:e.center.y},r={x:n,y:o},a={x:t,y:o},c={x:t,y:i},l={x:n,y:i},d=ue(r,a),f=ue(l,c),u=ue(r,l),v=ue(a,c);return{center:s,topLeft:r,topRight:a,bottomLeft:l,bottomRight:c,top:d,right:v,left:u,bottom:f}}function yc(e,t){const{groupQueue:i,viewScaleInfo:n,range:o}=t,s=rn(e,{groupQueue:i}),{center:r,top:a,bottom:c,left:l,right:d,topLeft:f,topRight:u,bottomLeft:v,bottomRight:g}=s,h={center:N(r,{viewScaleInfo:n}),topLeft:N(f,{viewScaleInfo:n}),topRight:N(u,{viewScaleInfo:n}),bottomLeft:N(v,{viewScaleInfo:n}),bottomRight:N(g,{viewScaleInfo:n}),top:N(a,{viewScaleInfo:n}),right:N(d,{viewScaleInfo:n}),left:N(l,{viewScaleInfo:n}),bottom:N(c,{viewScaleInfo:n})};if(o===!0){const m=Math.max(h.topLeft.x,h.topRight.x,h.bottomRight.x,h.bottomLeft.x),p=Math.max(h.topLeft.y,h.topRight.y,h.bottomRight.y,h.bottomLeft.y),M=Math.min(h.topLeft.x,h.topRight.x,h.bottomRight.x,h.bottomLeft.x),w=Math.min(h.topLeft.y,h.topRight.y,h.bottomRight.y,h.bottomLeft.y),y={x:h.center.x,y:h.center.y},A={x:M,y:w},b={x:m,y:w},S={x:m,y:p},R={x:M,y:p},j=ue(A,b),O=ue(R,S),W=ue(A,R),_=ue(b,S);return{center:y,topLeft:A,topRight:b,bottomLeft:R,bottomRight:S,top:j,right:_,left:W,bottom:O}}return h}function wc(e,t){const{groupQueue:i,viewScaleInfo:n}=t,o=rn(e,{groupQueue:i}),{center:s,top:r,bottom:a,left:c,right:l,topLeft:d,topRight:f,bottomLeft:u,bottomRight:v}=o,g={center:N(s,{viewScaleInfo:n}),topLeft:N(d,{viewScaleInfo:n}),topRight:N(f,{viewScaleInfo:n}),bottomLeft:N(u,{viewScaleInfo:n}),bottomRight:N(v,{viewScaleInfo:n}),top:N(r,{viewScaleInfo:n}),right:N(l,{viewScaleInfo:n}),left:N(c,{viewScaleInfo:n}),bottom:N(a,{viewScaleInfo:n})},h=Math.max(g.topLeft.x,g.topRight.x,g.bottomRight.x,g.bottomLeft.x),m=Math.max(g.topLeft.y,g.topRight.y,g.bottomRight.y,g.bottomLeft.y),p=Math.min(g.topLeft.x,g.topRight.x,g.bottomRight.x,g.bottomLeft.x),M=Math.min(g.topLeft.y,g.topRight.y,g.bottomRight.y,g.bottomLeft.y),w={x:g.center.x,y:g.center.y},y={x:p,y:M},A={x:h,y:M},b={x:h,y:m},S={x:p,y:m},R=ue(y,A),j=ue(S,b),O=ue(y,S),W=ue(A,b);return{originRectInfo:o,rangeRectInfo:{center:w,topLeft:y,topRight:A,bottomLeft:S,bottomRight:b,top:R,right:W,left:O,bottom:j}}}function Kr(e,t){const i={},n=[],o=s=>{const r={isVisibleInView:!0,isGroup:s.type==="group",position:[...n]};let a=null;const c=ss(e,n);a=rn(s,{groupQueue:c||[]}),i[s.uuid]=Object.assign(Object.assign({},r),{originRectInfo:a,rangeRectInfo:J.angle(s.angle)?as(a):a}),s.type==="group"&&s.detail.children.forEach((l,d)=>{n.push(d),o(l),n.pop()})};return e.forEach((s,r)=>{n.push(r),o(s),n.pop()}),ls(i,t)}function qr(e,t){const i=Math.min(e.topLeft.x,e.topRight.x,e.bottomLeft.x,e.bottomRight.x),n=Math.max(e.topLeft.x,e.topRight.x,e.bottomLeft.x,e.bottomRight.x),o=Math.min(e.topLeft.y,e.topRight.y,e.bottomLeft.y,e.bottomRight.y),s=Math.max(e.topLeft.y,e.topRight.y,e.bottomLeft.y,e.bottomRight.y),r=Math.min(t.topLeft.x,t.topRight.x,t.bottomLeft.x,t.bottomRight.x),a=Math.max(t.topLeft.x,t.topRight.x,t.bottomLeft.x,t.bottomRight.x),c=Math.min(t.topLeft.y,t.topRight.y,t.bottomLeft.y,t.bottomRight.y),l=Math.max(t.topLeft.y,t.topRight.y,t.bottomLeft.y,t.bottomRight.y);return i<=a&&n>=r&&o<=l&&s>=c||a<=s&&a>=s&&a<=s&&a>=s}function ls(e,t){const i=ea(t);let n=0,o=0;return Object.keys(e).forEach(s=>{const r=e[s];r.isVisibleInView=qr(r.rangeRectInfo,i),r.isVisibleInView?n++:o++}),{viewVisibleInfoMap:e,visibleCount:n,invisibleCount:o}}function ea(e){const{viewScaleInfo:t,viewSizeInfo:i}=e,{scale:n,offsetTop:o,offsetLeft:s}=t,{width:r,height:a}=i,c=0-s/n,l=0-o/n,d=r/n,f=a/n,u=Fe({x:c,y:l,w:d,h:f}),v={x:c,y:l},g={x:c+d,y:l},h={x:c,y:l+f},m={x:c+d,y:l+f},p={x:c,y:u.y},M={x:u.x,y:l},w={x:c+d,y:u.y},y={x:u.x,y:l+f};return{center:u,topLeft:v,topRight:g,bottomLeft:h,bottomRight:m,left:p,top:M,right:w,bottom:y}}function pe(e,t){const{x:i,y:n}=e,{size:o,angle:s}=t;return{x:i-o/2,y:n-o/2,w:o,h:o,angle:s}}function vi(e,t){const{groupQueue:i,controllerSize:n,viewScaleInfo:o}=t,s=(n&&n>0?n:8)/o.scale,{x:r,y:a,w:c,h:l,angle:d=0}=e,f=[{uuid:gt(),x:r,y:a,w:c,h:l,angle:d,type:"group",detail:{children:[]}},...i];let u=0;f.forEach(({angle:Ge=0})=>{u+=Ge});const v=si(e,{groupQueue:i}),g=si({x:r-s*2,y:a-s*2,h:l+s*4,w:c+s*4,angle:d},{groupQueue:[...i]}),h=ue(v[0],v[1]),m=ue(v[1],v[2]),p=ue(v[2],v[3]),M=ue(v[3],v[0]),w=v[0],y=v[1],A=v[2],b=v[3],S=pe(h,{size:s,angle:u}),R=pe(m,{size:s,angle:u}),j=pe(p,{size:s,angle:u}),O=pe(M,{size:s,angle:u}),W=pe(w,{size:s,angle:u}),_=pe(y,{size:s,angle:u}),k=pe(b,{size:s,angle:u}),U=pe(A,{size:s,angle:u}),K=me(W),L=me(_),T=me(k),Y=me(U),E=[K[1],L[0],L[3],K[2]],$=[L[3],L[2],Y[1],Y[0]],G=[T[1],Y[0],Y[3],T[2]],x=[K[3],K[2],T[1],T[0]],Z=me(S),Q=me(R),P=me(j),z=me(O),I=ue(g[0],g[1]),C=pe(I,{size:s,angle:u}),H=me(C);return{elementWrapper:v,left:{type:"left",vertexes:x,center:M},right:{type:"right",vertexes:$,center:m},top:{type:"top",vertexes:E,center:h},bottom:{type:"bottom",vertexes:G,center:p},topLeft:{type:"top-left",vertexes:K,center:w},topRight:{type:"top-right",vertexes:L,center:y},bottomLeft:{type:"bottom-left",vertexes:T,center:b},bottomRight:{type:"bottom-right",vertexes:Y,center:A},leftMiddle:{type:"left-middle",vertexes:z,center:M},rightMiddle:{type:"right-middle",vertexes:Q,center:m},topMiddle:{type:"top-middle",vertexes:Z,center:h},bottomMiddle:{type:"bottom-middle",vertexes:P,center:p},rotate:{type:"rotate",vertexes:H,center:I}}}function to(e,t){const{controllerSize:i,viewScaleInfo:n}=t,o=i&&i>0?i:8,{x:s,y:r,w:a,h:c}=Ie(e,{viewScaleInfo:n}),l=Fe({x:s,y:r,w:a,h:c}),d={x:l.x,y:r},f={x:s+a,y:l.y},u={x:l.x,y:r+c},v={x:s,y:l.y},g={x:s,y:r},h={x:s+a,y:r},m={x:s+a,y:r+c},p={x:s,y:r+c},M=pe(d,{size:o,angle:0}),w=pe(f,{size:o,angle:0}),y=pe(u,{size:o,angle:0}),A=pe(v,{size:o,angle:0}),b=pe(g,{size:o,angle:0}),S=pe(h,{size:o,angle:0}),R=pe(p,{size:o,angle:0}),j=pe(m,{size:o,angle:0}),O=me(b),W=me(S),_=me(R),k=me(j),U=[O[1],W[0],W[3],O[2]],K=[W[3],W[2],k[1],k[0]],L=[_[1],k[0],k[3],_[2]],T=[O[3],O[2],_[1],_[0]],Y=me(M),E=me(w),$=me(y),G=me(A);return{left:{type:"left",vertexes:T,center:v},right:{type:"right",vertexes:K,center:f},top:{type:"top",vertexes:U,center:d},bottom:{type:"bottom",vertexes:L,center:u},topLeft:{type:"top-left",vertexes:O,center:g},topRight:{type:"top-right",vertexes:W,center:h},bottomLeft:{type:"bottom-left",vertexes:_,center:p},bottomRight:{type:"bottom-right",vertexes:k,center:m},leftMiddle:{type:"left-middle",vertexes:G,center:v},rightMiddle:{type:"right-middle",vertexes:E,center:f},topMiddle:{type:"top-middle",vertexes:Y,center:d},bottomMiddle:{type:"bottom-middle",vertexes:$,center:u}}}const ta=/([astvzqmhlc])([^astvzqmhlc]*)/gi,ia=/(-?\d+(?:\.\d+)?)/gi;function pc(e){const t=[];return e.replace(ta,(i,n,o)=>{const s=o.match(ia),r=s?s.map(Number):[],a={type:n,params:r};return t.push(a),i}),t}function Xn(e){let t="";return e.forEach(i=>{t+=i.type+i.params.join(" ")}),t}const na=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g,oa=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,sa=/^\s*$/,ra={};function io(e){const t={type:"element",name:"",isVoid:!1,attributes:{},children:[]},i=e.match(/<\/?([^\s]+?)[/\s>]/);if(i&&(t.name=i[1],(ra[i[1]]||e.charAt(e.length-2)==="/")&&(t.isVoid=!0),t.name.startsWith("!--"))){const s=e.indexOf("-->");return{type:"comment",name:null,attributes:{},children:[],isVoid:!1,comment:s!==-1?e.slice(4,s):""}}const n=new RegExp(na);let o=null;for(;o=n.exec(e),o!==null;)if(o[0].trim())if(o[1]){const s=o[1].trim();let r=[s,""];s.indexOf("=")>-1&&(r=s.split("=")),t.attributes[r[0]]=r[1],n.lastIndex--}else o[2]&&(t.attributes[o[2]]=o[3].trim().substring(1,o[3].length-1));return t}function bc(e){const t=[],i=[];let n,o=-1,s=!1;return e.replace(oa,(r,a)=>{const c=r.charAt(1)!=="/",l=r.startsWith("",e}}function Sc(e){return e.reduce(function(t,i){return t+cs("",i)},"")}function Mc(e,t){let i=.5;const n=(t==null?void 0:t.type)||"image/png";return t!=null&&t.radio&&(t==null?void 0:t.radio)>0&&(t==null?void 0:t.radio)<=1&&(i=t==null?void 0:t.radio),new Promise((o,s)=>{const r=new Image;r.addEventListener("load",()=>{const{width:a,height:c}=r,l=a*i,d=c*i;let f=document.createElement("canvas");f.width=l,f.height=d,f.getContext("2d").drawImage(r,0,0,l,d);const v=f.toDataURL(n);f=null,o(v)}),r.addEventListener("error",a=>{s(a)}),r.src=e})}function ye(e,t){let i=2;return typeof(t==null?void 0:t.decimalPlaces)<"u"&&(t==null?void 0:t.decimalPlaces)>=0&&(i=t.decimalPlaces),parseFloat(e.toFixed(i))}function la(e){return e[1]!=-1*e[3]||e[4]!=e[0]||e[0]*e[4]-e[3]*e[1]!=1?null:Math.acos(e[0])}function xc(e){const t=la(e);return typeof t=="number"?t*180/Math.PI:t}const Pi="Text Element";function Bt(){return{boxSizing:"border-box",borderWidth:0,borderColor:"#000000",shadowColor:"#000000",borderRadius:0,borderDash:[],shadowOffsetX:0,shadowOffsetY:0,shadowBlur:0,opacity:1,color:"#000000",textAlign:"left",verticalAlign:"top",fontSize:16,fontFamily:"sans-serif",fontWeight:400,minInlineSize:"auto",wordBreak:"break-all",overflow:"hidden"}}function ca(){return{background:"#D9D9D9"}}function da(){return{background:"#D9D9D9",radius:0}}function fa(e){const t=Bt();return{text:Pi,color:t.color,fontFamily:t.fontFamily,fontWeight:t.fontWeight,lineHeight:e.w/Pi.length,fontSize:e.w/Pi.length,textAlign:"center",verticalAlign:"middle"}}function ha(){return{svg:''}}function ua(){return{src:"data:image/svg+xml;base64,PHN2ZyAgIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiPjxwYXRoIGQ9Ik05MjggMTYwSDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NDBjMCAxNy43IDE0LjMgMzIgMzIgMzJoODMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnogbS00MCA2MzJIMTM2di0zOS45bDEzOC41LTE2NC4zIDE1MC4xIDE3OEw2NTguMSA0ODkgODg4IDc2MS42Vjc5MnogbTAtMTI5LjhMNjY0LjIgMzk2LjhjLTMuMi0zLjgtOS0zLjgtMTIuMiAwTDQyNC42IDY2Ni40bC0xNDQtMTcwLjdjLTMuMi0zLjgtOS0zLjgtMTIuMiAwTDEzNiA2NTIuN1YyMzJoNzUydjQzMC4yeiIgIGZpbGw9IiM1MTUxNTEiPjwvcGF0aD48cGF0aCBkPSJNMzA0IDQ1NmM0OC42IDAgODgtMzkuNCA4OC04OHMtMzkuNC04OC04OC04OC04OCAzOS40LTg4IDg4IDM5LjQgODggODggODh6IG0wLTExNmMxNS41IDAgMjggMTIuNSAyOCAyOHMtMTIuNSAyOC0yOCAyOC0yOC0xMi41LTI4LTI4IDEyLjUtMjggMjgtMjh6IiAgZmlsbD0iIzUxNTE1MSI+PC9wYXRoPjwvc3ZnPg=="}}function ga(){return{children:[],background:"#D9D9D9",overflow:"hidden"}}const va=Bt();function an(e,t){const{viewScaleInfo:i}=t,{scale:n}=i;let{borderRadius:o,borderDash:s}=e.detail;const r=Array.isArray(s)&&s.length>0,{boxSizing:a=va.boxSizing,borderWidth:c}=e.detail;Array.isArray(c)&&(o=0);let{x:l,y:d,w:f,h:u}=e,v=[0,0,0,0];if(typeof o=="number"){const h=o*n;v=[h,h,h,h]}else Array.isArray(o)&&(o==null?void 0:o.length)===4&&(v=[o[0]*n,o[1]*n,o[2]*n,o[3]*n]);let g=0;return typeof c=="number"&&(g=(c||0)*n),a==="border-box"&&!r?(l=e.x+g/2,d=e.y+g/2,f=e.w-g,u=e.h-g):a==="content-box"?(l=e.x-g/2,d=e.y-g/2,f=e.w+g,u=e.h+g):(l=e.x,d=e.y,f=e.w,u=e.h),f=Math.max(f,1),u=Math.max(u,1),v=v.map(h=>Math.min(h,f/2,u/2)),{x:l,y:d,w:f,h:u,radiusList:v}}const Me=e=>ye(e,{decimalPlaces:4});function ds(e,t){const{detail:i}=e,{xRatio:n,yRatio:o,maxRatio:s}=t,r=(n+o)/2,{borderWidth:a,borderRadius:c,borderDash:l,shadowOffsetX:d,shadowOffsetY:f,shadowBlur:u}=i;if(typeof a=="number")i.borderWidth=Me(a*r);else if(Array.isArray(i.borderWidth)){const v=a;i.borderWidth=[Me(v[0]*o),Me(v[1]*n),Me(v[2]*o),Me(v[3]*n)]}if(typeof c=="number")i.borderRadius=Me(c*r);else if(Array.isArray(i.borderRadius)){const v=c;i.borderRadius=[v[0]*n,v[1]*n,v[2]*o,v[3]*o]}Array.isArray(l)&&l.forEach((v,g)=>{i.borderDash[g]=Me(v*s)}),typeof d=="number"&&(i.shadowOffsetX=Me(d*s)),typeof f=="number"&&(i.shadowOffsetX=Me(f*s)),typeof u=="number"&&(i.shadowOffsetX=Me(u*s))}function ma(e,t){const{xRatio:i,yRatio:n}=t,{x:o,y:s,w:r,h:a}=e;e.x=Me(o*i),e.y=Me(s*n),e.w=Me(r*i),e.h=Me(a*n),ds(e,t)}function ya(e,t){const{minRatio:i,maxRatio:n}=t,{fontSize:o,lineHeight:s}=e.detail,r=(i+n)/2;o&&o>0&&(e.detail.fontSize=Me(o*r)),s&&s>0&&(e.detail.lineHeight=Me(s*r))}function fs(e,t){const{type:i}=e;ma(e,t),i==="circle"||(i==="text"?ya(e,t):i==="image"||i==="svg"||i==="html"||i==="path"||i==="group"&&Array.isArray(e.detail.children)&&e.detail.children.forEach(n=>{fs(n,t)}))}function Hn(e,t){const i=t.w&&t.w>0?t.w:e.w,n=t.h&&t.h>0?t.h:e.h,o=i/e.w,s=n/e.h;if(o===s&&o===1)return e;const r=Math.min(o,s),a=Math.max(o,s);e.w=i,e.h=n;const c={xRatio:o,yRatio:s,minRatio:r,maxRatio:a};return e.type==="group"&&Array.isArray(e.detail.children)&&e.detail.children.forEach(l=>{fs(l,c)}),ds(e,c),e}const fn=200,hn=200;function wa(e,t){let i=0,n=0,o=fn,s=hn;if(t){const{viewScaleInfo:a,viewSizeInfo:c}=t,{scale:l,offsetLeft:d,offsetTop:f}=a,{width:u,height:v}=c,g=u/4,h=v/4;fn>=g?o=g/l:o=fn/l,hn>=h?s=h/l:s=hn/l,["circle","svg","image"].includes(e)?o=s=Math.max(o,s):e==="text"&&(s=o/Pi.length*2),i=(0-d+u/2-o*l/2)/l,n=(0-f+v/2-s*l/2)/l}return{x:i,y:n,w:o,h:s}}function pa(e,t,i){const n=wa(e,i);let o={};return e==="rect"?o=ca():e==="circle"?o=da():e==="text"?o=fa(n):e==="svg"?o=ha():e==="image"?o=ua():e==="group"&&(o=ga()),Object.assign(Object.assign(Object.assign({},n),t),{uuid:gt(),type:e,detail:Object.assign(Object.assign({},o),t.detail||{})})}function Nn(e,t,i){let n=!1;if(t.length===1){const o=t[0];i.splice(o,0,e),n=!0}else if(t.length>1){let o=i;for(let s=0;s1){let n=t;for(let o=0;o=0;a++)n[a]!==i[a]&&n[a]=0&&(i[r]=i[r]+1),Un(i,e)}return{elements:e,from:i,to:n}}function us(e,t){var i;const n=Object.keys(t);for(let o=0;o{e[s][a]=r}),e[s]=[...e[s],...t[s]])))}return e}function gs(e,t,i){var n,o;let s=null;for(let r=0;r0||t.h&&t.h>0)&&Hn(a,{w:t.w,h:t.h}),us(a,t),s=a;break}else a.type==="group"&&(s=gs(e,t,((o=a==null?void 0:a.detail)===null||o===void 0?void 0:o.children)||[]))}return s}function Sa(e,t,i){var n;const o=sn(e,i);return o&&(o.type==="group"&&((n=o.operations)===null||n===void 0?void 0:n.deepResize)===!0&&(t.w&&t.w>0||t.h&&t.h>0)&&Hn(o,{w:t.w,h:t.h}),us(o,t)),o}function Ma(e,t){var i,n,o,s,r,a,c,l,d,f;let u=0,v=0,g=1,h=((n=(i=e==null?void 0:e.elements)===null||i===void 0?void 0:i[0])===null||n===void 0?void 0:n.x)||0,m=((s=(o=e==null?void 0:e.elements)===null||o===void 0?void 0:o[0])===null||s===void 0?void 0:s.y)||0,p=((a=(r=e==null?void 0:e.elements)===null||r===void 0?void 0:r[0])===null||a===void 0?void 0:a.w)||0,M=((l=(c=e==null?void 0:e.elements)===null||c===void 0?void 0:c[0])===null||l===void 0?void 0:l.h)||0;const{width:w,height:y}=t.viewSizeInfo;if(e.layout&&((f=(d=e.layout)===null||d===void 0?void 0:d.detail)===null||f===void 0?void 0:f.overflow)==="hidden"?(h=0,m=0,p=e.layout.w||0,M=e.layout.h||0):e.elements.forEach(b=>{const S={x:b.x,y:b.y,w:b.w,h:b.h,angle:b.angle};if(S.angle&&(S.angle>0||S.angle<0)){const _=wt(S);if(_.length===4){const k=[_[0].x,_[1].x,_[2].x,_[3].x],U=[_[0].y,_[1].y,_[2].y,_[3].y];S.x=Math.min(...k),S.y=Math.min(...U),S.w=Math.abs(Math.max(...k)-Math.min(...k)),S.h=Math.abs(Math.max(...U)-Math.min(...U))}}const R=Math.min(S.x,h),j=Math.min(S.y,m),O=Math.max(S.x+S.w,h+p),W=Math.max(S.y+S.h,m+M);h=R,m=j,p=Math.abs(O-R),M=Math.abs(W-j)}),e.layout){const{x:b,y:S,w:R,h:j}=e.layout;J.x(b)&&J.y(S)&&J.w(R)&&J.h(j)&&(h=Math.min(h,b),m=Math.min(m,S),p=Math.max(p,R),M=Math.max(M,j))}if(p>0&&M>0){const b=ye(w/p,{decimalPlaces:4}),S=ye(y/M,{decimalPlaces:4});g=Math.min(b,S,1),u=(p*g-w)/2/g+h,v=(M*g-y)/2/g+m}return{offsetX:ye(u,{decimalPlaces:0}),offsetY:ye(v,{decimalPlaces:0}),scale:g}}function xa(e){let t=0,i=0;if(e){const{viewScaleInfo:o,viewSizeInfo:s}=e,{offsetLeft:r,offsetTop:a,scale:c}=o,{width:l,height:d}=s;t=0-r+l/c/2,i=0-a+d/c/2}return{x:t,y:i}}function Ac(e,t){const{type:i}=t,n=Object.assign({},t.content);if(i==="addElement"){const o=t,{element:s,position:r}=o.content;(r==null?void 0:r.length)>0?Nn(s,[...r],e.elements):e.elements.push(s)}else if(i==="deleteElement"){const o=t,{position:s}=o.content;Un(s,e.elements)}else if(i==="moveElement"){const o=t,{from:s,to:r}=o.content,a=hs(e.elements,{from:s,to:r});n.from=a.from,n.to=a.to,e.elements=a.elements}else if(i==="updateElement"){const o=t,{position:s,afterModifiedElement:r}=o.content;Sa(s,r,e.elements)}return{data:e,content:n}}const Aa=["-apple-system",'"system-ui"',' "Segoe UI"'," Roboto",'"Helvetica Neue"',"Arial",'"Noto Sans"'," sans-serif"];function vs(e){return[e,...Aa].join(", ")}function Ln(e,t,i){if(typeof t=="string")return t;const{viewElementSize:n,viewScaleInfo:o,opacity:s=1}=i,{x:r,y:a}=n,{scale:c}=o;if((t==null?void 0:t.type)==="linear-gradient"){const{start:l,end:d,stops:f}=t,u={x:r+l.x*c,y:a+l.y*c},v={x:r+d.x*c,y:a+d.y*c},g=e.createLinearGradient(u.x,u.y,v.x,v.y);return f.forEach(h=>{g.addColorStop(h.offset,Kn(h.color,s))}),g}if((t==null?void 0:t.type)==="radial-gradient"){const{inner:l,outer:d,stops:f}=t,u={x:r+l.x*c,y:a+l.y*c,radius:l.radius*c},v={x:r+d.x*c,y:a+d.y*c,radius:d.radius*c},g=e.createRadialGradient(u.x,u.y,u.radius,v.x,v.y,v.radius);return f.forEach(h=>{g.addColorStop(h.offset,Kn(h.color,s))}),g}return"#000000"}const En=Bt();function mt(e){var t,i,n,o;let s=1;return((t=e==null?void 0:e.detail)===null||t===void 0?void 0:t.opacity)!==void 0&&((i=e==null?void 0:e.detail)===null||i===void 0?void 0:i.opacity)>=0&&((n=e==null?void 0:e.detail)===null||n===void 0?void 0:n.opacity)<=1&&(s=(o=e==null?void 0:e.detail)===null||o===void 0?void 0:o.opacity),s}function ci(e,t,i){const{pattern:n,renderContent:o,originElem:s,calcElemSize:r,viewScaleInfo:a,viewSizeInfo:c}=i||{},{parentOpacity:l}=i,d=mt(s)*l,{clipPath:f,clipPathStrokeColor:u,clipPathStrokeWidth:v}=s.detail,g=()=>{e.globalAlpha=d,ms(e,t,{pattern:n,viewScaleInfo:a,viewSizeInfo:c}),o==null||o(),ys(e,t,{viewScaleInfo:a,viewSizeInfo:c}),e.globalAlpha=l};f?(Ia(e,t,{originElem:s,calcElemSize:r,viewScaleInfo:a,viewSizeInfo:c,renderContent:()=>{g()}}),typeof v=="number"&&v>0&&u&&Ra(e,t,{originElem:s,calcElemSize:r,viewScaleInfo:a,viewSizeInfo:c,parentOpacity:l})):g()}function Ia(e,t,i){const{renderContent:n,originElem:o,calcElemSize:s,viewSizeInfo:r}=i,a=r.devicePixelRatio,{clipPath:c}=(o==null?void 0:o.detail)||{};if(c&&s&&c.commands){const{x:l,y:d,w:f,h:u}=s,{originW:v,originH:g,originX:h,originY:m}=c,p=f/v,M=u/g,w=h*p,y=m*M,A=l-w,b=d-y;e.save(),e.translate(A,b),e.scale(a*p,a*M);const S=Xn(c.commands||[]),R=new Path2D(S);e.clip(R),e.translate(0-A,0-b),e.setTransform(1,0,0,1,0,0),Ye(e,Object.assign({},t),()=>{n==null||n()}),e.restore()}else n==null||n()}function Ra(e,t,i){const{renderContent:n,originElem:o,calcElemSize:s,viewSizeInfo:r,parentOpacity:a}=i,c=r.devicePixelRatio,{clipPath:l,clipPathStrokeColor:d,clipPathStrokeWidth:f}=(o==null?void 0:o.detail)||{};if(l&&s&&l.commands&&typeof f=="number"&&f>0&&d){const{x:u,y:v,w:g,h}=s,{originW:m,originH:p,originX:M,originY:w}=l,y=g/m,A=h/p,b=M*y,S=w*A,R=u-b,j=v-S;e.save(),e.globalAlpha=a,e.translate(R,j),e.scale(c*y,c*A);const O=Xn(l.commands||[]),W=new Path2D(O);e.strokeStyle=d,e.lineWidth=f,e.stroke(W),e.translate(0-R,0-j),e.setTransform(1,0,0,1,0,0),Ye(e,Object.assign({},t),()=>{n==null||n()}),e.restore()}else n==null||n()}function ms(e,t,i){var n,o;const{pattern:s,viewScaleInfo:r,viewSizeInfo:a}=i,c=[];if(t.detail.background||s){const{x:l,y:d,w:f,h:u,radiusList:v}=an(t,{viewScaleInfo:r,viewSizeInfo:a});if(e.beginPath(),e.moveTo(l+v[0],d),e.arcTo(l+f,d,l+f,d+u,v[1]),e.arcTo(l+f,d+u,l,d+u,v[2]),e.arcTo(l,d+u,l,d,v[3]),e.arcTo(l,d,l+f,d,v[0]),e.closePath(),typeof s=="string")e.fillStyle=s;else if(["CanvasPattern"].includes(Ut.type(s)))e.fillStyle=s;else if(typeof t.detail.background=="string")e.fillStyle=t.detail.background;else if(((n=t.detail.background)===null||n===void 0?void 0:n.type)==="linear-gradient"){const g=Ln(e,t.detail.background,{viewElementSize:{x:l,y:d,w:f,h:u},viewScaleInfo:r,opacity:e.globalAlpha});e.fillStyle=g}else if(((o=t.detail.background)===null||o===void 0?void 0:o.type)==="radial-gradient"){const g=Ln(e,t.detail.background,{viewElementSize:{x:l,y:d,w:f,h:u},viewScaleInfo:r,opacity:e.globalAlpha});if(e.fillStyle=g,c&&c.length>0)for(let h=0;h<(c==null?void 0:c.length);h++){const m=c[h];m.method==="translate"?e.translate(m.args[0]+l,m.args[1]+d):m.method==="rotate"?e.rotate(...m.args):m.method==="scale"&&e.scale(...m.args)}}e.fill(),c&&c.length>0&&e.setTransform(1,0,0,1,0,0)}}function ys(e,t,i){if(t.detail.borderWidth===0||!Ni(t.detail.borderColor))return;const{viewScaleInfo:n}=i,{scale:o}=n;let s=En.borderColor;Ni(t.detail.borderColor)===!0&&(s=t.detail.borderColor);const{borderWidth:r,borderRadius:a,borderDash:c,boxSizing:l=En.boxSizing}=t.detail;let d=0;typeof r=="number"&&(d=r||1),d=d*o;let f=[0,0,0,0];if(typeof a=="number"){const p=a*o;f=[p,p,p,p]}else Array.isArray(a)&&(a==null?void 0:a.length)===4&&(f=[a[0]*o,a[1]*o,a[2]*o,a[3]*o]);e.strokeStyle=s;let u=[];Array.isArray(c)&&c.length>0&&(u=c.map(p=>Math.ceil(p*o)));let v=0,g=0,h=0,m=0;if(Array.isArray(r)&&(v=(r[0]||0)*o,g=(r[1]||0)*o,h=(r[2]||0)*o,m=(r[3]||0)*o),m||g||v||h){e.lineCap="butt";let{x:p,y:M,w,h:y}=t;l==="border-box"?(p=p+m/2,M=M+v/2,w=w-m/2-g/2,y=y-v/2-h/2):l==="content-box"?(p=p-m/2,M=M-v/2,w=w+m/2+g/2,y=y+v/2+h/2):(p=t.x,M=t.y,w=t.w,y=t.h),v&&(e.beginPath(),e.lineWidth=v,e.moveTo(p-m/2,M),e.lineTo(p+w+g/2,M),e.closePath(),e.stroke()),g&&(e.beginPath(),e.lineWidth=g,e.moveTo(p+w,M-v/2),e.lineTo(p+w,M+y+h/2),e.closePath(),e.stroke()),h&&(e.beginPath(),e.lineWidth=h,e.moveTo(p-m/2,M+y),e.lineTo(p+w+g/2,M+y),e.closePath(),e.stroke()),m&&(e.beginPath(),e.lineWidth=m,e.moveTo(p,M-v/2),e.lineTo(p,M+y+h/2),e.closePath(),e.stroke())}else{let{x:p,y:M,w,h:y}=t;l==="border-box"?(p=t.x+d/2,M=t.y+d/2,w=t.w-d,y=t.h-d):l==="content-box"?(p=t.x-d/2,M=t.y-d/2,w=t.w+d,y=t.h+d):(p=t.x,M=t.y,w=t.w,y=t.h),u.length>0?e.lineCap="butt":e.lineCap="square",w=Math.max(w,1),y=Math.max(y,1),f=f.map(A=>Math.min(A,w/2,y/2)),e.setLineDash(u),e.lineWidth=d,e.beginPath(),e.moveTo(p+f[0],M),e.arcTo(p+w,M,p+w,M+y,f[1]),e.arcTo(p+w,M+y,p,M+y,f[2]),e.arcTo(p,M+y,p,M,f[3]),e.arcTo(p,M,p+w,M,f[0]),e.closePath(),e.stroke()}e.setLineDash([])}function Yt(e,t,i){const{detail:n}=t,{viewScaleInfo:o,renderContent:s}=i,{shadowColor:r,shadowOffsetX:a,shadowOffsetY:c,shadowBlur:l}=n;J.number(l)?(e.save(),e.shadowColor=r||En.shadowColor,e.shadowOffsetX=(a||0)*o.scale,e.shadowOffsetY=(c||0)*o.scale,e.shadowBlur=(l||0)*o.scale,s(),e.restore()):(e.save(),e.shadowColor="transparent",e.shadowOffsetX=0,e.shadowOffsetY=0,e.shadowBlur=0,s(),e.restore())}function Pa(e,t,i){const{detail:n,angle:o}=t,{viewScaleInfo:s,viewSizeInfo:r,parentOpacity:a}=i,{background:c="#000000",borderColor:l="#000000",boxSizing:d,borderWidth:f=0,borderDash:u}=n;let v=0;typeof f=="number"&&f>0?v=f:Array.isArray(f)&&typeof f[0]=="number"&&f[0]>0&&(v=f[0]),v=v*s.scale;const{x:g,y:h,w:m,h:p}=Ie({x:t.x,y:t.y,w:t.w,h:t.h},{viewScaleInfo:s})||t,M=Object.assign(Object.assign({},t),{x:g,y:h,w:m,h:p,angle:o});Ye(e,{x:g,y:h,w:m,h:p,angle:o},()=>{Yt(e,M,{viewScaleInfo:s,viewSizeInfo:r,renderContent:()=>{let w=m/2,y=p/2;const A=g+w,b=h+y,S=w,R=y;if(v>0&&(d==="content-box"?(w=w,y=y):d==="center-line"?(w=w-v/2,y=y-v/2):(w=w-v,y=y-v)),w>=0&&y>=0){const j=mt(M)*a;e.globalAlpha=j,e.beginPath();const O=Ln(e,c,{viewElementSize:{x:g,y:h,w:m,h:p},viewScaleInfo:s,opacity:e.globalAlpha});if(e.fillStyle=O,e.circle(A,b,S,R,0,0,2*Math.PI),e.closePath(),e.fill(),e.globalAlpha=a,typeof v=="number"&&v>0){const W=v/2+w,_=v/2+y;if(e.beginPath(),u){const k=u.map(U=>U*s.scale);e.setLineDash(k)}e.strokeStyle=l,e.lineWidth=v,e.circle(A,b,W,_,0,0,2*Math.PI),e.closePath(),e.stroke(),e.setLineDash([])}}}})})}function za(e,t,i){const{viewScaleInfo:n,viewSizeInfo:o,parentOpacity:s}=i,{x:r,y:a,w:c,h:l,angle:d}=Ie(t,{viewScaleInfo:n})||t,f=Object.assign(Object.assign({},t),{x:r,y:a,w:c,h:l,angle:d});Ye(e,{x:r,y:a,w:c,h:l,angle:d},()=>{Yt(e,f,{viewScaleInfo:n,viewSizeInfo:o,renderContent:()=>{ci(e,f,{originElem:t,calcElemSize:{x:r,y:a,w:c,h:l,angle:d},viewScaleInfo:n,viewSizeInfo:o,parentOpacity:s,renderContent:()=>{}})}})})}function La(e,t,i){const n=i.loader.getContent(t),{viewScaleInfo:o,viewSizeInfo:s,parentOpacity:r}=i,{x:a,y:c,w:l,h:d,angle:f}=Ie(t,{viewScaleInfo:o})||t,u=Object.assign(Object.assign({},t),{x:a,y:c,w:l,h:d,angle:f});Ye(e,{x:a,y:c,w:l,h:d,angle:f},()=>{Yt(e,u,{viewScaleInfo:o,viewSizeInfo:s,renderContent:()=>{ci(e,u,{originElem:t,calcElemSize:{x:a,y:c,w:l,h:d,angle:f},viewScaleInfo:o,viewSizeInfo:s,parentOpacity:r,renderContent:()=>{if(!n&&!i.loader.isDestroyed()&&i.loader.load(t,i.elementAssets||{}),t.type==="image"&&n){e.globalAlpha=mt(t)*r;const{x:v,y:g,w:h,h:m,radiusList:p}=an(u,{viewScaleInfo:o,viewSizeInfo:s}),{detail:M}=t,{scaleMode:w,originW:y=0,originH:A=0}=M,b=e.$undoPixelRatio(y),S=e.$undoPixelRatio(A);if(e.save(),e.fillStyle="transparent",e.beginPath(),e.moveTo(v+p[0],g),e.arcTo(v+h,g,v+h,g+m,p[1]),e.arcTo(v+h,g+m,v,g+m,p[2]),e.arcTo(v,g+m,v,g,p[3]),e.arcTo(v,g,v+h,g,p[0]),e.closePath(),e.fill(),e.clip(),w&&A&&y){let R=0,j=0,O=b,W=S;const _=v,k=g,U=h,K=m;if(b>t.w||S>t.h){if(w==="fill"){const L=Math.max(t.w/b,t.h/S),T=b*L,Y=S*L;R=(T-t.w)/2/L,j=(Y-t.h)/2/L,O=t.w/L,W=t.h/L}else if(w==="tile")R=0,j=0,O=t.w,W=t.h;else if(w==="fit"){const L=Math.min(t.w/b,t.h/S);R=(b-t.w/L)/2,j=(S-t.h/L)/2,O=t.w/L,W=t.h/L}}e.drawImage(n,R,j,O,W,_,k,U,K)}else e.drawImage(n,v,g,h,m);e.globalAlpha=r,e.restore()}}})}})})}function Ea(e,t,i){const n=i.loader.getContent(t),{viewScaleInfo:o,viewSizeInfo:s,parentOpacity:r}=i,{x:a,y:c,w:l,h:d,angle:f}=Ie(t,{viewScaleInfo:o,viewSizeInfo:s})||t;Ye(e,{x:a,y:c,w:l,h:d,angle:f},()=>{!n&&!i.loader.isDestroyed()&&i.loader.load(t,i.elementAssets||{}),t.type==="svg"&&n&&(e.globalAlpha=mt(t)*r,e.drawImage(n,a,c,l,d),e.globalAlpha=r)})}function Ta(e,t,i){const n=i.loader.getContent(t),{viewScaleInfo:o,viewSizeInfo:s,parentOpacity:r}=i,{x:a,y:c,w:l,h:d,angle:f}=Ie(t,{viewScaleInfo:o,viewSizeInfo:s})||t;Ye(e,{x:a,y:c,w:l,h:d,angle:f},()=>{!n&&!i.loader.isDestroyed()&&i.loader.load(t,i.elementAssets||{}),t.type==="html"&&n&&(e.globalAlpha=mt(t)*r,e.drawImage(n,a,c,l,d),e.globalAlpha=r)})}const un=Bt();function Ca(e,t,i){return i<.5&&e-.15?!0:e>=t}function Da(e,t,i){const{viewScaleInfo:n,viewSizeInfo:o,parentOpacity:s}=i,{x:r,y:a,w:c,h:l,angle:d}=Ie(t,{viewScaleInfo:n})||t,f=Object.assign(Object.assign({},t),{x:r,y:a,w:c,h:l,angle:d});Ye(e,{x:r,y:a,w:c,h:l,angle:d},()=>{ci(e,f,{originElem:t,calcElemSize:{x:r,y:a,w:c,h:l,angle:d},viewScaleInfo:n,viewSizeInfo:o,parentOpacity:s,renderContent:()=>{const u=Object.assign(Object.assign({},un),t.detail),v=u.fontSize||un.fontSize,g=v*n.scale;if(g<2)return;const m=(u.lineHeight||v)*n.scale;e.fillStyle=t.detail.color||un.color,e.textBaseline="top",e.$setFont({fontWeight:u.fontWeight,fontSize:g,fontFamily:vs(u.fontFamily)});let p=u.text.replace(/\r\n/gi,` -`);u.textTransform==="lowercase"?p=p.toLowerCase():u.textTransform==="uppercase"&&(p=p.toUpperCase());const M=m,w=p.split(` -`),y=[];let A=0;w.forEach((R,j)=>{if(u.minInlineSize==="maxContent")y.push({text:R,width:e.$undoPixelRatio(e.measureText(R).width)});else{let O="",_=R.split("");if(u.wordBreak==="normal"){const k=" ",U=R.split(k);_=[],U.forEach((K,L)=>{_.push(K),L0){for(let k=0;k<_.length&&(Ca(e.$doPixelRatio(c),e.measureText(O+_[k]).width,n.scale)?O+=_[k]||"":(y.push({text:O,width:e.$undoPixelRatio(e.measureText(O).width)}),O=_[k]||"",A++),!((A+1)*M>l&&u.overflow==="hidden"));k++)if(_.length-1===k&&(A+1)*M<=l){y.push({text:O,width:e.$undoPixelRatio(e.measureText(O).width)}),jg&&(S=(M-g)/2),y.length*M{let W=r;u.textAlign==="center"?W=r+(c-j.width)/2:u.textAlign==="right"&&(W=r+(c-j.width)),e.fillText(j.text,W,R+M*O+S)})}}})})}var _a=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(i[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,n=Object.getOwnPropertySymbols(e);o{ci(e,k,{originElem:U,calcElemSize:{x:g,y:h,w:m,h:p,angle:M},viewScaleInfo:f,viewSizeInfo:u,parentOpacity:v,renderContent:()=>{Yt(e,_,{viewScaleInfo:f,viewSizeInfo:u,renderContent:()=>{e.save(),e.translate(S,R),e.scale(W*w/f.scale,W*y/f.scale);const K=Xn(s.commands||[]),L=new Path2D(K);s.fill&&(typeof s.fill=="string"?e.fillStyle=s.fill:e.fillStyle="transparent"),s.fill&&e.fill(L,d),s.stroke&&s.strokeWidth!==0&&(e.strokeStyle=s.stroke,e.lineWidth=(s.strokeWidth||1)/u.devicePixelRatio,e.lineCap=s.strokeLineCap||"square",e.stroke(L)),e.translate(-S,-R),e.restore()}})}})})}const no=.4;function ws(e,t,i){var n,o,s;if(((n=t==null?void 0:t.operations)===null||n===void 0?void 0:n.invisible)===!0)return;const{w:r,h:a}=t,{scale:c}=i.viewScaleInfo;if(c<1&&(r*c{e.globalAlpha=mt(t)*s,Yt(e,f,{viewScaleInfo:n,viewSizeInfo:o,renderContent:()=>{ci(e,f,{originElem:t,calcElemSize:{x:r,y:a,w:c,h:l,angle:d},viewScaleInfo:n,viewSizeInfo:o,parentOpacity:s,renderContent:()=>{const{x:u,y:v,w:g,h,radiusList:m}=an(f,{viewScaleInfo:n,viewSizeInfo:o});if(t.detail.overflow==="hidden"&&(e.save(),e.fillStyle="transparent",e.beginPath(),e.moveTo(u+m[0],v),e.arcTo(u+g,v,u+g,v+h,m[1]),e.arcTo(u+g,v+h,u,v+h,m[2]),e.arcTo(u,v+h,u,v,m[3]),e.arcTo(u,v,u+g,v,m[0]),e.closePath(),e.fill(),e.clip()),Array.isArray(t.detail.children)){const{parentElementSize:p}=i,M={x:p.x+t.x,y:p.y+t.y,w:t.w||p.w,h:t.h||p.h,angle:t.angle},{calculator:w}=i;for(let y=0;y{ms(e,v,{viewScaleInfo:o,viewSizeInfo:s})}}),t.detail.overflow==="hidden"){const{viewScaleInfo:g,viewSizeInfo:h}=i,m=Object.assign({uuid:"layout",type:"group"},t),p=Ie(m,{viewScaleInfo:g})||m,M=Object.assign(Object.assign({},m),p),{x:w,y,w:A,h:b,radiusList:S}=an(M,{viewScaleInfo:g,viewSizeInfo:h});e.save(),e.fillStyle="transparent",e.beginPath(),e.moveTo(w+S[0],y),e.arcTo(w+A,y,w+A,y+b,S[1]),e.arcTo(w+A,y+b,w,y+b,S[2]),e.arcTo(w,y+b,w,y,S[3]),e.arcTo(w,y,w+A,y,S[0]),e.closePath(),e.fill(),e.clip()}n(e),t.detail.overflow==="hidden"&&e.restore(),ys(e,v,{viewScaleInfo:o,viewSizeInfo:s}),e.globalAlpha=r}function Va(e,t,i){if(typeof(t==null?void 0:t.background)=="string"){const{viewSizeInfo:n}=i,{width:o,height:s}=n;e.globalAlpha=1,e.fillStyle=t.background,e.fillRect(0,0,o,s)}}var gn=function(e,t,i,n){function o(s){return s instanceof i?s:new i(function(r){r(s)})}return new(i||(i=Promise))(function(s,r){function a(d){try{l(n.next(d))}catch(f){r(f)}}function c(d){try{l(n.throw(d))}catch(f){r(f)}}function l(d){d.done?s(d.value):o(d.value).then(a,c)}l((n=n.apply(e,t||[])).next())})},ne=function(e,t,i,n){if(i==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?n:i==="a"?n.call(e):n?n.value:t.get(e)},Ft=function(e,t,i,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(e,i):o?o.value=i:t.set(e,i),i},_e,ti,_t,De,Ke,zi,vn,so,ro,ao,ps,bs;const Ba=["image","svg","html"],$t=e=>{var t,i,n;let o=null;return e.type==="image"?o=((t=e==null?void 0:e.detail)===null||t===void 0?void 0:t.src)||null:e.type==="svg"?o=((i=e==null?void 0:e.detail)===null||i===void 0?void 0:i.svg)||null:e.type==="html"&&(o=((n=e==null?void 0:e.detail)===null||n===void 0?void 0:n.html)||null),typeof o=="string"&&o?vt(o)?o:qe(o):qe(`${gt()}-${e.uuid}-${gt()}-${gt()}`)};class Ya extends ri{constructor(){super(),_e.add(this),ti.set(this,{}),_t.set(this,{}),De.set(this,{}),Ke.set(this,!1),ne(this,_e,"m",zi).call(this,"image",(t,i)=>gn(this,void 0,void 0,function*(){var n;const o=((n=i[t.detail.src])===null||n===void 0?void 0:n.value)||t.detail.src,s=yield nn(o);return{uuid:t.uuid,lastModified:Date.now(),content:s}})),ne(this,_e,"m",zi).call(this,"html",(t,i)=>gn(this,void 0,void 0,function*(){var n;const o=((n=i[t.detail.html])===null||n===void 0?void 0:n.value)||t.detail.html,s=yield nr(o,{width:t.detail.originW||t.w,height:t.detail.originH||t.h});return{uuid:t.uuid,lastModified:Date.now(),content:s}})),ne(this,_e,"m",zi).call(this,"svg",(t,i)=>gn(this,void 0,void 0,function*(){var n;const o=((n=i[t.detail.svg])===null||n===void 0?void 0:n.value)||t.detail.svg,s=yield tr(o);return{uuid:t.uuid,lastModified:Date.now(),content:s}}))}isDestroyed(){return ne(this,Ke,"f")}destroy(){Ft(this,Ke,!0,"f"),this.clear(),Ft(this,ti,null,"f"),Ft(this,_t,null,"f"),Ft(this,De,null,"f")}load(t,i){ne(this,Ke,"f")!==!0&&(ne(this,_e,"m",bs).call(this,t)||Ba.includes(t.type)&&ne(this,_e,"m",ps).call(this,t,i))}getContent(t){var i,n;const o=$t(t);return((n=(i=ne(this,De,"f"))===null||i===void 0?void 0:i[o])===null||n===void 0?void 0:n.content)||null}getLoadItemMap(){return ne(this,De,"f")}setLoadItemMap(t){Ft(this,De,t,"f")}}ti=new WeakMap,_t=new WeakMap,De=new WeakMap,Ke=new WeakMap,_e=new WeakSet,zi=function(t,i){ne(this,ti,"f")[t]=i},vn=function(t){var i,n,o;let s=null;return t.type==="image"?s=((i=t==null?void 0:t.detail)===null||i===void 0?void 0:i.src)||null:t.type==="svg"?s=((n=t==null?void 0:t.detail)===null||n===void 0?void 0:n.svg)||null:t.type==="html"&&(s=((o=t==null?void 0:t.detail)===null||o===void 0?void 0:o.html)||null),s},so=function(t){return{element:t,status:"null",content:null,error:null,startTime:-1,endTime:-1,source:ne(this,_e,"m",vn).call(this,t)}},ro=function(t){const i=$t(t.element),n=ne(this,De,"f")[i];ne(this,Ke,"f")||(n?n.startTime{ne(this,Ke,"f")||(n.content=r.content,n.endTime=Date.now(),n.status="load",ne(this,_e,"m",ro).call(this,n))}).catch(r=>{console.warn(`Load element source "${n.source}" fail`,r,t),n.endTime=Date.now(),n.status="error",n.error=r,ne(this,_e,"m",ao).call(this,n)}))},bs=function(t){var i;const n=$t(t),o=(i=ne(this,_t,"f"))===null||i===void 0?void 0:i[n];return!!(o&&o.status==="error"&&o.source&&o.source===ne(this,_e,"m",vn).call(this,t))};var Gt=function(e,t,i,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(e,i):o?o.value=i:t.set(e,i),i},je=function(e,t,i,n){if(i==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?n:i==="a"?n.call(e):n?n.value:t.get(e)},Tn,nt,Ze,Li,Ss;class Ms extends ri{constructor(t){super(),Tn.add(this),nt.set(this,void 0),Ze.set(this,new Ya),Li.set(this,!1),Gt(this,nt,t,"f"),je(this,Tn,"m",Ss).call(this)}isDestroyed(){return je(this,Li,"f")}destroy(){this.clear(),Gt(this,nt,null,"f"),je(this,Ze,"f").destroy(),Gt(this,Ze,null,"f"),Gt(this,Li,!0,"f")}updateOptions(t){Gt(this,nt,t,"f")}drawData(t,i){const n=je(this,Ze,"f"),{calculator:o,sharer:s}=je(this,nt,"f"),r=je(this,nt,"f").viewContext;r.clearRect(0,0,r.canvas.width,r.canvas.height);const a={x:0,y:0,w:i.viewSizeInfo.width,h:i.viewSizeInfo.height},c=Object.assign({loader:n,calculator:o,parentElementSize:a,elementAssets:t.assets,parentOpacity:1,overrideElementMap:s==null?void 0:s.getActiveOverrideElemenentMap()},i);Va(r,t.global,c),t.layout?ja(r,t.layout,c,()=>{oo(r,t,c)}):oo(r,t,c)}scale(t){const{sharer:i}=je(this,nt,"f");if(!i)return;const{data:n,offsetTop:o,offsetBottom:s,offsetLeft:r,offsetRight:a,width:c,height:l,contextHeight:d,contextWidth:f,devicePixelRatio:u}=i.getActiveStoreSnapshot();n&&this.drawData(n,{viewScaleInfo:{scale:t,offsetTop:o,offsetBottom:s,offsetLeft:r,offsetRight:a},viewSizeInfo:{width:c,height:l,contextHeight:d,contextWidth:f,devicePixelRatio:u}})}setLoadItemMap(t){je(this,Ze,"f").setLoadItemMap(t)}getLoadItemMap(){return je(this,Ze,"f").getLoadItemMap()}getLoader(){return je(this,Ze,"f")}}nt=new WeakMap,Ze=new WeakMap,Li=new WeakMap,Tn=new WeakSet,Ss=function(){const t=je(this,Ze,"f");t.on("load",i=>{this.trigger("load",i)}),t.on("error",i=>{console.error(i)})};var mn=function(e,t,i,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(e,i):o?o.value=i:t.set(e,i),i},Re=function(e,t,i,n){if(i==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?n:i==="a"?n.call(e):n?n.value:t.get(e)},Pt,Ae;class xs{constructor(t){Pt.set(this,void 0),Ae.set(this,void 0),mn(this,Pt,t,"f"),mn(this,Ae,new oi({defaultStorage:{viewVisibleInfoMap:{},visibleCount:0,invisibleCount:0}}),"f")}toGridNum(t,i){return(i==null?void 0:i.ignore)===!0?t:Math.round(t)}destroy(){mn(this,Pt,null,"f")}needRender(t){const n=Re(this,Ae,"f").get("viewVisibleInfoMap")[t.uuid];return n?n.isVisibleInView:!0}isPointInElement(t,i,n,o){const s=Re(this,Pt,"f").viewContext;return zn(t,{context2d:s,element:i,viewScaleInfo:n,viewSizeInfo:o})}getPointElement(t,i){const n=Re(this,Pt,"f").viewContext;return Jr(t,Object.assign(Object.assign({},i),{context2d:n}))}resetViewVisibleInfoMap(t,i){if(t){const{viewVisibleInfoMap:n,invisibleCount:o,visibleCount:s}=Kr(t.elements,i);Re(this,Ae,"f").set("viewVisibleInfoMap",n),Re(this,Ae,"f").set("invisibleCount",o),Re(this,Ae,"f").set("visibleCount",s)}}updateVisiableStatus(t){const{viewVisibleInfoMap:i,invisibleCount:n,visibleCount:o}=ls(Re(this,Ae,"f").get("viewVisibleInfoMap"),t);Re(this,Ae,"f").set("viewVisibleInfoMap",i),Re(this,Ae,"f").set("invisibleCount",n),Re(this,Ae,"f").set("visibleCount",o)}calcViewRectInfoFromOrigin(t,i){const n=Re(this,Ae,"f").get("viewVisibleInfoMap")[t];if(!(n!=null&&n.originRectInfo))return null;const{checkVisible:o,viewScaleInfo:s,viewSizeInfo:r}=i,{center:a,left:c,right:l,bottom:d,top:f,topLeft:u,topRight:v,bottomLeft:g,bottomRight:h}=n.originRectInfo;if(o===!0&&n.isVisibleInView===!1)return null;const m={viewScaleInfo:s,viewSizeInfo:r};return{center:N(a,m),left:N(c,m),right:N(l,m),bottom:N(d,m),top:N(f,m),topLeft:N(u,m),topRight:N(v,m),bottomLeft:N(g,m),bottomRight:N(h,m)}}calcViewRectInfoFromRange(t,i){const n=Re(this,Ae,"f").get("viewVisibleInfoMap")[t];if(!(n!=null&&n.originRectInfo))return null;const{checkVisible:o,viewScaleInfo:s,viewSizeInfo:r}=i,{center:a,left:c,right:l,bottom:d,top:f,topLeft:u,topRight:v,bottomLeft:g,bottomRight:h}=n.rangeRectInfo;if(o===!0&&n.isVisibleInView===!1)return null;const m={viewScaleInfo:s,viewSizeInfo:r};return{center:N(a,m),left:N(c,m),right:N(l,m),bottom:N(d,m),top:N(f,m),topLeft:N(u,m),topRight:N(v,m),bottomLeft:N(g,m),bottomRight:N(h,m)}}modifyViewVisibleInfoMap(t,i){const{modifyOptions:n,viewScaleInfo:o,viewSizeInfo:s}=i,{type:r,content:a}=n,c=t.elements,l=Re(this,Ae,"f").get("viewVisibleInfoMap");if(r==="deleteElement"){const{element:d}=a;delete l[d.uuid]}else if(r==="addElement"||r==="updateElement"){const{position:d}=a,f=sn(d,t.elements),u=ss(c,d);if(f){const v=rn(f,{groupQueue:u||[]}),g={originRectInfo:v,rangeRectInfo:J.angle(f.angle)?as(v):v,isVisibleInView:!0,isGroup:(f==null?void 0:f.type)==="group",position:[...d]};l[f.uuid]=g,r==="updateElement"&&this.updateVisiableStatus({viewScaleInfo:o,viewSizeInfo:s})}}else r==="moveElement"&&this.resetViewVisibleInfoMap(t,{viewScaleInfo:o,viewSizeInfo:s});Re(this,Ae,"f").set("viewVisibleInfoMap",l)}}Pt=new WeakMap,Ae=new WeakMap;var yn=function(e,t,i,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(e,i):o?o.value=i:t.set(e,i),i},F=function(e,t,i,n){if(i==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?n:i==="a"?n.call(e):n?n.value:t.get(e)},ae,Ot,Ce,Ei,As,Ti,Ci,Di,_i,Oi,Wi,ki,ji,Ne,Ue,dt;function lo(e){return e>0||e<0||e===0}class Fa extends ri{constructor(t){super(),ae.add(this),Ot.set(this,void 0),Ce.set(this,void 0),Ei.set(this,!1),Ti.set(this,n=>{if(!F(this,ae,"m",Ne).call(this,n))return;const o=F(this,ae,"m",Ue).call(this,n);if(!F(this,ae,"m",dt).call(this,o))return;n.preventDefault(),n.stopPropagation();const s=n.deltaX>0||n.deltaX<0?n.deltaX:0,r=n.deltaY>0||n.deltaY<0?n.deltaY:0;n.ctrlKey===!0&&this.has("wheelScale")?this.trigger("wheelScale",{deltaX:s,deltaY:r,point:o}):this.has("wheel")&&this.trigger("wheel",{deltaX:s,deltaY:r,point:o})}),Ci.set(this,n=>{if(!F(this,ae,"m",Ne).call(this,n))return;n.preventDefault();const o=F(this,ae,"m",Ue).call(this,n);F(this,ae,"m",dt).call(this,o)}),Di.set(this,n=>{if(!F(this,ae,"m",Ne).call(this,n))return;n.preventDefault();const o=F(this,ae,"m",Ue).call(this,n);if(!F(this,ae,"m",dt).call(this,o))return;const s=500,r=Date.now(),a=F(this,Ce,"f").get("prevClickPoint");a&&r-a.t<=s&&Math.abs(a.x-o.x)<=5&&Math.abs(a.y-o.y)<=5?this.trigger("doubleClick",{point:o}):F(this,Ce,"f").set("prevClickPoint",o)}),_i.set(this,n=>{if(F(this,Ce,"f").set("hasPointDown",!1),!F(this,ae,"m",Ne).call(this,n))return;n.preventDefault();const o=F(this,ae,"m",Ue).call(this,n);this.trigger("pointLeave",{point:o})}),Oi.set(this,n=>{if(F(this,Ce,"f").set("hasPointDown",!1),!F(this,ae,"m",Ne).call(this,n))return;n.preventDefault();const o=F(this,ae,"m",Ue).call(this,n);this.trigger("pointEnd",{point:o})}),Wi.set(this,n=>{if(!F(this,ae,"m",Ne).call(this,n))return;n.preventDefault(),n.stopPropagation();const o=F(this,ae,"m",Ue).call(this,n);if(!F(this,ae,"m",dt).call(this,o)){F(this,Ce,"f").get("hasPointDown")&&(this.trigger("pointLeave",{point:o}),F(this,Ce,"f").set("hasPointDown",!1));return}F(this,Ce,"f").get("hasPointDown")===!0&&this.trigger("pointMove",{point:o})}),ki.set(this,n=>{if(!F(this,ae,"m",Ne).call(this,n))return;n.preventDefault();const o=F(this,ae,"m",Ue).call(this,n);F(this,ae,"m",dt).call(this,o)&&(F(this,Ce,"f").set("hasPointDown",!0),this.trigger("pointStart",{point:o}))}),ji.set(this,n=>{if(!F(this,ae,"m",Ne).call(this,n))return;n.preventDefault();const o=F(this,ae,"m",Ue).call(this,n);F(this,ae,"m",dt).call(this,o)&&this.trigger("hover",{point:o})});const i=new oi({defaultStorage:{hasPointDown:!1,prevClickPoint:null}});yn(this,Ce,i,"f"),yn(this,Ot,t,"f"),F(this,ae,"m",As).call(this)}onEvents(){if(F(this,Ei,"f"))return;const t=window;t.addEventListener("mousemove",F(this,ji,"f")),t.addEventListener("mousedown",F(this,ki,"f")),t.addEventListener("mousemove",F(this,Wi,"f")),t.addEventListener("mouseup",F(this,Oi,"f")),t.addEventListener("mouseleave",F(this,_i,"f")),t.addEventListener("wheel",F(this,Ti,"f"),{passive:!1}),t.addEventListener("click",F(this,Di,"f")),t.addEventListener("contextmenu",F(this,Ci,"f"))}offEvents(){const t=window;t.removeEventListener("mousemove",F(this,ji,"f")),t.removeEventListener("mousedown",F(this,ki,"f")),t.removeEventListener("mousemove",F(this,Wi,"f")),t.removeEventListener("mouseup",F(this,Oi,"f")),t.removeEventListener("mouseleave",F(this,_i,"f")),t.removeEventListener("wheel",F(this,Ti,"f")),t.removeEventListener("click",F(this,Di,"f")),t.removeEventListener("contextmenu",F(this,Ci,"f"))}destroy(){this.offEvents(),F(this,Ce,"f").destroy(),yn(this,Ei,!0,"f")}}Ot=new WeakMap,Ce=new WeakMap,Ei=new WeakMap,Ti=new WeakMap,Ci=new WeakMap,Di=new WeakMap,_i=new WeakMap,Oi=new WeakMap,Wi=new WeakMap,ki=new WeakMap,ji=new WeakMap,ae=new WeakSet,As=function(){this.onEvents()},Ne=function(t){return t.target===F(this,Ot,"f").boardContent.boardContext.canvas},Ue=function(t){const n=F(this,Ot,"f").boardContent.boardContext.canvas.getBoundingClientRect();return{x:t.clientX-n.left,y:t.clientY-n.top,t:Date.now()}},dt=function(t){const i=F(this,Ot,"f").sharer.getActiveViewSizeInfo(),{width:n,height:o}=i;return!!(lo(t.x)&&lo(t.y)&&t.x<=n&&t.y<=o)};var co=function(e,t,i,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(e,i):o?o.value=i:t.set(e,i),i},oe=function(e,t,i,n){if(i==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?n:i==="a"?n.call(e):n?n.value:t.get(e)},se,zt;const Ga={width:0,height:0,devicePixelRatio:1,contextWidth:0,contextHeight:0,data:null,scale:1,offsetLeft:0,offsetRight:0,offsetTop:0,offsetBottom:0,overrideElementMap:null};class Xa{constructor(){se.set(this,void 0),zt.set(this,void 0);const t=new oi({defaultStorage:Ga}),i=new oi({defaultStorage:{}});co(this,se,t,"f"),co(this,zt,i,"f")}getActiveStorage(t){return oe(this,se,"f").get(t)}setActiveStorage(t,i){return oe(this,se,"f").set(t,i)}getActiveStoreSnapshot(t){return oe(this,se,"f").getSnapshot(t)}getSharedStorage(t){return oe(this,zt,"f").get(t)}setSharedStorage(t,i){return oe(this,zt,"f").set(t,i)}getSharedStoreSnapshot(t){return oe(this,zt,"f").getSnapshot(t)}getActiveViewScaleInfo(){return{scale:oe(this,se,"f").get("scale"),offsetTop:oe(this,se,"f").get("offsetTop"),offsetBottom:oe(this,se,"f").get("offsetBottom"),offsetLeft:oe(this,se,"f").get("offsetLeft"),offsetRight:oe(this,se,"f").get("offsetRight")}}setActiveViewScaleInfo(t){const{scale:i,offsetTop:n,offsetBottom:o,offsetLeft:s,offsetRight:r}=t;oe(this,se,"f").set("scale",i),oe(this,se,"f").set("offsetTop",n),oe(this,se,"f").set("offsetBottom",o),oe(this,se,"f").set("offsetLeft",s),oe(this,se,"f").set("offsetRight",r)}setActiveViewSizeInfo(t){oe(this,se,"f").set("width",t.width),oe(this,se,"f").set("height",t.height),oe(this,se,"f").set("devicePixelRatio",t.devicePixelRatio),oe(this,se,"f").set("contextWidth",t.contextWidth),oe(this,se,"f").set("contextHeight",t.contextHeight)}getActiveViewSizeInfo(){return{width:oe(this,se,"f").get("width"),height:oe(this,se,"f").get("height"),devicePixelRatio:oe(this,se,"f").get("devicePixelRatio"),contextWidth:oe(this,se,"f").get("contextWidth"),contextHeight:oe(this,se,"f").get("contextHeight")}}getActiveOverrideElemenentMap(){return oe(this,se,"f").get("overrideElementMap")}setActiveOverrideElemenentMap(t){oe(this,se,"f").set("overrideElementMap",t)}}se=new WeakMap,zt=new WeakMap;var Vi=function(e,t,i,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(e,i):o?o.value=i:t.set(e,i),i},he=function(e,t,i,n){if(i==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?n:i==="a"?n.call(e):n?n.value:t.get(e)},ii,Se,Wt,Lt,Is,Rs;const{requestAnimationFrame:Ha}=window;class Na extends ri{constructor(t){super(),ii.add(this),Se.set(this,void 0),Wt.set(this,[]),Lt.set(this,"FREE"),Vi(this,Se,t,"f"),he(this,ii,"m",Is).call(this)}resetViewVisibleInfoMap(t,i){t&&he(this,Se,"f").calculator.resetViewVisibleInfoMap(t,i)}drawFrame(){const{sharer:t}=he(this,Se,"f"),i=t.getActiveStoreSnapshot(),n=t.getSharedStoreSnapshot();he(this,Wt,"f").push({activeStore:i,sharedStore:n}),he(this,ii,"m",Rs).call(this)}scale(t){const{scale:i,point:n,ignoreUpdateVisibleStatus:o}=t,{sharer:s}=he(this,Se,"f"),{moveX:r,moveY:a}=$r({scale:i,point:n,viewScaleInfo:s.getActiveViewScaleInfo(),viewSizeInfo:s.getActiveViewSizeInfo()});return s.setActiveStorage("scale",i),o||he(this,Se,"f").calculator.updateVisiableStatus({viewScaleInfo:s.getActiveViewScaleInfo(),viewSizeInfo:s.getActiveViewSizeInfo()}),{moveX:r,moveY:a}}scroll(t){const{sharer:i}=he(this,Se,"f"),n=i.getActiveViewScaleInfo(),{moveX:o,moveY:s,ignoreUpdateVisibleStatus:r}=t,a=i.getActiveViewSizeInfo(),c=Qr({moveX:o,moveY:s,viewScaleInfo:n,viewSizeInfo:a});return i.setActiveViewScaleInfo(c),r||he(this,Se,"f").calculator.updateVisiableStatus({viewScaleInfo:i.getActiveViewScaleInfo(),viewSizeInfo:i.getActiveViewSizeInfo()}),c}updateViewScaleInfo(t){const{sharer:i}=he(this,Se,"f"),n=Ur(t,{viewSizeInfo:i.getActiveViewSizeInfo()});return i.setActiveViewScaleInfo(n),he(this,Se,"f").calculator.updateVisiableStatus({viewScaleInfo:i.getActiveViewScaleInfo(),viewSizeInfo:i.getActiveViewSizeInfo()}),n}resize(t={},i){const{sharer:n}=he(this,Se,"f"),o=n.getActiveViewSizeInfo(),s=Object.assign(Object.assign({},o),t),{width:r,height:a,devicePixelRatio:c}=s,{underlayContext:l,boardContext:d,overlayContext:f,viewContext:u}=he(this,Se,"f").boardContent;return d.canvas.width=r*c,d.canvas.height=a*c,d.canvas.style.width=`${r}px`,d.canvas.style.height=`${a}px`,l.canvas.width=r*c,l.canvas.height=a*c,f.canvas.width=r*c,f.canvas.height=a*c,u.canvas.width=r*c,u.canvas.height=a*c,n.setActiveViewSizeInfo(s),i!=null&&i.ignoreUpdateVisibleStatus||he(this,Se,"f").calculator.updateVisiableStatus({viewScaleInfo:n.getActiveViewScaleInfo(),viewSizeInfo:n.getActiveViewSizeInfo()}),s}}Se=new WeakMap,Wt=new WeakMap,Lt=new WeakMap,ii=new WeakSet,Is=function(){const{renderer:t}=he(this,Se,"f");t.on("load",()=>{this.drawFrame()})},Rs=function e(){if(he(this,Lt,"f")==="DRAWING"||he(this,Wt,"f").length===0)return;Vi(this,Lt,"DRAWING","f");const t=he(this,Wt,"f").shift(),{renderer:i,boardContent:n,beforeDrawFrame:o,afterDrawFrame:s}=he(this,Se,"f");if(t){const{scale:r,offsetTop:a,offsetBottom:c,offsetLeft:l,offsetRight:d,width:f,height:u,contextHeight:v,contextWidth:g,devicePixelRatio:h}=t.activeStore,m={scale:r,offsetTop:a,offsetBottom:c,offsetLeft:l,offsetRight:d},p={width:f,height:u,contextHeight:v,contextWidth:g,devicePixelRatio:h};t!=null&&t.activeStore.data&&i.drawData(t.activeStore.data,{viewScaleInfo:m,viewSizeInfo:p}),o({snapshot:t}),n.drawView(),s({snapshot:t})}if(he(this,Wt,"f").length===0){Vi(this,Lt,"COMPLETE","f");return}Vi(this,Lt,"DRAWING","f")&&Ha(()=>{he(this,ii,"m",e).call(this)})};var ot=function(e,t,i,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(e,i):o?o.value=i:t.set(e,i),i},D=function(e,t,i,n){if(i==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?n:i==="a"?n.call(e):n?n.value:t.get(e)},ge,Et,Je,Qi,ie,we,kt,Ve,Le,Tt,jt,Bi,Ps,fo,ho,uo,go,vo,mo,yo,wo,po,bo,zs,Ls,Es,Qt;class Ua{constructor(t){ge.add(this),Et.set(this,void 0),Je.set(this,new WeakMap),Qi.set(this,[]),ie.set(this,[]),we.set(this,void 0),kt.set(this,void 0),Ve.set(this,void 0),Le.set(this,void 0),Tt.set(this,void 0),jt.set(this,new ri),Bi.set(this,!1);const{boardContent:i}=t,n=new Xa,o=new xs({viewContext:i.viewContext}),s=new Fa({boardContent:i,sharer:n}),r=new Ms({viewContext:i.viewContext,sharer:n,calculator:o});ot(this,Et,t,"f"),ot(this,Ve,n,"f"),ot(this,we,s,"f"),ot(this,kt,r,"f"),ot(this,Tt,o,"f"),ot(this,Le,new Na({boardContent:t.boardContent,sharer:n,renderer:r,calculator:D(this,Tt,"f"),beforeDrawFrame:a=>{D(this,ge,"m",Ls).call(this,a)},afterDrawFrame:a=>{D(this,ge,"m",Es).call(this,a)}}),"f"),D(this,ge,"m",Ps).call(this),D(this,ge,"m",Qt).call(this)}isDestroyed(){return D(this,Bi,"f")}destroy(){D(this,we,"f").destroy(),D(this,kt,"f").destroy(),D(this,Tt,"f").destroy(),D(this,jt,"f").destroy(),ot(this,Bi,!0,"f")}getSharer(){return D(this,Ve,"f")}getViewer(){return D(this,Le,"f")}getRenderer(){return D(this,kt,"f")}setData(t,i){const{modifiedOptions:n}=i||{},o=D(this,Ve,"f");D(this,Ve,"f").setActiveStorage("data",t);const s=o.getActiveViewSizeInfo(),r=o.getActiveViewScaleInfo(),a=os(t.elements,{viewWidth:s.width,viewHeight:s.height,extend:!0});n?D(this,Le,"f").resetViewVisibleInfoMap(t,{viewSizeInfo:s,viewScaleInfo:r}):D(this,Le,"f").resetViewVisibleInfoMap(t,{viewSizeInfo:s,viewScaleInfo:r}),D(this,Le,"f").drawFrame();const c=Object.assign(Object.assign({},s),a);return D(this,Ve,"f").setActiveViewSizeInfo(c),{viewSizeInfo:c}}getData(){const{data:t}=D(this,Ve,"f").getActiveStoreSnapshot();return t}use(t){var i,n,o;if(D(this,Je,"f").has(t)){const u=D(this,Je,"f").get(t);if(u){(n=(i=u.middlewareObject).use)===null||n===void 0||n.call(i),u.status="enable",D(this,Je,"f").set(t,u),D(this,ge,"m",Qt).call(this);return}}const{boardContent:s,container:r}=D(this,Et,"f"),a=D(this,Ve,"f"),c=D(this,Le,"f"),l=D(this,Tt,"f"),d=D(this,jt,"f"),f=t({boardContent:s,sharer:a,viewer:c,calculator:l,eventHub:d,container:r});(o=f.use)===null||o===void 0||o.call(f),D(this,Qi,"f").push(t),D(this,ie,"f").push(f),D(this,Je,"f").set(t,{status:"enable",middlewareObject:f}),D(this,ge,"m",Qt).call(this)}disuse(t){var i,n;const o=D(this,Je,"f").get(t);o&&((n=(i=o.middlewareObject).disuse)===null||n===void 0||n.call(i),o.status="disable",D(this,Je,"f").set(t,o),D(this,ge,"m",Qt).call(this))}scale(t){const i=D(this,Le,"f"),{ignoreUpdateVisibleStatus:n}=t,{moveX:o,moveY:s}=i.scale(Object.assign(Object.assign({},t),{ignoreUpdateVisibleStatus:!0}));i.scroll({moveX:o,moveY:s,ignoreUpdateVisibleStatus:n})}scroll(t){return D(this,Le,"f").scroll(t)}updateViewScaleInfo(t){return D(this,Le,"f").updateViewScaleInfo(t)}resize(t,i){const n=D(this,Le,"f").resize(t,i),{width:o,height:s,devicePixelRatio:r}=t,{boardContent:a}=D(this,Et,"f");a.viewContext.$resize({width:o,height:s,devicePixelRatio:r}),a.overlayContext.$resize({width:o,height:s,devicePixelRatio:r}),a.boardContext.$resize({width:o,height:s,devicePixelRatio:r}),a.underlayContext.$resize({width:o,height:s,devicePixelRatio:r}),D(this,Le,"f").drawFrame(),D(this,we,"f").trigger("resize",n),D(this,Ve,"f").setActiveViewSizeInfo(t)}clear(){const{boardContent:t}=D(this,Et,"f"),{underlayContext:i,overlayContext:n,viewContext:o,boardContext:s}=t;i.clearRect(0,0,i.canvas.width,i.canvas.height),n.clearRect(0,0,n.canvas.width,n.canvas.height),o.clearRect(0,0,o.canvas.width,o.canvas.height),s.clearRect(0,0,s.canvas.width,s.canvas.height),D(this,ge,"m",zs).call(this)}getEventHub(){return D(this,jt,"f")}onWatcherEvents(){D(this,we,"f").onEvents()}offWatcherEvents(){D(this,we,"f").offEvents()}}Et=new WeakMap,Je=new WeakMap,Qi=new WeakMap,ie=new WeakMap,we=new WeakMap,kt=new WeakMap,Ve=new WeakMap,Le=new WeakMap,Tt=new WeakMap,jt=new WeakMap,Bi=new WeakMap,ge=new WeakSet,Ps=function(){D(this,we,"f").on("pointStart",D(this,ge,"m",fo).bind(this)),D(this,we,"f").on("pointEnd",D(this,ge,"m",ho).bind(this)),D(this,we,"f").on("pointMove",D(this,ge,"m",uo).bind(this)),D(this,we,"f").on("hover",D(this,ge,"m",go).bind(this)),D(this,we,"f").on("wheel",D(this,ge,"m",mo).bind(this)),D(this,we,"f").on("wheelScale",D(this,ge,"m",yo).bind(this)),D(this,we,"f").on("scrollX",D(this,ge,"m",wo).bind(this)),D(this,we,"f").on("scrollY",D(this,ge,"m",po).bind(this)),D(this,we,"f").on("resize",D(this,ge,"m",bo).bind(this)),D(this,we,"f").on("doubleClick",D(this,ge,"m",vo).bind(this)),D(this,kt,"f").on("load",()=>{D(this,jt,"f").trigger("loadResource")})},fo=function(t){var i;for(let n=0;n{const o=i.get(n);(o==null?void 0:o.status)==="enable"&&(o!=null&&o.middlewareObject)&&t.push(o.middlewareObject)}),ot(this,ie,t,"f")};const $a="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF92lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDYgNzkuMTY0NzUzLCAyMDIxLzAyLzE1LTExOjUyOjEzICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMDktMTdUMTY6MDc6MjYrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIzLTA5LTE3VDE2OjEyOjUwKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzLTA5LTE3VDE2OjEyOjUwKzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjliMGM0MzI2LWU4ZTQtNDlkNy04MmUzLTgxODkwYTE2ZmU1YSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjMzOGFhZDBmLWZkZjMtODE0MS1iMTZmLWNiZWIzNTQyYTJhMCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjUwODAxNzc1LWZlNGEtNDQyMy05NDQ3LThkYWRhNzZhYTllOSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTA4MDE3NzUtZmU0YS00NDIzLTk0NDctOGRhZGE3NmFhOWU5IiBzdEV2dDp3aGVuPSIyMDIzLTA5LTE3VDE2OjA3OjI2KzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWIwYzQzMjYtZThlNC00OWQ3LTgyZTMtODE4OTBhMTZmZTVhIiBzdEV2dDp3aGVuPSIyMDIzLTA5LTE3VDE2OjEyOjUwKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7W6XrzAAAGLklEQVRYhb2Xf2iUdRzHX/txtfXLplZ6Wblm6fzRmG6r7Uou1AxKRjQKYUqgaLBACFogppcK1h8aLRkMSYaJIA5hYMomZpskEfPOufCaDpZ6t7rbre263U3vzn3643meu+eu3XNzvz7w4bbdc/e89nl/Pu/v50HUCAQCx1tbW0uAx4CHgSwggxkKERkziUQif2mQ0WjU53a7vwSeBB4BTEDmTICmBBwYGDivVlDjlFAo9KvT6dwIPAHkANkq6MwDXr169bCISENDg9TX14s+BgcHf2hubi5mBmRPCXj06NFPREQ6OjoEkPLycrl06VIMMhKJeFwu1xdMs+wpAYuLi9eIiIyOjkpeXp4AAsj27dvF7/fHQIPB4C9dXV0fME2ypwQEXvX7/bdFRNauXRsDBMRkMsnhw4cTZB8YGGhsamp6hSmW3Qhw1Y0bN86LiNTW1iYAallWViZtbW162ftcLtdO/i/7tAAWtba2ficicvLkyTEBtdy6dasMDg7GQIeHh9s7OzvfBx5nkrIbAS7du3fvxyIiPT09hoBa1tXVJcv+fWNj4zLgUeAhJiC7EeDLwOsiMioisnDhwnFBrlixQi5evKiX/c6tW7c+R5E9lweU3QjwReDV/v7+bhGRqqqqcQFquWnTJvH5fHrZLzocjkoSZU9bTSPA54GV165daxYROXDgwAMBannw4MFk2RsaGhqWME7ZjQDNwIrTp09/JSLS0tIyIUBACgoK5MKFCzHIcDj85+3btz8FZpFGdiPAZ4DCmpqaTSIiPp9vwoBaVlVVidfr1ct+/sqVK+9iILsR4FzgJcASDoeHRUSKioomDQnI/v37E2T3+Xz1hw4dWjSW7EaAeUA+UNbX12cXEdmyZcuUAAJiNpvlzJkzetl73G53rVrN2EmUCjATuA9EgYjL5eoGKCkpGatNHijmz5/Pxo0b2blzJ2azOfZ3k8lUYDabv45Go/Y7d+6sIY0VZQOjGqDT6bxeWlrKqlWrJgRlsVhYv349FRUVWCwWcnJyEt4PBoOuoaEhu9frvdzR0fHTtm3buolvRpLqe3OBp4EllZWV74mIRKNRyc3NTSvf7Nmzpbq6Wk6cOCFut1uSY2RkJOB0Ou3Nzc3Ha2trPwPWAGXAEuBZFFPPAbKMevBhYA6wCKgIBoP9IiKrV682hLPZbP8DEpH7vb29N1paWn602WwHFyxYsAX4EKgE3gIsQBFQgOIeT6j3z0wFqEkc60OPx9Odn58/t6SkhPb29jFLbrVa2bNnDwBer7fv5s2bPQ6Ho7upqcnZ1tbmASJq3gPC6utdYESXYfWeo6mkBaUHRQ/odrv/yM/Pt5SWlqb8kAbncDh+W7lyZYN683u6DOvAwipsOOnniA4wZf9lqhdoVYzY7fbrQMpBsdlsWK1WRkZGAtXV1d8D/wA+wKNLr5o+YEC9ZggIAEHiFbyfDhCUCcoFngIWFxYWrtMaat68eQl9V15eHmu2+vr6OuAd4A2gGFgMLERp/mdQ+noWyuadi9Jr2aQ4k42GBPXDs1Ga97WhoaFbIiIbNmxIANTWq87Ozp9VuApgGfACihPkoRjwI+p3mlSgtA9ZRkYNYwwKJBr2rl27sFqthEKhwZqamqOAX5f/AsPE5btLvM/GJWO6yFb/82eBonPnztWJiJw9e1YAWb58eUzaI0eOfAO8CbwCPIfiZZN+eEoncSaKLPOApbt3794uIuL1ehOktdvtF4C3gRKURXcOSn9lTRRsvIAZKI4+l/gjQFREZMeOHSIiEggE+tetW/cRitkuRhmERxnnxjxZQFDWnzzURwCv1+vUHxHHjh37lri0C1Am9KGpgDMC1G8SQnxxCHs8Hqf2RldX10+bN28+i+JjwyT62KSaP13oAfWTHO7t7f0dIBQK/b1v375GlEnVjPYuyoQaHlNTDahVMALca29vdwBcvnz5+KlTp26OATft1UuODBS7yEOxj0K/329HOSWWopjxlE1tchhtM7FriPfgXSDDbrfXo0gbJr4QzIi0WiRPYBbKZJrUV23b0dYn7XSYcsBkS9EiO/k6lApq1cwiPjzaAM1Y9cYC1G6uAWrPCtrvMwoHqU02Q5caIEzj1KaS+D+vIjxtLug31gAAAABJRU5ErkJggg==",Ts="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAApCAYAAABHomvIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF92lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDYgNzkuMTY0NzUzLCAyMDIxLzAyLzE1LTExOjUyOjEzICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMDktMTdUMTY6MzE6MjMrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIzLTA5LTE3VDE2OjQ0OjIyKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzLTA5LTE3VDE2OjQ0OjIyKzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY0MTBhYjUzLWM0ZjEtNDVhNS04MjhkLTIxOTczOWFjOTk3MSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjBkMDNmNjM5LTE5MzctY2Y0MC1hMTg0LTIyMjg0NzczNWNmYSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjgyYjQwZGRmLWE0ZGEtNDY3MC1iYzc2LTBhYjY3ZmI5M2I0ZSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ODJiNDBkZGYtYTRkYS00NjcwLWJjNzYtMGFiNjdmYjkzYjRlIiBzdEV2dDp3aGVuPSIyMDIzLTA5LTE3VDE2OjMxOjIzKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NjQxMGFiNTMtYzRmMS00NWE1LTgyOGQtMjE5NzM5YWM5OTcxIiBzdEV2dDp3aGVuPSIyMDIzLTA5LTE3VDE2OjQ0OjIyKzA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz57vRudAAAEk0lEQVRYhe3ZW0jbVxzA8e8/MX+NYnG9uI4xE3bvoLt0FzradRfGBtsYo32YdAhb6WQyBqV7KOylpYjzZShDGfjmyxgbgjjwyRm16SYMhgiNKDhbL3VtNF4xJOnf3x7+59i/Wf4aTbInf3AwJMdzPjnnf/n9/jFEhGzDMIxMb3uAIsDs6ek5urS05Dtz5syE+uwekAQS6u89YD19gC0NIpJ1c8GZQHlXV9fJRCIxGo/HxxoaGj4CngWOAEGgEihXfT07MeQC3MB1dna+lkgkRkXF6urq3xcuXPgUOAE8DzwGPOiGLARwEy4ej4+JiITD4elr167NiIgsLi7eqq2trQPeBI4Bj7sh8w10xZmmeds0zdn+/v5/RERisdjUuXPnvgLeAl50Q+YTaAA+oKy7u/uE3laNAwSQ4uLiu6FQ6G4G5DG13YeAMjWWkU+gBygJhULHNe769etTTpwDGXUiz58//yXwujp5qoAHgBLAk0+gNxKJHEulUiMKN2ma5gwgPp/vjhOXjlxYWJisq6urBV5RW30IKAW8eQPGYrGjlmXdEBEZHBy8aZrmFCCmac729fVtAHt7e6MO5N2+vr47IiJLS0s3L126dBZ4Sh2LZUBRwVdwYGBgVuwOYh/zsoF0bnPBVzDTMRgOh6dFhROokSIi8/Pz0+pEeaPQx+DGWdzV1XVSX2LcgCIic3NzMzU1NV8D7wIvq9WrLNRZvOk62NHRccqJTAdGo9Hb1dXV3wAfYt9VjgAPFfI66EQWAxU9PT0fuwEvXrzYBJwF3gFeAAJAhfrfrO4k/7lxZxnr2JlJqry8POnWyePx6H4JR0vhktVkHGOXQI20SkpKLLcOhmGsA5YCaZiVLS5XoADi9XpdkznDMERhnE0fCgUHZhvOW+CO4/8A5hR7wFxjD5hr7AFzjZyBlmVlrOYdYaS1HUUuQA/gWV9fd51URDyqn1c1j6MVFGjoidfW1oq2ABrYj0V82OmVzwHNajVdB88C5wOKTdM87NaxsrKyQsFKHC2BnTDo+/TWt8Bd5INeVC44NDT0xXYZdXNz8w/AaeyS8yjwCPdzQu92ht2m/OUjIyOfS1pkAoqItLS0fA+8D7wKPA0cxs6qC1O4T0xMfKYnb21tnXEDNjc3z+nXbW1t3wFvYz9dCAL7KUThHovFPtGTNjU1jQFSX18/lg68cuXKLUAaGxs3vkB7e/u3wHHgCQpUdnpTqdQvesJgMDisUVevXh3Xry9fvnxTv66qqprQ/cfHx/vVNj/J/couv0DAv7q6+pMDeYPNSalkwkUikX7s4ukl4FHgAODPN1CXnPsWFxd/dCAjW+GGhoZCwAfYpeczwMPAPjVW3gv3IvXN98disZ8dyBGNCwQC4/r94eHhfuy6+JS6zATUCeJXY+W9cNfIUuDAwsLCr05kIBDYeBQ8Ojr6h8Lpx25BtbWlGpfv62BG5PLy8m+SFpOTk38C76mVe84NVyhgOvLgysrK7xoXjUb/Uqt2XG1rEDiYCbcd0MgwsWtk+J1EI03An0wmw5Zlefx+/2n1eRKIO5r+rWTTpFsZ/gWFrGMmeObuqwAAAABJRU5ErkJggg==",Qa="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAApCAYAAABHomvIAAAEvUlEQVRYhc2Y20/cVRDHP8v+uKzAWkpDCtZq8BYhJkq8PBoJxgj7I2m0ryaSyFN9IT74pI8+8WJiggRj/APApFkSTGRJ+qKGUiyxbGPEWsUSuVhYC12Wy8+HmeMeYPe3d3WSye/k/M7le+bMzJkZ+J9ToEJreGVYN+vihcytstjQocUlAw0WCSoIVCv3Ae8CXwIt+u8XHVeOG8qLqgAHqAFCQCNwGugCthBJGd7S/tM6LqTzHI5KuqzgaoAHgEvAtwrkG2AG8FzXvep5nue67lX9N6P/PR1/SefXlBtkFXKNDUA/RyX1D9uUbYzOb9D1ygbSQU7eDMxhSSsSiVz3AxiJRK57nuf19/fPad8coqONFCBJPyUOIKc1OvcbgiY9ICDT8+0DHge2gR0gBeyTtviM5HeKAGlrrfMZVwhdAVaAr4F3KNF4gkA9cBbowOc68+3LwDn1Mhdy4/OcYk54nPr6+m54nofruvPa9SFQ6wfQTweNgTwInAGuQWk6mEUvHwb+Au4Dexx7ffK9+0q+CHWIBIOZ9skHYKWfK9tQ8gZoLDjIyWCg3ORY+2T8aYOyg4EaRIFrkCs4QU1NTSvabC20zyIDzuyfkYzEahHX8jHwE/LwXwHeJ4P7KIVIu5ouxFDC+HgLAy4MfEF2v1UpgOezATSiNVf6EvAWsD01NXVtdnb2bk9Pz81sp/q3KIi8t83Ae4DX0tJy0z7t8PDwD4FAYIX/WILVwKMAzc3Nu/agoaGhzmg0ugcsV0hIvlSNoH8IuIiebHJycrls4sotwaxGYvueAPAjEg3jum79yMjIr5WUjFLOxMpBIopWoBN4GfhOJ+4NDg4ulVt6i4uLm7r+BvAscA4fCXrAAfJQJ5Fg8gPgMuCMjo62d3V1LW1sbKRKlpXSxMTEmjZ/5qQrOwHwUAGmkIjiHhJdfKrM/Pz8Y+3t7RvT09Ob5QAYi8X2tbmke2cEZwAaCdoAt5QvIzEbiUSitbe3tyoej++UCnBhYSGkzdu6d1aQxkgOkfwgieQMCeCu8iwSnpNKpcIdHR3BZDJ5UCy4SCSyvL6+/giiSou67wE+eYmhAKKkIaAJUdynkdflNcQF3dFTpooxjmg0aozDAz4DXkB8bxPy1OYM7QzIOuAU0AY8pQu9CrwJ3AK8UCj0RyHgZmZmli1w3wOvAM/oHo1kiZiygbSDh7PAE8DzQA/wBqKnnuM4a2NjY7dygbtw4cICRy31deBFJA09o7eWsU7kJ1KTLJmyRyOSn5zS70fAkwBtbW2/DwwMHHR3d9d3dnY2rK6u7o2Pj2/GYrH9eDzurK2tndM1vwI+QXT7T2BTD5skQz6SCyAcLRoZkGEFGQbeRqpbubK+BPA5MI14h00L3I6Cy2h4+eQbJsKuRa6iQcGFFfB5oBt4DpFsI+Ky7iDBxW3gBhBH/GtC+R7i1lKk3UxRAG2QpvxWr0AbtB3SA5jkx36djH/dVlDbyibN3M8GDvJPyI2PSulixm/u6kZ1OQCaJ/S+tndJX6tvsFBIxcCUdA3vW5ubxMrObc0hDMhd/Rqp5QQHxeW8dubnHGM7tzVv/IECMlxQ/bpcRfRMqaNRheNcUGG9XFWDACfzWs/6Fl3t/xtO//8gpbCORQAAAABJRU5ErkJggg==",Za="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAER0lEQVRYhe2YT2hjRRjAf8lL22xsNsm6EWKrSKvuIkIh+O9QRFxEW18KUsoe7FHoRaWCN1FPetOrIHgVKS0q9P5OxaJbodkalgVrtVZjS7Ntd02z6abPw3yzmaT585q+elj2g2HmvZn35jffN/PNNwP35R6XgM/fuif4n+dO2klQvgsaZRc4NJJvoJbHdhrIAkJAN2ADHwFfAw9J3ZoB/b9I0AA6A0SBc0Aa2EVpSqddeZ+QdmfkO+u0gIPSQQR4HfhRQH4AHMDNZDJXXNd1M5nMFalzdB3wJTAOPAD0yEB9066G6wXepVZTd5MpTdporZ6jVqsatmMJoTR3HvgJQ1u2bS+3ArRte9l1XXdsbGyJo1pdBN6Wf3d3ChlAmSQO9LeC8fquQRpDWaerHWSjSr1iu4BkJyOsF9u2s67rkslkluTVxygltAVsJBZqdCngEj5osIlW+4EYytRNF04jeu3vulCT+7QkLH20dEOhumft97pQI4s3+iiRSPwtxVSbd39J8eEGvzFXc1NAs8KSFAZeBt4AHgNeBFDWObkEAne7HAK2gT2gCFQatdca1GbtBj4E3veFprVYVLXXcg4GqM6588BbAMlkcm1qamqzr6/v6ikBet5RgiizJoDPAXdgYGDZXHkzMzPrrk9CdRWngUeAsxxdCzVwpgZ/BigWiz1mo4mJif7jqMajeJrU5hywgGvAej6fvzA0NLThN1Eul9uT4g5VTbYFNKUIfAbsZ7PZvuHh4Wt+As7Ozu5IcY2j219TQB0NV4A7qODgO4CFhYWLg4ODOb8AHccpG4A68m6pRQ1YAQ6A28A+8BXwBcDq6upTqVTquh+AuVyuW4q/opRRaQdZD1gCbgE3ge+BT4HdfD7/ZDwe/z2bzRY6hRsfH1/e3Nx8FDX/sgbgoZfvg6jo4ixqW7oIPA+8CrwHrAJuJBLJd+JaHMf5k6qmPgGeQe1SCenXk0/U21xcIC8AzwGvAJPAEuAmEon1xcXFba9w8/Pz5oqdB14CnpY+oij35km0qwmjwqAU8ISM9hIwBeQA17KsG9PT07+1gxsZGdmgdqW+BjwLDAAPoo4ALU+W9arVwWoIpXp9kouKZpPAO8AwQCwW+2d0dLQ0OTkZSafT0UKhUJ6bm9t2HKeysrIS3tra0g7+KvABUJC0g5rrJdRcbLpImtleRzYashc1P2OSXwbebDVykX3gW+Ab1AHqhuQ3pe6AJlFMO0CoPROHDcio5I8DL1A9C8dQbmod+APYAK4DvwjQnsDdErgyVTfTEaCG1GFYGHXG7TVSo2OkdvhlAflXoHSuNdfStFqaRhEi2kfdprrj6M5LAt0I8EDaaMdflPal48CB95hMr3Bt8h4jD0kyL5E0pN6dysZzW7N2AqjbmhdIZjJvufTOpE19x3g+9s1XJ/ck5tVbfdhu+rxDfLiSO+lFToCjZwrXyH2/0Lwv95z8B1jAqXmDnj4YAAAAAElFTkSuQmCC",Ja="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAIiklEQVRYhe2YW2yUxxmGn7W96zXGNnZsr2FJHQyYBHNIU1ttAqVUVjlJUAtxQyUXhKgQktUDdSUkuEDtBVJ9UQXRC0RJRblrq/SCIARpFImWQ8VBIZQinJpQYozNyWaxiw/rfXsx3+z+6xNOe9tPGv2nOTzzffPPvDMhSXwJC1nKAXIDV/9ellLAqF1T9o5A2Ry7J5A/Fbh3mUMh8qYJ5kHCQATID6QIkBcAHAVGgKFAStq33EB53/ao5Rm064i9g0CmqcDyrNICYCZQBJTYdaa9j1jelDUwCAwAz4F+ex61DhZauXzr1CDwDHhq1wFg2Do1KWAo0NsCAyoDKoGYXcuBWdZY1PKnzAsDQB/wBOg1yKTVN8vqmoHz6nOgC7gHdFrbCasrNRFgyMCj5qVXgDlANfAaMA/4ir2rMI+MtSHgEdAN9BjsiNVZYR0sNq8+AtqB69Z2MuDBcYA+pAXW0yoDWgTUWXrd8k1l+cBcSxjIIBlPB63G8uUB/8Z57znwAkgGAX1YC4BSK7QIWA7UWwoDJJNJzp49y4ULF2hvb6e7u5tEIkFhYSGVlZXMmzePhoYGNmzYQElJCVZv2tPt7e3s2bOHvr4+9u3bx/r16+PWjg/zQ9x4BEk+5UkqklQt6ZuSdkn6jaRbMhsYGFBbW5uWLVvmp5MpU3V1tVpbW9XV1aWgbdy4MZ2npqbGvx6W9DtJ35e0RFJREDBX0gxJcUnfkPQDScck3fGlz549q7q6ummBjU2xWEzvvfdeGvCtt95Kf6uoqAiyfyBpt6SvSZrlAUOSIpLKJS2X9D1Jv5Z025d69913FQqFJmy8rKxMS5YsUUNDg5YvX67Zs2dPCrpjxw6NjIxoxYoV6XdVVVVBwI8l/UTS1yWVesBcC+18SRsk/ULS33yJtra2CRtramrSiRMn1NXVpWQyKUlKpVJ6+vSpTp48qZ07dyo/P39cua1bt6q+vn4ywL9IapX0tqQyDxiRFDPq3ZL+JCklSadOnRrXwMKFC3X69GlNx65du6aVK1eOqyMYjTGAf50IsNC8t1FSm6TPJOn+/fuKxWJZFb/zzjvjBvx0bO/evQqHwxNG4mUe9MtYMZk5bwHA4cOH6enpSc9BixYt4uTJk5SVlflXfcBN4DFuapoHLPQfz58/z9WrVwmFQsTjceLxOHfv3uUlNlZcpFeMEtzsXg2QSCQ4duxYulQoFOLQoUNBuE7gvAE+x82b/VZHyblz52hsbCSZTL4MCGWrqUECq0gQsBi3ts4B+PDDD3n48GG61OrVq1mzZo1/fGZw54HbVmGV1bMAWPbRRx9NC24CwD7cajLiAXNwIS7ELW3lAGfOnMmqZPv27cHHvwM3gH8AnwH/wnn0C+AuwLZt25g/f/5L4cLhMNu2bfOPnbh1+xkZ9UMebvmKGmQEoLOzM11JQUEBK1eu9I/JAFAPTqnk4hTNY9xS1V5TU1N7+fJlOjo6SKXS+jPLJFFUVMTixYsxmJtW/inOi2nAXDI/C0BWeMvKyojFYv6xz1LCKhnCRSEBPMCFfBaQKi0tfb2+vn5qFzp7AnwCXAM+t45mAUJGfgMwOpoWtIRCWZ/89BB8TuJ+lG5cNEatkXYgjtN+BYG2ktaxBE4U3AP+iRsud3EeHCTwk6Ss0IhvtaKiIk3Q19dHb28vhYWF4H6mYtxwiBrQIE4aPTHgIVzoO3E/TzlOV4YD3/stj9eMPj2xzg4HAYMSPQnkxePxNGB/fz+XLl1iy5Yt4HTeq+aZTtyA9h18Yb33G6aRQBqyDiUNLihmH1q54LAZ9ZHKISPRn1loaGxsJGjHjx8PPi6xtAgnNufgVHcRmf1J2DpTiJsjvYout3c5gQ49Ns89s3fpOdB70I+Hx7iBXrV27VqKi4tJJBKAm3auXLmCDfpy4G3rZSHur/aSPg83BCpx24MFuNUlbnkHcGMubEDdxpG0lBn8AcBBsgfsVysqKti6dStHjhwBYGRkhJaWFs6dO0ckEgGYj9v0xIA71rkha7jUgBYCb5hHGRoaIj8/f4Z5s8jafUpmN/diLBwAkmZKWiipSdKvJN2VpI6ODhUVFWUt7Js2bdLAwMBYLdAt6VNJlyV9IumLsRkOHjyo2tparVixQrdvp2Xmn00YrJI0R05VBRV+GjAiqcoUxA8lnfI1HD16dJz6WLVqla5fvz4tFdPZ2anm5uas8s3Nzf7zp5J+LmmNpFcl5U8GmCupWFKtpO9K+qWkG76W3bt3j4OMRqNqaWnRhQsXNDQ0lAWVTCZ169YtHThwQFVVVePKtrS0+Kw3pgsYso+Vkuol7ZD0W0ldvsHW1tZJZXxtba0aGxvV1NSkdevWaenSpYpGoxPmXb9+vXp6ejzgx5J+ZiGeLSk8GaD34ky5Hd23JP1I0h8kPQmGu7y8/L/aNEUiEe3fv1/Dw8Pp6Es6KqlZ0puSXpHbVU4KiPVglqQFkr4j6aeSfi/pvq/13r172rVrlyorK6cFFo1GtXnzZl25ciU4Ch5J+qOkH0v6tqTXzDk5EwGGlNFjOWQOd8px4vUN4E3cpn2pz/jgwQPef/99Ll68yJ07d+jt7WVwcJBIJEJJSQlz586loaGBTZs2UVdXF5w0OoDLwFWcbPsct6r04+bRLHEYCoWyAD1kBDfHleHmsxrccccS3NFHNV/eenBy6iZwCycMOnHz5wBuDh2nyyY6H0zhFmoF7vtxk+l9q3ieQfrDo8msF7cy3cN56g7ZWnKcep7IxnrQmz+wHKu2K3EKJWbPpWSUTQ4ZtRJc23sC6ZGB9ZM52JwcboIQjzUvZvNxYfeHlyVkZFcBbux6wKA6ShjoM5yM8uH0Xpuy8ekAQuZc2W8P8nEei9p9mMmPgAfJHO0O27e0lHppw9MEDJo//A4eoE91iB48SJ80lFMB/t/+V/sPGZfTmtMFR4EAAAAASUVORK5CYII=";var Zi=function(e,t,i,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(e,i):o?o.value=i:t.set(e,i),i},ce=function(e,t,i,n){if(i==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?n:i==="a"?n.call(e):n?n.value:t.get(e)},Ee,Ji,ni,Ct,Yi,ft,Cs,Ds,it,So,Mo;class Ka{constructor(t,i){Ee.add(this),Ji.set(this,void 0),ni.set(this,void 0),Ct.set(this,null),Yi.set(this,null),ft.set(this,{auto:$a,"drag-default":Qa,"drag-active":Za,"rotate-0":Ts,rotate:Ja}),Zi(this,ni,t,"f"),Zi(this,Ji,i.eventHub,"f"),ce(this,Ee,"m",Cs).call(this),ce(this,Ee,"m",Ds).call(this)}}Ji=new WeakMap,ni=new WeakMap,Ct=new WeakMap,Yi=new WeakMap,ft=new WeakMap,Ee=new WeakSet,Cs=function(){const t=ce(this,Ji,"f");ce(this,Ee,"m",it).call(this,"default"),t.on("cursor",i=>{var n;i.type==="over-element"||!i.type?ce(this,Ee,"m",it).call(this,"auto"):i.type==="resize-rotate"?ce(this,Ee,"m",it).call(this,"rotate"):typeof i.type=="string"&&(!((n=i.type)===null||n===void 0)&&n.startsWith("resize-"))?ce(this,Ee,"m",So).call(this,i):i.type==="drag-default"?ce(this,Ee,"m",it).call(this,"drag-default"):i.type==="drag-active"?ce(this,Ee,"m",it).call(this,"drag-active"):ce(this,Ee,"m",it).call(this,"auto")})},Ds=function(){nn(Ts).then(t=>{Zi(this,Yi,t,"f")}).catch(t=>{console.error(t)})},it=function(t){if(ce(this,Ct,"f")===t)return;Zi(this,Ct,t,"f");const i=ce(this,ft,"f")[ce(this,Ct,"f")]||ce(this,ft,"f").auto;let n=0,o=0;(t.startsWith("rotate-")&&ce(this,ft,"f")[ce(this,Ct,"f")]||t==="rotate")&&(n=10,o=10),t==="default"?ce(this,ni,"f").style.cursor="default":ce(this,ni,"f").style.cursor=`image-set(url(${i})2x) ${n} ${o}, auto`},So=function(t){var i;let n=0;t.type==="resize-top"?n+=0:t.type==="resize-top-right"?n+=45:t.type==="resize-right"?n+=90:t.type==="resize-bottom-right"?n+=135:t.type==="resize-bottom"?n+=180:t.type==="resize-bottom-left"?n+=225:t.type==="resize-left"?n+=270:t.type==="resize-top-left"&&(n+=315),n+=Be(((i=t==null?void 0:t.element)===null||i===void 0?void 0:i.angle)||0),Array.isArray(t.groupQueue)&&t.groupQueue.length>0&&t.groupQueue.forEach(s=>{n+=Be(s.angle||0)}),n=Be(n);const o=ce(this,Ee,"m",Mo).call(this,n);ce(this,Ee,"m",it).call(this,o)},Mo=function(t){const i=`rotate-${t}`;if(!ce(this,ft,"f")[i]){const n=ce(this,Yi,"f");if(n){const o=document.createElement("canvas"),s=n.width,r=n.height,a={x:s/2,y:r/2};o.width=s,o.height=r;const c=o.getContext("2d"),l=et(t);c.translate(a.x,a.y),c.rotate(l),c.translate(-a.x,-a.y),c.drawImage(n,0,0,s,r),c.translate(a.x,a.y),c.rotate(-l),c.translate(-a.x,-a.y);const d=o.toDataURL("image/png");ce(this,ft,"f")[i]=d}}return i};const $n="change",be="SELECT",re=Symbol(`${be}_actionType`),rt=Symbol(`${be}_resizeType`),mi=Symbol(`${be}_areaStart`),yi=Symbol(`${be}_areaEnd`),at=Symbol(`${be}_hoverElement`),Xt=Symbol(`${be}_hoverElementVertexes`),ht=Symbol(`${be}_selectedElementList`),qa=Symbol(`${be}_selectedElementListVertexes`),St=Symbol(`${be}_selectedElementController`),Mt=Symbol(`${be}_selectedElementPosition`),xt=Symbol(`${be}_selectedReferenceXLines`),At=Symbol(`${be}_selectedReferenceYLines`),ze=Symbol(`${be}_groupQueue`),wn=Symbol(`${be}_groupQueueVertexesList`),wi=Symbol(`${be}_isMoving`),pn=Symbol(`${be}_enableSelectInGroup`),pi=Symbol(`${be}_enableSnapToGrid`),_s=2,el=4,Os=1,di="#1973ba",xo="#5b5959b5",Ws=10,tl="#f7276e",Fi="@middleware/select",Ki="@middleware/select-clear",Cn="@middleware/select-in-group",Dn="@middleware/snap-to-grid";function st(e,t,i){const{borderColor:n,borderWidth:o,background:s,lineDash:r}=i;e.setLineDash([]),e.lineWidth=o,e.strokeStyle=n,e.fillStyle=s,e.setLineDash(r),e.beginPath(),e.moveTo(t[0].x,t[0].y),e.lineTo(t[1].x,t[1].y),e.lineTo(t[2].x,t[2].y),e.lineTo(t[3].x,t[3].y),e.lineTo(t[0].x,t[0].y),e.closePath(),e.stroke(),e.fill()}function _n(e,t,i,n){const{borderColor:o,borderWidth:s,lineDash:r}=n;e.setLineDash([]),e.lineWidth=s,e.strokeStyle=o,e.setLineDash(r),e.beginPath(),e.moveTo(t.x,t.y),e.lineTo(i.x,i.y),e.closePath(),e.stroke()}function il(e,t,i){const{size:n,borderColor:o,borderWidth:s,background:r}=i,a=t,c=n/2,l=c,d=c;if(l>=0&&d>=0){if(typeof s=="number"&&s>0){const f=s/2+l,u=s/2+d;e.beginPath(),e.strokeStyle=o,e.lineWidth=s,e.circle(a.x,a.y,f,u,0,0,2*Math.PI),e.closePath(),e.stroke()}e.beginPath(),e.fillStyle=r,e.circle(a.x,a.y,l,d,0,0,2*Math.PI),e.closePath(),e.fill()}}function $e(e,t,i){const{borderColor:n,borderWidth:o,lineDash:s}=i;e.setLineDash([]),e.lineWidth=o,e.strokeStyle=n,e.setLineDash(s),e.beginPath(),e.moveTo(t[0].x,t[0].y),e.lineTo(t[2].x,t[2].y),e.closePath(),e.stroke(),e.beginPath(),e.moveTo(t[1].x,t[1].y),e.lineTo(t[3].x,t[3].y),e.closePath(),e.stroke()}function Ao(e,t,i){const{size:n,borderColor:o,borderWidth:s,lineDash:r}=i,a=t.x-n/2,c=t.x+n/2,l=t.y-n/2,d=t.y+n/2;$e(e,[{x:a,y:l},{x:c,y:l},{x:c,y:d},{x:a,y:d}],{borderColor:o,borderWidth:s,lineDash:r})}function Io(e,t,i){if(!t)return;const n={borderColor:di,borderWidth:1,background:"transparent",lineDash:[]};st(e,xe(t,i),n)}function Ro(e,t,i){if(!t)return;const n={borderColor:xo,borderWidth:1,background:"transparent",lineDash:[]};st(e,xe(t,i),n);const{controller:o}=i;if(o){const{topLeft:s,topRight:r,bottomLeft:a,bottomRight:c,topMiddle:l,bottomMiddle:d,leftMiddle:f,rightMiddle:u}=o,v=Object.assign(Object.assign({},n),{borderWidth:1,background:xo});$e(e,xe(l.vertexes,i),v),$e(e,xe(d.vertexes,i),v),$e(e,xe(f.vertexes,i),v),$e(e,xe(u.vertexes,i),v),$e(e,xe(s.vertexes,i),v),$e(e,xe(r.vertexes,i),v),$e(e,xe(a.vertexes,i),v),$e(e,xe(c.vertexes,i),v)}}function Po(e,t,i){if(!t)return;const{hideControllers:n}=i,{elementWrapper:o,topLeft:s,topRight:r,bottomLeft:a,bottomRight:c,top:l,rotate:d}=t,f={borderColor:di,borderWidth:_s,background:"transparent",lineDash:[]},u=Object.assign(Object.assign({},f),{borderWidth:el,background:"#FFFFFF"});st(e,xe(o,i),f),n||(_n(e,N(l.center,i),N(d.center,i),Object.assign(Object.assign({},u),{borderWidth:2})),st(e,xe(s.vertexes,i),u),st(e,xe(r.vertexes,i),u),st(e,xe(a.vertexes,i),u),st(e,xe(c.vertexes,i),u),il(e,N(d.center,i),Object.assign(Object.assign({},u),{size:Ws,borderWidth:2})))}function nl(e,t){const{start:i,end:n}=t;e.setLineDash([]),e.lineWidth=Os,e.strokeStyle=di,e.fillStyle="#1976d24f",e.beginPath(),e.moveTo(i.x,i.y),e.lineTo(n.x,i.y),e.lineTo(n.x,n.y),e.lineTo(i.x,n.y),e.closePath(),e.stroke(),e.fill()}function ol(e,t){const{areaSize:i}=t,{x:n,y:o,w:s,h:r}=i;e.setLineDash([]),e.lineWidth=Os,e.strokeStyle=di,e.fillStyle="#1976d21c",e.beginPath(),e.moveTo(n,o),e.lineTo(n+s,o),e.lineTo(n+s,o+r),e.lineTo(n,o+r),e.closePath(),e.stroke(),e.fill()}function sl(e,t,i){for(let n=0;n{r.forEach((a,c)=>{Ao(e,a,s),r[c+1]&&_n(e,r[c],r[c+1],o)})}),n&&n.forEach(r=>{r.forEach((a,c)=>{Ao(e,a,s),r[c+1]&&_n(e,r[c],r[c+1],o)})})}function ee(e){return e*Math.PI/180}function bi(e,t){return Math.sqrt(e*e+t*t)}function X(e,t){return t>0?Math.abs(e):0-Math.abs(e)}function On(e,t){const{ctx:i,viewScaleInfo:n,vertexes:o}=t,s=N(o[0],{viewScaleInfo:n}),r=N(o[1],{viewScaleInfo:n}),a=N(o[2],{viewScaleInfo:n}),c=N(o[3],{viewScaleInfo:n});return i.beginPath(),i.moveTo(s.x,s.y),i.lineTo(r.x,r.y),i.lineTo(a.x,a.y),i.lineTo(c.x,c.y),i.lineTo(s.x,s.y),i.closePath(),!!i.isPointInPath(e.x,e.y)}function Lo(e,t){const{ctx:i,viewScaleInfo:n,viewSizeInfo:o,groupQueue:s}=t;if(!s||!((s==null?void 0:s.length)>0))return!1;const r=Gn(s),a=r[r.length-1];return a?On(e,{ctx:i,vertexes:a,viewScaleInfo:n,viewSizeInfo:o}):!1}function Ht(e,t){var i,n,o;const s={type:null,elements:[],elementVertexesList:[],groupQueue:[],groupQueueVertexesList:[]},{ctx:r,data:a,calculator:c,selectedElements:l,viewScaleInfo:d,viewSizeInfo:f,areaSize:u,groupQueue:v,selectedElementController:g}=t;if(g){const{left:h,right:m,top:p,bottom:M,topLeft:w,topRight:y,bottomLeft:A,bottomRight:b,rotate:S}=g,R=[h,m,p,M,w,y,A,b,S];for(let j=0;j0&&(s.groupQueue=v||[],s.elements=[l[0]]);break}}}if(v&&Array.isArray(v)&&v.length>0){const h=v[v.length-1];if(!((i=h==null?void 0:h.detail)===null||i===void 0)&&i.children&&Array.isArray((n=h==null?void 0:h.detail)===null||n===void 0?void 0:n.children))for(let m=h.detail.children.length-1;m>=0;m--){const p=h.detail.children[m],M=si(p,{groupQueue:v});if(M&&On(e,{ctx:r,vertexes:M,viewScaleInfo:d,viewSizeInfo:f}))return s.type||(s.type="over-element"),s.groupQueue=v,s.elements=[p],s}return s}if(s.type!==null)return s;if(u&&Array.isArray(l)&&(l==null?void 0:l.length)>1){const{x:h,y:m,w:p,h:M}=u;if(e.x>=h&&e.x<=h+p&&e.y>=m&&e.y<=m+M)return s.type="list-area",s.elements=l,s}if(a){const{index:h,element:m}=c.getPointElement(e,{data:a,viewScaleInfo:d,viewSizeInfo:f});if(h>=0&&m&&((o=m==null?void 0:m.operations)===null||o===void 0?void 0:o.invisible)!==!0)return s.elements=[m],s.type="over-element",s}return s}function rl(e,t){var i,n,o,s,r,a,c,l,d;let{x:f,y:u,w:v,h:g,angle:h=0}=e;const m=Fe({x:f,y:u,w:v,h:g,angle:h});h=Be(h);const p=et(h),M=!!(!((i=e==null?void 0:e.operations)===null||i===void 0)&&i.limitRatio),{start:w,end:y,resizeType:A,scale:b}=t;let S=Object.assign({},w),R=Object.assign({},y),j={x:S.x,y:m.y},O={x:R.x,y:m.y},W=Object.assign({},j),_=Object.assign({},O),k={x:m.x,y:S.y},U={x:m.x,y:R.y},K=Object.assign({},k),L=Object.assign({},U),T=(_.x-W.x)/b,Y=(_.y-W.y)/b,E=bi(T,Y),$=(L.x-K.x)/b,G=(L.y-K.y)/b,x=bi($,G);(h>0||h<0)&&(S=le(m,w,0-p),R=le(m,y,0-p),j={x:S.x,y:m.y},O={x:R.x,y:m.y},W=le(m,j,p),_=le(m,O,p),k={x:m.x,y:S.y},U={x:m.x,y:R.y},K=le(m,k,p),L=le(m,U,p),T=(_.x-W.x)/b,Y=(_.y-W.y)/b,E=bi(T,Y),E=X(E,Y),$=(L.x-K.x)/b,G=(L.y-K.y)/b,x=bi($,G),x=X(x,G));let Z=(y.x-w.x)/b,Q=(y.y-w.y)/b;if(M===!0){if(["resize-top","resize-bottom","resize-left","resize-right"].includes(A)){const P=Math.max(Math.abs(Z),Math.abs(Q));Z=(Z>=0?1:-1)*P,Q=(Q>=0?1:-1)*P/e.w*e.h;const z=Math.max(Math.abs($),Math.abs(G));$=($>=0?1:-1)*z,G=(G>=0?1:-1)*z/e.w*e.h;const I=Math.max(Math.abs(T),Math.abs(Y));T=(T>=0?1:-1)*I,Y=(Y>=0?1:-1)*I/e.w*e.h}else if(["resize-top-left","resize-top-right","resize-bottom-left","resize-bottom-right"].includes(A)){{const P=Math.abs(Z);Z=(Z>=0?1:-1)*P;const z=P/e.w*e.h;A==="resize-top-left"||A==="resize-bottom-right"?Q=Z>0?z:-z:(A==="resize-top-right"||A==="resize-bottom-left")&&(Q=Z>0?-z:z)}E=Math.abs(E),x=E/e.w*e.h}}switch(A){case"resize-top":{if(h===0)g-Q>0&&(u+=Q,g-=Q,((n=e.operations)===null||n===void 0?void 0:n.limitRatio)===!0&&(f+=Q/e.h*e.w/2,v-=Q/e.h*e.w));else if(h>0||h<0){let P=m.x,z=m.y;if(h<90){x=0-X(x,G);const I=ee(h),C=x/2;P=P+C*Math.sin(I),z=z-C*Math.cos(I)}else if(h<180){x=X(x,$);const I=ee(h-90),C=x/2;P=P+C*Math.cos(I),z=z+C*Math.sin(I)}else if(h<270){x=X(x,G);const I=ee(h-180),C=x/2;P=P-C*Math.sin(I),z=z+C*Math.cos(I)}else if(h<360){x=0-X(x,$);const I=ee(h-270),C=x/2;P=P-C*Math.cos(I),z=z-C*Math.sin(I)}g+x>0&&(((o=e.operations)===null||o===void 0?void 0:o.limitRatio)===!0&&(v=v+x/e.h*e.w),g=g+x,f=P-v/2,u=z-g/2)}break}case"resize-bottom":{if(h===0)e.h+Q>0&&(g+=Q,((s=e.operations)===null||s===void 0?void 0:s.limitRatio)===!0&&(f-=Q/e.h*e.w/2,v+=Q/e.h*e.w));else if(h>0||h<0){let P=m.x,z=m.y;if(h<90){x=X(x,G);const I=ee(h),C=x/2;P=P-C*Math.sin(I),z=z+C*Math.cos(I)}else if(h<180){x=0-X(x,$);const I=ee(h-90),C=x/2;P=P-C*Math.cos(I),z=z-C*Math.sin(I)}else if(h<270){x=X(x,$);const I=ee(h-180),C=x/2;P=P+C*Math.sin(I),z=z-C*Math.cos(I)}else if(h<360){x=X(x,$);const I=ee(h-270),C=x/2;P=P+C*Math.cos(I),z=z+C*Math.sin(I)}g+x>0&&(((r=e.operations)===null||r===void 0?void 0:r.limitRatio)===!0&&(v=v+x/e.h*e.w),g=g+x,f=P-v/2,u=z-g/2)}break}case"resize-left":{if(h===0)e.w-Z>0&&(f+=Z,v-=Z,((a=e.operations)===null||a===void 0?void 0:a.limitRatio)===!0&&(g-=Z/e.w*e.h,u+=Z/e.w*e.h/2));else if(h>0||h<0){let P=m.x,z=m.y;if(h<90){E=0-X(E,T);const I=ee(h),C=E/2;P=P-C*Math.cos(I),z=z-C*Math.sin(I)}else if(h<180){E=X(E,T);const I=ee(h-90),C=E/2;P=P+C*Math.sin(I),z=z-C*Math.cos(I)}else if(h<270){E=X(E,Y);const I=ee(h-180),C=E/2;P=P+C*Math.cos(I),z=z+C*Math.sin(I)}else if(h<360){E=X(E,Y);const I=ee(h-270),C=E/2;P=P-C*Math.sin(I),z=z+C*Math.cos(I)}v+E>0&&(((c=e.operations)===null||c===void 0?void 0:c.limitRatio)===!0&&(g=g+E/e.w*e.h),v=v+E,f=P-v/2,u=z-g/2)}break}case"resize-right":{if(h===0)e.w+Z>0&&(v+=Z,((l=e.operations)===null||l===void 0?void 0:l.limitRatio)===!0&&(u-=Z*e.h/e.w/2,g+=Z*e.h/e.w));else if(h>0||h<0){let P=m.x,z=m.y;if(h<90){E=X(E,Y);const I=ee(h),C=E/2;P=P+C*Math.cos(I),z=z+C*Math.sin(I)}else if(h<180){E=X(E,Q);const I=ee(h-90),C=E/2;P=P-C*Math.sin(I),z=z+C*Math.cos(I)}else if(h<270){E=X(E,Q);const I=ee(h-180),C=E/2;P=P+C*Math.cos(I),z=z+C*Math.sin(I),E=0-E}else if(h<360){E=X(E,Z);const I=ee(h-270),C=E/2;P=P+C*Math.sin(I),z=z-C*Math.cos(I)}v+E>0&&(((d=e.operations)===null||d===void 0?void 0:d.limitRatio)===!0&&(g=g+E/e.w*e.h),v=v+E,f=P-v/2,u=z-g/2)}break}case"resize-top-left":{if(h===0)v-Z>0&&(f+=Z,v-=Z),g-Q>0&&(u+=Q,g-=Q);else if(h>0||h<0){let P=m.x,z=m.y;if(h<90){x=0-X(x,G),E=0-X(E,M?0-x:T);const I=x/2;P=P+I*Math.sin(p),z=z-I*Math.cos(p);const C=E/2;P=P-C*Math.cos(p),z=z-C*Math.sin(p)}else if(h<180){x=X(x,$),E=X(E,M?x:T);const I=ee(h-90),C=x/2;P=P+C*Math.cos(I),z=z+C*Math.sin(I);const H=E/2;P=P+H*Math.sin(I),z=z-H*Math.cos(I)}else if(h<270){x=X(x,G),E=X(E,M?x:Y);const I=ee(h-180),C=x/2;P=P-C*Math.sin(I),z=z+C*Math.cos(I);const H=E/2;P=P+H*Math.cos(I),z=z+H*Math.sin(I)}else if(h<360){x=0-X(x,$),E=X(E,M?x:Y);const I=ee(h-270),C=x/2;P=P-C*Math.cos(I),z=z-C*Math.sin(I);const H=E/2;P=P-H*Math.sin(I),z=z+H*Math.cos(I)}g+x>0&&(g=g+x),v+E>0&&(v=v+E),f=P-v/2,u=z-g/2}break}case"resize-top-right":{if(h===0)v+Z>0&&(v+=Z),g-Q>0&&(u+=Q,g-=Q);else if(h>0||h<0){let P=m.x,z=m.y;if(h<90){x=0-X(x,G),E=X(E,M?x:Y);const I=ee(h),C=x/2;P=P+C*Math.sin(I),z=z-C*Math.cos(I);const H=E/2;P=P+H*Math.cos(I),z=z+H*Math.sin(I)}else if(h<180){x=X(x,$),E=X(E,M?x:Y);const I=ee(h-90),C=x/2;P=P+C*Math.cos(I),z=z+C*Math.sin(I);const H=E/2;P=P-H*Math.sin(I),z=z+H*Math.cos(I)}else if(h<270){const I=ee(h-180);x=X(x,G),E=X(E,M?x:0-T);const C=x/2;P=P-C*Math.sin(I),z=z+C*Math.cos(I);const H=E/2;P=P-H*Math.cos(I),z=z-H*Math.sin(I)}else if(h<360){x=0-X(x,$),E=X(E,M?x:T);const I=ee(h-270),C=x/2;P=P-C*Math.cos(I),z=z-C*Math.sin(I);const H=E/2;P=P+H*Math.sin(I),z=z-H*Math.cos(I)}g+x>0&&(g=g+x),v+E>0&&(v=v+E),f=P-v/2,u=z-g/2}break}case"resize-bottom-left":{if(h===0)e.h+Q>0&&(g+=Q),e.w-Z>0&&(f+=Z,v-=Z);else if(h>0||h<0){let P=m.x,z=m.y;if(h<90){x=X(x,G),E=0-X(E,M?0-x:T);const I=ee(h),C=x/2;P=P-C*Math.sin(I),z=z+C*Math.cos(I);const H=E/2;P=P-H*Math.cos(I),z=z-H*Math.sin(I)}else if(h<180){x=0-X(x,$),E=X(E,M?x:T);const I=ee(h-90),C=x/2;P=P-C*Math.cos(I),z=z-C*Math.sin(I);const H=E/2;P=P+H*Math.sin(I),z=z-H*Math.cos(I)}else if(h<270){x=X(x,$),E=X(E,M?x:Y);const I=ee(h-180),C=x/2;P=P+C*Math.sin(I),z=z-C*Math.cos(I);const H=E/2;P=P+H*Math.cos(I),z=z+H*Math.sin(I)}else if(h<360){x=X(x,$),E=X(E,M?x:Y);const I=ee(h-270),C=x/2;P=P+C*Math.cos(I),z=z+C*Math.sin(I);const H=E/2;P=P-H*Math.sin(I),z=z+H*Math.cos(I)}g+x>0&&(g=g+x),v+E>0&&(v=v+E),f=P-v/2,u=z-g/2}break}case"resize-bottom-right":{if(h===0)e.h+Q>0&&(g+=Q),e.w+Z>0&&(v+=Z);else if(h>0||h<0){let P=m.x,z=m.y;if(h<90){x=X(x,G),E=X(E,M?x:Y);const I=ee(h),C=x/2;P=P-C*Math.sin(I),z=z+C*Math.cos(I);const H=E/2;P=P+H*Math.cos(I),z=z+H*Math.sin(I)}else if(h<180){x=0-X(x,$),E=X(E,M?x:Q);const I=ee(h-90),C=x/2;P=P-C*Math.cos(I),z=z-C*Math.sin(I);const H=E/2;P=P-H*Math.sin(I),z=z+H*Math.cos(I)}else if(h<270){x=X(x,$),E=X(E,M?x:0-Y);const I=ee(h-180),C=x/2;P=P+C*Math.sin(I),z=z-C*Math.cos(I);const H=E/2;P=P-H*Math.cos(I),z=z-H*Math.sin(I)}else if(h<360){x=X(x,$),E=X(E,M?x:T);const I=ee(h-270),C=x/2;P=P+C*Math.cos(I),z=z+C*Math.sin(I);const H=E/2;P=P+H*Math.sin(I),z=z-H*Math.cos(I)}g+x>0&&(g=g+x),v+E>0&&(v=v+E),f=P-v/2,u=z-g/2}break}}return{x:f,y:u,w:v,h:g,angle:e.angle}}function al(e,t){const{x:i,y:n,w:o,h:s,angle:r=0}=e,{center:a,start:c,end:l,viewScaleInfo:d}=t,f=N(a,{viewScaleInfo:d}),u=Be(r),v=kr(f,c,l),g=u+Wr(v);return{x:i,y:n,w:o,h:s,angle:g}}function ll(e,t){var i;const n=[],o=[],s=[],{viewScaleInfo:r,viewSizeInfo:a,start:c,end:l}=t;if(!(Array.isArray(e.elements)&&c&&l))return{indexes:n,uuids:o,elements:s};const d=Math.min(c.x,l.x),f=Math.max(c.x,l.x),u=Math.min(c.y,l.y),v=Math.max(c.y,l.y);for(let g=0;g=d&&p.x<=f&&p.y>=u&&p.y<=v&&(n.push(g),o.push(h.uuid),s.push(h),m.angle&&(m.angle>0||m.angle<0))){const M=wt(m);if(M.length===4){const w=[M[0].x,M[1].x,M[2].x,M[3].x],y=[M[0].y,M[1].y,M[2].y,M[3].y];m.x=Math.min(...w),m.y=Math.min(...y),m.w=Math.abs(Math.max(...w)-Math.min(...w)),m.h=Math.abs(Math.max(...y)-Math.min(...y))}}}return{indexes:n,uuids:o,elements:s}}function bn(e,t){var i;if(!Array.isArray(e))return null;const n={x:0,y:0,w:0,h:0},{viewScaleInfo:o,viewSizeInfo:s}=t;let r=null;for(let a=0;a0||l.angle<0)){const d=wt(l);if(d.length===4){const f=[d[0].x,d[1].x,d[2].x,d[3].x],u=[d[0].y,d[1].y,d[2].y,d[3].y];l.x=Math.min(...f),l.y=Math.min(...u),l.w=Math.abs(Math.max(...f)-Math.min(...f)),l.h=Math.abs(Math.max(...u)-Math.min(...u))}}if(r){const d=Math.min(l.x,n.x),f=Math.min(l.y,n.y),u=Math.max(l.x+l.w,n.x+n.w),v=Math.max(l.y+l.h,n.y+n.h);n.x=d,n.y=f,n.w=Math.abs(u-d),n.h=Math.abs(v-f)}else n.x=l.x,n.y=l.y,n.w=l.w,n.h=l.h;r=l}return n}function cl(e,t){var i;if((t==null?void 0:t.type)==="group"&&Array.isArray((i=t==null?void 0:t.detail)===null||i===void 0?void 0:i.children))for(let n=0;n{const{x:a,y:c,w:l,h:d,angle:f=0}=r;s.push({x:a,y:c,w:l,h:d,angle:0-f})}),(i==null?void 0:i.length)>0){const r=$i(e,s),a=$i(t,s);n=a.x-r.x,o=a.y-r.y}return{moveX:n,moveY:o}}const Eo=2;function To(e){return{minX:e.topLeft.x,minY:e.topLeft.y,maxX:e.bottomRight.x,maxY:e.bottomRight.y,midX:e.center.x,midY:e.center.y}}const It=(e,t)=>{if(e.length===0)throw null;if(e.length===1)return e[0];let i=0,n=e.length-1;for(;i<=n;){const o=Math.floor((i+n)/2);if(e[o]===t)return e[o];e[o]=e.length?e[n]:n<0?e[i]:Math.abs(e[n]-t)<=Math.abs(e[i]-t)?e[n]:e[i]},Te=(e,t)=>Math.abs(e-t)<1e-5;function fl(e,t){var i,n;const{data:o,groupQueue:s,calculator:r,viewScaleInfo:a,viewSizeInfo:c}=t;let l=o.elements||[];(s==null?void 0:s.length)>0&&(l=((n=(i=s[s.length-1])===null||i===void 0?void 0:i.detail)===null||n===void 0?void 0:n.children)||[]);const d=[];l.forEach(L=>{if(L.uuid!==e){const T=r.calcViewRectInfoFromRange(L.uuid,{checkVisible:!0,viewScaleInfo:a,viewSizeInfo:c});T&&d.push(T)}});const f=r.calcViewRectInfoFromRange(e,{viewScaleInfo:a,viewSizeInfo:c});if(!f)return null;const u={},v={},g={},h={},m=[],p=[];let M=[],w=[];const y=To(f);u[y.minX]=[y.minY,y.midY,y.maxY],u[y.midX]=[y.minY,y.midY,y.maxY],u[y.maxX]=[y.minY,y.midY,y.maxY],v[y.minY]=[y.minX,y.midX,y.maxX],v[y.midY]=[y.minX,y.midX,y.maxX],v[y.maxY]=[y.minX,y.midX,y.maxX],d.forEach(L=>{const T=To(L);g[T.minX]||(g[T.minX]=[]),g[T.midX]||(g[T.midX]=[]),g[T.maxX]||(g[T.maxX]=[]),h[T.minY]||(h[T.minY]=[]),h[T.midY]||(h[T.midY]=[]),h[T.maxY]||(h[T.maxY]=[]),g[T.minX]=[T.minY,T.midY,T.maxY],g[T.midX]=[T.minY,T.midY,T.maxY],g[T.maxX]=[T.minY,T.midY,T.maxY],M.push(T.minX),M.push(T.midX),M.push(T.maxX),h[T.minY]=[T.minX,T.midX,T.maxX],h[T.midY]=[T.minX,T.midX,T.maxX],h[T.maxY]=[T.minX,T.midX,T.maxX],w.push(T.minY),w.push(T.midY),w.push(T.maxY)}),M=M.sort((L,T)=>L-T),w=w.sort((L,T)=>L-T);let A=null,b=null,S=null,R=null,j=null,O=null,W=null,_=null;if(M.length>0){S=It(M,y.minX),R=It(M,y.midX),j=It(M,y.maxX);const L=Math.abs(S-y.minX),T=Math.abs(R-y.midX),Y=Math.abs(j-y.maxX),E=Math.min(L,T,Y);E<=Eo/a.scale&&(Te(E,L)?A=S-y.minX:Te(E,T)?A=R-y.midX:Te(E,Y)&&(A=j-y.maxX))}if(w.length>0){O=It(w,y.minY),W=It(w,y.midY),_=It(w,y.maxY);const L=Math.abs(O-y.minY),T=Math.abs(W-y.midY),Y=Math.abs(_-y.maxY),E=Math.min(L,T,Y);E<=Eo/a.scale&&(Te(E,L)?b=O-y.minY:Te(E,T)?b=W-y.midY:Te(E,Y)&&(b=_-y.maxY))}const k=Object.assign({},y);if(A!==null&&(k.minX+=A,k.midX+=A,k.maxX+=A),b!==null&&(k.minY+=b,k.midY+=b,k.maxY+=b),J.x(A)&&A!==null&&S!==null&&R!==null&&j!==null){if(Te(A,S-y.minX)){const L={x:S,yList:[]};L.yList.push(k.minY),L.yList.push(k.midY),L.yList.push(k.maxY),L.yList.push(...(h==null?void 0:h[S])||[]),m.push(L)}if(Te(A,R-y.minX)){const L={x:R,yList:[]};L.yList.push(k.minY),L.yList.push(k.midY),L.yList.push(k.maxY),L.yList.push(...(h==null?void 0:h[R])||[]),m.push(L)}if(Te(A,j-y.minX)){const L={x:j,yList:[]};L.yList.push(k.minY),L.yList.push(k.midY),L.yList.push(k.maxY),L.yList.push(...(h==null?void 0:h[j])||[]),m.push(L)}}if(J.y(b)&&b!==null&&O!==null&&W!==null&&_!==null){if(Te(b,O-y.minY)){const L={y:O,xList:[]};L.xList.push(k.minX),L.xList.push(k.midX),L.xList.push(k.maxX),L.xList.push(...(g==null?void 0:g[O])||[]),p.push(L)}if(Te(b,W-y.midY)){const L={y:W,xList:[]};L.xList.push(k.minX),L.xList.push(k.midX),L.xList.push(k.maxX),L.xList.push(...(g==null?void 0:g[O])||[]),p.push(L)}if(Te(b,_-y.maxY)){const L={y:_,xList:[]};L.xList.push(k.minX),L.xList.push(k.midX),L.xList.push(k.maxX),L.xList.push(...(g==null?void 0:g[_])||[]),p.push(L)}}const U=[];(m==null?void 0:m.length)>0&&m.forEach((L,T)=>{U.push([]),L.yList.forEach(Y=>{U[T].push({x:L.x,y:Y})})});const K=[];return(p==null?void 0:p.length)>0&&p.forEach((L,T)=>{K.push([]),L.xList.forEach(Y=>{K[T].push({x:Y,y:L.y})})}),{offsetX:A,offsetY:b,yLines:U,xLines:K}}const qi="@middleware/text-edit",Wn="@middleware/text-change",hl=Bt(),Co=e=>{const{eventHub:t,boardContent:i,viewer:n,sharer:o}=e,s=i.boardContext.canvas,r=document.createElement("div");r.setAttribute("contenteditable","true");const a=document.createElement("div"),c=e.container||document.body,l=document.createElement("div");let d=null,f=[];a.appendChild(r),a.style.position="absolute",l.appendChild(a),l.style.position="fixed",l.style.top="0",l.style.bottom="0",l.style.left="0",l.style.right="0",l.style.display="none",c.appendChild(l);const u=w=>{p(),m(w),l.style.display="block",d!=null&&d.uuid&&(o.setActiveOverrideElemenentMap({[d.uuid]:{operations:{invisible:!0}}}),n.drawFrame())},v=()=>{if(d!=null&&d.uuid){const w=o.getActiveOverrideElemenentMap();w&&delete w[d.uuid],o.setActiveOverrideElemenentMap(w),n.drawFrame()}l.style.display="none",d=null,f=[]},g=()=>{const w=s.getBoundingClientRect(),{left:y,top:A,width:b,height:S}=w;return{left:y,top:A,width:b,height:S}},h=w=>{const{size:y,parent:A}=w,b=document.createElement("div"),{x:S,y:R,w:j,h:O}=y,W=Be(y.angle||0);return b.style.position="absolute",b.style.left=`${S}px`,b.style.top=`${R}px`,b.style.width=`${j}px`,b.style.height=`${O}px`,b.style.transform=`rotate(${W}deg)`,A.appendChild(b),b},m=w=>{const{viewScaleInfo:y,element:A,groupQueue:b}=w,{scale:S,offsetTop:R,offsetLeft:j}=y;a.children&&Array.from(a.children).forEach(Y=>{Y.remove()});let O=a;for(let Y=0;Y0&&(_=A.x*S,k=A.y*S,U=A.w*S,K=A.h*S);let L="center",T="center";W.textAlign==="left"?L="start":W.textAlign==="right"&&(L="end"),W.verticalAlign==="top"?T="start":W.verticalAlign==="bottom"&&(T="end"),r.style.display="inline-flex",r.style.justifyContent=L,r.style.alignItems=T,r.style.position="absolute",r.style.left=`${_-1}px`,r.style.top=`${k-1}px`,r.style.width=`${U+2}px`,r.style.height=`${K+2}px`,r.style.transform=`rotate(${Be(A.angle||0)}deg)`,r.style.boxSizing="border-box",r.style.border="1px solid #1973ba",r.style.resize="none",r.style.overflow="hidden",r.style.wordBreak="break-all",r.style.background="transparent",r.style.color=`${W.color||"#333333"}`,r.style.fontSize=`${W.fontSize*S}px`,r.style.lineHeight=`${(W.lineHeight||W.fontSize)*S}px`,r.style.fontFamily=vs(W.fontFamily),r.style.fontWeight=`${W.fontWeight}`,r.style.padding="0",r.style.margin="0",r.style.outline="none",r.innerText=W.text||"",O.appendChild(r)},p=()=>{const{left:w,top:y,width:A,height:b}=g();a.style.position="absolute",a.style.overflow="hidden",a.style.top=`${y}px`,a.style.left=`${w}px`,a.style.width=`${A}px`,a.style.height=`${b}px`};l.addEventListener("click",()=>{v()}),r.addEventListener("click",w=>{w.stopPropagation()}),r.addEventListener("input",()=>{d&&f&&(d.detail.text=r.innerText||"",t.trigger(Wn,{element:{uuid:d.uuid,detail:{text:d.detail.text}},position:[...f||[]]}),n.drawFrame())}),r.addEventListener("blur",()=>{d&&f&&t.trigger(Wn,{element:{uuid:d.uuid,detail:{text:d.detail.text}},position:[...f]}),v()}),r.addEventListener("keydown",w=>{w.stopPropagation()}),r.addEventListener("keypress",w=>{w.stopPropagation()}),r.addEventListener("keyup",w=>{w.stopPropagation()}),r.addEventListener("wheel",w=>{w.stopPropagation(),w.preventDefault()});const M=w=>{var y;w!=null&&w.position&&(w!=null&&w.element)&&((y=w==null?void 0:w.element)===null||y===void 0?void 0:y.type)==="text"&&(d=w.element,f=w.position),u(w)};return{name:"@middleware/text-editor",use(){t.on(qi,M)},disuse(){t.off(qi,M)}}},Do=e=>{const{viewer:t,sharer:i,boardContent:n,calculator:o,eventHub:s}=e,{overlayContext:r}=n;let a=null,c=null;i.setSharedStorage(re,null),i.setSharedStorage(pi,!0);const l=()=>i.getSharedStorage(ht),d=w=>{let y=i.getSharedStorage(ze);Array.isArray(y)||(y=[]),y.length>0?cl(w,y[y.length-1])?y.push(w):y=[]:y.length===0&&y.push(w);const A=Gn(y);return i.setSharedStorage(ze,y),i.setSharedStorage(wn,A),y.length>0},f=w=>{i.setSharedStorage(at,w);let y=null;w&&(y=si(w,{groupQueue:i.getSharedStorage(ze)})),i.setSharedStorage(Xt,y)},u=(w,y)=>{var A;if(i.setSharedStorage(ht,w),w.length===1){const b=vi(w[0],{groupQueue:i.getSharedStorage(ze),controllerSize:Ws,viewScaleInfo:i.getActiveViewScaleInfo()});i.setSharedStorage(St,b),i.setSharedStorage(Mt,ei(w[0].uuid,((A=i.getActiveStorage("data"))===null||A===void 0?void 0:A.elements)||[]))}else i.setSharedStorage(St,null),i.setSharedStorage(Mt,[]);(y==null?void 0:y.triggerEvent)===!0&&s.trigger(Fi,{uuids:w.map(b=>b.uuid)})},v=()=>({ctx:r,calculator:o,data:i.getActiveStorage("data"),selectedElements:l(),viewScaleInfo:i.getActiveViewScaleInfo(),viewSizeInfo:i.getActiveViewSizeInfo(),groupQueue:i.getSharedStorage(ze),areaSize:null,selectedElementController:i.getSharedStorage(St),selectedElementPosition:i.getSharedStorage(Mt)}),g=()=>{i.setSharedStorage(re,null),i.setSharedStorage(rt,null),i.setSharedStorage(mi,null),i.setSharedStorage(yi,null),i.setSharedStorage(ze,[]),i.setSharedStorage(wn,[]),i.setSharedStorage(at,null),i.setSharedStorage(Xt,null),i.setSharedStorage(ht,[]),i.setSharedStorage(qa,null),i.setSharedStorage(St,null),i.setSharedStorage(Mt,[]),i.setSharedStorage(xt,[]),i.setSharedStorage(At,[]),i.setSharedStorage(wi,null),i.setSharedStorage(pn,null)};g();const h=({uuids:w,positions:y})=>{let A=[];const b=i.getSharedStorage(re),S=i.getActiveStorage("data");y&&Array.isArray(y)?A=Xr(y,(S==null?void 0:S.elements)||[]):A=Fr(w,(S==null?void 0:S.elements)||[]);let R=!1;if(!b&&A.length===1?(i.setSharedStorage(re,"select"),R=!0):b==="select"&&A.length===1&&(R=!0),R){const j=A[0],O=Gr(j.uuid,(S==null?void 0:S.elements)||[]);i.setSharedStorage(ze,O),u(A),t.drawFrame()}},m=()=>{g(),t.drawFrame()},p=w=>{i.setSharedStorage(pi,!!w.enable)},M=w=>{i.setSharedStorage(pn,!!w.enable)};return{name:"@middleware/selector",use(){s.on(Fi,h),s.on(Ki,m),s.on(Cn,M),s.on(Dn,p)},disuse(){s.off(Fi,h),s.off(Ki,m),s.off(Cn,M),s.off(Dn,p)},hover:w=>{var y,A,b,S,R;const j=i.getSharedStorage(rt),O=i.getSharedStorage(re),W=i.getSharedStorage(ze),_=T=>{const Y=T.type;c===null&&s.trigger("cursor",{type:Y,groupQueue:T.groupQueue,element:T.elements[0]})};if((W==null?void 0:W.length)>0){if(!Lo(w.point,{ctx:r,viewScaleInfo:i.getActiveViewScaleInfo(),viewSizeInfo:i.getActiveViewSizeInfo(),groupQueue:i.getSharedStorage(ze)})){f(null),t.drawFrame();return}const Y=Ht(w.point,v());if(_(Y),j||["area","drag","drag-list"].includes(O)){f(null),t.drawFrame();return}if(((y=Y==null?void 0:Y.elements)===null||y===void 0?void 0:y.length)===1){f(Y.elements[0]),t.drawFrame();return}f(null),t.drawFrame();return}if(j||["area","drag","drag-list"].includes(O)){f(null);return}if(O==="drag"){f(null);return}const k=l(),U=i.getActiveViewScaleInfo(),K=i.getActiveViewSizeInfo(),L=Ht(w.point,Object.assign(Object.assign({},v()),{areaSize:bn(k,{viewScaleInfo:U,viewSizeInfo:K,calculator:o})}));if(_(L),L.type===null){(i.getSharedStorage(at)||i.getSharedStorage(Xt))&&(i.setSharedStorage(at,null),i.setSharedStorage(Xt,null),t.drawFrame());return}if(!(L.type==="over-element"&&i.getSharedStorage(re)==="select"&&L.elements.length===1&&L.elements[0].uuid===((b=(A=l())===null||A===void 0?void 0:A[0])===null||b===void 0?void 0:b.uuid))&&!(L.type==="over-element"&&i.getSharedStorage(re)===null&&L.elements.length===1&&L.elements[0].uuid===((S=i.getSharedStorage(at))===null||S===void 0?void 0:S.uuid))){if(L.type==="over-element"&&((R=L==null?void 0:L.elements)===null||R===void 0?void 0:R.length)===1){f(L.elements[0]),t.drawFrame();return}if(i.getSharedStorage(at)){f(null),t.drawFrame();return}}},pointStart:w=>{var y,A,b,S,R,j,O,W,_,k;a=w.point;const U=i.getSharedStorage(ze);if((U==null?void 0:U.length)>0){if(Lo(w.point,{ctx:r,viewScaleInfo:i.getActiveViewScaleInfo(),viewSizeInfo:i.getActiveViewSizeInfo(),groupQueue:U})){const T=Ht(w.point,v());if(((y=T==null?void 0:T.elements)===null||y===void 0?void 0:y.length)===1&&((b=(A=T.elements[0])===null||A===void 0?void 0:A.operations)===null||b===void 0?void 0:b.lock)===!0)return;f(null),T.type==="over-element"&&((S=T==null?void 0:T.elements)===null||S===void 0?void 0:S.length)===1?(u([T.elements[0]],{triggerEvent:!0}),i.setSharedStorage(re,"drag")):!((R=T.type)===null||R===void 0)&&R.startsWith("resize-")?(i.setSharedStorage(rt,T.type),i.setSharedStorage(re,"resize")):u([],{triggerEvent:!0})}else g();t.drawFrame();return}const K=bn(l(),{viewScaleInfo:i.getActiveViewScaleInfo(),viewSizeInfo:i.getActiveViewSizeInfo(),calculator:o}),L=Ht(w.point,Object.assign(Object.assign({},v()),{areaSize:K,groupQueue:[]}));((j=L==null?void 0:L.elements)===null||j===void 0?void 0:j.length)===1&&((W=(O=L.elements[0])===null||O===void 0?void 0:O.operations)===null||W===void 0?void 0:W.lock)===!0||(f(null),L.type==="list-area"?i.setSharedStorage(re,"drag-list"):L.type==="over-element"&&((_=L==null?void 0:L.elements)===null||_===void 0?void 0:_.length)===1?(u([L.elements[0]],{triggerEvent:!0}),i.setSharedStorage(re,"drag")):!((k=L.type)===null||k===void 0)&&k.startsWith("resize-")?(i.setSharedStorage(rt,L.type),i.setSharedStorage(re,"resize")):(g(),i.setSharedStorage(re,"area"),i.setSharedStorage(mi,w.point),u([],{triggerEvent:!0})),t.drawFrame())},pointMove:w=>{var y,A,b;i.setSharedStorage(xt,[]),i.setSharedStorage(At,[]),i.setSharedStorage(wi,!0);const S=i.getActiveStorage("data"),R=l(),j=i.getActiveStorage("scale")||1,O=i.getActiveViewScaleInfo(),W=i.getActiveViewSizeInfo(),_=a,k=w.point,U=i.getSharedStorage(rt),K=i.getSharedStorage(re),L=i.getSharedStorage(ze),T=i.getSharedStorage(pi);if(K==="drag"){if(c="drag",S&&(R==null?void 0:R.length)===1&&_&&k&&((A=(y=R[0])===null||y===void 0?void 0:y.operations)===null||A===void 0?void 0:A.lock)!==!0){const{moveX:Y,moveY:E}=dl(_,k,L);let $=o.toGridNum(Y/j),G=o.toGridNum(E/j);if(T===!0){const x=fl(R[0].uuid,{calculator:o,data:S,groupQueue:L,viewScaleInfo:O,viewSizeInfo:W});try{x&&(J.x(x.offsetX)&&x.offsetX!==null&&($=o.toGridNum($+x.offsetX)),J.y(x.offsetY)&&x.offsetY!==null&&(G=o.toGridNum(G+x.offsetY)),i.setSharedStorage(xt,x.xLines),i.setSharedStorage(At,x.yLines))}catch(Z){console.error(Z)}}R[0].x=o.toGridNum(R[0].x+$),R[0].y=o.toGridNum(R[0].y+G),u([R[0]]),o.modifyViewVisibleInfoMap(S,{modifyOptions:{type:"updateElement",content:{element:R[0],position:i.getSharedStorage(Mt)||[]}},viewSizeInfo:W,viewScaleInfo:O})}t.drawFrame()}else if(K==="drag-list"){if(c="drag-list",S&&_&&k&&(R==null?void 0:R.length)>1){const Y=(k.x-_.x)/j,E=(k.y-_.y)/j;R.forEach($=>{var G;$&&((G=$==null?void 0:$.operations)===null||G===void 0?void 0:G.lock)!==!0&&($.x=o.toGridNum($.x+Y),$.y=o.toGridNum($.y+E),o.modifyViewVisibleInfoMap(S,{modifyOptions:{type:"updateElement",content:{element:$,position:ei($.uuid,S.elements)||[]}},viewSizeInfo:W,viewScaleInfo:O}))}),i.setActiveStorage("data",S)}t.drawFrame()}else if(K==="resize"){if(S&&(R==null?void 0:R.length)===1&&_&&(U!=null&&U.startsWith("resize-"))){c="resize";const Y=[];L.forEach(G=>{const{x,y:Z,w:Q,h:P,angle:z=0}=G;Y.push({x,y:Z,w:Q,h:P,angle:0-z})});let E=_,$=k;if(L.length>0&&(E=$i(_,Y),$=$i(k,Y)),U==="resize-rotate"){const G=i.getSharedStorage(St),x=[G.topLeft.center,G.topRight.center,G.bottomLeft.center,G.bottomRight.center],Z=ts(x),Q=al(R[0],{center:Z,viewScaleInfo:O,viewSizeInfo:W,start:_,end:k,resizeType:U,sharer:i});R[0].angle=o.toGridNum(Q.angle||0)}else{const G=rl(R[0],{scale:j,start:E,end:$,resizeType:U,sharer:i}),x={ignore:!!R[0].angle};R[0].x=o.toGridNum(G.x,x),R[0].y=o.toGridNum(G.y,x),R[0].type==="group"&&((b=R[0].operations)===null||b===void 0?void 0:b.deepResize)===!0?Hn(R[0],{w:o.toGridNum(G.w,x),h:o.toGridNum(G.h,x)}):(R[0].w=o.toGridNum(G.w,x),R[0].h=o.toGridNum(G.h,x))}u([R[0]]),o.modifyViewVisibleInfoMap(S,{modifyOptions:{type:"updateElement",content:{element:R[0],position:i.getSharedStorage(Mt)||[]}},viewSizeInfo:W,viewScaleInfo:O}),t.drawFrame()}}else K==="area"&&(c="area",i.setSharedStorage(yi,w.point),t.drawFrame());a=w.point},pointEnd(w){c=null,i.setSharedStorage(xt,[]),i.setSharedStorage(At,[]),i.setSharedStorage(wi,!1);const y=i.getActiveStorage("data"),A=i.getSharedStorage(rt),b=i.getSharedStorage(re),S=i.getActiveViewSizeInfo();let R=!1;if(a=null,b==="resize"&&A)i.setSharedStorage(rt,null),R=!0;else if(b==="area"){if(i.setSharedStorage(re,null),y){const O=i.getSharedStorage(mi),W=i.getSharedStorage(yi);if(O&&W){const{elements:_}=ll(y,{start:O,end:W,calculator:o,viewScaleInfo:i.getActiveViewScaleInfo(),viewSizeInfo:i.getActiveViewSizeInfo()});_.length>0&&(i.setSharedStorage(re,"drag-list"),u(_,{triggerEvent:!0}),R=!0)}}}else b==="drag-list"?(i.setSharedStorage(re,"drag-list-end"),R=!0):y&&(o.getPointElement(w.point,{data:y,viewScaleInfo:i.getActiveViewScaleInfo(),viewSizeInfo:i.getActiveViewSizeInfo()}).element?(i.setSharedStorage(re,"select"),R=!0):i.setSharedStorage(re,null));i.getSharedStorage(re)===null&&(g(),R=!0),(()=>{if(R){if(y&&Array.isArray(y==null?void 0:y.elements)&&["drag","drag-list"].includes(b)){const O=Br(y.elements,S,{extend:!0});i.setActiveStorage("contextHeight",O.contextSize.contextHeight),i.setActiveStorage("contextWidth",O.contextSize.contextWidth)}y&&["drag","drag-list","drag-list-end","resize"].includes(b)&&s.trigger($n,{data:y,type:"dragElement"}),t.drawFrame()}})()},pointLeave(){a=null,g(),t.drawFrame()},doubleClick(w){var y,A,b,S,R,j,O,W;if(i.getSharedStorage(pn)===!1)return;const _=Ht(w.point,v());if(i.setSharedStorage(St,null),i.setSharedStorage(ht,[]),!(_.elements.length===1&&((A=(y=_.elements[0])===null||y===void 0?void 0:y.operations)===null||A===void 0?void 0:A.lock)===!0)){if(_.elements.length===1&&((b=_.elements[0])===null||b===void 0?void 0:b.type)==="group"){if(d(_.elements[0])===!0){i.setSharedStorage(re,null),t.drawFrame();return}}else _.elements.length===1&&((S=_.elements[0])===null||S===void 0?void 0:S.type)==="text"&&!(!((j=(R=_.elements[0])===null||R===void 0?void 0:R.operations)===null||j===void 0)&&j.invisible)&&s.trigger(qi,{element:_.elements[0],groupQueue:i.getSharedStorage(ze)||[],position:ei((O=_.elements[0])===null||O===void 0?void 0:O.uuid,((W=i.getActiveStorage("data"))===null||W===void 0?void 0:W.elements)||[]),viewScaleInfo:i.getActiveViewScaleInfo()});i.setSharedStorage(re,null)}},beforeDrawFrame({snapshot:w}){var y;const{activeStore:A,sharedStore:b}=w,{scale:S,offsetLeft:R,offsetTop:j,offsetRight:O,offsetBottom:W,width:_,height:k,contextHeight:U,contextWidth:K,devicePixelRatio:L}=A,T=e.sharer,Y={scale:S,offsetLeft:R,offsetTop:j,offsetRight:O,offsetBottom:W},E={width:_,height:k,contextHeight:U,contextWidth:K,devicePixelRatio:L},G=b[ht][0],x=b[at],Z=b[Xt],Q=b[re],P=b[mi],z=b[yi],I=b[ze],C=b[wn],H=b[wi],cn=b[pi],Ge={calculator:o,viewScaleInfo:Y,viewSizeInfo:E},Jn=G?vi(G,{groupQueue:I,controllerSize:10,viewScaleInfo:Y}):null,hi=!!(!((y=x==null?void 0:x.operations)===null||y===void 0)&&y.lock);if((I==null?void 0:I.length)>0){if(sl(r,C,Ge),x&&Q!=="drag"&&(hi?Ro(r,Z,Object.assign(Object.assign({},Ge),{controller:vi(x,{groupQueue:I,controllerSize:10,viewScaleInfo:Y})})):Io(r,Z,Ge)),!hi&&G&&["select","drag","resize"].includes(Q)&&(Po(r,Jn,Object.assign(Object.assign({},Ge),{element:G,calculator:o,hideControllers:!!H&&Q==="drag"})),Q==="drag")){const pt=T.getSharedStorage(xt),dn=T.getSharedStorage(At);cn===!0&&zo(r,{xLines:pt,yLines:dn})}}else if(x&&Q!=="drag"&&(hi?Ro(r,Z,Object.assign(Object.assign({},Ge),{controller:vi(x,{groupQueue:I,controllerSize:10,viewScaleInfo:Y})})):Io(r,Z,Ge)),!hi&&G&&["select","drag","resize"].includes(Q)){if(Po(r,Jn,Object.assign(Object.assign({},Ge),{element:G,calculator:o,hideControllers:!!H&&Q==="drag"})),Q==="drag"){const pt=T.getSharedStorage(xt),dn=T.getSharedStorage(At);cn===!0&&zo(r,{xLines:pt,yLines:dn})}}else if(Q==="area"&&P&&z)nl(r,{start:P,end:z});else if(["drag-list","drag-list-end"].includes(Q)){const pt=bn(l(),{viewScaleInfo:T.getActiveViewScaleInfo(),viewSizeInfo:T.getActiveViewSizeInfo(),calculator:o});pt&&ol(r,{areaSize:pt})}}}},fi="SCROLL",Gi=Symbol(`${fi}_xThumbRect`),Xi=Symbol(`${fi}_yThumbRect`),Dt=Symbol(`${fi}_prevPoint`),kn=Symbol(`${fi}_activePoint`),Zt=Symbol(`${fi}_activeThumbType`),ul=12,_o=16,gl=.3,Oo={width:ul,thumbColor:"#000000AA",scrollBarColor:"#FFFFFF60",showScrollBar:!1};function Wo(e,t,i){const n=e,{x:o,y:s,w:r,h:a}=i;return n.beginPath(),n.rect(o,s,r,a),n.closePath(),!!n.isPointInPath(t.x,t.y)}function vl(e,t,i){let n=null;const{xThumbRect:o,yThumbRect:s}=i;return o&&Wo(e,t,o)?n="X":s&&Wo(e,t,s)&&(n="Y"),n}function ml(e){const{sharedStore:t}=e;return{activePoint:t[kn]||null,prevPoint:t[Dt]||null,activeThumbType:t[Zt]||null,xThumbRect:t[Gi]||null,yThumbRect:t[Xi]||null}}function yl(e,t){const{width:i,height:n}=t,{offsetTop:o,offsetBottom:s,offsetLeft:r,offsetRight:a}=e,c=_o*2.5,l=_o;let d=0,f=0;d=Math.max(c,i-l*2-(Math.abs(r)+Math.abs(a))),d>=i&&(d=i),f=Math.max(c,n-l*2-(Math.abs(o)+Math.abs(s))),f>=n&&(f=n);const u=l,v=i-d-l;let g=u;r>0?g=u:a>0?g=v:r<=0&&d>0&&!(r===0&&a===0)&&(g=u+(i-d)*Math.abs(r)/(Math.abs(r)+Math.abs(a)),g=Math.min(Math.max(0,g-u),i-d));const h=l,m=n-f-l;let p=h;o>0?p=h:s>0?p=m:o<=0&&f>0&&!(o===0&&s===0)&&(p=h+(n-f)*Math.abs(o)/(Math.abs(o)+Math.abs(s)),p=Math.min(Math.max(0,p-h),n-f));const M={x:g,y:n-l,w:d,h:l},w={x:i-l,y:p,w:l,h:f};return{lineSize:l,xSize:d,ySize:f,translateY:p,translateX:g,thumbColor:Oo.thumbColor,scrollBarColor:Oo.scrollBarColor,xThumbRect:M,yThumbRect:w}}function ko(e,t){let{x:i,y:n,h:o,w:s}=t;e.save(),e.shadowColor="#FFFFFF",e.shadowOffsetX=0,e.shadowOffsetY=0,e.shadowBlur=1;{const{color:r,axis:a}=t;a==="X"?(n=n+o/4+0,o=o/2):a==="Y"&&(i=i+s/4+0,s=s/2);let c=t.r;c=Math.min(c,s/2,o/2),(s{const{viewer:t,boardContent:i,sharer:n}=e,{overlayContext:o}=i;n.setSharedStorage(Gi,null),n.setSharedStorage(Xi,null);const s=()=>{n.setSharedStorage(Dt,null),n.setSharedStorage(kn,null),n.setSharedStorage(Zt,null)};s();const r=l=>{const d=n.getSharedStorage(Dt);if(d){const{offsetLeft:f,offsetRight:u}=n.getActiveViewScaleInfo(),{width:v}=n.getActiveViewSizeInfo(),g=-(l.x-d.x),h=v+Math.abs(f)+Math.abs(u),m=g*h/v;t.scroll({moveX:m}),t.drawFrame()}},a=l=>{const d=n.getSharedStorage(Dt);if(d){const{offsetTop:f,offsetBottom:u}=n.getActiveViewScaleInfo(),{height:v}=n.getActiveViewSizeInfo(),g=-(l.y-d.y),h=v+Math.abs(f)+Math.abs(u),m=g*h/v;t.scroll({moveY:m}),t.drawFrame()}},c=l=>vl(o,l,{xThumbRect:n.getSharedStorage(Gi),yThumbRect:n.getSharedStorage(Xi)});return{name:"@middleware/scroller",wheel:l=>{t.scroll({moveX:0-l.deltaX,moveY:0-l.deltaY}),t.drawFrame()},pointStart:l=>{const{point:d}=l,f=c(d);if(f==="X"||f==="Y")return n.setSharedStorage(Zt,f),n.setSharedStorage(Dt,d),!1},pointMove:l=>{const{point:d}=l,f=n.getSharedStorage(Zt);if(f==="X"||f==="Y")return n.setSharedStorage(kn,d),f==="X"?r(d):f==="Y"&&a(d),n.setSharedStorage(Dt,d),!1},pointEnd:()=>{const l=n.getSharedStorage(Zt);if(s(),l==="X"||l==="Y")return t.scroll({moveX:0,moveY:0}),t.drawFrame(),!1},beforeDrawFrame({snapshot:l}){const{xThumbRect:d,yThumbRect:f}=pl(o,{snapshot:l});n.setSharedStorage(Gi,d),n.setSharedStorage(Xi,f)}}},ks="@middleware/scale",Vo=e=>{const{viewer:t,sharer:i,eventHub:n}=e,o=50,s=.05;return{name:"@middleware/scaler",wheelScale(r){const{deltaY:a,point:c}=r,{scale:l}=i.getActiveViewScaleInfo();let d=l;if(a<0?d=l*1.1:a>0&&(d=l*.9),do)return;const{moveX:f,moveY:u}=t.scale({scale:d,point:c});t.scroll({moveX:f,moveY:u}),t.drawFrame();const v=ye(l);n.trigger(ks,{scale:v})}}},ve=16,bl="#FFFFFFA8",Sl="#00000080",js="#000000",Vs="#00000080",Bs="monospace",jn=10,Ys=100,Bo="#AAAAAA20",Yo="#AAAAAA40",ln=1,Fo="#196097",Rt=[1,2,5,10,20,50,100,200,500];function Ml(e){e=Math.max(Rt[0],Math.min(e,Rt[Rt.length-1]));for(let t=0;tn)continue;if(e===i||e===n)return e;const o=(i+n)/2;return e<=o?i:n}return e}function Fs(e){const{scale:t,viewLength:i,viewOffset:n}=e,o=[];let s=10;s=ye(s/t,{decimalPlaces:0}),s=Ml(s);const r=s*10,a=s*5;let c=0;const l=s*t,d=0-n,f=0,u=d%l,v=(d-u+l)/t,g=f+(l-u);for(;g+c*l{e.fillStyle=Vs,e.textBaseline="top",e.$setFont({fontWeight:Ys,fontSize:jn,fontFamily:Bs}),e.fillText(u,a+jn,l.position+a)})}}}function Pl(e,t){const{viewSizeInfo:i}=t,{width:n,height:o}=i;e.beginPath(),e.moveTo(0,0),e.lineTo(n+1,0),e.lineTo(n+1,ve),e.lineTo(ve,ve),e.lineTo(ve,o+1),e.lineTo(0,o+1),e.lineTo(0,0),e.closePath(),e.fillStyle=bl,e.fill(),e.lineWidth=ln,e.setLineDash([]),e.strokeStyle=Sl,e.stroke()}function zl(e,t){const{xList:i,yList:n,viewSizeInfo:o}=t,{width:s,height:r}=o;for(let a=0;a0){const a=ai(i),c=on(i),l=[],d=[],f=[],u=[],v=[];if(s.forEach(M=>{const w=n.calcViewRectInfoFromRange(M.uuid,{viewScaleInfo:a,viewSizeInfo:c});w&&(l.push(w),d.push(w.left.x),f.push(w.right.x),u.push(w.top.y),v.push(w.bottom.y))}),!(l.length>0))return;const g=Math.min(...d),h=Math.max(...f),m=Math.min(...u),p=Math.max(...v);e.globalAlpha=1,e.beginPath(),e.moveTo(g,0),e.lineTo(h,0),e.lineTo(h,ve),e.lineTo(g,ve),e.fillStyle=Fo,e.closePath(),e.fill(),e.beginPath(),e.moveTo(0,m),e.lineTo(ve,m),e.lineTo(ve,p),e.lineTo(0,p),e.fillStyle=Fo,e.closePath(),e.fill()}}const Vn="@middleware/show-ruler",Go=e=>{const{boardContent:t,viewer:i,eventHub:n,calculator:o}=e,{overlayContext:s,underlayContext:r}=t;let a=!0,c=!0;const l=d=>{typeof(d==null?void 0:d.show)=="boolean"&&(a=d.show),typeof(d==null?void 0:d.showGrid)=="boolean"&&(c=d.showGrid),(typeof(d==null?void 0:d.show)=="boolean"||typeof(d==null?void 0:d.showGrid)=="boolean")&&i.drawFrame()};return{name:"@middleware/ruler",use(){n.on(Vn,l)},disuse(){n.off(Vn,l)},beforeDrawFrame:({snapshot:d})=>{if(a===!0){const f=ai(d),u=on(d);Ll(s,{snapshot:d,calculator:o}),Pl(s,{viewScaleInfo:f,viewSizeInfo:u});const{list:v,rulerUnit:g}=xl({viewScaleInfo:f,viewSizeInfo:u});Il(s,{scaleList:v});const{list:h}=Al({viewScaleInfo:f,viewSizeInfo:u});Rl(s,{scaleList:h}),c===!0&&zl(g===1?s:r,{xList:v,yList:h,viewScaleInfo:f,viewSizeInfo:u})}}}},El="DRAG",Si=Symbol(`${El}_prevPoint`),Xo=e=>{const{eventHub:t,sharer:i,viewer:n}=e;let o=!1;return{name:"@middleware/dragger",hover(){o!==!0&&t.trigger("cursor",{type:"drag-default"})},pointStart(s){const{point:r}=s;i.setSharedStorage(Si,r),o=!0,t.trigger("cursor",{type:"drag-active"})},pointMove(s){const{point:r}=s,a=i.getSharedStorage(Si);if(r&&a){const c=r.x-a.x,l=r.y-a.y;n.scroll({moveX:c,moveY:l}),n.drawFrame()}i.setSharedStorage(Si,r)},pointEnd(){o=!1,i.setSharedStorage(Si,null),t.trigger("cursor",{type:"drag-default"})}}},Qn="monospace";function Tl(e,t){const{point:i,rotateCenter:n,angle:o,text:s,color:r,background:a,fontSize:c,lineHeight:l}=t;li(e,o,n,()=>{e.$setFont({fontWeight:"300",fontSize:c,fontFamily:Qn});const d=(l-c)/2,f=e.$undoPixelRatio(e.measureText(s).width),u={x:i.x-f/2-d,y:i.y},v={x:u.x+f+d*2,y:u.y+c+d},g={x:i.x-f/2,y:i.y};e.setLineDash([]),e.fillStyle=a,e.beginPath(),e.moveTo(u.x,u.y),e.lineTo(v.x,u.y),e.lineTo(v.x,v.y),e.lineTo(u.x,v.y),e.closePath(),e.fill(),e.fillStyle=r,e.textBaseline="top",e.fillText(s,g.x,g.y+d)})}function Cl(e,t){const{point:i,rotateCenter:n,angle:o,text:s,color:r,background:a,fontSize:c,lineHeight:l}=t;li(e,o,n,()=>{e.$setFont({fontWeight:"300",fontSize:c,fontFamily:Qn});const d=(l-c)/2,f=e.$undoPixelRatio(e.measureText(s).width),u={x:i.x,y:i.y},v={x:u.x+f+d*2,y:u.y+c+d},g={x:i.x+d,y:i.y};e.setLineDash([]),e.fillStyle=a,e.beginPath(),e.moveTo(u.x,u.y),e.lineTo(v.x,u.y),e.lineTo(v.x,v.y),e.lineTo(u.x,v.y),e.closePath(),e.fill(),e.fillStyle=r,e.textBaseline="top",e.fillText(s,g.x,g.y+d)})}function Dl(e,t){const{point:i,rotateCenter:n,angle:o,text:s,color:r,background:a,fontSize:c,lineHeight:l}=t;li(e,o,n,()=>{e.$setFont({fontWeight:"300",fontSize:c,fontFamily:Qn});const d=(l-c)/2,f=e.$undoPixelRatio(e.measureText(s).width),u={x:i.x,y:i.y},v={x:u.x+f+d*2,y:u.y+c+d},g={x:i.x+d,y:i.y};e.setLineDash([]),e.fillStyle=a,e.beginPath(),e.moveTo(u.x,u.y),e.lineTo(v.x,u.y),e.lineTo(v.x,v.y),e.lineTo(u.x,v.y),e.closePath(),e.fill(),e.fillStyle=r,e.textBaseline="top",e.fillText(s,g.x,g.y+d)})}const Sn="#1973bac6",Mn="#ffffff",lt=10,xn=16,Ho=e=>{const{boardContent:t,calculator:i}=e,{overlayContext:n}=t;return{name:"@middleware/info",beforeDrawFrame({snapshot:o}){const{sharedStore:s}=o,r=s[ht],a=s[re],c=s[ze]||[];if(r.length===1){const l=r[0];if(l&&["select","drag","resize"].includes(a)){const d=ai(o),f=on(o),{x:u,y:v,w:g,h,angle:m}=l,p=[...c,{uuid:gt(),x:u,y:v,w:g,h,angle:m,type:"group",detail:{children:[]}}],M={viewScaleInfo:d,viewSizeInfo:f},w=i.calcViewRectInfoFromOrigin(l.uuid,M);let y=0;p.forEach(b=>{y+=b.angle||0});const A=et(Be(0-y));if(w){const b=w==null?void 0:w.center,S={topLeft:le(b,w.topLeft,A),topRight:le(b,w.topRight,A),bottomRight:le(b,w.bottomRight,A),bottomLeft:le(b,w.bottomLeft,A),center:le(b,w.center,A),top:le(b,w.top,A),right:le(b,w.right,A),bottom:le(b,w.bottom,A),left:le(b,w.left,A)},R=ye(l.x,{decimalPlaces:2}),j=ye(l.y,{decimalPlaces:2}),O=ye(l.w,{decimalPlaces:2}),W=ye(l.h,{decimalPlaces:2}),_=`${ye(R,{decimalPlaces:0})},${ye(j,{decimalPlaces:0})}`,k=`${ye(O,{decimalPlaces:0})}x${ye(W,{decimalPlaces:0})}`,U=`${ye(l.angle||0,{decimalPlaces:0})}°`;Tl(n,{point:{x:S.bottom.x,y:S.bottom.y+lt},rotateCenter:S.center,angle:y,text:k,fontSize:lt,lineHeight:xn,color:Mn,background:Sn}),Cl(n,{point:{x:S.topLeft.x,y:S.topLeft.y-lt*2},rotateCenter:S.center,angle:y,text:_,fontSize:lt,lineHeight:xn,color:Mn,background:Sn}),Dl(n,{point:{x:S.top.x+lt,y:S.top.y-lt*2},rotateCenter:S.center,angle:y,text:U,fontSize:lt,lineHeight:xn,color:Mn,background:Sn})}}}}}},Zn="LAYOUT_SELECT",ke=Symbol(`${Zn}_layoutActionType`),Nt=Symbol(`${Zn}_layoutControlType`),Mi=Symbol(`${Zn}_layoutController`),Gs="#1973ba",Xs="#5b5959b5";function xi(e,t){e.setLineDash([]),e.fillStyle="#FFFFFF",e.beginPath(),e.moveTo(t[0].x,t[0].y),e.lineTo(t[1].x,t[1].y),e.lineTo(t[2].x,t[2].y),e.lineTo(t[3].x,t[3].y),e.closePath(),e.fill(),e.strokeStyle=Gs,e.lineWidth=2,e.beginPath(),e.moveTo(t[0].x,t[0].y),e.lineTo(t[1].x,t[1].y),e.lineTo(t[2].x,t[2].y),e.lineTo(t[3].x,t[3].y),e.closePath(),e.stroke()}function Jt(e,t){const{vertexes:i,strokeStyle:n,lineWidth:o}=t;e.setLineDash([]),e.strokeStyle=n,e.lineWidth=o,e.beginPath(),e.moveTo(i[0].x,i[0].y),e.lineTo(i[2].x,i[2].y),e.closePath(),e.stroke(),e.beginPath(),e.moveTo(i[1].x,i[1].y),e.lineTo(i[3].x,i[3].y),e.closePath(),e.stroke()}function Ai(e,t){const{start:i,end:n,centerVertexes:o,disabled:s}=t,r=s===!0?1:2,a=s===!0?Xs:Gs;e.setLineDash([]),e.strokeStyle=a,e.lineWidth=r,e.beginPath(),e.moveTo(i.x,i.y),e.lineTo(n.x,n.y),e.closePath(),e.stroke(),s===!0&&Jt(e,{vertexes:o,lineWidth:r,strokeStyle:a})}function _l(e,t){const{controller:i,operations:n}=t,{topLeft:o,topRight:s,bottomLeft:r,bottomRight:a,topMiddle:c,rightMiddle:l,bottomMiddle:d,leftMiddle:f}=i;Ai(e,{start:o.center,end:s.center,centerVertexes:c.vertexes,disabled:!!(n!=null&&n.disabledTop)}),Ai(e,{start:s.center,end:a.center,centerVertexes:l.vertexes,disabled:!!(n!=null&&n.disabledRight)}),Ai(e,{start:a.center,end:r.center,centerVertexes:d.vertexes,disabled:!!(n!=null&&n.disabledBottom)}),Ai(e,{start:r.center,end:o.center,centerVertexes:f.vertexes,disabled:!!(n!=null&&n.disabledLeft)});const u={lineWidth:1,strokeStyle:Xs};(n==null?void 0:n.disabledTopLeft)===!0?Jt(e,Object.assign({vertexes:o.vertexes},u)):xi(e,o.vertexes),(n==null?void 0:n.disabledTopRight)===!0?Jt(e,Object.assign({vertexes:s.vertexes},u)):xi(e,s.vertexes),(n==null?void 0:n.disabledBottomRight)===!0?Jt(e,Object.assign({vertexes:a.vertexes},u)):xi(e,a.vertexes),(n==null?void 0:n.disabledBottomLeft)===!0?Jt(e,Object.assign({vertexes:r.vertexes},u)):xi(e,r.vertexes)}const No=e=>{const{sharer:t,boardContent:i,calculator:n,viewer:o,eventHub:s}=e,{overlayContext:r}=i;let a=null;const c=()=>{a=null,t.setSharedStorage(ke,null),t.setSharedStorage(Nt,null),t.setSharedStorage(Mi,null)},l=()=>!!t.getSharedStorage(re),d=g=>{var h;const m=t.getActiveStorage("data");if(!((h=m==null?void 0:m.layout)===null||h===void 0)&&h.operations){const p=m.layout.operations;if(g==="left"&&p.disabledLeft===!0||g==="top"&&p.disabledTop===!0||g==="right"&&p.disabledRight===!0||g==="bottom"&&p.disabledBottom===!0||g==="top-left"&&p.disabledTopLeft===!0||g==="top-right"&&p.disabledTopRight===!0||g==="bottom-left"&&p.disabledBottomLeft===!0||g==="bottom-right"&&p.disabledBottomRight===!0)return!0}return!1},f=()=>{const g=t.getActiveStorage("data");if(g!=null&&g.layout){const{x:h,y:m,w:p,h:M}=g.layout;return{x:h,y:m,w:p,h:M}}return null},u=()=>{const g=t.getActiveViewScaleInfo(),h=f();if(h){const m=to(h,{viewScaleInfo:g,controllerSize:10});t.setSharedStorage(Mi,m)}else t.setSharedStorage(Mi,null)},v=g=>{const h=t.getActiveStorage("data"),m=t.getSharedStorage(Mi);if(m&&(h!=null&&h.layout)&&(g!=null&&g.point)){let p=null;if(m){const{topLeft:M,top:w,topRight:y,right:A,bottomRight:b,bottom:S,bottomLeft:R,left:j}=m,O=[M,w,y,A,b,S,R,j];for(let W=0;W{c(),u()},hover:g=>{if(l())return;const h=t.getSharedStorage(ke),m=t.getActiveStorage("data");if(m!=null&&m.layout&&h!=="resize"){u();const p=v(g);p?(t.setSharedStorage(ke,"hover"),d(p)||s.trigger("cursor",{type:`resize-${p}`,groupQueue:[],element:f()}),o.drawFrame()):t.setSharedStorage(ke,null)}if(["hover","resize"].includes(t.getSharedStorage(ke)))return!1;h==="hover"&&!t.getSharedStorage(ke)&&o.drawFrame()},pointStart:g=>{if(l())return;u();const h=v(g);if(a=g.point,h)return d(h)?void 0:(t.setSharedStorage(ke,"resize"),!1);const m=t.getSharedStorage(ke);if(["hover","resize"].includes(m))return!1},pointMove:g=>{if(l())return;const h=t.getSharedStorage(ke),m=t.getSharedStorage(Nt),p=t.getActiveStorage("data");if(!(m&&d(m))){if(h==="resize"&&m&&(p!=null&&p.layout)){if(a){const M=t.getActiveStorage("scale"),w=(g.point.x-a.x)/M,y=(g.point.y-a.y)/M,{x:A,y:b,w:S,h:R}=p.layout;m==="top"?(p.layout.y=n.toGridNum(b+y),p.layout.h=n.toGridNum(R-y)):m==="right"?p.layout.w=n.toGridNum(S+w):m==="bottom"?p.layout.h=n.toGridNum(R+y):m==="left"?(p.layout.x=n.toGridNum(A+w),p.layout.w=n.toGridNum(S-w)):m==="top-left"?(p.layout.x=n.toGridNum(A+w),p.layout.y=n.toGridNum(b+y),p.layout.w=n.toGridNum(S-w),p.layout.h=n.toGridNum(R-y)):m==="top-right"?(p.layout.y=n.toGridNum(b+y),p.layout.w=n.toGridNum(S+w),p.layout.h=n.toGridNum(R-y)):m==="bottom-right"?(p.layout.w=n.toGridNum(S+w),p.layout.h=n.toGridNum(R+y)):m==="bottom-left"&&(p.layout.x=n.toGridNum(A+w),p.layout.w=n.toGridNum(S-w),p.layout.h=n.toGridNum(R+y))}return a=g.point,u(),o.drawFrame(),!1}if(["hover","resize"].includes(h))return!1}},pointEnd:()=>{const g=t.getSharedStorage(ke),h=t.getSharedStorage(Nt),m=t.getActiveStorage("data");m&&g==="resize"&&h&&!d(h)&&s.trigger($n,{type:"changeLayout",data:m}),c()},beforeDrawFrame:({snapshot:g})=>{var h;const{sharedStore:m,activeStore:p}=g,M=m[ke],w=m[Nt];if(!((h=p.data)===null||h===void 0)&&h.layout&&M&&w&&["hover","resize"].includes(M)){const y=ai(g),{x:A,y:b,w:S,h:R}=p.data.layout,O=to({x:A,y:b,w:S,h:R},{viewScaleInfo:y,controllerSize:10});_l(r,{controller:O,operations:p.data.layout.operations||{}})}},scrollX:()=>{c()},scrollY:()=>{c()},wheelScale:()=>{c()}}};var An=function(e,t,i,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(e,i):o?o.value=i:t.set(e,i),i},de=function(e,t,i,n){if(i==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?n:i==="a"?n.call(e):n?n.value:t.get(e)},Bn,fe,Hi,en,Hs;class Ol{constructor(t,i){Bn.add(this),fe.set(this,void 0),Hi.set(this,void 0),en.set(this,void 0);const{devicePixelRatio:n=1,width:o,height:s,createCustomContext2D:r}=i;An(this,en,t,"f");const a=document.createElement("canvas");An(this,Hi,a,"f"),de(this,Bn,"m",Hs).call(this),t.appendChild(a);const c=Cr(a,{width:o,height:s,devicePixelRatio:n,offscreen:!0,createCustomContext2D:r}),l=new Ua({boardContent:c,container:t}),d=l.getSharer();d.setActiveViewSizeInfo({width:o,height:s,devicePixelRatio:n,contextWidth:o,contextHeight:s}),An(this,fe,l,"f"),this.resize(d.getActiveViewSizeInfo());const f=l.getEventHub();new Ka(t,{eventHub:f})}isDestroyed(){return de(this,fe,"f").isDestroyed()}destroy(){de(this,fe,"f").destroy(),de(this,Hi,"f").remove()}use(t){de(this,fe,"f").use(t)}disuse(t){de(this,fe,"f").disuse(t)}setData(t,i){ns((t==null?void 0:t.elements)||[]),de(this,fe,"f").setData(t,i)}getData(){return de(this,fe,"f").getData()}scale(t){de(this,fe,"f").scale(t),de(this,fe,"f").getViewer().drawFrame()}resize(t){const i=de(this,fe,"f"),o=i.getSharer().getActiveViewSizeInfo();i.resize(Object.assign(Object.assign({},o),t))}clear(){de(this,fe,"f").clear()}on(t,i){de(this,fe,"f").getEventHub().on(t,i)}off(t,i){de(this,fe,"f").getEventHub().off(t,i)}trigger(t,i){de(this,fe,"f").getEventHub().trigger(t,i)}getViewInfo(){const i=de(this,fe,"f").getSharer(),n=i.getActiveViewSizeInfo(),o=i.getActiveViewScaleInfo();return{viewSizeInfo:n,viewScaleInfo:o}}refresh(){de(this,fe,"f").getViewer().drawFrame()}setViewScale(t){de(this,fe,"f").updateViewScaleInfo(t)}getLoadItemMap(){return de(this,fe,"f").getRenderer().getLoadItemMap()}onBoardWatcherEvents(){de(this,fe,"f").onWatcherEvents()}offBoardWatcherEvents(){de(this,fe,"f").offWatcherEvents()}}fe=new WeakMap,Hi=new WeakMap,en=new WeakMap,Bn=new WeakSet,Hs=function(){const t=de(this,en,"f");t.style.position="relative"};const tn="select",Wl={mode:tn};function kl(){return{mode:tn,enableRuler:!1,enableScale:!1,enableScroll:!1,enableSelect:!1,enableTextEdit:!1,enableDrag:!1,enableInfo:!1}}var jl=function(e,t,i,n){function o(s){return s instanceof i?s:new i(function(r){r(s)})}return new(i||(i=Promise))(function(s,r){function a(d){try{l(n.next(d))}catch(f){r(f)}}function c(d){try{l(n.throw(d))}catch(f){r(f)}}function l(d){d.done?s(d.value):o(d.value).then(a,c)}l((n=n.apply(e,t||[])).next())})};function Vl(e){return jl(this,void 0,void 0,function*(){const{data:t,width:i,height:n,devicePixelRatio:o,viewScaleInfo:s,viewSizeInfo:r,loadItemMap:a}=e;let c=Ii({width:i,height:n,devicePixelRatio:o}),l=new xs({viewContext:c}),d=new Ms({viewContext:c,calculator:l});d.setLoadItemMap(a),d.drawData(t,{viewScaleInfo:s,viewSizeInfo:r,forceDrawAll:!0});let f=null,u=c.$getOffscreenCanvas();if(u){const v=yield u.convertToBlob();f=window.URL.createObjectURL(v)}return u=null,c=null,l=null,d=null,{blobURL:f,width:i,height:n,devicePixelRatio:o}})}const Bl=$n,Uo={change:Bl,ruler:Vn,scale:ks,select:Fi,clearSelect:Ki,textEdit:qi,textChange:Wn},Qe={};Object.keys(Uo).forEach(e=>{Object.defineProperty(Qe,e,{value:Uo[e],writable:!1})});function Yl(e){return["select","drag","readOnly"].includes(e)}function Ns(e,t){const{enableRuler:i,enableScale:n,enableScroll:o,enableSelect:s,enableTextEdit:r,enableDrag:a,enableInfo:c}=t.getSnapshot();o===!0?e.use(jo):o===!1&&e.disuse(jo),s===!0?(e.use(No),e.use(Do)):s===!1&&(e.disuse(No),e.disuse(Do)),n===!0?e.use(Vo):n===!1&&e.disuse(Vo),i===!0?e.use(Go):i===!1&&e.disuse(Go),r===!0?e.use(Co):r===!1&&e.disuse(Co),a===!0?e.use(Xo):a===!1&&e.disuse(Xo),c===!0?e.use(Ho):c===!1&&e.disuse(Ho)}function Yn(e,t,i){let n=!1,o=!1,s=!1,r=!1,a=!1,c=!1;const l=!0;let d="select";i.set("mode",d),Yl(e)?d=e:console.warn(`${e} is invalid mode of iDraw.js`),d==="select"?(n=!0,o=!0,s=!0,r=!0,a=!1,c=!0):d==="drag"?(n=!0,o=!0,s=!1,r=!1,a=!0,c=!0):d==="readOnly"&&(n=!1,o=!1,s=!1,r=!1,a=!1,c=!1),i.set("enableScale",n),i.set("enableScroll",o),i.set("enableSelect",s),i.set("enableTextEdit",r),i.set("enableDrag",a),i.set("enableRuler",c),i.set("enableInfo",l),Ns(t,i)}var Fl=function(e,t,i,n){function o(s){return s instanceof i?s:new i(function(r){r(s)})}return new(i||(i=Promise))(function(s,r){function a(d){try{l(n.next(d))}catch(f){r(f)}}function c(d){try{l(n.throw(d))}catch(f){r(f)}}function l(d){d.done?s(d.value):o(d.value).then(a,c)}l((n=n.apply(e,t||[])).next())})},In=function(e,t,i,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(e,i):o?o.value=i:t.set(e,i),i},q=function(e,t,i,n){if(i==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?n:i==="a"?n.call(e):n?n.value:t.get(e)},Kt,te,qt,ut,Us,Fn;class Ic{constructor(t,i){Kt.add(this),te.set(this,void 0),qt.set(this,void 0),ut.set(this,new oi({defaultStorage:kl()}));const n=Object.assign(Object.assign({},Wl),i),{width:o,height:s,devicePixelRatio:r,createCustomContext2D:a}=n,c=new Ol(t,{width:o,height:s,devicePixelRatio:r,createCustomContext2D:a});In(this,te,c,"f"),In(this,qt,n,"f"),q(this,Kt,"m",Us).call(this)}reset(t){const i=q(this,te,"f"),n=q(this,ut,"f");n.clear(),Yn(t.mode||tn,i,n),i.refresh(),In(this,qt,Object.assign(Object.assign({},q(this,qt,"f")),t),"f")}setMode(t){const i=q(this,te,"f"),n=q(this,ut,"f");Yn(t||tn,i,n),i.refresh()}enable(t){q(this,Kt,"m",Fn).call(this,t,!0)}disable(t){q(this,Kt,"m",Fn).call(this,t,!1)}setData(t){const i=q(this,te,"f");i.setData(t),i.trigger(Qe.change,{data:t,type:"setData"})}getData(t){const i=q(this,te,"f").getData();return i&&(t==null?void 0:t.compact)===!0?Js(i,{loadItemMap:q(this,te,"f").getLoadItemMap()}):i}getViewInfo(){return q(this,te,"f").getViewInfo()}scale(t){q(this,te,"f").scale(t)}setViewScale(t){const i=q(this,te,"f");i.setViewScale(t),i.refresh()}centerContent(t){const i=(t==null?void 0:t.data)||q(this,te,"f").getData(),{viewSizeInfo:n}=this.getViewInfo();if(i!=null&&i.layout||Array.isArray(i==null?void 0:i.elements)&&(i==null?void 0:i.elements.length)>0){const o=Ma(i,{viewSizeInfo:n});this.setViewScale(o)}}resize(t){q(this,te,"f").resize(t)}on(t,i){q(this,te,"f").on(t,i)}off(t,i){q(this,te,"f").off(t,i)}trigger(t,i){q(this,te,"f").trigger(t,i)}selectElement(t){this.selectElements([t])}selectElements(t){this.trigger(Qe.select,{uuids:t})}selectElementByPosition(t){this.selectElementsByPositions([t])}selectElementsByPositions(t){this.trigger(Qe.select,{positions:t})}cancelElements(){this.trigger(Qe.select,{uuids:[]})}createElement(t,i){const{viewScaleInfo:n,viewSizeInfo:o}=q(this,te,"f").getViewInfo();return pa(t,(i==null?void 0:i.element)||{},(i==null?void 0:i.viewCenter)===!0?{viewScaleInfo:n,viewSizeInfo:o}:void 0)}updateElement(t){const i=q(this,te,"f"),n=i.getData()||{elements:[]};gs(t.uuid,t,n.elements),i.setData(n),i.refresh(),i.trigger(Qe.change,{data:n,type:"updateElement"})}addElement(t,i){var n;const o=q(this,te,"f"),s=o.getData()||{elements:[]};if(!i||!(!((n=i==null?void 0:i.position)===null||n===void 0)&&n.length))s.elements.push(t);else if(i!=null&&i.position){const r=[...i==null?void 0:i.position];Nn(t,r,s.elements)}return o.setData(s),o.refresh(),o.trigger(Qe.change,{data:s,type:"addElement"}),s}deleteElement(t){const i=q(this,te,"f"),n=i.getData()||{elements:[]};ba(t,n.elements),i.setData(n),i.refresh(),i.trigger(Qe.change,{data:n,type:"deleteElement"})}moveElement(t,i){const n=q(this,te,"f"),o=n.getData()||{elements:[]},s=ei(t,o.elements),{elements:r}=hs(o.elements,{from:s,to:i});o.elements=r,n.setData(o),n.refresh(),n.trigger(Qe.change,{data:o,type:"moveElement"})}getImageBlobURL(t){return Fl(this,void 0,void 0,function*(){const i=this.getData()||{elements:[]},{devicePixelRatio:n}=t,o=Vr(i.elements),{viewSizeInfo:s}=this.getViewInfo();return yield Vl({width:o.w,height:o.h,devicePixelRatio:n,data:i,viewScaleInfo:{scale:1,offsetLeft:-o.x,offsetTop:-o.y,offsetBottom:0,offsetRight:0},viewSizeInfo:Object.assign(Object.assign({},s),{devicePixelRatio:n}),loadItemMap:q(this,te,"f").getLoadItemMap()})})}isDestroyed(){return q(this,te,"f").isDestroyed()}destroy(){const t=q(this,te,"f"),i=q(this,ut,"f");t.destroy(),i.destroy()}getViewCenter(){const{viewScaleInfo:t,viewSizeInfo:i}=this.getViewInfo();return xa({viewScaleInfo:t,viewSizeInfo:i})}$onBoardWatcherEvents(){q(this,te,"f").onBoardWatcherEvents()}$offBoardWatcherEvents(){q(this,te,"f").offBoardWatcherEvents()}}te=new WeakMap,qt=new WeakMap,ut=new WeakMap,Kt=new WeakSet,Us=function(){const t=q(this,te,"f"),i=q(this,ut,"f");Yn("select",t,i)},Fn=function(t,i){const n=q(this,ut,"f");if(["ruler","scroll","scale","info"].includes(t)){const o={ruler:"enableRuler",scroll:"enableScroll",scale:"enableScale",info:"enableInfo"};n.set(o[t],!!i),Ns(q(this,te,"f"),n),q(this,te,"f").refresh()}else t==="selectInGroup"?q(this,te,"f").trigger(Cn,{enable:!!i}):t==="snapToGrid"&&q(this,te,"f").trigger(Dn,{enable:!!i})};export{xs as Calculator,qo as Context2D,Ol as Core,ri as EventEmitter,Go as MiddlewareRuler,Vo as MiddlewareScaler,jo as MiddlewareScroller,Do as MiddlewareSelector,Co as MiddlewareTextEditor,Ms as Renderer,Xa as Sharer,oi as Store,es as calcDistance,Fe as calcElementCenter,ts as calcElementCenterFromVertexes,Vr as calcElementListSize,rn as calcElementOriginRectInfo,Gn as calcElementQueueVertexesQueueInGroup,vi as calcElementSizeController,si as calcElementVertexesInGroup,Nr as calcElementVertexesQueueInGroup,yc as calcElementViewRectInfo,wc as calcElementViewRectInfoMap,os as calcElementsContextSize,Br as calcElementsViewInfo,rc as calcSpeed,an as calcViewBoxSize,xa as calcViewCenter,Ma as calcViewCenterContent,Ie as calcViewElementSize,N as calcViewPointSize,xe as calcViewVertexes,sc as check,Hr as checkRectIntersect,ec as colorNameToHex,tc as colorToCSS,ic as colorToLinearGradientCSS,Gl as compose,Mc as compressImage,qe as createAssetId,Cr as createBoardContent,bt as createContext2D,pa as createElement,Ii as createOffscreenContext2D,gt as createUUID,Nl as debounce,Vt as deepClone,nc as deepCloneElement,Hn as deepResizeGroupElement,Xl as delay,ba as deleteElementInList,Un as deleteElementInListByPosition,Jl as downloadFileFromText,Ul as downloadImageFromCanvas,_r as equalPoint,ac as equalTouchPoint,Qe as eventKeys,uc as filterElementAsset,Yr as findElementFromList,sn as findElementFromListByPosition,vc as findElementQueueFromListByPosition,Fr as findElementsFromList,Xr as findElementsFromListByPositions,ye as formatNumber,Sc as generateHTML,Xn as generateSVGPath,ue as getCenterFromTwoPoints,Bt as getDefaultElementDetailConfig,dc as getElemenetsAssetIds,ei as getElementPositionFromList,is as getElementRotateVertexes,fc as getElementSize,rs as getElementVertexes,Gr as getGroupQueueFromList,cc as getSelectedElementUUIDs,Jr as getViewPointAtElement,ai as getViewScaleInfoFromSnapshot,on as getViewSizeInfoFromSnapshot,Ic as iDraw,Nn as insertElementToListByPosition,J as is,vt as isAssetId,Ni as isColorStr,mc as isElementInView,gc as isResourceElement,zn as isViewPointInElement,Ut as istype,Be as limitAngle,nr as loadHTML,nn as loadImage,tr as loadSVG,xc as matrixToAngle,la as matrixToRadian,hc as mergeElementAsset,Kn as mergeHexColorAlpha,Vn as middlewareEventRuler,ks as middlewareEventScale,Fi as middlewareEventSelect,Ki as middlewareEventSelectClear,Ac as modifyElement,hs as moveElementPosition,et as parseAngleToRadian,Ql as parseFileToBase64,Zl as parseFileToText,bc as parseHTML,Wr as parseRadianToAngle,pc as parseSVGPath,$l as pickFile,Ye as rotateElement,wt as rotateElementVertexes,le as rotatePoint,$i as rotatePointInGroup,eo as rotateVertexes,oc as sortDataAsserts,Kr as sortElementsViewVisiableInfoMap,Hl as throttle,Kl as toColorHexNum,ql as toColorHexStr,gs as updateElementInList,Or as vaildPoint,lc as vaildTouchPoint,ns as validateElements,$r as viewScale,Qr as viewScroll}; diff --git a/docs/assets/index.md.bWcwn8Hi.js b/docs/assets/index.md.bWcwn8Hi.js new file mode 100644 index 0000000..45629d8 --- /dev/null +++ b/docs/assets/index.md.bWcwn8Hi.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./chunks/framework.PNNbM9mo.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"iDraw.js","text":"Drawing easier on the web.","tagline":"A simple JavaScript framework for Drawing on the web.","actions":[{"theme":"brand","text":"Quick Started","link":"/en-US/guide/quickstart"},{"theme":"brand","text":"中文文档","link":"/zh-CN/index"},{"theme":"alt","text":"iDraw Studio","link":"https://idrawjs.com/studio/"}],"image":"/assets/idraw.png"},"features":[{"title":"High web compatibility","details":"All based on Canvas 2D API drawing"},{"title":"Extremely simple way to use","details":"There are no complicated operations, only a few simple APIs for drawing operations"},{"title":"Data-Driven drawing","details":"Rely on data to control drawing operations"}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),i={name:"index.md"};function n(r,o,s,d,l,c){return t(),a("div")}const w=e(i,[["render",n]]);export{p as __pageData,w as default}; diff --git a/docs/assets/index.md.bWcwn8Hi.lean.js b/docs/assets/index.md.bWcwn8Hi.lean.js new file mode 100644 index 0000000..45629d8 --- /dev/null +++ b/docs/assets/index.md.bWcwn8Hi.lean.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as a}from"./chunks/framework.PNNbM9mo.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"iDraw.js","text":"Drawing easier on the web.","tagline":"A simple JavaScript framework for Drawing on the web.","actions":[{"theme":"brand","text":"Quick Started","link":"/en-US/guide/quickstart"},{"theme":"brand","text":"中文文档","link":"/zh-CN/index"},{"theme":"alt","text":"iDraw Studio","link":"https://idrawjs.com/studio/"}],"image":"/assets/idraw.png"},"features":[{"title":"High web compatibility","details":"All based on Canvas 2D API drawing"},{"title":"Extremely simple way to use","details":"There are no complicated operations, only a few simple APIs for drawing operations"},{"title":"Data-Driven drawing","details":"Rely on data to control drawing operations"}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),i={name:"index.md"};function n(r,o,s,d,l,c){return t(),a("div")}const w=e(i,[["render",n]]);export{p as __pageData,w as default}; diff --git a/docs/assets/inter-italic-cyrillic-ext.OVycGSDq.woff2 b/docs/assets/inter-italic-cyrillic-ext.OVycGSDq.woff2 new file mode 100644 index 0000000..2a68729 Binary files /dev/null and b/docs/assets/inter-italic-cyrillic-ext.OVycGSDq.woff2 differ diff --git a/docs/assets/inter-italic-cyrillic.-nLMcIwj.woff2 b/docs/assets/inter-italic-cyrillic.-nLMcIwj.woff2 new file mode 100644 index 0000000..f640351 Binary files /dev/null and b/docs/assets/inter-italic-cyrillic.-nLMcIwj.woff2 differ diff --git a/docs/assets/inter-italic-greek-ext.hznxWNZO.woff2 b/docs/assets/inter-italic-greek-ext.hznxWNZO.woff2 new file mode 100644 index 0000000..0021896 Binary files /dev/null and b/docs/assets/inter-italic-greek-ext.hznxWNZO.woff2 differ diff --git a/docs/assets/inter-italic-greek.PSfer2Kc.woff2 b/docs/assets/inter-italic-greek.PSfer2Kc.woff2 new file mode 100644 index 0000000..71c265f Binary files /dev/null and b/docs/assets/inter-italic-greek.PSfer2Kc.woff2 differ diff --git a/docs/assets/inter-italic-latin-ext.RnFly65-.woff2 b/docs/assets/inter-italic-latin-ext.RnFly65-.woff2 new file mode 100644 index 0000000..9c1b944 Binary files /dev/null and b/docs/assets/inter-italic-latin-ext.RnFly65-.woff2 differ diff --git a/docs/assets/inter-italic-latin.27E69YJn.woff2 b/docs/assets/inter-italic-latin.27E69YJn.woff2 new file mode 100644 index 0000000..01fcf20 Binary files /dev/null and b/docs/assets/inter-italic-latin.27E69YJn.woff2 differ diff --git a/docs/assets/inter-italic-vietnamese.xzQHe1q1.woff2 b/docs/assets/inter-italic-vietnamese.xzQHe1q1.woff2 new file mode 100644 index 0000000..e4f788e Binary files /dev/null and b/docs/assets/inter-italic-vietnamese.xzQHe1q1.woff2 differ diff --git a/docs/assets/inter-roman-cyrillic-ext.8T9wMG5w.woff2 b/docs/assets/inter-roman-cyrillic-ext.8T9wMG5w.woff2 new file mode 100644 index 0000000..28593cc Binary files /dev/null and b/docs/assets/inter-roman-cyrillic-ext.8T9wMG5w.woff2 differ diff --git a/docs/assets/inter-roman-cyrillic.jIZ9REo5.woff2 b/docs/assets/inter-roman-cyrillic.jIZ9REo5.woff2 new file mode 100644 index 0000000..a20adc1 Binary files /dev/null and b/docs/assets/inter-roman-cyrillic.jIZ9REo5.woff2 differ diff --git a/docs/assets/inter-roman-greek-ext.9JiNzaSO.woff2 b/docs/assets/inter-roman-greek-ext.9JiNzaSO.woff2 new file mode 100644 index 0000000..e3b0be7 Binary files /dev/null and b/docs/assets/inter-roman-greek-ext.9JiNzaSO.woff2 differ diff --git a/docs/assets/inter-roman-greek.Cb5wWeGA.woff2 b/docs/assets/inter-roman-greek.Cb5wWeGA.woff2 new file mode 100644 index 0000000..f790e04 Binary files /dev/null and b/docs/assets/inter-roman-greek.Cb5wWeGA.woff2 differ diff --git a/docs/assets/inter-roman-latin-ext.GZWE-KO4.woff2 b/docs/assets/inter-roman-latin-ext.GZWE-KO4.woff2 new file mode 100644 index 0000000..715bd90 Binary files /dev/null and b/docs/assets/inter-roman-latin-ext.GZWE-KO4.woff2 differ diff --git a/docs/assets/inter-roman-latin.bvIUbFQP.woff2 b/docs/assets/inter-roman-latin.bvIUbFQP.woff2 new file mode 100644 index 0000000..a540b7a Binary files /dev/null and b/docs/assets/inter-roman-latin.bvIUbFQP.woff2 differ diff --git a/docs/assets/inter-roman-vietnamese.paY3CzEB.woff2 b/docs/assets/inter-roman-vietnamese.paY3CzEB.woff2 new file mode 100644 index 0000000..5a9f9cb Binary files /dev/null and b/docs/assets/inter-roman-vietnamese.paY3CzEB.woff2 differ diff --git a/docs/assets/style.vQnvam54.css b/docs/assets/style.vQnvam54.css new file mode 100644 index 0000000..92caef6 --- /dev/null +++ b/docs/assets/style.vQnvam54.css @@ -0,0 +1 @@ +@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/docs/assets/inter-roman-cyrillic.jIZ9REo5.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/docs/assets/inter-roman-cyrillic-ext.8T9wMG5w.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/docs/assets/inter-roman-greek.Cb5wWeGA.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/docs/assets/inter-roman-greek-ext.9JiNzaSO.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/docs/assets/inter-roman-latin.bvIUbFQP.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/docs/assets/inter-roman-latin-ext.GZWE-KO4.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/docs/assets/inter-roman-vietnamese.paY3CzEB.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/docs/assets/inter-italic-cyrillic.-nLMcIwj.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/docs/assets/inter-italic-cyrillic-ext.OVycGSDq.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/docs/assets/inter-italic-greek.PSfer2Kc.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/docs/assets/inter-italic-greek-ext.hznxWNZO.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/docs/assets/inter-italic-latin.27E69YJn.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/docs/assets/inter-italic-latin-ext.RnFly65-.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/docs/assets/inter-italic-vietnamese.xzQHe1q1.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Chinese Quotes;src:local("PingFang SC Regular"),local("PingFang SC"),local("SimHei"),local("Source Han Sans SC");unicode-range:U+2018,U+2019,U+201C,U+201D}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Chinese Quotes", "Inter var", "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{display:inline-block;margin:auto 2px -2px}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-245d2ac5]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-245d2ac5],.VPBackdrop.fade-leave-to[data-v-245d2ac5]{opacity:0}.VPBackdrop.fade-leave-active[data-v-245d2ac5]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-245d2ac5]{display:none}}.NotFound[data-v-3124a226]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-3124a226]{padding:96px 32px 168px}}.code[data-v-3124a226]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-3124a226]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-3124a226]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-3124a226]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-3124a226]{padding-top:20px}.link[data-v-3124a226]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-3124a226]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-58ec0246]{position:relative;z-index:1}.nested[data-v-58ec0246]{padding-right:16px;padding-left:16px}.outline-link[data-v-58ec0246]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-58ec0246]:hover,.outline-link.active[data-v-58ec0246]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-58ec0246]{padding-left:13px}.VPDocAsideOutline[data-v-4a63de48]{display:none}.VPDocAsideOutline.has-outline[data-v-4a63de48]{display:block}.content[data-v-4a63de48]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-4a63de48]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-4a63de48]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-465fd2fa]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-465fd2fa]{flex-grow:1}.VPDocAside[data-v-465fd2fa] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-465fd2fa] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-465fd2fa] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-4fc3eeca]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-4fc3eeca]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-311e5358]{margin-top:64px}.edit-info[data-v-311e5358]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-311e5358]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-311e5358]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-311e5358]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-311e5358]{margin-right:8px}.prev-next[data-v-311e5358]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-311e5358]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-311e5358]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-311e5358]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-311e5358]{margin-left:auto;text-align:right}.desc[data-v-311e5358]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-311e5358]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-13d3b166]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-13d3b166]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-13d3b166]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-13d3b166]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-13d3b166]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-13d3b166]{display:flex;justify-content:center}.VPDoc .aside[data-v-13d3b166]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-13d3b166]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-13d3b166]{max-width:1104px}}.container[data-v-13d3b166]{margin:0 auto;width:100%}.aside[data-v-13d3b166]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-13d3b166]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-13d3b166]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-13d3b166]::-webkit-scrollbar{display:none}.aside-curtain[data-v-13d3b166]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-13d3b166]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-13d3b166]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-13d3b166]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-13d3b166]{order:1;margin:0;min-width:640px}}.content-container[data-v-13d3b166]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-13d3b166]{max-width:688px}.VPButton[data-v-12f1d0a0]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-12f1d0a0]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-12f1d0a0]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-12f1d0a0]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-12f1d0a0]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-12f1d0a0]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-12f1d0a0]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-12f1d0a0]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-12f1d0a0]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-12f1d0a0]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-12f1d0a0]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-12f1d0a0]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-12f1d0a0]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-17155ade]{display:none}.dark .VPImage.light[data-v-17155ade]{display:none}.VPHero[data-v-99eed858]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-99eed858]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-99eed858]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-99eed858]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-99eed858]{flex-direction:row}}.main[data-v-99eed858]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-99eed858]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-99eed858]{text-align:left}}@media (min-width: 960px){.main[data-v-99eed858]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-99eed858]{max-width:592px}}.name[data-v-99eed858],.text[data-v-99eed858]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-99eed858],.VPHero.has-image .text[data-v-99eed858]{margin:0 auto}.name[data-v-99eed858]{color:var(--vp-home-hero-name-color)}.clip[data-v-99eed858]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-99eed858],.text[data-v-99eed858]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-99eed858],.text[data-v-99eed858]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-99eed858],.VPHero.has-image .text[data-v-99eed858]{margin:0}}.tagline[data-v-99eed858]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-99eed858]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-99eed858]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-99eed858]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-99eed858]{margin:0}}.actions[data-v-99eed858]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-99eed858]{justify-content:center}@media (min-width: 640px){.actions[data-v-99eed858]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-99eed858]{justify-content:flex-start}}.action[data-v-99eed858]{flex-shrink:0;padding:6px}.image[data-v-99eed858]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-99eed858]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-99eed858]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-99eed858]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-99eed858]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-99eed858]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-99eed858]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-99eed858]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-99eed858]{width:320px;height:320px}}[data-v-99eed858] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-99eed858] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-99eed858] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-4d50477a]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-4d50477a]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-4d50477a]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-4d50477a]>.VPImage{margin-bottom:20px}.icon[data-v-4d50477a]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-4d50477a]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-4d50477a]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-4d50477a]{padding-top:8px}.link-text-value[data-v-4d50477a]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-4d50477a]{margin-left:6px}.VPFeatures[data-v-ac86b7e6]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-ac86b7e6]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-ac86b7e6]{padding:0 64px}}.container[data-v-ac86b7e6]{margin:0 auto;max-width:1152px}.items[data-v-ac86b7e6]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-ac86b7e6]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-ac86b7e6],.item.grid-4[data-v-ac86b7e6],.item.grid-6[data-v-ac86b7e6]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-ac86b7e6],.item.grid-4[data-v-ac86b7e6]{width:50%}.item.grid-3[data-v-ac86b7e6],.item.grid-6[data-v-ac86b7e6]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-ac86b7e6]{width:25%}}.container[data-v-5fb900b2]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-5fb900b2]{padding:0 48px}}@media (min-width: 960px){.container[data-v-5fb900b2]{width:100%;padding:0 64px}}.vp-doc[data-v-5fb900b2] .VPHomeSponsors,.vp-doc[data-v-5fb900b2] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-5fb900b2] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-5fb900b2] .VPHomeSponsors a,.vp-doc[data-v-5fb900b2] .VPTeamPage a{text-decoration:none}.VPHome[data-v-c5e107f6]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-c5e107f6]{margin-bottom:128px}}.VPContent[data-v-787a1e06]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-787a1e06]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-787a1e06]{margin:0}@media (min-width: 960px){.VPContent[data-v-787a1e06]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-787a1e06]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-787a1e06]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-0a38b38c]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-0a38b38c]{display:none}.VPFooter[data-v-0a38b38c] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-0a38b38c] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-0a38b38c]{padding:32px}}.container[data-v-0a38b38c]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-0a38b38c],.copyright[data-v-0a38b38c]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-ce15bf42]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-ce15bf42]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-ce15bf42]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-ce15bf42]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-ce15bf42]{color:var(--vp-c-text-1)}.icon[data-v-ce15bf42]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-ce15bf42]{font-size:14px}.icon[data-v-ce15bf42]{font-size:16px}}.open>.icon[data-v-ce15bf42]{transform:rotate(90deg)}.items[data-v-ce15bf42]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-ce15bf42]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-ce15bf42]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-ce15bf42]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-ce15bf42]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-ce15bf42]{transition:all .2s ease-out}.flyout-leave-active[data-v-ce15bf42]{transition:all .15s ease-in}.flyout-enter-from[data-v-ce15bf42],.flyout-leave-to[data-v-ce15bf42]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-c7fa3a03]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-c7fa3a03]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-c7fa3a03]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-c7fa3a03]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-c7fa3a03]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-c7fa3a03]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-c7fa3a03]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-c7fa3a03]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-c7fa3a03]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-c7fa3a03]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-c7fa3a03]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-c7fa3a03]{display:none}}.menu-icon[data-v-c7fa3a03]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-c7fa3a03]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-c7fa3a03]{padding:12px 32px 11px}}.VPSwitch[data-v-e775a51b]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-e775a51b]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-e775a51b]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-e775a51b]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-e775a51b] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-e775a51b] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-f327c0eb]{opacity:1}.moon[data-v-f327c0eb],.dark .sun[data-v-f327c0eb]{opacity:0}.dark .moon[data-v-f327c0eb]{opacity:1}.dark .VPSwitchAppearance[data-v-f327c0eb] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-920ea739]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-920ea739]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-84ccf230]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-84ccf230]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-84ccf230]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-84ccf230]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-f7f49da0]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-f7f49da0]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-f7f49da0]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-f7f49da0]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-e8d68d95]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-e8d68d95] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-e8d68d95] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-e8d68d95] .group:last-child{padding-bottom:0}.VPMenu[data-v-e8d68d95] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-e8d68d95] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-e8d68d95] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-e8d68d95] .action{padding-left:24px}.VPFlyout[data-v-c0b03d55]{position:relative}.VPFlyout[data-v-c0b03d55]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-c0b03d55]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-c0b03d55]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-c0b03d55]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-c0b03d55]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-c0b03d55],.button[aria-expanded=true]+.menu[data-v-c0b03d55]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-c0b03d55]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-c0b03d55]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-c0b03d55]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-c0b03d55]{margin-right:0;font-size:16px}.text-icon[data-v-c0b03d55]{margin-left:4px;font-size:14px}.icon[data-v-c0b03d55]{font-size:20px;transition:fill .25s}.menu[data-v-c0b03d55]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-054ad44b]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-054ad44b]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-054ad44b]>svg,.VPSocialLink[data-v-054ad44b]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-26c7e433]{display:flex;justify-content:center}.VPNavBarExtra[data-v-3d53e9c7]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-3d53e9c7]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-3d53e9c7]{display:none}}.trans-title[data-v-3d53e9c7]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-3d53e9c7],.item.social-links[data-v-3d53e9c7]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-3d53e9c7]{min-width:176px}.appearance-action[data-v-3d53e9c7]{margin-right:-2px}.social-links-list[data-v-3d53e9c7]{margin:-4px -8px}.VPNavBarHamburger[data-v-3428b086]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-3428b086]{display:none}}.container[data-v-3428b086]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-3428b086]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-3428b086]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-3428b086]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-3428b086]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-3428b086]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-3428b086]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-3428b086],.VPNavBarHamburger.active:hover .middle[data-v-3428b086],.VPNavBarHamburger.active:hover .bottom[data-v-3428b086]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-3428b086],.middle[data-v-3428b086],.bottom[data-v-3428b086]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-3428b086]{top:0;left:0;transform:translate(0)}.middle[data-v-3428b086]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-3428b086]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-a12bafb5]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-a12bafb5],.VPNavBarMenuLink[data-v-a12bafb5]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-25f68e44]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-25f68e44]{display:flex}}/*! @docsearch/css 3.5.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-1db4960e]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-1db4960e]{display:flex;align-items:center}}.title[data-v-bd7b7032]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-bd7b7032]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-bd7b7032]{border-bottom-color:var(--vp-c-divider)}}[data-v-bd7b7032] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-e020314f]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-e020314f]{display:flex;align-items:center}}.title[data-v-e020314f]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-50076c89]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .5s}.VPNavBar.has-local-nav[data-v-50076c89]{background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar.has-local-nav[data-v-50076c89]{background-color:transparent}.VPNavBar[data-v-50076c89]:not(.has-sidebar):not(.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-50076c89]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-50076c89]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-50076c89]{padding:0}}.container[data-v-50076c89]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-50076c89],.container>.content[data-v-50076c89]{pointer-events:none}.container[data-v-50076c89] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-50076c89]{max-width:100%}}.title[data-v-50076c89]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-50076c89]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-50076c89]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-50076c89]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-50076c89]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-50076c89]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-50076c89]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.top) .content-body[data-v-50076c89]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.top) .content-body[data-v-50076c89]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-50076c89]{column-gap:.5rem}}.menu+.translations[data-v-50076c89]:before,.menu+.appearance[data-v-50076c89]:before,.menu+.social-links[data-v-50076c89]:before,.translations+.appearance[data-v-50076c89]:before,.appearance+.social-links[data-v-50076c89]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-50076c89]:before,.translations+.appearance[data-v-50076c89]:before{margin-right:16px}.appearance+.social-links[data-v-50076c89]:before{margin-left:16px}.social-links[data-v-50076c89]{margin-right:-8px}.divider[data-v-50076c89]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-50076c89]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-50076c89]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-50076c89]{width:100%;height:1px;transition:background-color .5s}.VPNavBar.has-local-nav .divider-line[data-v-50076c89]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.top) .divider-line[data-v-50076c89]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.top) .divider[data-v-50076c89]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-624c4525]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-624c4525]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-8291b0a7]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-8291b0a7]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-83f458d8]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-83f458d8]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-b6357329]{display:block}.title[data-v-b6357329]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-4a5b86bc]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-4a5b86bc]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-4a5b86bc]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-4a5b86bc]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-4a5b86bc]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-4a5b86bc]{transform:rotate(45deg)}.button[data-v-4a5b86bc]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-4a5b86bc]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-4a5b86bc]{transition:transform .25s}.group[data-v-4a5b86bc]:first-child{padding-top:0}.group+.group[data-v-4a5b86bc],.group+.item[data-v-4a5b86bc]{padding-top:4px}.VPNavScreenTranslations[data-v-af240698]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-af240698]{height:auto}.title[data-v-af240698]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-af240698]{font-size:16px}.icon.lang[data-v-af240698]{margin-right:8px}.icon.chevron[data-v-af240698]{margin-left:4px}.list[data-v-af240698]{padding:4px 0 0 24px}.link[data-v-af240698]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-dd8956c7]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-dd8956c7],.VPNavScreen.fade-leave-active[data-v-dd8956c7]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-dd8956c7],.VPNavScreen.fade-leave-active .container[data-v-dd8956c7]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-dd8956c7],.VPNavScreen.fade-leave-to[data-v-dd8956c7]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-dd8956c7],.VPNavScreen.fade-leave-to .container[data-v-dd8956c7]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-dd8956c7]{display:none}}.container[data-v-dd8956c7]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-dd8956c7],.menu+.appearance[data-v-dd8956c7],.translations+.appearance[data-v-dd8956c7]{margin-top:24px}.menu+.social-links[data-v-dd8956c7]{margin-top:16px}.appearance+.social-links[data-v-dd8956c7]{margin-top:16px}.VPNav[data-v-2892230d]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-2892230d]{position:fixed}}.VPSidebarItem.level-0[data-v-8f61602b]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-8f61602b]{padding-bottom:10px}.item[data-v-8f61602b]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-8f61602b]{cursor:pointer}.indicator[data-v-8f61602b]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-8f61602b],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-8f61602b],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-8f61602b],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-8f61602b]{background-color:var(--vp-c-brand-1)}.link[data-v-8f61602b]{display:flex;align-items:center;flex-grow:1}.text[data-v-8f61602b]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-8f61602b]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-8f61602b],.VPSidebarItem.level-2 .text[data-v-8f61602b],.VPSidebarItem.level-3 .text[data-v-8f61602b],.VPSidebarItem.level-4 .text[data-v-8f61602b],.VPSidebarItem.level-5 .text[data-v-8f61602b]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-8f61602b],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-8f61602b],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-8f61602b],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-8f61602b],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-8f61602b],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-8f61602b]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-8f61602b],.VPSidebarItem.level-1.has-active>.item>.text[data-v-8f61602b],.VPSidebarItem.level-2.has-active>.item>.text[data-v-8f61602b],.VPSidebarItem.level-3.has-active>.item>.text[data-v-8f61602b],.VPSidebarItem.level-4.has-active>.item>.text[data-v-8f61602b],.VPSidebarItem.level-5.has-active>.item>.text[data-v-8f61602b],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-8f61602b],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-8f61602b],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-8f61602b],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-8f61602b],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-8f61602b],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-8f61602b]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-8f61602b],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-8f61602b],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-8f61602b],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-8f61602b],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-8f61602b],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-8f61602b]{color:var(--vp-c-brand-1)}.caret[data-v-8f61602b]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-8f61602b]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-8f61602b]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-8f61602b]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-8f61602b]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-8f61602b],.VPSidebarItem.level-2 .items[data-v-8f61602b],.VPSidebarItem.level-3 .items[data-v-8f61602b],.VPSidebarItem.level-4 .items[data-v-8f61602b],.VPSidebarItem.level-5 .items[data-v-8f61602b]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-8f61602b]{display:none}.VPSidebar[data-v-eb38e9cf]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-eb38e9cf]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-eb38e9cf]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-eb38e9cf]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-eb38e9cf]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-eb38e9cf]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-eb38e9cf]{outline:0}.group+.group[data-v-eb38e9cf]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-eb38e9cf]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-ce070715]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-ce070715]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-ce070715]{top:14px;left:16px}}.Layout[data-v-a534ac59]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-345bb51a]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-345bb51a]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-345bb51a]{margin:128px 0}}.VPHomeSponsors[data-v-345bb51a]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-345bb51a]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-345bb51a]{padding:0 64px}}.container[data-v-345bb51a]{margin:0 auto;max-width:1152px}.love[data-v-345bb51a]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-345bb51a]{display:inline-block}.message[data-v-345bb51a]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-345bb51a]{padding-top:32px}.action[data-v-345bb51a]{padding-top:40px;text-align:center}.VPTeamPage[data-v-6df1e013]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-6df1e013]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-6df1e013-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-6df1e013-s],.VPTeamMembers+.VPTeamPageSection[data-v-6df1e013-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-6df1e013-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-6df1e013-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-6df1e013-s],.VPTeamMembers+.VPTeamPageSection[data-v-6df1e013-s]{margin-top:96px}}.VPTeamMembers[data-v-6df1e013-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-6df1e013-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-6df1e013-s]{padding:0 64px}}.VPTeamPageTitle[data-v-b41786c2]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-b41786c2]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-b41786c2]{padding:80px 64px 48px}}.title[data-v-b41786c2]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-b41786c2]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-b41786c2]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-b41786c2]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-e012f2ba]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-e012f2ba]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-e012f2ba]{padding:0 64px}}.title[data-v-e012f2ba]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-e012f2ba]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-e012f2ba]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-e012f2ba]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-e012f2ba]{padding-top:40px}.VPTeamMembersItem[data-v-79138619]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-79138619]{padding:32px}.VPTeamMembersItem.small .data[data-v-79138619]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-79138619]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-79138619]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-79138619]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-79138619]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-79138619]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-79138619]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-79138619]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-79138619]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-79138619]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-79138619]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-79138619]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-79138619]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-79138619]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-79138619]{text-align:center}.avatar[data-v-79138619]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-79138619]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-79138619]{margin:0;font-weight:600}.affiliation[data-v-79138619]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-79138619]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-79138619]:hover{color:var(--vp-c-brand-1)}.desc[data-v-79138619]{margin:0 auto}.desc[data-v-79138619] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-79138619]{display:flex;justify-content:center;height:56px}.sp-link[data-v-79138619]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-79138619]:hover,.sp .sp-link.link[data-v-79138619]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-79138619]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-299c5456]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-299c5456]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-299c5456]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-299c5456]{max-width:876px}.VPTeamMembers.medium .container[data-v-299c5456]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-299c5456]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-299c5456]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-299c5456]{max-width:760px}.container[data-v-299c5456]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--vp-c-brand-1: #148ca7;--vp-c-brand-2: #3286e5;--vp-button-brand-bg: #2a5889}.idraw-playground-preview{width:100%;height:540px;border:1px solid #cecece;margin:0 auto}@media screen and (max-width: 640px){.idraw-playground-preview{display:none}} diff --git a/docs/assets/zh-CN_api_add-element.md.cWrK0KKU.js b/docs/assets/zh-CN_api_add-element.md.cWrK0KKU.js new file mode 100644 index 0000000..6812418 --- /dev/null +++ b/docs/assets/zh-CN_api_add-element.md.cWrK0KKU.js @@ -0,0 +1,25 @@ +import{_ as s,o as i,c as a,a2 as n,m as e}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"addElement","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/add-element.md","filePath":"zh-CN/api/add-element.md"}'),l={name:"zh-CN/api/add-element.md"},h=n(`

addElement

说明

addElement 对图画添加元素,并且触发重新渲染。

参数

  • {object} element 元素内容,具体元素数据格式可查询 画图元素
  • {object} { position?: number[] },可选配置,position 元素索引位置,比如 [1, 2] 代表把元素加入第2个元素(必须是Group类型)的第3个位置上。

返回值

  • {object} 返回完整的data数据。

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData({ elements: [] });
+
+idraw.addElement({
+  name: 'rect',
+  x: 140,
+  y: 120,
+  w: 200,
+  h: 100,
+  type: 'rect',
+  detail: {
+    background: '#f7d3c1',
+    borderRadius: 20,
+    borderWidth: 4,
+    borderColor: '#ff6032'
+  }
+});

示例

Demo完整预览 Playground >>

`,11),t=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-addElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,t];function k(d,r,E,o,c,g){return i(),a("div",null,p)}const m=s(l,[["render",k]]);export{F as __pageData,m as default}; diff --git a/docs/assets/zh-CN_api_add-element.md.cWrK0KKU.lean.js b/docs/assets/zh-CN_api_add-element.md.cWrK0KKU.lean.js new file mode 100644 index 0000000..90ec09c --- /dev/null +++ b/docs/assets/zh-CN_api_add-element.md.cWrK0KKU.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as n,m as e}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"addElement","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/add-element.md","filePath":"zh-CN/api/add-element.md"}'),l={name:"zh-CN/api/add-element.md"},h=n("",11),t=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-addElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,t];function k(d,r,E,o,c,g){return i(),a("div",null,p)}const m=s(l,[["render",k]]);export{F as __pageData,m as default}; diff --git a/docs/assets/zh-CN_api_center-content.md.6gCUd5A0.js b/docs/assets/zh-CN_api_center-content.md.6gCUd5A0.js new file mode 100644 index 0000000..a6fcb27 --- /dev/null +++ b/docs/assets/zh-CN_api_center-content.md.6gCUd5A0.js @@ -0,0 +1,16 @@ +import{_ as s,o as a,c as i,a2 as n,m as e}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"centerContent","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/center-content.md","filePath":"zh-CN/api/center-content.md"}'),t={name:"zh-CN/api/center-content.md"},l=n(`

centerContent

说明

centerContent 让内容在视图居中显示,如果内容尺寸超出视图,就会把内容按比例缩小居中在视图中。

参数

  • {object} options
    • {Data} options.data 可选,计算居中尺寸的新内容数据。

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData({
+  element: [
+    /* ... */
+  ]
+});
+
+idraw.centerContent();

示例

Demo完整预览 Playground >>

`,11),h=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-centerContent&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function r(k,d,o,c,E,g){return a(),i("div",null,p)}const F=s(t,[["render",r]]);export{u as __pageData,F as default}; diff --git a/docs/assets/zh-CN_api_center-content.md.6gCUd5A0.lean.js b/docs/assets/zh-CN_api_center-content.md.6gCUd5A0.lean.js new file mode 100644 index 0000000..dd5e332 --- /dev/null +++ b/docs/assets/zh-CN_api_center-content.md.6gCUd5A0.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as i,a2 as n,m as e}from"./chunks/framework.PNNbM9mo.js";const u=JSON.parse('{"title":"centerContent","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/center-content.md","filePath":"zh-CN/api/center-content.md"}'),t={name:"zh-CN/api/center-content.md"},l=n("",11),h=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-centerContent&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function r(k,d,o,c,E,g){return a(),i("div",null,p)}const F=s(t,[["render",r]]);export{u as __pageData,F as default}; diff --git a/docs/assets/zh-CN_api_delete-element.md.j4QWtj8O.js b/docs/assets/zh-CN_api_delete-element.md.j4QWtj8O.js new file mode 100644 index 0000000..11121b9 --- /dev/null +++ b/docs/assets/zh-CN_api_delete-element.md.j4QWtj8O.js @@ -0,0 +1,19 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"deleteElement","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/delete-element.md","filePath":"zh-CN/api/delete-element.md"}'),t={name:"zh-CN/api/delete-element.md"},l=e(`

deleteElement

说明

deleteElement 根据元素的uuid,将图画中对应的元素删除,并且触发重新渲染。

参数

  • {string} uuid 元素唯一ID

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+
+const uuid = idraw.getData().elements[0].uuid;
+
+idraw.deleteElement(uuid);

示例

Demo完整预览 Playground >>

`,11),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-deleteElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(d,r,E,o,c,g){return i(),a("div",null,p)}const u=s(t,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_api_delete-element.md.j4QWtj8O.lean.js b/docs/assets/zh-CN_api_delete-element.md.j4QWtj8O.lean.js new file mode 100644 index 0000000..09763f3 --- /dev/null +++ b/docs/assets/zh-CN_api_delete-element.md.j4QWtj8O.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"deleteElement","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/delete-element.md","filePath":"zh-CN/api/delete-element.md"}'),t={name:"zh-CN/api/delete-element.md"},l=e("",11),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-deleteElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(d,r,E,o,c,g){return i(),a("div",null,p)}const u=s(t,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_api_enable-disable.md.ATviRUQS.js b/docs/assets/zh-CN_api_enable-disable.md.ATviRUQS.js new file mode 100644 index 0000000..37c064f --- /dev/null +++ b/docs/assets/zh-CN_api_enable-disable.md.ATviRUQS.js @@ -0,0 +1,15 @@ +import{_ as s,o as i,c as a,a2 as e,m as l}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"enable/disable","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/enable-disable.md","filePath":"zh-CN/api/enable-disable.md"}'),n={name:"zh-CN/api/enable-disable.md"},h=e(`

enable/disable

说明

  • enable(...) 开启某个功能
  • disable(...) 关闭某个功能

参数

  • {IDrawFeature} feat 功能类型
    • 'ruler': 标尺功能
    • 'scroll': 滚动条功能
    • 'scale': 缩放功能
    • 'info': 信息显示功能,例如显示坐标信息
    • - 其它功能待开发 ...
ts
type IDrawFeature = 'ruler' | 'scroll' | 'scale' | 'info'; // TODO other feature

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+idraw.disable('ruler');
+
+setTimeout(() => {
+  idraw.enable('ruler');
+}, 1000);

示例

Demo完整预览 Playground >>

`,12),t=l("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-enable&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,t];function k(r,d,o,E,c,g){return i(),a("div",null,p)}const u=s(n,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_api_enable-disable.md.ATviRUQS.lean.js b/docs/assets/zh-CN_api_enable-disable.md.ATviRUQS.lean.js new file mode 100644 index 0000000..6742266 --- /dev/null +++ b/docs/assets/zh-CN_api_enable-disable.md.ATviRUQS.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as e,m as l}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"enable/disable","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/enable-disable.md","filePath":"zh-CN/api/enable-disable.md"}'),n={name:"zh-CN/api/enable-disable.md"},h=e("",12),t=l("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-enable&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,t];function k(r,d,o,E,c,g){return i(),a("div",null,p)}const u=s(n,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_api_get-data.md._9ZhWQCT.js b/docs/assets/zh-CN_api_get-data.md._9ZhWQCT.js new file mode 100644 index 0000000..ed425d3 --- /dev/null +++ b/docs/assets/zh-CN_api_get-data.md._9ZhWQCT.js @@ -0,0 +1,33 @@ +import{_ as s,o as i,c as a,a2 as n,m as h}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"getData","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/get-data.md","filePath":"zh-CN/api/get-data.md"}'),l={name:"zh-CN/api/get-data.md"},t=n(`

getData

说明

getData 用于获取当前画图内容的数据。

参数

  • {object} options 选项,非必填
    • {boolean} options.compact 压缩,非必选

返回值

  • {object} data 图画的JSON对象数据

用法

js
import { iDraw } from 'idraw';
+
+const data = {
+  elements: [
+    {
+      name: 'rect',
+      x: 160,
+      y: 120,
+      w: 200,
+      h: 100,
+      angle: 30,
+      type: 'rect',
+      detail: {
+        background: '#d5f5f9',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+
+const resultData = idraw.getData();
+console.log(resultData);

示例

Demo完整预览 Playground >>

`,11),p=h("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-getData&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),e=[t,p];function k(E,r,d,o,g,c){return i(),a("div",null,e)}const C=s(l,[["render",k]]);export{F as __pageData,C as default}; diff --git a/docs/assets/zh-CN_api_get-data.md._9ZhWQCT.lean.js b/docs/assets/zh-CN_api_get-data.md._9ZhWQCT.lean.js new file mode 100644 index 0000000..ed41073 --- /dev/null +++ b/docs/assets/zh-CN_api_get-data.md._9ZhWQCT.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as n,m as h}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"getData","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/get-data.md","filePath":"zh-CN/api/get-data.md"}'),l={name:"zh-CN/api/get-data.md"},t=n("",11),p=h("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-getData&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),e=[t,p];function k(E,r,d,o,g,c){return i(),a("div",null,e)}const C=s(l,[["render",k]]);export{F as __pageData,C as default}; diff --git a/docs/assets/zh-CN_api_move-element.md.z-cVejVv.js b/docs/assets/zh-CN_api_move-element.md.z-cVejVv.js new file mode 100644 index 0000000..fb6dd6e --- /dev/null +++ b/docs/assets/zh-CN_api_move-element.md.z-cVejVv.js @@ -0,0 +1,19 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const m=JSON.parse('{"title":"moveElement","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/move-element.md","filePath":"zh-CN/api/move-element.md"}'),t={name:"zh-CN/api/move-element.md"},l=e(`

moveElement

说明

moveElement 根据元素的uuid,将图画中对应的元素删除,并且触发重新渲染。

参数

  • {string} uuid 元素唯一ID
  • {number[]} position 将元素移动到指定索引位置。比如 [1, 2] 代表把元素移动到第2个元素(必须是Group类型)的第3个位置上。

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+
+const uuid = idraw.getData().elements[0].uuid;
+
+idraw.moveElement(uuid, { position: [1, 2] });

示例

Demo完整预览 Playground >>

`,11),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-deleteElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,o,E,c,g){return i(),a("div",null,p)}const F=s(t,[["render",k]]);export{m as __pageData,F as default}; diff --git a/docs/assets/zh-CN_api_move-element.md.z-cVejVv.lean.js b/docs/assets/zh-CN_api_move-element.md.z-cVejVv.lean.js new file mode 100644 index 0000000..5e1d854 --- /dev/null +++ b/docs/assets/zh-CN_api_move-element.md.z-cVejVv.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const m=JSON.parse('{"title":"moveElement","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/move-element.md","filePath":"zh-CN/api/move-element.md"}'),t={name:"zh-CN/api/move-element.md"},l=e("",11),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-deleteElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,o,E,c,g){return i(),a("div",null,p)}const F=s(t,[["render",k]]);export{m as __pageData,F as default}; diff --git a/docs/assets/zh-CN_api_resize.md.aecMZXgm.js b/docs/assets/zh-CN_api_resize.md.aecMZXgm.js new file mode 100644 index 0000000..e55ec75 --- /dev/null +++ b/docs/assets/zh-CN_api_resize.md.aecMZXgm.js @@ -0,0 +1,20 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"resize","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/resize.md","filePath":"zh-CN/api/resize.md"}'),l={name:"zh-CN/api/resize.md"},h=e(`

resize

说明

resize 可以对图画视图尺寸进行再次修改

参数

  • {object} options 视图尺寸选项
    • {number} options.width 画板宽度,非必选
    • {number} options.height 画板高度,非必选
    • {number} options.devicePixelRatio 设备像素比例,非必选

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData({
+  element: [
+    /* ... */
+  ]
+});
+
+idraw.resize({
+  width: 300,
+  height: 200,
+  devicePixelRatio: 2
+});

示例

Demo完整预览 Playground >>

`,11),t=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-resize&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,t];function k(r,d,o,E,c,g){return i(),a("div",null,p)}const u=s(l,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_api_resize.md.aecMZXgm.lean.js b/docs/assets/zh-CN_api_resize.md.aecMZXgm.lean.js new file mode 100644 index 0000000..bc119a8 --- /dev/null +++ b/docs/assets/zh-CN_api_resize.md.aecMZXgm.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"resize","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/resize.md","filePath":"zh-CN/api/resize.md"}'),l={name:"zh-CN/api/resize.md"},h=e("",11),t=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-resize&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,t];function k(r,d,o,E,c,g){return i(),a("div",null,p)}const u=s(l,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_api_select-element.md.9SmQXMXH.js b/docs/assets/zh-CN_api_select-element.md.9SmQXMXH.js new file mode 100644 index 0000000..8bd73cb --- /dev/null +++ b/docs/assets/zh-CN_api_select-element.md.9SmQXMXH.js @@ -0,0 +1,18 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"selectElement","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/select-element.md","filePath":"zh-CN/api/select-element.md"}'),t={name:"zh-CN/api/select-element.md"},l=e(`

selectElement

说明

selectElement 根据元素的UUID选中图画中的元素。

参数

  • {string} uuid 元素唯一ID

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+const resultData = idraw.getData();
+
+idraw.selectElement(resultData.elements[0].uuid);

示例

Demo完整预览 Playground >>

`,11),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-selectElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,E,o,c,g){return i(),a("div",null,p)}const m=s(t,[["render",k]]);export{F as __pageData,m as default}; diff --git a/docs/assets/zh-CN_api_select-element.md.9SmQXMXH.lean.js b/docs/assets/zh-CN_api_select-element.md.9SmQXMXH.lean.js new file mode 100644 index 0000000..532cab1 --- /dev/null +++ b/docs/assets/zh-CN_api_select-element.md.9SmQXMXH.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as e,m as n}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"selectElement","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/select-element.md","filePath":"zh-CN/api/select-element.md"}'),t={name:"zh-CN/api/select-element.md"},l=e("",11),h=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-selectElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,E,o,c,g){return i(),a("div",null,p)}const m=s(t,[["render",k]]);export{F as __pageData,m as default}; diff --git a/docs/assets/zh-CN_api_set-data.md.j0eTmWAp.js b/docs/assets/zh-CN_api_set-data.md.j0eTmWAp.js new file mode 100644 index 0000000..d78912c --- /dev/null +++ b/docs/assets/zh-CN_api_set-data.md.j0eTmWAp.js @@ -0,0 +1,29 @@ +import{_ as s,o as i,c as a,a2 as n,m as h}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"setData","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/set-data.md","filePath":"zh-CN/api/set-data.md"}'),t={name:"zh-CN/api/set-data.md"},l=n(`

setData

说明

setData 用于设置画图内容的数据,设置后会根据设置数据触发图画的重绘。

参数

  • {object} data 画图数据对象

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+const data = {
+  elements: [
+    {
+      name: 'rect',
+      x: 160,
+      y: 120,
+      w: 200,
+      h: 100,
+      angle: 30,
+      type: 'rect',
+      detail: {
+        background: '#d5f5f9',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+idraw.setData(data);

示例

Demo完整预览 Playground >>

`,11),p=h("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-setData&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),e=[l,p];function k(E,r,d,o,g,c){return i(),a("div",null,e)}const C=s(t,[["render",k]]);export{F as __pageData,C as default}; diff --git a/docs/assets/zh-CN_api_set-data.md.j0eTmWAp.lean.js b/docs/assets/zh-CN_api_set-data.md.j0eTmWAp.lean.js new file mode 100644 index 0000000..4a4f3bc --- /dev/null +++ b/docs/assets/zh-CN_api_set-data.md.j0eTmWAp.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as n,m as h}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"setData","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/set-data.md","filePath":"zh-CN/api/set-data.md"}'),t={name:"zh-CN/api/set-data.md"},l=n("",11),p=h("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-setData&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),e=[l,p];function k(E,r,d,o,g,c){return i(),a("div",null,e)}const C=s(t,[["render",k]]);export{F as __pageData,C as default}; diff --git a/docs/assets/zh-CN_api_set-mode.md.UDWKcg3E.js b/docs/assets/zh-CN_api_set-mode.md.UDWKcg3E.js new file mode 100644 index 0000000..d7492ee --- /dev/null +++ b/docs/assets/zh-CN_api_set-mode.md.UDWKcg3E.js @@ -0,0 +1,10 @@ +import{_ as s,o as i,c as a,a2 as e,m as t}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"setMode","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/set-mode.md","filePath":"zh-CN/api/set-mode.md"}'),h={name:"zh-CN/api/set-mode.md"},n=e(`

setMode

说明

setMode 可以切换视图操作模式

参数

  • {IDrawType} mode 视图操作模式
    • 'select': 选择模式,也是默认模式,用于选择和编辑元素
    • 'drag': 拖拽模式,用于拖拽移动整体画布位置
    • 'readOnly': 只读模式,仅显示视图内容,无法进行编辑操作
ts
type IDrawMode = 'select' | 'drag' | 'readOnly';

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setMode('readOnly');

示例

Demo完整预览 Playground >>

`,12),l=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-setMode&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[n,l];function k(d,r,o,c,E,g){return i(),a("div",null,p)}const u=s(h,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_api_set-mode.md.UDWKcg3E.lean.js b/docs/assets/zh-CN_api_set-mode.md.UDWKcg3E.lean.js new file mode 100644 index 0000000..4db3895 --- /dev/null +++ b/docs/assets/zh-CN_api_set-mode.md.UDWKcg3E.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as e,m as t}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"setMode","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/set-mode.md","filePath":"zh-CN/api/set-mode.md"}'),h={name:"zh-CN/api/set-mode.md"},n=e("",12),l=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-setMode&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[n,l];function k(d,r,o,c,E,g){return i(),a("div",null,p)}const u=s(h,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_api_update-element.md.r7FOtd7Z.js b/docs/assets/zh-CN_api_update-element.md.r7FOtd7Z.js new file mode 100644 index 0000000..f654487 --- /dev/null +++ b/docs/assets/zh-CN_api_update-element.md.r7FOtd7Z.js @@ -0,0 +1,22 @@ +import{_ as s,o as a,c as i,a2 as n,m as e}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"updateElement","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/update-element.md","filePath":"zh-CN/api/update-element.md"}'),t={name:"zh-CN/api/update-element.md"},l=n(`

updateElement

说明

updateElement 更新图画中的元素,并且触发重新渲染。

参数

  • {object} element 元素内容,具体元素数据格式可查询 画图元素

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+const resultData = idraw.getData();
+
+const elem = resultData.elements[0];
+
+elem.detail.color = '#f0f0f0';
+
+idraw.updateData(elem);

示例

Demo完整预览 Playground >>

`,11),h=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-updateElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,E,o,c,g){return a(),i("div",null,p)}const u=s(t,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_api_update-element.md.r7FOtd7Z.lean.js b/docs/assets/zh-CN_api_update-element.md.r7FOtd7Z.lean.js new file mode 100644 index 0000000..e6e3f77 --- /dev/null +++ b/docs/assets/zh-CN_api_update-element.md.r7FOtd7Z.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as i,a2 as n,m as e}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"updateElement","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/api/update-element.md","filePath":"zh-CN/api/update-element.md"}'),t={name:"zh-CN/api/update-element.md"},l=n("",11),h=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=api-updateElement&header=false&sider=false&default-editor-split=50",width:"1000",height:"480",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,h];function k(r,d,E,o,c,g){return a(),i("div",null,p)}const u=s(t,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_element_circle.md.TXgGQoDH.js b/docs/assets/zh-CN_element_circle.md.TXgGQoDH.js new file mode 100644 index 0000000..fc35081 --- /dev/null +++ b/docs/assets/zh-CN_element_circle.md.TXgGQoDH.js @@ -0,0 +1,33 @@ +import{_ as s,o as i,c as a,a2 as n,m as t}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"圆形元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/circle.md","filePath":"zh-CN/element/circle.md"}'),l={name:"zh-CN/element/circle.md"},h=n(`

圆形元素

Circle

用来渲染圆形或椭圆形内容,具体格式如下所示:

ts
type Circle = {
+  type: 'circle';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    background: string;
+    borderRadius?: string;
+    borderWidth?: number;
+    borderColor?: number;
+  };
+};

Circle.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

Circle.detail 数据格式

Circle 元素的detail属性

ts
type CircleDetail = {
+  background?: string;
+  background?: string;
+  borderWidth?: number;
+  borderColor?: string;
+};

Circle.detail 数据属性内容

属性说明类型默认值是否必填备注
background圆形颜色string-true例如 #000000
borderRadius边框角圆形半径number0false-
borderWidth边框宽度number0false-
borderColor边框颜色string-false例如 #000000

完整数据示例

js
const elementCircle = {
+  name: 'circle',
+  x: 160,
+  y: 100,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'circle',
+  detail: {
+    background: '#d5f5f9',
+    borderRadius: 10,
+    borderWidth: 4,
+    borderColor: '#3f51b5'
+  }
+};

效果预览

Demo完整预览 Playground >>

`,15),e=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-circle&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),k=[h,e];function p(d,r,E,c,g,o){return i(),a("div",null,k)}const C=s(l,[["render",p]]);export{F as __pageData,C as default}; diff --git a/docs/assets/zh-CN_element_circle.md.TXgGQoDH.lean.js b/docs/assets/zh-CN_element_circle.md.TXgGQoDH.lean.js new file mode 100644 index 0000000..880c47a --- /dev/null +++ b/docs/assets/zh-CN_element_circle.md.TXgGQoDH.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as n,m as t}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"圆形元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/circle.md","filePath":"zh-CN/element/circle.md"}'),l={name:"zh-CN/element/circle.md"},h=n("",15),e=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-circle&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),k=[h,e];function p(d,r,E,c,g,o){return i(),a("div",null,k)}const C=s(l,[["render",p]]);export{F as __pageData,C as default}; diff --git a/docs/assets/zh-CN_element_group.md.5flfEW0e.js b/docs/assets/zh-CN_element_group.md.5flfEW0e.js new file mode 100644 index 0000000..99524ba --- /dev/null +++ b/docs/assets/zh-CN_element_group.md.5flfEW0e.js @@ -0,0 +1,32 @@ +import{_ as s,o as i,c as a,a2 as t,m as n}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"组合元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/group.md","filePath":"zh-CN/element/group.md"}'),h={name:"zh-CN/element/group.md"},l=t(`

组合元素

Group

用来渲染组合内容,具体格式如下所示:

ts
type Group = {
+  type: 'group';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    children: Element;
+    background: string;
+    borderRadius?: string;
+    borderWidth?: number;
+    borderColor?: number;
+  };
+};

Group.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

Group.detail 数据格式

Rect 元素的detail属性

ts
type GroupDetail = {
+  children: Array<Element>;
+  background?: string;
+  background?: string;
+  borderWidth?: number;
+  borderColor?: string;
+};

Group.detail 数据属性内容

属性说明类型默认值是否必填备注
children组合子元素Array<Element>-true例如 #000000
background组合矩形颜色string-false例如 #000000
borderRadius组合边框角圆形半径number0false-
borderWidth组合边框宽度number0false-
borderColor组合边框颜色string-false例如 #000000

完整数据示例

js
const elementGroup = {
+  name: 'group',
+  x: 160,
+  y: 120,
+  w: 200,
+  h: 100,
+  angle: 30,
+  type: 'group',
+  detail: {
+    children: []
+  }
+};

效果预览

Demo完整预览 Playground >>

`,15),e=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-group&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,e];function k(d,r,E,o,g,c){return i(),a("div",null,p)}const u=s(h,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_element_group.md.5flfEW0e.lean.js b/docs/assets/zh-CN_element_group.md.5flfEW0e.lean.js new file mode 100644 index 0000000..bce0703 --- /dev/null +++ b/docs/assets/zh-CN_element_group.md.5flfEW0e.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as t,m as n}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"组合元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/group.md","filePath":"zh-CN/element/group.md"}'),h={name:"zh-CN/element/group.md"},l=t("",15),e=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-group&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,e];function k(d,r,E,o,g,c){return i(),a("div",null,p)}const u=s(h,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_element_html.md._O0oTlOn.js b/docs/assets/zh-CN_element_html.md._O0oTlOn.js new file mode 100644 index 0000000..f88814f --- /dev/null +++ b/docs/assets/zh-CN_element_html.md._O0oTlOn.js @@ -0,0 +1,69 @@ +import{_ as s,o as i,c as a,a2 as n,m as l}from"./chunks/framework.PNNbM9mo.js";const y=JSON.parse('{"title":"HTML元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/html.md","filePath":"zh-CN/element/html.md"}'),t={name:"zh-CN/element/html.md"},h=n(`

HTML元素

HTML

用来渲染HTML代码片,具体格式如下所示:

ts
type HTML = {
+  type: 'html';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    html: string;
+  };
+};

HTML.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

HTML.detail 数据格式

HTML 元素的detail属性

ts
type HTMLDetail = {
+  html: string;
+};

HTML.detail 数据属性内容

属性说明类型默认值是否必填备注
htmlHTML代码片段string-true-

WARNING

注意 detail.html 里的 HTML代码片段暂时不支持依赖资源渲染,例如 <img /> 标签或者 cssbackground-image 属性

完整数据示例

js
const elementHTML = {
+  name: 'html',
+  x: 200,
+  y: 120,
+  w: 150,
+  h: 100,
+  type: 'html',
+  angle: 0,
+  detail: {
+    html: \`
+      <style>
+      .btn-box {
+        margin: 10px 0;
+      }
+      .btn {
+        line-height: 1.5715;
+        position: relative;
+        display: inline-block;
+        font-weight: 400;
+        white-space: nowrap;
+        text-align: center;
+        background-image: none;
+        border: 1px solid transparent;
+        box-shadow: 0 2px #00000004;
+        cursor: pointer;
+        user-select: none;
+        height: 32px;
+        padding: 4px 15px;
+        font-size: 14px;
+        border-radius: 2px;
+        color: #000000d9;
+        background: #fff;
+        border-color: #d9d9d9;
+      }
+      .btn-primary {
+        color: #fff;
+        background: #1890ff;
+        border-color: #1890ff;
+        text-shadow: 0 -1px 0 rgb(0 0 0 / 12%);
+        box-shadow: 0 2px #0000000b;
+      }
+      </style>
+      <div>
+        <div class="btn-box">
+          <button class="btn">
+            <span>Button</span>
+          </button>
+        </div>
+        <div class="btn-box">
+          <button class="btn btn-primary">
+            <span>Button Primary</span>
+          </button> 
+        </div>
+      </div>
+    \`
+  }
+};

效果预览

Demo完整预览 Playground >>

`,16),p=l("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-html&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),e=[h,p];function k(d,r,F,E,g,c){return i(),a("div",null,e)}const C=s(t,[["render",k]]);export{y as __pageData,C as default}; diff --git a/docs/assets/zh-CN_element_html.md._O0oTlOn.lean.js b/docs/assets/zh-CN_element_html.md._O0oTlOn.lean.js new file mode 100644 index 0000000..db93982 --- /dev/null +++ b/docs/assets/zh-CN_element_html.md._O0oTlOn.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as n,m as l}from"./chunks/framework.PNNbM9mo.js";const y=JSON.parse('{"title":"HTML元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/html.md","filePath":"zh-CN/element/html.md"}'),t={name:"zh-CN/element/html.md"},h=n("",16),p=l("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-html&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),e=[h,p];function k(d,r,F,E,g,c){return i(),a("div",null,e)}const C=s(t,[["render",k]]);export{y as __pageData,C as default}; diff --git a/docs/assets/zh-CN_element_image.md.a7TjGV-j.js b/docs/assets/zh-CN_element_image.md.a7TjGV-j.js new file mode 100644 index 0000000..f463a6c --- /dev/null +++ b/docs/assets/zh-CN_element_image.md.a7TjGV-j.js @@ -0,0 +1,24 @@ +import{_ as s,o as i,c as a,a2 as n,m as t}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"图片元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/image.md","filePath":"zh-CN/element/image.md"}'),e={name:"zh-CN/element/image.md"},h=n(`

图片元素

Image

用来渲染图片内容,具体格式如下所示:

ts
type Image = {
+  type: 'image';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    src: string;
+  };
+};

Image.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

Image.detail 数据格式

Image元素的detail属性

ts
type ImageDetail = {
+  src: string;
+};

Image.detail 数据属性内容

属性说明类型默认值是否必填备注
src图片数据源string-true可以是图片链接或图片Base64

完整数据示例

js
const elementImage = {
+  name: 'image',
+  x: 160,
+  y: 100,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'image',
+  detail: {
+    src: './image/github.png'
+  }
+};

效果预览

Demo完整预览 Playground >>

`,15),l=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-image&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,l];function k(d,r,E,g,o,c){return i(),a("div",null,p)}const m=s(e,[["render",k]]);export{F as __pageData,m as default}; diff --git a/docs/assets/zh-CN_element_image.md.a7TjGV-j.lean.js b/docs/assets/zh-CN_element_image.md.a7TjGV-j.lean.js new file mode 100644 index 0000000..755aaff --- /dev/null +++ b/docs/assets/zh-CN_element_image.md.a7TjGV-j.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as n,m as t}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"图片元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/image.md","filePath":"zh-CN/element/image.md"}'),e={name:"zh-CN/element/image.md"},h=n("",15),l=t("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-image&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[h,l];function k(d,r,E,g,o,c){return i(),a("div",null,p)}const m=s(e,[["render",k]]);export{F as __pageData,m as default}; diff --git a/docs/assets/zh-CN_element_info.md.AultvWeM.js b/docs/assets/zh-CN_element_info.md.AultvWeM.js new file mode 100644 index 0000000..39ce461 --- /dev/null +++ b/docs/assets/zh-CN_element_info.md.AultvWeM.js @@ -0,0 +1,52 @@ +import{_ as s,o as i,c as a,a2 as t,m as n}from"./chunks/framework.PNNbM9mo.js";const c=JSON.parse('{"title":"画图元素介绍","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/info.md","filePath":"zh-CN/element/info.md"}'),h={name:"zh-CN/element/info.md"},l=t(`

画图元素介绍

什么是 iDraw.js 画图元素?

iDraw.js 画图的内容都是基于“元素”构成的,画图的过程基本是围绕处理元素的位置、样式、内容等属性来实现画图的功能。

目前支持的有八种元素:

  1. Text 文本
  2. Rect 矩形
  3. Circle 圆形
  4. Image 图片
  5. SVG
  6. HTML
  7. Path 路径
  8. Group 组合

画图元素的信息

数据基本格式

tsx
type Element = {
+  type: 'text' | 'rect' | 'circle' | 'image' | 'svg' | 'html' | 'path' | 'group';
+  uuid: string;
+  name?: string;
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle?: number;
+  detail: any; // 不同元素的描述内容不一样
+  // operations 为元素操控配置
+  operations?: {
+    lock?: boolean;
+    invisible?: boolean;
+    limitRatio?: boolean;
+  };
+  extension?: { [key: string]: any } | any;
+};

元素的基本属性

属性说明类型默认值备注
type元素类型text| rect|circle|image|svg| html--
uuid唯一 IDstring-iDraw.js 内部会自动添加
name名称string--
xX 轴偏移量number--
yY 轴偏移量number--
w元素宽度number--
h元素高度number--
angle元素旋转角度number0[0, 360]
detail元素描述内容object (详情请查看各元素描述内容)--
operations.lock元素是否锁住booleanfalse元素锁住后就不能进行视图操作
operations.invisible元素是否不可见booleanfalse元素不可见就不会渲染
operations.limitRatio元素是否限制宽高比例boolean-在元素缩放时候,按照其宽高比例进行缩放

画图元素的使用

js
import { iDraw } from 'idraw';
+
+import { iDraw } from 'idraw';
+const data = {
+  elements: [
+    {
+      type: 'text',
+      name: 'rect-001',
+      x: 50,
+      y: 50,
+      w: 200,
+      h: 200,
+      angle: 0,
+      detail: {
+        text: 'Hello World',
+        color: '#3f51b5',
+        fontSize: 60,
+        textAlign: 'center',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const idraw = new iDraw(app, {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+});
+
+// 设置元素数据,渲染画图内容
+idraw.setData(data);

示例预览

Demo 完整预览 Playground >>

`,14),k=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-rect&header=false&sider=false&default-editor-split=50",frameborder:"no",border:"0"},null,-1),p=[l,k];function e(d,r,E,g,y,F){return i(),a("div",null,p)}const C=s(h,[["render",e]]);export{c as __pageData,C as default}; diff --git a/docs/assets/zh-CN_element_info.md.AultvWeM.lean.js b/docs/assets/zh-CN_element_info.md.AultvWeM.lean.js new file mode 100644 index 0000000..ad108ec --- /dev/null +++ b/docs/assets/zh-CN_element_info.md.AultvWeM.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as t,m as n}from"./chunks/framework.PNNbM9mo.js";const c=JSON.parse('{"title":"画图元素介绍","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/info.md","filePath":"zh-CN/element/info.md"}'),h={name:"zh-CN/element/info.md"},l=t("",14),k=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-rect&header=false&sider=false&default-editor-split=50",frameborder:"no",border:"0"},null,-1),p=[l,k];function e(d,r,E,g,y,F){return i(),a("div",null,p)}const C=s(h,[["render",e]]);export{c as __pageData,C as default}; diff --git a/docs/assets/zh-CN_element_path.md.J3z6LwN_.js b/docs/assets/zh-CN_element_path.md.J3z6LwN_.js new file mode 100644 index 0000000..78b22a4 --- /dev/null +++ b/docs/assets/zh-CN_element_path.md.J3z6LwN_.js @@ -0,0 +1,60 @@ +import{_ as s,o as i,c as a,a2 as h,m as n}from"./chunks/framework.PNNbM9mo.js";const c=JSON.parse('{"title":"路径元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/path.md","filePath":"zh-CN/element/path.md"}'),k={name:"zh-CN/element/path.md"},t=h(`

路径元素

Path

用来渲染路径内容,具体格式如下所示:

ts
type Path = {
+  type: 'path';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    commands: Array<{
+      type: 'M' | 'm' | 'L' | 'l' | 'H' | 'h' | 'V' | 'v' | 'C' | 'c' | 'S' | 's' | 'Q' | 'q' | 'T' | 't' | 'A' | 'a' | 'Z' | 'z';
+      params: number[];
+    }>;
+    originX: number;
+    originY: number;
+    originW: number;
+    originH: number;
+    fill?: string;
+    stroke?: string;
+    strokeWidth?: number;
+    strokeLineCap?: 'butt' | 'round' | 'square';
+  };
+};

Path.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

Path.detail 数据格式

Rect 元素的detail属性

ts
type PathDetail = {
+  commands: Array<{
+    type: 'M' | 'm' | 'L' | 'l' | 'H' | 'h' | 'V' | 'v' | 'C' | 'c' | 'S' | 's' | 'Q' | 'q' | 'T' | 't' | 'A' | 'a' | 'Z' | 'z';
+    params: number[];
+  }>;
+  originX: number;
+  originY: number;
+  originW: number;
+  originH: number;
+  fill?: string;
+  stroke?: string;
+  strokeWidth?: number;
+  strokeLineCap?: 'butt' | 'round' | 'square';
+};

Path.detail 数据属性内容

属性说明类型默认值是否必填备注
fill填充颜色string-true例如 #000000
stroke路径颜色string-true例如 #000000
strokeWidth路径宽度number0false-
strokeLineCap路径转折类型'butt' | 'round' | 'square'-true-
originX路径原始X位置number0false-
originY路径原始Y位置number0false-
originW路径原始宽度number0false-
originH路径原始高度number0false-

完整数据示例

js
const elementPath = {
+  uuid: '41d437b8-afbd-2d3d-14bc-912e26d3491f',
+  x: 100,
+  y: 100,
+  w: 80,
+  h: 80,
+  angle: 0,
+  type: 'path',
+  detail: {
+    commands: [
+      { type: 'M', params: [10, 30] },
+      { type: 'A', params: [20, 20, 0, 0, 1, 50, 30] },
+      { type: 'A', params: [20, 20, 0, 0, 1, 90, 30] },
+      { type: 'Q', params: [90, 60, 50, 90] },
+      { type: 'Q', params: [10, 60, 10, 30] },
+      { type: 'z', params: [] }
+    ],
+    fill: '#FF00006F',
+    stroke: '#000000',
+    strokeWidth: 1,
+    originX: 10,
+    originY: 10,
+    originH: 80,
+    originW: 80
+  }
+};

效果预览

Demo完整预览 Playground >>

`,15),l=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-path&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[t,l];function e(d,r,E,F,g,y){return i(),a("div",null,p)}const o=s(k,[["render",e]]);export{c as __pageData,o as default}; diff --git a/docs/assets/zh-CN_element_path.md.J3z6LwN_.lean.js b/docs/assets/zh-CN_element_path.md.J3z6LwN_.lean.js new file mode 100644 index 0000000..d2cdb96 --- /dev/null +++ b/docs/assets/zh-CN_element_path.md.J3z6LwN_.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as h,m as n}from"./chunks/framework.PNNbM9mo.js";const c=JSON.parse('{"title":"路径元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/path.md","filePath":"zh-CN/element/path.md"}'),k={name:"zh-CN/element/path.md"},t=h("",15),l=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-path&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[t,l];function e(d,r,E,F,g,y){return i(),a("div",null,p)}const o=s(k,[["render",e]]);export{c as __pageData,o as default}; diff --git a/docs/assets/zh-CN_element_rect.md.IuhJ9ne4.js b/docs/assets/zh-CN_element_rect.md.IuhJ9ne4.js new file mode 100644 index 0000000..10a2bbe --- /dev/null +++ b/docs/assets/zh-CN_element_rect.md.IuhJ9ne4.js @@ -0,0 +1,33 @@ +import{_ as s,o as i,c as a,a2 as t,m as n}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"矩形元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/rect.md","filePath":"zh-CN/element/rect.md"}'),h={name:"zh-CN/element/rect.md"},e=t(`

矩形元素

Rectangle

用来渲染矩形内容,具体格式如下所示:

ts
type Rect = {
+  type: 'rect';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    background: string;
+    borderRadius?: string;
+    borderWidth?: number;
+    borderColor?: number;
+  };
+};

Rect.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

Rect.detail 数据格式

Rect 元素的detail属性

ts
type RectDetail = {
+  background?: string;
+  background?: string;
+  borderWidth?: number;
+  borderColor?: string;
+};

Rect.detail 数据属性内容

属性说明类型默认值是否必填备注
background矩形颜色string-true例如 #000000
borderRadius边框角圆形半径number0false-
borderWidth边框宽度number0false-
borderColor边框颜色string-false例如 #000000

完整数据示例

js
const elementRect = {
+  name: 'rect',
+  x: 160,
+  y: 120,
+  w: 200,
+  h: 100,
+  angle: 30,
+  type: 'rect',
+  detail: {
+    background: '#d5f5f9',
+    borderRadius: 10,
+    borderWidth: 2,
+    borderColor: '#3f51b5'
+  }
+};

效果预览

Demo完整预览 Playground >>

`,15),l=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-rect&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),k=[e,l];function p(d,r,E,c,g,o){return i(),a("div",null,k)}const C=s(h,[["render",p]]);export{F as __pageData,C as default}; diff --git a/docs/assets/zh-CN_element_rect.md.IuhJ9ne4.lean.js b/docs/assets/zh-CN_element_rect.md.IuhJ9ne4.lean.js new file mode 100644 index 0000000..192d8ea --- /dev/null +++ b/docs/assets/zh-CN_element_rect.md.IuhJ9ne4.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as t,m as n}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"矩形元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/rect.md","filePath":"zh-CN/element/rect.md"}'),h={name:"zh-CN/element/rect.md"},e=t("",15),l=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-rect&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),k=[e,l];function p(d,r,E,c,g,o){return i(),a("div",null,k)}const C=s(h,[["render",p]]);export{F as __pageData,C as default}; diff --git a/docs/assets/zh-CN_element_svg.md.ga__SCBc.js b/docs/assets/zh-CN_element_svg.md.ga__SCBc.js new file mode 100644 index 0000000..634d464 --- /dev/null +++ b/docs/assets/zh-CN_element_svg.md.ga__SCBc.js @@ -0,0 +1,24 @@ +import{_ as s,o as i,c as a,a2 as t,m as n}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"SVG元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/svg.md","filePath":"zh-CN/element/svg.md"}'),h={name:"zh-CN/element/svg.md"},l=t(`

SVG元素

SVG

用来渲染SVG代码片,具体格式如下所示:

ts
type SVG = {
+  type: 'svg';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    svg: string;
+  };
+};

SVG.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

SVG.detail 数据格式

SVG 元素的detail属性

ts
type SVGDetail = {
+  svg: string;
+};

SVG.detail 数据属性内容

属性说明类型默认值是否必填备注
svgSVG代码片段string-true-

完整数据示例

js
const elementSVG = {
+  name: 'svg',
+  x: 160,
+  y: 100,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'svg',
+  detail: {
+    svg: \`<svg  viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"  width="400" height="400"><path d="M512 1013.76c-277.11488 0-501.76-224.64512-501.76-501.76S234.88512 10.24 512 10.24s501.76 224.64512 501.76 501.76-224.64512 501.76-501.76 501.76z m0-51.02592c248.9344 0 450.73408-201.79968 450.73408-450.73408 0-248.9344-201.79968-450.73408-450.73408-450.73408-248.9344 0-450.73408 201.79968-450.73408 450.73408 0 248.9344 201.79968 450.73408 450.73408 450.73408zM456.9856 637.9008l295.45984-339.94752a26.4192 26.4192 0 0 1 37.59616-2.31936 28.32896 28.32896 0 0 1 3.10784 38.8608l-307.01568 380.38016a30.72 30.72 0 0 1-42.90048 4.84864L235.44832 556.2368a32.128 32.128 0 0 1-5.74976-44.6464 32.1536 32.1536 0 0 1 44.544-6.58944l182.74304 132.90496z" fill="#1890ff"></path></svg>\`
+  }
+};

效果预览

Demo完整预览 Playground >>

`,15),e=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-svg&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,e];function k(d,r,E,g,o,c){return i(),a("div",null,p)}const u=s(h,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_element_svg.md.ga__SCBc.lean.js b/docs/assets/zh-CN_element_svg.md.ga__SCBc.lean.js new file mode 100644 index 0000000..1273ffa --- /dev/null +++ b/docs/assets/zh-CN_element_svg.md.ga__SCBc.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as t,m as n}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"SVG元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/svg.md","filePath":"zh-CN/element/svg.md"}'),h={name:"zh-CN/element/svg.md"},l=t("",15),e=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-svg&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),p=[l,e];function k(d,r,E,g,o,c){return i(),a("div",null,p)}const u=s(h,[["render",k]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_element_text.md.Mlt5U0l-.js b/docs/assets/zh-CN_element_text.md.Mlt5U0l-.js new file mode 100644 index 0000000..17a649b --- /dev/null +++ b/docs/assets/zh-CN_element_text.md.Mlt5U0l-.js @@ -0,0 +1,42 @@ +import{_ as s,o as i,c as a,a2 as t,m as n}from"./chunks/framework.PNNbM9mo.js";const c=JSON.parse('{"title":"文本元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/text.md","filePath":"zh-CN/element/text.md"}'),h={name:"zh-CN/element/text.md"},l=t(`

文本元素

Text

用来渲染文字内容,具体格式如下所示:

ts
type Text = {
+  type: 'text';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    text: string;
+    color?: string;
+    fontSize?: string;
+    fontFamily?: string;
+    textAlign?: 'left' | 'center' | 'right';
+  };
+};

Text.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

Text.detail 数据格式

Text元素的detail属性

ts
type TextDetail = {
+  text: string;
+  color?: string;
+  fontSize?: number;
+  lineHeight?: number;
+  fontWeight?: 'bold' | string | number;
+  fontFamily?: string;
+  textAlign?: 'center' | 'left' | 'right';
+  verticalAlign?: 'middle' | 'top' | 'bottom';
+};

Text.detail 数据属性内容

属性说明类型默认值是否必填备注
text文本内容string-true-
color字体颜色string-true例如 #000000
fontSize字体尺寸number12false-
lineHeight文本行高number-false-
fontWeight字体粗细number-false-
fontFamily字体类型string-false-
textAlign水平对齐'left' | 'center' | 'right''left'false-
verticalAlign垂直对齐'top' | 'middle' | 'bottom''top'false-

完整数据示例

js
const elementText = {
+  name: 'text',
+  x: 160,
+  y: 80,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'text',
+  detail: {
+    text: 'Hello World',
+    color: '#3f51b5',
+    fontSize: 60,
+    textAlign: 'center',
+    background: '#3f51b51f',
+    borderRadius: 10,
+    borderWidth: 2,
+    borderColor: '#3f51b5'
+  }
+};

效果预览

Demo完整预览 Playground >>

`,15),e=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-text&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),k=[l,e];function p(d,r,E,g,F,y){return i(),a("div",null,k)}const C=s(h,[["render",p]]);export{c as __pageData,C as default}; diff --git a/docs/assets/zh-CN_element_text.md.Mlt5U0l-.lean.js b/docs/assets/zh-CN_element_text.md.Mlt5U0l-.lean.js new file mode 100644 index 0000000..c59649c --- /dev/null +++ b/docs/assets/zh-CN_element_text.md.Mlt5U0l-.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as t,m as n}from"./chunks/framework.PNNbM9mo.js";const c=JSON.parse('{"title":"文本元素","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/element/text.md","filePath":"zh-CN/element/text.md"}'),h={name:"zh-CN/element/text.md"},l=t("",15),e=n("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-text&header=false&sider=false&default-editor-split=50",width:"1000",height:"540",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),k=[l,e];function p(d,r,E,g,F,y){return i(),a("div",null,k)}const C=s(h,[["render",p]]);export{c as __pageData,C as default}; diff --git a/docs/assets/zh-CN_guide_class-idraw.md.1BC1Vc1m.js b/docs/assets/zh-CN_guide_class-idraw.md.1BC1Vc1m.js new file mode 100644 index 0000000..a6e19c9 --- /dev/null +++ b/docs/assets/zh-CN_guide_class-idraw.md.1BC1Vc1m.js @@ -0,0 +1,13 @@ +import{_ as s,o as i,c as t,a2 as a,m as e}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"iDraw 类","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/guide/class-idraw.md","filePath":"zh-CN/guide/class-idraw.md"}'),h={name:"zh-CN/guide/class-idraw.md"},n=a(`

iDraw 类

参数

js
import { iDraw } from 'idraw';
+const dom = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+
+const idraw = new iDraw(dom, options);

在使用 new iDraw(dom, options) 类时,会接收两个参数。参数信息有下:

参数说明类型默认值是否必填备注
dom渲染DOM节点HTMLDivElement-true-
options渲染内容选项Object-true-

选项 Options

ts
type Options = {
+  width: number;
+  height: number;
+  devicePixelRatio: number;
+};

Options 属性

属性说明类型默认值是否必填备注
width画板宽度number-true-
height画板高度number-true-
devicePixelRatio设备像素比例number1false-

Options 效果预览

Demo完整预览 Playground >>

`,11),d=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=basic-options&header=false&sider=false&default-editor-split=50",width:"1000",height:"440",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),l=[n,d];function p(r,k,o,c,E,g){return i(),t("div",null,l)}const u=s(h,[["render",p]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_guide_class-idraw.md.1BC1Vc1m.lean.js b/docs/assets/zh-CN_guide_class-idraw.md.1BC1Vc1m.lean.js new file mode 100644 index 0000000..fa1d0b3 --- /dev/null +++ b/docs/assets/zh-CN_guide_class-idraw.md.1BC1Vc1m.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as t,a2 as a,m as e}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"iDraw 类","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/guide/class-idraw.md","filePath":"zh-CN/guide/class-idraw.md"}'),h={name:"zh-CN/guide/class-idraw.md"},n=a("",11),d=e("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=basic-options&header=false&sider=false&default-editor-split=50",width:"1000",height:"440",frameborder:"no",border:"0",style:{border:"1px solid #cecece",margin:"0px auto"}},null,-1),l=[n,d];function p(r,k,o,c,E,g){return i(),t("div",null,l)}const u=s(h,[["render",p]]);export{F as __pageData,u as default}; diff --git a/docs/assets/zh-CN_guide_installation.md.Z0pJQFTS.js b/docs/assets/zh-CN_guide_installation.md.Z0pJQFTS.js new file mode 100644 index 0000000..296e06c --- /dev/null +++ b/docs/assets/zh-CN_guide_installation.md.Z0pJQFTS.js @@ -0,0 +1,12 @@ +import{_ as s,o as i,c as a,a2 as t}from"./chunks/framework.PNNbM9mo.js";const g=JSON.parse('{"title":"安装","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/guide/installation.md","filePath":"zh-CN/guide/installation.md"}'),n={name:"zh-CN/guide/installation.md"},h=t(`

安装

最新版本

iDraw.js

安装方式

将 iDraw.js 添加到项目中有三种方式:

  1. 基于 NPM 安装
  2. 在页面上以 CDN 形式引入。
  3. 下载 JavaScript 文件,并且自托管JavaScript文件

NPM

在开发大型项目应用时候,推荐使用 NPM 的安装方式,可以更好的基于 Webpack 、 Rollup 和 Vite 等构建工具结合使用。

sh
npm install idraw

CDN

在小型项目应用场景或者学习场景时候,可以使用 CDN的方式引用最新的版本的 JavaScript 文件:

html
<script src="https://unpkg.com/idraw"></script>
html
<!-- 全局变量使用 -->
+<script>
+  (function () {
+    const { iDraw } = window.iDraw;
+    const app = document.querySelector('#app');
+    const idraw = new iDraw(app, {
+      width: 600,
+      height: 400,
+      devicePixelRatio: 2
+    });
+  })();
+</script>

WARNING

不建议用 unpkg.com 站点的CDN资源的放在生产环境

自托管JavaScript文件

如果不想使用构建工具,同时无法直接使用 CDN方式 调用,那么可以将相关的 .js 文件下载到项目本地或者服务器上托管。最后通过 <script> 方式引用,使用方法跟 CDN 的方式类似。

具体的 JavaScript文件 可以从 unpkg 这里下载最新的 iDraw.js 文件。

`,17),l=[h];function p(e,k,r,d,c,E){return i(),a("div",null,l)}const y=s(n,[["render",p]]);export{g as __pageData,y as default}; diff --git a/docs/assets/zh-CN_guide_installation.md.Z0pJQFTS.lean.js b/docs/assets/zh-CN_guide_installation.md.Z0pJQFTS.lean.js new file mode 100644 index 0000000..702d219 --- /dev/null +++ b/docs/assets/zh-CN_guide_installation.md.Z0pJQFTS.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as t}from"./chunks/framework.PNNbM9mo.js";const g=JSON.parse('{"title":"安装","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/guide/installation.md","filePath":"zh-CN/guide/installation.md"}'),n={name:"zh-CN/guide/installation.md"},h=t("",17),l=[h];function p(e,k,r,d,c,E){return i(),a("div",null,l)}const y=s(n,[["render",p]]);export{g as __pageData,y as default}; diff --git a/docs/assets/zh-CN_guide_introduction.md.L_K3kExR.js b/docs/assets/zh-CN_guide_introduction.md.L_K3kExR.js new file mode 100644 index 0000000..562988a --- /dev/null +++ b/docs/assets/zh-CN_guide_introduction.md.L_K3kExR.js @@ -0,0 +1,30 @@ +import{_ as s,o as i,c as a,a2 as n,m as h}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"介绍","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/guide/introduction.md","filePath":"zh-CN/guide/introduction.md"}'),l={name:"zh-CN/guide/introduction.md"},t=n(`

介绍

iDraw.js 是什么

iDraw.js 是基于浏览器中 Canvas API 的绘图能力实现的一套画图框架。

可以直接由数据驱动去渲染图画的渲染,同时能可视化操控 图画元素 的位置、形状和布局等信息。

iDraw.js 目前基于 MIT 开源协议托管在GitHubNPM,所有使用者就都可以免费地使用在自己的项目中。

起步使用

sh
npm install idraw
js
import { iDraw } from 'idraw';
+const data = {
+  elements: [
+    {
+      name: 'rect-001',
+      x: 160,
+      y: 80,
+      w: 200,
+      h: 200,
+      type: 'text',
+      detail: {
+        text: 'Hello World',
+        color: '#3f51b5',
+        fontSize: 60,
+        textAlign: 'center',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const idraw = new iDraw(app, {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+});
+idraw.setData(data);
`,8),e=h("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-text&header=false&sider=false&default-editor-split=50",width:"1000",height:"450",frameborder:"no",border:"0",style:{border:"1px solid #cecece"}},null,-1),p=[t,e];function k(r,E,d,o,g,c){return i(),a("div",null,p)}const C=s(l,[["render",k]]);export{F as __pageData,C as default}; diff --git a/docs/assets/zh-CN_guide_introduction.md.L_K3kExR.lean.js b/docs/assets/zh-CN_guide_introduction.md.L_K3kExR.lean.js new file mode 100644 index 0000000..adf7782 --- /dev/null +++ b/docs/assets/zh-CN_guide_introduction.md.L_K3kExR.lean.js @@ -0,0 +1 @@ +import{_ as s,o as i,c as a,a2 as n,m as h}from"./chunks/framework.PNNbM9mo.js";const F=JSON.parse('{"title":"介绍","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/guide/introduction.md","filePath":"zh-CN/guide/introduction.md"}'),l={name:"zh-CN/guide/introduction.md"},t=n("",8),e=h("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-text&header=false&sider=false&default-editor-split=50",width:"1000",height:"450",frameborder:"no",border:"0",style:{border:"1px solid #cecece"}},null,-1),p=[t,e];function k(r,E,d,o,g,c){return i(),a("div",null,p)}const C=s(l,[["render",k]]);export{F as __pageData,C as default}; diff --git a/docs/assets/zh-CN_guide_quickstart.md.JlXf8dNq.js b/docs/assets/zh-CN_guide_quickstart.md.JlXf8dNq.js new file mode 100644 index 0000000..49c79ff --- /dev/null +++ b/docs/assets/zh-CN_guide_quickstart.md.JlXf8dNq.js @@ -0,0 +1,30 @@ +import{_ as a,o as n,c as h,m as s,a as i,a2 as l}from"./chunks/framework.PNNbM9mo.js";const _=JSON.parse('{"title":"快速上手","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/guide/quickstart.md","filePath":"zh-CN/guide/quickstart.md"}'),t={name:"zh-CN/guide/quickstart.md"},p=s("h1",{id:"快速上手",tabindex:"-1"},[i("快速上手 "),s("a",{class:"header-anchor",href:"#快速上手","aria-label":'Permalink to "快速上手"'},"​")],-1),k=s("h2",{id:"第一个例子",tabindex:"-1"},[i("第一个例子 "),s("a",{class:"header-anchor",href:"#第一个例子","aria-label":'Permalink to "第一个例子"'},"​")],-1),e=s("p",null,"这是一个最简单的 iDraw.js 例子,绘制一个旋转的矩形。",-1),E=s("div",null,[s("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-rect&header=false&sider=false&default-editor-split=50",width:"800",height:"520",frameborder:"no",border:"0",style:{border:"1px solid #cecece"}})],-1),r=l(`

安装模块

sh
npm install idraw

渲染DOM的位置

html
<div id="app"></div>

使用 iDraw.js

js
import { iDraw } from 'idraw';
+const data = {
+  elements: [
+    {
+      name: 'rect-001',
+      x: 160,
+      y: 120,
+      w: 200,
+      h: 100,
+      angle: 30,
+      type: 'rect',
+      detail: {
+        background: '#d5f5f9',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const idraw = new iDraw(app, {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+});
+
+// 设置数据
+idraw.setData(data);

至此,小伙伴们就可以愉快的开启 iDraw.js 的画图之旅啦!O(∩_∩)O~

`,7),d=[p,k,e,E,r];function g(c,o,y,F,C,u){return n(),h("div",null,d)}const b=a(t,[["render",g]]);export{_ as __pageData,b as default}; diff --git a/docs/assets/zh-CN_guide_quickstart.md.JlXf8dNq.lean.js b/docs/assets/zh-CN_guide_quickstart.md.JlXf8dNq.lean.js new file mode 100644 index 0000000..30fec7e --- /dev/null +++ b/docs/assets/zh-CN_guide_quickstart.md.JlXf8dNq.lean.js @@ -0,0 +1 @@ +import{_ as a,o as n,c as h,m as s,a as i,a2 as l}from"./chunks/framework.PNNbM9mo.js";const _=JSON.parse('{"title":"快速上手","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/guide/quickstart.md","filePath":"zh-CN/guide/quickstart.md"}'),t={name:"zh-CN/guide/quickstart.md"},p=s("h1",{id:"快速上手",tabindex:"-1"},[i("快速上手 "),s("a",{class:"header-anchor",href:"#快速上手","aria-label":'Permalink to "快速上手"'},"​")],-1),k=s("h2",{id:"第一个例子",tabindex:"-1"},[i("第一个例子 "),s("a",{class:"header-anchor",href:"#第一个例子","aria-label":'Permalink to "第一个例子"'},"​")],-1),e=s("p",null,"这是一个最简单的 iDraw.js 例子,绘制一个旋转的矩形。",-1),E=s("div",null,[s("iframe",{class:"idraw-playground-preview",src:"https://idrawjs.com/playground/?demo=elem-rect&header=false&sider=false&default-editor-split=50",width:"800",height:"520",frameborder:"no",border:"0",style:{border:"1px solid #cecece"}})],-1),r=l("",7),d=[p,k,e,E,r];function g(c,o,y,F,C,u){return n(),h("div",null,d)}const b=a(t,[["render",g]]);export{_ as __pageData,b as default}; diff --git a/docs/assets/zh-CN_index.md.wdqaL4HK.js b/docs/assets/zh-CN_index.md.wdqaL4HK.js new file mode 100644 index 0000000..cee4bc0 --- /dev/null +++ b/docs/assets/zh-CN_index.md.wdqaL4HK.js @@ -0,0 +1 @@ +import{_ as t,o as e,c as a}from"./chunks/framework.PNNbM9mo.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"iDraw.js","text":"让Web绘图更加简单.","tagline":"一个面向Web绘图的JavaScript框架","actions":[{"theme":"brand","text":"快速开始","link":"/zh-CN/guide/quickstart"},{"theme":"alt","text":"演示","link":"https://idrawjs.com/playground/"},{"theme":"brand","text":"产品 iDraw Studio","link":"https://idrawjs.com/studio/"}],"image":"../assets/idraw.png"},"features":[{"title":"高兼容性","details":"目前基于Canvas 2D API实现,能适应绝大部分主流浏览器。"},{"title":"用法简单","details":"没有复杂的使用方式,只有简单的几个API来操作Web绘图。"},{"title":"数据驱动绘制","details":"依赖数据来驱动图画的绘制"}]},"headers":[],"relativePath":"zh-CN/index.md","filePath":"zh-CN/index.md"}'),i={name:"zh-CN/index.md"};function s(n,r,d,o,c,l){return e(),a("div")}const h=t(i,[["render",s]]);export{p as __pageData,h as default}; diff --git a/docs/assets/zh-CN_index.md.wdqaL4HK.lean.js b/docs/assets/zh-CN_index.md.wdqaL4HK.lean.js new file mode 100644 index 0000000..cee4bc0 --- /dev/null +++ b/docs/assets/zh-CN_index.md.wdqaL4HK.lean.js @@ -0,0 +1 @@ +import{_ as t,o as e,c as a}from"./chunks/framework.PNNbM9mo.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"iDraw.js","text":"让Web绘图更加简单.","tagline":"一个面向Web绘图的JavaScript框架","actions":[{"theme":"brand","text":"快速开始","link":"/zh-CN/guide/quickstart"},{"theme":"alt","text":"演示","link":"https://idrawjs.com/playground/"},{"theme":"brand","text":"产品 iDraw Studio","link":"https://idrawjs.com/studio/"}],"image":"../assets/idraw.png"},"features":[{"title":"高兼容性","details":"目前基于Canvas 2D API实现,能适应绝大部分主流浏览器。"},{"title":"用法简单","details":"没有复杂的使用方式,只有简单的几个API来操作Web绘图。"},{"title":"数据驱动绘制","details":"依赖数据来驱动图画的绘制"}]},"headers":[],"relativePath":"zh-CN/index.md","filePath":"zh-CN/index.md"}'),i={name:"zh-CN/index.md"};function s(n,r,d,o,c,l){return e(),a("div")}const h=t(i,[["render",s]]);export{p as __pageData,h as default}; diff --git a/docs/assets/zh-CN_sponsor.md.w_7AgKx0.js b/docs/assets/zh-CN_sponsor.md.w_7AgKx0.js new file mode 100644 index 0000000..b72e5b9 --- /dev/null +++ b/docs/assets/zh-CN_sponsor.md.w_7AgKx0.js @@ -0,0 +1 @@ +import{_ as e,o,c as s,a2 as a}from"./chunks/framework.PNNbM9mo.js";const f=JSON.parse('{"title":"Become an iDraw.js Sponsor","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/sponsor.md","filePath":"zh-CN/sponsor.md"}'),r={name:"zh-CN/sponsor.md"},n=a('

Become an iDraw.js Sponsor

iDraw.js is an MIT licensed open source project and completely free to use. The tremendous amount of effort needed to maintain this framework and develop new features for the project is only made sustainable thanks to the generous financial backing of our sponsors.

How to Sponsor

Sponsorships can be done via OpenCollective (https://opencollective.com/idrawjs). Both monthly-recurring sponsorships and one-time donations are accepted. Recurring sponsorships are entitled to logo placements as specified in Sponsorship Tiers.

',4),t=[n];function i(c,p,l,d,h,_){return o(),s("div",null,t)}const u=e(r,[["render",i]]);export{f as __pageData,u as default}; diff --git a/docs/assets/zh-CN_sponsor.md.w_7AgKx0.lean.js b/docs/assets/zh-CN_sponsor.md.w_7AgKx0.lean.js new file mode 100644 index 0000000..ea82a46 --- /dev/null +++ b/docs/assets/zh-CN_sponsor.md.w_7AgKx0.lean.js @@ -0,0 +1 @@ +import{_ as e,o,c as s,a2 as a}from"./chunks/framework.PNNbM9mo.js";const f=JSON.parse('{"title":"Become an iDraw.js Sponsor","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/sponsor.md","filePath":"zh-CN/sponsor.md"}'),r={name:"zh-CN/sponsor.md"},n=a("",4),t=[n];function i(c,p,l,d,h,_){return o(),s("div",null,t)}const u=e(r,[["render",i]]);export{f as __pageData,u as default}; diff --git a/docs/data/ios-native-demo.json b/docs/data/ios-native-demo.json deleted file mode 100644 index 41684d1..0000000 --- a/docs/data/ios-native-demo.json +++ /dev/null @@ -1,7655 +0,0 @@ -{ - "elements": [ - { - "uuid": "bc1b920d-ef66-3f2e-73ab-fd9a7f50623a", - "name": "iPhone X screen-2", - "x": 475, - "y": 0, - "w": 375, - "h": 812, - "angle": 0, - "type": "group", - "detail": { - "overflow": "hidden", - "background": "#FFFFFF", - "children": [] - }, - "operations": {} - }, - { - "uuid": "b31c76da-918a-9181-3b3d-bbd73cbeb29a", - "name": "↳ Text", - "x": 491, - "y": 760, - "w": 343, - "h": 40, - "angle": 0, - "type": "text", - "detail": { - "text": "This is a text paragraph for testing purposes.", - "fontFamily": "SF Pro Text", - "fontSize": 17, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 22, - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "3ebd2833-ae19-84bd-97ac-860797e66698", - "name": "Divider", - "x": 491, - "y": 713.5, - "w": 343, - "h": 1, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [0, 0] - }, - { - "type": "L", - "params": [343, 0] - }, - { - "type": "L", - "params": [343, 0.5] - }, - { - "type": "L", - "params": [0, 0.5] - }, - { - "type": "L", - "params": [0, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#000000", - "originX": 0, - "originY": 0, - "originW": 343, - "originH": 1 - }, - "operations": {} - }, - { - "uuid": "f1850737-7e1f-446f-61bf-1d82d48a03ac", - "name": "↳ Label", - "x": 777.0000000000009, - "y": 727, - "w": 42, - "h": 22, - "angle": 0, - "type": "text", - "detail": { - "text": "Label", - "fontFamily": "SF Pro Text", - "fontSize": 17, - "textAlign": "right", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 22, - "color": "#007AFF", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "90083252-9420-769c-3195-a4f51040979d", - "name": "Arrow", - "x": 826.0666666030884, - "y": 731.5, - "w": 8, - "h": 13, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [0, 1.37054443359375] - }, - { - "type": "L", - "params": [1.393087387084961, 0] - }, - { - "type": "L", - "params": [8, 6.5] - }, - { - "type": "L", - "params": [1.393087387084961, 13] - }, - { - "type": "L", - "params": [0, 11.62945556640625] - }, - { - "type": "L", - "params": [5.213825225830078, 6.5] - }, - { - "type": "L", - "params": [0, 1.37054443359375] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#007AFF", - "originX": 0, - "originY": 0, - "originW": 8, - "originH": 13 - }, - "operations": {} - }, - { - "uuid": "934517f7-7ac4-d8ea-b5b7-dc4ba7be7077", - "name": "↳ Headline", - "x": 491, - "y": 722, - "w": 92, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "Headline", - "fontFamily": "SF Pro Display", - "fontSize": 22, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 28, - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "0d84802f-cd95-21bf-7ee1-3d9288faff99", - "name": "↳ Subtitle", - "x": 783, - "y": 672, - "w": 104, - "h": 20, - "angle": 0, - "type": "text", - "detail": { - "text": "Subtitle", - "fontFamily": "SF Pro Text", - "fontSize": 15, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 20, - "color": "#000000", - "opacity": 0.4000000059604645 - }, - "operations": {} - }, - { - "uuid": "f7b2c4e7-f2d7-3967-2a32-2b790851be67", - "name": "Title", - "x": 783, - "y": 652, - "w": 104, - "h": 20, - "angle": 0, - "type": "text", - "detail": { - "text": "Title", - "fontFamily": "SF Pro Text", - "fontSize": 15, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 20, - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "8d17305d-78c5-5270-4a53-0b3573ca5679", - "name": "▪︎ Bitmap", - "x": 783, - "y": 524, - "w": 67, - "h": 122, - "angle": 0, - "type": "rect", - "detail": { - "background": "#E5E5E5", - "borderRadius": 10 - }, - "operations": {} - }, - { - "uuid": "4d590699-9043-d174-f569-39725f7d9e28", - "name": "↳ Subtitle", - "x": 637, - "y": 672, - "w": 104, - "h": 20, - "angle": 0, - "type": "text", - "detail": { - "text": "Subtitle", - "fontFamily": "SF Pro Text", - "fontSize": 15, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 20, - "color": "#000000", - "opacity": 0.4000000059604645 - }, - "operations": {} - }, - { - "uuid": "102a93be-eaa2-f0a9-5568-8b4b5f6de01e", - "name": "Title", - "x": 637, - "y": 652, - "w": 104, - "h": 20, - "angle": 0, - "type": "text", - "detail": { - "text": "Title", - "fontFamily": "SF Pro Text", - "fontSize": 15, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 20, - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "571a0f6d-6911-a0bd-d404-3cf33b10aa60", - "name": "▪︎ Bitmap", - "x": 637, - "y": 524, - "w": 134, - "h": 122, - "angle": 0, - "type": "rect", - "detail": { - "background": "#E5E5E5", - "borderRadius": 10 - }, - "operations": {} - }, - { - "uuid": "0c7a962e-f710-8acc-d8aa-12b7edc1f6b0", - "name": "↳ Subtitle", - "x": 491, - "y": 672, - "w": 104, - "h": 20, - "angle": 0, - "type": "text", - "detail": { - "text": "Subtitle", - "fontFamily": "SF Pro Text", - "fontSize": 15, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 20, - "color": "#000000", - "opacity": 0.4000000059604645 - }, - "operations": {} - }, - { - "uuid": "3759480b-c7bb-c4b1-e466-2794e4293b91", - "name": "Title", - "x": 491, - "y": 652, - "w": 104, - "h": 20, - "angle": 0, - "type": "text", - "detail": { - "text": "Title", - "fontFamily": "SF Pro Text", - "fontSize": 15, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 20, - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "48f73ae5-1ce8-50bb-8402-2550cb67248b", - "name": "▪︎ Bitmap", - "x": 491, - "y": 524, - "w": 134, - "h": 122, - "angle": 0, - "type": "rect", - "detail": { - "background": "#E5E5E5", - "borderRadius": 10 - }, - "operations": {} - }, - { - "uuid": "25aeafee-5a62-cb4b-b541-1324f9a27330", - "name": "↳ Caption", - "x": 491, - "y": 472, - "w": 323, - "h": 40, - "angle": 0, - "type": "text", - "detail": { - "text": "Having a profound and lasting influence on a person's development", - "fontFamily": "SF Pro Text", - "fontSize": 15, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 20, - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "f4a22d9a-d00d-bd1f-168b-c7a40c555516", - "name": "Divider", - "x": 491, - "y": 421.5, - "w": 343, - "h": 1, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [0, 0] - }, - { - "type": "L", - "params": [343, 0] - }, - { - "type": "L", - "params": [343, 0.5] - }, - { - "type": "L", - "params": [0, 0.5] - }, - { - "type": "L", - "params": [0, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#000000", - "originX": 0, - "originY": 0, - "originW": 343, - "originH": 1 - }, - "operations": {} - }, - { - "uuid": "9e78e782-12c5-44bf-d86a-8f88cf2c75fd", - "name": "↳ Label", - "x": 777.0000000000009, - "y": 435, - "w": 42, - "h": 22, - "angle": 0, - "type": "text", - "detail": { - "text": "Label", - "fontFamily": "SF Pro Text", - "fontSize": 17, - "textAlign": "right", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 22, - "color": "#007AFF", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "36814eb7-0b19-29bb-514a-5f44dd76659a", - "name": "Arrow", - "x": 826.0666666030884, - "y": 439.5, - "w": 8, - "h": 13, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [0, 1.37054443359375] - }, - { - "type": "L", - "params": [1.393087387084961, 0] - }, - { - "type": "L", - "params": [8, 6.5] - }, - { - "type": "L", - "params": [1.393087387084961, 13] - }, - { - "type": "L", - "params": [0, 11.62945556640625] - }, - { - "type": "L", - "params": [5.213825225830078, 6.5] - }, - { - "type": "L", - "params": [0, 1.37054443359375] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#007AFF", - "originX": 0, - "originY": 0, - "originW": 8, - "originH": 13 - }, - "operations": {} - }, - { - "uuid": "a2e6678c-ae42-2132-e935-1ac5a224685c", - "name": "↳ Headline", - "x": 491, - "y": 430, - "w": 92, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "Headline", - "fontFamily": "SF Pro Display", - "fontSize": 22, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 28, - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "33c9b3a9-b600-278a-6a3c-648acddcc9cb", - "name": "▪︎ Bitmap", - "x": 491, - "y": 236, - "w": 343, - "h": 164, - "angle": 0, - "type": "rect", - "detail": { - "background": "#E5E5E5", - "borderRadius": 10 - }, - "operations": {} - }, - { - "uuid": "9df896df-92c3-6cfb-0bab-ad294dda5627", - "name": "↳ Subtitle", - "x": 491, - "y": 200, - "w": 329, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "Headline Second Line", - "fontFamily": "SF Pro Display", - "fontSize": 22, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 28, - "color": "#000000", - "opacity": 0.4000000059604645 - }, - "operations": {} - }, - { - "uuid": "91ce0c0f-8bf3-b2dc-87ff-7c44a0077d83", - "name": "↳ Headline", - "x": 491, - "y": 172, - "w": 329, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "Headline First Line", - "fontFamily": "SF Pro Display", - "fontSize": 22, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 28, - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "c47ab56a-bf31-b544-d936-83de97e5e8e2", - "name": "↳ Text", - "x": 491, - "y": 158, - "w": 48, - "h": 13, - "angle": 0, - "type": "text", - "detail": { - "text": "TAGLINE", - "fontFamily": "SF Pro Text", - "fontSize": 11, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 13, - "color": "#007AFF", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "85e6861d-6ca6-dc2c-bd4d-2678b10c4c7f", - "name": "Line", - "x": 595, - "y": 799, - "w": 135, - "h": 5, - "angle": 0, - "type": "rect", - "detail": { - "background": "#000000", - "borderRadius": 100, - "borderDash": [], - "boxSizing": "center-line", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "58176434-5d4a-c4b4-fe0f-984ab768048f", - "name": "Divider", - "x": 475, - "y": 0.5, - "w": 375, - "h": 1, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [0, 0] - }, - { - "type": "L", - "params": [375, 0] - }, - { - "type": "L", - "params": [375, 0.5] - }, - { - "type": "L", - "params": [0, 0.5] - }, - { - "type": "L", - "params": [0, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#000000", - "originX": 0, - "originY": 0, - "originW": 375, - "originH": 1 - }, - "operations": {} - }, - { - "uuid": "06913e39-aef1-25f9-fcb9-9c69825ea9f9", - "name": "Bitmap", - "x": 796, - "y": 91, - "w": 38, - "h": 38, - "angle": 0, - "type": "circle", - "detail": { - "radius": 38, - "background": "#E5E5E5" - }, - "operations": {} - }, - { - "uuid": "823315cc-45ed-c3e7-2737-c467bc763a16", - "name": "↳ Title", - "x": 491, - "y": 89, - "w": 141, - "h": 41, - "angle": 0, - "type": "text", - "detail": { - "text": "Headline", - "fontFamily": "SF Pro Display", - "fontSize": 34, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 41, - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "3f3b0fe0-60eb-bd36-ce28-c90f3b369539", - "name": "Arrow", - "x": 483, - "y": 55.5, - "w": 12, - "h": 20.5, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [9.537135124206543, 20.082666397094727] - }, - { - "type": "L", - "params": [0.2921518385410309, 10.945804595947266] - }, - { - "type": "C", - "params": [-0.09738397598266602, 10.561189651489258, -0.09738397598266602, 9.939809799194336, 0.2921518385410309, 9.554195404052734] - }, - { - "type": "L", - "params": [9.537135124206543, 0.4173326790332794] - }, - { - "type": "C", - "params": [10.099465370178223, -0.13911089301109314, 11.014374732971191, -0.13911089301109314, 11.577703475952148, 0.4173326790332794] - }, - { - "type": "C", - "params": [12.140033721923828, 0.9737762212753296, 12.140033721923828, 1.8768731355667114, 11.577703475952148, 2.433316707611084] - }, - { - "type": "L", - "params": [3.6691277027130127, 10.250499725341797] - }, - { - "type": "L", - "params": [11.577703475952148, 18.065683364868164] - }, - { - "type": "C", - "params": [12.140033721923828, 18.623125076293945, 12.140033721923828, 19.526222229003906, 11.577703475952148, 20.082666397094727] - }, - { - "type": "C", - "params": [11.014374732971191, 20.639110565185547, 10.099465370178223, 20.639110565185547, 9.537135124206543, 20.082666397094727] - } - ], - "fillRule": "evenodd", - "fill": "#007AFF", - "originX": 0, - "originY": 0, - "originW": 12, - "originH": 20.5 - }, - "operations": {} - }, - { - "uuid": "8a4e1d74-ce86-caac-f05b-7ab0cbb7027a", - "name": "↳ Label", - "x": 497.5133333206177, - "y": 55, - "w": 38, - "h": 22, - "angle": 0, - "type": "text", - "detail": { - "text": "Back", - "fontFamily": "SF Pro Text", - "fontSize": 17, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 22, - "color": "#007AFF", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "7f16dfdb-9196-bf5a-0319-2235e6f17fb9", - "name": "Rectangle", - "x": 811, - "y": 16.159997940063477, - "w": 24.5, - "h": 11.5, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [3.5894391536712646, 0] - }, - { - "type": "L", - "params": [18.410560607910156, 0] - }, - { - "type": "C", - "params": [19.658687591552734, 0, 20.111286163330078, 0.12995584309101105, 20.567583084106445, 0.37398576736450195] - }, - { - "type": "C", - "params": [21.023880004882812, 0.618015706539154, 21.38198471069336, 0.9761196374893188, 21.626014709472656, 1.4324159622192383] - }, - { - "type": "C", - "params": [21.870044708251953, 1.8887122869491577, 22, 2.341312885284424, 22, 3.5894391536712646] - }, - { - "type": "L", - "params": [22, 7.910560607910156] - }, - { - "type": "C", - "params": [22, 9.158686637878418, 21.870044708251953, 9.611288070678711, 21.626014709472656, 10.067584037780762] - }, - { - "type": "C", - "params": [21.38198471069336, 10.523880004882812, 21.023880004882812, 10.881983757019043, 20.567583084106445, 11.12601375579834] - }, - { - "type": "C", - "params": [20.111286163330078, 11.370043754577637, 19.658687591552734, 11.5, 18.410560607910156, 11.5] - }, - { - "type": "L", - "params": [3.5894391536712646, 11.5] - }, - { - "type": "C", - "params": [2.341312885284424, 11.5, 1.8887122869491577, 11.370043754577637, 1.4324159622192383, 11.12601375579834] - }, - { - "type": "C", - "params": [0.9761196374893188, 10.881983757019043, 0.618015706539154, 10.523880004882812, 0.37398576736450195, 10.067584037780762] - }, - { - "type": "C", - "params": [0.12995584309101105, 9.611288070678711, 0, 9.158686637878418, 0, 7.910560607910156] - }, - { - "type": "L", - "params": [0, 3.5894391536712646] - }, - { - "type": "C", - "params": [0, 2.341312885284424, 0.12995584309101105, 1.8887122869491577, 0.37398576736450195, 1.4324159622192383] - }, - { - "type": "C", - "params": [0.618015706539154, 0.9761196374893188, 0.9761196374893188, 0.618015706539154, 1.4324159622192383, 0.37398576736450195] - }, - { - "type": "C", - "params": [1.8887122869491577, 0.12995584309101105, 2.341312885284424, 0, 3.5894391536712646, 0] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [3.5894391536712646, 1] - }, - { - "type": "C", - "params": [2.6024606227874756, 1, 2.257904052734375, 1.0665369033813477, 1.9040148258209229, 1.2557989358901978] - }, - { - "type": "C", - "params": [1.621986985206604, 1.4066290855407715, 1.4066290855407715, 1.621986985206604, 1.2557989358901978, 1.9040148258209229] - }, - { - "type": "C", - "params": [1.0665369033813477, 2.257904052734375, 1, 2.6024606227874756, 1, 3.5894391536712646] - }, - { - "type": "L", - "params": [1, 7.910560607910156] - }, - { - "type": "C", - "params": [1, 8.897539138793945, 1.0665369033813477, 9.242095947265625, 1.2557989358901978, 9.595985412597656] - }, - { - "type": "C", - "params": [1.4066290855407715, 9.878013610839844, 1.621986985206604, 10.09337043762207, 1.9040148258209229, 10.244200706481934] - }, - { - "type": "C", - "params": [2.257904052734375, 10.433463096618652, 2.6024606227874756, 10.5, 3.5894391536712646, 10.5] - }, - { - "type": "L", - "params": [18.410560607910156, 10.5] - }, - { - "type": "C", - "params": [19.397539138793945, 10.5, 19.742095947265625, 10.433463096618652, 20.095985412597656, 10.244200706481934] - }, - { - "type": "C", - "params": [20.378013610839844, 10.09337043762207, 20.593372344970703, 9.878013610839844, 20.74420166015625, 9.595985412597656] - }, - { - "type": "C", - "params": [20.93346405029297, 9.242095947265625, 21, 8.897539138793945, 21, 7.910560607910156] - }, - { - "type": "L", - "params": [21, 3.5894391536712646] - }, - { - "type": "C", - "params": [21, 2.6024606227874756, 20.93346405029297, 2.257904052734375, 20.74420166015625, 1.9040148258209229] - }, - { - "type": "C", - "params": [20.593372344970703, 1.621986985206604, 20.378013610839844, 1.4066290855407715, 20.095985412597656, 1.2557989358901978] - }, - { - "type": "C", - "params": [19.742095947265625, 1.0665369033813477, 19.397539138793945, 1, 18.410560607910156, 1] - }, - { - "type": "L", - "params": [3.5894391536712646, 1] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [24.5, 5.69000244140625] - }, - { - "type": "C", - "params": [24.5, 6.92657470703125, 23, 7.69000244140625, 23, 7.69000244140625] - }, - { - "type": "L", - "params": [23, 3.69000244140625] - }, - { - "type": "C", - "params": [23, 3.69000244140625, 24.5, 4.45343017578125, 24.5, 5.69000244140625] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#0000005C", - "originX": 0, - "originY": 0, - "originW": 24.5, - "originH": 11.5 - }, - "operations": {} - }, - { - "uuid": "207adebc-6ebd-9e85-4bc6-7fae0c5bea81", - "name": "Rectangle", - "x": 813, - "y": 18.076664686203003, - "w": 18, - "h": 7.666666507720947, - "angle": 0, - "type": "rect", - "detail": { - "background": "#000000", - "borderRadius": 1.600000023841858, - "borderDash": [], - "boxSizing": "center-line", - "borderColor": "transparent", - "borderWidth": 0, - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "3f3ab8a4-7e56-0b3a-d6a1-a014beb387fd", - "name": "Combined Shape", - "x": 768.5, - "y": 16.600000381469727, - "w": 17.099990844726562, - "h": 10.700004577636719, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [14.123048782348633, 0.9658917188644409] - }, - { - "type": "C", - "params": [14.099990844726562, 1.0818103551864624, 14.099990844726562, 1.2212064266204834, 14.099990844726562, 1.4999985694885254] - }, - { - "type": "L", - "params": [14.099990844726562, 9.199999809265137] - }, - { - "type": "C", - "params": [14.099990844726562, 9.478793144226074, 14.099990844726562, 9.618189811706543, 14.123048782348633, 9.734107971191406] - }, - { - "type": "C", - "params": [14.21773624420166, 10.210136413574219, 14.58985424041748, 10.582254409790039, 15.065882682800293, 10.676941871643066] - }, - { - "type": "C", - "params": [15.181800842285156, 10.699999809265137, 15.321197509765625, 10.699999809265137, 15.599990844726562, 10.699999809265137] - }, - { - "type": "C", - "params": [15.8787841796875, 10.699999809265137, 16.01818084716797, 10.699999809265137, 16.13409996032715, 10.676941871643066] - }, - { - "type": "C", - "params": [16.61012840270996, 10.582254409790039, 16.98224449157715, 10.210136413574219, 17.076932907104492, 9.734107971191406] - }, - { - "type": "C", - "params": [17.099990844726562, 9.618189811706543, 17.099990844726562, 9.478793144226074, 17.099990844726562, 9.200000762939453] - }, - { - "type": "L", - "params": [17.099990844726562, 1.4999998807907104] - }, - { - "type": "C", - "params": [17.099990844726562, 1.2212069034576416, 17.099990844726562, 1.0818103551864624, 17.076932907104492, 0.9658917188644409] - }, - { - "type": "C", - "params": [16.98224449157715, 0.48986291885375977, 16.61012840270996, 0.11774563789367676, 16.13409996032715, 0.02305765077471733] - }, - { - "type": "C", - "params": [16.01818084716797, 0, 15.8787841796875, 0, 15.599990844726562, 0] - }, - { - "type": "C", - "params": [15.321197509765625, 0, 15.181800842285156, 0, 15.065882682800293, 0.02305765077471733] - }, - { - "type": "C", - "params": [14.58985424041748, 0.11774563789367676, 14.21773624420166, 0.48986291885375977, 14.123048782348633, 0.9658917188644409] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [9.399993896484375, 3.9000015258789062] - }, - { - "type": "C", - "params": [9.399993896484375, 3.621208429336548, 9.399993896484375, 3.481812000274658, 9.423051834106445, 3.3658933639526367] - }, - { - "type": "C", - "params": [9.517739295959473, 2.889864444732666, 9.889857292175293, 2.517747163772583, 10.365885734558105, 2.4230592250823975] - }, - { - "type": "C", - "params": [10.481803894042969, 2.4000015258789062, 10.621200561523438, 2.4000015258789062, 10.899993896484375, 2.4000015258789062] - }, - { - "type": "C", - "params": [11.178787231445312, 2.4000015258789062, 11.318183898925781, 2.4000015258789062, 11.434102058410645, 2.4230592250823975] - }, - { - "type": "C", - "params": [11.910130500793457, 2.517747163772583, 12.282248497009277, 2.889864444732666, 12.376935958862305, 3.3658933639526367] - }, - { - "type": "C", - "params": [12.399993896484375, 3.481812000274658, 12.399993896484375, 3.621208429336548, 12.399993896484375, 3.900001287460327] - }, - { - "type": "L", - "params": [12.399993896484375, 9.200004577636719] - }, - { - "type": "C", - "params": [12.399993896484375, 9.478797912597656, 12.399993896484375, 9.618194580078125, 12.376935958862305, 9.734112739562988] - }, - { - "type": "C", - "params": [12.282248497009277, 10.2101411819458, 11.910130500793457, 10.582259178161621, 11.434102058410645, 10.676946640014648] - }, - { - "type": "C", - "params": [11.318183898925781, 10.700004577636719, 11.178787231445312, 10.700004577636719, 10.899993896484375, 10.700004577636719] - }, - { - "type": "C", - "params": [10.621200561523438, 10.700004577636719, 10.481803894042969, 10.700004577636719, 10.365885734558105, 10.676946640014648] - }, - { - "type": "C", - "params": [9.889857292175293, 10.582259178161621, 9.517739295959473, 10.2101411819458, 9.423051834106445, 9.734112739562988] - }, - { - "type": "C", - "params": [9.399993896484375, 9.618194580078125, 9.399993896484375, 9.478797912597656, 9.399993896484375, 9.200004577636719] - }, - { - "type": "L", - "params": [9.399993896484375, 3.9000015258789062] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [4.823045253753662, 5.665896415710449] - }, - { - "type": "C", - "params": [4.79998779296875, 5.781815052032471, 4.79998779296875, 5.9212117195129395, 4.79998779296875, 6.200004577636719] - }, - { - "type": "L", - "params": [4.79998779296875, 9.200004577636719] - }, - { - "type": "C", - "params": [4.79998779296875, 9.478797912597656, 4.79998779296875, 9.618194580078125, 4.823045253753662, 9.734112739562988] - }, - { - "type": "C", - "params": [4.917733192443848, 10.2101411819458, 5.28985071182251, 10.582259178161621, 5.7658796310424805, 10.676946640014648] - }, - { - "type": "C", - "params": [5.881798267364502, 10.700004577636719, 6.021194934844971, 10.700004577636719, 6.29998779296875, 10.700004577636719] - }, - { - "type": "C", - "params": [6.578780651092529, 10.700004577636719, 6.718177318572998, 10.700004577636719, 6.8340959548950195, 10.676946640014648] - }, - { - "type": "C", - "params": [7.31012487411499, 10.582259178161621, 7.682242393493652, 10.2101411819458, 7.776930332183838, 9.734112739562988] - }, - { - "type": "C", - "params": [7.79998779296875, 9.618194580078125, 7.79998779296875, 9.478797912597656, 7.79998779296875, 9.200004577636719] - }, - { - "type": "L", - "params": [7.79998779296875, 6.200004577636719] - }, - { - "type": "C", - "params": [7.79998779296875, 5.921211242675781, 7.79998779296875, 5.781815052032471, 7.776930332183838, 5.665896415710449] - }, - { - "type": "C", - "params": [7.682242393493652, 5.1898674964904785, 7.31012487411499, 4.817749977111816, 6.8340959548950195, 4.723062038421631] - }, - { - "type": "C", - "params": [6.718177318572998, 4.700004577636719, 6.578780651092529, 4.700004577636719, 6.29998779296875, 4.700004577636719] - }, - { - "type": "C", - "params": [6.021194934844971, 4.700004577636719, 5.881798267364502, 4.700004577636719, 5.7658796310424805, 4.723062038421631] - }, - { - "type": "C", - "params": [5.28985071182251, 4.817749977111816, 4.917733192443848, 5.1898674964904785, 4.823045253753662, 5.665896415710449] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [0.02305765077471733, 7.665896415710449] - }, - { - "type": "C", - "params": [0, 7.781815052032471, 0, 7.9212117195129395, 0, 8.200004577636719] - }, - { - "type": "L", - "params": [0, 9.200004577636719] - }, - { - "type": "C", - "params": [0, 9.478797912597656, 0, 9.618194580078125, 0.02305765077471733, 9.734112739562988] - }, - { - "type": "C", - "params": [0.11774563789367676, 10.2101411819458, 0.48986291885375977, 10.582259178161621, 0.9658917188644409, 10.676946640014648] - }, - { - "type": "C", - "params": [1.0818103551864624, 10.700004577636719, 1.2212069034576416, 10.700004577636719, 1.5, 10.700004577636719] - }, - { - "type": "C", - "params": [1.7787930965423584, 10.700004577636719, 1.9181896448135376, 10.700004577636719, 2.0341081619262695, 10.676946640014648] - }, - { - "type": "C", - "params": [2.5101370811462402, 10.582259178161621, 2.8822543621063232, 10.2101411819458, 2.976942300796509, 9.734112739562988] - }, - { - "type": "C", - "params": [3, 9.618194580078125, 3, 9.478797912597656, 3, 9.200004577636719] - }, - { - "type": "L", - "params": [3, 8.200004577636719] - }, - { - "type": "C", - "params": [3, 7.921211242675781, 3, 7.781815052032471, 2.976942300796509, 7.665896415710449] - }, - { - "type": "C", - "params": [2.8822543621063232, 7.1898674964904785, 2.5101370811462402, 6.817749977111816, 2.0341081619262695, 6.723062038421631] - }, - { - "type": "C", - "params": [1.9181896448135376, 6.700004577636719, 1.7787930965423584, 6.700004577636719, 1.5, 6.700004577636719] - }, - { - "type": "C", - "params": [1.2212069034576416, 6.700004577636719, 1.0818103551864624, 6.700004577636719, 0.9658917188644409, 6.723062038421631] - }, - { - "type": "C", - "params": [0.48986291885375977, 6.817749977111816, 0.11774563789367676, 7.1898674964904785, 0.02305765077471733, 7.665896415710449] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#000000", - "originX": 0, - "originY": 0, - "originW": 17.099990844726562, - "originH": 10.700004577636719 - }, - "operations": {} - }, - { - "uuid": "6eac0017-2d2b-458c-2a41-bdfae565f609", - "name": "Wi-Fi", - "x": 790.6000061035156, - "y": 16.399999618530273, - "w": 15.399999618530273, - "h": 11.057209968566895, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [7.7004241943359375, 2.296360492706299] - }, - { - "type": "C", - "params": [9.934831619262695, 2.2964582443237305, 12.08380126953125, 3.1550111770629883, 13.703171730041504, 4.694569110870361] - }, - { - "type": "C", - "params": [13.825112342834473, 4.8134284019470215, 14.020017623901367, 4.811929225921631, 14.14012336730957, 4.691207408905029] - }, - { - "type": "L", - "params": [15.30578327178955, 3.514791965484619] - }, - { - "type": "C", - "params": [15.366597175598145, 3.453561544418335, 15.400498390197754, 3.3706233501434326, 15.399993896484375, 3.2843270301818848] - }, - { - "type": "C", - "params": [15.399489402770996, 3.1980319023132324, 15.36462116241455, 3.115494966506958, 15.303091049194336, 3.054981231689453] - }, - { - "type": "C", - "params": [11.052766799926758, -1.0183271169662476, 4.347395896911621, -1.0183271169662476, 0.09707161784172058, 3.054981231689453] - }, - { - "type": "C", - "params": [0.03550135716795921, 3.115450382232666, 0.0005718813044950366, 3.1979622840881348, 0.000007201545031421119, 3.284257411956787] - }, - { - "type": "C", - "params": [-0.0005675617721863091, 3.370553731918335, 0.03328297287225723, 3.453517198562622, 0.09404654800891876, 3.514791965484619] - }, - { - "type": "L", - "params": [1.260049819946289, 4.691207408905029] - }, - { - "type": "C", - "params": [1.3800644874572754, 4.8121113777160645, 1.5751309394836426, 4.81361198425293, 1.6970009803771973, 4.694569110870361] - }, - { - "type": "C", - "params": [3.316573143005371, 3.1549103260040283, 5.465795040130615, 2.2963552474975586, 7.7004241943359375, 2.296360492706299] - }, - { - "type": "L", - "params": [7.7004241943359375, 2.296360492706299] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [7.700424671173096, 6.123746871948242] - }, - { - "type": "C", - "params": [8.928089141845703, 6.123671054840088, 10.111939430236816, 6.579985618591309, 11.021951675415039, 7.404024124145508] - }, - { - "type": "C", - "params": [11.145031929016113, 7.520973205566406, 11.33891773223877, 7.518438339233398, 11.458902359008789, 7.398309707641602] - }, - { - "type": "L", - "params": [12.623222351074219, 6.221892833709717] - }, - { - "type": "C", - "params": [12.684530258178711, 6.160186767578125, 12.718552589416504, 6.07647705078125, 12.71767520904541, 5.989490985870361] - }, - { - "type": "C", - "params": [12.716787338256836, 5.902505397796631, 12.681071281433105, 5.819504261016846, 12.618513107299805, 5.75905704498291] - }, - { - "type": "C", - "params": [9.847347259521484, 3.181312322616577, 5.555840969085693, 3.181312322616577, 2.7846851348876953, 5.75905704498291] - }, - { - "type": "C", - "params": [2.7220864295959473, 5.819504261016846, 2.686370372772217, 5.902546405792236, 2.685553789138794, 5.989560604095459] - }, - { - "type": "C", - "params": [2.6847267150878906, 6.076573371887207, 2.718869686126709, 6.160276412963867, 2.780308961868286, 6.221892833709717] - }, - { - "type": "L", - "params": [3.9442954063415527, 7.398309707641602] - }, - { - "type": "C", - "params": [4.064269542694092, 7.518438339233398, 4.258166790008545, 7.520973205566406, 4.381246566772461, 7.404024124145508] - }, - { - "type": "C", - "params": [5.290653228759766, 6.580530166625977, 6.473567008972168, 6.124255180358887, 7.700424671173096, 6.123746871948242] - }, - { - "type": "L", - "params": [7.700424671173096, 6.123746871948242] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [9.937968254089355, 8.931347846984863] - }, - { - "type": "C", - "params": [10.00023365020752, 8.870235443115234, 10.034527778625488, 8.78613567352295, 10.032743453979492, 8.698905944824219] - }, - { - "type": "C", - "params": [10.03095817565918, 8.611676216125488, 9.993266105651855, 8.529047966003418, 9.928549766540527, 8.470528602600098] - }, - { - "type": "C", - "params": [8.64232063293457, 7.382628440856934, 6.758518218994141, 7.382628440856934, 5.472288608551025, 8.470528602600098] - }, - { - "type": "C", - "params": [5.40753173828125, 8.529001235961914, 5.369769096374512, 8.611603736877441, 5.367923736572266, 8.698833465576172] - }, - { - "type": "C", - "params": [5.3660783767700195, 8.786064147949219, 5.4003119468688965, 8.870189666748047, 5.46253776550293, 8.931347846984863] - }, - { - "type": "L", - "params": [7.476902008056641, 10.963858604431152] - }, - { - "type": "C", - "params": [7.535941123962402, 11.023592948913574, 7.616427898406982, 11.057209968566895, 7.7004241943359375, 11.057209968566895] - }, - { - "type": "C", - "params": [7.784409999847412, 11.057209968566895, 7.86489725112915, 11.023592948913574, 7.923936367034912, 10.963858604431152] - }, - { - "type": "L", - "params": [9.937968254089355, 8.931347846984863] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#000000", - "originX": 0, - "originY": 0, - "originW": 15.399999618530273, - "originH": 11.057209968566895 - }, - "operations": {} - }, - { - "uuid": "27d257ae-4bb6-9e8d-88e5-fa7e13749c2a", - "name": "↳ Time", - "x": 495, - "y": 13, - "w": 54, - "h": 18, - "angle": 0, - "type": "text", - "detail": { - "text": "9:41", - "fontFamily": "SF Pro Text", - "fontSize": 15, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "7c00af8e-be51-b39e-8d09-466159c7c1ac", - "name": "iPhone X screen-1", - "x": 0, - "y": 0, - "w": 375, - "h": 812, - "angle": 0, - "type": "group", - "detail": { - "overflow": "hidden", - "background": "#FFFFFF", - "children": [] - }, - "operations": {} - }, - { - "uuid": "52a1c1c3-b506-5a8d-b134-f72130d3dff3", - "name": "↳ Note", - "x": 299, - "y": 440, - "w": 60, - "h": 14, - "angle": 0, - "type": "text", - "detail": { - "text": "Read 10:43", - "fontFamily": "SF Pro Text", - "fontSize": 11, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#000000", - "opacity": 0.4000000059604645 - }, - "operations": {} - }, - { - "uuid": "c5cc5682-ef1d-1045-5257-79453fec7c9a", - "name": "Background", - "x": 241, - "y": 400, - "w": 118, - "h": 36, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [0, 18] - }, - { - "type": "C", - "params": [0, 17.071487426757812, 0, 16.60723114013672, 0.01813940517604351, 16.214881896972656] - }, - { - "type": "C", - "params": [0.4236813485622406, 7.4431376457214355, 7.4431376457214355, 0.4236813485622406, 16.214881896972656, 0.01813940517604351] - }, - { - "type": "C", - "params": [16.60723114013672, 0, 17.071487426757812, 0, 17.999998092651367, 0] - }, - { - "type": "L", - "params": [100, 0] - }, - { - "type": "C", - "params": [100.92851257324219, 0, 101.39276885986328, 0, 101.78511810302734, 0.01813940517604351] - }, - { - "type": "C", - "params": [110.5568618774414, 0.4236813485622406, 117.5763168334961, 7.4431376457214355, 117.98185729980469, 16.214881896972656] - }, - { - "type": "C", - "params": [118, 16.60723114013672, 118, 17.071487426757812, 118, 18] - }, - { - "type": "L", - "params": [118, 18] - }, - { - "type": "C", - "params": [118, 18.928512573242188, 118, 19.39276885986328, 117.98185729980469, 19.785118103027344] - }, - { - "type": "C", - "params": [117.5763168334961, 28.556861877441406, 110.5568618774414, 35.576316833496094, 101.78511810302734, 35.98186111450195] - }, - { - "type": "C", - "params": [101.39276885986328, 36, 100.92851257324219, 36, 100, 36] - }, - { - "type": "L", - "params": [17.999998092651367, 36] - }, - { - "type": "C", - "params": [17.071487426757812, 36, 16.60723114013672, 36, 16.214881896972656, 35.98186111450195] - }, - { - "type": "C", - "params": [7.4431376457214355, 35.576316833496094, 0.4236813485622406, 28.556861877441406, 0.01813940517604351, 19.785118103027344] - }, - { - "type": "C", - "params": [0, 19.39276885986328, 0, 18.928512573242188, 0, 18] - }, - { - "type": "L", - "params": [0, 18] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#007AFF", - "originX": 0, - "originY": 0, - "originW": 118, - "originH": 36 - }, - "operations": {} - }, - { - "uuid": "9887aea2-01ba-87cb-a1ea-543488a15841", - "name": "↳ Text", - "x": 253, - "y": 407, - "w": 94, - "h": 22, - "angle": 0, - "type": "text", - "detail": { - "text": "thx i'll check", - "fontFamily": "SF Pro Text", - "fontSize": 17, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 22, - "color": "#FFFFFF", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "3f23979d-3a3a-c850-d80a-1031a74ef837", - "name": "Mask", - "x": 16, - "y": 328, - "w": 244, - "h": 64, - "angle": 0, - "type": "rect", - "detail": { - "background": "#F3F3F3", - "borderRadius": 17.5, - "borderDash": [], - "boxSizing": "center-line", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "4e2a03ad-b6e3-f91d-9150-07eccee34713", - "name": "▪︎ Bitmap", - "x": 206, - "y": 338, - "w": 44, - "h": 44, - "angle": 0, - "type": "rect", - "detail": { - "borderRadius": 10, - "background": "#E5E5E5" - }, - "operations": {} - }, - { - "uuid": "94a4e598-76fe-d48c-bd26-14b3674b5050", - "name": "↳ Subtitle", - "x": 31, - "y": 361.99999713897705, - "w": 47, - "h": 18, - "angle": 0, - "type": "text", - "detail": { - "text": "JavaScript", - "fontFamily": "SF Pro Text", - "fontSize": 13, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 18, - "color": "#000000", - "opacity": 0.4000000059604645 - }, - "operations": {} - }, - { - "uuid": "4348f687-58e4-2ceb-b679-ed7e6e2ca9d0", - "name": "↳ Title", - "x": 31, - "y": 339.99999713897705, - "w": 156, - "h": 22, - "angle": 0, - "type": "text", - "detail": { - "text": "iDraw.js | A simple ...", - "fontFamily": "SF Pro Text", - "fontSize": 17, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 22, - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "889f73a9-3f65-eb74-8275-e6981a6dfcf8", - "name": "Background", - "x": 16, - "y": 284, - "w": 127, - "h": 36, - "angle": 0, - "type": "rect", - "detail": { - "background": "#F8F8F8EB", - "borderRadius": 17, - "borderDash": [], - "boxSizing": "center-line", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "246b99f2-1cb6-1ddc-a474-6a23ccda90a7", - "name": "↳ Text", - "x": 28, - "y": 291, - "w": 103, - "h": 22, - "angle": 0, - "type": "text", - "detail": { - "text": "Is this it?", - "fontFamily": "SF Pro Text", - "fontSize": 17, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 22, - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "5031550b-0179-0fe4-9f3d-6d3cf400dfeb", - "name": "↳ Note", - "x": 299, - "y": 263, - "w": 60, - "h": 14, - "angle": 0, - "type": "text", - "detail": { - "text": "Read 10:43", - "fontFamily": "SF Pro Text", - "fontSize": 11, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#000000", - "opacity": 0.4000000059604645 - }, - "operations": {} - }, - { - "uuid": "c7291fb8-285f-1e12-ad36-b1f94044a2c8", - "name": "Background", - "x": 149, - "y": 223, - "w": 210, - "h": 36, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [0, 18] - }, - { - "type": "C", - "params": [0, 17.071487426757812, 0, 16.60723114013672, 0.01813940517604351, 16.214881896972656] - }, - { - "type": "C", - "params": [0.4236813485622406, 7.4431376457214355, 7.4431376457214355, 0.4236813485622406, 16.214881896972656, 0.01813940517604351] - }, - { - "type": "C", - "params": [16.60723114013672, 0, 17.071487426757812, 0, 17.999998092651367, 0] - }, - { - "type": "L", - "params": [192, 0] - }, - { - "type": "C", - "params": [192.9285125732422, 0, 193.39276123046875, 0, 193.78512573242188, 0.01813940517604351] - }, - { - "type": "C", - "params": [202.55686950683594, 0.4236813485622406, 209.57632446289062, 7.4431376457214355, 209.9818572998047, 16.214881896972656] - }, - { - "type": "C", - "params": [210, 16.60723114013672, 210, 17.071487426757812, 210, 18] - }, - { - "type": "L", - "params": [210, 18] - }, - { - "type": "C", - "params": [210, 18.928512573242188, 210, 19.39276885986328, 209.9818572998047, 19.785118103027344] - }, - { - "type": "C", - "params": [209.57632446289062, 28.556861877441406, 202.55686950683594, 35.576316833496094, 193.78512573242188, 35.98186111450195] - }, - { - "type": "C", - "params": [193.39276123046875, 36, 192.9285125732422, 36, 192, 36] - }, - { - "type": "L", - "params": [17.999998092651367, 36] - }, - { - "type": "C", - "params": [17.071487426757812, 36, 16.60723114013672, 36, 16.214881896972656, 35.98186111450195] - }, - { - "type": "C", - "params": [7.4431376457214355, 35.576316833496094, 0.4236813485622406, 28.556861877441406, 0.01813940517604351, 19.785118103027344] - }, - { - "type": "C", - "params": [0, 19.39276885986328, 0, 18.928512573242188, 0, 18] - }, - { - "type": "L", - "params": [0, 18] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#007AFF", - "originX": 0, - "originY": 0, - "originW": 210, - "originH": 36 - }, - "operations": {} - }, - { - "uuid": "5ee79657-dec6-dc5d-f676-7081f4369034", - "name": "↳ Text", - "x": 161, - "y": 230, - "w": 186, - "h": 22, - "angle": 0, - "type": "text", - "detail": { - "text": "iDraw.js is recommended", - "fontFamily": "SF Pro Text", - "fontSize": 17, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 22, - "color": "#FFFFFF", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "f93de613-0d10-8ece-9e45-6522253f239d", - "name": "Background", - "x": 142, - "y": 112, - "w": 217, - "h": 103, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [0, 27.19999885559082] - }, - { - "type": "C", - "params": [0, 17.679107666015625, 0, 12.918661117553711, 1.8528891801834106, 9.282160758972168] - }, - { - "type": "C", - "params": [3.482736587524414, 6.0834059715271, 6.0834059715271, 3.482736587524414, 9.282160758972168, 1.8528891801834106] - }, - { - "type": "C", - "params": [12.918661117553711, 0, 17.679107666015625, 0, 27.200002670288086, 0] - }, - { - "type": "L", - "params": [189.8000030517578, 0] - }, - { - "type": "C", - "params": [199.32089233398438, 0, 204.0813446044922, 0, 207.71783447265625, 1.8528891801834106] - }, - { - "type": "C", - "params": [210.91659545898438, 3.482736587524414, 213.5172576904297, 6.0834059715271, 215.14710998535156, 9.282160758972168] - }, - { - "type": "C", - "params": [217, 12.918661117553711, 217, 17.679107666015625, 217, 27.19999885559082] - }, - { - "type": "L", - "params": [217, 75.80000305175781] - }, - { - "type": "C", - "params": [217, 85.32089233398438, 217, 90.08133697509766, 215.14710998535156, 93.71784210205078] - }, - { - "type": "C", - "params": [213.5172576904297, 96.91659545898438, 210.91659545898438, 99.51726531982422, 207.71783447265625, 101.14710998535156] - }, - { - "type": "C", - "params": [204.0813446044922, 103, 199.32089233398438, 103, 189.8000030517578, 103] - }, - { - "type": "L", - "params": [27.199993133544922, 103] - }, - { - "type": "C", - "params": [17.67910385131836, 103, 12.918661117553711, 103, 9.282160758972168, 101.14710998535156] - }, - { - "type": "C", - "params": [6.0834059715271, 99.51726531982422, 3.482736587524414, 96.91659545898438, 1.8528891801834106, 93.71784210205078] - }, - { - "type": "C", - "params": [0, 90.08133697509766, 0, 85.32089233398438, 0, 75.80000305175781] - }, - { - "type": "L", - "params": [0, 27.19999885559082] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#007AFF", - "originX": 0, - "originY": 0, - "originW": 217, - "originH": 103 - }, - "operations": {} - }, - { - "uuid": "c9120b97-5257-a6e7-1027-89db4d41e88b", - "name": "↳ Text", - "x": 154, - "y": 118, - "w": 193, - "h": 89, - "angle": 0, - "type": "text", - "detail": { - "text": "iDraw.js, a new JavaScript drawing framework, is exciting because it can parse Figma files", - "fontFamily": "SF Pro Text", - "fontSize": 17, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 22, - "color": "#FFFFFF", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "da88b0dd-76ce-017b-3ee1-caa17eecc427", - "name": "Background", - "x": 16, - "y": 0, - "w": 237, - "h": 103, - "angle": 0, - "type": "rect", - "detail": { - "background": "#F8F8F8EB", - "borderRadius": 17, - "borderDash": [], - "boxSizing": "center-line", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "20baa44c-65bb-979a-1033-6a4056178e14", - "name": "↳ Text", - "x": 28, - "y": 7.800000190734863, - "w": 213, - "h": 88, - "angle": 0, - "type": "text", - "detail": { - "text": "Hey, I recently started a new project. Can you recommend any JavaScript framework for front-end drawing?", - "fontFamily": "SF Pro Text", - "fontSize": 17, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 22, - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "88cd6b4d-fd07-391f-df67-abf8f8a766fb", - "name": "Background", - "x": 0, - "y": 0, - "w": 375, - "h": 88, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [0, 0] - }, - { - "type": "L", - "params": [375, 0] - }, - { - "type": "L", - "params": [375, 88] - }, - { - "type": "L", - "params": [0, 88] - }, - { - "type": "L", - "params": [0, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFFEB", - "originX": 0, - "originY": 0, - "originW": 375, - "originH": 88 - }, - "operations": {} - }, - { - "uuid": "c9fe31ed-3dce-de70-37a3-ba12f2ad2d2c", - "name": "Bitmap", - "x": 325, - "y": 46, - "w": 34, - "h": 34, - "angle": 0, - "type": "image", - "detail": { - "background": "transparent", - "borderDash": [], - "boxSizing": "center-line", - "opacity": 1, - "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8AAAAPACAYAAAD61hCbAAAAAXNSR0IArs4c6QAAQABJREFUeAHt10ERwEAMA7HrUSq+cO9MYWQVBpbz8TMz73EECBAgQIAAAQIECBAgQGC5wF2eTzwCBAgQIECAAAECBAgQIPALGMAegQABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnamMk62QAAAY2SURBVBaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAAED2A8QIECAAAECBAgQIECAQELAAE7ULCQBAgQIECBAgAABAgQIGMB+gAABAgQIECBAgAABAgQSAgZwomYhCRAgQIAAAQIECBAgQMAA9gMECBAgQIAAAQIECBAgkBAwgBM1C0mAAAECBAgQIECAAAECBrAfIECAAAECBAgQIECAAIGEgAGcqFlIAgQIECBAgAABAgQIEDCA/QABAgQIECBAgAABAgQIJAQM4ETNQhIgQIAAAQIECBAgQICAAewHCBAgQIAAAQIECBAgQCAhYAAnahaSAAECBAgQIECAAAECBAxgP0CAAAECBAgQIECAAAECCQEDOFGzkAQIECBAgAABAgQIECBgAPsBAgQIECBAgAABAgQIEEgIGMCJmoUkQIAAAQIECBAgQIAAAQPYDxAgQIAAAQIECBAgQIBAQsAATtQsJAECBAgQIECAAAECBAgYwH6AAAECBAgQIECAAAECBBICBnCiZiEJECBAgAABAgQIECBAwAD2AwQIECBAgAABAgQIECCQEDCAEzULSYAAAQIECBAgQIAAAQIGsB8gQIAAAQIECBAgQIAAgYSAAZyoWUgCBAgQIECAAAECBAgQMID9AAECBAgQIECAAAECBAgkBAzgRM1CEiBAgAABAgQIECBAgIAB7AcIECBAgAABAgQIECBAICFgACdqFpIAAQIECBAgQIAAAQIEDGA/QIAAAQIECBAgQIAAAQIJAQM4UbOQBAgQIECAAAECBAgQIGAA+wECBAgQIECAAAECBAgQSAgYwImahSRAgAABAgQIECBAgAABA9gPECBAgAABAgQIECBAgEBCwABO1CwkAQIECBAgQIAAAQIECBjAfoAAAQIECBAgQIAAAQIEEgIGcKJmIQkQIECAAAECBAgQIEDAAPYDBAgQIECAAAECBAgQIJAQMIATNQtJgAABAgQIECBAgAABAgawHyBAgAABAgQIECBAgACBhIABnKhZSAIECBAgQIAAAQIECBAwgP0AAQIECBAgQIAAAQIECCQEDOBEzUISIECAAAECBAgQIECAgAHsBwgQIECAAAECBAgQIEAgIWAAJ2oWkgABAgQIECBAgAABAgQMYD9AgAABAgQIECBAgAABAgkBAzhRs5AECBAgQIAAAQIECBAgYAD7AQIECBAgQIAAAQIECBBICBjAiZqFJECAAAECBAgQIECAAIEP6x4JKs2XK3AAAAAASUVORK5CYII=", - "scaleMode": "fill", - "originH": 960, - "originW": 960, - "clipPath": { - "commands": [ - { - "type": "M", - "params": [17, 34] - }, - { - "type": "C", - "params": [26.388839721679688, 34, 34, 26.388839721679688, 34, 17] - }, - { - "type": "C", - "params": [34, 7.611159324645996, 26.388839721679688, 0, 17, 0] - }, - { - "type": "C", - "params": [7.611159324645996, 0, 0, 7.611159324645996, 0, 17] - }, - { - "type": "C", - "params": [0, 26.388839721679688, 7.611159324645996, 34, 17, 34] - }, - { - "type": "Z", - "params": [] - } - ], - "originX": 0, - "originY": 0, - "originW": 34, - "originH": 34 - } - }, - "operations": {} - }, - { - "uuid": "6e787b39-bb8c-391a-d300-88c4e788e2b0", - "name": "Arrow", - "x": 8, - "y": 55.5, - "w": 12, - "h": 20.5, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [9.537135124206543, 20.082666397094727] - }, - { - "type": "L", - "params": [0.2921518385410309, 10.945804595947266] - }, - { - "type": "C", - "params": [-0.09738397598266602, 10.561189651489258, -0.09738397598266602, 9.939809799194336, 0.2921518385410309, 9.554195404052734] - }, - { - "type": "L", - "params": [9.537135124206543, 0.4173326790332794] - }, - { - "type": "C", - "params": [10.099465370178223, -0.13911089301109314, 11.014374732971191, -0.13911089301109314, 11.577703475952148, 0.4173326790332794] - }, - { - "type": "C", - "params": [12.140033721923828, 0.9737762212753296, 12.140033721923828, 1.8768731355667114, 11.577703475952148, 2.433316707611084] - }, - { - "type": "L", - "params": [3.6691277027130127, 10.250499725341797] - }, - { - "type": "L", - "params": [11.577703475952148, 18.065683364868164] - }, - { - "type": "C", - "params": [12.140033721923828, 18.623125076293945, 12.140033721923828, 19.526222229003906, 11.577703475952148, 20.082666397094727] - }, - { - "type": "C", - "params": [11.014374732971191, 20.639110565185547, 10.099465370178223, 20.639110565185547, 9.537135124206543, 20.082666397094727] - } - ], - "fillRule": "evenodd", - "fill": "#007AFF", - "originX": 0, - "originY": 0, - "originW": 12, - "originH": 20.5 - }, - "operations": {} - }, - { - "uuid": "1a99ac72-e13b-1860-54c2-a1522ed31ace", - "name": "↳ Label", - "x": 22.513333320617676, - "y": 55, - "w": 38, - "h": 22, - "angle": 0, - "type": "text", - "detail": { - "text": "Back", - "fontFamily": "SF Pro Text", - "fontSize": 17, - "textAlign": "left", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 22, - "color": "#007AFF", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "206c660a-7daf-6a2a-000e-51a8b064c0e0", - "name": "↳ Title", - "x": 110, - "y": 55, - "w": 156, - "h": 22, - "angle": 0, - "type": "text", - "detail": { - "text": "Developer", - "fontFamily": "SF Pro Text", - "fontSize": 17, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 22, - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "c73f110c-164d-efb2-bf3a-cc4789f442c4", - "name": "Rectangle", - "x": 336, - "y": 16.159997940063477, - "w": 24.5, - "h": 11.5, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [3.5894391536712646, 0] - }, - { - "type": "L", - "params": [18.410560607910156, 0] - }, - { - "type": "C", - "params": [19.658687591552734, 0, 20.111286163330078, 0.12995584309101105, 20.567583084106445, 0.37398576736450195] - }, - { - "type": "C", - "params": [21.023880004882812, 0.618015706539154, 21.38198471069336, 0.9761196374893188, 21.626014709472656, 1.4324159622192383] - }, - { - "type": "C", - "params": [21.870044708251953, 1.8887122869491577, 22, 2.341312885284424, 22, 3.5894391536712646] - }, - { - "type": "L", - "params": [22, 7.910560607910156] - }, - { - "type": "C", - "params": [22, 9.158686637878418, 21.870044708251953, 9.611288070678711, 21.626014709472656, 10.067584037780762] - }, - { - "type": "C", - "params": [21.38198471069336, 10.523880004882812, 21.023880004882812, 10.881983757019043, 20.567583084106445, 11.12601375579834] - }, - { - "type": "C", - "params": [20.111286163330078, 11.370043754577637, 19.658687591552734, 11.5, 18.410560607910156, 11.5] - }, - { - "type": "L", - "params": [3.5894391536712646, 11.5] - }, - { - "type": "C", - "params": [2.341312885284424, 11.5, 1.8887122869491577, 11.370043754577637, 1.4324159622192383, 11.12601375579834] - }, - { - "type": "C", - "params": [0.9761196374893188, 10.881983757019043, 0.618015706539154, 10.523880004882812, 0.37398576736450195, 10.067584037780762] - }, - { - "type": "C", - "params": [0.12995584309101105, 9.611288070678711, 0, 9.158686637878418, 0, 7.910560607910156] - }, - { - "type": "L", - "params": [0, 3.5894391536712646] - }, - { - "type": "C", - "params": [0, 2.341312885284424, 0.12995584309101105, 1.8887122869491577, 0.37398576736450195, 1.4324159622192383] - }, - { - "type": "C", - "params": [0.618015706539154, 0.9761196374893188, 0.9761196374893188, 0.618015706539154, 1.4324159622192383, 0.37398576736450195] - }, - { - "type": "C", - "params": [1.8887122869491577, 0.12995584309101105, 2.341312885284424, 0, 3.5894391536712646, 0] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [3.5894391536712646, 1] - }, - { - "type": "C", - "params": [2.6024606227874756, 1, 2.257904052734375, 1.0665369033813477, 1.9040148258209229, 1.2557989358901978] - }, - { - "type": "C", - "params": [1.621986985206604, 1.4066290855407715, 1.4066290855407715, 1.621986985206604, 1.2557989358901978, 1.9040148258209229] - }, - { - "type": "C", - "params": [1.0665369033813477, 2.257904052734375, 1, 2.6024606227874756, 1, 3.5894391536712646] - }, - { - "type": "L", - "params": [1, 7.910560607910156] - }, - { - "type": "C", - "params": [1, 8.897539138793945, 1.0665369033813477, 9.242095947265625, 1.2557989358901978, 9.595985412597656] - }, - { - "type": "C", - "params": [1.4066290855407715, 9.878013610839844, 1.621986985206604, 10.09337043762207, 1.9040148258209229, 10.244200706481934] - }, - { - "type": "C", - "params": [2.257904052734375, 10.433463096618652, 2.6024606227874756, 10.5, 3.5894391536712646, 10.5] - }, - { - "type": "L", - "params": [18.410560607910156, 10.5] - }, - { - "type": "C", - "params": [19.397539138793945, 10.5, 19.742095947265625, 10.433463096618652, 20.095985412597656, 10.244200706481934] - }, - { - "type": "C", - "params": [20.378013610839844, 10.09337043762207, 20.593372344970703, 9.878013610839844, 20.74420166015625, 9.595985412597656] - }, - { - "type": "C", - "params": [20.93346405029297, 9.242095947265625, 21, 8.897539138793945, 21, 7.910560607910156] - }, - { - "type": "L", - "params": [21, 3.5894391536712646] - }, - { - "type": "C", - "params": [21, 2.6024606227874756, 20.93346405029297, 2.257904052734375, 20.74420166015625, 1.9040148258209229] - }, - { - "type": "C", - "params": [20.593372344970703, 1.621986985206604, 20.378013610839844, 1.4066290855407715, 20.095985412597656, 1.2557989358901978] - }, - { - "type": "C", - "params": [19.742095947265625, 1.0665369033813477, 19.397539138793945, 1, 18.410560607910156, 1] - }, - { - "type": "L", - "params": [3.5894391536712646, 1] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [24.5, 5.69000244140625] - }, - { - "type": "C", - "params": [24.5, 6.92657470703125, 23, 7.69000244140625, 23, 7.69000244140625] - }, - { - "type": "L", - "params": [23, 3.69000244140625] - }, - { - "type": "C", - "params": [23, 3.69000244140625, 24.5, 4.45343017578125, 24.5, 5.69000244140625] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#0000005C", - "originX": 0, - "originY": 0, - "originW": 24.5, - "originH": 11.5 - }, - "operations": {} - }, - { - "uuid": "63a1c743-94ae-1bda-4cb0-c3e3da459a87", - "name": "Rectangle", - "x": 338, - "y": 18.076664686203003, - "w": 18, - "h": 7.666666507720947, - "angle": 0, - "type": "rect", - "detail": { - "background": "#000000", - "borderRadius": 1.600000023841858, - "borderDash": [], - "boxSizing": "center-line", - "borderColor": "transparent", - "borderWidth": 0, - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "b6323c26-accf-12bf-dc6c-b6a90af0aae4", - "name": "Combined Shape", - "x": 293.5, - "y": 16.600000381469727, - "w": 17.099990844726562, - "h": 10.700004577636719, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [14.123048782348633, 0.9658917188644409] - }, - { - "type": "C", - "params": [14.099990844726562, 1.0818103551864624, 14.099990844726562, 1.2212064266204834, 14.099990844726562, 1.4999985694885254] - }, - { - "type": "L", - "params": [14.099990844726562, 9.199999809265137] - }, - { - "type": "C", - "params": [14.099990844726562, 9.478793144226074, 14.099990844726562, 9.618189811706543, 14.123048782348633, 9.734107971191406] - }, - { - "type": "C", - "params": [14.21773624420166, 10.210136413574219, 14.58985424041748, 10.582254409790039, 15.065882682800293, 10.676941871643066] - }, - { - "type": "C", - "params": [15.181800842285156, 10.699999809265137, 15.321197509765625, 10.699999809265137, 15.599990844726562, 10.699999809265137] - }, - { - "type": "C", - "params": [15.8787841796875, 10.699999809265137, 16.01818084716797, 10.699999809265137, 16.13409996032715, 10.676941871643066] - }, - { - "type": "C", - "params": [16.61012840270996, 10.582254409790039, 16.98224449157715, 10.210136413574219, 17.076932907104492, 9.734107971191406] - }, - { - "type": "C", - "params": [17.099990844726562, 9.618189811706543, 17.099990844726562, 9.478793144226074, 17.099990844726562, 9.200000762939453] - }, - { - "type": "L", - "params": [17.099990844726562, 1.4999998807907104] - }, - { - "type": "C", - "params": [17.099990844726562, 1.2212069034576416, 17.099990844726562, 1.0818103551864624, 17.076932907104492, 0.9658917188644409] - }, - { - "type": "C", - "params": [16.98224449157715, 0.48986291885375977, 16.61012840270996, 0.11774563789367676, 16.13409996032715, 0.02305765077471733] - }, - { - "type": "C", - "params": [16.01818084716797, 0, 15.8787841796875, 0, 15.599990844726562, 0] - }, - { - "type": "C", - "params": [15.321197509765625, 0, 15.181800842285156, 0, 15.065882682800293, 0.02305765077471733] - }, - { - "type": "C", - "params": [14.58985424041748, 0.11774563789367676, 14.21773624420166, 0.48986291885375977, 14.123048782348633, 0.9658917188644409] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [9.399993896484375, 3.9000015258789062] - }, - { - "type": "C", - "params": [9.399993896484375, 3.621208429336548, 9.399993896484375, 3.481812000274658, 9.423051834106445, 3.3658933639526367] - }, - { - "type": "C", - "params": [9.517739295959473, 2.889864444732666, 9.889857292175293, 2.517747163772583, 10.365885734558105, 2.4230592250823975] - }, - { - "type": "C", - "params": [10.481803894042969, 2.4000015258789062, 10.621200561523438, 2.4000015258789062, 10.899993896484375, 2.4000015258789062] - }, - { - "type": "C", - "params": [11.178787231445312, 2.4000015258789062, 11.318183898925781, 2.4000015258789062, 11.434102058410645, 2.4230592250823975] - }, - { - "type": "C", - "params": [11.910130500793457, 2.517747163772583, 12.282248497009277, 2.889864444732666, 12.376935958862305, 3.3658933639526367] - }, - { - "type": "C", - "params": [12.399993896484375, 3.481812000274658, 12.399993896484375, 3.621208429336548, 12.399993896484375, 3.900001287460327] - }, - { - "type": "L", - "params": [12.399993896484375, 9.200004577636719] - }, - { - "type": "C", - "params": [12.399993896484375, 9.478797912597656, 12.399993896484375, 9.618194580078125, 12.376935958862305, 9.734112739562988] - }, - { - "type": "C", - "params": [12.282248497009277, 10.2101411819458, 11.910130500793457, 10.582259178161621, 11.434102058410645, 10.676946640014648] - }, - { - "type": "C", - "params": [11.318183898925781, 10.700004577636719, 11.178787231445312, 10.700004577636719, 10.899993896484375, 10.700004577636719] - }, - { - "type": "C", - "params": [10.621200561523438, 10.700004577636719, 10.481803894042969, 10.700004577636719, 10.365885734558105, 10.676946640014648] - }, - { - "type": "C", - "params": [9.889857292175293, 10.582259178161621, 9.517739295959473, 10.2101411819458, 9.423051834106445, 9.734112739562988] - }, - { - "type": "C", - "params": [9.399993896484375, 9.618194580078125, 9.399993896484375, 9.478797912597656, 9.399993896484375, 9.200004577636719] - }, - { - "type": "L", - "params": [9.399993896484375, 3.9000015258789062] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [4.823045253753662, 5.665896415710449] - }, - { - "type": "C", - "params": [4.79998779296875, 5.781815052032471, 4.79998779296875, 5.9212117195129395, 4.79998779296875, 6.200004577636719] - }, - { - "type": "L", - "params": [4.79998779296875, 9.200004577636719] - }, - { - "type": "C", - "params": [4.79998779296875, 9.478797912597656, 4.79998779296875, 9.618194580078125, 4.823045253753662, 9.734112739562988] - }, - { - "type": "C", - "params": [4.917733192443848, 10.2101411819458, 5.28985071182251, 10.582259178161621, 5.7658796310424805, 10.676946640014648] - }, - { - "type": "C", - "params": [5.881798267364502, 10.700004577636719, 6.021194934844971, 10.700004577636719, 6.29998779296875, 10.700004577636719] - }, - { - "type": "C", - "params": [6.578780651092529, 10.700004577636719, 6.718177318572998, 10.700004577636719, 6.8340959548950195, 10.676946640014648] - }, - { - "type": "C", - "params": [7.31012487411499, 10.582259178161621, 7.682242393493652, 10.2101411819458, 7.776930332183838, 9.734112739562988] - }, - { - "type": "C", - "params": [7.79998779296875, 9.618194580078125, 7.79998779296875, 9.478797912597656, 7.79998779296875, 9.200004577636719] - }, - { - "type": "L", - "params": [7.79998779296875, 6.200004577636719] - }, - { - "type": "C", - "params": [7.79998779296875, 5.921211242675781, 7.79998779296875, 5.781815052032471, 7.776930332183838, 5.665896415710449] - }, - { - "type": "C", - "params": [7.682242393493652, 5.1898674964904785, 7.31012487411499, 4.817749977111816, 6.8340959548950195, 4.723062038421631] - }, - { - "type": "C", - "params": [6.718177318572998, 4.700004577636719, 6.578780651092529, 4.700004577636719, 6.29998779296875, 4.700004577636719] - }, - { - "type": "C", - "params": [6.021194934844971, 4.700004577636719, 5.881798267364502, 4.700004577636719, 5.7658796310424805, 4.723062038421631] - }, - { - "type": "C", - "params": [5.28985071182251, 4.817749977111816, 4.917733192443848, 5.1898674964904785, 4.823045253753662, 5.665896415710449] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [0.02305765077471733, 7.665896415710449] - }, - { - "type": "C", - "params": [0, 7.781815052032471, 0, 7.9212117195129395, 0, 8.200004577636719] - }, - { - "type": "L", - "params": [0, 9.200004577636719] - }, - { - "type": "C", - "params": [0, 9.478797912597656, 0, 9.618194580078125, 0.02305765077471733, 9.734112739562988] - }, - { - "type": "C", - "params": [0.11774563789367676, 10.2101411819458, 0.48986291885375977, 10.582259178161621, 0.9658917188644409, 10.676946640014648] - }, - { - "type": "C", - "params": [1.0818103551864624, 10.700004577636719, 1.2212069034576416, 10.700004577636719, 1.5, 10.700004577636719] - }, - { - "type": "C", - "params": [1.7787930965423584, 10.700004577636719, 1.9181896448135376, 10.700004577636719, 2.0341081619262695, 10.676946640014648] - }, - { - "type": "C", - "params": [2.5101370811462402, 10.582259178161621, 2.8822543621063232, 10.2101411819458, 2.976942300796509, 9.734112739562988] - }, - { - "type": "C", - "params": [3, 9.618194580078125, 3, 9.478797912597656, 3, 9.200004577636719] - }, - { - "type": "L", - "params": [3, 8.200004577636719] - }, - { - "type": "C", - "params": [3, 7.921211242675781, 3, 7.781815052032471, 2.976942300796509, 7.665896415710449] - }, - { - "type": "C", - "params": [2.8822543621063232, 7.1898674964904785, 2.5101370811462402, 6.817749977111816, 2.0341081619262695, 6.723062038421631] - }, - { - "type": "C", - "params": [1.9181896448135376, 6.700004577636719, 1.7787930965423584, 6.700004577636719, 1.5, 6.700004577636719] - }, - { - "type": "C", - "params": [1.2212069034576416, 6.700004577636719, 1.0818103551864624, 6.700004577636719, 0.9658917188644409, 6.723062038421631] - }, - { - "type": "C", - "params": [0.48986291885375977, 6.817749977111816, 0.11774563789367676, 7.1898674964904785, 0.02305765077471733, 7.665896415710449] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#000000", - "originX": 0, - "originY": 0, - "originW": 17.099990844726562, - "originH": 10.700004577636719 - }, - "operations": {} - }, - { - "uuid": "6bf5ea8a-2fb8-a14f-6c67-b83e66d78189", - "name": "Wi-Fi", - "x": 315.6000061035156, - "y": 16.399999618530273, - "w": 15.399999618530273, - "h": 11.057209968566895, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [7.7004241943359375, 2.296360492706299] - }, - { - "type": "C", - "params": [9.934831619262695, 2.2964582443237305, 12.08380126953125, 3.1550111770629883, 13.703171730041504, 4.694569110870361] - }, - { - "type": "C", - "params": [13.825112342834473, 4.8134284019470215, 14.020017623901367, 4.811929225921631, 14.14012336730957, 4.691207408905029] - }, - { - "type": "L", - "params": [15.30578327178955, 3.514791965484619] - }, - { - "type": "C", - "params": [15.366597175598145, 3.453561544418335, 15.400498390197754, 3.3706233501434326, 15.399993896484375, 3.2843270301818848] - }, - { - "type": "C", - "params": [15.399489402770996, 3.1980319023132324, 15.36462116241455, 3.115494966506958, 15.303091049194336, 3.054981231689453] - }, - { - "type": "C", - "params": [11.052766799926758, -1.0183271169662476, 4.347395896911621, -1.0183271169662476, 0.09707161784172058, 3.054981231689453] - }, - { - "type": "C", - "params": [0.03550135716795921, 3.115450382232666, 0.0005718813044950366, 3.1979622840881348, 0.000007201545031421119, 3.284257411956787] - }, - { - "type": "C", - "params": [-0.0005675617721863091, 3.370553731918335, 0.03328297287225723, 3.453517198562622, 0.09404654800891876, 3.514791965484619] - }, - { - "type": "L", - "params": [1.260049819946289, 4.691207408905029] - }, - { - "type": "C", - "params": [1.3800644874572754, 4.8121113777160645, 1.5751309394836426, 4.81361198425293, 1.6970009803771973, 4.694569110870361] - }, - { - "type": "C", - "params": [3.316573143005371, 3.1549103260040283, 5.465795040130615, 2.2963552474975586, 7.7004241943359375, 2.296360492706299] - }, - { - "type": "L", - "params": [7.7004241943359375, 2.296360492706299] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [7.700424671173096, 6.123746871948242] - }, - { - "type": "C", - "params": [8.928089141845703, 6.123671054840088, 10.111939430236816, 6.579985618591309, 11.021951675415039, 7.404024124145508] - }, - { - "type": "C", - "params": [11.145031929016113, 7.520973205566406, 11.33891773223877, 7.518438339233398, 11.458902359008789, 7.398309707641602] - }, - { - "type": "L", - "params": [12.623222351074219, 6.221892833709717] - }, - { - "type": "C", - "params": [12.684530258178711, 6.160186767578125, 12.718552589416504, 6.07647705078125, 12.71767520904541, 5.989490985870361] - }, - { - "type": "C", - "params": [12.716787338256836, 5.902505397796631, 12.681071281433105, 5.819504261016846, 12.618513107299805, 5.75905704498291] - }, - { - "type": "C", - "params": [9.847347259521484, 3.181312322616577, 5.555840969085693, 3.181312322616577, 2.7846851348876953, 5.75905704498291] - }, - { - "type": "C", - "params": [2.7220864295959473, 5.819504261016846, 2.686370372772217, 5.902546405792236, 2.685553789138794, 5.989560604095459] - }, - { - "type": "C", - "params": [2.6847267150878906, 6.076573371887207, 2.718869686126709, 6.160276412963867, 2.780308961868286, 6.221892833709717] - }, - { - "type": "L", - "params": [3.9442954063415527, 7.398309707641602] - }, - { - "type": "C", - "params": [4.064269542694092, 7.518438339233398, 4.258166790008545, 7.520973205566406, 4.381246566772461, 7.404024124145508] - }, - { - "type": "C", - "params": [5.290653228759766, 6.580530166625977, 6.473567008972168, 6.124255180358887, 7.700424671173096, 6.123746871948242] - }, - { - "type": "L", - "params": [7.700424671173096, 6.123746871948242] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [9.937968254089355, 8.931347846984863] - }, - { - "type": "C", - "params": [10.00023365020752, 8.870235443115234, 10.034527778625488, 8.78613567352295, 10.032743453979492, 8.698905944824219] - }, - { - "type": "C", - "params": [10.03095817565918, 8.611676216125488, 9.993266105651855, 8.529047966003418, 9.928549766540527, 8.470528602600098] - }, - { - "type": "C", - "params": [8.64232063293457, 7.382628440856934, 6.758518218994141, 7.382628440856934, 5.472288608551025, 8.470528602600098] - }, - { - "type": "C", - "params": [5.40753173828125, 8.529001235961914, 5.369769096374512, 8.611603736877441, 5.367923736572266, 8.698833465576172] - }, - { - "type": "C", - "params": [5.3660783767700195, 8.786064147949219, 5.4003119468688965, 8.870189666748047, 5.46253776550293, 8.931347846984863] - }, - { - "type": "L", - "params": [7.476902008056641, 10.963858604431152] - }, - { - "type": "C", - "params": [7.535941123962402, 11.023592948913574, 7.616427898406982, 11.057209968566895, 7.7004241943359375, 11.057209968566895] - }, - { - "type": "C", - "params": [7.784409999847412, 11.057209968566895, 7.86489725112915, 11.023592948913574, 7.923936367034912, 10.963858604431152] - }, - { - "type": "L", - "params": [9.937968254089355, 8.931347846984863] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#000000", - "originX": 0, - "originY": 0, - "originW": 15.399999618530273, - "originH": 11.057209968566895 - }, - "operations": {} - }, - { - "uuid": "34d2b28c-95f9-5a68-2f15-c0077520637f", - "name": "↳ Time", - "x": 20, - "y": 13, - "w": 54, - "h": 18, - "angle": 0, - "type": "text", - "detail": { - "text": "9:41", - "fontFamily": "SF Pro Text", - "fontSize": 15, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "23b598c6-3529-cb22-af91-362155c44bd9", - "name": "Oval", - "x": 349, - "y": 48, - "w": 10, - "h": 10, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5, 10] - }, - { - "type": "C", - "params": [7.7614240646362305, 10, 10, 7.7614240646362305, 10, 5] - }, - { - "type": "C", - "params": [10, 2.2385761737823486, 7.7614240646362305, 0, 5, 0] - }, - { - "type": "C", - "params": [2.2385761737823486, 0, 0, 2.2385761737823486, 0, 5] - }, - { - "type": "C", - "params": [0, 7.7614240646362305, 2.2385761737823486, 10, 5, 10] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#4CD964", - "originX": 0, - "originY": 0, - "originW": 10, - "originH": 10 - }, - "operations": {} - }, - { - "uuid": "b4f7ba02-85b3-0e5a-097e-7675123e0648", - "name": "Oval", - "x": 348, - "y": 47, - "w": 12, - "h": 12, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [6, 14] - }, - { - "type": "C", - "params": [10.418277740478516, 14, 14, 10.418277740478516, 14, 6] - }, - { - "type": "L", - "params": [10, 6] - }, - { - "type": "C", - "params": [10, 8.209138870239258, 8.209138870239258, 10, 6, 10] - }, - { - "type": "L", - "params": [6, 14] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [14, 6] - }, - { - "type": "C", - "params": [14, 1.5817219018936157, 10.418277740478516, -2, 6, -2] - }, - { - "type": "L", - "params": [6, 2] - }, - { - "type": "C", - "params": [8.209138870239258, 2, 10, 3.790860891342163, 10, 6] - }, - { - "type": "L", - "params": [14, 6] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [6, -2] - }, - { - "type": "C", - "params": [1.5817219018936157, -2, -2, 1.5817219018936157, -2, 6] - }, - { - "type": "L", - "params": [2, 6] - }, - { - "type": "C", - "params": [2, 3.790860891342163, 3.790860891342163, 2, 6, 2] - }, - { - "type": "L", - "params": [6, -2] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [-2, 6] - }, - { - "type": "C", - "params": [-2, 10.418277740478516, 1.5817219018936157, 14, 6, 14] - }, - { - "type": "L", - "params": [6, 10] - }, - { - "type": "C", - "params": [3.790860891342163, 10, 2, 8.209138870239258, 2, 6] - }, - { - "type": "L", - "params": [-2, 6] - }, - { - "type": "Z", - "params": [] - } - ], - "fill": "#FFFFFF", - "originX": 0, - "originY": 0, - "originW": 12, - "originH": 12 - }, - "operations": {} - }, - { - "uuid": "1620960e-d3bd-00ec-eb9b-fd70068129e0", - "name": "Rectangle", - "x": 336, - "y": 16.159997940063477, - "w": 24.5, - "h": 11.5, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [3.5894391536712646, 0] - }, - { - "type": "L", - "params": [18.410560607910156, 0] - }, - { - "type": "C", - "params": [19.658687591552734, 0, 20.111286163330078, 0.12995584309101105, 20.567583084106445, 0.37398576736450195] - }, - { - "type": "C", - "params": [21.023880004882812, 0.618015706539154, 21.38198471069336, 0.9761196374893188, 21.626014709472656, 1.4324159622192383] - }, - { - "type": "C", - "params": [21.870044708251953, 1.8887122869491577, 22, 2.341312885284424, 22, 3.5894391536712646] - }, - { - "type": "L", - "params": [22, 7.910560607910156] - }, - { - "type": "C", - "params": [22, 9.158686637878418, 21.870044708251953, 9.611288070678711, 21.626014709472656, 10.067584037780762] - }, - { - "type": "C", - "params": [21.38198471069336, 10.523880004882812, 21.023880004882812, 10.881983757019043, 20.567583084106445, 11.12601375579834] - }, - { - "type": "C", - "params": [20.111286163330078, 11.370043754577637, 19.658687591552734, 11.5, 18.410560607910156, 11.5] - }, - { - "type": "L", - "params": [3.5894391536712646, 11.5] - }, - { - "type": "C", - "params": [2.341312885284424, 11.5, 1.8887122869491577, 11.370043754577637, 1.4324159622192383, 11.12601375579834] - }, - { - "type": "C", - "params": [0.9761196374893188, 10.881983757019043, 0.618015706539154, 10.523880004882812, 0.37398576736450195, 10.067584037780762] - }, - { - "type": "C", - "params": [0.12995584309101105, 9.611288070678711, 0, 9.158686637878418, 0, 7.910560607910156] - }, - { - "type": "L", - "params": [0, 3.5894391536712646] - }, - { - "type": "C", - "params": [0, 2.341312885284424, 0.12995584309101105, 1.8887122869491577, 0.37398576736450195, 1.4324159622192383] - }, - { - "type": "C", - "params": [0.618015706539154, 0.9761196374893188, 0.9761196374893188, 0.618015706539154, 1.4324159622192383, 0.37398576736450195] - }, - { - "type": "C", - "params": [1.8887122869491577, 0.12995584309101105, 2.341312885284424, 0, 3.5894391536712646, 0] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [3.5894391536712646, 1] - }, - { - "type": "C", - "params": [2.6024606227874756, 1, 2.257904052734375, 1.0665369033813477, 1.9040148258209229, 1.2557989358901978] - }, - { - "type": "C", - "params": [1.621986985206604, 1.4066290855407715, 1.4066290855407715, 1.621986985206604, 1.2557989358901978, 1.9040148258209229] - }, - { - "type": "C", - "params": [1.0665369033813477, 2.257904052734375, 1, 2.6024606227874756, 1, 3.5894391536712646] - }, - { - "type": "L", - "params": [1, 7.910560607910156] - }, - { - "type": "C", - "params": [1, 8.897539138793945, 1.0665369033813477, 9.242095947265625, 1.2557989358901978, 9.595985412597656] - }, - { - "type": "C", - "params": [1.4066290855407715, 9.878013610839844, 1.621986985206604, 10.09337043762207, 1.9040148258209229, 10.244200706481934] - }, - { - "type": "C", - "params": [2.257904052734375, 10.433463096618652, 2.6024606227874756, 10.5, 3.5894391536712646, 10.5] - }, - { - "type": "L", - "params": [18.410560607910156, 10.5] - }, - { - "type": "C", - "params": [19.397539138793945, 10.5, 19.742095947265625, 10.433463096618652, 20.095985412597656, 10.244200706481934] - }, - { - "type": "C", - "params": [20.378013610839844, 10.09337043762207, 20.593372344970703, 9.878013610839844, 20.74420166015625, 9.595985412597656] - }, - { - "type": "C", - "params": [20.93346405029297, 9.242095947265625, 21, 8.897539138793945, 21, 7.910560607910156] - }, - { - "type": "L", - "params": [21, 3.5894391536712646] - }, - { - "type": "C", - "params": [21, 2.6024606227874756, 20.93346405029297, 2.257904052734375, 20.74420166015625, 1.9040148258209229] - }, - { - "type": "C", - "params": [20.593372344970703, 1.621986985206604, 20.378013610839844, 1.4066290855407715, 20.095985412597656, 1.2557989358901978] - }, - { - "type": "C", - "params": [19.742095947265625, 1.0665369033813477, 19.397539138793945, 1, 18.410560607910156, 1] - }, - { - "type": "L", - "params": [3.5894391536712646, 1] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [24.5, 5.69000244140625] - }, - { - "type": "C", - "params": [24.5, 6.92657470703125, 23, 7.69000244140625, 23, 7.69000244140625] - }, - { - "type": "L", - "params": [23, 3.69000244140625] - }, - { - "type": "C", - "params": [23, 3.69000244140625, 24.5, 4.45343017578125, 24.5, 5.69000244140625] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#0000005C", - "originX": 0, - "originY": 0, - "originW": 24.5, - "originH": 11.5 - }, - "operations": {} - }, - { - "uuid": "834092f5-93f2-5517-99fc-18a2dbfad2a4", - "name": "Rectangle", - "x": 338, - "y": 18.076664686203003, - "w": 18, - "h": 7.666666507720947, - "angle": 0, - "type": "rect", - "detail": { - "background": "#000000", - "borderRadius": 1.600000023841858, - "borderDash": [], - "boxSizing": "center-line", - "borderColor": "transparent", - "borderWidth": 0, - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "94050efa-5100-6baf-be02-d81c24a66f9d", - "name": "Combined Shape", - "x": 293.5, - "y": 16.600000381469727, - "w": 17.099990844726562, - "h": 10.700004577636719, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [14.123048782348633, 0.9658917188644409] - }, - { - "type": "C", - "params": [14.099990844726562, 1.0818103551864624, 14.099990844726562, 1.2212064266204834, 14.099990844726562, 1.4999985694885254] - }, - { - "type": "L", - "params": [14.099990844726562, 9.199999809265137] - }, - { - "type": "C", - "params": [14.099990844726562, 9.478793144226074, 14.099990844726562, 9.618189811706543, 14.123048782348633, 9.734107971191406] - }, - { - "type": "C", - "params": [14.21773624420166, 10.210136413574219, 14.58985424041748, 10.582254409790039, 15.065882682800293, 10.676941871643066] - }, - { - "type": "C", - "params": [15.181800842285156, 10.699999809265137, 15.321197509765625, 10.699999809265137, 15.599990844726562, 10.699999809265137] - }, - { - "type": "C", - "params": [15.8787841796875, 10.699999809265137, 16.01818084716797, 10.699999809265137, 16.13409996032715, 10.676941871643066] - }, - { - "type": "C", - "params": [16.61012840270996, 10.582254409790039, 16.98224449157715, 10.210136413574219, 17.076932907104492, 9.734107971191406] - }, - { - "type": "C", - "params": [17.099990844726562, 9.618189811706543, 17.099990844726562, 9.478793144226074, 17.099990844726562, 9.200000762939453] - }, - { - "type": "L", - "params": [17.099990844726562, 1.4999998807907104] - }, - { - "type": "C", - "params": [17.099990844726562, 1.2212069034576416, 17.099990844726562, 1.0818103551864624, 17.076932907104492, 0.9658917188644409] - }, - { - "type": "C", - "params": [16.98224449157715, 0.48986291885375977, 16.61012840270996, 0.11774563789367676, 16.13409996032715, 0.02305765077471733] - }, - { - "type": "C", - "params": [16.01818084716797, 0, 15.8787841796875, 0, 15.599990844726562, 0] - }, - { - "type": "C", - "params": [15.321197509765625, 0, 15.181800842285156, 0, 15.065882682800293, 0.02305765077471733] - }, - { - "type": "C", - "params": [14.58985424041748, 0.11774563789367676, 14.21773624420166, 0.48986291885375977, 14.123048782348633, 0.9658917188644409] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [9.399993896484375, 3.9000015258789062] - }, - { - "type": "C", - "params": [9.399993896484375, 3.621208429336548, 9.399993896484375, 3.481812000274658, 9.423051834106445, 3.3658933639526367] - }, - { - "type": "C", - "params": [9.517739295959473, 2.889864444732666, 9.889857292175293, 2.517747163772583, 10.365885734558105, 2.4230592250823975] - }, - { - "type": "C", - "params": [10.481803894042969, 2.4000015258789062, 10.621200561523438, 2.4000015258789062, 10.899993896484375, 2.4000015258789062] - }, - { - "type": "C", - "params": [11.178787231445312, 2.4000015258789062, 11.318183898925781, 2.4000015258789062, 11.434102058410645, 2.4230592250823975] - }, - { - "type": "C", - "params": [11.910130500793457, 2.517747163772583, 12.282248497009277, 2.889864444732666, 12.376935958862305, 3.3658933639526367] - }, - { - "type": "C", - "params": [12.399993896484375, 3.481812000274658, 12.399993896484375, 3.621208429336548, 12.399993896484375, 3.900001287460327] - }, - { - "type": "L", - "params": [12.399993896484375, 9.200004577636719] - }, - { - "type": "C", - "params": [12.399993896484375, 9.478797912597656, 12.399993896484375, 9.618194580078125, 12.376935958862305, 9.734112739562988] - }, - { - "type": "C", - "params": [12.282248497009277, 10.2101411819458, 11.910130500793457, 10.582259178161621, 11.434102058410645, 10.676946640014648] - }, - { - "type": "C", - "params": [11.318183898925781, 10.700004577636719, 11.178787231445312, 10.700004577636719, 10.899993896484375, 10.700004577636719] - }, - { - "type": "C", - "params": [10.621200561523438, 10.700004577636719, 10.481803894042969, 10.700004577636719, 10.365885734558105, 10.676946640014648] - }, - { - "type": "C", - "params": [9.889857292175293, 10.582259178161621, 9.517739295959473, 10.2101411819458, 9.423051834106445, 9.734112739562988] - }, - { - "type": "C", - "params": [9.399993896484375, 9.618194580078125, 9.399993896484375, 9.478797912597656, 9.399993896484375, 9.200004577636719] - }, - { - "type": "L", - "params": [9.399993896484375, 3.9000015258789062] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [4.823045253753662, 5.665896415710449] - }, - { - "type": "C", - "params": [4.79998779296875, 5.781815052032471, 4.79998779296875, 5.9212117195129395, 4.79998779296875, 6.200004577636719] - }, - { - "type": "L", - "params": [4.79998779296875, 9.200004577636719] - }, - { - "type": "C", - "params": [4.79998779296875, 9.478797912597656, 4.79998779296875, 9.618194580078125, 4.823045253753662, 9.734112739562988] - }, - { - "type": "C", - "params": [4.917733192443848, 10.2101411819458, 5.28985071182251, 10.582259178161621, 5.7658796310424805, 10.676946640014648] - }, - { - "type": "C", - "params": [5.881798267364502, 10.700004577636719, 6.021194934844971, 10.700004577636719, 6.29998779296875, 10.700004577636719] - }, - { - "type": "C", - "params": [6.578780651092529, 10.700004577636719, 6.718177318572998, 10.700004577636719, 6.8340959548950195, 10.676946640014648] - }, - { - "type": "C", - "params": [7.31012487411499, 10.582259178161621, 7.682242393493652, 10.2101411819458, 7.776930332183838, 9.734112739562988] - }, - { - "type": "C", - "params": [7.79998779296875, 9.618194580078125, 7.79998779296875, 9.478797912597656, 7.79998779296875, 9.200004577636719] - }, - { - "type": "L", - "params": [7.79998779296875, 6.200004577636719] - }, - { - "type": "C", - "params": [7.79998779296875, 5.921211242675781, 7.79998779296875, 5.781815052032471, 7.776930332183838, 5.665896415710449] - }, - { - "type": "C", - "params": [7.682242393493652, 5.1898674964904785, 7.31012487411499, 4.817749977111816, 6.8340959548950195, 4.723062038421631] - }, - { - "type": "C", - "params": [6.718177318572998, 4.700004577636719, 6.578780651092529, 4.700004577636719, 6.29998779296875, 4.700004577636719] - }, - { - "type": "C", - "params": [6.021194934844971, 4.700004577636719, 5.881798267364502, 4.700004577636719, 5.7658796310424805, 4.723062038421631] - }, - { - "type": "C", - "params": [5.28985071182251, 4.817749977111816, 4.917733192443848, 5.1898674964904785, 4.823045253753662, 5.665896415710449] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [0.02305765077471733, 7.665896415710449] - }, - { - "type": "C", - "params": [0, 7.781815052032471, 0, 7.9212117195129395, 0, 8.200004577636719] - }, - { - "type": "L", - "params": [0, 9.200004577636719] - }, - { - "type": "C", - "params": [0, 9.478797912597656, 0, 9.618194580078125, 0.02305765077471733, 9.734112739562988] - }, - { - "type": "C", - "params": [0.11774563789367676, 10.2101411819458, 0.48986291885375977, 10.582259178161621, 0.9658917188644409, 10.676946640014648] - }, - { - "type": "C", - "params": [1.0818103551864624, 10.700004577636719, 1.2212069034576416, 10.700004577636719, 1.5, 10.700004577636719] - }, - { - "type": "C", - "params": [1.7787930965423584, 10.700004577636719, 1.9181896448135376, 10.700004577636719, 2.0341081619262695, 10.676946640014648] - }, - { - "type": "C", - "params": [2.5101370811462402, 10.582259178161621, 2.8822543621063232, 10.2101411819458, 2.976942300796509, 9.734112739562988] - }, - { - "type": "C", - "params": [3, 9.618194580078125, 3, 9.478797912597656, 3, 9.200004577636719] - }, - { - "type": "L", - "params": [3, 8.200004577636719] - }, - { - "type": "C", - "params": [3, 7.921211242675781, 3, 7.781815052032471, 2.976942300796509, 7.665896415710449] - }, - { - "type": "C", - "params": [2.8822543621063232, 7.1898674964904785, 2.5101370811462402, 6.817749977111816, 2.0341081619262695, 6.723062038421631] - }, - { - "type": "C", - "params": [1.9181896448135376, 6.700004577636719, 1.7787930965423584, 6.700004577636719, 1.5, 6.700004577636719] - }, - { - "type": "C", - "params": [1.2212069034576416, 6.700004577636719, 1.0818103551864624, 6.700004577636719, 0.9658917188644409, 6.723062038421631] - }, - { - "type": "C", - "params": [0.48986291885375977, 6.817749977111816, 0.11774563789367676, 7.1898674964904785, 0.02305765077471733, 7.665896415710449] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#000000", - "originX": 0, - "originY": 0, - "originW": 17.099990844726562, - "originH": 10.700004577636719 - }, - "operations": {} - }, - { - "uuid": "8d9962bf-8745-40ef-eed5-912ff2a980ab", - "name": "Wi-Fi", - "x": 315.6000061035156, - "y": 16.399999618530273, - "w": 15.399999618530273, - "h": 11.057209968566895, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [7.7004241943359375, 2.296360492706299] - }, - { - "type": "C", - "params": [9.934831619262695, 2.2964582443237305, 12.08380126953125, 3.1550111770629883, 13.703171730041504, 4.694569110870361] - }, - { - "type": "C", - "params": [13.825112342834473, 4.8134284019470215, 14.020017623901367, 4.811929225921631, 14.14012336730957, 4.691207408905029] - }, - { - "type": "L", - "params": [15.30578327178955, 3.514791965484619] - }, - { - "type": "C", - "params": [15.366597175598145, 3.453561544418335, 15.400498390197754, 3.3706233501434326, 15.399993896484375, 3.2843270301818848] - }, - { - "type": "C", - "params": [15.399489402770996, 3.1980319023132324, 15.36462116241455, 3.115494966506958, 15.303091049194336, 3.054981231689453] - }, - { - "type": "C", - "params": [11.052766799926758, -1.0183271169662476, 4.347395896911621, -1.0183271169662476, 0.09707161784172058, 3.054981231689453] - }, - { - "type": "C", - "params": [0.03550135716795921, 3.115450382232666, 0.0005718813044950366, 3.1979622840881348, 0.000007201545031421119, 3.284257411956787] - }, - { - "type": "C", - "params": [-0.0005675617721863091, 3.370553731918335, 0.03328297287225723, 3.453517198562622, 0.09404654800891876, 3.514791965484619] - }, - { - "type": "L", - "params": [1.260049819946289, 4.691207408905029] - }, - { - "type": "C", - "params": [1.3800644874572754, 4.8121113777160645, 1.5751309394836426, 4.81361198425293, 1.6970009803771973, 4.694569110870361] - }, - { - "type": "C", - "params": [3.316573143005371, 3.1549103260040283, 5.465795040130615, 2.2963552474975586, 7.7004241943359375, 2.296360492706299] - }, - { - "type": "L", - "params": [7.7004241943359375, 2.296360492706299] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [7.700424671173096, 6.123746871948242] - }, - { - "type": "C", - "params": [8.928089141845703, 6.123671054840088, 10.111939430236816, 6.579985618591309, 11.021951675415039, 7.404024124145508] - }, - { - "type": "C", - "params": [11.145031929016113, 7.520973205566406, 11.33891773223877, 7.518438339233398, 11.458902359008789, 7.398309707641602] - }, - { - "type": "L", - "params": [12.623222351074219, 6.221892833709717] - }, - { - "type": "C", - "params": [12.684530258178711, 6.160186767578125, 12.718552589416504, 6.07647705078125, 12.71767520904541, 5.989490985870361] - }, - { - "type": "C", - "params": [12.716787338256836, 5.902505397796631, 12.681071281433105, 5.819504261016846, 12.618513107299805, 5.75905704498291] - }, - { - "type": "C", - "params": [9.847347259521484, 3.181312322616577, 5.555840969085693, 3.181312322616577, 2.7846851348876953, 5.75905704498291] - }, - { - "type": "C", - "params": [2.7220864295959473, 5.819504261016846, 2.686370372772217, 5.902546405792236, 2.685553789138794, 5.989560604095459] - }, - { - "type": "C", - "params": [2.6847267150878906, 6.076573371887207, 2.718869686126709, 6.160276412963867, 2.780308961868286, 6.221892833709717] - }, - { - "type": "L", - "params": [3.9442954063415527, 7.398309707641602] - }, - { - "type": "C", - "params": [4.064269542694092, 7.518438339233398, 4.258166790008545, 7.520973205566406, 4.381246566772461, 7.404024124145508] - }, - { - "type": "C", - "params": [5.290653228759766, 6.580530166625977, 6.473567008972168, 6.124255180358887, 7.700424671173096, 6.123746871948242] - }, - { - "type": "L", - "params": [7.700424671173096, 6.123746871948242] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [9.937968254089355, 8.931347846984863] - }, - { - "type": "C", - "params": [10.00023365020752, 8.870235443115234, 10.034527778625488, 8.78613567352295, 10.032743453979492, 8.698905944824219] - }, - { - "type": "C", - "params": [10.03095817565918, 8.611676216125488, 9.993266105651855, 8.529047966003418, 9.928549766540527, 8.470528602600098] - }, - { - "type": "C", - "params": [8.64232063293457, 7.382628440856934, 6.758518218994141, 7.382628440856934, 5.472288608551025, 8.470528602600098] - }, - { - "type": "C", - "params": [5.40753173828125, 8.529001235961914, 5.369769096374512, 8.611603736877441, 5.367923736572266, 8.698833465576172] - }, - { - "type": "C", - "params": [5.3660783767700195, 8.786064147949219, 5.4003119468688965, 8.870189666748047, 5.46253776550293, 8.931347846984863] - }, - { - "type": "L", - "params": [7.476902008056641, 10.963858604431152] - }, - { - "type": "C", - "params": [7.535941123962402, 11.023592948913574, 7.616427898406982, 11.057209968566895, 7.7004241943359375, 11.057209968566895] - }, - { - "type": "C", - "params": [7.784409999847412, 11.057209968566895, 7.86489725112915, 11.023592948913574, 7.923936367034912, 10.963858604431152] - }, - { - "type": "L", - "params": [9.937968254089355, 8.931347846984863] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#000000", - "originX": 0, - "originY": 0, - "originW": 15.399999618530273, - "originH": 11.057209968566895 - }, - "operations": {} - }, - { - "uuid": "a29d297d-0874-9b14-c9af-c724ff1e2246", - "name": "↳ Time", - "x": 20, - "y": 13, - "w": 54, - "h": 18, - "angle": 0, - "type": "text", - "detail": { - "text": "9:41", - "fontFamily": "SF Pro Text", - "fontSize": 15, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "207d4b15-f0ee-545d-d687-17e99e1b467a", - "name": "Background", - "x": 1.8189894035458565e-12, - "y": 521, - "w": 375, - "h": 291, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [0, 0] - }, - { - "type": "L", - "params": [375, 0] - }, - { - "type": "L", - "params": [375, 291] - }, - { - "type": "L", - "params": [0, 291] - }, - { - "type": "L", - "params": [0, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#D2D5DBF0", - "originX": 0, - "originY": 0, - "originW": 375, - "originH": 291 - }, - "operations": {} - }, - { - "uuid": "f5242b34-617d-4dde-b7b6-25027eb25f88", - "name": "Background", - "x": 3, - "y": 690, - "w": 87.76533508300781, - "h": 42, - "angle": 0, - "type": "rect", - "detail": { - "background": "#C6CCD2", - "borderRadius": 5, - "borderDash": [], - "boxSizing": "center-line", - "opacity": 1, - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1 - }, - "operations": {} - }, - { - "uuid": "13820948-24f4-61c0-b5c9-18ec3e7e7403", - "name": "123", - "x": 32.892024993896484, - "y": 702, - "w": 27, - "h": 20, - "angle": 0, - "type": "text", - "detail": { - "text": "123", - "fontFamily": "SF Pro Text", - "fontSize": 16, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "f30f1e88-9734-932a-a4a3-6fce7c0cbc16", - "name": "Background", - "x": 95.74400329589844, - "y": 690, - "w": 184.5093536376953, - "h": 42, - "angle": 0, - "type": "rect", - "detail": { - "background": "#FFFFFF", - "borderRadius": 5, - "borderDash": [], - "boxSizing": "center-line", - "opacity": 1, - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1 - }, - "operations": {} - }, - { - "uuid": "dd9d168d-0dd7-fa2a-16b2-2e5243f896e0", - "name": "Space", - "x": 165.81333923339844, - "y": 701, - "w": 44.882659912109375, - "h": 20, - "angle": 0, - "type": "text", - "detail": { - "text": "space", - "fontFamily": "SF Pro Text", - "fontSize": 16, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "4a93b5b3-d34e-d26d-5c15-203c3c617d99", - "name": "Background", - "x": 285, - "y": 690, - "w": 87, - "h": 42, - "angle": 0, - "type": "rect", - "detail": { - "background": "#C6CCD2", - "borderRadius": 5, - "borderDash": [], - "boxSizing": "center-line", - "opacity": 1, - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1 - }, - "operations": {} - }, - { - "uuid": "8fa7da4e-47fd-a9b9-bede-33bc989b26a3", - "name": "↳ Label", - "x": 292.7593688964844, - "y": 701, - "w": 72, - "h": 20, - "angle": 0, - "type": "text", - "detail": { - "text": "Label", - "fontFamily": "SF Pro Text", - "fontSize": 16, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "99312bf6-865a-a260-a3d8-5e58f1d766db", - "name": "Emoji Glyph", - "x": 25, - "y": 761, - "w": 27, - "h": 27, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [27, 13.5] - }, - { - "type": "C", - "params": [27, 6.044156074523926, 20.95584487915039, 0, 13.5, 0] - }, - { - "type": "C", - "params": [6.044156074523926, 0, 0, 6.044156074523926, 0, 13.5] - }, - { - "type": "C", - "params": [0, 20.95584487915039, 6.044156074523926, 27, 13.5, 27] - }, - { - "type": "C", - "params": [20.95584487915039, 27, 27, 20.95584487915039, 27, 13.5] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [25.425899505615234, 13.500900268554688] - }, - { - "type": "C", - "params": [25.4263973236084, 6.913837909698486, 20.08706283569336, 1.573495626449585, 13.5, 1.5727499723434448] - }, - { - "type": "C", - "params": [10.336490631103516, 1.5724815130233765, 7.302452564239502, 2.8289694786071777, 5.065386772155762, 5.065782070159912] - }, - { - "type": "C", - "params": [2.8283209800720215, 7.3025946617126465, 1.5714895725250244, 10.3364896774292, 1.5714000463485718, 13.5] - }, - { - "type": "C", - "params": [1.5714000463485718, 20.08706283569336, 6.911137580871582, 25.427001953125, 13.498199462890625, 25.427249908447266] - }, - { - "type": "C", - "params": [20.085262298583984, 25.42749786376953, 25.425403594970703, 20.087963104248047, 25.425899505615234, 13.500900268554688] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [9.22927474975586, 7.644374847412109] - }, - { - "type": "C", - "params": [8.812005043029785, 7.639403343200684, 8.41016960144043, 7.8019700050354, 8.113734245300293, 8.095678329467773] - }, - { - "type": "C", - "params": [7.81729793548584, 8.389386177062988, 7.6510233879089355, 8.789702415466309, 7.652137756347656, 9.206999778747559] - }, - { - "type": "C", - "params": [7.652137756347656, 10.078028678894043, 8.358245849609375, 10.784137725830078, 9.22927474975586, 10.784137725830078] - }, - { - "type": "C", - "params": [10.100303649902344, 10.784137725830078, 10.806412696838379, 10.078028678894043, 10.806412696838379, 9.206999778747559] - }, - { - "type": "C", - "params": [10.807526588439941, 8.789702415466309, 10.641252517700195, 8.389386177062988, 10.344816207885742, 8.095678329467773] - }, - { - "type": "C", - "params": [10.048380851745605, 7.8019700050354, 9.646544456481934, 7.639403343200684, 9.22927474975586, 7.644374847412109] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [16.66383934020996, 8.095658302307129] - }, - { - "type": "C", - "params": [16.960329055786133, 7.801960468292236, 17.362197875976562, 7.639404296875, 17.779499053955078, 7.644374847412109] - }, - { - "type": "C", - "params": [18.196741104125977, 7.639495372772217, 18.59852409362793, 7.802091598510742, 18.894939422607422, 8.095780372619629] - }, - { - "type": "C", - "params": [19.191354751586914, 8.3894681930542, 19.35765838623047, 8.789730072021484, 19.35663604736328, 9.206999778747559] - }, - { - "type": "C", - "params": [19.364959716796875, 9.776016235351562, 19.066162109375, 10.30540657043457, 18.574718475341797, 10.592344284057617] - }, - { - "type": "C", - "params": [18.083276748657227, 10.879281997680664, 17.475383758544922, 10.879281997680664, 16.98394203186035, 10.592344284057617] - }, - { - "type": "C", - "params": [16.49250030517578, 10.30540657043457, 16.193700790405273, 9.776016235351562, 16.202024459838867, 9.206999778747559] - }, - { - "type": "C", - "params": [16.201000213623047, 8.789670944213867, 16.36734962463379, 8.38935661315918, 16.66383934020996, 8.095658302307129] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [22.496736526489258, 15.825374603271484] - }, - { - "type": "C", - "params": [21.777862548828125, 19.709999084472656, 18.028575897216797, 22.9533748626709, 13.498311996459961, 22.9533748626709] - }, - { - "type": "C", - "params": [9.004161834716797, 22.9533748626709, 5.276812553405762, 19.75724983215332, 4.515749931335449, 15.916500091552734] - }, - { - "type": "C", - "params": [4.361512184143066, 14.958000183105469, 5.1465373039245605, 14.731874465942383, 5.88599967956543, 14.910749435424805] - }, - { - "type": "C", - "params": [8.359728813171387, 15.62601375579834, 10.925119400024414, 15.973978996276855, 13.5, 15.943499565124512] - }, - { - "type": "C", - "params": [16.069059371948242, 15.973286628723145, 18.628620147705078, 15.626477241516113, 21.097124099731445, 14.914124488830566] - }, - { - "type": "C", - "params": [21.81599998474121, 14.731874465942383, 22.58583641052246, 14.937749862670898, 22.496736526489258, 15.825374603271484] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [20.02881622314453, 16.375595092773438] - }, - { - "type": "C", - "params": [20.037986755371094, 16.37228775024414, 20.047138214111328, 16.368886947631836, 20.0562744140625, 16.365373611450195] - }, - { - "type": "C", - "params": [21.304012298583984, 15.916499137878418, 21.15146255493164, 17.246248245239258, 20.37993621826172, 17.742374420166016] - }, - { - "type": "C", - "params": [18.749475479125977, 18.575998306274414, 16.2810001373291, 19.220624923706055, 13.510799407958984, 19.220624923706055] - }, - { - "type": "C", - "params": [11.18195915222168, 19.247617721557617, 8.87575626373291, 18.761348724365234, 6.756074905395508, 17.79637336730957] - }, - { - "type": "C", - "params": [5.927512168884277, 17.371124267578125, 5.701387405395508, 15.983999252319336, 6.880274772644043, 16.334999084472656] - }, - { - "type": "C", - "params": [8.506349563598633, 16.918874740600586, 10.869187355041504, 17.212499618530273, 13.511137008666992, 17.212499618530273] - }, - { - "type": "C", - "params": [15.712106704711914, 17.238019943237305, 17.90581512451172, 16.956317901611328, 20.02881622314453, 16.375595092773438] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [20.059860229492188, 16.367080688476562] - }, - { - "type": "C", - "params": [20.04313087463379, 16.372207641601562, 19.995996475219727, 16.387399673461914, 19.949907302856445, 16.40225601196289] - }, - { - "type": "C", - "params": [19.89385986328125, 16.420324325561523, 19.839359283447266, 16.43789291381836, 19.842975616455078, 16.436248779296875] - }, - { - "type": "C", - "params": [19.865192413330078, 16.42894744873047, 19.887344360351562, 16.421968460083008, 19.909421920776367, 16.41501235961914] - }, - { - "type": "C", - "params": [19.949485778808594, 16.40239143371582, 19.989303588867188, 16.389848709106445, 20.02881622314453, 16.375595092773438] - }, - { - "type": "C", - "params": [20.039167404174805, 16.37276268005371, 20.049510955810547, 16.36992645263672, 20.059860229492188, 16.367080688476562] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [20.059860229492188, 16.367080688476562] - }, - { - "type": "C", - "params": [20.064559936523438, 16.36564064025879, 20.06686019897461, 16.364994049072266, 20.066062927246094, 16.365373611450195] - }, - { - "type": "C", - "params": [20.063995361328125, 16.365942001342773, 20.061927795410156, 16.366512298583984, 20.059860229492188, 16.367080688476562] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#50555C", - "originX": 0, - "originY": 0, - "originW": 27, - "originH": 27 - }, - "operations": {} - }, - { - "uuid": "1781a8cd-468a-4115-75b6-6109a2983a71", - "name": "Dictation Glyph", - "x": 330, - "y": 762, - "w": 15, - "h": 25, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [11.99333381652832, 11.878632545471191] - }, - { - "type": "C", - "params": [11.99333381652832, 12.382018089294434, 11.99333381652832, 12.912074089050293, 11.966667175292969, 13.415459632873535] - }, - { - "type": "C", - "params": [11.946197509765625, 13.869404792785645, 11.876909255981445, 14.319826126098633, 11.760001182556152, 14.758933067321777] - }, - { - "type": "C", - "params": [11.49913215637207, 15.680591583251953, 10.942858695983887, 16.491077423095703, 10.176668167114258, 17.065839767456055] - }, - { - "type": "C", - "params": [8.605131149291992, 18.305910110473633, 6.388207912445068, 18.305910110473633, 4.8166704177856445, 17.065839767456055] - }, - { - "type": "C", - "params": [4.048486709594727, 16.492856979370117, 3.491525888442993, 15.681710243225098, 3.232671022415161, 14.758933067321777] - }, - { - "type": "C", - "params": [3.1152260303497314, 14.319950103759766, 3.0460386276245117, 13.869458198547363, 3.0263378620147705, 13.415459632873535] - }, - { - "type": "C", - "params": [2.999582529067993, 12.951037406921387, 2.999781370162964, 12.463913917541504, 2.9999725818634033, 11.995977401733398] - }, - { - "type": "L", - "params": [3.000004529953003, 11.878632545471191] - }, - { - "type": "L", - "params": [3.000004529953003, 7.664860725402832] - }, - { - "type": "L", - "params": [3.0004079341888428, 6.985935211181641] - }, - { - "type": "L", - "params": [3.00040864944458, 6.985437393188477] - }, - { - "type": "C", - "params": [3.0010342597961426, 6.134744644165039, 3.001974105834961, 4.85697078704834, 3.000004529953003, 4.58120584487915] - }, - { - "type": "C", - "params": [3.013178825378418, 4.124529838562012, 3.0917561054229736, 3.672102212905884, 3.233337640762329, 3.2377326488494873] - }, - { - "type": "C", - "params": [3.766977310180664, 1.323840618133545, 5.510300159454346, 0, 7.497002601623535, 0] - }, - { - "type": "C", - "params": [9.483705520629883, 0, 11.227028846740723, 1.323840618133545, 11.76066780090332, 3.2377326488494873] - }, - { - "type": "C", - "params": [11.885985374450684, 3.6759867668151855, 11.964204788208008, 4.126358509063721, 11.994000434875488, 4.58120584487915] - }, - { - "type": "C", - "params": [12.016161918640137, 4.953053951263428, 12.00558090209961, 6.185329437255859, 11.998538970947266, 7.005504131317139] - }, - { - "type": "L", - "params": [11.998538970947266, 7.005604267120361] - }, - { - "type": "C", - "params": [11.996047973632812, 7.295687675476074, 11.994000434875488, 7.534209251403809, 11.994000434875488, 7.664860725402832] - }, - { - "type": "L", - "params": [11.994000434875488, 11.878632545471191] - }, - { - "type": "L", - "params": [11.99333381652832, 11.878632545471191] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [11.466668128967285, 24.999345779418945] - }, - { - "type": "L", - "params": [11.466668128967285, 25] - }, - { - "type": "L", - "params": [3.5300042629241943, 25] - }, - { - "type": "L", - "params": [3.5300042629241943, 24.999469757080078] - }, - { - "type": "C", - "params": [3.520047664642334, 24.99982261657715, 3.5100467205047607, 25, 3.500004291534424, 25] - }, - { - "type": "C", - "params": [3.039767265319824, 25, 2.6666712760925293, 24.62686538696289, 2.6666712760925293, 24.166580200195312] - }, - { - "type": "C", - "params": [2.6666712760925293, 23.706295013427734, 3.039767265319824, 23.333160400390625, 3.500004291534424, 23.333160400390625] - }, - { - "type": "C", - "params": [3.5100467205047607, 23.333160400390625, 3.520047664642334, 23.333337783813477, 3.5300042629241943, 23.333690643310547] - }, - { - "type": "L", - "params": [3.5300042629241943, 23.323158264160156] - }, - { - "type": "L", - "params": [6.676669597625732, 23.323158264160156] - }, - { - "type": "L", - "params": [6.676669597625732, 20.789562225341797] - }, - { - "type": "C", - "params": [2.8672707080841064, 20.346805572509766, -0.004632009193301201, 17.1175479888916, 0.000005608663741440978, 13.282112121582031] - }, - { - "type": "C", - "params": [0.000005608663741440978, 13.262168884277344, 0.0016816698480397463, 13.24321174621582, 0.003317970549687743, 13.22470474243164] - }, - { - "type": "C", - "params": [0.004690391011536121, 13.209181785583496, 0.0060348412953317165, 13.193974494934082, 0.006338939536362886, 13.178768157958984] - }, - { - "type": "L", - "params": [0.006338939536362886, 11.268485069274902] - }, - { - "type": "C", - "params": [0.002158499788492918, 11.234651565551758, 0.000005608663741440978, 11.200189590454102, 0.000005608663741440978, 11.1652250289917] - }, - { - "type": "C", - "params": [0.000005608663741440978, 10.704939842224121, 0.37310150265693665, 10.331805229187012, 0.8333386182785034, 10.331805229187012] - }, - { - "type": "C", - "params": [1.2935757637023926, 10.331805229187012, 1.666671633720398, 10.704939842224121, 1.666671633720398, 11.1652250289917] - }, - { - "type": "C", - "params": [1.666671633720398, 11.19295597076416, 1.6653175354003906, 11.220369338989258, 1.662671685218811, 11.247405052185059] - }, - { - "type": "L", - "params": [1.662671685218811, 13.542140007019043] - }, - { - "type": "L", - "params": [1.6583383083343506, 13.542140007019043] - }, - { - "type": "L", - "params": [1.6583383083343506, 13.548807144165039] - }, - { - "type": "C", - "params": [1.6583383083343506, 13.564460754394531, 1.6594271659851074, 13.580114364624023, 1.6605160236358643, 13.595767974853516] - }, - { - "type": "C", - "params": [1.661514163017273, 13.61011791229248, 1.6625123023986816, 13.624466896057129, 1.662671685218811, 13.638816833496094] - }, - { - "type": "L", - "params": [1.662671685218811, 13.95218276977539] - }, - { - "type": "L", - "params": [1.6783382892608643, 13.95218276977539] - }, - { - "type": "C", - "params": [1.9260369539260864, 16.91619300842285, 4.3514204025268555, 19.22639274597168, 7.32366943359375, 19.329410552978516] - }, - { - "type": "L", - "params": [7.660336017608643, 19.329410552978516] - }, - { - "type": "C", - "params": [10.633536338806152, 19.228090286254883, 13.06025218963623, 16.91716766357422, 13.307000160217285, 13.95218276977539] - }, - { - "type": "L", - "params": [13.327000617980957, 13.95218276977539] - }, - { - "type": "L", - "params": [13.327000617980957, 11.175226211547852] - }, - { - "type": "L", - "params": [13.333392143249512, 11.175182342529297] - }, - { - "type": "L", - "params": [13.333333969116211, 11.1652250289917] - }, - { - "type": "C", - "params": [13.333333969116211, 10.704939842224121, 13.706429481506348, 10.331805229187012, 14.166666984558105, 10.331805229187012] - }, - { - "type": "C", - "params": [14.626904487609863, 10.331805229187012, 15, 10.704939842224121, 15, 11.1652250289917] - }, - { - "type": "C", - "params": [15, 11.189215660095215, 14.99898624420166, 11.212968826293945, 14.996999740600586, 11.236444473266602] - }, - { - "type": "L", - "params": [14.996999740600586, 13.282112121582031] - }, - { - "type": "L", - "params": [14.987000465393066, 13.282112121582031] - }, - { - "type": "L", - "params": [14.986666679382324, 13.282112121582031] - }, - { - "type": "C", - "params": [14.989282608032227, 17.110748291015625, 12.127965927124023, 20.336153030395508, 8.326668739318848, 20.789562225341797] - }, - { - "type": "L", - "params": [8.326668739318848, 23.323158264160156] - }, - { - "type": "L", - "params": [11.466668128967285, 23.323158264160156] - }, - { - "type": "L", - "params": [11.466668128967285, 23.33381462097168] - }, - { - "type": "C", - "params": [11.4777250289917, 23.3333797454834, 11.488837242126465, 23.333160400390625, 11.500000953674316, 23.333160400390625] - }, - { - "type": "C", - "params": [11.960238456726074, 23.333160400390625, 12.333333969116211, 23.706295013427734, 12.333333969116211, 24.166580200195312] - }, - { - "type": "C", - "params": [12.333333969116211, 24.62686538696289, 11.960238456726074, 25, 11.500000953674316, 25] - }, - { - "type": "C", - "params": [11.488837242126465, 25, 11.4777250289917, 24.999780654907227, 11.466668128967285, 24.999345779418945] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [10.335037231445312, 7.842906951904297] - }, - { - "type": "C", - "params": [10.331318855285645, 9.16012191772461, 10.326667785644531, 10.808087348937988, 10.326667785644531, 12.66538143157959] - }, - { - "type": "C", - "params": [10.326667785644531, 12.985414505004883, 10.320001602172852, 13.092093467712402, 10.30000114440918, 13.412126541137695] - }, - { - "type": "C", - "params": [10.288498878479004, 13.702738761901855, 10.244900703430176, 13.991188049316406, 10.170001983642578, 14.272215843200684] - }, - { - "type": "C", - "params": [10.010360717773438, 14.862264633178711, 9.662817001342773, 15.384218215942383, 9.180002212524414, 15.759037017822266] - }, - { - "type": "C", - "params": [8.190726280212402, 16.52801513671875, 6.805946350097656, 16.52801513671875, 5.8166704177856445, 15.759037017822266] - }, - { - "type": "C", - "params": [5.3319830894470215, 15.385318756103516, 4.9830756187438965, 14.86307430267334, 4.823337078094482, 14.272215843200684] - }, - { - "type": "C", - "params": [4.750053405761719, 13.990853309631348, 4.706481456756592, 13.702580451965332, 4.693337440490723, 13.412126541137695] - }, - { - "type": "C", - "params": [4.676670551300049, 13.092093467712402, 4.673336982727051, 12.985414505004883, 4.673336982727051, 12.66538143157959] - }, - { - "type": "C", - "params": [4.673336982727051, 11.134665489196777, 4.670953273773193, 9.74063491821289, 4.668929100036621, 8.556816101074219] - }, - { - "type": "C", - "params": [4.6650896072387695, 6.311642646789551, 4.662543296813965, 4.822580337524414, 4.680003643035889, 4.591207027435303] - }, - { - "type": "C", - "params": [4.699285984039307, 4.300482749938965, 4.747297763824463, 4.012381553649902, 4.823337078094482, 3.7311177253723145] - }, - { - "type": "C", - "params": [4.9830756187438965, 3.1402587890625, 5.3319830894470215, 2.618013858795166, 5.8166704177856445, 2.244295835494995] - }, - { - "type": "C", - "params": [6.805946350097656, 1.4753178358078003, 8.190726280212402, 1.4753178358078003, 9.180002212524414, 2.244295835494995] - }, - { - "type": "C", - "params": [9.662817001342773, 2.619114398956299, 10.010360717773438, 3.141068935394287, 10.170001983642578, 3.7311177253723145] - }, - { - "type": "C", - "params": [10.254679679870605, 4.011086463928223, 10.308335304260254, 4.299514293670654, 10.330001831054688, 4.591207027435303] - }, - { - "type": "C", - "params": [10.34359073638916, 4.812527656555176, 10.340221405029297, 6.006163597106934, 10.335037231445312, 7.842906951904297] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#50555C", - "originX": 0, - "originY": 0, - "originW": 15, - "originH": 25 - }, - "operations": {} - }, - { - "uuid": "4ccfad6a-5ec8-7409-d9d5-b9a412fcae4f", - "name": "Background", - "x": 340, - "y": 530, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "13b175d2-4955-6be6-a60d-f428e385548d", - "name": "Background", - "x": 303, - "y": 530, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "96f8d904-6c3a-e6f0-9de3-98a13b738aa4", - "name": "Background", - "x": 265, - "y": 530, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "0b6240f4-578b-9195-ddf8-c54810db2442", - "name": "Background", - "x": 228, - "y": 530, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "6fbb19a7-c950-17ac-d7b4-bb151aee52e6", - "name": "Background", - "x": 190, - "y": 530, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [6, 0] - }, - { - "type": "L", - "params": [27, 0] - }, - { - "type": "C", - "params": [29.22943115234375, 0, 30.979001998901367, 0.8858630061149597, 32, 2.408876895904541] - }, - { - "type": "L", - "params": [32, 40.591121673583984] - }, - { - "type": "C", - "params": [31.624698638916016, 41.15095520019531, 31.150955200195312, 41.624698638916016, 30.591121673583984, 42] - }, - { - "type": "L", - "params": [2.408876895904541, 42] - }, - { - "type": "C", - "params": [0.8858630061149597, 40.979000091552734, 0, 39.22943115234375, 0, 37] - }, - { - "type": "L", - "params": [0, 6] - }, - { - "type": "C", - "params": [0, 2.3606367111206055, 2.3606367111206055, 0, 6, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "b211f059-958c-5893-3fad-76f953f572ea", - "name": "Background", - "x": 153, - "y": 530, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "8b73fe5f-39f9-ae6c-e696-57fad39ff089", - "name": "Background", - "x": 115, - "y": 530, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "ee56b210-b790-cd3b-5fb5-ffa26814d67e", - "name": "Background", - "x": 78, - "y": 530, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "0ecb374e-7471-3c97-7c63-ef6dd82a1e66", - "name": "Background", - "x": 40, - "y": 530, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "b00ca319-1d09-090c-62fd-6db336a6472a", - "name": "Background", - "x": 3, - "y": 530, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "e557bc44-aa8f-4993-265d-dcc6315680ae", - "name": "P", - "x": 349, - "y": 537, - "w": 14, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "P", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "middle", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "b1dd7ad5-e389-b6d5-5886-9b3c758d2d8b", - "name": "O", - "x": 310.5, - "y": 537, - "w": 17, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "O", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "middle", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "db243554-178a-4aaa-3056-d6744efe0e76", - "name": "I", - "x": 278, - "y": 537, - "w": 6, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "I", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "middle", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "44629477-b80c-ceca-42cd-a5afb2490226", - "name": "U", - "x": 235.5, - "y": 537, - "w": 17, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "U", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "middle", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "0d29abb6-54a5-3714-9e8d-7872fe251a88", - "name": "Y", - "x": 198.5, - "y": 537, - "w": 15, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "Y", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "middle", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "f2af7336-1da8-6af1-2e3c-2513d49f9fe4", - "name": "T", - "x": 162, - "y": 537, - "w": 14, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "T", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "middle", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "924b86d3-d7c5-da21-f189-696c92502ae3", - "name": "R", - "x": 124, - "y": 537, - "w": 14, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "R", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "middle", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "67cd64fb-98c8-256f-bb35-8d61ca67dc54", - "name": "E", - "x": 87.5, - "y": 537, - "w": 13, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "E", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "middle", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "74f6648d-a2d3-db97-fc1c-574f5ca81147", - "name": "W", - "x": 45, - "y": 537, - "w": 22, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "W", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "middle", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "35e565a3-175d-76b9-5611-ad4edd334d9a", - "name": "Q", - "x": 10.5, - "y": 537, - "w": 17, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "Q", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "middle", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "e5d79070-db6f-a9de-fd32-c80c73d92c0c", - "name": "Background", - "x": 322, - "y": 584, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "9d3e2255-5cdd-0a79-9a6f-cfccf06f8cf4", - "name": "Background", - "x": 284, - "y": 584, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "221ffaa0-b535-5842-7660-880cc3da85fb", - "name": "Background", - "x": 247, - "y": 584, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "694f7d74-7343-2fa5-1430-2d5f4a989547", - "name": "Background", - "x": 209, - "y": 584, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "1079f552-85ca-9b66-75ae-1e39ed9e7e50", - "name": "Background", - "x": 172, - "y": 584, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "b5043fec-4336-f3fc-0052-da0891e7b869", - "name": "Background", - "x": 134, - "y": 584, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "eea4122b-b362-da10-a389-278756a1e01c", - "name": "Background", - "x": 96, - "y": 584, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "91b8e8d2-38ce-a693-5fbe-0c2128a473b3", - "name": "Background", - "x": 59, - "y": 584, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "8c97d67e-1169-d7e0-c997-601b2c9e59d8", - "name": "Background", - "x": 21, - "y": 584, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "287f636d-776f-d3a9-3e9f-32842db202fa", - "name": "L", - "x": 331.5, - "y": 591.25, - "w": 13, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "L", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "865edd9f-5f7f-bc4c-a2c6-cf4cbbb6af89", - "name": "K", - "x": 292.5, - "y": 591.25, - "w": 15, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "K", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "a6da7d44-121e-b344-3c31-9e89ebeb26f6", - "name": "J", - "x": 257, - "y": 591.25, - "w": 12, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "J", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "4b854841-ec78-3ba0-3526-dfbde71d2b12", - "name": "H", - "x": 216.5, - "y": 591.25, - "w": 17, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "H", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "96388615-4b30-37a6-5db5-39a5f6c4ae49", - "name": "G", - "x": 179.5, - "y": 591.25, - "w": 17, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "G", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "603f53df-51e9-22de-db83-d7399758aa34", - "name": "F", - "x": 143.5, - "y": 591.25, - "w": 13, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "F", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "18222866-f74e-2e46-cee6-6d16daba9f97", - "name": "D", - "x": 104, - "y": 591.25, - "w": 16, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "D", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "5a9cc0d1-2820-1404-d833-9a9381adf42f", - "name": "S", - "x": 68, - "y": 591.25, - "w": 14, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "S", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "32db60dd-8b71-954e-a5ae-5e762c302cbb", - "name": "A", - "x": 29.5, - "y": 591.25, - "w": 15, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "A", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#191919", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "eacbd5a1-273a-93da-13f7-339255950c15", - "name": "Background", - "x": 284, - "y": 638, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "2381f769-864f-9bda-e245-554082e08cc4", - "name": "Background", - "x": 247, - "y": 638, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "cc20577e-6ffd-700f-eb52-74367fdabca5", - "name": "Background", - "x": 209, - "y": 638, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "48c99e5e-416b-89b1-12b6-473f71035f51", - "name": "Background", - "x": 172, - "y": 638, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "8ca2f25c-1e11-67a2-8837-2035f2563be5", - "name": "Background", - "x": 134, - "y": 638, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "245d8ff8-d52f-6ac2-f462-e52156230e07", - "name": "Background", - "x": 97, - "y": 638, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "5d33514c-9471-cc36-8749-1ad6fa40c1ee", - "name": "Background", - "x": 59, - "y": 638, - "w": 32, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [26.5, 0] - }, - { - "type": "C", - "params": [29.836082458496094, 0, 32, 2.163916826248169, 32, 5.5] - }, - { - "type": "L", - "params": [32, 36.5] - }, - { - "type": "C", - "params": [32, 39.836082458496094, 29.836082458496094, 42, 26.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 32, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "7e879012-2c29-b3d2-8ebe-02f97d02103f", - "name": "Background", - "x": 3, - "y": 638, - "w": 41, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [35.5, 0] - }, - { - "type": "C", - "params": [38.836082458496094, 0, 41, 2.163916826248169, 41, 5.5] - }, - { - "type": "L", - "params": [41, 36.5] - }, - { - "type": "C", - "params": [41, 39.836082458496094, 38.836082458496094, 42, 35.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 41, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "22383bb7-53e7-0ee4-90c0-94399b0660ca", - "name": "Vector", - "x": 14, - "y": 651, - "w": 19.069454193115234, - "h": 16.087444305419922, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [10.239265441894531, 0.2926830053329468] - }, - { - "type": "C", - "params": [9.849772453308105, -0.09680959582328796, 9.219781875610352, -0.09831169247627258, 8.828786849975586, 0.2926830053329468] - }, - { - "type": "L", - "params": [0.45010271668434143, 8.671367645263672] - }, - { - "type": "C", - "params": [-0.3319747745990753, 9.453445434570312, -0.06771409511566162, 10.087444305419922, 1.0319384336471558, 10.087444305419922] - }, - { - "type": "L", - "params": [5.034025192260742, 10.087444305419922] - }, - { - "type": "L", - "params": [5.034025192260742, 15.09666633605957] - }, - { - "type": "C", - "params": [5.034025192260742, 15.643857955932617, 5.480337142944336, 16.087444305419922, 6.0315704345703125, 16.087444305419922] - }, - { - "type": "L", - "params": [13.036481857299805, 16.087444305419922] - }, - { - "type": "C", - "params": [13.587410926818848, 16.087444305419922, 14.034025192260742, 15.636468887329102, 14.034025192260742, 15.09666633605957] - }, - { - "type": "L", - "params": [14.034025192260742, 10.087444305419922] - }, - { - "type": "L", - "params": [18.03611183166504, 10.087444305419922] - }, - { - "type": "C", - "params": [19.139528274536133, 10.087444305419922, 19.400848388671875, 9.454268455505371, 18.617948532104492, 8.671367645263672] - }, - { - "type": "L", - "params": [10.239265441894531, 0.2926830053329468] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#000000", - "originX": 0, - "originY": 0, - "originW": 19.069454193115234, - "originH": 16.087444305419922 - }, - "operations": {} - }, - { - "uuid": "aff877fa-cc5f-c657-205a-de985f8257e5", - "name": "M", - "x": 290, - "y": 645.25, - "w": 20, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "M", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "43b6ca87-f867-967c-d96b-b55746c466b2", - "name": "N", - "x": 254.5, - "y": 645.25, - "w": 17, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "N", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "1a7a6dfe-fdd3-2285-5512-e774c594e7e6", - "name": "B", - "x": 218, - "y": 645.25, - "w": 14, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "B", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "30ab4638-3345-5c5a-4d4b-1e1de9ac6eeb", - "name": "V", - "x": 180.5500030517578, - "y": 645.25, - "w": 15, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "V", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "28aa6b80-1760-6e06-e6df-503a23cc6728", - "name": "C", - "x": 142, - "y": 645.25, - "w": 16, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "C", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "d28dd957-b10d-001d-9986-8ce2023b971a", - "name": "X", - "x": 105.5, - "y": 645.25, - "w": 15, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "X", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "1d07e615-12a5-0bc5-ec69-4fab05a00c42", - "name": "Z", - "x": 67.5, - "y": 645.25, - "w": 15, - "h": 28, - "angle": 0, - "type": "text", - "detail": { - "text": "Z", - "fontFamily": "SF Pro Display", - "fontSize": 23, - "textAlign": "center", - "verticalAlign": "top", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "ab67b482-2047-dd16-0d1f-632bf43563ae", - "name": "Background", - "x": 330, - "y": 638, - "w": 42, - "h": 42, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [5.5, 0] - }, - { - "type": "L", - "params": [36.5, 0] - }, - { - "type": "C", - "params": [39.836082458496094, 0, 42, 2.163916826248169, 42, 5.5] - }, - { - "type": "L", - "params": [42, 36.5] - }, - { - "type": "C", - "params": [42, 39.836082458496094, 39.836082458496094, 42, 36.5, 42] - }, - { - "type": "L", - "params": [5.5, 42] - }, - { - "type": "C", - "params": [2.163916826248169, 42, 0, 39.836082458496094, 0, 36.5] - }, - { - "type": "L", - "params": [0, 5.5] - }, - { - "type": "C", - "params": [0, 2.163916826248169, 2.163916826248169, 0, 5.5, 0] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#C6CCD2", - "shadowColor": "#00000059", - "shadowBlur": 0, - "shadowOffsetX": 0, - "shadowOffsetY": 1, - "originX": 0, - "originY": 0, - "originW": 42, - "originH": 42 - }, - "operations": {} - }, - { - "uuid": "bddd3bf5-cf21-a3e5-966e-2fc580c6d266", - "name": "Back", - "x": 340, - "y": 651, - "w": 22.87680435180664, - "h": 17, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [0.436149001121521, 9.559345245361328] - }, - { - "type": "C", - "params": [-0.14891082048416138, 8.974285125732422, -0.14184445142745972, 8.018648147583008, 0.436149001121521, 7.440654754638672] - }, - { - "type": "L", - "params": [7.166719913482666, 0.7100849151611328] - }, - { - "type": "C", - "params": [7.558889389038086, 0.3179156184196472, 8.325724601745605, 0, 8.884288787841797, 0] - }, - { - "type": "L", - "params": [19.378902435302734, 0] - }, - { - "type": "C", - "params": [21.310741424560547, 0, 22.87680435180664, 1.5688480138778687, 22.87680435180664, 3.501798629760742] - }, - { - "type": "L", - "params": [22.87680435180664, 13.498201370239258] - }, - { - "type": "C", - "params": [22.87680435180664, 15.432190895080566, 21.29989242553711, 17, 19.378902435302734, 17] - }, - { - "type": "L", - "params": [8.884288787841797, 17] - }, - { - "type": "C", - "params": [8.32787036895752, 17, 7.553974628448486, 16.677169799804688, 7.166719913482666, 16.289915084838867] - }, - { - "type": "L", - "params": [0.436149001121521, 9.559345245361328] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [15.019468307495117, 8.477689743041992] - }, - { - "type": "L", - "params": [17.843599319458008, 5.653558731079102] - }, - { - "type": "C", - "params": [18.13690948486328, 5.360247611999512, 18.14078712463379, 4.881495475769043, 17.8478946685791, 4.588602066040039] - }, - { - "type": "C", - "params": [17.552959442138672, 4.293666839599609, 17.078205108642578, 4.297631740570068, 16.782939910888672, 4.592897415161133] - }, - { - "type": "L", - "params": [13.958806991577148, 7.417030334472656] - }, - { - "type": "L", - "params": [11.134675979614258, 4.592897415161133] - }, - { - "type": "C", - "params": [10.841364860534668, 4.299586296081543, 10.3626127243042, 4.295708656311035, 10.069719314575195, 4.588602066040039] - }, - { - "type": "C", - "params": [9.774784088134766, 4.883537292480469, 9.778749465942383, 5.358293056488037, 10.074014663696289, 5.653558731079102] - }, - { - "type": "L", - "params": [12.898147583007812, 8.477689743041992] - }, - { - "type": "L", - "params": [10.074014663696289, 11.301822662353516] - }, - { - "type": "C", - "params": [9.7807035446167, 11.595133781433105, 9.776825904846191, 12.073884010314941, 10.069719314575195, 12.366777420043945] - }, - { - "type": "C", - "params": [10.364654541015625, 12.661712646484375, 10.839410781860352, 12.657747268676758, 11.134675979614258, 12.362482070922852] - }, - { - "type": "L", - "params": [13.958806991577148, 9.538351058959961] - }, - { - "type": "L", - "params": [16.782939910888672, 12.362482070922852] - }, - { - "type": "C", - "params": [17.076250076293945, 12.655793190002441, 17.555002212524414, 12.65967082977295, 17.8478946685791, 12.366777420043945] - }, - { - "type": "C", - "params": [18.14282989501953, 12.071842193603516, 18.138864517211914, 11.597087860107422, 17.843599319458008, 11.301822662353516] - }, - { - "type": "L", - "params": [15.019468307495117, 8.477689743041992] - }, - { - "type": "Z", - "params": [] - }, - { - "type": "M", - "params": [2.086524486541748, 9.209718704223633] - }, - { - "type": "C", - "params": [1.6945571899414062, 8.817750930786133, 1.695770025253296, 8.181035995483398, 2.086524486541748, 7.790281295776367] - }, - { - "type": "L", - "params": [8.020050048828125, 1.8567543029785156] - }, - { - "type": "C", - "params": [8.217080116271973, 1.6597241163253784, 8.602444648742676, 1.5, 8.870546340942383, 1.5] - }, - { - "type": "L", - "params": [19.37404441833496, 1.5] - }, - { - "type": "C", - "params": [20.480138778686523, 1.5, 21.37680435180664, 2.3970608711242676, 21.37680435180664, 3.505859375] - }, - { - "type": "L", - "params": [21.37680435180664, 13.494140625] - }, - { - "type": "C", - "params": [21.37680435180664, 14.601945877075195, 20.483261108398438, 15.5, 19.37404441833496, 15.5] - }, - { - "type": "L", - "params": [8.870546340942383, 15.5] - }, - { - "type": "C", - "params": [8.597860336303711, 15.5, 8.217448234558105, 15.340642929077148, 8.020050048828125, 15.143245697021484] - }, - { - "type": "L", - "params": [2.086524486541748, 9.209718704223633] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#000000", - "originX": 0, - "originY": 0, - "originW": 22.87680435180664, - "originH": 17 - }, - "operations": {} - }, - { - "uuid": "05c116aa-6bc8-1449-11e9-8dd1c5b72fb3", - "name": "Field", - "x": 47, - "y": 477, - "w": 316, - "h": 36, - "angle": 0, - "type": "rect", - "detail": { - "background": "#FAFAFA", - "borderRadius": 17, - "borderDash": [], - "boxSizing": "border-box", - "borderColor": "#0000000F", - "borderWidth": 1, - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "3800412c-b866-c233-3c14-5f74f4c4fb76", - "name": "Field", - "x": 47, - "y": 477, - "w": 316, - "h": 36, - "angle": 0, - "type": "rect", - "detail": { - "background": "#FAFAFA", - "borderRadius": 17, - "borderDash": [], - "boxSizing": "border-box", - "borderColor": "#0000000F", - "borderWidth": 1, - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "71b4b560-6b32-fe6c-612a-2da5609791a6", - "name": "↳ Text", - "x": 59, - "y": 483.99995040893555, - "w": 168, - "h": 22, - "angle": 0, - "type": "text", - "detail": { - "text": "Simple and easy to use", - "fontFamily": "SF Pro Text", - "fontSize": 17, - "textAlign": "left", - "verticalAlign": "middle", - "wordBreak": "normal", - "overflow": "visible", - "minInlineSize": "auto", - "lineHeight": 22, - "color": "#000000", - "opacity": 1 - }, - "operations": {} - }, - { - "uuid": "c1a1a33e-af9e-9111-1cba-bde7774df0e9", - "name": "Color", - "x": 322, - "y": 482, - "w": 26, - "h": 26, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [13, 26] - }, - { - "type": "C", - "params": [20.179500579833984, 26, 26, 20.179500579833984, 26, 13] - }, - { - "type": "C", - "params": [26, 5.820499897003174, 20.179500579833984, 0, 13, 0] - }, - { - "type": "C", - "params": [5.820499897003174, 0, 0, 5.820499897003174, 0, 13] - }, - { - "type": "C", - "params": [0, 20.179500579833984, 5.820499897003174, 26, 13, 26] - } - ], - "fillRule": "evenodd", - "fill": "#007AFF", - "originX": 0, - "originY": 0, - "originW": 26, - "originH": 26 - }, - "operations": {} - }, - { - "uuid": "211dab08-132f-5375-56e1-9a4d544f14b9", - "name": "Shape", - "x": 329.5, - "y": 488, - "w": 11, - "h": 14, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [10.7105131149292, 4.828426361083984] - }, - { - "type": "C", - "params": [10.7105131149292, 4.828426361083984, 6.276906490325928, 0.3843449354171753, 6.239840507507324, 0.3415846824645996] - }, - { - "type": "C", - "params": [6.059452056884766, 0.13275562226772308, 5.796034812927246, 0, 5.5, 0] - }, - { - "type": "C", - "params": [5.1916093826293945, 0, 4.918802261352539, 0.1446887105703354, 4.7384138107299805, 0.3689313530921936] - }, - { - "type": "C", - "params": [4.699864864349365, 0.41716092824935913, 0.28948667645454407, 4.828426361083984, 0.28948667645454407, 4.828426361083984] - }, - { - "type": "C", - "params": [-0.09649556875228882, 5.21674919128418, -0.09649556875228882, 5.846716403961182, 0.28948667645454407, 6.234541893005371] - }, - { - "type": "C", - "params": [0.675468921661377, 6.622864723205566, 1.3016399145126343, 6.622864723205566, 1.687127947807312, 6.234541893005371] - }, - { - "type": "L", - "params": [4.511569023132324, 3.39347243309021] - }, - { - "type": "L", - "params": [4.511569023132324, 13.000603675842285] - }, - { - "type": "C", - "params": [4.511569023132324, 13.552509307861328, 4.954386234283447, 14, 5.5, 14] - }, - { - "type": "C", - "params": [6.046108245849609, 14, 6.488430976867676, 13.552509307861328, 6.488430976867676, 13.000603675842285] - }, - { - "type": "L", - "params": [6.488430976867676, 3.39347243309021] - }, - { - "type": "L", - "params": [9.312871932983398, 6.234541893005371] - }, - { - "type": "C", - "params": [9.698360443115234, 6.622864723205566, 10.324530601501465, 6.622864723205566, 10.7105131149292, 6.234541893005371] - }, - { - "type": "C", - "params": [11.096495628356934, 5.846716403961182, 11.096495628356934, 5.21674919128418, 10.7105131149292, 4.828426361083984] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "originX": 0, - "originY": 0, - "originW": 11, - "originH": 14 - }, - "operations": {} - }, - { - "uuid": "4f663dea-2c70-1429-5a0b-a1a90236edbe", - "name": "Circle", - "x": 12, - "y": 482, - "w": 26, - "h": 26, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [13, 26] - }, - { - "type": "C", - "params": [20.179702758789062, 26, 26, 20.179702758789062, 26, 13] - }, - { - "type": "C", - "params": [26, 5.820298194885254, 20.179702758789062, 0, 13, 0] - }, - { - "type": "C", - "params": [5.820298194885254, 0, 0, 5.820298194885254, 0, 13] - }, - { - "type": "C", - "params": [0, 20.179702758789062, 5.820298194885254, 26, 13, 26] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#4CD964", - "originX": 0, - "originY": 0, - "originW": 26, - "originH": 26 - }, - "operations": {} - }, - { - "uuid": "8aa924be-7548-d5fb-2f0b-b42522b52e9d", - "name": "Plus", - "x": 17, - "y": 487, - "w": 16, - "h": 16, - "angle": 0, - "type": "path", - "detail": { - "commands": [ - { - "type": "M", - "params": [9, 7] - }, - { - "type": "L", - "params": [9, 1] - }, - { - "type": "C", - "params": [9, 0.44771522283554077, 8.552285194396973, 0, 8, 0] - }, - { - "type": "C", - "params": [7.4477152824401855, 0, 7, 0.44771522283554077, 7, 1] - }, - { - "type": "L", - "params": [7, 7] - }, - { - "type": "L", - "params": [1, 7] - }, - { - "type": "C", - "params": [0.44771525263786316, 7, 0, 7.4477152824401855, 0, 8] - }, - { - "type": "C", - "params": [0, 8.552285194396973, 0.44771525263786316, 9, 1, 9] - }, - { - "type": "L", - "params": [7, 9] - }, - { - "type": "L", - "params": [7, 15] - }, - { - "type": "C", - "params": [7, 15.552285194396973, 7.4477152824401855, 16, 8, 16] - }, - { - "type": "C", - "params": [8.552285194396973, 16, 9, 15.552285194396973, 9, 15] - }, - { - "type": "L", - "params": [9, 9] - }, - { - "type": "L", - "params": [15, 9] - }, - { - "type": "C", - "params": [15.552285194396973, 9, 16, 8.552285194396973, 16, 8] - }, - { - "type": "C", - "params": [16, 7.4477152824401855, 15.552285194396973, 7, 15, 7] - }, - { - "type": "L", - "params": [9, 7] - }, - { - "type": "Z", - "params": [] - } - ], - "fillRule": "evenodd", - "fill": "#FFFFFF", - "originX": 0, - "originY": 0, - "originW": 16, - "originH": 16, - "svg": "" - }, - "operations": {} - }, - { - "uuid": "b37cc467-c4f9-086a-aee1-7fd1190c640e", - "name": "Line", - "x": 120, - "y": 799, - "w": 135, - "h": 5, - "angle": 0, - "type": "rect", - "detail": { - "background": "#000000", - "borderRadius": 100, - "borderDash": [], - "boxSizing": "center-line", - "opacity": 1 - }, - "operations": {} - } - ], - "global": { - "background": "#323232" - } -} diff --git a/docs/en-US/api/add-element.html b/docs/en-US/api/add-element.html new file mode 100644 index 0000000..08be46f --- /dev/null +++ b/docs/en-US/api/add-element.html @@ -0,0 +1,48 @@ + + + + + + addElement | iDraw.js + + + + + + + + + + + + + +
Skip to content

addElement

Introduction

addElement Add elements to the drawing and trigger a rerender.

Arguments

  • {object} element More Element Infomation>> .

  • {object} { position?: number[] },Optional configuration, position element index position, for example [1, 2] means adding the element to the third position of the second element (must be of type Group).

Returns

  • {object}

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData({ elements: [] });
+
+idraw.addElement({
+  name: 'rect',
+  x: 140,
+  y: 120,
+  w: 200,
+  h: 100,
+  type: 'rect',
+  detail: {
+    background: '#f7d3c1',
+    borderRadius: 20,
+    borderWidth: 4,
+    borderColor: '#ff6032'
+  }
+});

Example

More Demo >>

+ + + + \ No newline at end of file diff --git a/docs/en-US/api/center-content.html b/docs/en-US/api/center-content.html new file mode 100644 index 0000000..70dfef1 --- /dev/null +++ b/docs/en-US/api/center-content.html @@ -0,0 +1,39 @@ + + + + + + centerContent | iDraw.js + + + + + + + + + + + + + +
Skip to content

centerContent

Introduction

centerContent Display the content in the center of the view. If the content size exceeds the view, the content will be proportionally reduced and centered in the view.

Arguments

  • {object} options
    • {Data} options.data Optionally, calculate new content data for centered dimensions.

Returns

N/A

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData({
+  element: [
+    /* ... */
+  ]
+});
+
+idraw.centerContent();

Example

More Demo

+ + + + \ No newline at end of file diff --git a/docs/en-US/api/delete-element.html b/docs/en-US/api/delete-element.html new file mode 100644 index 0000000..5e8f0f1 --- /dev/null +++ b/docs/en-US/api/delete-element.html @@ -0,0 +1,42 @@ + + + + + + deleteElement | iDraw.js + + + + + + + + + + + + + +
Skip to content

deleteElement

Introduction

addElement Delete elements to the drawing and trigger a rerender.

Arugments

  • {string} uuid

Returns

None

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+
+const uuid = idraw.getData().elements[0].uuid;
+
+idraw.deleteElement(uuid);

示例

Example

More Demo >>

+ + + + \ No newline at end of file diff --git a/docs/en-US/api/enable-disable.html b/docs/en-US/api/enable-disable.html new file mode 100644 index 0000000..1c4db00 --- /dev/null +++ b/docs/en-US/api/enable-disable.html @@ -0,0 +1,38 @@ + + + + + + enable/disable | iDraw.js + + + + + + + + + + + + + +
Skip to content

enable/disable

Introduction

  • enable(...) Turn on a feature
  • disable(...) Turn off a feature

Arguments

  • {IDrawFeature} feat Feature type
    • 'ruler': Ruler feature
    • 'scroll': Scroll feature
    • 'scale': Scale feature
    • 'info': Display information, eg. element size
    • - Other features are to be developed...
ts
type IDrawFeature = 'ruler' | 'scroll' | 'scale' | 'info'; // TODO other feature

Returns

N/A

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+idraw.disable('ruler');
+
+setTimeout(() => {
+  idraw.enable('ruler');
+}, 1000);

Example

More Demo >>

+ + + + \ No newline at end of file diff --git a/docs/en-US/api/get-data.html b/docs/en-US/api/get-data.html new file mode 100644 index 0000000..014cac2 --- /dev/null +++ b/docs/en-US/api/get-data.html @@ -0,0 +1,56 @@ + + + + + + getData | iDraw.js + + + + + + + + + + + + + +
Skip to content

getData

Introduction

getData The function can be used to get lastest Drawing-Data of Image;

Arguments

  • {object} options
    • {boolean} options.compact

Returns

  • {object} data Drawing-Data

Usage

js
import { iDraw } from 'idraw';
+
+const data = {
+  elements: [
+    {
+      name: 'rect',
+      x: 160,
+      y: 120,
+      w: 200,
+      h: 100,
+      angle: 30,
+      type: 'rect',
+      detail: {
+        background: '#d5f5f9',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+
+const resultData = idraw.getData();
+console.log(resultData);

Example

More Demo

+ + + + \ No newline at end of file diff --git a/docs/en-US/api/move-element.html b/docs/en-US/api/move-element.html new file mode 100644 index 0000000..012a864 --- /dev/null +++ b/docs/en-US/api/move-element.html @@ -0,0 +1,42 @@ + + + + + + moveElement | iDraw.js + + + + + + + + + + + + + +
Skip to content

moveElement

Introduction

moveElement deletes the corresponding element in the picture according to the uuid of the element and triggers re-rendering.

Arguments

  • {string} uuid
  • {number[]} position Moves the element to the specified index position. For example, [1, 2] means moving the element to the third position of the second element (must be of type Group).

Returns

N/A

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+
+const uuid = idraw.getData().elements[0].uuid;
+
+idraw.moveElement(uuid, { position: [1, 2] });

Example

More Demo

+ + + + \ No newline at end of file diff --git a/docs/en-US/api/resize.html b/docs/en-US/api/resize.html new file mode 100644 index 0000000..c7e7a86 --- /dev/null +++ b/docs/en-US/api/resize.html @@ -0,0 +1,43 @@ + + + + + + resize | iDraw.js + + + + + + + + + + + + + +
Skip to content

resize

Introduction

resize The drawing view size can be modified again

Arguments

  • {object} options
    • {number} options.width
    • {number} options.height
    • {number} options.devicePixelRatio

Returns

N/A

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData({
+  element: [
+    /* ... */
+  ]
+});
+
+idraw.resize({
+  width: 300,
+  height: 200,
+  devicePixelRatio: 2
+});

Example

More Demo

+ + + + \ No newline at end of file diff --git a/docs/en-US/api/select-element.html b/docs/en-US/api/select-element.html new file mode 100644 index 0000000..1df1e81 --- /dev/null +++ b/docs/en-US/api/select-element.html @@ -0,0 +1,41 @@ + + + + + + selectElement | iDraw.js + + + + + + + + + + + + + +
Skip to content

selectElement

Introduction

selectElement It receives a uuid of Element to select Element on Drawing-Image and then change the Element' status on Canvas.

Arguments

  • {string} uuid Element's uuid

Returns

None

Usage

js
import { iDraw } from 'idraw';
+
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+const resultData = idraw.getData();
+
+idraw.selectElement(resultData.elements[0].uuid);

Example

More Demo >>

+ + + + \ No newline at end of file diff --git a/docs/en-US/api/set-data.html b/docs/en-US/api/set-data.html new file mode 100644 index 0000000..2f3072e --- /dev/null +++ b/docs/en-US/api/set-data.html @@ -0,0 +1,52 @@ + + + + + + setData | iDraw.js + + + + + + + + + + + + + +
Skip to content

setData

Introduction

setData The function receives a Drawing-Data to set drawing content. After that, it will re-render image base on Drawing-Data.

Arguments

  • {object} data Drawing-Data

Returns

None

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+const data = {
+  elements: [
+    {
+      name: 'rect',
+      x: 160,
+      y: 120,
+      w: 200,
+      h: 100,
+      angle: 30,
+      type: 'rect',
+      detail: {
+        background: '#d5f5f9',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+idraw.setData(data);

Example

More Demo

+ + + + \ No newline at end of file diff --git a/docs/en-US/api/set-mode.html b/docs/en-US/api/set-mode.html new file mode 100644 index 0000000..b4b10f5 --- /dev/null +++ b/docs/en-US/api/set-mode.html @@ -0,0 +1,33 @@ + + + + + + setMode | iDraw.js + + + + + + + + + + + + + +
Skip to content

setMode

Introduction

setMode Can switch view operation mode

Arguments

  • {IDrawType} mode View operating mode
    • 'select': Selection mode, also the default mode, is used to select and edit elements
    • 'drag': Drag mode, used to drag and move the overall canvas position
    • 'readOnly': Read-only mode, only displays the view content and cannot be edited
ts
type IDrawMode = 'select' | 'drag' | 'readOnly';

Returns

N/A

Usage

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setMode('readOnly');

Example

More Demo >>

+ + + + \ No newline at end of file diff --git a/docs/en-US/api/update-element.html b/docs/en-US/api/update-element.html new file mode 100644 index 0000000..5363137 --- /dev/null +++ b/docs/en-US/api/update-element.html @@ -0,0 +1,45 @@ + + + + + + updateElement | iDraw.js + + + + + + + + + + + + + +
Skip to content

updateElement

Introduction

updateElement updates an element in the drawing and triggers a re-rendering.

Arguments

  • {object} element

Returns

N/A

Usage

js
import { iDraw } from 'idraw';
+
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+const resultData = idraw.getData();
+
+const elem = resultData.elements[0];
+
+elem.detail.color = '#f0f0f0';
+
+idraw.updateData(elem);

Example

More Demo >>

+ + + + \ No newline at end of file diff --git a/docs/en-US/element/circle.html b/docs/en-US/element/circle.html new file mode 100644 index 0000000..13377c1 --- /dev/null +++ b/docs/en-US/element/circle.html @@ -0,0 +1,56 @@ + + + + + + Circle | iDraw.js + + + + + + + + + + + + + +
Skip to content

Circle

Circle

It is used to render circular or oval content. The specific type is as follows:

ts
type Circle = {
+  type: 'circle';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    background: string;
+    borderRadius?: string;
+    borderWidth?: number;
+    borderColor?: number;
+  };
+};

Circle.detail

The basic attribute details of the element can be viewed Element's Detail # .

Circle.detail Data-Type

The Data-Type of Circle.detail

ts
type CircleDetail = {
+  background?: string;
+  background?: string;
+  borderWidth?: number;
+  borderColor?: string;
+};

Circle.detail Properties

PropertyDescriptionTypeDefaultRequiredOthers
colorCircle Colorstring-trueeg. #000000
borderRadiusCircle radius of border cornernumber0false-
borderWidthBorder width of Circlenumber0false-
borderColorBorder color of Circlenumber0falseeg. #000000

Circle.detail Properties

js
const elementCircle = {
+  name: 'circle',
+  x: 160,
+  y: 100,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'circle',
+  detail: {
+    background: '#d5f5f9',
+    borderRadius: 10,
+    borderWidth: 4,
+    borderColor: '#3f51b5'
+  }
+};

Demo Preview

More Demo >>

+ + + + \ No newline at end of file diff --git a/docs/en-US/element/group.html b/docs/en-US/element/group.html new file mode 100644 index 0000000..70fcc07 --- /dev/null +++ b/docs/en-US/element/group.html @@ -0,0 +1,55 @@ + + + + + + Group | iDraw.js + + + + + + + + + + + + + +
Skip to content

Group

Group

It is used to render group or oval content. The specific type is as follows:

ts
type Group = {
+  type: 'group';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    children: Element;
+    background: string;
+    borderRadius?: string;
+    borderWidth?: number;
+    borderColor?: number;
+  };
+};

Group.detail

The basic attribute details of the element can be viewed Element's Detail # .

Group.detail Data-Type

The Data-Type of Group.detail

ts
type GroupDetail = {
+  children: Array<Element>;
+  background?: string;
+  background?: string;
+  borderWidth?: number;
+  borderColor?: string;
+};

Group.detail Properties

PropertyDescriptionTypeDefaultRequiredOthers
childrenChildren element listArray<Element>-trueeg. #000000
backgroundGroup background colorstring-falseeg. #000000
borderRadiusGroup radius of border cornernumber0false-
borderWidthBorder width of Groupnumber0false-
borderColorBorder color of Groupnumber0falseeg. #000000

Complete Data Example

js
const elementGroup = {
+  name: 'group',
+  x: 160,
+  y: 120,
+  w: 200,
+  h: 100,
+  angle: 30,
+  type: 'group',
+  detail: {
+    children: []
+  }
+};

Demo Preview

More Demo >>

+ + + + \ No newline at end of file diff --git a/docs/en-US/element/html.html b/docs/en-US/element/html.html new file mode 100644 index 0000000..aca8a47 --- /dev/null +++ b/docs/en-US/element/html.html @@ -0,0 +1,92 @@ + + + + + + HTML | iDraw.js + + + + + + + + + + + + + +
Skip to content

HTML

HTML

It is used to render HTML code snippet. The specific type is as follows:

ts
type HTML = {
+  type: 'html';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    html: string;
+  };
+};

HTML.detail

The basic attribute details of the element can be viewed Element's Detail #.

HTML.detail Data-Type

The Data-Type of HTML.detail

ts
type HTMLDetail = {
+  html: string;
+};

HTML.detail Properties

PropertyDescriptionTypeDefaultRequiredOthers
htmlHTML code snippetstring-true-

Complete Data Example

js
const elementHTML = {
+  name: 'html',
+  x: 200,
+  y: 120,
+  w: 150,
+  h: 100,
+  type: 'html',
+  angle: 0,
+  detail: {
+    html: `
+      <style>
+      .btn-box {
+        margin: 10px 0;
+      }
+      .btn {
+        line-height: 1.5715;
+        position: relative;
+        display: inline-block;
+        font-weight: 400;
+        white-space: nowrap;
+        text-align: center;
+        background-image: none;
+        border: 1px solid transparent;
+        box-shadow: 0 2px #00000004;
+        cursor: pointer;
+        user-select: none;
+        height: 32px;
+        padding: 4px 15px;
+        font-size: 14px;
+        border-radius: 2px;
+        color: #000000d9;
+        background: #fff;
+        border-color: #d9d9d9;
+      }
+      .btn-primary {
+        color: #fff;
+        background: #1890ff;
+        border-color: #1890ff;
+        text-shadow: 0 -1px 0 rgb(0 0 0 / 12%);
+        box-shadow: 0 2px #0000000b;
+      }
+      </style>
+      <div>
+        <div class="btn-box">
+          <button class="btn">
+            <span>Button</span>
+          </button>
+        </div>
+        <div class="btn-box">
+          <button class="btn btn-primary">
+            <span>Button Primary</span>
+          </button> 
+        </div>
+      </div>
+    `
+  }
+};

Demo Preview

More Demo >>

+ + + + \ No newline at end of file diff --git a/docs/en-US/element/image.html b/docs/en-US/element/image.html new file mode 100644 index 0000000..b741dd8 --- /dev/null +++ b/docs/en-US/element/image.html @@ -0,0 +1,47 @@ + + + + + + Image | iDraw.js + + + + + + + + + + + + + +
Skip to content

Image

Image

It is used to render image content. The specific type is as follows:

ts
type Image = {
+  type: 'image';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    src: string;
+  };
+};

Image.detail

The basic attribute details of the element can be viewed Element's Detail # .

Image.detail Data-Type

The Data-Type of Image.detail

ts
type ImageDetail = {
+  src: string;
+};

Image.detail Properties

PropertyDescriptionTypeDefaultRequiredOthers
srcThe image URL or DataURLstring-true-

Complete Data Example

js
const elementImage = {
+  name: 'image',
+  x: 160,
+  y: 100,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'image',
+  detail: {
+    src: './image/github.png'
+  }
+};

Demo Preview

More Demo >>

+ + + + \ No newline at end of file diff --git a/docs/en-US/element/info.html b/docs/en-US/element/info.html new file mode 100644 index 0000000..cfce597 --- /dev/null +++ b/docs/en-US/element/info.html @@ -0,0 +1,74 @@ + + + + + + Element Information | iDraw.js + + + + + + + + + + + + + +
Skip to content

Element Information

What is iDraw.js's Element

The content of drawing is based on "Element" in iDraw.js. Further more, the process of drawing is basically to realize the function of drawing around the layout, style, content and other attributes of controlling elements.

There eight types of elements are currently supported in iDraw.js :

  1. Text
  2. Rect
  3. Circle
  4. Image
  5. SVG
  6. HTML
  7. Path
  8. Group

Element's Detail

Element Basic Content

tsx
type Element = {
+  type: 'text' | 'rect' | 'circle' | 'image' | 'svg' | 'html' | 'path' | 'group';
+  uuid: string;
+  name?: string;
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle?: number;
+  detail: any; // Different element has different description
+  operations?: {
+    lock?: boolean;
+    invisible?: boolean;
+    limitRatio?: boolean;
+  };
+  extension?: { [key: string]: any } | any;
+};

Element Basic Properties

PropertyDescriptionTypeDefaultRequiredOthers
typeElement typetext| rect| circle| image| svg | html-true-
uuidElement unique IDstring-falseThe UUID is automatically added internally in iDraw.js
nameElement namestring-false-
xX-axis offsetnumber-true-
yY-axis offsetnumber-true-
wElement widthnumber-true-
hElement heightnumber-true-
angleElement rotation anglenumber0false[0, 360]
lockSet the lock-staus of elementbooleanfalsefalseThe view operation cannot be controlled after the element is locked
detailDetail of different elementsobject (Please check the description of each element for details)-true-
operation.lockSet the lock-staus of elementbooleanfalsefalseThe view operation cannot be controlled after the element is locked
operation.invisible-booleanfalsefalse-
operation.limitRatioLimit element width and height ratioboolean-falseWhen the element is scaled, it is scaled according to its width and height ratio

Usage of Elements

js
import { iDraw } from 'idraw';
+
+import { iDraw } from 'idraw';
+const data = {
+  elements: [
+    {
+      type: 'text',
+      name: 'rect-001',
+      x: 50,
+      y: 50,
+      w: 200,
+      h: 200,
+      angle: 0,
+      detail: {
+        text: 'Hello World',
+        color: '#3f51b5',
+        fontSize: 60,
+        textAlign: 'center',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const idraw = new iDraw(app, {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+});
+
+// Set drawing-data for rendering view
+idraw.setData(data);

Demo Preview

More Demo >>

+ + + + \ No newline at end of file diff --git a/docs/en-US/element/path.html b/docs/en-US/element/path.html new file mode 100644 index 0000000..45ad1a5 --- /dev/null +++ b/docs/en-US/element/path.html @@ -0,0 +1,83 @@ + + + + + + Path | iDraw.js + + + + + + + + + + + + + +
Skip to content

Path

Path

It is used to render image content. The specific type is as follows:

ts
type Path = {
+  type: 'path';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    commands: Array<{
+      type: 'M' | 'm' | 'L' | 'l' | 'H' | 'h' | 'V' | 'v' | 'C' | 'c' | 'S' | 's' | 'Q' | 'q' | 'T' | 't' | 'A' | 'a' | 'Z' | 'z';
+      params: number[];
+    }>;
+    originX: number;
+    originY: number;
+    originW: number;
+    originH: number;
+    fill?: string;
+    stroke?: string;
+    strokeWidth?: number;
+    strokeLineCap?: 'butt' | 'round' | 'square';
+  };
+};

Path.detail Properties

The basic attribute details of the element can be viewed Element's Detail # .

Path.detail Data-Type

ts
type PathDetail = {
+  commands: Array<{
+    type: 'M' | 'm' | 'L' | 'l' | 'H' | 'h' | 'V' | 'v' | 'C' | 'c' | 'S' | 's' | 'Q' | 'q' | 'T' | 't' | 'A' | 'a' | 'Z' | 'z';
+    params: number[];
+  }>;
+  originX: number;
+  originY: number;
+  originW: number;
+  originH: number;
+  fill?: string;
+  stroke?: string;
+  strokeWidth?: number;
+  strokeLineCap?: 'butt' | 'round' | 'square';
+};

Path.detail Properties

PropertyDescriptionTypeDefaultRequiredOthers
fillfill colorstring-trueeg. #000000
strokepath colorstring-trueeg. #000000
strokeWidthpath widthnumber0false-
strokeLineCapPath turning type'butt' | 'round' | 'square'-true-
originXPath original X positionnumber0false-
originYPath original Y positionnumber0false-
originWPath original widthnumber0false-
originHPath original heightnumber0false-

Complete Data Example

js
const elementPath = {
+  uuid: '41d437b8-afbd-2d3d-14bc-912e26d3491f',
+  x: 100,
+  y: 100,
+  w: 80,
+  h: 80,
+  angle: 0,
+  type: 'path',
+  detail: {
+    commands: [
+      { type: 'M', params: [10, 30] },
+      { type: 'A', params: [20, 20, 0, 0, 1, 50, 30] },
+      { type: 'A', params: [20, 20, 0, 0, 1, 90, 30] },
+      { type: 'Q', params: [90, 60, 50, 90] },
+      { type: 'Q', params: [10, 60, 10, 30] },
+      { type: 'z', params: [] }
+    ],
+    fill: '#FF00006F',
+    stroke: '#000000',
+    strokeWidth: 1,
+    originX: 10,
+    originY: 10,
+    originH: 80,
+    originW: 80
+  }
+};

Demo Preview

More Demo >>

+ + + + \ No newline at end of file diff --git a/docs/en-US/element/rect.html b/docs/en-US/element/rect.html new file mode 100644 index 0000000..0a96acc --- /dev/null +++ b/docs/en-US/element/rect.html @@ -0,0 +1,56 @@ + + + + + + 矩形元素 | iDraw.js + + + + + + + + + + + + + +
Skip to content

矩形元素

Rectangle

It is used to render rectangle content. The specific type is as follows:

ts
type Rect = {
+  type: 'rect';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    background: string;
+    borderRadius?: string;
+    borderWidth?: number;
+    borderColor?: number;
+  };
+};

Rect.detail

The basic attribute details of the element can be viewed Element's Detail # .

Rect.detail Data-Type

The Data-Type of Rect.detail

ts
type RectDetail = {
+  background?: string;
+  background?: string;
+  borderWidth?: number;
+  borderColor?: string;
+};

Rect.detail Properties

PropertyDescriptionTypeDefaultRequiredOthers
colorRectangle colorstring-trueeg. #000000
backgroundRectangle background colorstring-trueeg. #000000
borderRadiusRectangle radius of border cornernumber0false-
borderWidthBorder width of Rectanglenumber0false-
borderColorBorder color of Rectanglestring-falseeg. #000000

Complete Data Example

js
const elementRect = {
+  name: 'rect',
+  x: 160,
+  y: 120,
+  w: 200,
+  h: 100,
+  angle: 30,
+  type: 'rect',
+  detail: {
+    background: '#d5f5f9',
+    borderRadius: 10,
+    borderWidth: 2,
+    borderColor: '#3f51b5'
+  }
+};

Demo Preview

More Demo >>

+ + + + \ No newline at end of file diff --git a/docs/en-US/element/svg.html b/docs/en-US/element/svg.html new file mode 100644 index 0000000..66887fb --- /dev/null +++ b/docs/en-US/element/svg.html @@ -0,0 +1,47 @@ + + + + + + SVG | iDraw.js + + + + + + + + + + + + + +
Skip to content

SVG

SVG

It is used to render SVG code snippet. The specific type is as follows:

ts
type SVG = {
+  type: 'svg';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    svg: string;
+  };
+};

SVG.detail

The basic attribute details of the element can be viewed Element's Detail #.

SVG.detail Data-Type

The Data-Type of SVG.detail

ts
type SVGDetail = {
+  svg: string;
+};

SVG.detail 数据属性内容

PropertyDescriptionTypeDefaultRequiredOthers
svgHTML code snippetstring-true-

完整数据示例

js
const elementSVG = {
+  name: 'svg',
+  x: 160,
+  y: 100,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'svg',
+  detail: {
+    svg: `<svg  viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"  width="400" height="400"><path d="M512 1013.76c-277.11488 0-501.76-224.64512-501.76-501.76S234.88512 10.24 512 10.24s501.76 224.64512 501.76 501.76-224.64512 501.76-501.76 501.76z m0-51.02592c248.9344 0 450.73408-201.79968 450.73408-450.73408 0-248.9344-201.79968-450.73408-450.73408-450.73408-248.9344 0-450.73408 201.79968-450.73408 450.73408 0 248.9344 201.79968 450.73408 450.73408 450.73408zM456.9856 637.9008l295.45984-339.94752a26.4192 26.4192 0 0 1 37.59616-2.31936 28.32896 28.32896 0 0 1 3.10784 38.8608l-307.01568 380.38016a30.72 30.72 0 0 1-42.90048 4.84864L235.44832 556.2368a32.128 32.128 0 0 1-5.74976-44.6464 32.1536 32.1536 0 0 1 44.544-6.58944l182.74304 132.90496z" fill="#1890ff"></path></svg>`
+  }
+};

Demo Preview

More Demo >>

+ + + + \ No newline at end of file diff --git a/docs/en-US/element/text.html b/docs/en-US/element/text.html new file mode 100644 index 0000000..81b695d --- /dev/null +++ b/docs/en-US/element/text.html @@ -0,0 +1,64 @@ + + + + + + Text | iDraw.js + + + + + + + + + + + + + +
Skip to content

Text

Text

It is used to render text content. The specific type is as follows:

ts
type Text = {
+  type: 'text';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    text: string;
+    color?: string;
+    fontSize?: string;
+    fontFamily?: string;
+    textAlign?: 'left' | 'center' | 'right';
+};

Text.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

Text.detail 数据格式

Text元素的detail属性

ts
type TextDetail = {
+  text: string;
+  color?: string;
+  fontSize?: number;
+  lineHeight?: number;
+  fontWeight?: 'bold' | string | number;
+  fontFamily?: string;
+  textAlign?: 'center' | 'left' | 'right';
+  verticalAlign?: 'middle' | 'top' | 'bottom';
+};

Text.detail Properties

PropertyDescriptionTypeDefaultRequiredOthers
textText Contentstring-true-
colorFont color of Textstring-trueeg. #000000
fontSizeFont size of Textnumber12false-
lineHeightLine height of Textnumber-false-
fontWeightFont boldnumber-false-
fontFamilyFont family of Textstring-false-
textAlignText align'left' | 'center' | 'right''left'false-
verticalAlignVertical Align'top' | 'middle' | 'bottom''top'false-

Complete Data Example

js
const elementText = {
+  name: 'text',
+  x: 160,
+  y: 80,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'text',
+  detail: {
+    text: 'Hello World',
+    color: '#3f51b5',
+    fontSize: 60,
+    textAlign: 'center',
+    background: '#3f51b51f',
+    borderRadius: 10,
+    borderWidth: 2,
+    borderColor: '#3f51b5'
+  }
+};

Demo Preview

More Demo

+ + + + \ No newline at end of file diff --git a/docs/en-US/guide/class-idraw.html b/docs/en-US/guide/class-idraw.html new file mode 100644 index 0000000..067f102 --- /dev/null +++ b/docs/en-US/guide/class-idraw.html @@ -0,0 +1,36 @@ + + + + + + Class iDraw | iDraw.js + + + + + + + + + + + + + +
Skip to content

Class iDraw

Arguments

js
import { iDraw } from 'idraw';
+const dom = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+
+const idraw = new iDraw(dom, options);
ArugmentDescriptionTypeDefaultRequiredOthers
domCanvas mounted DOMHTMLDivElement-true-
optionsImage rendering options[Object]-true-

Options

ts
type Options = {
+  width: number;
+  height: number;
+  devicePixelRatio: number;
+};

Options Properties

PropertyDescriptionTypeDefaultRequiredOthers
widthDrawing board's widthnumber-true-
heightDrawing board's heightnumber-true-
devicePixelRatioDevice pixel scalenumber1false-

Options Preivew

More Demo >>

+ + + + \ No newline at end of file diff --git a/docs/en-US/guide/installation.html b/docs/en-US/guide/installation.html new file mode 100644 index 0000000..e04f024 --- /dev/null +++ b/docs/en-US/guide/installation.html @@ -0,0 +1,35 @@ + + + + + + Installation | iDraw.js + + + + + + + + + + + + + +
Skip to content

Installation

Lastest Version

iDraw.js

Installation

There are three ways of adding iDraw.js to a project:

  1. Install it using NPM.
  2. Import it as a CDN Package on the page.
  3. Download the JavaScript file and host them yourself.

NPM

NPM is the recommended installation method when building large scale with iDraw.js. It pairs nicely with module bundlers such as Webpack, Rollup or Vite.

sh
npm install idraw

CDN

For prototyping or learning purposes, you can use the latest version with:

html
<script src="https://unpkg.com/idraw"></script>
html
<!-- use global value -->
+<script>
+  (function () {
+    const { iDraw } = window.iDraw;
+    const app = document.querySelector('#app');
+    const idraw = new iDraw(app, {
+      width: 600,
+      height: 400,
+      devicePixelRatio: 2
+    });
+  })();
+</script>

Download and Self Host

If you want to avoid using build tools but can't use CDN in production then you can download the relevant .js file and host it using your own web server. You can include it using a <script> tag, just like with the CDN approach.

The files can be browsed and download from a CDN such as unpkg .

+ + + + \ No newline at end of file diff --git a/docs/en-US/guide/introduction.html b/docs/en-US/guide/introduction.html new file mode 100644 index 0000000..4162905 --- /dev/null +++ b/docs/en-US/guide/introduction.html @@ -0,0 +1,53 @@ + + + + + + Introduction | iDraw.js + + + + + + + + + + + + + +
Skip to content

Introduction

What is iDraw.js

iDraw.js is a JavaScript framework for drawing on web. It is based on the Canvas API in the browser.

It can be data-driven to render Image on Canvas in the browser. Furthermore, it can also visually handle the position, shape and layout of Drawing-Element.

iDraw.js is open source based on MIT License and it's code is stored in GitHub and NPM So that you can use iDraw.js for free in your own projects.

Getting started

sh
npm install idraw
js
import { iDraw } from 'idraw';
+const data = {
+  elements: [
+    {
+      name: 'rect-001',
+      x: 160,
+      y: 80,
+      w: 200,
+      h: 200,
+      type: 'text',
+      detail: {
+        text: 'Hello World',
+        color: '#3f51b5',
+        fontSize: 60,
+        textAlign: 'center',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const idraw = new iDraw(app, {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+});
+idraw.setData(data);
+ + + + \ No newline at end of file diff --git a/docs/en-US/guide/quickstart.html b/docs/en-US/guide/quickstart.html new file mode 100644 index 0000000..aef2022 --- /dev/null +++ b/docs/en-US/guide/quickstart.html @@ -0,0 +1,53 @@ + + + + + + Quick Start | iDraw.js + + + + + + + + + + + + + +
Skip to content

Quick Start

The First Example

It is a simple example of iDraw.js that drawing a rotating rectangle.

Install NPM Module

sh
npm install idraw

Mounted DOM

html
<div id="app"></div>

Use iDraw.js

js
import { iDraw } from 'idraw';
+const data = {
+  elements: [
+    {
+      name: 'rect-001',
+      x: 160,
+      y: 120,
+      w: 200,
+      h: 100,
+      angle: 30,
+      type: 'rect',
+      detail: {
+        background: '#d5f5f9',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const idraw = new iDraw(app, {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+});
+
+// Setting data
+idraw.setData(data);

Now, we can start the tutorials for using iDraw.js. O(∩_∩)O~

+ + + + \ No newline at end of file diff --git a/docs/en-US/index.html b/docs/en-US/index.html new file mode 100644 index 0000000..c73f8f2 --- /dev/null +++ b/docs/en-US/index.html @@ -0,0 +1,24 @@ + + + + + + iDraw.js + + + + + + + + + + + + + +
Skip to content

iDraw.js

Drawing easier on the web.

A simple JavaScript framework for Drawing on the web.

+ + + + \ No newline at end of file diff --git a/docs/en-US/sponsor.html b/docs/en-US/sponsor.html new file mode 100644 index 0000000..ea537e3 --- /dev/null +++ b/docs/en-US/sponsor.html @@ -0,0 +1,24 @@ + + + + + + Become an iDraw.js Sponsor | iDraw.js + + + + + + + + + + + + + +
Skip to content

Become an iDraw.js Sponsor

iDraw.js is an MIT licensed open source project and completely free to use. The tremendous amount of effort needed to maintain this framework and develop new features for the project is only made sustainable thanks to the generous financial backing of our sponsors.

How to Sponsor

Sponsorships can be done via OpenCollective (https://opencollective.com/idrawjs). Both monthly-recurring sponsorships and one-time donations are accepted. Recurring sponsorships are entitled to logo placements as specified in Sponsorship Tiers.

+ + + + \ No newline at end of file diff --git a/docs/hashmap.json b/docs/hashmap.json new file mode 100644 index 0000000..5dd4096 --- /dev/null +++ b/docs/hashmap.json @@ -0,0 +1 @@ +{"en-us_api_delete-element.md":"5FA1Myw8","en-us_api_center-content.md":"HDti-yp1","en-us_api_add-element.md":"CSft2v_9","en-us_api_resize.md":"Us45idBF","en-us_api_enable-disable.md":"Xl16Owsf","en-us_api_get-data.md":"zaCOgLDU","en-us_api_select-element.md":"M70Ah2tn","en-us_api_move-element.md":"erz1dvw_","en-us_element_circle.md":"9LkWREaD","en-us_api_set-data.md":"ZwngY3kQ","en-us_api_update-element.md":"-iahCtBO","en-us_api_set-mode.md":"wBD5SPSr","en-us_element_html.md":"tsHVUPVh","en-us_element_group.md":"yL0oQCBe","en-us_element_info.md":"xj25PwHX","en-us_element_image.md":"EjC1u2Xj","en-us_element_rect.md":"jl7sqBwM","en-us_element_path.md":"Hel0-4hv","en-us_element_svg.md":"yAlcGznY","en-us_guide_class-idraw.md":"NV45iEKs","en-us_element_text.md":"9k45uKEt","en-us_guide_installation.md":"LCva9Prm","en-us_index.md":"WN7UD5Qv","en-us_sponsor.md":"OjMNo1xz","index.md":"bWcwn8Hi","en-us_guide_introduction.md":"oAtGMDCn","en-us_guide_quickstart.md":"j-SOaCU1","zh-cn_api_add-element.md":"cWrK0KKU","zh-cn_api_center-content.md":"6gCUd5A0","zh-cn_api_delete-element.md":"j4QWtj8O","zh-cn_api_enable-disable.md":"ATviRUQS","zh-cn_api_get-data.md":"_9ZhWQCT","zh-cn_api_move-element.md":"z-cVejVv","zh-cn_api_resize.md":"aecMZXgm","zh-cn_api_select-element.md":"9SmQXMXH","zh-cn_api_set-data.md":"j0eTmWAp","zh-cn_api_set-mode.md":"UDWKcg3E","zh-cn_api_update-element.md":"r7FOtd7Z","zh-cn_element_circle.md":"TXgGQoDH","zh-cn_element_group.md":"5flfEW0e","zh-cn_element_image.md":"a7TjGV-j","zh-cn_element_html.md":"_O0oTlOn","zh-cn_element_info.md":"AultvWeM","zh-cn_element_path.md":"J3z6LwN_","zh-cn_element_svg.md":"ga__SCBc","zh-cn_element_rect.md":"IuhJ9ne4","zh-cn_element_text.md":"Mlt5U0l-","zh-cn_guide_class-idraw.md":"1BC1Vc1m","zh-cn_guide_installation.md":"Z0pJQFTS","zh-cn_guide_introduction.md":"L_K3kExR","zh-cn_index.md":"wdqaL4HK","zh-cn_sponsor.md":"w_7AgKx0","zh-cn_guide_quickstart.md":"JlXf8dNq"} diff --git a/docs/idraw-logo.png b/docs/idraw-logo.png deleted file mode 100644 index 886a681..0000000 Binary files a/docs/idraw-logo.png and /dev/null differ diff --git a/docs/index.html b/docs/index.html index b9fba7e..1a83111 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,179 +1,24 @@ - - - iDraw.js - A simple JavaScript framework for drawing on the web - - - - - - - - - + + + iDraw.js + + + + + + + + + + + - -
- -
-

iDraw.js

-

A simple JavaScript framework for drawing on the web

-
-
- Get Started - StudioPlayground - GitHub -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
High web compatibility
-
All based on Canvas 2D API drawing
-
-
-
Extremely simple way to use
-
There are no complicated operations, only a few simple APIs for drawing operations
-
-
-
Data-Driven drawing
-
Rely on data to control drawing operations
-
-
-
- -
+ +
Skip to content

iDraw.js

Drawing easier on the web.

A simple JavaScript framework for Drawing on the web.

+ + - + \ No newline at end of file diff --git a/docs/zh-CN/api/add-element.html b/docs/zh-CN/api/add-element.html new file mode 100644 index 0000000..467079a --- /dev/null +++ b/docs/zh-CN/api/add-element.html @@ -0,0 +1,48 @@ + + + + + + addElement | iDraw.js + + + + + + + + + + + + + +
Skip to content

addElement

说明

addElement 对图画添加元素,并且触发重新渲染。

参数

  • {object} element 元素内容,具体元素数据格式可查询 画图元素
  • {object} { position?: number[] },可选配置,position 元素索引位置,比如 [1, 2] 代表把元素加入第2个元素(必须是Group类型)的第3个位置上。

返回值

  • {object} 返回完整的data数据。

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData({ elements: [] });
+
+idraw.addElement({
+  name: 'rect',
+  x: 140,
+  y: 120,
+  w: 200,
+  h: 100,
+  type: 'rect',
+  detail: {
+    background: '#f7d3c1',
+    borderRadius: 20,
+    borderWidth: 4,
+    borderColor: '#ff6032'
+  }
+});

示例

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/api/center-content.html b/docs/zh-CN/api/center-content.html new file mode 100644 index 0000000..095986f --- /dev/null +++ b/docs/zh-CN/api/center-content.html @@ -0,0 +1,39 @@ + + + + + + centerContent | iDraw.js + + + + + + + + + + + + + +
Skip to content

centerContent

说明

centerContent 让内容在视图居中显示,如果内容尺寸超出视图,就会把内容按比例缩小居中在视图中。

参数

  • {object} options
    • {Data} options.data 可选,计算居中尺寸的新内容数据。

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData({
+  element: [
+    /* ... */
+  ]
+});
+
+idraw.centerContent();

示例

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/api/delete-element.html b/docs/zh-CN/api/delete-element.html new file mode 100644 index 0000000..2dfacc7 --- /dev/null +++ b/docs/zh-CN/api/delete-element.html @@ -0,0 +1,42 @@ + + + + + + deleteElement | iDraw.js + + + + + + + + + + + + + +
Skip to content

deleteElement

说明

deleteElement 根据元素的uuid,将图画中对应的元素删除,并且触发重新渲染。

参数

  • {string} uuid 元素唯一ID

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+
+const uuid = idraw.getData().elements[0].uuid;
+
+idraw.deleteElement(uuid);

示例

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/api/enable-disable.html b/docs/zh-CN/api/enable-disable.html new file mode 100644 index 0000000..6dd8867 --- /dev/null +++ b/docs/zh-CN/api/enable-disable.html @@ -0,0 +1,38 @@ + + + + + + enable/disable | iDraw.js + + + + + + + + + + + + + +
Skip to content

enable/disable

说明

  • enable(...) 开启某个功能
  • disable(...) 关闭某个功能

参数

  • {IDrawFeature} feat 功能类型
    • 'ruler': 标尺功能
    • 'scroll': 滚动条功能
    • 'scale': 缩放功能
    • 'info': 信息显示功能,例如显示坐标信息
    • - 其它功能待开发 ...
ts
type IDrawFeature = 'ruler' | 'scroll' | 'scale' | 'info'; // TODO other feature

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+idraw.disable('ruler');
+
+setTimeout(() => {
+  idraw.enable('ruler');
+}, 1000);

示例

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/api/get-data.html b/docs/zh-CN/api/get-data.html new file mode 100644 index 0000000..08645e6 --- /dev/null +++ b/docs/zh-CN/api/get-data.html @@ -0,0 +1,56 @@ + + + + + + getData | iDraw.js + + + + + + + + + + + + + +
Skip to content

getData

说明

getData 用于获取当前画图内容的数据。

参数

  • {object} options 选项,非必填
    • {boolean} options.compact 压缩,非必选

返回值

  • {object} data 图画的JSON对象数据

用法

js
import { iDraw } from 'idraw';
+
+const data = {
+  elements: [
+    {
+      name: 'rect',
+      x: 160,
+      y: 120,
+      w: 200,
+      h: 100,
+      angle: 30,
+      type: 'rect',
+      detail: {
+        background: '#d5f5f9',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+
+const resultData = idraw.getData();
+console.log(resultData);

示例

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/api/move-element.html b/docs/zh-CN/api/move-element.html new file mode 100644 index 0000000..79f28dd --- /dev/null +++ b/docs/zh-CN/api/move-element.html @@ -0,0 +1,42 @@ + + + + + + moveElement | iDraw.js + + + + + + + + + + + + + +
Skip to content

moveElement

说明

moveElement 根据元素的uuid,将图画中对应的元素删除,并且触发重新渲染。

参数

  • {string} uuid 元素唯一ID
  • {number[]} position 将元素移动到指定索引位置。比如 [1, 2] 代表把元素移动到第2个元素(必须是Group类型)的第3个位置上。

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+
+const uuid = idraw.getData().elements[0].uuid;
+
+idraw.moveElement(uuid, { position: [1, 2] });

示例

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/api/resize.html b/docs/zh-CN/api/resize.html new file mode 100644 index 0000000..fac6f55 --- /dev/null +++ b/docs/zh-CN/api/resize.html @@ -0,0 +1,43 @@ + + + + + + resize | iDraw.js + + + + + + + + + + + + + +
Skip to content

resize

说明

resize 可以对图画视图尺寸进行再次修改

参数

  • {object} options 视图尺寸选项
    • {number} options.width 画板宽度,非必选
    • {number} options.height 画板高度,非必选
    • {number} options.devicePixelRatio 设备像素比例,非必选

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData({
+  element: [
+    /* ... */
+  ]
+});
+
+idraw.resize({
+  width: 300,
+  height: 200,
+  devicePixelRatio: 2
+});

示例

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/api/select-element.html b/docs/zh-CN/api/select-element.html new file mode 100644 index 0000000..6a4beaa --- /dev/null +++ b/docs/zh-CN/api/select-element.html @@ -0,0 +1,41 @@ + + + + + + selectElement | iDraw.js + + + + + + + + + + + + + +
Skip to content

selectElement

说明

selectElement 根据元素的UUID选中图画中的元素。

参数

  • {string} uuid 元素唯一ID

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+const resultData = idraw.getData();
+
+idraw.selectElement(resultData.elements[0].uuid);

示例

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/api/set-data.html b/docs/zh-CN/api/set-data.html new file mode 100644 index 0000000..a75ebcb --- /dev/null +++ b/docs/zh-CN/api/set-data.html @@ -0,0 +1,52 @@ + + + + + + setData | iDraw.js + + + + + + + + + + + + + +
Skip to content

setData

说明

setData 用于设置画图内容的数据,设置后会根据设置数据触发图画的重绘。

参数

  • {object} data 画图数据对象

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+const data = {
+  elements: [
+    {
+      name: 'rect',
+      x: 160,
+      y: 120,
+      w: 200,
+      h: 100,
+      angle: 30,
+      type: 'rect',
+      detail: {
+        background: '#d5f5f9',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+idraw.setData(data);

示例

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/api/set-mode.html b/docs/zh-CN/api/set-mode.html new file mode 100644 index 0000000..39e7eb5 --- /dev/null +++ b/docs/zh-CN/api/set-mode.html @@ -0,0 +1,33 @@ + + + + + + setMode | iDraw.js + + + + + + + + + + + + + +
Skip to content

setMode

说明

setMode 可以切换视图操作模式

参数

  • {IDrawType} mode 视图操作模式
    • 'select': 选择模式,也是默认模式,用于选择和编辑元素
    • 'drag': 拖拽模式,用于拖拽移动整体画布位置
    • 'readOnly': 只读模式,仅显示视图内容,无法进行编辑操作
ts
type IDrawMode = 'select' | 'drag' | 'readOnly';

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setMode('readOnly');

示例

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/api/update-element.html b/docs/zh-CN/api/update-element.html new file mode 100644 index 0000000..1950634 --- /dev/null +++ b/docs/zh-CN/api/update-element.html @@ -0,0 +1,45 @@ + + + + + + updateElement | iDraw.js + + + + + + + + + + + + + +
Skip to content

updateElement

说明

updateElement 更新图画中的元素,并且触发重新渲染。

参数

  • {object} element 元素内容,具体元素数据格式可查询 画图元素

返回值

无返回值

用法

js
import { iDraw } from 'idraw';
+
+const data = {
+  elements: [
+    // ....
+  ]
+};
+const app = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+const idraw = new iDraw(app, options);
+idraw.setData(data);
+const resultData = idraw.getData();
+
+const elem = resultData.elements[0];
+
+elem.detail.color = '#f0f0f0';
+
+idraw.updateData(elem);

示例

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/element/circle.html b/docs/zh-CN/element/circle.html new file mode 100644 index 0000000..77adc9e --- /dev/null +++ b/docs/zh-CN/element/circle.html @@ -0,0 +1,56 @@ + + + + + + 圆形元素 | iDraw.js + + + + + + + + + + + + + +
Skip to content

圆形元素

Circle

用来渲染圆形或椭圆形内容,具体格式如下所示:

ts
type Circle = {
+  type: 'circle';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    background: string;
+    borderRadius?: string;
+    borderWidth?: number;
+    borderColor?: number;
+  };
+};

Circle.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

Circle.detail 数据格式

Circle 元素的detail属性

ts
type CircleDetail = {
+  background?: string;
+  background?: string;
+  borderWidth?: number;
+  borderColor?: string;
+};

Circle.detail 数据属性内容

属性说明类型默认值是否必填备注
background圆形颜色string-true例如 #000000
borderRadius边框角圆形半径number0false-
borderWidth边框宽度number0false-
borderColor边框颜色string-false例如 #000000

完整数据示例

js
const elementCircle = {
+  name: 'circle',
+  x: 160,
+  y: 100,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'circle',
+  detail: {
+    background: '#d5f5f9',
+    borderRadius: 10,
+    borderWidth: 4,
+    borderColor: '#3f51b5'
+  }
+};

效果预览

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/element/group.html b/docs/zh-CN/element/group.html new file mode 100644 index 0000000..2df4d7c --- /dev/null +++ b/docs/zh-CN/element/group.html @@ -0,0 +1,55 @@ + + + + + + 组合元素 | iDraw.js + + + + + + + + + + + + + +
Skip to content

组合元素

Group

用来渲染组合内容,具体格式如下所示:

ts
type Group = {
+  type: 'group';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    children: Element;
+    background: string;
+    borderRadius?: string;
+    borderWidth?: number;
+    borderColor?: number;
+  };
+};

Group.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

Group.detail 数据格式

Rect 元素的detail属性

ts
type GroupDetail = {
+  children: Array<Element>;
+  background?: string;
+  background?: string;
+  borderWidth?: number;
+  borderColor?: string;
+};

Group.detail 数据属性内容

属性说明类型默认值是否必填备注
children组合子元素Array<Element>-true例如 #000000
background组合矩形颜色string-false例如 #000000
borderRadius组合边框角圆形半径number0false-
borderWidth组合边框宽度number0false-
borderColor组合边框颜色string-false例如 #000000

完整数据示例

js
const elementGroup = {
+  name: 'group',
+  x: 160,
+  y: 120,
+  w: 200,
+  h: 100,
+  angle: 30,
+  type: 'group',
+  detail: {
+    children: []
+  }
+};

效果预览

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/element/html.html b/docs/zh-CN/element/html.html new file mode 100644 index 0000000..2d8a1bb --- /dev/null +++ b/docs/zh-CN/element/html.html @@ -0,0 +1,92 @@ + + + + + + HTML元素 | iDraw.js + + + + + + + + + + + + + +
Skip to content

HTML元素

HTML

用来渲染HTML代码片,具体格式如下所示:

ts
type HTML = {
+  type: 'html';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    html: string;
+  };
+};

HTML.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

HTML.detail 数据格式

HTML 元素的detail属性

ts
type HTMLDetail = {
+  html: string;
+};

HTML.detail 数据属性内容

属性说明类型默认值是否必填备注
htmlHTML代码片段string-true-

WARNING

注意 detail.html 里的 HTML代码片段暂时不支持依赖资源渲染,例如 <img /> 标签或者 cssbackground-image 属性

完整数据示例

js
const elementHTML = {
+  name: 'html',
+  x: 200,
+  y: 120,
+  w: 150,
+  h: 100,
+  type: 'html',
+  angle: 0,
+  detail: {
+    html: `
+      <style>
+      .btn-box {
+        margin: 10px 0;
+      }
+      .btn {
+        line-height: 1.5715;
+        position: relative;
+        display: inline-block;
+        font-weight: 400;
+        white-space: nowrap;
+        text-align: center;
+        background-image: none;
+        border: 1px solid transparent;
+        box-shadow: 0 2px #00000004;
+        cursor: pointer;
+        user-select: none;
+        height: 32px;
+        padding: 4px 15px;
+        font-size: 14px;
+        border-radius: 2px;
+        color: #000000d9;
+        background: #fff;
+        border-color: #d9d9d9;
+      }
+      .btn-primary {
+        color: #fff;
+        background: #1890ff;
+        border-color: #1890ff;
+        text-shadow: 0 -1px 0 rgb(0 0 0 / 12%);
+        box-shadow: 0 2px #0000000b;
+      }
+      </style>
+      <div>
+        <div class="btn-box">
+          <button class="btn">
+            <span>Button</span>
+          </button>
+        </div>
+        <div class="btn-box">
+          <button class="btn btn-primary">
+            <span>Button Primary</span>
+          </button> 
+        </div>
+      </div>
+    `
+  }
+};

效果预览

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/element/image.html b/docs/zh-CN/element/image.html new file mode 100644 index 0000000..e5c153f --- /dev/null +++ b/docs/zh-CN/element/image.html @@ -0,0 +1,47 @@ + + + + + + 图片元素 | iDraw.js + + + + + + + + + + + + + +
Skip to content

图片元素

Image

用来渲染图片内容,具体格式如下所示:

ts
type Image = {
+  type: 'image';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    src: string;
+  };
+};

Image.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

Image.detail 数据格式

Image元素的detail属性

ts
type ImageDetail = {
+  src: string;
+};

Image.detail 数据属性内容

属性说明类型默认值是否必填备注
src图片数据源string-true可以是图片链接或图片Base64

完整数据示例

js
const elementImage = {
+  name: 'image',
+  x: 160,
+  y: 100,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'image',
+  detail: {
+    src: './image/github.png'
+  }
+};

效果预览

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/element/info.html b/docs/zh-CN/element/info.html new file mode 100644 index 0000000..270b9e5 --- /dev/null +++ b/docs/zh-CN/element/info.html @@ -0,0 +1,75 @@ + + + + + + 画图元素介绍 | iDraw.js + + + + + + + + + + + + + +
Skip to content

画图元素介绍

什么是 iDraw.js 画图元素?

iDraw.js 画图的内容都是基于“元素”构成的,画图的过程基本是围绕处理元素的位置、样式、内容等属性来实现画图的功能。

目前支持的有八种元素:

  1. Text 文本
  2. Rect 矩形
  3. Circle 圆形
  4. Image 图片
  5. SVG
  6. HTML
  7. Path 路径
  8. Group 组合

画图元素的信息

数据基本格式

tsx
type Element = {
+  type: 'text' | 'rect' | 'circle' | 'image' | 'svg' | 'html' | 'path' | 'group';
+  uuid: string;
+  name?: string;
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle?: number;
+  detail: any; // 不同元素的描述内容不一样
+  // operations 为元素操控配置
+  operations?: {
+    lock?: boolean;
+    invisible?: boolean;
+    limitRatio?: boolean;
+  };
+  extension?: { [key: string]: any } | any;
+};

元素的基本属性

属性说明类型默认值备注
type元素类型text| rect|circle|image|svg| html--
uuid唯一 IDstring-iDraw.js 内部会自动添加
name名称string--
xX 轴偏移量number--
yY 轴偏移量number--
w元素宽度number--
h元素高度number--
angle元素旋转角度number0[0, 360]
detail元素描述内容object (详情请查看各元素描述内容)--
operations.lock元素是否锁住booleanfalse元素锁住后就不能进行视图操作
operations.invisible元素是否不可见booleanfalse元素不可见就不会渲染
operations.limitRatio元素是否限制宽高比例boolean-在元素缩放时候,按照其宽高比例进行缩放

画图元素的使用

js
import { iDraw } from 'idraw';
+
+import { iDraw } from 'idraw';
+const data = {
+  elements: [
+    {
+      type: 'text',
+      name: 'rect-001',
+      x: 50,
+      y: 50,
+      w: 200,
+      h: 200,
+      angle: 0,
+      detail: {
+        text: 'Hello World',
+        color: '#3f51b5',
+        fontSize: 60,
+        textAlign: 'center',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const idraw = new iDraw(app, {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+});
+
+// 设置元素数据,渲染画图内容
+idraw.setData(data);

示例预览

Demo 完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/element/path.html b/docs/zh-CN/element/path.html new file mode 100644 index 0000000..1509700 --- /dev/null +++ b/docs/zh-CN/element/path.html @@ -0,0 +1,83 @@ + + + + + + 路径元素 | iDraw.js + + + + + + + + + + + + + +
Skip to content

路径元素

Path

用来渲染路径内容,具体格式如下所示:

ts
type Path = {
+  type: 'path';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    commands: Array<{
+      type: 'M' | 'm' | 'L' | 'l' | 'H' | 'h' | 'V' | 'v' | 'C' | 'c' | 'S' | 's' | 'Q' | 'q' | 'T' | 't' | 'A' | 'a' | 'Z' | 'z';
+      params: number[];
+    }>;
+    originX: number;
+    originY: number;
+    originW: number;
+    originH: number;
+    fill?: string;
+    stroke?: string;
+    strokeWidth?: number;
+    strokeLineCap?: 'butt' | 'round' | 'square';
+  };
+};

Path.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

Path.detail 数据格式

Rect 元素的detail属性

ts
type PathDetail = {
+  commands: Array<{
+    type: 'M' | 'm' | 'L' | 'l' | 'H' | 'h' | 'V' | 'v' | 'C' | 'c' | 'S' | 's' | 'Q' | 'q' | 'T' | 't' | 'A' | 'a' | 'Z' | 'z';
+    params: number[];
+  }>;
+  originX: number;
+  originY: number;
+  originW: number;
+  originH: number;
+  fill?: string;
+  stroke?: string;
+  strokeWidth?: number;
+  strokeLineCap?: 'butt' | 'round' | 'square';
+};

Path.detail 数据属性内容

属性说明类型默认值是否必填备注
fill填充颜色string-true例如 #000000
stroke路径颜色string-true例如 #000000
strokeWidth路径宽度number0false-
strokeLineCap路径转折类型'butt' | 'round' | 'square'-true-
originX路径原始X位置number0false-
originY路径原始Y位置number0false-
originW路径原始宽度number0false-
originH路径原始高度number0false-

完整数据示例

js
const elementPath = {
+  uuid: '41d437b8-afbd-2d3d-14bc-912e26d3491f',
+  x: 100,
+  y: 100,
+  w: 80,
+  h: 80,
+  angle: 0,
+  type: 'path',
+  detail: {
+    commands: [
+      { type: 'M', params: [10, 30] },
+      { type: 'A', params: [20, 20, 0, 0, 1, 50, 30] },
+      { type: 'A', params: [20, 20, 0, 0, 1, 90, 30] },
+      { type: 'Q', params: [90, 60, 50, 90] },
+      { type: 'Q', params: [10, 60, 10, 30] },
+      { type: 'z', params: [] }
+    ],
+    fill: '#FF00006F',
+    stroke: '#000000',
+    strokeWidth: 1,
+    originX: 10,
+    originY: 10,
+    originH: 80,
+    originW: 80
+  }
+};

效果预览

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/element/rect.html b/docs/zh-CN/element/rect.html new file mode 100644 index 0000000..f7bacd0 --- /dev/null +++ b/docs/zh-CN/element/rect.html @@ -0,0 +1,56 @@ + + + + + + 矩形元素 | iDraw.js + + + + + + + + + + + + + +
Skip to content

矩形元素

Rectangle

用来渲染矩形内容,具体格式如下所示:

ts
type Rect = {
+  type: 'rect';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    background: string;
+    borderRadius?: string;
+    borderWidth?: number;
+    borderColor?: number;
+  };
+};

Rect.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

Rect.detail 数据格式

Rect 元素的detail属性

ts
type RectDetail = {
+  background?: string;
+  background?: string;
+  borderWidth?: number;
+  borderColor?: string;
+};

Rect.detail 数据属性内容

属性说明类型默认值是否必填备注
background矩形颜色string-true例如 #000000
borderRadius边框角圆形半径number0false-
borderWidth边框宽度number0false-
borderColor边框颜色string-false例如 #000000

完整数据示例

js
const elementRect = {
+  name: 'rect',
+  x: 160,
+  y: 120,
+  w: 200,
+  h: 100,
+  angle: 30,
+  type: 'rect',
+  detail: {
+    background: '#d5f5f9',
+    borderRadius: 10,
+    borderWidth: 2,
+    borderColor: '#3f51b5'
+  }
+};

效果预览

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/element/svg.html b/docs/zh-CN/element/svg.html new file mode 100644 index 0000000..36cd001 --- /dev/null +++ b/docs/zh-CN/element/svg.html @@ -0,0 +1,47 @@ + + + + + + SVG元素 | iDraw.js + + + + + + + + + + + + + +
Skip to content

SVG元素

SVG

用来渲染SVG代码片,具体格式如下所示:

ts
type SVG = {
+  type: 'svg';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    svg: string;
+  };
+};

SVG.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

SVG.detail 数据格式

SVG 元素的detail属性

ts
type SVGDetail = {
+  svg: string;
+};

SVG.detail 数据属性内容

属性说明类型默认值是否必填备注
svgSVG代码片段string-true-

完整数据示例

js
const elementSVG = {
+  name: 'svg',
+  x: 160,
+  y: 100,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'svg',
+  detail: {
+    svg: `<svg  viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"  width="400" height="400"><path d="M512 1013.76c-277.11488 0-501.76-224.64512-501.76-501.76S234.88512 10.24 512 10.24s501.76 224.64512 501.76 501.76-224.64512 501.76-501.76 501.76z m0-51.02592c248.9344 0 450.73408-201.79968 450.73408-450.73408 0-248.9344-201.79968-450.73408-450.73408-450.73408-248.9344 0-450.73408 201.79968-450.73408 450.73408 0 248.9344 201.79968 450.73408 450.73408 450.73408zM456.9856 637.9008l295.45984-339.94752a26.4192 26.4192 0 0 1 37.59616-2.31936 28.32896 28.32896 0 0 1 3.10784 38.8608l-307.01568 380.38016a30.72 30.72 0 0 1-42.90048 4.84864L235.44832 556.2368a32.128 32.128 0 0 1-5.74976-44.6464 32.1536 32.1536 0 0 1 44.544-6.58944l182.74304 132.90496z" fill="#1890ff"></path></svg>`
+  }
+};

效果预览

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/element/text.html b/docs/zh-CN/element/text.html new file mode 100644 index 0000000..b9baa02 --- /dev/null +++ b/docs/zh-CN/element/text.html @@ -0,0 +1,65 @@ + + + + + + 文本元素 | iDraw.js + + + + + + + + + + + + + +
Skip to content

文本元素

Text

用来渲染文字内容,具体格式如下所示:

ts
type Text = {
+  type: 'text';
+  x: number;
+  y: number;
+  w: number;
+  h: number;
+  angle: number;
+  detail: {
+    text: string;
+    color?: string;
+    fontSize?: string;
+    fontFamily?: string;
+    textAlign?: 'left' | 'center' | 'right';
+  };
+};

Text.detail 详解

元素的基本属性详情可以看 元素介绍-数据基本格式

Text.detail 数据格式

Text元素的detail属性

ts
type TextDetail = {
+  text: string;
+  color?: string;
+  fontSize?: number;
+  lineHeight?: number;
+  fontWeight?: 'bold' | string | number;
+  fontFamily?: string;
+  textAlign?: 'center' | 'left' | 'right';
+  verticalAlign?: 'middle' | 'top' | 'bottom';
+};

Text.detail 数据属性内容

属性说明类型默认值是否必填备注
text文本内容string-true-
color字体颜色string-true例如 #000000
fontSize字体尺寸number12false-
lineHeight文本行高number-false-
fontWeight字体粗细number-false-
fontFamily字体类型string-false-
textAlign水平对齐'left' | 'center' | 'right''left'false-
verticalAlign垂直对齐'top' | 'middle' | 'bottom''top'false-

完整数据示例

js
const elementText = {
+  name: 'text',
+  x: 160,
+  y: 80,
+  w: 200,
+  h: 200,
+  angle: 0,
+  type: 'text',
+  detail: {
+    text: 'Hello World',
+    color: '#3f51b5',
+    fontSize: 60,
+    textAlign: 'center',
+    background: '#3f51b51f',
+    borderRadius: 10,
+    borderWidth: 2,
+    borderColor: '#3f51b5'
+  }
+};

效果预览

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/guide/class-idraw.html b/docs/zh-CN/guide/class-idraw.html new file mode 100644 index 0000000..87a19c4 --- /dev/null +++ b/docs/zh-CN/guide/class-idraw.html @@ -0,0 +1,36 @@ + + + + + + iDraw 类 | iDraw.js + + + + + + + + + + + + + +
Skip to content

iDraw 类

参数

js
import { iDraw } from 'idraw';
+const dom = document.querySelector('#app');
+const options = {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+};
+
+const idraw = new iDraw(dom, options);

在使用 new iDraw(dom, options) 类时,会接收两个参数。参数信息有下:

参数说明类型默认值是否必填备注
dom渲染DOM节点HTMLDivElement-true-
options渲染内容选项Object-true-

选项 Options

ts
type Options = {
+  width: number;
+  height: number;
+  devicePixelRatio: number;
+};

Options 属性

属性说明类型默认值是否必填备注
width画板宽度number-true-
height画板高度number-true-
devicePixelRatio设备像素比例number1false-

Options 效果预览

Demo完整预览 Playground >>

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/guide/installation.html b/docs/zh-CN/guide/installation.html new file mode 100644 index 0000000..010b09a --- /dev/null +++ b/docs/zh-CN/guide/installation.html @@ -0,0 +1,35 @@ + + + + + + 安装 | iDraw.js + + + + + + + + + + + + + +
Skip to content

安装

最新版本

iDraw.js

安装方式

将 iDraw.js 添加到项目中有三种方式:

  1. 基于 NPM 安装
  2. 在页面上以 CDN 形式引入。
  3. 下载 JavaScript 文件,并且自托管JavaScript文件

NPM

在开发大型项目应用时候,推荐使用 NPM 的安装方式,可以更好的基于 Webpack 、 Rollup 和 Vite 等构建工具结合使用。

sh
npm install idraw

CDN

在小型项目应用场景或者学习场景时候,可以使用 CDN的方式引用最新的版本的 JavaScript 文件:

html
<script src="https://unpkg.com/idraw"></script>
html
<!-- 全局变量使用 -->
+<script>
+  (function () {
+    const { iDraw } = window.iDraw;
+    const app = document.querySelector('#app');
+    const idraw = new iDraw(app, {
+      width: 600,
+      height: 400,
+      devicePixelRatio: 2
+    });
+  })();
+</script>

WARNING

不建议用 unpkg.com 站点的CDN资源的放在生产环境

自托管JavaScript文件

如果不想使用构建工具,同时无法直接使用 CDN方式 调用,那么可以将相关的 .js 文件下载到项目本地或者服务器上托管。最后通过 <script> 方式引用,使用方法跟 CDN 的方式类似。

具体的 JavaScript文件 可以从 unpkg 这里下载最新的 iDraw.js 文件。

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/guide/introduction.html b/docs/zh-CN/guide/introduction.html new file mode 100644 index 0000000..7d38891 --- /dev/null +++ b/docs/zh-CN/guide/introduction.html @@ -0,0 +1,53 @@ + + + + + + 介绍 | iDraw.js + + + + + + + + + + + + + +
Skip to content

介绍

iDraw.js 是什么

iDraw.js 是基于浏览器中 Canvas API 的绘图能力实现的一套画图框架。

可以直接由数据驱动去渲染图画的渲染,同时能可视化操控 图画元素 的位置、形状和布局等信息。

iDraw.js 目前基于 MIT 开源协议托管在GitHubNPM,所有使用者就都可以免费地使用在自己的项目中。

起步使用

sh
npm install idraw
js
import { iDraw } from 'idraw';
+const data = {
+  elements: [
+    {
+      name: 'rect-001',
+      x: 160,
+      y: 80,
+      w: 200,
+      h: 200,
+      type: 'text',
+      detail: {
+        text: 'Hello World',
+        color: '#3f51b5',
+        fontSize: 60,
+        textAlign: 'center',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const idraw = new iDraw(app, {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+});
+idraw.setData(data);
+ + + + \ No newline at end of file diff --git a/docs/zh-CN/guide/quickstart.html b/docs/zh-CN/guide/quickstart.html new file mode 100644 index 0000000..ab493a0 --- /dev/null +++ b/docs/zh-CN/guide/quickstart.html @@ -0,0 +1,53 @@ + + + + + + 快速上手 | iDraw.js + + + + + + + + + + + + + +
Skip to content

快速上手

第一个例子

这是一个最简单的 iDraw.js 例子,绘制一个旋转的矩形。

安装模块

sh
npm install idraw

渲染DOM的位置

html
<div id="app"></div>

使用 iDraw.js

js
import { iDraw } from 'idraw';
+const data = {
+  elements: [
+    {
+      name: 'rect-001',
+      x: 160,
+      y: 120,
+      w: 200,
+      h: 100,
+      angle: 30,
+      type: 'rect',
+      detail: {
+        background: '#d5f5f9',
+        borderRadius: 10,
+        borderWidth: 2,
+        borderColor: '#3f51b5'
+      }
+    }
+  ]
+};
+
+const app = document.querySelector('#app');
+const idraw = new iDraw(app, {
+  width: 600,
+  height: 400,
+  devicePixelRatio: 2
+});
+
+// 设置数据
+idraw.setData(data);

至此,小伙伴们就可以愉快的开启 iDraw.js 的画图之旅啦!O(∩_∩)O~

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/index.html b/docs/zh-CN/index.html new file mode 100644 index 0000000..e756c06 --- /dev/null +++ b/docs/zh-CN/index.html @@ -0,0 +1,24 @@ + + + + + + iDraw.js + + + + + + + + + + + + + +
Skip to content

iDraw.js

让Web绘图更加简单.

一个面向Web绘图的JavaScript框架

+ + + + \ No newline at end of file diff --git a/docs/zh-CN/sponsor.html b/docs/zh-CN/sponsor.html new file mode 100644 index 0000000..49f988e --- /dev/null +++ b/docs/zh-CN/sponsor.html @@ -0,0 +1,24 @@ + + + + + + Become an iDraw.js Sponsor | iDraw.js + + + + + + + + + + + + + +
Skip to content

Become an iDraw.js Sponsor

iDraw.js is an MIT licensed open source project and completely free to use. The tremendous amount of effort needed to maintain this framework and develop new features for the project is only made sustainable thanks to the generous financial backing of our sponsors.

How to Sponsor

Sponsorships can be done via OpenCollective (https://opencollective.com/idrawjs). Both monthly-recurring sponsorships and one-time donations are accepted. Recurring sponsorships are entitled to logo placements as specified in Sponsorship Tiers.

+ + + + \ No newline at end of file diff --git a/index.md b/index.md new file mode 100644 index 0000000..7d5a32a --- /dev/null +++ b/index.md @@ -0,0 +1,27 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "iDraw.js" + text: "Drawing easier on the web." + tagline: A simple JavaScript framework for Drawing on the web. + actions: + - theme: brand + text: Quick Started + link: /quick-started + - theme: alt + text: iDraw Studio + link: /studio + image: /src/assets/idraw.png + + +features: + - title: High web compatibility + details: All based on Canvas 2D API drawing + - title: Extremely simple way to use + details: There are no complicated operations, only a few simple APIs for drawing operations + - title: Data-Driven drawing + details: Rely on data to control drawing operations +--- + diff --git a/package.json b/package.json new file mode 100644 index 0000000..4f03384 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "version": "0.0.1", + "scripts": { + "docs:dev": "vitepress dev", + "docs:build": "vitepress build", + "dev": "npm run docs:dev", + "build": "npm run docs:build && node ./scripts/after-build.js", + "docs:preview": "vitepress preview" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/idrawjs/docs.git" + }, + "license": "MIT", + "devDependencies": { + "prettier": "^3.1.1", + "vitepress": "1.0.0-rc.45" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..fa05c1c --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,1051 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +devDependencies: + prettier: + specifier: ^3.1.1 + version: 3.1.1 + vitepress: + specifier: 1.0.0-rc.45 + version: 1.0.0-rc.45(@algolia/client-search@4.20.0)(search-insights@2.11.0) + +packages: + + /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.11.0): + resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.11.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + dev: true + + /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.11.0): + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} + peerDependencies: + search-insights: '>= 1 < 3' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + search-insights: 2.11.0 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + dev: true + + /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0): + resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + '@algolia/client-search': 4.20.0 + algoliasearch: 4.20.0 + dev: true + + /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0): + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/client-search': 4.20.0 + algoliasearch: 4.20.0 + dev: true + + /@algolia/cache-browser-local-storage@4.20.0: + resolution: {integrity: sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ==} + dependencies: + '@algolia/cache-common': 4.20.0 + dev: true + + /@algolia/cache-common@4.20.0: + resolution: {integrity: sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==} + dev: true + + /@algolia/cache-in-memory@4.20.0: + resolution: {integrity: sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==} + dependencies: + '@algolia/cache-common': 4.20.0 + dev: true + + /@algolia/client-account@4.20.0: + resolution: {integrity: sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q==} + dependencies: + '@algolia/client-common': 4.20.0 + '@algolia/client-search': 4.20.0 + '@algolia/transporter': 4.20.0 + dev: true + + /@algolia/client-analytics@4.20.0: + resolution: {integrity: sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug==} + dependencies: + '@algolia/client-common': 4.20.0 + '@algolia/client-search': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 + dev: true + + /@algolia/client-common@4.20.0: + resolution: {integrity: sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ==} + dependencies: + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 + dev: true + + /@algolia/client-personalization@4.20.0: + resolution: {integrity: sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==} + dependencies: + '@algolia/client-common': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 + dev: true + + /@algolia/client-search@4.20.0: + resolution: {integrity: sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg==} + dependencies: + '@algolia/client-common': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 + dev: true + + /@algolia/logger-common@4.20.0: + resolution: {integrity: sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==} + dev: true + + /@algolia/logger-console@4.20.0: + resolution: {integrity: sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==} + dependencies: + '@algolia/logger-common': 4.20.0 + dev: true + + /@algolia/requester-browser-xhr@4.20.0: + resolution: {integrity: sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw==} + dependencies: + '@algolia/requester-common': 4.20.0 + dev: true + + /@algolia/requester-common@4.20.0: + resolution: {integrity: sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==} + dev: true + + /@algolia/requester-node-http@4.20.0: + resolution: {integrity: sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==} + dependencies: + '@algolia/requester-common': 4.20.0 + dev: true + + /@algolia/transporter@4.20.0: + resolution: {integrity: sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==} + dependencies: + '@algolia/cache-common': 4.20.0 + '@algolia/logger-common': 4.20.0 + '@algolia/requester-common': 4.20.0 + dev: true + + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/parser@7.24.0: + resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.5 + dev: true + + /@babel/types@7.23.5: + resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + + /@docsearch/css@3.5.2: + resolution: {integrity: sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==} + dev: true + + /@docsearch/js@3.5.2(@algolia/client-search@4.20.0)(search-insights@2.11.0): + resolution: {integrity: sha512-p1YFTCDflk8ieHgFJYfmyHBki1D61+U9idwrLh+GQQMrBSP3DLGKpy0XUJtPjAOPltcVbqsTjiPFfH7JImjUNg==} + dependencies: + '@docsearch/react': 3.5.2(@algolia/client-search@4.20.0)(search-insights@2.11.0) + preact: 10.19.3 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + dev: true + + /@docsearch/react@3.5.2(@algolia/client-search@4.20.0)(search-insights@2.11.0): + resolution: {integrity: sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + dependencies: + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.11.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + '@docsearch/css': 3.5.2 + algoliasearch: 4.20.0 + search-insights: 2.11.0 + transitivePeerDependencies: + - '@algolia/client-search' + dev: true + + /@esbuild/android-arm64@0.19.9: + resolution: {integrity: sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.19.9: + resolution: {integrity: sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.19.9: + resolution: {integrity: sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.19.9: + resolution: {integrity: sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.19.9: + resolution: {integrity: sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.19.9: + resolution: {integrity: sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.19.9: + resolution: {integrity: sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.19.9: + resolution: {integrity: sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.19.9: + resolution: {integrity: sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.19.9: + resolution: {integrity: sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.19.9: + resolution: {integrity: sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.19.9: + resolution: {integrity: sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.19.9: + resolution: {integrity: sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.19.9: + resolution: {integrity: sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.19.9: + resolution: {integrity: sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.19.9: + resolution: {integrity: sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.19.9: + resolution: {integrity: sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.19.9: + resolution: {integrity: sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.19.9: + resolution: {integrity: sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.19.9: + resolution: {integrity: sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.19.9: + resolution: {integrity: sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.19.9: + resolution: {integrity: sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@rollup/rollup-android-arm-eabi@4.7.0: + resolution: {integrity: sha512-rGku10pL1StFlFvXX5pEv88KdGW6DHUghsxyP/aRYb9eH+74jTGJ3U0S/rtlsQ4yYq1Hcc7AMkoJOb1xu29Fxw==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.7.0: + resolution: {integrity: sha512-/EBw0cuJ/KVHiU2qyVYUhogXz7W2vXxBzeE9xtVIMC+RyitlY2vvaoysMUqASpkUtoNIHlnKTu/l7mXOPgnKOA==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.7.0: + resolution: {integrity: sha512-4VXG1bgvClJdbEYYjQ85RkOtwN8sqI3uCxH0HC5w9fKdqzRzgG39K7GAehATGS8jghA7zNoS5CjSKkDEqWmNZg==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.7.0: + resolution: {integrity: sha512-/ImhO+T/RWJ96hUbxiCn2yWI0/MeQZV/aeukQQfhxiSXuZJfyqtdHPUPrc84jxCfXTxbJLmg4q+GBETeb61aNw==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.7.0: + resolution: {integrity: sha512-zhye8POvTyUXlKbfPBVqoHy3t43gIgffY+7qBFqFxNqVtltQLtWeHNAbrMnXiLIfYmxcoL/feuLDote2tx+Qbg==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.7.0: + resolution: {integrity: sha512-RAdr3OJnUum6Vs83cQmKjxdTg31zJnLLTkjhcFt0auxM6jw00GD6IPFF42uasYPr/wGC6TRm7FsQiJyk0qIEfg==} + cpu: [arm64] + os: [linux] + libc: [glibc] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.7.0: + resolution: {integrity: sha512-nhWwYsiJwZGq7SyR3afS3EekEOsEAlrNMpPC4ZDKn5ooYSEjDLe9W/xGvoIV8/F/+HNIY6jY8lIdXjjxfxopXw==} + cpu: [arm64] + os: [linux] + libc: [musl] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.7.0: + resolution: {integrity: sha512-rlfy5RnQG1aop1BL/gjdH42M2geMUyVQqd52GJVirqYc787A/XVvl3kQ5NG/43KXgOgE9HXgCaEH05kzQ+hLoA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.7.0: + resolution: {integrity: sha512-cCkoGlGWfBobdDtiiypxf79q6k3/iRVGu1HVLbD92gWV5WZbmuWJCgRM4x2N6i7ljGn1cGytPn9ZAfS8UwF6vg==} + cpu: [x64] + os: [linux] + libc: [glibc] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.7.0: + resolution: {integrity: sha512-R2oBf2p/Arc1m+tWmiWbpHBjEcJnHVnv6bsypu4tcKdrYTpDfl1UT9qTyfkIL1iiii5D4WHxUHCg5X0pzqmxFg==} + cpu: [x64] + os: [linux] + libc: [musl] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.7.0: + resolution: {integrity: sha512-CPtgaQL1aaPc80m8SCVEoxFGHxKYIt3zQYC3AccL/SqqiWXblo3pgToHuBwR8eCP2Toa+X1WmTR/QKFMykws7g==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.7.0: + resolution: {integrity: sha512-pmioUlttNh9GXF5x2CzNa7Z8kmRTyhEzzAC+2WOOapjewMbl+3tGuAnxbwc5JyG8Jsz2+hf/QD/n5VjimOZ63g==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.7.0: + resolution: {integrity: sha512-SeZzC2QhhdBQUm3U0c8+c/P6UlRyBcLL2Xp5KX7z46WXZxzR8RJSIWL9wSUeBTgxog5LTPJuPj0WOT9lvrtP7Q==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@shikijs/core@1.1.7: + resolution: {integrity: sha512-gTYLUIuD1UbZp/11qozD3fWpUTuMqPSf3svDMMrL0UmlGU7D9dPw/V1FonwAorCUJBltaaESxq90jrSjQyGixg==} + dev: true + + /@shikijs/transformers@1.1.7: + resolution: {integrity: sha512-lXz011ao4+rvweps/9h3CchBfzb1U5OtP5D51Tqc9lQYdLblWMIxQxH6Ybe1GeGINcEVM4goMyPrI0JvlIp4UQ==} + dependencies: + shiki: 1.1.7 + dev: true + + /@types/linkify-it@3.0.5: + resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} + dev: true + + /@types/markdown-it@13.0.7: + resolution: {integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==} + dependencies: + '@types/linkify-it': 3.0.5 + '@types/mdurl': 1.0.5 + dev: true + + /@types/mdurl@1.0.5: + resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} + dev: true + + /@types/web-bluetooth@0.0.20: + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + dev: true + + /@vitejs/plugin-vue@5.0.4(vite@5.1.5)(vue@3.4.21): + resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + dependencies: + vite: 5.1.5 + vue: 3.4.21 + dev: true + + /@vue/compiler-core@3.4.21: + resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} + dependencies: + '@babel/parser': 7.24.0 + '@vue/shared': 3.4.21 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + dev: true + + /@vue/compiler-dom@3.4.21: + resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} + dependencies: + '@vue/compiler-core': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/compiler-sfc@3.4.21: + resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} + dependencies: + '@babel/parser': 7.24.0 + '@vue/compiler-core': 3.4.21 + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 + estree-walker: 2.0.2 + magic-string: 0.30.8 + postcss: 8.4.35 + source-map-js: 1.0.2 + dev: true + + /@vue/compiler-ssr@3.4.21: + resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} + dependencies: + '@vue/compiler-dom': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/devtools-api@7.0.16(vue@3.4.21): + resolution: {integrity: sha512-fZG2CG8624qphMf4aj59zNHckMx1G3lxODUuyM9USKuLznXCh66TP+tEbPOCcml16hA0GizJ4D8w6F34hrfbcw==} + dependencies: + '@vue/devtools-kit': 7.0.16(vue@3.4.21) + transitivePeerDependencies: + - vue + dev: true + + /@vue/devtools-kit@7.0.16(vue@3.4.21): + resolution: {integrity: sha512-IA8SSGiZbNgOi4wLT3mRvd71Q9KE0KvMfGk6haa2GZ6bL2K/xMA8Fvvj3o1maspfUXrGcCXutaqbLqbGx/espQ==} + peerDependencies: + vue: ^3.0.0 + dependencies: + '@vue/devtools-shared': 7.0.16 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + vue: 3.4.21 + dev: true + + /@vue/devtools-shared@7.0.16: + resolution: {integrity: sha512-Lew4FrGjDjmanaUWSueNE1Rre83k7jQpttc17MaoVw0eARWU5DgZ1F/g9GNUMZXVjbP9rwE+LL3gd9XfXCfkvA==} + dependencies: + rfdc: 1.3.1 + dev: true + + /@vue/reactivity@3.4.21: + resolution: {integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==} + dependencies: + '@vue/shared': 3.4.21 + dev: true + + /@vue/runtime-core@3.4.21: + resolution: {integrity: sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==} + dependencies: + '@vue/reactivity': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/runtime-dom@3.4.21: + resolution: {integrity: sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==} + dependencies: + '@vue/runtime-core': 3.4.21 + '@vue/shared': 3.4.21 + csstype: 3.1.3 + dev: true + + /@vue/server-renderer@3.4.21(vue@3.4.21): + resolution: {integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==} + peerDependencies: + vue: 3.4.21 + dependencies: + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 + vue: 3.4.21 + dev: true + + /@vue/shared@3.4.21: + resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} + dev: true + + /@vueuse/core@10.9.0(vue@3.4.21): + resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==} + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.9.0 + '@vueuse/shared': 10.9.0(vue@3.4.21) + vue-demi: 0.14.7(vue@3.4.21) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /@vueuse/integrations@10.9.0(focus-trap@7.5.4)(vue@3.4.21): + resolution: {integrity: sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==} + peerDependencies: + async-validator: '*' + axios: '*' + change-case: '*' + drauu: '*' + focus-trap: '*' + fuse.js: '*' + idb-keyval: '*' + jwt-decode: '*' + nprogress: '*' + qrcode: '*' + sortablejs: '*' + universal-cookie: '*' + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + dependencies: + '@vueuse/core': 10.9.0(vue@3.4.21) + '@vueuse/shared': 10.9.0(vue@3.4.21) + focus-trap: 7.5.4 + vue-demi: 0.14.7(vue@3.4.21) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /@vueuse/metadata@10.9.0: + resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==} + dev: true + + /@vueuse/shared@10.9.0(vue@3.4.21): + resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==} + dependencies: + vue-demi: 0.14.7(vue@3.4.21) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /algoliasearch@4.20.0: + resolution: {integrity: sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==} + dependencies: + '@algolia/cache-browser-local-storage': 4.20.0 + '@algolia/cache-common': 4.20.0 + '@algolia/cache-in-memory': 4.20.0 + '@algolia/client-account': 4.20.0 + '@algolia/client-analytics': 4.20.0 + '@algolia/client-common': 4.20.0 + '@algolia/client-personalization': 4.20.0 + '@algolia/client-search': 4.20.0 + '@algolia/logger-common': 4.20.0 + '@algolia/logger-console': 4.20.0 + '@algolia/requester-browser-xhr': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/requester-node-http': 4.20.0 + '@algolia/transporter': 4.20.0 + dev: true + + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dev: true + + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: true + + /esbuild@0.19.9: + resolution: {integrity: sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.19.9 + '@esbuild/android-arm64': 0.19.9 + '@esbuild/android-x64': 0.19.9 + '@esbuild/darwin-arm64': 0.19.9 + '@esbuild/darwin-x64': 0.19.9 + '@esbuild/freebsd-arm64': 0.19.9 + '@esbuild/freebsd-x64': 0.19.9 + '@esbuild/linux-arm': 0.19.9 + '@esbuild/linux-arm64': 0.19.9 + '@esbuild/linux-ia32': 0.19.9 + '@esbuild/linux-loong64': 0.19.9 + '@esbuild/linux-mips64el': 0.19.9 + '@esbuild/linux-ppc64': 0.19.9 + '@esbuild/linux-riscv64': 0.19.9 + '@esbuild/linux-s390x': 0.19.9 + '@esbuild/linux-x64': 0.19.9 + '@esbuild/netbsd-x64': 0.19.9 + '@esbuild/openbsd-x64': 0.19.9 + '@esbuild/sunos-x64': 0.19.9 + '@esbuild/win32-arm64': 0.19.9 + '@esbuild/win32-ia32': 0.19.9 + '@esbuild/win32-x64': 0.19.9 + dev: true + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /focus-trap@7.5.4: + resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + dependencies: + tabbable: 6.2.0 + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + dev: true + + /magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + dev: true + + /minisearch@6.3.0: + resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==} + dev: true + + /mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + dev: true + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /postcss@8.4.35: + resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /preact@10.19.3: + resolution: {integrity: sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==} + dev: true + + /prettier@3.1.1: + resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + dev: true + + /rollup@4.7.0: + resolution: {integrity: sha512-7Kw0dUP4BWH78zaZCqF1rPyQ8D5DSU6URG45v1dqS/faNsx9WXyess00uTOZxKr7oR/4TOjO1CPudT8L1UsEgw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.7.0 + '@rollup/rollup-android-arm64': 4.7.0 + '@rollup/rollup-darwin-arm64': 4.7.0 + '@rollup/rollup-darwin-x64': 4.7.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.7.0 + '@rollup/rollup-linux-arm64-gnu': 4.7.0 + '@rollup/rollup-linux-arm64-musl': 4.7.0 + '@rollup/rollup-linux-riscv64-gnu': 4.7.0 + '@rollup/rollup-linux-x64-gnu': 4.7.0 + '@rollup/rollup-linux-x64-musl': 4.7.0 + '@rollup/rollup-win32-arm64-msvc': 4.7.0 + '@rollup/rollup-win32-ia32-msvc': 4.7.0 + '@rollup/rollup-win32-x64-msvc': 4.7.0 + fsevents: 2.3.3 + dev: true + + /search-insights@2.11.0: + resolution: {integrity: sha512-Uin2J8Bpm3xaZi9Y8QibSys6uJOFZ+REMrf42v20AA3FUDUrshKkMEP6liJbMAHCm71wO6ls4mwAf7a3gFVxLw==} + dev: true + + /shiki@1.1.7: + resolution: {integrity: sha512-9kUTMjZtcPH3i7vHunA6EraTPpPOITYTdA5uMrvsJRexktqP0s7P3s9HVK80b4pP42FRVe03D7fT3NmJv2yYhw==} + dependencies: + '@shikijs/core': 1.1.7 + dev: true + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + dev: true + + /tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + dev: true + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /vite@5.1.5: + resolution: {integrity: sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.19.9 + postcss: 8.4.35 + rollup: 4.7.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitepress@1.0.0-rc.45(@algolia/client-search@4.20.0)(search-insights@2.11.0): + resolution: {integrity: sha512-/OiYsu5UKpQKA2c0BAZkfyywjfauDjvXyv6Mo4Ra57m5n4Bxg1HgUGoth1CLH2vwUbR/BHvDA9zOM0RDvgeSVQ==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4.3.2 + postcss: ^8.4.35 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + dependencies: + '@docsearch/css': 3.5.2 + '@docsearch/js': 3.5.2(@algolia/client-search@4.20.0)(search-insights@2.11.0) + '@shikijs/core': 1.1.7 + '@shikijs/transformers': 1.1.7 + '@types/markdown-it': 13.0.7 + '@vitejs/plugin-vue': 5.0.4(vite@5.1.5)(vue@3.4.21) + '@vue/devtools-api': 7.0.16(vue@3.4.21) + '@vueuse/core': 10.9.0(vue@3.4.21) + '@vueuse/integrations': 10.9.0(focus-trap@7.5.4)(vue@3.4.21) + focus-trap: 7.5.4 + mark.js: 8.11.1 + minisearch: 6.3.0 + shiki: 1.1.7 + vite: 5.1.5 + vue: 3.4.21 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - '@vue/composition-api' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + dev: true + + /vue-demi@0.14.7(vue@3.4.21): + resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.4.21 + dev: true + + /vue@3.4.21: + resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-sfc': 3.4.21 + '@vue/runtime-dom': 3.4.21 + '@vue/server-renderer': 3.4.21(vue@3.4.21) + '@vue/shared': 3.4.21 + dev: true diff --git a/scripts/after-build.js b/scripts/after-build.js new file mode 100644 index 0000000..b3658ba --- /dev/null +++ b/scripts/after-build.js @@ -0,0 +1,54 @@ +const fs = require('fs'); +const path = require('path'); + +const fromDist = path.join(__dirname, '..', 'src', 'assets'); +const toDir = path.join(__dirname, '..', 'docs', 'assets'); + +// fixPageAssetsPath(); +copyDir(fromDist, toDir, () => { + console.log('Copy files success!'); +}); + +// function fixPageAssetsPath() { +// const htmlPath = path.join(distDir, 'index.html'); +// let html = fs.readFileSync(htmlPath, {encoding: 'utf8' }); +// html = html.replace(/src="\//ig, 'src="./').replace(/href="\//ig, 'href="./'); +// fs.writeFileSync(htmlPath, html); +// } + +function copyDir(src, dist, callback) { + fs.access(dist, function (err) { + if (err) { + fs.mkdirSync(dist); + } + _copy(null, src, dist); + }); + + function _copy(err, src, dist) { + if (err) { + callback(err); + } else { + fs.readdir(src, function (err, paths) { + if (err) { + callback(err); + } else { + paths.forEach(function (item) { + const _src = path.join(src, item); + const _dist = path.join(dist, item); + fs.stat(_src, function (err, stat) { + if (err) { + callback(err); + } else { + if (stat.isFile()) { + fs.writeFileSync(_dist, fs.readFileSync(_src)); + } else if (stat.isDirectory()) { + copyDir(_src, _dist, callback); + } + } + }); + }); + } + }); + } + } +} diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/src/.DS_Store differ diff --git a/src/assets/idraw-with-bg.png b/src/assets/idraw-with-bg.png new file mode 100644 index 0000000..39e27cf Binary files /dev/null and b/src/assets/idraw-with-bg.png differ diff --git a/src/assets/idraw.png b/src/assets/idraw.png new file mode 100644 index 0000000..3b25b90 Binary files /dev/null and b/src/assets/idraw.png differ diff --git a/src/en-US/api/add-element.md b/src/en-US/api/add-element.md new file mode 100644 index 0000000..1b33767 --- /dev/null +++ b/src/en-US/api/add-element.md @@ -0,0 +1,55 @@ +# addElement + +## Introduction + +`addElement` Add elements to the drawing and trigger a rerender. + +## Arguments + +- `{object}` `element` [More Element Infomation>>](./../element/info.md) . + +- `{object}` `{ position?: number[] }`,Optional configuration, `position` element index position, for example `[1, 2]` means adding the element to the third position of the second element (must be of type `Group`). + +## Returns + +- `{object}` + +## Usage + +```js +import { iDraw } from 'idraw'; + +const app = document.querySelector('#app'); +const options = { + width: 600, + height: 400, + devicePixelRatio: 2 +}; +const idraw = new iDraw(app, options); +idraw.setData({ elements: [] }); + +idraw.addElement({ + name: 'rect', + x: 140, + y: 120, + w: 200, + h: 100, + type: 'rect', + detail: { + background: '#f7d3c1', + borderRadius: 20, + borderWidth: 4, + borderColor: '#ff6032' + } +}); +``` + +## Example + +[More Demo >>](https://idrawjs.com/playground/?demo=api-addElement) + + diff --git a/src/en-US/api/center-content.md b/src/en-US/api/center-content.md new file mode 100644 index 0000000..cb25409 --- /dev/null +++ b/src/en-US/api/center-content.md @@ -0,0 +1,45 @@ +# centerContent + +## Introduction + +`centerContent` Display the content in the center of the view. If the content size exceeds the view, the content will be proportionally reduced and centered in the view. + +## Arguments + +- `{object} options` + - `{Data}` `options.data` Optionally, calculate new content data for centered dimensions. + +## Returns + +> N/A + +## Usage + +```js +import { iDraw } from 'idraw'; + +const app = document.querySelector('#app'); +const options = { + width: 600, + height: 400, + devicePixelRatio: 2 +}; +const idraw = new iDraw(app, options); +idraw.setData({ + element: [ + /* ... */ + ] +}); + +idraw.centerContent(); +``` + +## Example + +[More Demo](https://idrawjs.com/playground/?demo=api-centerContent) + + diff --git a/src/en-US/api/delete-element.md b/src/en-US/api/delete-element.md new file mode 100644 index 0000000..72c803c --- /dev/null +++ b/src/en-US/api/delete-element.md @@ -0,0 +1,49 @@ +# deleteElement + +## Introduction + +`addElement` Delete elements to the drawing and trigger a rerender. + +## Arugments + +- `{string}` `uuid` + +## Returns + +> None + +## Usage + +```js +import { iDraw } from 'idraw'; + +const app = document.querySelector('#app'); +const options = { + width: 600, + height: 400, + devicePixelRatio: 2 +}; +const data = { + elements: [ + // .... + ] +}; +const idraw = new iDraw(app, options); +idraw.setData(data); + +const uuid = idraw.getData().elements[0].uuid; + +idraw.deleteElement(uuid); +``` + +## 示例 + +## Example + +[More Demo >>](https://idrawjs.com/playground/?demo=api-deleteElement) + + diff --git a/src/en-US/api/enable-disable.md b/src/en-US/api/enable-disable.md new file mode 100644 index 0000000..2f8f9fc --- /dev/null +++ b/src/en-US/api/enable-disable.md @@ -0,0 +1,53 @@ +# enable/disable + +## Introduction + +- `enable(...)` Turn on a feature +- `disable(...)` Turn off a feature + +## Arguments + +- `{IDrawFeature}` `feat` Feature type + - `'ruler'`: Ruler feature + - `'scroll'`: Scroll feature + - `'scale'`: Scale feature + - `'info'`: Display information, eg. element size + - `-` Other features are to be developed... + +```ts +type IDrawFeature = 'ruler' | 'scroll' | 'scale' | 'info'; // TODO other feature +``` + +## Returns + +> N/A + +## Usage + +```js +import { iDraw } from 'idraw'; + +const app = document.querySelector('#app'); +const options = { + width: 600, + height: 400, + devicePixelRatio: 2 +}; +const idraw = new iDraw(app, options); +idraw.setData(data); +idraw.disable('ruler'); + +setTimeout(() => { + idraw.enable('ruler'); +}, 1000); +``` + +## Example + +[More Demo >>](https://idrawjs.com/playground/?demo=api-enable) + + diff --git a/src/en-US/api/get-data.md b/src/en-US/api/get-data.md new file mode 100644 index 0000000..b2998a4 --- /dev/null +++ b/src/en-US/api/get-data.md @@ -0,0 +1,62 @@ +# getData + +## Introduction + +`getData` The function can be used to get lastest Drawing-Data of Image; + +## Arguments + +- `{object}` `options` + - `{boolean}` `options.compact` + +## Returns + +- `{object}` `data` Drawing-Data + +## Usage + +```js +import { iDraw } from 'idraw'; + +const data = { + elements: [ + { + name: 'rect', + x: 160, + y: 120, + w: 200, + h: 100, + angle: 30, + type: 'rect', + detail: { + background: '#d5f5f9', + borderRadius: 10, + borderWidth: 2, + borderColor: '#3f51b5' + } + } + ] +}; + +const app = document.querySelector('#app'); +const options = { + width: 600, + height: 400, + devicePixelRatio: 2 +}; +const idraw = new iDraw(app, options); +idraw.setData(data); + +const resultData = idraw.getData(); +console.log(resultData); +``` + +## Example + +[More Demo](https://idrawjs.com/playground/?demo=api-getData) + + diff --git a/src/en-US/api/move-element.md b/src/en-US/api/move-element.md new file mode 100644 index 0000000..4b439c8 --- /dev/null +++ b/src/en-US/api/move-element.md @@ -0,0 +1,48 @@ +# moveElement + +## Introduction + +`moveElement` deletes the corresponding element in the picture according to the `uuid` of the element and triggers re-rendering. + +## Arguments + +- `{string}` `uuid` +- `{number[]}` `position` Moves the element to the specified index position. For example, `[1, 2]` means moving the element to the third position of the second element (must be of type `Group`). + +## Returns + +> N/A + +## Usage + +```js +import { iDraw } from 'idraw'; + +const app = document.querySelector('#app'); +const options = { + width: 600, + height: 400, + devicePixelRatio: 2 +}; +const data = { + elements: [ + // .... + ] +}; +const idraw = new iDraw(app, options); +idraw.setData(data); + +const uuid = idraw.getData().elements[0].uuid; + +idraw.moveElement(uuid, { position: [1, 2] }); +``` + +## Example + +[More Demo](https://idrawjs.com/playground/?demo=api-moveElement) + + diff --git a/src/en-US/api/resize.md b/src/en-US/api/resize.md new file mode 100644 index 0000000..3695eb2 --- /dev/null +++ b/src/en-US/api/resize.md @@ -0,0 +1,51 @@ +# resize + +## Introduction + +`resize` The drawing view size can be modified again + +## Arguments + +- `{object}` `options` + - `{number}` `options.width` + - `{number}` `options.height` + - `{number}` `options.devicePixelRatio` + +## Returns + +> N/A + +## Usage + +```js +import { iDraw } from 'idraw'; + +const app = document.querySelector('#app'); +const options = { + width: 600, + height: 400, + devicePixelRatio: 2 +}; +const idraw = new iDraw(app, options); +idraw.setData({ + element: [ + /* ... */ + ] +}); + +idraw.resize({ + width: 300, + height: 200, + devicePixelRatio: 2 +}); +``` + +## Example + +[More Demo](https://idrawjs.com/playground/?demo=api-resize) + + diff --git a/src/en-US/api/select-element.md b/src/en-US/api/select-element.md new file mode 100644 index 0000000..120996f --- /dev/null +++ b/src/en-US/api/select-element.md @@ -0,0 +1,46 @@ +# selectElement + +## Introduction + +`selectElement` It receives a uuid of Element to select Element on Drawing-Image and then change the Element' status on Canvas. + +## Arguments + +- `{string}` `uuid` Element's uuid + +## Returns + +> None + +## Usage + +```js +import { iDraw } from 'idraw'; + +const data = { + elements: [ + // .... + ] +}; +const app = document.querySelector('#app'); +const options = { + width: 600, + height: 400, + devicePixelRatio: 2 +}; +const idraw = new iDraw(app, options); +idraw.setData(data); +const resultData = idraw.getData(); + +idraw.selectElement(resultData.elements[0].uuid); +``` + +## Example + +[More Demo >>](https://idrawjs.com/playground/?demo=api-selectElement) + + diff --git a/src/en-US/api/set-data.md b/src/en-US/api/set-data.md new file mode 100644 index 0000000..66d5a76 --- /dev/null +++ b/src/en-US/api/set-data.md @@ -0,0 +1,57 @@ +# setData + +## Introduction + +`setData` The function receives a Drawing-Data to set drawing content. After that, it will re-render image base on Drawing-Data. + +## Arguments + +- `{object}` `data` Drawing-Data + +## Returns + +> None + +## Usage + +```js +import { iDraw } from 'idraw'; + +const app = document.querySelector('#app'); +const options = { + width: 600, + height: 400, + devicePixelRatio: 2 +}; +const idraw = new iDraw(app, options); +const data = { + elements: [ + { + name: 'rect', + x: 160, + y: 120, + w: 200, + h: 100, + angle: 30, + type: 'rect', + detail: { + background: '#d5f5f9', + borderRadius: 10, + borderWidth: 2, + borderColor: '#3f51b5' + } + } + ] +}; +idraw.setData(data); +``` + +## Example + +[More Demo](https://idrawjs.com/playground/?demo=api-setData) + + diff --git a/src/en-US/api/set-mode.md b/src/en-US/api/set-mode.md new file mode 100644 index 0000000..9120ccb --- /dev/null +++ b/src/en-US/api/set-mode.md @@ -0,0 +1,45 @@ +# setMode + +## Introduction + +`setMode` Can switch view operation mode + +## Arguments + +- `{IDrawType}` `mode` View operating mode + - `'select'`: Selection mode, also the default mode, is used to select and edit elements + - `'drag'`: Drag mode, used to drag and move the overall canvas position + - `'readOnly'`: Read-only mode, only displays the view content and cannot be edited + +```ts +type IDrawMode = 'select' | 'drag' | 'readOnly'; +``` + +## Returns + +> N/A + +## Usage + +```js +import { iDraw } from 'idraw'; + +const app = document.querySelector('#app'); +const options = { + width: 600, + height: 400, + devicePixelRatio: 2 +}; +const idraw = new iDraw(app, options); +idraw.setMode('readOnly'); +``` + +## Example + +[More Demo >>](https://idrawjs.com/playground/?demo=api-setMode) + + diff --git a/src/en-US/api/update-element.md b/src/en-US/api/update-element.md new file mode 100644 index 0000000..b310965 --- /dev/null +++ b/src/en-US/api/update-element.md @@ -0,0 +1,50 @@ +# updateElement + +## Introduction + +`updateElement` updates an element in the drawing and triggers a re-rendering. + +## Arguments + +- `{object}` `element` + +## Returns + +> N/A + +## Usage + +```js +import { iDraw } from 'idraw'; + +const data = { + elements: [ + // .... + ] +}; +const app = document.querySelector('#app'); +const options = { + width: 600, + height: 400, + devicePixelRatio: 2 +}; +const idraw = new iDraw(app, options); +idraw.setData(data); +const resultData = idraw.getData(); + +const elem = resultData.elements[0]; + +elem.detail.color = '#f0f0f0'; + +idraw.updateData(elem); +``` + +## Example + +[More Demo >>](https://idrawjs.com/playground/?demo=api-updateElement) + + diff --git a/src/en-US/element/circle.md b/src/en-US/element/circle.md new file mode 100644 index 0000000..2a76a29 --- /dev/null +++ b/src/en-US/element/circle.md @@ -0,0 +1,78 @@ +# Circle + +## Circle + +It is used to render circular or oval content. The specific type is as follows: + +```ts +type Circle = { + type: 'circle'; + x: number; + y: number; + w: number; + h: number; + angle: number; + detail: { + background: string; + borderRadius?: string; + borderWidth?: number; + borderColor?: number; + }; +}; +``` + +## Circle.detail + +The basic attribute details of the element can be viewed [Element's Detail #](./info.md#element-s-detail) . + +### Circle.detail Data-Type + +The Data-Type of `Circle.detail` + +```ts +type CircleDetail = { + background?: string; + background?: string; + borderWidth?: number; + borderColor?: string; +}; +``` + +### Circle.detail Properties + +| Property | Description | Type | Default | Required | Others | +| ------------ | ------------------------------ | -------- | ------- | -------- | ------------- | +| color | Circle Color | `string` | - | `true` | eg. `#000000` | +| borderRadius | Circle radius of border corner | `number` | `0` | `false` | - | +| borderWidth | Border width of Circle | `number` | `0` | `false` | - | +| borderColor | Border color of Circle | `number` | `0` | `false` | eg. `#000000` | + +### Circle.detail Properties + +```js +const elementCircle = { + name: 'circle', + x: 160, + y: 100, + w: 200, + h: 200, + angle: 0, + type: 'circle', + detail: { + background: '#d5f5f9', + borderRadius: 10, + borderWidth: 4, + borderColor: '#3f51b5' + } +}; +``` + +## Demo Preview + +[More Demo >>](https://idrawjs.com/playground/?demo=elem-circle) + + diff --git a/src/en-US/element/group.md b/src/en-US/element/group.md new file mode 100644 index 0000000..9f2e5d5 --- /dev/null +++ b/src/en-US/element/group.md @@ -0,0 +1,78 @@ +# Group + +## Group + +It is used to render group or oval content. The specific type is as follows: + +```ts +type Group = { + type: 'group'; + x: number; + y: number; + w: number; + h: number; + angle: number; + detail: { + children: Element; + background: string; + borderRadius?: string; + borderWidth?: number; + borderColor?: number; + }; +}; +``` + +## Group.detail + +The basic attribute details of the element can be viewed [Element's Detail #](./info.md#element-s-detail) . + +### Group.detail Data-Type + +The Data-Type of `Group.detail` + +```ts +type GroupDetail = { + children: Array; + background?: string; + background?: string; + borderWidth?: number; + borderColor?: string; +}; +``` + +### Group.detail Properties + +| Property | Description | Type | Default | Required | Others | +| ------------ | ----------------------------- | ---------------- | ------- | -------- | ------------- | +| children | Children element list | `Array` | - | `true` | eg. `#000000` | +| background | Group background color | `string` | - | `false` | eg. `#000000` | +| borderRadius | Group radius of border corner | `number` | `0` | `false` | - | +| borderWidth | Border width of Group | `number` | `0` | `false` | - | +| borderColor | Border color of Group | `number` | `0` | `false` | eg. `#000000` | + +## Complete Data Example + +```js +const elementGroup = { + name: 'group', + x: 160, + y: 120, + w: 200, + h: 100, + angle: 30, + type: 'group', + detail: { + children: [] + } +}; +``` + +## Demo Preview + +[More Demo >>](https://idrawjs.com/playground/?demo=elem-group) + + diff --git a/src/en-US/element/html.md b/src/en-US/element/html.md new file mode 100644 index 0000000..8efbdbc --- /dev/null +++ b/src/en-US/element/html.md @@ -0,0 +1,111 @@ +# HTML + +## HTML + +It is used to render HTML code snippet. The specific type is as follows: + +```ts +type HTML = { + type: 'html'; + x: number; + y: number; + w: number; + h: number; + angle: number; + detail: { + html: string; + }; +}; +``` + +## HTML.detail + +The basic attribute details of the element can be viewed [Element's Detail #](./info.md#element-s-detail). + +### HTML.detail Data-Type + +The Data-Type of `HTML.detail` + +```ts +type HTMLDetail = { + html: string; +}; +``` + +### HTML.detail Properties + +| Property | Description | Type | Default | Required | Others | +| -------- | ----------------- | -------- | ------- | -------- | ------ | +| html | HTML code snippet | `string` | - | `true` | - | + +## Complete Data Example + +```js +const elementHTML = { + name: 'html', + x: 200, + y: 120, + w: 150, + h: 100, + type: 'html', + angle: 0, + detail: { + html: ` + +
+
+ +
+
+ +
+
+ ` + } +}; +``` + +## Demo Preview + +[More Demo >>](https://idrawjs.com/playground/?demo=elem-html) + + diff --git a/src/en-US/element/image.md b/src/en-US/element/image.md new file mode 100644 index 0000000..681f52c --- /dev/null +++ b/src/en-US/element/image.md @@ -0,0 +1,66 @@ +# Image + +## Image + +It is used to render image content. The specific type is as follows: + +```ts +type Image = { + type: 'image'; + x: number; + y: number; + w: number; + h: number; + angle: number; + detail: { + src: string; + }; +}; +``` + +## Image.detail + +The basic attribute details of the element can be viewed [Element's Detail #](./info.md#element-s-detail) . + +### Image.detail Data-Type + +The Data-Type of `Image.detail` + +```ts +type ImageDetail = { + src: string; +}; +``` + +### Image.detail Properties + +| Property | Description | Type | Default | Required | Others | +| -------- | ------------------------ | -------- | ------- | -------- | ------ | +| src | The image URL or DataURL | `string` | - | `true` | - | + +## Complete Data Example + +```js +const elementImage = { + name: 'image', + x: 160, + y: 100, + w: 200, + h: 200, + angle: 0, + type: 'image', + detail: { + src: './image/github.png' + } +}; +``` + +## Demo Preview + +[More Demo >>](https://idrawjs.com/playground/?demo=elem-image) + + diff --git a/src/en-US/element/info.md b/src/en-US/element/info.md new file mode 100644 index 0000000..7a3ac81 --- /dev/null +++ b/src/en-US/element/info.md @@ -0,0 +1,106 @@ +# Element Information + +## What is iDraw.js's Element + +The content of drawing is based on "`Element`" in iDraw.js. Further more, the process of drawing is basically to realize the function of drawing around the layout, style, content and other attributes of controlling elements. + +There eight types of elements are currently supported in iDraw.js : + +1. [Text](./text.md) +2. [Rect](./rect.md) +3. [Circle](./circle.md) +4. [Image](./image.md) +5. [SVG](./svg.md) +6. [HTML](./html.md) +7. [Path](./path.md) +8. [Group](./group.md) + +## Element's Detail + +### Element Basic Content + +```tsx +type Element = { + type: 'text' | 'rect' | 'circle' | 'image' | 'svg' | 'html' | 'path' | 'group'; + uuid: string; + name?: string; + x: number; + y: number; + w: number; + h: number; + angle?: number; + detail: any; // Different element has different description + operations?: { + lock?: boolean; + invisible?: boolean; + limitRatio?: boolean; + }; + extension?: { [key: string]: any } | any; +}; +``` + +### Element Basic Properties + +| Property | Description | Type | Default | Required | Others | +| -------------------- | ------------------------------------ | ------------------------------------------------------------------- | ------- | -------- | -------------------------------------------------------------------------------- | +| type | Element type | `text\| rect\| circle\| image\| svg \| html` | - | `true` | - | +| uuid | Element unique ID | `string` | - | `false` | The UUID is automatically added internally in iDraw.js | +| name | Element name | `string` | - | `false` | - | +| x | X-axis offset | `number` | - | `true` | - | +| y | Y-axis offset | `number` | - | `true` | - | +| w | Element width | `number` | - | `true` | - | +| h | Element height | `number` | - | `true` | - | +| angle | Element rotation angle | `number` | `0` | `false` | `[0, 360]` | +| lock | Set the lock-staus of element | `boolean` | `false` | `false` | The view operation cannot be controlled after the element is locked | +| detail | Detail of different elements | `object` (Please check the description of each element for details) | - | `true` | - | +| operation.lock | Set the lock-staus of element | `boolean` | `false` | `false` | The view operation cannot be controlled after the element is locked | +| operation.invisible | - | `boolean` | `false` | `false` | - | +| operation.limitRatio | Limit element width and height ratio | `boolean` | - | `false` | When the element is scaled, it is scaled according to its width and height ratio | + +## Usage of Elements + +```js +import { iDraw } from 'idraw'; + +import { iDraw } from 'idraw'; +const data = { + elements: [ + { + type: 'text', + name: 'rect-001', + x: 50, + y: 50, + w: 200, + h: 200, + angle: 0, + detail: { + text: 'Hello World', + color: '#3f51b5', + fontSize: 60, + textAlign: 'center', + borderRadius: 10, + borderWidth: 2, + borderColor: '#3f51b5' + } + } + ] +}; + +const app = document.querySelector('#app'); +const idraw = new iDraw(app, { + width: 600, + height: 400, + devicePixelRatio: 2 +}); + +// Set drawing-data for rendering view +idraw.setData(data); +``` + +## Demo Preview + +[More Demo >>](https://idrawjs.com/playground/?demo=elem-rect) + + diff --git a/src/en-US/element/path.md b/src/en-US/element/path.md new file mode 100644 index 0000000..9fd11da --- /dev/null +++ b/src/en-US/element/path.md @@ -0,0 +1,107 @@ +# Path + +## Path + +It is used to render image content. The specific type is as follows: + +```ts +type Path = { + type: 'path'; + x: number; + y: number; + w: number; + h: number; + angle: number; + detail: { + commands: Array<{ + type: 'M' | 'm' | 'L' | 'l' | 'H' | 'h' | 'V' | 'v' | 'C' | 'c' | 'S' | 's' | 'Q' | 'q' | 'T' | 't' | 'A' | 'a' | 'Z' | 'z'; + params: number[]; + }>; + originX: number; + originY: number; + originW: number; + originH: number; + fill?: string; + stroke?: string; + strokeWidth?: number; + strokeLineCap?: 'butt' | 'round' | 'square'; + }; +}; +``` + +## Path.detail Properties + +The basic attribute details of the element can be viewed [Element's Detail #](./info.md#element-s-detail) . + +### Path.detail Data-Type + +```ts +type PathDetail = { + commands: Array<{ + type: 'M' | 'm' | 'L' | 'l' | 'H' | 'h' | 'V' | 'v' | 'C' | 'c' | 'S' | 's' | 'Q' | 'q' | 'T' | 't' | 'A' | 'a' | 'Z' | 'z'; + params: number[]; + }>; + originX: number; + originY: number; + originW: number; + originH: number; + fill?: string; + stroke?: string; + strokeWidth?: number; + strokeLineCap?: 'butt' | 'round' | 'square'; +}; +``` + +### Path.detail Properties + +| Property | Description | Type | Default | Required | Others | +| ------------- | ------------------------ | ------------------------------- | ------- | -------- | ------------- | +| fill | fill color | `string` | - | `true` | eg. `#000000` | +| stroke | path color | `string` | - | `true` | eg. `#000000` | +| strokeWidth | path width | `number` | `0` | `false` | - | +| strokeLineCap | Path turning type | `'butt' \| 'round' \| 'square'` | - | `true` | - | +| originX | Path original X position | `number` | `0` | `false` | - | +| originY | Path original Y position | `number` | `0` | `false` | - | +| originW | Path original width | `number` | `0` | `false` | - | +| originH | Path original height | `number` | `0` | `false` | - | + +## Complete Data Example + +```js +const elementPath = { + uuid: '41d437b8-afbd-2d3d-14bc-912e26d3491f', + x: 100, + y: 100, + w: 80, + h: 80, + angle: 0, + type: 'path', + detail: { + commands: [ + { type: 'M', params: [10, 30] }, + { type: 'A', params: [20, 20, 0, 0, 1, 50, 30] }, + { type: 'A', params: [20, 20, 0, 0, 1, 90, 30] }, + { type: 'Q', params: [90, 60, 50, 90] }, + { type: 'Q', params: [10, 60, 10, 30] }, + { type: 'z', params: [] } + ], + fill: '#FF00006F', + stroke: '#000000', + strokeWidth: 1, + originX: 10, + originY: 10, + originH: 80, + originW: 80 + } +}; +``` + +## Demo Preview + +[More Demo >>](https://idrawjs.com/playground/?demo=elem-path) + + diff --git a/src/en-US/element/rect.md b/src/en-US/element/rect.md new file mode 100644 index 0000000..3e9d98a --- /dev/null +++ b/src/en-US/element/rect.md @@ -0,0 +1,79 @@ +# 矩形元素 + +## Rectangle + +It is used to render rectangle content. The specific type is as follows: + +```ts +type Rect = { + type: 'rect'; + x: number; + y: number; + w: number; + h: number; + angle: number; + detail: { + background: string; + borderRadius?: string; + borderWidth?: number; + borderColor?: number; + }; +}; +``` + +## Rect.detail + +The basic attribute details of the element can be viewed [Element's Detail #](./info.md#element-s-detail) . + +### Rect.detail Data-Type + +The Data-Type of `Rect.detail` + +```ts +type RectDetail = { + background?: string; + background?: string; + borderWidth?: number; + borderColor?: string; +}; +``` + +### Rect.detail Properties + +| Property | Description | Type | Default | Required | Others | +| ------------ | --------------------------------- | -------- | ------- | -------- | ------------- | +| color | Rectangle color | `string` | - | `true` | eg. `#000000` | +| background | Rectangle background color | `string` | - | `true` | eg. `#000000` | +| borderRadius | Rectangle radius of border corner | `number` | `0` | `false` | - | +| borderWidth | Border width of Rectangle | `number` | `0` | `false` | - | +| borderColor | Border color of Rectangle | `string` | - | `false` | eg. `#000000` | + +## Complete Data Example + +```js +const elementRect = { + name: 'rect', + x: 160, + y: 120, + w: 200, + h: 100, + angle: 30, + type: 'rect', + detail: { + background: '#d5f5f9', + borderRadius: 10, + borderWidth: 2, + borderColor: '#3f51b5' + } +}; +``` + +## Demo Preview + +[More Demo >>](https://idrawjs.com/playground/?demo=elem-rect) + + diff --git a/src/en-US/element/svg.md b/src/en-US/element/svg.md new file mode 100644 index 0000000..8dad299 --- /dev/null +++ b/src/en-US/element/svg.md @@ -0,0 +1,66 @@ +# SVG + +## SVG + +It is used to render SVG code snippet. The specific type is as follows: + +```ts +type SVG = { + type: 'svg'; + x: number; + y: number; + w: number; + h: number; + angle: number; + detail: { + svg: string; + }; +}; +``` + +## SVG.detail + +The basic attribute details of the element can be viewed [Element's Detail #](./info.md#element-s-detail). + +### SVG.detail Data-Type + +The Data-Type of `SVG.detail` + +```ts +type SVGDetail = { + svg: string; +}; +``` + +### SVG.detail 数据属性内容 + +| Property | Description | Type | Default | Required | Others | +| -------- | ----------------- | -------- | ------- | -------- | ------ | +| svg | HTML code snippet | `string` | - | `true` | - | + +## 完整数据示例 + +```js +const elementSVG = { + name: 'svg', + x: 160, + y: 100, + w: 200, + h: 200, + angle: 0, + type: 'svg', + detail: { + svg: `` + } +}; +``` + +## Demo Preview + +[More Demo >>](https://idrawjs.com/playground/?demo=elem-svg) + + diff --git a/src/en-US/element/text.md b/src/en-US/element/text.md new file mode 100644 index 0000000..2ba373c --- /dev/null +++ b/src/en-US/element/text.md @@ -0,0 +1,90 @@ +# Text + +## Text + +It is used to render text content. The specific type is as follows: + +```ts +type Text = { + type: 'text'; + x: number; + y: number; + w: number; + h: number; + angle: number; + detail: { + text: string; + color?: string; + fontSize?: string; + fontFamily?: string; + textAlign?: 'left' | 'center' | 'right'; +}; +``` + +## Text.detail 详解 + +元素的基本属性详情可以看 [元素介绍-数据基本格式](./info.md#数据基本格式) 。 + +### Text.detail 数据格式 + +Text元素的`detail`属性 + +```ts +type TextDetail = { + text: string; + color?: string; + fontSize?: number; + lineHeight?: number; + fontWeight?: 'bold' | string | number; + fontFamily?: string; + textAlign?: 'center' | 'left' | 'right'; + verticalAlign?: 'middle' | 'top' | 'bottom'; +}; +``` + +### Text.detail Properties + +| Property | Description | Type | Default | Required | Others | +| ------------- | ------------------- | ------------------------------- | -------- | -------- | ------------- | +| text | Text Content | `string` | - | `true` | - | +| color | Font color of Text | `string` | - | `true` | eg. `#000000` | +| fontSize | Font size of Text | `number` | `12` | `false` | - | +| lineHeight | Line height of Text | `number` | - | `false` | - | +| fontWeight | Font bold | `number` | - | `false` | - | +| fontFamily | Font family of Text | `string` | - | `false` | - | +| textAlign | Text align | `'left' \| 'center' \| 'right'` | `'left'` | `false` | - | +| verticalAlign | Vertical Align | `'top' \| 'middle' \| 'bottom'` | `'top'` | `false` | - | + +## Complete Data Example + +```js +const elementText = { + name: 'text', + x: 160, + y: 80, + w: 200, + h: 200, + angle: 0, + type: 'text', + detail: { + text: 'Hello World', + color: '#3f51b5', + fontSize: 60, + textAlign: 'center', + background: '#3f51b51f', + borderRadius: 10, + borderWidth: 2, + borderColor: '#3f51b5' + } +}; +``` + +## Demo Preview + +[More Demo](https://idrawjs.com/playground/?demo=elem-text) + + diff --git a/src/en-US/guide/class-idraw.md b/src/en-US/guide/class-idraw.md new file mode 100644 index 0000000..a50a142 --- /dev/null +++ b/src/en-US/guide/class-idraw.md @@ -0,0 +1,48 @@ +# Class iDraw + +## Arguments + +```js +import { iDraw } from 'idraw'; +const dom = document.querySelector('#app'); +const options = { + width: 600, + height: 400, + devicePixelRatio: 2 +}; + +const idraw = new iDraw(dom, options); +``` + +| Arugment | Description | Type | Default | Required | Others | +| -------- | ----------------------- | ---------------- | ------- | -------- | ------ | +| dom | Canvas mounted DOM | `HTMLDivElement` | - | `true` | - | +| options | Image rendering options | [Object] | - | `true` | - | + +## Options + +```ts +type Options = { + width: number; + height: number; + devicePixelRatio: number; +}; +``` + +### Options Properties + +| Property | Description | Type | Default | Required | Others | +| ---------------- | ---------------------- | -------- | ------- | -------- | ------ | +| width | Drawing board's width | `number` | - | `true` | - | +| height | Drawing board's height | `number` | - | `true` | - | +| devicePixelRatio | Device pixel scale | `number` | `1` | `false` | - | + +### Options Preivew + +[More Demo >>](https://idrawjs.com/playground/?demo=basic-options) + + diff --git a/src/en-US/guide/installation.md b/src/en-US/guide/installation.md new file mode 100644 index 0000000..4032687 --- /dev/null +++ b/src/en-US/guide/installation.md @@ -0,0 +1,50 @@ +# Installation + +## Lastest Version + +[![iDraw.js](https://img.shields.io/npm/v/idraw.svg?sanitize=idraw)](https://www.npmjs.com/package/idraw) + +## Installation + +There are three ways of adding `iDraw.js` to a project: + +1. Install it using [NPM](#npm). +2. Import it as a [CDN Package](#cdn) on the page. +3. Download the JavaScript file and [host them yourself](#download-and-self-host). + +## NPM + +NPM is the recommended installation method when building large scale with `iDraw.js`. It pairs nicely with module bundlers such as Webpack, Rollup or Vite. + +```sh +npm install idraw +``` + +## CDN + +For prototyping or learning purposes, you can use the latest version with: + +```html + +``` + +```html + + +``` + +## Download and Self Host + +If you want to avoid using build tools but can't use CDN in production then you can download the relevant `.js` file and host it using your own web server. You can include it using a ` +``` + +```html + + +``` + +:::warning +不建议用 unpkg.com 站点的CDN资源的放在生产环境 +::: + +## 自托管JavaScript文件 + +如果不想使用构建工具,同时无法直接使用 CDN方式 调用,那么可以将相关的 `.js` 文件下载到项目本地或者服务器上托管。最后通过 `