@visactor/vchart 2.1.3-alpha.5 → 2.1.3

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.
Files changed (78) hide show
  1. package/build/es5/index.js +1 -1
  2. package/build/index.es.js +140 -49
  3. package/build/index.js +144 -49
  4. package/build/index.min.js +2 -2
  5. package/build/tsconfig.tsbuildinfo +1 -1
  6. package/cjs/compile/compiler.d.ts +2 -0
  7. package/cjs/compile/compiler.js +23 -8
  8. package/cjs/compile/compiler.js.map +1 -1
  9. package/cjs/compile/interface/compiler.d.ts +1 -0
  10. package/cjs/compile/interface/compiler.js.map +1 -1
  11. package/cjs/component/poptip/index.js +5 -2
  12. package/cjs/component/poptip/index.js.map +1 -1
  13. package/cjs/constant/marker.js +1 -2
  14. package/cjs/constant/scatter.js +2 -1
  15. package/cjs/core/expression-function.js +1 -1
  16. package/cjs/core/factory-registry.d.ts +2 -1
  17. package/cjs/core/factory-registry.js +3 -1
  18. package/cjs/core/factory-registry.js.map +1 -1
  19. package/cjs/core/factory.d.ts +4 -1
  20. package/cjs/core/factory.js +4 -1
  21. package/cjs/core/factory.js.map +1 -1
  22. package/cjs/core/index.d.ts +1 -1
  23. package/cjs/core/index.js +1 -1
  24. package/cjs/core/index.js.map +1 -1
  25. package/cjs/core/vchart.js +9 -3
  26. package/cjs/core/vchart.js.map +1 -1
  27. package/cjs/data/data-view-utils.js +1 -1
  28. package/cjs/data/transforms/funnel.js +9 -4
  29. package/cjs/data/transforms/funnel.js.map +1 -1
  30. package/cjs/interaction/interaction.d.ts +2 -0
  31. package/cjs/interaction/interaction.js +19 -11
  32. package/cjs/interaction/interaction.js.map +1 -1
  33. package/cjs/mark/glyph.d.ts +1 -1
  34. package/cjs/mark/glyph.js +7 -6
  35. package/cjs/mark/glyph.js.map +1 -1
  36. package/cjs/series/base/base-series.js +1 -1
  37. package/cjs/series/base/base-series.js.map +1 -1
  38. package/cjs/series/funnel/interface.js.map +1 -1
  39. package/cjs/series/sankey/sankey.d.ts +3 -0
  40. package/cjs/series/sankey/sankey.js +26 -16
  41. package/cjs/series/sankey/sankey.js.map +1 -1
  42. package/esm/compile/compiler.d.ts +2 -0
  43. package/esm/compile/compiler.js +24 -7
  44. package/esm/compile/compiler.js.map +1 -1
  45. package/esm/compile/interface/compiler.d.ts +1 -0
  46. package/esm/compile/interface/compiler.js.map +1 -1
  47. package/esm/component/poptip/index.js +8 -2
  48. package/esm/component/poptip/index.js.map +1 -1
  49. package/esm/constant/marker.js +1 -2
  50. package/esm/constant/scatter.js +2 -1
  51. package/esm/core/expression-function.js +1 -1
  52. package/esm/core/factory-registry.d.ts +2 -1
  53. package/esm/core/factory-registry.js +3 -1
  54. package/esm/core/factory-registry.js.map +1 -1
  55. package/esm/core/factory.d.ts +4 -1
  56. package/esm/core/factory.js +3 -1
  57. package/esm/core/factory.js.map +1 -1
  58. package/esm/core/index.d.ts +1 -1
  59. package/esm/core/index.js +1 -1
  60. package/esm/core/index.js.map +1 -1
  61. package/esm/core/vchart.js +9 -3
  62. package/esm/core/vchart.js.map +1 -1
  63. package/esm/data/data-view-utils.js +1 -1
  64. package/esm/data/transforms/funnel.js +8 -5
  65. package/esm/data/transforms/funnel.js.map +1 -1
  66. package/esm/interaction/interaction.d.ts +2 -0
  67. package/esm/interaction/interaction.js +19 -11
  68. package/esm/interaction/interaction.js.map +1 -1
  69. package/esm/mark/glyph.d.ts +1 -1
  70. package/esm/mark/glyph.js +7 -6
  71. package/esm/mark/glyph.js.map +1 -1
  72. package/esm/series/base/base-series.js +1 -1
  73. package/esm/series/base/base-series.js.map +1 -1
  74. package/esm/series/funnel/interface.js.map +1 -1
  75. package/esm/series/sankey/sankey.d.ts +3 -0
  76. package/esm/series/sankey/sankey.js +26 -15
  77. package/esm/series/sankey/sankey.js.map +1 -1
  78. package/package.json +9 -9
@@ -1,4 +1,4 @@
1
- import { isFunction, isValidNumber } from "@visactor/vutils";
1
+ import { clamp, isFunction, isValidNumber } from "@visactor/vutils";
2
2
 
3
3
  const resolveOptionValue = option => isFunction(option) ? option() : option;
4
4
 
@@ -6,15 +6,18 @@ export const funnel = (originData, op) => {
6
6
  var _a, _b, _c, _d;
7
7
  const data = originData.map((datum => Object.assign({}, datum)));
8
8
  if (!data || 0 === data.length) return data;
9
- const {asTransformRatio: asTransformRatio, asReachRatio: asReachRatio, asHeightRatio: asHeightRatio, asValueRatio: asValueRatio, asNextValueRatio: asNextValueRatio, asLastValueRatio: asLastValueRatio, asLastValue: asLastValue, asCurrentValue: asCurrentValue, asNextValue: asNextValue} = op, valueField = resolveOptionValue(op.valueField), heightVisual = null !== (_a = resolveOptionValue(op.heightVisual)) && void 0 !== _a && _a, isCone = null === (_b = resolveOptionValue(op.isCone)) || void 0 === _b || _b, range = resolveOptionValue(op.range), max = data.reduce(((m, d) => Math.max(m, Number.parseFloat(d[valueField]) || -1 / 0)), -1 / 0), min = data.reduce(((m, d) => Math.min(m, Number.parseFloat(d[valueField]) || 1 / 0)), 1 / 0), rangeArr = [ null !== (_c = null == range ? void 0 : range.min) && void 0 !== _c ? _c : min, null !== (_d = null == range ? void 0 : range.max) && void 0 !== _d ? _d : max ];
9
+ const {asTransformRatio: asTransformRatio, asReachRatio: asReachRatio, asHeightRatio: asHeightRatio, asValueRatio: asValueRatio, asNextValueRatio: asNextValueRatio, asLastValueRatio: asLastValueRatio, asLastValue: asLastValue, asCurrentValue: asCurrentValue, asNextValue: asNextValue} = op, valueField = resolveOptionValue(op.valueField), heightVisual = null !== (_a = resolveOptionValue(op.heightVisual)) && void 0 !== _a && _a, isCone = null === (_b = resolveOptionValue(op.isCone)) || void 0 === _b || _b, range = resolveOptionValue(op.range), max = data.reduce(((m, d) => {
10
+ const value = Number.parseFloat(d[valueField]);
11
+ return isValidNumber(value) ? Math.max(m, value) : m;
12
+ }), -1 / 0), rangeMin = null !== (_c = null == range ? void 0 : range.min) && void 0 !== _c ? _c : 0, rangeMax = null !== (_d = null == range ? void 0 : range.max) && void 0 !== _d ? _d : max, getValueRatio = value => isValidNumber(value) && isValidNumber(rangeMin) && isValidNumber(rangeMax) ? rangeMin === rangeMax ? value < rangeMin ? 0 : 1 : clamp((value - rangeMin) / (rangeMax - rangeMin), 0, 1) : 0;
10
13
  return data.forEach(((d, i) => {
11
14
  var _a, _b;
12
- const currentValue = Number.parseFloat(d[valueField]), lastValue = Number.parseFloat(null === (_a = data[i - 1]) || void 0 === _a ? void 0 : _a[valueField]), nextValue = Number.parseFloat(null === (_b = data[i + 1]) || void 0 === _b ? void 0 : _b[valueField]), transformRatio = isValidNumber(nextValue * currentValue) && 0 !== currentValue ? nextValue / currentValue : 0, reachRatio = isValidNumber(currentValue * lastValue) && 0 !== lastValue ? currentValue / lastValue : 0;
15
+ const currentValue = Number.parseFloat(d[valueField]), lastValue = Number.parseFloat(null === (_a = data[i - 1]) || void 0 === _a ? void 0 : _a[valueField]), nextValue = Number.parseFloat(null === (_b = data[i + 1]) || void 0 === _b ? void 0 : _b[valueField]), transformRatio = isValidNumber(nextValue * currentValue) && 0 !== currentValue ? nextValue / currentValue : 0, reachRatio = isValidNumber(currentValue * lastValue) && 0 !== lastValue ? currentValue / lastValue : 0, valueRatio = getValueRatio(currentValue);
13
16
  asLastValue && (d[asLastValue] = lastValue), asNextValue && (d[asNextValue] = nextValue),
14
17
  asTransformRatio && (d[asTransformRatio] = transformRatio), asReachRatio && (d[asReachRatio] = 0 === i ? 1 : reachRatio),
15
18
  asHeightRatio && (d[asHeightRatio] = !0 === heightVisual ? transformRatio : 1 / data.length),
16
- asValueRatio && (d[asValueRatio] = currentValue / rangeArr[1]), asNextValueRatio && (d[asNextValueRatio] = i === data.length - 1 ? isCone ? 0 : d[asValueRatio] : nextValue / rangeArr[1]),
17
- asLastValueRatio && (d[asLastValueRatio] = 0 === i ? 1 : lastValue / rangeArr[1]),
19
+ asValueRatio && (d[asValueRatio] = valueRatio), asNextValueRatio && (d[asNextValueRatio] = i === data.length - 1 ? isCone ? 0 : d[asValueRatio] : getValueRatio(nextValue)),
20
+ asLastValueRatio && (d[asLastValueRatio] = 0 === i ? 1 : getValueRatio(lastValue)),
18
21
  asCurrentValue && (d[asCurrentValue] = currentValue);
19
22
  })), data;
20
23
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data/transforms/funnel.ts"],"names":[],"mappings":"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","file":"funnel.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport { isFunction, isValidNumber } from '@visactor/vutils';\n\ntype FunnelOptionValue<T> = T | (() => T);\n\nexport interface IFunnelOpt {\n valueField: FunnelOptionValue<string>;\n /** 转化率(当前层到下一层的比例) **/\n asTransformRatio: string;\n /** 到达率 (上一层到当前层的比例)*/\n asReachRatio: string;\n /** 高度轴占总量的比例 **/\n asHeightRatio: string;\n /** 当前值大小占比 */\n asValueRatio: string;\n /** 上一层值大小占比 */\n asLastValueRatio: string;\n /** 下一层值大小占比 */\n asNextValueRatio: string;\n /** 当前层的值 */\n asCurrentValue: string;\n /** 上一层的值 **/\n asLastValue: string;\n /** 下一层的值 **/\n asNextValue: string;\n\n /** 最底层漏斗是否为锥形 */\n isCone?: FunnelOptionValue<boolean | undefined>;\n /** 高度是否进行数据映射 **/\n heightVisual?: FunnelOptionValue<boolean | undefined>;\n\n /** 数值范围 */\n range?: FunnelOptionValue<{ min?: number; max?: number } | undefined>;\n}\n\nconst resolveOptionValue = <T>(option: FunnelOptionValue<T>) => (isFunction(option) ? option() : option);\n\nexport const funnel = (originData: Array<DataView>, op: IFunnelOpt) => {\n const data = originData.map(datum => ({ ...datum }));\n if (!data || data.length === 0) {\n return data;\n }\n const {\n asTransformRatio,\n asReachRatio,\n asHeightRatio,\n asValueRatio,\n asNextValueRatio,\n asLastValueRatio,\n asLastValue,\n asCurrentValue,\n asNextValue,\n } = op;\n const valueField = resolveOptionValue(op.valueField);\n const heightVisual = resolveOptionValue(op.heightVisual) ?? false;\n const isCone = resolveOptionValue(op.isCone) ?? true;\n const range = resolveOptionValue(op.range);\n\n const max = data.reduce((m, d) => Math.max(m, Number.parseFloat(d[valueField]) || -Infinity), -Infinity);\n const min = data.reduce((m, d) => Math.min(m, Number.parseFloat(d[valueField]) || Infinity), Infinity);\n const rangeArr = [range?.min ?? min, range?.max ?? max];\n\n data.forEach((d, i) => {\n const currentValue: number = Number.parseFloat(d[valueField]);\n const lastValue: number = Number.parseFloat(data[i - 1]?.[valueField]);\n const nextValue: number = Number.parseFloat(data[i + 1]?.[valueField]);\n\n const transformRatio =\n !isValidNumber(nextValue * currentValue) || currentValue === 0 ? 0 : nextValue / currentValue;\n const reachRatio = !isValidNumber(currentValue * lastValue) || lastValue === 0 ? 0 : currentValue / lastValue;\n\n asLastValue && (d[asLastValue] = lastValue);\n asNextValue && (d[asNextValue] = nextValue);\n asTransformRatio && (d[asTransformRatio] = transformRatio);\n asReachRatio && (d[asReachRatio] = i === 0 ? 1 : reachRatio);\n asHeightRatio && (d[asHeightRatio] = heightVisual === true ? transformRatio : 1 / data.length);\n asValueRatio && (d[asValueRatio] = currentValue / rangeArr[1]);\n asNextValueRatio &&\n (d[asNextValueRatio] = i === data.length - 1 ? (isCone ? 0 : d[asValueRatio]) : nextValue / rangeArr[1]);\n asLastValueRatio && (d[asLastValueRatio] = i === 0 ? 1 : lastValue / rangeArr[1]);\n asCurrentValue && (d[asCurrentValue] = currentValue);\n });\n\n return data;\n};\n\nexport interface IFunnelTransformOpt {\n asIsTransformLevel: string;\n}\n\nexport const funnelTransform = (originData: Array<DataView>, op: IFunnelTransformOpt) => {\n const data: Array<Record<string, unknown>> | undefined = originData[0]?.latestData?.map(\n (datum: Record<string, unknown>) => ({ ...datum })\n );\n if (!data || data.length === 0) {\n return data;\n }\n data.shift();\n data.forEach(d => {\n d[op.asIsTransformLevel] = true;\n });\n return data;\n};\n"]}
1
+ {"version":3,"sources":["../src/data/transforms/funnel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAkCpE,MAAM,kBAAkB,GAAG,CAAI,MAA4B,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzG,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAA2B,EAAE,EAAc,EAAE,EAAE;;IACpE,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAM,KAAK,EAAG,CAAC,CAAC;IACrD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9B,OAAO,IAAI,CAAC;KACb;IACD,MAAM,EACJ,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,WAAW,EACZ,GAAG,EAAE,CAAC;IACP,MAAM,UAAU,GAAG,kBAAkB,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,MAAA,kBAAkB,CAAC,EAAE,CAAC,YAAY,CAAC,mCAAI,KAAK,CAAC;IAClE,MAAM,MAAM,GAAG,MAAA,kBAAkB,CAAC,EAAE,CAAC,MAAM,CAAC,mCAAI,IAAI,CAAC;IACrD,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAE3C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/C,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IACd,MAAM,QAAQ,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,GAAG,mCAAI,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,GAAG,mCAAI,GAAG,CAAC;IACnC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,EAAE;QACtC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;YACjF,OAAO,CAAC,CAAC;SACV;QAED,IAAI,QAAQ,KAAK,QAAQ,EAAE;YACzB,OAAO,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACjC;QAED,OAAO,KAAK,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC;IAEF,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;;QACpB,MAAM,YAAY,GAAW,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAW,MAAM,CAAC,UAAU,CAAC,MAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,0CAAG,UAAU,CAAC,CAAC,CAAC;QACvE,MAAM,SAAS,GAAW,MAAM,CAAC,UAAU,CAAC,MAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,0CAAG,UAAU,CAAC,CAAC,CAAC;QAEvE,MAAM,cAAc,GAClB,CAAC,aAAa,CAAC,SAAS,GAAG,YAAY,CAAC,IAAI,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,YAAY,CAAC;QAChG,MAAM,UAAU,GAAG,CAAC,aAAa,CAAC,YAAY,GAAG,SAAS,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9G,MAAM,UAAU,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;QAE/C,WAAW,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,CAAC;QAC5C,WAAW,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,CAAC;QAC5C,gBAAgB,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAAC,CAAC;QAC3D,YAAY,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC7D,aAAa,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/F,YAAY,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,CAAC;QAC/C,gBAAgB;YACd,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5G,gBAAgB,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QACnF,cAAc,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAA2B,EAAE,EAAuB,EAAE,EAAE;;IACtF,MAAM,IAAI,GAA+C,MAAA,MAAA,UAAU,CAAC,CAAC,CAAC,0CAAE,UAAU,0CAAE,GAAG,CACrF,CAAC,KAA8B,EAAE,EAAE,CAAC,mBAAM,KAAK,EAAG,CACnD,CAAC;IACF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9B,OAAO,IAAI,CAAC;KACb;IACD,IAAI,CAAC,KAAK,EAAE,CAAC;IACb,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACf,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;IAClC,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC,CAAC","file":"funnel.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport { clamp, isFunction, isValidNumber } from '@visactor/vutils';\n\ntype FunnelOptionValue<T> = T | (() => T);\n\nexport interface IFunnelOpt {\n valueField: FunnelOptionValue<string>;\n /** 转化率(当前层到下一层的比例) **/\n asTransformRatio: string;\n /** 到达率 (上一层到当前层的比例)*/\n asReachRatio: string;\n /** 高度轴占总量的比例 **/\n asHeightRatio: string;\n /** 当前值大小占比 */\n asValueRatio: string;\n /** 上一层值大小占比 */\n asLastValueRatio: string;\n /** 下一层值大小占比 */\n asNextValueRatio: string;\n /** 当前层的值 */\n asCurrentValue: string;\n /** 上一层的值 **/\n asLastValue: string;\n /** 下一层的值 **/\n asNextValue: string;\n\n /** 最底层漏斗是否为锥形 */\n isCone?: FunnelOptionValue<boolean | undefined>;\n /** 高度是否进行数据映射 **/\n heightVisual?: FunnelOptionValue<boolean | undefined>;\n\n /** 数值范围 */\n range?: FunnelOptionValue<{ min?: number; max?: number } | undefined>;\n}\n\nconst resolveOptionValue = <T>(option: FunnelOptionValue<T>) => (isFunction(option) ? option() : option);\n\nexport const funnel = (originData: Array<DataView>, op: IFunnelOpt) => {\n const data = originData.map(datum => ({ ...datum }));\n if (!data || data.length === 0) {\n return data;\n }\n const {\n asTransformRatio,\n asReachRatio,\n asHeightRatio,\n asValueRatio,\n asNextValueRatio,\n asLastValueRatio,\n asLastValue,\n asCurrentValue,\n asNextValue\n } = op;\n const valueField = resolveOptionValue(op.valueField);\n const heightVisual = resolveOptionValue(op.heightVisual) ?? false;\n const isCone = resolveOptionValue(op.isCone) ?? true;\n const range = resolveOptionValue(op.range);\n\n const max = data.reduce((m, d) => {\n const value = Number.parseFloat(d[valueField]);\n return isValidNumber(value) ? Math.max(m, value) : m;\n }, -Infinity);\n const rangeMin = range?.min ?? 0;\n const rangeMax = range?.max ?? max;\n const getValueRatio = (value: number) => {\n if (!isValidNumber(value) || !isValidNumber(rangeMin) || !isValidNumber(rangeMax)) {\n return 0;\n }\n\n if (rangeMin === rangeMax) {\n return value < rangeMin ? 0 : 1;\n }\n\n return clamp((value - rangeMin) / (rangeMax - rangeMin), 0, 1);\n };\n\n data.forEach((d, i) => {\n const currentValue: number = Number.parseFloat(d[valueField]);\n const lastValue: number = Number.parseFloat(data[i - 1]?.[valueField]);\n const nextValue: number = Number.parseFloat(data[i + 1]?.[valueField]);\n\n const transformRatio =\n !isValidNumber(nextValue * currentValue) || currentValue === 0 ? 0 : nextValue / currentValue;\n const reachRatio = !isValidNumber(currentValue * lastValue) || lastValue === 0 ? 0 : currentValue / lastValue;\n const valueRatio = getValueRatio(currentValue);\n\n asLastValue && (d[asLastValue] = lastValue);\n asNextValue && (d[asNextValue] = nextValue);\n asTransformRatio && (d[asTransformRatio] = transformRatio);\n asReachRatio && (d[asReachRatio] = i === 0 ? 1 : reachRatio);\n asHeightRatio && (d[asHeightRatio] = heightVisual === true ? transformRatio : 1 / data.length);\n asValueRatio && (d[asValueRatio] = valueRatio);\n asNextValueRatio &&\n (d[asNextValueRatio] = i === data.length - 1 ? (isCone ? 0 : d[asValueRatio]) : getValueRatio(nextValue));\n asLastValueRatio && (d[asLastValueRatio] = i === 0 ? 1 : getValueRatio(lastValue));\n asCurrentValue && (d[asCurrentValue] = currentValue);\n });\n\n return data;\n};\n\nexport interface IFunnelTransformOpt {\n asIsTransformLevel: string;\n}\n\nexport const funnelTransform = (originData: Array<DataView>, op: IFunnelTransformOpt) => {\n const data: Array<Record<string, unknown>> | undefined = originData[0]?.latestData?.map(\n (datum: Record<string, unknown>) => ({ ...datum })\n );\n if (!data || data.length === 0) {\n return data;\n }\n data.shift();\n data.forEach(d => {\n d[op.asIsTransformLevel] = true;\n });\n return data;\n};\n"]}
@@ -9,6 +9,8 @@ export declare class Interaction implements IInteraction {
9
9
  addTrigger(trigger: ITrigger): void;
10
10
  setStatedGraphics(trigger: ITrigger, graphics: IMarkGraphic[]): void;
11
11
  getStatedGraphics(trigger: ITrigger): IMarkGraphic[];
12
+ private _getMarkById;
13
+ private _hasAnimationByGraphicState;
12
14
  updateStates(trigger: ITrigger, newStatedGraphics: IMarkGraphic[], prevStatedGraphics?: IMarkGraphic[], state?: string, reverseState?: string): IMarkGraphic[];
13
15
  protected toggleReverseStateOfGraphics(trigger: ITrigger, newStatedGraphics: IMarkGraphic[], prevStatedGraphics: IMarkGraphic[], reverseState: string): void;
14
16
  protected toggleStateOfGraphics(trigger: ITrigger, newStatedGraphics: IMarkGraphic[], prevStatedGraphics: IMarkGraphic[], state: string): void;
@@ -23,39 +23,47 @@ export class Interaction {
23
23
  getStatedGraphics(trigger) {
24
24
  return this._stateGraphicsByTrigger.get(trigger);
25
25
  }
26
+ _getMarkById(trigger) {
27
+ const markById = new Map;
28
+ return trigger.getMarks().forEach((mark => {
29
+ mark && markById.set(mark.id, mark);
30
+ })), markById;
31
+ }
32
+ _hasAnimationByGraphicState(graphic, markById) {
33
+ var _a, _b, _c;
34
+ const mark = null !== (_b = null === (_a = graphic.parent) || void 0 === _a ? void 0 : _a.mark) && void 0 !== _b ? _b : markById.get(graphic.context.markId);
35
+ return !!(null === (_c = null == mark ? void 0 : mark.hasAnimationByState) || void 0 === _c ? void 0 : _c.call(mark, "state"));
36
+ }
26
37
  updateStates(trigger, newStatedGraphics, prevStatedGraphics, state, reverseState) {
27
38
  return this._disableTriggerEvent ? [] : newStatedGraphics && newStatedGraphics.length ? (state && reverseState ? prevStatedGraphics && prevStatedGraphics.length ? (this.toggleReverseStateOfGraphics(trigger, newStatedGraphics, prevStatedGraphics, reverseState),
28
39
  this.toggleStateOfGraphics(trigger, newStatedGraphics, prevStatedGraphics, state)) : this.addBothStateOfGraphics(trigger, newStatedGraphics, state, reverseState) : state && (prevStatedGraphics && prevStatedGraphics.length ? this.toggleStateOfGraphics(trigger, newStatedGraphics, prevStatedGraphics, state) : this.addStateOfGraphics(trigger, newStatedGraphics, state)),
29
- newStatedGraphics) : [];
40
+ newStatedGraphics) : (prevStatedGraphics && prevStatedGraphics.length && this.clearAllStatesOfTrigger(trigger, state, reverseState),
41
+ []);
30
42
  }
31
43
  toggleReverseStateOfGraphics(trigger, newStatedGraphics, prevStatedGraphics, reverseState) {
32
- const markIdByState = trigger.getMarkIdByState();
44
+ const markIdByState = trigger.getMarkIdByState(), markById = this._getMarkById(trigger);
33
45
  prevStatedGraphics.forEach((g => {
34
- var _a;
35
46
  if (reverseState && markIdByState[reverseState] && markIdByState[reverseState].includes(g.context.markId)) {
36
- const m = null === (_a = g.parent) || void 0 === _a ? void 0 : _a.mark, hasAnimation = m.hasAnimationByState && m.hasAnimationByState("state");
47
+ const hasAnimation = this._hasAnimationByGraphicState(g, markById);
37
48
  addGraphicState(g, reverseState, !0, hasAnimation);
38
49
  }
39
50
  })), newStatedGraphics.forEach((g => {
40
- var _a;
41
51
  if (reverseState && markIdByState[reverseState] && markIdByState[reverseState].includes(g.context.markId)) {
42
- const m = null === (_a = g.parent) || void 0 === _a ? void 0 : _a.mark, hasAnimation = m.hasAnimationByState && m.hasAnimationByState("state");
52
+ const hasAnimation = this._hasAnimationByGraphicState(g, markById);
43
53
  removeGraphicState(g, reverseState, hasAnimation);
44
54
  }
45
55
  }));
46
56
  }
47
57
  toggleStateOfGraphics(trigger, newStatedGraphics, prevStatedGraphics, state) {
48
- const markIdByState = trigger.getMarkIdByState();
58
+ const markIdByState = trigger.getMarkIdByState(), markById = this._getMarkById(trigger);
49
59
  prevStatedGraphics.forEach((g => {
50
- var _a;
51
60
  if (state && markIdByState[state] && markIdByState[state].includes(g.context.markId)) {
52
- const m = null === (_a = g.parent) || void 0 === _a ? void 0 : _a.mark, hasAnimation = m.hasAnimationByState && m.hasAnimationByState("state");
61
+ const hasAnimation = this._hasAnimationByGraphicState(g, markById);
53
62
  removeGraphicState(g, state, hasAnimation);
54
63
  }
55
64
  })), newStatedGraphics.forEach((g => {
56
- var _a;
57
65
  if (state && markIdByState[state] && markIdByState[state].includes(g.context.markId)) {
58
- const m = null === (_a = g.parent) || void 0 === _a ? void 0 : _a.mark, hasAnimation = m.hasAnimationByState && m.hasAnimationByState("state");
66
+ const hasAnimation = this._hasAnimationByGraphicState(g, markById);
59
67
  addGraphicState(g, state, !0, hasAnimation);
60
68
  }
61
69
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/interaction/interaction.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE5E,MAAM,OAAO,WAAW;IAAxB;QACU,4BAAuB,GAAkC,IAAI,GAAG,EAAE,CAAC;QAEnE,yBAAoB,GAAY,KAAK,CAAC;QAMtC,uBAAkB,GAAgC,IAAI,GAAG,EAAE,CAAC;IA0QtE,CAAC;IA9QC,sBAAsB,CAAC,OAAgB;QACrC,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC;IACtC,CAAC;IAGD,UAAU,CAAC,OAAiB;QAC1B,IAAI,OAAO,EAAE;YACX,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;YAE3C,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACvC,IAAI,KAAK,EAAE;oBACT,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAExD,IAAI,YAAY,EAAE;wBAChB,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;qBAC/D;yBAAM;wBACL,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;qBAC/C;iBACF;YACH,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED,iBAAiB,CAAC,OAAiB,EAAE,QAAwB;QAC3D,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,iBAAiB,CAAC,OAAiB;QACjC,OAAO,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,YAAY,CACV,OAAiB,EACjB,iBAAiC,EACjC,kBAAmC,EACnC,KAAc,EACd,YAAqB;QAErB,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,OAAO,EAAE,CAAC;SACX;QAED,IAAI,CAAC,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;YACnD,OAAO,EAAE,CAAC;SACX;QACD,IAAI,KAAK,IAAI,YAAY,EAAE;YACzB,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,EAAE;gBAEnD,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,CAAC,CAAC;gBAChG,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;aACnF;iBAAM;gBAEL,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;aAC9E;SACF;aAAM,IAAI,KAAK,EAAE;YAChB,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,EAAE;gBACnD,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;aACnF;iBAAM;gBACL,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;aAC5D;SACF;QAED,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAES,4BAA4B,CACpC,OAAiB,EACjB,iBAAiC,EACjC,kBAAkC,EAClC,YAAoB;QAEpB,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAEjD,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;;YAC7B,MAAM,UAAU,GACd,YAAY,IAAI,aAAa,CAAC,YAAY,CAAC,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAExG,IAAI,UAAU,EAAE;gBACd,MAAM,CAAC,GAAG,MAAA,CAAC,CAAC,MAAM,0CAAE,IAAI,CAAC;gBACzB,MAAM,YAAY,GAAI,CAAS,CAAC,mBAAmB,IAAK,CAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;gBAC/F,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;aACtD;QACH,CAAC,CAAC,CAAC;QAEH,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;;YAC5B,MAAM,UAAU,GACd,YAAY,IAAI,aAAa,CAAC,YAAY,CAAC,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAExG,IAAI,UAAU,EAAE;gBACd,MAAM,CAAC,GAAG,MAAA,CAAC,CAAC,MAAM,0CAAE,IAAI,CAAC;gBACzB,MAAM,YAAY,GAAI,CAAS,CAAC,mBAAmB,IAAK,CAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;gBAC/F,kBAAkB,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;aACnD;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAES,qBAAqB,CAC7B,OAAiB,EACjB,iBAAiC,EACjC,kBAAkC,EAClC,KAAa;QAEb,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAEjD,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;;YAC7B,MAAM,QAAQ,GAAG,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAElG,IAAI,QAAQ,EAAE;gBACZ,MAAM,CAAC,GAAG,MAAA,CAAC,CAAC,MAAM,0CAAE,IAAI,CAAC;gBACzB,MAAM,YAAY,GAAI,CAAS,CAAC,mBAAmB,IAAK,CAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;gBAC/F,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;aAC5C;QACH,CAAC,CAAC,CAAC;QAEH,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;;YAC5B,MAAM,QAAQ,GAAG,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClG,IAAI,QAAQ,EAAE;gBACZ,MAAM,CAAC,GAAG,MAAA,CAAC,CAAC,MAAM,0CAAE,IAAI,CAAC;gBACzB,MAAM,YAAY,GAAI,CAAS,CAAC,mBAAmB,IAAK,CAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;gBAC/F,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;aAC/C;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAES,sBAAsB,CAC9B,OAAiB,EACjB,cAA8B,EAC9B,KAAa,EACb,YAAoB;QAEpB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;;YAChB,MAAM,UAAU,GAAG,YAAY,IAAI,aAAa,CAAC,YAAY,CAAC,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7G,MAAM,QAAQ,GAAG,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAEtF,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE;gBAC5B,OAAO;aACR;YAED,MAAM,YAAY,GAAI,CAAS,CAAC,mBAAmB,IAAK,CAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAC/F,MAAA,CAAC,CAAC,WAAW,EAAE,0CAAE,OAAO,CAAC,CAAC,CAAC,EAAE;gBAC3B,MAAM,QAAQ,GAAG,cAAc,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC9D,IAAI,QAAQ,EAAE;oBACZ,IAAI,QAAQ,EAAE;wBACZ,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;qBAC/C;iBACF;qBAAM;oBACL,IAAI,UAAU,EAAE;wBACd,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;qBACtD;iBACF;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAES,kBAAkB,CAAC,OAAiB,EAAE,cAA8B,EAAE,KAAa;QAC3F,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAEjD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;;YACnB,MAAM,QAAQ,GAAG,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEzF,IAAI,CAAC,QAAQ,EAAE;gBACb,OAAO;aACR;YAED,MAAM,YAAY,GAAI,IAAY,CAAC,mBAAmB,IAAK,IAAY,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAErG,MAAA,IAAI,CAAC,WAAW,EAAE,0CAAE,OAAO,CAAC,CAAC,CAAC,EAAE;gBAC9B,MAAM,QAAQ,GAAG,cAAc,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAE9D,IAAI,QAAQ,EAAE;oBACZ,IAAI,QAAQ,EAAE;wBACZ,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;qBAC/C;iBACF;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,uBAAuB,CAAC,OAAiB,EAAE,KAAc,EAAE,YAAqB;QAC9E,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,OAAO;SACR;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAEvD,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YAC7C,OAAO;SACR;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAEjD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnB,IAAI,IAAI,EAAE;gBACR,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpC,MAAM,YAAY,GAAI,IAAY,CAAC,mBAAmB,IAAK,IAAY,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;gBACrG,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;oBAC/B,IAAI,YAAY,IAAI,aAAa,CAAC,YAAY,CAAC,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;wBAChG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;4BACnB,kBAAkB,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;wBACpD,CAAC,CAAC,CAAC;qBACJ;oBAED,IAAI,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;wBAC3E,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;4BACnB,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;gCAC9B,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;6BAC5C;wBACH,CAAC,CAAC,CAAC;qBACJ;iBACF;aACF;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,OAAO;SACR;QAED,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YAClD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACzB,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,UAAkB;QAC7B,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,OAAO;SACR;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEzD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;YAC/B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACnB,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;gBAG/D,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED,qBAAqB,CAAC,UAAkB,EAAE,YAA4B;QACpE,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,OAAO;SACR;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEzD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;YAC/B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACnB,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;oBACjD,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;wBAC3B,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;wBAEtC,OAAO,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAC3C,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;gBAEzG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;CACF","file":"interaction.js","sourcesContent":["import type { StateValue } from '../compile/mark';\nimport type { IMarkGraphic } from '../mark/interface';\nimport type { IInteraction } from './interface/common';\nimport type { ITrigger } from './interface/trigger';\nimport { addGraphicState, removeGraphicState } from '../util/graphic-state';\n\nexport class Interaction implements IInteraction {\n private _stateGraphicsByTrigger: Map<ITrigger, IMarkGraphic[]> = new Map();\n\n private _disableTriggerEvent: boolean = false;\n\n setDisableActiveEffect(disable: boolean) {\n this._disableTriggerEvent = disable;\n }\n\n private _triggerMapByState: Map<StateValue, ITrigger[]> = new Map();\n addTrigger(trigger: ITrigger) {\n if (trigger) {\n const startState = trigger.getStartState();\n const resetState = trigger.getResetState();\n\n [startState, resetState].forEach(state => {\n if (state) {\n const stateTrigger = this._triggerMapByState.get(state);\n\n if (stateTrigger) {\n !stateTrigger.includes(trigger) && stateTrigger.push(trigger);\n } else {\n this._triggerMapByState.set(state, [trigger]);\n }\n }\n });\n }\n }\n\n setStatedGraphics(trigger: ITrigger, graphics: IMarkGraphic[]) {\n this._stateGraphicsByTrigger.set(trigger, graphics);\n }\n\n getStatedGraphics(trigger: ITrigger) {\n return this._stateGraphicsByTrigger.get(trigger);\n }\n\n updateStates(\n trigger: ITrigger,\n newStatedGraphics: IMarkGraphic[],\n prevStatedGraphics?: IMarkGraphic[],\n state?: string,\n reverseState?: string\n ) {\n if (this._disableTriggerEvent) {\n return [];\n }\n\n if (!newStatedGraphics || !newStatedGraphics.length) {\n return [];\n }\n if (state && reverseState) {\n if (prevStatedGraphics && prevStatedGraphics.length) {\n // toggle\n this.toggleReverseStateOfGraphics(trigger, newStatedGraphics, prevStatedGraphics, reverseState);\n this.toggleStateOfGraphics(trigger, newStatedGraphics, prevStatedGraphics, state);\n } else {\n // update all the elements\n this.addBothStateOfGraphics(trigger, newStatedGraphics, state, reverseState);\n }\n } else if (state) {\n if (prevStatedGraphics && prevStatedGraphics.length) {\n this.toggleStateOfGraphics(trigger, newStatedGraphics, prevStatedGraphics, state);\n } else {\n this.addStateOfGraphics(trigger, newStatedGraphics, state);\n }\n }\n\n return newStatedGraphics;\n }\n\n protected toggleReverseStateOfGraphics(\n trigger: ITrigger,\n newStatedGraphics: IMarkGraphic[],\n prevStatedGraphics: IMarkGraphic[],\n reverseState: string\n ) {\n const markIdByState = trigger.getMarkIdByState();\n\n prevStatedGraphics.forEach(g => {\n const hasReverse =\n reverseState && markIdByState[reverseState] && markIdByState[reverseState].includes(g.context.markId);\n\n if (hasReverse) {\n const m = g.parent?.mark;\n const hasAnimation = (m as any).hasAnimationByState && (m as any).hasAnimationByState('state');\n addGraphicState(g, reverseState, true, hasAnimation);\n }\n });\n\n newStatedGraphics.forEach(g => {\n const hasReverse =\n reverseState && markIdByState[reverseState] && markIdByState[reverseState].includes(g.context.markId);\n\n if (hasReverse) {\n const m = g.parent?.mark;\n const hasAnimation = (m as any).hasAnimationByState && (m as any).hasAnimationByState('state');\n removeGraphicState(g, reverseState, hasAnimation);\n }\n });\n }\n\n protected toggleStateOfGraphics(\n trigger: ITrigger,\n newStatedGraphics: IMarkGraphic[],\n prevStatedGraphics: IMarkGraphic[],\n state: string\n ) {\n const markIdByState = trigger.getMarkIdByState();\n\n prevStatedGraphics.forEach(g => {\n const hasState = state && markIdByState[state] && markIdByState[state].includes(g.context.markId);\n\n if (hasState) {\n const m = g.parent?.mark;\n const hasAnimation = (m as any).hasAnimationByState && (m as any).hasAnimationByState('state');\n removeGraphicState(g, state, hasAnimation);\n }\n });\n\n newStatedGraphics.forEach(g => {\n const hasState = state && markIdByState[state] && markIdByState[state].includes(g.context.markId);\n if (hasState) {\n const m = g.parent?.mark;\n const hasAnimation = (m as any).hasAnimationByState && (m as any).hasAnimationByState('state');\n addGraphicState(g, state, true, hasAnimation);\n }\n });\n }\n\n protected addBothStateOfGraphics(\n trigger: ITrigger,\n statedGraphics: IMarkGraphic[],\n state: string,\n reverseState: string\n ) {\n const marks = trigger.getMarks();\n const markIdByState = trigger.getMarkIdByState();\n\n marks.forEach(m => {\n const hasReverse = reverseState && markIdByState[reverseState] && markIdByState[reverseState].includes(m.id);\n const hasState = state && markIdByState[state] && markIdByState[state].includes(m.id);\n\n if (!hasReverse && !hasState) {\n return;\n }\n\n const hasAnimation = (m as any).hasAnimationByState && (m as any).hasAnimationByState('state');\n m.getGraphics()?.forEach(g => {\n const isStated = statedGraphics && statedGraphics.includes(g);\n if (isStated) {\n if (hasState) {\n addGraphicState(g, state, true, hasAnimation);\n }\n } else {\n if (hasReverse) {\n addGraphicState(g, reverseState, true, hasAnimation);\n }\n }\n });\n });\n }\n\n protected addStateOfGraphics(trigger: ITrigger, statedGraphics: IMarkGraphic[], state: string) {\n const marks = trigger.getMarks();\n const markIdByState = trigger.getMarkIdByState();\n\n marks.forEach(mark => {\n const hasState = state && markIdByState[state] && markIdByState[state].includes(mark.id);\n\n if (!hasState) {\n return;\n }\n\n const hasAnimation = (mark as any).hasAnimationByState && (mark as any).hasAnimationByState('state');\n\n mark.getGraphics()?.forEach(g => {\n const isStated = statedGraphics && statedGraphics.includes(g);\n\n if (isStated) {\n if (hasState) {\n addGraphicState(g, state, true, hasAnimation);\n }\n }\n });\n });\n }\n\n clearAllStatesOfTrigger(trigger: ITrigger, state?: string, reverseState?: string) {\n if (this._disableTriggerEvent) {\n return;\n }\n\n const statedGraphics = this.getStatedGraphics(trigger);\n\n if (!statedGraphics || !statedGraphics.length) {\n return;\n }\n const marks = trigger.getMarks();\n const markIdByState = trigger.getMarkIdByState();\n\n marks.forEach(mark => {\n if (mark) {\n const graphics = mark.getGraphics();\n const hasAnimation = (mark as any).hasAnimationByState && (mark as any).hasAnimationByState('state');\n if (graphics && graphics.length) {\n if (reverseState && markIdByState[reverseState] && markIdByState[reverseState].includes(mark.id)) {\n graphics.forEach(g => {\n removeGraphicState(g, reverseState, hasAnimation);\n });\n }\n\n if (state && markIdByState[state] && markIdByState[state].includes(mark.id)) {\n graphics.forEach(g => {\n if (statedGraphics.includes(g)) {\n removeGraphicState(g, state, hasAnimation);\n }\n });\n }\n }\n }\n });\n }\n\n clearAllStates() {\n if (this._disableTriggerEvent) {\n return;\n }\n\n this._triggerMapByState.forEach((triggers, state) => {\n triggers.forEach(trigger => {\n this.clearAllStatesOfTrigger(trigger, state, trigger.getResetState());\n });\n });\n }\n\n clearByState(stateValue: string) {\n if (this._disableTriggerEvent) {\n return;\n }\n\n const triggers = this._triggerMapByState.get(stateValue);\n\n if (triggers && triggers.length) {\n triggers.forEach(t => {\n this.clearAllStatesOfTrigger(t, stateValue, t.getResetState());\n\n // 更新缓存\n this.setStatedGraphics(t, []);\n });\n }\n }\n\n updateStateOfGraphics(stateValue: string, markGraphics: IMarkGraphic[]) {\n if (this._disableTriggerEvent) {\n return;\n }\n const triggers = this._triggerMapByState.get(stateValue);\n\n if (triggers && triggers.length) {\n triggers.forEach(t => {\n const newStatedGraphics = markGraphics.filter(mg => {\n return t.getMarks().some(m => {\n const graphics = m && m.getGraphics();\n\n return graphics && graphics.includes(mg);\n });\n });\n\n this.updateStates(t, newStatedGraphics, this.getStatedGraphics(t), t.getStartState(), t.getResetState());\n\n this.setStatedGraphics(t, newStatedGraphics);\n });\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/interaction/interaction.ts"],"names":[],"mappings":"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","file":"interaction.js","sourcesContent":["import type { StateValue } from '../compile/mark';\nimport type { IMark, IMarkGraphic } from '../mark/interface';\nimport type { IInteraction } from './interface/common';\nimport type { ITrigger } from './interface/trigger';\nimport { addGraphicState, removeGraphicState } from '../util/graphic-state';\n\nexport class Interaction implements IInteraction {\n private _stateGraphicsByTrigger: Map<ITrigger, IMarkGraphic[]> = new Map();\n\n private _disableTriggerEvent: boolean = false;\n\n setDisableActiveEffect(disable: boolean) {\n this._disableTriggerEvent = disable;\n }\n\n private _triggerMapByState: Map<StateValue, ITrigger[]> = new Map();\n addTrigger(trigger: ITrigger) {\n if (trigger) {\n const startState = trigger.getStartState();\n const resetState = trigger.getResetState();\n\n [startState, resetState].forEach(state => {\n if (state) {\n const stateTrigger = this._triggerMapByState.get(state);\n\n if (stateTrigger) {\n !stateTrigger.includes(trigger) && stateTrigger.push(trigger);\n } else {\n this._triggerMapByState.set(state, [trigger]);\n }\n }\n });\n }\n }\n\n setStatedGraphics(trigger: ITrigger, graphics: IMarkGraphic[]) {\n this._stateGraphicsByTrigger.set(trigger, graphics);\n }\n\n getStatedGraphics(trigger: ITrigger) {\n return this._stateGraphicsByTrigger.get(trigger);\n }\n\n private _getMarkById(trigger: ITrigger) {\n const markById = new Map<number, IMark>();\n\n trigger.getMarks().forEach(mark => {\n if (mark) {\n markById.set(mark.id, mark);\n }\n });\n\n return markById;\n }\n\n private _hasAnimationByGraphicState(graphic: IMarkGraphic, markById: Map<number, IMark>) {\n const mark = (graphic.parent as any)?.mark ?? markById.get(graphic.context.markId);\n\n return !!(mark as any)?.hasAnimationByState?.('state');\n }\n\n updateStates(\n trigger: ITrigger,\n newStatedGraphics: IMarkGraphic[],\n prevStatedGraphics?: IMarkGraphic[],\n state?: string,\n reverseState?: string\n ) {\n if (this._disableTriggerEvent) {\n return [];\n }\n\n if (!newStatedGraphics || !newStatedGraphics.length) {\n if (prevStatedGraphics && prevStatedGraphics.length) {\n this.clearAllStatesOfTrigger(trigger, state, reverseState);\n }\n return [];\n }\n if (state && reverseState) {\n if (prevStatedGraphics && prevStatedGraphics.length) {\n // toggle\n this.toggleReverseStateOfGraphics(trigger, newStatedGraphics, prevStatedGraphics, reverseState);\n this.toggleStateOfGraphics(trigger, newStatedGraphics, prevStatedGraphics, state);\n } else {\n // update all the elements\n this.addBothStateOfGraphics(trigger, newStatedGraphics, state, reverseState);\n }\n } else if (state) {\n if (prevStatedGraphics && prevStatedGraphics.length) {\n this.toggleStateOfGraphics(trigger, newStatedGraphics, prevStatedGraphics, state);\n } else {\n this.addStateOfGraphics(trigger, newStatedGraphics, state);\n }\n }\n\n return newStatedGraphics;\n }\n\n protected toggleReverseStateOfGraphics(\n trigger: ITrigger,\n newStatedGraphics: IMarkGraphic[],\n prevStatedGraphics: IMarkGraphic[],\n reverseState: string\n ) {\n const markIdByState = trigger.getMarkIdByState();\n const markById = this._getMarkById(trigger);\n\n prevStatedGraphics.forEach(g => {\n const hasReverse =\n reverseState && markIdByState[reverseState] && markIdByState[reverseState].includes(g.context.markId);\n\n if (hasReverse) {\n const hasAnimation = this._hasAnimationByGraphicState(g, markById);\n addGraphicState(g, reverseState, true, hasAnimation);\n }\n });\n\n newStatedGraphics.forEach(g => {\n const hasReverse =\n reverseState && markIdByState[reverseState] && markIdByState[reverseState].includes(g.context.markId);\n\n if (hasReverse) {\n const hasAnimation = this._hasAnimationByGraphicState(g, markById);\n removeGraphicState(g, reverseState, hasAnimation);\n }\n });\n }\n\n protected toggleStateOfGraphics(\n trigger: ITrigger,\n newStatedGraphics: IMarkGraphic[],\n prevStatedGraphics: IMarkGraphic[],\n state: string\n ) {\n const markIdByState = trigger.getMarkIdByState();\n const markById = this._getMarkById(trigger);\n\n prevStatedGraphics.forEach(g => {\n const hasState = state && markIdByState[state] && markIdByState[state].includes(g.context.markId);\n\n if (hasState) {\n const hasAnimation = this._hasAnimationByGraphicState(g, markById);\n removeGraphicState(g, state, hasAnimation);\n }\n });\n\n newStatedGraphics.forEach(g => {\n const hasState = state && markIdByState[state] && markIdByState[state].includes(g.context.markId);\n if (hasState) {\n const hasAnimation = this._hasAnimationByGraphicState(g, markById);\n addGraphicState(g, state, true, hasAnimation);\n }\n });\n }\n\n protected addBothStateOfGraphics(\n trigger: ITrigger,\n statedGraphics: IMarkGraphic[],\n state: string,\n reverseState: string\n ) {\n const marks = trigger.getMarks();\n const markIdByState = trigger.getMarkIdByState();\n\n marks.forEach(m => {\n const hasReverse = reverseState && markIdByState[reverseState] && markIdByState[reverseState].includes(m.id);\n const hasState = state && markIdByState[state] && markIdByState[state].includes(m.id);\n\n if (!hasReverse && !hasState) {\n return;\n }\n\n const hasAnimation = (m as any).hasAnimationByState && (m as any).hasAnimationByState('state');\n m.getGraphics()?.forEach(g => {\n const isStated = statedGraphics && statedGraphics.includes(g);\n if (isStated) {\n if (hasState) {\n addGraphicState(g, state, true, hasAnimation);\n }\n } else {\n if (hasReverse) {\n addGraphicState(g, reverseState, true, hasAnimation);\n }\n }\n });\n });\n }\n\n protected addStateOfGraphics(trigger: ITrigger, statedGraphics: IMarkGraphic[], state: string) {\n const marks = trigger.getMarks();\n const markIdByState = trigger.getMarkIdByState();\n\n marks.forEach(mark => {\n const hasState = state && markIdByState[state] && markIdByState[state].includes(mark.id);\n\n if (!hasState) {\n return;\n }\n\n const hasAnimation = (mark as any).hasAnimationByState && (mark as any).hasAnimationByState('state');\n\n mark.getGraphics()?.forEach(g => {\n const isStated = statedGraphics && statedGraphics.includes(g);\n\n if (isStated) {\n if (hasState) {\n addGraphicState(g, state, true, hasAnimation);\n }\n }\n });\n });\n }\n\n clearAllStatesOfTrigger(trigger: ITrigger, state?: string, reverseState?: string) {\n if (this._disableTriggerEvent) {\n return;\n }\n\n const statedGraphics = this.getStatedGraphics(trigger);\n\n if (!statedGraphics || !statedGraphics.length) {\n return;\n }\n const marks = trigger.getMarks();\n const markIdByState = trigger.getMarkIdByState();\n\n marks.forEach(mark => {\n if (mark) {\n const graphics = mark.getGraphics();\n const hasAnimation = (mark as any).hasAnimationByState && (mark as any).hasAnimationByState('state');\n if (graphics && graphics.length) {\n if (reverseState && markIdByState[reverseState] && markIdByState[reverseState].includes(mark.id)) {\n graphics.forEach(g => {\n removeGraphicState(g, reverseState, hasAnimation);\n });\n }\n\n if (state && markIdByState[state] && markIdByState[state].includes(mark.id)) {\n graphics.forEach(g => {\n if (statedGraphics.includes(g)) {\n removeGraphicState(g, state, hasAnimation);\n }\n });\n }\n }\n }\n });\n }\n\n clearAllStates() {\n if (this._disableTriggerEvent) {\n return;\n }\n\n this._triggerMapByState.forEach((triggers, state) => {\n triggers.forEach(trigger => {\n this.clearAllStatesOfTrigger(trigger, state, trigger.getResetState());\n });\n });\n }\n\n clearByState(stateValue: string) {\n if (this._disableTriggerEvent) {\n return;\n }\n\n const triggers = this._triggerMapByState.get(stateValue);\n\n if (triggers && triggers.length) {\n triggers.forEach(t => {\n this.clearAllStatesOfTrigger(t, stateValue, t.getResetState());\n\n // 更新缓存\n this.setStatedGraphics(t, []);\n });\n }\n }\n\n updateStateOfGraphics(stateValue: string, markGraphics: IMarkGraphic[]) {\n if (this._disableTriggerEvent) {\n return;\n }\n const triggers = this._triggerMapByState.get(stateValue);\n\n if (triggers && triggers.length) {\n triggers.forEach(t => {\n const newStatedGraphics = markGraphics.filter(mg => {\n return t.getMarks().some(m => {\n const graphics = m && m.getGraphics();\n\n return graphics && graphics.includes(mg);\n });\n });\n\n this.updateStates(t, newStatedGraphics, this.getStatedGraphics(t), t.getStartState(), t.getResetState());\n\n this.setStatedGraphics(t, newStatedGraphics);\n });\n }\n }\n}\n"]}
@@ -26,7 +26,7 @@ export declare abstract class GlyphMark<T extends ICommonSpec = ICommonSpec, Cfg
26
26
  private _getInheritedStyleAttrsMap;
27
27
  private _syncInheritedStyleAttrs;
28
28
  private _onGlyphAttributeUpdate;
29
- protected _setStateOfGraphic: (g: IMarkGraphic) => void;
29
+ protected _setStateOfGraphic: (g: IMarkGraphic, hasAnimation?: boolean) => void;
30
30
  protected _createGraphic(attrs?: IGlyphGraphicAttribute): IGraphic;
31
31
  protected _runProgressiveEncoder(graphics: IMarkGraphic[]): void;
32
32
  }
package/esm/mark/glyph.js CHANGED
@@ -12,7 +12,7 @@ const GLYPH_INHERITED_STYLE_ATTRIBUTES = new Set([ "fill", "fillOpacity", "strok
12
12
 
13
13
  export class GlyphMark extends BaseMark {
14
14
  constructor() {
15
- super(...arguments), this._setStateOfGraphic = g => {
15
+ super(...arguments), this._setStateOfGraphic = (g, hasAnimation) => {
16
16
  g.clearStates(), g.context.diffState !== DiffState.enter && g.context.diffState !== DiffState.update || (g.glyphStateProxy = (stateName, nexStates) => {
17
17
  var _a;
18
18
  const glyphAttrs = {
@@ -21,7 +21,7 @@ export class GlyphMark extends BaseMark {
21
21
  return g.glyphStates ? g.glyphStates[stateName] || (g.glyphStates[stateName] = glyphAttrs) : g.glyphStates = {
22
22
  [stateName]: glyphAttrs
23
23
  }, glyphAttrs;
24
- }, g.useStates(g.context.states));
24
+ }, g.useStates(g.context.states, hasAnimation));
25
25
  };
26
26
  }
27
27
  getSubMarks() {
@@ -74,10 +74,11 @@ export class GlyphMark extends BaseMark {
74
74
  }
75
75
  _createGraphic(attrs = {}) {
76
76
  const glyph = createGlyph(attrs);
77
- glyph.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(glyph), glyph.addEventListener("afterAttributeUpdate", (event => {
78
- var _a;
79
- 2 === (null === (_a = null == event ? void 0 : event.detail) || void 0 === _a ? void 0 : _a.type) && this._syncInheritedStyleAttrs(glyph, glyph.attribute);
80
- }));
77
+ glyph.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(glyph);
78
+ const onAttributeUpdate = glyph.onAttributeUpdate.bind(glyph);
79
+ glyph.onAttributeUpdate = context => {
80
+ onAttributeUpdate(context), 2 === (null == context ? void 0 : context.type) && this._syncInheritedStyleAttrs(glyph, glyph.attribute);
81
+ };
81
82
  const subMarks = this._subMarks;
82
83
  if (subMarks) {
83
84
  const subGraphics = [];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mark/glyph.ts"],"names":[],"mappings":"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","file":"glyph.js","sourcesContent":["import type { ICommonSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IGlyph, IGlyphGraphicAttribute, IGraphic } from '@visactor/vrender-core';\nimport { createGlyph, registerGlyph, registerShadowRoot } from '../vrender-bridge';\nimport type { IGlyphMark } from './interface/mark';\nimport type { MarkType } from './interface/type';\nimport { Factory } from '../core/factory';\nimport type { Datum } from '../typings/common';\nimport type { IMarkGraphic } from './interface/common';\nimport { DiffState } from './interface/enum';\nimport { merge } from '@visactor/vutils';\n\nconst GLYPH_INHERITED_STYLE_ATTRIBUTES = new Set([\n 'fill',\n 'fillOpacity',\n 'stroke',\n 'strokeOpacity',\n 'opacity',\n 'lineWidth',\n 'lineDash',\n 'lineDashOffset',\n 'lineCap',\n 'lineJoin',\n 'miterLimit',\n 'shadowBlur',\n 'shadowColor',\n 'shadowOffsetX',\n 'shadowOffsetY',\n 'visible',\n 'pickable',\n 'cursor'\n]);\nconst GLYPH_STATE_ATTRIBUTE_UPDATE_TYPE = 2;\n\nexport abstract class GlyphMark<T extends ICommonSpec = ICommonSpec, Cfg = any>\n extends BaseMark<T>\n implements IGlyphMark<T, Cfg>\n{\n protected _defaultGlyphAttrs: T;\n\n protected _subMarks: Record<\n string,\n {\n type: MarkType;\n defaultAttributes?: any;\n }\n >;\n\n getSubMarks() {\n return this._subMarks;\n }\n\n protected _glyphConfig: Cfg;\n\n setGlyphConfig(cfg: Cfg) {\n this._glyphConfig = cfg;\n }\n\n getGlyphConfig() {\n return this._glyphConfig;\n }\n\n protected _positionChannels: string[];\n\n getPositionChannels() {\n return this._positionChannels;\n }\n\n protected _positionEncoder: (glyphAttrs: any, datum: Datum, g: IGlyph) => Record<string, any>;\n\n protected _channelEncoder: Record<string, (channelValue: any) => Record<string, any>>;\n\n private _getInheritedStyleAttrs(attributes: any) {\n let inheritedStyleAttrs: any = null;\n\n Object.keys(attributes).forEach(channel => {\n if (GLYPH_INHERITED_STYLE_ATTRIBUTES.has(channel)) {\n inheritedStyleAttrs = inheritedStyleAttrs ?? {};\n inheritedStyleAttrs[channel] = attributes[channel];\n }\n });\n\n return inheritedStyleAttrs;\n }\n\n private _getInheritedStyleAttrsMap(glyph: IGlyph, attributes: any) {\n const inheritedStyleAttrs = this._getInheritedStyleAttrs(attributes);\n\n if (!inheritedStyleAttrs) {\n return null;\n }\n\n return glyph.getSubGraphic().reduce((map, subGraphic) => {\n if (subGraphic) {\n map[subGraphic.name] = { ...inheritedStyleAttrs };\n }\n return map;\n }, {} as Record<string, any>);\n }\n\n private _syncInheritedStyleAttrs(glyph: IGlyph, attributes: any) {\n const inheritedStyleAttrs = this._getInheritedStyleAttrs(attributes);\n\n if (!inheritedStyleAttrs) {\n return;\n }\n\n glyph.getSubGraphic().forEach(subGraphic => {\n subGraphic?.setAttributes({ ...inheritedStyleAttrs });\n });\n }\n\n private _onGlyphAttributeUpdate(glyph: IGlyph) {\n return (newAttributes: any) => {\n const positionChannels = this.getPositionChannels();\n let subAttrsMap =\n positionChannels && this._positionEncoder && Object.keys(newAttributes).some(k => positionChannels.includes(k))\n ? this._positionEncoder(newAttributes, glyph?.context?.data?.[0], glyph)\n : null;\n\n if (this._channelEncoder) {\n Object.keys(this._channelEncoder).forEach(channel => {\n if (channel in newAttributes) {\n const channelAttrsMap = this._channelEncoder[channel](newAttributes[channel]);\n\n subAttrsMap = subAttrsMap ? merge(subAttrsMap, channelAttrsMap) : channelAttrsMap;\n }\n });\n }\n\n const inheritedStyleAttrsMap = this._getInheritedStyleAttrsMap(glyph, newAttributes);\n if (inheritedStyleAttrsMap) {\n subAttrsMap = subAttrsMap ? merge(inheritedStyleAttrsMap, subAttrsMap) : inheritedStyleAttrsMap;\n }\n\n if (subAttrsMap) {\n glyph.getSubGraphic().forEach(subGraphic => {\n if (subGraphic && subAttrsMap[subGraphic.name]) {\n subGraphic.setAttributes(subAttrsMap[subGraphic.name]);\n }\n });\n }\n\n return newAttributes;\n };\n }\n\n protected _setStateOfGraphic = (g: IMarkGraphic) => {\n g.clearStates();\n\n if (g.context.diffState === DiffState.enter || g.context.diffState === DiffState.update) {\n g.glyphStateProxy = (stateName: string, nexStates: string[]) => {\n const glyphAttrs = {\n attributes: {\n ...this._runEncoderOfGraphic(this._encoderOfState?.[stateName], g),\n ...(g.runtimeStateCache ? g.runtimeStateCache[stateName] : null)\n }\n };\n\n // 更新缓存\n if (!g.glyphStates) {\n g.glyphStates = { [stateName]: glyphAttrs };\n } else if (!g.glyphStates[stateName]) {\n g.glyphStates[stateName] = glyphAttrs;\n }\n\n return glyphAttrs;\n };\n\n g.useStates(g.context.states);\n }\n };\n\n protected _createGraphic(attrs: IGlyphGraphicAttribute = {}): IGraphic {\n const glyph = createGlyph(attrs);\n glyph.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(glyph);\n glyph.addEventListener('afterAttributeUpdate', (event: any) => {\n if (event?.detail?.type === GLYPH_STATE_ATTRIBUTE_UPDATE_TYPE) {\n this._syncInheritedStyleAttrs(glyph, glyph.attribute);\n }\n });\n const subMarks = this._subMarks;\n\n if (subMarks) {\n const subGraphics: IGraphic[] = [];\n\n Object.keys(subMarks).forEach(name => {\n // glyph 中的子元素会继承glyph 的 x,y,所以子元素手动设置一下,x: 0, y: 0\n const subGraphic = Factory.createGraphicComponent(subMarks[name].type, {\n ...subMarks[name].defaultAttributes\n });\n\n if (subGraphic) {\n subGraphics.push(subGraphic);\n\n subGraphic.name = name;\n subGraphic.onBeforeAttributeUpdate = (attrs: any) => {\n return attrs;\n };\n }\n });\n\n glyph.setSubGraphic(subGraphics);\n }\n\n (glyph as any).onBeforeAttributeUpdate(attrs);\n\n return glyph;\n }\n\n protected _runProgressiveEncoder(graphics: IMarkGraphic[]) {\n this._runEncoder(graphics);\n }\n}\n\nexport const registerGlyphMark = () => {\n Factory.registerGraphicComponent('glyph', createGlyph);\n registerShadowRoot();\n registerGlyph();\n};\n"]}
1
+ {"version":3,"sources":["../src/mark/glyph.ts"],"names":[],"mappings":"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","file":"glyph.js","sourcesContent":["import type { ICommonSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IGlyph, IGlyphGraphicAttribute, IGraphic } from '@visactor/vrender-core';\nimport { createGlyph, registerGlyph, registerShadowRoot } from '../vrender-bridge';\nimport type { IGlyphMark } from './interface/mark';\nimport type { MarkType } from './interface/type';\nimport { Factory } from '../core/factory';\nimport type { Datum } from '../typings/common';\nimport type { IMarkGraphic } from './interface/common';\nimport { DiffState } from './interface/enum';\nimport { merge } from '@visactor/vutils';\n\nconst GLYPH_INHERITED_STYLE_ATTRIBUTES = new Set([\n 'fill',\n 'fillOpacity',\n 'stroke',\n 'strokeOpacity',\n 'opacity',\n 'lineWidth',\n 'lineDash',\n 'lineDashOffset',\n 'lineCap',\n 'lineJoin',\n 'miterLimit',\n 'shadowBlur',\n 'shadowColor',\n 'shadowOffsetX',\n 'shadowOffsetY',\n 'visible',\n 'pickable',\n 'cursor'\n]);\nconst GLYPH_STATE_ATTRIBUTE_UPDATE_TYPE = 2;\n\nexport abstract class GlyphMark<T extends ICommonSpec = ICommonSpec, Cfg = any>\n extends BaseMark<T>\n implements IGlyphMark<T, Cfg>\n{\n protected _defaultGlyphAttrs: T;\n\n protected _subMarks: Record<\n string,\n {\n type: MarkType;\n defaultAttributes?: any;\n }\n >;\n\n getSubMarks() {\n return this._subMarks;\n }\n\n protected _glyphConfig: Cfg;\n\n setGlyphConfig(cfg: Cfg) {\n this._glyphConfig = cfg;\n }\n\n getGlyphConfig() {\n return this._glyphConfig;\n }\n\n protected _positionChannels: string[];\n\n getPositionChannels() {\n return this._positionChannels;\n }\n\n protected _positionEncoder: (glyphAttrs: any, datum: Datum, g: IGlyph) => Record<string, any>;\n\n protected _channelEncoder: Record<string, (channelValue: any) => Record<string, any>>;\n\n private _getInheritedStyleAttrs(attributes: any) {\n let inheritedStyleAttrs: any = null;\n\n Object.keys(attributes).forEach(channel => {\n if (GLYPH_INHERITED_STYLE_ATTRIBUTES.has(channel)) {\n inheritedStyleAttrs = inheritedStyleAttrs ?? {};\n inheritedStyleAttrs[channel] = attributes[channel];\n }\n });\n\n return inheritedStyleAttrs;\n }\n\n private _getInheritedStyleAttrsMap(glyph: IGlyph, attributes: any) {\n const inheritedStyleAttrs = this._getInheritedStyleAttrs(attributes);\n\n if (!inheritedStyleAttrs) {\n return null;\n }\n\n return glyph.getSubGraphic().reduce((map, subGraphic) => {\n if (subGraphic) {\n map[subGraphic.name] = { ...inheritedStyleAttrs };\n }\n return map;\n }, {} as Record<string, any>);\n }\n\n private _syncInheritedStyleAttrs(glyph: IGlyph, attributes: any) {\n const inheritedStyleAttrs = this._getInheritedStyleAttrs(attributes);\n\n if (!inheritedStyleAttrs) {\n return;\n }\n\n glyph.getSubGraphic().forEach(subGraphic => {\n subGraphic?.setAttributes({ ...inheritedStyleAttrs });\n });\n }\n\n private _onGlyphAttributeUpdate(glyph: IGlyph) {\n return (newAttributes: any) => {\n const positionChannels = this.getPositionChannels();\n let subAttrsMap =\n positionChannels && this._positionEncoder && Object.keys(newAttributes).some(k => positionChannels.includes(k))\n ? this._positionEncoder(newAttributes, glyph?.context?.data?.[0], glyph)\n : null;\n\n if (this._channelEncoder) {\n Object.keys(this._channelEncoder).forEach(channel => {\n if (channel in newAttributes) {\n const channelAttrsMap = this._channelEncoder[channel](newAttributes[channel]);\n\n subAttrsMap = subAttrsMap ? merge(subAttrsMap, channelAttrsMap) : channelAttrsMap;\n }\n });\n }\n\n const inheritedStyleAttrsMap = this._getInheritedStyleAttrsMap(glyph, newAttributes);\n if (inheritedStyleAttrsMap) {\n subAttrsMap = subAttrsMap ? merge(inheritedStyleAttrsMap, subAttrsMap) : inheritedStyleAttrsMap;\n }\n\n if (subAttrsMap) {\n glyph.getSubGraphic().forEach(subGraphic => {\n if (subGraphic && subAttrsMap[subGraphic.name]) {\n subGraphic.setAttributes(subAttrsMap[subGraphic.name]);\n }\n });\n }\n\n return newAttributes;\n };\n }\n\n protected _setStateOfGraphic = (g: IMarkGraphic, hasAnimation?: boolean) => {\n g.clearStates();\n\n if (g.context.diffState === DiffState.enter || g.context.diffState === DiffState.update) {\n g.glyphStateProxy = (stateName: string, nexStates: string[]) => {\n const glyphAttrs = {\n attributes: {\n ...this._runEncoderOfGraphic(this._encoderOfState?.[stateName], g),\n ...(g.runtimeStateCache ? g.runtimeStateCache[stateName] : null)\n }\n };\n\n // 更新缓存\n if (!g.glyphStates) {\n g.glyphStates = { [stateName]: glyphAttrs };\n } else if (!g.glyphStates[stateName]) {\n g.glyphStates[stateName] = glyphAttrs;\n }\n\n return glyphAttrs;\n };\n\n g.useStates(g.context.states, hasAnimation);\n }\n };\n\n protected _createGraphic(attrs: IGlyphGraphicAttribute = {}): IGraphic {\n const glyph = createGlyph(attrs);\n glyph.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(glyph);\n const onAttributeUpdate = glyph.onAttributeUpdate.bind(glyph);\n glyph.onAttributeUpdate = (context: any) => {\n onAttributeUpdate(context);\n if (context?.type === GLYPH_STATE_ATTRIBUTE_UPDATE_TYPE) {\n this._syncInheritedStyleAttrs(glyph, glyph.attribute);\n }\n };\n const subMarks = this._subMarks;\n\n if (subMarks) {\n const subGraphics: IGraphic[] = [];\n\n Object.keys(subMarks).forEach(name => {\n // glyph 中的子元素会继承glyph 的 x,y,所以子元素手动设置一下,x: 0, y: 0\n const subGraphic = Factory.createGraphicComponent(subMarks[name].type, {\n ...subMarks[name].defaultAttributes\n });\n\n if (subGraphic) {\n subGraphics.push(subGraphic);\n\n subGraphic.name = name;\n subGraphic.onBeforeAttributeUpdate = (attrs: any) => {\n return attrs;\n };\n }\n });\n\n glyph.setSubGraphic(subGraphics);\n }\n\n (glyph as any).onBeforeAttributeUpdate(attrs);\n\n return glyph;\n }\n\n protected _runProgressiveEncoder(graphics: IMarkGraphic[]) {\n this._runEncoder(graphics);\n }\n}\n\nexport const registerGlyphMark = () => {\n Factory.registerGraphicComponent('glyph', createGlyph);\n registerShadowRoot();\n registerGlyph();\n};\n"]}
@@ -651,7 +651,7 @@ export class BaseSeries extends BaseModel {
651
651
  const marks = this.getMarksWithoutRoot();
652
652
  marks.forEach((mark => {
653
653
  mark.clearBeforeReInit(), this._spec[mark.name] && this.initMarkStyleWithSpec(mark, this._spec[mark.name]);
654
- })), this.initMarkStyle(), marks.forEach((mark => {
654
+ })), this.initMarkStyle(), this.initMarkState(), marks.forEach((mark => {
655
655
  mark.commit(!1);
656
656
  })), this._updateExtensionMarkSpec(), this._updateSpecData(), this._tooltipHelper && this._tooltipHelper.updateTooltipSpec();
657
657
  isAnimationEnabledForSeries(this) && this.initAnimation();