@visactor/vchart 1.12.10 → 1.12.11
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/build/es5/index.js +1 -1
- package/build/index.js +351 -114
- package/build/index.min.js +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/cjs/chart/index.js +2 -1
- package/cjs/compile/compiler.js +2 -1
- package/cjs/compile/compiler.js.map +1 -1
- package/cjs/compile/interface/compiler.d.ts +14 -0
- package/cjs/compile/interface/compiler.js.map +1 -1
- package/cjs/component/axis/mixin/util/break-data.js +1 -1
- package/cjs/component/axis/mixin/util/break-data.js.map +1 -1
- package/cjs/component/title/title.js +20 -16
- package/cjs/component/title/title.js.map +1 -1
- package/cjs/component/tooltip/interface/spec.d.ts +12 -2
- package/cjs/component/tooltip/interface/spec.js.map +1 -1
- package/cjs/component/tooltip/tooltip-transformer.js +2 -3
- package/cjs/component/tooltip/tooltip-transformer.js.map +1 -1
- package/cjs/component/tooltip/tooltip.js +42 -24
- package/cjs/component/tooltip/tooltip.js.map +1 -1
- package/cjs/constant/layout.js +1 -2
- package/cjs/constant/scatter.js +2 -1
- package/cjs/core/index.d.ts +1 -1
- package/cjs/core/index.js +1 -1
- package/cjs/core/index.js.map +1 -1
- package/cjs/data/register.js +1 -2
- package/cjs/interaction/zoom/zoomable.js +2 -1
- package/cjs/interaction/zoom/zoomable.js.map +1 -1
- package/cjs/plugin/components/axis-sync/zero-align-transform.d.ts +1 -0
- package/cjs/plugin/components/axis-sync/zero-align-transform.js +17 -4
- package/cjs/plugin/components/axis-sync/zero-align-transform.js.map +1 -1
- package/cjs/plugin/components/tooltip-handler/base.js +1 -1
- package/cjs/plugin/components/tooltip-handler/base.js.map +1 -1
- package/cjs/plugin/components/tooltip-handler/dom/model/shape-model.js +7 -2
- package/cjs/plugin/components/tooltip-handler/dom/model/shape-model.js.map +1 -1
- package/cjs/series/base/base-series.js +2 -2
- package/cjs/series/base/base-series.js.map +1 -1
- package/cjs/series/word-cloud/base.js +9 -6
- package/cjs/series/word-cloud/base.js.map +1 -1
- package/cjs/typings/spec/common.d.ts +1 -0
- package/cjs/typings/spec/common.js.map +1 -1
- package/esm/chart/index.js +2 -1
- package/esm/compile/compiler.js +1 -1
- package/esm/compile/compiler.js.map +1 -1
- package/esm/compile/interface/compiler.d.ts +14 -0
- package/esm/compile/interface/compiler.js.map +1 -1
- package/esm/component/axis/mixin/util/break-data.js +1 -1
- package/esm/component/axis/mixin/util/break-data.js.map +1 -1
- package/esm/component/title/title.js +20 -18
- package/esm/component/title/title.js.map +1 -1
- package/esm/component/tooltip/interface/spec.d.ts +12 -2
- package/esm/component/tooltip/interface/spec.js.map +1 -1
- package/esm/component/tooltip/tooltip-transformer.js +2 -3
- package/esm/component/tooltip/tooltip-transformer.js.map +1 -1
- package/esm/component/tooltip/tooltip.js +42 -25
- package/esm/component/tooltip/tooltip.js.map +1 -1
- package/esm/constant/layout.js +1 -2
- package/esm/constant/scatter.js +2 -1
- package/esm/core/index.d.ts +1 -1
- package/esm/core/index.js +1 -1
- package/esm/core/index.js.map +1 -1
- package/esm/data/register.js +1 -2
- package/esm/interaction/zoom/zoomable.js +2 -1
- package/esm/interaction/zoom/zoomable.js.map +1 -1
- package/esm/plugin/components/axis-sync/zero-align-transform.d.ts +1 -0
- package/esm/plugin/components/axis-sync/zero-align-transform.js +17 -4
- package/esm/plugin/components/axis-sync/zero-align-transform.js.map +1 -1
- package/esm/plugin/components/tooltip-handler/base.js +1 -1
- package/esm/plugin/components/tooltip-handler/base.js.map +1 -1
- package/esm/plugin/components/tooltip-handler/dom/model/shape-model.js +8 -3
- package/esm/plugin/components/tooltip-handler/dom/model/shape-model.js.map +1 -1
- package/esm/series/base/base-series.js +2 -2
- package/esm/series/base/base-series.js.map +1 -1
- package/esm/series/word-cloud/base.js +9 -6
- package/esm/series/word-cloud/base.js.map +1 -1
- package/esm/typings/spec/common.d.ts +1 -0
- package/esm/typings/spec/common.js.map +1 -1
- package/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin/components/axis-sync/zero-align-transform.ts"],"names":[],"mappings":"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","file":"zero-align-transform.js","sourcesContent":["import { isValidNumber, last } from '@visactor/vutils';\nimport { isContinuous } from '@visactor/vscale';\nimport type { CartesianAxis } from '../../../component';\nimport type { LinearAxisMixin } from '../../../component/axis/mixin/linear-axis-mixin';\n\ntype ScaleInfo = {\n total: number;\n negative: number;\n positive: number;\n includeZero: boolean;\n extendable_min: boolean;\n extendable_max: boolean;\n domain: number[];\n};\n\nexport function isValidAlignDomain(domain: number[]): boolean {\n return domain.length === 2 && isValidNumber(domain[0]) && isValidNumber(last(domain)) && last(domain) >= domain[0];\n}\n\nexport function getScaleInfo(axis: LinearAxisMixin, domain: number[]): ScaleInfo {\n // example: -10 -20 total = 10 negative = 10\n const total = last(domain) - domain[0];\n const includeZero = last(domain) * domain[0] < 0;\n let negative = domain[0] <= 0 ? 0 - domain[0] : 0;\n let positive = last(domain) > 0 ? last(domain) - 0 : 0;\n if (total === 0) {\n if (domain[0] < 0) {\n negative = 1;\n positive = 0;\n } else if (domain[0] > 0) {\n negative = 0;\n positive = 1;\n }\n } else {\n negative = negative / total;\n positive = positive / total;\n }\n const domainSpec = axis.getDomainSpec();\n return {\n total,\n negative,\n positive,\n includeZero,\n domain,\n extendable_min: !isValidNumber(domainSpec.min),\n extendable_max: !isValidNumber(domainSpec.max)\n };\n}\n\nfunction inDifferentCrossZero(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const {\n positive: positive1,\n negative: negative1,\n extendable_min: s1Extendable_min,\n extendable_max: s1Extendable_max,\n domain: domain1\n } = info1;\n const {\n positive: positive2,\n negative: negative2,\n extendable_min: s2Extendable_min,\n extendable_max: s2Extendable_max,\n domain: domain2\n } = info2;\n // make s2 percent same as s1\n if (positive2 > 0) {\n if (!s2Extendable_min) {\n return false;\n }\n let comp = negative1 / positive1;\n // if s1 could extend max, then expand s1\n // example:【0.5,0.5】 + 【0,1】 = 【0.5,1】\n if (s1Extendable_max) {\n // change s1 percent\n comp = negative1 / Math.max(positive1, positive2);\n domain1[1] = -domain1[0] / comp;\n }\n domain2[0] = -domain2[1] * comp;\n } else if (negative2 > 0) {\n if (!s2Extendable_max) {\n return false;\n }\n let comp = positive1 / negative1;\n // if s1 could extend max, then expand s1\n // example:【0.5,0.5】 + 【1,0】 = 【1,0.5】\n if (s1Extendable_min) {\n // change s1 percent\n comp = positive1 / Math.max(negative1, negative1);\n domain1[0] = -domain1[1] / comp;\n }\n domain2[1] = -domain2[0] * comp;\n }\n return true;\n}\n\nfunction inOnlyZeroDomain(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { extendable_min: s1Extendable_min, extendable_max: s1Extendable_max, domain: domain1 } = info1;\n const { positive: positive2, negative: negative2, domain: domain2 } = info2;\n // both [0,0]\n if (positive2 === 0 && negative2 === 0) {\n return false;\n }\n // 如果副轴 有正值部分 主轴无法正值扩展,跳过\n if (positive2 > 0 && !s1Extendable_max) {\n return false;\n }\n // 如果副轴 有负值部分 主轴无法负值扩展,跳过\n if (negative2 > 0 && !s1Extendable_min) {\n return false;\n }\n // 其他场景,将主轴设置为与副轴相同\n domain1[0] = domain2[0];\n domain1[1] = domain2[1];\n return true;\n}\n\nfunction inAllCrossZero(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { positive: positive1, negative: negative1, extendable_max: s1Extendable_max, domain: domain1 } = info1;\n const { positive: positive2, negative: negative2, extendable_min: s2Extendable_min, domain: domain2 } = info2;\n if (s1Extendable_max && s2Extendable_min) {\n // percent\n const comp = Math.max(negative1, negative2) / Math.max(positive1, positive2);\n domain1[1] = -domain1[0] / comp;\n domain2[0] = -domain2[1] * comp;\n }\n // only on side extendable\n else if (s2Extendable_min) {\n const comp = negative1 / positive1;\n domain2[0] = -domain2[1] * comp;\n } else if (s1Extendable_max) {\n const comp = negative2 / positive2;\n domain1[1] = -domain1[0] / comp;\n } else {\n // skip\n return false;\n }\n return true;\n}\n\nfunction inNoCrossDifferentSide(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { extendable_min: s1Extendable_min, domain: domain1 } = info1;\n const { extendable_max: s2Extendable_max, domain: domain2 } = info2;\n // extendable\n if (!s1Extendable_min || !s2Extendable_max) {\n return false;\n }\n domain1[0] = -domain1[1];\n domain2[1] = -domain2[0];\n return true;\n}\n\nexport const zeroAlign = (targetAxis: CartesianAxis, currentAxis: CartesianAxis) => {\n const s1 = targetAxis.getScale();\n const s2 = currentAxis.getScale();\n\n if (!s1 || !s2) {\n return;\n }\n\n const domain1 = (targetAxis as any).getDomainAfterSpec?.() ?? [0, 1];\n const domain2 = (currentAxis as any).getDomainAfterSpec?.() ?? [0, 1];\n\n if (!domain1 || !domain2 || !isValidAlignDomain(domain1) || !isValidAlignDomain(domain2)) {\n return;\n }\n\n // 先分别获取正负比例\n const info1 = getScaleInfo(<LinearAxisMixin>(<unknown>targetAxis), domain1);\n const info2 = getScaleInfo(<LinearAxisMixin>(<unknown>currentAxis), domain2);\n const {\n positive: positive1,\n negative: negative1,\n extendable_min: s1Extendable_min,\n extendable_max: s1Extendable_max,\n includeZero: includeZero1\n } = info1;\n const {\n positive: positive2,\n negative: negative2,\n extendable_min: s2Extendable_min,\n extendable_max: s2Extendable_max,\n includeZero: includeZero2\n } = info2;\n\n // first check [0,0]\n // axis 1 in [0,0]\n if (positive1 === 0 && negative1 === 0) {\n if (!inOnlyZeroDomain(info1, info2)) {\n return;\n }\n }\n // axis 2 in [0,0]\n else if (positive2 === 0 && negative2 === 0) {\n if (!inOnlyZeroDomain(info2, info1)) {\n return;\n }\n }\n // check of both of axis are not cross zero\n else if (!includeZero1 && !includeZero2) {\n // if in different side s1 * s2 < 0\n // s1 > 0 s2 < 0\n if (negative1 === 0 && positive2 === 0) {\n if (!inNoCrossDifferentSide(info1, info2)) {\n return;\n }\n }\n // s1 < 0 s2 > 0\n else if (negative2 === 0 && positive1 === 0) {\n if (!inNoCrossDifferentSide(info2, info1)) {\n return;\n }\n }\n\n // if in same side s1 * s2 > 0\n // both positive\n if (negative1 === 0 && negative2 === 0) {\n // make sure has zero\n if (domain1[0] === 0 && domain2[0] > 0) {\n if (!s2Extendable_min) {\n return;\n }\n domain2[0] = 0;\n } else if (domain2[0] === 0 && domain1[0] > 0) {\n if (!s1Extendable_min) {\n return;\n }\n domain1[0] = 0;\n } else {\n return;\n }\n }\n // both negative1\n if (positive1 === 0 && positive2 === 0) {\n // s1 has 0 in domain & s2 has not\n if (domain1[1] === 0 && domain2[1] > 0) {\n if (!s2Extendable_max) {\n return;\n }\n domain2[1] = 0;\n }\n // s2 has 0 in domain & s1 has not\n else if (domain2[1] === 0 && domain1[1] > 0) {\n if (!s1Extendable_max) {\n return;\n }\n domain1[1] = 0;\n } else {\n return;\n }\n }\n }\n // check one axis cross zero axis1\n else if (includeZero1 && !includeZero2) {\n if (!inDifferentCrossZero(info1, info2)) {\n return;\n }\n }\n // check one axis cross zero axis2\n else if (includeZero2 && !includeZero1) {\n if (!inDifferentCrossZero(info2, info1)) {\n return;\n }\n }\n // check of both of axis are cross zero\n else {\n // same percent of negative\n if (negative1 === negative2) {\n return;\n }\n // negative percent s1 > s2\n else if (negative1 > negative2) {\n if (!inAllCrossZero(info1, info2)) {\n return;\n }\n }\n // negative percent s1 < s2\n else {\n if (!inAllCrossZero(info2, info1)) {\n return;\n }\n }\n }\n s1.domain(domain1);\n s2.domain(domain2);\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/plugin/components/axis-sync/zero-align-transform.ts"],"names":[],"mappings":"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","file":"zero-align-transform.js","sourcesContent":["import { isValidNumber, last } from '@visactor/vutils';\nimport type { CartesianAxis } from '../../../component';\nimport type { LinearAxisMixin } from '../../../component/axis/mixin/linear-axis-mixin';\n\ntype ScaleInfo = {\n total: number;\n negative: number;\n positive: number;\n includeZero: boolean;\n extendable_min: boolean;\n extendable_max: boolean;\n domain: number[];\n break?: boolean;\n};\n\nexport function isValidAlignDomain(domain: number[]): boolean {\n return domain.length >= 2 && isValidNumber(domain[0]) && isValidNumber(last(domain)) && last(domain) >= domain[0];\n}\n\nexport function getScaleInfo(axis: LinearAxisMixin, domain: number[]): ScaleInfo {\n // example: -10 -20 total = 10 negative = 10\n const total = last(domain) - domain[0];\n const includeZero = last(domain) * domain[0] < 0;\n let negative = domain[0] <= 0 ? 0 - domain[0] : 0;\n let positive = last(domain) > 0 ? last(domain) - 0 : 0;\n if (total === 0) {\n if (domain[0] < 0) {\n negative = 1;\n positive = 0;\n } else if (domain[0] > 0) {\n negative = 0;\n positive = 1;\n }\n } else {\n negative = negative / total;\n positive = positive / total;\n }\n const domainSpec = axis.getDomainSpec();\n const result: ScaleInfo = {\n total,\n negative,\n positive,\n includeZero,\n domain,\n extendable_min: !isValidNumber(domainSpec.min),\n extendable_max: !isValidNumber(domainSpec.max)\n };\n if (axis._break?.scope) {\n // 当前轴有截断\n const index = domain.findIndex(value => value >= 0);\n let scope;\n let domainTemp;\n // 得到0值位置\n if (index === 0) {\n scope = axis._break.scope[index];\n domainTemp = [domain[0], domain[1]];\n result.positive = 1;\n result.negative = 0;\n } else {\n // 如果最大值小于 0\n if (last(domain) <= 0) {\n result.positive = 0;\n result.negative = 1;\n domainTemp = [domain[domain.length - 2], domain[domain.length - 1]];\n } else {\n // 0值在中间\n scope = axis._break.scope[index - 1];\n domainTemp = [domain[index - 1], domain[index]];\n // 得到0值在range中的实际比例\n result.negative = scope[0] + ((0 - domainTemp[0]) / (domainTemp[1] - domainTemp[0])) * (scope[1] - scope[0]);\n result.positive = 1 - result.negative;\n }\n }\n // 只要有截断,就不做domain修改\n result.break = true;\n result.extendable_max = false;\n result.extendable_min = false;\n result.domain = domainTemp;\n }\n return result;\n}\n\nfunction inDifferentCrossZero(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const {\n positive: positive1,\n negative: negative1,\n extendable_min: s1Extendable_min,\n extendable_max: s1Extendable_max,\n domain: domain1\n } = info1;\n const {\n positive: positive2,\n negative: negative2,\n extendable_min: s2Extendable_min,\n extendable_max: s2Extendable_max,\n domain: domain2\n } = info2;\n // make s2 percent same as s1\n if (positive2 > 0) {\n if (!s2Extendable_min) {\n return false;\n }\n let comp = negative1 / positive1;\n // if s1 could extend max, then expand s1\n // example:【0.5,0.5】 + 【0,1】 = 【0.5,1】\n if (s1Extendable_max) {\n // change s1 percent\n comp = negative1 / Math.max(positive1, positive2);\n domain1[1] = -domain1[0] / comp;\n }\n domain2[0] = -domain2[1] * comp;\n } else if (negative2 > 0) {\n if (!s2Extendable_max) {\n return false;\n }\n let comp = positive1 / negative1;\n // if s1 could extend max, then expand s1\n // example:【0.5,0.5】 + 【1,0】 = 【1,0.5】\n if (s1Extendable_min) {\n // change s1 percent\n comp = positive1 / Math.max(negative1, negative1);\n domain1[0] = -domain1[1] / comp;\n }\n domain2[1] = -domain2[0] * comp;\n }\n return true;\n}\n\nfunction inOnlyZeroDomain(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { extendable_min: s1Extendable_min, extendable_max: s1Extendable_max, domain: domain1 } = info1;\n const { positive: positive2, negative: negative2, domain: domain2 } = info2;\n // both [0,0]\n if (positive2 === 0 && negative2 === 0) {\n return false;\n }\n // 如果副轴 有正值部分 主轴无法正值扩展,跳过\n if (positive2 > 0 && !s1Extendable_max) {\n return false;\n }\n // 如果副轴 有负值部分 主轴无法负值扩展,跳过\n if (negative2 > 0 && !s1Extendable_min) {\n return false;\n }\n // 其他场景,将主轴设置为与副轴相同\n domain1[0] = domain2[0];\n domain1[1] = domain2[1];\n return true;\n}\n\nfunction inAllCrossZero(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { positive: positive1, negative: negative1, extendable_max: s1Extendable_max, domain: domain1 } = info1;\n const { positive: positive2, negative: negative2, extendable_min: s2Extendable_min, domain: domain2 } = info2;\n if (s1Extendable_max && s2Extendable_min) {\n // percent\n const comp = Math.max(negative1, negative2) / Math.max(positive1, positive2);\n domain1[1] = -domain1[0] / comp;\n domain2[0] = -domain2[1] * comp;\n }\n // only on side extendable\n else if (s2Extendable_min) {\n const comp = negative1 / positive1;\n domain2[0] = -domain2[1] * comp;\n } else if (s1Extendable_max) {\n const comp = negative2 / positive2;\n domain1[1] = -domain1[0] / comp;\n } else {\n // skip\n return false;\n }\n return true;\n}\n\nfunction inNoCrossDifferentSide(info1: ScaleInfo, info2: ScaleInfo): boolean {\n const { extendable_min: s1Extendable_min, domain: domain1 } = info1;\n const { extendable_max: s2Extendable_max, domain: domain2 } = info2;\n // extendable\n if (!s1Extendable_min || !s2Extendable_max) {\n return false;\n }\n domain1[0] = -domain1[1];\n domain2[1] = -domain2[0];\n return true;\n}\n\nexport const zeroAlign = (targetAxis: CartesianAxis, currentAxis: CartesianAxis) => {\n const s1 = targetAxis.getScale();\n const s2 = currentAxis.getScale();\n\n if (!s1 || !s2) {\n return;\n }\n\n const domain1 = (targetAxis as any).getDomainAfterSpec?.() ?? [0, 1];\n const domain2 = (currentAxis as any).getDomainAfterSpec?.() ?? [0, 1];\n\n if (!domain1 || !domain2 || !isValidAlignDomain(domain1) || !isValidAlignDomain(domain2)) {\n return;\n }\n\n // 先分别获取正负比例\n const info1 = getScaleInfo(<LinearAxisMixin>(<unknown>targetAxis), domain1);\n const info2 = getScaleInfo(<LinearAxisMixin>(<unknown>currentAxis), domain2);\n if (info1.break === true && info2.break === true) {\n return;\n }\n const {\n positive: positive1,\n negative: negative1,\n extendable_min: s1Extendable_min,\n extendable_max: s1Extendable_max,\n includeZero: includeZero1\n } = info1;\n const {\n positive: positive2,\n negative: negative2,\n extendable_min: s2Extendable_min,\n extendable_max: s2Extendable_max,\n includeZero: includeZero2\n } = info2;\n\n // first check [0,0]\n // axis 1 in [0,0]\n if (positive1 === 0 && negative1 === 0) {\n if (!inOnlyZeroDomain(info1, info2)) {\n return;\n }\n }\n // axis 2 in [0,0]\n else if (positive2 === 0 && negative2 === 0) {\n if (!inOnlyZeroDomain(info2, info1)) {\n return;\n }\n }\n // check of both of axis are not cross zero\n else if (!includeZero1 && !includeZero2) {\n // if in different side s1 * s2 < 0\n // s1 > 0 s2 < 0\n if (negative1 === 0 && positive2 === 0) {\n if (!inNoCrossDifferentSide(info1, info2)) {\n return;\n }\n }\n // s1 < 0 s2 > 0\n else if (negative2 === 0 && positive1 === 0) {\n if (!inNoCrossDifferentSide(info2, info1)) {\n return;\n }\n }\n\n // if in same side s1 * s2 > 0\n // both positive\n if (negative1 === 0 && negative2 === 0) {\n // make sure has zero\n if (domain1[0] === 0 && domain2[0] > 0) {\n if (!s2Extendable_min) {\n return;\n }\n domain2[0] = 0;\n } else if (domain2[0] === 0 && domain1[0] > 0) {\n if (!s1Extendable_min) {\n return;\n }\n domain1[0] = 0;\n } else {\n return;\n }\n }\n // both negative1\n if (positive1 === 0 && positive2 === 0) {\n // s1 has 0 in domain & s2 has not\n if (domain1[1] === 0 && domain2[1] > 0) {\n if (!s2Extendable_max) {\n return;\n }\n domain2[1] = 0;\n }\n // s2 has 0 in domain & s1 has not\n else if (domain2[1] === 0 && domain1[1] > 0) {\n if (!s1Extendable_max) {\n return;\n }\n domain1[1] = 0;\n } else {\n return;\n }\n }\n }\n // check one axis cross zero axis1\n else if (includeZero1 && !includeZero2) {\n if (!inDifferentCrossZero(info1, info2)) {\n return;\n }\n }\n // check one axis cross zero axis2\n else if (includeZero2 && !includeZero1) {\n if (!inDifferentCrossZero(info2, info1)) {\n return;\n }\n }\n // check of both of axis are cross zero\n else {\n // same percent of negative\n if (negative1 === negative2) {\n return;\n }\n // negative percent s1 > s2\n else if (negative1 > negative2) {\n if (!inAllCrossZero(info1, info2)) {\n return;\n }\n }\n // negative percent s1 < s2\n else {\n if (!inAllCrossZero(info2, info1)) {\n return;\n }\n }\n }\n s1.domain(domain1);\n s2.domain(domain2);\n};\n"]}
|
|
@@ -137,7 +137,7 @@ export class BaseTooltipHandler extends BasePlugin {
|
|
|
137
137
|
const boxSize = "x" === dim ? tooltipBoxWidth : tooltipBoxHeight, canvasSize = "x" === dim ? canvasWidth : canvasHeight, offset = "x" === dim ? offsetX : offsetY, posType = getPositionType(pointerFixedPosition[dim], dim);
|
|
138
138
|
if (isValidNumber(calcPos[dimToPos[dim][0]])) result[dim] = calcPos[dimToPos[dim][0]]; else if (isValidNumber(calcPos[dimToPos[dim][1]])) result[dim] = canvasSize - boxSize * tooltipSizeScale - calcPos[dimToPos[dim][1]]; else {
|
|
139
139
|
const value0 = "x" === dim ? event.canvasX : event.canvasY;
|
|
140
|
-
result[dim] = posType > 0 ? value0 + offset : value0 - boxSize * tooltipSizeScale / 2
|
|
140
|
+
result[dim] = posType > 0 ? value0 + offset : 0 === posType ? value0 - boxSize * tooltipSizeScale / 2 : value0 - boxSize * tooltipSizeScale - offset;
|
|
141
141
|
}
|
|
142
142
|
result[dim] *= chartElementScale, isBrowser && (result[dim] += relativePosOffset[dim]),
|
|
143
143
|
result[dim] /= tooltipParentElementScale;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin/components/tooltip-handler/base.ts"],"names":[],"mappings":"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","file":"base.js","sourcesContent":["import { DEFAULT_CHART_WIDTH, DEFAULT_CHART_HEIGHT } from '../../../constant/base';\nimport type { Options } from './constants';\n// eslint-disable-next-line no-duplicate-imports\nimport { DEFAULT_OPTIONS } from './constants';\nimport type { Maybe, IPoint, RenderMode } from '../../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ITooltipPositionFixedValue, TooltipPositionKeys } from '../../../typings/tooltip/position';\n// eslint-disable-next-line no-duplicate-imports\nimport { isTrueBrowser } from '../../../util/env';\nimport type {\n TooltipData,\n ITooltipActual,\n TooltipActiveType,\n ITooltipHandler,\n ITooltipPositionActual,\n IGlobalTooltipPositionPattern\n} from '../../../typings/tooltip';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TooltipFixedPosition } from '../../../typings/tooltip';\nimport { getScale } from './utils/common';\nimport {\n getActualTooltipPositionValue,\n getCartesianCrosshairRect,\n getPositionType,\n isFixedTooltipPositionPattern,\n isGlobalTooltipPositionPattern\n} from './utils/position';\nimport type { IGroup } from '@visactor/vrender-core';\nimport type { AABBBounds } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNumber, isObject, isValidNumber, isValid, throttle, isNil, isFunction } from '@visactor/vutils';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { ILayoutModel } from '../../../model/interface';\nimport type { Compiler } from '../../../compile/compiler';\nimport type { IContainerSize } from '@visactor/vrender-components';\nimport { getTooltipAttributes } from './utils/attribute';\nimport type { IChartOption } from '../../../chart/interface';\nimport type { ITooltipSpec, Tooltip, TooltipHandlerParams } from '../../../component/tooltip';\n// eslint-disable-next-line no-duplicate-imports\nimport { TooltipResult } from '../../../component/tooltip';\nimport type { IComponentPlugin, IComponentPluginService } from '../interface';\nimport { BasePlugin } from '../../base/base-plugin';\nimport type { ITooltipAttributes } from './interface';\nimport { getTooltipPatternValue } from '../../../component/tooltip/utils';\nimport type { IDimensionData, IDimensionInfo } from '../../../event/events/dimension/interface';\n\ntype ChangeTooltipFunc = (visible: boolean, params: TooltipHandlerParams, data?: TooltipData) => TooltipResult;\n\ntype ChangeTooltipPositionFunc = (params: TooltipHandlerParams, data: TooltipData) => TooltipResult;\n\n/**\n * The tooltip handler class.\n */\nexport abstract class BaseTooltipHandler extends BasePlugin implements ITooltipHandler, IComponentPlugin {\n static readonly pluginType: 'component';\n static readonly specKey = 'tooltip';\n\n readonly type: string;\n\n /** 是否可见 */\n protected _visible = true;\n\n // protected _style: ITooltipStyle = {};\n\n protected _option: Options;\n\n protected _chartOption: IChartOption;\n\n protected _env: RenderMode;\n public get env() {\n return this._env;\n }\n\n protected _component: Tooltip;\n protected _attributes?: ITooltipAttributes | null = null;\n\n protected _chartContainer: Maybe<HTMLElement>;\n protected _compiler: Compiler;\n\n // tooltip 容器\n protected _container!: Maybe<IGroup | HTMLElement>;\n\n protected _isReleased: boolean = false;\n\n onAdd(service: IComponentPluginService<any>): void {\n super.onAdd(service);\n const component = service.component as Tooltip;\n this._component = component;\n this._chartOption = component.getOption() as any;\n this._env = this._chartOption.mode;\n this._chartContainer = this._chartOption.globalInstance.getContainer();\n this._compiler = component.getCompiler();\n this._initFromSpec();\n }\n\n showTooltip = (activeType: TooltipActiveType, data: TooltipData, params: TooltipHandlerParams) => {\n const { changePositionOnly } = params;\n\n if (changePositionOnly) {\n return this.changeTooltipPosition(params, data);\n }\n return this.changeTooltip(true, params, data);\n };\n\n /** 改变 tooltip 内容和位置(不带 throttle 版本),返回是否遇到异常 */\n protected changeTooltip: ChangeTooltipFunc = (visible: boolean, params: TooltipHandlerParams, data?: TooltipData) => {\n if (this._isReleased) {\n return TooltipResult.failed;\n }\n\n if (!visible) {\n /** 关闭 tooltip */\n this._updateTooltip(false, params);\n return TooltipResult.success;\n }\n\n return this.changeTooltipPosition(params, data);\n };\n\n /** 改变 tooltip 位置(不带 throttle 版本),返回是否遇到异常 */\n protected changeTooltipPosition: ChangeTooltipPositionFunc = (params: TooltipHandlerParams, data: TooltipData) => {\n if (this._isReleased) {\n return TooltipResult.failed;\n }\n\n const event = params.event as MouseEvent;\n const { tooltipSpec, activeTooltipSpec, changePositionOnly } = params;\n\n if (!activeTooltipSpec) {\n return TooltipResult.failed;\n }\n\n const activeType = activeTooltipSpec.activeType;\n\n /** 用户自定义逻辑 */\n if (activeTooltipSpec.handler) {\n return activeTooltipSpec.handler.showTooltip?.(activeType, data, params) ?? TooltipResult.success;\n }\n\n /** 默认逻辑 */\n const pattern = activeTooltipSpec;\n\n // 计算 tooltip 位置\n const position = this._getActualTooltipPosition(\n activeTooltipSpec,\n params,\n this._getTooltipBoxSize(activeTooltipSpec, changePositionOnly)\n );\n activeTooltipSpec.position = position;\n const updatePosition = activeTooltipSpec.updatePosition ?? tooltipSpec[activeType]?.updatePosition;\n\n if (updatePosition) {\n activeTooltipSpec.position = updatePosition(activeTooltipSpec.position, data, params);\n }\n\n // 判断 tooltip 可见性\n let tooltipVisible = pattern?.visible !== false;\n if (\n !data ||\n event.type === 'pointerout' ||\n !activeTooltipSpec.visible ||\n (!activeTooltipSpec.title && !activeTooltipSpec.content)\n ) {\n tooltipVisible = false;\n }\n\n this._updateTooltip(tooltipVisible, {\n ...params,\n changePositionOnly\n });\n return TooltipResult.success;\n };\n\n hideTooltip(params: TooltipHandlerParams): TooltipResult {\n return this.changeTooltip(false, params);\n }\n\n release(): void {\n const spec = this._component.getSpec() ?? {};\n /** 用户自定义逻辑 */\n if (spec.handler) {\n spec.handler.release?.();\n return;\n }\n /** 默认逻辑 */\n this._removeTooltip();\n\n this._isReleased = true;\n }\n\n /* -----需要子类继承的方法开始----- */\n\n protected abstract _updateTooltip(visible: boolean, params: TooltipHandlerParams): void;\n protected abstract _removeTooltip(): void;\n\n /* -----需要子类继承的方法结束----- */\n\n protected _getDefaultOption(): Options {\n const { offset } = this._component.getSpec();\n return {\n ...DEFAULT_OPTIONS,\n offsetX: offset?.x ?? DEFAULT_OPTIONS.offsetX,\n offsetY: offset?.y ?? DEFAULT_OPTIONS.offsetY\n };\n }\n\n /**\n * 计算实际的 tooltip 位置\n */\n protected _getActualTooltipPosition = (\n actualTooltip: ITooltipActual,\n params: TooltipHandlerParams,\n tooltipBoxSize: IContainerSize | undefined\n ): ITooltipPositionActual => {\n const { tooltipSpec } = params;\n const invalidPosition = {\n x: Infinity,\n y: Infinity\n };\n if (!tooltipSpec) {\n return invalidPosition;\n }\n const event = params.event as MouseEvent;\n const { activeType, data } = actualTooltip;\n const firstDim =\n activeType === 'dimension' ? (data as IDimensionInfo[])[0]?.data?.[0] : (data as IDimensionData[])?.[0];\n\n const { offsetX, offsetY } = this._option;\n\n const spec = tooltipSpec[activeType];\n const position = getTooltipPatternValue(spec?.position, data, params);\n const positionMode =\n getTooltipPatternValue(spec?.positionMode, data, params) ?? (activeType === 'mark' ? 'mark' : 'pointer');\n const { width: tooltipBoxWidth = 0, height: tooltipBoxHeight = 0 } = tooltipBoxSize ?? {};\n\n const isCanvas = tooltipSpec.renderMode === 'canvas';\n const canvasRect = params?.chart?.getCanvasRect();\n const canvasWidth = canvasRect?.width ?? DEFAULT_CHART_WIDTH;\n const canvasHeight = canvasRect?.height ?? DEFAULT_CHART_HEIGHT;\n let isFixedPosition = false;\n\n const containerSize = {\n width: 0,\n height: 0\n };\n let relativePosOffset = { x: 0, y: 0 };\n let tooltipParentElementRect: IPoint | DOMRect = { x: 0, y: 0 };\n let chartElementScale = 1;\n let tooltipParentElementScale = 1;\n\n if (isTrueBrowser(this._env) && !tooltipSpec.confine) {\n // 只有在 browser 模式下才可以获取到 window 对象\n containerSize.width = window.innerWidth;\n containerSize.height = window.innerHeight;\n\n if (!isCanvas) {\n const tooltipParentElement = this._getParentElement(tooltipSpec);\n tooltipParentElementRect = tooltipParentElement?.getBoundingClientRect?.() ?? invalidPosition;\n const chartElement = (this._compiler.getCanvas() ?? this._chartContainer) as HTMLElement;\n const chartElementRect = chartElement?.getBoundingClientRect();\n relativePosOffset = {\n x: chartElementRect.x - tooltipParentElementRect.x,\n y: chartElementRect.y - tooltipParentElementRect.y\n };\n chartElementScale = getScale(chartElement, chartElementRect);\n tooltipParentElementScale = getScale(tooltipParentElement, tooltipParentElementRect as DOMRect);\n }\n } else {\n containerSize.width = canvasWidth;\n containerSize.height = canvasHeight;\n }\n const tooltipSizeScale = tooltipParentElementScale / chartElementScale;\n\n /* 一、计算 left、top、right、bottom */\n\n const calcPos: { top?: number; bottom?: number; left?: number; right?: number } = {};\n const pointerFixedPosition: {\n x: TooltipFixedPosition;\n y: TooltipFixedPosition;\n } = { x: position as any, y: position as any };\n const dimToPos = { x: ['left', 'right'], y: ['top', 'bottom'] };\n\n const processCartesianFixedPosition = ({ orient, mode, offset }: ITooltipPositionFixedValue, dim: 'x' | 'y') => {\n let dim1: number;\n let dim2: number;\n const model = params.model as ILayoutModel;\n const startPoint = model?.getLayoutStartPoint();\n const dimOffset = offset ?? (dim === 'x' ? offsetX : offsetY);\n\n if (mode === 'mark') {\n isFixedPosition = true;\n const element = params.item as IElement;\n const bounds = element?.getBounds() as AABBBounds;\n if (bounds && startPoint) {\n dim1 = (dim === 'x' ? bounds.x1 : bounds.y1) + startPoint[dim];\n dim2 = (dim === 'x' ? bounds.x2 : bounds.y2) + startPoint[dim];\n }\n } else if (\n mode === 'crosshair' &&\n firstDim?.series?.coordinate === 'cartesian' &&\n firstDim.datum &&\n firstDim.datum.length\n ) {\n isFixedPosition = true;\n const rect = getCartesianCrosshairRect(firstDim, startPoint);\n if (rect) {\n dim1 = rect.start[dim];\n dim2 = rect.end[dim];\n }\n } else {\n pointerFixedPosition[dim] = orient;\n }\n\n if (isFixedPosition) {\n const posKey = dimToPos[dim][0] as TooltipPositionKeys;\n const boxSize = dim === 'x' ? tooltipBoxWidth : tooltipBoxHeight;\n switch (getPositionType(orient, dim)) {\n case -2:\n calcPos[posKey] = dim1 - boxSize * tooltipSizeScale - dimOffset;\n break;\n case 0:\n calcPos[posKey] = (dim1 + dim2) / 2 - (boxSize * tooltipSizeScale) / 2;\n break;\n case -1:\n calcPos[posKey] = (dim1 + dim2) / 2 - boxSize * tooltipSizeScale - dimOffset;\n break;\n case 1:\n calcPos[posKey] = (dim1 + dim2) / 2 + dimOffset;\n break;\n case 2:\n calcPos[posKey] = dim2 + dimOffset;\n break;\n }\n }\n };\n const dims = ['x', 'y'] as ('x' | 'y')[];\n if (isObject(position)) {\n if (isGlobalTooltipPositionPattern(position)) {\n const {\n left: posLeft,\n right: posRight,\n top: posTop,\n bottom: posBottom\n } = position as IGlobalTooltipPositionPattern;\n calcPos.left = getActualTooltipPositionValue(posLeft, event);\n calcPos.top = getActualTooltipPositionValue(posTop, event);\n calcPos.right = getActualTooltipPositionValue(posRight, event);\n calcPos.bottom = getActualTooltipPositionValue(posBottom, event);\n } else if (isFixedTooltipPositionPattern(position)) {\n dims.forEach(dim => {\n const dimValue = position[dim];\n if (isNumber(dimValue) || isFunction(dimValue)) {\n calcPos[dimToPos[dim][0] as TooltipPositionKeys] = getActualTooltipPositionValue(\n dimValue as number | ((event: MouseEvent) => number),\n event\n );\n } else {\n processCartesianFixedPosition(dimValue as ITooltipPositionFixedValue, dim);\n }\n });\n }\n } else if (isValid(position)) {\n processCartesianFixedPosition({ orient: position, mode: positionMode } as ITooltipPositionFixedValue, 'x');\n processCartesianFixedPosition({ orient: position, mode: positionMode } as ITooltipPositionFixedValue, 'y');\n }\n\n const result: ITooltipPositionActual = { x: null, y: null };\n const isBrowser = isTrueBrowser(this._env);\n\n dims.forEach(dim => {\n /* 二、换算成 x 和 y */\n const boxSize = dim === 'x' ? tooltipBoxWidth : tooltipBoxHeight;\n const canvasSize = dim === 'x' ? canvasWidth : canvasHeight;\n const offset = dim === 'x' ? offsetX : offsetY;\n const posType = getPositionType(pointerFixedPosition[dim], dim);\n if (isValidNumber(calcPos[dimToPos[dim][0] as TooltipPositionKeys])) {\n result[dim] = calcPos[dimToPos[dim][0] as TooltipPositionKeys];\n } else if (isValidNumber(calcPos[dimToPos[dim][1] as TooltipPositionKeys])) {\n result[dim] = canvasSize - boxSize * tooltipSizeScale - calcPos[dimToPos[dim][1] as TooltipPositionKeys];\n } else {\n const value0 = dim === 'x' ? (event as any).canvasX : (event as any).canvasY;\n\n if (posType > 0) {\n result[dim] = value0 + offset;\n } else {\n result[dim] = value0 - (boxSize * tooltipSizeScale) / 2 + (posType < 0 ? -1 : 0) * offset;\n }\n }\n result[dim] *= chartElementScale;\n\n if (isBrowser) {\n result[dim] += relativePosOffset[dim];\n }\n result[dim] /= tooltipParentElementScale;\n\n /* 三、确保tooltip在视区内 */\n const containerDimSize = dim === 'x' ? containerSize.width : containerSize.height;\n const leftOrTop = -tooltipParentElementRect[dim] / tooltipParentElementScale;\n const rightOrBottom = (containerDimSize - tooltipParentElementRect[dim]) / tooltipParentElementScale - boxSize;\n\n // 处理左右\n if (posType !== 2 && result[dim] < leftOrTop) {\n // 优先检测left\n if (isFixedPosition) {\n result[dim] = leftOrTop;\n } else {\n if (posType === 0) {\n // 从居中 挪至 右侧\n result[dim] += offset + boxSize / 2;\n } else {\n // 从居左/左侧 挪至 居右/右侧\n result[dim] += offset * 2 + boxSize;\n }\n\n if (result[dim] > rightOrBottom) {\n // 位置不超出视区右界\n result[dim] = rightOrBottom;\n }\n }\n } else if (posType !== -2 && result[dim] > rightOrBottom) {\n // 优先检测right\n // 位置不超出视区右界\n if (isFixedPosition) {\n result[dim] = rightOrBottom;\n } else {\n if (posType === 0) {\n // 从居中 挪至 左侧\n result[dim] -= offset + boxSize / 2;\n } else {\n // 从居右/右侧 挪至 居左/左侧\n result[dim] -= offset * 2 + boxSize;\n }\n\n if (result[dim] < leftOrTop) {\n // 位置不超出视区左界\n result[dim] = leftOrTop;\n }\n }\n }\n });\n\n return result;\n };\n\n // 计算 tooltip 内容区域的宽高,并缓存结果\n protected _getTooltipBoxSize(actualTooltip: ITooltipActual, changePositionOnly: boolean): IContainerSize | undefined {\n if (!changePositionOnly || isNil(this._attributes)) {\n const chartTheme = this._chartOption?.getTheme() ?? {};\n this._attributes = getTooltipAttributes(actualTooltip, this._component.getSpec(), chartTheme);\n }\n const { panel, panelDomHeight } = this._attributes ?? {};\n // canvas模式下, size需要考虑border size, 目的是为了精准判断边界是否超出画布,达到confine效果\n // html模式不提供confine, 所以不考虑精准计算size\n const isCanvas = this._component.getSpec().renderMode === 'canvas';\n\n return {\n width: panel?.width + (isCanvas ? panel.lineWidth : 0),\n height: (panelDomHeight ?? panel?.height) + (isCanvas ? panel.lineWidth : 0)\n };\n }\n\n protected _getParentElement(spec: ITooltipSpec): HTMLElement {\n return spec.parentElement as any;\n }\n\n getTooltipContainer() {\n return this._container;\n }\n\n protected _initFromSpec() {\n this._option = this._getDefaultOption();\n }\n\n reInit() {\n this._initFromSpec();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/plugin/components/tooltip-handler/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAGnF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK9C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAWlD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,eAAe,EACf,6BAA6B,EAC7B,8BAA8B,EAC/B,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAY,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAK3G,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAMzD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAU1E,MAAM,OAAgB,kBAAmB,SAAQ,UAAU;IAA3D;;QAOY,aAAQ,GAAG,IAAI,CAAC;QAchB,gBAAW,GAA+B,IAAI,CAAC;QAQ/C,gBAAW,GAAY,KAAK,CAAC;QAavC,gBAAW,GAAG,CAAC,UAA6B,EAAE,IAAiB,EAAE,MAA4B,EAAE,EAAE;YAC/F,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAAC;YAEtC,IAAI,kBAAkB,EAAE;gBACtB,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;aACjD;YACD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC,CAAC;QAGQ,kBAAa,GAAsB,CAAC,OAAgB,EAAE,MAA4B,EAAE,IAAkB,EAAE,EAAE;YAClH,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,SAA4B;aAC7B;YAED,IAAI,CAAC,OAAO,EAAE;gBAEZ,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBACnC,SAA6B;aAC9B;YAED,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC;QAGQ,0BAAqB,GAA8B,CAAC,MAA4B,EAAE,IAAiB,EAAE,EAAE;;YAC/G,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,SAA4B;aAC7B;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAmB,CAAC;YACzC,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAAC;YAEtE,IAAI,CAAC,iBAAiB,EAAE;gBACtB,SAA4B;aAC7B;YAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC;YAGhD,IAAI,iBAAiB,CAAC,OAAO,EAAE;gBAC7B,OAAO,MAAA,MAAA,MAAA,iBAAiB,CAAC,OAAO,EAAC,WAAW,mDAAG,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,oCAAyB,CAAC;aACnG;YAGD,MAAM,OAAO,GAAG,iBAAiB,CAAC;YAGlC,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAC7C,iBAAiB,EACjB,MAAM,EACN,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAC/D,CAAC;YACF,iBAAiB,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACtC,MAAM,cAAc,GAAG,MAAA,iBAAiB,CAAC,cAAc,mCAAI,MAAA,WAAW,CAAC,UAAU,CAAC,0CAAE,cAAc,CAAC;YAEnG,IAAI,cAAc,EAAE;gBAClB,iBAAiB,CAAC,QAAQ,GAAG,cAAc,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;aACvF;YAGD,IAAI,cAAc,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,MAAK,KAAK,CAAC;YAChD,IACE,CAAC,IAAI;gBACL,KAAK,CAAC,IAAI,KAAK,YAAY;gBAC3B,CAAC,iBAAiB,CAAC,OAAO;gBAC1B,CAAC,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EACxD;gBACA,cAAc,GAAG,KAAK,CAAC;aACxB;YAED,IAAI,CAAC,cAAc,CAAC,cAAc,kCAC7B,MAAM,KACT,kBAAkB,IAClB,CAAC;YACH,SAA6B;QAC/B,CAAC,CAAC;QAsCQ,8BAAyB,GAAG,CACpC,aAA6B,EAC7B,MAA4B,EAC5B,cAA0C,EAClB,EAAE;;YAC1B,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;YAC/B,MAAM,eAAe,GAAG;gBACtB,CAAC,EAAE,QAAQ;gBACX,CAAC,EAAE,QAAQ;aACZ,CAAC;YACF,IAAI,CAAC,WAAW,EAAE;gBAChB,OAAO,eAAe,CAAC;aACxB;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAmB,CAAC;YACzC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC;YAC3C,MAAM,QAAQ,GACZ,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,MAAA,MAAC,IAAyB,CAAC,CAAC,CAAC,0CAAE,IAAI,0CAAG,CAAC,CAAC,CAAC,CAAC,CAAE,IAAyB,aAAzB,IAAI,uBAAJ,IAAI,CAAwB,CAAC,CAAC,CAAC;YAE1G,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;YAE1C,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;YACrC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACtE,MAAM,YAAY,GAChB,MAAA,sBAAsB,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,mCAAI,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC3G,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,CAAC,EAAE,MAAM,EAAE,gBAAgB,GAAG,CAAC,EAAE,GAAG,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,EAAE,CAAC;YAE1F,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,KAAK,QAAQ,CAAC;YACrD,MAAM,UAAU,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,aAAa,EAAE,CAAC;YAClD,MAAM,WAAW,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,mCAAI,mBAAmB,CAAC;YAC7D,MAAM,YAAY,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,mCAAI,oBAAoB,CAAC;YAChE,IAAI,eAAe,GAAG,KAAK,CAAC;YAE5B,MAAM,aAAa,GAAG;gBACpB,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;aACV,CAAC;YACF,IAAI,iBAAiB,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACvC,IAAI,wBAAwB,GAAqB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAChE,IAAI,iBAAiB,GAAG,CAAC,CAAC;YAC1B,IAAI,yBAAyB,GAAG,CAAC,CAAC;YAElC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;gBAEpD,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;gBACxC,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;gBAE1C,IAAI,CAAC,QAAQ,EAAE;oBACb,MAAM,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;oBACjE,wBAAwB,GAAG,MAAA,MAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,qBAAqB,oEAAI,mCAAI,eAAe,CAAC;oBAC9F,MAAM,YAAY,GAAG,CAAC,MAAA,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,mCAAI,IAAI,CAAC,eAAe,CAAgB,CAAC;oBACzF,MAAM,gBAAgB,GAAG,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,qBAAqB,EAAE,CAAC;oBAC/D,iBAAiB,GAAG;wBAClB,CAAC,EAAE,gBAAgB,CAAC,CAAC,GAAG,wBAAwB,CAAC,CAAC;wBAClD,CAAC,EAAE,gBAAgB,CAAC,CAAC,GAAG,wBAAwB,CAAC,CAAC;qBACnD,CAAC;oBACF,iBAAiB,GAAG,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;oBAC7D,yBAAyB,GAAG,QAAQ,CAAC,oBAAoB,EAAE,wBAAmC,CAAC,CAAC;iBACjG;aACF;iBAAM;gBACL,aAAa,CAAC,KAAK,GAAG,WAAW,CAAC;gBAClC,aAAa,CAAC,MAAM,GAAG,YAAY,CAAC;aACrC;YACD,MAAM,gBAAgB,GAAG,yBAAyB,GAAG,iBAAiB,CAAC;YAIvE,MAAM,OAAO,GAAqE,EAAE,CAAC;YACrF,MAAM,oBAAoB,GAGtB,EAAE,CAAC,EAAE,QAAe,EAAE,CAAC,EAAE,QAAe,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YAEhE,MAAM,6BAA6B,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAA8B,EAAE,GAAc,EAAE,EAAE;;gBAC7G,IAAI,IAAY,CAAC;gBACjB,IAAI,IAAY,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAqB,CAAC;gBAC3C,MAAM,UAAU,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,mBAAmB,EAAE,CAAC;gBAChD,MAAM,SAAS,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBAE9D,IAAI,IAAI,KAAK,MAAM,EAAE;oBACnB,eAAe,GAAG,IAAI,CAAC;oBACvB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAgB,CAAC;oBACxC,MAAM,MAAM,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EAAgB,CAAC;oBAClD,IAAI,MAAM,IAAI,UAAU,EAAE;wBACxB,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;wBAC/D,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;qBAChE;iBACF;qBAAM,IACL,IAAI,KAAK,WAAW;oBACpB,CAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,0CAAE,UAAU,MAAK,WAAW;oBAC5C,QAAQ,CAAC,KAAK;oBACd,QAAQ,CAAC,KAAK,CAAC,MAAM,EACrB;oBACA,eAAe,GAAG,IAAI,CAAC;oBACvB,MAAM,IAAI,GAAG,yBAAyB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;oBAC7D,IAAI,IAAI,EAAE;wBACR,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACvB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBACtB;iBACF;qBAAM;oBACL,oBAAoB,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;iBACpC;gBAED,IAAI,eAAe,EAAE;oBACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAwB,CAAC;oBACvD,MAAM,OAAO,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC;oBACjE,QAAQ,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;wBACpC,KAAK,CAAC,CAAC;4BACL,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,OAAO,GAAG,gBAAgB,GAAG,SAAS,CAAC;4BAChE,MAAM;wBACR,KAAK,CAAC;4BACJ,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;4BACvE,MAAM;wBACR,KAAK,CAAC,CAAC;4BACL,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,gBAAgB,GAAG,SAAS,CAAC;4BAC7E,MAAM;wBACR,KAAK,CAAC;4BACJ,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;4BAChD,MAAM;wBACR,KAAK,CAAC;4BACJ,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;4BACnC,MAAM;qBACT;iBACF;YACH,CAAC,CAAC;YACF,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAkB,CAAC;YACzC,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBACtB,IAAI,8BAA8B,CAAC,QAAQ,CAAC,EAAE;oBAC5C,MAAM,EACJ,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,EAClB,GAAG,QAAyC,CAAC;oBAC9C,OAAO,CAAC,IAAI,GAAG,6BAA6B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBAC7D,OAAO,CAAC,GAAG,GAAG,6BAA6B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBAC3D,OAAO,CAAC,KAAK,GAAG,6BAA6B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;oBAC/D,OAAO,CAAC,MAAM,GAAG,6BAA6B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;iBAClE;qBAAM,IAAI,6BAA6B,CAAC,QAAQ,CAAC,EAAE;oBAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;wBACjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;wBAC/B,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE;4BAC9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAwB,CAAC,GAAG,6BAA6B,CAC9E,QAAoD,EACpD,KAAK,CACN,CAAC;yBACH;6BAAM;4BACL,6BAA6B,CAAC,QAAsC,EAAE,GAAG,CAAC,CAAC;yBAC5E;oBACH,CAAC,CAAC,CAAC;iBACJ;aACF;iBAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAC5B,6BAA6B,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAgC,EAAE,GAAG,CAAC,CAAC;gBAC3G,6BAA6B,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAgC,EAAE,GAAG,CAAC,CAAC;aAC5G;YAED,MAAM,MAAM,GAA2B,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;YAC5D,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAEjB,MAAM,OAAO,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBACjE,MAAM,UAAU,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;gBAC5D,MAAM,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;gBAChE,IAAI,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAwB,CAAC,CAAC,EAAE;oBACnE,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAwB,CAAC,CAAC;iBAChE;qBAAM,IAAI,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAwB,CAAC,CAAC,EAAE;oBAC1E,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,GAAG,OAAO,GAAG,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAwB,CAAC,CAAC;iBAC1G;qBAAM;oBACL,MAAM,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAE,KAAa,CAAC,OAAO,CAAC,CAAC,CAAE,KAAa,CAAC,OAAO,CAAC;oBAE7E,IAAI,OAAO,GAAG,CAAC,EAAE;wBACf,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC;qBAC/B;yBAAM,IAAI,OAAO,KAAK,CAAC,EAAE;wBACxB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;qBACzD;yBAAM;wBACL,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,gBAAgB,GAAG,MAAM,CAAC;qBAC5D;iBACF;gBACD,MAAM,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC;gBAEjC,IAAI,SAAS,EAAE;oBACb,MAAM,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;iBACvC;gBACD,MAAM,CAAC,GAAG,CAAC,IAAI,yBAAyB,CAAC;gBAGzC,MAAM,gBAAgB,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC;gBAClF,MAAM,SAAS,GAAG,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,yBAAyB,CAAC;gBAC7E,MAAM,aAAa,GAAG,CAAC,gBAAgB,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC,GAAG,yBAAyB,GAAG,OAAO,CAAC;gBAG/G,IAAI,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE;oBAE5C,IAAI,eAAe,EAAE;wBACnB,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;qBACzB;yBAAM;wBACL,IAAI,OAAO,KAAK,CAAC,EAAE;4BAEjB,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;yBACrC;6BAAM;4BAEL,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC;yBACrC;wBAED,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,EAAE;4BAE/B,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;yBAC7B;qBACF;iBACF;qBAAM,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,EAAE;oBAGxD,IAAI,eAAe,EAAE;wBACnB,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;qBAC7B;yBAAM;wBACL,IAAI,OAAO,KAAK,CAAC,EAAE;4BAEjB,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;yBACrC;6BAAM;4BAEL,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC;yBACrC;wBAED,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE;4BAE3B,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;yBACzB;qBACF;iBACF;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;IAkCJ,CAAC;IAzZC,IAAW,GAAG;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAaD,KAAK,CAAC,OAAqC;QACzC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAoB,CAAC;QAC/C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,SAAS,EAAS,CAAC;QACjD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QACvE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAgFD,WAAW,CAAC,MAA4B;QACtC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO;;QACL,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,mCAAI,EAAE,CAAC;QAE7C,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,OAAO,kDAAI,CAAC;YACzB,OAAO;SACR;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IASS,iBAAiB;;QACzB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC7C,uCACK,eAAe,KAClB,OAAO,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,CAAC,mCAAI,eAAe,CAAC,OAAO,EAC7C,OAAO,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,CAAC,mCAAI,eAAe,CAAC,OAAO,IAC7C;IACJ,CAAC;IAmPS,kBAAkB,CAAC,aAA6B,EAAE,kBAA2B;;QACrF,IAAI,CAAC,kBAAkB,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YAClD,MAAM,UAAU,GAAG,MAAA,MAAA,IAAI,CAAC,YAAY,0CAAE,QAAQ,EAAE,mCAAI,EAAE,CAAC;YACvD,IAAI,CAAC,WAAW,GAAG,oBAAoB,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;SAC/F;QACD,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,MAAA,IAAI,CAAC,WAAW,mCAAI,EAAE,CAAC;QAGzD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,UAAU,KAAK,QAAQ,CAAC;QAEnE,OAAO;YACL,KAAK,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,EAAE,CAAC,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7E,CAAC;IACJ,CAAC;IAES,iBAAiB,CAAC,IAAkB;QAC5C,OAAO,IAAI,CAAC,aAAoB,CAAC;IACnC,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAES,aAAa;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;;AAtae,0BAAO,GAAG,SAAS,CAAC","file":"base.js","sourcesContent":["import { DEFAULT_CHART_WIDTH, DEFAULT_CHART_HEIGHT } from '../../../constant/base';\nimport type { Options } from './constants';\n// eslint-disable-next-line no-duplicate-imports\nimport { DEFAULT_OPTIONS } from './constants';\nimport type { Maybe, IPoint, RenderMode } from '../../../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ITooltipPositionFixedValue, TooltipPositionKeys } from '../../../typings/tooltip/position';\n// eslint-disable-next-line no-duplicate-imports\nimport { isTrueBrowser } from '../../../util/env';\nimport type {\n TooltipData,\n ITooltipActual,\n TooltipActiveType,\n ITooltipHandler,\n ITooltipPositionActual,\n IGlobalTooltipPositionPattern\n} from '../../../typings/tooltip';\n// eslint-disable-next-line no-duplicate-imports\nimport type { TooltipFixedPosition } from '../../../typings/tooltip';\nimport { getScale } from './utils/common';\nimport {\n getActualTooltipPositionValue,\n getCartesianCrosshairRect,\n getPositionType,\n isFixedTooltipPositionPattern,\n isGlobalTooltipPositionPattern\n} from './utils/position';\nimport type { IGroup } from '@visactor/vrender-core';\nimport type { AABBBounds } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isNumber, isObject, isValidNumber, isValid, throttle, isNil, isFunction } from '@visactor/vutils';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { ILayoutModel } from '../../../model/interface';\nimport type { Compiler } from '../../../compile/compiler';\nimport type { IContainerSize } from '@visactor/vrender-components';\nimport { getTooltipAttributes } from './utils/attribute';\nimport type { IChartOption } from '../../../chart/interface';\nimport type { ITooltipSpec, Tooltip, TooltipHandlerParams } from '../../../component/tooltip';\n// eslint-disable-next-line no-duplicate-imports\nimport { TooltipResult } from '../../../component/tooltip';\nimport type { IComponentPlugin, IComponentPluginService } from '../interface';\nimport { BasePlugin } from '../../base/base-plugin';\nimport type { ITooltipAttributes } from './interface';\nimport { getTooltipPatternValue } from '../../../component/tooltip/utils';\nimport type { IDimensionData, IDimensionInfo } from '../../../event/events/dimension/interface';\n\ntype ChangeTooltipFunc = (visible: boolean, params: TooltipHandlerParams, data?: TooltipData) => TooltipResult;\n\ntype ChangeTooltipPositionFunc = (params: TooltipHandlerParams, data: TooltipData) => TooltipResult;\n\n/**\n * The tooltip handler class.\n */\nexport abstract class BaseTooltipHandler extends BasePlugin implements ITooltipHandler, IComponentPlugin {\n static readonly pluginType: 'component';\n static readonly specKey = 'tooltip';\n\n readonly type: string;\n\n /** 是否可见 */\n protected _visible = true;\n\n // protected _style: ITooltipStyle = {};\n\n protected _option: Options;\n\n protected _chartOption: IChartOption;\n\n protected _env: RenderMode;\n public get env() {\n return this._env;\n }\n\n protected _component: Tooltip;\n protected _attributes?: ITooltipAttributes | null = null;\n\n protected _chartContainer: Maybe<HTMLElement>;\n protected _compiler: Compiler;\n\n // tooltip 容器\n protected _container!: Maybe<IGroup | HTMLElement>;\n\n protected _isReleased: boolean = false;\n\n onAdd(service: IComponentPluginService<any>): void {\n super.onAdd(service);\n const component = service.component as Tooltip;\n this._component = component;\n this._chartOption = component.getOption() as any;\n this._env = this._chartOption.mode;\n this._chartContainer = this._chartOption.globalInstance.getContainer();\n this._compiler = component.getCompiler();\n this._initFromSpec();\n }\n\n showTooltip = (activeType: TooltipActiveType, data: TooltipData, params: TooltipHandlerParams) => {\n const { changePositionOnly } = params;\n\n if (changePositionOnly) {\n return this.changeTooltipPosition(params, data);\n }\n return this.changeTooltip(true, params, data);\n };\n\n /** 改变 tooltip 内容和位置(不带 throttle 版本),返回是否遇到异常 */\n protected changeTooltip: ChangeTooltipFunc = (visible: boolean, params: TooltipHandlerParams, data?: TooltipData) => {\n if (this._isReleased) {\n return TooltipResult.failed;\n }\n\n if (!visible) {\n /** 关闭 tooltip */\n this._updateTooltip(false, params);\n return TooltipResult.success;\n }\n\n return this.changeTooltipPosition(params, data);\n };\n\n /** 改变 tooltip 位置(不带 throttle 版本),返回是否遇到异常 */\n protected changeTooltipPosition: ChangeTooltipPositionFunc = (params: TooltipHandlerParams, data: TooltipData) => {\n if (this._isReleased) {\n return TooltipResult.failed;\n }\n\n const event = params.event as MouseEvent;\n const { tooltipSpec, activeTooltipSpec, changePositionOnly } = params;\n\n if (!activeTooltipSpec) {\n return TooltipResult.failed;\n }\n\n const activeType = activeTooltipSpec.activeType;\n\n /** 用户自定义逻辑 */\n if (activeTooltipSpec.handler) {\n return activeTooltipSpec.handler.showTooltip?.(activeType, data, params) ?? TooltipResult.success;\n }\n\n /** 默认逻辑 */\n const pattern = activeTooltipSpec;\n\n // 计算 tooltip 位置\n const position = this._getActualTooltipPosition(\n activeTooltipSpec,\n params,\n this._getTooltipBoxSize(activeTooltipSpec, changePositionOnly)\n );\n activeTooltipSpec.position = position;\n const updatePosition = activeTooltipSpec.updatePosition ?? tooltipSpec[activeType]?.updatePosition;\n\n if (updatePosition) {\n activeTooltipSpec.position = updatePosition(activeTooltipSpec.position, data, params);\n }\n\n // 判断 tooltip 可见性\n let tooltipVisible = pattern?.visible !== false;\n if (\n !data ||\n event.type === 'pointerout' ||\n !activeTooltipSpec.visible ||\n (!activeTooltipSpec.title && !activeTooltipSpec.content)\n ) {\n tooltipVisible = false;\n }\n\n this._updateTooltip(tooltipVisible, {\n ...params,\n changePositionOnly\n });\n return TooltipResult.success;\n };\n\n hideTooltip(params: TooltipHandlerParams): TooltipResult {\n return this.changeTooltip(false, params);\n }\n\n release(): void {\n const spec = this._component.getSpec() ?? {};\n /** 用户自定义逻辑 */\n if (spec.handler) {\n spec.handler.release?.();\n return;\n }\n /** 默认逻辑 */\n this._removeTooltip();\n\n this._isReleased = true;\n }\n\n /* -----需要子类继承的方法开始----- */\n\n protected abstract _updateTooltip(visible: boolean, params: TooltipHandlerParams): void;\n protected abstract _removeTooltip(): void;\n\n /* -----需要子类继承的方法结束----- */\n\n protected _getDefaultOption(): Options {\n const { offset } = this._component.getSpec();\n return {\n ...DEFAULT_OPTIONS,\n offsetX: offset?.x ?? DEFAULT_OPTIONS.offsetX,\n offsetY: offset?.y ?? DEFAULT_OPTIONS.offsetY\n };\n }\n\n /**\n * 计算实际的 tooltip 位置\n */\n protected _getActualTooltipPosition = (\n actualTooltip: ITooltipActual,\n params: TooltipHandlerParams,\n tooltipBoxSize: IContainerSize | undefined\n ): ITooltipPositionActual => {\n const { tooltipSpec } = params;\n const invalidPosition = {\n x: Infinity,\n y: Infinity\n };\n if (!tooltipSpec) {\n return invalidPosition;\n }\n const event = params.event as MouseEvent;\n const { activeType, data } = actualTooltip;\n const firstDim =\n activeType === 'dimension' ? (data as IDimensionInfo[])[0]?.data?.[0] : (data as IDimensionData[])?.[0];\n\n const { offsetX, offsetY } = this._option;\n\n const spec = tooltipSpec[activeType];\n const position = getTooltipPatternValue(spec?.position, data, params);\n const positionMode =\n getTooltipPatternValue(spec?.positionMode, data, params) ?? (activeType === 'mark' ? 'mark' : 'pointer');\n const { width: tooltipBoxWidth = 0, height: tooltipBoxHeight = 0 } = tooltipBoxSize ?? {};\n\n const isCanvas = tooltipSpec.renderMode === 'canvas';\n const canvasRect = params?.chart?.getCanvasRect();\n const canvasWidth = canvasRect?.width ?? DEFAULT_CHART_WIDTH;\n const canvasHeight = canvasRect?.height ?? DEFAULT_CHART_HEIGHT;\n let isFixedPosition = false;\n\n const containerSize = {\n width: 0,\n height: 0\n };\n let relativePosOffset = { x: 0, y: 0 };\n let tooltipParentElementRect: IPoint | DOMRect = { x: 0, y: 0 };\n let chartElementScale = 1;\n let tooltipParentElementScale = 1;\n\n if (isTrueBrowser(this._env) && !tooltipSpec.confine) {\n // 只有在 browser 模式下才可以获取到 window 对象\n containerSize.width = window.innerWidth;\n containerSize.height = window.innerHeight;\n\n if (!isCanvas) {\n const tooltipParentElement = this._getParentElement(tooltipSpec);\n tooltipParentElementRect = tooltipParentElement?.getBoundingClientRect?.() ?? invalidPosition;\n const chartElement = (this._compiler.getCanvas() ?? this._chartContainer) as HTMLElement;\n const chartElementRect = chartElement?.getBoundingClientRect();\n relativePosOffset = {\n x: chartElementRect.x - tooltipParentElementRect.x,\n y: chartElementRect.y - tooltipParentElementRect.y\n };\n chartElementScale = getScale(chartElement, chartElementRect);\n tooltipParentElementScale = getScale(tooltipParentElement, tooltipParentElementRect as DOMRect);\n }\n } else {\n containerSize.width = canvasWidth;\n containerSize.height = canvasHeight;\n }\n const tooltipSizeScale = tooltipParentElementScale / chartElementScale;\n\n /* 一、计算 left、top、right、bottom */\n\n const calcPos: { top?: number; bottom?: number; left?: number; right?: number } = {};\n const pointerFixedPosition: {\n x: TooltipFixedPosition;\n y: TooltipFixedPosition;\n } = { x: position as any, y: position as any };\n const dimToPos = { x: ['left', 'right'], y: ['top', 'bottom'] };\n\n const processCartesianFixedPosition = ({ orient, mode, offset }: ITooltipPositionFixedValue, dim: 'x' | 'y') => {\n let dim1: number;\n let dim2: number;\n const model = params.model as ILayoutModel;\n const startPoint = model?.getLayoutStartPoint();\n const dimOffset = offset ?? (dim === 'x' ? offsetX : offsetY);\n\n if (mode === 'mark') {\n isFixedPosition = true;\n const element = params.item as IElement;\n const bounds = element?.getBounds() as AABBBounds;\n if (bounds && startPoint) {\n dim1 = (dim === 'x' ? bounds.x1 : bounds.y1) + startPoint[dim];\n dim2 = (dim === 'x' ? bounds.x2 : bounds.y2) + startPoint[dim];\n }\n } else if (\n mode === 'crosshair' &&\n firstDim?.series?.coordinate === 'cartesian' &&\n firstDim.datum &&\n firstDim.datum.length\n ) {\n isFixedPosition = true;\n const rect = getCartesianCrosshairRect(firstDim, startPoint);\n if (rect) {\n dim1 = rect.start[dim];\n dim2 = rect.end[dim];\n }\n } else {\n pointerFixedPosition[dim] = orient;\n }\n\n if (isFixedPosition) {\n const posKey = dimToPos[dim][0] as TooltipPositionKeys;\n const boxSize = dim === 'x' ? tooltipBoxWidth : tooltipBoxHeight;\n switch (getPositionType(orient, dim)) {\n case -2:\n calcPos[posKey] = dim1 - boxSize * tooltipSizeScale - dimOffset;\n break;\n case 0:\n calcPos[posKey] = (dim1 + dim2) / 2 - (boxSize * tooltipSizeScale) / 2;\n break;\n case -1:\n calcPos[posKey] = (dim1 + dim2) / 2 - boxSize * tooltipSizeScale - dimOffset;\n break;\n case 1:\n calcPos[posKey] = (dim1 + dim2) / 2 + dimOffset;\n break;\n case 2:\n calcPos[posKey] = dim2 + dimOffset;\n break;\n }\n }\n };\n const dims = ['x', 'y'] as ('x' | 'y')[];\n if (isObject(position)) {\n if (isGlobalTooltipPositionPattern(position)) {\n const {\n left: posLeft,\n right: posRight,\n top: posTop,\n bottom: posBottom\n } = position as IGlobalTooltipPositionPattern;\n calcPos.left = getActualTooltipPositionValue(posLeft, event);\n calcPos.top = getActualTooltipPositionValue(posTop, event);\n calcPos.right = getActualTooltipPositionValue(posRight, event);\n calcPos.bottom = getActualTooltipPositionValue(posBottom, event);\n } else if (isFixedTooltipPositionPattern(position)) {\n dims.forEach(dim => {\n const dimValue = position[dim];\n if (isNumber(dimValue) || isFunction(dimValue)) {\n calcPos[dimToPos[dim][0] as TooltipPositionKeys] = getActualTooltipPositionValue(\n dimValue as number | ((event: MouseEvent) => number),\n event\n );\n } else {\n processCartesianFixedPosition(dimValue as ITooltipPositionFixedValue, dim);\n }\n });\n }\n } else if (isValid(position)) {\n processCartesianFixedPosition({ orient: position, mode: positionMode } as ITooltipPositionFixedValue, 'x');\n processCartesianFixedPosition({ orient: position, mode: positionMode } as ITooltipPositionFixedValue, 'y');\n }\n\n const result: ITooltipPositionActual = { x: null, y: null };\n const isBrowser = isTrueBrowser(this._env);\n\n dims.forEach(dim => {\n /* 二、换算成 x 和 y */\n const boxSize = dim === 'x' ? tooltipBoxWidth : tooltipBoxHeight;\n const canvasSize = dim === 'x' ? canvasWidth : canvasHeight;\n const offset = dim === 'x' ? offsetX : offsetY;\n const posType = getPositionType(pointerFixedPosition[dim], dim);\n if (isValidNumber(calcPos[dimToPos[dim][0] as TooltipPositionKeys])) {\n result[dim] = calcPos[dimToPos[dim][0] as TooltipPositionKeys];\n } else if (isValidNumber(calcPos[dimToPos[dim][1] as TooltipPositionKeys])) {\n result[dim] = canvasSize - boxSize * tooltipSizeScale - calcPos[dimToPos[dim][1] as TooltipPositionKeys];\n } else {\n const value0 = dim === 'x' ? (event as any).canvasX : (event as any).canvasY;\n\n if (posType > 0) {\n result[dim] = value0 + offset;\n } else if (posType === 0) {\n result[dim] = value0 - (boxSize * tooltipSizeScale) / 2;\n } else {\n result[dim] = value0 - boxSize * tooltipSizeScale - offset;\n }\n }\n result[dim] *= chartElementScale;\n\n if (isBrowser) {\n result[dim] += relativePosOffset[dim];\n }\n result[dim] /= tooltipParentElementScale;\n\n /* 三、确保tooltip在视区内 */\n const containerDimSize = dim === 'x' ? containerSize.width : containerSize.height;\n const leftOrTop = -tooltipParentElementRect[dim] / tooltipParentElementScale;\n const rightOrBottom = (containerDimSize - tooltipParentElementRect[dim]) / tooltipParentElementScale - boxSize;\n\n // 处理左右\n if (posType !== 2 && result[dim] < leftOrTop) {\n // 优先检测left\n if (isFixedPosition) {\n result[dim] = leftOrTop;\n } else {\n if (posType === 0) {\n // 从居中 挪至 右侧\n result[dim] += offset + boxSize / 2;\n } else {\n // 从居左/左侧 挪至 居右/右侧\n result[dim] += offset * 2 + boxSize;\n }\n\n if (result[dim] > rightOrBottom) {\n // 位置不超出视区右界\n result[dim] = rightOrBottom;\n }\n }\n } else if (posType !== -2 && result[dim] > rightOrBottom) {\n // 优先检测right\n // 位置不超出视区右界\n if (isFixedPosition) {\n result[dim] = rightOrBottom;\n } else {\n if (posType === 0) {\n // 从居中 挪至 左侧\n result[dim] -= offset + boxSize / 2;\n } else {\n // 从居右/右侧 挪至 居左/左侧\n result[dim] -= offset * 2 + boxSize;\n }\n\n if (result[dim] < leftOrTop) {\n // 位置不超出视区左界\n result[dim] = leftOrTop;\n }\n }\n }\n });\n\n return result;\n };\n\n // 计算 tooltip 内容区域的宽高,并缓存结果\n protected _getTooltipBoxSize(actualTooltip: ITooltipActual, changePositionOnly: boolean): IContainerSize | undefined {\n if (!changePositionOnly || isNil(this._attributes)) {\n const chartTheme = this._chartOption?.getTheme() ?? {};\n this._attributes = getTooltipAttributes(actualTooltip, this._component.getSpec(), chartTheme);\n }\n const { panel, panelDomHeight } = this._attributes ?? {};\n // canvas模式下, size需要考虑border size, 目的是为了精准判断边界是否超出画布,达到confine效果\n // html模式不提供confine, 所以不考虑精准计算size\n const isCanvas = this._component.getSpec().renderMode === 'canvas';\n\n return {\n width: panel?.width + (isCanvas ? panel.lineWidth : 0),\n height: (panelDomHeight ?? panel?.height) + (isCanvas ? panel.lineWidth : 0)\n };\n }\n\n protected _getParentElement(spec: ITooltipSpec): HTMLElement {\n return spec.parentElement as any;\n }\n\n getTooltipContainer() {\n return this._container;\n }\n\n protected _initFromSpec() {\n this._option = this._getDefaultOption();\n }\n\n reInit() {\n this._initFromSpec();\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Symbol } from "@visactor/vrender-core";
|
|
2
2
|
|
|
3
|
-
import { isObject, isString } from "@visactor/vutils";
|
|
3
|
+
import { isObject, isString, Bounds } from "@visactor/vutils";
|
|
4
4
|
|
|
5
5
|
import { BaseTooltipModel } from "./base-tooltip-model";
|
|
6
6
|
|
|
@@ -40,8 +40,13 @@ function getSvgHtml(option, valueToHtml) {
|
|
|
40
40
|
});
|
|
41
41
|
let symbol = createSymbol(symbolType);
|
|
42
42
|
const parsedPath = symbol.getParsedPath();
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
let bounds, path;
|
|
44
|
+
if (!parsedPath.path && parsedPath.pathStr && (symbol = createSymbol(parsedPath.pathStr)),
|
|
45
|
+
symbol.getParsedPath().path) {
|
|
46
|
+
const pathModel = symbol.getParsedPath().path;
|
|
47
|
+
path = pathModel.toString(), bounds = pathModel.bounds;
|
|
48
|
+
} else parsedPath.isSvg && parsedPath.svgCache && (path = parsedPath.svgCache.map((s => s.path.toString())).join(),
|
|
49
|
+
bounds = parsedPath.svgCache.reduce(((acc, cur) => acc.union(cur.path.bounds)), new Bounds));
|
|
45
50
|
let viewBox = `${bounds.x1} ${bounds.y1} ${bounds.width()} ${bounds.height()}`;
|
|
46
51
|
if ("0px" !== lineWidth) {
|
|
47
52
|
const [x, y, w, h] = viewBox.split(" ").map((n => Number(n))), lw = Number(lineWidth.slice(0, -2));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin/components/tooltip-handler/dom/model/shape-model.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/plugin/components/tooltip-handler/dom/model/shape-model.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAcpD,MAAM,OAAO,UAAW,SAAQ,gBAAgB;IAK9C,IAAI,CAAC,SAAoB,EAAE,EAAW,EAAE,GAAiC;QACvE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,KAAK,EAAE,CAAC,GAAG,CAAC,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YACnG,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;SAC1B;IACH,CAAC;IAED,QAAQ,CAAC,KAAoC,EAAE,MAAwB;QACrE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,UAAU,CAAC,MAAuB;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,MAAwB;QAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,IAAI,CAAC,aAAa,EAAE;YAC/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;SAC/B;IACH,CAAC;IAED,OAAO;QACL,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAC1B,CAAC;CACF;AAED,SAAS,UAAU,CAAC,MAAmC,EAAE,WAAmC;;IAC1F,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;QAC3C,OAAO,EAAE,CAAC;KACX;IAED,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAClF,IAAI,UAAU,GAAW,cAAc,CAAC;IACxC,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAEpE,MAAM,UAAU,GAAG,wBAAwB,CAAC,IAAI,CAAW,CAAC;IAC5D,MAAM,YAAY,GAAG,CAAC,UAAkB,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtG,IAAI,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,OAAO,EAAE;QAC1C,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KAC3C;IAED,IAAI,MAAM,CAAC;IACX,IAAI,IAAI,CAAC;IACT,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE;QAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC;QAC9C,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC5B,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;KAC3B;SAAM,IAAI,UAAU,CAAC,KAAK,IAAK,UAAgC,CAAC,QAAQ,EAAE;QACzE,IAAI,GAAI,UAAgC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrF,MAAM,GAAI,UAAgC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,EAAE,CAAC,CAAC;KACpH;IAED,IAAI,OAAO,GAAG,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;IAG/E,IAAI,SAAS,KAAK,KAAK,EAAE;QACvB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;KAC7D;IAED,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE;QACrC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;QACzE,OAAO;kBACO,IAAI,aAAa,IAAI,cAAc,OAAO;;;aAG/C,IAAI;uBACM,UAAU,aAAa,SAAS,EAAE,mBAAmB,SAAS;;;WAG1E,CAAC;KACT;IACD,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;QAClB,UAAU,GAAG,MAAA,eAAe,GAAG,MAAM,CAAC,KAAK,mCAAI,EAAE,CAAC;QAClD,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,iBAAiB,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;aACrG,IAAI,CAAC,EAAE,CAAC,CAAC;QACZ,IAAK,IAAuB,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAClD,QAAQ,GAAG,uBAAuB,UAAU;QAC1C,KAAK;wBACW,CAAC;SACpB;aAAM,IAAK,IAAuB,CAAC,QAAQ,KAAK,QAAQ,EAAE;YACzD,QAAQ,GAAG,uBAAuB,UAAU,SAC1C,CAAC,MAAE,IAAwB,CAAC,EAAa,mCAAI,CAAC,CAAC,GAAG,GACpD,UAAU,CAAC,MAAE,IAAwB,CAAC,EAAa,mCAAI,CAAC,CAAC,GAAG,GAAG,UAC7D,CAAC,MAAE,IAAwB,CAAC,EAAa,mCAAI,CAAC,CAAC,GAAG,GACpD,UAAU,CAAC,MAAE,IAAwB,CAAC,EAAa,mCAAI,CAAC,CAAC,GAAG,GAAG;QAC7D,KAAK;wBACW,CAAC;SACpB;QACD,OAAO;kBACO,IAAI,aAAa,IAAI;;QAE/B,QAAQ;;aAEH,IAAI;4BACW,UAAU,cAAc,SAAS,EAAE,mBAAmB,SAAS;;;WAGhF,CAAC;KACT;IAED,OAAO,EAAE,CAAC;AACZ,CAAC","file":"shape-model.js","sourcesContent":["import type { CustomSymbolClass, IGradientColor, ILinearGradient } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { Symbol } from '@visactor/vrender-core';\n\nimport { isObject, isString, Bounds } from '@visactor/vutils';\nimport type { ShapeType } from '../../../../../typings';\nimport { BaseTooltipModel } from './base-tooltip-model';\nimport { pixelPropertyStrToNumber } from '../utils';\n\nexport interface IShapeSvgOption {\n hasShape?: boolean;\n symbolType?: ShapeType | string;\n size?: string;\n fill?: string | IGradientColor;\n stroke?: string;\n lineWidth?: number;\n hollow?: boolean;\n marginTop?: string;\n index?: number;\n}\n\nexport class ShapeModel extends BaseTooltipModel {\n svg: SVGElement;\n\n private _svgHtmlCache: string;\n\n init(classList?: string[], id?: string, tag?: keyof HTMLElementTagNameMap): void {\n if (!this.product) {\n const container = this.createElement(tag ?? 'div', [...(classList ?? []), 'shape'], undefined, id);\n this.product = container;\n }\n }\n\n setStyle(style?: Partial<CSSStyleDeclaration>, option?: IShapeSvgOption): void {\n super.setStyle(style);\n this.setSvg(option);\n }\n\n setContent(option: IShapeSvgOption) {\n this.setSvg(option);\n }\n\n setSvg(option?: IShapeSvgOption) {\n const html = getSvgHtml(option, this._option.valueToHtml);\n if (this.product && html !== this._svgHtmlCache) {\n this._svgHtmlCache = html;\n this.product.innerHTML = html;\n }\n }\n\n release(): void {\n super.release();\n this._svgHtmlCache = '';\n }\n}\n\nfunction getSvgHtml(option: IShapeSvgOption | undefined, valueToHtml: (value: any) => string) {\n if (!option?.hasShape || !option.symbolType) {\n return '';\n }\n\n const { symbolType, fill, stroke, hollow = false } = option;\n const size = option.size ? valueToHtml(option.size) : '8px';\n const lineWidth = option.lineWidth ? valueToHtml(option.lineWidth) + 'px' : '0px';\n let fillString: string = 'currentColor';\n const getStroke = () => (stroke ? valueToHtml(stroke) : fillString);\n\n const sizeNumber = pixelPropertyStrToNumber(size) as number;\n const createSymbol = (symbolType: string) => new Symbol({ symbolType, size: sizeNumber, fill: true });\n\n let symbol = createSymbol(symbolType);\n const parsedPath = symbol.getParsedPath();\n if (!parsedPath.path && parsedPath.pathStr) {\n symbol = createSymbol(parsedPath.pathStr);\n }\n\n let bounds;\n let path;\n if (symbol.getParsedPath().path) {\n const pathModel = symbol.getParsedPath().path;\n path = pathModel.toString();\n bounds = pathModel.bounds;\n } else if (parsedPath.isSvg && (parsedPath as CustomSymbolClass).svgCache) {\n path = (parsedPath as CustomSymbolClass).svgCache.map(s => s.path.toString()).join();\n bounds = (parsedPath as CustomSymbolClass).svgCache.reduce((acc, cur) => acc.union(cur.path.bounds), new Bounds());\n }\n\n let viewBox = `${bounds.x1} ${bounds.y1} ${bounds.width()} ${bounds.height()}`;\n\n // svg 不支持内描边,需要手动将描边空间预留在 viewBox 上\n if (lineWidth !== '0px') {\n const [x, y, w, h] = viewBox.split(' ').map(n => Number(n));\n const lw = Number(lineWidth.slice(0, -2));\n viewBox = `${x - lw / 2} ${y - lw / 2} ${w + lw} ${h + lw}`;\n }\n\n if (!fill || isString(fill) || hollow) {\n fillString = hollow ? 'none' : fill ? valueToHtml(fill) : 'currentColor';\n return `\n <svg width=\"${size}\" height=\"${size}\" viewBox=\"${viewBox}\"\n style=\"display: block;\">\n <path\n d=\"${path}\"\n style=\"fill: ${fillString}; stroke: ${getStroke()}; stroke-width: ${lineWidth}\"\n >\n </path>\n </svg>`;\n }\n if (isObject(fill)) {\n fillString = 'gradientColor' + option.index ?? '';\n let gradient = '';\n const stops = (fill.stops ?? [])\n .map(s => `<stop offset=\"${valueToHtml(s.offset.toString())}\" stop-color=\"${valueToHtml(s.color)}\"/>`)\n .join('');\n if ((fill as IGradientColor).gradient === 'radial') {\n gradient = `<radialGradient id=\"${fillString}\" cx=\"50%\" cy=\"50%\" r=\"50%\" fx=\"0%\" fy=\"0%\">\n ${stops}\n </radialGradient>`;\n } else if ((fill as IGradientColor).gradient === 'linear') {\n gradient = `<linearGradient id=\"${fillString}\" x1=\"${\n (((fill as ILinearGradient).x0 as number) ?? 0) * 100\n }%\" y1=\"${(((fill as ILinearGradient).y0 as number) ?? 0) * 100}%\" x2=\"${\n (((fill as ILinearGradient).x1 as number) ?? 0) * 100\n }%\" y2=\"${(((fill as ILinearGradient).y1 as number) ?? 0) * 100}%\">\n ${stops}\n </linearGradient>`;\n }\n return `\n <svg width=\"${size}\" height=\"${size}\" viewBox=\"-0.5 -0.5 1 1\"\n style=\"display: block;\">\n ${gradient}\n <path\n d=\"${path}\"\n style=\"fill: url(#${fillString}); stroke: ${getStroke()}; stroke-width: ${lineWidth}\"\n >\n </path>\n </svg>`;\n }\n\n return '';\n}\n"]}
|
|
@@ -351,7 +351,7 @@ export class BaseSeries extends BaseModel {
|
|
|
351
351
|
setValueFieldToPercent() {}
|
|
352
352
|
setValueFieldToStackOffsetSilhouette() {}
|
|
353
353
|
initRootMark() {
|
|
354
|
-
var _a, _b;
|
|
354
|
+
var _a, _b, _c;
|
|
355
355
|
this._rootMark = this._createMark({
|
|
356
356
|
type: "group",
|
|
357
357
|
name: `seriesGroup_${this.type}_${this.id}`
|
|
@@ -359,7 +359,7 @@ export class BaseSeries extends BaseModel {
|
|
|
359
359
|
parent: null === (_b = (_a = this._region).getGroupMark) || void 0 === _b ? void 0 : _b.call(_a),
|
|
360
360
|
dataView: !1
|
|
361
361
|
}), this._rootMark.setMarkConfig({
|
|
362
|
-
zIndex: this.layoutZIndex
|
|
362
|
+
zIndex: null !== (_c = this._spec.zIndex) && void 0 !== _c ? _c : this.layoutZIndex
|
|
363
363
|
});
|
|
364
364
|
}
|
|
365
365
|
_getExtensionMarkNamePrefix() {
|