@visactor/vgrammar-core 0.10.0-alpha.1 → 0.10.0-alpha.2

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 (43) hide show
  1. package/cjs/env.d.ts +3 -1
  2. package/cjs/env.js +22 -16
  3. package/cjs/env.js.map +1 -1
  4. package/cjs/graph/attributes/transform.js +1 -19
  5. package/cjs/graph/attributes/transform.js.map +1 -1
  6. package/cjs/graph/canvas-renderer.js +2 -1
  7. package/cjs/graph/canvas-renderer.js.map +1 -1
  8. package/cjs/graph/element.js +11 -13
  9. package/cjs/graph/element.js.map +1 -1
  10. package/cjs/graph/glyph-element.js +2 -3
  11. package/cjs/graph/glyph-element.js.map +1 -1
  12. package/cjs/index.d.ts +1 -1
  13. package/cjs/index.js +1 -1
  14. package/cjs/index.js.map +1 -1
  15. package/cjs/types/grammar.d.ts +2 -1
  16. package/cjs/types/grammar.js.map +1 -1
  17. package/cjs/types/mark.d.ts +1 -0
  18. package/cjs/types/mark.js.map +1 -1
  19. package/cjs/view/mark.d.ts +3 -1
  20. package/cjs/view/mark.js +9 -3
  21. package/cjs/view/mark.js.map +1 -1
  22. package/es/env.d.ts +3 -1
  23. package/es/env.js +9 -1
  24. package/es/env.js.map +1 -1
  25. package/es/graph/attributes/transform.js +1 -15
  26. package/es/graph/attributes/transform.js.map +1 -1
  27. package/es/graph/canvas-renderer.js +2 -1
  28. package/es/graph/canvas-renderer.js.map +1 -1
  29. package/es/graph/element.js +11 -13
  30. package/es/graph/element.js.map +1 -1
  31. package/es/graph/glyph-element.js +2 -3
  32. package/es/graph/glyph-element.js.map +1 -1
  33. package/es/index.d.ts +1 -1
  34. package/es/index.js +1 -1
  35. package/es/index.js.map +1 -1
  36. package/es/types/grammar.d.ts +2 -1
  37. package/es/types/grammar.js.map +1 -1
  38. package/es/types/mark.d.ts +1 -0
  39. package/es/types/mark.js.map +1 -1
  40. package/es/view/mark.d.ts +3 -1
  41. package/es/view/mark.js +9 -3
  42. package/es/view/mark.js.map +1 -1
  43. package/package.json +6 -6
@@ -41,14 +41,13 @@ export class Element {
41
41
  }
42
42
  initGraphicItem(attributes = {}) {
43
43
  if (this.graphicItem) return;
44
- const attrs = Object.assign({}, attributes);
45
- this.graphicItem = this.mark.addGraphicItem(attrs, this.groupKey), this.graphicItem && (this.graphicItem[BridgeElementKey] = this,
46
- this.mark.markType !== GrammarMarkType.component && (this.graphicItem.onBeforeAttributeUpdate = attributes => {
44
+ const attrTtansforms = this.mark.getAttributeTransforms();
45
+ this.graphicItem = this.mark.addGraphicItem(attrTtansforms ? {} : attributes, this.groupKey),
46
+ this.graphicItem && (this.graphicItem[BridgeElementKey] = this, attrTtansforms && (this.graphicItem.onBeforeAttributeUpdate = attributes => {
47
47
  if (!this.mark) return attributes;
48
- return transformAttributes(this.mark.getAttributeTransforms(), attributes, this);
49
- }, this.graphicItem.setAttributes(this.graphicItem.attribute)), this.clearGraphicAttributes(),
50
- this.mark.needAnimate() && (this.setPrevGraphicAttributes({}), this.setNextGraphicAttributes(attributes),
51
- this.setFinalGraphicAttributes(attributes)));
48
+ return transformAttributes(attrTtansforms, attributes, this);
49
+ }, this.graphicItem.setAttributes(attributes)), this.clearGraphicAttributes(), this.mark.needAnimate() && (this.setPrevGraphicAttributes({}),
50
+ this.setNextGraphicAttributes(attributes), this.setFinalGraphicAttributes(attributes)));
52
51
  }
53
52
  updateGraphicItem(config) {
54
53
  if (!this.graphicItem) return;
@@ -105,8 +104,7 @@ export class Element {
105
104
  this.states = newStateValues, !isCollectionMark && isStateChanged && this.diffState === DiffState.unChange && (this.diffState = DiffState.update);
106
105
  }
107
106
  encodeGraphic(attrs) {
108
- var _a, _b;
109
- this.coordinateTransformEncode(this.items), !isNil(null == attrs ? void 0 : attrs.enableSegments) && (null === (_b = null === (_a = this.items) || void 0 === _a ? void 0 : _a[0]) || void 0 === _b ? void 0 : _b.nextAttrs) && (this.items[0].nextAttrs.enableSegments = attrs.enableSegments);
107
+ this.coordinateTransformEncode(this.items);
110
108
  const graphicAttributes = this.transformElementItems(this.items, this.mark.markType);
111
109
  attrs && Object.assign(graphicAttributes, attrs), this.graphicItem ? (this.graphicItem.clearStates(),
112
110
  this.graphicItem.states = {}, this.graphicItem.stateProxy = null, this.applyGraphicAttributes(graphicAttributes)) : this.initGraphicItem(graphicAttributes),
@@ -123,7 +121,7 @@ export class Element {
123
121
  setCustomizedShape && (this.graphicItem.pathProxy = attrs => setCustomizedShape(this.data, attrs, new CustomPath2D));
124
122
  }
125
123
  encodeItems(items, encoders, isReentered = !1, parameters) {
126
- const isCollectionMark = this.mark.isCollectionMark(), updateEncoder = encoders[BuiltInEncodeNames.update], enterEncoder = encoders[BuiltInEncodeNames.enter], exitEncoder = encoders[BuiltInEncodeNames.exit], onlyFullEncodeFirst = this.mark.isLargeMode();
124
+ const isCollectionMark = this.mark.isCollectionMark(), updateEncoder = encoders[BuiltInEncodeNames.update], enterEncoder = encoders[BuiltInEncodeNames.enter], exitEncoder = encoders[BuiltInEncodeNames.exit], onlyFullEncodeFirst = this.mark.isLargeMode() || isCollectionMark && !this.mark.getSpec().enableSegments;
127
125
  this.diffState === DiffState.enter ? (enterEncoder && invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst),
128
126
  updateEncoder && invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst)) : this.diffState === DiffState.update ? ((isCollectionMark && enterEncoder || isReentered) && invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst),
129
127
  updateEncoder && invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst)) : this.diffState === DiffState.exit && exitEncoder && (isReentered && invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst),
@@ -181,12 +179,12 @@ export class Element {
181
179
  return diffResult;
182
180
  }
183
181
  transformElementItems(items, markType, computePoints) {
184
- var _a, _b, _c, _d, _e;
182
+ var _a, _b, _c, _d;
185
183
  const item = items[0];
186
184
  if (!item.nextAttrs || 0 === Object.keys(item.nextAttrs).length) return {};
187
185
  let nextAttrs = null == item ? void 0 : item.nextAttrs;
188
186
  if (items && items.length && isNil(null === (_a = item.nextAttrs) || void 0 === _a ? void 0 : _a.points) && (!0 === computePoints || isValidPointsChannel(Object.keys(item.nextAttrs), this.mark.markType)) && isPointsMarkType(markType)) {
189
- const lastPoints = this.getGraphicAttribute("points", !1), lastSegments = this.getGraphicAttribute("segments", !1), enableSegments = null !== (_b = item.nextAttrs.enableSegments) && void 0 !== _b ? _b : this.getGraphicAttribute("enableSegments", !1), itemNextAttrs = items.map((item => item.nextAttrs)), isProgressive = this.mark.isProgressive();
187
+ const lastPoints = this.getGraphicAttribute("points", !1), lastSegments = this.getGraphicAttribute("segments", !1), enableSegments = this.mark.getSpec().enableSegments, itemNextAttrs = items.map((item => item.nextAttrs)), isProgressive = this.mark.isProgressive();
190
188
  if (nextAttrs = Object.assign({}, nextAttrs), delete nextAttrs.x, delete nextAttrs.y,
191
189
  markType === GrammarMarkType.line || markType === GrammarMarkType.area) {
192
190
  const linePoints = getLinePoints(items, !0, lastPoints, markType === GrammarMarkType.area);
@@ -194,7 +192,7 @@ export class Element {
194
192
  const points = linePoints && 0 !== linePoints.length ? linePoints : getLinePointsFromSegments(lastSegments), segments = getLineSegmentConfigs(itemNextAttrs, points, this);
195
193
  segments ? (nextAttrs.segments = segments, nextAttrs.points = null) : (nextAttrs.segments = null,
196
194
  nextAttrs.points = points);
197
- } else isProgressive ? nextAttrs.segments = (null !== (_e = null === (_d = null === (_c = this.graphicItem) || void 0 === _c ? void 0 : _c.attribute) || void 0 === _d ? void 0 : _d.segments) && void 0 !== _e ? _e : []).concat([ {
195
+ } else isProgressive ? nextAttrs.segments = (null !== (_d = null === (_c = null === (_b = this.graphicItem) || void 0 === _b ? void 0 : _b.attribute) || void 0 === _c ? void 0 : _c.segments) && void 0 !== _d ? _d : []).concat([ {
198
196
  points: linePoints
199
197
  } ]) : (nextAttrs.points = linePoints, nextAttrs.segments = null);
200
198
  } else markType === GrammarMarkType.largeRects ? nextAttrs.points = getLargeRectsPoints(items, !0, lastPoints) : markType === GrammarMarkType.largeSymbols && (nextAttrs.points = getLargeSymbolsPoints(items, !0, lastPoints));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graph/element.ts"],"names":[],"mappings":"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","file":"element.js","sourcesContent":["import type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n array,\n has,\n isBoolean,\n isNil,\n isFunction,\n isString,\n isArray,\n get,\n isEmpty,\n isEqual as isObjEqual\n} from '@visactor/vutils';\nimport { isEqual } from '@visactor/vgrammar-util';\nimport type { IBaseCoordinate } from '@visactor/vgrammar-coordinate';\nimport { BridgeElementKey } from './constants';\nimport { DiffState, HOOK_EVENT, GrammarMarkType, BuiltInEncodeNames } from './enums';\nimport { invokeEncoderToItems } from './mark/encode';\nimport { removeGraphicItem } from './util/graphic';\nimport { transformAttributes } from './attributes/transform';\nimport {\n getLargeRectsPoints,\n getLargeSymbolsPoints,\n getLinePoints,\n isValidPointsChannel,\n isPointsMarkType\n} from './attributes/helpers';\nimport { getLineSegmentConfigs, getLinePointsFromSegments } from './attributes/line';\nimport type {\n BaseEncodeSpec,\n BaseSignleEncodeSpec,\n IElement,\n IMark,\n IMarkConfig,\n MarkElementItem,\n MarkFunctionType,\n MarkKeySpec,\n MarkSpec,\n MarkType,\n StateProxyEncodeSpec\n} from '../types';\nimport type { IGraphic, ILine, IGraphicAttribute } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { CustomPath2D } from '@visactor/vrender-core';\nimport { invokeFunctionType, parseField } from '../parse/util';\n\nexport class Element implements IElement {\n mark: IMark;\n\n key: string;\n groupKey?: string;\n data: any[] = null;\n\n states: string[] = [];\n\n diffState: DiffState = DiffState.enter;\n // Element should be reserved as long as it need to animate\n isReserved: boolean = false;\n\n runtimeStatesEncoder: BaseEncodeSpec = null;\n\n protected graphicItem: IGraphic;\n\n // hack before vRender refactoring\n items: MarkElementItem[] = [];\n\n constructor(mark: IMark) {\n this.mark = mark;\n }\n\n initGraphicItem(attributes: any = {}) {\n if (this.graphicItem) {\n return;\n }\n // 统一读取mark中是否可交互的配置\n const attrs = Object.assign({}, attributes);\n this.graphicItem = this.mark.addGraphicItem(attrs, this.groupKey);\n\n if (!this.graphicItem) {\n return;\n }\n // 统一读取mark中是否可交互的配置\n this.graphicItem[BridgeElementKey] = this;\n\n if (this.mark.markType !== GrammarMarkType.component) {\n this.graphicItem.onBeforeAttributeUpdate = (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const graphicAttributes = transformAttributes(this.mark.getAttributeTransforms(), attributes, this);\n return graphicAttributes;\n };\n this.graphicItem.setAttributes(this.graphicItem.attribute);\n }\n\n // transform initial attributes\n\n this.clearGraphicAttributes();\n if (this.mark.needAnimate()) {\n this.setPrevGraphicAttributes({});\n this.setNextGraphicAttributes(attributes);\n this.setFinalGraphicAttributes(attributes);\n }\n }\n\n updateGraphicItem(config: IMarkConfig) {\n if (!this.graphicItem) {\n return;\n }\n\n if (!isNil(config.clip)) {\n this.graphicItem.setAttribute('clip', config.clip);\n }\n if (!isNil(config.interactive)) {\n this.graphicItem.setAttribute('pickable', config.interactive);\n }\n if (!isNil(config.zIndex)) {\n this.graphicItem.setAttribute('zIndex', config.zIndex);\n }\n if (this.diffState === DiffState.exit) {\n (this.graphicItem as any).releaseStatus = 'willRelease';\n } else {\n (this.graphicItem as any).releaseStatus = undefined;\n }\n\n const stateAnimation = this.mark.animate.getAnimationConfigs('state');\n if (stateAnimation.length !== 0) {\n (this.graphicItem as any).stateAnimateConfig = stateAnimation[0].originConfig;\n }\n }\n\n getGraphicItem() {\n return this.graphicItem;\n }\n\n removeGraphicItem() {\n // stop all animation when releasing including normal animation & morphing animation\n if (this.graphicItem) {\n this.graphicItem.animates?.forEach?.(animate => animate.stop());\n }\n\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n this.graphicItem[BridgeElementKey] = null;\n this.graphicItem = null;\n }\n }\n\n resetGraphicItem() {\n if (this.graphicItem) {\n this.graphicItem = null;\n }\n }\n\n getBounds() {\n // FIXME: 没有更新 bounds 时拿到的 bound 可能为 null\n return this.graphicItem?.AABBBounds;\n }\n\n getStates() {\n return this.states.slice();\n }\n\n updateData(groupKey: string | null, data: any[], key: MarkKeySpec) {\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_UPDATE_DATA, { groupKey, data, key }, this);\n this.data = data;\n const keyGetter = parseField(key);\n this.items = data.map(datum => {\n const key = keyGetter(datum);\n const item = {\n datum,\n key,\n view: this.mark.view,\n nextAttrs: {}\n };\n\n return item;\n });\n\n this.groupKey = groupKey;\n this.key = this.mark.isCollectionMark() ? groupKey : this.items?.[0].key;\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_UPDATE_DATA, { groupKey, data, key }, this);\n return this.items;\n }\n\n state(markState: MarkFunctionType<string | string[]>, parameters?: any) {\n const isCollectionMark = this.mark.isCollectionMark();\n\n const prevStateValues = this.states;\n const newStateValues = array(invokeFunctionType(markState, parameters, this.getDatum(), this));\n const stateSort = this.mark.getSpec()?.stateSort;\n\n if (stateSort) {\n stateSort.sort(stateSort);\n }\n\n const isStateChanged =\n newStateValues.length !== prevStateValues.length ||\n newStateValues.some((newState: string, index: number) => newState !== prevStateValues[index]);\n this.states = newStateValues;\n\n // early logic didn't handle collection mark, only update signal mark state for now\n if (!isCollectionMark && isStateChanged && this.diffState === DiffState.unChange) {\n this.diffState = DiffState.update;\n }\n }\n\n encodeGraphic(attrs?: any) {\n this.coordinateTransformEncode(this.items);\n\n if (!isNil(attrs?.enableSegments) && this.items?.[0]?.nextAttrs) {\n this.items[0].nextAttrs.enableSegments = attrs.enableSegments;\n }\n\n const graphicAttributes = this.transformElementItems(this.items, this.mark.markType);\n\n if (attrs) {\n Object.assign(graphicAttributes, attrs);\n }\n\n if (!this.graphicItem) {\n this.initGraphicItem(graphicAttributes);\n } else {\n this.graphicItem.clearStates();\n // 更新数据流后,states计算不缓存\n this.graphicItem.states = {};\n this.graphicItem.stateProxy = null;\n\n this.applyGraphicAttributes(graphicAttributes);\n }\n\n if ((this.diffState === DiffState.enter || this.diffState === DiffState.update) && this.states.length) {\n this.useStates(this.states);\n }\n\n if (this.mark.markType === GrammarMarkType.shape) {\n // FIXME: shape需要拿到原始数据进行编码,暂时把数据绑定到graphicItem上,看后续graphicItem是否需要支持数据绑定\n (this.graphicItem as any).datum = this.items[0].datum;\n }\n\n // clear item attributes\n this.items.forEach(item => {\n item.nextAttrs = {};\n });\n this._setCutomizedShape();\n }\n\n private _setCutomizedShape() {\n if (!this.graphicItem) {\n return;\n }\n const setCustomizedShape = this.mark.getSpec()?.setCustomizedShape;\n\n if (!setCustomizedShape) {\n return;\n }\n\n this.graphicItem.pathProxy = (attrs: Partial<IGraphicAttribute>) => {\n return setCustomizedShape(this.data, attrs, new CustomPath2D());\n };\n }\n\n encodeItems(items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered: boolean = false, parameters?: any) {\n const isCollectionMark = this.mark.isCollectionMark();\n // marshall encoder functions\n const updateEncoder = encoders[BuiltInEncodeNames.update];\n const enterEncoder = encoders[BuiltInEncodeNames.enter];\n const exitEncoder = encoders[BuiltInEncodeNames.exit];\n const onlyFullEncodeFirst = this.mark.isLargeMode();\n\n if (this.diffState === DiffState.enter) {\n if (enterEncoder) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n if (updateEncoder) {\n invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst);\n }\n } else if (this.diffState === DiffState.update) {\n // if mark is reentered or mark is collection type, evaluate enter encode\n if ((isCollectionMark && enterEncoder) || isReentered) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n if (updateEncoder) {\n invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst);\n }\n } else if (this.diffState === DiffState.exit && exitEncoder) {\n // if mark is reentered, evaluate enter encode\n if (isReentered) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n invokeEncoderToItems(this, items, exitEncoder, parameters, onlyFullEncodeFirst);\n }\n }\n\n protected coordinateTransformEncode(items: MarkElementItem[]) {\n if (!this.mark.coord || this.mark.markType === 'arc' || this.mark.disableCoordinateTransform === true) {\n return;\n }\n const coord = this.mark.coord.output() as IBaseCoordinate;\n\n items.forEach(item => {\n const nextAttrs = item.nextAttrs;\n const convertedPoint: IPointLike = coord.convert(nextAttrs);\n Object.assign(nextAttrs, convertedPoint);\n });\n }\n\n clearStates(hasAnimation?: boolean) {\n const stateAnimationEnable = isBoolean(hasAnimation)\n ? hasAnimation\n : this.mark.animate.getAnimationConfigs('state').length !== 0;\n\n this.states = [];\n\n if (this.graphicItem) {\n this.graphicItem.clearStates(stateAnimationEnable);\n }\n\n if (this.runtimeStatesEncoder) {\n this.runtimeStatesEncoder = {};\n }\n }\n\n private _updateRuntimeStates(state: string, attrs: any) {\n if (!this.runtimeStatesEncoder) {\n this.runtimeStatesEncoder = {};\n }\n\n this.runtimeStatesEncoder[state] = attrs;\n }\n\n hasState(state: string) {\n return this.states && this.states.includes(state);\n }\n\n addState(state: string | string[], attrs?: BaseSignleEncodeSpec) {\n const states = array(state);\n const nextStates = states.reduce((nextStates: string[], state: string) => {\n if (!nextStates.includes(state)) {\n nextStates.push(state);\n }\n return nextStates;\n }, this.states.slice());\n\n const isRuntimeStateUpdate = attrs && isString(state) && !isObjEqual(attrs, this.runtimeStatesEncoder?.[state]);\n if (isRuntimeStateUpdate) {\n this._updateRuntimeStates(state, attrs);\n }\n\n if (nextStates.length === this.states.length) {\n if (isRuntimeStateUpdate && this.graphicItem) {\n this.graphicItem.clearStates();\n this.useStates(nextStates);\n }\n\n return;\n }\n\n this.useStates(nextStates);\n }\n\n removeState(state: string | string[]) {\n const states = array(state);\n const nextStates = this.states.filter(state => !states.includes(state));\n if (nextStates.length === this.states.length) {\n return;\n }\n\n if (this.runtimeStatesEncoder) {\n states.forEach(state => {\n this.runtimeStatesEncoder[state] = null;\n });\n }\n this.useStates(nextStates);\n }\n\n protected getStateAttrs = (stateName: string, nextStates: string[]) => {\n const isRuntimeState = !isNil(this.runtimeStatesEncoder?.[stateName]);\n const encoder = isRuntimeState\n ? this.runtimeStatesEncoder[stateName]\n : (this.mark.getSpec() as MarkSpec).encode?.[stateName];\n\n if (!encoder) {\n return {};\n }\n\n if (isFunction(encoder)) {\n return (encoder as StateProxyEncodeSpec)(this.getDatum(), this, stateName, nextStates);\n }\n\n if (!isRuntimeState && this.graphicItem.states?.[stateName]) {\n return this.graphicItem.states[stateName];\n }\n\n const stateItems = this.items.map(item => Object.assign({}, item, { nextAttrs: {} }));\n // collection图元,暂时不支持在state更新中,支持更新points更新\n invokeEncoderToItems(this, stateItems, encoder, (this.mark as any).parameters());\n\n const graphicAttributes = this.transformElementItems(stateItems, this.mark.markType);\n\n if (!this.graphicItem.states) {\n this.graphicItem.states = { [stateName]: graphicAttributes };\n } else if (!this.graphicItem.states[stateName]) {\n this.graphicItem.states[stateName] = graphicAttributes;\n }\n\n return graphicAttributes;\n };\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!this.graphicItem) {\n return;\n }\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_STATE, { states }, this);\n\n this.states = states.slice();\n const stateSort = this.mark.getSpec()?.stateSort;\n\n if (stateSort) {\n this.states.sort(stateSort);\n }\n\n const stateAnimationEnable = isBoolean(hasAnimation)\n ? hasAnimation\n : this.mark.animate.getAnimationConfigs('state').length !== 0;\n\n this.graphicItem.stateProxy = this.getStateAttrs;\n this.graphicItem.useStates(this.states, stateAnimationEnable);\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_STATE, { states }, this);\n }\n\n protected diffAttributes(graphicAttributes: { [channel: string]: any }) {\n const diffResult = {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n for (const key in graphicAttributes) {\n if (!isEqual(key, finalGraphicAttributes, graphicAttributes) || !has(finalGraphicAttributes, key)) {\n diffResult[key] = graphicAttributes[key];\n }\n }\n return diffResult;\n }\n\n /**\n * tranform the attribute to graphic attribute\n * @param items\n * @param markType In ordinary, markType is equal to mark.markType, but in glyph, markType is different from mark.markType\n * @param markName\n * @param computePoints\n * @returns\n */\n transformElementItems(items: MarkElementItem[], markType: MarkType, computePoints?: boolean): Record<string, any> {\n const item = items[0];\n\n if (!item.nextAttrs || Object.keys(item.nextAttrs).length === 0) {\n return {};\n }\n\n let nextAttrs = item?.nextAttrs;\n\n if (\n items &&\n items.length &&\n isNil(item.nextAttrs?.points) &&\n (computePoints === true || isValidPointsChannel(Object.keys(item.nextAttrs), this.mark.markType)) &&\n isPointsMarkType(markType)\n ) {\n const lastPoints = this.getGraphicAttribute('points', false);\n const lastSegments = this.getGraphicAttribute('segments', false);\n const enableSegments = item.nextAttrs.enableSegments ?? this.getGraphicAttribute('enableSegments', false);\n const itemNextAttrs = items.map(item => item.nextAttrs);\n const isProgressive = this.mark.isProgressive();\n nextAttrs = Object.assign({}, nextAttrs);\n delete nextAttrs.x;\n delete nextAttrs.y;\n\n if (markType === GrammarMarkType.line || markType === GrammarMarkType.area) {\n const linePoints = getLinePoints(items, true, lastPoints, markType === GrammarMarkType.area);\n\n // chartspace新增了配置,用于开启线段解析;渐进渲染状态不支持线段样式\n if (enableSegments && !isProgressive) {\n const points = !linePoints || linePoints.length === 0 ? getLinePointsFromSegments(lastSegments) : linePoints;\n const segments = getLineSegmentConfigs(itemNextAttrs, points, this);\n\n if (segments) {\n nextAttrs.segments = segments;\n nextAttrs.points = null;\n } else {\n nextAttrs.segments = null;\n nextAttrs.points = points;\n }\n } else if (isProgressive) {\n nextAttrs.segments = ((this.graphicItem as ILine)?.attribute?.segments ?? []).concat([\n { points: linePoints }\n ]);\n } else {\n nextAttrs.points = linePoints;\n nextAttrs.segments = null;\n }\n } else if (markType === GrammarMarkType.largeRects) {\n nextAttrs.points = getLargeRectsPoints(items, true, lastPoints);\n } else if (markType === GrammarMarkType.largeSymbols) {\n nextAttrs.points = getLargeSymbolsPoints(items, true, lastPoints);\n }\n }\n\n return nextAttrs;\n }\n\n protected applyGraphicAttributes(graphicAttributes: any) {\n if (isEmpty(graphicAttributes)) {\n return;\n }\n\n if (this.mark.needAnimate()) {\n // If mark need animate, diff attributes.\n const nextGraphicAttributes = this.diffAttributes(graphicAttributes);\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n Object.keys(nextGraphicAttributes).forEach(channel => {\n prevGraphicAttributes[channel] = this.getGraphicAttribute(channel);\n finalGraphicAttributes[channel] = nextGraphicAttributes[channel];\n });\n this.setNextGraphicAttributes(nextGraphicAttributes);\n this.setPrevGraphicAttributes(prevGraphicAttributes);\n this.setFinalGraphicAttributes(finalGraphicAttributes);\n\n const currentAnimators = this.mark.animate.getElementAnimators(this);\n const animateGraphicAttributes = currentAnimators.reduce((attributes, animator) => {\n return Object.assign(attributes, animator.getEndAttributes());\n }, {});\n const currentGraphicAttributes = Object.assign({}, animateGraphicAttributes, finalGraphicAttributes);\n\n // Apply next attributes to current graphic item immediately.\n // Scene graph tree should be handled like no animation exists in dataflow procedure.\n this.graphicItem.setAttributes(currentGraphicAttributes);\n } else {\n // Otherwise, directly apply all attributes.\n this.graphicItem.setAttributes(graphicAttributes);\n }\n }\n\n getGraphicAttribute(channel: string, prev: boolean = false) {\n if (!this.graphicItem) {\n return undefined;\n }\n\n if (prev) {\n let value: any;\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n if (!isNil((value = get(prevGraphicAttributes, channel)))) {\n return value;\n }\n }\n\n // get attribute before transformed\n const trans = this.mark.getAttributeTransforms();\n let getKey: string[] = [channel];\n if (trans && trans.length) {\n const channelTransform = trans.find(entry => {\n return entry.storedAttrs && entry.channels.includes(channel);\n });\n\n if (channelTransform) {\n getKey = [channelTransform.storedAttrs, channel];\n }\n }\n return get(this.graphicItem?.attribute, getKey);\n }\n\n setGraphicAttribute(channel: string, value: any, final: boolean = true) {\n if (!this.graphicItem) {\n return;\n }\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n if (final && finalGraphicAttributes) {\n finalGraphicAttributes[channel] = value;\n }\n if (prevGraphicAttributes && !has(prevGraphicAttributes, channel)) {\n prevGraphicAttributes[channel] = this.graphicItem.attribute[channel];\n }\n\n this.graphicItem.setAttribute(channel, value);\n }\n\n setGraphicAttributes(attributes: { [channel: string]: any }, final: boolean = true) {\n if (!this.graphicItem) {\n return;\n }\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n Object.keys(attributes).forEach(key => {\n if (finalGraphicAttributes && final) {\n finalGraphicAttributes[key] = attributes[key];\n }\n if (prevGraphicAttributes && !has(prevGraphicAttributes, key)) {\n prevGraphicAttributes[key] = this.graphicItem.attribute[key];\n }\n });\n\n this.graphicItem.setAttributes(attributes);\n }\n\n /**\n * 获取 vRender 已变更的视觉通道属性,只应当由 VGrammar 中 调用\n * @returns 视觉通道键值对\n */\n getFinalGraphicAttributes() {\n return (this.graphicItem as any).finalAttrs;\n }\n\n protected setFinalGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).finalAttrs = attributes;\n }\n\n /**\n * 获取 vRender 变更前的视觉通道属性,只应当由 VGrammar 调用\n * @returns 视觉通道键值对\n */\n getPrevGraphicAttributes() {\n return (this.graphicItem as any).prevAttrs;\n }\n\n protected setPrevGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).prevAttrs = attributes;\n }\n\n /**\n * 获取 vRender 在单次 dataflow 中变更的视觉通道属性,只应当由 VGrammar 调用\n * @returns 视觉通道键值对\n */\n getNextGraphicAttributes() {\n return (this.graphicItem as any).nextAttrs;\n }\n\n protected setNextGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).nextAttrs = attributes;\n }\n\n clearChangedGraphicAttributes() {\n if (this.graphicItem) {\n this.setPrevGraphicAttributes({});\n this.setNextGraphicAttributes({});\n }\n }\n\n clearGraphicAttributes() {\n if (this.graphicItem) {\n this.setPrevGraphicAttributes({});\n this.setNextGraphicAttributes({});\n this.setFinalGraphicAttributes({});\n }\n }\n\n remove() {\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n this.graphicItem = null;\n }\n }\n\n release() {\n this.removeGraphicItem();\n this.mark = null;\n this.data = null;\n this.items = null;\n }\n /**\n * hack support for transform & encode logic. DO NOT USE.\n */\n getItemAttribute(channel?: string) {\n if (!this.items?.length) {\n return;\n }\n\n if (this.mark.isCollectionMark()) {\n return isNil(channel)\n ? this.items.map(item => item.nextAttrs)\n : this.items.map(item => item.nextAttrs?.[channel]);\n }\n\n return isNil(channel) ? this.items[0].nextAttrs : this.items[0].nextAttrs?.[channel];\n }\n setItemAttributes(attributes: { [channel: string]: any } | any[]) {\n if (!this.items?.length) {\n return;\n }\n\n if (this.mark.isCollectionMark()) {\n if (isArray(attributes)) {\n this.items.forEach((item, index) => {\n Object.assign(item.nextAttrs, attributes[index]);\n });\n }\n } else {\n Object.assign(this.items[0].nextAttrs, attributes);\n }\n }\n /**\n * hack support for transform & encode logic. DO NOT USE.\n */\n getItem() {\n return this.mark.isCollectionMark() ? this.items ?? [] : this.items?.[0];\n }\n getDatum() {\n return this.mark.isCollectionMark() ? this.data ?? [] : this.data?.[0];\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/graph/element.ts"],"names":[],"mappings":"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","file":"element.js","sourcesContent":["import type { IPointLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport {\n array,\n has,\n isBoolean,\n isNil,\n isFunction,\n isString,\n isArray,\n get,\n isEmpty,\n isEqual as isObjEqual\n} from '@visactor/vutils';\nimport { isEqual } from '@visactor/vgrammar-util';\nimport type { IBaseCoordinate } from '@visactor/vgrammar-coordinate';\nimport { BridgeElementKey } from './constants';\nimport { DiffState, HOOK_EVENT, GrammarMarkType, BuiltInEncodeNames } from './enums';\nimport { invokeEncoderToItems } from './mark/encode';\nimport { removeGraphicItem } from './util/graphic';\nimport { transformAttributes } from './attributes/transform';\nimport {\n getLargeRectsPoints,\n getLargeSymbolsPoints,\n getLinePoints,\n isValidPointsChannel,\n isPointsMarkType\n} from './attributes/helpers';\nimport { getLineSegmentConfigs, getLinePointsFromSegments } from './attributes/line';\nimport type {\n BaseEncodeSpec,\n BaseSignleEncodeSpec,\n IElement,\n IMark,\n IMarkConfig,\n MarkElementItem,\n MarkFunctionType,\n MarkKeySpec,\n MarkSpec,\n MarkType,\n StateProxyEncodeSpec\n} from '../types';\nimport type { IGraphic, ILine, IGraphicAttribute } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { CustomPath2D } from '@visactor/vrender-core';\nimport { invokeFunctionType, parseField } from '../parse/util';\n\nexport class Element implements IElement {\n mark: IMark;\n\n key: string;\n groupKey?: string;\n data: any[] = null;\n\n states: string[] = [];\n\n diffState: DiffState = DiffState.enter;\n // Element should be reserved as long as it need to animate\n isReserved: boolean = false;\n\n runtimeStatesEncoder: BaseEncodeSpec = null;\n\n protected graphicItem: IGraphic;\n\n // hack before vRender refactoring\n items: MarkElementItem[] = [];\n\n constructor(mark: IMark) {\n this.mark = mark;\n }\n\n initGraphicItem(attributes: any = {}) {\n if (this.graphicItem) {\n return;\n }\n // 统一读取mark中是否可交互的配置\n const attrTtansforms = this.mark.getAttributeTransforms();\n\n this.graphicItem = this.mark.addGraphicItem(attrTtansforms ? {} : attributes, this.groupKey);\n\n if (!this.graphicItem) {\n return;\n }\n // 统一读取mark中是否可交互的配置\n this.graphicItem[BridgeElementKey] = this;\n\n if (attrTtansforms) {\n this.graphicItem.onBeforeAttributeUpdate = (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const graphicAttributes = transformAttributes(attrTtansforms, attributes, this);\n return graphicAttributes;\n };\n this.graphicItem.setAttributes(attributes);\n }\n\n // transform initial attributes\n\n this.clearGraphicAttributes();\n if (this.mark.needAnimate()) {\n this.setPrevGraphicAttributes({});\n this.setNextGraphicAttributes(attributes);\n this.setFinalGraphicAttributes(attributes);\n }\n }\n\n updateGraphicItem(config: IMarkConfig) {\n if (!this.graphicItem) {\n return;\n }\n\n if (!isNil(config.clip)) {\n this.graphicItem.setAttribute('clip', config.clip);\n }\n if (!isNil(config.interactive)) {\n this.graphicItem.setAttribute('pickable', config.interactive);\n }\n if (!isNil(config.zIndex)) {\n this.graphicItem.setAttribute('zIndex', config.zIndex);\n }\n if (this.diffState === DiffState.exit) {\n (this.graphicItem as any).releaseStatus = 'willRelease';\n } else {\n (this.graphicItem as any).releaseStatus = undefined;\n }\n\n const stateAnimation = this.mark.animate.getAnimationConfigs('state');\n if (stateAnimation.length !== 0) {\n (this.graphicItem as any).stateAnimateConfig = stateAnimation[0].originConfig;\n }\n }\n\n getGraphicItem() {\n return this.graphicItem;\n }\n\n removeGraphicItem() {\n // stop all animation when releasing including normal animation & morphing animation\n if (this.graphicItem) {\n this.graphicItem.animates?.forEach?.(animate => animate.stop());\n }\n\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n this.graphicItem[BridgeElementKey] = null;\n this.graphicItem = null;\n }\n }\n\n resetGraphicItem() {\n if (this.graphicItem) {\n this.graphicItem = null;\n }\n }\n\n getBounds() {\n // FIXME: 没有更新 bounds 时拿到的 bound 可能为 null\n return this.graphicItem?.AABBBounds;\n }\n\n getStates() {\n return this.states.slice();\n }\n\n updateData(groupKey: string | null, data: any[], key: MarkKeySpec) {\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_UPDATE_DATA, { groupKey, data, key }, this);\n this.data = data;\n const keyGetter = parseField(key);\n this.items = data.map(datum => {\n const key = keyGetter(datum);\n const item = {\n datum,\n key,\n view: this.mark.view,\n nextAttrs: {}\n };\n\n return item;\n });\n\n this.groupKey = groupKey;\n this.key = this.mark.isCollectionMark() ? groupKey : this.items?.[0].key;\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_UPDATE_DATA, { groupKey, data, key }, this);\n return this.items;\n }\n\n state(markState: MarkFunctionType<string | string[]>, parameters?: any) {\n const isCollectionMark = this.mark.isCollectionMark();\n\n const prevStateValues = this.states;\n const newStateValues = array(invokeFunctionType(markState, parameters, this.getDatum(), this));\n const stateSort = this.mark.getSpec()?.stateSort;\n\n if (stateSort) {\n stateSort.sort(stateSort);\n }\n\n const isStateChanged =\n newStateValues.length !== prevStateValues.length ||\n newStateValues.some((newState: string, index: number) => newState !== prevStateValues[index]);\n this.states = newStateValues;\n\n // early logic didn't handle collection mark, only update signal mark state for now\n if (!isCollectionMark && isStateChanged && this.diffState === DiffState.unChange) {\n this.diffState = DiffState.update;\n }\n }\n\n encodeGraphic(attrs?: any) {\n this.coordinateTransformEncode(this.items);\n\n const graphicAttributes = this.transformElementItems(this.items, this.mark.markType);\n\n if (attrs) {\n Object.assign(graphicAttributes, attrs);\n }\n\n if (!this.graphicItem) {\n this.initGraphicItem(graphicAttributes);\n } else {\n this.graphicItem.clearStates();\n // 更新数据流后,states计算不缓存\n this.graphicItem.states = {};\n this.graphicItem.stateProxy = null;\n\n this.applyGraphicAttributes(graphicAttributes);\n }\n\n if ((this.diffState === DiffState.enter || this.diffState === DiffState.update) && this.states.length) {\n this.useStates(this.states);\n }\n\n if (this.mark.markType === GrammarMarkType.shape) {\n // FIXME: shape需要拿到原始数据进行编码,暂时把数据绑定到graphicItem上,看后续graphicItem是否需要支持数据绑定\n (this.graphicItem as any).datum = this.items[0].datum;\n }\n\n // clear item attributes\n this.items.forEach(item => {\n item.nextAttrs = {};\n });\n this._setCutomizedShape();\n }\n\n private _setCutomizedShape() {\n if (!this.graphicItem) {\n return;\n }\n const setCustomizedShape = this.mark.getSpec()?.setCustomizedShape;\n\n if (!setCustomizedShape) {\n return;\n }\n\n this.graphicItem.pathProxy = (attrs: Partial<IGraphicAttribute>) => {\n return setCustomizedShape(this.data, attrs, new CustomPath2D());\n };\n }\n\n encodeItems(items: MarkElementItem[], encoders: BaseEncodeSpec, isReentered: boolean = false, parameters?: any) {\n const isCollectionMark = this.mark.isCollectionMark();\n // marshall encoder functions\n const updateEncoder = encoders[BuiltInEncodeNames.update];\n const enterEncoder = encoders[BuiltInEncodeNames.enter];\n const exitEncoder = encoders[BuiltInEncodeNames.exit];\n const onlyFullEncodeFirst = this.mark.isLargeMode() || (isCollectionMark && !this.mark.getSpec().enableSegments);\n\n if (this.diffState === DiffState.enter) {\n if (enterEncoder) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n if (updateEncoder) {\n invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst);\n }\n } else if (this.diffState === DiffState.update) {\n // if mark is reentered or mark is collection type, evaluate enter encode\n if ((isCollectionMark && enterEncoder) || isReentered) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n if (updateEncoder) {\n invokeEncoderToItems(this, items, updateEncoder, parameters, onlyFullEncodeFirst);\n }\n } else if (this.diffState === DiffState.exit && exitEncoder) {\n // if mark is reentered, evaluate enter encode\n if (isReentered) {\n invokeEncoderToItems(this, items, enterEncoder, parameters, onlyFullEncodeFirst);\n }\n invokeEncoderToItems(this, items, exitEncoder, parameters, onlyFullEncodeFirst);\n }\n }\n\n protected coordinateTransformEncode(items: MarkElementItem[]) {\n if (!this.mark.coord || this.mark.markType === 'arc' || this.mark.disableCoordinateTransform === true) {\n return;\n }\n const coord = this.mark.coord.output() as IBaseCoordinate;\n\n items.forEach(item => {\n const nextAttrs = item.nextAttrs;\n const convertedPoint: IPointLike = coord.convert(nextAttrs);\n Object.assign(nextAttrs, convertedPoint);\n });\n }\n\n clearStates(hasAnimation?: boolean) {\n const stateAnimationEnable = isBoolean(hasAnimation)\n ? hasAnimation\n : this.mark.animate.getAnimationConfigs('state').length !== 0;\n\n this.states = [];\n\n if (this.graphicItem) {\n this.graphicItem.clearStates(stateAnimationEnable);\n }\n\n if (this.runtimeStatesEncoder) {\n this.runtimeStatesEncoder = {};\n }\n }\n\n private _updateRuntimeStates(state: string, attrs: any) {\n if (!this.runtimeStatesEncoder) {\n this.runtimeStatesEncoder = {};\n }\n\n this.runtimeStatesEncoder[state] = attrs;\n }\n\n hasState(state: string) {\n return this.states && this.states.includes(state);\n }\n\n addState(state: string | string[], attrs?: BaseSignleEncodeSpec) {\n const states = array(state);\n const nextStates = states.reduce((nextStates: string[], state: string) => {\n if (!nextStates.includes(state)) {\n nextStates.push(state);\n }\n return nextStates;\n }, this.states.slice());\n\n const isRuntimeStateUpdate = attrs && isString(state) && !isObjEqual(attrs, this.runtimeStatesEncoder?.[state]);\n if (isRuntimeStateUpdate) {\n this._updateRuntimeStates(state, attrs);\n }\n\n if (nextStates.length === this.states.length) {\n if (isRuntimeStateUpdate && this.graphicItem) {\n this.graphicItem.clearStates();\n this.useStates(nextStates);\n }\n\n return;\n }\n\n this.useStates(nextStates);\n }\n\n removeState(state: string | string[]) {\n const states = array(state);\n const nextStates = this.states.filter(state => !states.includes(state));\n if (nextStates.length === this.states.length) {\n return;\n }\n\n if (this.runtimeStatesEncoder) {\n states.forEach(state => {\n this.runtimeStatesEncoder[state] = null;\n });\n }\n this.useStates(nextStates);\n }\n\n protected getStateAttrs = (stateName: string, nextStates: string[]) => {\n const isRuntimeState = !isNil(this.runtimeStatesEncoder?.[stateName]);\n const encoder = isRuntimeState\n ? this.runtimeStatesEncoder[stateName]\n : (this.mark.getSpec() as MarkSpec).encode?.[stateName];\n\n if (!encoder) {\n return {};\n }\n\n if (isFunction(encoder)) {\n return (encoder as StateProxyEncodeSpec)(this.getDatum(), this, stateName, nextStates);\n }\n\n if (!isRuntimeState && this.graphicItem.states?.[stateName]) {\n return this.graphicItem.states[stateName];\n }\n\n const stateItems = this.items.map(item => Object.assign({}, item, { nextAttrs: {} }));\n // collection图元,暂时不支持在state更新中,支持更新points更新\n invokeEncoderToItems(this, stateItems, encoder, (this.mark as any).parameters());\n\n const graphicAttributes = this.transformElementItems(stateItems, this.mark.markType);\n\n if (!this.graphicItem.states) {\n this.graphicItem.states = { [stateName]: graphicAttributes };\n } else if (!this.graphicItem.states[stateName]) {\n this.graphicItem.states[stateName] = graphicAttributes;\n }\n\n return graphicAttributes;\n };\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!this.graphicItem) {\n return;\n }\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_STATE, { states }, this);\n\n this.states = states.slice();\n const stateSort = this.mark.getSpec()?.stateSort;\n\n if (stateSort) {\n this.states.sort(stateSort);\n }\n\n const stateAnimationEnable = isBoolean(hasAnimation)\n ? hasAnimation\n : this.mark.animate.getAnimationConfigs('state').length !== 0;\n\n this.graphicItem.stateProxy = this.getStateAttrs;\n this.graphicItem.useStates(this.states, stateAnimationEnable);\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_STATE, { states }, this);\n }\n\n protected diffAttributes(graphicAttributes: { [channel: string]: any }) {\n const diffResult = {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n for (const key in graphicAttributes) {\n if (!isEqual(key, finalGraphicAttributes, graphicAttributes) || !has(finalGraphicAttributes, key)) {\n diffResult[key] = graphicAttributes[key];\n }\n }\n return diffResult;\n }\n\n /**\n * tranform the attribute to graphic attribute\n * @param items\n * @param markType In ordinary, markType is equal to mark.markType, but in glyph, markType is different from mark.markType\n * @param markName\n * @param computePoints\n * @returns\n */\n transformElementItems(items: MarkElementItem[], markType: MarkType, computePoints?: boolean): Record<string, any> {\n const item = items[0];\n\n if (!item.nextAttrs || Object.keys(item.nextAttrs).length === 0) {\n return {};\n }\n\n let nextAttrs = item?.nextAttrs;\n\n if (\n items &&\n items.length &&\n isNil(item.nextAttrs?.points) &&\n (computePoints === true || isValidPointsChannel(Object.keys(item.nextAttrs), this.mark.markType)) &&\n isPointsMarkType(markType)\n ) {\n const lastPoints = this.getGraphicAttribute('points', false);\n const lastSegments = this.getGraphicAttribute('segments', false);\n const enableSegments = this.mark.getSpec().enableSegments;\n const itemNextAttrs = items.map(item => item.nextAttrs);\n const isProgressive = this.mark.isProgressive();\n nextAttrs = Object.assign({}, nextAttrs);\n delete nextAttrs.x;\n delete nextAttrs.y;\n\n if (markType === GrammarMarkType.line || markType === GrammarMarkType.area) {\n const linePoints = getLinePoints(items, true, lastPoints, markType === GrammarMarkType.area);\n\n // chartspace新增了配置,用于开启线段解析;渐进渲染状态不支持线段样式\n if (enableSegments && !isProgressive) {\n const points = !linePoints || linePoints.length === 0 ? getLinePointsFromSegments(lastSegments) : linePoints;\n const segments = getLineSegmentConfigs(itemNextAttrs, points, this);\n\n if (segments) {\n nextAttrs.segments = segments;\n nextAttrs.points = null;\n } else {\n nextAttrs.segments = null;\n nextAttrs.points = points;\n }\n } else if (isProgressive) {\n nextAttrs.segments = ((this.graphicItem as ILine)?.attribute?.segments ?? []).concat([\n { points: linePoints }\n ]);\n } else {\n nextAttrs.points = linePoints;\n nextAttrs.segments = null;\n }\n } else if (markType === GrammarMarkType.largeRects) {\n nextAttrs.points = getLargeRectsPoints(items, true, lastPoints);\n } else if (markType === GrammarMarkType.largeSymbols) {\n nextAttrs.points = getLargeSymbolsPoints(items, true, lastPoints);\n }\n }\n\n return nextAttrs;\n }\n\n protected applyGraphicAttributes(graphicAttributes: any) {\n if (isEmpty(graphicAttributes)) {\n return;\n }\n\n if (this.mark.needAnimate()) {\n // If mark need animate, diff attributes.\n const nextGraphicAttributes = this.diffAttributes(graphicAttributes);\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n Object.keys(nextGraphicAttributes).forEach(channel => {\n prevGraphicAttributes[channel] = this.getGraphicAttribute(channel);\n finalGraphicAttributes[channel] = nextGraphicAttributes[channel];\n });\n this.setNextGraphicAttributes(nextGraphicAttributes);\n this.setPrevGraphicAttributes(prevGraphicAttributes);\n this.setFinalGraphicAttributes(finalGraphicAttributes);\n\n const currentAnimators = this.mark.animate.getElementAnimators(this);\n const animateGraphicAttributes = currentAnimators.reduce((attributes, animator) => {\n return Object.assign(attributes, animator.getEndAttributes());\n }, {});\n const currentGraphicAttributes = Object.assign({}, animateGraphicAttributes, finalGraphicAttributes);\n\n // Apply next attributes to current graphic item immediately.\n // Scene graph tree should be handled like no animation exists in dataflow procedure.\n this.graphicItem.setAttributes(currentGraphicAttributes);\n } else {\n // Otherwise, directly apply all attributes.\n this.graphicItem.setAttributes(graphicAttributes);\n }\n }\n\n getGraphicAttribute(channel: string, prev: boolean = false) {\n if (!this.graphicItem) {\n return undefined;\n }\n\n if (prev) {\n let value: any;\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n if (!isNil((value = get(prevGraphicAttributes, channel)))) {\n return value;\n }\n }\n\n // get attribute before transformed\n const trans = this.mark.getAttributeTransforms();\n let getKey: string[] = [channel];\n if (trans && trans.length) {\n const channelTransform = trans.find(entry => {\n return entry.storedAttrs && entry.channels.includes(channel);\n });\n\n if (channelTransform) {\n getKey = [channelTransform.storedAttrs, channel];\n }\n }\n return get(this.graphicItem?.attribute, getKey);\n }\n\n setGraphicAttribute(channel: string, value: any, final: boolean = true) {\n if (!this.graphicItem) {\n return;\n }\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n if (final && finalGraphicAttributes) {\n finalGraphicAttributes[channel] = value;\n }\n if (prevGraphicAttributes && !has(prevGraphicAttributes, channel)) {\n prevGraphicAttributes[channel] = this.graphicItem.attribute[channel];\n }\n\n this.graphicItem.setAttribute(channel, value);\n }\n\n setGraphicAttributes(attributes: { [channel: string]: any }, final: boolean = true) {\n if (!this.graphicItem) {\n return;\n }\n const finalGraphicAttributes = this.getFinalGraphicAttributes();\n const prevGraphicAttributes = this.getPrevGraphicAttributes();\n\n Object.keys(attributes).forEach(key => {\n if (finalGraphicAttributes && final) {\n finalGraphicAttributes[key] = attributes[key];\n }\n if (prevGraphicAttributes && !has(prevGraphicAttributes, key)) {\n prevGraphicAttributes[key] = this.graphicItem.attribute[key];\n }\n });\n\n this.graphicItem.setAttributes(attributes);\n }\n\n /**\n * 获取 vRender 已变更的视觉通道属性,只应当由 VGrammar 中 调用\n * @returns 视觉通道键值对\n */\n getFinalGraphicAttributes() {\n return (this.graphicItem as any).finalAttrs;\n }\n\n protected setFinalGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).finalAttrs = attributes;\n }\n\n /**\n * 获取 vRender 变更前的视觉通道属性,只应当由 VGrammar 调用\n * @returns 视觉通道键值对\n */\n getPrevGraphicAttributes() {\n return (this.graphicItem as any).prevAttrs;\n }\n\n protected setPrevGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).prevAttrs = attributes;\n }\n\n /**\n * 获取 vRender 在单次 dataflow 中变更的视觉通道属性,只应当由 VGrammar 调用\n * @returns 视觉通道键值对\n */\n getNextGraphicAttributes() {\n return (this.graphicItem as any).nextAttrs;\n }\n\n protected setNextGraphicAttributes(attributes: { [channel: string]: any }) {\n (this.graphicItem as any).nextAttrs = attributes;\n }\n\n clearChangedGraphicAttributes() {\n if (this.graphicItem) {\n this.setPrevGraphicAttributes({});\n this.setNextGraphicAttributes({});\n }\n }\n\n clearGraphicAttributes() {\n if (this.graphicItem) {\n this.setPrevGraphicAttributes({});\n this.setNextGraphicAttributes({});\n this.setFinalGraphicAttributes({});\n }\n }\n\n remove() {\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n this.graphicItem = null;\n }\n }\n\n release() {\n this.removeGraphicItem();\n this.mark = null;\n this.data = null;\n this.items = null;\n }\n /**\n * hack support for transform & encode logic. DO NOT USE.\n */\n getItemAttribute(channel?: string) {\n if (!this.items?.length) {\n return;\n }\n\n if (this.mark.isCollectionMark()) {\n return isNil(channel)\n ? this.items.map(item => item.nextAttrs)\n : this.items.map(item => item.nextAttrs?.[channel]);\n }\n\n return isNil(channel) ? this.items[0].nextAttrs : this.items[0].nextAttrs?.[channel];\n }\n setItemAttributes(attributes: { [channel: string]: any } | any[]) {\n if (!this.items?.length) {\n return;\n }\n\n if (this.mark.isCollectionMark()) {\n if (isArray(attributes)) {\n this.items.forEach((item, index) => {\n Object.assign(item.nextAttrs, attributes[index]);\n });\n }\n } else {\n Object.assign(this.items[0].nextAttrs, attributes);\n }\n }\n /**\n * hack support for transform & encode logic. DO NOT USE.\n */\n getItem() {\n return this.mark.isCollectionMark() ? this.items ?? [] : this.items?.[0];\n }\n getDatum() {\n return this.mark.isCollectionMark() ? this.data ?? [] : this.data?.[0];\n }\n}\n"]}
@@ -122,11 +122,10 @@ export class GlyphElement extends Element {
122
122
  };
123
123
  }
124
124
  _generateGlyphItems(markType, items, additionalAttributes) {
125
- var _a;
126
- const nextAttrs = null === (_a = items[0]) || void 0 === _a ? void 0 : _a.nextAttrs, glyphItems = items.map((item => Object.assign({}, item, {
125
+ const glyphItems = items.map((item => Object.assign({}, item, {
127
126
  nextAttrs: additionalAttributes
128
127
  })));
129
- return CollectionMarkType.includes(markType) && nextAttrs.enableSegments && glyphItems.forEach(((glyphItem, index) => {
128
+ return CollectionMarkType.includes(markType) && this.mark.getSpec().enableSegments && glyphItems.forEach(((glyphItem, index) => {
130
129
  glyphItem.nextAttrs = Object.assign({}, items[index].nextAttrs, additionalAttributes);
131
130
  })), glyphItems;
132
131
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graph/glyph-element.ts"],"names":[],"mappings":"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","file":"glyph-element.js","sourcesContent":["import { has, isNil, isBoolean, isFunction } from '@visactor/vutils';\nimport { isEqual } from '@visactor/vgrammar-util';\nimport type {\n IGlyphElement,\n IGlyphMark,\n MarkElementItem,\n MarkSpec,\n IGlyphMeta,\n MarkType,\n StateProxyEncodeSpec\n} from '../types';\nimport { cloneTransformAttributes, transformAttributes } from './attributes/transform';\nimport { BridgeElementKey, CollectionMarkType } from './constants';\nimport { DiffState, HOOK_EVENT, GrammarMarkType } from './enums';\nimport { Element } from './element';\nimport { invokeEncoderToItems } from './mark/encode';\nimport type { IGraphicAttribute, IGlyph } from '@visactor/vrender-core';\n\nexport class GlyphElement extends Element implements IGlyphElement {\n declare graphicItem: IGlyph;\n\n declare mark: IGlyphMark;\n protected glyphGraphicItems: { [markName: string]: any };\n\n private glyphMeta: IGlyphMeta;\n\n constructor(mark: IGlyphMark) {\n super(mark);\n this.glyphMeta = this.mark.getGlyphMeta();\n }\n\n getGlyphGraphicItems() {\n return this.glyphGraphicItems;\n }\n\n initGraphicItem(attributes: any = {}) {\n if (this.graphicItem) {\n return;\n }\n\n const attrs = Object.assign({}, attributes);\n this.graphicItem = this.mark.addGraphicItem(attrs, this.groupKey) as IGlyph;\n this.graphicItem[BridgeElementKey] = this;\n this.graphicItem.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(false);\n\n const glyphMarks = this.glyphMeta.getMarks();\n this.glyphGraphicItems = {};\n this.graphicItem.getSubGraphic().forEach((graphic: any) => {\n const markType = glyphMarks[graphic.name];\n this.glyphGraphicItems[graphic.name] = graphic;\n graphic.onBeforeAttributeUpdate = (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const graphicAttributes = transformAttributes(markType, attributes, this, graphic.name);\n return graphicAttributes;\n };\n });\n\n this.clearGraphicAttributes();\n }\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!this.graphicItem) {\n return;\n }\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_STATE, { states }, this);\n\n this.states = states.slice();\n\n const stateAnimationEnable = isBoolean(hasAnimation)\n ? hasAnimation\n : this.mark.animate.getAnimationConfigs('state').length !== 0;\n\n this.graphicItem.glyphStateProxy = this.getStateAttrs;\n this.graphicItem.useStates(this.states, stateAnimationEnable);\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_STATE, { states }, this);\n }\n\n protected getStateAttrs = (stateName: string, nextStates: string[]) => {\n const isRuntimeState = !isNil(this.runtimeStatesEncoder?.[stateName]);\n const encoder = isRuntimeState\n ? this.runtimeStatesEncoder[stateName]\n : (this.mark.getSpec() as MarkSpec).encode?.[stateName];\n\n const glyphStateAttributes = {} as {\n attributes: Partial<IGraphicAttribute>;\n subAttributes: Partial<IGraphicAttribute>[];\n };\n\n if (!encoder) {\n return glyphStateAttributes;\n }\n\n if (isFunction(encoder)) {\n glyphStateAttributes.attributes = (encoder as StateProxyEncodeSpec)(this.getDatum(), this, stateName, nextStates);\n return glyphStateAttributes;\n }\n\n if (!isRuntimeState && this.graphicItem.glyphStates?.[stateName]) {\n return this.graphicItem.glyphStates[stateName];\n }\n\n if (encoder) {\n const item = this.items[0];\n const targetItems = [Object.assign({}, item, { nextAttrs: {} })];\n\n invokeEncoderToItems(this, targetItems, encoder, (this.mark as any).parameters());\n this.coordinateTransformEncode(targetItems);\n\n glyphStateAttributes.attributes = targetItems[0].nextAttrs;\n\n if (!this.graphicItem.glyphStates) {\n this.graphicItem.glyphStates = { [stateName]: glyphStateAttributes };\n } else if (!this.graphicItem.glyphStates[stateName]) {\n this.graphicItem.glyphStates[stateName] = glyphStateAttributes;\n }\n\n return glyphStateAttributes;\n }\n\n return glyphStateAttributes;\n };\n\n encodeGraphic() {\n this.coordinateTransformEncode(this.items);\n const graphicAttributes = this.transformElementItems(this.items, this.mark.markType);\n\n if (!this.graphicItem) {\n this.initGraphicItem();\n }\n\n if (this.diffState === DiffState.enter) {\n // apply default encoder when enter\n this.graphicItem.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(true);\n this.applyGraphicAttributes(graphicAttributes);\n this.graphicItem.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(false);\n } else {\n this.applyGraphicAttributes(graphicAttributes);\n }\n\n if ((this.diffState === DiffState.enter || this.diffState === DiffState.update) && this.states.length) {\n Object.values(this.glyphGraphicItems).forEach(graphicItem => {\n // 更新数据流后,states计算不缓存\n graphicItem.states = {};\n });\n this.useStates(this.states);\n }\n\n // clear item attributes\n this.items.map(item => {\n item.nextAttrs = {};\n });\n }\n\n encodeCustom(nextAttrs?: any): { [markName: string]: any } {\n let customEncodeValues: { [markName: string]: any } = {};\n const channelEncoder = this.glyphMeta.getChannelEncoder();\n const functionEncoder = this.glyphMeta.getFunctionEncoder();\n\n if (functionEncoder) {\n customEncodeValues = functionEncoder.call(\n null,\n Object.assign({}, this.graphicItem?.attribute, nextAttrs),\n this.getDatum(),\n this,\n this.mark.getGlyphConfig()\n );\n }\n if (channelEncoder) {\n // TODO: maybe delete origin encode value?\n let allAttrs: any;\n Object.keys(channelEncoder).forEach(channel => {\n if (!isNil(nextAttrs[channel])) {\n if (!allAttrs) {\n allAttrs = Object.assign({}, this.graphicItem?.attribute, nextAttrs);\n }\n const encodeResult = channelEncoder[channel].call(\n null,\n channel,\n nextAttrs[channel],\n allAttrs,\n this.getDatum(),\n this,\n this.mark.getGlyphConfig()\n );\n Object.keys(encodeResult ?? {}).forEach(markName => {\n customEncodeValues[markName] = Object.assign(customEncodeValues[markName] ?? {}, encodeResult[markName]);\n });\n }\n });\n }\n return customEncodeValues;\n }\n\n private encodeDefault() {\n const defaultEncodeValues: { [markName: string]: any } = {};\n // apply default encode\n if (this.diffState === DiffState.enter && this.glyphMeta.getDefaultEncoder()) {\n const defaultEncodeResult = this.glyphMeta\n .getDefaultEncoder()\n .call(null, this.getDatum(), this, this.mark.getGlyphConfig());\n Object.assign(defaultEncodeValues, defaultEncodeResult);\n }\n return defaultEncodeValues;\n }\n\n private _onGlyphAttributeUpdate(first: boolean = false) {\n return (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const glyphMarks = this.glyphMeta.getMarks();\n\n const graphicAttributes = transformAttributes(this.mark.getAttributeTransforms(), attributes, this);\n\n // apply default encode\n const defaultEncodeValues = first ? this.encodeDefault() : null;\n // apply custom encode\n const customEncodeValues = this.encodeCustom(attributes);\n\n Object.keys(glyphMarks).forEach(markName => {\n const markType = glyphMarks[markName];\n const graphicItem = this.glyphGraphicItems[markName];\n const customAttributes = customEncodeValues?.[markName];\n const additionalAttributes = Object.assign({}, customAttributes);\n if (first) {\n // apply default attributes when visual channel is not set\n const defaultAttributes = defaultEncodeValues?.[markName];\n Object.keys(defaultAttributes ?? {}).forEach(key => {\n if (!has(this.items[0].nextAttrs, key) && !has(additionalAttributes, key)) {\n additionalAttributes[key] = defaultAttributes[key];\n }\n });\n }\n const glyphAttributes = Object.assign({}, cloneTransformAttributes(markType, attributes), additionalAttributes);\n const glyphItems = this._generateGlyphItems(markType, this.items, glyphAttributes);\n this.coordinateTransformEncode(glyphItems);\n const graphicAttributes = this.transformElementItems(glyphItems, markType);\n\n this.applyGlyphGraphicAttributes(graphicAttributes, markName, graphicItem);\n\n if (markType === GrammarMarkType.shape) {\n // FIXME: shape需要拿到原始数据进行编码,暂时把数据绑定到graphicItem上,看后续graphicItem是否需要支持数据绑定\n graphicItem.datum = glyphItems[0].datum;\n }\n });\n\n return graphicAttributes;\n };\n }\n\n private _generateGlyphItems(markType: MarkType, items: MarkElementItem[], additionalAttributes: any) {\n const nextAttrs = items[0]?.nextAttrs;\n const glyphItems = items.map(item => Object.assign({}, item, { nextAttrs: additionalAttributes }));\n\n if ((CollectionMarkType as string[]).includes(markType) && nextAttrs.enableSegments) {\n // segment mark require all items to apply additional attributes\n glyphItems.forEach((glyphItem, index) => {\n glyphItem.nextAttrs = Object.assign({}, items[index].nextAttrs, additionalAttributes);\n });\n }\n\n return glyphItems;\n }\n\n getGraphicAttribute(channel: string, prev: boolean = false, markName?: any) {\n if (!this.graphicItem) {\n return undefined;\n }\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n if (prev && has(prevGraphicAttributes, channel)) {\n return prevGraphicAttributes[channel];\n }\n\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.attribute[channel];\n }\n\n setGraphicAttribute(channel: string, value: any, final: boolean = true, markName?: any) {\n if (!this.graphicItem) {\n return;\n }\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n\n if (final) {\n finalGraphicAttributes[channel] = value;\n }\n if (!has(prevGraphicAttributes, channel)) {\n prevGraphicAttributes[channel] = graphicItem.attribute[channel];\n }\n\n graphicItem.setAttribute(channel, value);\n }\n\n setGraphicAttributes(attributes: { [channel: string]: any }, final: boolean = true, markName?: any) {\n if (!this.graphicItem) {\n return;\n }\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n\n Object.keys(attributes).forEach(key => {\n if (final) {\n finalGraphicAttributes[key] = attributes[key];\n }\n if (!has(prevGraphicAttributes, key)) {\n prevGraphicAttributes[key] = graphicItem.attribute[key];\n }\n });\n\n graphicItem.setAttributes(attributes);\n }\n\n protected diffAttributes(graphicAttributes: { [channel: string]: any }, markName?: string) {\n const diffResult = {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n for (const key in graphicAttributes) {\n if (!isEqual(key, finalGraphicAttributes, graphicAttributes)) {\n diffResult[key] = graphicAttributes[key];\n }\n }\n return diffResult;\n }\n\n protected applyGlyphGraphicAttributes(graphicAttributes: any, markName: string, graphicItem: any): void {\n if (this.mark.needAnimate()) {\n // If mark need animate, diff attributes.\n const nextGraphicAttributes = this.diffAttributes(graphicAttributes, markName);\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n Object.keys(nextGraphicAttributes).forEach(channel => {\n prevGraphicAttributes[channel] = graphicItem.attribute[channel];\n finalGraphicAttributes[channel] = nextGraphicAttributes[channel];\n });\n this.setNextGraphicAttributes(nextGraphicAttributes, markName);\n this.setPrevGraphicAttributes(prevGraphicAttributes, markName);\n this.setFinalGraphicAttributes(finalGraphicAttributes, markName);\n\n // Apply next attributes to current graphic item immediately.\n // Scene graph tree should be handled like no animation exists in dataflow procedure.\n graphicItem.setAttributes(nextGraphicAttributes);\n } else {\n graphicItem.setAttributes(graphicAttributes);\n }\n }\n\n getFinalGraphicAttributes(markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.finalAttrs;\n }\n\n protected setFinalGraphicAttributes(attributes: { [channel: string]: any }, markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n graphicItem.finalAttrs = attributes;\n }\n\n getPrevGraphicAttributes(markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.prevAttrs;\n }\n\n protected setPrevGraphicAttributes(attributes: { [channel: string]: any }, markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n graphicItem.prevAttrs = attributes;\n }\n\n getNextGraphicAttributes(markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.nextAttrs;\n }\n\n protected setNextGraphicAttributes(attributes: { [channel: string]: any }, markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n graphicItem.nextAttrs = attributes;\n }\n\n clearChangedGraphicAttributes() {\n this.setPrevGraphicAttributes({});\n this.setNextGraphicAttributes({});\n Object.keys(this.glyphGraphicItems).forEach(markName => {\n this.setPrevGraphicAttributes({}, markName);\n this.setNextGraphicAttributes({}, markName);\n });\n }\n\n clearGraphicAttributes() {\n this.setPrevGraphicAttributes({});\n this.setNextGraphicAttributes({});\n this.setFinalGraphicAttributes({});\n Object.keys(this.glyphGraphicItems).forEach(markName => {\n this.setPrevGraphicAttributes({}, markName);\n this.setNextGraphicAttributes({}, markName);\n this.setFinalGraphicAttributes({}, markName);\n });\n }\n\n remove() {\n this.glyphGraphicItems = null;\n super.remove();\n }\n\n release() {\n if (this.glyphGraphicItems) {\n Object.values(this.glyphGraphicItems).forEach(graphicItem => {\n graphicItem[BridgeElementKey] = null;\n });\n this.glyphGraphicItems = null;\n }\n super.release();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/graph/glyph-element.ts"],"names":[],"mappings":"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","file":"glyph-element.js","sourcesContent":["import { has, isNil, isBoolean, isFunction } from '@visactor/vutils';\nimport { isEqual } from '@visactor/vgrammar-util';\nimport type {\n IGlyphElement,\n IGlyphMark,\n MarkElementItem,\n MarkSpec,\n IGlyphMeta,\n MarkType,\n StateProxyEncodeSpec\n} from '../types';\nimport { cloneTransformAttributes, transformAttributes } from './attributes/transform';\nimport { BridgeElementKey, CollectionMarkType } from './constants';\nimport { DiffState, HOOK_EVENT, GrammarMarkType } from './enums';\nimport { Element } from './element';\nimport { invokeEncoderToItems } from './mark/encode';\nimport type { IGraphicAttribute, IGlyph } from '@visactor/vrender-core';\n\nexport class GlyphElement extends Element implements IGlyphElement {\n declare graphicItem: IGlyph;\n\n declare mark: IGlyphMark;\n protected glyphGraphicItems: { [markName: string]: any };\n\n private glyphMeta: IGlyphMeta;\n\n constructor(mark: IGlyphMark) {\n super(mark);\n this.glyphMeta = this.mark.getGlyphMeta();\n }\n\n getGlyphGraphicItems() {\n return this.glyphGraphicItems;\n }\n\n initGraphicItem(attributes: any = {}) {\n if (this.graphicItem) {\n return;\n }\n\n const attrs = Object.assign({}, attributes);\n this.graphicItem = this.mark.addGraphicItem(attrs, this.groupKey) as IGlyph;\n this.graphicItem[BridgeElementKey] = this;\n this.graphicItem.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(false);\n\n const glyphMarks = this.glyphMeta.getMarks();\n this.glyphGraphicItems = {};\n this.graphicItem.getSubGraphic().forEach((graphic: any) => {\n const markType = glyphMarks[graphic.name];\n this.glyphGraphicItems[graphic.name] = graphic;\n graphic.onBeforeAttributeUpdate = (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const graphicAttributes = transformAttributes(markType, attributes, this, graphic.name);\n return graphicAttributes;\n };\n });\n\n this.clearGraphicAttributes();\n }\n\n useStates(states: string[], hasAnimation?: boolean) {\n if (!this.graphicItem) {\n return;\n }\n this.mark.emit(HOOK_EVENT.BEFORE_ELEMENT_STATE, { states }, this);\n\n this.states = states.slice();\n\n const stateAnimationEnable = isBoolean(hasAnimation)\n ? hasAnimation\n : this.mark.animate.getAnimationConfigs('state').length !== 0;\n\n this.graphicItem.glyphStateProxy = this.getStateAttrs;\n this.graphicItem.useStates(this.states, stateAnimationEnable);\n\n this.mark.emit(HOOK_EVENT.AFTER_ELEMENT_STATE, { states }, this);\n }\n\n protected getStateAttrs = (stateName: string, nextStates: string[]) => {\n const isRuntimeState = !isNil(this.runtimeStatesEncoder?.[stateName]);\n const encoder = isRuntimeState\n ? this.runtimeStatesEncoder[stateName]\n : (this.mark.getSpec() as MarkSpec).encode?.[stateName];\n\n const glyphStateAttributes = {} as {\n attributes: Partial<IGraphicAttribute>;\n subAttributes: Partial<IGraphicAttribute>[];\n };\n\n if (!encoder) {\n return glyphStateAttributes;\n }\n\n if (isFunction(encoder)) {\n glyphStateAttributes.attributes = (encoder as StateProxyEncodeSpec)(this.getDatum(), this, stateName, nextStates);\n return glyphStateAttributes;\n }\n\n if (!isRuntimeState && this.graphicItem.glyphStates?.[stateName]) {\n return this.graphicItem.glyphStates[stateName];\n }\n\n if (encoder) {\n const item = this.items[0];\n const targetItems = [Object.assign({}, item, { nextAttrs: {} })];\n\n invokeEncoderToItems(this, targetItems, encoder, (this.mark as any).parameters());\n this.coordinateTransformEncode(targetItems);\n\n glyphStateAttributes.attributes = targetItems[0].nextAttrs;\n\n if (!this.graphicItem.glyphStates) {\n this.graphicItem.glyphStates = { [stateName]: glyphStateAttributes };\n } else if (!this.graphicItem.glyphStates[stateName]) {\n this.graphicItem.glyphStates[stateName] = glyphStateAttributes;\n }\n\n return glyphStateAttributes;\n }\n\n return glyphStateAttributes;\n };\n\n encodeGraphic() {\n this.coordinateTransformEncode(this.items);\n const graphicAttributes = this.transformElementItems(this.items, this.mark.markType);\n\n if (!this.graphicItem) {\n this.initGraphicItem();\n }\n\n if (this.diffState === DiffState.enter) {\n // apply default encoder when enter\n this.graphicItem.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(true);\n this.applyGraphicAttributes(graphicAttributes);\n this.graphicItem.onBeforeAttributeUpdate = this._onGlyphAttributeUpdate(false);\n } else {\n this.applyGraphicAttributes(graphicAttributes);\n }\n\n if ((this.diffState === DiffState.enter || this.diffState === DiffState.update) && this.states.length) {\n Object.values(this.glyphGraphicItems).forEach(graphicItem => {\n // 更新数据流后,states计算不缓存\n graphicItem.states = {};\n });\n this.useStates(this.states);\n }\n\n // clear item attributes\n this.items.map(item => {\n item.nextAttrs = {};\n });\n }\n\n encodeCustom(nextAttrs?: any): { [markName: string]: any } {\n let customEncodeValues: { [markName: string]: any } = {};\n const channelEncoder = this.glyphMeta.getChannelEncoder();\n const functionEncoder = this.glyphMeta.getFunctionEncoder();\n\n if (functionEncoder) {\n customEncodeValues = functionEncoder.call(\n null,\n Object.assign({}, this.graphicItem?.attribute, nextAttrs),\n this.getDatum(),\n this,\n this.mark.getGlyphConfig()\n );\n }\n if (channelEncoder) {\n // TODO: maybe delete origin encode value?\n let allAttrs: any;\n Object.keys(channelEncoder).forEach(channel => {\n if (!isNil(nextAttrs[channel])) {\n if (!allAttrs) {\n allAttrs = Object.assign({}, this.graphicItem?.attribute, nextAttrs);\n }\n const encodeResult = channelEncoder[channel].call(\n null,\n channel,\n nextAttrs[channel],\n allAttrs,\n this.getDatum(),\n this,\n this.mark.getGlyphConfig()\n );\n Object.keys(encodeResult ?? {}).forEach(markName => {\n customEncodeValues[markName] = Object.assign(customEncodeValues[markName] ?? {}, encodeResult[markName]);\n });\n }\n });\n }\n return customEncodeValues;\n }\n\n private encodeDefault() {\n const defaultEncodeValues: { [markName: string]: any } = {};\n // apply default encode\n if (this.diffState === DiffState.enter && this.glyphMeta.getDefaultEncoder()) {\n const defaultEncodeResult = this.glyphMeta\n .getDefaultEncoder()\n .call(null, this.getDatum(), this, this.mark.getGlyphConfig());\n Object.assign(defaultEncodeValues, defaultEncodeResult);\n }\n return defaultEncodeValues;\n }\n\n private _onGlyphAttributeUpdate(first: boolean = false) {\n return (attributes: any) => {\n // mark might be released\n if (!this.mark) {\n return attributes;\n }\n const glyphMarks = this.glyphMeta.getMarks();\n\n const graphicAttributes = transformAttributes(this.mark.getAttributeTransforms(), attributes, this);\n\n // apply default encode\n const defaultEncodeValues = first ? this.encodeDefault() : null;\n // apply custom encode\n const customEncodeValues = this.encodeCustom(attributes);\n\n Object.keys(glyphMarks).forEach(markName => {\n const markType = glyphMarks[markName];\n const graphicItem = this.glyphGraphicItems[markName];\n const customAttributes = customEncodeValues?.[markName];\n const additionalAttributes = Object.assign({}, customAttributes);\n if (first) {\n // apply default attributes when visual channel is not set\n const defaultAttributes = defaultEncodeValues?.[markName];\n Object.keys(defaultAttributes ?? {}).forEach(key => {\n if (!has(this.items[0].nextAttrs, key) && !has(additionalAttributes, key)) {\n additionalAttributes[key] = defaultAttributes[key];\n }\n });\n }\n const glyphAttributes = Object.assign({}, cloneTransformAttributes(markType, attributes), additionalAttributes);\n const glyphItems = this._generateGlyphItems(markType, this.items, glyphAttributes);\n this.coordinateTransformEncode(glyphItems);\n const graphicAttributes = this.transformElementItems(glyphItems, markType);\n\n this.applyGlyphGraphicAttributes(graphicAttributes, markName, graphicItem);\n\n if (markType === GrammarMarkType.shape) {\n // FIXME: shape需要拿到原始数据进行编码,暂时把数据绑定到graphicItem上,看后续graphicItem是否需要支持数据绑定\n graphicItem.datum = glyphItems[0].datum;\n }\n });\n\n return graphicAttributes;\n };\n }\n\n private _generateGlyphItems(markType: MarkType, items: MarkElementItem[], additionalAttributes: any) {\n const glyphItems = items.map(item => Object.assign({}, item, { nextAttrs: additionalAttributes }));\n\n if ((CollectionMarkType as string[]).includes(markType) && this.mark.getSpec().enableSegments) {\n // segment mark require all items to apply additional attributes\n glyphItems.forEach((glyphItem, index) => {\n glyphItem.nextAttrs = Object.assign({}, items[index].nextAttrs, additionalAttributes);\n });\n }\n\n return glyphItems;\n }\n\n getGraphicAttribute(channel: string, prev: boolean = false, markName?: any) {\n if (!this.graphicItem) {\n return undefined;\n }\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n if (prev && has(prevGraphicAttributes, channel)) {\n return prevGraphicAttributes[channel];\n }\n\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.attribute[channel];\n }\n\n setGraphicAttribute(channel: string, value: any, final: boolean = true, markName?: any) {\n if (!this.graphicItem) {\n return;\n }\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n\n if (final) {\n finalGraphicAttributes[channel] = value;\n }\n if (!has(prevGraphicAttributes, channel)) {\n prevGraphicAttributes[channel] = graphicItem.attribute[channel];\n }\n\n graphicItem.setAttribute(channel, value);\n }\n\n setGraphicAttributes(attributes: { [channel: string]: any }, final: boolean = true, markName?: any) {\n if (!this.graphicItem) {\n return;\n }\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n\n Object.keys(attributes).forEach(key => {\n if (final) {\n finalGraphicAttributes[key] = attributes[key];\n }\n if (!has(prevGraphicAttributes, key)) {\n prevGraphicAttributes[key] = graphicItem.attribute[key];\n }\n });\n\n graphicItem.setAttributes(attributes);\n }\n\n protected diffAttributes(graphicAttributes: { [channel: string]: any }, markName?: string) {\n const diffResult = {};\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n for (const key in graphicAttributes) {\n if (!isEqual(key, finalGraphicAttributes, graphicAttributes)) {\n diffResult[key] = graphicAttributes[key];\n }\n }\n return diffResult;\n }\n\n protected applyGlyphGraphicAttributes(graphicAttributes: any, markName: string, graphicItem: any): void {\n if (this.mark.needAnimate()) {\n // If mark need animate, diff attributes.\n const nextGraphicAttributes = this.diffAttributes(graphicAttributes, markName);\n const prevGraphicAttributes = this.getPrevGraphicAttributes(markName);\n const finalGraphicAttributes = this.getFinalGraphicAttributes(markName);\n Object.keys(nextGraphicAttributes).forEach(channel => {\n prevGraphicAttributes[channel] = graphicItem.attribute[channel];\n finalGraphicAttributes[channel] = nextGraphicAttributes[channel];\n });\n this.setNextGraphicAttributes(nextGraphicAttributes, markName);\n this.setPrevGraphicAttributes(prevGraphicAttributes, markName);\n this.setFinalGraphicAttributes(finalGraphicAttributes, markName);\n\n // Apply next attributes to current graphic item immediately.\n // Scene graph tree should be handled like no animation exists in dataflow procedure.\n graphicItem.setAttributes(nextGraphicAttributes);\n } else {\n graphicItem.setAttributes(graphicAttributes);\n }\n }\n\n getFinalGraphicAttributes(markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.finalAttrs;\n }\n\n protected setFinalGraphicAttributes(attributes: { [channel: string]: any }, markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n graphicItem.finalAttrs = attributes;\n }\n\n getPrevGraphicAttributes(markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.prevAttrs;\n }\n\n protected setPrevGraphicAttributes(attributes: { [channel: string]: any }, markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n graphicItem.prevAttrs = attributes;\n }\n\n getNextGraphicAttributes(markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n return graphicItem.nextAttrs;\n }\n\n protected setNextGraphicAttributes(attributes: { [channel: string]: any }, markName?: string) {\n const graphicItem = markName ? this.glyphGraphicItems[markName] : this.graphicItem;\n graphicItem.nextAttrs = attributes;\n }\n\n clearChangedGraphicAttributes() {\n this.setPrevGraphicAttributes({});\n this.setNextGraphicAttributes({});\n Object.keys(this.glyphGraphicItems).forEach(markName => {\n this.setPrevGraphicAttributes({}, markName);\n this.setNextGraphicAttributes({}, markName);\n });\n }\n\n clearGraphicAttributes() {\n this.setPrevGraphicAttributes({});\n this.setNextGraphicAttributes({});\n this.setFinalGraphicAttributes({});\n Object.keys(this.glyphGraphicItems).forEach(markName => {\n this.setPrevGraphicAttributes({}, markName);\n this.setNextGraphicAttributes({}, markName);\n this.setFinalGraphicAttributes({}, markName);\n });\n }\n\n remove() {\n this.glyphGraphicItems = null;\n super.remove();\n }\n\n release() {\n if (this.glyphGraphicItems) {\n Object.values(this.glyphGraphicItems).forEach(graphicItem => {\n graphicItem[BridgeElementKey] = null;\n });\n this.glyphGraphicItems = null;\n }\n super.release();\n }\n}\n"]}
package/es/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare const version = "0.10.0-alpha.1";
1
+ export declare const version = "0.10.0-alpha.2";
2
2
  export * from './graph';
3
3
  export * from './interactions';
4
4
  export { View } from './view';
package/es/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export const version = "0.10.0-alpha.1";
1
+ export const version = "0.10.0-alpha.2";
2
2
 
3
3
  export * from "./graph";
4
4
 
package/es/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,OAAO,GAAG,gBAAgB,CAAC;AAExC,cAAc,SAAS,CAAC;AAExB,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EACL,cAAc,EACd,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,cAAc,OAAO,CAAC;AACtB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC","file":"index.js","sourcesContent":["// -- Exports -----\nexport const version = \"0.10.0-alpha.1\";\n\nexport * from './graph';\n\nexport * from './interactions';\n\nexport { View } from './view';\nexport { parseFunctionType, invokeFunctionType } from './parse/util';\nexport { GrammarBase } from './view/grammar-base';\nexport * from './util/text';\nexport * from './types';\nexport { Factory } from './core/factory';\nexport {\n SIGNAL_AUTOFIT,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_VIEW_HEIGHT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_WIDTH,\n SIGNAL_VIEW_BOX\n} from './view/constants';\n\nexport { ThemeManager } from './theme/theme-manager';\n\nexport * from './glyph';\nexport * from './component';\nexport * from './transforms';\nexport * from './graph/animation/animation';\n\nexport { vglobal } from '@visactor/vrender-core';\nexport * from './env';\nexport * from './interactions';\nexport * from './semantic-marks/cell';\nexport * from './semantic-marks/interval';\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,OAAO,GAAG,gBAAgB,CAAC;AAExC,cAAc,SAAS,CAAC;AAExB,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EACL,cAAc,EACd,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,cAAc,OAAO,CAAC;AACtB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC","file":"index.js","sourcesContent":["// -- Exports -----\nexport const version = \"0.10.0-alpha.2\";\n\nexport * from './graph';\n\nexport * from './interactions';\n\nexport { View } from './view';\nexport { parseFunctionType, invokeFunctionType } from './parse/util';\nexport { GrammarBase } from './view/grammar-base';\nexport * from './util/text';\nexport * from './types';\nexport { Factory } from './core/factory';\nexport {\n SIGNAL_AUTOFIT,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_VIEW_HEIGHT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_WIDTH,\n SIGNAL_VIEW_BOX\n} from './view/constants';\n\nexport { ThemeManager } from './theme/theme-manager';\n\nexport * from './glyph';\nexport * from './component';\nexport * from './transforms';\nexport * from './graph/animation/animation';\n\nexport { vglobal } from '@visactor/vrender-core';\nexport * from './env';\nexport * from './interactions';\nexport * from './semantic-marks/cell';\nexport * from './semantic-marks/interval';\n"]}
@@ -128,7 +128,6 @@ export interface IProgressiveGrammar {
128
128
  export interface IMark extends IGrammarBase, IProgressiveGrammar {
129
129
  group?: IGroupMark;
130
130
  markType: MarkType;
131
- context: any;
132
131
  coord: ICoordinate;
133
132
  disableCoordinateTransform?: boolean;
134
133
  elements: IElement[];
@@ -145,11 +144,13 @@ export interface IMark extends IGrammarBase, IProgressiveGrammar {
145
144
  animationState: (animationState: MarkFunctionType<string> | Nil) => this;
146
145
  layout: (layout: MarkLayoutSpec | MarkLayoutCallback | Nil) => this;
147
146
  configure: (config: IMarkConfig | Nil) => this;
147
+ context: (context: any) => this;
148
148
  transform: (transform: TransformSpec[] | Nil) => this;
149
149
  needAnimate: () => boolean;
150
150
  getBounds: () => IBounds;
151
151
  isCollectionMark: () => boolean;
152
152
  getAllElements: () => IElement[];
153
+ getContext: () => any;
153
154
  isUpdated: boolean;
154
155
  getGroupGraphicItem: () => any;
155
156
  cleanExitElements: () => void;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/grammar.ts"],"names":[],"mappings":"","file":"grammar.js","sourcesContent":["import type { EventEmitter, IBounds, IPointLike } from '@visactor/vutils';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\nimport type { IBaseScale, ScaleFishEyeOptions, TickData } from '@visactor/vscale';\nimport type { ITransform, TransformSpec } from './transform';\nimport type { DataFormatSpec, IDataFilter } from './data';\nimport type { ParameterFunctionType, SignalFunctionType } from './signal';\nimport type { IAnimate } from './animate';\nimport type { IGlyphMeta } from './glyph';\nimport type { GrammarTypeEnum } from '../graph/enums';\nimport type { Nil } from './base';\nimport type { CoordinateFunctionType } from './coordinate';\nimport type { IElement } from './element';\nimport type {\n MarkFunctionType,\n MarkAnimationSpec,\n MarkType,\n MarkLayoutSpec,\n MarkLayoutCallback,\n MarkSortSpec,\n MarkKeySpec,\n IMarkConfig,\n ChannelEncodeType,\n AttributeTransform,\n BaseSignleEncodeSpec\n} from './mark';\nimport type { ScaleConfigureSpec, ScaleData, ScaleFunctionType, GrammarScaleType, MultiScaleData } from './scale';\nimport type { IView } from './view';\nimport type { BaseEventHandler } from './event';\nimport type { ICartesianCoordinate, IPolarCoordinate } from '@visactor/vgrammar-coordinate';\n\nexport type BuiltInGrammarType = keyof typeof GrammarTypeEnum;\nexport type GrammarType = BuiltInGrammarType | string;\n\n/** 语法元素内置运行的任务 */\nexport interface IGrammarTask extends ITransform {\n /**\n * 参数依赖\n * 只做一级解析\n */\n options?: Record<string, any | IGrammarBase> | (IGrammarBase | any)[];\n /**\n * 依赖的语法元素\n */\n references?: IGrammarBase[];\n /**\n * 是否只支持简单的options配置,不支持在options引用语法元素\n */\n isRawOptions?: boolean;\n}\n\nexport interface GrammarSpec {\n id?: string;\n dependency?: IGrammarBase[] | IGrammarBase | string[] | string;\n}\n\nexport interface IGrammarBase {\n readonly grammarType: GrammarType;\n readonly view: IView;\n readonly uid: number;\n /**\n * 执行的上游节点\n */\n grammarSource: IGrammarBase;\n /**\n * 影响的下游节点\n */\n targets: IGrammarBase[];\n /**\n * 依赖的上游节点,由于不同 spec 配置项中可能引用同一个节点,需要进行计数\n */\n references: Map<IGrammarBase, number>;\n\n depend: (grammar: IGrammarBase[] | IGrammarBase | string[] | string) => this;\n\n addEventListener: (type: string, handler: BaseEventHandler, options?: any) => this;\n removeEventListener: (type: string, handler: BaseEventHandler) => this;\n\n // extended from EventEmitter\n emit: <T extends EventEmitter.EventNames<string | symbol>>(\n event: T,\n ...args: EventEmitter.EventArgs<string | symbol, T>\n ) => boolean;\n emitGrammarEvent: <T extends EventEmitter.EventNames<string | symbol>>(\n event: T,\n ...args: EventEmitter.EventArgs<string | symbol, T>\n ) => boolean;\n\n tasks?: IGrammarTask[];\n // value?: any;\n /** FIXME: operator执行顺序,改造后,dataflow执行元素,应该抽象出来 */\n rank?: number;\n // todo\n set: (value: any) => boolean;\n id: (() => string) & ((id: string) => this);\n name: (() => string) & ((name: string) => this);\n attach: (reference: IGrammarBase | IGrammarBase[], count?: number) => this;\n detach: (reference: IGrammarBase | IGrammarBase[], count?: number) => this;\n detachAll: () => void;\n commit: () => void;\n output: () => any;\n parse: (spec: any) => this;\n parameters: () => { [key: string]: any };\n evaluateSync?: (upstream: any, parameters: any) => this;\n getSpec: () => any;\n reuse: (grammar: IGrammarBase) => this;\n /** clear references */\n clear: () => void;\n /** release all memory storage */\n release: () => void;\n}\n\nexport interface IData extends IGrammarBase {\n values: (values: any | Nil, format?: ParameterFunctionType<DataFormatSpec>, load?: boolean) => this;\n url: (\n url: ParameterFunctionType<string> | Nil,\n format?: ParameterFunctionType<DataFormatSpec>,\n load?: boolean\n ) => this;\n source: (\n source: string | string[] | IData | IData[],\n format?: ParameterFunctionType<DataFormatSpec>,\n load?: boolean\n ) => this;\n transform: (transform: TransformSpec[] | Nil) => this;\n\n // only used in VGrammar\n addDataFilter: (filter: IDataFilter | IDataFilter[]) => this;\n removeDataFilter: (filter: IDataFilter | IDataFilter[]) => this;\n\n // data util methods\n field: (field: string) => any[];\n getValue: () => any[];\n getInput: () => any[];\n getDataIDKey: () => string;\n}\n\n/** 语法元素,TODO */\nexport interface ISignal<T> extends IGrammarBase {\n value: (value: T | Nil) => this;\n update: (update: SignalFunctionType<T> | Nil) => this;\n\n getValue: () => T;\n}\n\n/** 语法元素,TODO */\nexport interface IScale extends IGrammarBase {\n domain: (domain: ScaleFunctionType<any[]> | ScaleData | MultiScaleData | Nil) => this;\n range: (range: ScaleFunctionType<any[]> | ScaleData | MultiScaleData | Nil) => this;\n configure: (config: ScaleConfigureSpec | Nil) => this;\n tickCount: (tickCount: ScaleFunctionType<number> | Nil) => this;\n\n // only used in VGrammar\n getRangeFactor: () => [number, number] | Nil;\n setRangeFactor: (range?: [number, number]) => this;\n getFishEye: () => ScaleFishEyeOptions | Nil;\n setFishEye: (option?: ScaleFishEyeOptions) => this;\n\n // scale util methods\n getScaleType: () => GrammarScaleType;\n getScale: () => IBaseScale;\n ticks: (count?: number) => TickData[];\n getCoordinateAxisPoints: (baseValue?: number) => [IPointLike, IPointLike];\n getCoordinate: () => IPolarCoordinate | ICartesianCoordinate;\n getCoordinateAxisPosition: () => 'top' | 'bottom' | 'left' | 'right' | 'inside' | 'outside' | 'start' | 'end';\n}\n\nexport interface ICoordinate extends IGrammarBase {\n start: (start: CoordinateFunctionType<[number, number]> | Nil) => this;\n end: (end: CoordinateFunctionType<[number, number]> | Nil) => this;\n origin: (origin: CoordinateFunctionType<[number, number]> | Nil) => this;\n\n translate: (offset: CoordinateFunctionType<[number, number]> | Nil) => this;\n rotate: (angle: CoordinateFunctionType<number> | Nil) => this;\n scale: (ratio: CoordinateFunctionType<[number, number]> | Nil) => this;\n transpose: (isTransposed: CoordinateFunctionType<boolean> | Nil) => this;\n\n // coordinate util methods\n}\n\n/** 语法元素,TODO */\n\n/** group mark */\nexport interface IGroupMark extends IMark {\n children: (IMark | IGroupMark | IGlyphMark)[];\n\n layoutChildren?: (IMark | IGroupMark | IGlyphMark)[];\n\n appendChild: (mark: IMark | IGroupMark | IGlyphMark) => this;\n removeChild: (mark: IMark | IGroupMark | IGlyphMark) => this;\n includesChild: (mark: IMark, descendant?: boolean) => boolean;\n\n updateLayoutChildren: () => this;\n}\n\nexport interface IGlyphMark extends IMark {\n glyphType: string;\n getGlyphMeta: () => IGlyphMeta;\n configureGlyph: (config: any) => this;\n getGlyphConfig: () => any;\n}\n\nexport interface IComponent extends IMark {\n componentType: string;\n configureComponent: (config: any) => this;\n}\n\nexport interface IProgressiveGrammar {\n /** 是否启动了增量渲染模式 */\n isProgressive: () => boolean;\n /** 是否正在执行增量渲染 */\n isDoingProgressive: () => boolean;\n /** 清除增量渲染相关状态 */\n clearProgressive: () => void;\n /** 从第一帧开始增量计算 */\n restartProgressive: () => void;\n /** 分片执行 */\n evaluateProgressive: () => void;\n}\n\nexport interface IMark extends IGrammarBase, IProgressiveGrammar {\n group?: IGroupMark;\n\n markType: MarkType;\n context: any;\n coord: ICoordinate;\n /**\n * disable coordinate transform when need\n */\n disableCoordinateTransform?: boolean;\n elements: IElement[];\n elementMap: Map<string, IElement>;\n graphicIndex: number;\n graphicItem?: IGroup;\n animate?: IAnimate;\n\n join: (\n data: IData | string | Nil,\n key?: MarkKeySpec,\n sort?: MarkSortSpec,\n groupBy?: MarkKeySpec,\n groupSort?: MarkSortSpec\n ) => this;\n coordinate: (coordinate: ICoordinate | string | Nil) => this;\n state: (state: MarkFunctionType<string | string[]> | Nil) => this;\n encode: ((encoders: BaseSignleEncodeSpec) => this) & ((channel: string, value: ChannelEncodeType) => this);\n encodeState: ((state: string, channel: string, value: ChannelEncodeType) => this) &\n ((state: string, encoders: BaseSignleEncodeSpec) => this);\n animation: (animationConfig: MarkAnimationSpec | Nil) => this;\n animationState: (animationState: MarkFunctionType<string> | Nil) => this;\n layout: (layout: MarkLayoutSpec | MarkLayoutCallback | Nil) => this;\n configure: (config: IMarkConfig | Nil) => this;\n transform: (transform: TransformSpec[] | Nil) => this;\n\n needAnimate: () => boolean;\n getBounds: () => IBounds;\n isCollectionMark: () => boolean;\n getAllElements: () => IElement[];\n\n // position: () => this;\n // color: () => this;\n // shape: () => this;\n\n // mark 执行流程相关接口\n\n isUpdated: boolean;\n getGroupGraphicItem: () => any;\n cleanExitElements: () => void;\n addGraphicItem: (attrs: any, groupKey?: string) => IGraphic;\n getMorphConfig: () => { morph: boolean; morphKey: string | undefined; morphElementKey: string | undefined };\n prepareRelease: () => void;\n\n layoutBounds?: IBounds;\n relativePosition?: { top?: number; bottom?: number; left?: number; right?: number };\n needLayout: () => boolean;\n handleLayoutEnd: () => void;\n handleRenderEnd: () => void;\n isLargeMode: () => boolean;\n getAttributeTransforms: () => AttributeTransform[];\n\n getScalesByChannel: () => Record<string, IBaseScale> | undefined;\n getFieldsByChannel: () => Record<string, string> | undefined;\n getScales: () => Record<string, IBaseScale> | undefined;\n}\n\nexport interface IGrammarBaseConstructor {\n new (view: IView): IGrammarBase;\n}\n\nexport interface ProgressiveContext {\n currentIndex: number;\n totalStep: number;\n step: number;\n data: any[];\n groupKeys?: string[];\n groupedData?: Map<string, any[]>;\n}\n"]}
1
+ {"version":3,"sources":["../src/types/grammar.ts"],"names":[],"mappings":"","file":"grammar.js","sourcesContent":["import type { EventEmitter, IBounds, IPointLike } from '@visactor/vutils';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\nimport type { IBaseScale, ScaleFishEyeOptions, TickData } from '@visactor/vscale';\nimport type { ITransform, TransformSpec } from './transform';\nimport type { DataFormatSpec, IDataFilter } from './data';\nimport type { ParameterFunctionType, SignalFunctionType } from './signal';\nimport type { IAnimate } from './animate';\nimport type { IGlyphMeta } from './glyph';\nimport type { GrammarTypeEnum } from '../graph/enums';\nimport type { Nil } from './base';\nimport type { CoordinateFunctionType } from './coordinate';\nimport type { IElement } from './element';\nimport type {\n MarkFunctionType,\n MarkAnimationSpec,\n MarkType,\n MarkLayoutSpec,\n MarkLayoutCallback,\n MarkSortSpec,\n MarkKeySpec,\n IMarkConfig,\n ChannelEncodeType,\n AttributeTransform,\n BaseSignleEncodeSpec\n} from './mark';\nimport type { ScaleConfigureSpec, ScaleData, ScaleFunctionType, GrammarScaleType, MultiScaleData } from './scale';\nimport type { IView } from './view';\nimport type { BaseEventHandler } from './event';\nimport type { ICartesianCoordinate, IPolarCoordinate } from '@visactor/vgrammar-coordinate';\n\nexport type BuiltInGrammarType = keyof typeof GrammarTypeEnum;\nexport type GrammarType = BuiltInGrammarType | string;\n\n/** 语法元素内置运行的任务 */\nexport interface IGrammarTask extends ITransform {\n /**\n * 参数依赖\n * 只做一级解析\n */\n options?: Record<string, any | IGrammarBase> | (IGrammarBase | any)[];\n /**\n * 依赖的语法元素\n */\n references?: IGrammarBase[];\n /**\n * 是否只支持简单的options配置,不支持在options引用语法元素\n */\n isRawOptions?: boolean;\n}\n\nexport interface GrammarSpec {\n id?: string;\n dependency?: IGrammarBase[] | IGrammarBase | string[] | string;\n}\n\nexport interface IGrammarBase {\n readonly grammarType: GrammarType;\n readonly view: IView;\n readonly uid: number;\n /**\n * 执行的上游节点\n */\n grammarSource: IGrammarBase;\n /**\n * 影响的下游节点\n */\n targets: IGrammarBase[];\n /**\n * 依赖的上游节点,由于不同 spec 配置项中可能引用同一个节点,需要进行计数\n */\n references: Map<IGrammarBase, number>;\n\n depend: (grammar: IGrammarBase[] | IGrammarBase | string[] | string) => this;\n\n addEventListener: (type: string, handler: BaseEventHandler, options?: any) => this;\n removeEventListener: (type: string, handler: BaseEventHandler) => this;\n\n // extended from EventEmitter\n emit: <T extends EventEmitter.EventNames<string | symbol>>(\n event: T,\n ...args: EventEmitter.EventArgs<string | symbol, T>\n ) => boolean;\n emitGrammarEvent: <T extends EventEmitter.EventNames<string | symbol>>(\n event: T,\n ...args: EventEmitter.EventArgs<string | symbol, T>\n ) => boolean;\n\n tasks?: IGrammarTask[];\n // value?: any;\n /** FIXME: operator执行顺序,改造后,dataflow执行元素,应该抽象出来 */\n rank?: number;\n // todo\n set: (value: any) => boolean;\n id: (() => string) & ((id: string) => this);\n name: (() => string) & ((name: string) => this);\n attach: (reference: IGrammarBase | IGrammarBase[], count?: number) => this;\n detach: (reference: IGrammarBase | IGrammarBase[], count?: number) => this;\n detachAll: () => void;\n commit: () => void;\n output: () => any;\n parse: (spec: any) => this;\n parameters: () => { [key: string]: any };\n evaluateSync?: (upstream: any, parameters: any) => this;\n getSpec: () => any;\n reuse: (grammar: IGrammarBase) => this;\n /** clear references */\n clear: () => void;\n /** release all memory storage */\n release: () => void;\n}\n\nexport interface IData extends IGrammarBase {\n values: (values: any | Nil, format?: ParameterFunctionType<DataFormatSpec>, load?: boolean) => this;\n url: (\n url: ParameterFunctionType<string> | Nil,\n format?: ParameterFunctionType<DataFormatSpec>,\n load?: boolean\n ) => this;\n source: (\n source: string | string[] | IData | IData[],\n format?: ParameterFunctionType<DataFormatSpec>,\n load?: boolean\n ) => this;\n transform: (transform: TransformSpec[] | Nil) => this;\n\n // only used in VGrammar\n addDataFilter: (filter: IDataFilter | IDataFilter[]) => this;\n removeDataFilter: (filter: IDataFilter | IDataFilter[]) => this;\n\n // data util methods\n field: (field: string) => any[];\n getValue: () => any[];\n getInput: () => any[];\n getDataIDKey: () => string;\n}\n\n/** 语法元素,TODO */\nexport interface ISignal<T> extends IGrammarBase {\n value: (value: T | Nil) => this;\n update: (update: SignalFunctionType<T> | Nil) => this;\n\n getValue: () => T;\n}\n\n/** 语法元素,TODO */\nexport interface IScale extends IGrammarBase {\n domain: (domain: ScaleFunctionType<any[]> | ScaleData | MultiScaleData | Nil) => this;\n range: (range: ScaleFunctionType<any[]> | ScaleData | MultiScaleData | Nil) => this;\n configure: (config: ScaleConfigureSpec | Nil) => this;\n tickCount: (tickCount: ScaleFunctionType<number> | Nil) => this;\n\n // only used in VGrammar\n getRangeFactor: () => [number, number] | Nil;\n setRangeFactor: (range?: [number, number]) => this;\n getFishEye: () => ScaleFishEyeOptions | Nil;\n setFishEye: (option?: ScaleFishEyeOptions) => this;\n\n // scale util methods\n getScaleType: () => GrammarScaleType;\n getScale: () => IBaseScale;\n ticks: (count?: number) => TickData[];\n getCoordinateAxisPoints: (baseValue?: number) => [IPointLike, IPointLike];\n getCoordinate: () => IPolarCoordinate | ICartesianCoordinate;\n getCoordinateAxisPosition: () => 'top' | 'bottom' | 'left' | 'right' | 'inside' | 'outside' | 'start' | 'end';\n}\n\nexport interface ICoordinate extends IGrammarBase {\n start: (start: CoordinateFunctionType<[number, number]> | Nil) => this;\n end: (end: CoordinateFunctionType<[number, number]> | Nil) => this;\n origin: (origin: CoordinateFunctionType<[number, number]> | Nil) => this;\n\n translate: (offset: CoordinateFunctionType<[number, number]> | Nil) => this;\n rotate: (angle: CoordinateFunctionType<number> | Nil) => this;\n scale: (ratio: CoordinateFunctionType<[number, number]> | Nil) => this;\n transpose: (isTransposed: CoordinateFunctionType<boolean> | Nil) => this;\n\n // coordinate util methods\n}\n\n/** 语法元素,TODO */\n\n/** group mark */\nexport interface IGroupMark extends IMark {\n children: (IMark | IGroupMark | IGlyphMark)[];\n\n layoutChildren?: (IMark | IGroupMark | IGlyphMark)[];\n\n appendChild: (mark: IMark | IGroupMark | IGlyphMark) => this;\n removeChild: (mark: IMark | IGroupMark | IGlyphMark) => this;\n includesChild: (mark: IMark, descendant?: boolean) => boolean;\n\n updateLayoutChildren: () => this;\n}\n\nexport interface IGlyphMark extends IMark {\n glyphType: string;\n getGlyphMeta: () => IGlyphMeta;\n configureGlyph: (config: any) => this;\n getGlyphConfig: () => any;\n}\n\nexport interface IComponent extends IMark {\n componentType: string;\n configureComponent: (config: any) => this;\n}\n\nexport interface IProgressiveGrammar {\n /** 是否启动了增量渲染模式 */\n isProgressive: () => boolean;\n /** 是否正在执行增量渲染 */\n isDoingProgressive: () => boolean;\n /** 清除增量渲染相关状态 */\n clearProgressive: () => void;\n /** 从第一帧开始增量计算 */\n restartProgressive: () => void;\n /** 分片执行 */\n evaluateProgressive: () => void;\n}\n\nexport interface IMark extends IGrammarBase, IProgressiveGrammar {\n group?: IGroupMark;\n\n markType: MarkType;\n coord: ICoordinate;\n /**\n * disable coordinate transform when need\n */\n disableCoordinateTransform?: boolean;\n elements: IElement[];\n elementMap: Map<string, IElement>;\n graphicIndex: number;\n graphicItem?: IGroup;\n animate?: IAnimate;\n\n join: (\n data: IData | string | Nil,\n key?: MarkKeySpec,\n sort?: MarkSortSpec,\n groupBy?: MarkKeySpec,\n groupSort?: MarkSortSpec\n ) => this;\n coordinate: (coordinate: ICoordinate | string | Nil) => this;\n state: (state: MarkFunctionType<string | string[]> | Nil) => this;\n encode: ((encoders: BaseSignleEncodeSpec) => this) & ((channel: string, value: ChannelEncodeType) => this);\n encodeState: ((state: string, channel: string, value: ChannelEncodeType) => this) &\n ((state: string, encoders: BaseSignleEncodeSpec) => this);\n animation: (animationConfig: MarkAnimationSpec | Nil) => this;\n animationState: (animationState: MarkFunctionType<string> | Nil) => this;\n layout: (layout: MarkLayoutSpec | MarkLayoutCallback | Nil) => this;\n configure: (config: IMarkConfig | Nil) => this;\n context: (context: any) => this;\n transform: (transform: TransformSpec[] | Nil) => this;\n\n needAnimate: () => boolean;\n getBounds: () => IBounds;\n isCollectionMark: () => boolean;\n getAllElements: () => IElement[];\n getContext: () => any;\n\n // position: () => this;\n // color: () => this;\n // shape: () => this;\n\n // mark 执行流程相关接口\n\n isUpdated: boolean;\n getGroupGraphicItem: () => any;\n cleanExitElements: () => void;\n addGraphicItem: (attrs: any, groupKey?: string) => IGraphic;\n getMorphConfig: () => { morph: boolean; morphKey: string | undefined; morphElementKey: string | undefined };\n prepareRelease: () => void;\n\n layoutBounds?: IBounds;\n relativePosition?: { top?: number; bottom?: number; left?: number; right?: number };\n needLayout: () => boolean;\n handleLayoutEnd: () => void;\n handleRenderEnd: () => void;\n isLargeMode: () => boolean;\n getAttributeTransforms: () => AttributeTransform[];\n\n getScalesByChannel: () => Record<string, IBaseScale> | undefined;\n getFieldsByChannel: () => Record<string, string> | undefined;\n getScales: () => Record<string, IBaseScale> | undefined;\n}\n\nexport interface IGrammarBaseConstructor {\n new (view: IView): IGrammarBase;\n}\n\nexport interface ProgressiveContext {\n currentIndex: number;\n totalStep: number;\n step: number;\n data: any[];\n groupKeys?: string[];\n groupedData?: Map<string, any[]>;\n}\n"]}
@@ -139,6 +139,7 @@ export interface IMarkConfig {
139
139
  morphKey?: string;
140
140
  morphElementKey?: string;
141
141
  attributeTransforms?: AttributeTransform[];
142
+ enableSegments?: boolean;
142
143
  }
143
144
  export interface GenerateMarkSpec<T extends MarkType = string, P = any> extends IMarkConfig, GrammarSpec {
144
145
  type: T;