@363045841yyt/klinechart 0.2.7 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -13,4 +13,4 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.
13
13
  || ${s} === "boolean" || ${a} === null`).assign(c,(0,i._)`[${a}]`)}}}function p({gen:e,parentData:t,parentDataProperty:n},r){e.if((0,i._)`${t} !== undefined`,()=>e.assign((0,i._)`${t}[${n}]`,r))}function m(e,t,n,r=o.Correct){let a=r===o.Correct?i.operators.EQ:i.operators.NEQ,s;switch(e){case`null`:return(0,i._)`${t} ${a} null`;case`array`:s=(0,i._)`Array.isArray(${t})`;break;case`object`:s=(0,i._)`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case`integer`:s=c((0,i._)`!(${t} % 1) && !isNaN(${t})`);break;case`number`:s=c();break;default:return(0,i._)`typeof ${t} ${a} ${e}`}return r===o.Correct?s:(0,i.not)(s);function c(e=i.nil){return(0,i.and)((0,i._)`typeof ${t} == "number"`,e,n?(0,i._)`isFinite(${t})`:i.nil)}}e.checkDataType=m;function h(e,t,n,r){if(e.length===1)return m(e[0],t,n,r);let o,s=(0,a.toHash)(e);if(s.array&&s.object){let e=(0,i._)`typeof ${t} != "object"`;o=s.null?e:(0,i._)`!${t} || ${e}`,delete s.null,delete s.array,delete s.object}else o=i.nil;s.number&&delete s.integer;for(let e in s)o=(0,i.and)(o,m(e,t,n,r));return o}e.checkDataTypes=h;var g={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:t})=>typeof e==`string`?(0,i._)`{type: ${e}}`:(0,i._)`{type: ${t}}`};function _(e){let t=v(e);(0,r.reportError)(t,g)}e.reportTypeError=_;function v(e){let{gen:t,data:n,schema:r}=e,i=(0,a.schemaRefOrVal)(e,r,`type`);return{gen:t,keyword:`type`,data:n,schema:r.type,schemaCode:i,schemaValue:i,parentSchema:r,params:{},it:e}}})),Zn=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.assignDefaults=void 0;var t=U(),n=W();function r(e,t){let{properties:n,items:r}=e.schema;if(t===`object`&&n)for(let t in n)i(e,t,n[t].default);else t===`array`&&Array.isArray(r)&&r.forEach((t,n)=>i(e,n,t.default))}e.assignDefaults=r;function i(e,r,i){let{gen:a,compositeRule:o,data:s,opts:c}=e;if(i===void 0)return;let l=(0,t._)`${s}${(0,t.getProperty)(r)}`;if(o){(0,n.checkStrictMode)(e,`default is ignored for: ${l}`);return}let u=(0,t._)`${l} === undefined`;c.useDefaults===`empty`&&(u=(0,t._)`${u} || ${l} === null || ${l} === ""`),a.if(u,(0,t._)`${l} = ${(0,t.stringify)(i)}`)}})),G=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.validateUnion=e.validateArray=e.usePattern=e.callValidateCode=e.schemaProperties=e.allSchemaProperties=e.noPropertyInData=e.propertyInData=e.isOwnProperty=e.hasPropFunc=e.reportMissingProp=e.checkMissingProp=e.checkReportMissingProp=void 0;var t=U(),n=W(),r=Gn(),i=W();function a(e,n){let{gen:r,data:i,it:a}=e;r.if(d(r,i,n,a.opts.ownProperties),()=>{e.setParams({missingProperty:(0,t._)`${n}`},!0),e.error()})}e.checkReportMissingProp=a;function o({gen:e,data:n,it:{opts:r}},i,a){return(0,t.or)(...i.map(i=>(0,t.and)(d(e,n,i,r.ownProperties),(0,t._)`${a} = ${i}`)))}e.checkMissingProp=o;function s(e,t){e.setParams({missingProperty:t},!0),e.error()}e.reportMissingProp=s;function c(e){return e.scopeValue(`func`,{ref:Object.prototype.hasOwnProperty,code:(0,t._)`Object.prototype.hasOwnProperty`})}e.hasPropFunc=c;function l(e,n,r){return(0,t._)`${c(e)}.call(${n}, ${r})`}e.isOwnProperty=l;function u(e,n,r,i){let a=(0,t._)`${n}${(0,t.getProperty)(r)} !== undefined`;return i?(0,t._)`${a} && ${l(e,n,r)}`:a}e.propertyInData=u;function d(e,n,r,i){let a=(0,t._)`${n}${(0,t.getProperty)(r)} === undefined`;return i?(0,t.or)(a,(0,t.not)(l(e,n,r))):a}e.noPropertyInData=d;function f(e){return e?Object.keys(e).filter(e=>e!==`__proto__`):[]}e.allSchemaProperties=f;function p(e,t){return f(t).filter(r=>!(0,n.alwaysValidSchema)(e,t[r]))}e.schemaProperties=p;function m({schemaCode:e,data:n,it:{gen:i,topSchemaRef:a,schemaPath:o,errorPath:s},it:c},l,u,d){let f=d?(0,t._)`${e}, ${n}, ${a}${o}`:n,p=[[r.default.instancePath,(0,t.strConcat)(r.default.instancePath,s)],[r.default.parentData,c.parentData],[r.default.parentDataProperty,c.parentDataProperty],[r.default.rootData,r.default.rootData]];c.opts.dynamicRef&&p.push([r.default.dynamicAnchors,r.default.dynamicAnchors]);let m=(0,t._)`${f}, ${i.object(...p)}`;return u===t.nil?(0,t._)`${l}(${m})`:(0,t._)`${l}.call(${u}, ${m})`}e.callValidateCode=m;var h=(0,t._)`new RegExp`;function g({gen:e,it:{opts:n}},r){let a=n.unicodeRegExp?`u`:``,{regExp:o}=n.code,s=o(r,a);return e.scopeValue(`pattern`,{key:s.toString(),ref:s,code:(0,t._)`${o.code===`new RegExp`?h:(0,i.useFunc)(e,o)}(${r}, ${a})`})}e.usePattern=g;function _(e){let{gen:r,data:i,keyword:a,it:o}=e,s=r.name(`valid`);if(o.allErrors){let e=r.let(`valid`,!0);return c(()=>r.assign(e,!1)),e}return r.var(s,!0),c(()=>r.break()),s;function c(o){let c=r.const(`len`,(0,t._)`${i}.length`);r.forRange(`i`,0,c,i=>{e.subschema({keyword:a,dataProp:i,dataPropType:n.Type.Num},s),r.if((0,t.not)(s),o)})}}e.validateArray=_;function v(e){let{gen:r,schema:i,keyword:a,it:o}=e;if(!Array.isArray(i))throw Error(`ajv implementation error`);if(i.some(e=>(0,n.alwaysValidSchema)(o,e))&&!o.opts.unevaluated)return;let s=r.let(`valid`,!1),c=r.name(`_valid`);r.block(()=>i.forEach((n,i)=>{let o=e.subschema({keyword:a,schemaProp:i,compositeRule:!0},c);r.assign(s,(0,t._)`${s} || ${c}`),e.mergeValidEvaluated(o,c)||r.if((0,t.not)(s))})),e.result(s,()=>e.reset(),()=>e.error(!0))}e.validateUnion=v})),Qn=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.validateKeywordUsage=e.validSchemaType=e.funcKeywordCode=e.macroKeywordCode=void 0;var t=U(),n=Gn(),r=G(),i=Kn();function a(e,n){let{gen:r,keyword:i,schema:a,parentSchema:o,it:s}=e,c=n.macro.call(s.self,a,o,s),l=u(r,i,c);s.opts.validateSchema!==!1&&s.self.validateSchema(c,!0);let d=r.name(`valid`);e.subschema({schema:c,schemaPath:t.nil,errSchemaPath:`${s.errSchemaPath}/${i}`,topSchemaRef:l,compositeRule:!0},d),e.pass(d,()=>e.error(!0))}e.macroKeywordCode=a;function o(e,i){let{gen:a,keyword:o,schema:d,parentSchema:f,$data:p,it:m}=e;l(m,i);let h=u(a,o,!p&&i.compile?i.compile.call(m.self,d,f,m):i.validate),g=a.let(`valid`);e.block$data(g,_),e.ok(i.valid??g);function _(){if(i.errors===!1)b(),i.modifying&&s(e),x(()=>e.error());else{let t=i.async?v():y();i.modifying&&s(e),x(()=>c(e,t))}}function v(){let e=a.let(`ruleErrs`,null);return a.try(()=>b((0,t._)`await `),n=>a.assign(g,!1).if((0,t._)`${n} instanceof ${m.ValidationError}`,()=>a.assign(e,(0,t._)`${n}.errors`),()=>a.throw(n))),e}function y(){let e=(0,t._)`${h}.errors`;return a.assign(e,null),b(t.nil),e}function b(o=i.async?(0,t._)`await `:t.nil){let s=m.opts.passContext?n.default.this:n.default.self,c=!(`compile`in i&&!p||i.schema===!1);a.assign(g,(0,t._)`${o}${(0,r.callValidateCode)(e,h,s,c)}`,i.modifying)}function x(e){a.if((0,t.not)(i.valid??g),e)}}e.funcKeywordCode=o;function s(e){let{gen:n,data:r,it:i}=e;n.if(i.parentData,()=>n.assign(r,(0,t._)`${i.parentData}[${i.parentDataProperty}]`))}function c(e,r){let{gen:a}=e;a.if((0,t._)`Array.isArray(${r})`,()=>{a.assign(n.default.vErrors,(0,t._)`${n.default.vErrors} === null ? ${r} : ${n.default.vErrors}.concat(${r})`).assign(n.default.errors,(0,t._)`${n.default.vErrors}.length`),(0,i.extendErrors)(e)},()=>e.error())}function l({schemaEnv:e},t){if(t.async&&!e.$async)throw Error(`async keyword in sync schema`)}function u(e,n,r){if(r===void 0)throw Error(`keyword "${n}" failed to compile`);return e.scopeValue(`keyword`,typeof r==`function`?{ref:r}:{ref:r,code:(0,t.stringify)(r)})}function d(e,t,n=!1){return!t.length||t.some(t=>t===`array`?Array.isArray(e):t===`object`?e&&typeof e==`object`&&!Array.isArray(e):typeof e==t||n&&e===void 0)}e.validSchemaType=d;function f({schema:e,opts:t,self:n,errSchemaPath:r},i,a){if(Array.isArray(i.keyword)?!i.keyword.includes(a):i.keyword!==a)throw Error(`ajv implementation error`);let o=i.dependencies;if(o?.some(t=>!Object.prototype.hasOwnProperty.call(e,t)))throw Error(`parent schema must have dependencies of ${a}: ${o.join(`,`)}`);if(i.validateSchema&&!i.validateSchema(e[a])){let e=`keyword "${a}" value is invalid at path "${r}": `+n.errorsText(i.validateSchema.errors);if(t.validateSchema===`log`)n.logger.error(e);else throw Error(e)}}e.validateKeywordUsage=f})),$n=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.extendSubschemaMode=e.extendSubschemaData=e.getSubschema=void 0;var t=U(),n=W();function r(e,{keyword:r,schemaProp:i,schema:a,schemaPath:o,errSchemaPath:s,topSchemaRef:c}){if(r!==void 0&&a!==void 0)throw Error(`both "keyword" and "schema" passed, only one allowed`);if(r!==void 0){let a=e.schema[r];return i===void 0?{schema:a,schemaPath:(0,t._)`${e.schemaPath}${(0,t.getProperty)(r)}`,errSchemaPath:`${e.errSchemaPath}/${r}`}:{schema:a[i],schemaPath:(0,t._)`${e.schemaPath}${(0,t.getProperty)(r)}${(0,t.getProperty)(i)}`,errSchemaPath:`${e.errSchemaPath}/${r}/${(0,n.escapeFragment)(i)}`}}if(a!==void 0){if(o===void 0||s===void 0||c===void 0)throw Error(`"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"`);return{schema:a,schemaPath:o,topSchemaRef:c,errSchemaPath:s}}throw Error(`either "keyword" or "schema" must be passed`)}e.getSubschema=r;function i(e,r,{dataProp:i,dataPropType:a,data:o,dataTypes:s,propertyName:c}){if(o!==void 0&&i!==void 0)throw Error(`both "data" and "dataProp" passed, only one allowed`);let{gen:l}=r;if(i!==void 0){let{errorPath:o,dataPathArr:s,opts:c}=r;u(l.let(`data`,(0,t._)`${r.data}${(0,t.getProperty)(i)}`,!0)),e.errorPath=(0,t.str)`${o}${(0,n.getErrorPath)(i,a,c.jsPropertySyntax)}`,e.parentDataProperty=(0,t._)`${i}`,e.dataPathArr=[...s,e.parentDataProperty]}o!==void 0&&(u(o instanceof t.Name?o:l.let(`data`,o,!0)),c!==void 0&&(e.propertyName=c)),s&&(e.dataTypes=s);function u(t){e.data=t,e.dataLevel=r.dataLevel+1,e.dataTypes=[],r.definedProperties=new Set,e.parentData=r.data,e.dataNames=[...r.dataNames,t]}}e.extendSubschemaData=i;function a(e,{jtdDiscriminator:t,jtdMetadata:n,compositeRule:r,createErrors:i,allErrors:a}){r!==void 0&&(e.compositeRule=r),i!==void 0&&(e.createErrors=i),a!==void 0&&(e.allErrors=a),e.jtdDiscriminator=t,e.jtdMetadata=n}e.extendSubschemaMode=a})),er=s(((e,t)=>{t.exports=function e(t,n){if(t===n)return!0;if(t&&n&&typeof t==`object`&&typeof n==`object`){if(t.constructor!==n.constructor)return!1;var r,i,a;if(Array.isArray(t)){if(r=t.length,r!=n.length)return!1;for(i=r;i--!==0;)if(!e(t[i],n[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if(a=Object.keys(t),r=a.length,r!==Object.keys(n).length)return!1;for(i=r;i--!==0;)if(!Object.prototype.hasOwnProperty.call(n,a[i]))return!1;for(i=r;i--!==0;){var o=a[i];if(!e(t[o],n[o]))return!1}return!0}return t!==t&&n!==n}})),tr=s(((e,t)=>{var n=t.exports=function(e,t,n){typeof t==`function`&&(n=t,t={}),n=t.cb||n;var i=typeof n==`function`?n:n.pre||function(){},a=n.post||function(){};r(t,i,a,e,``,e)};n.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0},n.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},n.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},n.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function r(e,t,a,o,s,c,l,u,d,f){if(o&&typeof o==`object`&&!Array.isArray(o)){for(var p in t(o,s,c,l,u,d,f),o){var m=o[p];if(Array.isArray(m)){if(p in n.arrayKeywords)for(var h=0;h<m.length;h++)r(e,t,a,m[h],s+`/`+p+`/`+h,c,s,p,o,h)}else if(p in n.propsKeywords){if(m&&typeof m==`object`)for(var g in m)r(e,t,a,m[g],s+`/`+p+`/`+i(g),c,s,p,o,g)}else (p in n.keywords||e.allKeys&&!(p in n.skipKeywords))&&r(e,t,a,m,s+`/`+p,c,s,p,o)}a(o,s,c,l,u,d,f)}}function i(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}})),nr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.getSchemaRefs=e.resolveUrl=e.normalizeId=e._getFullPath=e.getFullPath=e.inlineRef=void 0;var t=W(),n=er(),r=tr(),i=new Set([`type`,`format`,`pattern`,`maxLength`,`minLength`,`maxProperties`,`minProperties`,`maxItems`,`minItems`,`maximum`,`minimum`,`uniqueItems`,`multipleOf`,`required`,`enum`,`const`]);function a(e,t=!0){return typeof e==`boolean`?!0:t===!0?!s(e):t?c(e)<=t:!1}e.inlineRef=a;var o=new Set([`$ref`,`$recursiveRef`,`$recursiveAnchor`,`$dynamicRef`,`$dynamicAnchor`]);function s(e){for(let t in e){if(o.has(t))return!0;let n=e[t];if(Array.isArray(n)&&n.some(s)||typeof n==`object`&&s(n))return!0}return!1}function c(e){let n=0;for(let r in e)if(r===`$ref`||(n++,!i.has(r)&&(typeof e[r]==`object`&&(0,t.eachItem)(e[r],e=>n+=c(e)),n===1/0)))return 1/0;return n}function l(e,t=``,n){return n!==!1&&(t=f(t)),u(e,e.parse(t))}e.getFullPath=l;function u(e,t){return e.serialize(t).split(`#`)[0]+`#`}e._getFullPath=u;var d=/#\/?$/;function f(e){return e?e.replace(d,``):``}e.normalizeId=f;function p(e,t,n){return n=f(n),e.resolve(t,n)}e.resolveUrl=p;var m=/^[a-z_][-a-z0-9._]*$/i;function h(e,t){if(typeof e==`boolean`)return{};let{schemaId:i,uriResolver:a}=this.opts,o=f(e[i]||t),s={"":o},c=l(a,o,!1),u={},d=new Set;return r(e,{allKeys:!0},(e,t,n,r)=>{if(r===void 0)return;let a=c+t,o=s[r];typeof e[i]==`string`&&(o=l.call(this,e[i])),g.call(this,e.$anchor),g.call(this,e.$dynamicAnchor),s[t]=o;function l(t){let n=this.opts.uriResolver.resolve;if(t=f(o?n(o,t):t),d.has(t))throw h(t);d.add(t);let r=this.refs[t];return typeof r==`string`&&(r=this.refs[r]),typeof r==`object`?p(e,r.schema,t):t!==f(a)&&(t[0]===`#`?(p(e,u[t],t),u[t]=e):this.refs[t]=a),t}function g(e){if(typeof e==`string`){if(!m.test(e))throw Error(`invalid anchor "${e}"`);l.call(this,`#${e}`)}}}),u;function p(e,t,r){if(t!==void 0&&!n(e,t))throw h(r)}function h(e){return Error(`reference "${e}" resolves to more than one schema`)}}e.getSchemaRefs=h})),rr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.getData=e.KeywordCxt=e.validateFunctionCode=void 0;var t=qn(),n=Xn(),r=Yn(),i=Xn(),a=Zn(),o=Qn(),s=$n(),c=U(),l=Gn(),u=nr(),d=W(),f=Kn();function p(e){if(S(e)&&(w(e),x(e))){_(e);return}m(e,()=>(0,t.topBoolOrEmptySchema)(e))}e.validateFunctionCode=p;function m({gen:e,validateName:t,schema:n,schemaEnv:r,opts:i},a){i.code.es5?e.func(t,(0,c._)`${l.default.data}, ${l.default.valCxt}`,r.$async,()=>{e.code((0,c._)`"use strict"; ${y(n,i)}`),g(e,i),e.code(a)}):e.func(t,(0,c._)`${l.default.data}, ${h(i)}`,r.$async,()=>e.code(y(n,i)).code(a))}function h(e){return(0,c._)`{${l.default.instancePath}="", ${l.default.parentData}, ${l.default.parentDataProperty}, ${l.default.rootData}=${l.default.data}${e.dynamicRef?(0,c._)`, ${l.default.dynamicAnchors}={}`:c.nil}}={}`}function g(e,t){e.if(l.default.valCxt,()=>{e.var(l.default.instancePath,(0,c._)`${l.default.valCxt}.${l.default.instancePath}`),e.var(l.default.parentData,(0,c._)`${l.default.valCxt}.${l.default.parentData}`),e.var(l.default.parentDataProperty,(0,c._)`${l.default.valCxt}.${l.default.parentDataProperty}`),e.var(l.default.rootData,(0,c._)`${l.default.valCxt}.${l.default.rootData}`),t.dynamicRef&&e.var(l.default.dynamicAnchors,(0,c._)`${l.default.valCxt}.${l.default.dynamicAnchors}`)},()=>{e.var(l.default.instancePath,(0,c._)`""`),e.var(l.default.parentData,(0,c._)`undefined`),e.var(l.default.parentDataProperty,(0,c._)`undefined`),e.var(l.default.rootData,l.default.data),t.dynamicRef&&e.var(l.default.dynamicAnchors,(0,c._)`{}`)})}function _(e){let{schema:t,opts:n,gen:r}=e;m(e,()=>{n.$comment&&t.$comment&&A(e),D(e),r.let(l.default.vErrors,null),r.let(l.default.errors,0),n.unevaluated&&v(e),T(e),j(e)})}function v(e){let{gen:t,validateName:n}=e;e.evaluated=t.const(`evaluated`,(0,c._)`${n}.evaluated`),t.if((0,c._)`${e.evaluated}.dynamicProps`,()=>t.assign((0,c._)`${e.evaluated}.props`,(0,c._)`undefined`)),t.if((0,c._)`${e.evaluated}.dynamicItems`,()=>t.assign((0,c._)`${e.evaluated}.items`,(0,c._)`undefined`))}function y(e,t){let n=typeof e==`object`&&e[t.schemaId];return n&&(t.code.source||t.code.process)?(0,c._)`/*# sourceURL=${n} */`:c.nil}function b(e,n){if(S(e)&&(w(e),x(e))){C(e,n);return}(0,t.boolOrEmptySchema)(e,n)}function x({schema:e,self:t}){if(typeof e==`boolean`)return!e;for(let n in e)if(t.RULES.all[n])return!0;return!1}function S(e){return typeof e.schema!=`boolean`}function C(e,t){let{schema:n,gen:r,opts:i}=e;i.$comment&&n.$comment&&A(e),O(e),k(e);let a=r.const(`_errs`,l.default.errors);T(e,a),r.var(t,(0,c._)`${a} === ${l.default.errors}`)}function w(e){(0,d.checkUnknownRules)(e),E(e)}function T(e,t){if(e.opts.jtd)return ee(e,[],!1,t);let r=(0,n.getSchemaTypes)(e.schema);ee(e,r,!(0,n.coerceAndCheckDataType)(e,r),t)}function E(e){let{schema:t,errSchemaPath:n,opts:r,self:i}=e;t.$ref&&r.ignoreKeywordsWithRef&&(0,d.schemaHasRulesButRef)(t,i.RULES)&&i.logger.warn(`$ref: keywords ignored in schema at path "${n}"`)}function D(e){let{schema:t,opts:n}=e;t.default!==void 0&&n.useDefaults&&n.strictSchema&&(0,d.checkStrictMode)(e,`default is ignored in the schema root`)}function O(e){let t=e.schema[e.opts.schemaId];t&&(e.baseId=(0,u.resolveUrl)(e.opts.uriResolver,e.baseId,t))}function k(e){if(e.schema.$async&&!e.schemaEnv.$async)throw Error(`async schema in sync schema`)}function A({gen:e,schemaEnv:t,schema:n,errSchemaPath:r,opts:i}){let a=n.$comment;if(i.$comment===!0)e.code((0,c._)`${l.default.self}.logger.log(${a})`);else if(typeof i.$comment==`function`){let n=(0,c.str)`${r}/$comment`,i=e.scopeValue(`root`,{ref:t.root});e.code((0,c._)`${l.default.self}.opts.$comment(${a}, ${n}, ${i}.schema)`)}}function j(e){let{gen:t,schemaEnv:n,validateName:r,ValidationError:i,opts:a}=e;n.$async?t.if((0,c._)`${l.default.errors} === 0`,()=>t.return(l.default.data),()=>t.throw((0,c._)`new ${i}(${l.default.vErrors})`)):(t.assign((0,c._)`${r}.errors`,l.default.vErrors),a.unevaluated&&M(e),t.return((0,c._)`${l.default.errors} === 0`))}function M({gen:e,evaluated:t,props:n,items:r}){n instanceof c.Name&&e.assign((0,c._)`${t}.props`,n),r instanceof c.Name&&e.assign((0,c._)`${t}.items`,r)}function ee(e,t,n,a){let{gen:o,schema:s,data:u,allErrors:f,opts:p,self:m}=e,{RULES:h}=m;if(s.$ref&&(p.ignoreKeywordsWithRef||!(0,d.schemaHasRulesButRef)(s,h))){o.block(()=>se(e,`$ref`,h.all.$ref.definition));return}p.jtd||N(e,t),o.block(()=>{for(let e of h.rules)g(e);g(h.post)});function g(d){(0,r.shouldUseGroup)(s,d)&&(d.type?(o.if((0,i.checkDataType)(d.type,u,p.strictNumbers)),te(e,d),t.length===1&&t[0]===d.type&&n&&(o.else(),(0,i.reportTypeError)(e)),o.endIf()):te(e,d),f||o.if((0,c._)`${l.default.errors} === ${a||0}`))}}function te(e,t){let{gen:n,schema:i,opts:{useDefaults:o}}=e;o&&(0,a.assignDefaults)(e,t.type),n.block(()=>{for(let n of t.rules)(0,r.shouldUseRule)(i,n)&&se(e,n.keyword,n.definition,t.type)})}function N(e,t){e.schemaEnv.meta||!e.opts.strictTypes||(P(e,t),e.opts.allowUnionTypes||F(e,t),ne(e,e.dataTypes))}function P(e,t){if(t.length){if(!e.dataTypes.length){e.dataTypes=t;return}t.forEach(t=>{re(e.dataTypes,t)||ae(e,`type "${t}" not allowed by context "${e.dataTypes.join(`,`)}"`)}),ie(e,t)}}function F(e,t){t.length>1&&!(t.length===2&&t.includes(`null`))&&ae(e,`use allowUnionTypes to allow union type keyword`)}function ne(e,t){let n=e.self.RULES.all;for(let i in n){let a=n[i];if(typeof a==`object`&&(0,r.shouldUseRule)(e.schema,a)){let{type:n}=a.definition;n.length&&!n.some(e=>I(t,e))&&ae(e,`missing type "${n.join(`,`)}" for keyword "${i}"`)}}}function I(e,t){return e.includes(t)||t===`number`&&e.includes(`integer`)}function re(e,t){return e.includes(t)||t===`integer`&&e.includes(`number`)}function ie(e,t){let n=[];for(let r of e.dataTypes)re(t,r)?n.push(r):t.includes(`integer`)&&r===`number`&&n.push(`integer`);e.dataTypes=n}function ae(e,t){let n=e.schemaEnv.baseId+e.errSchemaPath;t+=` at "${n}" (strictTypes)`,(0,d.checkStrictMode)(e,t,e.opts.strictTypes)}var oe=class{constructor(e,t,n){if((0,o.validateKeywordUsage)(e,t,n),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=n,this.data=e.data,this.schema=e.schema[n],this.$data=t.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,d.schemaRefOrVal)(e,this.schema,n,this.$data),this.schemaType=t.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=t,this.$data)this.schemaCode=e.gen.const(`vSchema`,ue(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,o.validSchemaType)(this.schema,t.schemaType,t.allowUndefined))throw Error(`${n} value must be ${JSON.stringify(t.schemaType)}`);(`code`in t?t.trackErrors:t.errors!==!1)&&(this.errsCount=e.gen.const(`_errs`,l.default.errors))}result(e,t,n){this.failResult((0,c.not)(e),t,n)}failResult(e,t,n){this.gen.if(e),n?n():this.error(),t?(this.gen.else(),t(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(e,t){this.failResult((0,c.not)(e),void 0,t)}fail(e){if(e===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(e),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:t}=this;this.fail((0,c._)`${t} !== undefined && (${(0,c.or)(this.invalid$data(),e)})`)}error(e,t,n){if(t){this.setParams(t),this._error(e,n),this.setParams({});return}this._error(e,n)}_error(e,t){(e?f.reportExtraError:f.reportError)(this,this.def.error,t)}$dataError(){(0,f.reportError)(this,this.def.$dataError||f.keyword$DataError)}reset(){if(this.errsCount===void 0)throw Error(`add "trackErrors" to keyword definition`);(0,f.resetErrorsCount)(this.gen,this.errsCount)}ok(e){this.allErrors||this.gen.if(e)}setParams(e,t){t?Object.assign(this.params,e):this.params=e}block$data(e,t,n=c.nil){this.gen.block(()=>{this.check$data(e,n),t()})}check$data(e=c.nil,t=c.nil){if(!this.$data)return;let{gen:n,schemaCode:r,schemaType:i,def:a}=this;n.if((0,c.or)((0,c._)`${r} === undefined`,t)),e!==c.nil&&n.assign(e,!0),(i.length||a.validateSchema)&&(n.elseIf(this.invalid$data()),this.$dataError(),e!==c.nil&&n.assign(e,!1)),n.else()}invalid$data(){let{gen:e,schemaCode:t,schemaType:n,def:r,it:a}=this;return(0,c.or)(o(),s());function o(){if(n.length){if(!(t instanceof c.Name))throw Error(`ajv implementation error`);let e=Array.isArray(n)?n:[n];return(0,c._)`${(0,i.checkDataTypes)(e,t,a.opts.strictNumbers,i.DataType.Wrong)}`}return c.nil}function s(){if(r.validateSchema){let n=e.scopeValue(`validate$data`,{ref:r.validateSchema});return(0,c._)`!${n}(${t})`}return c.nil}}subschema(e,t){let n=(0,s.getSubschema)(this.it,e);(0,s.extendSubschemaData)(n,this.it,e),(0,s.extendSubschemaMode)(n,e);let r={...this.it,...n,items:void 0,props:void 0};return b(r,t),r}mergeEvaluated(e,t){let{it:n,gen:r}=this;n.opts.unevaluated&&(n.props!==!0&&e.props!==void 0&&(n.props=d.mergeEvaluated.props(r,e.props,n.props,t)),n.items!==!0&&e.items!==void 0&&(n.items=d.mergeEvaluated.items(r,e.items,n.items,t)))}mergeValidEvaluated(e,t){let{it:n,gen:r}=this;if(n.opts.unevaluated&&(n.props!==!0||n.items!==!0))return r.if(t,()=>this.mergeEvaluated(e,c.Name)),!0}};e.KeywordCxt=oe;function se(e,t,n,r){let i=new oe(e,n,t);`code`in n?n.code(i,r):i.$data&&n.validate?(0,o.funcKeywordCode)(i,n):`macro`in n?(0,o.macroKeywordCode)(i,n):(n.compile||n.validate)&&(0,o.funcKeywordCode)(i,n)}var ce=/^\/(?:[^~]|~0|~1)*$/,le=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function ue(e,{dataLevel:t,dataNames:n,dataPathArr:r}){let i,a;if(e===``)return l.default.rootData;if(e[0]===`/`){if(!ce.test(e))throw Error(`Invalid JSON-pointer: ${e}`);i=e,a=l.default.rootData}else{let o=le.exec(e);if(!o)throw Error(`Invalid JSON-pointer: ${e}`);let s=+o[1];if(i=o[2],i===`#`){if(s>=t)throw Error(u(`property/index`,s));return r[t-s]}if(s>t)throw Error(u(`data`,s));if(a=n[t-s],!i)return a}let o=a,s=i.split(`/`);for(let e of s)e&&(a=(0,c._)`${a}${(0,c.getProperty)((0,d.unescapeJsonPointer)(e))}`,o=(0,c._)`${o} && ${a}`);return o;function u(e,n){return`Cannot access ${e} ${n} levels up, current level is ${t}`}}e.getData=ue})),ir=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default=class extends Error{constructor(e){super(`validation failed`),this.errors=e,this.ajv=this.validation=!0}}})),ar=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=nr();e.default=class extends Error{constructor(e,n,r,i){super(i||`can't resolve reference ${r} from id ${n}`),this.missingRef=(0,t.resolveUrl)(e,n,r),this.missingSchema=(0,t.normalizeId)((0,t.getFullPath)(e,this.missingRef))}}})),or=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.resolveSchema=e.getCompilingSchema=e.resolveRef=e.compileSchema=e.SchemaEnv=void 0;var t=U(),n=ir(),r=Gn(),i=nr(),a=W(),o=rr(),s=class{constructor(e){this.refs={},this.dynamicAnchors={};let t;typeof e.schema==`object`&&(t=e.schema),this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=e.baseId??(0,i.normalizeId)(t?.[e.schemaId||`$id`]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=t?.$async,this.refs={}}};e.SchemaEnv=s;function c(e){let a=d.call(this,e);if(a)return a;let s=(0,i.getFullPath)(this.opts.uriResolver,e.root.baseId),{es5:c,lines:l}=this.opts.code,{ownProperties:u}=this.opts,f=new t.CodeGen(this.scope,{es5:c,lines:l,ownProperties:u}),p;e.$async&&(p=f.scopeValue(`Error`,{ref:n.default,code:(0,t._)`require("ajv/dist/runtime/validation_error").default`}));let m=f.scopeName(`validate`);e.validateName=m;let h={gen:f,allErrors:this.opts.allErrors,data:r.default.data,parentData:r.default.parentData,parentDataProperty:r.default.parentDataProperty,dataNames:[r.default.data],dataPathArr:[t.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:f.scopeValue(`schema`,this.opts.code.source===!0?{ref:e.schema,code:(0,t.stringify)(e.schema)}:{ref:e.schema}),validateName:m,ValidationError:p,schema:e.schema,schemaEnv:e,rootId:s,baseId:e.baseId||s,schemaPath:t.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?``:`#`),errorPath:(0,t._)`""`,opts:this.opts,self:this},g;try{this._compilations.add(e),(0,o.validateFunctionCode)(h),f.optimize(this.opts.code.optimize);let n=f.toString();g=`${f.scopeRefs(r.default.scope)}return ${n}`,this.opts.code.process&&(g=this.opts.code.process(g,e));let i=Function(`${r.default.self}`,`${r.default.scope}`,g)(this,this.scope.get());if(this.scope.value(m,{ref:i}),i.errors=null,i.schema=e.schema,i.schemaEnv=e,e.$async&&(i.$async=!0),this.opts.code.source===!0&&(i.source={validateName:m,validateCode:n,scopeValues:f._values}),this.opts.unevaluated){let{props:e,items:n}=h;i.evaluated={props:e instanceof t.Name?void 0:e,items:n instanceof t.Name?void 0:n,dynamicProps:e instanceof t.Name,dynamicItems:n instanceof t.Name},i.source&&(i.source.evaluated=(0,t.stringify)(i.evaluated))}return e.validate=i,e}catch(t){throw delete e.validate,delete e.validateName,g&&this.logger.error(`Error compiling schema, function code:`,g),t}finally{this._compilations.delete(e)}}e.compileSchema=c;function l(e,t,n){n=(0,i.resolveUrl)(this.opts.uriResolver,t,n);let r=e.refs[n];if(r)return r;let a=p.call(this,e,n);if(a===void 0){let r=e.localRefs?.[n],{schemaId:i}=this.opts;r&&(a=new s({schema:r,schemaId:i,root:e,baseId:t}))}if(a!==void 0)return e.refs[n]=u.call(this,a)}e.resolveRef=l;function u(e){return(0,i.inlineRef)(e.schema,this.opts.inlineRefs)?e.schema:e.validate?e:c.call(this,e)}function d(e){for(let t of this._compilations)if(f(t,e))return t}e.getCompilingSchema=d;function f(e,t){return e.schema===t.schema&&e.root===t.root&&e.baseId===t.baseId}function p(e,t){let n;for(;typeof(n=this.refs[t])==`string`;)t=n;return n||this.schemas[t]||m.call(this,e,t)}function m(e,t){let n=this.opts.uriResolver.parse(t),r=(0,i._getFullPath)(this.opts.uriResolver,n),a=(0,i.getFullPath)(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&r===a)return g.call(this,n,e);let o=(0,i.normalizeId)(r),l=this.refs[o]||this.schemas[o];if(typeof l==`string`){let t=m.call(this,e,l);return typeof t?.schema==`object`?g.call(this,n,t):void 0}if(typeof l?.schema==`object`){if(l.validate||c.call(this,l),o===(0,i.normalizeId)(t)){let{schema:t}=l,{schemaId:n}=this.opts,r=t[n];return r&&(a=(0,i.resolveUrl)(this.opts.uriResolver,a,r)),new s({schema:t,schemaId:n,root:e,baseId:a})}return g.call(this,n,l)}}e.resolveSchema=m;var h=new Set([`properties`,`patternProperties`,`enum`,`dependencies`,`definitions`]);function g(e,{baseId:t,schema:n,root:r}){if(e.fragment?.[0]!==`/`)return;for(let r of e.fragment.slice(1).split(`/`)){if(typeof n==`boolean`)return;let e=n[(0,a.unescapeFragment)(r)];if(e===void 0)return;n=e;let o=typeof n==`object`&&n[this.opts.schemaId];!h.has(r)&&o&&(t=(0,i.resolveUrl)(this.opts.uriResolver,t,o))}let o;if(typeof n!=`boolean`&&n.$ref&&!(0,a.schemaHasRulesButRef)(n,this.RULES)){let e=(0,i.resolveUrl)(this.opts.uriResolver,t,n.$ref);o=m.call(this,r,e)}let{schemaId:c}=this.opts;if(o||=new s({schema:n,schemaId:c,root:r,baseId:t}),o.schema!==o.root.schema)return o}})),sr=c({$id:()=>cr,additionalProperties:()=>!1,default:()=>pr,description:()=>lr,properties:()=>fr,required:()=>dr,type:()=>ur}),cr,lr,ur,dr,fr,pr,mr=o((()=>{cr=`https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#`,lr=`Meta-schema for $data reference (JSON AnySchema extension proposal)`,ur=`object`,dr=[`$data`],fr={$data:{type:`string`,anyOf:[{format:`relative-json-pointer`},{format:`json-pointer`}]}},pr={$id:cr,description:lr,type:ur,required:dr,properties:fr,additionalProperties:!1}})),hr=s(((e,t)=>{var n=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),r=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function i(e){let t=``,n=0,r=0;for(r=0;r<e.length;r++)if(n=e[r].charCodeAt(0),n!==48){if(!(n>=48&&n<=57||n>=65&&n<=70||n>=97&&n<=102))return``;t+=e[r];break}for(r+=1;r<e.length;r++){if(n=e[r].charCodeAt(0),!(n>=48&&n<=57||n>=65&&n<=70||n>=97&&n<=102))return``;t+=e[r]}return t}var a=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function o(e){return e.length=0,!0}function s(e,t,n){if(e.length){let r=i(e);if(r!==``)t.push(r);else return n.error=!0,!1;e.length=0}return!0}function c(e){let t=0,n={error:!1,address:``,zone:``},r=[],a=[],c=!1,l=!1,u=s;for(let i=0;i<e.length;i++){let s=e[i];if(!(s===`[`||s===`]`))if(s===`:`){if(c===!0&&(l=!0),!u(a,r,n))break;if(++t>7){n.error=!0;break}i>0&&e[i-1]===`:`&&(c=!0),r.push(`:`);continue}else if(s===`%`){if(!u(a,r,n))break;u=o}else{a.push(s);continue}}return a.length&&(u===o?n.zone=a.join(``):l?r.push(a.join(``)):r.push(i(a))),n.address=r.join(``),n}function l(e){if(u(e,`:`)<2)return{host:e,isIPV6:!1};let t=c(e);if(t.error)return{host:e,isIPV6:!1};{let e=t.address,n=t.address;return t.zone&&(e+=`%`+t.zone,n+=`%25`+t.zone),{host:e,isIPV6:!0,escapedHost:n}}}function u(e,t){let n=0;for(let r=0;r<e.length;r++)e[r]===t&&n++;return n}function d(e){let t=e,n=[],r=-1,i=0;for(;i=t.length;){if(i===1){if(t===`.`)break;if(t===`/`){n.push(`/`);break}else{n.push(t);break}}else if(i===2){if(t[0]===`.`){if(t[1]===`.`)break;if(t[1]===`/`){t=t.slice(2);continue}}else if(t[0]===`/`&&(t[1]===`.`||t[1]===`/`)){n.push(`/`);break}}else if(i===3&&t===`/..`){n.length!==0&&n.pop(),n.push(`/`);break}if(t[0]===`.`){if(t[1]===`.`){if(t[2]===`/`){t=t.slice(3);continue}}else if(t[1]===`/`){t=t.slice(2);continue}}else if(t[0]===`/`&&t[1]===`.`){if(t[2]===`/`){t=t.slice(2);continue}else if(t[2]===`.`&&t[3]===`/`){t=t.slice(3),n.length!==0&&n.pop();continue}}if((r=t.indexOf(`/`,1))===-1){n.push(t);break}else n.push(t.slice(0,r)),t=t.slice(r)}return n.join(``)}function f(e,t){let n=t===!0?unescape:escape;return e.scheme!==void 0&&(e.scheme=n(e.scheme)),e.userinfo!==void 0&&(e.userinfo=n(e.userinfo)),e.host!==void 0&&(e.host=n(e.host)),e.path!==void 0&&(e.path=n(e.path)),e.query!==void 0&&(e.query=n(e.query)),e.fragment!==void 0&&(e.fragment=n(e.fragment)),e}function p(e){let t=[];if(e.userinfo!==void 0&&(t.push(e.userinfo),t.push(`@`)),e.host!==void 0){let n=unescape(e.host);if(!r(n)){let t=l(n);n=t.isIPV6===!0?`[${t.escapedHost}]`:e.host}t.push(n)}return(typeof e.port==`number`||typeof e.port==`string`)&&(t.push(`:`),t.push(String(e.port))),t.length?t.join(``):void 0}t.exports={nonSimpleDomain:a,recomposeAuthority:p,normalizeComponentEncoding:f,removeDotSegments:d,isIPv4:r,isUUID:n,normalizeIPv6:l,stringArrayToHexStripped:i}})),gr=s(((e,t)=>{var{isUUID:n}=hr(),r=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,i=[`http`,`https`,`ws`,`wss`,`urn`,`urn:uuid`];function a(e){return i.indexOf(e)!==-1}function o(e){return e.secure===!0?!0:e.secure===!1?!1:e.scheme?e.scheme.length===3&&(e.scheme[0]===`w`||e.scheme[0]===`W`)&&(e.scheme[1]===`s`||e.scheme[1]===`S`)&&(e.scheme[2]===`s`||e.scheme[2]===`S`):!1}function s(e){return e.host||(e.error=e.error||`HTTP URIs must have a host.`),e}function c(e){let t=String(e.scheme).toLowerCase()===`https`;return(e.port===(t?443:80)||e.port===``)&&(e.port=void 0),e.path||=`/`,e}function l(e){return e.secure=o(e),e.resourceName=(e.path||`/`)+(e.query?`?`+e.query:``),e.path=void 0,e.query=void 0,e}function u(e){if((e.port===(o(e)?443:80)||e.port===``)&&(e.port=void 0),typeof e.secure==`boolean`&&(e.scheme=e.secure?`wss`:`ws`,e.secure=void 0),e.resourceName){let[t,n]=e.resourceName.split(`?`);e.path=t&&t!==`/`?t:void 0,e.query=n,e.resourceName=void 0}return e.fragment=void 0,e}function d(e,t){if(!e.path)return e.error=`URN can not be parsed`,e;let n=e.path.match(r);if(n){let r=t.scheme||e.scheme||`urn`;e.nid=n[1].toLowerCase(),e.nss=n[2];let i=y(`${r}:${t.nid||e.nid}`);e.path=void 0,i&&(e=i.parse(e,t))}else e.error=e.error||`URN can not be parsed.`;return e}function f(e,t){if(e.nid===void 0)throw Error(`URN without nid cannot be serialized`);let n=t.scheme||e.scheme||`urn`,r=e.nid.toLowerCase(),i=y(`${n}:${t.nid||r}`);i&&(e=i.serialize(e,t));let a=e,o=e.nss;return a.path=`${r||t.nid}:${o}`,t.skipEscape=!0,a}function p(e,t){let r=e;return r.uuid=r.nss,r.nss=void 0,!t.tolerant&&(!r.uuid||!n(r.uuid))&&(r.error=r.error||`UUID is not valid.`),r}function m(e){let t=e;return t.nss=(e.uuid||``).toLowerCase(),t}var h={scheme:`http`,domainHost:!0,parse:s,serialize:c},g={scheme:`https`,domainHost:h.domainHost,parse:s,serialize:c},_={scheme:`ws`,domainHost:!0,parse:l,serialize:u},v={http:h,https:g,ws:_,wss:{scheme:`wss`,domainHost:_.domainHost,parse:_.parse,serialize:_.serialize},urn:{scheme:`urn`,parse:d,serialize:f,skipNormalize:!0},"urn:uuid":{scheme:`urn:uuid`,parse:p,serialize:m,skipNormalize:!0}};Object.setPrototypeOf(v,null);function y(e){return e&&(v[e]||v[e.toLowerCase()])||void 0}t.exports={wsIsSecure:o,SCHEMES:v,isValidSchemeName:a,getSchemeHandler:y}})),_r=s(((e,t)=>{var{normalizeIPv6:n,removeDotSegments:r,recomposeAuthority:i,normalizeComponentEncoding:a,isIPv4:o,nonSimpleDomain:s}=hr(),{SCHEMES:c,getSchemeHandler:l}=gr();function u(e,t){return typeof e==`string`?e=m(g(e,t),t):typeof e==`object`&&(e=g(m(e,t),t)),e}function d(e,t,n){let r=n?Object.assign({scheme:`null`},n):{scheme:`null`},i=f(g(e,r),g(t,r),r,!0);return r.skipEscape=!0,m(i,r)}function f(e,t,n,i){let a={};return i||(e=g(m(e,n),n),t=g(m(t,n),n)),n||={},!n.tolerant&&t.scheme?(a.scheme=t.scheme,a.userinfo=t.userinfo,a.host=t.host,a.port=t.port,a.path=r(t.path||``),a.query=t.query):(t.userinfo!==void 0||t.host!==void 0||t.port!==void 0?(a.userinfo=t.userinfo,a.host=t.host,a.port=t.port,a.path=r(t.path||``),a.query=t.query):(t.path?(t.path[0]===`/`?a.path=r(t.path):((e.userinfo!==void 0||e.host!==void 0||e.port!==void 0)&&!e.path?a.path=`/`+t.path:e.path?a.path=e.path.slice(0,e.path.lastIndexOf(`/`)+1)+t.path:a.path=t.path,a.path=r(a.path)),a.query=t.query):(a.path=e.path,t.query===void 0?a.query=e.query:a.query=t.query),a.userinfo=e.userinfo,a.host=e.host,a.port=e.port),a.scheme=e.scheme),a.fragment=t.fragment,a}function p(e,t,n){return typeof e==`string`?(e=unescape(e),e=m(a(g(e,n),!0),{...n,skipEscape:!0})):typeof e==`object`&&(e=m(a(e,!0),{...n,skipEscape:!0})),typeof t==`string`?(t=unescape(t),t=m(a(g(t,n),!0),{...n,skipEscape:!0})):typeof t==`object`&&(t=m(a(t,!0),{...n,skipEscape:!0})),e.toLowerCase()===t.toLowerCase()}function m(e,t){let n={host:e.host,scheme:e.scheme,userinfo:e.userinfo,port:e.port,path:e.path,query:e.query,nid:e.nid,nss:e.nss,uuid:e.uuid,fragment:e.fragment,reference:e.reference,resourceName:e.resourceName,secure:e.secure,error:``},a=Object.assign({},t),o=[],s=l(a.scheme||n.scheme);s&&s.serialize&&s.serialize(n,a),n.path!==void 0&&(a.skipEscape?n.path=unescape(n.path):(n.path=escape(n.path),n.scheme!==void 0&&(n.path=n.path.split(`%3A`).join(`:`)))),a.reference!==`suffix`&&n.scheme&&o.push(n.scheme,`:`);let c=i(n);if(c!==void 0&&(a.reference!==`suffix`&&o.push(`//`),o.push(c),n.path&&n.path[0]!==`/`&&o.push(`/`)),n.path!==void 0){let e=n.path;!a.absolutePath&&(!s||!s.absolutePath)&&(e=r(e)),c===void 0&&e[0]===`/`&&e[1]===`/`&&(e=`/%2F`+e.slice(2)),o.push(e)}return n.query!==void 0&&o.push(`?`,n.query),n.fragment!==void 0&&o.push(`#`,n.fragment),o.join(``)}var h=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function g(e,t){let r=Object.assign({},t),i={scheme:void 0,userinfo:void 0,host:``,port:void 0,path:``,query:void 0,fragment:void 0},a=!1;r.reference===`suffix`&&(e=r.scheme?r.scheme+`:`+e:`//`+e);let c=e.match(h);if(c){if(i.scheme=c[1],i.userinfo=c[3],i.host=c[4],i.port=parseInt(c[5],10),i.path=c[6]||``,i.query=c[7],i.fragment=c[8],isNaN(i.port)&&(i.port=c[5]),i.host)if(o(i.host)===!1){let e=n(i.host);i.host=e.host.toLowerCase(),a=e.isIPV6}else a=!0;i.scheme===void 0&&i.userinfo===void 0&&i.host===void 0&&i.port===void 0&&i.query===void 0&&!i.path?i.reference=`same-document`:i.scheme===void 0?i.reference=`relative`:i.fragment===void 0?i.reference=`absolute`:i.reference=`uri`,r.reference&&r.reference!==`suffix`&&r.reference!==i.reference&&(i.error=i.error||`URI is not a `+r.reference+` reference.`);let t=l(r.scheme||i.scheme);if(!r.unicodeSupport&&(!t||!t.unicodeSupport)&&i.host&&(r.domainHost||t&&t.domainHost)&&a===!1&&s(i.host))try{i.host=URL.domainToASCII(i.host.toLowerCase())}catch(e){i.error=i.error||`Host's domain name can not be converted to ASCII: `+e}(!t||t&&!t.skipNormalize)&&(e.indexOf(`%`)!==-1&&(i.scheme!==void 0&&(i.scheme=unescape(i.scheme)),i.host!==void 0&&(i.host=unescape(i.host))),i.path&&=escape(unescape(i.path)),i.fragment&&=encodeURI(decodeURIComponent(i.fragment))),t&&t.parse&&t.parse(i,r)}else i.error=i.error||`URI can not be parsed.`;return i}var _={SCHEMES:c,normalize:u,resolve:d,resolveComponent:f,equal:p,serialize:m,parse:g};t.exports=_,t.exports.default=_,t.exports.fastUri=_})),vr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=_r();t.code=`require("ajv/dist/runtime/uri").default`,e.default=t})),yr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=void 0;var t=rr();Object.defineProperty(e,`KeywordCxt`,{enumerable:!0,get:function(){return t.KeywordCxt}});var n=U();Object.defineProperty(e,`_`,{enumerable:!0,get:function(){return n._}}),Object.defineProperty(e,`str`,{enumerable:!0,get:function(){return n.str}}),Object.defineProperty(e,`stringify`,{enumerable:!0,get:function(){return n.stringify}}),Object.defineProperty(e,`nil`,{enumerable:!0,get:function(){return n.nil}}),Object.defineProperty(e,`Name`,{enumerable:!0,get:function(){return n.Name}}),Object.defineProperty(e,`CodeGen`,{enumerable:!0,get:function(){return n.CodeGen}});var r=ir(),i=ar(),a=Jn(),o=or(),s=U(),c=nr(),l=Xn(),u=W(),f=(mr(),d(sr).default),p=vr(),m=(e,t)=>new RegExp(e,t);m.code=`new RegExp`;var h=[`removeAdditional`,`useDefaults`,`coerceTypes`],g=new Set([`validate`,`serialize`,`parse`,`wrapper`,`root`,`schema`,`keyword`,`pattern`,`formats`,`validate$data`,`func`,`obj`,`Error`]),_={errorDataPath:``,format:"`validateFormats: false` can be used instead.",nullable:`"nullable" keyword is supported by default.`,jsonPointers:`Deprecated jsPropertySyntax can be used instead.`,extendRefs:`Deprecated ignoreKeywordsWithRef can be used instead.`,missingRefs:`Pass empty schema with $id that should be ignored to ajv.addSchema.`,processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:`"uniqueItems" keyword is always validated.`,unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:`Map is used as cache, schema object as key.`,serialize:`Map is used as cache, schema object as key.`,ajvErrors:`It is default now.`},v={ignoreKeywordsWithRef:``,jsPropertySyntax:``,unicode:`"minLength"/"maxLength" account for unicode characters by default.`},y=200;function b(e){let t=e.strict,n=e.code?.optimize,r=n===!0||n===void 0?1:n||0,i=e.code?.regExp??m,a=e.uriResolver??p.default;return{strictSchema:e.strictSchema??t??!0,strictNumbers:e.strictNumbers??t??!0,strictTypes:e.strictTypes??t??`log`,strictTuples:e.strictTuples??t??`log`,strictRequired:e.strictRequired??t??!1,code:e.code?{...e.code,optimize:r,regExp:i}:{optimize:r,regExp:i},loopRequired:e.loopRequired??y,loopEnum:e.loopEnum??y,meta:e.meta??!0,messages:e.messages??!0,inlineRefs:e.inlineRefs??!0,schemaId:e.schemaId??`$id`,addUsedSchema:e.addUsedSchema??!0,validateSchema:e.validateSchema??!0,validateFormats:e.validateFormats??!0,unicodeRegExp:e.unicodeRegExp??!0,int32range:e.int32range??!0,uriResolver:a}}var x=class{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...b(e)};let{es5:t,lines:n}=this.opts.code;this.scope=new s.ValueScope({scope:{},prefixes:g,es5:t,lines:n}),this.logger=k(e.logger);let r=e.validateFormats;e.validateFormats=!1,this.RULES=(0,a.getRules)(),S.call(this,_,e,`NOT SUPPORTED`),S.call(this,v,e,`DEPRECATED`,`warn`),this._metaOpts=D.call(this),e.formats&&T.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords&&E.call(this,e.keywords),typeof e.meta==`object`&&this.addMetaSchema(e.meta),w.call(this),e.validateFormats=r}_addVocabularies(){this.addKeyword(`$async`)}_addDefaultMetaSchema(){let{$data:e,meta:t,schemaId:n}=this.opts,r=f;n===`id`&&(r={...f},r.id=r.$id,delete r.$id),t&&e&&this.addMetaSchema(r,r[n],!1)}defaultMeta(){let{meta:e,schemaId:t}=this.opts;return this.opts.defaultMeta=typeof e==`object`?e[t]||e:void 0}validate(e,t){let n;if(typeof e==`string`){if(n=this.getSchema(e),!n)throw Error(`no schema with key or ref "${e}"`)}else n=this.compile(e);let r=n(t);return`$async`in n||(this.errors=n.errors),r}compile(e,t){let n=this._addSchema(e,t);return n.validate||this._compileSchemaEnv(n)}compileAsync(e,t){if(typeof this.opts.loadSchema!=`function`)throw Error(`options.loadSchema should be a function`);let{loadSchema:n}=this.opts;return r.call(this,e,t);async function r(e,t){await a.call(this,e.$schema);let n=this._addSchema(e,t);return n.validate||o.call(this,n)}async function a(e){e&&!this.getSchema(e)&&await r.call(this,{$ref:e},!0)}async function o(e){try{return this._compileSchemaEnv(e)}catch(t){if(!(t instanceof i.default))throw t;return s.call(this,t),await c.call(this,t.missingSchema),o.call(this,e)}}function s({missingSchema:e,missingRef:t}){if(this.refs[e])throw Error(`AnySchema ${e} is loaded but ${t} cannot be resolved`)}async function c(e){let n=await l.call(this,e);this.refs[e]||await a.call(this,n.$schema),this.refs[e]||this.addSchema(n,e,t)}async function l(e){let t=this._loading[e];if(t)return t;try{return await(this._loading[e]=n(e))}finally{delete this._loading[e]}}}addSchema(e,t,n,r=this.opts.validateSchema){if(Array.isArray(e)){for(let t of e)this.addSchema(t,void 0,n,r);return this}let i;if(typeof e==`object`){let{schemaId:t}=this.opts;if(i=e[t],i!==void 0&&typeof i!=`string`)throw Error(`schema ${t} must be string`)}return t=(0,c.normalizeId)(t||i),this._checkUnique(t),this.schemas[t]=this._addSchema(e,n,t,r,!0),this}addMetaSchema(e,t,n=this.opts.validateSchema){return this.addSchema(e,t,!0,n),this}validateSchema(e,t){if(typeof e==`boolean`)return!0;let n;if(n=e.$schema,n!==void 0&&typeof n!=`string`)throw Error(`$schema must be a string`);if(n=n||this.opts.defaultMeta||this.defaultMeta(),!n)return this.logger.warn(`meta-schema not available`),this.errors=null,!0;let r=this.validate(n,e);if(!r&&t){let e=`schema is invalid: `+this.errorsText();if(this.opts.validateSchema===`log`)this.logger.error(e);else throw Error(e)}return r}getSchema(e){let t;for(;typeof(t=C.call(this,e))==`string`;)e=t;if(t===void 0){let{schemaId:n}=this.opts,r=new o.SchemaEnv({schema:{},schemaId:n});if(t=o.resolveSchema.call(this,r,e),!t)return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case`undefined`:return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case`string`:{let t=C.call(this,e);return typeof t==`object`&&this._cache.delete(t.schema),delete this.schemas[e],delete this.refs[e],this}case`object`:{let t=e;this._cache.delete(t);let n=e[this.opts.schemaId];return n&&(n=(0,c.normalizeId)(n),delete this.schemas[n],delete this.refs[n]),this}default:throw Error(`ajv.removeSchema: invalid parameter`)}}addVocabulary(e){for(let t of e)this.addKeyword(t);return this}addKeyword(e,t){let n;if(typeof e==`string`)n=e,typeof t==`object`&&(this.logger.warn(`these parameters are deprecated, see docs for addKeyword`),t.keyword=n);else if(typeof e==`object`&&t===void 0){if(t=e,n=t.keyword,Array.isArray(n)&&!n.length)throw Error(`addKeywords: keyword must be string or non-empty array`)}else throw Error(`invalid addKeywords parameters`);if(j.call(this,n,t),!t)return(0,u.eachItem)(n,e=>M.call(this,e)),this;te.call(this,t);let r={...t,type:(0,l.getJSONTypes)(t.type),schemaType:(0,l.getJSONTypes)(t.schemaType)};return(0,u.eachItem)(n,r.type.length===0?e=>M.call(this,e,r):e=>r.type.forEach(t=>M.call(this,e,r,t))),this}getKeyword(e){let t=this.RULES.all[e];return typeof t==`object`?t.definition:!!t}removeKeyword(e){let{RULES:t}=this;delete t.keywords[e],delete t.all[e];for(let n of t.rules){let t=n.rules.findIndex(t=>t.keyword===e);t>=0&&n.rules.splice(t,1)}return this}addFormat(e,t){return typeof t==`string`&&(t=new RegExp(t)),this.formats[e]=t,this}errorsText(e=this.errors,{separator:t=`, `,dataVar:n=`data`}={}){return!e||e.length===0?`No errors`:e.map(e=>`${n}${e.instancePath} ${e.message}`).reduce((e,n)=>e+t+n)}$dataMetaSchema(e,t){let n=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let r of t){let t=r.split(`/`).slice(1),i=e;for(let e of t)i=i[e];for(let e in n){let t=n[e];if(typeof t!=`object`)continue;let{$data:r}=t.definition,a=i[e];r&&a&&(i[e]=P(a))}}return e}_removeAllSchemas(e,t){for(let n in e){let r=e[n];(!t||t.test(n))&&(typeof r==`string`?delete e[n]:r&&!r.meta&&(this._cache.delete(r.schema),delete e[n]))}}_addSchema(e,t,n,r=this.opts.validateSchema,i=this.opts.addUsedSchema){let a,{schemaId:s}=this.opts;if(typeof e==`object`)a=e[s];else if(this.opts.jtd)throw Error(`schema must be object`);else if(typeof e!=`boolean`)throw Error(`schema must be object or boolean`);let l=this._cache.get(e);if(l!==void 0)return l;n=(0,c.normalizeId)(a||n);let u=c.getSchemaRefs.call(this,e,n);return l=new o.SchemaEnv({schema:e,schemaId:s,meta:t,baseId:n,localRefs:u}),this._cache.set(l.schema,l),i&&!n.startsWith(`#`)&&(n&&this._checkUnique(n),this.refs[n]=l),r&&this.validateSchema(e,!0),l}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta?this._compileMetaSchema(e):o.compileSchema.call(this,e),!e.validate)throw Error(`ajv implementation error`);return e.validate}_compileMetaSchema(e){let t=this.opts;this.opts=this._metaOpts;try{o.compileSchema.call(this,e)}finally{this.opts=t}}};x.ValidationError=r.default,x.MissingRefError=i.default,e.default=x;function S(e,t,n,r=`error`){for(let i in e){let a=i;a in t&&this.logger[r](`${n}: option ${i}. ${e[a]}`)}}function C(e){return e=(0,c.normalizeId)(e),this.schemas[e]||this.refs[e]}function w(){let e=this.opts.schemas;if(e)if(Array.isArray(e))this.addSchema(e);else for(let t in e)this.addSchema(e[t],t)}function T(){for(let e in this.opts.formats){let t=this.opts.formats[e];t&&this.addFormat(e,t)}}function E(e){if(Array.isArray(e)){this.addVocabulary(e);return}this.logger.warn(`keywords option as map is deprecated, pass array`);for(let t in e){let n=e[t];n.keyword||=t,this.addKeyword(n)}}function D(){let e={...this.opts};for(let t of h)delete e[t];return e}var O={log(){},warn(){},error(){}};function k(e){if(e===!1)return O;if(e===void 0)return console;if(e.log&&e.warn&&e.error)return e;throw Error(`logger must implement log, warn and error methods`)}var A=/^[a-z_$][a-z0-9_$:-]*$/i;function j(e,t){let{RULES:n}=this;if((0,u.eachItem)(e,e=>{if(n.keywords[e])throw Error(`Keyword ${e} is already defined`);if(!A.test(e))throw Error(`Keyword ${e} has invalid name`)}),t&&t.$data&&!(`code`in t||`validate`in t))throw Error(`$data keyword must have "code" or "validate" function`)}function M(e,t,n){var r;let i=t?.post;if(n&&i)throw Error(`keyword with "post" flag cannot have "type"`);let{RULES:a}=this,o=i?a.post:a.rules.find(({type:e})=>e===n);if(o||(o={type:n,rules:[]},a.rules.push(o)),a.keywords[e]=!0,!t)return;let s={keyword:e,definition:{...t,type:(0,l.getJSONTypes)(t.type),schemaType:(0,l.getJSONTypes)(t.schemaType)}};t.before?ee.call(this,o,s,t.before):o.rules.push(s),a.all[e]=s,(r=t.implements)==null||r.forEach(e=>this.addKeyword(e))}function ee(e,t,n){let r=e.rules.findIndex(e=>e.keyword===n);r>=0?e.rules.splice(r,0,t):(e.rules.push(t),this.logger.warn(`rule ${n} is not defined`))}function te(e){let{metaSchema:t}=e;t!==void 0&&(e.$data&&this.opts.$data&&(t=P(t)),e.validateSchema=this.compile(t,!0))}var N={$ref:`https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#`};function P(e){return{anyOf:[e,N]}}})),br=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default={keyword:`id`,code(){throw Error(`NOT SUPPORTED: keyword "id", use "$id" for schema ID`)}}})),xr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.callRef=e.getValidate=void 0;var t=ar(),n=G(),r=U(),i=Gn(),a=or(),o=W(),s={keyword:`$ref`,schemaType:`string`,code(e){let{gen:n,schema:i,it:o}=e,{baseId:s,schemaEnv:u,validateName:d,opts:f,self:p}=o,{root:m}=u;if((i===`#`||i===`#/`)&&s===m.baseId)return g();let h=a.resolveRef.call(p,m,s,i);if(h===void 0)throw new t.default(o.opts.uriResolver,s,i);if(h instanceof a.SchemaEnv)return _(h);return v(h);function g(){if(u===m)return l(e,d,u,u.$async);let t=n.scopeValue(`root`,{ref:m});return l(e,(0,r._)`${t}.validate`,m,m.$async)}function _(t){l(e,c(e,t),t,t.$async)}function v(t){let a=n.scopeValue(`schema`,f.code.source===!0?{ref:t,code:(0,r.stringify)(t)}:{ref:t}),o=n.name(`valid`),s=e.subschema({schema:t,dataTypes:[],schemaPath:r.nil,topSchemaRef:a,errSchemaPath:i},o);e.mergeEvaluated(s),e.ok(o)}}};function c(e,t){let{gen:n}=e;return t.validate?n.scopeValue(`validate`,{ref:t.validate}):(0,r._)`${n.scopeValue(`wrapper`,{ref:t})}.validate`}e.getValidate=c;function l(e,t,a,s){let{gen:c,it:l}=e,{allErrors:u,schemaEnv:d,opts:f}=l,p=f.passContext?i.default.this:r.nil;s?m():h();function m(){if(!d.$async)throw Error(`async schema referenced by sync schema`);let i=c.let(`valid`);c.try(()=>{c.code((0,r._)`await ${(0,n.callValidateCode)(e,t,p)}`),_(t),u||c.assign(i,!0)},e=>{c.if((0,r._)`!(${e} instanceof ${l.ValidationError})`,()=>c.throw(e)),g(e),u||c.assign(i,!1)}),e.ok(i)}function h(){e.result((0,n.callValidateCode)(e,t,p),()=>_(t),()=>g(t))}function g(e){let t=(0,r._)`${e}.errors`;c.assign(i.default.vErrors,(0,r._)`${i.default.vErrors} === null ? ${t} : ${i.default.vErrors}.concat(${t})`),c.assign(i.default.errors,(0,r._)`${i.default.vErrors}.length`)}function _(e){if(!l.opts.unevaluated)return;let t=a?.validate?.evaluated;if(l.props!==!0)if(t&&!t.dynamicProps)t.props!==void 0&&(l.props=o.mergeEvaluated.props(c,t.props,l.props));else{let t=c.var(`props`,(0,r._)`${e}.evaluated.props`);l.props=o.mergeEvaluated.props(c,t,l.props,r.Name)}if(l.items!==!0)if(t&&!t.dynamicItems)t.items!==void 0&&(l.items=o.mergeEvaluated.items(c,t.items,l.items));else{let t=c.var(`items`,(0,r._)`${e}.evaluated.items`);l.items=o.mergeEvaluated.items(c,t,l.items,r.Name)}}}e.callRef=l,e.default=s})),Sr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=br(),n=xr();e.default=[`$schema`,`$id`,`$defs`,`$vocabulary`,{keyword:`$comment`},`definitions`,t.default,n.default]})),Cr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U(),n=t.operators,r={maximum:{okStr:`<=`,ok:n.LTE,fail:n.GT},minimum:{okStr:`>=`,ok:n.GTE,fail:n.LT},exclusiveMaximum:{okStr:`<`,ok:n.LT,fail:n.GTE},exclusiveMinimum:{okStr:`>`,ok:n.GT,fail:n.LTE}};e.default={keyword:Object.keys(r),type:`number`,schemaType:`number`,$data:!0,error:{message:({keyword:e,schemaCode:n})=>(0,t.str)`must be ${r[e].okStr} ${n}`,params:({keyword:e,schemaCode:n})=>(0,t._)`{comparison: ${r[e].okStr}, limit: ${n}}`},code(e){let{keyword:n,data:i,schemaCode:a}=e;e.fail$data((0,t._)`${i} ${r[n].fail} ${a} || isNaN(${i})`)}}})),wr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U();e.default={keyword:`multipleOf`,type:`number`,schemaType:`number`,$data:!0,error:{message:({schemaCode:e})=>(0,t.str)`must be multiple of ${e}`,params:({schemaCode:e})=>(0,t._)`{multipleOf: ${e}}`},code(e){let{gen:n,data:r,schemaCode:i,it:a}=e,o=a.opts.multipleOfPrecision,s=n.let(`res`),c=o?(0,t._)`Math.abs(Math.round(${s}) - ${s}) > 1e-${o}`:(0,t._)`${s} !== parseInt(${s})`;e.fail$data((0,t._)`(${i} === 0 || (${s} = ${r}/${i}, ${c}))`)}}})),Tr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});function t(e){let t=e.length,n=0,r=0,i;for(;r<t;)n++,i=e.charCodeAt(r++),i>=55296&&i<=56319&&r<t&&(i=e.charCodeAt(r),(i&64512)==56320&&r++);return n}e.default=t,t.code=`require("ajv/dist/runtime/ucs2length").default`})),Er=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U(),n=W(),r=Tr();e.default={keyword:[`maxLength`,`minLength`],type:`string`,schemaType:`number`,$data:!0,error:{message({keyword:e,schemaCode:n}){let r=e===`maxLength`?`more`:`fewer`;return(0,t.str)`must NOT have ${r} than ${n} characters`},params:({schemaCode:e})=>(0,t._)`{limit: ${e}}`},code(e){let{keyword:i,data:a,schemaCode:o,it:s}=e,c=i===`maxLength`?t.operators.GT:t.operators.LT,l=s.opts.unicode===!1?(0,t._)`${a}.length`:(0,t._)`${(0,n.useFunc)(e.gen,r.default)}(${a})`;e.fail$data((0,t._)`${l} ${c} ${o}`)}}})),Dr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=G(),n=W(),r=U();e.default={keyword:`pattern`,type:`string`,schemaType:`string`,$data:!0,error:{message:({schemaCode:e})=>(0,r.str)`must match pattern "${e}"`,params:({schemaCode:e})=>(0,r._)`{pattern: ${e}}`},code(e){let{gen:i,data:a,$data:o,schema:s,schemaCode:c,it:l}=e,u=l.opts.unicodeRegExp?`u`:``;if(o){let{regExp:t}=l.opts.code,o=t.code===`new RegExp`?(0,r._)`new RegExp`:(0,n.useFunc)(i,t),s=i.let(`valid`);i.try(()=>i.assign(s,(0,r._)`${o}(${c}, ${u}).test(${a})`),()=>i.assign(s,!1)),e.fail$data((0,r._)`!${s}`)}else{let n=(0,t.usePattern)(e,s);e.fail$data((0,r._)`!${n}.test(${a})`)}}}})),Or=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U();e.default={keyword:[`maxProperties`,`minProperties`],type:`object`,schemaType:`number`,$data:!0,error:{message({keyword:e,schemaCode:n}){let r=e===`maxProperties`?`more`:`fewer`;return(0,t.str)`must NOT have ${r} than ${n} properties`},params:({schemaCode:e})=>(0,t._)`{limit: ${e}}`},code(e){let{keyword:n,data:r,schemaCode:i}=e,a=n===`maxProperties`?t.operators.GT:t.operators.LT;e.fail$data((0,t._)`Object.keys(${r}).length ${a} ${i}`)}}})),kr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=G(),n=U(),r=W();e.default={keyword:`required`,type:`object`,schemaType:`array`,$data:!0,error:{message:({params:{missingProperty:e}})=>(0,n.str)`must have required property '${e}'`,params:({params:{missingProperty:e}})=>(0,n._)`{missingProperty: ${e}}`},code(e){let{gen:i,schema:a,schemaCode:o,data:s,$data:c,it:l}=e,{opts:u}=l;if(!c&&a.length===0)return;let d=a.length>=u.loopRequired;if(l.allErrors?f():p(),u.strictRequired){let t=e.parentSchema.properties,{definedProperties:n}=e.it;for(let e of a)if(t?.[e]===void 0&&!n.has(e)){let t=`required property "${e}" is not defined at "${l.schemaEnv.baseId+l.errSchemaPath}" (strictRequired)`;(0,r.checkStrictMode)(l,t,l.opts.strictRequired)}}function f(){if(d||c)e.block$data(n.nil,m);else for(let n of a)(0,t.checkReportMissingProp)(e,n)}function p(){let n=i.let(`missing`);if(d||c){let t=i.let(`valid`,!0);e.block$data(t,()=>h(n,t)),e.ok(t)}else i.if((0,t.checkMissingProp)(e,a,n)),(0,t.reportMissingProp)(e,n),i.else()}function m(){i.forOf(`prop`,o,n=>{e.setParams({missingProperty:n}),i.if((0,t.noPropertyInData)(i,s,n,u.ownProperties),()=>e.error())})}function h(r,a){e.setParams({missingProperty:r}),i.forOf(r,o,()=>{i.assign(a,(0,t.propertyInData)(i,s,r,u.ownProperties)),i.if((0,n.not)(a),()=>{e.error(),i.break()})},n.nil)}}}})),Ar=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U();e.default={keyword:[`maxItems`,`minItems`],type:`array`,schemaType:`number`,$data:!0,error:{message({keyword:e,schemaCode:n}){let r=e===`maxItems`?`more`:`fewer`;return(0,t.str)`must NOT have ${r} than ${n} items`},params:({schemaCode:e})=>(0,t._)`{limit: ${e}}`},code(e){let{keyword:n,data:r,schemaCode:i}=e,a=n===`maxItems`?t.operators.GT:t.operators.LT;e.fail$data((0,t._)`${r}.length ${a} ${i}`)}}})),jr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=er();t.code=`require("ajv/dist/runtime/equal").default`,e.default=t})),Mr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=Xn(),n=U(),r=W(),i=jr();e.default={keyword:`uniqueItems`,type:`array`,schemaType:`boolean`,$data:!0,error:{message:({params:{i:e,j:t}})=>(0,n.str)`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>(0,n._)`{i: ${e}, j: ${t}}`},code(e){let{gen:a,data:o,$data:s,schema:c,parentSchema:l,schemaCode:u,it:d}=e;if(!s&&!c)return;let f=a.let(`valid`),p=l.items?(0,t.getSchemaTypes)(l.items):[];e.block$data(f,m,(0,n._)`${u} === false`),e.ok(f);function m(){let t=a.let(`i`,(0,n._)`${o}.length`),r=a.let(`j`);e.setParams({i:t,j:r}),a.assign(f,!0),a.if((0,n._)`${t} > 1`,()=>(h()?g:_)(t,r))}function h(){return p.length>0&&!p.some(e=>e===`object`||e===`array`)}function g(r,i){let s=a.name(`item`),c=(0,t.checkDataTypes)(p,s,d.opts.strictNumbers,t.DataType.Wrong),l=a.const(`indices`,(0,n._)`{}`);a.for((0,n._)`;${r}--;`,()=>{a.let(s,(0,n._)`${o}[${r}]`),a.if(c,(0,n._)`continue`),p.length>1&&a.if((0,n._)`typeof ${s} == "string"`,(0,n._)`${s} += "_"`),a.if((0,n._)`typeof ${l}[${s}] == "number"`,()=>{a.assign(i,(0,n._)`${l}[${s}]`),e.error(),a.assign(f,!1).break()}).code((0,n._)`${l}[${s}] = ${r}`)})}function _(t,s){let c=(0,r.useFunc)(a,i.default),l=a.name(`outer`);a.label(l).for((0,n._)`;${t}--;`,()=>a.for((0,n._)`${s} = ${t}; ${s}--;`,()=>a.if((0,n._)`${c}(${o}[${t}], ${o}[${s}])`,()=>{e.error(),a.assign(f,!1).break(l)})))}}}})),Nr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U(),n=W(),r=jr();e.default={keyword:`const`,$data:!0,error:{message:`must be equal to constant`,params:({schemaCode:e})=>(0,t._)`{allowedValue: ${e}}`},code(e){let{gen:i,data:a,$data:o,schemaCode:s,schema:c}=e;o||c&&typeof c==`object`?e.fail$data((0,t._)`!${(0,n.useFunc)(i,r.default)}(${a}, ${s})`):e.fail((0,t._)`${c} !== ${a}`)}}})),Pr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U(),n=W(),r=jr();e.default={keyword:`enum`,schemaType:`array`,$data:!0,error:{message:`must be equal to one of the allowed values`,params:({schemaCode:e})=>(0,t._)`{allowedValues: ${e}}`},code(e){let{gen:i,data:a,$data:o,schema:s,schemaCode:c,it:l}=e;if(!o&&s.length===0)throw Error(`enum must have non-empty array`);let u=s.length>=l.opts.loopEnum,d,f=()=>d??=(0,n.useFunc)(i,r.default),p;if(u||o)p=i.let(`valid`),e.block$data(p,m);else{if(!Array.isArray(s))throw Error(`ajv implementation error`);let e=i.const(`vSchema`,c);p=(0,t.or)(...s.map((t,n)=>h(e,n)))}e.pass(p);function m(){i.assign(p,!1),i.forOf(`v`,c,e=>i.if((0,t._)`${f()}(${a}, ${e})`,()=>i.assign(p,!0).break()))}function h(e,n){let r=s[n];return typeof r==`object`&&r?(0,t._)`${f()}(${a}, ${e}[${n}])`:(0,t._)`${a} === ${r}`}}}})),Fr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=Cr(),n=wr(),r=Er(),i=Dr(),a=Or(),o=kr(),s=Ar(),c=Mr(),l=Nr(),u=Pr();e.default=[t.default,n.default,r.default,i.default,a.default,o.default,s.default,c.default,{keyword:`type`,schemaType:[`string`,`array`]},{keyword:`nullable`,schemaType:`boolean`},l.default,u.default]})),Ir=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.validateAdditionalItems=void 0;var t=U(),n=W(),r={keyword:`additionalItems`,type:`array`,schemaType:[`boolean`,`object`],before:`uniqueItems`,error:{message:({params:{len:e}})=>(0,t.str)`must NOT have more than ${e} items`,params:({params:{len:e}})=>(0,t._)`{limit: ${e}}`},code(e){let{parentSchema:t,it:r}=e,{items:a}=t;if(!Array.isArray(a)){(0,n.checkStrictMode)(r,`"additionalItems" is ignored when "items" is not an array of schemas`);return}i(e,a)}};function i(e,r){let{gen:i,schema:a,data:o,keyword:s,it:c}=e;c.items=!0;let l=i.const(`len`,(0,t._)`${o}.length`);if(a===!1)e.setParams({len:r.length}),e.pass((0,t._)`${l} <= ${r.length}`);else if(typeof a==`object`&&!(0,n.alwaysValidSchema)(c,a)){let n=i.var(`valid`,(0,t._)`${l} <= ${r.length}`);i.if((0,t.not)(n),()=>u(n)),e.ok(n)}function u(a){i.forRange(`i`,r.length,l,r=>{e.subschema({keyword:s,dataProp:r,dataPropType:n.Type.Num},a),c.allErrors||i.if((0,t.not)(a),()=>i.break())})}}e.validateAdditionalItems=i,e.default=r})),Lr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.validateTuple=void 0;var t=U(),n=W(),r=G(),i={keyword:`items`,type:`array`,schemaType:[`object`,`array`,`boolean`],before:`uniqueItems`,code(e){let{schema:t,it:i}=e;if(Array.isArray(t))return a(e,`additionalItems`,t);i.items=!0,!(0,n.alwaysValidSchema)(i,t)&&e.ok((0,r.validateArray)(e))}};function a(e,r,i=e.schema){let{gen:a,parentSchema:o,data:s,keyword:c,it:l}=e;f(o),l.opts.unevaluated&&i.length&&l.items!==!0&&(l.items=n.mergeEvaluated.items(a,i.length,l.items));let u=a.name(`valid`),d=a.const(`len`,(0,t._)`${s}.length`);i.forEach((r,i)=>{(0,n.alwaysValidSchema)(l,r)||(a.if((0,t._)`${d} > ${i}`,()=>e.subschema({keyword:c,schemaProp:i,dataProp:i},u)),e.ok(u))});function f(e){let{opts:t,errSchemaPath:a}=l,o=i.length,s=o===e.minItems&&(o===e.maxItems||e[r]===!1);if(t.strictTuples&&!s){let e=`"${c}" is ${o}-tuple, but minItems or maxItems/${r} are not specified or different at path "${a}"`;(0,n.checkStrictMode)(l,e,t.strictTuples)}}}e.validateTuple=a,e.default=i})),Rr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=Lr();e.default={keyword:`prefixItems`,type:`array`,schemaType:[`array`],before:`uniqueItems`,code:e=>(0,t.validateTuple)(e,`items`)}})),zr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U(),n=W(),r=G(),i=Ir();e.default={keyword:`items`,type:`array`,schemaType:[`object`,`boolean`],before:`uniqueItems`,error:{message:({params:{len:e}})=>(0,t.str)`must NOT have more than ${e} items`,params:({params:{len:e}})=>(0,t._)`{limit: ${e}}`},code(e){let{schema:t,parentSchema:a,it:o}=e,{prefixItems:s}=a;o.items=!0,!(0,n.alwaysValidSchema)(o,t)&&(s?(0,i.validateAdditionalItems)(e,s):e.ok((0,r.validateArray)(e)))}}})),Br=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U(),n=W();e.default={keyword:`contains`,type:`array`,schemaType:[`object`,`boolean`],before:`uniqueItems`,trackErrors:!0,error:{message:({params:{min:e,max:n}})=>n===void 0?(0,t.str)`must contain at least ${e} valid item(s)`:(0,t.str)`must contain at least ${e} and no more than ${n} valid item(s)`,params:({params:{min:e,max:n}})=>n===void 0?(0,t._)`{minContains: ${e}}`:(0,t._)`{minContains: ${e}, maxContains: ${n}}`},code(e){let{gen:r,schema:i,parentSchema:a,data:o,it:s}=e,c,l,{minContains:u,maxContains:d}=a;s.opts.next?(c=u===void 0?1:u,l=d):c=1;let f=r.const(`len`,(0,t._)`${o}.length`);if(e.setParams({min:c,max:l}),l===void 0&&c===0){(0,n.checkStrictMode)(s,`"minContains" == 0 without "maxContains": "contains" keyword ignored`);return}if(l!==void 0&&c>l){(0,n.checkStrictMode)(s,`"minContains" > "maxContains" is always invalid`),e.fail();return}if((0,n.alwaysValidSchema)(s,i)){let n=(0,t._)`${f} >= ${c}`;l!==void 0&&(n=(0,t._)`${n} && ${f} <= ${l}`),e.pass(n);return}s.items=!0;let p=r.name(`valid`);l===void 0&&c===1?h(p,()=>r.if(p,()=>r.break())):c===0?(r.let(p,!0),l!==void 0&&r.if((0,t._)`${o}.length > 0`,m)):(r.let(p,!1),m()),e.result(p,()=>e.reset());function m(){let e=r.name(`_valid`),t=r.let(`count`,0);h(e,()=>r.if(e,()=>g(t)))}function h(t,i){r.forRange(`i`,0,f,r=>{e.subschema({keyword:`contains`,dataProp:r,dataPropType:n.Type.Num,compositeRule:!0},t),i()})}function g(e){r.code((0,t._)`${e}++`),l===void 0?r.if((0,t._)`${e} >= ${c}`,()=>r.assign(p,!0).break()):(r.if((0,t._)`${e} > ${l}`,()=>r.assign(p,!1).break()),c===1?r.assign(p,!0):r.if((0,t._)`${e} >= ${c}`,()=>r.assign(p,!0)))}}}})),Vr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.validateSchemaDeps=e.validatePropertyDeps=e.error=void 0;var t=U(),n=W(),r=G();e.error={message:({params:{property:e,depsCount:n,deps:r}})=>{let i=n===1?`property`:`properties`;return(0,t.str)`must have ${i} ${r} when property ${e} is present`},params:({params:{property:e,depsCount:n,deps:r,missingProperty:i}})=>(0,t._)`{property: ${e},
14
14
  missingProperty: ${i},
15
15
  depsCount: ${n},
16
- deps: ${r}}`};var i={keyword:`dependencies`,type:`object`,schemaType:`object`,error:e.error,code(e){let[t,n]=a(e);o(e,t),s(e,n)}};function a({schema:e}){let t={},n={};for(let r in e){if(r===`__proto__`)continue;let i=Array.isArray(e[r])?t:n;i[r]=e[r]}return[t,n]}function o(e,n=e.schema){let{gen:i,data:a,it:o}=e;if(Object.keys(n).length===0)return;let s=i.let(`missing`);for(let c in n){let l=n[c];if(l.length===0)continue;let u=(0,r.propertyInData)(i,a,c,o.opts.ownProperties);e.setParams({property:c,depsCount:l.length,deps:l.join(`, `)}),o.allErrors?i.if(u,()=>{for(let t of l)(0,r.checkReportMissingProp)(e,t)}):(i.if((0,t._)`${u} && (${(0,r.checkMissingProp)(e,l,s)})`),(0,r.reportMissingProp)(e,s),i.else())}}e.validatePropertyDeps=o;function s(e,t=e.schema){let{gen:i,data:a,keyword:o,it:s}=e,c=i.name(`valid`);for(let l in t)(0,n.alwaysValidSchema)(s,t[l])||(i.if((0,r.propertyInData)(i,a,l,s.opts.ownProperties),()=>{let t=e.subschema({keyword:o,schemaProp:l},c);e.mergeValidEvaluated(t,c)},()=>i.var(c,!0)),e.ok(c))}e.validateSchemaDeps=s,e.default=i})),Hr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U(),n=W();e.default={keyword:`propertyNames`,type:`object`,schemaType:[`object`,`boolean`],error:{message:`property name must be valid`,params:({params:e})=>(0,t._)`{propertyName: ${e.propertyName}}`},code(e){let{gen:r,schema:i,data:a,it:o}=e;if((0,n.alwaysValidSchema)(o,i))return;let s=r.name(`valid`);r.forIn(`key`,a,n=>{e.setParams({propertyName:n}),e.subschema({keyword:`propertyNames`,data:n,dataTypes:[`string`],propertyName:n,compositeRule:!0},s),r.if((0,t.not)(s),()=>{e.error(!0),o.allErrors||r.break()})}),e.ok(s)}}})),Ur=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=G(),n=U(),r=Gn(),i=W();e.default={keyword:`additionalProperties`,type:[`object`],schemaType:[`boolean`,`object`],allowUndefined:!0,trackErrors:!0,error:{message:`must NOT have additional properties`,params:({params:e})=>(0,n._)`{additionalProperty: ${e.additionalProperty}}`},code(e){let{gen:a,schema:o,parentSchema:s,data:c,errsCount:l,it:u}=e;if(!l)throw Error(`ajv implementation error`);let{allErrors:d,opts:f}=u;if(u.props=!0,f.removeAdditional!==`all`&&(0,i.alwaysValidSchema)(u,o))return;let p=(0,t.allSchemaProperties)(s.properties),m=(0,t.allSchemaProperties)(s.patternProperties);h(),e.ok((0,n._)`${l} === ${r.default.errors}`);function h(){a.forIn(`key`,c,e=>{!p.length&&!m.length?v(e):a.if(g(e),()=>v(e))})}function g(r){let o;if(p.length>8){let e=(0,i.schemaRefOrVal)(u,s.properties,`properties`);o=(0,t.isOwnProperty)(a,e,r)}else o=p.length?(0,n.or)(...p.map(e=>(0,n._)`${r} === ${e}`)):n.nil;return m.length&&(o=(0,n.or)(o,...m.map(i=>(0,n._)`${(0,t.usePattern)(e,i)}.test(${r})`))),(0,n.not)(o)}function _(e){a.code((0,n._)`delete ${c}[${e}]`)}function v(t){if(f.removeAdditional===`all`||f.removeAdditional&&o===!1){_(t);return}if(o===!1){e.setParams({additionalProperty:t}),e.error(),d||a.break();return}if(typeof o==`object`&&!(0,i.alwaysValidSchema)(u,o)){let r=a.name(`valid`);f.removeAdditional===`failing`?(y(t,r,!1),a.if((0,n.not)(r),()=>{e.reset(),_(t)})):(y(t,r),d||a.if((0,n.not)(r),()=>a.break()))}}function y(t,n,r){let a={keyword:`additionalProperties`,dataProp:t,dataPropType:i.Type.Str};r===!1&&Object.assign(a,{compositeRule:!0,createErrors:!1,allErrors:!1}),e.subschema(a,n)}}}})),Wr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=rr(),n=G(),r=W(),i=Ur();e.default={keyword:`properties`,type:`object`,schemaType:`object`,code(e){let{gen:a,schema:o,parentSchema:s,data:c,it:l}=e;l.opts.removeAdditional===`all`&&s.additionalProperties===void 0&&i.default.code(new t.KeywordCxt(l,i.default,`additionalProperties`));let u=(0,n.allSchemaProperties)(o);for(let e of u)l.definedProperties.add(e);l.opts.unevaluated&&u.length&&l.props!==!0&&(l.props=r.mergeEvaluated.props(a,(0,r.toHash)(u),l.props));let d=u.filter(e=>!(0,r.alwaysValidSchema)(l,o[e]));if(d.length===0)return;let f=a.name(`valid`);for(let t of d)p(t)?m(t):(a.if((0,n.propertyInData)(a,c,t,l.opts.ownProperties)),m(t),l.allErrors||a.else().var(f,!0),a.endIf()),e.it.definedProperties.add(t),e.ok(f);function p(e){return l.opts.useDefaults&&!l.compositeRule&&o[e].default!==void 0}function m(t){e.subschema({keyword:`properties`,schemaProp:t,dataProp:t},f)}}}})),Gr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=G(),n=U(),r=W(),i=W();e.default={keyword:`patternProperties`,type:`object`,schemaType:`object`,code(e){let{gen:a,schema:o,data:s,parentSchema:c,it:l}=e,{opts:u}=l,d=(0,t.allSchemaProperties)(o),f=d.filter(e=>(0,r.alwaysValidSchema)(l,o[e]));if(d.length===0||f.length===d.length&&(!l.opts.unevaluated||l.props===!0))return;let p=u.strictSchema&&!u.allowMatchingProperties&&c.properties,m=a.name(`valid`);l.props!==!0&&!(l.props instanceof n.Name)&&(l.props=(0,i.evaluatedPropsToName)(a,l.props));let{props:h}=l;g();function g(){for(let e of d)p&&_(e),l.allErrors?v(e):(a.var(m,!0),v(e),a.if(m))}function _(e){for(let t in p)new RegExp(e).test(t)&&(0,r.checkStrictMode)(l,`property ${t} matches pattern ${e} (use allowMatchingProperties)`)}function v(r){a.forIn(`key`,s,o=>{a.if((0,n._)`${(0,t.usePattern)(e,r)}.test(${o})`,()=>{let t=f.includes(r);t||e.subschema({keyword:`patternProperties`,schemaProp:r,dataProp:o,dataPropType:i.Type.Str},m),l.opts.unevaluated&&h!==!0?a.assign((0,n._)`${h}[${o}]`,!0):!t&&!l.allErrors&&a.if((0,n.not)(m),()=>a.break())})})}}}})),Kr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=W();e.default={keyword:`not`,schemaType:[`object`,`boolean`],trackErrors:!0,code(e){let{gen:n,schema:r,it:i}=e;if((0,t.alwaysValidSchema)(i,r)){e.fail();return}let a=n.name(`valid`);e.subschema({keyword:`not`,compositeRule:!0,createErrors:!1,allErrors:!1},a),e.failResult(a,()=>e.reset(),()=>e.error())},error:{message:`must NOT be valid`}}})),qr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default={keyword:`anyOf`,schemaType:`array`,trackErrors:!0,code:G().validateUnion,error:{message:`must match a schema in anyOf`}}})),Jr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U(),n=W();e.default={keyword:`oneOf`,schemaType:`array`,trackErrors:!0,error:{message:`must match exactly one schema in oneOf`,params:({params:e})=>(0,t._)`{passingSchemas: ${e.passing}}`},code(e){let{gen:r,schema:i,parentSchema:a,it:o}=e;if(!Array.isArray(i))throw Error(`ajv implementation error`);if(o.opts.discriminator&&a.discriminator)return;let s=i,c=r.let(`valid`,!1),l=r.let(`passing`,null),u=r.name(`_valid`);e.setParams({passing:l}),r.block(d),e.result(c,()=>e.reset(),()=>e.error(!0));function d(){s.forEach((i,a)=>{let s;(0,n.alwaysValidSchema)(o,i)?r.var(u,!0):s=e.subschema({keyword:`oneOf`,schemaProp:a,compositeRule:!0},u),a>0&&r.if((0,t._)`${u} && ${c}`).assign(c,!1).assign(l,(0,t._)`[${l}, ${a}]`).else(),r.if(u,()=>{r.assign(c,!0),r.assign(l,a),s&&e.mergeEvaluated(s,t.Name)})})}}}})),Yr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=W();e.default={keyword:`allOf`,schemaType:`array`,code(e){let{gen:n,schema:r,it:i}=e;if(!Array.isArray(r))throw Error(`ajv implementation error`);let a=n.name(`valid`);r.forEach((n,r)=>{if((0,t.alwaysValidSchema)(i,n))return;let o=e.subschema({keyword:`allOf`,schemaProp:r},a);e.ok(a),e.mergeEvaluated(o)})}}})),Xr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U(),n=W(),r={keyword:`if`,schemaType:[`object`,`boolean`],trackErrors:!0,error:{message:({params:e})=>(0,t.str)`must match "${e.ifClause}" schema`,params:({params:e})=>(0,t._)`{failingKeyword: ${e.ifClause}}`},code(e){let{gen:r,parentSchema:a,it:o}=e;a.then===void 0&&a.else===void 0&&(0,n.checkStrictMode)(o,`"if" without "then" and "else" is ignored`);let s=i(o,`then`),c=i(o,`else`);if(!s&&!c)return;let l=r.let(`valid`,!0),u=r.name(`_valid`);if(d(),e.reset(),s&&c){let t=r.let(`ifClause`);e.setParams({ifClause:t}),r.if(u,f(`then`,t),f(`else`,t))}else s?r.if(u,f(`then`)):r.if((0,t.not)(u),f(`else`));e.pass(l,()=>e.error(!0));function d(){let t=e.subschema({keyword:`if`,compositeRule:!0,createErrors:!1,allErrors:!1},u);e.mergeEvaluated(t)}function f(n,i){return()=>{let a=e.subschema({keyword:n},u);r.assign(l,u),e.mergeValidEvaluated(a,l),i?r.assign(i,(0,t._)`${n}`):e.setParams({ifClause:n})}}}};function i(e,t){let r=e.schema[t];return r!==void 0&&!(0,n.alwaysValidSchema)(e,r)}e.default=r})),Zr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=W();e.default={keyword:[`then`,`else`],schemaType:[`object`,`boolean`],code({keyword:e,parentSchema:n,it:r}){n.if===void 0&&(0,t.checkStrictMode)(r,`"${e}" without "if" is ignored`)}}})),Qr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=Ir(),n=Rr(),r=Lr(),i=zr(),a=Br(),o=Vr(),s=Hr(),c=Ur(),l=Wr(),u=Gr(),d=Kr(),f=qr(),p=Jr(),m=Yr(),h=Xr(),g=Zr();function _(e=!1){let _=[d.default,f.default,p.default,m.default,h.default,g.default,s.default,c.default,o.default,l.default,u.default];return e?_.push(n.default,i.default):_.push(t.default,r.default),_.push(a.default),_}e.default=_})),$r=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U();e.default={keyword:`format`,type:[`number`,`string`],schemaType:`string`,$data:!0,error:{message:({schemaCode:e})=>(0,t.str)`must match format "${e}"`,params:({schemaCode:e})=>(0,t._)`{format: ${e}}`},code(e,n){let{gen:r,data:i,$data:a,schema:o,schemaCode:s,it:c}=e,{opts:l,errSchemaPath:u,schemaEnv:d,self:f}=c;if(!l.validateFormats)return;a?p():m();function p(){let a=r.scopeValue(`formats`,{ref:f.formats,code:l.code.formats}),o=r.const(`fDef`,(0,t._)`${a}[${s}]`),c=r.let(`fType`),u=r.let(`format`);r.if((0,t._)`typeof ${o} == "object" && !(${o} instanceof RegExp)`,()=>r.assign(c,(0,t._)`${o}.type || "string"`).assign(u,(0,t._)`${o}.validate`),()=>r.assign(c,(0,t._)`"string"`).assign(u,o)),e.fail$data((0,t.or)(p(),m()));function p(){return l.strictSchema===!1?t.nil:(0,t._)`${s} && !${u}`}function m(){let e=d.$async?(0,t._)`(${o}.async ? await ${u}(${i}) : ${u}(${i}))`:(0,t._)`${u}(${i})`,r=(0,t._)`(typeof ${u} == "function" ? ${e} : ${u}.test(${i}))`;return(0,t._)`${u} && ${u} !== true && ${c} === ${n} && !${r}`}}function m(){let a=f.formats[o];if(!a){m();return}if(a===!0)return;let[s,c,p]=h(a);s===n&&e.pass(g());function m(){if(l.strictSchema===!1){f.logger.warn(e());return}throw Error(e());function e(){return`unknown format "${o}" ignored in schema at path "${u}"`}}function h(e){let n=e instanceof RegExp?(0,t.regexpCode)(e):l.code.formats?(0,t._)`${l.code.formats}${(0,t.getProperty)(o)}`:void 0,i=r.scopeValue(`formats`,{key:o,ref:e,code:n});return typeof e==`object`&&!(e instanceof RegExp)?[e.type||`string`,e.validate,(0,t._)`${i}.validate`]:[`string`,e,i]}function g(){if(typeof a==`object`&&!(a instanceof RegExp)&&a.async){if(!d.$async)throw Error(`async format in sync schema`);return(0,t._)`await ${p}(${i})`}return typeof c==`function`?(0,t._)`${p}(${i})`:(0,t._)`${p}.test(${i})`}}}}})),ei=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default=[$r().default]})),ti=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.contentVocabulary=e.metadataVocabulary=void 0,e.metadataVocabulary=[`title`,`description`,`default`,`deprecated`,`readOnly`,`writeOnly`,`examples`],e.contentVocabulary=[`contentMediaType`,`contentEncoding`,`contentSchema`]})),ni=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=Sr(),n=Fr(),r=Qr(),i=ei(),a=ti();e.default=[t.default,n.default,(0,r.default)(),i.default,a.metadataVocabulary,a.contentVocabulary]})),ri=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.DiscrError=void 0;var t;(function(e){e.Tag=`tag`,e.Mapping=`mapping`})(t||(e.DiscrError=t={}))})),ii=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U(),n=ri(),r=or(),i=ar(),a=W();e.default={keyword:`discriminator`,type:`object`,schemaType:`object`,error:{message:({params:{discrError:e,tagName:t}})=>e===n.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:n,tagName:r}})=>(0,t._)`{error: ${e}, tag: ${r}, tagValue: ${n}}`},code(e){let{gen:o,data:s,schema:c,parentSchema:l,it:u}=e,{oneOf:d}=l;if(!u.opts.discriminator)throw Error(`discriminator: requires discriminator option`);let f=c.propertyName;if(typeof f!=`string`)throw Error(`discriminator: requires propertyName`);if(c.mapping)throw Error(`discriminator: mapping is not supported`);if(!d)throw Error(`discriminator: requires oneOf keyword`);let p=o.let(`valid`,!1),m=o.const(`tag`,(0,t._)`${s}${(0,t.getProperty)(f)}`);o.if((0,t._)`typeof ${m} == "string"`,()=>h(),()=>e.error(!1,{discrError:n.DiscrError.Tag,tag:m,tagName:f})),e.ok(p);function h(){let r=_();o.if(!1);for(let e in r)o.elseIf((0,t._)`${m} === ${e}`),o.assign(p,g(r[e]));o.else(),e.error(!1,{discrError:n.DiscrError.Mapping,tag:m,tagName:f}),o.endIf()}function g(n){let r=o.name(`valid`),i=e.subschema({keyword:`oneOf`,schemaProp:n},r);return e.mergeEvaluated(i,t.Name),r}function _(){let e={},t=o(l),n=!0;for(let e=0;e<d.length;e++){let c=d[e];if(c?.$ref&&!(0,a.schemaHasRulesButRef)(c,u.self.RULES)){let e=c.$ref;if(c=r.resolveRef.call(u.self,u.schemaEnv.root,u.baseId,e),c instanceof r.SchemaEnv&&(c=c.schema),c===void 0)throw new i.default(u.opts.uriResolver,u.baseId,e)}let l=c?.properties?.[f];if(typeof l!=`object`)throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${f}"`);n&&=t||o(c),s(l,e)}if(!n)throw Error(`discriminator: "${f}" must be required`);return e;function o({required:e}){return Array.isArray(e)&&e.includes(f)}function s(e,t){if(e.const)c(e.const,t);else if(e.enum)for(let n of e.enum)c(n,t);else throw Error(`discriminator: "properties/${f}" must have "const" or "enum"`)}function c(t,n){if(typeof t!=`string`||t in e)throw Error(`discriminator: "${f}" values must be unique strings`);e[t]=n}}}}})),ai=c({$id:()=>si,$schema:()=>oi,default:()=>fi,definitions:()=>li,properties:()=>di,title:()=>ci,type:()=>ui}),oi,si,ci,li,ui,di,fi,pi=o((()=>{oi=`http://json-schema.org/draft-07/schema#`,si=`http://json-schema.org/draft-07/schema#`,ci=`Core schema meta-schema`,li={schemaArray:{type:`array`,minItems:1,items:{$ref:`#`}},nonNegativeInteger:{type:`integer`,minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:`#/definitions/nonNegativeInteger`},{default:0}]},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},uniqueItems:!0,default:[]}},ui=[`object`,`boolean`],di={$id:{type:`string`,format:`uri-reference`},$schema:{type:`string`,format:`uri`},$ref:{type:`string`,format:`uri-reference`},$comment:{type:`string`},title:{type:`string`},description:{type:`string`},default:!0,readOnly:{type:`boolean`,default:!1},examples:{type:`array`,items:!0},multipleOf:{type:`number`,exclusiveMinimum:0},maximum:{type:`number`},exclusiveMaximum:{type:`number`},minimum:{type:`number`},exclusiveMinimum:{type:`number`},maxLength:{$ref:`#/definitions/nonNegativeInteger`},minLength:{$ref:`#/definitions/nonNegativeIntegerDefault0`},pattern:{type:`string`,format:`regex`},additionalItems:{$ref:`#`},items:{anyOf:[{$ref:`#`},{$ref:`#/definitions/schemaArray`}],default:!0},maxItems:{$ref:`#/definitions/nonNegativeInteger`},minItems:{$ref:`#/definitions/nonNegativeIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},contains:{$ref:`#`},maxProperties:{$ref:`#/definitions/nonNegativeInteger`},minProperties:{$ref:`#/definitions/nonNegativeIntegerDefault0`},required:{$ref:`#/definitions/stringArray`},additionalProperties:{$ref:`#`},definitions:{type:`object`,additionalProperties:{$ref:`#`},default:{}},properties:{type:`object`,additionalProperties:{$ref:`#`},default:{}},patternProperties:{type:`object`,additionalProperties:{$ref:`#`},propertyNames:{format:`regex`},default:{}},dependencies:{type:`object`,additionalProperties:{anyOf:[{$ref:`#`},{$ref:`#/definitions/stringArray`}]}},propertyNames:{$ref:`#`},const:!0,enum:{type:`array`,items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:`#/definitions/simpleTypes`},{type:`array`,items:{$ref:`#/definitions/simpleTypes`},minItems:1,uniqueItems:!0}]},format:{type:`string`},contentMediaType:{type:`string`},contentEncoding:{type:`string`},if:{$ref:`#`},then:{$ref:`#`},else:{$ref:`#`},allOf:{$ref:`#/definitions/schemaArray`},anyOf:{$ref:`#/definitions/schemaArray`},oneOf:{$ref:`#/definitions/schemaArray`},not:{$ref:`#`}},fi={$schema:oi,$id:si,title:ci,definitions:li,type:ui,properties:di,default:!0}})),mi=u(s(((e,t)=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.MissingRefError=e.ValidationError=e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=e.Ajv=void 0;var n=yr(),r=ni(),i=ii(),a=(pi(),d(ai).default),o=[`/properties`],s=`http://json-schema.org/draft-07/schema`,c=class extends n.default{_addVocabularies(){super._addVocabularies(),r.default.forEach(e=>this.addVocabulary(e)),this.opts.discriminator&&this.addKeyword(i.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(a,o):a;this.addMetaSchema(e,s,!1),this.refs[`http://json-schema.org/schema`]=s}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(s)?s:void 0)}};e.Ajv=c,t.exports=e=c,t.exports.Ajv=c,Object.defineProperty(e,`__esModule`,{value:!0}),e.default=c;var l=rr();Object.defineProperty(e,`KeywordCxt`,{enumerable:!0,get:function(){return l.KeywordCxt}});var u=U();Object.defineProperty(e,`_`,{enumerable:!0,get:function(){return u._}}),Object.defineProperty(e,`str`,{enumerable:!0,get:function(){return u.str}}),Object.defineProperty(e,`stringify`,{enumerable:!0,get:function(){return u.stringify}}),Object.defineProperty(e,`nil`,{enumerable:!0,get:function(){return u.nil}}),Object.defineProperty(e,`Name`,{enumerable:!0,get:function(){return u.Name}}),Object.defineProperty(e,`CodeGen`,{enumerable:!0,get:function(){return u.CodeGen}});var f=ir();Object.defineProperty(e,`ValidationError`,{enumerable:!0,get:function(){return f.default}});var p=ar();Object.defineProperty(e,`MissingRefError`,{enumerable:!0,get:function(){return p.default}})}))(),1),hi={$schema:`http://json-schema.org/draft-07/schema#`,$id:`https://kmap.dev/schemas/semantic-chart-config/1.0.0`,title:`SemanticChartConfig`,description:`Agent 语义化图表配置`,type:`object`,required:[`version`,`data`],additionalProperties:!1,properties:{version:{type:`string`,pattern:`^[0-9]+\\.[0-9]+\\.[0-9]+$`,description:`semver 版本号`},data:{$ref:`#/$defs/DataConfig`},indicators:{$ref:`#/$defs/IndicatorsConfig`},markers:{$ref:`#/$defs/MarkersConfig`},chart:{$ref:`#/$defs/ChartOptions`},theme:{$ref:`#/$defs/ThemeConfig`}},$defs:{DataConfig:{type:`object`,required:[`source`,`symbol`,`startDate`,`endDate`,`period`,`adjust`],additionalProperties:!1,properties:{source:{type:`string`,enum:[`baostock`,`dongcai`]},symbol:{type:`string`,pattern:`^[0-9]{6}$`},exchange:{type:`string`,enum:[`SH`,`SZ`,`BJ`]},startDate:{type:`string`,format:`date`},endDate:{type:`string`,format:`date`},period:{type:`string`,enum:[`daily`,`weekly`,`monthly`,`5min`,`15min`,`30min`,`60min`]},adjust:{type:`string`,enum:[`qfq`,`hfq`,`none`]}}},IndicatorsConfig:{type:`object`,additionalProperties:!1,properties:{main:{type:`array`,items:{$ref:`#/$defs/MainIndicatorConfig`},maxItems:5},sub:{type:`array`,items:{$ref:`#/$defs/SubIndicatorConfig`},maxItems:5}}},MainIndicatorConfig:{type:`object`,required:[`type`,`enabled`],additionalProperties:!1,properties:{type:{type:`string`,enum:[`MA`,`BOLL`]},enabled:{type:`boolean`},params:{type:`object`}},allOf:[{if:{properties:{type:{const:`MA`}},required:[`type`]},then:{properties:{params:{type:`object`,additionalProperties:!1,properties:{periods:{type:`array`,items:{type:`integer`,minimum:1,maximum:250},minItems:1,maxItems:5}}}}},else:{properties:{params:{type:`object`,additionalProperties:!1,properties:{period:{type:`integer`,minimum:1,maximum:100},multiplier:{type:`number`,minimum:.1,maximum:5}}}}}}]},SubIndicatorConfig:{type:`object`,required:[`type`,`enabled`],additionalProperties:!1,properties:{type:{type:`string`,enum:[`VOLUME`,`MACD`,`RSI`,`CCI`,`STOCH`,`MOM`,`WMSR`,`KST`,`FASTK`]},enabled:{type:`boolean`},params:{type:`object`}},allOf:[{if:{properties:{type:{const:`MACD`}}},then:{properties:{params:{type:`object`,additionalProperties:!1,properties:{fast:{type:`integer`,minimum:1,maximum:50},slow:{type:`integer`,minimum:1,maximum:100},signal:{type:`integer`,minimum:1,maximum:50}}}}}},{if:{properties:{type:{const:`RSI`}}},then:{properties:{params:{type:`object`,additionalProperties:!1,properties:{period1:{type:`integer`,minimum:1,maximum:100},period2:{type:`integer`,minimum:1,maximum:100},period3:{type:`integer`,minimum:1,maximum:100}}}}}}]},MarkersConfig:{type:`object`,additionalProperties:!1,properties:{showVolumePriceMarkers:{type:`boolean`},showExtremaMarkers:{type:`boolean`},customMarkers:{type:`array`,items:{$ref:`#/$defs/CustomMarker`},maxItems:100},legend:{$ref:`#/$defs/LegendConfig`}}},CustomMarker:{type:`object`,required:[`id`,`date`,`shape`],additionalProperties:!1,properties:{id:{type:`string`,maxLength:64},date:{type:`string`,description:`日期时间字符串,日K用 YYYY-MM-DD,分钟K用 YYYY-MM-DD HH:mm`,pattern:`^[0-9]{4}-[0-9]{2}-[0-9]{2}( [0-9]{2}:[0-9]{2})?$`},shape:{type:`string`,enum:[`arrow_up`,`arrow_down`,`flag`,`circle`,`rectangle`,`diamond`]},groupKey:{type:`string`,maxLength:32},offset:{type:`object`,additionalProperties:!1,properties:{x:{type:`number`,minimum:-500,maximum:500},y:{type:`number`,minimum:-500,maximum:500}}},style:{$ref:`#/$defs/MarkerStyle`},label:{$ref:`#/$defs/MarkerLabel`},metadata:{type:`object`,maxProperties:20,additionalProperties:{type:[`string`,`number`,`boolean`,`null`],maxLength:200}}}},MarkerStyle:{type:`object`,additionalProperties:!1,properties:{fillColor:{type:`string`,pattern:`^(#[0-9a-fA-F]{3,8}|rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)|rgba\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*[\\d.]+\\s*\\))$`},strokeColor:{type:`string`,pattern:`^(#[0-9a-fA-F]{3,8}|rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)|rgba\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*[\\d.]+\\s*\\))$`},textColor:{type:`string`,pattern:`^(#[0-9a-fA-F]{3,8}|rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)|rgba\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*[\\d.]+\\s*\\))$`},size:{type:`number`,minimum:4,maximum:50},lineWidth:{type:`number`,minimum:.5,maximum:10},opacity:{type:`number`,minimum:0,maximum:1}}},MarkerLabel:{type:`object`,required:[`text`],additionalProperties:!1,properties:{text:{type:`string`,maxLength:50},position:{type:`string`,enum:[`left`,`right`,`top`,`bottom`,`inside`]},align:{type:`string`,enum:[`start`,`center`,`end`]},fontSize:{type:`number`,minimum:8,maximum:24},offset:{type:`object`,additionalProperties:!1,properties:{x:{type:`number`,minimum:-500,maximum:500},y:{type:`number`,minimum:-500,maximum:500}}}}},LegendConfig:{type:`object`,additionalProperties:!1,properties:{enabled:{type:`boolean`},position:{type:`string`,enum:[`bottom-right`,`bottom-left`,`top-right`,`top-left`]},onClick:{type:`string`,enum:[`highlight`,`toggle`,`none`]}}},ChartOptions:{type:`object`,additionalProperties:!1,properties:{kWidth:{type:`number`,minimum:2,maximum:50},kGap:{type:`number`,minimum:0,maximum:20},autoScrollToRight:{type:`boolean`}}},ThemeConfig:{type:`object`,additionalProperties:!1,properties:{priceUpColor:{type:`string`,pattern:`^#[0-9a-fA-F]{6}$`},priceDownColor:{type:`string`,pattern:`^#[0-9a-fA-F]{6}$`}}}}},gi=[`__proto__`,`constructor`,`prototype`],_i=/^(#[0-9a-fA-F]{3,8}|rgb\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*\)|rgba\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*[\d.]+\s*\))$/,vi={SH:/^(600|601|603|605|688)\d{3}$/,SZ:/^(000|001|002|003|300|301)\d{3}$/,BJ:/^(83|87|43|82)\d{4}$/};function yi(e){return{"5min":30,"15min":60,"30min":90,"60min":180,daily:365*3,weekly:365*5,monthly:365*10}[e]??365}var bi=(typeof document<`u`?document.createElement(`canvas`):null)?.getContext(`2d`)??null,xi=class e{ajv;limits;constructor(){this.ajv=new mi.default({allErrors:!0,allowUnionTypes:!0}),this.ajv.addFormat(`date`,{type:`string`,validate:e=>/^\d{4}-\d{2}-\d{2}$/.test(e)}),this.ajv.addSchema(hi),this.limits={maxJsonSize:64*1024,maxIndicators:10,maxCustomMarkers:100}}validateRawInput(e){return(typeof TextEncoder<`u`?new TextEncoder().encode(e).byteLength:e.length*3)>this.limits.maxJsonSize?{valid:!1,errors:[`JSON payload too large (max 64KB)`]}:{valid:!0}}validate(e){if(!e||typeof e!=`object`)return{valid:!1,errors:[`Config must be an object`]};let t=this.checkPrototypePollution(e);return t.valid?this.ajv.validate(`https://kmap.dev/schemas/semantic-chart-config/1.0.0`,e)?{valid:!0}:{valid:!1,errors:this.ajv.errors?.map(e=>`${e.instancePath} ${e.message}`)||[`Schema validation failed`]}:t}securityCheck(e){let t=[],n=this.checkDateRange(e.data);n.valid||t.push(...n.errors||[]);let r=this.checkSymbol(e.data);if(r.valid||t.push(...r.errors||[]),e.indicators&&(e.indicators.main?.length||0)+(e.indicators.sub?.length||0)>this.limits.maxIndicators&&t.push(`Too many indicators (max ${this.limits.maxIndicators})`),(e.markers?.customMarkers?.length||0)>this.limits.maxCustomMarkers&&t.push(`Too many custom markers (max ${this.limits.maxCustomMarkers})`),e.markers?.customMarkers)for(let n of e.markers.customMarkers){if(n.style){let e=this.checkMarkerStyle(n.style,n.id);t.push(...e)}let e=this.checkMarkerDate(n.date,n.id);t.push(...e)}return{passed:t.length===0,violations:t.length>0?t:void 0}}checkPrototypePollution(e,t=``){if(!e||typeof e!=`object`)return{valid:!0};let n=[];for(let r of Object.keys(e))gi.includes(r)&&n.push(`Forbidden key "${r}" found at ${t}`);return n.length>0?{valid:!1,errors:n}:{valid:!0}}checkDateRange(e){let t=[],n=new Date(e.startDate),r=new Date(e.endDate);if(isNaN(n.getTime())&&t.push(`Invalid startDate: ${e.startDate}`),isNaN(r.getTime())&&t.push(`Invalid endDate: ${e.endDate}`),t.length>0)return{valid:!1,errors:t};let i=yi(e.period),a=Math.ceil((r.getTime()-n.getTime())/(1e3*60*60*24));return a>i&&t.push(`Date range exceeds maximum for period "${e.period}" (max ${i} days, got ${a})`),a<0&&t.push(`endDate must be after startDate`),t.length>0?{valid:!1,errors:t}:{valid:!0}}checkSymbol(e){let{symbol:t,exchange:n}=e;if(n){if(!vi[n].test(t))return{valid:!1,errors:[`Invalid symbol "${t}" for exchange "${n}"`]}}else if(!Object.values(vi).some(e=>e.test(t)))return{valid:!1,errors:[`Invalid symbol format: "${t}"`]};return{valid:!0}}checkMarkerStyle(e,t){let n=[],r=[`fillColor`,`strokeColor`,`textColor`];for(let i of r){let r=e[i];typeof r==`string`&&!_i.test(r)&&n.push(`Invalid ${i} in marker "${t}": ${r}`)}if(bi)for(let i of r){let r=e[i];typeof r==`string`&&(bi.fillStyle=`#000000`,bi.fillStyle=r,bi.fillStyle===`#000000`&&r!==`#000000`&&!r.startsWith(`#000`)&&n.push(`Potentially unsafe ${i} in marker "${t}": ${r}`))}return n}static DATE_PATTERN=/^\d{4}-\d{2}-\d{2}( \d{2}:\d{2})?$/;checkMarkerDate(t,n){let r=[];if(!e.DATE_PATTERN.test(t))return r.push(`Invalid date format in marker "${n}": ${t} (expected YYYY-MM-DD or YYYY-MM-DD HH:mm)`),r;let i=t.includes(` `),a;if(i)a=new Date(t);else{let[e,n,r]=t.split(`-`).map(Number);a=new Date(Date.UTC(e,n-1,r))}return isNaN(a.getTime())&&r.push(`Invalid date value in marker "${n}": ${t}`),r}},Si=class{chart;validator;events;constructor(e){this.chart=e,this.validator=new xi,this.events=new p}async applyConfig(e){let t=this.validator.validate(e);if(!t.valid)return{success:!1,errors:t.errors};let n=this.validator.securityCheck(e);if(!n.passed)return{success:!1,errors:n.violations};this.events.emit(`config:loading`,void 0);try{return await this.doApplyConfig(e),this.events.emit(`config:ready`,void 0),{success:!0}}catch(e){return this.events.emit(`config:error`,e),{success:!1,errors:[e instanceof Error?e.message:String(e)]}}}on(e,t){this.events.on(e,t)}off(e,t){this.events.off(e,t)}async doApplyConfig(e){console.log(`[Semantic] doApplyConfig start, data config:`,e.data);let t=await Hn(e.data.source,{symbol:e.data.symbol,startDate:e.data.startDate,endDate:e.data.endDate,period:e.data.period,adjust:e.data.adjust});console.log(`[Semantic] fetched data:`,t.length,`items`),this.chart.updateData(t),e.indicators&&(console.log(`[Semantic] applying indicators:`,e.indicators),this.applyIndicators(e.indicators.main,e.indicators.sub)),e.markers&&(console.log(`[Semantic] applying markers:`,e.markers.customMarkers?.length,`markers`),this.applyMarkers(e.markers.customMarkers,e.data.period)),e.chart&&this.applyChartOptions(e.chart),console.log(`[Semantic] doApplyConfig done`)}applyIndicators(e,t){if(e){for(let t of e)if(t.enabled)switch(t.type){case`MA`:this.applyMAIndicator(t);break;case`BOLL`:this.applyBOLLIndicator(t);break}}if(this.chart.clearSubPanes(),t)for(let e of t)this.applySubIndicator(e)}applyMAIndicator(e){let t=e.params?.periods||[5,10,20,30,60],n={};for(let e of t)e===5?n.ma5=!0:e===10?n.ma10=!0:e===20?n.ma20=!0:e===30?n.ma30=!0:e===60&&(n.ma60=!0);console.log(`[Semantic] applyMAIndicator, periods:`,t,`maFlags:`,n),this.chart.updateRendererConfig(`ma`,n)}applyBOLLIndicator(e){let t={period:e.params?.period||20,multiplier:e.params?.multiplier||2};this.chart.updateRendererConfig(`boll`,t),this.chart.setRendererEnabled(`boll`,e.enabled)}applySubIndicator(e){if(!e.enabled)return;let{type:t,params:n}=e;this.chart.createSubPane(t,n)||console.warn(`[Semantic] Failed to create sub pane for ${t}`)}applyMarkers(e,t){if(!e||e.length===0){this.chart.clearCustomMarkers();return}let n=e.map(e=>({id:e.id,date:e.date,timestamp:Ci(e.date,t||`daily`),shape:e.shape,groupKey:e.groupKey,offset:e.offset,style:e.style,label:e.label,metadata:e.metadata}));this.chart.updateCustomMarkers(n)}applyChartOptions(e){e.autoScrollToRight}};function Ci(e,t){if(e.includes(` `)){let[t,n]=e.split(` `),r=t.split(`-`).map(Number),i=r[0],a=r[1],o=r[2],s=n.split(`:`).map(Number),c=s[0],l=s[1];return Date.UTC(i,a-1,o,c-8,l,0,0)}else{let t=e.split(`-`).map(Number),n=t[0],r=t[1],i=t[2];return Date.UTC(n,r-1,i,-8,0,0,0)}}var wi={arrow_up:16,arrow_down:16,flag:14,circle:12,rectangle:14,diamond:12};function Ti(e,t,n,r,i,a){let o=a.fillColor||`#000000`,s=a.strokeColor||o,c=i||wi[t];switch(e.fillStyle=o,e.strokeStyle=s,e.lineWidth=a.lineWidth||1,a.opacity!==void 0&&(e.globalAlpha=a.opacity),t){case`arrow_up`:Ai(e,n,r,c);break;case`arrow_down`:ji(e,n,r,c);break;case`circle`:Mi(e,n,r,c);break;case`rectangle`:Ni(e,n,r,c);break;case`diamond`:Pi(e,n,r,c);break;case`flag`:Fi(e,n,r,c);break}e.globalAlpha=1}var Ei=2.5,Di=4;function Oi(e,t,n,r,i,a,o=!1){let s=t.fontSize||12,c=a.textColor||`#333333`,l=i/2;e.font=`${s}px sans-serif`,e.fillStyle=c,e.textBaseline=`middle`;let u=i*Ei,d=ki(e,t.text,u),f=e.measureText(d).width,p=n,m=r;switch(t.position){case`left`:p=n-l-f/2-Di;break;case`right`:p=n+l+f/2+Di;break;case`top`:m=r-l-s/2-Di;break;case`bottom`:m=r+l+s/2+Di;break;default:m=o?r-l-s/2-Di:r+l+s/2+Di;break}t.offset&&(p+=t.offset.x||0,m+=t.offset.y||0),e.textAlign=t.align||`center`,e.fillText(d,p,m)}function ki(e,t,n){if(e.measureText(t).width<=n)return t;let r=e.measureText(`…`).width,i=0,a=t.length;for(;i<a;){let o=Math.ceil((i+a)/2),s=t.slice(0,o);e.measureText(s).width+r<=n?i=o:a=o-1}return t.slice(0,i)+`…`}function Ai(e,t,n,r){e.beginPath(),e.moveTo(t,n-r/2),e.lineTo(t-r/2,n+r/2),e.lineTo(t+r/2,n+r/2),e.closePath(),e.fill()}function ji(e,t,n,r){e.beginPath(),e.moveTo(t,n+r/2),e.lineTo(t-r/2,n-r/2),e.lineTo(t+r/2,n-r/2),e.closePath(),e.fill()}function Mi(e,t,n,r){e.beginPath(),e.arc(t,n,r/2,0,Math.PI*2),e.fill()}function Ni(e,t,n,r){e.fillRect(t-r/2,n-r/2,r,r)}function Pi(e,t,n,r){e.beginPath(),e.moveTo(t,n-r/2),e.lineTo(t+r/2,n),e.lineTo(t,n+r/2),e.lineTo(t-r/2,n),e.closePath(),e.fill()}function Fi(e,t,n,r){e.beginPath(),e.moveTo(t-r/4,n+r/2),e.lineTo(t-r/4,n-r/2),e.stroke(),e.beginPath(),e.moveTo(t-r/4,n-r/2),e.lineTo(t+r/2,n-r/4),e.lineTo(t-r/4,n),e.closePath(),e.fill()}function Ii(e,t,n,r,i,a){let o=a/2;switch(n){case`circle`:let n=e-r,a=t-i;return n*n+a*a<=o*o;default:return e>=r-o&&e<=r+o&&t>=i-o&&t<=i+o}}var Li=function(e){return e.Registered=`registered`,e.Installed=`installed`,e.Error=`error`,e}({});function Ri(e){return{id:e.id,top:e.top,height:e.height,yAxis:{priceToY:t=>e.yAxis.priceToY(t),yToPrice:t=>e.yAxis.yToPrice(t),getPaddingTop:()=>e.yAxis.getPaddingTop(),getPaddingBottom:()=>e.yAxis.getPaddingBottom()},priceRange:e.priceRange}}var zi=Symbol(`global-pane`),K={SYSTEM_YAXIS:-20,SYSTEM_XAXIS:-20,BACKGROUND:0,GRID:10,INDICATOR:30,MAIN:50,OVERLAY:80,FOREGROUND:100,SYSTEM_BORDER:120,SYSTEM_CROSSHAIR:150},Bi=class{plugins=new Map;register(e,t){if(this.plugins.has(e.name))throw Error(`Plugin "${e.name}" is already registered`);let n={plugin:e,config:{enabled:!0,priority:0,...t},state:`registered`};return this.plugins.set(e.name,n),n}unregister(e){return this.plugins.delete(e)}get(e){return this.plugins.get(e)}getPlugin(e){return this.plugins.get(e)?.plugin}getAll(){return Array.from(this.plugins.values())}getEnabled(){return this.getAll().filter(e=>e.config?.enabled!==!1)}updateState(e,t,n){let r=this.plugins.get(e);r&&(r.state=t,n&&(r.error=n))}has(e){return this.plugins.has(e)}clear(){this.plugins.clear()}},Vi=class{hooks=new Map;tap(e,t,n=0){this.hooks.has(e)||this.hooks.set(e,[]);let r=this.hooks.get(e);r.push({name:e,fn:t,priority:n}),r.sort((e,t)=>e.priority-t.priority)}untap(e,t){let n=this.hooks.get(e);if(n){let e=n.findIndex(e=>e.fn===t);e!==-1&&n.splice(e,1)}}async call(e,t){let n=this.hooks.get(e);if(!n||n.length===0)return[];let r=[];for(let{fn:i}of n)try{let e=await i(t);r.push(e)}catch(t){console.error(`[HookSystem] Error in hook "${e}":`,t)}return r}callSync(e,t){let n=this.hooks.get(e);if(!n||n.length===0)return[];let r=[];for(let{fn:i}of n)try{let e=i(t);r.push(e)}catch(t){console.error(`[HookSystem] Error in hook "${e}":`,t)}return r}clear(){this.hooks.clear()}hookCount(e){return this.hooks.get(e)?.length??0}},Hi=class{configs=new Map;defaults=new Map;registerDefaults(e,t){this.defaults.set(e,{...t}),this.configs.has(e)||this.configs.set(e,new Map);let n=this.configs.get(e);for(let[e,r]of Object.entries(t))n.has(e)||n.set(e,r)}get(e,t,n){let r=this.configs.get(e);if(r?.has(t))return r.get(t);let i=this.defaults.get(e);return i&&t in i?i[t]:n}set(e,t,n){this.configs.has(e)||this.configs.set(e,new Map),this.configs.get(e).set(t,n)}setAll(e,t){for(let[n,r]of Object.entries(t))this.set(e,n,r)}getAll(e){let t=this.configs.get(e);return{...this.defaults.get(e)||{},...t?Object.fromEntries(t):{}}}clear(e){e?this.configs.delete(e):this.configs.clear()}},Ui=class{registry;eventBus;hookSystem;configManager;isDestroyed=!1;constructor(){this.registry=new Bi,this.eventBus=new p,this.hookSystem=new Vi,this.configManager=new Hi}events={on:(e,t)=>{this.eventBus.on(e,t)},off:(e,t)=>{this.eventBus.off(e,t)},emit:(e,t)=>{this.eventBus.emit(e,t)},once:(e,t)=>{this.eventBus.once(e,t)}};hooks={tap:(e,t,n=0)=>{this.hookSystem.tap(e,t,n)},untap:(e,t)=>{this.hookSystem.untap(e,t)},call:async(e,t)=>this.hookSystem.call(e,t),callSync:(e,t)=>this.hookSystem.callSync(e,t)};getConfig(e,t,n){return this.configManager.get(e,t,n)}setConfig(e,t,n){this.configManager.set(e,t,n)}getPlugin(e){return this.registry.getPlugin(e)}log(e,t,...n){let r=`[${new Date().toISOString()}] [${e.toUpperCase()}]`;console[e](`${r} ${t}`,...n)}async use(e,t){if(this.ensureNotDestroyed(),this.registry.has(e.name))throw Error(`Plugin "${e.name}" is already installed`);try{let n=this.registry.register(e,t);t&&this.configManager.setAll(e.name,t),await this.hooks.call(`plugin:beforeInstall`,{plugin:e,config:t}),await e.install(this,n.config),this.registry.updateState(e.name,`installed`),await this.hooks.call(`plugin:afterInstall`,{plugin:e,config:t}),this.log(`info`,`Plugin "${e.name}" installed successfully`)}catch(t){throw this.registry.updateState(e.name,`error`,t instanceof Error?t:Error(String(t))),this.log(`error`,`Failed to install plugin "${e.name}":`,t),t}}async remove(e){this.ensureNotDestroyed();let t=this.registry.get(e);if(!t)throw Error(`Plugin "${e}" is not installed`);try{await this.hooks.call(`plugin:beforeUninstall`,{name:e}),t.plugin.uninstall&&await t.plugin.uninstall(),this.registry.unregister(e),this.configManager.clear(e),await this.hooks.call(`plugin:afterUninstall`,{name:e}),this.log(`info`,`Plugin "${e}" removed successfully`)}catch(t){throw this.log(`error`,`Failed to remove plugin "${e}":`,t),t}}getPlugins(){return this.registry.getAll()}getState(e){return this.registry.get(e)?.state}async destroy(){if(!this.isDestroyed){for(let e of this.registry.getAll())try{e.plugin.uninstall&&await e.plugin.uninstall()}catch(t){this.log(`error`,`Error uninstalling "${e.plugin.name}":`,t)}this.registry.clear(),this.eventBus.clear(),this.hookSystem.clear(),this.configManager.clear(),this.isDestroyed=!0,this.log(`info`,`PluginHost destroyed`)}}ensureNotDestroyed(){if(this.isDestroyed)throw Error(`PluginHost has been destroyed`)}};function Wi(){return new Ui}var Gi=Symbol(`renderer:global-cache`),Ki=class{plugins=new Map;pluginHost=null;enabledState=new Map;groupCache=new Map;mergedCache=new Map;knownPaneIds=new Set([`main`]);cacheInvalid=!0;onInvalidate=null;setInvalidateCallback(e){this.onInvalidate=e}setPluginHost(e){this.pluginHost=e}addKnownPaneId(e){this.knownPaneIds.add(e),this.cacheInvalid=!0}removeKnownPaneId(e){this.knownPaneIds.delete(e),this.cacheInvalid=!0}getKnownPaneIds(){return Array.from(this.knownPaneIds)}register(e){if(this.plugins.has(e.name)){console.warn(`Renderer plugin "${e.name}" already registered`);return}this.plugins.set(e.name,e),e.enabled!==void 0&&this.enabledState.set(e.name,e.enabled),this.cacheInvalid=!0;let t=e;if(t.onInstall&&this.pluginHost)try{t.onInstall(this.pluginHost)}catch(t){console.error(`[RendererPlugin] ${e.name} onInstall error:`,t)}this.onInvalidate?.()}unregister(e){let t=this.plugins.get(e);if(t){if(t.onUninstall)try{t.onUninstall()}catch(e){console.error(`[RendererPlugin] ${t.name} onUninstall error:`,e)}this.plugins.delete(e),this.enabledState.delete(e),this.cacheInvalid=!0,this.onInvalidate?.()}}clear(){for(let e of this.plugins.values())if(e.onUninstall)try{e.onUninstall()}catch(t){console.error(`[RendererPlugin] ${e.name} onUninstall error:`,t)}this.plugins.clear(),this.enabledState.clear(),this.groupCache.clear(),this.mergedCache.clear(),this.cacheInvalid=!1}mergeSorted(e,t){let n=[],r=0,i=0;for(;r<e.length&&i<t.length;)e[r].priority<=t[i].priority?n.push(e[r++]):n.push(t[i++]);return[...n,...e.slice(r),...t.slice(i)]}rebuildCache(){if(!this.cacheInvalid)return;this.groupCache.clear(),this.mergedCache.clear();for(let e of this.plugins.values()){let t=typeof e.paneId==`symbol`?Gi:e.paneId;this.groupCache.has(t)||this.groupCache.set(t,[]),this.groupCache.get(t).push(e)}for(let[,e]of this.groupCache)e.sort((e,t)=>e.priority-t.priority);let e=this.groupCache.get(Gi)??[];for(let t of this.knownPaneIds){let n=this.groupCache.get(t)??[],r=this.mergeSorted(n,e);this.mergedCache.set(t,r)}this.mergedCache.set(Gi,[...e]),this.cacheInvalid=!1}getRenderers(e){this.rebuildCache();let t=this.mergedCache.get(e);return t||(t=this.mergedCache.get(Gi)??[],this.mergedCache.set(e,t)),t.filter(e=>{if(e.isSystem)return!1;let t=this.enabledState.get(e.name);return t===void 0?e.enabled!==!1:t})}render(e,t){let n=this.getRenderers(e),r=[];for(let e of n)try{e.draw(t)}catch(n){let i=n instanceof Error?n:Error(String(n));console.error(`[RendererPlugin] ${e.name} draw error:`,i),r.push({name:e.name,error:{message:i.message,stack:i.stack},paneId:t.pane.id,timestamp:Date.now()})}return r}renderPlugin(e,t){let n=this.plugins.get(e);if(!n)return[];let r=this.enabledState.get(e);if(!(r===void 0?n.enabled!==!1:r))return[];let i=[];try{n.draw(t)}catch(n){let r=n instanceof Error?n:Error(String(n));console.error(`[RendererPlugin] ${e} draw error:`,r),i.push({name:e,error:{message:r.message,stack:r.stack},paneId:t.pane.id,timestamp:Date.now()})}return i}setEnabled(e,t){this.plugins.has(e)&&(this.enabledState.set(e,t),this.onInvalidate?.())}updateConfig(e,t){let n=this.plugins.get(e);return n?.setConfig?(n.setConfig(t),this.onInvalidate?.(),!0):!1}getAllPlugins(){return Array.from(this.plugins.values())}getPlugin(e){return this.plugins.get(e)}notifyDataUpdate(e,t){for(let n of this.plugins.values()){if(!n.onDataUpdate)continue;let r=this.enabledState.get(n.name);if(r===void 0?n.enabled!==!1:r)try{n.onDataUpdate(e,t)}catch(e){console.error(`[RendererPlugin] ${n.name} onDataUpdate error:`,e)}}}notifyResize(e,t){let n=this.getRenderers(e);for(let e of n)if(e.onResize)try{e.onResize(t)}catch(t){console.error(`[RendererPlugin] ${e.name} onResize error:`,t)}}},qi=1.2,Ji=24,Yi=6;function Xi(e){switch(e){case`arrow_up`:case`flag`:return!0;default:return!1}}function Zi(){return{name:`customMarkers`,version:`1.0.0`,description:`自定义标记渲染器`,debugName:`自定义标记`,paneId:`main`,priority:K.OVERLAY,draw(e){let{ctx:t,pane:n,data:r,range:i,scrollLeft:a,kWidth:o,kLinePositions:s,markerManager:c}=e;if(!c)return;let l=c.getCustomMarkers();if(!l||l.length===0)return;let u=r;if(u.length&&n.id===`main`){t.save(),t.translate(-a,0);for(let e of l){let r=$i(u,e.timestamp);if(r===-1||r<i.start||r>=i.end)continue;let l=r-i.start;if(l<0||l>=s.length)continue;let d=s[l]+o/2,f=u[r],p=e.style?.size,m=Qi(o,p),h=(e.offset?.y??0)<0?!0:(e.offset?.y??0)>0?!1:Xi(e.shape),g;g=h?n.yAxis.priceToY(f.high)-m/2-4+(e.offset?.y??0):n.yAxis.priceToY(f.low)+m/2+4+(e.offset?.y??0);let _=d+(e.offset?.x??0),v=g;Ti(t,e.shape,_,v,m,e.style||{}),e.label&&Oi(t,e.label,_,v,m,e.style||{},h),c.setCustomMarkerPosition(e.id,_-a,v,m,e.shape)}t.restore()}}}}function Qi(e,t){let n=e*qi;return Math.max(Yi,Math.min(n,t??Ji))}function $i(e,t){let n=0,r=e.length-1;for(;n<=r;){let i=Math.floor((n+r)/2),a=e[i]?.timestamp;if(a===void 0)break;if(a===t)return i;a<t?n=i+1:r=i-1}return-1}function ea(e){let t=new Intl.DateTimeFormat(`zh-CN`,{timeZone:`Asia/Shanghai`,year:`numeric`,month:`2-digit`,day:`2-digit`}).formatToParts(new Date(e)).reduce((e,t)=>(t.type!==`literal`&&(e[t.type]=t.value),e),{});return`${t.year}-${t.month}-${t.day}`}function ta(e){let t=new Date(e),n=t.getFullYear(),r=t.getMonth()+1;return r===1?{text:String(n),isYear:!0}:{text:`${r}月`,isYear:!1}}function na(e){let t=new Date(e);return`${t.getFullYear()}-${t.getMonth()}`}var ra=ea,ia=ea;function aa(e){if(e.length===0)return[];let t=[0],n=na(e[0].timestamp);for(let r=1;r<e.length;r++){let i=e[r];if(!i)continue;let a=na(i.timestamp);a!==n&&(t.push(r),n=a)}return t}var q={PRIMARY:`hsl(210, 9%, 31%)`,SECONDARY:`hsl(210, 9%, 35%)`,TERTIARY:`hsl(210, 8%, 50%)`,WEAK:`hsl(210, 7%, 65%)`,WHITE:`rgba(255, 255, 255, 0.92)`},J={UP:`rgba(214, 10, 34, 1)`,UP_LIGHT:`rgba(214, 10, 34, 0.92)`,UP_TICK:`hsl(0, 60%, 50%)`,DOWN:`rgba(3, 123, 102, 1)`,DOWN_LIGHT:`rgba(3, 123, 102, 0.92)`,DOWN_TICK:`hsl(150, 30%, 60%)`,NEUTRAL:`rgba(0, 0, 0, 0.78)`,LAST_PRICE:`rgb(183, 22, 22)`},oa={WHITE:`rgb(255, 255, 255)`,LIGHT_GRAY:`rgba(255, 255, 255, 0.92)`,PURE_WHITE:`#ffffff`,ACTIVE:`#1890ff`,ACTIVE_HOVER:`#40a9ff`,HOVER:`#f0f0f0`},sa={DARK:`rgba(0, 0, 0, 0.12)`,MEDIUM:`rgba(0, 0, 0, 0.10)`,LIGHT:`rgba(0, 0, 0, 0.08)`,SEPARATOR:`rgba(0, 0, 0, 0.10)`,BUTTON:`#d0d0d0`},ca={HORIZONTAL:`rgba(0, 0, 0, 0.06)`,VERTICAL:`rgba(0, 0, 0, 0.12)`},Y={MA5:`rgba(255, 193, 37, 1)`,MA10:`rgba(190, 131, 12, 1)`,MA20:`rgba(69, 112, 249, 1)`,MA30:`rgba(76, 175, 80, 1)`,MA60:`rgba(156, 39, 176, 1)`},la={UPPER:`rgba(178, 34, 34, 1)`,MIDDLE:`rgba(69, 112, 249, 1)`,LOWER:`rgba(34, 139, 34, 1)`,BAND_FILL:`rgba(100, 149, 237, 0.1)`},X={DIF:`rgba(69, 112, 249, 1)`,DEA:`rgba(255, 152, 0, 1)`,BAR_UP:`#ff5252`,BAR_UP_LIGHT:`#fccbcd`,BAR_DOWN:`#22ab94`,BAR_DOWN_LIGHT:`#ace5dc`},ua={RSI1:`rgba(69, 112, 249, 1)`,RSI2:`rgba(255, 152, 0, 1)`,RSI3:`rgba(156, 39, 176, 1)`},da={CCI:`rgba(69, 112, 249, 1)`,OVERBOUGHT:`rgba(214, 10, 34, 0.5)`,OVERSOLD:`rgba(3, 123, 102, 0.5)`},fa={K:`rgba(69, 112, 249, 1)`,D:`rgba(255, 152, 0, 1)`,J:`rgba(156, 39, 176, 1)`},pa={MOM:`rgba(69, 112, 249, 1)`,ZERO:`rgba(0, 0, 0, 0.2)`},ma={WMSR:`rgba(69, 112, 249, 1)`,OVERBOUGHT:`rgba(214, 10, 34, 0.5)`,OVERSOLD:`rgba(3, 123, 102, 0.5)`},ha={KST:`rgba(69, 112, 249, 1)`,SIGNAL:`rgba(255, 152, 0, 1)`},ga={LINE:`rgba(0, 0, 0, 0.28)`,LABEL_BG:`rgb(0, 0, 0)`,LABEL_TEXT:`rgba(255, 255, 255, 0.92)`},_a=J.UP,va=J.DOWN,ya=J.NEUTRAL;function ba(e){return e>0?_a:e<0?va:ya}function xa(e,t=2){let n=Math.abs(e);return n>=1e8?`${(e/1e8).toFixed(t)}亿`:n>=1e4?`${(e/1e4).toFixed(t)}万`:`${Math.round(e)}`}function Sa(e,t=2){return`${e>0?`+`:``}${e.toFixed(t)}`}function Ca(e,t=2){return`${e.toFixed(t)}%`}function wa(e,t=2){return`${e>0?`+`:``}${e.toFixed(t)}%`}function Ta(e,t){let n=t?.close??e.open;return ba(e.open-n)}function Ea(e){return ba(e.close-e.open)}function Da(e){return typeof e.changePercent==`number`?ba(e.changePercent):typeof e.changeAmount==`number`?ba(e.changeAmount):ya}var Oa={class:`kline-tooltip__title`},ka={key:0},Aa={class:`kline-tooltip__grid`},ja={class:`row`},Ma={class:`row`},Na={class:`row`},Pa={class:`row`},Fa={key:0,class:`row`},Ia={key:1,class:`row`},La={key:2,class:`row`},Ra={key:3,class:`row`},za={key:4,class:`row`},Ba={key:5,class:`row`},Va=(0,f.defineComponent)({__name:`KLineTooltip`,props:{k:{},index:{},data:{},pos:{},setEl:{type:Function}},setup(e){let t=e;function n(e){t.setEl?.(e)}let r=(0,f.computed)(()=>{let e=t.k;if(!e)return ya;let n=t.index;return Ta(e,typeof n==`number`&&n>0?t.data[n-1]:void 0)}),i=(0,f.computed)(()=>{let e=t.k;return e?Ea(e):ya}),a=(0,f.computed)(()=>{let e=t.k;return e?Da(e):ya});return(t,o)=>e.k?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,{key:0,ref:n,class:`kline-tooltip`,style:(0,f.normalizeStyle)({left:`${e.pos.x}px`,top:`${e.pos.y}px`})},[(0,f.createElementVNode)(`div`,Oa,[e.k.stockCode?((0,f.openBlock)(),(0,f.createElementBlock)(`span`,ka,(0,f.toDisplayString)(e.k.stockCode),1)):(0,f.createCommentVNode)(``,!0),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)((0,f.unref)(ra)(e.k.timestamp)),1)]),(0,f.createElementVNode)(`div`,Aa,[(0,f.createElementVNode)(`div`,ja,[o[0]||=(0,f.createElementVNode)(`span`,null,`开`,-1),(0,f.createElementVNode)(`span`,{style:(0,f.normalizeStyle)({color:r.value})},(0,f.toDisplayString)(e.k.open.toFixed(2)),5)]),(0,f.createElementVNode)(`div`,Ma,[o[1]||=(0,f.createElementVNode)(`span`,null,`高`,-1),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)(e.k.high.toFixed(2)),1)]),(0,f.createElementVNode)(`div`,Na,[o[2]||=(0,f.createElementVNode)(`span`,null,`低`,-1),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)(e.k.low.toFixed(2)),1)]),(0,f.createElementVNode)(`div`,Pa,[o[3]||=(0,f.createElementVNode)(`span`,null,`收`,-1),(0,f.createElementVNode)(`span`,{style:(0,f.normalizeStyle)({color:i.value})},(0,f.toDisplayString)(e.k.close.toFixed(2)),5)]),typeof e.k.volume==`number`?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,Fa,[o[4]||=(0,f.createElementVNode)(`span`,null,`成交量`,-1),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)((0,f.unref)(xa)(e.k.volume)),1)])):(0,f.createCommentVNode)(``,!0),typeof e.k.turnover==`number`?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,Ia,[o[5]||=(0,f.createElementVNode)(`span`,null,`成交额`,-1),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)((0,f.unref)(xa)(e.k.turnover)),1)])):(0,f.createCommentVNode)(``,!0),typeof e.k.amplitude==`number`?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,La,[o[6]||=(0,f.createElementVNode)(`span`,null,`振幅`,-1),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)(e.k.amplitude)+`%`,1)])):(0,f.createCommentVNode)(``,!0),typeof e.k.changePercent==`number`?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,Ra,[o[7]||=(0,f.createElementVNode)(`span`,null,`涨跌幅`,-1),(0,f.createElementVNode)(`span`,{style:(0,f.normalizeStyle)({color:a.value})},(0,f.toDisplayString)((0,f.unref)(wa)(e.k.changePercent)),5)])):(0,f.createCommentVNode)(``,!0),typeof e.k.changeAmount==`number`?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,za,[o[8]||=(0,f.createElementVNode)(`span`,null,`涨跌额`,-1),(0,f.createElementVNode)(`span`,{style:(0,f.normalizeStyle)({color:a.value})},(0,f.toDisplayString)((0,f.unref)(Sa)(e.k.changeAmount)),5)])):(0,f.createCommentVNode)(``,!0),typeof e.k.turnoverRate==`number`?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,Ba,[o[9]||=(0,f.createElementVNode)(`span`,null,`换手率`,-1),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)((0,f.unref)(Ca)(e.k.turnoverRate)),1)])):(0,f.createCommentVNode)(``,!0)])],4)):(0,f.createCommentVNode)(``,!0)}}),Ha=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},Ua=Ha(Va,[[`__scopeId`,`data-v-95daa55c`]]),Wa={RISE_WITH_VOLUME:`量价齐升`,RISE_WITHOUT_VOLUME:`量缩价升`,FALL_WITH_VOLUME:`量价齐缩`,FALL_WITHOUT_VOLUME:`量升价缩`},Ga=class{markers=new Map;hoveredMarkerId=null;lastHoveredId=null;customMarkers=new Map;customMarkerPositions=new Map;clear(){this.markers.clear()}register(e){this.markers.set(e.id,e)}getState(e){return this.hoveredMarkerId===e?`hovered`:`normal`}hitTest(e,t,n=3){for(let r of this.markers.values())if(e>=r.x-n&&e<=r.x+r.width+n&&t>=r.y-n&&t<=r.y+r.height+n)return r;return null}setHover(e){this.hoveredMarkerId=e,this.lastHoveredId=e}validateHoverState(){this.hoveredMarkerId!==null&&!this.markers.has(this.hoveredMarkerId)&&(this.hoveredMarkerId=null)}getHoveredMarker(){return this.hoveredMarkerId===null?null:this.markers.get(this.hoveredMarkerId)||null}getLastHoverId(){return this.lastHoveredId}getAllMarkers(){return Array.from(this.markers.values())}registerCustomMarker(e){this.customMarkers.set(e.id,e)}setCustomMarkers(e){this.clearCustomMarkers();for(let t of e)this.customMarkers.set(t.id,t)}clearCustomMarkers(){this.customMarkers.clear(),this.customMarkerPositions.clear()}getCustomMarkers(){return Array.from(this.customMarkers.values())}setCustomMarkerPosition(e,t,n,r,i){this.customMarkerPositions.set(e,{x:t,y:n,size:r,shape:i})}hitTestCustomMarker(e,t){for(let n of this.customMarkers.values()){let r=this.customMarkerPositions.get(n.id);if(r&&Ii(e,t,r.shape,r.x,r.y,r.size))return n}return null}},Ka={class:`marker-tooltip__title`},qa={key:0,class:`marker-tooltip__content`},Ja=Ha((0,f.defineComponent)({__name:`MarkerTooltip`,props:{marker:{},pos:{}},setup(e){let t=e,n=(0,f.computed)(()=>t.marker&&`date`in t.marker),r=(0,f.computed)(()=>{if(!t.marker)return``;if(n.value){let e=t.marker;return e.label?.text||e.shape}let e=t.marker;return Wa[e.markerType]||e.markerType}),i=(0,f.computed)(()=>{if(!t.marker)return{};if(n.value){let e=t.marker;return{日期:e.date,...e.metadata}}return t.marker.metadata}),a=(0,f.computed)(()=>Object.keys(i.value).length>0);function o(e){return typeof e==`number`?e.toFixed(2):String(e)}return(t,n)=>e.marker?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,{key:0,class:`marker-tooltip`,style:(0,f.normalizeStyle)({left:`${e.pos.x+12}px`,top:`${e.pos.y+12}px`})},[(0,f.createElementVNode)(`div`,Ka,(0,f.toDisplayString)(r.value),1),a.value?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,qa,[((0,f.openBlock)(!0),(0,f.createElementBlock)(f.Fragment,null,(0,f.renderList)(i.value,(e,t)=>((0,f.openBlock)(),(0,f.createElementBlock)(`div`,{key:t,class:`row`},[(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)(t),1),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)(o(e)),1)]))),128))])):(0,f.createCommentVNode)(``,!0)],4)):(0,f.createCommentVNode)(``,!0)}}),[[`__scopeId`,`data-v-dd43da4f`]]),Ya={class:`params-header`},Xa={class:`header-left`},Za={class:`params-title`},Qa={class:`header-right`},$a={key:0,class:`indicator-description`},eo={class:`params-body`},to={class:`param-header`},no={class:`param-label`},ro={class:`param-label-text`},io={key:0,class:`param-range`},ao={class:`input-wrapper`},oo=[`disabled`,`onClick`],so=[`value`,`min`,`max`,`step`,`onInput`],co=[`disabled`,`onClick`],lo={key:0,class:`param-description`},uo={class:`params-footer`},fo={class:`footer-right`},po=Ha((0,f.defineComponent)({__name:`IndicatorParams`,props:{visible:{type:Boolean},indicatorId:{},indicatorName:{},indicatorDescription:{},params:{},values:{}},emits:[`close`,`confirm`],setup(e,{emit:t}){let n=e,r=t,i=(0,f.ref)({...n.values}),a=(0,f.ref)(!0);(0,f.watch)(()=>n.values,e=>{i.value={...e}},{deep:!0,immediate:!0}),(0,f.watch)(()=>n.visible,e=>{e&&(i.value={...n.values})});function o(e,t){let n=t.target,r=parseFloat(n.value);isNaN(r)||(i.value[e]=r)}function s(e,t){let n=e.step||1,r=(i.value[e.key]||0)+t*n;e.min!==void 0&&(r=Math.max(e.min,r)),e.max!==void 0&&(r=Math.min(e.max,r)),i.value[e.key]=parseFloat(r.toFixed(10))}function c(){let e={};n.params.forEach(t=>{e[t.key]=t.default??n.values[t.key]??0}),i.value=e}function l(){r(`confirm`,{...i.value})}return(t,n)=>((0,f.openBlock)(),(0,f.createBlock)(f.Teleport,{to:`body`},[(0,f.createVNode)(f.Transition,{name:`overlay`},{default:(0,f.withCtx)(()=>[e.visible?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,{key:0,class:`params-overlay`,onClick:n[4]||=e=>t.$emit(`close`)},[(0,f.createVNode)(f.Transition,{name:`modal`},{default:(0,f.withCtx)(()=>[(0,f.createElementVNode)(`div`,{class:`indicator-params`,onClick:n[3]||=(0,f.withModifiers)(()=>{},[`stop`])},[(0,f.createElementVNode)(`div`,Ya,[(0,f.createElementVNode)(`div`,Xa,[(0,f.createElementVNode)(`span`,Za,(0,f.toDisplayString)(e.indicatorName),1),n[5]||=(0,f.createElementVNode)(`span`,{class:`params-subtitle`},`参数设置`,-1)]),(0,f.createElementVNode)(`div`,Qa,[(0,f.createElementVNode)(`button`,{class:(0,f.normalizeClass)([`toggle-desc-btn`,{active:a.value}]),onClick:n[0]||=e=>a.value=!a.value,title:`显示/隐藏说明`},[...n[6]||=[(0,f.createElementVNode)(`svg`,{viewBox:`0 0 1024 1024`},[(0,f.createElementVNode)(`path`,{d:`M512 97.52381c228.912762 0 414.47619 185.563429 414.47619 414.47619s-185.563429 414.47619-414.47619 414.47619S97.52381 740.912762 97.52381 512 283.087238 97.52381 512 97.52381z m0 73.142857C323.486476 170.666667 170.666667 323.486476 170.666667 512s152.81981 341.333333 341.333333 341.333333 341.333333-152.81981 341.333333-341.333333S700.513524 170.666667 512 170.666667z m36.571429 268.190476v292.571428h-73.142858V438.857143h73.142858z m0-121.904762v73.142857h-73.142858v-73.142857h73.142858z`,fill:`currentColor`})],-1)]],2),(0,f.createElementVNode)(`button`,{class:`params-close`,onClick:n[1]||=e=>t.$emit(`close`)},[...n[7]||=[(0,f.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[(0,f.createElementVNode)(`path`,{d:`M18 6L6 18M6 6l12 12`})],-1)]])])]),(0,f.createVNode)(f.Transition,{name:`slide`},{default:(0,f.withCtx)(()=>[a.value&&e.indicatorDescription?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,$a,[(0,f.createElementVNode)(`p`,null,(0,f.toDisplayString)(e.indicatorDescription),1)])):(0,f.createCommentVNode)(``,!0)]),_:1}),(0,f.createElementVNode)(`div`,eo,[((0,f.openBlock)(!0),(0,f.createElementBlock)(f.Fragment,null,(0,f.renderList)(e.params,e=>((0,f.openBlock)(),(0,f.createElementBlock)(`div`,{key:e.key,class:(0,f.normalizeClass)([`param-item`,{"has-desc":a.value&&e.description}])},[(0,f.createElementVNode)(`div`,to,[(0,f.createElementVNode)(`label`,no,[(0,f.createElementVNode)(`span`,ro,(0,f.toDisplayString)(e.label),1),e.min!==void 0||e.max!==void 0?((0,f.openBlock)(),(0,f.createElementBlock)(`span`,io,(0,f.toDisplayString)(e.min??`-∞`)+` ~ `+(0,f.toDisplayString)(e.max??`+∞`),1)):(0,f.createCommentVNode)(``,!0)]),(0,f.createElementVNode)(`div`,ao,[(0,f.createElementVNode)(`button`,{class:`stepper-btn`,disabled:e.min!==void 0&&(i.value[e.key]??0)<=e.min,onClick:t=>s(e,-1)},` − `,8,oo),e.type===`number`?((0,f.openBlock)(),(0,f.createElementBlock)(`input`,{key:0,type:`number`,class:`param-input`,value:i.value[e.key],min:e.min,max:e.max,step:e.step||1,onInput:t=>o(e.key,t)},null,40,so)):(0,f.createCommentVNode)(``,!0),(0,f.createElementVNode)(`button`,{class:`stepper-btn`,disabled:e.max!==void 0&&(i.value[e.key]??0)>=e.max,onClick:t=>s(e,1)},` + `,8,co)])]),(0,f.createVNode)(f.Transition,{name:`slide`},{default:(0,f.withCtx)(()=>[a.value&&e.description?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,lo,(0,f.toDisplayString)(e.description),1)):(0,f.createCommentVNode)(``,!0)]),_:2},1024)],2))),128))]),(0,f.createElementVNode)(`div`,uo,[(0,f.createElementVNode)(`button`,{class:`params-btn reset`,onClick:c},[...n[8]||=[(0,f.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[(0,f.createElementVNode)(`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`}),(0,f.createElementVNode)(`path`,{d:`M3 3v5h5`})],-1),(0,f.createTextVNode)(` 重置 `,-1)]]),(0,f.createElementVNode)(`div`,fo,[(0,f.createElementVNode)(`button`,{class:`params-btn cancel`,onClick:n[2]||=e=>t.$emit(`close`)},`取消`),(0,f.createElementVNode)(`button`,{class:`params-btn confirm`,onClick:l},[...n[9]||=[(0,f.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`},[(0,f.createElementVNode)(`path`,{d:`M20 6L9 17l-5-5`})],-1),(0,f.createTextVNode)(` 确定 `,-1)]])])])])]),_:1})])):(0,f.createCommentVNode)(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-730f2212`]]),mo={class:`indicator-selector`},ho={class:`indicator-list`},go=[`onClick`,`title`],_o={key:0,class:`param-hint`},vo=[`onClick`],yo=Ha((0,f.defineComponent)({__name:`IndicatorSelector`,props:{activeIndicators:{},indicatorParams:{}},emits:[`toggle`,`updateParams`],setup(e,{emit:t}){let n=[{id:`MA`,label:`MA`,name:`均线`,pane:`main`},{id:`BOLL`,label:`BOLL`,name:`布林带`,pane:`main`,description:`布林带由三条轨道线组成,用于判断价格的波动范围和趋势强度。价格触及上轨可能超买,触及下轨可能超卖。`,params:[{key:`period`,label:`周期`,type:`number`,min:2,max:100,step:1,description:`计算移动平均线的周期数,周期越长轨道越平滑`},{key:`multiplier`,label:`倍数`,type:`number`,min:.1,max:5,step:.1,description:`标准差倍数,决定轨道宽度,通常为 2`}]},{id:`MACD`,label:`MACD`,name:`指数平滑异同移动平均线`,pane:`sub`,description:`MACD 通过快慢均线的交叉判断趋势方向和动量。DIF 上穿 DEA 为金叉看涨,下穿为死叉看跌。`,params:[{key:`fastPeriod`,label:`快线`,type:`number`,min:2,max:50,step:1,description:`快线 EMA 周期,对价格变化更敏感`},{key:`slowPeriod`,label:`慢线`,type:`number`,min:2,max:100,step:1,description:`慢线 EMA 周期,用于计算 DIF`},{key:`signalPeriod`,label:`信号`,type:`number`,min:2,max:50,step:1,description:`DEA 的 EMA 周期,用于生成买卖信号`}]},{id:`RSI`,label:`RSI`,name:`相对强弱指标`,pane:`sub`,description:`RSI 衡量价格变动的速度和幅度,判断超买超卖状态。RSI > 70 超买,RSI < 30 超卖。`,params:[{key:`period1`,label:`周期 1`,type:`number`,min:2,max:100,step:1,description:`第一条 RSI 周期,通常为 6(快线)`},{key:`period2`,label:`周期 2`,type:`number`,min:2,max:100,step:1,description:`第二条 RSI 周期,通常为 12(中线)`},{key:`period3`,label:`周期 3`,type:`number`,min:2,max:100,step:1,description:`第三条 RSI 周期,通常为 24(慢线)`}]},{id:`CCI`,label:`CCI`,name:`顺势指标`,pane:`sub`,description:`CCI 衡量价格与统计平均值的偏离程度。CCI > 100 超买,CCI < -100 超卖,适合捕捉趋势反转。`,params:[{key:`period`,label:`周期`,type:`number`,min:2,max:100,step:1,description:`计算周期,周期越短信号越灵敏`}]},{id:`STOCH`,label:`STOCH`,name:`随机指标`,pane:`sub`,description:`KDJ 随机指标通过比较收盘价与价格区间判断超买超卖。K > 80 超买,K < 20 超卖,K 上穿 D 金叉。`,params:[{key:`n`,label:`K 周期`,type:`number`,min:2,max:100,step:1,description:`计算 K 值的周期,统计 N 日内价格区间`},{key:`m`,label:`D 周期`,type:`number`,min:1,max:50,step:1,description:`D 值是 K 的 M 日移动平均,使信号更平滑`}]},{id:`MOM`,label:`MOM`,name:`动量指标`,pane:`sub`,description:`动量指标衡量价格变化的速度,MOM > 0 表示上涨动能,MOM < 0 表示下跌动能。适合判断趋势强度。`,params:[{key:`period`,label:`周期`,type:`number`,min:2,max:100,step:1,description:`与多少日前价格比较,周期越短越灵敏`}]},{id:`WMSR`,label:`WMSR`,name:`威廉指标`,pane:`sub`,description:`威廉指标衡量超买超卖程度,范围为 -100 到 0。WMSR > -20 超买,WMSR < -80 超卖。`,params:[{key:`period`,label:`周期`,type:`number`,min:2,max:100,step:1,description:`回溯周期,统计周期内最高最低价`}]},{id:`KST`,label:`KST`,name:`确然指标`,pane:`sub`,description:`KST 综合多个 ROC 判断长期趋势,KST 上穿信号线看涨,下穿看跌。适合捕捉主要趋势转换。`,params:[{key:`roc1`,label:`ROC1`,type:`number`,min:2,max:100,step:1,description:`短期变化率周期`},{key:`roc2`,label:`ROC2`,type:`number`,min:2,max:100,step:1,description:`中短期变化率周期`},{key:`roc3`,label:`ROC3`,type:`number`,min:2,max:100,step:1,description:`中长期变化率周期`},{key:`roc4`,label:`ROC4`,type:`number`,min:2,max:100,step:1,description:`长期变化率周期`},{key:`signalPeriod`,label:`信号`,type:`number`,min:2,max:50,step:1,description:`信号线的 SMA 周期`}]},{id:`FASTK`,label:`FASTK`,name:`快速随机指标`,pane:`sub`,description:`FASTK 是未经过平滑处理的随机指标,比普通 KDJ 更敏感,能更快捕捉价格转折点,但假信号也更多。`,params:[{key:`period`,label:`周期`,type:`number`,min:2,max:100,step:1,description:`计算周期,周期越短越敏感`}]}],r=e,i=t,a=(0,f.ref)(null),o=(0,f.ref)(!1),s=(0,f.ref)(null),c=(0,f.computed)(()=>s.value&&n.find(e=>e.id===s.value)||null);function l(e){return r.activeIndicators?.includes(e)??!1}function u(e){let t=n.find(t=>t.id===e);t&&(l(e)?i(`toggle`,e,!1):(t.pane===`main`&&n.filter(t=>t.pane===`main`&&t.id!==e&&l(t.id)).forEach(e=>i(`toggle`,e.id,!1)),i(`toggle`,e,!0)))}function d(e){s.value=e,o.value=!0}function p(e){let t={},i=n.find(t=>t.id===e);if(i?.params)for(let n of i.params)n.key===`period`&&e===`BOLL`?t[n.key]=20:n.key===`multiplier`?t[n.key]=2:n.key===`fastPeriod`?t[n.key]=12:n.key===`slowPeriod`?t[n.key]=26:n.key===`signalPeriod`&&e===`MACD`?t[n.key]=9:n.key===`period1`?t[n.key]=6:n.key===`period2`?t[n.key]=12:n.key===`period3`?t[n.key]=24:n.key===`period`&&e===`CCI`?t[n.key]=14:n.key===`n`?t[n.key]=9:n.key===`m`?t[n.key]=3:n.key===`period`&&e===`MOM`?t[n.key]=10:n.key===`period`&&e===`WMSR`?t[n.key]=14:n.key===`roc1`?t[n.key]=10:n.key===`roc2`?t[n.key]=15:n.key===`roc3`?t[n.key]=20:n.key===`roc4`?t[n.key]=30:(n.key===`signalPeriod`&&e===`KST`||n.key===`period`&&e===`FASTK`)&&(t[n.key]=9);return{...t,...r.indicatorParams?.[e]||{}}}function m(e){let t=p(e.id);return e.params?e.params.map(e=>t[e.key]).join(`,`):``}function h(e){s.value&&i(`updateParams`,s.value,e),o.value=!1}return(e,t)=>((0,f.openBlock)(),(0,f.createElementBlock)(`div`,mo,[(0,f.createElementVNode)(`div`,{class:`indicator-scroll-container`,ref_key:`scrollContainerRef`,ref:a},[(0,f.createElementVNode)(`div`,ho,[((0,f.openBlock)(),(0,f.createElementBlock)(f.Fragment,null,(0,f.renderList)(n,e=>(0,f.createElementVNode)(`div`,{key:e.id,class:`indicator-item`,ref_for:!0,ref:`itemRefs`},[(0,f.createElementVNode)(`button`,{class:(0,f.normalizeClass)([`indicator-btn`,{active:l(e.id)}]),onClick:t=>u(e.id),title:e.name},[(0,f.createTextVNode)((0,f.toDisplayString)(e.label)+` `,1),e.params?((0,f.openBlock)(),(0,f.createElementBlock)(`span`,_o,` (`+(0,f.toDisplayString)(m(e))+`) `,1)):(0,f.createCommentVNode)(``,!0)],10,go),e.params&&l(e.id)?((0,f.openBlock)(),(0,f.createElementBlock)(`button`,{key:0,class:`settings-btn`,onClick:(0,f.withModifiers)(t=>d(e.id),[`stop`]),title:`编辑参数`},` ⚙ `,8,vo)):(0,f.createCommentVNode)(``,!0)])),64))])],512),c.value?((0,f.openBlock)(),(0,f.createBlock)(po,{key:0,visible:o.value,"indicator-id":c.value.id,"indicator-name":c.value.name,"indicator-description":c.value.description,params:c.value.params||[],values:p(c.value.id),onClose:t[0]||=e=>o.value=!1,onConfirm:h},null,8,[`visible`,`indicator-id`,`indicator-name`,`indicator-description`,`params`,`values`])):(0,f.createCommentVNode)(``,!0)]))}}),[[`__scopeId`,`data-v-bd302de5`]]);function bo(e,t){let n=Math.round(e*t);return n%2==0&&(n+=1),Math.max(1,n)}function xo(e,t,n){let r=bo(e,n),i=Math.round(t*n),a=r+i,o=i;return{kWidthPx:r,kGapPx:i,unitPx:a,startXPx:o,kWidthLogical:r/n,kGapLogical:i/n,unitLogical:a/n,startXLogical:o/n}}function So(e,t,n,r,i,a=1){let{unitPx:o,startXPx:s}=xo(n,r,a),c=e*a,l=t*a;return{start:Math.max(0,Math.floor((c-s)/o)-1),end:Math.min(i,Math.ceil((c+l-s)/o)+1)}}function Co(e,t,n){let r=-1/0,i=1/0;for(let a=t;a<n&&a<e.length;a++){let t=e[a];t&&(t.high>r&&(r=t.high),t.low<i&&(i=t.low))}return!Number.isFinite(r)||!Number.isFinite(i)?{maxPrice:100,minPrice:0}:{maxPrice:r,minPrice:i}}var wo=class{range={maxPrice:100,minPrice:0};height=1;paddingTop=0;paddingBottom=0;setRange(e){this.range=e}setHeight(e){this.height=Math.max(1,e)}setPadding(e,t){this.paddingTop=Math.max(0,e),this.paddingBottom=Math.max(0,t)}getRange(){return this.range}getPaddingTop(){return this.paddingTop}getPaddingBottom(){return this.paddingBottom}priceToY(e){let{maxPrice:t,minPrice:n}=this.range,r=t-n||1,i=(e-n)/r,a=Math.max(1,this.height-this.paddingTop-this.paddingBottom);return this.paddingTop+a*(1-i)}yToPrice(e){let{maxPrice:t,minPrice:n}=this.range,r=t-n||1,i=Math.max(1,this.height-this.paddingTop-this.paddingBottom);return n+(1-(e-this.paddingTop)/i)*r}},To=class{id;top=0;height=0;priceRange={maxPrice:100,minPrice:0};yAxis=new wo;renderers=[];constructor(e){this.id=e}setLayout(e,t){this.top=e,this.height=Math.max(1,t),this.yAxis.setHeight(this.height)}setPadding(e,t){this.yAxis.setPadding(e,t)}addRenderer(e){this.renderers.push(e)}updateRange(e,t){this.priceRange=Co(e,t.start,t.end),this.yAxis.setRange(this.priceRange)}},Eo=class{chart;isDragging=!1;dragStartX=0;scrollStartX=0;isTouchSession=!1;crosshairPos=null;crosshairIndex=null;hoveredIndex=null;activePaneId=null;tooltipPos={x:0,y:0};tooltipSize={width:220,height:180};hoveredMarkerId=null;clickedMarkerId=null;hoveredMarkerData=null;clickedMarkerData=null;onMarkerHoverCallback;onMarkerClickCallback;hoveredCustomMarker=null;onCustomMarkerHoverCallback;onCustomMarkerClickCallback;kLinePositions=null;visibleRange=null;kWidthPx=null;constructor(e){this.chart=e}onWheel(e){let t=this.chart.getDom().container,n=t.getBoundingClientRect(),r=e.clientX-n.left,i=t.scrollLeft;this.clearHover(),this.chart.zoomAt(r,i,e.deltaY)}onPointerDown(e){if(e.isPrimary===!1)return;this.isTouchSession=e.pointerType===`touch`;let t=this.chart.getDom().container,n=t.getBoundingClientRect(),r=e.clientX-n.left,i=e.clientY-n.top,a=t.scrollLeft,o=this.chart.getMarkerManager(),s=a+r,c=o.hitTest(s,i,3);if(c){this.clickedMarkerId=c.id,this.clickedMarkerData=c,this.onMarkerClickCallback&&this.onMarkerClickCallback(c);return}this.isDragging=!0,this.updateHoverFromPoint(e.clientX,e.clientY),this.dragStartX=e.clientX,this.scrollStartX=t.scrollLeft,this.chart.scheduleDraw()}setTooltipSize(e){this.tooltipSize=e}onPointerUp(e){e.isPrimary!==!1&&(this.isDragging=!1)}onPointerLeave(e){e.isPrimary!==!1&&(this.isDragging=!1,this.isTouchSession=!1,this.clearHover(),this.chart.scheduleDraw())}onMouseDown(e){if(this.isTouchSession||e.button!==0)return;let t=this.chart.getDom().container,n=t.getBoundingClientRect(),r=e.clientX-n.left,i=e.clientY-n.top,a=t.scrollLeft,o=this.chart.getMarkerManager(),s=a+r,c=o.hitTest(s,i,3);if(c){this.clickedMarkerId=c.id,this.onMarkerClickCallback&&this.onMarkerClickCallback(c);return}this.isDragging=!0,this.dragStartX=e.clientX,this.scrollStartX=t.scrollLeft,this.updateHoverFromPoint(e.clientX,e.clientY),this.chart.scheduleDraw(),e.preventDefault()}onMouseMove(e){if(this.isTouchSession)return;let t=this.chart.getDom().container;if(this.isDragging){let n=this.dragStartX-e.clientX;t.scrollLeft=this.scrollStartX+n;return}this.updateHover(e),this.chart.scheduleDraw()}onMouseUp(){this.isTouchSession||(this.isDragging=!1)}onMouseLeave(){this.isTouchSession||(this.isDragging=!1,this.clearHover(),this.chart.scheduleDraw())}onScroll(){this.kLinePositions=null,this.visibleRange=null,this.clearHover(),this.chart.scheduleDraw()}onPointerMove(e){if(!this.isTouchSession||!e.isPrimary)return;let t=this.chart.getDom().container;if(this.isDragging){let n=this.dragStartX-e.clientX;t.scrollLeft=this.scrollStartX+n;return}this.updateHoverFromPoint(e.clientX,e.clientY),this.chart.scheduleDraw()}setKLinePositions(e,t,n){this.kLinePositions=e,this.visibleRange=t,n!==void 0&&(this.kWidthPx=n)}isDraggingState(){return this.isDragging}setOnMarkerHover(e){this.onMarkerHoverCallback=e}setOnMarkerClick(e){this.onMarkerClickCallback=e}setOnCustomMarkerHover(e){this.onCustomMarkerHoverCallback=e}setOnCustomMarkerClick(e){this.onCustomMarkerClickCallback=e}clearHover(){this.crosshairPos=null,this.crosshairIndex=null,this.hoveredIndex=null,this.activePaneId=null,this.hoveredMarkerId!==null&&(this.hoveredMarkerId=null,this.onMarkerHoverCallback&&this.onMarkerHoverCallback(null)),this.hoveredCustomMarker!==null&&(this.hoveredCustomMarker=null,this.onCustomMarkerHoverCallback&&this.onCustomMarkerHoverCallback(null))}updateHover(e){this.updateHoverFromPoint(e.clientX,e.clientY)}updateHoverFromPoint(e,t){let n=this.chart.getDom().container,r=n.getBoundingClientRect(),i=e-r.left,a=t-r.top,o=this.chart.getOption(),s=Math.max(1,Math.round(r.width)),c=Math.max(1,Math.round(r.height)),l=s-o.rightAxisWidth-(o.priceLabelWidth||60),u=c-o.bottomAxisHeight;if(i<0||a<0||i>l||a>u){this.clearHover();return}let d=n.scrollLeft,f=window.devicePixelRatio||1,p=this.chart.getMarkerManager(),m=d+i,h=p.hitTest(m,a,3);if(h){this.hoveredMarkerId!==h.id&&(this.hoveredMarkerId=h.id,this.hoveredMarkerData=h,p.setHover(h.id),this.onMarkerHoverCallback&&this.onMarkerHoverCallback(h)),this.crosshairPos=null,this.crosshairIndex=null,this.hoveredIndex=null;return}else this.hoveredMarkerId!==null&&(this.hoveredMarkerId=null,this.hoveredMarkerData=null,p.setHover(null),this.onMarkerHoverCallback&&this.onMarkerHoverCallback(null));let g=p.hitTestCustomMarker(i,a);if(g){this.hoveredCustomMarker?.id!==g.id&&(this.hoveredCustomMarker=g,this.onCustomMarkerHoverCallback&&this.onCustomMarkerHoverCallback(g)),this.crosshairPos=null,this.crosshairIndex=null,this.hoveredIndex=null;return}else this.hoveredCustomMarker!==null&&(this.hoveredCustomMarker=null,this.onCustomMarkerHoverCallback&&this.onCustomMarkerHoverCallback(null));if(!this.kLinePositions||!this.visibleRange||!this.kWidthPx){this.clearHover();return}let _=this.kWidthPx/f,v=0,y=this.kLinePositions.length;for(;v<y;){let e=v+y>>1;this.kLinePositions[e]<m?v=e+1:y=e}let b=v;if(v>0&&v<this.kLinePositions.length){let e=this.kLinePositions[v-1]+_/2,t=this.kLinePositions[v]+_/2;Math.abs(m-e)<Math.abs(m-t)&&(b=v-1)}else v===this.kLinePositions.length&&this.kLinePositions.length>0&&(b=this.kLinePositions.length-1);let x=b+this.visibleRange.start,S=this.chart.getData(),C=this.chart.getPaneRenderers().find(e=>{let t=e.getPane();return a>=t.top&&a<=t.top+t.height})?.getPane()||null;if(this.activePaneId=C?.id||null,x>=0&&x<(S?.length??0)){this.crosshairIndex=x;let e=this.kLinePositions[b]+(this.kWidthPx-1)/2/f-d;this.crosshairPos={x:Math.min(Math.max(e,0),l),y:Math.min(Math.max(a,0),u)}}else this.crosshairIndex=null,this.crosshairPos=null;let w=typeof this.crosshairIndex==`number`?S[this.crosshairIndex]:void 0;if(!w||!C||C.id!==`main`){this.hoveredIndex=null;return}let T=a-C.top,E=C.yAxis.priceToY(w.open),D=C.yAxis.priceToY(w.close),O=C.yAxis.priceToY(w.high),k=C.yAxis.priceToY(w.low),A=Math.min(E,D),j=Math.max(E,D),M=m-this.kLinePositions[b],ee=_/2,te=Math.abs(j-A),N=te<8?(A+j)/2-8/2:A,P=te<8?(A+j)/2+8/2:j,F=T>=N&&T<=P&&M>=0&&M<=_,ne=Math.abs(M-ee)<=3&&T>=O&&T<=k;if(!F&&!ne){this.hoveredIndex=null;return}this.hoveredIndex=this.crosshairIndex;let I=this.tooltipSize.width,re=this.tooltipSize.height,ie=i+14,ae=i-14-I,oe=ie+I+12<=s?ie:ae,se=a+14,ce=Math.max(12,s-I-12),le=Math.max(12,c-re-12);this.tooltipPos={x:Math.min(Math.max(oe,12),ce),y:Math.min(Math.max(se,12),le)}}reset(){this.isDragging=!1,this.dragStartX=0,this.scrollStartX=0,this.isTouchSession=!1,this.crosshairPos=null,this.crosshairIndex=null,this.hoveredIndex=null,this.activePaneId=null,this.hoveredMarkerId=null,this.clickedMarkerId=null,this.hoveredMarkerData=null,this.clickedMarkerData=null,this.kLinePositions=null,this.visibleRange=null,this.kWidthPx=null}},Do=class{dom;pane;opt;constructor(e,t,n){this.dom=e,this.pane=t,this.opt={...n,priceLabelWidth:n.priceLabelWidth||60}}getPane(){return this.pane}getDom(){return this.dom}resize(e,t,n){let r=this.dom.plotCanvas,i=this.dom.yAxisCanvas;r.style.width=`${e}px`,r.style.height=`${t}px`,r.width=Math.ceil(e*n),r.height=Math.ceil(t*n);let a=this.opt.rightAxisWidth+(this.opt.priceLabelWidth||60);i.style.width=`${a}px`,i.style.height=`${t}px`,i.width=Math.ceil(a*n),i.height=Math.ceil(t*n)}destroy(){}};function Oo(e={}){let{paneId:t=`sub`}=e;return{name:`volume_${t}`,version:`1.0.0`,description:`成交量渲染器`,debugName:`成交量`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:r,range:i,scrollLeft:a,kWidth:o,kGap:s,kLinePositions:c}=e,l=r;if(!l.length)return;t.save(),t.translate(-a,0);let{start:u,end:d}=i,f=l.slice(u,d).reduce((e,t)=>t.volume?Math.max(e,t.volume):e,0);for(let e=u;e<d;e++){let r=l[e];if(!r)continue;let i=r.volume;if(!i)continue;let a=Ao(r),d=c[e-u];d&&ko(t,d,a,i,f,o,s,n.height)}t.restore()}}}function ko(e,t,n,r,i,a,o,s){let c=jo(r,i,s),l=a;e.fillStyle=n,e.fillRect(t,c,l,s-c)}function Ao(e){return e.close>e.open?J.UP:e.close<e.open?J.DOWN:J.NEUTRAL}function jo(e,t,n){return n-n/t*e}function Mo(e,t,n,r,i,a){let o=t-n||1,s=(e-n)/o;return i+Math.max(1,r-i-a)*(1-s)}function Z(e,t){return Math.round(e*t)/t}function Q(e,t){return(Math.floor(e*t)+.5)/t}function No(e,t,n,r){if(t===n)return null;let i=Math.min(t,n),a=Math.max(t,n),o=Math.round(e*r),s=Math.round(i*r),c=Math.round(a*r);return{x:o/r,y:s/r,width:1/r,height:Math.max(1,c-s)/r}}function Po(e,t,n,r){if(e===t)return null;let i=Math.min(e,t),a=Math.max(e,t),o=Math.round(i*r),s=Math.round(a*r),c=Math.round(n*r);return{x:o/r,y:c/r,width:Math.max(1,s-o)/r,height:1/r}}function Fo(e,t,n,r,i){let a=e+n,o=n,s=Math.round(t*i),c=Math.round((t+r)*i),l=Math.max(1,c-s),u=e+(n-1)/2,d=u,f=o%2==1;return{bodyRect:{x:e/i,y:s/i,width:n/i,height:l/i},physBodyLeft:e,physBodyRight:a,physBodyWidth:o,physBodyCenter:d,physWickX:u,wickRect:{x:u/i,width:1/i},isPerfectlyAligned:f}}function Io(e,t){let n=Array(e.length);if(e.length<t)return n;let r=0;for(let i=0;i<t;i++){let t=e[i];if(!t)return n;r+=t.close}n[t-1]=r/t;for(let i=t;i<e.length;i++){let a=e[i-t],o=e[i];!a||!o||(r=r-a.close+o.close,n[i]=r/t)}return n}function Lo(e={}){let t={ma5:!0,ma10:!0,ma20:!0,ma30:!0,ma60:!0,...e},n=new Map,r=null;function i(e,t){let i=n.get(t);if(i&&r===e)return i.values;let a=Io(e,t);return n.set(t,{period:t,values:a}),r=e,a}function a(e,t,n,r){let{pane:i,range:a,kWidth:o,kGap:s,dpr:c,kLinePositions:l}=n,u=i.height,d=i.priceRange,f=Math.max(0,Math.min(0,Math.floor(u/2)-1)),p=f,m=f;if(!d)return;let h=d.maxPrice,g=d.minPrice;if(!Number.isFinite(h)||!Number.isFinite(g))return;e.strokeStyle=r,e.lineWidth=1,e.lineJoin=`round`,e.lineCap=`round`,e.beginPath();let _=!0;for(let n=a.start;n<a.end&&n<t.length;n++){let r=t[n];if(r===void 0)continue;let i=l[n-a.start]+o/2,s=Mo(r,h,g,u,p,m),d=Q(i,c),f=Q(s,c);_?(e.moveTo(d,f),_=!1):e.lineTo(d,f)}e.stroke()}return{name:`ma`,version:`1.0.0`,description:`MA均线渲染器`,debugName:`MA均线`,paneId:`main`,priority:K.INDICATOR,draw(e){let{ctx:n,data:r,scrollLeft:o}=e,s=r;s.length&&(n.save(),n.translate(-o,0),t.ma5&&a(n,i(s,5),e,Y.MA5),t.ma10&&a(n,i(s,10),e,Y.MA10),t.ma20&&a(n,i(s,20),e,Y.MA20),t.ma30&&a(n,i(s,30),e,Y.MA30),t.ma60&&a(n,i(s,60),e,Y.MA60),n.restore())},onDataUpdate(){r=null,n.clear()},getConfig(){return{...t}},setConfig(e){Object.assign(t,e)}}}function Ro(e,t,n){if(t<n-1)return;let r=0;for(let i=0;i<n;i++){let n=e[t-i];if(!n)return;r+=n.close}return r/n}function zo(e){let t={ma5:!0,ma10:!0,ma20:!0,ma30:!0,ma60:!0,...e.showMA};return{name:`maLegend`,version:`1.0.0`,description:`MA均线图例渲染器`,debugName:`MA图例`,paneId:`main`,priority:K.FOREGROUND,draw(n){let{ctx:r,data:i,range:a}=n,o=i;if(!o.length)return;let s=(12+e.yPaddingPx)/2;r.save(),r.font=`12px Arial`,r.textAlign=`left`;let c=Math.min(a.end-1,o.length-1),l=[];if(t.ma5&&l.push({label:`MA5`,color:Y.MA5,value:Ro(o,c,5)}),t.ma10&&l.push({label:`MA10`,color:Y.MA10,value:Ro(o,c,10)}),t.ma20&&l.push({label:`MA20`,color:Y.MA20,value:Ro(o,c,20)}),t.ma30&&l.push({label:`MA30`,color:Y.MA30,value:Ro(o,c,30)}),t.ma60&&l.push({label:`MA60`,color:Y.MA60,value:Ro(o,c,60)}),l.length>0){let e=12,t=s;r.fillStyle=J.NEUTRAL,r.fillText(`均线`,e,t),e+=r.measureText(`均线`).width+10;for(let n of l){let i=typeof n.value==`number`?` ${n.value.toFixed(2)}`:``,a=`${n.label}${i}`;r.fillStyle=n.color,r.fillText(a,e,t),e+=r.measureText(a).width+10}}r.restore()},getConfig(){return{...t}},setConfig(e){Object.assign(t,e)}}}function Bo(e,t,n){let r=Array(e.length);if(e.length<t)return r;let i=0,a=[];for(let n=0;n<t;n++){let t=e[n];if(!t)return r;let o=t.close;a.push(o),i+=o}for(let o=t-1;o<e.length;o++){let s=e[o];if(!s)continue;if(o>=t){let e=a.shift();e!==void 0&&(i-=e);let t=s.close;a.push(t),i+=t}let c=i/t,l=0;for(let e=0;e<t;e++){let t=a[e];t!==void 0&&(l+=(t-c)**2)}let u=Math.sqrt(l/t);r[o]={upper:c+n*u,middle:c,lower:c-n*u}}return r}function Vo(e={}){let t={period:20,multiplier:2,showUpper:!0,showMiddle:!0,showLower:!0,showBand:!0,...e},n=null,r=0,i=0,a=[];function o(e){return(n!==e||r!==t.period||i!==t.multiplier)&&(a=Bo(e,t.period,t.multiplier),n=e,r=t.period,i=t.multiplier),a}return{name:`boll`,version:`1.0.0`,description:`布林带渲染器`,debugName:`BOLL布林带`,paneId:`main`,priority:K.INDICATOR,draw(e){let{ctx:n,pane:r,data:i,range:a,scrollLeft:s,kWidth:c,kGap:l,dpr:u,kLinePositions:d}=e,f=i;if(f.length<t.period)return;let p=o(f),m={kWidth:c,kGap:l,yPaddingPx:0},h=r.priceRange,g=r.height,_=m.yPaddingPx??0,v=Math.max(0,Math.min(_,Math.floor(g/2)-1)),y=v,b=v,x=h?.maxPrice??-1/0,S=h?.minPrice??1/0;if(!h)for(let e=a.start;e<a.end&&e<f.length;e++){let t=f[e];t&&(t.high>x&&(x=t.high),t.low<S&&(S=t.low))}if(!Number.isFinite(x)||!Number.isFinite(S))return;n.save(),n.translate(-s,0);let C=Math.max(a.start,t.period-1),w=Math.min(a.end,f.length);if(t.showBand){n.fillStyle=la.BAND_FILL,n.beginPath();let e=!0;for(let t=C;t<w;t++){let r=p[t];if(!r)continue;let i=d[t-a.start]+m.kWidth/2,o=Mo(r.upper,x,S,g,y,b),s=Q(i,u),c=Q(o,u);e?(n.moveTo(s,c),e=!1):n.lineTo(s,c)}for(let e=w-1;e>=C;e--){let t=p[e];if(!t)continue;let r=d[e-a.start]+m.kWidth/2,i=Mo(t.lower,x,S,g,y,b),o=Q(r,u),s=Q(i,u);n.lineTo(o,s)}n.closePath(),n.fill()}n.lineWidth=1,n.lineJoin=`round`,n.lineCap=`round`;let T=(e,t)=>{n.strokeStyle=t,n.beginPath();let r=!0;for(let t=C;t<w;t++){let i=p[t];if(!i)continue;let o=d[t-a.start]+m.kWidth/2,s=Mo(i[e],x,S,g,y,b),c=Q(o,u),l=Q(s,u);r?(n.moveTo(c,l),r=!1):n.lineTo(c,l)}n.stroke()};t.showUpper&&T(`upper`,la.UPPER),t.showMiddle&&T(`middle`,la.MIDDLE),t.showLower&&T(`lower`,la.LOWER),n.restore()},onDataUpdate(){n=null},getConfig(){return{...t}},setConfig(e){`period`in e&&e.period!==t.period&&(n=null),`multiplier`in e&&e.multiplier!==t.multiplier&&(n=null),Object.assign(t,e)}}}function Ho(e,t,n=20,r=2){if(t<n-1||t>=e.length)return null;let i=0;for(let r=0;r<n;r++){let n=e[t-r];if(!n)return null;i+=n.close}let a=i/n,o=0;for(let r=0;r<n;r++){let n=e[t-r];if(!n)return null;o+=(n.close-a)**2}let s=Math.sqrt(o/n);return{upper:a+r*s,middle:a,lower:a-r*s}}function Uo(e){let t={period:20,multiplier:2,show:!0,...e.config};return{name:`bollLegend`,version:`1.0.0`,description:`BOLL布林带图例渲染器`,debugName:`BOLL图例`,paneId:`main`,priority:K.FOREGROUND,draw(n){if(!t.show)return;let{ctx:r,data:i,range:a}=n,o=i;if(!o.length)return;let s=(12+e.yPaddingPx)/2;r.save(),r.font=`12px Arial`,r.textAlign=`left`;let c=Ho(o,Math.min(a.end-1,o.length-1),t.period,t.multiplier),l=12;r.fillStyle=J.NEUTRAL,r.fillText(`BOLL(${t.period},${t.multiplier})`,l,s),l+=r.measureText(`BOLL(${t.period},${t.multiplier})`).width+10,c&&(r.fillStyle=la.UPPER,r.fillText(`上轨:${c.upper.toFixed(2)}`,l,s),l+=r.measureText(`上轨:${c.upper.toFixed(2)}`).width+10,r.fillStyle=la.MIDDLE,r.fillText(`中轨:${c.middle.toFixed(2)}`,l,s),l+=r.measureText(`中轨:${c.middle.toFixed(2)}`).width+10,r.fillStyle=la.LOWER,r.fillText(`下轨:${c.lower.toFixed(2)}`,l,s)),r.restore()},getConfig(){return{...t}},setConfig(e){Object.assign(t,e)}}}function Wo(e,t){let n=Array(e.length),r=2/(t+1);if(e.length===0)return n;n[0]=e[0].close;for(let t=1;t<e.length;t++){let i=e[t];i&&(n[t]=i.close*r+n[t-1]*(1-r))}return n}function Go(e,t){let n=Array(e.length),r=2/(t+1),i=e.findIndex(e=>e!==void 0);if(i===-1)return n;n[i]=e[i];for(let t=i+1;t<e.length;t++){let i=e[t],a=n[t-1];i===void 0||a===void 0||(n[t]=i*r+a*(1-r))}return n}function Ko(e,t,n,r){let i=Array(e.length);if(e.length<n)return i;let a=Wo(e,t),o=Wo(e,n),s=Array(e.length);for(let t=0;t<e.length;t++){let e=a[t],n=o[t];e!==void 0&&n!==void 0&&(s[t]=e-n)}let c=Go(s,r);for(let t=0;t<e.length;t++){let e=s[t],n=c[t];e!==void 0&&n!==void 0&&(i[t]={dif:e,dea:n,macd:(e-n)*2})}return i}function qo(e={}){let{paneId:t=`sub`,config:n={}}=e,r={fastPeriod:12,slowPeriod:26,signalPeriod:9,showDIF:!0,showDEA:!0,showBAR:!0,...n},i=null,a=0,o=0,s=0,c=[];function l(e){return(i!==e||a!==r.fastPeriod||o!==r.slowPeriod||s!==r.signalPeriod)&&(c=Ko(e,r.fastPeriod,r.slowPeriod,r.signalPeriod),i=e,a=r.fastPeriod,o=r.slowPeriod,s=r.signalPeriod),c}return{name:`macd_${t}`,version:`1.0.0`,description:`MACD 指标渲染器`,debugName:`MACD`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:s,kGap:c,dpr:u,kLinePositions:d}=e,f=i;if(f.length<r.slowPeriod)return;let p=l(f),m=-1/0,h=1/0;for(let e=a.start;e<a.end&&e<p.length;e++){let t=p[e];t&&(m=Math.max(m,t.dif,t.dea,t.macd),h=Math.min(h,t.dif,t.dea,t.macd))}if(!Number.isFinite(m)||!Number.isFinite(h))return;let g=Math.max(.05,(m-h)*.1),_=h-g,v=m+g-_||1,y=n.height-(0-_)/v*n.height;t.save(),t.translate(-o,0);let b=Math.max(a.start,r.slowPeriod-1),x=Math.min(a.end,f.length);if(r.showBAR){let e=s+c-1;for(let r=b;r<x;r++){let i=p[r];if(!i)continue;let o=d[r-a.start];if(o===void 0)continue;let c=o+(s-e)/2,l=n.height-(i.macd-_)/v*n.height,u=i.macd>=0,f=r>0?p[r-1]:null,m;m=f?i.macd>=f.macd:!0;let h;h=u?m?X.BAR_UP:X.BAR_UP_LIGHT:m?X.BAR_DOWN_LIGHT:X.BAR_DOWN,t.fillStyle=h,u?t.fillRect(c,l,e,y-l):t.fillRect(c,y,e,l-y)}}if(r.showDIF){t.strokeStyle=X.DIF,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=b;r<x;r++){let i=p[r];if(!i)continue;let o=d[r-a.start];if(o===void 0)continue;let c=o+s/2,l=n.height-(i.dif-_)/v*n.height,f=Q(c,u),m=Q(l,u);e?(t.moveTo(f,m),e=!1):t.lineTo(f,m)}t.stroke()}if(r.showDEA){t.strokeStyle=X.DEA,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=b;r<x;r++){let i=p[r];if(!i)continue;let o=d[r-a.start];if(o===void 0)continue;let c=o+s/2,l=n.height-(i.dea-_)/v*n.height,f=Q(c,u),m=Q(l,u);e?(t.moveTo(f,m),e=!1):t.lineTo(f,m)}t.stroke()}t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){`fastPeriod`in e&&e.fastPeriod!==r.fastPeriod&&(i=null),`slowPeriod`in e&&e.slowPeriod!==r.slowPeriod&&(i=null),`signalPeriod`in e&&e.signalPeriod!==r.signalPeriod&&(i=null),Object.assign(r,e)}}}function Jo(e,t,n=12,r=26,i=9){return t<r||t>=e.length?null:Ko(e,n,r,i)[t]??null}function Yo(e,t,n=12,r=26,i=9){let a=Jo(e,t,n,r,i);return a?{name:`MACD`,params:[n,r,i],values:[{label:`DIF`,value:a.dif,color:X.DIF},{label:`DEA`,value:a.dea,color:X.DEA},{label:`MACD`,value:a.macd,color:a.macd>=0?X.BAR_UP:X.BAR_DOWN}]}:null}function Xo(e,t){let n=Array(e.length);if(e.length<t+1)return n;let r=[];for(let t=1;t<e.length;t++)r.push(e[t].close-e[t-1].close);let i=0,a=0;for(let e=0;e<t;e++){let t=r[e];t!==void 0&&(t>0?i+=t:a+=Math.abs(t))}let o=i/t,s=a/t;s===0?n[t]=100:n[t]=100-100/(1+o/s);for(let e=t;e<r.length;e++){let i=r[e];if(i!==void 0)if(i>0?(o=(o*(t-1)+i)/t,s=s*(t-1)/t):(o=o*(t-1)/t,s=(s*(t-1)+Math.abs(i))/t),s===0)n[e+1]=100;else{let t=o/s;n[e+1]=100-100/(1+t)}}return n}function Zo(e={}){let{paneId:t=`sub`,config:n={}}=e,r={period1:6,period2:12,period3:24,showRSI1:!0,showRSI2:!0,showRSI3:!0,...n},i=null,a=0,o=0,s=0,c=[],l=[],u=[];function d(e){return(i!==e||a!==r.period1||o!==r.period2||s!==r.period3)&&(c=Xo(e,r.period1),l=Xo(e,r.period2),u=Xo(e,r.period3),i=e,a=r.period1,o=r.period2,s=r.period3),{rsi1:c,rsi2:l,rsi3:u}}return{name:`rsi_${t}`,version:`1.0.0`,description:`RSI 相对强弱指标渲染器`,debugName:`RSI`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:s,dpr:c,kLinePositions:l}=e,u=i;if(u.length<r.period1+1)return;let{rsi1:f,rsi2:p,rsi3:m}=d(u);t.save(),t.translate(-o,0);let h=n.height-80/100*n.height,g=n.height-50/100*n.height,_=n.height-20/100*n.height,v=o,y=o+e.paneWidth;t.strokeStyle=`rgba(0, 0, 0, 0.1)`,t.lineWidth=1,t.setLineDash([4,4]),t.beginPath(),t.moveTo(v,h),t.lineTo(y,h),t.moveTo(v,g),t.lineTo(y,g),t.moveTo(v,_),t.lineTo(y,_),t.stroke(),t.setLineDash([]);let b=Math.max(a.start,r.period1),x=Math.min(a.end,u.length),S=(e,r)=>{t.strokeStyle=r,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let i=!0;for(let r=b;r<x;r++){let o=e[r];if(o===void 0)continue;let u=l[r-a.start];if(u===void 0)continue;let d=u+s/2,f=n.height-(o-0)/100*n.height,p=Q(d,c),m=Q(f,c);i?(t.moveTo(p,m),i=!1):t.lineTo(p,m)}t.stroke()};r.showRSI1&&S(f,ua.RSI1),r.showRSI2&&S(p,ua.RSI2),r.showRSI3&&S(m,ua.RSI3),t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){`period1`in e&&e.period1!==r.period1&&(i=null),`period2`in e&&e.period2!==r.period2&&(i=null),`period3`in e&&e.period3!==r.period3&&(i=null),Object.assign(r,e)}}}function Qo(e,t,n=6,r=12,i=24){if(t<n+1||t>=e.length)return null;let a=Xo(e,n)[t],o=Xo(e,r)[t],s=Xo(e,i)[t],c=[];return a!==void 0&&c.push({label:`RSI${n}`,value:a,color:ua.RSI1}),o!==void 0&&c.push({label:`RSI${r}`,value:o,color:ua.RSI2}),s!==void 0&&c.push({label:`RSI${i}`,value:s,color:ua.RSI3}),c.length===0?null:{name:`RSI`,params:[n,r,i],values:c}}function $o(e,t){let n=Array(e.length);if(e.length<t)return n;let r=e.map(e=>(e.high+e.low+e.close)/3);for(let i=t-1;i<e.length;i++){let e=0;for(let n=0;n<t;n++)e+=r[i-n];let a=e/t,o=0;for(let e=0;e<t;e++)o+=Math.abs(r[i-e]-a);let s=o/t;s===0?n[i]=0:n[i]=(r[i]-a)/(.015*s)}return n}function es(e={}){let{paneId:t=`sub`,config:n={}}=e,r={period:14,showCCI:!0,...n},i=null,a=0,o=[];function s(e){return(i!==e||a!==r.period)&&(o=$o(e,r.period),i=e,a=r.period),o}return{name:`cci_${t}`,version:`1.0.0`,description:`CCI 顺势指标渲染器`,debugName:`CCI`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:c,dpr:l,kLinePositions:u}=e,d=i;if(d.length<r.period)return;let f=s(d),p=-1/0,m=1/0;for(let e=a.start;e<a.end&&e<f.length;e++){let t=f[e];t!==void 0&&(p=Math.max(p,t),m=Math.min(m,t))}if(!Number.isFinite(p)||!Number.isFinite(m))return;p=Math.max(p,150),m=Math.min(m,-150);let h=p-m||1,g=n.height-(0-m)/h*n.height;t.save(),t.translate(-o,0);let _=n.height-(100-m)/h*n.height,v=n.height-(-100-m)/h*n.height,y=o,b=o+e.paneWidth;t.strokeStyle=da.OVERBOUGHT,t.lineWidth=1,t.setLineDash([4,4]),t.beginPath(),t.moveTo(y,_),t.lineTo(b,_),t.stroke(),t.strokeStyle=da.OVERSOLD,t.beginPath(),t.moveTo(y,v),t.lineTo(b,v),t.stroke(),t.strokeStyle=`rgba(0, 0, 0, 0.1)`,t.beginPath(),t.moveTo(y,g),t.lineTo(b,g),t.stroke(),t.setLineDash([]);let x=Math.max(a.start,r.period-1),S=Math.min(a.end,d.length);if(r.showCCI){t.strokeStyle=da.CCI,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=x;r<S;r++){let i=f[r];if(i===void 0)continue;let o=u[r-a.start];if(o===void 0)continue;let s=o+c/2,d=n.height-(i-m)/h*n.height,p=Q(s,l),g=Q(d,l);e?(t.moveTo(p,g),e=!1):t.lineTo(p,g)}t.stroke()}t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){`period`in e&&e.period!==r.period&&(i=null),Object.assign(r,e)}}}function ts(e,t,n){return $o(e,n)[t]}function ns(e,t,n=14){if(t<n||t>=e.length)return null;let r=ts(e,t,n);return r===void 0?null:{name:`CCI`,params:[n],values:[{label:`CCI`,value:r,color:da.CCI}]}}function rs(e,t,n){let r=Array(e.length);if(e.length<t)return r;let i=Array(e.length);for(let n=t-1;n<e.length;n++){let r=-1/0,a=1/0;for(let i=0;i<t;i++){let t=e[n-i];t&&(r=Math.max(r,t.high),a=Math.min(a,t.low))}let o=e[n].close;r===a?i[n]=50:i[n]=(o-a)/(r-a)*100}for(let a=t-1+n-1;a<e.length;a++){let e=i[a];if(e===void 0)continue;let t=0,o=0;for(let e=0;e<n;e++){let n=i[a-e];n!==void 0&&(t+=n,o++)}o===n&&(r[a]={k:e,d:t/n})}return r}function is(e={}){let{paneId:t=`sub`,config:n={}}=e,r={n:9,m:3,showK:!0,showD:!0,...n},i=null,a=0,o=0,s=[];function c(e){return(i!==e||a!==r.n||o!==r.m)&&(s=rs(e,r.n,r.m),i=e,a=r.n,o=r.m),s}return{name:`stoch_${t}`,version:`1.0.0`,description:`STOCH 随机指标渲染器`,debugName:`STOCH`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:s,dpr:l,kLinePositions:u}=e,d=i;if(d.length<r.n+r.m-1)return;let f=c(d);t.save(),t.translate(-o,0);let p=n.height-80/100*n.height,m=n.height-20/100*n.height,h=o,g=o+e.paneWidth;t.strokeStyle=`rgba(0, 0, 0, 0.1)`,t.lineWidth=1,t.setLineDash([4,4]),t.beginPath(),t.moveTo(h,p),t.lineTo(g,p),t.moveTo(h,m),t.lineTo(g,m),t.stroke(),t.setLineDash([]);let _=Math.max(a.start,r.n+r.m-2),v=Math.min(a.end,d.length);if(r.showK){t.strokeStyle=fa.K,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=_;r<v;r++){let i=f[r];if(!i)continue;let o=u[r-a.start];if(o===void 0)continue;let c=o+s/2,d=n.height-(i.k-0)/100*n.height,p=Q(c,l),m=Q(d,l);e?(t.moveTo(p,m),e=!1):t.lineTo(p,m)}t.stroke()}if(r.showD){t.strokeStyle=fa.D,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=_;r<v;r++){let i=f[r];if(!i)continue;let o=u[r-a.start];if(o===void 0)continue;let c=o+s/2,d=n.height-(i.d-0)/100*n.height,p=Q(c,l),m=Q(d,l);e?(t.moveTo(p,m),e=!1):t.lineTo(p,m)}t.stroke()}t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){`n`in e&&e.n!==r.n&&(i=null),`m`in e&&e.m!==r.m&&(i=null),Object.assign(r,e)}}}function as(e,t,n,r){return rs(e,n,r)[t]}function os(e,t,n=9,r=3){if(t<n+r-1||t>=e.length)return null;let i=as(e,t,n,r);return i?{name:`STOCH`,params:[n,r],values:[{label:`K`,value:i.k,color:fa.K},{label:`D`,value:i.d,color:fa.D}]}:null}function ss(e,t){let n=Array(e.length);if(e.length<t+1)return n;for(let r=t;r<e.length;r++){let i=e[r]?.close,a=e[r-t]?.close;i!==void 0&&a!==void 0&&(n[r]=i-a)}return n}function cs(e={}){let{paneId:t=`sub`,config:n={}}=e,r={period:10,showMOM:!0,...n},i=null,a=0,o=[];function s(e){return(i!==e||a!==r.period)&&(o=ss(e,r.period),i=e,a=r.period),o}return{name:`mom_${t}`,version:`1.0.0`,description:`MOM 动量指标渲染器`,debugName:`MOM`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:c,dpr:l,kLinePositions:u}=e,d=i;if(d.length<r.period+1)return;let f=s(d),p=-1/0,m=1/0;for(let e=a.start;e<a.end&&e<f.length;e++){let t=f[e];t!==void 0&&(p=Math.max(p,t),m=Math.min(m,t))}if(!Number.isFinite(p)||!Number.isFinite(m))return;let h=Math.max(Math.abs(p),Math.abs(m))*.1;p+=h,m-=h;let g=p-m||1,_=n.height-(0-m)/g*n.height;t.save(),t.translate(-o,0);let v=o,y=o+e.paneWidth;t.strokeStyle=pa.ZERO,t.lineWidth=1,t.beginPath(),t.moveTo(v,_),t.lineTo(y,_),t.stroke();let b=Math.max(a.start,r.period),x=Math.min(a.end,d.length);if(r.showMOM){t.strokeStyle=pa.MOM,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=b;r<x;r++){let i=f[r];if(i===void 0)continue;let o=u[r-a.start];if(o===void 0)continue;let s=o+c/2,d=n.height-(i-m)/g*n.height,p=Q(s,l),h=Q(d,l);e?(t.moveTo(p,h),e=!1):t.lineTo(p,h)}t.stroke()}t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){`period`in e&&e.period!==r.period&&(i=null),Object.assign(r,e)}}}function ls(e,t,n){return ss(e,n)[t]}function us(e,t,n=10){if(t<n||t>=e.length)return null;let r=ls(e,t,n);return r===void 0?null:{name:`MOM`,params:[n],values:[{label:`MOM`,value:r,color:pa.MOM}]}}function ds(e,t){let n=Array(e.length);if(e.length<t)return n;for(let r=t-1;r<e.length;r++){let i=-1/0,a=1/0;for(let n=0;n<t;n++){let t=e[r-n];t&&(i=Math.max(i,t.high),a=Math.min(a,t.low))}let o=e[r].close;i===a?n[r]=-50:n[r]=(i-o)/(i-a)*-100}return n}function fs(e={}){let{paneId:t=`sub`,config:n={}}=e,r={period:14,showWMSR:!0,...n},i=null,a=0,o=[];function s(e){return(i!==e||a!==r.period)&&(o=ds(e,r.period),i=e,a=r.period),o}return{name:`wmsr_${t}`,version:`1.0.0`,description:`WMSR 威廉指标渲染器`,debugName:`WMSR`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:c,dpr:l,kLinePositions:u}=e,d=i;if(d.length<r.period)return;let f=s(d),p=-100;0-p,t.save(),t.translate(-o,0);let m=n.height-(-20-p)/100*n.height,h=n.height-(-80-p)/100*n.height,g=n.height-(-50-p)/100*n.height,_=o,v=o+e.paneWidth;t.strokeStyle=ma.OVERBOUGHT,t.lineWidth=1,t.setLineDash([4,4]),t.beginPath(),t.moveTo(_,m),t.lineTo(v,m),t.stroke(),t.strokeStyle=ma.OVERSOLD,t.beginPath(),t.moveTo(_,h),t.lineTo(v,h),t.stroke(),t.strokeStyle=`rgba(0, 0, 0, 0.1)`,t.beginPath(),t.moveTo(_,g),t.lineTo(v,g),t.stroke(),t.setLineDash([]);let y=Math.max(a.start,r.period-1),b=Math.min(a.end,d.length);if(r.showWMSR){t.strokeStyle=ma.WMSR,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=y;r<b;r++){let i=f[r];if(i===void 0)continue;let o=u[r-a.start];if(o===void 0)continue;let s=o+c/2,d=n.height-(i-p)/100*n.height,m=Q(s,l),h=Q(d,l);e?(t.moveTo(m,h),e=!1):t.lineTo(m,h)}t.stroke()}t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){`period`in e&&e.period!==r.period&&(i=null),Object.assign(r,e)}}}function ps(e,t,n){return ds(e,n)[t]}function ms(e,t,n=14){if(t<n||t>=e.length)return null;let r=ps(e,t,n);return r===void 0?null:{name:`WMSR`,params:[n],values:[{label:`WMSR`,value:r,color:ma.WMSR}]}}function hs(e,t){let n=Array(e.length);if(e.length<t+1)return n;for(let r=t;r<e.length;r++){let i=e[r]?.close,a=e[r-t]?.close;i!==void 0&&a!==void 0&&a!==0&&(n[r]=(i-a)/a*100)}return n}function gs(e,t){let n=Array(e.length),r=0,i=0;for(let a=0;a<e.length;a++){let o=e[a];if(o!==void 0){if(r+=o,i++,i>t){let n=e[a-t];n!==void 0&&(r-=n,i--)}i===t&&(n[a]=r/t)}}return n}function _s(e,t,n,r,i,a){let o=Array(e.length),s=hs(e,t),c=hs(e,n),l=hs(e,r),u=hs(e,i),d=gs(s,10),f=gs(c,10),p=gs(l,10),m=gs(u,15),h=Array(e.length);for(let t=0;t<e.length;t++){let e=d[t],n=f[t],r=p[t],i=m[t];e!==void 0&&n!==void 0&&r!==void 0&&i!==void 0&&(h[t]=e*1+n*2+r*3+i*4)}let g=gs(h,a);for(let t=0;t<e.length;t++){let e=h[t],n=g[t];e!==void 0&&n!==void 0&&(o[t]={kst:e,signal:n})}return o}function vs(e={}){let{paneId:t=`sub`,config:n={}}=e,r={roc1:10,roc2:15,roc3:20,roc4:30,signalPeriod:9,showKST:!0,showSignal:!0,...n},i=null,a=``,o=[];function s(e){let t=`${r.roc1}-${r.roc2}-${r.roc3}-${r.roc4}-${r.signalPeriod}`;return(i!==e||a!==t)&&(o=_s(e,r.roc1,r.roc2,r.roc3,r.roc4,r.signalPeriod),i=e,a=t),o}return{name:`kst_${t}`,version:`1.0.0`,description:`KST 确知指标渲染器`,debugName:`KST`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:c,dpr:l,kLinePositions:u}=e,d=i;if(d.length<r.roc4+15+r.signalPeriod)return;let f=s(d),p=-1/0,m=1/0;for(let e=a.start;e<a.end&&e<f.length;e++){let t=f[e];t&&(p=Math.max(p,t.kst,t.signal),m=Math.min(m,t.kst,t.signal))}if(!Number.isFinite(p)||!Number.isFinite(m))return;let h=(p-m)*.1||1;p+=h,m-=h;let g=p-m||1,_=n.height-(0-m)/g*n.height;t.save(),t.translate(-o,0);let v=o,y=o+e.paneWidth;t.strokeStyle=`rgba(0, 0, 0, 0.1)`,t.lineWidth=1,t.beginPath(),t.moveTo(v,_),t.lineTo(y,_),t.stroke();let b=Math.max(a.start,r.roc4+15+r.signalPeriod-1),x=Math.min(a.end,d.length);if(r.showKST){t.strokeStyle=ha.KST,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=b;r<x;r++){let i=f[r];if(!i)continue;let o=u[r-a.start];if(o===void 0)continue;let s=o+c/2,d=n.height-(i.kst-m)/g*n.height,p=Q(s,l),h=Q(d,l);e?(t.moveTo(p,h),e=!1):t.lineTo(p,h)}t.stroke()}if(r.showSignal){t.strokeStyle=ha.SIGNAL,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=b;r<x;r++){let i=f[r];if(!i)continue;let o=u[r-a.start];if(o===void 0)continue;let s=o+c/2,d=n.height-(i.signal-m)/g*n.height,p=Q(s,l),h=Q(d,l);e?(t.moveTo(p,h),e=!1):t.lineTo(p,h)}t.stroke()}t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){i=null,Object.assign(r,e)}}}function ys(e,t,n,r,i,a,o){return _s(e,n,r,i,a,o)[t]}function bs(e,t,n=10,r=15,i=20,a=30,o=9){if(t<a+15+o||t>=e.length)return null;let s=ys(e,t,n,r,i,a,o);return s?{name:`KST`,params:[n,r,i,a,o],values:[{label:`KST`,value:s.kst,color:ha.KST},{label:`Signal`,value:s.signal,color:ha.SIGNAL}]}:null}function xs(e,t){let n=Array(e.length);if(e.length<t)return n;for(let r=t-1;r<e.length;r++){let i=-1/0,a=1/0;for(let n=0;n<t;n++){let t=e[r-n];t&&(i=Math.max(i,t.high),a=Math.min(a,t.low))}let o=e[r].close;i===a?n[r]=50:n[r]=(o-a)/(i-a)*100}return n}function Ss(e={}){let{paneId:t=`sub`,config:n={}}=e,r={period:9,showFASTK:!0,...n},i=null,a=0,o=[];function s(e){return(i!==e||a!==r.period)&&(o=xs(e,r.period),i=e,a=r.period),o}return{name:`fastk_${t}`,version:`1.0.0`,description:`FASTK 快速随机指标渲染器`,debugName:`FASTK`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:c,dpr:l,kLinePositions:u}=e,d=i;if(d.length<r.period)return;let f=s(d);t.save(),t.translate(-o,0);let p=n.height-80/100*n.height,m=n.height-20/100*n.height,h=o,g=o+e.paneWidth;t.strokeStyle=`rgba(0, 0, 0, 0.1)`,t.lineWidth=1,t.setLineDash([4,4]),t.beginPath(),t.moveTo(h,p),t.lineTo(g,p),t.moveTo(h,m),t.lineTo(g,m),t.stroke(),t.setLineDash([]);let _=Math.max(a.start,r.period-1),v=Math.min(a.end,d.length);if(r.showFASTK){t.strokeStyle=fa.K,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=_;r<v;r++){let i=f[r];if(i===void 0)continue;let o=u[r-a.start];if(o===void 0)continue;let s=o+c/2,d=n.height-(i-0)/100*n.height,p=Q(s,l),m=Q(d,l);e?(t.moveTo(p,m),e=!1):t.lineTo(p,m)}t.stroke()}t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){`period`in e&&e.period!==r.period&&(i=null),Object.assign(r,e)}}}function Cs(e,t,n){return xs(e,n)[t]}function ws(e,t,n=9){if(t<n||t>=e.length)return null;let r=Cs(e,t,n);return r===void 0?null:{name:`FASTK`,params:[n],values:[{label:`FASTK`,value:r,color:fa.K}]}}function Ts(e){let{indicatorId:t,paneId:n}=e;switch(t){case`VOLUME`:return Oo({paneId:n});case`MACD`:return qo({paneId:n});case`RSI`:return Zo({paneId:n});case`CCI`:return es({paneId:n});case`STOCH`:return is({paneId:n});case`MOM`:return cs({paneId:n});case`WMSR`:return fs({paneId:n});case`KST`:return vs({paneId:n});case`FASTK`:return Ss({paneId:n});default:throw Error(`Unknown indicator: ${t}`)}}var Es=class e{dom;opt;data=[];raf=null;viewport=null;paneRenderers=[];markerManager;interaction;pluginHost;rendererPluginManager;constructor(e,t){this.dom=e,this.opt=t,this.interaction=new Eo(this),this.markerManager=new Ga,this.pluginHost=Wi(),this.rendererPluginManager=new Ki,this.rendererPluginManager.setPluginHost(this.pluginHost),this.rendererPluginManager.setInvalidateCallback(()=>this.scheduleDraw()),this.initPanes()}get plugin(){return this.pluginHost}useRenderer(e,t){this.rendererPluginManager.register(e),t&&e.setConfig&&e.setConfig(t)}removeRenderer(e){this.rendererPluginManager.unregister(e)}getRenderer(e){return this.rendererPluginManager.getPlugin(e)}updateRendererConfig(e,t){this.rendererPluginManager.updateConfig(e,t)}setRendererEnabled(e,t){this.rendererPluginManager.setEnabled(e,t)}getAllRenderers(){return this.rendererPluginManager.getAllPlugins()}draw(){this.markerManager.clear();let e=this.computeViewport();if(!e){console.log(`[Chart] draw aborted: no viewport`);return}if(this.data.length===0){console.log(`[Chart] draw aborted: no data`);return}let{start:t,end:n}=So(e.scrollLeft,e.plotWidth,this.opt.kWidth,this.opt.kGap,this.data.length,e.dpr),r={start:t,end:n},i=this.calcKLinePositions(r),{kWidthPx:a}=xo(this.opt.kWidth,this.opt.kGap,e.dpr);this.interaction.setKLinePositions(i,r,a);for(let t of this.paneRenderers){let n=t.getPane(),a=t.getDom().plotCanvas.getContext(`2d`),o=t.getDom().yAxisCanvas.getContext(`2d`);n.updateRange(this.data,r),a&&(a.setTransform(1,0,0,1,0,0),a.scale(e.dpr,e.dpr),a.clearRect(0,0,e.plotWidth,n.height+2/e.dpr));let s=this.opt.rightAxisWidth+(this.opt.priceLabelWidth||60);o&&(o.setTransform(1,0,0,1,0,0),o.scale(e.dpr,e.dpr),o.clearRect(0,0,s,n.height+2/e.dpr));let c={ctx:a,pane:Ri(n),data:this.data,range:r,scrollLeft:e.scrollLeft,kWidth:this.opt.kWidth,kGap:this.opt.kGap,dpr:e.dpr,paneWidth:e.plotWidth,kLinePositions:i,markerManager:this.markerManager,yAxisCtx:o??void 0};if(a){a.save();let e=this.rendererPluginManager.render(n.id,c);e.length>0&&this.pluginHost.events.emit(`renderer:error`,{paneId:n.id,errors:e}),a.restore()}}let o=this.dom.xAxisCanvas.getContext(`2d`);if(o){let t={ctx:o,pane:{id:`xAxis`,top:0,height:this.opt.bottomAxisHeight,yAxis:{priceToY:()=>0,yToPrice:()=>0,getPaddingTop:()=>0,getPaddingBottom:()=>0},priceRange:{maxPrice:0,minPrice:0}},data:this.data,range:r,scrollLeft:e.scrollLeft,kWidth:this.opt.kWidth,kGap:this.opt.kGap,dpr:e.dpr,paneWidth:e.plotWidth,kLinePositions:i,xAxisCtx:o},n=this.rendererPluginManager.renderPlugin(`timeAxis`,t);n.length>0&&this.pluginHost.events.emit(`renderer:error`,{paneId:`timeAxis`,errors:n})}let s=this.dom.borderCanvas;if(s){let t=s.getContext(`2d`);if(t){t.setTransform(1,0,0,1,0,0),t.scale(e.dpr,e.dpr),t.clearRect(0,0,e.plotWidth,e.plotHeight);let n={ctx:t,pane:{id:`globalBorders`,top:0,height:e.plotHeight,yAxis:{priceToY:()=>0,yToPrice:()=>0,getPaddingTop:()=>0,getPaddingBottom:()=>0},priceRange:{maxPrice:0,minPrice:0}},data:this.data,range:r,scrollLeft:e.scrollLeft,kWidth:this.opt.kWidth,kGap:this.opt.kGap,dpr:e.dpr,paneWidth:e.plotWidth,kLinePositions:i,borderCtx:t},a=this.rendererPluginManager.renderPlugin(`globalBorders`,n);a.length>0&&this.pluginHost.events.emit(`renderer:error`,{paneId:`globalBorders`,errors:a})}}}zoomAt(e,t,n){let r=this.opt.kWidth+this.opt.kGap,i=(t+e)/r,a=this.viewport?.dpr||window.devicePixelRatio||1,o=Math.round(this.opt.kWidth*a),s=n>0?-2:2,c=o+s;c%2==0&&(c+=s>0?1:-1);let l=c/a,u=3/a;if(l=Math.max(this.opt.minKWidth,Math.min(this.opt.maxKWidth,l)),Math.abs(l-this.opt.kWidth)<.01)return;let d=i*(l+u)-e;if(this.onZoomChange){this.onZoomChange(l,u,d);return}this.opt={...this.opt,kWidth:l,kGap:u};let f=this.dom.container,p=Math.max(0,f.scrollWidth-f.clientWidth);f.scrollLeft=Math.min(Math.max(0,d),p),this.scheduleDraw()}applyZoom(e,t){this.opt={...this.opt,kWidth:e,kGap:t},this.scheduleDraw()}onZoomChange;setOnZoomChange(e){this.onZoomChange=e}getPaneRenderers(){return this.paneRenderers}getMarkerManager(){return this.markerManager}updateCustomMarkers(e){this.markerManager.setCustomMarkers(e),this.scheduleDraw()}clearCustomMarkers(){this.markerManager.clearCustomMarkers(),this.scheduleDraw()}getDom(){return this.dom}getOption(){return this.opt}calcKLinePositions(e){let{start:t,end:n}=e,r=n-t;if(r<=0)return[];let i=this.viewport?.dpr||window.devicePixelRatio||1,{unitPx:a,startXPx:o}=xo(this.opt.kWidth,this.opt.kGap,i),s=Array(r);for(let e=0;e<r;e++)s[e]=(o+(t+e)*a)/i;return s}updateOptions(e){this.opt={...this.opt,...e},e.panes&&this.initPanes(),this.resize()}updatePaneLayout(e){this.opt.panes=e,this.layoutPanes(),this.scheduleDraw()}addPane(e){if(this.paneRenderers.some(t=>t.getPane().id===e)){console.warn(`Pane "${e}" already exists`);return}let t=new To(e),n=document.createElement(`canvas`),r=document.createElement(`canvas`);n.id=`${e}-plot`,n.className=`plot-canvas`,n.style.position=`absolute`,n.style.left=`0`,n.style.top=`0`,r.id=`${e}-yAxis`,r.className=`y-axis-canvas`,r.style.position=`absolute`,r.style.right=`0`;let i=new Do({plotCanvas:n,yAxisCanvas:r},t,{rightAxisWidth:this.opt.rightAxisWidth,yPaddingPx:0,priceLabelWidth:this.opt.priceLabelWidth});this.paneRenderers.push(i);let a=this.dom.canvasLayer;a&&(a.insertBefore(n,this.dom.borderCanvas||null),a.insertBefore(r,this.dom.borderCanvas||null)),this.rendererPluginManager.addKnownPaneId(e)}removePane(e){let t=this.paneRenderers.findIndex(t=>t.getPane().id===e);if(t===-1)return;let n=this.paneRenderers[t];if(!n)return;let r=n.getDom();r.plotCanvas.remove(),r.yAxisCanvas.remove(),this.paneRenderers.splice(t,1),this.rendererPluginManager.removeKnownPaneId(e)}hasPane(e){return this.paneRenderers.some(t=>t.getPane().id===e)}static SUB_PANE_PREFIX=`sub_`;createSubPane(t,n){let r=`${e.SUB_PANE_PREFIX}${t}`;if(this.hasPane(r)){let e=`${t.toLowerCase()}_${r}`;return n&&this.updateRendererConfig(e,n),!0}this.addPane(r);let i=Ts({indicatorId:t,paneId:r});return this.useRenderer(i,n),this.layoutPanes(),this.scheduleDraw(),!0}removeSubPane(t){let n=`${e.SUB_PANE_PREFIX}${t}`;if(!this.hasPane(n))return;let r=`${t.toLowerCase()}_${n}`;this.removeRenderer(r),this.removePane(n),this.layoutPanes(),this.scheduleDraw()}clearSubPanes(){let t=this.paneRenderers.map(e=>e.getPane().id).filter(t=>t.startsWith(e.SUB_PANE_PREFIX));for(let n of t){let t=n.slice(e.SUB_PANE_PREFIX.length);this.removeSubPane(t)}}getSubPaneIndicators(){return this.paneRenderers.map(e=>e.getPane().id).filter(t=>t.startsWith(e.SUB_PANE_PREFIX)).map(t=>t.slice(e.SUB_PANE_PREFIX.length))}updateData(e){console.log(`[Chart] updateData called, data length:`,e?.length),this.data=e??[];let t=this.dom.container;if(t){let e=this.getContentWidth(),n=Math.max(0,e-t.clientWidth);t.scrollLeft>n&&(t.scrollLeft=n)}this.rendererPluginManager.notifyDataUpdate(this.data,{start:0,end:this.data.length}),this.interaction.reset(),this.scheduleDraw()}getData(){return this.data}getContentWidth(){let e=this.data?.length??0,t=this.viewport?.dpr||window.devicePixelRatio||1,{startXPx:n,unitPx:r}=xo(this.opt.kWidth,this.opt.kGap,t);return(n+e*r)/t+(this.opt.rightAxisWidth+(this.opt.priceLabelWidth||60))}resize(){let e=this.computeViewport();!e||e.viewWidth<10||e.viewHeight<10||(this.layoutPanes(),this.scheduleDraw())}scheduleDraw(){this.raf!=null&&cancelAnimationFrame(this.raf),this.raf=requestAnimationFrame(()=>{this.raf=null,this.draw()})}async destroy(){this.raf!=null&&cancelAnimationFrame(this.raf),this.raf=null,this.viewport=null,this.paneRenderers.forEach(e=>e.destroy()),this.paneRenderers=[],this.rendererPluginManager.clear(),this.onZoomChange=void 0,await this.pluginHost.destroy()}initPanes(){this.paneRenderers=this.opt.panes.map(e=>{let t=new To(e.id),n=document.createElement(`canvas`),r=document.createElement(`canvas`);return n.id=`${e.id}-plot`,n.className=`plot-canvas`,n.style.position=`absolute`,n.style.left=`0`,n.style.top=`0`,r.id=`${e.id}-yAxis`,r.className=`y-axis-canvas`,r.style.position=`absolute`,r.style.right=`0`,new Do({plotCanvas:n,yAxisCanvas:r},t,{rightAxisWidth:this.opt.rightAxisWidth,yPaddingPx:this.opt.yPaddingPx,priceLabelWidth:this.opt.priceLabelWidth})});let e=this.dom.canvasLayer;if(e){e.querySelectorAll(`canvas:not(.x-axis-canvas)`).forEach(e=>e.remove()),this.paneRenderers.forEach(t=>{let n=t.getDom();e.appendChild(n.plotCanvas),e.appendChild(n.yAxisCanvas)});let t=document.createElement(`canvas`);t.id=`border`,t.style.position=`absolute`,t.style.left=`0`,t.style.top=`0`,t.style.pointerEvents=`none`,this.dom.borderCanvas=t,e.appendChild(t)}}layoutPanes(){let e=this.viewport;if(!e)return;let t=this.opt.panes.filter(e=>e.visible!==!1),n=Math.max(0,this.opt.paneGap??0),r=0,i=n*Math.max(0,t.length-1),a=Math.max(1,e.plotHeight-i),o=Math.max(0,t.length-1),s=o===0?1:.85**o,c=o>0?(1-s)/o:0,l=t.map((e,t)=>Math.round(a*(t===0?s:c))),u=l.reduce((e,t)=>e+t,0),d=l.length-1;d>=0&&(l[d]+=a-u);for(let i=0;i<t.length;i++){let a=t[i];if(!a)continue;let o=this.paneRenderers.find(e=>e.getPane().id===a.id);if(!o)continue;let s=o.getPane(),c=l[i];s.setLayout(r,c),s.id===`main`?s.setPadding(this.opt.yPaddingPx,this.opt.yPaddingPx):s.setPadding(0,0),o.resize(e.plotWidth,c,e.dpr);let u=o.getDom();u.plotCanvas.style.top=`${r}px`,u.yAxisCanvas.style.top=`${r}px`,r+=c+n}}computeViewport(){let e=this.dom.container;if(!e)return null;let t=Math.max(1,Math.ceil(e.clientWidth)),n=Math.max(1,Math.ceil(e.clientHeight)),r=e.scrollLeft,i=this.opt.rightAxisWidth+(this.opt.priceLabelWidth||60),a=Math.round(t-i),o=Math.round(n-this.opt.bottomAxisHeight),s=window.devicePixelRatio||1,c=16*1024*1024;t*s*(n*s)>c&&(s=Math.sqrt(c/(t*n))),this.dom.canvasLayer.style.width=`${t}px`,this.dom.canvasLayer.style.height=`${n}px`,this.dom.xAxisCanvas.style.width=`${a}px`,this.dom.xAxisCanvas.style.height=`${this.opt.bottomAxisHeight}px`,this.dom.xAxisCanvas.width=Math.round(a*s),this.dom.xAxisCanvas.height=Math.round(this.opt.bottomAxisHeight*s),this.dom.borderCanvas&&(this.dom.borderCanvas.style.width=`${a}px`,this.dom.borderCanvas.style.height=`${o}px`,this.dom.borderCanvas.width=Math.ceil(a*s),this.dom.borderCanvas.height=Math.ceil(o*s));let l={viewWidth:t,viewHeight:n,plotWidth:a,plotHeight:o,scrollLeft:r,dpr:s};return this.viewport=l,l}};function Ds(e){return e.open>e.close?`down`:e.open<e.close?`up`:`flat`}var $=function(e){return e.RISE_WITH_VOLUME=`rise_with_volume`,e.RISE_WITHOUT_VOLUME=`rise_without_volume`,e.FALL_WITH_VOLUME=`fall_with_volume`,e.FALL_WITHOUT_VOLUME=`fall_without_volume`,e.OTHERS=`others`,e}({}),Os={volumeAmplifyThreshold:1.5,volumeShrinkThreshold:.8,avgPeriod:20},ks=class{prefixSum=[];dataLength=0;build(e){let t=e.length;if(t===0){this.prefixSum=[],this.dataLength=0;return}this.prefixSum=[0];for(let n=0;n<t;n++)this.prefixSum.push(this.prefixSum[n]+(e[n]?.volume??0));this.dataLength=t}query(e,t){return e<0||t>=this.dataLength||e>t?0:this.prefixSum[t+1]-this.prefixSum[e]}getVolumeMA(e,t){if(e<t-1)return 0;let n=e-t+1;return this.query(n,e)/t}get length(){return this.dataLength}};function As(e,t,n,r=Os){let i=new ks;i.build(e);let a=[],{volumeAmplifyThreshold:o,volumeShrinkThreshold:s,avgPeriod:c}=r;for(let r=t;r<n&&r<e.length;r++){let t=e[r]?.volume;if(r<1||!t){a.push($.OTHERS);continue}let n=i.getVolumeMA(r,c),l=e[r];if(!l){a.push($.OTHERS);continue}let u=l.close-l.open,d=u>0,f=u<0,p=t>n*o,m=t<n*s;d&&p?a.push($.RISE_WITH_VOLUME):d&&m?a.push($.RISE_WITHOUT_VOLUME):f&&p?a.push($.FALL_WITH_VOLUME):f&&m?a.push($.FALL_WITHOUT_VOLUME):a.push($.OTHERS)}return a}function js(){return{name:`candle`,version:`1.0.0`,description:`K线蜡烛图渲染器`,debugName:`K线`,paneId:`main`,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:r,range:i,scrollLeft:a,kWidth:o,kGap:s,dpr:c,kLinePositions:l,markerManager:u}=e,d=r;if(!d.length)return;let{kWidthPx:f}=xo(o,s,c);t.save(),t.translate(-a,0);let p=l||[],m=As(d,i.start,i.end,Os);for(let e=i.start;e<i.end&&e<d.length;e++){let r=d[e];if(!r)continue;let a=n.yAxis.priceToY(r.open),s=n.yAxis.priceToY(r.close),l=n.yAxis.priceToY(r.high),h=n.yAxis.priceToY(r.low),g=Math.min(a,s),_=Math.max(Math.abs(a-s),1),v=p[e-i.start];if(!v)continue;let y=Fo(Math.round(v*c),g,f,_,c);t.fillStyle=Ds(r)===`up`?J.UP:J.DOWN,t.fillRect(y.bodyRect.x,y.bodyRect.y,y.bodyRect.width,y.bodyRect.height);let b=y.wickRect.width,x=y.wickRect.x,S=y.bodyRect.y,C=y.bodyRect.y+y.bodyRect.height,w=Math.max(r.open,r.close),T=Math.min(r.open,r.close);if(r.high>w){let e=No(x,l,S,c);e&&t.fillRect(e.x,e.y,b,e.height)}if(r.low<T){let e=No(x,C,h,c);e&&t.fillRect(e.x,e.y,b,e.height)}let E=m[e-i.start];if(E!==$.OTHERS&&u){let n=E===$.RISE_WITH_VOLUME||E===$.RISE_WITHOUT_VOLUME?l-15:h+15;Ms(t,y.bodyRect.x+y.bodyRect.width/2,n,E,e,o,4,u)}}t.restore()}}}function Ms(e,t,n,r,i,a,o=4,s){let c=Math.min(a,20),l=c*Math.sqrt(3)/2,u,d;switch(r){case $.RISE_WITH_VOLUME:u=`#FF4444`,d=!0;break;case $.RISE_WITHOUT_VOLUME:u=`#00C853`,d=!0;break;case $.FALL_WITH_VOLUME:u=`#FF4444`,d=!1;break;case $.FALL_WITHOUT_VOLUME:u=`#00C853`,d=!1;break;default:return}if(e.save(),e.beginPath(),d){let r=n-o,i=r-l;e.moveTo(t,i),e.lineTo(t-c/2,r),e.lineTo(t+c/2,r)}else{let r=n+o,i=r+l;e.moveTo(t,i),e.lineTo(t-c/2,r),e.lineTo(t+c/2,r)}e.closePath(),e.fillStyle=u,e.fill(),e.restore();let f,p;if(d){let e=n-o-l;f=t-c/2,p=e}else{let e=n+o;e+l,f=t-c/2,p=e}let m;switch(r){case $.RISE_WITH_VOLUME:m=`RISE_WITH_VOLUME`;break;case $.RISE_WITHOUT_VOLUME:m=`RISE_WITHOUT_VOLUME`;break;case $.FALL_WITH_VOLUME:m=`FALL_WITH_VOLUME`;break;case $.FALL_WITHOUT_VOLUME:m=`FALL_WITHOUT_VOLUME`;break;default:return}let h=`mk_price-volume_${i}`;s.register({id:h,type:`triangle`,markerType:m,x:f,y:p,width:c,height:l,dataIndex:i,metadata:{relation:r}})}function Ns(e,t){return t?Math.max(4,Math.min(8,Math.round(e/80))):2}function Ps(){return{name:`gridLines`,version:`1.0.0`,description:`网格线渲染器`,debugName:`网格线`,paneId:zi,priority:K.GRID,draw(e){let{ctx:t,pane:n,data:r,range:i,scrollLeft:a,kWidth:o,dpr:s,kLinePositions:c}=e,l=r;if(!l.length)return;let u=Ns(n.height,n.id===`main`);t.save(),t.fillStyle=ca.HORIZONTAL,t.translate(-a,0);let d=t.canvas.width/s,f=a,p=a+d,m=n.yAxis.getPaddingTop(),h=n.yAxis.getPaddingBottom(),g=m,_=Math.max(m,n.height-h),v=Math.max(0,_-g);for(let e=0;e<u;e++){let n=u<=1?0:e/(u-1),r=Po(f,p,Math.round(g+n*v),s);r&&t.fillRect(r.x,r.y,r.width,r.height)}let y=aa(l);for(let e of y){if(e<i.start||e>=i.end||e>=l.length)continue;let r=e-i.start;if(r<0||r>=c.length)continue;let a=No(c[r]+o/2,0,n.height,s);a&&t.fillRect(a.x,a.y,a.width,a.height)}t.restore()}}}function Fs(){return{name:`lastPriceLine`,version:`1.0.0`,description:`最新价虚线渲染器`,debugName:`最新价线`,paneId:`main`,priority:K.FOREGROUND,draw(e){let{ctx:t,pane:n,data:r,scrollLeft:i,kWidth:a,dpr:o,kLinePositions:s}=e,c=r,l=c[c.length-1];if(!l)return;t.save(),t.translate(-i,0);let u=Math.round(n.yAxis.priceToY(l.close)),d=s[0]??0,f=(s[s.length-1]??0)+a;t.strokeStyle=J.LAST_PRICE,t.lineWidth=1,t.setLineDash([4,3]),t.beginPath();let p=(Math.floor(u*o)+.5)/o;t.moveTo(Math.round(d*o)/o,p),t.lineTo(Math.round(f*o)/o,p),t.stroke(),t.setLineDash([]),t.restore()}}}function Is(){return{name:`extremaMarkers`,version:`1.0.0`,description:`可视区最高/最低价标注渲染器`,debugName:`极值标记`,paneId:`main`,priority:K.OVERLAY,draw(e){let{ctx:t,pane:n,data:r,range:i,scrollLeft:a,kWidth:o,dpr:s,paneWidth:c,kLinePositions:l}=e,u=r;if(!u.length||n.id!==`main`)return;let d=Math.max(0,i.start),f=Math.min(u.length,i.end);if(f-d<=0)return;let p=-1/0,m=1/0,h=d,g=d;for(let e=d;e<f;e++){let t=u[e];t&&(t.high>=p&&(p=t.high,h=e),t.low<=m&&(m=t.low,g=e))}if(!Number.isFinite(p)||!Number.isFinite(m))return;let _=e=>{let t=e-i.start;return t<0||t>=l.length?0:l[t]+o/2};t.save(),t.translate(-a,0),Ls(t,_(h),n.yAxis.priceToY(p),p,s,c,a),Ls(t,_(g),n.yAxis.priceToY(m),m,s,c,a),t.restore()}}}function Ls(e,t,n,r,i,a,o){let s=r.toFixed(2);e.font=`12px Arial`;let c=e.measureText(s).width,l=t-o+30+4+c>a,u=t,d=l?t-30:t+30;u>d&&([u,d]=[d,u]);let f=Po(u,d,n,i);f&&(e.fillStyle=q.WEAK,e.fillRect(f.x,f.y,f.width,f.height));let p=Z(d,i),m=Z(n,i);e.fillStyle=q.WEAK,e.beginPath(),e.arc(p,m,2,0,Math.PI*2),e.fill(),e.font=`12px Arial`,e.textBaseline=`middle`,e.fillStyle=J.NEUTRAL,l?(e.textAlign=`right`,e.fillText(s,Z(t-30-4,i),Z(n,i))):(e.textAlign=`left`,e.fillText(s,Z(t+30+4,i),Z(n,i)))}function Rs(e,t){let{x:n,y:r,width:i,height:a,priceRange:o,yPaddingPx:s=0,dpr:c,ticks:l=10,bgColor:u=oa.WHITE,textColor:d=q.SECONDARY,lineColor:f=sa.DARK,fontSize:p=16,paddingX:m=12,drawLeftBorder:h=!0,drawTickLines:g=!0}=t,_=Math.max(0,Math.min(s,Math.floor(a/2)-1)),{maxPrice:v,minPrice:y}=o,b=v-y,x=b===0?0:b/(Math.max(2,l)-1);e.fillStyle=u,e.fillRect(n,r,i,a),h&&(e.strokeStyle=f,e.lineWidth=1,e.beginPath(),e.moveTo(Q(n,c),r),e.lineTo(Q(n,c),r+a),e.stroke()),e.font=`${p}px -apple-system,BlinkMacSystemFont,Trebuchet MS,Roboto,Ubuntu,sans-serif`,e.textBaseline=`middle`,e.textAlign=`left`;let S=n+m;for(let t=0;t<Math.max(2,l);t++){let i=b===0?v:v-x*t,o=Math.round(Mo(i,v,y,a,_,_)+r);if(g){e.strokeStyle=f,e.beginPath();let t=Q(o,c);e.moveTo(n,t),e.lineTo(n+4,t),e.stroke()}e.fillStyle=d,e.fillText(i.toFixed(2),Z(S,c),Z(o,c))}}function zs(e,t){let{x:n,y:r,width:i,height:a,crosshairX:o,timestamp:s,dpr:c,bgColor:l=oa.WHITE,textColor:u=q.PRIMARY,fontSize:d=16,paddingX:f=8,paddingY:p=4}=t,m=ia(s);e.save(),e.font=`${d}px -apple-system,BlinkMacSystemFont,Trebuchet MS,Roboto,Ubuntu,sans-serif`,e.textBaseline=`middle`,e.textAlign=`center`;let h=Math.round(e.measureText(m).width),g=Math.min(i,h+f*2),_=Math.min(a,d+p*2),v=Math.min(Math.max(o,n+g/2),n+i-g/2),y=r+a/2,b=v-g/2;y-_/2,e.fillStyle=l,e.fillRect(Z(b,c),0,Z(g,c),Z(_,c)),e.fillStyle=u,e.fillText(m,Z(v,c),Z(y,c)),e.restore()}function Bs(e,t){let{x:n,y:r,width:i,height:a,data:o,scrollLeft:s,kWidth:c,kGap:l,startIndex:u,endIndex:d,dpr:f,bgColor:p=oa.WHITE,textColor:m=q.SECONDARY,lineColor:h=sa.DARK,fontSize:g=16,paddingX:_=8,drawTopBorder:v=!0,drawBottomBorder:y=!0}=t,b=Math.round(c*f),x=b%2==0?b+1:b,S=Math.round(l*f),C=x+S,w=S,T=C/f,E=w/f,D=x/f;e.fillStyle=p,e.fillRect(n,r,i,a),v&&(e.strokeStyle=h,e.lineWidth=1,e.beginPath(),e.moveTo(n,Q(r,f)),e.lineTo(n+i,Q(r,f)),e.stroke()),y&&(e.strokeStyle=h,e.lineWidth=1,e.beginPath(),e.moveTo(n,Q(r+a,f)),e.lineTo(n+i,Q(r+a,f)),e.stroke()),e.textAlign=`center`,e.textBaseline=`middle`;let O=r+a/2,k=aa(o).filter(e=>e>=u&&e<d);for(let t of k){let n=o[t];if(!n)continue;let a=E+t*T+D/2-s,c=_,l=Math.max(_,i-_);if(a>=c&&a<=l){let t=Math.min(Math.max(a,c),l);e.strokeStyle=h,e.beginPath();let i=Q(t,f);e.moveTo(i,r),e.lineTo(i,r+4),e.stroke();let{text:o,isYear:s}=ta(n.timestamp);e.fillStyle=m,e.font=`${s?`bold `:``}${g}px -apple-system,BlinkMacSystemFont,Trebuchet MS,Roboto,Ubuntu,sans-serif`,e.fillText(o,Z(t,f),Z(O,f))}}}function Vs(e){return{name:`yAxis`,version:`1.0.0`,description:`Y轴价格刻度渲染器`,debugName:`Y轴`,paneId:zi,priority:K.SYSTEM_YAXIS,draw(t){let{ctx:n,pane:r,dpr:i,yAxisCtx:a}=t,o=a||n,s=Ns(r.height,r.id===`main`);Rs(o,{x:0,y:r.top,width:e.axisWidth,height:r.height,priceRange:r.priceRange,yPaddingPx:e.yPaddingPx,dpr:i,ticks:s,drawLeftBorder:!1,drawTickLines:!1})}}}var Hs=Symbol(`time-axis`);function Us(e){return{name:`timeAxis`,version:`1.0.0`,description:`时间轴渲染器`,debugName:`时间轴`,paneId:Hs,priority:K.SYSTEM_XAXIS,isSystem:!0,draw(t){let{ctx:n,data:r,range:i,scrollLeft:a,kWidth:o,kGap:s,dpr:c,paneWidth:l}=t,u=r,d=n,f=l,p=e.height;d.setTransform(1,0,0,1,0,0),d.scale(c,c),d.clearRect(0,0,f,p),Bs(d,{x:0,y:0,width:f,height:p,data:u,scrollLeft:a,kWidth:o,kGap:s,startIndex:i.start,endIndex:i.end,dpr:c,drawTopBorder:!1,drawBottomBorder:!1});let m=e.getCrosshair?.();if(m&&typeof m.index==`number`){let e=u[m.index];e&&zs(d,{x:0,y:0,width:f,height:p,crosshairX:m.x,timestamp:e.timestamp,dpr:c})}}}}function Ws(e){return{name:`crosshair`,version:`1.0.0`,description:`十字线渲染器`,debugName:`十字线`,paneId:zi,priority:K.SYSTEM_CROSSHAIR,draw(t){let{ctx:n,pane:r,dpr:i,paneWidth:a}=t,o=e.getCrosshairState();if(o.isDragging||!o.pos)return;let{x:s,y:c}=o.pos,l=r.id===o.activePaneId,u=l?c-r.top:-1;n.save(),n.beginPath(),n.rect(0,0,a,r.height),n.clip(),n.fillStyle=ga.LINE;let d=No(s,0,r.height,i);if(d&&n.fillRect(d.x,d.y,d.width,d.height),l&&u>=0){let e=Po(0,a,Math.min(u,r.height-1/i),i);e&&n.fillRect(e.x,e.y,e.width,e.height)}n.restore()}}}var Gs=Symbol(`global-borders`);function Ks(e){return{name:`globalBorders`,version:`1.0.0`,description:`全局边框渲染器`,debugName:`边框`,paneId:Gs,priority:K.SYSTEM_BORDER,isSystem:!0,draw(t){let{ctx:n,dpr:r,paneWidth:i,borderCtx:a}=t,o=e.getPaneInfos();if(o.length===0)return;let s=a||n;s.save(),s.strokeStyle=sa.DARK,s.lineWidth=3;let c=1.5/r,l=Q(c,r),u=Q(i-c,r),d=1/0,f=-1/0;for(let e of o)d=Math.min(d,e.top),f=Math.max(f,e.top+e.height);d=Number.isFinite(d)?d:0,f=Number.isFinite(f)?f:0,s.beginPath();let p=o[0],m=Q(p.top+c,r);s.moveTo(l,m),s.lineTo(u,m);let h=o[o.length-1],g=Q(h.top+h.height-c,r);s.moveTo(l,g),s.lineTo(u,g);let _=Q(d+c,r),v=Z(f-c,r);s.moveTo(l,_),s.lineTo(l,v),s.moveTo(u,_),s.lineTo(u,v);for(let e=1;e<o.length;e++){let t=o[e],n=Q(t.top,r);s.moveTo(l,n),s.lineTo(u,n)}s.stroke(),s.restore()}}}function qs(e){let t={...e};return{name:`paneTitle_${e.paneId}`,version:`1.0.0`,description:`面板标题渲染器`,debugName:`面板标题`,paneId:e.paneId,priority:K.FOREGROUND,draw(e){let{ctx:n,pane:r}=e;if(r.id!==t.paneId)return;let i=t.yOffset??12;n.save(),n.font=`12px Arial`,n.textAlign=`left`,n.textBaseline=`top`;let a=t.getTitleInfo?.();if(a){let e=12;if(n.fillStyle=q.PRIMARY,n.fillText(a.name,e,i),e+=n.measureText(a.name).width,a.params&&a.params.length>0){let t=`(${a.params.join(`,`)})`;n.fillStyle=q.TERTIARY,n.fillText(t,e,i),e+=n.measureText(t).width+8}else e+=8;if(a.values&&a.values.length>0)for(let t of a.values){let r=`${t.label} ${t.value.toFixed(3)}`;n.fillStyle=t.color,n.fillText(r,e,i),e+=n.measureText(r).width+8}}else if(n.fillStyle=q.PRIMARY,n.fillText(t.title,12,i),t.description){let e=n.measureText(t.title).width;n.fillStyle=q.WEAK,n.fillText(` - ${t.description}`,12+e,i)}n.restore()},setConfig(e){t={...t,...e}}}}var Js={class:`chart-wrapper`},Ys=4,Xs=Ha((0,f.defineComponent)({__name:`KLineChart`,props:{semanticConfig:{},kWidth:{default:10},kGap:{default:2},yPaddingPx:{default:0},minKWidth:{default:2},maxKWidth:{default:50},rightAxisWidth:{default:70},bottomAxisHeight:{default:24},priceLabelWidth:{default:60}},setup(e,{expose:t}){let n=e,r=(0,f.ref)(null),i=(0,f.ref)(null),a=(0,f.ref)(null),o=(0,f.ref)(n.kWidth),s=(0,f.ref)(n.kGap),c=(0,f.shallowRef)(null),l=(0,f.shallowRef)(null),u=(0,f.ref)(0);function d(){c.value?.scheduleDraw()}function p(e){if(!e)return;let t=e.getBoundingClientRect();c.value?.interaction.setTooltipSize({width:Math.max(180,Math.round(t.width)),height:Math.max(80,Math.round(t.height))})}let m=(0,f.ref)(null),h=(0,f.ref)(null),g=(0,f.ref)({x:0,y:0}),_=(0,f.ref)(!1),v=(0,f.ref)(null),y=(0,f.ref)(null),b=(0,f.ref)({x:0,y:0}),x=(0,f.computed)(()=>{let e=v.value;if(typeof e!=`number`)return null;let t=c.value?.getData();return t&&e>=0&&e<t.length?t[e]:null}),S=(0,f.computed)(()=>v.value),C=(0,f.computed)(()=>b.value),w=(0,f.computed)(()=>c.value?.getData()??[]);function T(){let e=c.value?.interaction;if(!e){v.value=null,y.value=null,m.value=null,h.value=null;return}v.value=e.hoveredIndex??null,y.value=e.crosshairIndex??null,m.value=e.hoveredMarkerData??null,h.value=e.hoveredCustomMarker??null;let t=e.tooltipPos;t&&(b.value={x:t.x,y:t.y})}function E(e){_.value=!0,c.value?.interaction.onMouseDown(e),T()}function D(e){_.value=!0,c.value?.interaction.onPointerDown(e),T()}function O(e){let t=a.value;if(t){let n=t.getBoundingClientRect();g.value={x:e.clientX-n.left,y:e.clientY-n.top}}c.value?.interaction.onMouseMove(e),T()}function k(e){let t=a.value;if(t){let n=t.getBoundingClientRect();g.value={x:e.clientX-n.left,y:e.clientY-n.top}}c.value?.interaction.onPointerMove(e),T()}function A(){_.value=!1,c.value?.interaction.onMouseUp(),T()}function j(e){_.value=!1,c.value?.interaction.onPointerUp(e),T()}function M(){_.value=!1,c.value?.interaction.onMouseLeave(),v.value=null}function ee(e){_.value=!1,c.value?.interaction.onPointerLeave(e),v.value=null}function te(){c.value?.interaction.onScroll(),T()}let N=(0,f.ref)([`MA`]),P=(0,f.ref)({}),F=(0,f.ref)([]),ne=[`VOLUME`,`MACD`,`RSI`,`CCI`,`STOCH`,`MOM`,`WMSR`,`KST`,`FASTK`];(0,f.watch)((0,f.computed)(()=>F.value.length===0?[{id:`main`,ratio:1,visible:!0}]:[{id:`main`,ratio:1,visible:!0},...F.value.map(e=>({id:e.id,ratio:1,visible:!0}))]),e=>{c.value?.updatePaneLayout(e)},{flush:`post`});function I(e){switch(e){case`MACD`:return{fastPeriod:12,slowPeriod:26,signalPeriod:9};case`RSI`:return{period1:6,period2:12,period3:24};case`CCI`:return{period:14};case`STOCH`:return{n:9,m:3};case`MOM`:return{period:10};case`WMSR`:return{period:14};case`KST`:return{roc1:10,roc2:15,roc3:20,roc4:30,signalPeriod:9};case`FASTK`:return{period:9};default:return{}}}function re(e=`VOLUME`,t){if(F.value.length>=Ys)return!1;let n=`sub_${e}`;if(F.value.some(e=>e.id===n))return!0;if(!c.value?.createSubPane(e,t??I(e)))return!1;let r=qs({paneId:n,title:e,getTitleInfo:()=>ce(n)});return c.value?.useRenderer(r),F.value.push({id:n,indicatorId:e,rendererName:`${e.toLowerCase()}_${n}`,paneTitleRendererName:r.name,params:t??I(e)}),N.value.includes(e)||N.value.push(e),!0}function ie(e){let t=F.value.findIndex(t=>t.id===e);if(t===-1)return;let n=F.value[t];n&&(c.value?.removeRenderer(n.paneTitleRendererName),c.value?.removeSubPane(n.indicatorId),F.value.splice(t,1),F.value.some(e=>e.indicatorId===n.indicatorId)||(N.value=N.value.filter(e=>e!==n.indicatorId)))}function ae(){for(let e of F.value)c.value?.removeRenderer(e.paneTitleRendererName);c.value?.clearSubPanes(),F.value=[],N.value=N.value.filter(e=>!ne.includes(e))}function oe(){let e=c.value?.getSubPaneIndicators()??[];F.value=[];for(let t of e){let e=`sub_${t}`,n=qs({paneId:e,title:t,getTitleInfo:()=>ce(e)});c.value?.useRenderer(n),F.value.push({id:e,indicatorId:t,rendererName:`${t.toLowerCase()}_${e}`,paneTitleRendererName:n.name,params:I(t)}),N.value.includes(t)||N.value.push(t)}}function se(e,t){let n=F.value.find(t=>t.id===e);if(!n)return;let r=n.indicatorId;c.value?.removeRenderer(n.paneTitleRendererName),c.value?.removeSubPane(r),c.value?.createSubPane(t,I(t));let i=`sub_${t}`,a=qs({paneId:i,title:t,getTitleInfo:()=>ce(i)});c.value?.useRenderer(a);let o=F.value.findIndex(t=>t.id===e);o!==-1&&(F.value[o]={id:i,indicatorId:t,rendererName:`${t.toLowerCase()}_${i}`,paneTitleRendererName:a.name,params:I(t)}),N.value=N.value.filter(e=>e!==r),N.value.includes(t)||N.value.push(t)}function ce(e){let t=F.value.find(t=>t.id===e);if(!t)return null;let n=c.value?.getData();if(!n||n.length===0)return null;let r=t.params;if(t.indicatorId===`VOLUME`)return{name:`VOL`,params:[],values:[]};let i=y.value;if(i===null)return null;switch(t.indicatorId){case`MACD`:return Yo(n,i,r.fastPeriod??12,r.slowPeriod??26,r.signalPeriod??9);case`RSI`:return Qo(n,i,r.period1??6,r.period2??12,r.period3??24);case`CCI`:return ns(n,i,r.period??14);case`STOCH`:return os(n,i,r.n??9,r.m??3);case`MOM`:return us(n,i,r.period??10);case`WMSR`:return ms(n,i,r.period??14);case`KST`:return bs(n,i,r.roc1??10,r.roc2??15,r.roc3??20,r.roc4??30,r.signalPeriod??9);case`FASTK`:return ws(n,i,r.period??9);default:return null}}function le(e,t){if(e===`MA`){t?(N.value.includes(e)||N.value.push(e),c.value?.updateRendererConfig(`ma`,{ma5:!0,ma10:!0,ma20:!0,ma30:!0,ma60:!0}),c.value?.setRendererEnabled(`maLegend`,!0)):(N.value=N.value.filter(t=>t!==e),c.value?.updateRendererConfig(`ma`,{ma5:!1,ma10:!1,ma20:!1,ma30:!1,ma60:!1}),c.value?.setRendererEnabled(`maLegend`,!1)),d();return}if(e===`BOLL`){t?N.value.includes(e)||N.value.push(e):N.value=N.value.filter(t=>t!==e),c.value?.setRendererEnabled(`boll`,t),c.value?.setRendererEnabled(`bollLegend`,t),d();return}if(ne.includes(e)){if(t){if(F.value.find(t=>t.indicatorId===e))return;if(!re(e)){let t=F.value[F.value.length-1];t&&se(t.id,e)}}else F.value.filter(t=>t.indicatorId===e).forEach(e=>ie(e.id));d()}}function ue(e,t){if(P.value[e]=t,e===`BOLL`){c.value?.updateRendererConfig(`boll`,t),c.value?.updateRendererConfig(`bollLegend`,t),d();return}ne.includes(e)&&F.value.filter(t=>t.indicatorId===e).forEach(e=>{e.params={...t},c.value?.updateRendererConfig(e.rendererName,t)}),d()}let de=(0,f.computed)(()=>{let e=u.value,t=window.devicePixelRatio||1,{startXPx:r,unitPx:i}=xo(o.value,s.value,t);return(r+e*i)/t+(n.rightAxisWidth+n.priceLabelWidth)});function fe(){let e=a.value;e&&(e.scrollLeft=e.scrollWidth,d())}return t({scheduleRender:d,scrollToRight:fe,addSubPane:re,removeSubPane:ie,switchSubIndicator:se,clearAllSubPanes:ae,get plugin(){return c.value?.plugin}}),(0,f.onMounted)(()=>{let e=a.value,t=i.value,p=r.value;if(!e||!t||!p)return;e.addEventListener(`wheel`,e=>{c.value?.interaction.onWheel(e),T()},{passive:!1});let g=new Es({container:e,canvasLayer:t,xAxisCanvas:p},{kWidth:o.value,kGap:s.value,yPaddingPx:n.yPaddingPx,rightAxisWidth:n.rightAxisWidth,bottomAxisHeight:n.bottomAxisHeight,priceLabelWidth:n.priceLabelWidth,minKWidth:n.minKWidth,maxKWidth:n.maxKWidth,panes:[{id:`main`,ratio:1}],paneGap:0});g.setOnZoomChange(async(e,t,n)=>{o.value=e,s.value=t,await(0,f.nextTick)(),await new Promise(e=>requestAnimationFrame(()=>e()));let r=a.value;if(!r)return;let i=Math.max(0,r.scrollWidth-r.clientWidth);r.scrollLeft=Math.min(Math.max(0,n),i),g.applyZoom(e,t)}),g.useRenderer(Ps()),g.useRenderer(Is()),g.useRenderer(Lo({ma5:!0,ma10:!0,ma20:!0,ma30:!0,ma60:!0})),g.useRenderer(Vo()),g.setRendererEnabled(`boll`,!1),g.useRenderer(js()),g.useRenderer(Fs()),g.useRenderer(Zi()),g.useRenderer(Vs({axisWidth:n.rightAxisWidth,yPaddingPx:n.yPaddingPx})),g.useRenderer(zo({yPaddingPx:n.yPaddingPx,showMA:{ma5:!0,ma10:!0,ma20:!0,ma30:!0,ma60:!0}})),g.useRenderer(Uo({yPaddingPx:n.yPaddingPx})),g.setRendererEnabled(`bollLegend`,!1),g.useRenderer(Ws({getCrosshairState:()=>({pos:g.interaction.crosshairPos,activePaneId:g.interaction.activePaneId,isDragging:g.interaction.isDraggingState()})})),g.useRenderer(Us({height:n.bottomAxisHeight,getCrosshair:()=>{let e=g.interaction.crosshairPos,t=g.interaction.hoveredIndex;return e&&t!==null?{x:e.x,index:t}:null}})),g.useRenderer(Ks({getPaneInfos:()=>g.getPaneRenderers().map(e=>({top:e.getPane().top,height:e.getPane().height}))})),c.value=g,g.resize(),l.value=new Si(g),l.value.on(`config:error`,e=>{console.error(`Semantic config error:`,e)}),l.value.on(`config:ready`,()=>{u.value=g.getData()?.length??0,oe(),(0,f.nextTick)(()=>fe())}),l.value.applyConfig(n.semanticConfig).then(e=>{e&&!e.success&&console.error(`Semantic config apply failed:`,e.errors)}),g.interaction.setOnMarkerHover(e=>{m.value=e,d()}),g.interaction.setOnCustomMarkerHover(e=>{h.value=e,d()});let _=null,v=new ResizeObserver(()=>{_&&clearTimeout(_),_=setTimeout(()=>{g.resize(),_=null},50)});v.observe(e),g.__resizeObserver=v,g.__resizeTimeout=_}),(0,f.onUnmounted)(()=>{let e=c.value;if(e){let t=e.__resizeObserver,n=e.__resizeTimeout;n&&clearTimeout(n),t&&t.disconnect();let r=e.__onWheel,i=a.value;r&&i&&i.removeEventListener(`wheel`,r),e.destroy()}c.value=null}),(0,f.watch)(()=>[n.kWidth,n.kGap],([e,t])=>{typeof e==`number`&&(o.value=e),typeof t==`number`&&(s.value=t),c.value?.updateOptions({kWidth:o.value,kGap:s.value})}),(0,f.watch)(()=>n.yPaddingPx,e=>{c.value?.updateOptions({yPaddingPx:e}),d()}),(0,f.watch)(()=>n.semanticConfig,async(e,t)=>{if(e&&e!==t){let t=await l.value?.applyConfig(e);t&&!t.success&&console.error(`Semantic config apply failed:`,t.errors)}},{deep:!0}),(e,t)=>((0,f.openBlock)(),(0,f.createElementBlock)(`div`,Js,[(0,f.createElementVNode)(`div`,{class:(0,f.normalizeClass)([`chart-container`,{"is-dragging":_.value}]),ref_key:`containerRef`,ref:a,onScrollPassive:te,onMousedown:E,onMousemove:O,onMouseup:A,onMouseleave:M,onPointerdown:D,onPointermove:k,onPointerup:j,onPointerleave:ee},[(0,f.createElementVNode)(`div`,{class:`scroll-content`,style:(0,f.normalizeStyle)({width:de.value+`px`})},[(0,f.createElementVNode)(`div`,{class:`canvas-layer`,ref_key:`canvasLayerRef`,ref:i},[(0,f.createElementVNode)(`canvas`,{class:`x-axis-canvas`,ref_key:`xAxisCanvasRef`,ref:r},null,512),x.value?((0,f.openBlock)(),(0,f.createBlock)(Ua,{key:0,k:x.value,index:S.value,data:w.value,pos:C.value,"set-el":p},null,8,[`k`,`index`,`data`,`pos`])):(0,f.createCommentVNode)(``,!0),m.value||h.value?((0,f.openBlock)(),(0,f.createBlock)(Ja,{key:1,marker:m.value||h.value,pos:g.value},null,8,[`marker`,`pos`])):(0,f.createCommentVNode)(``,!0)],512)],4)],34),(0,f.createVNode)(yo,{"active-indicators":N.value,"indicator-params":P.value,onToggle:le,onUpdateParams:ue},null,8,[`active-indicators`,`indicator-params`])]))}}),[[`__scopeId`,`data-v-8c9105eb`]]),Zs={install(e){e.component(`KLineChart`,Xs)}};exports.ConfigManager=Hi,exports.EventBus=p,exports.GLOBAL_PANE_ID=zi,exports.HookSystem=Vi,exports.KLineChart=Xs,exports.KMapPlugin=Zs,exports.PluginHostImpl=Ui,exports.PluginRegistry=Bi,exports.PluginState=Li,exports.RENDERER_PRIORITY=K,exports.RendererPluginManager=Ki,exports.createPluginHost=Wi,exports.wrapPaneInfo=Ri;
16
+ deps: ${r}}`};var i={keyword:`dependencies`,type:`object`,schemaType:`object`,error:e.error,code(e){let[t,n]=a(e);o(e,t),s(e,n)}};function a({schema:e}){let t={},n={};for(let r in e){if(r===`__proto__`)continue;let i=Array.isArray(e[r])?t:n;i[r]=e[r]}return[t,n]}function o(e,n=e.schema){let{gen:i,data:a,it:o}=e;if(Object.keys(n).length===0)return;let s=i.let(`missing`);for(let c in n){let l=n[c];if(l.length===0)continue;let u=(0,r.propertyInData)(i,a,c,o.opts.ownProperties);e.setParams({property:c,depsCount:l.length,deps:l.join(`, `)}),o.allErrors?i.if(u,()=>{for(let t of l)(0,r.checkReportMissingProp)(e,t)}):(i.if((0,t._)`${u} && (${(0,r.checkMissingProp)(e,l,s)})`),(0,r.reportMissingProp)(e,s),i.else())}}e.validatePropertyDeps=o;function s(e,t=e.schema){let{gen:i,data:a,keyword:o,it:s}=e,c=i.name(`valid`);for(let l in t)(0,n.alwaysValidSchema)(s,t[l])||(i.if((0,r.propertyInData)(i,a,l,s.opts.ownProperties),()=>{let t=e.subschema({keyword:o,schemaProp:l},c);e.mergeValidEvaluated(t,c)},()=>i.var(c,!0)),e.ok(c))}e.validateSchemaDeps=s,e.default=i})),Hr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U(),n=W();e.default={keyword:`propertyNames`,type:`object`,schemaType:[`object`,`boolean`],error:{message:`property name must be valid`,params:({params:e})=>(0,t._)`{propertyName: ${e.propertyName}}`},code(e){let{gen:r,schema:i,data:a,it:o}=e;if((0,n.alwaysValidSchema)(o,i))return;let s=r.name(`valid`);r.forIn(`key`,a,n=>{e.setParams({propertyName:n}),e.subschema({keyword:`propertyNames`,data:n,dataTypes:[`string`],propertyName:n,compositeRule:!0},s),r.if((0,t.not)(s),()=>{e.error(!0),o.allErrors||r.break()})}),e.ok(s)}}})),Ur=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=G(),n=U(),r=Gn(),i=W();e.default={keyword:`additionalProperties`,type:[`object`],schemaType:[`boolean`,`object`],allowUndefined:!0,trackErrors:!0,error:{message:`must NOT have additional properties`,params:({params:e})=>(0,n._)`{additionalProperty: ${e.additionalProperty}}`},code(e){let{gen:a,schema:o,parentSchema:s,data:c,errsCount:l,it:u}=e;if(!l)throw Error(`ajv implementation error`);let{allErrors:d,opts:f}=u;if(u.props=!0,f.removeAdditional!==`all`&&(0,i.alwaysValidSchema)(u,o))return;let p=(0,t.allSchemaProperties)(s.properties),m=(0,t.allSchemaProperties)(s.patternProperties);h(),e.ok((0,n._)`${l} === ${r.default.errors}`);function h(){a.forIn(`key`,c,e=>{!p.length&&!m.length?v(e):a.if(g(e),()=>v(e))})}function g(r){let o;if(p.length>8){let e=(0,i.schemaRefOrVal)(u,s.properties,`properties`);o=(0,t.isOwnProperty)(a,e,r)}else o=p.length?(0,n.or)(...p.map(e=>(0,n._)`${r} === ${e}`)):n.nil;return m.length&&(o=(0,n.or)(o,...m.map(i=>(0,n._)`${(0,t.usePattern)(e,i)}.test(${r})`))),(0,n.not)(o)}function _(e){a.code((0,n._)`delete ${c}[${e}]`)}function v(t){if(f.removeAdditional===`all`||f.removeAdditional&&o===!1){_(t);return}if(o===!1){e.setParams({additionalProperty:t}),e.error(),d||a.break();return}if(typeof o==`object`&&!(0,i.alwaysValidSchema)(u,o)){let r=a.name(`valid`);f.removeAdditional===`failing`?(y(t,r,!1),a.if((0,n.not)(r),()=>{e.reset(),_(t)})):(y(t,r),d||a.if((0,n.not)(r),()=>a.break()))}}function y(t,n,r){let a={keyword:`additionalProperties`,dataProp:t,dataPropType:i.Type.Str};r===!1&&Object.assign(a,{compositeRule:!0,createErrors:!1,allErrors:!1}),e.subschema(a,n)}}}})),Wr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=rr(),n=G(),r=W(),i=Ur();e.default={keyword:`properties`,type:`object`,schemaType:`object`,code(e){let{gen:a,schema:o,parentSchema:s,data:c,it:l}=e;l.opts.removeAdditional===`all`&&s.additionalProperties===void 0&&i.default.code(new t.KeywordCxt(l,i.default,`additionalProperties`));let u=(0,n.allSchemaProperties)(o);for(let e of u)l.definedProperties.add(e);l.opts.unevaluated&&u.length&&l.props!==!0&&(l.props=r.mergeEvaluated.props(a,(0,r.toHash)(u),l.props));let d=u.filter(e=>!(0,r.alwaysValidSchema)(l,o[e]));if(d.length===0)return;let f=a.name(`valid`);for(let t of d)p(t)?m(t):(a.if((0,n.propertyInData)(a,c,t,l.opts.ownProperties)),m(t),l.allErrors||a.else().var(f,!0),a.endIf()),e.it.definedProperties.add(t),e.ok(f);function p(e){return l.opts.useDefaults&&!l.compositeRule&&o[e].default!==void 0}function m(t){e.subschema({keyword:`properties`,schemaProp:t,dataProp:t},f)}}}})),Gr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=G(),n=U(),r=W(),i=W();e.default={keyword:`patternProperties`,type:`object`,schemaType:`object`,code(e){let{gen:a,schema:o,data:s,parentSchema:c,it:l}=e,{opts:u}=l,d=(0,t.allSchemaProperties)(o),f=d.filter(e=>(0,r.alwaysValidSchema)(l,o[e]));if(d.length===0||f.length===d.length&&(!l.opts.unevaluated||l.props===!0))return;let p=u.strictSchema&&!u.allowMatchingProperties&&c.properties,m=a.name(`valid`);l.props!==!0&&!(l.props instanceof n.Name)&&(l.props=(0,i.evaluatedPropsToName)(a,l.props));let{props:h}=l;g();function g(){for(let e of d)p&&_(e),l.allErrors?v(e):(a.var(m,!0),v(e),a.if(m))}function _(e){for(let t in p)new RegExp(e).test(t)&&(0,r.checkStrictMode)(l,`property ${t} matches pattern ${e} (use allowMatchingProperties)`)}function v(r){a.forIn(`key`,s,o=>{a.if((0,n._)`${(0,t.usePattern)(e,r)}.test(${o})`,()=>{let t=f.includes(r);t||e.subschema({keyword:`patternProperties`,schemaProp:r,dataProp:o,dataPropType:i.Type.Str},m),l.opts.unevaluated&&h!==!0?a.assign((0,n._)`${h}[${o}]`,!0):!t&&!l.allErrors&&a.if((0,n.not)(m),()=>a.break())})})}}}})),Kr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=W();e.default={keyword:`not`,schemaType:[`object`,`boolean`],trackErrors:!0,code(e){let{gen:n,schema:r,it:i}=e;if((0,t.alwaysValidSchema)(i,r)){e.fail();return}let a=n.name(`valid`);e.subschema({keyword:`not`,compositeRule:!0,createErrors:!1,allErrors:!1},a),e.failResult(a,()=>e.reset(),()=>e.error())},error:{message:`must NOT be valid`}}})),qr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default={keyword:`anyOf`,schemaType:`array`,trackErrors:!0,code:G().validateUnion,error:{message:`must match a schema in anyOf`}}})),Jr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U(),n=W();e.default={keyword:`oneOf`,schemaType:`array`,trackErrors:!0,error:{message:`must match exactly one schema in oneOf`,params:({params:e})=>(0,t._)`{passingSchemas: ${e.passing}}`},code(e){let{gen:r,schema:i,parentSchema:a,it:o}=e;if(!Array.isArray(i))throw Error(`ajv implementation error`);if(o.opts.discriminator&&a.discriminator)return;let s=i,c=r.let(`valid`,!1),l=r.let(`passing`,null),u=r.name(`_valid`);e.setParams({passing:l}),r.block(d),e.result(c,()=>e.reset(),()=>e.error(!0));function d(){s.forEach((i,a)=>{let s;(0,n.alwaysValidSchema)(o,i)?r.var(u,!0):s=e.subschema({keyword:`oneOf`,schemaProp:a,compositeRule:!0},u),a>0&&r.if((0,t._)`${u} && ${c}`).assign(c,!1).assign(l,(0,t._)`[${l}, ${a}]`).else(),r.if(u,()=>{r.assign(c,!0),r.assign(l,a),s&&e.mergeEvaluated(s,t.Name)})})}}}})),Yr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=W();e.default={keyword:`allOf`,schemaType:`array`,code(e){let{gen:n,schema:r,it:i}=e;if(!Array.isArray(r))throw Error(`ajv implementation error`);let a=n.name(`valid`);r.forEach((n,r)=>{if((0,t.alwaysValidSchema)(i,n))return;let o=e.subschema({keyword:`allOf`,schemaProp:r},a);e.ok(a),e.mergeEvaluated(o)})}}})),Xr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U(),n=W(),r={keyword:`if`,schemaType:[`object`,`boolean`],trackErrors:!0,error:{message:({params:e})=>(0,t.str)`must match "${e.ifClause}" schema`,params:({params:e})=>(0,t._)`{failingKeyword: ${e.ifClause}}`},code(e){let{gen:r,parentSchema:a,it:o}=e;a.then===void 0&&a.else===void 0&&(0,n.checkStrictMode)(o,`"if" without "then" and "else" is ignored`);let s=i(o,`then`),c=i(o,`else`);if(!s&&!c)return;let l=r.let(`valid`,!0),u=r.name(`_valid`);if(d(),e.reset(),s&&c){let t=r.let(`ifClause`);e.setParams({ifClause:t}),r.if(u,f(`then`,t),f(`else`,t))}else s?r.if(u,f(`then`)):r.if((0,t.not)(u),f(`else`));e.pass(l,()=>e.error(!0));function d(){let t=e.subschema({keyword:`if`,compositeRule:!0,createErrors:!1,allErrors:!1},u);e.mergeEvaluated(t)}function f(n,i){return()=>{let a=e.subschema({keyword:n},u);r.assign(l,u),e.mergeValidEvaluated(a,l),i?r.assign(i,(0,t._)`${n}`):e.setParams({ifClause:n})}}}};function i(e,t){let r=e.schema[t];return r!==void 0&&!(0,n.alwaysValidSchema)(e,r)}e.default=r})),Zr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=W();e.default={keyword:[`then`,`else`],schemaType:[`object`,`boolean`],code({keyword:e,parentSchema:n,it:r}){n.if===void 0&&(0,t.checkStrictMode)(r,`"${e}" without "if" is ignored`)}}})),Qr=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=Ir(),n=Rr(),r=Lr(),i=zr(),a=Br(),o=Vr(),s=Hr(),c=Ur(),l=Wr(),u=Gr(),d=Kr(),f=qr(),p=Jr(),m=Yr(),h=Xr(),g=Zr();function _(e=!1){let _=[d.default,f.default,p.default,m.default,h.default,g.default,s.default,c.default,o.default,l.default,u.default];return e?_.push(n.default,i.default):_.push(t.default,r.default),_.push(a.default),_}e.default=_})),$r=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U();e.default={keyword:`format`,type:[`number`,`string`],schemaType:`string`,$data:!0,error:{message:({schemaCode:e})=>(0,t.str)`must match format "${e}"`,params:({schemaCode:e})=>(0,t._)`{format: ${e}}`},code(e,n){let{gen:r,data:i,$data:a,schema:o,schemaCode:s,it:c}=e,{opts:l,errSchemaPath:u,schemaEnv:d,self:f}=c;if(!l.validateFormats)return;a?p():m();function p(){let a=r.scopeValue(`formats`,{ref:f.formats,code:l.code.formats}),o=r.const(`fDef`,(0,t._)`${a}[${s}]`),c=r.let(`fType`),u=r.let(`format`);r.if((0,t._)`typeof ${o} == "object" && !(${o} instanceof RegExp)`,()=>r.assign(c,(0,t._)`${o}.type || "string"`).assign(u,(0,t._)`${o}.validate`),()=>r.assign(c,(0,t._)`"string"`).assign(u,o)),e.fail$data((0,t.or)(p(),m()));function p(){return l.strictSchema===!1?t.nil:(0,t._)`${s} && !${u}`}function m(){let e=d.$async?(0,t._)`(${o}.async ? await ${u}(${i}) : ${u}(${i}))`:(0,t._)`${u}(${i})`,r=(0,t._)`(typeof ${u} == "function" ? ${e} : ${u}.test(${i}))`;return(0,t._)`${u} && ${u} !== true && ${c} === ${n} && !${r}`}}function m(){let a=f.formats[o];if(!a){m();return}if(a===!0)return;let[s,c,p]=h(a);s===n&&e.pass(g());function m(){if(l.strictSchema===!1){f.logger.warn(e());return}throw Error(e());function e(){return`unknown format "${o}" ignored in schema at path "${u}"`}}function h(e){let n=e instanceof RegExp?(0,t.regexpCode)(e):l.code.formats?(0,t._)`${l.code.formats}${(0,t.getProperty)(o)}`:void 0,i=r.scopeValue(`formats`,{key:o,ref:e,code:n});return typeof e==`object`&&!(e instanceof RegExp)?[e.type||`string`,e.validate,(0,t._)`${i}.validate`]:[`string`,e,i]}function g(){if(typeof a==`object`&&!(a instanceof RegExp)&&a.async){if(!d.$async)throw Error(`async format in sync schema`);return(0,t._)`await ${p}(${i})`}return typeof c==`function`?(0,t._)`${p}(${i})`:(0,t._)`${p}.test(${i})`}}}}})),ei=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default=[$r().default]})),ti=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.contentVocabulary=e.metadataVocabulary=void 0,e.metadataVocabulary=[`title`,`description`,`default`,`deprecated`,`readOnly`,`writeOnly`,`examples`],e.contentVocabulary=[`contentMediaType`,`contentEncoding`,`contentSchema`]})),ni=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=Sr(),n=Fr(),r=Qr(),i=ei(),a=ti();e.default=[t.default,n.default,(0,r.default)(),i.default,a.metadataVocabulary,a.contentVocabulary]})),ri=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.DiscrError=void 0;var t;(function(e){e.Tag=`tag`,e.Mapping=`mapping`})(t||(e.DiscrError=t={}))})),ii=s((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=U(),n=ri(),r=or(),i=ar(),a=W();e.default={keyword:`discriminator`,type:`object`,schemaType:`object`,error:{message:({params:{discrError:e,tagName:t}})=>e===n.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:n,tagName:r}})=>(0,t._)`{error: ${e}, tag: ${r}, tagValue: ${n}}`},code(e){let{gen:o,data:s,schema:c,parentSchema:l,it:u}=e,{oneOf:d}=l;if(!u.opts.discriminator)throw Error(`discriminator: requires discriminator option`);let f=c.propertyName;if(typeof f!=`string`)throw Error(`discriminator: requires propertyName`);if(c.mapping)throw Error(`discriminator: mapping is not supported`);if(!d)throw Error(`discriminator: requires oneOf keyword`);let p=o.let(`valid`,!1),m=o.const(`tag`,(0,t._)`${s}${(0,t.getProperty)(f)}`);o.if((0,t._)`typeof ${m} == "string"`,()=>h(),()=>e.error(!1,{discrError:n.DiscrError.Tag,tag:m,tagName:f})),e.ok(p);function h(){let r=_();o.if(!1);for(let e in r)o.elseIf((0,t._)`${m} === ${e}`),o.assign(p,g(r[e]));o.else(),e.error(!1,{discrError:n.DiscrError.Mapping,tag:m,tagName:f}),o.endIf()}function g(n){let r=o.name(`valid`),i=e.subschema({keyword:`oneOf`,schemaProp:n},r);return e.mergeEvaluated(i,t.Name),r}function _(){let e={},t=o(l),n=!0;for(let e=0;e<d.length;e++){let c=d[e];if(c?.$ref&&!(0,a.schemaHasRulesButRef)(c,u.self.RULES)){let e=c.$ref;if(c=r.resolveRef.call(u.self,u.schemaEnv.root,u.baseId,e),c instanceof r.SchemaEnv&&(c=c.schema),c===void 0)throw new i.default(u.opts.uriResolver,u.baseId,e)}let l=c?.properties?.[f];if(typeof l!=`object`)throw Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${f}"`);n&&=t||o(c),s(l,e)}if(!n)throw Error(`discriminator: "${f}" must be required`);return e;function o({required:e}){return Array.isArray(e)&&e.includes(f)}function s(e,t){if(e.const)c(e.const,t);else if(e.enum)for(let n of e.enum)c(n,t);else throw Error(`discriminator: "properties/${f}" must have "const" or "enum"`)}function c(t,n){if(typeof t!=`string`||t in e)throw Error(`discriminator: "${f}" values must be unique strings`);e[t]=n}}}}})),ai=c({$id:()=>si,$schema:()=>oi,default:()=>fi,definitions:()=>li,properties:()=>di,title:()=>ci,type:()=>ui}),oi,si,ci,li,ui,di,fi,pi=o((()=>{oi=`http://json-schema.org/draft-07/schema#`,si=`http://json-schema.org/draft-07/schema#`,ci=`Core schema meta-schema`,li={schemaArray:{type:`array`,minItems:1,items:{$ref:`#`}},nonNegativeInteger:{type:`integer`,minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:`#/definitions/nonNegativeInteger`},{default:0}]},simpleTypes:{enum:[`array`,`boolean`,`integer`,`null`,`number`,`object`,`string`]},stringArray:{type:`array`,items:{type:`string`},uniqueItems:!0,default:[]}},ui=[`object`,`boolean`],di={$id:{type:`string`,format:`uri-reference`},$schema:{type:`string`,format:`uri`},$ref:{type:`string`,format:`uri-reference`},$comment:{type:`string`},title:{type:`string`},description:{type:`string`},default:!0,readOnly:{type:`boolean`,default:!1},examples:{type:`array`,items:!0},multipleOf:{type:`number`,exclusiveMinimum:0},maximum:{type:`number`},exclusiveMaximum:{type:`number`},minimum:{type:`number`},exclusiveMinimum:{type:`number`},maxLength:{$ref:`#/definitions/nonNegativeInteger`},minLength:{$ref:`#/definitions/nonNegativeIntegerDefault0`},pattern:{type:`string`,format:`regex`},additionalItems:{$ref:`#`},items:{anyOf:[{$ref:`#`},{$ref:`#/definitions/schemaArray`}],default:!0},maxItems:{$ref:`#/definitions/nonNegativeInteger`},minItems:{$ref:`#/definitions/nonNegativeIntegerDefault0`},uniqueItems:{type:`boolean`,default:!1},contains:{$ref:`#`},maxProperties:{$ref:`#/definitions/nonNegativeInteger`},minProperties:{$ref:`#/definitions/nonNegativeIntegerDefault0`},required:{$ref:`#/definitions/stringArray`},additionalProperties:{$ref:`#`},definitions:{type:`object`,additionalProperties:{$ref:`#`},default:{}},properties:{type:`object`,additionalProperties:{$ref:`#`},default:{}},patternProperties:{type:`object`,additionalProperties:{$ref:`#`},propertyNames:{format:`regex`},default:{}},dependencies:{type:`object`,additionalProperties:{anyOf:[{$ref:`#`},{$ref:`#/definitions/stringArray`}]}},propertyNames:{$ref:`#`},const:!0,enum:{type:`array`,items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:`#/definitions/simpleTypes`},{type:`array`,items:{$ref:`#/definitions/simpleTypes`},minItems:1,uniqueItems:!0}]},format:{type:`string`},contentMediaType:{type:`string`},contentEncoding:{type:`string`},if:{$ref:`#`},then:{$ref:`#`},else:{$ref:`#`},allOf:{$ref:`#/definitions/schemaArray`},anyOf:{$ref:`#/definitions/schemaArray`},oneOf:{$ref:`#/definitions/schemaArray`},not:{$ref:`#`}},fi={$schema:oi,$id:si,title:ci,definitions:li,type:ui,properties:di,default:!0}})),mi=u(s(((e,t)=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.MissingRefError=e.ValidationError=e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=e.Ajv=void 0;var n=yr(),r=ni(),i=ii(),a=(pi(),d(ai).default),o=[`/properties`],s=`http://json-schema.org/draft-07/schema`,c=class extends n.default{_addVocabularies(){super._addVocabularies(),r.default.forEach(e=>this.addVocabulary(e)),this.opts.discriminator&&this.addKeyword(i.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(a,o):a;this.addMetaSchema(e,s,!1),this.refs[`http://json-schema.org/schema`]=s}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(s)?s:void 0)}};e.Ajv=c,t.exports=e=c,t.exports.Ajv=c,Object.defineProperty(e,`__esModule`,{value:!0}),e.default=c;var l=rr();Object.defineProperty(e,`KeywordCxt`,{enumerable:!0,get:function(){return l.KeywordCxt}});var u=U();Object.defineProperty(e,`_`,{enumerable:!0,get:function(){return u._}}),Object.defineProperty(e,`str`,{enumerable:!0,get:function(){return u.str}}),Object.defineProperty(e,`stringify`,{enumerable:!0,get:function(){return u.stringify}}),Object.defineProperty(e,`nil`,{enumerable:!0,get:function(){return u.nil}}),Object.defineProperty(e,`Name`,{enumerable:!0,get:function(){return u.Name}}),Object.defineProperty(e,`CodeGen`,{enumerable:!0,get:function(){return u.CodeGen}});var f=ir();Object.defineProperty(e,`ValidationError`,{enumerable:!0,get:function(){return f.default}});var p=ar();Object.defineProperty(e,`MissingRefError`,{enumerable:!0,get:function(){return p.default}})}))(),1),hi={$schema:`http://json-schema.org/draft-07/schema#`,$id:`https://kmap.dev/schemas/semantic-chart-config/1.0.0`,title:`SemanticChartConfig`,description:`Agent 语义化图表配置`,type:`object`,required:[`version`,`data`],additionalProperties:!1,properties:{version:{type:`string`,pattern:`^[0-9]+\\.[0-9]+\\.[0-9]+$`,description:`semver 版本号`},data:{$ref:`#/$defs/DataConfig`},indicators:{$ref:`#/$defs/IndicatorsConfig`},markers:{$ref:`#/$defs/MarkersConfig`},chart:{$ref:`#/$defs/ChartOptions`},theme:{$ref:`#/$defs/ThemeConfig`}},$defs:{DataConfig:{type:`object`,required:[`source`,`symbol`,`startDate`,`endDate`,`period`,`adjust`],additionalProperties:!1,properties:{source:{type:`string`,enum:[`baostock`,`dongcai`]},symbol:{type:`string`,pattern:`^[0-9]{6}$`},exchange:{type:`string`,enum:[`SH`,`SZ`,`BJ`]},startDate:{type:`string`,format:`date`},endDate:{type:`string`,format:`date`},period:{type:`string`,enum:[`daily`,`weekly`,`monthly`,`5min`,`15min`,`30min`,`60min`]},adjust:{type:`string`,enum:[`qfq`,`hfq`,`none`]}}},IndicatorsConfig:{type:`object`,additionalProperties:!1,properties:{main:{type:`array`,items:{$ref:`#/$defs/MainIndicatorConfig`},maxItems:5},sub:{type:`array`,items:{$ref:`#/$defs/SubIndicatorConfig`},maxItems:5}}},MainIndicatorConfig:{type:`object`,required:[`type`,`enabled`],additionalProperties:!1,properties:{type:{type:`string`,enum:[`MA`,`BOLL`]},enabled:{type:`boolean`},params:{type:`object`}},allOf:[{if:{properties:{type:{const:`MA`}},required:[`type`]},then:{properties:{params:{type:`object`,additionalProperties:!1,properties:{periods:{type:`array`,items:{type:`integer`,minimum:1,maximum:250},minItems:1,maxItems:5}}}}},else:{properties:{params:{type:`object`,additionalProperties:!1,properties:{period:{type:`integer`,minimum:1,maximum:100},multiplier:{type:`number`,minimum:.1,maximum:5}}}}}}]},SubIndicatorConfig:{type:`object`,required:[`type`,`enabled`],additionalProperties:!1,properties:{type:{type:`string`,enum:[`VOLUME`,`MACD`,`RSI`,`CCI`,`STOCH`,`MOM`,`WMSR`,`KST`,`FASTK`]},enabled:{type:`boolean`},params:{type:`object`}},allOf:[{if:{properties:{type:{const:`MACD`}}},then:{properties:{params:{type:`object`,additionalProperties:!1,properties:{fast:{type:`integer`,minimum:1,maximum:50},slow:{type:`integer`,minimum:1,maximum:100},signal:{type:`integer`,minimum:1,maximum:50}}}}}},{if:{properties:{type:{const:`RSI`}}},then:{properties:{params:{type:`object`,additionalProperties:!1,properties:{period1:{type:`integer`,minimum:1,maximum:100},period2:{type:`integer`,minimum:1,maximum:100},period3:{type:`integer`,minimum:1,maximum:100}}}}}}]},MarkersConfig:{type:`object`,additionalProperties:!1,properties:{showVolumePriceMarkers:{type:`boolean`},showExtremaMarkers:{type:`boolean`},customMarkers:{type:`array`,items:{$ref:`#/$defs/CustomMarker`},maxItems:100},legend:{$ref:`#/$defs/LegendConfig`}}},CustomMarker:{type:`object`,required:[`id`,`date`,`shape`],additionalProperties:!1,properties:{id:{type:`string`,maxLength:64},date:{type:`string`,description:`日期时间字符串,日K用 YYYY-MM-DD,分钟K用 YYYY-MM-DD HH:mm`,pattern:`^[0-9]{4}-[0-9]{2}-[0-9]{2}( [0-9]{2}:[0-9]{2})?$`},shape:{type:`string`,enum:[`arrow_up`,`arrow_down`,`flag`,`circle`,`rectangle`,`diamond`]},groupKey:{type:`string`,maxLength:32},offset:{type:`object`,additionalProperties:!1,properties:{x:{type:`number`,minimum:-500,maximum:500},y:{type:`number`,minimum:-500,maximum:500}}},style:{$ref:`#/$defs/MarkerStyle`},label:{$ref:`#/$defs/MarkerLabel`},metadata:{type:`object`,maxProperties:20,additionalProperties:{type:[`string`,`number`,`boolean`,`null`],maxLength:200}}}},MarkerStyle:{type:`object`,additionalProperties:!1,properties:{fillColor:{type:`string`,pattern:`^(#[0-9a-fA-F]{3,8}|rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)|rgba\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*[\\d.]+\\s*\\))$`},strokeColor:{type:`string`,pattern:`^(#[0-9a-fA-F]{3,8}|rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)|rgba\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*[\\d.]+\\s*\\))$`},textColor:{type:`string`,pattern:`^(#[0-9a-fA-F]{3,8}|rgb\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*\\)|rgba\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*\\d{1,3}\\s*,\\s*[\\d.]+\\s*\\))$`},size:{type:`number`,minimum:4,maximum:50},lineWidth:{type:`number`,minimum:.5,maximum:10},opacity:{type:`number`,minimum:0,maximum:1}}},MarkerLabel:{type:`object`,required:[`text`],additionalProperties:!1,properties:{text:{type:`string`,maxLength:50},position:{type:`string`,enum:[`left`,`right`,`top`,`bottom`,`inside`]},align:{type:`string`,enum:[`start`,`center`,`end`]},fontSize:{type:`number`,minimum:8,maximum:24},offset:{type:`object`,additionalProperties:!1,properties:{x:{type:`number`,minimum:-500,maximum:500},y:{type:`number`,minimum:-500,maximum:500}}}}},LegendConfig:{type:`object`,additionalProperties:!1,properties:{enabled:{type:`boolean`},position:{type:`string`,enum:[`bottom-right`,`bottom-left`,`top-right`,`top-left`]},onClick:{type:`string`,enum:[`highlight`,`toggle`,`none`]}}},ChartOptions:{type:`object`,additionalProperties:!1,properties:{kWidth:{type:`number`,minimum:2,maximum:50},kGap:{type:`number`,minimum:0,maximum:20},autoScrollToRight:{type:`boolean`}}},ThemeConfig:{type:`object`,additionalProperties:!1,properties:{priceUpColor:{type:`string`,pattern:`^#[0-9a-fA-F]{6}$`},priceDownColor:{type:`string`,pattern:`^#[0-9a-fA-F]{6}$`}}}}},gi=[`__proto__`,`constructor`,`prototype`],_i=/^(#[0-9a-fA-F]{3,8}|rgb\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*\)|rgba\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*[\d.]+\s*\))$/,vi={SH:/^(600|601|603|605|688)\d{3}$/,SZ:/^(000|001|002|003|300|301)\d{3}$/,BJ:/^(83|87|43|82)\d{4}$/};function yi(e){return{"5min":30,"15min":60,"30min":90,"60min":180,daily:365*3,weekly:365*5,monthly:365*10}[e]??365}var bi=(typeof document<`u`?document.createElement(`canvas`):null)?.getContext(`2d`)??null,xi=class e{ajv;limits;constructor(){this.ajv=new mi.default({allErrors:!0,allowUnionTypes:!0}),this.ajv.addFormat(`date`,{type:`string`,validate:e=>/^\d{4}-\d{2}-\d{2}$/.test(e)}),this.ajv.addSchema(hi),this.limits={maxJsonSize:64*1024,maxIndicators:10,maxCustomMarkers:100}}validateRawInput(e){return(typeof TextEncoder<`u`?new TextEncoder().encode(e).byteLength:e.length*3)>this.limits.maxJsonSize?{valid:!1,errors:[`JSON payload too large (max 64KB)`]}:{valid:!0}}validate(e){if(!e||typeof e!=`object`)return{valid:!1,errors:[`Config must be an object`]};let t=this.checkPrototypePollution(e);return t.valid?this.ajv.validate(`https://kmap.dev/schemas/semantic-chart-config/1.0.0`,e)?{valid:!0}:{valid:!1,errors:this.ajv.errors?.map(e=>`${e.instancePath} ${e.message}`)||[`Schema validation failed`]}:t}securityCheck(e){let t=[],n=this.checkDateRange(e.data);n.valid||t.push(...n.errors||[]);let r=this.checkSymbol(e.data);if(r.valid||t.push(...r.errors||[]),e.indicators&&(e.indicators.main?.length||0)+(e.indicators.sub?.length||0)>this.limits.maxIndicators&&t.push(`Too many indicators (max ${this.limits.maxIndicators})`),(e.markers?.customMarkers?.length||0)>this.limits.maxCustomMarkers&&t.push(`Too many custom markers (max ${this.limits.maxCustomMarkers})`),e.markers?.customMarkers)for(let n of e.markers.customMarkers){if(n.style){let e=this.checkMarkerStyle(n.style,n.id);t.push(...e)}let e=this.checkMarkerDate(n.date,n.id);t.push(...e)}return{passed:t.length===0,violations:t.length>0?t:void 0}}checkPrototypePollution(e,t=``){if(!e||typeof e!=`object`)return{valid:!0};let n=[];for(let r of Object.keys(e))gi.includes(r)&&n.push(`Forbidden key "${r}" found at ${t}`);return n.length>0?{valid:!1,errors:n}:{valid:!0}}checkDateRange(e){let t=[],n=new Date(e.startDate),r=new Date(e.endDate);if(isNaN(n.getTime())&&t.push(`Invalid startDate: ${e.startDate}`),isNaN(r.getTime())&&t.push(`Invalid endDate: ${e.endDate}`),t.length>0)return{valid:!1,errors:t};let i=yi(e.period),a=Math.ceil((r.getTime()-n.getTime())/(1e3*60*60*24));return a>i&&t.push(`Date range exceeds maximum for period "${e.period}" (max ${i} days, got ${a})`),a<0&&t.push(`endDate must be after startDate`),t.length>0?{valid:!1,errors:t}:{valid:!0}}checkSymbol(e){let{symbol:t,exchange:n}=e;if(n){if(!vi[n].test(t))return{valid:!1,errors:[`Invalid symbol "${t}" for exchange "${n}"`]}}else if(!Object.values(vi).some(e=>e.test(t)))return{valid:!1,errors:[`Invalid symbol format: "${t}"`]};return{valid:!0}}checkMarkerStyle(e,t){let n=[],r=[`fillColor`,`strokeColor`,`textColor`];for(let i of r){let r=e[i];typeof r==`string`&&!_i.test(r)&&n.push(`Invalid ${i} in marker "${t}": ${r}`)}if(bi)for(let i of r){let r=e[i];typeof r==`string`&&(bi.fillStyle=`#000000`,bi.fillStyle=r,bi.fillStyle===`#000000`&&r!==`#000000`&&!r.startsWith(`#000`)&&n.push(`Potentially unsafe ${i} in marker "${t}": ${r}`))}return n}static DATE_PATTERN=/^\d{4}-\d{2}-\d{2}( \d{2}:\d{2})?$/;checkMarkerDate(t,n){let r=[];if(!e.DATE_PATTERN.test(t))return r.push(`Invalid date format in marker "${n}": ${t} (expected YYYY-MM-DD or YYYY-MM-DD HH:mm)`),r;let i=t.includes(` `),a;if(i)a=new Date(t);else{let[e,n,r]=t.split(`-`).map(Number);a=new Date(Date.UTC(e,n-1,r))}return isNaN(a.getTime())&&r.push(`Invalid date value in marker "${n}": ${t}`),r}},Si=class{chart;validator;events;constructor(e){this.chart=e,this.validator=new xi,this.events=new p}async applyConfig(e){let t=this.validator.validate(e);if(!t.valid)return{success:!1,errors:t.errors};let n=this.validator.securityCheck(e);if(!n.passed)return{success:!1,errors:n.violations};this.events.emit(`config:loading`,void 0);try{return await this.doApplyConfig(e),this.events.emit(`config:ready`,void 0),{success:!0}}catch(e){return this.events.emit(`config:error`,e),{success:!1,errors:[e instanceof Error?e.message:String(e)]}}}on(e,t){this.events.on(e,t)}off(e,t){this.events.off(e,t)}async doApplyConfig(e){console.log(`[Semantic] doApplyConfig start, data config:`,e.data);let t=await Hn(e.data.source,{symbol:e.data.symbol,startDate:e.data.startDate,endDate:e.data.endDate,period:e.data.period,adjust:e.data.adjust});console.log(`[Semantic] fetched data:`,t.length,`items`),this.chart.updateData(t),e.indicators&&(console.log(`[Semantic] applying indicators:`,e.indicators),this.applyIndicators(e.indicators.main,e.indicators.sub)),e.markers&&(console.log(`[Semantic] applying markers:`,e.markers.customMarkers?.length,`markers`),this.applyMarkers(e.markers.customMarkers,e.data.period)),e.chart&&this.applyChartOptions(e.chart),console.log(`[Semantic] doApplyConfig done`)}applyIndicators(e,t){if(e){for(let t of e)if(t.enabled)switch(t.type){case`MA`:this.applyMAIndicator(t);break;case`BOLL`:this.applyBOLLIndicator(t);break}}if(this.chart.clearSubPanes(),t)for(let e of t)this.applySubIndicator(e)}applyMAIndicator(e){let t=e.params?.periods||[5,10,20,30,60],n={};for(let e of t)e===5?n.ma5=!0:e===10?n.ma10=!0:e===20?n.ma20=!0:e===30?n.ma30=!0:e===60&&(n.ma60=!0);console.log(`[Semantic] applyMAIndicator, periods:`,t,`maFlags:`,n),this.chart.updateRendererConfig(`ma`,n)}applyBOLLIndicator(e){let t={period:e.params?.period||20,multiplier:e.params?.multiplier||2};this.chart.updateRendererConfig(`boll`,t),this.chart.setRendererEnabled(`boll`,e.enabled)}applySubIndicator(e){if(!e.enabled)return;let{type:t,params:n}=e;this.chart.createSubPane(t,n)||console.warn(`[Semantic] Failed to create sub pane for ${t}`)}applyMarkers(e,t){if(!e||e.length===0){this.chart.clearCustomMarkers();return}let n=e.map(e=>({id:e.id,date:e.date,timestamp:Ci(e.date,t||`daily`),shape:e.shape,groupKey:e.groupKey,offset:e.offset,style:e.style,label:e.label,metadata:e.metadata}));this.chart.updateCustomMarkers(n)}applyChartOptions(e){e.autoScrollToRight}};function Ci(e,t){if(e.includes(` `)){let[t,n]=e.split(` `),r=t.split(`-`).map(Number),i=r[0],a=r[1],o=r[2],s=n.split(`:`).map(Number),c=s[0],l=s[1];return Date.UTC(i,a-1,o,c-8,l,0,0)}else{let t=e.split(`-`).map(Number),n=t[0],r=t[1],i=t[2];return Date.UTC(n,r-1,i,-8,0,0,0)}}var wi={arrow_up:16,arrow_down:16,flag:14,circle:12,rectangle:14,diamond:12};function Ti(e,t,n,r,i,a){let o=a.fillColor||`#000000`,s=a.strokeColor||o,c=i||wi[t];switch(e.fillStyle=o,e.strokeStyle=s,e.lineWidth=a.lineWidth||1,a.opacity!==void 0&&(e.globalAlpha=a.opacity),t){case`arrow_up`:Ai(e,n,r,c);break;case`arrow_down`:ji(e,n,r,c);break;case`circle`:Mi(e,n,r,c);break;case`rectangle`:Ni(e,n,r,c);break;case`diamond`:Pi(e,n,r,c);break;case`flag`:Fi(e,n,r,c);break}e.globalAlpha=1}var Ei=2.5,Di=4;function Oi(e,t,n,r,i,a,o=!1){let s=t.fontSize||12,c=a.textColor||`#333333`,l=i/2;e.font=`${s}px sans-serif`,e.fillStyle=c,e.textBaseline=`middle`;let u=i*Ei,d=ki(e,t.text,u),f=e.measureText(d).width,p=n,m=r;switch(t.position){case`left`:p=n-l-f/2-Di;break;case`right`:p=n+l+f/2+Di;break;case`top`:m=r-l-s/2-Di;break;case`bottom`:m=r+l+s/2+Di;break;default:m=o?r-l-s/2-Di:r+l+s/2+Di;break}t.offset&&(p+=t.offset.x||0,m+=t.offset.y||0),e.textAlign=t.align||`center`,e.fillText(d,p,m)}function ki(e,t,n){if(e.measureText(t).width<=n)return t;let r=e.measureText(`…`).width,i=0,a=t.length;for(;i<a;){let o=Math.ceil((i+a)/2),s=t.slice(0,o);e.measureText(s).width+r<=n?i=o:a=o-1}return t.slice(0,i)+`…`}function Ai(e,t,n,r){e.beginPath(),e.moveTo(t,n-r/2),e.lineTo(t-r/2,n+r/2),e.lineTo(t+r/2,n+r/2),e.closePath(),e.fill()}function ji(e,t,n,r){e.beginPath(),e.moveTo(t,n+r/2),e.lineTo(t-r/2,n-r/2),e.lineTo(t+r/2,n-r/2),e.closePath(),e.fill()}function Mi(e,t,n,r){e.beginPath(),e.arc(t,n,r/2,0,Math.PI*2),e.fill()}function Ni(e,t,n,r){e.fillRect(t-r/2,n-r/2,r,r)}function Pi(e,t,n,r){e.beginPath(),e.moveTo(t,n-r/2),e.lineTo(t+r/2,n),e.lineTo(t,n+r/2),e.lineTo(t-r/2,n),e.closePath(),e.fill()}function Fi(e,t,n,r){e.beginPath(),e.moveTo(t-r/4,n+r/2),e.lineTo(t-r/4,n-r/2),e.stroke(),e.beginPath(),e.moveTo(t-r/4,n-r/2),e.lineTo(t+r/2,n-r/4),e.lineTo(t-r/4,n),e.closePath(),e.fill()}function Ii(e,t,n,r,i,a){let o=a/2;switch(n){case`circle`:let n=e-r,a=t-i;return n*n+a*a<=o*o;default:return e>=r-o&&e<=r+o&&t>=i-o&&t<=i+o}}var Li=function(e){return e.Registered=`registered`,e.Installed=`installed`,e.Error=`error`,e}({});function Ri(e){return{id:e.id,top:e.top,height:e.height,yAxis:{priceToY:t=>e.yAxis.priceToY(t),yToPrice:t=>e.yAxis.yToPrice(t),getPaddingTop:()=>e.yAxis.getPaddingTop(),getPaddingBottom:()=>e.yAxis.getPaddingBottom()},priceRange:e.priceRange}}var zi=Symbol(`global-pane`),K={SYSTEM_YAXIS:-20,SYSTEM_XAXIS:-20,BACKGROUND:0,GRID:10,INDICATOR:30,MAIN:50,OVERLAY:80,FOREGROUND:100,SYSTEM_BORDER:120,SYSTEM_CROSSHAIR:150},Bi=class{plugins=new Map;register(e,t){if(this.plugins.has(e.name))throw Error(`Plugin "${e.name}" is already registered`);let n={plugin:e,config:{enabled:!0,priority:0,...t},state:`registered`};return this.plugins.set(e.name,n),n}unregister(e){return this.plugins.delete(e)}get(e){return this.plugins.get(e)}getPlugin(e){return this.plugins.get(e)?.plugin}getAll(){return Array.from(this.plugins.values())}getEnabled(){return this.getAll().filter(e=>e.config?.enabled!==!1)}updateState(e,t,n){let r=this.plugins.get(e);r&&(r.state=t,n&&(r.error=n))}has(e){return this.plugins.has(e)}clear(){this.plugins.clear()}},Vi=class{hooks=new Map;tap(e,t,n=0){this.hooks.has(e)||this.hooks.set(e,[]);let r=this.hooks.get(e);r.push({name:e,fn:t,priority:n}),r.sort((e,t)=>e.priority-t.priority)}untap(e,t){let n=this.hooks.get(e);if(n){let e=n.findIndex(e=>e.fn===t);e!==-1&&n.splice(e,1)}}async call(e,t){let n=this.hooks.get(e);if(!n||n.length===0)return[];let r=[];for(let{fn:i}of n)try{let e=await i(t);r.push(e)}catch(t){console.error(`[HookSystem] Error in hook "${e}":`,t)}return r}callSync(e,t){let n=this.hooks.get(e);if(!n||n.length===0)return[];let r=[];for(let{fn:i}of n)try{let e=i(t);r.push(e)}catch(t){console.error(`[HookSystem] Error in hook "${e}":`,t)}return r}clear(){this.hooks.clear()}hookCount(e){return this.hooks.get(e)?.length??0}},Hi=class{configs=new Map;defaults=new Map;registerDefaults(e,t){this.defaults.set(e,{...t}),this.configs.has(e)||this.configs.set(e,new Map);let n=this.configs.get(e);for(let[e,r]of Object.entries(t))n.has(e)||n.set(e,r)}get(e,t,n){let r=this.configs.get(e);if(r?.has(t))return r.get(t);let i=this.defaults.get(e);return i&&t in i?i[t]:n}set(e,t,n){this.configs.has(e)||this.configs.set(e,new Map),this.configs.get(e).set(t,n)}setAll(e,t){for(let[n,r]of Object.entries(t))this.set(e,n,r)}getAll(e){let t=this.configs.get(e);return{...this.defaults.get(e)||{},...t?Object.fromEntries(t):{}}}clear(e){e?this.configs.delete(e):this.configs.clear()}},Ui=class{registry;eventBus;hookSystem;configManager;isDestroyed=!1;constructor(){this.registry=new Bi,this.eventBus=new p,this.hookSystem=new Vi,this.configManager=new Hi}events={on:(e,t)=>{this.eventBus.on(e,t)},off:(e,t)=>{this.eventBus.off(e,t)},emit:(e,t)=>{this.eventBus.emit(e,t)},once:(e,t)=>{this.eventBus.once(e,t)}};hooks={tap:(e,t,n=0)=>{this.hookSystem.tap(e,t,n)},untap:(e,t)=>{this.hookSystem.untap(e,t)},call:async(e,t)=>this.hookSystem.call(e,t),callSync:(e,t)=>this.hookSystem.callSync(e,t)};getConfig(e,t,n){return this.configManager.get(e,t,n)}setConfig(e,t,n){this.configManager.set(e,t,n)}getPlugin(e){return this.registry.getPlugin(e)}log(e,t,...n){let r=`[${new Date().toISOString()}] [${e.toUpperCase()}]`;console[e](`${r} ${t}`,...n)}async use(e,t){if(this.ensureNotDestroyed(),this.registry.has(e.name))throw Error(`Plugin "${e.name}" is already installed`);try{let n=this.registry.register(e,t);t&&this.configManager.setAll(e.name,t),await this.hooks.call(`plugin:beforeInstall`,{plugin:e,config:t}),await e.install(this,n.config),this.registry.updateState(e.name,`installed`),await this.hooks.call(`plugin:afterInstall`,{plugin:e,config:t}),this.log(`info`,`Plugin "${e.name}" installed successfully`)}catch(t){throw this.registry.updateState(e.name,`error`,t instanceof Error?t:Error(String(t))),this.log(`error`,`Failed to install plugin "${e.name}":`,t),t}}async remove(e){this.ensureNotDestroyed();let t=this.registry.get(e);if(!t)throw Error(`Plugin "${e}" is not installed`);try{await this.hooks.call(`plugin:beforeUninstall`,{name:e}),t.plugin.uninstall&&await t.plugin.uninstall(),this.registry.unregister(e),this.configManager.clear(e),await this.hooks.call(`plugin:afterUninstall`,{name:e}),this.log(`info`,`Plugin "${e}" removed successfully`)}catch(t){throw this.log(`error`,`Failed to remove plugin "${e}":`,t),t}}getPlugins(){return this.registry.getAll()}getState(e){return this.registry.get(e)?.state}async destroy(){if(!this.isDestroyed){for(let e of this.registry.getAll())try{e.plugin.uninstall&&await e.plugin.uninstall()}catch(t){this.log(`error`,`Error uninstalling "${e.plugin.name}":`,t)}this.registry.clear(),this.eventBus.clear(),this.hookSystem.clear(),this.configManager.clear(),this.isDestroyed=!0,this.log(`info`,`PluginHost destroyed`)}}ensureNotDestroyed(){if(this.isDestroyed)throw Error(`PluginHost has been destroyed`)}};function Wi(){return new Ui}var Gi=Symbol(`renderer:global-cache`),Ki=class{plugins=new Map;pluginHost=null;enabledState=new Map;groupCache=new Map;mergedCache=new Map;knownPaneIds=new Set([`main`]);cacheInvalid=!0;onInvalidate=null;setInvalidateCallback(e){this.onInvalidate=e}setPluginHost(e){this.pluginHost=e}addKnownPaneId(e){this.knownPaneIds.add(e),this.cacheInvalid=!0}removeKnownPaneId(e){this.knownPaneIds.delete(e),this.cacheInvalid=!0}getKnownPaneIds(){return Array.from(this.knownPaneIds)}register(e){if(this.plugins.has(e.name)){console.warn(`Renderer plugin "${e.name}" already registered`);return}this.plugins.set(e.name,e),e.enabled!==void 0&&this.enabledState.set(e.name,e.enabled),this.cacheInvalid=!0;let t=e;if(t.onInstall&&this.pluginHost)try{t.onInstall(this.pluginHost)}catch(t){console.error(`[RendererPlugin] ${e.name} onInstall error:`,t)}this.onInvalidate?.()}unregister(e){let t=this.plugins.get(e);if(t){if(t.onUninstall)try{t.onUninstall()}catch(e){console.error(`[RendererPlugin] ${t.name} onUninstall error:`,e)}this.plugins.delete(e),this.enabledState.delete(e),this.cacheInvalid=!0,this.onInvalidate?.()}}clear(){for(let e of this.plugins.values())if(e.onUninstall)try{e.onUninstall()}catch(t){console.error(`[RendererPlugin] ${e.name} onUninstall error:`,t)}this.plugins.clear(),this.enabledState.clear(),this.groupCache.clear(),this.mergedCache.clear(),this.cacheInvalid=!1}mergeSorted(e,t){let n=[],r=0,i=0;for(;r<e.length&&i<t.length;)e[r].priority<=t[i].priority?n.push(e[r++]):n.push(t[i++]);return[...n,...e.slice(r),...t.slice(i)]}rebuildCache(){if(!this.cacheInvalid)return;this.groupCache.clear(),this.mergedCache.clear();for(let e of this.plugins.values()){let t=typeof e.paneId==`symbol`?Gi:e.paneId;this.groupCache.has(t)||this.groupCache.set(t,[]),this.groupCache.get(t).push(e)}for(let[,e]of this.groupCache)e.sort((e,t)=>e.priority-t.priority);let e=this.groupCache.get(Gi)??[];for(let t of this.knownPaneIds){let n=this.groupCache.get(t)??[],r=this.mergeSorted(n,e);this.mergedCache.set(t,r)}this.mergedCache.set(Gi,[...e]),this.cacheInvalid=!1}getRenderers(e){this.rebuildCache();let t=this.mergedCache.get(e);return t||(t=this.mergedCache.get(Gi)??[],this.mergedCache.set(e,t)),t.filter(e=>{if(e.isSystem)return!1;let t=this.enabledState.get(e.name);return t===void 0?e.enabled!==!1:t})}render(e,t){let n=this.getRenderers(e),r=[];for(let e of n)try{e.draw(t)}catch(n){let i=n instanceof Error?n:Error(String(n));console.error(`[RendererPlugin] ${e.name} draw error:`,i),r.push({name:e.name,error:{message:i.message,stack:i.stack},paneId:t.pane.id,timestamp:Date.now()})}return r}renderPlugin(e,t){let n=this.plugins.get(e);if(!n)return[];let r=this.enabledState.get(e);if(!(r===void 0?n.enabled!==!1:r))return[];let i=[];try{n.draw(t)}catch(n){let r=n instanceof Error?n:Error(String(n));console.error(`[RendererPlugin] ${e} draw error:`,r),i.push({name:e,error:{message:r.message,stack:r.stack},paneId:t.pane.id,timestamp:Date.now()})}return i}setEnabled(e,t){this.plugins.has(e)&&(this.enabledState.set(e,t),this.onInvalidate?.())}updateConfig(e,t){let n=this.plugins.get(e);return n?.setConfig?(n.setConfig(t),this.onInvalidate?.(),!0):!1}getAllPlugins(){return Array.from(this.plugins.values())}getPlugin(e){return this.plugins.get(e)}notifyDataUpdate(e,t){for(let n of this.plugins.values()){if(!n.onDataUpdate)continue;let r=this.enabledState.get(n.name);if(r===void 0?n.enabled!==!1:r)try{n.onDataUpdate(e,t)}catch(e){console.error(`[RendererPlugin] ${n.name} onDataUpdate error:`,e)}}}notifyResize(e,t){let n=this.getRenderers(e);for(let e of n)if(e.onResize)try{e.onResize(t)}catch(t){console.error(`[RendererPlugin] ${e.name} onResize error:`,t)}}},qi=1.2,Ji=24,Yi=6;function Xi(e){switch(e){case`arrow_up`:case`flag`:return!0;default:return!1}}function Zi(){return{name:`customMarkers`,version:`1.0.0`,description:`自定义标记渲染器`,debugName:`自定义标记`,paneId:`main`,priority:K.OVERLAY,draw(e){let{ctx:t,pane:n,data:r,range:i,scrollLeft:a,kWidth:o,kLinePositions:s,markerManager:c}=e;if(!c)return;let l=c.getCustomMarkers();if(!l||l.length===0)return;let u=r;if(u.length&&n.id===`main`){t.save(),t.translate(-a,0);for(let e of l){let r=$i(u,e.timestamp);if(r===-1||r<i.start||r>=i.end)continue;let l=r-i.start;if(l<0||l>=s.length)continue;let d=s[l]+o/2,f=u[r],p=e.style?.size,m=Qi(o,p),h=(e.offset?.y??0)<0?!0:(e.offset?.y??0)>0?!1:Xi(e.shape),g;g=h?n.yAxis.priceToY(f.high)-m/2-4+(e.offset?.y??0):n.yAxis.priceToY(f.low)+m/2+4+(e.offset?.y??0);let _=d+(e.offset?.x??0),v=g;Ti(t,e.shape,_,v,m,e.style||{}),e.label&&Oi(t,e.label,_,v,m,e.style||{},h),c.setCustomMarkerPosition(e.id,_-a,v,m,e.shape)}t.restore()}}}}function Qi(e,t){let n=e*qi;return Math.max(Yi,Math.min(n,t??Ji))}function $i(e,t){let n=0,r=e.length-1;for(;n<=r;){let i=Math.floor((n+r)/2),a=e[i]?.timestamp;if(a===void 0)break;if(a===t)return i;a<t?n=i+1:r=i-1}return-1}function ea(e){let t=new Intl.DateTimeFormat(`zh-CN`,{timeZone:`Asia/Shanghai`,year:`numeric`,month:`2-digit`,day:`2-digit`}).formatToParts(new Date(e)).reduce((e,t)=>(t.type!==`literal`&&(e[t.type]=t.value),e),{});return`${t.year}-${t.month}-${t.day}`}function ta(e){let t=new Date(e),n=t.getFullYear(),r=t.getMonth()+1;return r===1?{text:String(n),isYear:!0}:{text:`${r}月`,isYear:!1}}function na(e){let t=new Date(e);return`${t.getFullYear()}-${t.getMonth()}`}var ra=ea,ia=ea;function aa(e){if(e.length===0)return[];let t=[0],n=na(e[0].timestamp);for(let r=1;r<e.length;r++){let i=e[r];if(!i)continue;let a=na(i.timestamp);a!==n&&(t.push(r),n=a)}return t}var q={PRIMARY:`hsl(210, 9%, 31%)`,SECONDARY:`hsl(210, 9%, 35%)`,TERTIARY:`hsl(210, 8%, 50%)`,WEAK:`hsl(210, 7%, 65%)`,WHITE:`rgba(255, 255, 255, 0.92)`},J={UP:`rgba(214, 10, 34, 1)`,UP_LIGHT:`rgba(214, 10, 34, 0.92)`,UP_TICK:`hsl(0, 60%, 50%)`,DOWN:`rgba(3, 123, 102, 1)`,DOWN_LIGHT:`rgba(3, 123, 102, 0.92)`,DOWN_TICK:`hsl(150, 30%, 60%)`,NEUTRAL:`rgba(0, 0, 0, 0.78)`,LAST_PRICE:`rgb(183, 22, 22)`},oa={WHITE:`rgb(255, 255, 255)`,LIGHT_GRAY:`rgba(255, 255, 255, 0.92)`,PURE_WHITE:`#ffffff`,TRANSPARENT:`transparent`,ACTIVE:`#1890ff`,ACTIVE_HOVER:`#40a9ff`,HOVER:`#f0f0f0`},sa={DARK:`rgba(0, 0, 0, 0.12)`,MEDIUM:`rgba(0, 0, 0, 0.10)`,LIGHT:`rgba(0, 0, 0, 0.08)`,SEPARATOR:`rgba(0, 0, 0, 0.10)`,BUTTON:`#d0d0d0`},ca={HORIZONTAL:`rgba(0, 0, 0, 0.06)`,VERTICAL:`rgba(0, 0, 0, 0.12)`},Y={MA5:`rgba(255, 193, 37, 1)`,MA10:`rgba(190, 131, 12, 1)`,MA20:`rgba(69, 112, 249, 1)`,MA30:`rgba(76, 175, 80, 1)`,MA60:`rgba(156, 39, 176, 1)`},la={UPPER:`rgba(178, 34, 34, 1)`,MIDDLE:`rgba(69, 112, 249, 1)`,LOWER:`rgba(34, 139, 34, 1)`,BAND_FILL:`rgba(100, 149, 237, 0.1)`},X={DIF:`rgba(69, 112, 249, 1)`,DEA:`rgba(255, 152, 0, 1)`,BAR_UP:`#ff5252`,BAR_UP_LIGHT:`#fccbcd`,BAR_DOWN:`#22ab94`,BAR_DOWN_LIGHT:`#ace5dc`},ua={RSI1:`rgba(69, 112, 249, 1)`,RSI2:`rgba(255, 152, 0, 1)`,RSI3:`rgba(156, 39, 176, 1)`},da={CCI:`rgba(69, 112, 249, 1)`,OVERBOUGHT:`rgba(214, 10, 34, 0.5)`,OVERSOLD:`rgba(3, 123, 102, 0.5)`},fa={K:`rgba(69, 112, 249, 1)`,D:`rgba(255, 152, 0, 1)`,J:`rgba(156, 39, 176, 1)`},pa={MOM:`rgba(69, 112, 249, 1)`,ZERO:`rgba(0, 0, 0, 0.2)`},ma={WMSR:`rgba(69, 112, 249, 1)`,OVERBOUGHT:`rgba(214, 10, 34, 0.5)`,OVERSOLD:`rgba(3, 123, 102, 0.5)`},ha={KST:`rgba(69, 112, 249, 1)`,SIGNAL:`rgba(255, 152, 0, 1)`},ga={LINE:`rgba(0, 0, 0, 0.28)`,LABEL_BG:`rgb(0, 0, 0)`,LABEL_TEXT:`rgba(255, 255, 255, 0.92)`},_a=J.UP,va=J.DOWN,ya=J.NEUTRAL;function ba(e){return e>0?_a:e<0?va:ya}function xa(e,t=2){let n=Math.abs(e);return n>=1e8?`${(e/1e8).toFixed(t)}亿`:n>=1e4?`${(e/1e4).toFixed(t)}万`:`${Math.round(e)}`}function Sa(e,t=2){return`${e>0?`+`:``}${e.toFixed(t)}`}function Ca(e,t=2){return`${e.toFixed(t)}%`}function wa(e,t=2){return`${e>0?`+`:``}${e.toFixed(t)}%`}function Ta(e,t){let n=t?.close??e.open;return ba(e.open-n)}function Ea(e){return ba(e.close-e.open)}function Da(e){return typeof e.changePercent==`number`?ba(e.changePercent):typeof e.changeAmount==`number`?ba(e.changeAmount):ya}var Oa={class:`kline-tooltip__title`},ka={key:0},Aa={class:`kline-tooltip__grid`},ja={class:`row`},Ma={class:`row`},Na={class:`row`},Pa={class:`row`},Fa={key:0,class:`row`},Ia={key:1,class:`row`},La={key:2,class:`row`},Ra={key:3,class:`row`},za={key:4,class:`row`},Ba={key:5,class:`row`},Va=(0,f.defineComponent)({__name:`KLineTooltip`,props:{k:{},index:{},data:{},pos:{},setEl:{type:Function}},setup(e){let t=e;function n(e){t.setEl?.(e)}let r=(0,f.computed)(()=>{let e=t.k;if(!e)return ya;let n=t.index;return Ta(e,typeof n==`number`&&n>0?t.data[n-1]:void 0)}),i=(0,f.computed)(()=>{let e=t.k;return e?Ea(e):ya}),a=(0,f.computed)(()=>{let e=t.k;return e?Da(e):ya});return(t,o)=>e.k?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,{key:0,ref:n,class:`kline-tooltip`,style:(0,f.normalizeStyle)({left:`${e.pos.x}px`,top:`${e.pos.y}px`})},[(0,f.createElementVNode)(`div`,Oa,[e.k.stockCode?((0,f.openBlock)(),(0,f.createElementBlock)(`span`,ka,(0,f.toDisplayString)(e.k.stockCode),1)):(0,f.createCommentVNode)(``,!0),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)((0,f.unref)(ra)(e.k.timestamp)),1)]),(0,f.createElementVNode)(`div`,Aa,[(0,f.createElementVNode)(`div`,ja,[o[0]||=(0,f.createElementVNode)(`span`,null,`开`,-1),(0,f.createElementVNode)(`span`,{style:(0,f.normalizeStyle)({color:r.value})},(0,f.toDisplayString)(e.k.open.toFixed(2)),5)]),(0,f.createElementVNode)(`div`,Ma,[o[1]||=(0,f.createElementVNode)(`span`,null,`高`,-1),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)(e.k.high.toFixed(2)),1)]),(0,f.createElementVNode)(`div`,Na,[o[2]||=(0,f.createElementVNode)(`span`,null,`低`,-1),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)(e.k.low.toFixed(2)),1)]),(0,f.createElementVNode)(`div`,Pa,[o[3]||=(0,f.createElementVNode)(`span`,null,`收`,-1),(0,f.createElementVNode)(`span`,{style:(0,f.normalizeStyle)({color:i.value})},(0,f.toDisplayString)(e.k.close.toFixed(2)),5)]),typeof e.k.volume==`number`?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,Fa,[o[4]||=(0,f.createElementVNode)(`span`,null,`成交量`,-1),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)((0,f.unref)(xa)(e.k.volume)),1)])):(0,f.createCommentVNode)(``,!0),typeof e.k.turnover==`number`?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,Ia,[o[5]||=(0,f.createElementVNode)(`span`,null,`成交额`,-1),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)((0,f.unref)(xa)(e.k.turnover)),1)])):(0,f.createCommentVNode)(``,!0),typeof e.k.amplitude==`number`?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,La,[o[6]||=(0,f.createElementVNode)(`span`,null,`振幅`,-1),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)(e.k.amplitude)+`%`,1)])):(0,f.createCommentVNode)(``,!0),typeof e.k.changePercent==`number`?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,Ra,[o[7]||=(0,f.createElementVNode)(`span`,null,`涨跌幅`,-1),(0,f.createElementVNode)(`span`,{style:(0,f.normalizeStyle)({color:a.value})},(0,f.toDisplayString)((0,f.unref)(wa)(e.k.changePercent)),5)])):(0,f.createCommentVNode)(``,!0),typeof e.k.changeAmount==`number`?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,za,[o[8]||=(0,f.createElementVNode)(`span`,null,`涨跌额`,-1),(0,f.createElementVNode)(`span`,{style:(0,f.normalizeStyle)({color:a.value})},(0,f.toDisplayString)((0,f.unref)(Sa)(e.k.changeAmount)),5)])):(0,f.createCommentVNode)(``,!0),typeof e.k.turnoverRate==`number`?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,Ba,[o[9]||=(0,f.createElementVNode)(`span`,null,`换手率`,-1),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)((0,f.unref)(Ca)(e.k.turnoverRate)),1)])):(0,f.createCommentVNode)(``,!0)])],4)):(0,f.createCommentVNode)(``,!0)}}),Ha=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},Ua=Ha(Va,[[`__scopeId`,`data-v-95daa55c`]]),Wa={RISE_WITH_VOLUME:`量价齐升`,RISE_WITHOUT_VOLUME:`量缩价升`,FALL_WITH_VOLUME:`量价齐缩`,FALL_WITHOUT_VOLUME:`量升价缩`},Ga=class{markers=new Map;hoveredMarkerId=null;lastHoveredId=null;customMarkers=new Map;customMarkerPositions=new Map;clear(){this.markers.clear()}register(e){this.markers.set(e.id,e)}getState(e){return this.hoveredMarkerId===e?`hovered`:`normal`}hitTest(e,t,n=3){for(let r of this.markers.values())if(e>=r.x-n&&e<=r.x+r.width+n&&t>=r.y-n&&t<=r.y+r.height+n)return r;return null}setHover(e){this.hoveredMarkerId=e,this.lastHoveredId=e}validateHoverState(){this.hoveredMarkerId!==null&&!this.markers.has(this.hoveredMarkerId)&&(this.hoveredMarkerId=null)}getHoveredMarker(){return this.hoveredMarkerId===null?null:this.markers.get(this.hoveredMarkerId)||null}getLastHoverId(){return this.lastHoveredId}getAllMarkers(){return Array.from(this.markers.values())}registerCustomMarker(e){this.customMarkers.set(e.id,e)}setCustomMarkers(e){this.clearCustomMarkers();for(let t of e)this.customMarkers.set(t.id,t)}clearCustomMarkers(){this.customMarkers.clear(),this.customMarkerPositions.clear()}getCustomMarkers(){return Array.from(this.customMarkers.values())}setCustomMarkerPosition(e,t,n,r,i){this.customMarkerPositions.set(e,{x:t,y:n,size:r,shape:i})}hitTestCustomMarker(e,t){for(let n of this.customMarkers.values()){let r=this.customMarkerPositions.get(n.id);if(r&&Ii(e,t,r.shape,r.x,r.y,r.size))return n}return null}},Ka={class:`marker-tooltip__title`},qa={key:0,class:`marker-tooltip__content`},Ja=Ha((0,f.defineComponent)({__name:`MarkerTooltip`,props:{marker:{},pos:{}},setup(e){let t=e,n=(0,f.computed)(()=>t.marker&&`date`in t.marker),r=(0,f.computed)(()=>{if(!t.marker)return``;if(n.value){let e=t.marker;return e.label?.text||e.shape}let e=t.marker;return Wa[e.markerType]||e.markerType}),i=(0,f.computed)(()=>{if(!t.marker)return{};if(n.value){let e=t.marker;return{日期:e.date,...e.metadata}}return t.marker.metadata}),a=(0,f.computed)(()=>Object.keys(i.value).length>0);function o(e){return typeof e==`number`?e.toFixed(2):String(e)}return(t,n)=>e.marker?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,{key:0,class:`marker-tooltip`,style:(0,f.normalizeStyle)({left:`${e.pos.x+12}px`,top:`${e.pos.y+12}px`})},[(0,f.createElementVNode)(`div`,Ka,(0,f.toDisplayString)(r.value),1),a.value?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,qa,[((0,f.openBlock)(!0),(0,f.createElementBlock)(f.Fragment,null,(0,f.renderList)(i.value,(e,t)=>((0,f.openBlock)(),(0,f.createElementBlock)(`div`,{key:t,class:`row`},[(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)(t),1),(0,f.createElementVNode)(`span`,null,(0,f.toDisplayString)(o(e)),1)]))),128))])):(0,f.createCommentVNode)(``,!0)],4)):(0,f.createCommentVNode)(``,!0)}}),[[`__scopeId`,`data-v-dd43da4f`]]),Ya={class:`params-header`},Xa={class:`header-left`},Za={class:`params-title`},Qa={class:`header-right`},$a={key:0,class:`indicator-description`},eo={class:`params-body`},to={class:`param-header`},no={class:`param-label`},ro={class:`param-label-text`},io={key:0,class:`param-range`},ao={class:`input-wrapper`},oo=[`disabled`,`onClick`],so=[`value`,`min`,`max`,`step`,`onInput`],co=[`disabled`,`onClick`],lo={key:0,class:`param-description`},uo={class:`params-footer`},fo={class:`footer-right`},po=Ha((0,f.defineComponent)({__name:`IndicatorParams`,props:{visible:{type:Boolean},indicatorId:{},indicatorName:{},indicatorDescription:{},params:{},values:{}},emits:[`close`,`confirm`],setup(e,{emit:t}){let n=e,r=t,i=(0,f.ref)({...n.values}),a=(0,f.ref)(!0);(0,f.watch)(()=>n.values,e=>{i.value={...e}},{deep:!0,immediate:!0}),(0,f.watch)(()=>n.visible,e=>{e&&(i.value={...n.values})});function o(e,t){let n=t.target,r=parseFloat(n.value);isNaN(r)||(i.value[e]=r)}function s(e,t){let n=e.step||1,r=(i.value[e.key]||0)+t*n;e.min!==void 0&&(r=Math.max(e.min,r)),e.max!==void 0&&(r=Math.min(e.max,r)),i.value[e.key]=parseFloat(r.toFixed(10))}function c(){let e={};n.params.forEach(t=>{e[t.key]=t.default??n.values[t.key]??0}),i.value=e}function l(){r(`confirm`,{...i.value})}return(t,n)=>((0,f.openBlock)(),(0,f.createBlock)(f.Teleport,{to:`body`},[(0,f.createVNode)(f.Transition,{name:`overlay`},{default:(0,f.withCtx)(()=>[e.visible?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,{key:0,class:`params-overlay`,onClick:n[4]||=e=>t.$emit(`close`)},[(0,f.createVNode)(f.Transition,{name:`modal`},{default:(0,f.withCtx)(()=>[(0,f.createElementVNode)(`div`,{class:`indicator-params`,onClick:n[3]||=(0,f.withModifiers)(()=>{},[`stop`])},[(0,f.createElementVNode)(`div`,Ya,[(0,f.createElementVNode)(`div`,Xa,[(0,f.createElementVNode)(`span`,Za,(0,f.toDisplayString)(e.indicatorName),1),n[5]||=(0,f.createElementVNode)(`span`,{class:`params-subtitle`},`参数设置`,-1)]),(0,f.createElementVNode)(`div`,Qa,[(0,f.createElementVNode)(`button`,{class:(0,f.normalizeClass)([`toggle-desc-btn`,{active:a.value}]),onClick:n[0]||=e=>a.value=!a.value,title:`显示/隐藏说明`},[...n[6]||=[(0,f.createElementVNode)(`svg`,{viewBox:`0 0 1024 1024`},[(0,f.createElementVNode)(`path`,{d:`M512 97.52381c228.912762 0 414.47619 185.563429 414.47619 414.47619s-185.563429 414.47619-414.47619 414.47619S97.52381 740.912762 97.52381 512 283.087238 97.52381 512 97.52381z m0 73.142857C323.486476 170.666667 170.666667 323.486476 170.666667 512s152.81981 341.333333 341.333333 341.333333 341.333333-152.81981 341.333333-341.333333S700.513524 170.666667 512 170.666667z m36.571429 268.190476v292.571428h-73.142858V438.857143h73.142858z m0-121.904762v73.142857h-73.142858v-73.142857h73.142858z`,fill:`currentColor`})],-1)]],2),(0,f.createElementVNode)(`button`,{class:`params-close`,onClick:n[1]||=e=>t.$emit(`close`)},[...n[7]||=[(0,f.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[(0,f.createElementVNode)(`path`,{d:`M18 6L6 18M6 6l12 12`})],-1)]])])]),(0,f.createVNode)(f.Transition,{name:`slide`},{default:(0,f.withCtx)(()=>[a.value&&e.indicatorDescription?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,$a,[(0,f.createElementVNode)(`p`,null,(0,f.toDisplayString)(e.indicatorDescription),1)])):(0,f.createCommentVNode)(``,!0)]),_:1}),(0,f.createElementVNode)(`div`,eo,[((0,f.openBlock)(!0),(0,f.createElementBlock)(f.Fragment,null,(0,f.renderList)(e.params,e=>((0,f.openBlock)(),(0,f.createElementBlock)(`div`,{key:e.key,class:(0,f.normalizeClass)([`param-item`,{"has-desc":a.value&&e.description}])},[(0,f.createElementVNode)(`div`,to,[(0,f.createElementVNode)(`label`,no,[(0,f.createElementVNode)(`span`,ro,(0,f.toDisplayString)(e.label),1),e.min!==void 0||e.max!==void 0?((0,f.openBlock)(),(0,f.createElementBlock)(`span`,io,(0,f.toDisplayString)(e.min??`-∞`)+` ~ `+(0,f.toDisplayString)(e.max??`+∞`),1)):(0,f.createCommentVNode)(``,!0)]),(0,f.createElementVNode)(`div`,ao,[(0,f.createElementVNode)(`button`,{class:`stepper-btn`,disabled:e.min!==void 0&&(i.value[e.key]??0)<=e.min,onClick:t=>s(e,-1)},` − `,8,oo),e.type===`number`?((0,f.openBlock)(),(0,f.createElementBlock)(`input`,{key:0,type:`number`,class:`param-input`,value:i.value[e.key],min:e.min,max:e.max,step:e.step||1,onInput:t=>o(e.key,t)},null,40,so)):(0,f.createCommentVNode)(``,!0),(0,f.createElementVNode)(`button`,{class:`stepper-btn`,disabled:e.max!==void 0&&(i.value[e.key]??0)>=e.max,onClick:t=>s(e,1)},` + `,8,co)])]),(0,f.createVNode)(f.Transition,{name:`slide`},{default:(0,f.withCtx)(()=>[a.value&&e.description?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,lo,(0,f.toDisplayString)(e.description),1)):(0,f.createCommentVNode)(``,!0)]),_:2},1024)],2))),128))]),(0,f.createElementVNode)(`div`,uo,[(0,f.createElementVNode)(`button`,{class:`params-btn reset`,onClick:c},[...n[8]||=[(0,f.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[(0,f.createElementVNode)(`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`}),(0,f.createElementVNode)(`path`,{d:`M3 3v5h5`})],-1),(0,f.createTextVNode)(` 重置 `,-1)]]),(0,f.createElementVNode)(`div`,fo,[(0,f.createElementVNode)(`button`,{class:`params-btn cancel`,onClick:n[2]||=e=>t.$emit(`close`)},`取消`),(0,f.createElementVNode)(`button`,{class:`params-btn confirm`,onClick:l},[...n[9]||=[(0,f.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`},[(0,f.createElementVNode)(`path`,{d:`M20 6L9 17l-5-5`})],-1),(0,f.createTextVNode)(` 确定 `,-1)]])])])])]),_:1})])):(0,f.createCommentVNode)(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-730f2212`]]),mo={class:`indicator-selector`},ho={class:`indicator-scroll-container`},go={class:`indicator-list`},_o=[`onMouseenter`],vo={class:`btn-content`},yo={key:0,class:`param-hint`},bo={key:0,class:`hover-overlay`},xo=[`onClick`],So=[`onClick`],Co={class:`indicator-item`},wo={class:`menu-section`},To={class:`menu-items`},Eo=[`disabled`,`onClick`],Do={key:0,class:`param-hint`},Oo={key:1,class:`active-tag`},ko={class:`menu-section`},Ao={class:`menu-items`},jo=[`disabled`,`onClick`],Mo={key:0,class:`param-hint`},No={key:1,class:`active-tag`},Po=Ha((0,f.defineComponent)({__name:`IndicatorSelector`,props:{activeIndicators:{},indicatorParams:{}},emits:[`toggle`,`updateParams`],setup(e,{emit:t}){let n=[{id:`MA`,label:`MA`,name:`均线`,pane:`main`},{id:`BOLL`,label:`BOLL`,name:`布林带`,pane:`main`,description:`布林带由三条轨道线组成,用于判断价格的波动范围和趋势强度。价格触及上轨可能超买,触及下轨可能超卖。`,params:[{key:`period`,label:`周期`,type:`number`,min:2,max:100,step:1,default:20,description:`计算移动平均线的周期数,周期越长轨道越平滑`},{key:`multiplier`,label:`倍数`,type:`number`,min:.1,max:5,step:.1,default:2,description:`标准差倍数,决定轨道宽度,通常为 2`}]},{id:`MACD`,label:`MACD`,name:`指数平滑异同移动平均线`,pane:`sub`,description:`MACD 通过快慢均线的交叉判断趋势方向和动量。DIF 上穿 DEA 为金叉看涨,下穿为死叉看跌。`,params:[{key:`fastPeriod`,label:`快线`,type:`number`,min:2,max:50,step:1,default:12,description:`快线 EMA 周期,对价格变化更敏感`},{key:`slowPeriod`,label:`慢线`,type:`number`,min:2,max:100,step:1,default:26,description:`慢线 EMA 周期,用于计算 DIF`},{key:`signalPeriod`,label:`信号`,type:`number`,min:2,max:50,step:1,default:9,description:`DEA 的 EMA 周期,用于生成买卖信号`}]},{id:`RSI`,label:`RSI`,name:`相对强弱指标`,pane:`sub`,description:`RSI 衡量价格变动的速度和幅度,判断超买超卖状态。RSI > 70 超买,RSI < 30 超卖。`,params:[{key:`period1`,label:`周期 1`,type:`number`,min:2,max:100,step:1,default:6,description:`第一条 RSI 周期,通常为 6(快线)`},{key:`period2`,label:`周期 2`,type:`number`,min:2,max:100,step:1,default:12,description:`第二条 RSI 周期,通常为 12(中线)`},{key:`period3`,label:`周期 3`,type:`number`,min:2,max:100,step:1,default:24,description:`第三条 RSI 周期,通常为 24(慢线)`}]},{id:`CCI`,label:`CCI`,name:`顺势指标`,pane:`sub`,description:`CCI 衡量价格与统计平均值的偏离程度。CCI > 100 超买,CCI < -100 超卖,适合捕捉趋势反转。`,params:[{key:`period`,label:`周期`,type:`number`,min:2,max:100,step:1,default:14,description:`计算周期,周期越短信号越灵敏`}]},{id:`STOCH`,label:`STOCH`,name:`随机指标`,pane:`sub`,description:`KDJ 随机指标通过比较收盘价与价格区间判断超买超卖。K > 80 超买,K < 20 超卖,K 上穿 D 金叉。`,params:[{key:`n`,label:`K 周期`,type:`number`,min:2,max:100,step:1,default:9,description:`计算 K 值的周期,统计 N 日内价格区间`},{key:`m`,label:`D 周期`,type:`number`,min:1,max:50,step:1,default:3,description:`D 值是 K 的 M 日移动平均,使信号更平滑`}]},{id:`MOM`,label:`MOM`,name:`动量指标`,pane:`sub`,description:`动量指标衡量价格变化的速度,MOM > 0 表示上涨动能,MOM < 0 表示下跌动能。适合判断趋势强度。`,params:[{key:`period`,label:`周期`,type:`number`,min:2,max:100,step:1,default:10,description:`与多少日前价格比较,周期越短越灵敏`}]},{id:`WMSR`,label:`WMSR`,name:`威廉指标`,pane:`sub`,description:`威廉指标衡量超买超卖程度,范围为 -100 到 0。WMSR > -20 超买,WMSR < -80 超卖。`,params:[{key:`period`,label:`周期`,type:`number`,min:2,max:100,step:1,default:14,description:`回溯周期,统计周期内最高最低价`}]},{id:`KST`,label:`KST`,name:`确然指标`,pane:`sub`,description:`KST 综合多个 ROC 判断长期趋势,KST 上穿信号线看涨,下穿看跌。适合捕捉主要趋势转换。`,params:[{key:`roc1`,label:`ROC1`,type:`number`,min:2,max:100,step:1,default:10,description:`短期变化率周期`},{key:`roc2`,label:`ROC2`,type:`number`,min:2,max:100,step:1,default:15,description:`中短期变化率周期`},{key:`roc3`,label:`ROC3`,type:`number`,min:2,max:100,step:1,default:20,description:`中长期变化率周期`},{key:`roc4`,label:`ROC4`,type:`number`,min:2,max:100,step:1,default:30,description:`长期变化率周期`},{key:`signalPeriod`,label:`信号`,type:`number`,min:2,max:50,step:1,default:9,description:`信号线的 SMA 周期`}]},{id:`FASTK`,label:`FASTK`,name:`快速随机指标`,pane:`sub`,description:`FASTK 是未经过平滑处理的随机指标,比普通 KDJ 更敏感,能更快捕捉价格转折点,但假信号也更多。`,params:[{key:`period`,label:`周期`,type:`number`,min:2,max:100,step:1,default:9,description:`计算周期,周期越短越敏感`}]}],r=n.filter(e=>e.pane===`main`),i=n.filter(e=>e.pane===`sub`),a=e,o=t,s=(0,f.ref)(null),c=(0,f.ref)(null),l=(0,f.ref)(!1),u=(0,f.ref)(null),d=(0,f.ref)(null),p=(0,f.ref)(!1),m=(0,f.ref)({left:`0`,bottom:`0`}),h=(0,f.computed)(()=>a.activeIndicators?.length?a.activeIndicators.map(e=>n.find(t=>t.id===e)).filter(e=>e!==void 0):[]),g=(0,f.computed)(()=>u.value&&n.find(e=>e.id===u.value)||null);function _(e){return a.activeIndicators?.includes(e)??!1}function v(e){if(_(e))return;let t=n.find(t=>t.id===e);t&&(t.pane===`main`&&n.filter(t=>t.pane===`main`&&t.id!==e&&_(t.id)).forEach(e=>o(`toggle`,e.id,!1)),o(`toggle`,e,!0),p.value=!1)}function y(e){o(`toggle`,e,!1)}function b(e){u.value=e,l.value=!0}function x(e){let t=n.find(t=>t.id===e);if(!t?.params)return{};let r={};for(let e of t.params)r[e.key]=e.default??e.min??1;return{...r,...a.indicatorParams?.[e]||{}}}function S(e){let t=x(e.id);return e.params?e.params.map(e=>t[e.key]??``).join(`,`):``}function C(e){u.value&&o(`updateParams`,u.value,e),l.value=!1}function w(){if(!p.value&&s.value){let e=s.value.getBoundingClientRect(),t=window.innerWidth,n=e.left+e.width/2;n+160>t-8&&(n=t-160-8),n-160<8&&(n=168),m.value={left:`${n}px`,bottom:`${window.innerHeight-e.top+8}px`}}p.value=!p.value}function T(e){let t=c.value&&!c.value.contains(e.target),n=s.value&&!s.value.contains(e.target);t&&n&&(p.value=!1)}function E(){p.value&&=!1}return(0,f.onMounted)(()=>{document.addEventListener(`click`,T),window.addEventListener(`resize`,E)}),(0,f.onUnmounted)(()=>{document.removeEventListener(`click`,T),window.removeEventListener(`resize`,E)}),(e,t)=>((0,f.openBlock)(),(0,f.createElementBlock)(`div`,mo,[(0,f.createElementVNode)(`div`,ho,[(0,f.createElementVNode)(`div`,go,[((0,f.openBlock)(!0),(0,f.createElementBlock)(f.Fragment,null,(0,f.renderList)(h.value,e=>((0,f.openBlock)(),(0,f.createElementBlock)(`div`,{key:e.id,class:`indicator-item`},[(0,f.createElementVNode)(`div`,{class:`indicator-btn-wrapper`,onMouseenter:t=>d.value=e.id,onMouseleave:t[0]||=e=>d.value=null},[(0,f.createElementVNode)(`button`,{class:(0,f.normalizeClass)([`indicator-btn`,{active:!0,hovering:d.value===e.id}])},[(0,f.createElementVNode)(`span`,vo,[(0,f.createTextVNode)((0,f.toDisplayString)(e.label)+` `,1),e.params?((0,f.openBlock)(),(0,f.createElementBlock)(`span`,yo,` (`+(0,f.toDisplayString)(S(e))+`) `,1)):(0,f.createCommentVNode)(``,!0)]),(0,f.createVNode)(f.Transition,{name:`fade`},{default:(0,f.withCtx)(()=>[d.value===e.id?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,bo,[(0,f.createElementVNode)(`button`,{class:`action-btn settings-btn`,onClick:(0,f.withModifiers)(t=>b(e.id),[`stop`]),title:`编辑参数`},[...t[2]||=[(0,f.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`currentColor`},[(0,f.createElementVNode)(`path`,{d:`M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z`})],-1)]],8,xo),t[4]||=(0,f.createElementVNode)(`span`,{class:`divider`},null,-1),(0,f.createElementVNode)(`button`,{class:`action-btn remove-btn`,onClick:(0,f.withModifiers)(t=>y(e.id),[`stop`]),title:`移除指标`},[...t[3]||=[(0,f.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`currentColor`},[(0,f.createElementVNode)(`path`,{d:`M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z`})],-1)]],8,So)])):(0,f.createCommentVNode)(``,!0)]),_:2},1024)],2)],40,_o)]))),128)),(0,f.createElementVNode)(`div`,Co,[(0,f.createElementVNode)(`button`,{ref_key:`addBtnRef`,ref:s,class:`add-btn`,onClick:w,title:`添加指标`},[...t[5]||=[(0,f.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`currentColor`},[(0,f.createElementVNode)(`path`,{d:`M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z`})],-1)]],512)])])]),((0,f.openBlock)(),(0,f.createBlock)(f.Teleport,{to:`body`},[(0,f.createVNode)(f.Transition,{name:`slide`},{default:(0,f.withCtx)(()=>[p.value?((0,f.openBlock)(),(0,f.createElementBlock)(`div`,{key:0,class:`add-menu`,ref_key:`addMenuRef`,ref:c,style:(0,f.normalizeStyle)(m.value)},[(0,f.createElementVNode)(`div`,wo,[t[7]||=(0,f.createElementVNode)(`div`,{class:`menu-title`},`主图指标`,-1),(0,f.createElementVNode)(`div`,To,[((0,f.openBlock)(!0),(0,f.createElementBlock)(f.Fragment,null,(0,f.renderList)((0,f.unref)(r),e=>((0,f.openBlock)(),(0,f.createElementBlock)(`button`,{key:e.id,class:(0,f.normalizeClass)([`menu-item`,{disabled:_(e.id)}]),disabled:_(e.id),onClick:t=>v(e.id)},[(0,f.createTextVNode)((0,f.toDisplayString)(e.label)+` `,1),e.params?((0,f.openBlock)(),(0,f.createElementBlock)(`span`,Do,` (`+(0,f.toDisplayString)(e.name)+`) `,1)):(0,f.createCommentVNode)(``,!0),_(e.id)?((0,f.openBlock)(),(0,f.createElementBlock)(`span`,Oo,[...t[6]||=[(0,f.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`currentColor`},[(0,f.createElementVNode)(`path`,{d:`M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z`})],-1)]])):(0,f.createCommentVNode)(``,!0)],10,Eo))),128))])]),(0,f.createElementVNode)(`div`,ko,[t[9]||=(0,f.createElementVNode)(`div`,{class:`menu-title`},`副图指标`,-1),(0,f.createElementVNode)(`div`,Ao,[((0,f.openBlock)(!0),(0,f.createElementBlock)(f.Fragment,null,(0,f.renderList)((0,f.unref)(i),e=>((0,f.openBlock)(),(0,f.createElementBlock)(`button`,{key:e.id,class:(0,f.normalizeClass)([`menu-item`,{disabled:_(e.id)}]),disabled:_(e.id),onClick:t=>v(e.id)},[(0,f.createTextVNode)((0,f.toDisplayString)(e.label)+` `,1),e.params?((0,f.openBlock)(),(0,f.createElementBlock)(`span`,Mo,` (`+(0,f.toDisplayString)(e.name)+`) `,1)):(0,f.createCommentVNode)(``,!0),_(e.id)?((0,f.openBlock)(),(0,f.createElementBlock)(`span`,No,[...t[8]||=[(0,f.createElementVNode)(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`currentColor`},[(0,f.createElementVNode)(`path`,{d:`M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z`})],-1)]])):(0,f.createCommentVNode)(``,!0)],10,jo))),128))])])],4)):(0,f.createCommentVNode)(``,!0)]),_:1})])),g.value?((0,f.openBlock)(),(0,f.createBlock)(po,{key:0,visible:l.value,"indicator-id":g.value.id,"indicator-name":g.value.name,"indicator-description":g.value.description,params:g.value.params||[],values:x(g.value.id),onClose:t[1]||=e=>l.value=!1,onConfirm:C},null,8,[`visible`,`indicator-id`,`indicator-name`,`indicator-description`,`params`,`values`])):(0,f.createCommentVNode)(``,!0)]))}}),[[`__scopeId`,`data-v-76ea9e8f`]]);function Fo(e,t){let n=Math.round(e*t);return n%2==0&&(n+=1),Math.max(1,n)}function Io(e,t,n){let r=Fo(e,n),i=Math.round(t*n),a=r+i,o=i;return{kWidthPx:r,kGapPx:i,unitPx:a,startXPx:o,kWidthLogical:r/n,kGapLogical:i/n,unitLogical:a/n,startXLogical:o/n}}function Lo(e,t,n,r,i,a=1){let{unitPx:o,startXPx:s}=Io(n,r,a),c=e*a,l=t*a;return{start:Math.max(0,Math.floor((c-s)/o)-1),end:Math.min(i,Math.ceil((c+l-s)/o)+1)}}function Ro(e,t,n){let r=-1/0,i=1/0;for(let a=t;a<n&&a<e.length;a++){let t=e[a];t&&(t.high>r&&(r=t.high),t.low<i&&(i=t.low))}return!Number.isFinite(r)||!Number.isFinite(i)?{maxPrice:100,minPrice:0}:{maxPrice:r,minPrice:i}}var zo=class{range={maxPrice:100,minPrice:0};height=1;paddingTop=0;paddingBottom=0;setRange(e){this.range=e}setHeight(e){this.height=Math.max(1,e)}setPadding(e,t){this.paddingTop=Math.max(0,e),this.paddingBottom=Math.max(0,t)}getRange(){return this.range}getPaddingTop(){return this.paddingTop}getPaddingBottom(){return this.paddingBottom}priceToY(e){let{maxPrice:t,minPrice:n}=this.range,r=t-n||1,i=(e-n)/r,a=Math.max(1,this.height-this.paddingTop-this.paddingBottom);return this.paddingTop+a*(1-i)}yToPrice(e){let{maxPrice:t,minPrice:n}=this.range,r=t-n||1,i=Math.max(1,this.height-this.paddingTop-this.paddingBottom);return n+(1-(e-this.paddingTop)/i)*r}},Bo=class{id;top=0;height=0;priceRange={maxPrice:100,minPrice:0};yAxis=new zo;renderers=[];constructor(e){this.id=e}setLayout(e,t){this.top=e,this.height=Math.max(1,t),this.yAxis.setHeight(this.height)}setPadding(e,t){this.yAxis.setPadding(e,t)}addRenderer(e){this.renderers.push(e)}updateRange(e,t){this.priceRange=Ro(e,t.start,t.end),this.yAxis.setRange(this.priceRange)}},Vo=class{chart;isDragging=!1;dragStartX=0;scrollStartX=0;isTouchSession=!1;crosshairPos=null;crosshairIndex=null;hoveredIndex=null;activePaneId=null;tooltipPos={x:0,y:0};tooltipSize={width:220,height:180};hoveredMarkerId=null;clickedMarkerId=null;hoveredMarkerData=null;clickedMarkerData=null;onMarkerHoverCallback;onMarkerClickCallback;hoveredCustomMarker=null;onCustomMarkerHoverCallback;onCustomMarkerClickCallback;kLinePositions=null;visibleRange=null;kWidthPx=null;constructor(e){this.chart=e}onWheel(e){let t=this.chart.getDom().container,n=t.getBoundingClientRect(),r=e.clientX-n.left,i=t.scrollLeft;this.clearHover(),this.chart.zoomAt(r,i,e.deltaY)}onPointerDown(e){if(e.isPrimary===!1)return;this.isTouchSession=e.pointerType===`touch`;let t=this.chart.getDom().container,n=t.getBoundingClientRect(),r=e.clientX-n.left,i=e.clientY-n.top,a=t.scrollLeft,o=this.chart.getMarkerManager(),s=a+r,c=o.hitTest(s,i,3);if(c){this.clickedMarkerId=c.id,this.clickedMarkerData=c,this.onMarkerClickCallback&&this.onMarkerClickCallback(c);return}this.isDragging=!0,this.updateHoverFromPoint(e.clientX,e.clientY),this.dragStartX=e.clientX,this.scrollStartX=t.scrollLeft,this.chart.scheduleDraw()}setTooltipSize(e){this.tooltipSize=e}onPointerUp(e){e.isPrimary!==!1&&(this.isDragging=!1)}onPointerLeave(e){e.isPrimary!==!1&&(this.isDragging=!1,this.isTouchSession=!1,this.clearHover(),this.chart.scheduleDraw())}onMouseDown(e){if(this.isTouchSession||e.button!==0)return;let t=this.chart.getDom().container,n=t.getBoundingClientRect(),r=e.clientX-n.left,i=e.clientY-n.top,a=t.scrollLeft,o=this.chart.getMarkerManager(),s=a+r,c=o.hitTest(s,i,3);if(c){this.clickedMarkerId=c.id,this.onMarkerClickCallback&&this.onMarkerClickCallback(c);return}this.isDragging=!0,this.dragStartX=e.clientX,this.scrollStartX=t.scrollLeft,this.updateHoverFromPoint(e.clientX,e.clientY),this.chart.scheduleDraw(),e.preventDefault()}onMouseMove(e){if(this.isTouchSession)return;let t=this.chart.getDom().container;if(this.isDragging){let n=this.dragStartX-e.clientX;t.scrollLeft=this.scrollStartX+n;return}this.updateHover(e),this.chart.scheduleDraw()}onMouseUp(){this.isTouchSession||(this.isDragging=!1)}onMouseLeave(){this.isTouchSession||(this.isDragging=!1,this.clearHover(),this.chart.scheduleDraw())}onScroll(){this.kLinePositions=null,this.visibleRange=null,this.clearHover(),this.chart.scheduleDraw()}onPointerMove(e){if(!this.isTouchSession||!e.isPrimary)return;let t=this.chart.getDom().container;if(this.isDragging){let n=this.dragStartX-e.clientX;t.scrollLeft=this.scrollStartX+n;return}this.updateHoverFromPoint(e.clientX,e.clientY),this.chart.scheduleDraw()}setKLinePositions(e,t,n){this.kLinePositions=e,this.visibleRange=t,n!==void 0&&(this.kWidthPx=n)}isDraggingState(){return this.isDragging}setOnMarkerHover(e){this.onMarkerHoverCallback=e}setOnMarkerClick(e){this.onMarkerClickCallback=e}setOnCustomMarkerHover(e){this.onCustomMarkerHoverCallback=e}setOnCustomMarkerClick(e){this.onCustomMarkerClickCallback=e}clearHover(){this.crosshairPos=null,this.crosshairIndex=null,this.hoveredIndex=null,this.activePaneId=null,this.hoveredMarkerId!==null&&(this.hoveredMarkerId=null,this.onMarkerHoverCallback&&this.onMarkerHoverCallback(null)),this.hoveredCustomMarker!==null&&(this.hoveredCustomMarker=null,this.onCustomMarkerHoverCallback&&this.onCustomMarkerHoverCallback(null))}updateHover(e){this.updateHoverFromPoint(e.clientX,e.clientY)}updateHoverFromPoint(e,t){let n=this.chart.getDom().container,r=n.getBoundingClientRect(),i=e-r.left,a=t-r.top,o=this.chart.getOption(),s=Math.max(1,Math.round(r.width)),c=Math.max(1,Math.round(r.height)),l=s-o.rightAxisWidth-(o.priceLabelWidth||60),u=c-o.bottomAxisHeight;if(i<0||a<0||i>l||a>u){this.clearHover();return}let d=n.scrollLeft,f=window.devicePixelRatio||1,p=this.chart.getMarkerManager(),m=d+i,h=p.hitTest(m,a,3);if(h){this.hoveredMarkerId!==h.id&&(this.hoveredMarkerId=h.id,this.hoveredMarkerData=h,p.setHover(h.id),this.onMarkerHoverCallback&&this.onMarkerHoverCallback(h)),this.crosshairPos=null,this.crosshairIndex=null,this.hoveredIndex=null;return}else this.hoveredMarkerId!==null&&(this.hoveredMarkerId=null,this.hoveredMarkerData=null,p.setHover(null),this.onMarkerHoverCallback&&this.onMarkerHoverCallback(null));let g=p.hitTestCustomMarker(i,a);if(g){this.hoveredCustomMarker?.id!==g.id&&(this.hoveredCustomMarker=g,this.onCustomMarkerHoverCallback&&this.onCustomMarkerHoverCallback(g)),this.crosshairPos=null,this.crosshairIndex=null,this.hoveredIndex=null;return}else this.hoveredCustomMarker!==null&&(this.hoveredCustomMarker=null,this.onCustomMarkerHoverCallback&&this.onCustomMarkerHoverCallback(null));if(!this.kLinePositions||!this.visibleRange||!this.kWidthPx){this.clearHover();return}let _=this.kWidthPx/f,v=0,y=this.kLinePositions.length;for(;v<y;){let e=v+y>>1;this.kLinePositions[e]<m?v=e+1:y=e}let b=v;if(v>0&&v<this.kLinePositions.length){let e=this.kLinePositions[v-1]+_/2,t=this.kLinePositions[v]+_/2;Math.abs(m-e)<Math.abs(m-t)&&(b=v-1)}else v===this.kLinePositions.length&&this.kLinePositions.length>0&&(b=this.kLinePositions.length-1);let x=b+this.visibleRange.start,S=this.chart.getData(),C=this.chart.getPaneRenderers().find(e=>{let t=e.getPane();return a>=t.top&&a<=t.top+t.height})?.getPane()||null;if(this.activePaneId=C?.id||null,x>=0&&x<(S?.length??0)){this.crosshairIndex=x;let e=this.kLinePositions[b]+(this.kWidthPx-1)/2/f-d;this.crosshairPos={x:Math.min(Math.max(e,0),l),y:Math.min(Math.max(a,0),u)}}else this.crosshairIndex=null,this.crosshairPos=null;let w=typeof this.crosshairIndex==`number`?S[this.crosshairIndex]:void 0;if(!w||!C||C.id!==`main`){this.hoveredIndex=null;return}let T=a-C.top,E=C.yAxis.priceToY(w.open),D=C.yAxis.priceToY(w.close),O=C.yAxis.priceToY(w.high),k=C.yAxis.priceToY(w.low),A=Math.min(E,D),j=Math.max(E,D),M=m-this.kLinePositions[b],ee=_/2,te=Math.abs(j-A),N=te<8?(A+j)/2-8/2:A,P=te<8?(A+j)/2+8/2:j,F=T>=N&&T<=P&&M>=0&&M<=_,ne=Math.abs(M-ee)<=3&&T>=O&&T<=k;if(!F&&!ne){this.hoveredIndex=null;return}this.hoveredIndex=this.crosshairIndex;let I=this.tooltipSize.width,re=this.tooltipSize.height,ie=i+14,ae=i-14-I,oe=ie+I+12<=s?ie:ae,se=a+14,ce=Math.max(12,s-I-12),le=Math.max(12,c-re-12);this.tooltipPos={x:Math.min(Math.max(oe,12),ce),y:Math.min(Math.max(se,12),le)}}reset(){this.isDragging=!1,this.dragStartX=0,this.scrollStartX=0,this.isTouchSession=!1,this.crosshairPos=null,this.crosshairIndex=null,this.hoveredIndex=null,this.activePaneId=null,this.hoveredMarkerId=null,this.clickedMarkerId=null,this.hoveredMarkerData=null,this.clickedMarkerData=null,this.kLinePositions=null,this.visibleRange=null,this.kWidthPx=null}},Ho=class{dom;pane;opt;constructor(e,t,n){this.dom=e,this.pane=t,this.opt={...n,priceLabelWidth:n.priceLabelWidth||60}}getPane(){return this.pane}getDom(){return this.dom}resize(e,t,n){let r=this.dom.plotCanvas,i=this.dom.yAxisCanvas;r.style.width=`${e}px`,r.style.height=`${t}px`,r.width=Math.ceil(e*n),r.height=Math.ceil(t*n);let a=this.opt.rightAxisWidth+(this.opt.priceLabelWidth||60);i.style.width=`${a}px`,i.style.height=`${t}px`,i.width=Math.ceil(a*n),i.height=Math.ceil(t*n)}destroy(){}};function Uo(e={}){let{paneId:t=`sub`}=e;return{name:`volume_${t}`,version:`1.0.0`,description:`成交量渲染器`,debugName:`成交量`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:r,range:i,scrollLeft:a,kWidth:o,kGap:s,kLinePositions:c}=e,l=r;if(!l.length)return;t.save(),t.translate(-a,0);let{start:u,end:d}=i,f=l.slice(u,d).reduce((e,t)=>t.volume?Math.max(e,t.volume):e,0);for(let e=u;e<d;e++){let r=l[e];if(!r)continue;let i=r.volume;if(!i)continue;let a=Go(r),d=c[e-u];d&&Wo(t,d,a,i,f,o,s,n.height)}t.restore()}}}function Wo(e,t,n,r,i,a,o,s){let c=Ko(r,i,s),l=a;e.fillStyle=n,e.fillRect(t,c,l,s-c)}function Go(e){return e.close>e.open?J.UP:e.close<e.open?J.DOWN:J.NEUTRAL}function Ko(e,t,n){return n-n/t*e}function qo(e,t,n,r,i,a){let o=t-n||1,s=(e-n)/o;return i+Math.max(1,r-i-a)*(1-s)}function Z(e,t){return Math.round(e*t)/t}function Q(e,t){return(Math.floor(e*t)+.5)/t}function Jo(e,t,n,r){if(t===n)return null;let i=Math.min(t,n),a=Math.max(t,n),o=Math.round(e*r),s=Math.round(i*r),c=Math.round(a*r);return{x:o/r,y:s/r,width:1/r,height:Math.max(1,c-s)/r}}function Yo(e,t,n,r){if(e===t)return null;let i=Math.min(e,t),a=Math.max(e,t),o=Math.round(i*r),s=Math.round(a*r),c=Math.round(n*r);return{x:o/r,y:c/r,width:Math.max(1,s-o)/r,height:1/r}}function Xo(e,t,n,r,i){let a=e+n,o=n,s=Math.round(t*i),c=Math.round((t+r)*i),l=Math.max(1,c-s),u=e+(n-1)/2,d=u,f=o%2==1;return{bodyRect:{x:e/i,y:s/i,width:n/i,height:l/i},physBodyLeft:e,physBodyRight:a,physBodyWidth:o,physBodyCenter:d,physWickX:u,wickRect:{x:u/i,width:1/i},isPerfectlyAligned:f}}function Zo(e,t){let n=Array(e.length);if(e.length<t)return n;let r=0;for(let i=0;i<t;i++){let t=e[i];if(!t)return n;r+=t.close}n[t-1]=r/t;for(let i=t;i<e.length;i++){let a=e[i-t],o=e[i];!a||!o||(r=r-a.close+o.close,n[i]=r/t)}return n}function Qo(e={}){let t={ma5:!0,ma10:!0,ma20:!0,ma30:!0,ma60:!0,...e},n=new Map,r=null;function i(e,t){let i=n.get(t);if(i&&r===e)return i.values;let a=Zo(e,t);return n.set(t,{period:t,values:a}),r=e,a}function a(e,t,n,r){let{pane:i,range:a,kWidth:o,kGap:s,dpr:c,kLinePositions:l}=n,u=i.height,d=i.priceRange,f=Math.max(0,Math.min(0,Math.floor(u/2)-1)),p=f,m=f;if(!d)return;let h=d.maxPrice,g=d.minPrice;if(!Number.isFinite(h)||!Number.isFinite(g))return;e.strokeStyle=r,e.lineWidth=1,e.lineJoin=`round`,e.lineCap=`round`,e.beginPath();let _=!0;for(let n=a.start;n<a.end&&n<t.length;n++){let r=t[n];if(r===void 0)continue;let i=l[n-a.start]+o/2,s=qo(r,h,g,u,p,m),d=Q(i,c),f=Q(s,c);_?(e.moveTo(d,f),_=!1):e.lineTo(d,f)}e.stroke()}return{name:`ma`,version:`1.0.0`,description:`MA均线渲染器`,debugName:`MA均线`,paneId:`main`,priority:K.INDICATOR,draw(e){let{ctx:n,data:r,scrollLeft:o}=e,s=r;s.length&&(n.save(),n.translate(-o,0),t.ma5&&a(n,i(s,5),e,Y.MA5),t.ma10&&a(n,i(s,10),e,Y.MA10),t.ma20&&a(n,i(s,20),e,Y.MA20),t.ma30&&a(n,i(s,30),e,Y.MA30),t.ma60&&a(n,i(s,60),e,Y.MA60),n.restore())},onDataUpdate(){r=null,n.clear()},getConfig(){return{...t}},setConfig(e){Object.assign(t,e)}}}function $o(e,t,n){if(t<n-1)return;let r=0;for(let i=0;i<n;i++){let n=e[t-i];if(!n)return;r+=n.close}return r/n}function es(e){let t={ma5:!0,ma10:!0,ma20:!0,ma30:!0,ma60:!0,...e.showMA};return{name:`maLegend`,version:`1.0.0`,description:`MA均线图例渲染器`,debugName:`MA图例`,paneId:`main`,priority:K.FOREGROUND,draw(n){let{ctx:r,data:i,range:a}=n,o=i;if(!o.length)return;let s=(12+e.yPaddingPx)/2;r.save(),r.font=`12px Arial`,r.textAlign=`left`;let c=Math.min(a.end-1,o.length-1),l=[];if(t.ma5&&l.push({label:`MA5`,color:Y.MA5,value:$o(o,c,5)}),t.ma10&&l.push({label:`MA10`,color:Y.MA10,value:$o(o,c,10)}),t.ma20&&l.push({label:`MA20`,color:Y.MA20,value:$o(o,c,20)}),t.ma30&&l.push({label:`MA30`,color:Y.MA30,value:$o(o,c,30)}),t.ma60&&l.push({label:`MA60`,color:Y.MA60,value:$o(o,c,60)}),l.length>0){let e=12,t=s;r.fillStyle=J.NEUTRAL,r.fillText(`均线`,e,t),e+=r.measureText(`均线`).width+10;for(let n of l){let i=typeof n.value==`number`?` ${n.value.toFixed(2)}`:``,a=`${n.label}${i}`;r.fillStyle=n.color,r.fillText(a,e,t),e+=r.measureText(a).width+10}}r.restore()},getConfig(){return{...t}},setConfig(e){Object.assign(t,e)}}}function ts(e,t,n){let r=Array(e.length);if(e.length<t)return r;let i=0,a=[];for(let n=0;n<t;n++){let t=e[n];if(!t)return r;let o=t.close;a.push(o),i+=o}for(let o=t-1;o<e.length;o++){let s=e[o];if(!s)continue;if(o>=t){let e=a.shift();e!==void 0&&(i-=e);let t=s.close;a.push(t),i+=t}let c=i/t,l=0;for(let e=0;e<t;e++){let t=a[e];t!==void 0&&(l+=(t-c)**2)}let u=Math.sqrt(l/t);r[o]={upper:c+n*u,middle:c,lower:c-n*u}}return r}function ns(e={}){let t={period:20,multiplier:2,showUpper:!0,showMiddle:!0,showLower:!0,showBand:!0,...e},n=null,r=0,i=0,a=[];function o(e){return(n!==e||r!==t.period||i!==t.multiplier)&&(a=ts(e,t.period,t.multiplier),n=e,r=t.period,i=t.multiplier),a}return{name:`boll`,version:`1.0.0`,description:`布林带渲染器`,debugName:`BOLL布林带`,paneId:`main`,priority:K.INDICATOR,draw(e){let{ctx:n,pane:r,data:i,range:a,scrollLeft:s,kWidth:c,kGap:l,dpr:u,kLinePositions:d}=e,f=i;if(f.length<t.period)return;let p=o(f),m={kWidth:c,kGap:l,yPaddingPx:0},h=r.priceRange,g=r.height,_=m.yPaddingPx??0,v=Math.max(0,Math.min(_,Math.floor(g/2)-1)),y=v,b=v,x=h?.maxPrice??-1/0,S=h?.minPrice??1/0;if(!h)for(let e=a.start;e<a.end&&e<f.length;e++){let t=f[e];t&&(t.high>x&&(x=t.high),t.low<S&&(S=t.low))}if(!Number.isFinite(x)||!Number.isFinite(S))return;n.save(),n.translate(-s,0);let C=Math.max(a.start,t.period-1),w=Math.min(a.end,f.length);if(t.showBand){n.fillStyle=la.BAND_FILL,n.beginPath();let e=!0;for(let t=C;t<w;t++){let r=p[t];if(!r)continue;let i=d[t-a.start]+m.kWidth/2,o=qo(r.upper,x,S,g,y,b),s=Q(i,u),c=Q(o,u);e?(n.moveTo(s,c),e=!1):n.lineTo(s,c)}for(let e=w-1;e>=C;e--){let t=p[e];if(!t)continue;let r=d[e-a.start]+m.kWidth/2,i=qo(t.lower,x,S,g,y,b),o=Q(r,u),s=Q(i,u);n.lineTo(o,s)}n.closePath(),n.fill()}n.lineWidth=1,n.lineJoin=`round`,n.lineCap=`round`;let T=(e,t)=>{n.strokeStyle=t,n.beginPath();let r=!0;for(let t=C;t<w;t++){let i=p[t];if(!i)continue;let o=d[t-a.start]+m.kWidth/2,s=qo(i[e],x,S,g,y,b),c=Q(o,u),l=Q(s,u);r?(n.moveTo(c,l),r=!1):n.lineTo(c,l)}n.stroke()};t.showUpper&&T(`upper`,la.UPPER),t.showMiddle&&T(`middle`,la.MIDDLE),t.showLower&&T(`lower`,la.LOWER),n.restore()},onDataUpdate(){n=null},getConfig(){return{...t}},setConfig(e){`period`in e&&e.period!==t.period&&(n=null),`multiplier`in e&&e.multiplier!==t.multiplier&&(n=null),Object.assign(t,e)}}}function rs(e,t,n=20,r=2){if(t<n-1||t>=e.length)return null;let i=0;for(let r=0;r<n;r++){let n=e[t-r];if(!n)return null;i+=n.close}let a=i/n,o=0;for(let r=0;r<n;r++){let n=e[t-r];if(!n)return null;o+=(n.close-a)**2}let s=Math.sqrt(o/n);return{upper:a+r*s,middle:a,lower:a-r*s}}function is(e){let t={period:20,multiplier:2,show:!0,...e.config};return{name:`bollLegend`,version:`1.0.0`,description:`BOLL布林带图例渲染器`,debugName:`BOLL图例`,paneId:`main`,priority:K.FOREGROUND,draw(n){if(!t.show)return;let{ctx:r,data:i,range:a}=n,o=i;if(!o.length)return;let s=(12+e.yPaddingPx)/2;r.save(),r.font=`12px Arial`,r.textAlign=`left`;let c=rs(o,Math.min(a.end-1,o.length-1),t.period,t.multiplier),l=12;r.fillStyle=J.NEUTRAL,r.fillText(`BOLL(${t.period},${t.multiplier})`,l,s),l+=r.measureText(`BOLL(${t.period},${t.multiplier})`).width+10,c&&(r.fillStyle=la.UPPER,r.fillText(`上轨:${c.upper.toFixed(2)}`,l,s),l+=r.measureText(`上轨:${c.upper.toFixed(2)}`).width+10,r.fillStyle=la.MIDDLE,r.fillText(`中轨:${c.middle.toFixed(2)}`,l,s),l+=r.measureText(`中轨:${c.middle.toFixed(2)}`).width+10,r.fillStyle=la.LOWER,r.fillText(`下轨:${c.lower.toFixed(2)}`,l,s)),r.restore()},getConfig(){return{...t}},setConfig(e){Object.assign(t,e)}}}function as(e,t){let n=Array(e.length),r=2/(t+1);if(e.length===0)return n;n[0]=e[0].close;for(let t=1;t<e.length;t++){let i=e[t];i&&(n[t]=i.close*r+n[t-1]*(1-r))}return n}function os(e,t){let n=Array(e.length),r=2/(t+1),i=e.findIndex(e=>e!==void 0);if(i===-1)return n;n[i]=e[i];for(let t=i+1;t<e.length;t++){let i=e[t],a=n[t-1];i===void 0||a===void 0||(n[t]=i*r+a*(1-r))}return n}function ss(e,t,n,r){let i=Array(e.length);if(e.length<n)return i;let a=as(e,t),o=as(e,n),s=Array(e.length);for(let t=0;t<e.length;t++){let e=a[t],n=o[t];e!==void 0&&n!==void 0&&(s[t]=e-n)}let c=os(s,r);for(let t=0;t<e.length;t++){let e=s[t],n=c[t];e!==void 0&&n!==void 0&&(i[t]={dif:e,dea:n,macd:(e-n)*2})}return i}function cs(e={}){let{paneId:t=`sub`,config:n={}}=e,r={fastPeriod:12,slowPeriod:26,signalPeriod:9,showDIF:!0,showDEA:!0,showBAR:!0,...n},i=null,a=0,o=0,s=0,c=[];function l(e){return(i!==e||a!==r.fastPeriod||o!==r.slowPeriod||s!==r.signalPeriod)&&(c=ss(e,r.fastPeriod,r.slowPeriod,r.signalPeriod),i=e,a=r.fastPeriod,o=r.slowPeriod,s=r.signalPeriod),c}return{name:`macd_${t}`,version:`1.0.0`,description:`MACD 指标渲染器`,debugName:`MACD`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:s,kGap:c,dpr:u,kLinePositions:d}=e,f=i;if(f.length<r.slowPeriod)return;let p=l(f),m=-1/0,h=1/0;for(let e=a.start;e<a.end&&e<p.length;e++){let t=p[e];t&&(m=Math.max(m,t.dif,t.dea,t.macd),h=Math.min(h,t.dif,t.dea,t.macd))}if(!Number.isFinite(m)||!Number.isFinite(h))return;let g=Math.max(.05,(m-h)*.1),_=h-g,v=m+g-_||1,y=n.height-(0-_)/v*n.height;t.save(),t.translate(-o,0);let b=Math.max(a.start,r.slowPeriod-1),x=Math.min(a.end,f.length);if(r.showBAR){let e=s+c-1;for(let r=b;r<x;r++){let i=p[r];if(!i)continue;let o=d[r-a.start];if(o===void 0)continue;let c=o+(s-e)/2,l=n.height-(i.macd-_)/v*n.height,u=i.macd>=0,f=r>0?p[r-1]:null,m;m=f?i.macd>=f.macd:!0;let h;h=u?m?X.BAR_UP:X.BAR_UP_LIGHT:m?X.BAR_DOWN_LIGHT:X.BAR_DOWN,t.fillStyle=h,u?t.fillRect(c,l,e,y-l):t.fillRect(c,y,e,l-y)}}if(r.showDIF){t.strokeStyle=X.DIF,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=b;r<x;r++){let i=p[r];if(!i)continue;let o=d[r-a.start];if(o===void 0)continue;let c=o+s/2,l=n.height-(i.dif-_)/v*n.height,f=Q(c,u),m=Q(l,u);e?(t.moveTo(f,m),e=!1):t.lineTo(f,m)}t.stroke()}if(r.showDEA){t.strokeStyle=X.DEA,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=b;r<x;r++){let i=p[r];if(!i)continue;let o=d[r-a.start];if(o===void 0)continue;let c=o+s/2,l=n.height-(i.dea-_)/v*n.height,f=Q(c,u),m=Q(l,u);e?(t.moveTo(f,m),e=!1):t.lineTo(f,m)}t.stroke()}t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){`fastPeriod`in e&&e.fastPeriod!==r.fastPeriod&&(i=null),`slowPeriod`in e&&e.slowPeriod!==r.slowPeriod&&(i=null),`signalPeriod`in e&&e.signalPeriod!==r.signalPeriod&&(i=null),Object.assign(r,e)}}}function ls(e,t,n=12,r=26,i=9){return t<r||t>=e.length?null:ss(e,n,r,i)[t]??null}function us(e,t,n=12,r=26,i=9){let a=ls(e,t,n,r,i);return a?{name:`MACD`,params:[n,r,i],values:[{label:`DIF`,value:a.dif,color:X.DIF},{label:`DEA`,value:a.dea,color:X.DEA},{label:`MACD`,value:a.macd,color:a.macd>=0?X.BAR_UP:X.BAR_DOWN}]}:null}function ds(e,t){let n=Array(e.length);if(e.length<t+1)return n;let r=[];for(let t=1;t<e.length;t++)r.push(e[t].close-e[t-1].close);let i=0,a=0;for(let e=0;e<t;e++){let t=r[e];t!==void 0&&(t>0?i+=t:a+=Math.abs(t))}let o=i/t,s=a/t;s===0?n[t]=100:n[t]=100-100/(1+o/s);for(let e=t;e<r.length;e++){let i=r[e];if(i!==void 0)if(i>0?(o=(o*(t-1)+i)/t,s=s*(t-1)/t):(o=o*(t-1)/t,s=(s*(t-1)+Math.abs(i))/t),s===0)n[e+1]=100;else{let t=o/s;n[e+1]=100-100/(1+t)}}return n}function fs(e={}){let{paneId:t=`sub`,config:n={}}=e,r={period1:6,period2:12,period3:24,showRSI1:!0,showRSI2:!0,showRSI3:!0,...n},i=null,a=0,o=0,s=0,c=[],l=[],u=[];function d(e){return(i!==e||a!==r.period1||o!==r.period2||s!==r.period3)&&(c=ds(e,r.period1),l=ds(e,r.period2),u=ds(e,r.period3),i=e,a=r.period1,o=r.period2,s=r.period3),{rsi1:c,rsi2:l,rsi3:u}}return{name:`rsi_${t}`,version:`1.0.0`,description:`RSI 相对强弱指标渲染器`,debugName:`RSI`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:s,dpr:c,kLinePositions:l}=e,u=i;if(u.length<r.period1+1)return;let{rsi1:f,rsi2:p,rsi3:m}=d(u);t.save(),t.translate(-o,0);let h=n.height-80/100*n.height,g=n.height-50/100*n.height,_=n.height-20/100*n.height,v=o,y=o+e.paneWidth;t.strokeStyle=`rgba(0, 0, 0, 0.1)`,t.lineWidth=1,t.setLineDash([4,4]),t.beginPath(),t.moveTo(v,h),t.lineTo(y,h),t.moveTo(v,g),t.lineTo(y,g),t.moveTo(v,_),t.lineTo(y,_),t.stroke(),t.setLineDash([]);let b=Math.max(a.start,r.period1),x=Math.min(a.end,u.length),S=(e,r)=>{t.strokeStyle=r,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let i=!0;for(let r=b;r<x;r++){let o=e[r];if(o===void 0)continue;let u=l[r-a.start];if(u===void 0)continue;let d=u+s/2,f=n.height-(o-0)/100*n.height,p=Q(d,c),m=Q(f,c);i?(t.moveTo(p,m),i=!1):t.lineTo(p,m)}t.stroke()};r.showRSI1&&S(f,ua.RSI1),r.showRSI2&&S(p,ua.RSI2),r.showRSI3&&S(m,ua.RSI3),t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){`period1`in e&&e.period1!==r.period1&&(i=null),`period2`in e&&e.period2!==r.period2&&(i=null),`period3`in e&&e.period3!==r.period3&&(i=null),Object.assign(r,e)}}}function ps(e,t,n=6,r=12,i=24){if(t<n+1||t>=e.length)return null;let a=ds(e,n)[t],o=ds(e,r)[t],s=ds(e,i)[t],c=[];return a!==void 0&&c.push({label:`RSI${n}`,value:a,color:ua.RSI1}),o!==void 0&&c.push({label:`RSI${r}`,value:o,color:ua.RSI2}),s!==void 0&&c.push({label:`RSI${i}`,value:s,color:ua.RSI3}),c.length===0?null:{name:`RSI`,params:[n,r,i],values:c}}function ms(e,t){let n=Array(e.length);if(e.length<t)return n;let r=e.map(e=>(e.high+e.low+e.close)/3);for(let i=t-1;i<e.length;i++){let e=0;for(let n=0;n<t;n++)e+=r[i-n];let a=e/t,o=0;for(let e=0;e<t;e++)o+=Math.abs(r[i-e]-a);let s=o/t;s===0?n[i]=0:n[i]=(r[i]-a)/(.015*s)}return n}function hs(e={}){let{paneId:t=`sub`,config:n={}}=e,r={period:14,showCCI:!0,...n},i=null,a=0,o=[];function s(e){return(i!==e||a!==r.period)&&(o=ms(e,r.period),i=e,a=r.period),o}return{name:`cci_${t}`,version:`1.0.0`,description:`CCI 顺势指标渲染器`,debugName:`CCI`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:c,dpr:l,kLinePositions:u}=e,d=i;if(d.length<r.period)return;let f=s(d),p=-1/0,m=1/0;for(let e=a.start;e<a.end&&e<f.length;e++){let t=f[e];t!==void 0&&(p=Math.max(p,t),m=Math.min(m,t))}if(!Number.isFinite(p)||!Number.isFinite(m))return;p=Math.max(p,150),m=Math.min(m,-150);let h=p-m||1,g=n.height-(0-m)/h*n.height;t.save(),t.translate(-o,0);let _=n.height-(100-m)/h*n.height,v=n.height-(-100-m)/h*n.height,y=o,b=o+e.paneWidth;t.strokeStyle=da.OVERBOUGHT,t.lineWidth=1,t.setLineDash([4,4]),t.beginPath(),t.moveTo(y,_),t.lineTo(b,_),t.stroke(),t.strokeStyle=da.OVERSOLD,t.beginPath(),t.moveTo(y,v),t.lineTo(b,v),t.stroke(),t.strokeStyle=`rgba(0, 0, 0, 0.1)`,t.beginPath(),t.moveTo(y,g),t.lineTo(b,g),t.stroke(),t.setLineDash([]);let x=Math.max(a.start,r.period-1),S=Math.min(a.end,d.length);if(r.showCCI){t.strokeStyle=da.CCI,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=x;r<S;r++){let i=f[r];if(i===void 0)continue;let o=u[r-a.start];if(o===void 0)continue;let s=o+c/2,d=n.height-(i-m)/h*n.height,p=Q(s,l),g=Q(d,l);e?(t.moveTo(p,g),e=!1):t.lineTo(p,g)}t.stroke()}t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){`period`in e&&e.period!==r.period&&(i=null),Object.assign(r,e)}}}function gs(e,t,n){return ms(e,n)[t]}function _s(e,t,n=14){if(t<n||t>=e.length)return null;let r=gs(e,t,n);return r===void 0?null:{name:`CCI`,params:[n],values:[{label:`CCI`,value:r,color:da.CCI}]}}function vs(e,t,n){let r=Array(e.length);if(e.length<t)return r;let i=Array(e.length);for(let n=t-1;n<e.length;n++){let r=-1/0,a=1/0;for(let i=0;i<t;i++){let t=e[n-i];t&&(r=Math.max(r,t.high),a=Math.min(a,t.low))}let o=e[n].close;r===a?i[n]=50:i[n]=(o-a)/(r-a)*100}for(let a=t-1+n-1;a<e.length;a++){let e=i[a];if(e===void 0)continue;let t=0,o=0;for(let e=0;e<n;e++){let n=i[a-e];n!==void 0&&(t+=n,o++)}o===n&&(r[a]={k:e,d:t/n})}return r}function ys(e={}){let{paneId:t=`sub`,config:n={}}=e,r={n:9,m:3,showK:!0,showD:!0,...n},i=null,a=0,o=0,s=[];function c(e){return(i!==e||a!==r.n||o!==r.m)&&(s=vs(e,r.n,r.m),i=e,a=r.n,o=r.m),s}return{name:`stoch_${t}`,version:`1.0.0`,description:`STOCH 随机指标渲染器`,debugName:`STOCH`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:s,dpr:l,kLinePositions:u}=e,d=i;if(d.length<r.n+r.m-1)return;let f=c(d);t.save(),t.translate(-o,0);let p=n.height-80/100*n.height,m=n.height-20/100*n.height,h=o,g=o+e.paneWidth;t.strokeStyle=`rgba(0, 0, 0, 0.1)`,t.lineWidth=1,t.setLineDash([4,4]),t.beginPath(),t.moveTo(h,p),t.lineTo(g,p),t.moveTo(h,m),t.lineTo(g,m),t.stroke(),t.setLineDash([]);let _=Math.max(a.start,r.n+r.m-2),v=Math.min(a.end,d.length);if(r.showK){t.strokeStyle=fa.K,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=_;r<v;r++){let i=f[r];if(!i)continue;let o=u[r-a.start];if(o===void 0)continue;let c=o+s/2,d=n.height-(i.k-0)/100*n.height,p=Q(c,l),m=Q(d,l);e?(t.moveTo(p,m),e=!1):t.lineTo(p,m)}t.stroke()}if(r.showD){t.strokeStyle=fa.D,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=_;r<v;r++){let i=f[r];if(!i)continue;let o=u[r-a.start];if(o===void 0)continue;let c=o+s/2,d=n.height-(i.d-0)/100*n.height,p=Q(c,l),m=Q(d,l);e?(t.moveTo(p,m),e=!1):t.lineTo(p,m)}t.stroke()}t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){`n`in e&&e.n!==r.n&&(i=null),`m`in e&&e.m!==r.m&&(i=null),Object.assign(r,e)}}}function bs(e,t,n,r){return vs(e,n,r)[t]}function xs(e,t,n=9,r=3){if(t<n+r-1||t>=e.length)return null;let i=bs(e,t,n,r);return i?{name:`STOCH`,params:[n,r],values:[{label:`K`,value:i.k,color:fa.K},{label:`D`,value:i.d,color:fa.D}]}:null}function Ss(e,t){let n=Array(e.length);if(e.length<t+1)return n;for(let r=t;r<e.length;r++){let i=e[r]?.close,a=e[r-t]?.close;i!==void 0&&a!==void 0&&(n[r]=i-a)}return n}function Cs(e={}){let{paneId:t=`sub`,config:n={}}=e,r={period:10,showMOM:!0,...n},i=null,a=0,o=[];function s(e){return(i!==e||a!==r.period)&&(o=Ss(e,r.period),i=e,a=r.period),o}return{name:`mom_${t}`,version:`1.0.0`,description:`MOM 动量指标渲染器`,debugName:`MOM`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:c,dpr:l,kLinePositions:u}=e,d=i;if(d.length<r.period+1)return;let f=s(d),p=-1/0,m=1/0;for(let e=a.start;e<a.end&&e<f.length;e++){let t=f[e];t!==void 0&&(p=Math.max(p,t),m=Math.min(m,t))}if(!Number.isFinite(p)||!Number.isFinite(m))return;let h=Math.max(Math.abs(p),Math.abs(m))*.1;p+=h,m-=h;let g=p-m||1,_=n.height-(0-m)/g*n.height;t.save(),t.translate(-o,0);let v=o,y=o+e.paneWidth;t.strokeStyle=pa.ZERO,t.lineWidth=1,t.beginPath(),t.moveTo(v,_),t.lineTo(y,_),t.stroke();let b=Math.max(a.start,r.period),x=Math.min(a.end,d.length);if(r.showMOM){t.strokeStyle=pa.MOM,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=b;r<x;r++){let i=f[r];if(i===void 0)continue;let o=u[r-a.start];if(o===void 0)continue;let s=o+c/2,d=n.height-(i-m)/g*n.height,p=Q(s,l),h=Q(d,l);e?(t.moveTo(p,h),e=!1):t.lineTo(p,h)}t.stroke()}t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){`period`in e&&e.period!==r.period&&(i=null),Object.assign(r,e)}}}function ws(e,t,n){return Ss(e,n)[t]}function Ts(e,t,n=10){if(t<n||t>=e.length)return null;let r=ws(e,t,n);return r===void 0?null:{name:`MOM`,params:[n],values:[{label:`MOM`,value:r,color:pa.MOM}]}}function Es(e,t){let n=Array(e.length);if(e.length<t)return n;for(let r=t-1;r<e.length;r++){let i=-1/0,a=1/0;for(let n=0;n<t;n++){let t=e[r-n];t&&(i=Math.max(i,t.high),a=Math.min(a,t.low))}let o=e[r].close;i===a?n[r]=-50:n[r]=(i-o)/(i-a)*-100}return n}function Ds(e={}){let{paneId:t=`sub`,config:n={}}=e,r={period:14,showWMSR:!0,...n},i=null,a=0,o=[];function s(e){return(i!==e||a!==r.period)&&(o=Es(e,r.period),i=e,a=r.period),o}return{name:`wmsr_${t}`,version:`1.0.0`,description:`WMSR 威廉指标渲染器`,debugName:`WMSR`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:c,dpr:l,kLinePositions:u}=e,d=i;if(d.length<r.period)return;let f=s(d),p=-100;0-p,t.save(),t.translate(-o,0);let m=n.height-(-20-p)/100*n.height,h=n.height-(-80-p)/100*n.height,g=n.height-(-50-p)/100*n.height,_=o,v=o+e.paneWidth;t.strokeStyle=ma.OVERBOUGHT,t.lineWidth=1,t.setLineDash([4,4]),t.beginPath(),t.moveTo(_,m),t.lineTo(v,m),t.stroke(),t.strokeStyle=ma.OVERSOLD,t.beginPath(),t.moveTo(_,h),t.lineTo(v,h),t.stroke(),t.strokeStyle=`rgba(0, 0, 0, 0.1)`,t.beginPath(),t.moveTo(_,g),t.lineTo(v,g),t.stroke(),t.setLineDash([]);let y=Math.max(a.start,r.period-1),b=Math.min(a.end,d.length);if(r.showWMSR){t.strokeStyle=ma.WMSR,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=y;r<b;r++){let i=f[r];if(i===void 0)continue;let o=u[r-a.start];if(o===void 0)continue;let s=o+c/2,d=n.height-(i-p)/100*n.height,m=Q(s,l),h=Q(d,l);e?(t.moveTo(m,h),e=!1):t.lineTo(m,h)}t.stroke()}t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){`period`in e&&e.period!==r.period&&(i=null),Object.assign(r,e)}}}function Os(e,t,n){return Es(e,n)[t]}function ks(e,t,n=14){if(t<n||t>=e.length)return null;let r=Os(e,t,n);return r===void 0?null:{name:`WMSR`,params:[n],values:[{label:`WMSR`,value:r,color:ma.WMSR}]}}function As(e,t){let n=Array(e.length);if(e.length<t+1)return n;for(let r=t;r<e.length;r++){let i=e[r]?.close,a=e[r-t]?.close;i!==void 0&&a!==void 0&&a!==0&&(n[r]=(i-a)/a*100)}return n}function js(e,t){let n=Array(e.length),r=0,i=0;for(let a=0;a<e.length;a++){let o=e[a];if(o!==void 0){if(r+=o,i++,i>t){let n=e[a-t];n!==void 0&&(r-=n,i--)}i===t&&(n[a]=r/t)}}return n}function Ms(e,t,n,r,i,a){let o=Array(e.length),s=As(e,t),c=As(e,n),l=As(e,r),u=As(e,i),d=js(s,10),f=js(c,10),p=js(l,10),m=js(u,15),h=Array(e.length);for(let t=0;t<e.length;t++){let e=d[t],n=f[t],r=p[t],i=m[t];e!==void 0&&n!==void 0&&r!==void 0&&i!==void 0&&(h[t]=e*1+n*2+r*3+i*4)}let g=js(h,a);for(let t=0;t<e.length;t++){let e=h[t],n=g[t];e!==void 0&&n!==void 0&&(o[t]={kst:e,signal:n})}return o}function Ns(e={}){let{paneId:t=`sub`,config:n={}}=e,r={roc1:10,roc2:15,roc3:20,roc4:30,signalPeriod:9,showKST:!0,showSignal:!0,...n},i=null,a=``,o=[];function s(e){let t=`${r.roc1}-${r.roc2}-${r.roc3}-${r.roc4}-${r.signalPeriod}`;return(i!==e||a!==t)&&(o=Ms(e,r.roc1,r.roc2,r.roc3,r.roc4,r.signalPeriod),i=e,a=t),o}return{name:`kst_${t}`,version:`1.0.0`,description:`KST 确知指标渲染器`,debugName:`KST`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:c,dpr:l,kLinePositions:u}=e,d=i;if(d.length<r.roc4+15+r.signalPeriod)return;let f=s(d),p=-1/0,m=1/0;for(let e=a.start;e<a.end&&e<f.length;e++){let t=f[e];t&&(p=Math.max(p,t.kst,t.signal),m=Math.min(m,t.kst,t.signal))}if(!Number.isFinite(p)||!Number.isFinite(m))return;let h=(p-m)*.1||1;p+=h,m-=h;let g=p-m||1,_=n.height-(0-m)/g*n.height;t.save(),t.translate(-o,0);let v=o,y=o+e.paneWidth;t.strokeStyle=`rgba(0, 0, 0, 0.1)`,t.lineWidth=1,t.beginPath(),t.moveTo(v,_),t.lineTo(y,_),t.stroke();let b=Math.max(a.start,r.roc4+15+r.signalPeriod-1),x=Math.min(a.end,d.length);if(r.showKST){t.strokeStyle=ha.KST,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=b;r<x;r++){let i=f[r];if(!i)continue;let o=u[r-a.start];if(o===void 0)continue;let s=o+c/2,d=n.height-(i.kst-m)/g*n.height,p=Q(s,l),h=Q(d,l);e?(t.moveTo(p,h),e=!1):t.lineTo(p,h)}t.stroke()}if(r.showSignal){t.strokeStyle=ha.SIGNAL,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=b;r<x;r++){let i=f[r];if(!i)continue;let o=u[r-a.start];if(o===void 0)continue;let s=o+c/2,d=n.height-(i.signal-m)/g*n.height,p=Q(s,l),h=Q(d,l);e?(t.moveTo(p,h),e=!1):t.lineTo(p,h)}t.stroke()}t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){i=null,Object.assign(r,e)}}}function Ps(e,t,n,r,i,a,o){return Ms(e,n,r,i,a,o)[t]}function Fs(e,t,n=10,r=15,i=20,a=30,o=9){if(t<a+15+o||t>=e.length)return null;let s=Ps(e,t,n,r,i,a,o);return s?{name:`KST`,params:[n,r,i,a,o],values:[{label:`KST`,value:s.kst,color:ha.KST},{label:`Signal`,value:s.signal,color:ha.SIGNAL}]}:null}function Is(e,t){let n=Array(e.length);if(e.length<t)return n;for(let r=t-1;r<e.length;r++){let i=-1/0,a=1/0;for(let n=0;n<t;n++){let t=e[r-n];t&&(i=Math.max(i,t.high),a=Math.min(a,t.low))}let o=e[r].close;i===a?n[r]=50:n[r]=(o-a)/(i-a)*100}return n}function Ls(e={}){let{paneId:t=`sub`,config:n={}}=e,r={period:9,showFASTK:!0,...n},i=null,a=0,o=[];function s(e){return(i!==e||a!==r.period)&&(o=Is(e,r.period),i=e,a=r.period),o}return{name:`fastk_${t}`,version:`1.0.0`,description:`FASTK 快速随机指标渲染器`,debugName:`FASTK`,paneId:t,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:i,range:a,scrollLeft:o,kWidth:c,dpr:l,kLinePositions:u}=e,d=i;if(d.length<r.period)return;let f=s(d);t.save(),t.translate(-o,0);let p=n.height-80/100*n.height,m=n.height-20/100*n.height,h=o,g=o+e.paneWidth;t.strokeStyle=`rgba(0, 0, 0, 0.1)`,t.lineWidth=1,t.setLineDash([4,4]),t.beginPath(),t.moveTo(h,p),t.lineTo(g,p),t.moveTo(h,m),t.lineTo(g,m),t.stroke(),t.setLineDash([]);let _=Math.max(a.start,r.period-1),v=Math.min(a.end,d.length);if(r.showFASTK){t.strokeStyle=fa.K,t.lineWidth=1,t.lineJoin=`round`,t.lineCap=`round`,t.beginPath();let e=!0;for(let r=_;r<v;r++){let i=f[r];if(i===void 0)continue;let o=u[r-a.start];if(o===void 0)continue;let s=o+c/2,d=n.height-(i-0)/100*n.height,p=Q(s,l),m=Q(d,l);e?(t.moveTo(p,m),e=!1):t.lineTo(p,m)}t.stroke()}t.restore()},onDataUpdate(){i=null},getConfig(){return{...r}},setConfig(e){`period`in e&&e.period!==r.period&&(i=null),Object.assign(r,e)}}}function Rs(e,t,n){return Is(e,n)[t]}function zs(e,t,n=9){if(t<n||t>=e.length)return null;let r=Rs(e,t,n);return r===void 0?null:{name:`FASTK`,params:[n],values:[{label:`FASTK`,value:r,color:fa.K}]}}function Bs(e){let{indicatorId:t,paneId:n}=e;switch(t){case`VOLUME`:return Uo({paneId:n});case`MACD`:return cs({paneId:n});case`RSI`:return fs({paneId:n});case`CCI`:return hs({paneId:n});case`STOCH`:return ys({paneId:n});case`MOM`:return Cs({paneId:n});case`WMSR`:return Ds({paneId:n});case`KST`:return Ns({paneId:n});case`FASTK`:return Ls({paneId:n});default:throw Error(`Unknown indicator: ${t}`)}}var Vs=class e{dom;opt;data=[];raf=null;viewport=null;paneRenderers=[];markerManager;interaction;pluginHost;rendererPluginManager;constructor(e,t){this.dom=e,this.opt=t,this.interaction=new Vo(this),this.markerManager=new Ga,this.pluginHost=Wi(),this.rendererPluginManager=new Ki,this.rendererPluginManager.setPluginHost(this.pluginHost),this.rendererPluginManager.setInvalidateCallback(()=>this.scheduleDraw()),this.initPanes()}get plugin(){return this.pluginHost}useRenderer(e,t){this.rendererPluginManager.register(e),t&&e.setConfig&&e.setConfig(t)}removeRenderer(e){this.rendererPluginManager.unregister(e)}getRenderer(e){return this.rendererPluginManager.getPlugin(e)}updateRendererConfig(e,t){this.rendererPluginManager.updateConfig(e,t)}setRendererEnabled(e,t){this.rendererPluginManager.setEnabled(e,t)}getAllRenderers(){return this.rendererPluginManager.getAllPlugins()}draw(){this.markerManager.clear();let e=this.computeViewport();if(!e){console.log(`[Chart] draw aborted: no viewport`);return}if(this.data.length===0){console.log(`[Chart] draw aborted: no data`);return}let{start:t,end:n}=Lo(e.scrollLeft,e.plotWidth,this.opt.kWidth,this.opt.kGap,this.data.length,e.dpr),r={start:t,end:n},i=this.calcKLinePositions(r),{kWidthPx:a}=Io(this.opt.kWidth,this.opt.kGap,e.dpr);this.interaction.setKLinePositions(i,r,a);for(let t of this.paneRenderers){let n=t.getPane(),a=t.getDom().plotCanvas.getContext(`2d`),o=t.getDom().yAxisCanvas.getContext(`2d`);n.updateRange(this.data,r),a&&(a.setTransform(1,0,0,1,0,0),a.scale(e.dpr,e.dpr),a.clearRect(0,0,e.plotWidth,n.height+2/e.dpr));let s=this.opt.rightAxisWidth+(this.opt.priceLabelWidth||60);o&&(o.setTransform(1,0,0,1,0,0),o.scale(e.dpr,e.dpr),o.clearRect(0,0,s,n.height+2/e.dpr));let c={ctx:a,pane:Ri(n),data:this.data,range:r,scrollLeft:e.scrollLeft,kWidth:this.opt.kWidth,kGap:this.opt.kGap,dpr:e.dpr,paneWidth:e.plotWidth,kLinePositions:i,markerManager:this.markerManager,yAxisCtx:o??void 0};if(a){a.save();let e=this.rendererPluginManager.render(n.id,c);e.length>0&&this.pluginHost.events.emit(`renderer:error`,{paneId:n.id,errors:e}),a.restore()}}let o=this.dom.xAxisCanvas.getContext(`2d`);if(o){let t={ctx:o,pane:{id:`xAxis`,top:0,height:this.opt.bottomAxisHeight,yAxis:{priceToY:()=>0,yToPrice:()=>0,getPaddingTop:()=>0,getPaddingBottom:()=>0},priceRange:{maxPrice:0,minPrice:0}},data:this.data,range:r,scrollLeft:e.scrollLeft,kWidth:this.opt.kWidth,kGap:this.opt.kGap,dpr:e.dpr,paneWidth:e.plotWidth,kLinePositions:i,xAxisCtx:o},n=this.rendererPluginManager.renderPlugin(`timeAxis`,t);n.length>0&&this.pluginHost.events.emit(`renderer:error`,{paneId:`timeAxis`,errors:n})}let s=this.dom.borderCanvas;if(s){let t=s.getContext(`2d`);if(t){t.setTransform(1,0,0,1,0,0),t.scale(e.dpr,e.dpr),t.clearRect(0,0,e.plotWidth,e.plotHeight);let n={ctx:t,pane:{id:`globalBorders`,top:0,height:e.plotHeight,yAxis:{priceToY:()=>0,yToPrice:()=>0,getPaddingTop:()=>0,getPaddingBottom:()=>0},priceRange:{maxPrice:0,minPrice:0}},data:this.data,range:r,scrollLeft:e.scrollLeft,kWidth:this.opt.kWidth,kGap:this.opt.kGap,dpr:e.dpr,paneWidth:e.plotWidth,kLinePositions:i,borderCtx:t},a=this.rendererPluginManager.renderPlugin(`globalBorders`,n);a.length>0&&this.pluginHost.events.emit(`renderer:error`,{paneId:`globalBorders`,errors:a})}}}zoomAt(e,t,n){let r=this.opt.kWidth+this.opt.kGap,i=(t+e)/r,a=this.viewport?.dpr||window.devicePixelRatio||1,o=Math.round(this.opt.kWidth*a),s=n>0?-2:2,c=o+s;c%2==0&&(c+=s>0?1:-1);let l=c/a,u=3/a;if(l=Math.max(this.opt.minKWidth,Math.min(this.opt.maxKWidth,l)),Math.abs(l-this.opt.kWidth)<.01)return;let d=i*(l+u)-e;if(this.onZoomChange){this.onZoomChange(l,u,d);return}this.opt={...this.opt,kWidth:l,kGap:u};let f=this.dom.container,p=Math.max(0,f.scrollWidth-f.clientWidth);f.scrollLeft=Math.min(Math.max(0,d),p),this.scheduleDraw()}applyZoom(e,t){this.opt={...this.opt,kWidth:e,kGap:t},this.scheduleDraw()}onZoomChange;setOnZoomChange(e){this.onZoomChange=e}getPaneRenderers(){return this.paneRenderers}getMarkerManager(){return this.markerManager}updateCustomMarkers(e){this.markerManager.setCustomMarkers(e),this.scheduleDraw()}clearCustomMarkers(){this.markerManager.clearCustomMarkers(),this.scheduleDraw()}getDom(){return this.dom}getOption(){return this.opt}calcKLinePositions(e){let{start:t,end:n}=e,r=n-t;if(r<=0)return[];let i=this.viewport?.dpr||window.devicePixelRatio||1,{unitPx:a,startXPx:o}=Io(this.opt.kWidth,this.opt.kGap,i),s=Array(r);for(let e=0;e<r;e++)s[e]=(o+(t+e)*a)/i;return s}updateOptions(e){this.opt={...this.opt,...e},e.panes&&this.initPanes(),this.resize()}updatePaneLayout(e){this.opt.panes=e,this.layoutPanes(),this.scheduleDraw()}addPane(e){if(this.paneRenderers.some(t=>t.getPane().id===e)){console.warn(`Pane "${e}" already exists`);return}let t=new Bo(e),n=document.createElement(`canvas`),r=document.createElement(`canvas`);n.id=`${e}-plot`,n.className=`plot-canvas`,n.style.position=`absolute`,n.style.left=`0`,n.style.top=`0`,r.id=`${e}-yAxis`,r.className=`y-axis-canvas`,r.style.position=`absolute`,r.style.right=`0`;let i=new Ho({plotCanvas:n,yAxisCanvas:r},t,{rightAxisWidth:this.opt.rightAxisWidth,yPaddingPx:0,priceLabelWidth:this.opt.priceLabelWidth});this.paneRenderers.push(i);let a=this.dom.canvasLayer;a&&(a.insertBefore(n,this.dom.borderCanvas||null),a.insertBefore(r,this.dom.borderCanvas||null)),this.rendererPluginManager.addKnownPaneId(e)}removePane(e){let t=this.paneRenderers.findIndex(t=>t.getPane().id===e);if(t===-1)return;let n=this.paneRenderers[t];if(!n)return;let r=n.getDom();r.plotCanvas.remove(),r.yAxisCanvas.remove(),this.paneRenderers.splice(t,1),this.rendererPluginManager.removeKnownPaneId(e)}hasPane(e){return this.paneRenderers.some(t=>t.getPane().id===e)}static SUB_PANE_PREFIX=`sub_`;createSubPane(t,n){let r=`${e.SUB_PANE_PREFIX}${t}`;if(this.hasPane(r)){let e=`${t.toLowerCase()}_${r}`;return n&&this.updateRendererConfig(e,n),!0}this.addPane(r);let i=Bs({indicatorId:t,paneId:r});return this.useRenderer(i,n),this.layoutPanes(),this.scheduleDraw(),!0}removeSubPane(t){let n=`${e.SUB_PANE_PREFIX}${t}`;if(!this.hasPane(n))return;let r=`${t.toLowerCase()}_${n}`;this.removeRenderer(r),this.removePane(n),this.layoutPanes(),this.scheduleDraw()}clearSubPanes(){let t=this.paneRenderers.map(e=>e.getPane().id).filter(t=>t.startsWith(e.SUB_PANE_PREFIX));for(let n of t){let t=n.slice(e.SUB_PANE_PREFIX.length);this.removeSubPane(t)}}getSubPaneIndicators(){return this.paneRenderers.map(e=>e.getPane().id).filter(t=>t.startsWith(e.SUB_PANE_PREFIX)).map(t=>t.slice(e.SUB_PANE_PREFIX.length))}updateData(e){console.log(`[Chart] updateData called, data length:`,e?.length),this.data=e??[];let t=this.dom.container;if(t){let e=this.getContentWidth(),n=Math.max(0,e-t.clientWidth);t.scrollLeft>n&&(t.scrollLeft=n)}this.rendererPluginManager.notifyDataUpdate(this.data,{start:0,end:this.data.length}),this.interaction.reset(),this.scheduleDraw()}getData(){return this.data}getContentWidth(){let e=this.data?.length??0,t=this.viewport?.dpr||window.devicePixelRatio||1,{startXPx:n,unitPx:r}=Io(this.opt.kWidth,this.opt.kGap,t);return(n+e*r)/t+(this.opt.rightAxisWidth+(this.opt.priceLabelWidth||60))}resize(){let e=this.computeViewport();!e||e.viewWidth<10||e.viewHeight<10||(this.layoutPanes(),this.scheduleDraw())}scheduleDraw(){this.raf!=null&&cancelAnimationFrame(this.raf),this.raf=requestAnimationFrame(()=>{this.raf=null,this.draw()})}async destroy(){this.raf!=null&&cancelAnimationFrame(this.raf),this.raf=null,this.viewport=null,this.paneRenderers.forEach(e=>e.destroy()),this.paneRenderers=[],this.rendererPluginManager.clear(),this.onZoomChange=void 0,await this.pluginHost.destroy()}initPanes(){this.paneRenderers=this.opt.panes.map(e=>{let t=new Bo(e.id),n=document.createElement(`canvas`),r=document.createElement(`canvas`);return n.id=`${e.id}-plot`,n.className=`plot-canvas`,n.style.position=`absolute`,n.style.left=`0`,n.style.top=`0`,r.id=`${e.id}-yAxis`,r.className=`y-axis-canvas`,r.style.position=`absolute`,r.style.right=`0`,new Ho({plotCanvas:n,yAxisCanvas:r},t,{rightAxisWidth:this.opt.rightAxisWidth,yPaddingPx:this.opt.yPaddingPx,priceLabelWidth:this.opt.priceLabelWidth})});let e=this.dom.canvasLayer;if(e){e.querySelectorAll(`canvas:not(.x-axis-canvas)`).forEach(e=>e.remove()),this.paneRenderers.forEach(t=>{let n=t.getDom();e.appendChild(n.plotCanvas),e.appendChild(n.yAxisCanvas)});let t=document.createElement(`canvas`);t.id=`border`,t.style.position=`absolute`,t.style.left=`0`,t.style.top=`0`,t.style.pointerEvents=`none`,this.dom.borderCanvas=t,e.appendChild(t)}}layoutPanes(){let e=this.viewport;if(!e)return;let t=this.opt.panes.filter(e=>e.visible!==!1),n=Math.max(0,this.opt.paneGap??0),r=0,i=n*Math.max(0,t.length-1),a=Math.max(1,e.plotHeight-i),o=Math.max(0,t.length-1),s=o===0?1:.85**o,c=o>0?(1-s)/o:0,l=t.map((e,t)=>Math.round(a*(t===0?s:c))),u=l.reduce((e,t)=>e+t,0),d=l.length-1;d>=0&&(l[d]+=a-u);for(let i=0;i<t.length;i++){let a=t[i];if(!a)continue;let o=this.paneRenderers.find(e=>e.getPane().id===a.id);if(!o)continue;let s=o.getPane(),c=l[i];s.setLayout(r,c),s.id===`main`?s.setPadding(this.opt.yPaddingPx,this.opt.yPaddingPx):s.setPadding(0,0),o.resize(e.plotWidth,c,e.dpr);let u=o.getDom();u.plotCanvas.style.top=`${r}px`,u.yAxisCanvas.style.top=`${r}px`,r+=c+n}}computeViewport(){let e=this.dom.container;if(!e)return null;let t=Math.max(1,Math.ceil(e.clientWidth)),n=Math.max(1,Math.ceil(e.clientHeight)),r=e.scrollLeft,i=this.opt.rightAxisWidth+(this.opt.priceLabelWidth||60),a=Math.round(t-i),o=Math.round(n-this.opt.bottomAxisHeight),s=window.devicePixelRatio||1,c=16*1024*1024;t*s*(n*s)>c&&(s=Math.sqrt(c/(t*n))),this.dom.canvasLayer.style.width=`${t}px`,this.dom.canvasLayer.style.height=`${n}px`,this.dom.xAxisCanvas.style.width=`${a}px`,this.dom.xAxisCanvas.style.height=`${this.opt.bottomAxisHeight}px`,this.dom.xAxisCanvas.width=Math.round(a*s),this.dom.xAxisCanvas.height=Math.round(this.opt.bottomAxisHeight*s),this.dom.borderCanvas&&(this.dom.borderCanvas.style.width=`${a}px`,this.dom.borderCanvas.style.height=`${o}px`,this.dom.borderCanvas.width=Math.ceil(a*s),this.dom.borderCanvas.height=Math.ceil(o*s));let l={viewWidth:t,viewHeight:n,plotWidth:a,plotHeight:o,scrollLeft:r,dpr:s};return this.viewport=l,l}};function Hs(e){return e.open>e.close?`down`:e.open<e.close?`up`:`flat`}var $=function(e){return e.RISE_WITH_VOLUME=`rise_with_volume`,e.RISE_WITHOUT_VOLUME=`rise_without_volume`,e.FALL_WITH_VOLUME=`fall_with_volume`,e.FALL_WITHOUT_VOLUME=`fall_without_volume`,e.OTHERS=`others`,e}({}),Us={volumeAmplifyThreshold:1.5,volumeShrinkThreshold:.8,avgPeriod:20},Ws=class{prefixSum=[];dataLength=0;build(e){let t=e.length;if(t===0){this.prefixSum=[],this.dataLength=0;return}this.prefixSum=[0];for(let n=0;n<t;n++)this.prefixSum.push(this.prefixSum[n]+(e[n]?.volume??0));this.dataLength=t}query(e,t){return e<0||t>=this.dataLength||e>t?0:this.prefixSum[t+1]-this.prefixSum[e]}getVolumeMA(e,t){if(e<t-1)return 0;let n=e-t+1;return this.query(n,e)/t}get length(){return this.dataLength}};function Gs(e,t,n,r=Us){let i=new Ws;i.build(e);let a=[],{volumeAmplifyThreshold:o,volumeShrinkThreshold:s,avgPeriod:c}=r;for(let r=t;r<n&&r<e.length;r++){let t=e[r]?.volume;if(r<1||!t){a.push($.OTHERS);continue}let n=i.getVolumeMA(r,c),l=e[r];if(!l){a.push($.OTHERS);continue}let u=l.close-l.open,d=u>0,f=u<0,p=t>n*o,m=t<n*s;d&&p?a.push($.RISE_WITH_VOLUME):d&&m?a.push($.RISE_WITHOUT_VOLUME):f&&p?a.push($.FALL_WITH_VOLUME):f&&m?a.push($.FALL_WITHOUT_VOLUME):a.push($.OTHERS)}return a}function Ks(){return{name:`candle`,version:`1.0.0`,description:`K线蜡烛图渲染器`,debugName:`K线`,paneId:`main`,priority:K.MAIN,draw(e){let{ctx:t,pane:n,data:r,range:i,scrollLeft:a,kWidth:o,kGap:s,dpr:c,kLinePositions:l,markerManager:u}=e,d=r;if(!d.length)return;let{kWidthPx:f}=Io(o,s,c);t.save(),t.translate(-a,0);let p=l||[],m=Gs(d,i.start,i.end,Us);for(let e=i.start;e<i.end&&e<d.length;e++){let r=d[e];if(!r)continue;let a=n.yAxis.priceToY(r.open),s=n.yAxis.priceToY(r.close),l=n.yAxis.priceToY(r.high),h=n.yAxis.priceToY(r.low),g=Math.min(a,s),_=Math.max(Math.abs(a-s),1),v=p[e-i.start];if(!v)continue;let y=Xo(Math.round(v*c),g,f,_,c);t.fillStyle=Hs(r)===`up`?J.UP:J.DOWN,t.fillRect(y.bodyRect.x,y.bodyRect.y,y.bodyRect.width,y.bodyRect.height);let b=y.wickRect.width,x=y.wickRect.x,S=y.bodyRect.y,C=y.bodyRect.y+y.bodyRect.height,w=Math.max(r.open,r.close),T=Math.min(r.open,r.close);if(r.high>w){let e=Jo(x,l,S,c);e&&t.fillRect(e.x,e.y,b,e.height)}if(r.low<T){let e=Jo(x,C,h,c);e&&t.fillRect(e.x,e.y,b,e.height)}let E=m[e-i.start];if(E!==$.OTHERS&&u){let n=E===$.RISE_WITH_VOLUME||E===$.RISE_WITHOUT_VOLUME?l-15:h+15;qs(t,y.bodyRect.x+y.bodyRect.width/2,n,E,e,o,4,u)}}t.restore()}}}function qs(e,t,n,r,i,a,o=4,s){let c=Math.min(a,20),l=c*Math.sqrt(3)/2,u,d;switch(r){case $.RISE_WITH_VOLUME:u=`#FF4444`,d=!0;break;case $.RISE_WITHOUT_VOLUME:u=`#00C853`,d=!0;break;case $.FALL_WITH_VOLUME:u=`#FF4444`,d=!1;break;case $.FALL_WITHOUT_VOLUME:u=`#00C853`,d=!1;break;default:return}if(e.save(),e.beginPath(),d){let r=n-o,i=r-l;e.moveTo(t,i),e.lineTo(t-c/2,r),e.lineTo(t+c/2,r)}else{let r=n+o,i=r+l;e.moveTo(t,i),e.lineTo(t-c/2,r),e.lineTo(t+c/2,r)}e.closePath(),e.fillStyle=u,e.fill(),e.restore();let f,p;if(d){let e=n-o-l;f=t-c/2,p=e}else{let e=n+o;e+l,f=t-c/2,p=e}let m;switch(r){case $.RISE_WITH_VOLUME:m=`RISE_WITH_VOLUME`;break;case $.RISE_WITHOUT_VOLUME:m=`RISE_WITHOUT_VOLUME`;break;case $.FALL_WITH_VOLUME:m=`FALL_WITH_VOLUME`;break;case $.FALL_WITHOUT_VOLUME:m=`FALL_WITHOUT_VOLUME`;break;default:return}let h=`mk_price-volume_${i}`;s.register({id:h,type:`triangle`,markerType:m,x:f,y:p,width:c,height:l,dataIndex:i,metadata:{relation:r}})}function Js(e,t){return t?Math.max(4,Math.min(8,Math.round(e/80))):2}function Ys(){return{name:`gridLines`,version:`1.0.0`,description:`网格线渲染器`,debugName:`网格线`,paneId:zi,priority:K.GRID,draw(e){let{ctx:t,pane:n,data:r,range:i,scrollLeft:a,kWidth:o,dpr:s,kLinePositions:c}=e,l=r;if(!l.length)return;let u=Js(n.height,n.id===`main`);t.save(),t.fillStyle=ca.HORIZONTAL,t.translate(-a,0);let d=t.canvas.width/s,f=a,p=a+d,m=n.yAxis.getPaddingTop(),h=n.yAxis.getPaddingBottom(),g=m,_=Math.max(m,n.height-h),v=Math.max(0,_-g);for(let e=0;e<u;e++){let n=u<=1?0:e/(u-1),r=Yo(f,p,Math.round(g+n*v),s);r&&t.fillRect(r.x,r.y,r.width,r.height)}let y=aa(l);for(let e of y){if(e<i.start||e>=i.end||e>=l.length)continue;let r=e-i.start;if(r<0||r>=c.length)continue;let a=Jo(c[r]+o/2,0,n.height,s);a&&t.fillRect(a.x,a.y,a.width,a.height)}t.restore()}}}function Xs(){return{name:`lastPriceLine`,version:`1.0.0`,description:`最新价虚线渲染器`,debugName:`最新价线`,paneId:`main`,priority:K.FOREGROUND,draw(e){let{ctx:t,pane:n,data:r,scrollLeft:i,kWidth:a,dpr:o,kLinePositions:s}=e,c=r,l=c[c.length-1];if(!l)return;t.save(),t.translate(-i,0);let u=Math.round(n.yAxis.priceToY(l.close)),d=s[0]??0,f=(s[s.length-1]??0)+a;t.strokeStyle=J.LAST_PRICE,t.lineWidth=1,t.setLineDash([4,3]),t.beginPath();let p=(Math.floor(u*o)+.5)/o;t.moveTo(Math.round(d*o)/o,p),t.lineTo(Math.round(f*o)/o,p),t.stroke(),t.setLineDash([]),t.restore()}}}function Zs(){return{name:`extremaMarkers`,version:`1.0.0`,description:`可视区最高/最低价标注渲染器`,debugName:`极值标记`,paneId:`main`,priority:K.OVERLAY,draw(e){let{ctx:t,pane:n,data:r,range:i,scrollLeft:a,kWidth:o,dpr:s,paneWidth:c,kLinePositions:l}=e,u=r;if(!u.length||n.id!==`main`)return;let d=Math.max(0,i.start),f=Math.min(u.length,i.end);if(f-d<=0)return;let p=-1/0,m=1/0,h=d,g=d;for(let e=d;e<f;e++){let t=u[e];t&&(t.high>=p&&(p=t.high,h=e),t.low<=m&&(m=t.low,g=e))}if(!Number.isFinite(p)||!Number.isFinite(m))return;let _=e=>{let t=e-i.start;return t<0||t>=l.length?0:l[t]+o/2};t.save(),t.translate(-a,0),Qs(t,_(h),n.yAxis.priceToY(p),p,s,c,a),Qs(t,_(g),n.yAxis.priceToY(m),m,s,c,a),t.restore()}}}function Qs(e,t,n,r,i,a,o){let s=r.toFixed(2);e.font=`12px Arial`;let c=e.measureText(s).width,l=t-o+30+4+c>a,u=t,d=l?t-30:t+30;u>d&&([u,d]=[d,u]);let f=Yo(u,d,n,i);f&&(e.fillStyle=q.WEAK,e.fillRect(f.x,f.y,f.width,f.height));let p=Z(d,i),m=Z(n,i);e.fillStyle=q.WEAK,e.beginPath(),e.arc(p,m,2,0,Math.PI*2),e.fill(),e.font=`12px Arial`,e.textBaseline=`middle`,e.fillStyle=J.NEUTRAL,l?(e.textAlign=`right`,e.fillText(s,Z(t-30-4,i),Z(n,i))):(e.textAlign=`left`,e.fillText(s,Z(t+30+4,i),Z(n,i)))}function $s(e,t){let{x:n,y:r,width:i,height:a,priceRange:o,yPaddingPx:s=0,dpr:c,ticks:l=10,bgColor:u=oa.TRANSPARENT,textColor:d=q.SECONDARY,lineColor:f=sa.DARK,fontSize:p=16,paddingX:m=12,drawLeftBorder:h=!0,drawTickLines:g=!0}=t,_=Math.max(0,Math.min(s,Math.floor(a/2)-1)),{maxPrice:v,minPrice:y}=o,b=v-y,x=b===0?0:b/(Math.max(2,l)-1);e.fillStyle=u,e.fillRect(n,r,i,a),h&&(e.strokeStyle=f,e.lineWidth=1,e.beginPath(),e.moveTo(Q(n,c),r),e.lineTo(Q(n,c),r+a),e.stroke()),e.font=`${p}px -apple-system,BlinkMacSystemFont,Trebuchet MS,Roboto,Ubuntu,sans-serif`,e.textBaseline=`middle`,e.textAlign=`left`;let S=n+m;for(let t=0;t<Math.max(2,l);t++){let i=b===0?v:v-x*t,o=Math.round(qo(i,v,y,a,_,_)+r);if(g){e.strokeStyle=f,e.beginPath();let t=Q(o,c);e.moveTo(n,t),e.lineTo(n+4,t),e.stroke()}e.fillStyle=d,e.fillText(i.toFixed(2),Z(S,c),Z(o,c))}}function ec(e,t){let{x:n,y:r,width:i,height:a,crosshairX:o,timestamp:s,dpr:c,bgColor:l=oa.WHITE,textColor:u=q.PRIMARY,fontSize:d=16,paddingX:f=8,paddingY:p=4}=t,m=ia(s);e.save(),e.font=`${d}px -apple-system,BlinkMacSystemFont,Trebuchet MS,Roboto,Ubuntu,sans-serif`,e.textBaseline=`middle`,e.textAlign=`center`;let h=Math.round(e.measureText(m).width),g=Math.min(i,h+f*2),_=Math.min(a,d+p*2),v=Math.min(Math.max(o,n+g/2),n+i-g/2),y=r+a/2,b=v-g/2;y-_/2,e.fillStyle=l,e.fillRect(Z(b,c),0,Z(g,c),Z(_,c)),e.fillStyle=u,e.fillText(m,Z(v,c),Z(y,c)),e.restore()}function tc(e,t){let{x:n,y:r,width:i,height:a,data:o,scrollLeft:s,kWidth:c,kGap:l,startIndex:u,endIndex:d,dpr:f,bgColor:p=oa.TRANSPARENT,textColor:m=q.SECONDARY,lineColor:h=sa.DARK,fontSize:g=16,paddingX:_=8,drawTopBorder:v=!0,drawBottomBorder:y=!0}=t,b=Math.round(c*f),x=b%2==0?b+1:b,S=Math.round(l*f),C=x+S,w=S,T=C/f,E=w/f,D=x/f;e.fillStyle=p,e.fillRect(n,r,i,a),v&&(e.strokeStyle=h,e.lineWidth=1,e.beginPath(),e.moveTo(n,Q(r,f)),e.lineTo(n+i,Q(r,f)),e.stroke()),y&&(e.strokeStyle=h,e.lineWidth=1,e.beginPath(),e.moveTo(n,Q(r+a,f)),e.lineTo(n+i,Q(r+a,f)),e.stroke()),e.textAlign=`center`,e.textBaseline=`middle`;let O=r+a/2,k=aa(o).filter(e=>e>=u&&e<d);for(let t of k){let n=o[t];if(!n)continue;let a=E+t*T+D/2-s,c=_,l=Math.max(_,i-_);if(a>=c&&a<=l){let t=Math.min(Math.max(a,c),l);e.strokeStyle=h,e.beginPath();let i=Q(t,f);e.moveTo(i,r),e.lineTo(i,r+4),e.stroke();let{text:o,isYear:s}=ta(n.timestamp);e.fillStyle=m,e.font=`${s?`bold `:``}${g}px -apple-system,BlinkMacSystemFont,Trebuchet MS,Roboto,Ubuntu,sans-serif`,e.fillText(o,Z(t,f),Z(O,f))}}}function nc(e){return{name:`yAxis`,version:`1.0.0`,description:`Y轴价格刻度渲染器`,debugName:`Y轴`,paneId:zi,priority:K.SYSTEM_YAXIS,draw(t){let{ctx:n,pane:r,dpr:i,yAxisCtx:a}=t,o=a||n,s=Js(r.height,r.id===`main`);$s(o,{x:0,y:r.top,width:e.axisWidth,height:r.height,priceRange:r.priceRange,yPaddingPx:e.yPaddingPx,dpr:i,ticks:s,drawLeftBorder:!1,drawTickLines:!1})}}}var rc=Symbol(`time-axis`);function ic(e){return{name:`timeAxis`,version:`1.0.0`,description:`时间轴渲染器`,debugName:`时间轴`,paneId:rc,priority:K.SYSTEM_XAXIS,isSystem:!0,draw(t){let{ctx:n,data:r,range:i,scrollLeft:a,kWidth:o,kGap:s,dpr:c,paneWidth:l}=t,u=r,d=n,f=l,p=e.height;d.setTransform(1,0,0,1,0,0),d.scale(c,c),d.clearRect(0,0,f,p),tc(d,{x:0,y:0,width:f,height:p,data:u,scrollLeft:a,kWidth:o,kGap:s,startIndex:i.start,endIndex:i.end,dpr:c,drawTopBorder:!1,drawBottomBorder:!1});let m=e.getCrosshair?.();if(m&&typeof m.index==`number`){let e=u[m.index];e&&ec(d,{x:0,y:0,width:f,height:p,crosshairX:m.x,timestamp:e.timestamp,dpr:c})}}}}function ac(e){return{name:`crosshair`,version:`1.0.0`,description:`十字线渲染器`,debugName:`十字线`,paneId:zi,priority:K.SYSTEM_CROSSHAIR,draw(t){let{ctx:n,pane:r,dpr:i,paneWidth:a}=t,o=e.getCrosshairState();if(o.isDragging||!o.pos)return;let{x:s,y:c}=o.pos,l=r.id===o.activePaneId,u=l?c-r.top:-1;n.save(),n.beginPath(),n.rect(0,0,a,r.height),n.clip(),n.fillStyle=ga.LINE;let d=Jo(s,0,r.height,i);if(d&&n.fillRect(d.x,d.y,d.width,d.height),l&&u>=0){let e=Yo(0,a,Math.min(u,r.height-1/i),i);e&&n.fillRect(e.x,e.y,e.width,e.height)}n.restore()}}}var oc=Symbol(`global-borders`);function sc(e){return{name:`globalBorders`,version:`1.0.0`,description:`全局边框渲染器`,debugName:`边框`,paneId:oc,priority:K.SYSTEM_BORDER,isSystem:!0,draw(t){let{ctx:n,dpr:r,paneWidth:i,borderCtx:a}=t,o=e.getPaneInfos();if(o.length===0)return;let s=a||n;s.save(),s.strokeStyle=sa.DARK,s.lineWidth=3;let c=1.5/r,l=Q(c,r),u=Q(i-c,r),d=1/0,f=-1/0;for(let e of o)d=Math.min(d,e.top),f=Math.max(f,e.top+e.height);d=Number.isFinite(d)?d:0,f=Number.isFinite(f)?f:0,s.beginPath();let p=o[0],m=Q(p.top+c,r);s.moveTo(l,m),s.lineTo(u,m);let h=o[o.length-1],g=Q(h.top+h.height-c,r);s.moveTo(l,g),s.lineTo(u,g);let _=Q(d+c,r),v=Z(f-c,r);s.moveTo(l,_),s.lineTo(l,v),s.moveTo(u,_),s.lineTo(u,v);for(let e=1;e<o.length;e++){let t=o[e],n=Q(t.top,r);s.moveTo(l,n),s.lineTo(u,n)}s.stroke(),s.restore()}}}function cc(e){let t={...e};return{name:`paneTitle_${e.paneId}`,version:`1.0.0`,description:`面板标题渲染器`,debugName:`面板标题`,paneId:e.paneId,priority:K.FOREGROUND,draw(e){let{ctx:n,pane:r}=e;if(r.id!==t.paneId)return;let i=t.yOffset??12;n.save(),n.font=`12px Arial`,n.textAlign=`left`,n.textBaseline=`top`;let a=t.getTitleInfo?.();if(a){let e=12;if(n.fillStyle=q.PRIMARY,n.fillText(a.name,e,i),e+=n.measureText(a.name).width,a.params&&a.params.length>0){let t=`(${a.params.join(`,`)})`;n.fillStyle=q.TERTIARY,n.fillText(t,e,i),e+=n.measureText(t).width+8}else e+=8;if(a.values&&a.values.length>0)for(let t of a.values){let r=`${t.label} ${t.value.toFixed(3)}`;n.fillStyle=t.color,n.fillText(r,e,i),e+=n.measureText(r).width+8}}else if(n.fillStyle=q.PRIMARY,n.fillText(t.title,12,i),t.description){let e=n.measureText(t.title).width;n.fillStyle=q.WEAK,n.fillText(` - ${t.description}`,12+e,i)}n.restore()},setConfig(e){t={...t,...e}}}}var lc={class:`chart-wrapper`},uc=4,dc=Ha((0,f.defineComponent)({__name:`KLineChart`,props:{semanticConfig:{},kWidth:{default:10},kGap:{default:2},yPaddingPx:{default:0},minKWidth:{default:2},maxKWidth:{default:50},rightAxisWidth:{default:70},bottomAxisHeight:{default:24},priceLabelWidth:{default:60}},setup(e,{expose:t}){let n=e,r=(0,f.ref)(null),i=(0,f.ref)(null),a=(0,f.ref)(null),o=(0,f.ref)(n.kWidth),s=(0,f.ref)(n.kGap),c=(0,f.shallowRef)(null),l=(0,f.shallowRef)(null),u=(0,f.ref)(0);function d(){c.value?.scheduleDraw()}function p(e){if(!e)return;let t=e.getBoundingClientRect();c.value?.interaction.setTooltipSize({width:Math.max(180,Math.round(t.width)),height:Math.max(80,Math.round(t.height))})}let m=(0,f.ref)(null),h=(0,f.ref)(null),g=(0,f.ref)({x:0,y:0}),_=(0,f.ref)(!1),v=(0,f.ref)(null),y=(0,f.ref)(null),b=(0,f.ref)({x:0,y:0}),x=(0,f.computed)(()=>{let e=v.value;if(typeof e!=`number`)return null;let t=c.value?.getData();return t&&e>=0&&e<t.length?t[e]:null}),S=(0,f.computed)(()=>v.value),C=(0,f.computed)(()=>b.value),w=(0,f.computed)(()=>c.value?.getData()??[]);function T(){let e=c.value?.interaction;if(!e){v.value=null,y.value=null,m.value=null,h.value=null;return}v.value=e.hoveredIndex??null,y.value=e.crosshairIndex??null,m.value=e.hoveredMarkerData??null,h.value=e.hoveredCustomMarker??null;let t=e.tooltipPos;t&&(b.value={x:t.x,y:t.y})}function E(e){_.value=!0,c.value?.interaction.onMouseDown(e),T()}function D(e){_.value=!0,c.value?.interaction.onPointerDown(e),T()}function O(e){let t=a.value;if(t){let n=t.getBoundingClientRect();g.value={x:e.clientX-n.left,y:e.clientY-n.top}}c.value?.interaction.onMouseMove(e),T()}function k(e){let t=a.value;if(t){let n=t.getBoundingClientRect();g.value={x:e.clientX-n.left,y:e.clientY-n.top}}c.value?.interaction.onPointerMove(e),T()}function A(){_.value=!1,c.value?.interaction.onMouseUp(),T()}function j(e){_.value=!1,c.value?.interaction.onPointerUp(e),T()}function M(){_.value=!1,c.value?.interaction.onMouseLeave(),v.value=null}function ee(e){_.value=!1,c.value?.interaction.onPointerLeave(e),v.value=null}function te(){c.value?.interaction.onScroll(),T()}let N=(0,f.ref)([`MA`]),P=(0,f.ref)({}),F=(0,f.ref)([]),ne=[`VOLUME`,`MACD`,`RSI`,`CCI`,`STOCH`,`MOM`,`WMSR`,`KST`,`FASTK`];(0,f.watch)((0,f.computed)(()=>F.value.length===0?[{id:`main`,ratio:1,visible:!0}]:[{id:`main`,ratio:1,visible:!0},...F.value.map(e=>({id:e.id,ratio:1,visible:!0}))]),e=>{c.value?.updatePaneLayout(e)},{flush:`post`});function I(e){switch(e){case`MACD`:return{fastPeriod:12,slowPeriod:26,signalPeriod:9};case`RSI`:return{period1:6,period2:12,period3:24};case`CCI`:return{period:14};case`STOCH`:return{n:9,m:3};case`MOM`:return{period:10};case`WMSR`:return{period:14};case`KST`:return{roc1:10,roc2:15,roc3:20,roc4:30,signalPeriod:9};case`FASTK`:return{period:9};default:return{}}}function re(e=`VOLUME`,t){if(F.value.length>=uc)return!1;let n=`sub_${e}`;if(F.value.some(e=>e.id===n))return!0;if(!c.value?.createSubPane(e,t??I(e)))return!1;let r=cc({paneId:n,title:e,getTitleInfo:()=>ce(n)});return c.value?.useRenderer(r),F.value.push({id:n,indicatorId:e,rendererName:`${e.toLowerCase()}_${n}`,paneTitleRendererName:r.name,params:t??I(e)}),N.value.includes(e)||N.value.push(e),!0}function ie(e){let t=F.value.findIndex(t=>t.id===e);if(t===-1)return;let n=F.value[t];n&&(c.value?.removeRenderer(n.paneTitleRendererName),c.value?.removeSubPane(n.indicatorId),F.value.splice(t,1),F.value.some(e=>e.indicatorId===n.indicatorId)||(N.value=N.value.filter(e=>e!==n.indicatorId)))}function ae(){for(let e of F.value)c.value?.removeRenderer(e.paneTitleRendererName);c.value?.clearSubPanes(),F.value=[],N.value=N.value.filter(e=>!ne.includes(e))}function oe(){let e=c.value?.getSubPaneIndicators()??[];F.value=[];for(let t of e){let e=`sub_${t}`,n=cc({paneId:e,title:t,getTitleInfo:()=>ce(e)});c.value?.useRenderer(n),F.value.push({id:e,indicatorId:t,rendererName:`${t.toLowerCase()}_${e}`,paneTitleRendererName:n.name,params:I(t)}),N.value.includes(t)||N.value.push(t)}}function se(e,t){let n=F.value.find(t=>t.id===e);if(!n)return;let r=n.indicatorId;c.value?.removeRenderer(n.paneTitleRendererName),c.value?.removeSubPane(r),c.value?.createSubPane(t,I(t));let i=`sub_${t}`,a=cc({paneId:i,title:t,getTitleInfo:()=>ce(i)});c.value?.useRenderer(a);let o=F.value.findIndex(t=>t.id===e);o!==-1&&(F.value[o]={id:i,indicatorId:t,rendererName:`${t.toLowerCase()}_${i}`,paneTitleRendererName:a.name,params:I(t)}),N.value=N.value.filter(e=>e!==r),N.value.includes(t)||N.value.push(t)}function ce(e){let t=F.value.find(t=>t.id===e);if(!t)return null;let n=c.value?.getData();if(!n||n.length===0)return null;let r=t.params;if(t.indicatorId===`VOLUME`)return{name:`VOL`,params:[],values:[]};let i=y.value;if(i===null)return null;switch(t.indicatorId){case`MACD`:return us(n,i,r.fastPeriod??12,r.slowPeriod??26,r.signalPeriod??9);case`RSI`:return ps(n,i,r.period1??6,r.period2??12,r.period3??24);case`CCI`:return _s(n,i,r.period??14);case`STOCH`:return xs(n,i,r.n??9,r.m??3);case`MOM`:return Ts(n,i,r.period??10);case`WMSR`:return ks(n,i,r.period??14);case`KST`:return Fs(n,i,r.roc1??10,r.roc2??15,r.roc3??20,r.roc4??30,r.signalPeriod??9);case`FASTK`:return zs(n,i,r.period??9);default:return null}}function le(e,t){if(e===`MA`){t?(N.value.includes(e)||N.value.push(e),c.value?.updateRendererConfig(`ma`,{ma5:!0,ma10:!0,ma20:!0,ma30:!0,ma60:!0}),c.value?.setRendererEnabled(`maLegend`,!0)):(N.value=N.value.filter(t=>t!==e),c.value?.updateRendererConfig(`ma`,{ma5:!1,ma10:!1,ma20:!1,ma30:!1,ma60:!1}),c.value?.setRendererEnabled(`maLegend`,!1)),d();return}if(e===`BOLL`){t?N.value.includes(e)||N.value.push(e):N.value=N.value.filter(t=>t!==e),c.value?.setRendererEnabled(`boll`,t),c.value?.setRendererEnabled(`bollLegend`,t),d();return}if(ne.includes(e)){if(t){if(F.value.find(t=>t.indicatorId===e))return;if(!re(e)){let t=F.value[F.value.length-1];t&&se(t.id,e)}}else F.value.filter(t=>t.indicatorId===e).forEach(e=>ie(e.id));d()}}function ue(e,t){if(P.value[e]=t,e===`BOLL`){c.value?.updateRendererConfig(`boll`,t),c.value?.updateRendererConfig(`bollLegend`,t),d();return}ne.includes(e)&&F.value.filter(t=>t.indicatorId===e).forEach(e=>{e.params={...t},c.value?.updateRendererConfig(e.rendererName,t)}),d()}let de=(0,f.computed)(()=>{let e=u.value,t=window.devicePixelRatio||1,{startXPx:r,unitPx:i}=Io(o.value,s.value,t);return(r+e*i)/t+(n.rightAxisWidth+n.priceLabelWidth)});function fe(){let e=a.value;e&&(e.scrollLeft=e.scrollWidth,d())}return t({scheduleRender:d,scrollToRight:fe,addSubPane:re,removeSubPane:ie,switchSubIndicator:se,clearAllSubPanes:ae,get plugin(){return c.value?.plugin}}),(0,f.onMounted)(()=>{let e=a.value,t=i.value,p=r.value;if(!e||!t||!p)return;e.addEventListener(`wheel`,e=>{c.value?.interaction.onWheel(e),T()},{passive:!1});let g=new Vs({container:e,canvasLayer:t,xAxisCanvas:p},{kWidth:o.value,kGap:s.value,yPaddingPx:n.yPaddingPx,rightAxisWidth:n.rightAxisWidth,bottomAxisHeight:n.bottomAxisHeight,priceLabelWidth:n.priceLabelWidth,minKWidth:n.minKWidth,maxKWidth:n.maxKWidth,panes:[{id:`main`,ratio:1}],paneGap:0});g.setOnZoomChange(async(e,t,n)=>{o.value=e,s.value=t,await(0,f.nextTick)(),await new Promise(e=>requestAnimationFrame(()=>e()));let r=a.value;if(!r)return;let i=Math.max(0,r.scrollWidth-r.clientWidth);r.scrollLeft=Math.min(Math.max(0,n),i),g.applyZoom(e,t)}),g.useRenderer(Ys()),g.useRenderer(Zs()),g.useRenderer(Qo({ma5:!0,ma10:!0,ma20:!0,ma30:!0,ma60:!0})),g.useRenderer(ns()),g.setRendererEnabled(`boll`,!1),g.useRenderer(Ks()),g.useRenderer(Xs()),g.useRenderer(Zi()),g.useRenderer(nc({axisWidth:n.rightAxisWidth,yPaddingPx:n.yPaddingPx})),g.useRenderer(es({yPaddingPx:n.yPaddingPx,showMA:{ma5:!0,ma10:!0,ma20:!0,ma30:!0,ma60:!0}})),g.useRenderer(is({yPaddingPx:n.yPaddingPx})),g.setRendererEnabled(`bollLegend`,!1),g.useRenderer(ac({getCrosshairState:()=>({pos:g.interaction.crosshairPos,activePaneId:g.interaction.activePaneId,isDragging:g.interaction.isDraggingState()})})),g.useRenderer(ic({height:n.bottomAxisHeight,getCrosshair:()=>{let e=g.interaction.crosshairPos,t=g.interaction.hoveredIndex;return e&&t!==null?{x:e.x,index:t}:null}})),g.useRenderer(sc({getPaneInfos:()=>g.getPaneRenderers().map(e=>({top:e.getPane().top,height:e.getPane().height}))})),c.value=g,g.resize(),l.value=new Si(g),l.value.on(`config:error`,e=>{console.error(`Semantic config error:`,e)}),l.value.on(`config:ready`,()=>{u.value=g.getData()?.length??0,oe(),(0,f.nextTick)(()=>fe())}),l.value.applyConfig(n.semanticConfig).then(e=>{e&&!e.success&&console.error(`Semantic config apply failed:`,e.errors)}),g.interaction.setOnMarkerHover(e=>{m.value=e,d()}),g.interaction.setOnCustomMarkerHover(e=>{h.value=e,d()});let _=null,v=new ResizeObserver(()=>{_&&clearTimeout(_),_=setTimeout(()=>{g.resize(),_=null},50)});v.observe(e),g.__resizeObserver=v,g.__resizeTimeout=_}),(0,f.onUnmounted)(()=>{let e=c.value;if(e){let t=e.__resizeObserver,n=e.__resizeTimeout;n&&clearTimeout(n),t&&t.disconnect();let r=e.__onWheel,i=a.value;r&&i&&i.removeEventListener(`wheel`,r),e.destroy()}c.value=null}),(0,f.watch)(()=>[n.kWidth,n.kGap],([e,t])=>{typeof e==`number`&&(o.value=e),typeof t==`number`&&(s.value=t),c.value?.updateOptions({kWidth:o.value,kGap:s.value})}),(0,f.watch)(()=>n.yPaddingPx,e=>{c.value?.updateOptions({yPaddingPx:e}),d()}),(0,f.watch)(()=>n.semanticConfig,async(e,t)=>{if(e&&e!==t){let t=await l.value?.applyConfig(e);t&&!t.success&&console.error(`Semantic config apply failed:`,t.errors)}},{deep:!0}),(e,t)=>((0,f.openBlock)(),(0,f.createElementBlock)(`div`,lc,[(0,f.createElementVNode)(`div`,{class:(0,f.normalizeClass)([`chart-container`,{"is-dragging":_.value}]),ref_key:`containerRef`,ref:a,onScrollPassive:te,onMousedown:E,onMousemove:O,onMouseup:A,onMouseleave:M,onPointerdown:D,onPointermove:k,onPointerup:j,onPointerleave:ee},[(0,f.createElementVNode)(`div`,{class:`scroll-content`,style:(0,f.normalizeStyle)({width:de.value+`px`})},[(0,f.createElementVNode)(`div`,{class:`canvas-layer`,ref_key:`canvasLayerRef`,ref:i},[(0,f.createElementVNode)(`canvas`,{class:`x-axis-canvas`,ref_key:`xAxisCanvasRef`,ref:r},null,512),x.value?((0,f.openBlock)(),(0,f.createBlock)(Ua,{key:0,k:x.value,index:S.value,data:w.value,pos:C.value,"set-el":p},null,8,[`k`,`index`,`data`,`pos`])):(0,f.createCommentVNode)(``,!0),m.value||h.value?((0,f.openBlock)(),(0,f.createBlock)(Ja,{key:1,marker:m.value||h.value,pos:g.value},null,8,[`marker`,`pos`])):(0,f.createCommentVNode)(``,!0)],512)],4)],34),(0,f.createVNode)(Po,{"active-indicators":N.value,"indicator-params":P.value,onToggle:le,onUpdateParams:ue},null,8,[`active-indicators`,`indicator-params`])]))}}),[[`__scopeId`,`data-v-8c9105eb`]]),fc={install(e){e.component(`KLineChart`,dc)}};exports.ConfigManager=Hi,exports.EventBus=p,exports.GLOBAL_PANE_ID=zi,exports.HookSystem=Vi,exports.KLineChart=dc,exports.KMapPlugin=fc,exports.PluginHostImpl=Ui,exports.PluginRegistry=Bi,exports.PluginState=Li,exports.RENDERER_PRIORITY=K,exports.RendererPluginManager=Ki,exports.createPluginHost=Wi,exports.wrapPaneInfo=Ri;