@visactor/vgrammar-core 0.14.0-alpha.1 → 0.14.0-alpha.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.
- package/cjs/component/axis.d.ts +0 -2
- package/cjs/component/axis.js +1 -15
- package/cjs/component/axis.js.map +1 -1
- package/cjs/component/grid.d.ts +0 -2
- package/cjs/component/grid.js +1 -15
- package/cjs/component/grid.js.map +1 -1
- package/cjs/component/index.d.ts +2 -2
- package/cjs/component/index.js +1 -21
- package/cjs/component/index.js.map +1 -1
- package/cjs/core/factory.d.ts +1 -8
- package/cjs/core/factory.js +1 -8
- package/cjs/core/factory.js.map +1 -1
- package/cjs/glyph/boxplot.js +5 -5
- package/cjs/glyph/boxplot.js.map +1 -1
- package/cjs/glyph/link-path.js +2 -2
- package/cjs/glyph/link-path.js.map +1 -1
- package/cjs/glyph/ripple.js +2 -3
- package/cjs/glyph/ripple.js.map +1 -1
- package/cjs/glyph/tree-path.js +2 -2
- package/cjs/glyph/tree-path.js.map +1 -1
- package/cjs/glyph/violin.js +4 -4
- package/cjs/glyph/violin.js.map +1 -1
- package/cjs/glyph/wave.js +2 -3
- package/cjs/glyph/wave.js.map +1 -1
- package/cjs/graph/animation/animation/fade.js +4 -4
- package/cjs/graph/animation/animation/fade.js.map +1 -1
- package/cjs/graph/animation/animation/grow-cartesian.js +14 -14
- package/cjs/graph/animation/animation/grow-cartesian.js.map +1 -1
- package/cjs/graph/animation/animation/grow-interval.js +9 -9
- package/cjs/graph/animation/animation/grow-interval.js.map +1 -1
- package/cjs/graph/animation/animation/grow-points.js +9 -9
- package/cjs/graph/animation/animation/grow-points.js.map +1 -1
- package/cjs/graph/animation/animation/grow-polar.js +24 -24
- package/cjs/graph/animation/animation/grow-polar.js.map +1 -1
- package/cjs/graph/animation/animation/move.js +6 -6
- package/cjs/graph/animation/animation/move.js.map +1 -1
- package/cjs/graph/animation/animation/rotate.js +5 -5
- package/cjs/graph/animation/animation/rotate.js.map +1 -1
- package/cjs/graph/animation/animation/scale.js +5 -5
- package/cjs/graph/animation/animation/scale.js.map +1 -1
- package/cjs/graph/animation/animation/update.js +2 -2
- package/cjs/graph/animation/animation/update.js.map +1 -1
- package/cjs/graph/animation/animator.js +6 -1
- package/cjs/graph/animation/animator.js.map +1 -1
- package/cjs/graph/animation/morph.d.ts +12 -2
- package/cjs/graph/animation/morph.js +163 -76
- package/cjs/graph/animation/morph.js.map +1 -1
- package/cjs/graph/attributes/line.d.ts +1 -0
- package/cjs/graph/attributes/line.js +17 -5
- package/cjs/graph/attributes/line.js.map +1 -1
- package/cjs/graph/canvas-renderer.d.ts +1 -1
- package/cjs/graph/canvas-renderer.js +4 -4
- package/cjs/graph/canvas-renderer.js.map +1 -1
- package/cjs/graph/constants.d.ts +1 -0
- package/cjs/graph/constants.js +2 -2
- package/cjs/graph/constants.js.map +1 -1
- package/cjs/graph/element.d.ts +2 -1
- package/cjs/graph/element.js +22 -20
- package/cjs/graph/element.js.map +1 -1
- package/cjs/graph/glyph-element.js +6 -7
- package/cjs/graph/glyph-element.js.map +1 -1
- package/cjs/graph/layout/layout.d.ts +0 -1
- package/cjs/graph/layout/layout.js +2 -8
- package/cjs/graph/layout/layout.js.map +1 -1
- package/cjs/graph/mark/graphic.js +8 -14
- package/cjs/graph/mark/graphic.js.map +1 -1
- package/cjs/graph/util/element.d.ts +2 -0
- package/cjs/graph/util/element.js +10 -0
- package/cjs/graph/util/element.js.map +1 -0
- package/cjs/graph/util/point.js +26 -10
- package/cjs/graph/util/point.js.map +1 -1
- package/cjs/index.d.ts +1 -8
- package/cjs/index.js +2 -66
- package/cjs/index.js.map +1 -1
- package/cjs/interactions/brush-base.js +2 -1
- package/cjs/interactions/brush-filter.js +1 -2
- package/cjs/interactions/fish-eye.js +2 -1
- package/cjs/interactions/index.js +1 -2
- package/cjs/interactions/tooltip.js +1 -1
- package/cjs/parse/event.d.ts +2 -0
- package/cjs/parse/event.js +10 -4
- package/cjs/parse/event.js.map +1 -1
- package/cjs/parse/util.js.map +1 -1
- package/cjs/transforms/mark/mark-overlap.js +6 -6
- package/cjs/transforms/mark/mark-overlap.js.map +1 -1
- package/cjs/types/animate.d.ts +1 -0
- package/cjs/types/animate.js.map +1 -1
- package/cjs/types/element.d.ts +5 -1
- package/cjs/types/element.js.map +1 -1
- package/cjs/types/morph.d.ts +2 -1
- package/cjs/types/morph.js.map +1 -1
- package/cjs/types/renderer.d.ts +1 -6
- package/cjs/types/renderer.js.map +1 -1
- package/cjs/view/View.d.ts +6 -3
- package/cjs/view/View.js +105 -52
- package/cjs/view/View.js.map +1 -1
- package/cjs/view/animate.js +1 -2
- package/cjs/view/animate.js.map +1 -1
- package/cjs/view/constants.d.ts +0 -2
- package/cjs/view/constants.js +2 -3
- package/cjs/view/constants.js.map +1 -1
- package/cjs/view/events.d.ts +1 -0
- package/cjs/view/events.js +17 -3
- package/cjs/view/events.js.map +1 -1
- package/cjs/view/glyph.d.ts +0 -4
- package/cjs/view/glyph.js +3 -12
- package/cjs/view/glyph.js.map +1 -1
- package/cjs/view/grammar-record.js +2 -3
- package/cjs/view/grammar-record.js.map +1 -1
- package/cjs/view/group.js +3 -3
- package/cjs/view/group.js.map +1 -1
- package/cjs/view/mark.d.ts +0 -2
- package/cjs/view/mark.js +28 -31
- package/cjs/view/mark.js.map +1 -1
- package/es/component/axis.d.ts +0 -2
- package/es/component/axis.js +0 -10
- package/es/component/axis.js.map +1 -1
- package/es/component/grid.d.ts +0 -2
- package/es/component/grid.js +0 -10
- package/es/component/grid.js.map +1 -1
- package/es/component/index.d.ts +2 -2
- package/es/component/index.js +2 -2
- package/es/component/index.js.map +1 -1
- package/es/core/factory.d.ts +1 -8
- package/es/core/factory.js +1 -8
- package/es/core/factory.js.map +1 -1
- package/es/glyph/boxplot.js +2 -4
- package/es/glyph/boxplot.js.map +1 -1
- package/es/glyph/link-path.js +2 -4
- package/es/glyph/link-path.js.map +1 -1
- package/es/glyph/ripple.js +1 -3
- package/es/glyph/ripple.js.map +1 -1
- package/es/glyph/tree-path.js +2 -4
- package/es/glyph/tree-path.js.map +1 -1
- package/es/glyph/violin.js +2 -4
- package/es/glyph/violin.js.map +1 -1
- package/es/glyph/wave.js +1 -3
- package/es/glyph/wave.js.map +1 -1
- package/es/graph/animation/animation/fade.js +4 -4
- package/es/graph/animation/animation/fade.js.map +1 -1
- package/es/graph/animation/animation/grow-cartesian.js +14 -14
- package/es/graph/animation/animation/grow-cartesian.js.map +1 -1
- package/es/graph/animation/animation/grow-interval.js +9 -9
- package/es/graph/animation/animation/grow-interval.js.map +1 -1
- package/es/graph/animation/animation/grow-points.js +9 -9
- package/es/graph/animation/animation/grow-points.js.map +1 -1
- package/es/graph/animation/animation/grow-polar.js +24 -24
- package/es/graph/animation/animation/grow-polar.js.map +1 -1
- package/es/graph/animation/animation/move.js +6 -6
- package/es/graph/animation/animation/move.js.map +1 -1
- package/es/graph/animation/animation/rotate.js +4 -4
- package/es/graph/animation/animation/rotate.js.map +1 -1
- package/es/graph/animation/animation/scale.js +5 -5
- package/es/graph/animation/animation/scale.js.map +1 -1
- package/es/graph/animation/animation/update.js +3 -1
- package/es/graph/animation/animation/update.js.map +1 -1
- package/es/graph/animation/animator.js +6 -1
- package/es/graph/animation/animator.js.map +1 -1
- package/es/graph/animation/morph.d.ts +12 -2
- package/es/graph/animation/morph.js +159 -72
- package/es/graph/animation/morph.js.map +1 -1
- package/es/graph/attributes/line.d.ts +1 -0
- package/es/graph/attributes/line.js +14 -3
- package/es/graph/attributes/line.js.map +1 -1
- package/es/graph/canvas-renderer.d.ts +1 -1
- package/es/graph/canvas-renderer.js +5 -5
- package/es/graph/canvas-renderer.js.map +1 -1
- package/es/graph/constants.d.ts +1 -0
- package/es/graph/constants.js +2 -0
- package/es/graph/constants.js.map +1 -1
- package/es/graph/element.d.ts +2 -1
- package/es/graph/element.js +24 -20
- package/es/graph/element.js.map +1 -1
- package/es/graph/glyph-element.js +8 -6
- package/es/graph/glyph-element.js.map +1 -1
- package/es/graph/layout/layout.d.ts +0 -1
- package/es/graph/layout/layout.js +0 -6
- package/es/graph/layout/layout.js.map +1 -1
- package/es/graph/mark/graphic.js +7 -13
- package/es/graph/mark/graphic.js.map +1 -1
- package/es/graph/util/element.d.ts +2 -0
- package/es/graph/util/element.js +8 -0
- package/es/graph/util/element.js.map +1 -0
- package/es/graph/util/point.js +26 -10
- package/es/graph/util/point.js.map +1 -1
- package/es/index.d.ts +1 -8
- package/es/index.js +1 -29
- package/es/index.js.map +1 -1
- package/es/interactions/element-active.js +2 -1
- package/es/interactions/element-highlight-by-group.js +1 -2
- package/es/interactions/fish-eye.js +1 -1
- package/es/parse/event.d.ts +2 -0
- package/es/parse/event.js +7 -3
- package/es/parse/event.js.map +1 -1
- package/es/parse/option.js +2 -1
- package/es/parse/scale.js +1 -2
- package/es/parse/util.js.map +1 -1
- package/es/transforms/mark/mark-overlap.js +6 -6
- package/es/transforms/mark/mark-overlap.js.map +1 -1
- package/es/types/animate.d.ts +1 -0
- package/es/types/animate.js.map +1 -1
- package/es/types/element.d.ts +5 -1
- package/es/types/element.js.map +1 -1
- package/es/types/morph.d.ts +2 -1
- package/es/types/morph.js.map +1 -1
- package/es/types/renderer.d.ts +1 -6
- package/es/types/renderer.js.map +1 -1
- package/es/view/View.d.ts +6 -3
- package/es/view/View.js +114 -53
- package/es/view/View.js.map +1 -1
- package/es/view/animate.js +1 -2
- package/es/view/animate.js.map +1 -1
- package/es/view/constants.d.ts +0 -2
- package/es/view/constants.js +0 -4
- package/es/view/constants.js.map +1 -1
- package/es/view/events.d.ts +1 -0
- package/es/view/events.js +15 -1
- package/es/view/events.js.map +1 -1
- package/es/view/glyph.d.ts +0 -4
- package/es/view/glyph.js +0 -11
- package/es/view/glyph.js.map +1 -1
- package/es/view/grammar-record.js +2 -3
- package/es/view/grammar-record.js.map +1 -1
- package/es/view/group.js +4 -2
- package/es/view/group.js.map +1 -1
- package/es/view/mark.d.ts +0 -2
- package/es/view/mark.js +30 -32
- package/es/view/mark.js.map +1 -1
- package/package.json +9 -9
- package/cjs/graph/view-diff.d.ts +0 -8
- package/cjs/graph/view-diff.js +0 -93
- package/cjs/graph/view-diff.js.map +0 -1
- package/cjs/view/mark-animate-mixin.d.ts +0 -1
- package/cjs/view/mark-animate-mixin.js +0 -29
- package/cjs/view/mark-animate-mixin.js.map +0 -1
- package/cjs/view/view-animate-mixin.d.ts +0 -1
- package/cjs/view/view-animate-mixin.js +0 -26
- package/cjs/view/view-animate-mixin.js.map +0 -1
- package/cjs/view/view-event-mixin.d.ts +0 -1
- package/cjs/view/view-event-mixin.js +0 -92
- package/cjs/view/view-event-mixin.js.map +0 -1
- package/cjs/view/view-morph-mixin.d.ts +0 -1
- package/cjs/view/view-morph-mixin.js +0 -32
- package/cjs/view/view-morph-mixin.js.map +0 -1
- package/es/graph/view-diff.d.ts +0 -8
- package/es/graph/view-diff.js +0 -89
- package/es/graph/view-diff.js.map +0 -1
- package/es/view/mark-animate-mixin.d.ts +0 -1
- package/es/view/mark-animate-mixin.js +0 -25
- package/es/view/mark-animate-mixin.js.map +0 -1
- package/es/view/view-animate-mixin.d.ts +0 -1
- package/es/view/view-animate-mixin.js +0 -16
- package/es/view/view-animate-mixin.js.map +0 -1
- package/es/view/view-event-mixin.d.ts +0 -1
- package/es/view/view-event-mixin.js +0 -90
- package/es/view/view-event-mixin.js.map +0 -1
- package/es/view/view-morph-mixin.d.ts +0 -1
- package/es/view/view-morph-mixin.js +0 -22
- package/es/view/view-morph-mixin.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/transforms/mark/mark-overlap.ts"],"names":[],"mappings":"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","file":"mark-overlap.js","sourcesContent":["import { isNil } from '@visactor/vutils';\nimport type { IElement, MarkOverlapTransformOptions } from '../../types';\n\nconst HIDE_KEY = '_mo_hide_';\n\nfunction reset(elements: IElement[]) {\n elements.forEach(element => {\n const hide = element.getGraphicAttribute(HIDE_KEY);\n\n if (hide) {\n element.setGraphicAttribute('visible', true);\n element.setGraphicAttribute(HIDE_KEY, false);\n }\n });\n return elements;\n}\n\nfunction overlapX(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastX = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentX - lastX) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastX = currentX;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastY = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentY = element.getGraphicAttribute('y');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentY - lastY) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapXY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n const lastX = -Infinity;\n let lastY = -Infinity;\n let lastR = 0;\n let dis = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n const currentY = element.getGraphicAttribute('y');\n\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n dis = (lastX - currentX) ** 2 + (lastY - currentY) ** 2;\n if (dis < (itemDelta + lastR + r) ** 2) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\n/**\n * 针对mark的防重叠\n * @param {object} options - The parameters for this operator.\n * @param {data} [options.followMark]\n * @constructor\n */\nexport const transform = (options: MarkOverlapTransformOptions, upstreamData: IElement[]) => {\n if (!upstreamData || upstreamData.length === 0) {\n return;\n }\n let { radius } = options;\n if (isNil(radius)) {\n if (upstreamData[0].mark.markType === 'symbol') {\n radius = true;\n }\n }\n\n const { direction, delta, deltaMul = 1, groupBy } = options;\n\n const handleOverlap = (elements: IElement[]) => {\n reset(elements);\n\n const sortedElements = options.sort\n ? elements.slice().sort((a, b) => {\n return a.getGraphicAttribute('x') - b.getGraphicAttribute('x');\n })\n : elements;\n\n if (direction === 0) {\n overlapXY(sortedElements, delta, deltaMul, radius);\n } else if (direction === 1) {\n overlapX(sortedElements, delta, deltaMul, radius);\n } else {\n overlapY(sortedElements, delta, deltaMul, radius);\n }\n };\n\n if (!groupBy) {\n handleOverlap(upstreamData);\n } else {\n // 分组\n const map = upstreamData.reduce((res: { [key: string]: IElement[] }, element: IElement) => {\n const groupName = element.getDatum()[groupBy];\n\n if (res[groupName]) {\n res[groupName].push(element);\n } else {\n res[groupName] = [element];\n }\n\n return res;\n }, {});\n\n Object.keys(map).forEach(key => {\n handleOverlap(map[key]);\n });\n }\n\n return upstreamData;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/transforms/mark/mark-overlap.ts"],"names":[],"mappings":"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","file":"mark-overlap.js","sourcesContent":["import { isNil } from '@visactor/vutils';\nimport type { IElement, MarkOverlapTransformOptions } from '../../types';\nimport { MARK_OVERLAP_HIDE_KEY } from '../../graph/constants';\n\nfunction reset(elements: IElement[]) {\n elements.forEach(element => {\n const hide = element.getGraphicAttribute(MARK_OVERLAP_HIDE_KEY);\n\n if (hide) {\n element.setGraphicAttribute('visible', true);\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, false);\n }\n });\n return elements;\n}\n\nfunction overlapX(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastX = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentX - lastX) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastX = currentX;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n let lastY = -Infinity;\n let lastR = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentY = element.getGraphicAttribute('y');\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n if (Math.abs(currentY - lastY) < itemDelta + lastR + r) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\nfunction overlapXY(elements: IElement[], delta: number, deltaMul: number, useRadius: boolean) {\n if (useRadius) {\n const lastX = -Infinity;\n let lastY = -Infinity;\n let lastR = 0;\n let dis = 0;\n const useDeltaMul = isNil(delta);\n let itemDelta = delta;\n\n elements.forEach(element => {\n if (element.getGraphicAttribute('visible') === false) {\n // skip hidden points\n return;\n }\n\n const r = element.getGraphicAttribute('size') / 2;\n const currentX = element.getGraphicAttribute('x');\n const currentY = element.getGraphicAttribute('y');\n\n if (useDeltaMul) {\n itemDelta = (r + lastR) * deltaMul;\n }\n dis = (lastX - currentX) ** 2 + (lastY - currentY) ** 2;\n if (dis < (itemDelta + lastR + r) ** 2) {\n if (!element.getGraphicAttribute('forceShow')) {\n element.setGraphicAttribute(MARK_OVERLAP_HIDE_KEY, true);\n element.setGraphicAttribute('visible', false);\n }\n } else {\n lastY = currentY;\n }\n\n lastR = r;\n });\n }\n}\n\n/**\n * 针对mark的防重叠\n * @param {object} options - The parameters for this operator.\n * @param {data} [options.followMark]\n * @constructor\n */\nexport const transform = (options: MarkOverlapTransformOptions, upstreamData: IElement[]) => {\n if (!upstreamData || upstreamData.length === 0) {\n return;\n }\n let { radius } = options;\n if (isNil(radius)) {\n if (upstreamData[0].mark.markType === 'symbol') {\n radius = true;\n }\n }\n\n const { direction, delta, deltaMul = 1, groupBy } = options;\n\n const handleOverlap = (elements: IElement[]) => {\n reset(elements);\n\n const sortedElements = options.sort\n ? elements.slice().sort((a, b) => {\n return a.getGraphicAttribute('x') - b.getGraphicAttribute('x');\n })\n : elements;\n\n if (direction === 0) {\n overlapXY(sortedElements, delta, deltaMul, radius);\n } else if (direction === 1) {\n overlapX(sortedElements, delta, deltaMul, radius);\n } else {\n overlapY(sortedElements, delta, deltaMul, radius);\n }\n };\n\n if (!groupBy) {\n handleOverlap(upstreamData);\n } else {\n // 分组\n const map = upstreamData.reduce((res: { [key: string]: IElement[] }, element: IElement) => {\n const groupName = element.getDatum()[groupBy];\n\n if (res[groupName]) {\n res[groupName].push(element);\n } else {\n res[groupName] = [element];\n }\n\n return res;\n }, {});\n\n Object.keys(map).forEach(key => {\n handleOverlap(map[key]);\n });\n }\n\n return upstreamData;\n};\n"]}
|
package/cjs/types/animate.d.ts
CHANGED
package/cjs/types/animate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/animate.ts"],"names":[],"mappings":"","file":"animate.js","sourcesContent":["import type { IGraphic, ACustomAnimate, EasingType } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport type { MarkFunctionCallback, MarkFunctionType } from './mark';\nimport type { IMark } from './grammar';\nimport type { IElement } from './element';\nimport type { FunctionCallback } from './signal';\n\nexport type TypeAnimation<T extends IElement> = (\n element: T,\n options: any,\n animationParameters: IAnimationParameters\n) => { from?: { [channel: string]: any }; to?: { [channel: string]: any } };\n\nexport interface IClipAnimationOptions {\n clipDimension?: 'x' | 'y' | 'auto' | 'default';\n}\n\nexport interface IGrowCartesianAnimationOptions {\n orient?: 'positive' | 'negative';\n overall?: boolean | number;\n direction?: 'x' | 'y' | 'xy';\n}\n\nexport interface IGrowAngleAnimationOptions {\n orient?: 'clockwise' | 'anticlockwise';\n overall?: boolean | number;\n}\n\nexport interface IGrowRadiusAnimationOptions {\n orient?: 'inside' | 'outside';\n overall?: boolean | number;\n}\n\nexport interface IGrowPointsAnimationOptions {\n orient?: 'positive' | 'negative';\n}\n\nexport interface IGrowPointsOverallAnimationOptions extends IGrowPointsAnimationOptions {\n center?: IPointLike;\n}\n\nexport interface IScaleAnimationOptions {\n direction?: 'x' | 'y' | 'xy';\n}\n\nexport interface IMoveAnimationOptions {\n direction?: 'x' | 'y' | 'xy';\n orient?: 'positive' | 'negative';\n offset?: number;\n point?: { x?: number; y?: number } | FunctionCallback<{ x?: number; y?: number }>;\n}\n\nexport interface IRotateAnimationOptions {\n orient?: 'clockwise' | 'anticlockwise';\n angle?: number;\n}\n\n/** VGrammar 层提供的图元text上的图形属性,现在暂时会和VRender不一致 */\nexport interface TextItemAttributes {\n fontSize?: number;\n lineHeight?: number;\n font?: string;\n fontStyle?: string;\n fontVariant?: string;\n fontWeight?: string | number;\n lineBreak?: string;\n text?: string | string[];\n limit?: number;\n align?: string;\n baseline?: string;\n ellipsis?: string | boolean;\n dir?: string;\n}\n\n/** animation */\nexport type MarkFunctionValueType<T> = MarkFunctionCallback<T> | T;\n\nexport type IAnimationConfig = IAnimationTimeline | IAnimationTypeConfig;\n\n/**\n * state动画,暂时只支持简单配置\n */\nexport interface IStateAnimationConfig {\n duration?: number;\n easing?: EasingType;\n}\n\n/**\n * 动画 config 简化配置\n */\nexport interface IAnimationTypeConfig {\n type?: string;\n channel?: IAnimationChannelAttrs | IAnimationChannelAttributes;\n custom?: IAnimationChannelInterpolator | IAnimationCustomConstructor;\n customParameters?: MarkFunctionValueType<any>;\n easing?: EasingType;\n delay?: MarkFunctionValueType<number>;\n delayAfter?: MarkFunctionValueType<number>;\n duration?: MarkFunctionValueType<number>;\n oneByOne?: MarkFunctionValueType<boolean | number>;\n startTime?: MarkFunctionValueType<number>;\n totalTime?: MarkFunctionValueType<number>;\n /** loop: true 无限循环; loop: 正整数,表示循环的次数 */\n loop?: boolean | number;\n /** 动画 effect 配置项 */\n options?: MarkFunctionValueType<any>;\n /** 动画执行相关控制配置项 */\n controlOptions?: IAnimationControlOptions;\n}\n\n/**\n * 动画 timeline 完整配置,一条时间线内的动画单元只能串行\n * 多个timeline是可以并行的\n * 考虑到同一图元不能在多个timeline上,所以timeline不应该提供数组配置的能力\n */\nexport interface IAnimationTimeline {\n /** 为了方便动画编排,用户可以设置 id 用于识别时间线 */\n id?: string;\n /** 时间切片 */\n timeSlices: IAnimationTimeSlice | IAnimationTimeSlice[];\n /** 动画开始的相对时间,可以为负数 */\n startTime?: MarkFunctionValueType<number>;\n /** 动画时长 */\n totalTime?: MarkFunctionValueType<number>;\n /** 动画依次执行的延迟 */\n oneByOne?: MarkFunctionValueType<number | boolean>;\n /** loop: true 无限循环; loop: 正整数,表示循环的次数 */\n loop?: MarkFunctionValueType<number | boolean>;\n /** 对图元元素进行划分,和过滤类似,但是不同时间线不能同时作用在相同的元素上 */\n partitioner?: MarkFunctionCallback<boolean>;\n /** 对同一时间线上的元素进行排序 */\n sort?: (datumA: any, datumB: any, elementA: IElement, elementB: IElement, parameters: any) => number;\n /** 动画执行相关控制配置项 */\n controlOptions?: IAnimationControlOptions;\n}\n\nexport interface IAnimationTimeSlice {\n effects: IAnimationEffect | IAnimationEffect[];\n duration?: MarkFunctionValueType<number>;\n delay?: MarkFunctionValueType<number>;\n delayAfter?: MarkFunctionValueType<number>;\n}\n\nexport type IAnimationChannelFunction = (datum: any, element: IElement, parameters: IAnimationParameters) => any;\nexport type IAnimationChannelAttrs = Record<\n string,\n {\n from?: any | IAnimationChannelFunction;\n to?: any | IAnimationChannelFunction;\n }\n>;\nexport type IAnimationChannelAttributes = string[];\nexport type IAnimationChannelInterpolator = (\n ratio: number,\n from: any,\n to: any,\n nextAttributes: any,\n datum: any,\n element: IElement,\n parameters: IAnimationParameters\n) => boolean | void;\n\n// TODO: fix ACustomAnimate<any>\nexport interface IAnimationCustomConstructor {\n new (from: any, to: any, duration: number, ease: EasingType, parameters?: any): ACustomAnimate<any>;\n}\n\nexport interface IAnimationEffect {\n type?: string;\n channel?: IAnimationChannelAttrs | IAnimationChannelAttributes;\n custom?: IAnimationChannelInterpolator | IAnimationCustomConstructor;\n customParameters?: MarkFunctionValueType<any>;\n easing?: EasingType;\n /** options暂时没有处理 */\n options?: MarkFunctionValueType<any>;\n}\n\nexport interface IAnimationControlOptions {\n /** 当动画状态变更时清空动画 */\n stopWhenStateChange?: boolean;\n /** 是否立即应用动画初始状态 */\n immediatelyApply?: boolean;\n}\n\n/**\n * Animation timeline should be parsed into animation units,\n * which record all necessary configs for animator to execute animation.\n *\n * animation unit time:\n * |<--initialDelay-->| |<--loopDelay--><--Slices--><--looDelayAfter-->| |<--loopDuration-->|\n * |<-----------------loopDuration--------------->|\n */\nexport interface IAnimationUnit {\n /**\n * initial delay time before any animation loop\n */\n initialDelay: number;\n /**\n * total time for one animation loop\n */\n loopDuration: number;\n /**\n * delay time before time slices\n */\n loopDelay: number;\n /**\n * delay time after time slices\n */\n loopDelayAfter: number;\n /**\n * animating time in one animation loop\n */\n loopAnimateDuration: number;\n loopCount: number;\n totalTime: number;\n timeSlices: IAnimationTimeSlice[];\n}\n\nexport interface IAnimationRecord {\n start: IGraphic;\n end: IGraphic;\n changes: any[];\n}\n\nexport interface IAnimationParameters {\n width: number;\n height: number;\n mark: IMark;\n group: IMark | null;\n elementIndex: number;\n elementCount: number;\n view: any;\n}\n\nexport interface IParsedAnimationConfig {\n state: string;\n timeline: IAnimationTimeline;\n originConfig: IAnimationConfig;\n id: string;\n}\n\nexport interface IParsedAnimationAttrs {\n from?: any;\n to?: any;\n custom?: IAnimationChannelInterpolator | IAnimationCustomConstructor;\n customParameters?: any;\n}\n\n// animate structure\n\nexport interface IAnimatorOptions {\n state: string;\n timeline: IAnimationTimeline;\n id: string;\n}\n\nexport interface IAnimator {\n id: number;\n element: IElement;\n animationOptions: IAnimatorOptions;\n isAnimating: boolean;\n\n /** execute animation */\n animate: (animationParameters: IAnimationParameters, parameters: any) => this;\n /** set animation callback */\n callback: (callbackFunction: (...args: any[]) => void) => this;\n\n // animation control\n stop: (stopState?: 'start' | 'end', invokeCallback?: boolean) => this;\n pause: () => this;\n resume: () => this;\n\n /** set additional initial animation delay */\n startAt: (startTime: number) => this;\n /** get total animation execution time */\n getTotalAnimationTime: () => number;\n\n getEndAttributes: () => Record<string, any>;\n}\n\nexport interface IAnimateArranger {\n // animation control api\n parallel: (arranger: IAnimateArranger) => this;\n after: (arranger: IAnimateArranger) => this;\n\n // internal properties\n afterArranger: IAnimateArranger;\n parallelArrangers: IAnimateArranger[];\n animators: IAnimator[];\n totalTime: number;\n startTime: number;\n endTime: number;\n arrangeTime: () => void;\n}\n\nexport interface IBaseAnimate {\n // animation control\n stop: () => this;\n pause: () => this;\n resume: () => this;\n\n // internal animation process api\n animate: () => this;\n enable: () => this;\n disable: () => this;\n enableAnimationState: (state: string | string[]) => this;\n disableAnimationState: (state: string | string[]) => this;\n isAnimating: () => boolean;\n\n release: () => void;\n}\n\nexport interface IViewAnimate extends IBaseAnimate {\n animateAddition: (mark: IMark) => this;\n}\n\nexport interface IAnimate extends IBaseAnimate {\n mark: IMark;\n\n // additional animation control\n run: (config: IAnimationConfig | IAnimationConfig[]) => IAnimateArranger;\n runAnimationByState: (animationState: string) => IAnimateArranger;\n stopAnimationByState: (animationState: string) => this;\n pauseAnimationByState: (animationState: string) => this;\n resumeAnimationByState: (animationState: string) => this;\n reverse: () => this;\n restart: () => this;\n record: () => this;\n recordEnd: () => this;\n\n // internal animation process api\n getAnimationConfigs: (animationState: string) => IParsedAnimationConfig[];\n updateConfig: (config: Record<string, IAnimationConfig | IAnimationConfig[]>) => void;\n updateState: (state: MarkFunctionType<string> | null) => void;\n isElementAnimating: (element: IElement) => boolean;\n getAnimatorCount: () => number;\n getElementAnimators: (element: IElement | IElement[], animationState?: string) => IAnimator[];\n release: () => void;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/animate.ts"],"names":[],"mappings":"","file":"animate.js","sourcesContent":["import type { IGraphic, ACustomAnimate, EasingType } from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\nimport type { MarkFunctionCallback, MarkFunctionType } from './mark';\nimport type { IMark } from './grammar';\nimport type { IElement } from './element';\nimport type { FunctionCallback } from './signal';\n\nexport type TypeAnimation<T extends IElement> = (\n element: T,\n options: any,\n animationParameters: IAnimationParameters\n) => { from?: { [channel: string]: any }; to?: { [channel: string]: any } };\n\nexport interface IClipAnimationOptions {\n clipDimension?: 'x' | 'y' | 'auto' | 'default';\n}\n\nexport interface IGrowCartesianAnimationOptions {\n orient?: 'positive' | 'negative';\n overall?: boolean | number;\n direction?: 'x' | 'y' | 'xy';\n}\n\nexport interface IGrowAngleAnimationOptions {\n orient?: 'clockwise' | 'anticlockwise';\n overall?: boolean | number;\n}\n\nexport interface IGrowRadiusAnimationOptions {\n orient?: 'inside' | 'outside';\n overall?: boolean | number;\n}\n\nexport interface IGrowPointsAnimationOptions {\n orient?: 'positive' | 'negative';\n}\n\nexport interface IGrowPointsOverallAnimationOptions extends IGrowPointsAnimationOptions {\n center?: IPointLike;\n}\n\nexport interface IScaleAnimationOptions {\n direction?: 'x' | 'y' | 'xy';\n}\n\nexport interface IMoveAnimationOptions {\n direction?: 'x' | 'y' | 'xy';\n orient?: 'positive' | 'negative';\n offset?: number;\n point?: { x?: number; y?: number } | FunctionCallback<{ x?: number; y?: number }>;\n excludeChannels?: string[];\n}\n\nexport interface IRotateAnimationOptions {\n orient?: 'clockwise' | 'anticlockwise';\n angle?: number;\n}\n\n/** VGrammar 层提供的图元text上的图形属性,现在暂时会和VRender不一致 */\nexport interface TextItemAttributes {\n fontSize?: number;\n lineHeight?: number;\n font?: string;\n fontStyle?: string;\n fontVariant?: string;\n fontWeight?: string | number;\n lineBreak?: string;\n text?: string | string[];\n limit?: number;\n align?: string;\n baseline?: string;\n ellipsis?: string | boolean;\n dir?: string;\n}\n\n/** animation */\nexport type MarkFunctionValueType<T> = MarkFunctionCallback<T> | T;\n\nexport type IAnimationConfig = IAnimationTimeline | IAnimationTypeConfig;\n\n/**\n * state动画,暂时只支持简单配置\n */\nexport interface IStateAnimationConfig {\n duration?: number;\n easing?: EasingType;\n}\n\n/**\n * 动画 config 简化配置\n */\nexport interface IAnimationTypeConfig {\n type?: string;\n channel?: IAnimationChannelAttrs | IAnimationChannelAttributes;\n custom?: IAnimationChannelInterpolator | IAnimationCustomConstructor;\n customParameters?: MarkFunctionValueType<any>;\n easing?: EasingType;\n delay?: MarkFunctionValueType<number>;\n delayAfter?: MarkFunctionValueType<number>;\n duration?: MarkFunctionValueType<number>;\n oneByOne?: MarkFunctionValueType<boolean | number>;\n startTime?: MarkFunctionValueType<number>;\n totalTime?: MarkFunctionValueType<number>;\n /** loop: true 无限循环; loop: 正整数,表示循环的次数 */\n loop?: boolean | number;\n /** 动画 effect 配置项 */\n options?: MarkFunctionValueType<any>;\n /** 动画执行相关控制配置项 */\n controlOptions?: IAnimationControlOptions;\n}\n\n/**\n * 动画 timeline 完整配置,一条时间线内的动画单元只能串行\n * 多个timeline是可以并行的\n * 考虑到同一图元不能在多个timeline上,所以timeline不应该提供数组配置的能力\n */\nexport interface IAnimationTimeline {\n /** 为了方便动画编排,用户可以设置 id 用于识别时间线 */\n id?: string;\n /** 时间切片 */\n timeSlices: IAnimationTimeSlice | IAnimationTimeSlice[];\n /** 动画开始的相对时间,可以为负数 */\n startTime?: MarkFunctionValueType<number>;\n /** 动画时长 */\n totalTime?: MarkFunctionValueType<number>;\n /** 动画依次执行的延迟 */\n oneByOne?: MarkFunctionValueType<number | boolean>;\n /** loop: true 无限循环; loop: 正整数,表示循环的次数 */\n loop?: MarkFunctionValueType<number | boolean>;\n /** 对图元元素进行划分,和过滤类似,但是不同时间线不能同时作用在相同的元素上 */\n partitioner?: MarkFunctionCallback<boolean>;\n /** 对同一时间线上的元素进行排序 */\n sort?: (datumA: any, datumB: any, elementA: IElement, elementB: IElement, parameters: any) => number;\n /** 动画执行相关控制配置项 */\n controlOptions?: IAnimationControlOptions;\n}\n\nexport interface IAnimationTimeSlice {\n effects: IAnimationEffect | IAnimationEffect[];\n duration?: MarkFunctionValueType<number>;\n delay?: MarkFunctionValueType<number>;\n delayAfter?: MarkFunctionValueType<number>;\n}\n\nexport type IAnimationChannelFunction = (datum: any, element: IElement, parameters: IAnimationParameters) => any;\nexport type IAnimationChannelAttrs = Record<\n string,\n {\n from?: any | IAnimationChannelFunction;\n to?: any | IAnimationChannelFunction;\n }\n>;\nexport type IAnimationChannelAttributes = string[];\nexport type IAnimationChannelInterpolator = (\n ratio: number,\n from: any,\n to: any,\n nextAttributes: any,\n datum: any,\n element: IElement,\n parameters: IAnimationParameters\n) => boolean | void;\n\n// TODO: fix ACustomAnimate<any>\nexport interface IAnimationCustomConstructor {\n new (from: any, to: any, duration: number, ease: EasingType, parameters?: any): ACustomAnimate<any>;\n}\n\nexport interface IAnimationEffect {\n type?: string;\n channel?: IAnimationChannelAttrs | IAnimationChannelAttributes;\n custom?: IAnimationChannelInterpolator | IAnimationCustomConstructor;\n customParameters?: MarkFunctionValueType<any>;\n easing?: EasingType;\n /** options暂时没有处理 */\n options?: MarkFunctionValueType<any>;\n}\n\nexport interface IAnimationControlOptions {\n /** 当动画状态变更时清空动画 */\n stopWhenStateChange?: boolean;\n /** 是否立即应用动画初始状态 */\n immediatelyApply?: boolean;\n}\n\n/**\n * Animation timeline should be parsed into animation units,\n * which record all necessary configs for animator to execute animation.\n *\n * animation unit time:\n * |<--initialDelay-->| |<--loopDelay--><--Slices--><--looDelayAfter-->| |<--loopDuration-->|\n * |<-----------------loopDuration--------------->|\n */\nexport interface IAnimationUnit {\n /**\n * initial delay time before any animation loop\n */\n initialDelay: number;\n /**\n * total time for one animation loop\n */\n loopDuration: number;\n /**\n * delay time before time slices\n */\n loopDelay: number;\n /**\n * delay time after time slices\n */\n loopDelayAfter: number;\n /**\n * animating time in one animation loop\n */\n loopAnimateDuration: number;\n loopCount: number;\n totalTime: number;\n timeSlices: IAnimationTimeSlice[];\n}\n\nexport interface IAnimationRecord {\n start: IGraphic;\n end: IGraphic;\n changes: any[];\n}\n\nexport interface IAnimationParameters {\n width: number;\n height: number;\n mark: IMark;\n group: IMark | null;\n elementIndex: number;\n elementCount: number;\n view: any;\n}\n\nexport interface IParsedAnimationConfig {\n state: string;\n timeline: IAnimationTimeline;\n originConfig: IAnimationConfig;\n id: string;\n}\n\nexport interface IParsedAnimationAttrs {\n from?: any;\n to?: any;\n custom?: IAnimationChannelInterpolator | IAnimationCustomConstructor;\n customParameters?: any;\n}\n\n// animate structure\n\nexport interface IAnimatorOptions {\n state: string;\n timeline: IAnimationTimeline;\n id: string;\n}\n\nexport interface IAnimator {\n id: number;\n element: IElement;\n animationOptions: IAnimatorOptions;\n isAnimating: boolean;\n\n /** execute animation */\n animate: (animationParameters: IAnimationParameters, parameters: any) => this;\n /** set animation callback */\n callback: (callbackFunction: (...args: any[]) => void) => this;\n\n // animation control\n stop: (stopState?: 'start' | 'end', invokeCallback?: boolean) => this;\n pause: () => this;\n resume: () => this;\n\n /** set additional initial animation delay */\n startAt: (startTime: number) => this;\n /** get total animation execution time */\n getTotalAnimationTime: () => number;\n\n getEndAttributes: () => Record<string, any>;\n}\n\nexport interface IAnimateArranger {\n // animation control api\n parallel: (arranger: IAnimateArranger) => this;\n after: (arranger: IAnimateArranger) => this;\n\n // internal properties\n afterArranger: IAnimateArranger;\n parallelArrangers: IAnimateArranger[];\n animators: IAnimator[];\n totalTime: number;\n startTime: number;\n endTime: number;\n arrangeTime: () => void;\n}\n\nexport interface IBaseAnimate {\n // animation control\n stop: () => this;\n pause: () => this;\n resume: () => this;\n\n // internal animation process api\n animate: () => this;\n enable: () => this;\n disable: () => this;\n enableAnimationState: (state: string | string[]) => this;\n disableAnimationState: (state: string | string[]) => this;\n isAnimating: () => boolean;\n\n release: () => void;\n}\n\nexport interface IViewAnimate extends IBaseAnimate {\n animateAddition: (mark: IMark) => this;\n}\n\nexport interface IAnimate extends IBaseAnimate {\n mark: IMark;\n\n // additional animation control\n run: (config: IAnimationConfig | IAnimationConfig[]) => IAnimateArranger;\n runAnimationByState: (animationState: string) => IAnimateArranger;\n stopAnimationByState: (animationState: string) => this;\n pauseAnimationByState: (animationState: string) => this;\n resumeAnimationByState: (animationState: string) => this;\n reverse: () => this;\n restart: () => this;\n record: () => this;\n recordEnd: () => this;\n\n // internal animation process api\n getAnimationConfigs: (animationState: string) => IParsedAnimationConfig[];\n updateConfig: (config: Record<string, IAnimationConfig | IAnimationConfig[]>) => void;\n updateState: (state: MarkFunctionType<string> | null) => void;\n isElementAnimating: (element: IElement) => boolean;\n getAnimatorCount: () => number;\n getElementAnimators: (element: IElement | IElement[], animationState?: string) => IAnimator[];\n release: () => void;\n}\n"]}
|
package/cjs/types/element.d.ts
CHANGED
|
@@ -69,7 +69,7 @@ export interface IElement {
|
|
|
69
69
|
setItemAttributes: (attributes: {
|
|
70
70
|
[channel: string]: any;
|
|
71
71
|
} | any[]) => void;
|
|
72
|
-
updateData: (groupKey: string, data: any[], keyGenerator: MarkKeySpec) => void;
|
|
72
|
+
updateData: (groupKey: string, data: any[], keyGenerator: MarkKeySpec, view: any) => void;
|
|
73
73
|
state: (markState: MarkFunctionType<string | string[]>, parameters?: any) => void;
|
|
74
74
|
encodeItems: (items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered?: boolean, parameters?: any) => void;
|
|
75
75
|
encodeGraphic: (attributes?: any) => void;
|
|
@@ -85,6 +85,10 @@ export interface IElement {
|
|
|
85
85
|
getNextGraphicAttributes: () => {
|
|
86
86
|
[key: string]: any;
|
|
87
87
|
};
|
|
88
|
+
getFinalAnimationAttribute: (channel: string) => any;
|
|
89
|
+
getFinalAnimationAttributes: () => {
|
|
90
|
+
[key: string]: any;
|
|
91
|
+
};
|
|
88
92
|
clearChangedGraphicAttributes: () => void;
|
|
89
93
|
clearGraphicAttributes: () => void;
|
|
90
94
|
getStates: () => string[];
|
package/cjs/types/element.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/element.ts"],"names":[],"mappings":"","file":"element.js","sourcesContent":["import type {\n IArc,\n IArc3d,\n IArea,\n ICircle,\n IGlyph,\n IGraphic,\n IGroup,\n IImage,\n ILine,\n IPath,\n IPolygon,\n IPyramid3d,\n IRect,\n IRect3d,\n IRichText,\n ISymbol,\n IText\n} from '@visactor/vrender-core';\nimport type { DiffState } from '../graph/enums';\nimport type { IMark, IGlyphMark } from './grammar';\nimport type {\n BaseEncodeSpec,\n BaseSingleEncodeSpec,\n IMarkConfig,\n MarkFunctionType,\n MarkKeySpec,\n MarkType\n} from './mark';\n\nexport interface ElementGraphicMap {\n circle: ICircle;\n arc: IArc;\n area: IArea;\n image: IImage;\n line: ILine;\n path: IPath;\n rule: ILine;\n shape: IPath;\n symbol: ISymbol;\n text: IText;\n richtext: IRichText;\n polygon: IPolygon;\n cell: ISymbol;\n interval: IGraphic;\n rect: IRect;\n rect3d: IRect3d;\n arc3d: IArc3d;\n pyramid3d: IPyramid3d;\n group: IGroup;\n glyph: IGlyph;\n linkPath: IGlyph;\n treePath: IGlyph;\n wave: IGlyph;\n ripplePoint: IGlyph;\n barBoxplot: IGlyph;\n boxPlot: IGlyph;\n component: IGroup;\n axis: IGroup;\n legend: IGroup;\n corsshair: IGroup;\n slider: IGroup;\n datazoom: IGroup;\n label: IGroup;\n player: IGroup;\n}\n\nexport type GetGraphicByType<T> = T extends keyof ElementGraphicMap ? ElementGraphicMap[T] : IGraphic;\n\n/**\n * 保存graphicItem状态\n */\nexport interface MarkElementItem {\n /** 唯一key */\n key: string;\n /** 原始数据 */\n datum: any;\n /** VGrammar view */\n view: any;\n /** 当前渲染帧下graphicItem对应的最新属性 */\n nextAttrs?: any;\n /** 是否初始化过,用于解决collection mark对应的item,可能跳过enter状态的问题 */\n // hasEntered: boolean;\n}\nexport interface IElement {\n mark: IMark;\n isReserved: boolean;\n diffState: DiffState;\n key: string;\n groupKey?: string;\n data?: any[];\n /**\n * 不推荐使用,但是collection图元暂时可能回涉及到相关修改\n */\n items: MarkElementItem[];\n\n initGraphicItem: (attrs?: any) => void;\n updateGraphicItem: () => void;\n\n getDatum: () => any;\n getBounds: () => any;\n getGraphicItem: () => IGraphic;\n removeGraphicItem: () => void;\n resetGraphicItem: () => void;\n\n /**\n * 获取 graphic 视觉通道属性\n * @param channel 视觉通道\n * @param prev 是否从之前的 graphic 属性上获取,默认为 false\n * @returns 视觉通道值\n */\n getGraphicAttribute: (channel: string, prev?: boolean) => any;\n /**\n * 设置 graphic 视觉通道属性\n * @param channel 视觉通道\n * @param value 视觉通道属性\n * @param final 是否更新 graphic 最终变更的视觉通道结果,默认为 false\n */\n setGraphicAttribute: (channel: string, value: any, final?: boolean) => void;\n /**\n * 设置一系列 graphic 视觉通道属性\n * @param attributes 视觉通道键值对\n * @param final 是否更新 graphic 最终变更的视觉通道结果,默认为 false\n */\n setGraphicAttributes: (attributes: { [channel: string]: any }, final?: boolean) => void;\n\n /**\n * 【慎重使用】获取 VGrammar 自身的视觉通道属性\n * 只有在 'afterEncodeItems' 时机的mark transform中才能调用\n */\n getItemAttribute: (channel?: string) => any;\n /**\n * 【慎重使用】设置 VGrammar 自身的视觉通道\n * 只有在 'afterEncodeItems' 时机的mark transform中才能调用\n * @param attributes\n * @returns\n */\n setItemAttributes: (attributes: { [channel: string]: any } | any[]) => void;\n\n // element 执行流程相关接口\n updateData: (groupKey: string, data: any[], keyGenerator: MarkKeySpec) => void;\n state: (markState: MarkFunctionType<string | string[]>, parameters?: any) => void;\n encodeItems: (items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered?: boolean, parameters?: any) => void;\n encodeGraphic: (attributes?: any) => void;\n transformElementItems: (items: MarkElementItem[], markType: MarkType, computePoints?: boolean) => Record<string, any>;\n remove: () => void;\n release: () => void;\n\n // 动画相关接口\n\n getFinalGraphicAttributes: () => { [key: string]: any };\n getPrevGraphicAttributes: () => { [key: string]: any };\n getNextGraphicAttributes: () => { [key: string]: any };\n clearChangedGraphicAttributes: () => void;\n clearGraphicAttributes: () => void;\n\n // state相关接口\n getStates: () => string[];\n hasState: (state: string) => boolean;\n clearStates: (noAnimation?: boolean) => void;\n addState: (state: string | string[], attrs?: any) => boolean;\n removeState: (state: string | string[]) => boolean;\n useStates: (states: string[], noAnimation?: boolean) => boolean;\n updateStates: (states: Record<string, boolean | BaseSingleEncodeSpec>) => any;\n}\n\nexport interface IGlyphElement<P = any> extends IElement {\n mark: IGlyphMark;\n\n getGlyphGraphicItems: () => { [markName: string]: any };\n\n getGraphicAttribute: (channel: string, prev?: boolean, markName?: any) => any;\n setGraphicAttribute: (channel: string, value: any, final?: boolean, markName?: any) => void;\n setGraphicAttributes: (attributes: { [channel: string]: any }, final?: boolean, markName?: any) => void;\n\n getFinalGraphicAttributes: (markName?: string) => { [key: string]: any };\n getPrevGraphicAttributes: (markName?: string) => { [key: string]: any };\n getNextGraphicAttributes: (markName?: string) => { [key: string]: any };\n\n encodeCustom: (nextAttrs?: any) => { [markName: string]: any };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/element.ts"],"names":[],"mappings":"","file":"element.js","sourcesContent":["import type {\n IArc,\n IArc3d,\n IArea,\n ICircle,\n IGlyph,\n IGraphic,\n IGroup,\n IImage,\n ILine,\n IPath,\n IPolygon,\n IPyramid3d,\n IRect,\n IRect3d,\n IRichText,\n ISymbol,\n IText\n} from '@visactor/vrender-core';\nimport type { DiffState } from '../graph/enums';\nimport type { IMark, IGlyphMark } from './grammar';\nimport type {\n BaseEncodeSpec,\n BaseSingleEncodeSpec,\n IMarkConfig,\n MarkFunctionType,\n MarkKeySpec,\n MarkType\n} from './mark';\n\nexport interface ElementGraphicMap {\n circle: ICircle;\n arc: IArc;\n area: IArea;\n image: IImage;\n line: ILine;\n path: IPath;\n rule: ILine;\n shape: IPath;\n symbol: ISymbol;\n text: IText;\n richtext: IRichText;\n polygon: IPolygon;\n cell: ISymbol;\n interval: IGraphic;\n rect: IRect;\n rect3d: IRect3d;\n arc3d: IArc3d;\n pyramid3d: IPyramid3d;\n group: IGroup;\n glyph: IGlyph;\n linkPath: IGlyph;\n treePath: IGlyph;\n wave: IGlyph;\n ripplePoint: IGlyph;\n barBoxplot: IGlyph;\n boxPlot: IGlyph;\n component: IGroup;\n axis: IGroup;\n legend: IGroup;\n corsshair: IGroup;\n slider: IGroup;\n datazoom: IGroup;\n label: IGroup;\n player: IGroup;\n}\n\nexport type GetGraphicByType<T> = T extends keyof ElementGraphicMap ? ElementGraphicMap[T] : IGraphic;\n\n/**\n * 保存graphicItem状态\n */\nexport interface MarkElementItem {\n /** 唯一key */\n key: string;\n /** 原始数据 */\n datum: any;\n /** VGrammar view */\n view: any;\n /** 当前渲染帧下graphicItem对应的最新属性 */\n nextAttrs?: any;\n /** 是否初始化过,用于解决collection mark对应的item,可能跳过enter状态的问题 */\n // hasEntered: boolean;\n}\nexport interface IElement {\n mark: IMark;\n isReserved: boolean;\n diffState: DiffState;\n key: string;\n groupKey?: string;\n data?: any[];\n /**\n * 不推荐使用,但是collection图元暂时可能回涉及到相关修改\n */\n items: MarkElementItem[];\n\n initGraphicItem: (attrs?: any) => void;\n updateGraphicItem: () => void;\n\n getDatum: () => any;\n getBounds: () => any;\n getGraphicItem: () => IGraphic;\n removeGraphicItem: () => void;\n resetGraphicItem: () => void;\n\n /**\n * 获取 graphic 视觉通道属性\n * @param channel 视觉通道\n * @param prev 是否从之前的 graphic 属性上获取,默认为 false\n * @returns 视觉通道值\n */\n getGraphicAttribute: (channel: string, prev?: boolean) => any;\n /**\n * 设置 graphic 视觉通道属性\n * @param channel 视觉通道\n * @param value 视觉通道属性\n * @param final 是否更新 graphic 最终变更的视觉通道结果,默认为 false\n */\n setGraphicAttribute: (channel: string, value: any, final?: boolean) => void;\n /**\n * 设置一系列 graphic 视觉通道属性\n * @param attributes 视觉通道键值对\n * @param final 是否更新 graphic 最终变更的视觉通道结果,默认为 false\n */\n setGraphicAttributes: (attributes: { [channel: string]: any }, final?: boolean) => void;\n\n /**\n * 【慎重使用】获取 VGrammar 自身的视觉通道属性\n * 只有在 'afterEncodeItems' 时机的mark transform中才能调用\n */\n getItemAttribute: (channel?: string) => any;\n /**\n * 【慎重使用】设置 VGrammar 自身的视觉通道\n * 只有在 'afterEncodeItems' 时机的mark transform中才能调用\n * @param attributes\n * @returns\n */\n setItemAttributes: (attributes: { [channel: string]: any } | any[]) => void;\n\n // element 执行流程相关接口\n updateData: (groupKey: string, data: any[], keyGenerator: MarkKeySpec, view: any) => void;\n state: (markState: MarkFunctionType<string | string[]>, parameters?: any) => void;\n encodeItems: (items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered?: boolean, parameters?: any) => void;\n encodeGraphic: (attributes?: any) => void;\n transformElementItems: (items: MarkElementItem[], markType: MarkType, computePoints?: boolean) => Record<string, any>;\n remove: () => void;\n release: () => void;\n\n // 动画相关接口\n\n getFinalGraphicAttributes: () => { [key: string]: any };\n getPrevGraphicAttributes: () => { [key: string]: any };\n getNextGraphicAttributes: () => { [key: string]: any };\n getFinalAnimationAttribute: (channel: string) => any;\n getFinalAnimationAttributes: () => { [key: string]: any };\n clearChangedGraphicAttributes: () => void;\n clearGraphicAttributes: () => void;\n\n // state相关接口\n getStates: () => string[];\n hasState: (state: string) => boolean;\n clearStates: (noAnimation?: boolean) => void;\n addState: (state: string | string[], attrs?: any) => boolean;\n removeState: (state: string | string[]) => boolean;\n useStates: (states: string[], noAnimation?: boolean) => boolean;\n updateStates: (states: Record<string, boolean | BaseSingleEncodeSpec>) => any;\n}\n\nexport interface IGlyphElement<P = any> extends IElement {\n mark: IGlyphMark;\n\n getGlyphGraphicItems: () => { [markName: string]: any };\n\n getGraphicAttribute: (channel: string, prev?: boolean, markName?: any) => any;\n setGraphicAttribute: (channel: string, value: any, final?: boolean, markName?: any) => void;\n setGraphicAttributes: (attributes: { [channel: string]: any }, final?: boolean, markName?: any) => void;\n\n getFinalGraphicAttributes: (markName?: string) => { [key: string]: any };\n getPrevGraphicAttributes: (markName?: string) => { [key: string]: any };\n getNextGraphicAttributes: (markName?: string) => { [key: string]: any };\n\n encodeCustom: (nextAttrs?: any) => { [markName: string]: any };\n}\n"]}
|
package/cjs/types/morph.d.ts
CHANGED
|
@@ -22,7 +22,8 @@ export interface IMorphAnimationConfig {
|
|
|
22
22
|
oneByOne?: MorphFunctionValueType<boolean | number>;
|
|
23
23
|
splitPath?: MorphFunctionValueType<'clone' | Nil>;
|
|
24
24
|
}
|
|
25
|
-
export interface
|
|
25
|
+
export interface IMorph {
|
|
26
26
|
diffGrammar: <U extends IGrammarBase>(prevGrammars: U[], nextGrammars: U[]) => DiffResult<U, U>;
|
|
27
27
|
diffMark: (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => DiffResult<IMark[], IMark[]>;
|
|
28
|
+
morph: (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => void;
|
|
28
29
|
}
|
package/cjs/types/morph.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/morph.ts"],"names":[],"mappings":"","file":"morph.js","sourcesContent":["import type { EasingType } from '@visactor/vrender-core';\nimport type { DiffResult, Nil } from './base';\nimport type { IElement } from './element';\nimport type { IGrammarBase, IMark } from './grammar';\nimport type { GenericFunctionType } from './signal';\nimport type { IRunningConfig } from './view';\n\nexport type MorphData = { prev: any[]; next: any[] };\nexport type MorphElements = { prev: IElement[]; next: IElement[] };\n\nexport type MorphFunctionCallback<T> = (datum: MorphData, element: MorphElements, parameters: any) => T;\n\nexport type MorphFunctionType<T> = GenericFunctionType<MorphFunctionCallback<T>, T>;\n\nexport type MorphFunctionValueType<T> = MorphFunctionType<T> | T;\n\nexport interface IMorphAnimationConfig {\n easing?: EasingType;\n delay?: MorphFunctionValueType<number>;\n duration?: MorphFunctionValueType<number>;\n oneByOne?: MorphFunctionValueType<boolean | number>;\n splitPath?: MorphFunctionValueType<'clone' | Nil>;\n}\n\nexport interface
|
|
1
|
+
{"version":3,"sources":["../src/types/morph.ts"],"names":[],"mappings":"","file":"morph.js","sourcesContent":["import type { EasingType } from '@visactor/vrender-core';\nimport type { DiffResult, Nil } from './base';\nimport type { IElement } from './element';\nimport type { IGrammarBase, IMark } from './grammar';\nimport type { GenericFunctionType } from './signal';\nimport type { IRunningConfig } from './view';\n\nexport type MorphData = { prev: any[]; next: any[] };\nexport type MorphElements = { prev: IElement[]; next: IElement[] };\n\nexport type MorphFunctionCallback<T> = (datum: MorphData, element: MorphElements, parameters: any) => T;\n\nexport type MorphFunctionType<T> = GenericFunctionType<MorphFunctionCallback<T>, T>;\n\nexport type MorphFunctionValueType<T> = MorphFunctionType<T> | T;\n\nexport interface IMorphAnimationConfig {\n easing?: EasingType;\n delay?: MorphFunctionValueType<number>;\n duration?: MorphFunctionValueType<number>;\n oneByOne?: MorphFunctionValueType<boolean | number>;\n splitPath?: MorphFunctionValueType<'clone' | Nil>;\n}\n\nexport interface IMorph {\n diffGrammar: <U extends IGrammarBase>(prevGrammars: U[], nextGrammars: U[]) => DiffResult<U, U>;\n diffMark: (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => DiffResult<IMark[], IMark[]>;\n\n morph: (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => void;\n}\n"]}
|
package/cjs/types/renderer.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IBoundsLike } from '@visactor/vutils';
|
|
2
|
-
import type { IColor,
|
|
2
|
+
import type { IColor, Stage } from '@visactor/vrender-core';
|
|
3
3
|
import type { IViewEventConfig, IViewOptions } from './view';
|
|
4
4
|
export interface IRenderer {
|
|
5
5
|
initialize: (width: number, height: number, options: IViewOptions, eventConfig: IViewEventConfig) => this;
|
|
@@ -18,8 +18,3 @@ export interface IRenderer {
|
|
|
18
18
|
toCanvas: () => HTMLCanvasElement;
|
|
19
19
|
release: () => void;
|
|
20
20
|
}
|
|
21
|
-
export interface IStageEventPlugin<T> {
|
|
22
|
-
new (taget: IEventTarget, cfg?: T): {
|
|
23
|
-
release: () => void;
|
|
24
|
-
};
|
|
25
|
-
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/renderer.ts"],"names":[],"mappings":"","file":"renderer.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport type { IColor,
|
|
1
|
+
{"version":3,"sources":["../src/types/renderer.ts"],"names":[],"mappings":"","file":"renderer.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport type { IColor, Stage } from '@visactor/vrender-core';\nimport type { IViewEventConfig, IViewOptions } from './view';\n\nexport interface IRenderer {\n initialize: (width: number, height: number, options: IViewOptions, eventConfig: IViewEventConfig) => this;\n\n render: (immediately?: boolean) => this;\n renderNextFrame: () => this;\n resize: (width: number, height: number) => this;\n shouldResize: (width: number, height: number) => boolean;\n combineIncrementalLayers: () => this;\n preventRender: (tag: boolean) => void;\n\n setDpr: (resolution: number, redraw: boolean) => this;\n background: (color: IColor) => this;\n setViewBox: (viewBox: IBoundsLike, rerender: boolean) => this;\n\n stage: () => Stage;\n canvas: () => HTMLCanvasElement;\n context: () => CanvasRenderingContext2D;\n\n toCanvas: () => HTMLCanvasElement;\n // toImageData: () => Promise<ImageData | undefined>;\n\n release: () => void;\n}\n"]}
|
package/cjs/view/View.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { IBounds, ILogger } from '@visactor/vutils';
|
|
|
2
2
|
import { EventEmitter } from '@visactor/vutils';
|
|
3
3
|
import type { IColor } from '@visactor/vrender-core';
|
|
4
4
|
import type { CoordinateType } from '@visactor/vgrammar-coordinate';
|
|
5
|
-
import type { IData, ISignal, ViewSpec, IView, IViewOptions, IViewThemeConfig, Hooks, IMark, MarkType, GrammarScaleType, SignalFunctionType, IScale, IGrammarBase, IGroupMark, IGlyphMark, ICoordinate, BaseEventHandler, IRecordedGrammars, IComponent, IRunningConfig, IViewAnimate, ITheme, InteractionSpec, IInteraction } from '../types/';
|
|
5
|
+
import type { IData, ISignal, ViewSpec, IView, IViewOptions, IViewThemeConfig, Hooks, IMark, EventSpec, MarkType, GrammarScaleType, SignalFunctionType, IScale, IGrammarBase, IGroupMark, IGlyphMark, ICoordinate, BaseEventHandler, IRecordedGrammars, IComponent, IRunningConfig, IViewAnimate, ITheme, InteractionSpec, IInteraction } from '../types/';
|
|
6
6
|
import type { IRenderer } from '../types/renderer';
|
|
7
7
|
import { LayoutState } from '../graph/enums';
|
|
8
8
|
import type { IAxis, IDatazoom, IGrid, ILabel, ILegend, IPlayer, IScrollbar, ISlider, ITitle } from '../types/component';
|
|
@@ -18,7 +18,8 @@ export default class View extends EventEmitter implements IView {
|
|
|
18
18
|
private _config;
|
|
19
19
|
private _options;
|
|
20
20
|
private _cachedGrammars;
|
|
21
|
-
private
|
|
21
|
+
private _willMorphMarks;
|
|
22
|
+
private _morph;
|
|
22
23
|
private _eventConfig;
|
|
23
24
|
private _eventListeners;
|
|
24
25
|
private _theme;
|
|
@@ -27,6 +28,7 @@ export default class View extends EventEmitter implements IView {
|
|
|
27
28
|
private _layoutState?;
|
|
28
29
|
private _layoutMarks?;
|
|
29
30
|
private _background?;
|
|
31
|
+
private _eventCache;
|
|
30
32
|
private _progressiveMarks?;
|
|
31
33
|
private _progressiveRafId?;
|
|
32
34
|
private _observer;
|
|
@@ -120,10 +122,11 @@ export default class View extends EventEmitter implements IView {
|
|
|
120
122
|
private _onResize;
|
|
121
123
|
resize(width: number, height: number, render?: boolean): this;
|
|
122
124
|
private _resizeRenderer;
|
|
125
|
+
private bindEvents;
|
|
126
|
+
event(eventSpec: EventSpec): void;
|
|
123
127
|
interaction(type: string, spec: Partial<InteractionSpec>): IInteraction<any>;
|
|
124
128
|
removeInteraction(type: string | IInteraction, id?: string): this;
|
|
125
129
|
removeAllInteractions(): this;
|
|
126
|
-
initializeEventConfig(config: any): any;
|
|
127
130
|
private initEvent;
|
|
128
131
|
private releaseStageEvent;
|
|
129
132
|
private delegateEvent;
|
package/cjs/view/View.js
CHANGED
|
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
10
10
|
value: !0
|
|
11
11
|
});
|
|
12
12
|
|
|
13
|
-
const vutils_1 = require("@visactor/vutils"), vrender_core_1 = require("@visactor/vrender-core"), data_1 = require("./data"), dataflow_1 = __importDefault(require("./dataflow")), mark_tree_1 = require("../graph/mark-tree"), constants_1 = require("../graph/constants"), canvas_renderer_1 = __importDefault(require("../graph/canvas-renderer")), events_extend_1 = __importDefault(require("../graph/util/events-extend")), constants_2 = require("./constants"), signal_1 = require("./signal"), view_1 = require("../parse/view"), util_1 = require("../parse/util"), env_1 = require("../graph/util/env"), group_1 = require("./group"), mark_1 = require("./mark"), grammar_record_1 = require("./grammar-record"), enums_1 = require("../graph/enums"), text_1 = require("../semantic-marks/text"), theme_manager_1 = require("../theme/theme-manager"), factory_1 = require("../core/factory"), component_1 = require("./component"), graphic_1 = require("../graph/util/graphic")
|
|
13
|
+
const vutils_1 = require("@visactor/vutils"), vrender_core_1 = require("@visactor/vrender-core"), data_1 = require("./data"), events_1 = require("./events"), dataflow_1 = __importDefault(require("./dataflow")), mark_tree_1 = require("../graph/mark-tree"), constants_1 = require("../graph/constants"), canvas_renderer_1 = __importDefault(require("../graph/canvas-renderer")), events_extend_1 = __importDefault(require("../graph/util/events-extend")), constants_2 = require("./constants"), signal_1 = require("./signal"), view_1 = require("../parse/view"), event_1 = require("../parse/event"), util_1 = require("../parse/util"), env_1 = require("../graph/util/env"), group_1 = require("./group"), mark_1 = require("./mark"), layout_1 = require("../graph/layout/layout"), glyph_1 = require("./glyph"), morph_1 = require("../graph/animation/morph"), grammar_record_1 = require("./grammar-record"), animate_1 = require("./animate"), enums_1 = require("../graph/enums"), text_1 = require("../semantic-marks/text"), theme_manager_1 = require("../theme/theme-manager"), factory_1 = require("../core/factory"), component_1 = require("./component"), graphic_1 = require("../graph/util/graphic");
|
|
14
14
|
|
|
15
15
|
class View extends vutils_1.EventEmitter {
|
|
16
16
|
static useRegisters(comps) {
|
|
@@ -73,11 +73,11 @@ class View extends vutils_1.EventEmitter {
|
|
|
73
73
|
const selectors = (0, vutils_1.array)(selector), res = [];
|
|
74
74
|
return selectors.forEach((selectorStr => {
|
|
75
75
|
if ((0, util_1.isGrammar)(selectorStr)) return void res.push(selectorStr);
|
|
76
|
-
if (selectorStr[0] ===
|
|
76
|
+
if (selectorStr[0] === event_1.ID_PREFIX) {
|
|
77
77
|
const mark = this.getMarkById(selectorStr.slice(1));
|
|
78
78
|
return void (mark && res.push(mark));
|
|
79
79
|
}
|
|
80
|
-
const marks = selectorStr[0] ===
|
|
80
|
+
const marks = selectorStr[0] === event_1.NAME_PREFIX ? this.getMarksByName(selectorStr.slice(1)) : (0,
|
|
81
81
|
graphic_1.isMarkType)(selectorStr) ? this.getMarksByType(selectorStr) : null;
|
|
82
82
|
marks && marks.length && marks.forEach((mark => {
|
|
83
83
|
res.push(mark);
|
|
@@ -115,8 +115,7 @@ class View extends vutils_1.EventEmitter {
|
|
|
115
115
|
break;
|
|
116
116
|
|
|
117
117
|
case enums_1.GrammarMarkType.glyph:
|
|
118
|
-
|
|
119
|
-
GlyphMark && (mark = new GlyphMark(this, null == markOptions ? void 0 : markOptions.glyphType, groupMark));
|
|
118
|
+
mark = new glyph_1.GlyphMark(this, null == markOptions ? void 0 : markOptions.glyphType, groupMark);
|
|
120
119
|
break;
|
|
121
120
|
|
|
122
121
|
case enums_1.GrammarMarkType.component:
|
|
@@ -222,7 +221,7 @@ class View extends vutils_1.EventEmitter {
|
|
|
222
221
|
})), this;
|
|
223
222
|
}
|
|
224
223
|
parseSpec(spec) {
|
|
225
|
-
var _a, _b, _c, _d, _e, _f
|
|
224
|
+
var _a, _b, _c, _d, _e, _f;
|
|
226
225
|
if (this.emit(enums_1.HOOK_EVENT.BEFORE_PARSE_VIEW), this._spec = spec, (0, view_1.normalizeMarkTree)(spec),
|
|
227
226
|
spec.theme ? this.theme(spec.theme) : this.theme(theme_manager_1.ThemeManager.getDefaultTheme()),
|
|
228
227
|
spec.width && this.width(spec.width), spec.height && this.height(spec.height), this.padding(null !== (_b = null !== (_a = spec.padding) && void 0 !== _a ? _a : this._options.padding) && void 0 !== _b ? _b : this._theme.padding),
|
|
@@ -250,13 +249,12 @@ class View extends vutils_1.EventEmitter {
|
|
|
250
249
|
})), spec.marks && spec.marks.length && spec.marks.forEach((mark => {
|
|
251
250
|
this.parseMarkSpec(mark);
|
|
252
251
|
})), spec.events && spec.events.length && spec.events.forEach((eventConfig => {
|
|
253
|
-
|
|
254
|
-
null === (_b = this.event) || void 0 === _b || _b.call(this, eventConfig);
|
|
252
|
+
this.event(eventConfig);
|
|
255
253
|
})), spec.interactions && spec.interactions.length && spec.interactions.forEach((interaction => {
|
|
256
254
|
this.interaction(interaction.type, interaction);
|
|
257
|
-
})), !1 === spec.animation ?
|
|
258
|
-
this.
|
|
259
|
-
this
|
|
255
|
+
})), !1 === spec.animation ? this.animate.disable() : this.animate.enable(), this.emit(enums_1.HOOK_EVENT.AFTER_PARSE_VIEW),
|
|
256
|
+
this._needBuildLayoutTree = !0, this._layoutState = enums_1.LayoutState.before,
|
|
257
|
+
this;
|
|
260
258
|
}
|
|
261
259
|
updateSpec(spec) {
|
|
262
260
|
return this.removeAllInteractions(), this.removeAllGrammars(), this.parseSpec(spec);
|
|
@@ -376,7 +374,7 @@ class View extends vutils_1.EventEmitter {
|
|
|
376
374
|
}
|
|
377
375
|
doLayout() {
|
|
378
376
|
var _a;
|
|
379
|
-
const doLayout = this._options.doLayout ||
|
|
377
|
+
const doLayout = this._options.doLayout || layout_1.defaultDoLayout;
|
|
380
378
|
doLayout && (null === (_a = this._layoutMarks) || void 0 === _a ? void 0 : _a.length) && (this.emit(enums_1.HOOK_EVENT.BEFORE_DO_LAYOUT),
|
|
381
379
|
doLayout(this._layoutMarks, this._options, this), this.emit(enums_1.HOOK_EVENT.AFTER_DO_LAYOUT));
|
|
382
380
|
}
|
|
@@ -399,11 +397,11 @@ class View extends vutils_1.EventEmitter {
|
|
|
399
397
|
return this.evaluate(runningConfig), this;
|
|
400
398
|
}
|
|
401
399
|
doRender(immediately) {
|
|
402
|
-
this.emit(enums_1.HOOK_EVENT.BEFORE_DO_RENDER), this.renderer && (
|
|
400
|
+
this.emit(enums_1.HOOK_EVENT.BEFORE_DO_RENDER), this.renderer && (this._progressiveMarks || this.animate.animate(),
|
|
403
401
|
this.renderer.render(immediately), this.handleRenderEnd()), this.emit(enums_1.HOOK_EVENT.AFTER_DO_RENDER);
|
|
404
402
|
}
|
|
405
403
|
evaluate(runningConfig) {
|
|
406
|
-
var _a,
|
|
404
|
+
var _a, _b;
|
|
407
405
|
const normalizedRunningConfig = (0, view_1.normalizeRunningConfig)(runningConfig), grammarWillDetach = this._cachedGrammars.size() > 0;
|
|
408
406
|
grammarWillDetach && (this.reuseCachedGrammars(normalizedRunningConfig), this.detachCachedGrammar());
|
|
409
407
|
const hasResize = this._resizeRenderer(), hasUpdate = this._dataflow.hasCommitted();
|
|
@@ -412,28 +410,28 @@ class View extends vutils_1.EventEmitter {
|
|
|
412
410
|
this._needBuildLayoutTree = !1), this._layoutState && (this._layoutState = enums_1.LayoutState.layouting,
|
|
413
411
|
this.doLayout(), this._dataflow.hasCommitted() && (this._layoutState = enums_1.LayoutState.reevaluate,
|
|
414
412
|
this._dataflow.evaluate()), this._layoutState = enums_1.LayoutState.after, (null === (_a = this._layoutMarks) || void 0 === _a ? void 0 : _a.length) && this.handleLayoutEnd()),
|
|
415
|
-
this._layoutState = null, this.findProgressiveMarks(), this._resizeRenderer(), null === (
|
|
416
|
-
|
|
417
|
-
|
|
413
|
+
this._layoutState = null, this.findProgressiveMarks(), this._resizeRenderer(), null === (_b = this._willMorphMarks) || void 0 === _b || _b.forEach((morphMarks => {
|
|
414
|
+
this._morph.morph(morphMarks.prev, morphMarks.next, normalizedRunningConfig);
|
|
415
|
+
})), this._willMorphMarks = null, this.releaseCachedGrammars(normalizedRunningConfig),
|
|
416
|
+
this.doRender(!0), this.doPreProgressive(), this) : this;
|
|
418
417
|
}
|
|
419
418
|
reuseCachedGrammars(runningConfig) {
|
|
420
|
-
if (runningConfig.reuse) {
|
|
419
|
+
if (this._willMorphMarks || (this._willMorphMarks = []), runningConfig.reuse) {
|
|
421
420
|
const reuseDiffUpdate = diff => {
|
|
422
421
|
diff.next.reuse(diff.prev), diff.prev.detachAll(), diff.prev.clear(), this._cachedGrammars.unrecord(diff.prev);
|
|
423
422
|
};
|
|
424
|
-
this.
|
|
425
|
-
this.
|
|
426
|
-
this.
|
|
427
|
-
this.
|
|
423
|
+
this._morph.diffGrammar(this._cachedGrammars.getAllSignals(), this.grammars.getAllSignals().filter((signal => !view_1.BuiltInSignalID.includes(signal.id())))).update.forEach(reuseDiffUpdate);
|
|
424
|
+
this._morph.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData()).update.forEach(reuseDiffUpdate);
|
|
425
|
+
this._morph.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales()).update.forEach(reuseDiffUpdate);
|
|
426
|
+
this._morph.diffGrammar(this._cachedGrammars.getAllCoordinates(), this.grammars.getAllCoordinates()).update.forEach(reuseDiffUpdate);
|
|
428
427
|
}
|
|
429
|
-
this.
|
|
430
|
-
var _b;
|
|
428
|
+
this._morph.diffMark(this._cachedGrammars.getAllMarks(), this.grammars.getAllMarks().filter((mark => "root" !== mark.id())), runningConfig).update.forEach((diff => {
|
|
431
429
|
const matched = 1 === diff.prev.length && 1 === diff.next.length && diff.prev[0].markType === diff.next[0].markType, enableMarkMorphConfig = diff.prev.every((mark => mark.getMorphConfig().morph)) && diff.next.every((mark => mark.getMorphConfig().morph));
|
|
432
430
|
matched && runningConfig.reuse ? (diff.next[0].reuse(diff.prev[0]), diff.prev[0].detachAll(),
|
|
433
|
-
diff.prev[0].clear(), this._cachedGrammars.unrecord(diff.prev[0])) : (runningConfig.morph && enableMarkMorphConfig || runningConfig.morphAll) &&
|
|
431
|
+
diff.prev[0].clear(), this._cachedGrammars.unrecord(diff.prev[0])) : (runningConfig.morph && enableMarkMorphConfig || runningConfig.morphAll) && this._willMorphMarks.push({
|
|
434
432
|
prev: diff.prev,
|
|
435
433
|
next: diff.next
|
|
436
|
-
})
|
|
434
|
+
});
|
|
437
435
|
}));
|
|
438
436
|
}
|
|
439
437
|
detachCachedGrammar() {
|
|
@@ -451,11 +449,10 @@ class View extends vutils_1.EventEmitter {
|
|
|
451
449
|
}));
|
|
452
450
|
const markNodes = this._cachedGrammars.getAllMarkNodes();
|
|
453
451
|
markNodes.forEach((node => {
|
|
454
|
-
|
|
455
|
-
null === (_a = node.mark.animate) || void 0 === _a || _a.stop(), runningConfig.enableExitAnimation && this.animate && this.animate.animateAddition(node.mark);
|
|
452
|
+
node.mark.animate.stop(), runningConfig.enableExitAnimation && this.animate.animateAddition(node.mark);
|
|
456
453
|
}));
|
|
457
454
|
const releaseUp = node => {
|
|
458
|
-
if (node.mark.view &&
|
|
455
|
+
if (node.mark.view && 0 === node.mark.animate.getAnimatorCount() && (!node.children || 0 === node.children.length)) {
|
|
459
456
|
node.mark.release();
|
|
460
457
|
const parent = node.parent;
|
|
461
458
|
parent && (node.parent.children = node.parent.children.filter((n => n !== node)),
|
|
@@ -464,8 +461,8 @@ class View extends vutils_1.EventEmitter {
|
|
|
464
461
|
};
|
|
465
462
|
markNodes.forEach((node => {
|
|
466
463
|
const mark = node.mark;
|
|
467
|
-
|
|
468
|
-
|
|
464
|
+
0 === mark.animate.getAnimatorCount() ? releaseUp(node) : mark.addEventListener("animationEnd", (() => {
|
|
465
|
+
0 === mark.animate.getAnimatorCount() && releaseUp(node);
|
|
469
466
|
}));
|
|
470
467
|
})), this._cachedGrammars.clear();
|
|
471
468
|
}
|
|
@@ -534,6 +531,75 @@ class View extends vutils_1.EventEmitter {
|
|
|
534
531
|
height: height
|
|
535
532
|
}), !0);
|
|
536
533
|
}
|
|
534
|
+
bindEvents(eventSpec) {
|
|
535
|
+
if (this._eventConfig.disable) return;
|
|
536
|
+
const {type: evtType, filter: filter, callback: callback, throttle: throttle, debounce: debounce, consume: consume, target: target, dependency: dependency} = eventSpec, eventSelector = (0,
|
|
537
|
+
event_1.parseEventSelector)(evtType);
|
|
538
|
+
if (!eventSelector) return;
|
|
539
|
+
const {source: source, type: type} = eventSelector, markFilter = (0, event_1.generateFilterByMark)(eventSelector), validateSignals = (Array.isArray(target) && target.length ? target.map((entry => ({
|
|
540
|
+
signal: this.getSignalById(entry.target),
|
|
541
|
+
callback: entry.callback
|
|
542
|
+
}))) : [ {
|
|
543
|
+
signal: (0, vutils_1.isString)(target) ? this.getSignalById(target) : null,
|
|
544
|
+
callback: callback
|
|
545
|
+
} ]).filter((entry => entry.signal || entry.callback)), refs = (0, util_1.parseReference)(dependency, this), send = (0,
|
|
546
|
+
event_1.parseHandler)(((evt, element) => {
|
|
547
|
+
const needPreventDefault = source === constants_2.EVENT_SOURCE_VIEW && (0, events_1.prevent)(this._eventConfig, type) || consume && (void 0 === evt.cancelable || evt.cancelable);
|
|
548
|
+
source === constants_2.EVENT_SOURCE_WINDOW && (evt = (0, events_extend_1.default)(this, evt, element, type, constants_2.EVENT_SOURCE_WINDOW));
|
|
549
|
+
let hasCommitted = !1;
|
|
550
|
+
if ((!filter || filter(evt)) && (!markFilter || markFilter(element)) && validateSignals.length) {
|
|
551
|
+
const params = refs.reduce(((params, ref) => (params[ref.id()] = ref.output(), params)), {});
|
|
552
|
+
validateSignals.forEach((entry => {
|
|
553
|
+
if (entry.callback && entry.signal) {
|
|
554
|
+
entry.signal.set(entry.callback(evt, params)) && (this.commit(entry.signal), hasCommitted = !0);
|
|
555
|
+
} else entry.callback ? entry.callback(evt, params) : (this.commit(entry.signal),
|
|
556
|
+
hasCommitted = !0);
|
|
557
|
+
}));
|
|
558
|
+
}
|
|
559
|
+
needPreventDefault && evt.preventDefault(), consume && evt.stopPropagation(), hasCommitted && this.run();
|
|
560
|
+
}), {
|
|
561
|
+
throttle: throttle,
|
|
562
|
+
debounce: debounce
|
|
563
|
+
});
|
|
564
|
+
if (source === constants_2.EVENT_SOURCE_VIEW) {
|
|
565
|
+
if ((0, events_1.permit)(this._eventConfig, constants_2.EVENT_SOURCE_VIEW, type)) return this.addEventListener(type, send, constants_2.NO_TRAP),
|
|
566
|
+
() => {
|
|
567
|
+
this.removeEventListener(type, send);
|
|
568
|
+
};
|
|
569
|
+
} else if (source === constants_2.EVENT_SOURCE_WINDOW) return vrender_core_1.vglobal.addEventListener(type, send),
|
|
570
|
+
this._eventListeners.push({
|
|
571
|
+
type: type,
|
|
572
|
+
source: vrender_core_1.vglobal,
|
|
573
|
+
handler: send
|
|
574
|
+
}), () => {
|
|
575
|
+
vrender_core_1.vglobal.removeEventListener(type, send);
|
|
576
|
+
const index = this._eventListeners.findIndex((entry => entry.type === type && entry.source === vrender_core_1.vglobal && entry.handler === send));
|
|
577
|
+
index >= 0 && this._eventListeners.splice(index, 1);
|
|
578
|
+
};
|
|
579
|
+
}
|
|
580
|
+
event(eventSpec) {
|
|
581
|
+
if ("between" in eventSpec) {
|
|
582
|
+
const [starEvent, endEvent] = eventSpec.between, id = `${starEvent.type}-${eventSpec.type}-${endEvent.type}`;
|
|
583
|
+
let unbindEndEvent;
|
|
584
|
+
this.bindEvents(Object.assign({}, starEvent, {
|
|
585
|
+
callback: () => {
|
|
586
|
+
if (this._eventCache || (this._eventCache = {}), !this._eventCache[id]) {
|
|
587
|
+
const unbindEvent = this.bindEvents(eventSpec);
|
|
588
|
+
this._eventCache[id] = unbindEvent;
|
|
589
|
+
}
|
|
590
|
+
unbindEndEvent || (unbindEndEvent = this.bindEvents(Object.assign({}, endEvent, {
|
|
591
|
+
callback: () => {
|
|
592
|
+
this._eventCache[id] && (this._eventCache[id](), this._eventCache[id] = null);
|
|
593
|
+
}
|
|
594
|
+
})));
|
|
595
|
+
}
|
|
596
|
+
}));
|
|
597
|
+
} else "merge" in eventSpec ? eventSpec.merge.forEach((entry => {
|
|
598
|
+
const singleEvent = Object.assign({}, eventSpec);
|
|
599
|
+
(0, vutils_1.isString)(entry) ? singleEvent.type = entry : (0, vutils_1.isObject)(entry) && Object.assign(singleEvent, entry),
|
|
600
|
+
singleEvent.debounce = 50, this.bindEvents(singleEvent);
|
|
601
|
+
})) : this.bindEvents(eventSpec);
|
|
602
|
+
}
|
|
537
603
|
interaction(type, spec) {
|
|
538
604
|
const interaction = factory_1.Factory.createInteraction(type, this, spec);
|
|
539
605
|
return interaction && (interaction.bind(), this._boundInteractions || (this._boundInteractions = []),
|
|
@@ -556,18 +622,6 @@ class View extends vutils_1.EventEmitter {
|
|
|
556
622
|
instance.unbind();
|
|
557
623
|
})), this._boundInteractions = null), this;
|
|
558
624
|
}
|
|
559
|
-
initializeEventConfig(config) {
|
|
560
|
-
const eventsConfig = Object.assign({
|
|
561
|
-
defaults: {}
|
|
562
|
-
}, config), unpack = (obj, keys) => {
|
|
563
|
-
keys.forEach((k => {
|
|
564
|
-
(0, vutils_1.isArray)(obj[k]) && (obj[k] = obj[k].reduce(((set, key) => (set[key] = !0,
|
|
565
|
-
set)), {}));
|
|
566
|
-
}));
|
|
567
|
-
};
|
|
568
|
-
return unpack(eventsConfig.defaults, [ "prevent", "allow" ]), unpack(eventsConfig, [ constants_2.EVENT_SOURCE_VIEW, constants_2.EVENT_SOURCE_WINDOW ]),
|
|
569
|
-
eventsConfig;
|
|
570
|
-
}
|
|
571
625
|
initEvent() {
|
|
572
626
|
const stage = this.renderer.stage();
|
|
573
627
|
stage && stage.on("*", this.delegateEvent);
|
|
@@ -590,15 +644,15 @@ class View extends vutils_1.EventEmitter {
|
|
|
590
644
|
this.renderer = new canvas_renderer_1.default(this), this.renderer.initialize(width, height, this._options, this._eventConfig).background(this._background);
|
|
591
645
|
}
|
|
592
646
|
initialize() {
|
|
593
|
-
var _a
|
|
647
|
+
var _a;
|
|
594
648
|
this.grammars = new grammar_record_1.RecordedGrammars((grammar => grammar.id()), ((key, grammar) => this.logger.warn(`Grammar id '${key}' has been occupied`, grammar))),
|
|
595
649
|
this._cachedGrammars = new grammar_record_1.RecordedTreeGrammars((grammar => grammar.id())),
|
|
596
650
|
this._options.logger && vutils_1.Logger.setInstance(this._options.logger), this.logger = vutils_1.Logger.getInstance(null !== (_a = this._options.logLevel) && void 0 !== _a ? _a : 0),
|
|
597
|
-
this._dataflow = new dataflow_1.default, this.animate =
|
|
598
|
-
this.
|
|
651
|
+
this._dataflow = new dataflow_1.default, this.animate = new animate_1.ViewAnimate(this),
|
|
652
|
+
this._morph = new morph_1.Morph, this._options.hooks && (Object.keys(this._options.hooks).forEach((key => {
|
|
599
653
|
this.on(key, this._options.hooks[key]);
|
|
600
654
|
})), this.hooks = this._options.hooks), this.container = null, this.renderer = null,
|
|
601
|
-
this._eventListeners = [], this._eventConfig =
|
|
655
|
+
this._eventListeners = [], this._eventConfig = (0, events_1.initializeEventConfig)(this._options.eventConfig),
|
|
602
656
|
this._theme = this._options.disableTheme ? null : theme_manager_1.ThemeManager.getDefaultTheme(),
|
|
603
657
|
this.parseBuiltIn(), (0, env_1.configureEnvironment)(this._options), this.initializeRenderer(),
|
|
604
658
|
this._eventConfig.disable || this.initEvent(), this._bindResizeEvent(), this._needBuildLayoutTree = !0,
|
|
@@ -636,14 +690,13 @@ class View extends vutils_1.EventEmitter {
|
|
|
636
690
|
})), this._progressiveMarks = null);
|
|
637
691
|
}
|
|
638
692
|
release() {
|
|
639
|
-
var _a, _b, _c
|
|
693
|
+
var _a, _b, _c;
|
|
640
694
|
this.removeAllInteractions(), this.releaseStageEvent(), this._unBindResizeEvent(),
|
|
641
695
|
this.clearProgressive(), factory_1.Factory.unregisterRuntimeTransforms(), vutils_1.Logger.setInstance(null),
|
|
642
|
-
|
|
643
|
-
this.
|
|
644
|
-
null === (_c = null === (_b = this.renderer) || void 0 === _b ? void 0 : _b.release) || void 0 === _c || _c.call(_b),
|
|
696
|
+
this.animate.stop(), this.grammars.release(), this._cachedGrammars.release(), this._dataflow.release(),
|
|
697
|
+
this._dataflow = null, null === (_b = null === (_a = this.renderer) || void 0 === _a ? void 0 : _a.release) || void 0 === _b || _b.call(_a),
|
|
645
698
|
this.renderer = null, this._boundInteractions = null, this.removeAllListeners(),
|
|
646
|
-
null === (
|
|
699
|
+
null === (_c = this._eventListeners) || void 0 === _c || _c.forEach((listener => {
|
|
647
700
|
listener.source.removeEventListener(listener.type, listener.handler);
|
|
648
701
|
})), this._eventListeners = null;
|
|
649
702
|
}
|