@visactor/vgrammar-core 0.12.8 → 0.12.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/interactions/element-select.d.ts +1 -1
- package/cjs/interactions/element-select.js +17 -16
- package/cjs/interactions/element-select.js.map +1 -1
- package/cjs/interactions/utils.d.ts +5 -1
- package/cjs/interactions/utils.js +15 -2
- package/cjs/interactions/utils.js.map +1 -1
- package/cjs/types/interaction.d.ts +2 -1
- package/cjs/types/interaction.js.map +1 -1
- package/cjs/view/View.js +2 -2
- package/cjs/view/View.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/interactions/element-select.d.ts +1 -1
- package/es/interactions/element-select.js +19 -17
- package/es/interactions/element-select.js.map +1 -1
- package/es/interactions/utils.d.ts +5 -1
- package/es/interactions/utils.js +13 -0
- package/es/interactions/utils.js.map +1 -1
- package/es/types/interaction.d.ts +2 -1
- package/es/types/interaction.js.map +1 -1
- package/es/view/View.js +2 -2
- package/es/view/View.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interactions/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/interactions/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAA6B,EAAE,EAAE;IACnE,IAAI,OAAO,CAAC,WAAW,EAAE;QACvB,OAAO,CAAC,EAAY,EAAE,EAAE;;YACtB,OAAO,MAAA,EAAE,CAAC,QAAQ,EAAE,0CAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC,CAAC;KACH;IAED,OAAO,CAAC,EAAY,EAAE,EAAE;QACtB,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAE,MAAgB,EAA2B,EAAE;IAC7F,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;QACrB,OAAO,IAAI,CAAC;KACb;IAED,MAAM,GAAG,GAAG,EAAE,CAAC;IAEf,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,MAAM,QAAQ,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAa,CAAC;QACtD,MAAM,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC;QAE3C,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QAED,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrB,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBACf,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;iBACjB;gBAED,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvB;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,UAA+D,EAAE,EAAE;IACzG,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAoC,EAAE,CAAC;IACtD,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC5B,IAAI,GAAG,KAAK,OAAO,EAAE;YACnB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACxB;aAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,MAAM,EAAE;YAC1C,IAAK,GAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;gBACrC,UAAU,CAAC,IAAI,CAAE,GAAc,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAc,CAAC,CAAC;gBAEnE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACxB;iBAAM;gBACL,UAAU,CAAC,IAAI,CAAC,GAAgB,CAAC,CAAC;gBAElC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACxB;SACF;aAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;YACxB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC3B;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,UAAU;QACV,SAAS;KACV,CAAC;AACJ,CAAC,CAAC","file":"utils.js","sourcesContent":["import { array, isNumber, isString } from '@visactor/vutils';\nimport type { ElementFilterOptions, ElementSelectTriggerOff, EventType, IElement, IMark, MarkSpec } from '../types';\n\nexport const generateFilterValue = (options: ElementFilterOptions) => {\n if (options.filterField) {\n return (el: IElement) => {\n return el.getDatum()?.[options.filterField];\n };\n }\n\n return (el: IElement) => {\n return el[options.filterType];\n };\n};\n\nexport const groupMarksByState = (marks: IMark[], states: string[]): Record<string, IMark[]> => {\n if (!states || !marks) {\n return null;\n }\n\n const res = {};\n\n marks.forEach(mark => {\n const markSpec = (mark && mark.getSpec()) as MarkSpec;\n const encode = markSpec && markSpec.encode;\n\n if (!encode) {\n return;\n }\n\n states.forEach(state => {\n if (state && encode[state]) {\n if (!res[state]) {\n res[state] = [];\n }\n\n res[state].push(mark);\n }\n });\n });\n\n return res;\n};\n\nexport const parseTriggerOffOfSelect = (triggerOff: ElementSelectTriggerOff | ElementSelectTriggerOff[]) => {\n const triggerOffArray = array(triggerOff);\n const resetType: ('view' | 'self' | 'timeout')[] = [];\n const eventNames: EventType[] = [];\n\n triggerOffArray.forEach(off => {\n if (off === 'empty') {\n resetType.push('view');\n } else if (isString(off) && off !== 'none') {\n if ((off as string).includes('view:')) {\n eventNames.push((off as string).replace('view:', '') as EventType);\n\n resetType.push('view');\n } else {\n eventNames.push(off as EventType);\n\n resetType.push('self');\n }\n } else if (isNumber(off)) {\n resetType.push('timeout');\n }\n });\n\n return {\n eventNames,\n resetType\n };\n};\n"]}
|
|
@@ -45,12 +45,13 @@ export interface ElementActiveOptions extends IBaseInteractionOptions {
|
|
|
45
45
|
triggerOff?: EventType | EventType[] | 'none';
|
|
46
46
|
state?: string;
|
|
47
47
|
}
|
|
48
|
+
export type ElementSelectTriggerOff = EventType | ViewEventType | 'empty' | 'none' | number;
|
|
48
49
|
export interface ElementSelectOptions extends IBaseInteractionOptions {
|
|
49
50
|
selector?: string | string[] | IMark | IMark[];
|
|
50
51
|
trigger?: EventType | EventType[];
|
|
51
52
|
state?: string;
|
|
52
53
|
reverseState?: string;
|
|
53
|
-
triggerOff?:
|
|
54
|
+
triggerOff?: ElementSelectTriggerOff | ElementSelectTriggerOff[];
|
|
54
55
|
isMultiple?: boolean;
|
|
55
56
|
}
|
|
56
57
|
export interface ElementHighlightOptions extends IBaseInteractionOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/interaction.ts"],"names":[],"mappings":"","file":"interaction.js","sourcesContent":["import type { IView } from './view';\nimport type { EventType, InteractionEvent, ViewEventType } from './event';\nimport type {\n BaseCrosshairAttrs,\n BrushAttributes,\n TooltipAttributes,\n TooltipRowAttrs\n} from '@visactor/vrender-components';\nimport type { IPolygon, ISymbolGraphicAttribute, ITextGraphicAttribute } from '@visactor/vrender-core';\nimport type { IElement, IGlyphElement } from './element';\nimport type { IData, IGrammarBase, IMark, IScale } from './grammar';\nimport type { IPointLike } from '@visactor/vutils';\nimport type { IBaseScale } from '@visactor/vscale';\nimport type { IDatazoom, IScrollbar } from './component';\nimport type { FieldEncodeType, MarkFunctionType } from './mark';\n\nexport interface FilterDataTarget {\n data: string | IData;\n filter: string | ((datum: any, filterValues: any[]) => boolean);\n transform?: (data: any[], filterValues: any[]) => any[];\n}\n\nexport interface IBaseInteractionOptions {\n id?: string;\n\n dependency?: string | string[] | IGrammarBase | IGrammarBase[];\n\n shouldStart?: (e: any) => boolean;\n\n shouldUpdate?: (e: any) => boolean;\n\n shouldEnd?: (e: any) => boolean;\n\n shouldReset?: (e: any) => boolean;\n\n onStart?: (e: any) => boolean;\n\n onUpdate?: (e: any) => boolean;\n\n onEnd?: (e: any) => boolean;\n\n onReset?: (e: any) => boolean;\n}\n\nexport interface IInteraction<T = any> {\n readonly options: T;\n readonly type: string;\n depend: (grammar: IGrammarBase[] | IGrammarBase | string[] | string) => void;\n bind: () => void;\n unbind: () => void;\n start: (element: IElement | IGlyphElement | string | any) => void;\n reset: (element?: IElement | IGlyphElement) => void;\n getStartState: () => string;\n}\n\nexport interface IInteractionConstructor<T = any> {\n readonly type: string;\n\n new (view: IView, options?: T): IInteraction<T>;\n}\n\n/**\n * the interaction to set the active state of specified marks\n */\nexport interface ElementActiveOptions extends IBaseInteractionOptions {\n /**\n * the selector of marks\n */\n selector?: string | string[] | IMark | IMark[];\n /**\n * the trigger event name\n */\n trigger?: EventType | EventType[];\n /**\n * the reset trigger event name\n */\n triggerOff?: EventType | EventType[] | 'none';\n /**\n * the active state name\n */\n state?: string;\n}\n\n/**\n * the interaction to set the seleted state of specified marks\n */\nexport interface ElementSelectOptions extends IBaseInteractionOptions {\n /**\n * the selector of marks\n */\n selector?: string | string[] | IMark | IMark[];\n /**\n * the trigger event name\n */\n trigger?: EventType | EventType[];\n /**\n * the selected state name\n */\n state?: string;\n /**\n * the non-selected state name\n */\n reverseState?: string;\n /**\n * the reset trigger event name\n */\n triggerOff?: EventType | EventType[] | ViewEventType | 'empty' | 'none' | number;\n /**\n * whether or not support multiple selected\n */\n isMultiple?: boolean;\n}\n\n/**\n * the interaction to set the highlight state of specified marks\n */\nexport interface ElementHighlightOptions extends IBaseInteractionOptions {\n /**\n * the selector of marks\n */\n selector?: string | string[] | IMark | IMark[];\n /**\n * the trigger event name\n */\n trigger?: EventType;\n /**\n * the reset trigger event name\n */\n triggerOff?: EventType | 'none';\n /**\n * the highlight state name\n */\n highlightState?: string;\n /**\n * the blur state name\n */\n blurState?: string;\n}\n\nexport interface ElementFilterOptions {\n /**\n * the filter type of element\n */\n filterType?: 'key' | 'groupKey';\n /**\n * the field to be filtered\n */\n filterField?: string;\n}\n\n/**\n * the interaction to set the active state of specified marks trigger by legend\n */\nexport interface ElementActiveByLegendOptions extends IBaseInteractionOptions, ElementFilterOptions {\n /**\n * the selector of marks\n */\n selector?: string | string[] | IMark | IMark[];\n /**\n * the active state name\n */\n state?: string;\n}\n\n/**\n * the interaction to set the active state of specified marks trigger by legend\n */\nexport interface ElementHighlightByLegendOptions extends IBaseInteractionOptions, ElementFilterOptions {\n /**\n * the selector of marks\n */\n selector?: string | string[] | IMark | IMark[];\n /**\n * the highlight state name\n */\n highlightState?: string;\n /**\n * the blur state name\n */\n blurState?: string;\n}\n\nexport interface ElementHighlightByNameOptions extends ElementHighlightByLegendOptions {\n graphicName?: string | string[];\n /**\n * the trigger event name\n */\n trigger?: EventType;\n /**\n * the reset trigger event name\n */\n triggerOff?: EventType | 'none';\n\n parseData?: (e: InteractionEvent) => any;\n}\n\nexport interface BrushEventParams {\n operateType: string;\n operateMask: IPolygon;\n activeElements?: (IElement | IGlyphElement)[];\n}\n\nexport interface BrushOptions extends IBaseInteractionOptions, BrushAttributes {\n /**\n * the selector of marks\n */\n selector?: string | string[] | IMark | IMark[];\n\n onStart?: (params: BrushEventParams) => boolean;\n\n onUpdate?: (params: BrushEventParams) => boolean;\n\n onEnd?: (params: BrushEventParams) => boolean;\n\n onReset?: (params: BrushEventParams) => boolean;\n}\n\nexport interface BrushHighlightOptions extends BrushOptions {\n /**\n * the highlight state name\n */\n highlightState?: string;\n /**\n * the blur state name\n */\n blurState?: string;\n}\n\nexport interface BrushActiveOptions extends BrushOptions {\n /**\n * the active state name\n */\n state?: string;\n}\n\nexport interface BrushFilterOptions extends BrushOptions {\n target: {\n data: IData | string;\n transform?: (data: any[], filterValue: any) => any[];\n };\n}\n\nexport interface DataFilterOptions extends IBaseInteractionOptions {\n /**\n * the selector of marks\n */\n source?: string | string[] | IMark | IMark[];\n\n /**\n * data target\n */\n target: {\n data: IData | string;\n filter?: string | ((datum: any, filterValue: any) => boolean);\n transform?: (data: any[], filterValue: any) => any[];\n };\n}\n\nexport interface DrillDownOptions extends BrushOptions {\n /**\n * enable brush\n */\n brush?: boolean;\n // trigger attribute is included in brush attributes\n target: {\n data: IData | string;\n transform?: (data: any[], filterValue: any) => any[];\n };\n}\n\nexport interface RollUpOptions extends DataFilterOptions {\n /**\n * the trigger event name\n */\n trigger?: EventType;\n /**\n * the reset trigger event name\n */\n triggerOff?: EventType | ViewEventType | 'empty';\n}\n\nexport type CustomTooltipCallback = (\n datum: any,\n element: IElement,\n parameters: any\n) => TooltipRowAttrs | TooltipRowAttrs[];\n\nexport interface ITooltipRow {\n visible?: boolean;\n key?: MarkFunctionType<string | Partial<ITextGraphicAttribute>> | FieldEncodeType;\n value?: MarkFunctionType<string | Partial<ITextGraphicAttribute>> | FieldEncodeType;\n symbol?: MarkFunctionType<string | Partial<ISymbolGraphicAttribute>> | FieldEncodeType;\n}\n\nexport type TooltipType = 'x' | 'y' | 'angle' | 'radius';\n\nexport interface TooltipOptions extends IBaseInteractionOptions {\n /**\n * the selector of marks\n */\n selector?: string | string[] | IMark | IMark[];\n /**\n * the trigger event name\n */\n trigger?: EventType;\n /**\n * the reset trigger event name\n */\n triggerOff?: EventType | 'none';\n\n title?: ITooltipRow | string | CustomTooltipCallback;\n content?: ITooltipRow | ITooltipRow[] | CustomTooltipCallback;\n attributes?: MarkFunctionType<TooltipAttributes>;\n}\n\nexport interface DimensionTooltipOptions extends TooltipOptions {\n scale?: IScale | string;\n tooltipType?: TooltipType;\n target?: {\n data: IData | string;\n filter: string | ((datum: any, tooltipValue: any) => boolean);\n };\n avoidMark?: string | string[];\n container?: string | IMark;\n center?: IPointLike;\n}\n\nexport type CrosshairType = 'x' | 'y' | 'angle' | 'radius' | 'radius-polygon';\n\nexport type CrosshairShape = 'line' | 'rect';\n\nexport interface CrosshairOptions extends IBaseInteractionOptions {\n /**\n * the trigger event name\n */\n trigger?: EventType;\n /**\n * the reset trigger event name\n */\n triggerOff?: EventType | 'none';\n scale?: IScale | string;\n crosshairType?: CrosshairType;\n crosshairShape?: CrosshairShape;\n container?: string | IMark;\n radius?: number;\n center?: IPointLike;\n attributes?: MarkFunctionType<BaseCrosshairAttrs>;\n}\nexport interface ViewNavigationBaseOptions {\n enableX?: boolean;\n enableY?: boolean;\n scaleX?: string | IScale;\n scaleY?: string | IScale;\n dataTargetX?: FilterDataTarget;\n dataTargetY?: FilterDataTarget;\n throttle?: number;\n linkedComponentX?: string | IDatazoom | IScrollbar;\n linkedComponentY?: string | IDatazoom | IScrollbar;\n rangeX?: [number, number] | (() => [number, number]);\n rangeY?: [number, number] | (() => [number, number]);\n}\n\nexport interface ViewZoomSimpleOptions {\n realtime?: boolean;\n rate?: number;\n focus?: boolean;\n trigger?: EventType;\n endTrigger?: EventType;\n triggerOff?: EventType | 'none';\n}\n\nexport type ViewZoomOptions = ViewZoomSimpleOptions & IBaseInteractionOptions & ViewNavigationBaseOptions;\n\nexport interface ViewScrollSimpleOptions {\n realtime?: boolean;\n reversed?: boolean;\n trigger?: EventType;\n endTrigger?: EventType;\n}\nexport type ViewScrollOptions = ViewScrollSimpleOptions & IBaseInteractionOptions & ViewNavigationBaseOptions;\n\nexport interface ViewDragSimpleOptions {\n realtime?: boolean;\n reversed?: boolean;\n trigger?: EventType;\n endTrigger?: EventType;\n updateTrigger?: EventType;\n}\n\nexport type ViewDragOptions = ViewDragSimpleOptions & IBaseInteractionOptions & ViewNavigationBaseOptions;\n\nexport interface ViewRoamOptions extends IBaseInteractionOptions, ViewNavigationBaseOptions {\n zoom?: ViewZoomSimpleOptions & { enable?: boolean };\n scroll?: ViewScrollSimpleOptions & { enable?: boolean };\n drag?: ViewDragSimpleOptions & { enable?: boolean };\n}\n\n/**\n * the interaction to set the highlight state of specified marks\n */\nexport interface SankeyHighlightOptions extends IBaseInteractionOptions {\n /**\n * the selector of node mark\n */\n nodeSelector?: string | IMark;\n /**\n * the selector of link mark\n */\n linkSelector?: string | IMark;\n /**\n * the trigger event name\n */\n trigger?: EventType;\n /**\n * the reset trigger event name\n */\n triggerOff?: EventType | 'none';\n /**\n * the highlight state name\n */\n highlightState?: string;\n /**\n * the blur state name\n */\n blurState?: string;\n /** set highlight state to different type of nodes */\n effect?: 'adjacency' | 'related';\n}\n\nexport interface FishEyeOptions extends IBaseInteractionOptions {\n selector?: string | string[] | IMark | IMark[];\n /** the radius of x-direction */\n radiusX?: number;\n /** the radius of y-direction */\n radiusY?: number;\n /** the radiusRatio of x-direction */\n radiusRatioX?: number;\n /** the radiusRatio of y-direction */\n radiusRatioY?: number;\n /** x方向的扰动 */\n distortionX?: number;\n /** y方向的扰动 */\n distortionY?: number;\n /** 禁用 x方向的变形 */\n enableX?: boolean;\n /** 禁用y方向的变形 */\n enableY?: boolean;\n /** x方向的scale */\n scaleX?: string | IScale;\n /** y方向的scale */\n scaleY?: string | IScale;\n /** 节流的时长,单位为ms */\n throttle?: number;\n /**\n * the trigger event name\n */\n trigger?: EventType;\n /**\n * the trigger event of end\n */\n endTrigger?: EventType;\n /**\n * the trigger event of updating\n */\n updateTrigger?: EventType;\n /**\n * the trigger event of reset\n */\n triggerOff?: string | 'none';\n}\n\nexport interface ElementActiveSpec extends ElementActiveOptions {\n type: 'element-active';\n}\nexport interface ElementSelectSpec extends ElementSelectOptions {\n type: 'element-select';\n}\nexport interface ElementHighlightSpec extends ElementHighlightOptions {\n type: 'element-highlight';\n}\nexport interface ElementHighlightByKeySpec extends ElementHighlightOptions {\n type: 'element-highlight-by-key';\n}\nexport interface ElementHighlightByGroupSpec extends ElementHighlightOptions {\n type: 'element-highlight-by-group';\n}\nexport interface ElementActiveByLegendSpec extends ElementActiveByLegendOptions {\n type: 'element-active-by-legend';\n}\n\nexport interface ElementHighlightByLegendSpec extends ElementHighlightByLegendOptions {\n type: 'element-highlight-by-legend';\n}\n\nexport interface ElementHighlightByNameSpec extends ElementHighlightByNameOptions {\n type: 'element-highlight-by-name';\n}\n\nexport interface BrushHighlightSpec extends BrushHighlightOptions {\n type: 'brush-highlight';\n}\n\nexport interface BrushActiveSpec extends BrushActiveOptions {\n type: 'brush-active';\n}\n\nexport interface BrushFilterSpec extends BrushFilterOptions {\n type: 'brush-filter';\n}\n\nexport interface LegendFilterSpec extends DataFilterOptions {\n type: 'legend-filter';\n}\n\nexport interface DatazoomFilterSpec extends DataFilterOptions {\n type: 'datazoom-filter';\n}\n\nexport interface SliderFilterSpec extends DataFilterOptions {\n type: 'slider-filter';\n}\n\nexport interface PlayerFilterSpec extends DataFilterOptions {\n type: 'player-filter';\n}\n\nexport interface ScrollbarFilterSpec extends DataFilterOptions {\n type: 'scrollbar-filter';\n}\n\nexport interface DrillDownSpec extends DrillDownOptions {\n type: 'drill-down';\n}\n\nexport interface RollUpSpec extends RollUpOptions {\n type: 'roll-up';\n}\n\nexport interface TooltipSpec extends TooltipOptions {\n type: 'tooltip';\n}\n\nexport interface DimensionTooltipSpec extends DimensionTooltipOptions {\n type: 'dimension-tooltip';\n}\n\nexport interface CrosshairSpec extends CrosshairOptions {\n type: 'crosshair';\n}\nexport interface ViewRoamSpec extends ViewRoamOptions {\n type: 'view-roam';\n}\n\nexport interface ViewZoomSpec extends ViewZoomOptions {\n type: 'view-zoom';\n}\n\nexport interface ViewScrollSpec extends ViewScrollOptions {\n type: 'view-scroll';\n}\n\nexport interface ViewDragSpec extends ViewDragOptions {\n type: 'view-drag';\n}\n\nexport interface SankeyHighlightSpec extends SankeyHighlightOptions {\n type: 'sankey-highlight';\n}\n\nexport interface FishEyeSpec extends FishEyeOptions {\n type: 'fish-eye';\n}\n\nexport interface CustomizedInteractionSpec extends IBaseInteractionOptions {\n type: string;\n}\n\nexport type InteractionSpec =\n | ElementActiveSpec\n | ElementSelectSpec\n | ElementHighlightSpec\n | ElementHighlightByKeySpec\n | ElementHighlightByGroupSpec\n | ElementActiveByLegendSpec\n | ElementHighlightByLegendSpec\n | ElementHighlightByNameSpec\n | BrushHighlightSpec\n | BrushActiveSpec\n | BrushFilterSpec\n | LegendFilterSpec\n | DatazoomFilterSpec\n | SliderFilterSpec\n | PlayerFilterSpec\n | ScrollbarFilterSpec\n | DrillDownSpec\n | RollUpSpec\n | TooltipSpec\n | DimensionTooltipSpec\n | CrosshairSpec\n | ViewRoamSpec\n | ViewZoomSpec\n | ViewScrollSpec\n | ViewDragSpec\n | SankeyHighlightSpec\n | FishEyeSpec\n | CustomizedInteractionSpec;\n\nexport interface ViewNavigationRange {\n needUpdate?: boolean;\n x?: [number, number];\n y?: [number, number];\n}\n\nexport interface IViewZoomMixin {\n updateZoomRange: (\n rangeFactor: [number, number],\n range: [number, number],\n zoomEvent: { zoomDelta: number; zoomX: number; zoomY: number },\n zoomOptions?: ViewZoomSimpleOptions\n ) => [number, number];\n formatZoomEvent: (e: InteractionEvent) => InteractionEvent & { zoomDelta?: number; zoomX?: number; zoomY?: number };\n handleZoomStart: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n zoomOptions?: ViewZoomSimpleOptions\n ) => ViewNavigationRange;\n handleZoomEnd: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n zoomOptions?: ViewZoomSimpleOptions\n ) => ViewNavigationRange;\n handleZoomReset: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n zoomOptions?: ViewZoomSimpleOptions\n ) => ViewNavigationRange;\n}\n\nexport interface IViewScrollMixin {\n formatScrollEvent: (e: InteractionEvent) => InteractionEvent & { scrollX?: number; scrollY?: number };\n handleScrollStart: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n scrollOptions?: ViewScrollSimpleOptions\n ) => ViewNavigationRange;\n handleScrollEnd: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n scrollOptions?: ViewScrollSimpleOptions\n ) => ViewNavigationRange;\n}\n\nexport interface IViewDragMixin {\n handleDragStart: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n dragOptions?: ViewDragSimpleOptions\n ) => ViewNavigationRange;\n handleDragUpdate: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n dragOptions?: ViewDragSimpleOptions\n ) => ViewNavigationRange;\n handleDragEnd: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n dragOptions?: ViewDragSimpleOptions\n ) => ViewNavigationRange;\n}\n\nexport interface IToggleStateMixin {\n updateStates: (\n newStatedElements: (IElement | IGlyphElement)[],\n prevStatedElements?: (IElement | IGlyphElement)[],\n state?: string,\n reverseState?: string\n ) => (IElement | IGlyphElement)[];\n clearAllStates: (state?: string, reverseState?: string) => void;\n}\n\nexport interface ViewStateByDim {\n scale?: IScale;\n data?: IData;\n linkedComponent?: IDatazoom | IScrollbar;\n filterValue?: any[];\n wholeScale?: IBaseScale;\n initRangeFactor?: [number, number];\n getCurrentRange?: () => [number, number];\n rangeFactor?: [number, number];\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/interaction.ts"],"names":[],"mappings":"","file":"interaction.js","sourcesContent":["import type { IView } from './view';\nimport type { EventType, InteractionEvent, ViewEventType } from './event';\nimport type {\n BaseCrosshairAttrs,\n BrushAttributes,\n TooltipAttributes,\n TooltipRowAttrs\n} from '@visactor/vrender-components';\nimport type { IPolygon, ISymbolGraphicAttribute, ITextGraphicAttribute } from '@visactor/vrender-core';\nimport type { IElement, IGlyphElement } from './element';\nimport type { IData, IGrammarBase, IMark, IScale } from './grammar';\nimport type { IPointLike } from '@visactor/vutils';\nimport type { IBaseScale } from '@visactor/vscale';\nimport type { IDatazoom, IScrollbar } from './component';\nimport type { FieldEncodeType, MarkFunctionType } from './mark';\n\nexport interface FilterDataTarget {\n data: string | IData;\n filter: string | ((datum: any, filterValues: any[]) => boolean);\n transform?: (data: any[], filterValues: any[]) => any[];\n}\n\nexport interface IBaseInteractionOptions {\n id?: string;\n\n dependency?: string | string[] | IGrammarBase | IGrammarBase[];\n\n shouldStart?: (e: any) => boolean;\n\n shouldUpdate?: (e: any) => boolean;\n\n shouldEnd?: (e: any) => boolean;\n\n shouldReset?: (e: any) => boolean;\n\n onStart?: (e: any) => boolean;\n\n onUpdate?: (e: any) => boolean;\n\n onEnd?: (e: any) => boolean;\n\n onReset?: (e: any) => boolean;\n}\n\nexport interface IInteraction<T = any> {\n readonly options: T;\n readonly type: string;\n depend: (grammar: IGrammarBase[] | IGrammarBase | string[] | string) => void;\n bind: () => void;\n unbind: () => void;\n start: (element: IElement | IGlyphElement | string | any) => void;\n reset: (element?: IElement | IGlyphElement) => void;\n getStartState: () => string;\n}\n\nexport interface IInteractionConstructor<T = any> {\n readonly type: string;\n\n new (view: IView, options?: T): IInteraction<T>;\n}\n\n/**\n * the interaction to set the active state of specified marks\n */\nexport interface ElementActiveOptions extends IBaseInteractionOptions {\n /**\n * the selector of marks\n */\n selector?: string | string[] | IMark | IMark[];\n /**\n * the trigger event name\n */\n trigger?: EventType | EventType[];\n /**\n * the reset trigger event name\n */\n triggerOff?: EventType | EventType[] | 'none';\n /**\n * the active state name\n */\n state?: string;\n}\n\nexport type ElementSelectTriggerOff = EventType | ViewEventType | 'empty' | 'none' | number;\n\n/**\n * the interaction to set the seleted state of specified marks\n */\nexport interface ElementSelectOptions extends IBaseInteractionOptions {\n /**\n * the selector of marks\n */\n selector?: string | string[] | IMark | IMark[];\n /**\n * the trigger event name\n */\n trigger?: EventType | EventType[];\n /**\n * the selected state name\n */\n state?: string;\n /**\n * the non-selected state name\n */\n reverseState?: string;\n /**\n * the reset trigger event name\n */\n triggerOff?: ElementSelectTriggerOff | ElementSelectTriggerOff[];\n /**\n * whether or not support multiple selected\n */\n isMultiple?: boolean;\n}\n\n/**\n * the interaction to set the highlight state of specified marks\n */\nexport interface ElementHighlightOptions extends IBaseInteractionOptions {\n /**\n * the selector of marks\n */\n selector?: string | string[] | IMark | IMark[];\n /**\n * the trigger event name\n */\n trigger?: EventType;\n /**\n * the reset trigger event name\n */\n triggerOff?: EventType | 'none';\n /**\n * the highlight state name\n */\n highlightState?: string;\n /**\n * the blur state name\n */\n blurState?: string;\n}\n\nexport interface ElementFilterOptions {\n /**\n * the filter type of element\n */\n filterType?: 'key' | 'groupKey';\n /**\n * the field to be filtered\n */\n filterField?: string;\n}\n\n/**\n * the interaction to set the active state of specified marks trigger by legend\n */\nexport interface ElementActiveByLegendOptions extends IBaseInteractionOptions, ElementFilterOptions {\n /**\n * the selector of marks\n */\n selector?: string | string[] | IMark | IMark[];\n /**\n * the active state name\n */\n state?: string;\n}\n\n/**\n * the interaction to set the active state of specified marks trigger by legend\n */\nexport interface ElementHighlightByLegendOptions extends IBaseInteractionOptions, ElementFilterOptions {\n /**\n * the selector of marks\n */\n selector?: string | string[] | IMark | IMark[];\n /**\n * the highlight state name\n */\n highlightState?: string;\n /**\n * the blur state name\n */\n blurState?: string;\n}\n\nexport interface ElementHighlightByNameOptions extends ElementHighlightByLegendOptions {\n graphicName?: string | string[];\n /**\n * the trigger event name\n */\n trigger?: EventType;\n /**\n * the reset trigger event name\n */\n triggerOff?: EventType | 'none';\n\n parseData?: (e: InteractionEvent) => any;\n}\n\nexport interface BrushEventParams {\n operateType: string;\n operateMask: IPolygon;\n activeElements?: (IElement | IGlyphElement)[];\n}\n\nexport interface BrushOptions extends IBaseInteractionOptions, BrushAttributes {\n /**\n * the selector of marks\n */\n selector?: string | string[] | IMark | IMark[];\n\n onStart?: (params: BrushEventParams) => boolean;\n\n onUpdate?: (params: BrushEventParams) => boolean;\n\n onEnd?: (params: BrushEventParams) => boolean;\n\n onReset?: (params: BrushEventParams) => boolean;\n}\n\nexport interface BrushHighlightOptions extends BrushOptions {\n /**\n * the highlight state name\n */\n highlightState?: string;\n /**\n * the blur state name\n */\n blurState?: string;\n}\n\nexport interface BrushActiveOptions extends BrushOptions {\n /**\n * the active state name\n */\n state?: string;\n}\n\nexport interface BrushFilterOptions extends BrushOptions {\n target: {\n data: IData | string;\n transform?: (data: any[], filterValue: any) => any[];\n };\n}\n\nexport interface DataFilterOptions extends IBaseInteractionOptions {\n /**\n * the selector of marks\n */\n source?: string | string[] | IMark | IMark[];\n\n /**\n * data target\n */\n target: {\n data: IData | string;\n filter?: string | ((datum: any, filterValue: any) => boolean);\n transform?: (data: any[], filterValue: any) => any[];\n };\n}\n\nexport interface DrillDownOptions extends BrushOptions {\n /**\n * enable brush\n */\n brush?: boolean;\n // trigger attribute is included in brush attributes\n target: {\n data: IData | string;\n transform?: (data: any[], filterValue: any) => any[];\n };\n}\n\nexport interface RollUpOptions extends DataFilterOptions {\n /**\n * the trigger event name\n */\n trigger?: EventType;\n /**\n * the reset trigger event name\n */\n triggerOff?: EventType | ViewEventType | 'empty';\n}\n\nexport type CustomTooltipCallback = (\n datum: any,\n element: IElement,\n parameters: any\n) => TooltipRowAttrs | TooltipRowAttrs[];\n\nexport interface ITooltipRow {\n visible?: boolean;\n key?: MarkFunctionType<string | Partial<ITextGraphicAttribute>> | FieldEncodeType;\n value?: MarkFunctionType<string | Partial<ITextGraphicAttribute>> | FieldEncodeType;\n symbol?: MarkFunctionType<string | Partial<ISymbolGraphicAttribute>> | FieldEncodeType;\n}\n\nexport type TooltipType = 'x' | 'y' | 'angle' | 'radius';\n\nexport interface TooltipOptions extends IBaseInteractionOptions {\n /**\n * the selector of marks\n */\n selector?: string | string[] | IMark | IMark[];\n /**\n * the trigger event name\n */\n trigger?: EventType;\n /**\n * the reset trigger event name\n */\n triggerOff?: EventType | 'none';\n\n title?: ITooltipRow | string | CustomTooltipCallback;\n content?: ITooltipRow | ITooltipRow[] | CustomTooltipCallback;\n attributes?: MarkFunctionType<TooltipAttributes>;\n}\n\nexport interface DimensionTooltipOptions extends TooltipOptions {\n scale?: IScale | string;\n tooltipType?: TooltipType;\n target?: {\n data: IData | string;\n filter: string | ((datum: any, tooltipValue: any) => boolean);\n };\n avoidMark?: string | string[];\n container?: string | IMark;\n center?: IPointLike;\n}\n\nexport type CrosshairType = 'x' | 'y' | 'angle' | 'radius' | 'radius-polygon';\n\nexport type CrosshairShape = 'line' | 'rect';\n\nexport interface CrosshairOptions extends IBaseInteractionOptions {\n /**\n * the trigger event name\n */\n trigger?: EventType;\n /**\n * the reset trigger event name\n */\n triggerOff?: EventType | 'none';\n scale?: IScale | string;\n crosshairType?: CrosshairType;\n crosshairShape?: CrosshairShape;\n container?: string | IMark;\n radius?: number;\n center?: IPointLike;\n attributes?: MarkFunctionType<BaseCrosshairAttrs>;\n}\nexport interface ViewNavigationBaseOptions {\n enableX?: boolean;\n enableY?: boolean;\n scaleX?: string | IScale;\n scaleY?: string | IScale;\n dataTargetX?: FilterDataTarget;\n dataTargetY?: FilterDataTarget;\n throttle?: number;\n linkedComponentX?: string | IDatazoom | IScrollbar;\n linkedComponentY?: string | IDatazoom | IScrollbar;\n rangeX?: [number, number] | (() => [number, number]);\n rangeY?: [number, number] | (() => [number, number]);\n}\n\nexport interface ViewZoomSimpleOptions {\n realtime?: boolean;\n rate?: number;\n focus?: boolean;\n trigger?: EventType;\n endTrigger?: EventType;\n triggerOff?: EventType | 'none';\n}\n\nexport type ViewZoomOptions = ViewZoomSimpleOptions & IBaseInteractionOptions & ViewNavigationBaseOptions;\n\nexport interface ViewScrollSimpleOptions {\n realtime?: boolean;\n reversed?: boolean;\n trigger?: EventType;\n endTrigger?: EventType;\n}\nexport type ViewScrollOptions = ViewScrollSimpleOptions & IBaseInteractionOptions & ViewNavigationBaseOptions;\n\nexport interface ViewDragSimpleOptions {\n realtime?: boolean;\n reversed?: boolean;\n trigger?: EventType;\n endTrigger?: EventType;\n updateTrigger?: EventType;\n}\n\nexport type ViewDragOptions = ViewDragSimpleOptions & IBaseInteractionOptions & ViewNavigationBaseOptions;\n\nexport interface ViewRoamOptions extends IBaseInteractionOptions, ViewNavigationBaseOptions {\n zoom?: ViewZoomSimpleOptions & { enable?: boolean };\n scroll?: ViewScrollSimpleOptions & { enable?: boolean };\n drag?: ViewDragSimpleOptions & { enable?: boolean };\n}\n\n/**\n * the interaction to set the highlight state of specified marks\n */\nexport interface SankeyHighlightOptions extends IBaseInteractionOptions {\n /**\n * the selector of node mark\n */\n nodeSelector?: string | IMark;\n /**\n * the selector of link mark\n */\n linkSelector?: string | IMark;\n /**\n * the trigger event name\n */\n trigger?: EventType;\n /**\n * the reset trigger event name\n */\n triggerOff?: EventType | 'none';\n /**\n * the highlight state name\n */\n highlightState?: string;\n /**\n * the blur state name\n */\n blurState?: string;\n /** set highlight state to different type of nodes */\n effect?: 'adjacency' | 'related';\n}\n\nexport interface FishEyeOptions extends IBaseInteractionOptions {\n selector?: string | string[] | IMark | IMark[];\n /** the radius of x-direction */\n radiusX?: number;\n /** the radius of y-direction */\n radiusY?: number;\n /** the radiusRatio of x-direction */\n radiusRatioX?: number;\n /** the radiusRatio of y-direction */\n radiusRatioY?: number;\n /** x方向的扰动 */\n distortionX?: number;\n /** y方向的扰动 */\n distortionY?: number;\n /** 禁用 x方向的变形 */\n enableX?: boolean;\n /** 禁用y方向的变形 */\n enableY?: boolean;\n /** x方向的scale */\n scaleX?: string | IScale;\n /** y方向的scale */\n scaleY?: string | IScale;\n /** 节流的时长,单位为ms */\n throttle?: number;\n /**\n * the trigger event name\n */\n trigger?: EventType;\n /**\n * the trigger event of end\n */\n endTrigger?: EventType;\n /**\n * the trigger event of updating\n */\n updateTrigger?: EventType;\n /**\n * the trigger event of reset\n */\n triggerOff?: string | 'none';\n}\n\nexport interface ElementActiveSpec extends ElementActiveOptions {\n type: 'element-active';\n}\nexport interface ElementSelectSpec extends ElementSelectOptions {\n type: 'element-select';\n}\nexport interface ElementHighlightSpec extends ElementHighlightOptions {\n type: 'element-highlight';\n}\nexport interface ElementHighlightByKeySpec extends ElementHighlightOptions {\n type: 'element-highlight-by-key';\n}\nexport interface ElementHighlightByGroupSpec extends ElementHighlightOptions {\n type: 'element-highlight-by-group';\n}\nexport interface ElementActiveByLegendSpec extends ElementActiveByLegendOptions {\n type: 'element-active-by-legend';\n}\n\nexport interface ElementHighlightByLegendSpec extends ElementHighlightByLegendOptions {\n type: 'element-highlight-by-legend';\n}\n\nexport interface ElementHighlightByNameSpec extends ElementHighlightByNameOptions {\n type: 'element-highlight-by-name';\n}\n\nexport interface BrushHighlightSpec extends BrushHighlightOptions {\n type: 'brush-highlight';\n}\n\nexport interface BrushActiveSpec extends BrushActiveOptions {\n type: 'brush-active';\n}\n\nexport interface BrushFilterSpec extends BrushFilterOptions {\n type: 'brush-filter';\n}\n\nexport interface LegendFilterSpec extends DataFilterOptions {\n type: 'legend-filter';\n}\n\nexport interface DatazoomFilterSpec extends DataFilterOptions {\n type: 'datazoom-filter';\n}\n\nexport interface SliderFilterSpec extends DataFilterOptions {\n type: 'slider-filter';\n}\n\nexport interface PlayerFilterSpec extends DataFilterOptions {\n type: 'player-filter';\n}\n\nexport interface ScrollbarFilterSpec extends DataFilterOptions {\n type: 'scrollbar-filter';\n}\n\nexport interface DrillDownSpec extends DrillDownOptions {\n type: 'drill-down';\n}\n\nexport interface RollUpSpec extends RollUpOptions {\n type: 'roll-up';\n}\n\nexport interface TooltipSpec extends TooltipOptions {\n type: 'tooltip';\n}\n\nexport interface DimensionTooltipSpec extends DimensionTooltipOptions {\n type: 'dimension-tooltip';\n}\n\nexport interface CrosshairSpec extends CrosshairOptions {\n type: 'crosshair';\n}\nexport interface ViewRoamSpec extends ViewRoamOptions {\n type: 'view-roam';\n}\n\nexport interface ViewZoomSpec extends ViewZoomOptions {\n type: 'view-zoom';\n}\n\nexport interface ViewScrollSpec extends ViewScrollOptions {\n type: 'view-scroll';\n}\n\nexport interface ViewDragSpec extends ViewDragOptions {\n type: 'view-drag';\n}\n\nexport interface SankeyHighlightSpec extends SankeyHighlightOptions {\n type: 'sankey-highlight';\n}\n\nexport interface FishEyeSpec extends FishEyeOptions {\n type: 'fish-eye';\n}\n\nexport interface CustomizedInteractionSpec extends IBaseInteractionOptions {\n type: string;\n}\n\nexport type InteractionSpec =\n | ElementActiveSpec\n | ElementSelectSpec\n | ElementHighlightSpec\n | ElementHighlightByKeySpec\n | ElementHighlightByGroupSpec\n | ElementActiveByLegendSpec\n | ElementHighlightByLegendSpec\n | ElementHighlightByNameSpec\n | BrushHighlightSpec\n | BrushActiveSpec\n | BrushFilterSpec\n | LegendFilterSpec\n | DatazoomFilterSpec\n | SliderFilterSpec\n | PlayerFilterSpec\n | ScrollbarFilterSpec\n | DrillDownSpec\n | RollUpSpec\n | TooltipSpec\n | DimensionTooltipSpec\n | CrosshairSpec\n | ViewRoamSpec\n | ViewZoomSpec\n | ViewScrollSpec\n | ViewDragSpec\n | SankeyHighlightSpec\n | FishEyeSpec\n | CustomizedInteractionSpec;\n\nexport interface ViewNavigationRange {\n needUpdate?: boolean;\n x?: [number, number];\n y?: [number, number];\n}\n\nexport interface IViewZoomMixin {\n updateZoomRange: (\n rangeFactor: [number, number],\n range: [number, number],\n zoomEvent: { zoomDelta: number; zoomX: number; zoomY: number },\n zoomOptions?: ViewZoomSimpleOptions\n ) => [number, number];\n formatZoomEvent: (e: InteractionEvent) => InteractionEvent & { zoomDelta?: number; zoomX?: number; zoomY?: number };\n handleZoomStart: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n zoomOptions?: ViewZoomSimpleOptions\n ) => ViewNavigationRange;\n handleZoomEnd: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n zoomOptions?: ViewZoomSimpleOptions\n ) => ViewNavigationRange;\n handleZoomReset: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n zoomOptions?: ViewZoomSimpleOptions\n ) => ViewNavigationRange;\n}\n\nexport interface IViewScrollMixin {\n formatScrollEvent: (e: InteractionEvent) => InteractionEvent & { scrollX?: number; scrollY?: number };\n handleScrollStart: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n scrollOptions?: ViewScrollSimpleOptions\n ) => ViewNavigationRange;\n handleScrollEnd: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n scrollOptions?: ViewScrollSimpleOptions\n ) => ViewNavigationRange;\n}\n\nexport interface IViewDragMixin {\n handleDragStart: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n dragOptions?: ViewDragSimpleOptions\n ) => ViewNavigationRange;\n handleDragUpdate: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n dragOptions?: ViewDragSimpleOptions\n ) => ViewNavigationRange;\n handleDragEnd: (\n e: InteractionEvent,\n navState: Partial<Record<'x' | 'y', ViewStateByDim>>,\n dragOptions?: ViewDragSimpleOptions\n ) => ViewNavigationRange;\n}\n\nexport interface IToggleStateMixin {\n updateStates: (\n newStatedElements: (IElement | IGlyphElement)[],\n prevStatedElements?: (IElement | IGlyphElement)[],\n state?: string,\n reverseState?: string\n ) => (IElement | IGlyphElement)[];\n clearAllStates: (state?: string, reverseState?: string) => void;\n}\n\nexport interface ViewStateByDim {\n scale?: IScale;\n data?: IData;\n linkedComponent?: IDatazoom | IScrollbar;\n filterValue?: any[];\n wholeScale?: IBaseScale;\n initRangeFactor?: [number, number];\n getCurrentRange?: () => [number, number];\n rangeFactor?: [number, number];\n}\n"]}
|
package/es/view/View.js
CHANGED
|
@@ -727,8 +727,8 @@ export default class View extends EventEmitter {
|
|
|
727
727
|
release() {
|
|
728
728
|
var _a, _b, _c;
|
|
729
729
|
this.removeAllInteractions(), this.releaseStageEvent(), this._unBindResizeEvent(),
|
|
730
|
-
this.clearProgressive(), Factory.unregisterRuntimeTransforms(),
|
|
731
|
-
this.grammars.release(), this._cachedGrammars.release(), this._dataflow.release(),
|
|
730
|
+
this.clearProgressive(), Factory.unregisterRuntimeTransforms(), Logger.setInstance(null),
|
|
731
|
+
this.animate.stop(), this.grammars.release(), this._cachedGrammars.release(), this._dataflow.release(),
|
|
732
732
|
this._dataflow = null, null === (_b = null === (_a = this.renderer) || void 0 === _a ? void 0 : _a.release) || void 0 === _b || _b.call(_a),
|
|
733
733
|
this.renderer = null, this._boundInteractions = null, this.removeAllListeners(),
|
|
734
734
|
null === (_c = this._eventListeners) || void 0 === _c || _c.forEach((listener => {
|
package/es/view/View.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/view/View.ts"],"names":[],"mappings":"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","file":"View.js","sourcesContent":["import type { IBounds, ILogger } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { EventEmitter, debounce, isObject, isString, getContainerSize, Logger, array, isNil } from '@visactor/vutils';\nimport type { IColor } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { vglobal } from '@visactor/vrender-core';\nimport type { CoordinateType } from '@visactor/vgrammar-coordinate';\nimport type { IElement } from './../types/element';\nimport type {\n MarkSpec,\n IData,\n ISignal,\n ViewSpec,\n IView,\n IViewOptions,\n IViewThemeConfig,\n IViewEventConfig,\n Hooks,\n IMark,\n EventSpec,\n GroupMarkSpec,\n BaseEventSpec,\n MarkType,\n GrammarScaleType,\n SignalFunctionType,\n IScale,\n IGrammarBase,\n IGroupMark,\n IGlyphMark,\n ICoordinate,\n BaseEventHandler,\n GlyphMarkSpec,\n IRecordedGrammars,\n IComponent,\n ComponentSpec,\n IRecordedTreeGrammars,\n IMarkTreeNode,\n IRunningConfig,\n IViewAnimate,\n ITheme,\n InteractionSpec,\n IInteraction\n} from '../types/';\nimport { Data } from './data';\nimport { initializeEventConfig, permit, prevent } from './events';\nimport Dataflow from './dataflow';\nimport { traverseMarkTree } from '../graph/mark-tree';\nimport { BridgeElementKey } from '../graph/constants';\nimport CanvasRenderer from '../graph/canvas-renderer';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport {\n BROWSER,\n NO_TRAP,\n SIGNAL_WIDTH,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_AUTOFIT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_VIEW_HEIGHT,\n EVENT_SOURCE_VIEW,\n EVENT_SOURCE_WINDOW,\n SIGNAL_VIEW_BOX\n} from './constants';\nimport { Signal } from './signal';\nimport {\n BuiltInSignalID,\n builtInSignals,\n normalizeMarkTree,\n normalizeRunningConfig,\n normalizePadding\n} from '../parse/view';\nimport { parseHandler, parseEventSelector, generateFilterByMark, ID_PREFIX, NAME_PREFIX } from '../parse/event';\nimport { isGrammar, parseReference } from '../parse/util';\nimport { configureEnvironment } from '../graph/util/env';\nimport { GroupMark } from './group';\nimport { Mark } from './mark';\nimport { defaultDoLayout } from '../graph/layout/layout';\nimport { GlyphMark } from './glyph';\nimport type { IMorph } from '../types/morph';\nimport { Morph } from '../graph/animation/morph';\nimport { RecordedGrammars, RecordedTreeGrammars } from './grammar-record';\nimport { ViewAnimate } from './animate';\nimport type { IRenderer } from '../types/renderer';\nimport { ComponentEnum, HOOK_EVENT, LayoutState, GrammarMarkType } from '../graph/enums';\nimport type {\n IAxis,\n IDatazoom,\n IGrid,\n ILabel,\n ILegend,\n IPlayer,\n IScrollbar,\n ISlider,\n ITitle\n} from '../types/component';\nimport { Text } from '../semantic-marks/text';\nimport { ThemeManager } from '../theme/theme-manager';\nimport { Factory } from '../core/factory';\nimport { Component } from './component';\nimport { isMarkType, removeGraphicItem } from '../graph/util/graphic';\n\n/**\n * Create a new View instance from a VGrammar dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The VGrammar dataflow runtime specification.\n */\nexport default class View extends EventEmitter implements IView {\n /** render element */\n container: HTMLElement;\n\n /** renderer */\n renderer: IRenderer;\n animate: IViewAnimate;\n rootMark: IGroupMark;\n\n /** life circle hooks */\n hooks: Hooks;\n\n logger: ILogger;\n\n grammars: IRecordedGrammars;\n\n private _spec: ViewSpec;\n private _config: IViewThemeConfig;\n private _options: IViewOptions;\n\n private _cachedGrammars: IRecordedTreeGrammars;\n private _willMorphMarks: { prev: IMark[]; next: IMark[] }[];\n\n /** morph animate */\n private _morph: IMorph;\n\n private _eventConfig: IViewEventConfig;\n private _eventListeners: Array<{\n type: string;\n source: any;\n handler: any;\n }>;\n\n private _theme: ITheme;\n\n private _dataflow: Dataflow;\n\n /** 初次渲染或者更新spec,需要构建布局树 */\n private _needBuildLayoutTree?: boolean;\n /** 布局阶段 */\n private _layoutState?: LayoutState;\n\n /** 布局树,存储所有需要计算布局的mark元素 */\n private _layoutMarks?: IMark[];\n\n private _background?: IColor;\n private _eventCache: Record<string, () => void>;\n /** 当前是否存在增量渲染元素 */\n private _progressiveMarks?: IMark[];\n private _progressiveRafId?: number;\n private _observer: ResizeObserver = null;\n private _boundInteractions?: IInteraction[];\n\n static useRegisters(comps: (() => void)[]) {\n comps.forEach((fn: () => void) => {\n fn();\n });\n }\n\n constructor(options: IViewOptions = {}, config: IViewThemeConfig = {}) {\n super();\n this._config = config;\n this._options = Object.assign(\n {\n mode: BROWSER\n },\n options\n );\n this.initialize();\n }\n // emit: <T extends EventEmitter.EventNames<string | symbol>>(\n // event: T,\n // ...args: EventEmitter.EventArgs<string | symbol, T>\n // ) => boolean;\n\n // --- Lookup Grammars ---\n\n getGrammarById(id: string) {\n return this.grammars.getGrammar(id);\n }\n getSignalById<T>(id: string): ISignal<T> | null {\n return this.grammars.getSignal(id);\n }\n getDataById(id: string): IData | null {\n return this.grammars.getData(id);\n }\n getScaleById(id: string): IScale | null {\n return this.grammars.getScale(id);\n }\n getCoordinateById(id: string) {\n return this.grammars.getCoordinate(id);\n }\n getMarkById(id: string): IMark | null {\n return this.grammars.getMark(id);\n }\n\n getCustomizedById(id: string): IGrammarBase | null {\n return this.grammars.getCustomized(id);\n }\n\n getGrammarsByName(name: string) {\n return this.grammars.filter(grammar => grammar.name() === name);\n }\n\n getGrammarsByType(grammarType: string) {\n return this.grammars.filter(grammar => grammar.grammarType === grammarType);\n }\n getMarksByType(markType: string) {\n return this.grammars.getAllMarks().filter(mark => mark.markType === markType);\n }\n getMarksByName(name: string): IMark[] | null {\n return this.grammars.getAllMarks().filter(mark => mark.name() === name);\n }\n getMarksBySelector(selector: string | string[] | IMark | IMark[]): IMark[] | null {\n if (!selector) {\n return null;\n }\n const selectors = array(selector);\n const res: IMark[] = [];\n selectors.forEach(selectorStr => {\n if (isGrammar(selectorStr)) {\n res.push(selectorStr);\n return;\n }\n\n if (selectorStr[0] === ID_PREFIX) {\n const mark = this.getMarkById(selectorStr.slice(1));\n\n mark && res.push(mark);\n\n return;\n }\n\n const marks =\n selectorStr[0] === NAME_PREFIX\n ? this.getMarksByName(selectorStr.slice(1))\n : isMarkType(selectorStr)\n ? this.getMarksByType(selectorStr)\n : null;\n\n if (marks && marks.length) {\n marks.forEach(mark => {\n res.push(mark);\n });\n }\n });\n\n return res;\n }\n\n // --- Grammar ---\n\n private updateSignal<T>(signal: string | ISignal<T>, value: T) {\n if (isString(signal)) {\n signal = this.getSignalById<T>(signal);\n }\n signal.set(value);\n this.commit(signal);\n }\n\n signal<T>(value?: T, update?: SignalFunctionType<T>): ISignal<T> {\n const signal: ISignal<T> = new Signal<T>(this);\n if (arguments.length >= 1) {\n signal.value(value);\n }\n if (arguments.length >= 2) {\n signal.update(update);\n }\n this.grammars.record(signal);\n this._dataflow.add(signal);\n return signal;\n }\n\n data(values?: any[]): IData {\n const data: IData = new Data(this, values);\n this.grammars.record(data);\n this._dataflow.add(data);\n return data;\n }\n\n scale(type: GrammarScaleType) {\n const scale = Factory.createGrammar('scale', this, type) as IScale;\n\n if (scale) {\n this.grammars.record(scale);\n this._dataflow.add(scale);\n }\n return scale;\n }\n\n coordinate(type: CoordinateType) {\n const coordinate = Factory.createGrammar('coordinate', this, type) as ICoordinate;\n\n if (coordinate) {\n this.grammars.record(coordinate);\n this._dataflow.add(coordinate);\n }\n return coordinate;\n }\n\n mark(\n type: MarkType,\n group?: IGroupMark | string,\n markOptions?: { glyphType?: string; componentType?: string; mode?: '2d' | '3d' }\n ) {\n const groupMark = isString(group) ? (this.getMarkById(group) as IGroupMark) : group;\n\n let mark: IMark;\n switch (type) {\n case GrammarMarkType.group:\n mark = new GroupMark(this, groupMark);\n break;\n case GrammarMarkType.glyph:\n mark = new GlyphMark(this, markOptions?.glyphType, groupMark);\n break;\n // components\n case GrammarMarkType.component:\n mark = Factory.hasComponent(markOptions?.componentType)\n ? Factory.createComponent(markOptions?.componentType, this, groupMark, markOptions?.mode)\n : new Component(this, markOptions?.componentType, groupMark, markOptions?.mode);\n break;\n case GrammarMarkType.text:\n mark = new Text(this, type, groupMark);\n break;\n default:\n mark = Factory.hasMark(type) ? Factory.createMark(type, this, groupMark) : new Mark(this, type, groupMark);\n }\n this.grammars.record(mark);\n this._dataflow.add(mark);\n return mark;\n }\n\n group(group?: IGroupMark | string) {\n return this.mark(GrammarMarkType.group, group) as IGroupMark;\n }\n\n glyph(glyphType: string, group: IGroupMark | string) {\n return this.mark(GrammarMarkType.glyph, group, { glyphType }) as IGlyphMark;\n }\n\n component(componentType: string, group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType, mode }) as IComponent;\n }\n\n axis(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.axis, mode }) as IAxis;\n }\n\n grid(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.grid, mode }) as IGrid;\n }\n\n legend(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.legend }) as ILegend;\n }\n\n slider(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.slider }) as ISlider;\n }\n\n label(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.label }) as ILabel;\n }\n\n datazoom(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.datazoom }) as IDatazoom;\n }\n\n player(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.player }) as IPlayer;\n }\n\n title(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.title }) as ITitle;\n }\n\n scrollbar(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.scrollbar }) as IScrollbar;\n }\n\n customized(type: string, spec: any) {\n const grammar = Factory.createGrammar(type, this, spec?.type);\n\n if (grammar) {\n grammar.parse(spec);\n this.grammars.record(grammar);\n this._dataflow.add(grammar);\n return grammar;\n }\n }\n\n addGrammar(grammar: IGrammarBase) {\n if (this.grammars.find(storedGrammar => storedGrammar.uid === grammar.uid)) {\n return this;\n }\n this.grammars.record(grammar);\n this._dataflow.add(grammar);\n grammar.parse(grammar.getSpec());\n\n // update layout tree after grammar update\n this._needBuildLayoutTree = true;\n return this;\n }\n\n removeGrammar(grammar: string | IGrammarBase) {\n const recordedGrammar = isString(grammar) ? this.getGrammarById(grammar) : grammar;\n if (!recordedGrammar || !this.grammars.find(storedGrammar => storedGrammar.uid === recordedGrammar.uid)) {\n return this;\n }\n if (recordedGrammar.grammarType === 'mark') {\n (recordedGrammar as IMark).prepareRelease();\n }\n this._cachedGrammars.record(recordedGrammar);\n this._dataflow.remove(recordedGrammar);\n this.grammars.unrecord(recordedGrammar);\n\n // update layout tree after grammar update\n this._needBuildLayoutTree = true;\n return this;\n }\n\n removeAllGrammars() {\n this.grammars.traverse(grammar => {\n if (grammar.grammarType === 'signal' && BuiltInSignalID.includes(grammar.id())) {\n return;\n } else if (grammar.grammarType === 'mark' && grammar.id() === 'root') {\n return;\n }\n this.removeGrammar(grammar);\n });\n return this;\n }\n\n removeAllGraphicItems() {\n this.traverseMarkTree((mark: IMark) => {\n if (mark.graphicItem) {\n removeGraphicItem(mark.graphicItem);\n mark.elementMap.forEach(element => {\n element.resetGraphicItem();\n });\n mark.graphicItem = null;\n }\n });\n\n return this;\n }\n\n // --- Handle Spec ---\n\n parseSpec(spec: ViewSpec) {\n this.emit(HOOK_EVENT.BEFORE_PARSE_VIEW);\n this._spec = spec;\n normalizeMarkTree(spec);\n\n if (spec.theme) {\n this.theme(spec.theme);\n } else {\n this.theme(ThemeManager.getDefaultTheme());\n }\n\n if (spec.width) {\n this.width(spec.width);\n }\n\n if (spec.height) {\n this.height(spec.height);\n }\n\n this.padding(spec.padding ?? this._options.padding ?? this._theme.padding);\n\n if (!this.width() || !this.height()) {\n const size = this._getContainerSize();\n\n if (size) {\n this.updateSignal(SIGNAL_WIDTH, size.width);\n this.updateSignal(SIGNAL_HEIGHT, size.height);\n }\n }\n\n if (spec.signals?.length) {\n spec.signals.forEach(signal => {\n this.signal().parse(signal);\n });\n }\n\n if (spec.data?.length) {\n spec.data.forEach(data => {\n this.data(null).parse(data);\n });\n }\n\n if (spec.coordinates?.length) {\n spec.coordinates.forEach(coordinate => {\n this.coordinate(coordinate.type)?.parse(coordinate);\n });\n }\n\n if (spec.scales?.length) {\n spec.scales.forEach(scale => {\n this.scale(scale.type)?.parse(scale);\n });\n }\n\n const customizedGrammars = Factory.getGrammars();\n\n Object.keys(customizedGrammars).forEach(key => {\n const { specKey } = customizedGrammars[key];\n\n if (spec[specKey] && spec[specKey].length) {\n spec[specKey].forEach((specValue: any) => {\n this.customized(key, specValue);\n });\n }\n });\n\n if (spec.marks && spec.marks.length) {\n spec.marks.forEach(mark => {\n this.parseMarkSpec(mark);\n });\n }\n\n if (spec.events && spec.events.length) {\n spec.events.forEach(eventConfig => {\n this.event(eventConfig);\n });\n }\n\n if (spec.interactions && spec.interactions.length) {\n spec.interactions.forEach(interaction => {\n this.interaction(interaction.type, interaction);\n });\n }\n\n if (spec.animation === false) {\n this.animate.disable();\n } else {\n this.animate.enable();\n }\n\n this.emit(HOOK_EVENT.AFTER_PARSE_VIEW);\n\n // update layout tree after update spec\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n return this;\n }\n\n updateSpec(spec: ViewSpec) {\n this.removeAllInteractions();\n this.removeAllGrammars();\n return this.parseSpec(spec);\n }\n\n private parseBuiltIn() {\n // 创建内置的 Signal\n builtInSignals(this._options, this._config, this.getCurrentTheme()).forEach(signalSpec => {\n const signal = this.signal().parse(signalSpec);\n if (signalSpec.value) {\n signal.set(signalSpec.value);\n }\n });\n\n const rootMark: GroupMarkSpec = {\n id: 'root',\n type: 'group',\n encode: {\n enter: { x: 0, y: 0 },\n update: {\n width: { signal: 'width' },\n height: { signal: 'height' }\n }\n }\n };\n this.parseMarkSpec(rootMark);\n this.rootMark = this.getMarkById('root') as IGroupMark;\n }\n\n private parseMarkSpec(spec: MarkSpec) {\n const markOptions =\n spec.type === GrammarMarkType.glyph\n ? { glyphType: (spec as GlyphMarkSpec).glyphType }\n : spec.type === GrammarMarkType.component\n ? { componentType: (spec as ComponentSpec).componentType, mode: (spec as ComponentSpec).mode }\n : null;\n this.mark(spec.type, spec.group, markOptions).parse(spec);\n (spec as GroupMarkSpec).marks?.forEach(childSpec => {\n this.parseMarkSpec(childSpec);\n });\n }\n\n // --- Theme API ---\n theme(theme: ITheme | string) {\n if (isString(theme)) {\n this._theme = ThemeManager.getTheme(theme) ?? ThemeManager.getDefaultTheme();\n } else {\n this._theme = theme;\n }\n const { background, padding } = this._spec ?? {};\n if (this._theme) {\n this.background(background ?? this._options.background ?? this._theme.background);\n this.padding(padding ?? this._options.padding ?? this._theme.padding);\n this.renderer.stage()?.setTheme?.(Object.assign({}, this._theme.marks));\n } else {\n this.background(background ?? this._options.background);\n this.padding(padding ?? this._options.padding);\n }\n\n return this;\n }\n\n getCurrentTheme() {\n return this._theme;\n }\n\n setCurrentTheme(theme: ITheme | string, render: boolean = true) {\n this.theme(theme);\n // trigger encode for all marks\n this.grammars.getAllMarks().forEach(mark => {\n mark.commit();\n });\n\n if (render) {\n this.evaluate();\n\n // FIXME: trigger render\n this.renderer.render(true);\n } else {\n this._dataflow.evaluate();\n }\n\n return this;\n }\n\n // --- Global Configure ---\n\n background(value?: IColor) {\n if (arguments.length) {\n this._background = value;\n this.renderer.background(value);\n return value;\n }\n return this._background;\n }\n\n width(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_WIDTH);\n if (arguments.length) {\n this._options.width = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n height(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_HEIGHT);\n if (arguments.length) {\n this._options.height = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n viewWidth(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_VIEW_WIDTH);\n if (arguments.length) {\n // view width depends on canvas width\n const padding = this.padding();\n this.width(value + padding.left + padding.right);\n return value;\n }\n return signal.output() as number;\n }\n\n viewHeight(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_VIEW_HEIGHT);\n if (arguments.length) {\n // view height depends on canvas height\n const padding = this.padding();\n this.height(value + padding.top + padding.bottom);\n return value;\n }\n return signal.output() as number;\n }\n\n padding(value?: number | { top?: number; left?: number; right?: number; bottom?: number }) {\n const signal = this.getSignalById<{ top: number; left: number; right: number; bottom: number }>(SIGNAL_PADDING);\n if (arguments.length) {\n const padding = normalizePadding(value);\n this.updateSignal(signal, padding);\n return padding;\n }\n return normalizePadding(signal.output());\n }\n\n autoFit(value?: boolean) {\n const signal = this.getSignalById<boolean>(SIGNAL_AUTOFIT);\n if (arguments.length) {\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as boolean;\n }\n\n getViewBox() {\n const signal = this.getSignalById<IBounds>(SIGNAL_VIEW_BOX);\n\n return signal?.output() as IBounds;\n }\n\n // --- Layout ---\n\n updateLayoutTag() {\n this._layoutState = LayoutState.before;\n return this;\n }\n\n getLayoutState() {\n return this._layoutState;\n }\n\n private buildLayoutTree() {\n const markMap: Record<number, boolean> = {};\n const rootMarks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n markMap[mark.id()] = true;\n\n if (mark.group) {\n if (!markMap[mark.group.id()]) {\n rootMarks.push(mark);\n }\n } else {\n rootMarks.push(mark);\n }\n\n if (mark.markType === GrammarMarkType.group) {\n (mark as IGroupMark).updateLayoutChildren();\n }\n },\n (mark: IMark) => mark.needLayout()\n );\n\n this._layoutMarks = rootMarks;\n }\n\n private doLayout() {\n const doLayout = this._options.doLayout || defaultDoLayout;\n if (doLayout && this._layoutMarks?.length) {\n this.emit(HOOK_EVENT.BEFORE_DO_LAYOUT);\n doLayout(this._layoutMarks, this._options, this);\n this.emit(HOOK_EVENT.AFTER_DO_LAYOUT);\n }\n }\n\n private handleLayoutEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_LAYOUT_END);\n this._layoutMarks.forEach(layoutMark => {\n traverseMarkTree(\n layoutMark,\n 'layoutChildren',\n (mark: IMark) => {\n mark.handleLayoutEnd();\n },\n // 顶层节点,不需要重新执行了\n (mark: IMark) => mark !== layoutMark\n );\n });\n this.emit(HOOK_EVENT.AFTER_MARK_LAYOUT_END);\n }\n\n private handleRenderEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_RENDER_END);\n traverseMarkTree(this.rootMark, 'children', (mark: IMark) => {\n mark.handleRenderEnd();\n });\n this.emit(HOOK_EVENT.AFTER_MARK_RENDER_END);\n }\n\n // --- Dataflow ---\n\n commit(grammar: IGrammarBase) {\n this._dataflow.commit(grammar);\n return this;\n }\n\n run(runningConfig?: IRunningConfig) {\n this.evaluate(runningConfig);\n\n return this;\n }\n\n private doRender(immediately: boolean) {\n this.emit(HOOK_EVENT.BEFORE_DO_RENDER);\n // render as needed\n if (this.renderer) {\n if (!this._progressiveMarks) {\n this.animate.animate();\n }\n // 绘图 =>\n this.renderer.render(immediately);\n this.handleRenderEnd();\n }\n this.emit(HOOK_EVENT.AFTER_DO_RENDER);\n }\n\n private evaluate(runningConfig?: IRunningConfig) {\n const normalizedRunningConfig = normalizeRunningConfig(runningConfig);\n\n const grammarWillDetach = this._cachedGrammars.size() > 0;\n\n if (grammarWillDetach) {\n this.reuseCachedGrammars(normalizedRunningConfig);\n this.detachCachedGrammar();\n }\n // For most of time, width & height signal won't be modified duration dataflow,\n // so resizing before generating vRender graphic items should be faster.\n const hasResize = this._resizeRenderer();\n const hasUpdate = this._dataflow.hasCommitted();\n\n // if no grammar is update and layout is unnecessary, end evaluating\n if (!grammarWillDetach && !hasUpdate && !this._layoutState && !hasResize) {\n return this;\n }\n\n this.clearProgressive();\n\n // evaluate dataflow\n this._dataflow.evaluate();\n\n if (this._needBuildLayoutTree) {\n this.buildLayoutTree();\n this._needBuildLayoutTree = false;\n }\n\n if (this._layoutState) {\n this._layoutState = LayoutState.layouting;\n this.doLayout();\n\n if (this._dataflow.hasCommitted()) {\n this._layoutState = LayoutState.reevaluate;\n this._dataflow.evaluate();\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n // resize again if width/height signal is updated duration dataflow\n this._resizeRenderer();\n\n this._willMorphMarks?.forEach(morphMarks => {\n this._morph.morph(morphMarks.prev, morphMarks.next, normalizedRunningConfig);\n });\n this._willMorphMarks = null;\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doRender(true);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private reuseCachedGrammars(runningConfig: IRunningConfig) {\n if (!this._willMorphMarks) {\n this._willMorphMarks = [];\n }\n\n if (runningConfig.reuse) {\n const reuseDiffUpdate = (diff: { prev: IGrammarBase; next: IGrammarBase }) => {\n diff.next.reuse(diff.prev);\n diff.prev.detachAll();\n diff.prev.clear();\n this._cachedGrammars.unrecord(diff.prev);\n };\n\n const diffedSignal = this._morph.diffGrammar(\n this._cachedGrammars.getAllSignals(),\n this.grammars.getAllSignals().filter(signal => !BuiltInSignalID.includes(signal.id()))\n );\n diffedSignal.update.forEach(reuseDiffUpdate);\n\n const diffedData = this._morph.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData());\n diffedData.update.forEach(reuseDiffUpdate);\n\n const diffedScale = this._morph.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales());\n diffedScale.update.forEach(reuseDiffUpdate);\n\n const diffedCoordinate = this._morph.diffGrammar(\n this._cachedGrammars.getAllCoordinates(),\n this.grammars.getAllCoordinates()\n );\n diffedCoordinate.update.forEach(reuseDiffUpdate);\n\n // TODO: reuse custom\n }\n\n const diffedMark = this._morph.diffMark(\n this._cachedGrammars.getAllMarks(),\n this.grammars.getAllMarks().filter(mark => mark.id() !== 'root'),\n runningConfig\n );\n diffedMark.update.forEach(diff => {\n const matched =\n diff.prev.length === 1 && diff.next.length === 1 && diff.prev[0].markType === diff.next[0].markType;\n const enableMarkMorphConfig =\n diff.prev.every(mark => mark.getMorphConfig().morph) && diff.next.every(mark => mark.getMorphConfig().morph);\n if (matched && runningConfig.reuse) {\n diff.next[0].reuse(diff.prev[0]);\n diff.prev[0].detachAll();\n diff.prev[0].clear();\n this._cachedGrammars.unrecord(diff.prev[0]);\n } else if ((runningConfig.morph && enableMarkMorphConfig) || runningConfig.morphAll) {\n this._willMorphMarks.push({ prev: diff.prev, next: diff.next });\n }\n });\n }\n\n private detachCachedGrammar() {\n this._cachedGrammars.traverse(grammar => {\n grammar.detachAll();\n if (grammar.grammarType === 'mark') {\n const mark = grammar as IMark;\n mark.group?.removeChild?.(mark);\n }\n });\n }\n\n private releaseCachedGrammars(runningConfig?: IRunningConfig) {\n // directly release all grammars except from marks\n this._cachedGrammars.traverse(grammar => {\n if (grammar.grammarType !== 'mark') {\n grammar.release();\n }\n });\n const markNodes = this._cachedGrammars.getAllMarkNodes();\n markNodes.forEach(node => {\n node.mark.animate.stop();\n if (runningConfig.enableExitAnimation) {\n this.animate.animateAddition(node.mark);\n }\n });\n const releaseUp = (node: IMarkTreeNode) => {\n // do nothing when mark is already released or is still animating\n if (!node.mark.view || node.mark.animate.getAnimatorCount() !== 0) {\n return;\n }\n // release when current node is leaf node\n if (!node.children || node.children.length === 0) {\n node.mark.release();\n // detach current node from tree and traverse above\n const parent = node.parent;\n if (parent) {\n node.parent.children = node.parent.children.filter(n => n !== node);\n node.parent = null;\n releaseUp(parent);\n }\n }\n };\n markNodes.forEach(node => {\n const mark = node.mark;\n if (mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n } else {\n mark.addEventListener('animationEnd', () => {\n if (mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n }\n });\n }\n });\n this._cachedGrammars.clear();\n }\n\n runAfter(callback: (view: IView) => void) {\n this._dataflow.runAfter(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n runBefore(callback: (view: IView) => void) {\n this._dataflow.runBefore(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer() {\n if (this._options.mode !== 'node') {\n this.logger.error(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n const stage = this.renderer?.stage?.();\n if (stage) {\n stage.render();\n const buffer = stage.window.getImageBuffer();\n return buffer;\n }\n this.logger.error(new ReferenceError(`render is not defined`));\n\n return null;\n }\n\n // --- Mark Tree ---\n\n traverseMarkTree(apply: (mark: IMark) => any, filter?: (mark: IMark) => boolean, leafFirst?: boolean) {\n traverseMarkTree(this.rootMark, 'children', apply, filter, leafFirst);\n return this;\n }\n\n // --- Resize ---\n\n private _bindResizeEvent() {\n if (this.autoFit()) {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n if (container) {\n const ResizeObserverWindow: any = window.ResizeObserver;\n this._observer = new ResizeObserverWindow(this._onResize);\n this._observer?.observe(container);\n }\n window.addEventListener('resize', this._onResize);\n }\n }\n\n private _unBindResizeEvent() {\n if (this.autoFit()) {\n window.removeEventListener('resize', this._onResize);\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n }\n }\n }\n\n private _getContainerSize() {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n\n if (container) {\n const { width: containerWidth, height: containerHeight } = getContainerSize(container!);\n const width = this._spec?.width ?? this._options.width ?? containerWidth;\n const height = this._spec?.height ?? this._options.height ?? containerHeight;\n\n return { width, height };\n }\n\n return null;\n }\n\n private _onResize = debounce((...args: any[]) => {\n const size = this._getContainerSize();\n\n if (size) {\n this.resize(size.width, size.height);\n }\n }, 100);\n\n resize(width: number, height: number, render: boolean = true) {\n let needDataflow = false;\n\n // width value changed: update signal, skip resize op\n if (width !== this.width()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_WIDTH, width);\n }\n\n // height value changed: update signal, skip resize op\n if (height !== this.height()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_HEIGHT, height);\n }\n\n // run dataflow on width/height signal change\n if (needDataflow) {\n if (render) {\n this.evaluate();\n } else {\n this._dataflow.evaluate();\n }\n }\n\n return this;\n }\n\n private _resizeRenderer() {\n const width = this.width();\n const height = this.height();\n\n if (this.renderer.shouldResize(width, height)) {\n this.renderer.resize(width, height);\n this.emit('resize', {}, { width, height });\n return true;\n }\n\n return false;\n }\n\n // --- Event ---\n\n private bindEvents(eventSpec: BaseEventSpec) {\n if (this._eventConfig.disable) {\n return;\n }\n const { type: evtType, filter, callback, throttle, debounce, consume, target, dependency } = eventSpec;\n const eventSelector = parseEventSelector(evtType);\n\n if (!eventSelector) {\n return;\n }\n const { source, type } = eventSelector;\n\n const markFilter = generateFilterByMark(eventSelector);\n const targetSignals =\n Array.isArray(target) && target.length\n ? target.map(entry => {\n return {\n signal: this.getSignalById(entry.target),\n callback: entry.callback\n };\n })\n : [\n {\n signal: isString(target) ? this.getSignalById(target) : null,\n callback\n }\n ];\n const validateSignals = targetSignals.filter(entry => entry.signal || entry.callback);\n const refs = parseReference(dependency, this);\n\n const send = parseHandler(\n (evt?: any, element?: IElement) => {\n const needPreventDefault =\n (source === EVENT_SOURCE_VIEW && prevent(this._eventConfig, type)) ||\n (consume && (evt.cancelable === undefined || evt.cancelable));\n\n if (source === EVENT_SOURCE_WINDOW) {\n evt = getExtendedEvents(this, evt, element, type, EVENT_SOURCE_WINDOW);\n }\n\n let hasCommitted = false;\n\n if ((!filter || filter(evt)) && (!markFilter || markFilter(element)) && validateSignals.length) {\n const params = refs.reduce((params, ref) => {\n params[ref.id()] = ref.output();\n return params;\n }, {});\n validateSignals.forEach(entry => {\n if (entry.callback && entry.signal) {\n const changed = entry.signal.set(entry.callback(evt, params));\n\n if (changed) {\n this.commit(entry.signal);\n hasCommitted = true;\n }\n } else if (entry.callback) {\n entry.callback(evt, params);\n } else {\n this.commit(entry.signal);\n hasCommitted = true;\n }\n });\n }\n\n if (needPreventDefault) {\n evt.preventDefault();\n }\n\n if (consume) {\n evt.stopPropagation();\n }\n\n if (hasCommitted) {\n this.run();\n }\n },\n { throttle, debounce }\n );\n\n if (source === EVENT_SOURCE_VIEW) {\n if (permit(this._eventConfig, EVENT_SOURCE_VIEW, type)) {\n // send traps errors, so use {trap: false} option\n this.addEventListener(type, send, NO_TRAP);\n\n return () => {\n this.removeEventListener(type, send);\n };\n }\n } else if (source === EVENT_SOURCE_WINDOW) {\n vglobal.addEventListener(type, send);\n this._eventListeners.push({\n type: type,\n source: vglobal,\n handler: send\n });\n\n return () => {\n vglobal.removeEventListener(type, send);\n\n const index = this._eventListeners.findIndex((entry: any) => {\n return entry.type === type && entry.source === vglobal && entry.handler === send;\n });\n\n if (index >= 0) {\n this._eventListeners.splice(index, 1);\n }\n };\n }\n }\n\n event(eventSpec: EventSpec) {\n if ('between' in eventSpec) {\n const [starEvent, endEvent] = eventSpec.between;\n // FIXME between需要生成唯一ID\n const id = `${starEvent.type}-${eventSpec.type}-${endEvent.type}`;\n\n let unbindEndEvent: any;\n\n this.bindEvents(\n Object.assign({}, starEvent, {\n callback: () => {\n if (!this._eventCache) {\n this._eventCache = {};\n }\n // 中间的事件绑定\n if (!this._eventCache[id]) {\n const unbindEvent = this.bindEvents(eventSpec);\n this._eventCache[id] = unbindEvent;\n }\n if (!unbindEndEvent) {\n // 结束的事件绑定\n unbindEndEvent = this.bindEvents(\n Object.assign({}, endEvent, {\n callback: () => {\n if (this._eventCache[id]) {\n this._eventCache[id]();\n this._eventCache[id] = null;\n }\n }\n })\n );\n }\n }\n })\n );\n } else if ('merge' in eventSpec) {\n eventSpec.merge.forEach(entry => {\n const singleEvent: Partial<BaseEventSpec> = Object.assign({}, eventSpec);\n\n if (isString(entry)) {\n singleEvent.type = entry;\n } else if (isObject(entry)) {\n Object.assign(singleEvent, entry);\n }\n singleEvent.debounce = 50;\n this.bindEvents(singleEvent as BaseEventSpec);\n });\n } else {\n this.bindEvents(eventSpec);\n }\n }\n\n interaction(type: string, spec: Partial<InteractionSpec>) {\n const interaction = Factory.createInteraction(type, this, spec);\n\n if (interaction) {\n interaction.bind();\n\n if (!this._boundInteractions) {\n this._boundInteractions = [];\n }\n\n this._boundInteractions.push(interaction);\n }\n return interaction;\n }\n\n removeInteraction(type: string | IInteraction, id?: string) {\n if (this._boundInteractions) {\n const instances = this._boundInteractions.filter(interaction => {\n if (!isNil(id)) {\n return interaction.options?.id === id;\n }\n\n if (isString(type)) {\n return interaction.type === type;\n }\n\n if (type) {\n return interaction === type;\n }\n });\n\n if (instances.length) {\n instances.forEach(instance => {\n instance.unbind();\n });\n }\n }\n\n return this;\n }\n\n removeAllInteractions() {\n if (this._boundInteractions) {\n this._boundInteractions.forEach(instance => {\n instance.unbind();\n });\n\n this._boundInteractions = null;\n }\n\n return this;\n }\n\n private initEvent() {\n // 基于 vRender 事件系统提供的委托机制\n const stage = this.renderer.stage();\n stage && stage.on('*', this.delegateEvent);\n }\n\n private releaseStageEvent() {\n const stage = this.renderer.stage();\n stage && stage.off('*', this.delegateEvent);\n }\n\n private delegateEvent = (event: any, type: string) => {\n const activeElement = event.target?.[BridgeElementKey];\n const extendedEvt = getExtendedEvents(this, event, activeElement, type, EVENT_SOURCE_VIEW);\n this.emit(type, extendedEvt, activeElement);\n };\n\n addEventListener(type: string, handler: BaseEventHandler, options?: any) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n callback = handler;\n (callback as any).raw = handler;\n }\n if (options && options.target) {\n (callback as any).target = options.target;\n }\n this.on(type, callback);\n return this;\n }\n\n removeEventListener(type: string, handler?: BaseEventHandler) {\n if (handler) {\n this.off(type, handler);\n } else {\n this.off(type);\n }\n return this;\n }\n\n // --- Initialization ---\n\n private initializeRenderer() {\n const width = this._options.width;\n const height = this._options.height;\n\n this.renderer = new CanvasRenderer(this);\n this.renderer.initialize(width, height, this._options, this._eventConfig).background(this._background);\n }\n\n private initialize() {\n this.grammars = new RecordedGrammars(\n grammar => grammar.id(),\n (key, grammar) => this.logger.warn(`Grammar id '${key}' has been occupied`, grammar)\n );\n this._cachedGrammars = new RecordedTreeGrammars(grammar => grammar.id());\n\n if (this._options.logger) {\n Logger.setInstance(this._options.logger);\n }\n this.logger = Logger.getInstance(this._options.logLevel ?? 0);\n\n this._dataflow = new Dataflow();\n\n this.animate = new ViewAnimate(this);\n\n this._morph = new Morph();\n\n // 执行钩子\n if (this._options.hooks) {\n Object.keys(this._options.hooks).forEach(key => {\n this.on(key, this._options.hooks[key]);\n });\n // 生命周期事件(包含原性能测试钩子)\n this.hooks = this._options.hooks;\n }\n this.container = null;\n\n // initialize renderer, handler and event management\n this.renderer = null;\n this._eventListeners = [];\n\n // initialize event configuration\n this._eventConfig = initializeEventConfig(this._options.eventConfig);\n\n // set default theme\n this._theme = this._options.disableTheme ? null : ThemeManager.getDefaultTheme();\n\n this.parseBuiltIn();\n\n // initialize DOM container(s) and renderer\n configureEnvironment(this._options);\n this.initializeRenderer();\n\n if (!this._eventConfig.disable) {\n this.initEvent();\n }\n this._bindResizeEvent();\n\n // update layout tree after initialization\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n // apply theme value after initialization\n this.theme(this._theme);\n }\n\n // --- Others ---\n\n pauseProgressive() {\n return false;\n }\n resumeProgressive() {\n return false;\n }\n restartProgressive() {\n return false;\n }\n\n private findProgressiveMarks() {\n const marks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n marks.push(mark);\n },\n (mark: IMark) => mark.markType !== GrammarMarkType.group && mark.isProgressive()\n );\n\n if (!marks.length) {\n this._progressiveMarks = null;\n return null;\n }\n\n this._progressiveMarks = marks;\n\n if (this.renderer) {\n this.renderer.combineIncrementalLayers();\n }\n\n return marks;\n }\n\n private doPreProgressive() {\n if (this._progressiveMarks && this._progressiveMarks.some(mark => mark.isDoingProgressive())) {\n const raf = vglobal.getRequestAnimationFrame();\n this._progressiveRafId = raf(this.handleProgressiveFrame);\n }\n }\n\n /** 监听frame事件,更新增量元素的mark */\n private handleProgressiveFrame = () => {\n if (this._progressiveMarks.length) {\n this._progressiveMarks.forEach(mark => {\n if (mark.isDoingProgressive()) {\n mark.evaluateProgressive();\n }\n });\n }\n\n this.doPreProgressive();\n };\n\n /** 清除 */\n private clearProgressive() {\n if (this._progressiveRafId) {\n const cancelRaf = vglobal.getCancelAnimationFrame();\n cancelRaf(this._progressiveRafId);\n }\n\n if (this._progressiveMarks && this._progressiveMarks.length) {\n this._progressiveMarks.forEach(entry => {\n entry.clearProgressive();\n });\n\n this._progressiveMarks = null;\n }\n }\n\n // --- release ---\n release() {\n this.removeAllInteractions();\n this.releaseStageEvent();\n this._unBindResizeEvent();\n this.clearProgressive();\n Factory.unregisterRuntimeTransforms();\n\n this.animate.stop();\n\n this.grammars.release();\n this._cachedGrammars.release();\n\n this._dataflow.release();\n this._dataflow = null;\n\n this.renderer?.release?.();\n this.renderer = null;\n this._boundInteractions = null;\n\n // 卸载事件\n this.removeAllListeners();\n this._eventListeners?.forEach((listener: any) => {\n listener.source.removeEventListener(listener.type, listener.handler);\n });\n this._eventListeners = null;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/view/View.ts"],"names":[],"mappings":"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","file":"View.js","sourcesContent":["import type { IBounds, ILogger } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { EventEmitter, debounce, isObject, isString, getContainerSize, Logger, array, isNil } from '@visactor/vutils';\nimport type { IColor } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { vglobal } from '@visactor/vrender-core';\nimport type { CoordinateType } from '@visactor/vgrammar-coordinate';\nimport type { IElement } from './../types/element';\nimport type {\n MarkSpec,\n IData,\n ISignal,\n ViewSpec,\n IView,\n IViewOptions,\n IViewThemeConfig,\n IViewEventConfig,\n Hooks,\n IMark,\n EventSpec,\n GroupMarkSpec,\n BaseEventSpec,\n MarkType,\n GrammarScaleType,\n SignalFunctionType,\n IScale,\n IGrammarBase,\n IGroupMark,\n IGlyphMark,\n ICoordinate,\n BaseEventHandler,\n GlyphMarkSpec,\n IRecordedGrammars,\n IComponent,\n ComponentSpec,\n IRecordedTreeGrammars,\n IMarkTreeNode,\n IRunningConfig,\n IViewAnimate,\n ITheme,\n InteractionSpec,\n IInteraction\n} from '../types/';\nimport { Data } from './data';\nimport { initializeEventConfig, permit, prevent } from './events';\nimport Dataflow from './dataflow';\nimport { traverseMarkTree } from '../graph/mark-tree';\nimport { BridgeElementKey } from '../graph/constants';\nimport CanvasRenderer from '../graph/canvas-renderer';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport {\n BROWSER,\n NO_TRAP,\n SIGNAL_WIDTH,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_AUTOFIT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_VIEW_HEIGHT,\n EVENT_SOURCE_VIEW,\n EVENT_SOURCE_WINDOW,\n SIGNAL_VIEW_BOX\n} from './constants';\nimport { Signal } from './signal';\nimport {\n BuiltInSignalID,\n builtInSignals,\n normalizeMarkTree,\n normalizeRunningConfig,\n normalizePadding\n} from '../parse/view';\nimport { parseHandler, parseEventSelector, generateFilterByMark, ID_PREFIX, NAME_PREFIX } from '../parse/event';\nimport { isGrammar, parseReference } from '../parse/util';\nimport { configureEnvironment } from '../graph/util/env';\nimport { GroupMark } from './group';\nimport { Mark } from './mark';\nimport { defaultDoLayout } from '../graph/layout/layout';\nimport { GlyphMark } from './glyph';\nimport type { IMorph } from '../types/morph';\nimport { Morph } from '../graph/animation/morph';\nimport { RecordedGrammars, RecordedTreeGrammars } from './grammar-record';\nimport { ViewAnimate } from './animate';\nimport type { IRenderer } from '../types/renderer';\nimport { ComponentEnum, HOOK_EVENT, LayoutState, GrammarMarkType } from '../graph/enums';\nimport type {\n IAxis,\n IDatazoom,\n IGrid,\n ILabel,\n ILegend,\n IPlayer,\n IScrollbar,\n ISlider,\n ITitle\n} from '../types/component';\nimport { Text } from '../semantic-marks/text';\nimport { ThemeManager } from '../theme/theme-manager';\nimport { Factory } from '../core/factory';\nimport { Component } from './component';\nimport { isMarkType, removeGraphicItem } from '../graph/util/graphic';\n\n/**\n * Create a new View instance from a VGrammar dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The VGrammar dataflow runtime specification.\n */\nexport default class View extends EventEmitter implements IView {\n /** render element */\n container: HTMLElement;\n\n /** renderer */\n renderer: IRenderer;\n animate: IViewAnimate;\n rootMark: IGroupMark;\n\n /** life circle hooks */\n hooks: Hooks;\n\n logger: ILogger;\n\n grammars: IRecordedGrammars;\n\n private _spec: ViewSpec;\n private _config: IViewThemeConfig;\n private _options: IViewOptions;\n\n private _cachedGrammars: IRecordedTreeGrammars;\n private _willMorphMarks: { prev: IMark[]; next: IMark[] }[];\n\n /** morph animate */\n private _morph: IMorph;\n\n private _eventConfig: IViewEventConfig;\n private _eventListeners: Array<{\n type: string;\n source: any;\n handler: any;\n }>;\n\n private _theme: ITheme;\n\n private _dataflow: Dataflow;\n\n /** 初次渲染或者更新spec,需要构建布局树 */\n private _needBuildLayoutTree?: boolean;\n /** 布局阶段 */\n private _layoutState?: LayoutState;\n\n /** 布局树,存储所有需要计算布局的mark元素 */\n private _layoutMarks?: IMark[];\n\n private _background?: IColor;\n private _eventCache: Record<string, () => void>;\n /** 当前是否存在增量渲染元素 */\n private _progressiveMarks?: IMark[];\n private _progressiveRafId?: number;\n private _observer: ResizeObserver = null;\n private _boundInteractions?: IInteraction[];\n\n static useRegisters(comps: (() => void)[]) {\n comps.forEach((fn: () => void) => {\n fn();\n });\n }\n\n constructor(options: IViewOptions = {}, config: IViewThemeConfig = {}) {\n super();\n this._config = config;\n this._options = Object.assign(\n {\n mode: BROWSER\n },\n options\n );\n this.initialize();\n }\n // emit: <T extends EventEmitter.EventNames<string | symbol>>(\n // event: T,\n // ...args: EventEmitter.EventArgs<string | symbol, T>\n // ) => boolean;\n\n // --- Lookup Grammars ---\n\n getGrammarById(id: string) {\n return this.grammars.getGrammar(id);\n }\n getSignalById<T>(id: string): ISignal<T> | null {\n return this.grammars.getSignal(id);\n }\n getDataById(id: string): IData | null {\n return this.grammars.getData(id);\n }\n getScaleById(id: string): IScale | null {\n return this.grammars.getScale(id);\n }\n getCoordinateById(id: string) {\n return this.grammars.getCoordinate(id);\n }\n getMarkById(id: string): IMark | null {\n return this.grammars.getMark(id);\n }\n\n getCustomizedById(id: string): IGrammarBase | null {\n return this.grammars.getCustomized(id);\n }\n\n getGrammarsByName(name: string) {\n return this.grammars.filter(grammar => grammar.name() === name);\n }\n\n getGrammarsByType(grammarType: string) {\n return this.grammars.filter(grammar => grammar.grammarType === grammarType);\n }\n getMarksByType(markType: string) {\n return this.grammars.getAllMarks().filter(mark => mark.markType === markType);\n }\n getMarksByName(name: string): IMark[] | null {\n return this.grammars.getAllMarks().filter(mark => mark.name() === name);\n }\n getMarksBySelector(selector: string | string[] | IMark | IMark[]): IMark[] | null {\n if (!selector) {\n return null;\n }\n const selectors = array(selector);\n const res: IMark[] = [];\n selectors.forEach(selectorStr => {\n if (isGrammar(selectorStr)) {\n res.push(selectorStr);\n return;\n }\n\n if (selectorStr[0] === ID_PREFIX) {\n const mark = this.getMarkById(selectorStr.slice(1));\n\n mark && res.push(mark);\n\n return;\n }\n\n const marks =\n selectorStr[0] === NAME_PREFIX\n ? this.getMarksByName(selectorStr.slice(1))\n : isMarkType(selectorStr)\n ? this.getMarksByType(selectorStr)\n : null;\n\n if (marks && marks.length) {\n marks.forEach(mark => {\n res.push(mark);\n });\n }\n });\n\n return res;\n }\n\n // --- Grammar ---\n\n private updateSignal<T>(signal: string | ISignal<T>, value: T) {\n if (isString(signal)) {\n signal = this.getSignalById<T>(signal);\n }\n signal.set(value);\n this.commit(signal);\n }\n\n signal<T>(value?: T, update?: SignalFunctionType<T>): ISignal<T> {\n const signal: ISignal<T> = new Signal<T>(this);\n if (arguments.length >= 1) {\n signal.value(value);\n }\n if (arguments.length >= 2) {\n signal.update(update);\n }\n this.grammars.record(signal);\n this._dataflow.add(signal);\n return signal;\n }\n\n data(values?: any[]): IData {\n const data: IData = new Data(this, values);\n this.grammars.record(data);\n this._dataflow.add(data);\n return data;\n }\n\n scale(type: GrammarScaleType) {\n const scale = Factory.createGrammar('scale', this, type) as IScale;\n\n if (scale) {\n this.grammars.record(scale);\n this._dataflow.add(scale);\n }\n return scale;\n }\n\n coordinate(type: CoordinateType) {\n const coordinate = Factory.createGrammar('coordinate', this, type) as ICoordinate;\n\n if (coordinate) {\n this.grammars.record(coordinate);\n this._dataflow.add(coordinate);\n }\n return coordinate;\n }\n\n mark(\n type: MarkType,\n group?: IGroupMark | string,\n markOptions?: { glyphType?: string; componentType?: string; mode?: '2d' | '3d' }\n ) {\n const groupMark = isString(group) ? (this.getMarkById(group) as IGroupMark) : group;\n\n let mark: IMark;\n switch (type) {\n case GrammarMarkType.group:\n mark = new GroupMark(this, groupMark);\n break;\n case GrammarMarkType.glyph:\n mark = new GlyphMark(this, markOptions?.glyphType, groupMark);\n break;\n // components\n case GrammarMarkType.component:\n mark = Factory.hasComponent(markOptions?.componentType)\n ? Factory.createComponent(markOptions?.componentType, this, groupMark, markOptions?.mode)\n : new Component(this, markOptions?.componentType, groupMark, markOptions?.mode);\n break;\n case GrammarMarkType.text:\n mark = new Text(this, type, groupMark);\n break;\n default:\n mark = Factory.hasMark(type) ? Factory.createMark(type, this, groupMark) : new Mark(this, type, groupMark);\n }\n this.grammars.record(mark);\n this._dataflow.add(mark);\n return mark;\n }\n\n group(group?: IGroupMark | string) {\n return this.mark(GrammarMarkType.group, group) as IGroupMark;\n }\n\n glyph(glyphType: string, group: IGroupMark | string) {\n return this.mark(GrammarMarkType.glyph, group, { glyphType }) as IGlyphMark;\n }\n\n component(componentType: string, group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType, mode }) as IComponent;\n }\n\n axis(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.axis, mode }) as IAxis;\n }\n\n grid(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.grid, mode }) as IGrid;\n }\n\n legend(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.legend }) as ILegend;\n }\n\n slider(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.slider }) as ISlider;\n }\n\n label(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.label }) as ILabel;\n }\n\n datazoom(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.datazoom }) as IDatazoom;\n }\n\n player(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.player }) as IPlayer;\n }\n\n title(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.title }) as ITitle;\n }\n\n scrollbar(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.scrollbar }) as IScrollbar;\n }\n\n customized(type: string, spec: any) {\n const grammar = Factory.createGrammar(type, this, spec?.type);\n\n if (grammar) {\n grammar.parse(spec);\n this.grammars.record(grammar);\n this._dataflow.add(grammar);\n return grammar;\n }\n }\n\n addGrammar(grammar: IGrammarBase) {\n if (this.grammars.find(storedGrammar => storedGrammar.uid === grammar.uid)) {\n return this;\n }\n this.grammars.record(grammar);\n this._dataflow.add(grammar);\n grammar.parse(grammar.getSpec());\n\n // update layout tree after grammar update\n this._needBuildLayoutTree = true;\n return this;\n }\n\n removeGrammar(grammar: string | IGrammarBase) {\n const recordedGrammar = isString(grammar) ? this.getGrammarById(grammar) : grammar;\n if (!recordedGrammar || !this.grammars.find(storedGrammar => storedGrammar.uid === recordedGrammar.uid)) {\n return this;\n }\n if (recordedGrammar.grammarType === 'mark') {\n (recordedGrammar as IMark).prepareRelease();\n }\n this._cachedGrammars.record(recordedGrammar);\n this._dataflow.remove(recordedGrammar);\n this.grammars.unrecord(recordedGrammar);\n\n // update layout tree after grammar update\n this._needBuildLayoutTree = true;\n return this;\n }\n\n removeAllGrammars() {\n this.grammars.traverse(grammar => {\n if (grammar.grammarType === 'signal' && BuiltInSignalID.includes(grammar.id())) {\n return;\n } else if (grammar.grammarType === 'mark' && grammar.id() === 'root') {\n return;\n }\n this.removeGrammar(grammar);\n });\n return this;\n }\n\n removeAllGraphicItems() {\n this.traverseMarkTree((mark: IMark) => {\n if (mark.graphicItem) {\n removeGraphicItem(mark.graphicItem);\n mark.elementMap.forEach(element => {\n element.resetGraphicItem();\n });\n mark.graphicItem = null;\n }\n });\n\n return this;\n }\n\n // --- Handle Spec ---\n\n parseSpec(spec: ViewSpec) {\n this.emit(HOOK_EVENT.BEFORE_PARSE_VIEW);\n this._spec = spec;\n normalizeMarkTree(spec);\n\n if (spec.theme) {\n this.theme(spec.theme);\n } else {\n this.theme(ThemeManager.getDefaultTheme());\n }\n\n if (spec.width) {\n this.width(spec.width);\n }\n\n if (spec.height) {\n this.height(spec.height);\n }\n\n this.padding(spec.padding ?? this._options.padding ?? this._theme.padding);\n\n if (!this.width() || !this.height()) {\n const size = this._getContainerSize();\n\n if (size) {\n this.updateSignal(SIGNAL_WIDTH, size.width);\n this.updateSignal(SIGNAL_HEIGHT, size.height);\n }\n }\n\n if (spec.signals?.length) {\n spec.signals.forEach(signal => {\n this.signal().parse(signal);\n });\n }\n\n if (spec.data?.length) {\n spec.data.forEach(data => {\n this.data(null).parse(data);\n });\n }\n\n if (spec.coordinates?.length) {\n spec.coordinates.forEach(coordinate => {\n this.coordinate(coordinate.type)?.parse(coordinate);\n });\n }\n\n if (spec.scales?.length) {\n spec.scales.forEach(scale => {\n this.scale(scale.type)?.parse(scale);\n });\n }\n\n const customizedGrammars = Factory.getGrammars();\n\n Object.keys(customizedGrammars).forEach(key => {\n const { specKey } = customizedGrammars[key];\n\n if (spec[specKey] && spec[specKey].length) {\n spec[specKey].forEach((specValue: any) => {\n this.customized(key, specValue);\n });\n }\n });\n\n if (spec.marks && spec.marks.length) {\n spec.marks.forEach(mark => {\n this.parseMarkSpec(mark);\n });\n }\n\n if (spec.events && spec.events.length) {\n spec.events.forEach(eventConfig => {\n this.event(eventConfig);\n });\n }\n\n if (spec.interactions && spec.interactions.length) {\n spec.interactions.forEach(interaction => {\n this.interaction(interaction.type, interaction);\n });\n }\n\n if (spec.animation === false) {\n this.animate.disable();\n } else {\n this.animate.enable();\n }\n\n this.emit(HOOK_EVENT.AFTER_PARSE_VIEW);\n\n // update layout tree after update spec\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n return this;\n }\n\n updateSpec(spec: ViewSpec) {\n this.removeAllInteractions();\n this.removeAllGrammars();\n return this.parseSpec(spec);\n }\n\n private parseBuiltIn() {\n // 创建内置的 Signal\n builtInSignals(this._options, this._config, this.getCurrentTheme()).forEach(signalSpec => {\n const signal = this.signal().parse(signalSpec);\n if (signalSpec.value) {\n signal.set(signalSpec.value);\n }\n });\n\n const rootMark: GroupMarkSpec = {\n id: 'root',\n type: 'group',\n encode: {\n enter: { x: 0, y: 0 },\n update: {\n width: { signal: 'width' },\n height: { signal: 'height' }\n }\n }\n };\n this.parseMarkSpec(rootMark);\n this.rootMark = this.getMarkById('root') as IGroupMark;\n }\n\n private parseMarkSpec(spec: MarkSpec) {\n const markOptions =\n spec.type === GrammarMarkType.glyph\n ? { glyphType: (spec as GlyphMarkSpec).glyphType }\n : spec.type === GrammarMarkType.component\n ? { componentType: (spec as ComponentSpec).componentType, mode: (spec as ComponentSpec).mode }\n : null;\n this.mark(spec.type, spec.group, markOptions).parse(spec);\n (spec as GroupMarkSpec).marks?.forEach(childSpec => {\n this.parseMarkSpec(childSpec);\n });\n }\n\n // --- Theme API ---\n theme(theme: ITheme | string) {\n if (isString(theme)) {\n this._theme = ThemeManager.getTheme(theme) ?? ThemeManager.getDefaultTheme();\n } else {\n this._theme = theme;\n }\n const { background, padding } = this._spec ?? {};\n if (this._theme) {\n this.background(background ?? this._options.background ?? this._theme.background);\n this.padding(padding ?? this._options.padding ?? this._theme.padding);\n this.renderer.stage()?.setTheme?.(Object.assign({}, this._theme.marks));\n } else {\n this.background(background ?? this._options.background);\n this.padding(padding ?? this._options.padding);\n }\n\n return this;\n }\n\n getCurrentTheme() {\n return this._theme;\n }\n\n setCurrentTheme(theme: ITheme | string, render: boolean = true) {\n this.theme(theme);\n // trigger encode for all marks\n this.grammars.getAllMarks().forEach(mark => {\n mark.commit();\n });\n\n if (render) {\n this.evaluate();\n\n // FIXME: trigger render\n this.renderer.render(true);\n } else {\n this._dataflow.evaluate();\n }\n\n return this;\n }\n\n // --- Global Configure ---\n\n background(value?: IColor) {\n if (arguments.length) {\n this._background = value;\n this.renderer.background(value);\n return value;\n }\n return this._background;\n }\n\n width(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_WIDTH);\n if (arguments.length) {\n this._options.width = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n height(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_HEIGHT);\n if (arguments.length) {\n this._options.height = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n viewWidth(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_VIEW_WIDTH);\n if (arguments.length) {\n // view width depends on canvas width\n const padding = this.padding();\n this.width(value + padding.left + padding.right);\n return value;\n }\n return signal.output() as number;\n }\n\n viewHeight(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_VIEW_HEIGHT);\n if (arguments.length) {\n // view height depends on canvas height\n const padding = this.padding();\n this.height(value + padding.top + padding.bottom);\n return value;\n }\n return signal.output() as number;\n }\n\n padding(value?: number | { top?: number; left?: number; right?: number; bottom?: number }) {\n const signal = this.getSignalById<{ top: number; left: number; right: number; bottom: number }>(SIGNAL_PADDING);\n if (arguments.length) {\n const padding = normalizePadding(value);\n this.updateSignal(signal, padding);\n return padding;\n }\n return normalizePadding(signal.output());\n }\n\n autoFit(value?: boolean) {\n const signal = this.getSignalById<boolean>(SIGNAL_AUTOFIT);\n if (arguments.length) {\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as boolean;\n }\n\n getViewBox() {\n const signal = this.getSignalById<IBounds>(SIGNAL_VIEW_BOX);\n\n return signal?.output() as IBounds;\n }\n\n // --- Layout ---\n\n updateLayoutTag() {\n this._layoutState = LayoutState.before;\n return this;\n }\n\n getLayoutState() {\n return this._layoutState;\n }\n\n private buildLayoutTree() {\n const markMap: Record<number, boolean> = {};\n const rootMarks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n markMap[mark.id()] = true;\n\n if (mark.group) {\n if (!markMap[mark.group.id()]) {\n rootMarks.push(mark);\n }\n } else {\n rootMarks.push(mark);\n }\n\n if (mark.markType === GrammarMarkType.group) {\n (mark as IGroupMark).updateLayoutChildren();\n }\n },\n (mark: IMark) => mark.needLayout()\n );\n\n this._layoutMarks = rootMarks;\n }\n\n private doLayout() {\n const doLayout = this._options.doLayout || defaultDoLayout;\n if (doLayout && this._layoutMarks?.length) {\n this.emit(HOOK_EVENT.BEFORE_DO_LAYOUT);\n doLayout(this._layoutMarks, this._options, this);\n this.emit(HOOK_EVENT.AFTER_DO_LAYOUT);\n }\n }\n\n private handleLayoutEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_LAYOUT_END);\n this._layoutMarks.forEach(layoutMark => {\n traverseMarkTree(\n layoutMark,\n 'layoutChildren',\n (mark: IMark) => {\n mark.handleLayoutEnd();\n },\n // 顶层节点,不需要重新执行了\n (mark: IMark) => mark !== layoutMark\n );\n });\n this.emit(HOOK_EVENT.AFTER_MARK_LAYOUT_END);\n }\n\n private handleRenderEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_RENDER_END);\n traverseMarkTree(this.rootMark, 'children', (mark: IMark) => {\n mark.handleRenderEnd();\n });\n this.emit(HOOK_EVENT.AFTER_MARK_RENDER_END);\n }\n\n // --- Dataflow ---\n\n commit(grammar: IGrammarBase) {\n this._dataflow.commit(grammar);\n return this;\n }\n\n run(runningConfig?: IRunningConfig) {\n this.evaluate(runningConfig);\n\n return this;\n }\n\n private doRender(immediately: boolean) {\n this.emit(HOOK_EVENT.BEFORE_DO_RENDER);\n // render as needed\n if (this.renderer) {\n if (!this._progressiveMarks) {\n this.animate.animate();\n }\n // 绘图 =>\n this.renderer.render(immediately);\n this.handleRenderEnd();\n }\n this.emit(HOOK_EVENT.AFTER_DO_RENDER);\n }\n\n private evaluate(runningConfig?: IRunningConfig) {\n const normalizedRunningConfig = normalizeRunningConfig(runningConfig);\n\n const grammarWillDetach = this._cachedGrammars.size() > 0;\n\n if (grammarWillDetach) {\n this.reuseCachedGrammars(normalizedRunningConfig);\n this.detachCachedGrammar();\n }\n // For most of time, width & height signal won't be modified duration dataflow,\n // so resizing before generating vRender graphic items should be faster.\n const hasResize = this._resizeRenderer();\n const hasUpdate = this._dataflow.hasCommitted();\n\n // if no grammar is update and layout is unnecessary, end evaluating\n if (!grammarWillDetach && !hasUpdate && !this._layoutState && !hasResize) {\n return this;\n }\n\n this.clearProgressive();\n\n // evaluate dataflow\n this._dataflow.evaluate();\n\n if (this._needBuildLayoutTree) {\n this.buildLayoutTree();\n this._needBuildLayoutTree = false;\n }\n\n if (this._layoutState) {\n this._layoutState = LayoutState.layouting;\n this.doLayout();\n\n if (this._dataflow.hasCommitted()) {\n this._layoutState = LayoutState.reevaluate;\n this._dataflow.evaluate();\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n // resize again if width/height signal is updated duration dataflow\n this._resizeRenderer();\n\n this._willMorphMarks?.forEach(morphMarks => {\n this._morph.morph(morphMarks.prev, morphMarks.next, normalizedRunningConfig);\n });\n this._willMorphMarks = null;\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doRender(true);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private reuseCachedGrammars(runningConfig: IRunningConfig) {\n if (!this._willMorphMarks) {\n this._willMorphMarks = [];\n }\n\n if (runningConfig.reuse) {\n const reuseDiffUpdate = (diff: { prev: IGrammarBase; next: IGrammarBase }) => {\n diff.next.reuse(diff.prev);\n diff.prev.detachAll();\n diff.prev.clear();\n this._cachedGrammars.unrecord(diff.prev);\n };\n\n const diffedSignal = this._morph.diffGrammar(\n this._cachedGrammars.getAllSignals(),\n this.grammars.getAllSignals().filter(signal => !BuiltInSignalID.includes(signal.id()))\n );\n diffedSignal.update.forEach(reuseDiffUpdate);\n\n const diffedData = this._morph.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData());\n diffedData.update.forEach(reuseDiffUpdate);\n\n const diffedScale = this._morph.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales());\n diffedScale.update.forEach(reuseDiffUpdate);\n\n const diffedCoordinate = this._morph.diffGrammar(\n this._cachedGrammars.getAllCoordinates(),\n this.grammars.getAllCoordinates()\n );\n diffedCoordinate.update.forEach(reuseDiffUpdate);\n\n // TODO: reuse custom\n }\n\n const diffedMark = this._morph.diffMark(\n this._cachedGrammars.getAllMarks(),\n this.grammars.getAllMarks().filter(mark => mark.id() !== 'root'),\n runningConfig\n );\n diffedMark.update.forEach(diff => {\n const matched =\n diff.prev.length === 1 && diff.next.length === 1 && diff.prev[0].markType === diff.next[0].markType;\n const enableMarkMorphConfig =\n diff.prev.every(mark => mark.getMorphConfig().morph) && diff.next.every(mark => mark.getMorphConfig().morph);\n if (matched && runningConfig.reuse) {\n diff.next[0].reuse(diff.prev[0]);\n diff.prev[0].detachAll();\n diff.prev[0].clear();\n this._cachedGrammars.unrecord(diff.prev[0]);\n } else if ((runningConfig.morph && enableMarkMorphConfig) || runningConfig.morphAll) {\n this._willMorphMarks.push({ prev: diff.prev, next: diff.next });\n }\n });\n }\n\n private detachCachedGrammar() {\n this._cachedGrammars.traverse(grammar => {\n grammar.detachAll();\n if (grammar.grammarType === 'mark') {\n const mark = grammar as IMark;\n mark.group?.removeChild?.(mark);\n }\n });\n }\n\n private releaseCachedGrammars(runningConfig?: IRunningConfig) {\n // directly release all grammars except from marks\n this._cachedGrammars.traverse(grammar => {\n if (grammar.grammarType !== 'mark') {\n grammar.release();\n }\n });\n const markNodes = this._cachedGrammars.getAllMarkNodes();\n markNodes.forEach(node => {\n node.mark.animate.stop();\n if (runningConfig.enableExitAnimation) {\n this.animate.animateAddition(node.mark);\n }\n });\n const releaseUp = (node: IMarkTreeNode) => {\n // do nothing when mark is already released or is still animating\n if (!node.mark.view || node.mark.animate.getAnimatorCount() !== 0) {\n return;\n }\n // release when current node is leaf node\n if (!node.children || node.children.length === 0) {\n node.mark.release();\n // detach current node from tree and traverse above\n const parent = node.parent;\n if (parent) {\n node.parent.children = node.parent.children.filter(n => n !== node);\n node.parent = null;\n releaseUp(parent);\n }\n }\n };\n markNodes.forEach(node => {\n const mark = node.mark;\n if (mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n } else {\n mark.addEventListener('animationEnd', () => {\n if (mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n }\n });\n }\n });\n this._cachedGrammars.clear();\n }\n\n runAfter(callback: (view: IView) => void) {\n this._dataflow.runAfter(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n runBefore(callback: (view: IView) => void) {\n this._dataflow.runBefore(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer() {\n if (this._options.mode !== 'node') {\n this.logger.error(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n const stage = this.renderer?.stage?.();\n if (stage) {\n stage.render();\n const buffer = stage.window.getImageBuffer();\n return buffer;\n }\n this.logger.error(new ReferenceError(`render is not defined`));\n\n return null;\n }\n\n // --- Mark Tree ---\n\n traverseMarkTree(apply: (mark: IMark) => any, filter?: (mark: IMark) => boolean, leafFirst?: boolean) {\n traverseMarkTree(this.rootMark, 'children', apply, filter, leafFirst);\n return this;\n }\n\n // --- Resize ---\n\n private _bindResizeEvent() {\n if (this.autoFit()) {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n if (container) {\n const ResizeObserverWindow: any = window.ResizeObserver;\n this._observer = new ResizeObserverWindow(this._onResize);\n this._observer?.observe(container);\n }\n window.addEventListener('resize', this._onResize);\n }\n }\n\n private _unBindResizeEvent() {\n if (this.autoFit()) {\n window.removeEventListener('resize', this._onResize);\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n }\n }\n }\n\n private _getContainerSize() {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n\n if (container) {\n const { width: containerWidth, height: containerHeight } = getContainerSize(container!);\n const width = this._spec?.width ?? this._options.width ?? containerWidth;\n const height = this._spec?.height ?? this._options.height ?? containerHeight;\n\n return { width, height };\n }\n\n return null;\n }\n\n private _onResize = debounce((...args: any[]) => {\n const size = this._getContainerSize();\n\n if (size) {\n this.resize(size.width, size.height);\n }\n }, 100);\n\n resize(width: number, height: number, render: boolean = true) {\n let needDataflow = false;\n\n // width value changed: update signal, skip resize op\n if (width !== this.width()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_WIDTH, width);\n }\n\n // height value changed: update signal, skip resize op\n if (height !== this.height()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_HEIGHT, height);\n }\n\n // run dataflow on width/height signal change\n if (needDataflow) {\n if (render) {\n this.evaluate();\n } else {\n this._dataflow.evaluate();\n }\n }\n\n return this;\n }\n\n private _resizeRenderer() {\n const width = this.width();\n const height = this.height();\n\n if (this.renderer.shouldResize(width, height)) {\n this.renderer.resize(width, height);\n this.emit('resize', {}, { width, height });\n return true;\n }\n\n return false;\n }\n\n // --- Event ---\n\n private bindEvents(eventSpec: BaseEventSpec) {\n if (this._eventConfig.disable) {\n return;\n }\n const { type: evtType, filter, callback, throttle, debounce, consume, target, dependency } = eventSpec;\n const eventSelector = parseEventSelector(evtType);\n\n if (!eventSelector) {\n return;\n }\n const { source, type } = eventSelector;\n\n const markFilter = generateFilterByMark(eventSelector);\n const targetSignals =\n Array.isArray(target) && target.length\n ? target.map(entry => {\n return {\n signal: this.getSignalById(entry.target),\n callback: entry.callback\n };\n })\n : [\n {\n signal: isString(target) ? this.getSignalById(target) : null,\n callback\n }\n ];\n const validateSignals = targetSignals.filter(entry => entry.signal || entry.callback);\n const refs = parseReference(dependency, this);\n\n const send = parseHandler(\n (evt?: any, element?: IElement) => {\n const needPreventDefault =\n (source === EVENT_SOURCE_VIEW && prevent(this._eventConfig, type)) ||\n (consume && (evt.cancelable === undefined || evt.cancelable));\n\n if (source === EVENT_SOURCE_WINDOW) {\n evt = getExtendedEvents(this, evt, element, type, EVENT_SOURCE_WINDOW);\n }\n\n let hasCommitted = false;\n\n if ((!filter || filter(evt)) && (!markFilter || markFilter(element)) && validateSignals.length) {\n const params = refs.reduce((params, ref) => {\n params[ref.id()] = ref.output();\n return params;\n }, {});\n validateSignals.forEach(entry => {\n if (entry.callback && entry.signal) {\n const changed = entry.signal.set(entry.callback(evt, params));\n\n if (changed) {\n this.commit(entry.signal);\n hasCommitted = true;\n }\n } else if (entry.callback) {\n entry.callback(evt, params);\n } else {\n this.commit(entry.signal);\n hasCommitted = true;\n }\n });\n }\n\n if (needPreventDefault) {\n evt.preventDefault();\n }\n\n if (consume) {\n evt.stopPropagation();\n }\n\n if (hasCommitted) {\n this.run();\n }\n },\n { throttle, debounce }\n );\n\n if (source === EVENT_SOURCE_VIEW) {\n if (permit(this._eventConfig, EVENT_SOURCE_VIEW, type)) {\n // send traps errors, so use {trap: false} option\n this.addEventListener(type, send, NO_TRAP);\n\n return () => {\n this.removeEventListener(type, send);\n };\n }\n } else if (source === EVENT_SOURCE_WINDOW) {\n vglobal.addEventListener(type, send);\n this._eventListeners.push({\n type: type,\n source: vglobal,\n handler: send\n });\n\n return () => {\n vglobal.removeEventListener(type, send);\n\n const index = this._eventListeners.findIndex((entry: any) => {\n return entry.type === type && entry.source === vglobal && entry.handler === send;\n });\n\n if (index >= 0) {\n this._eventListeners.splice(index, 1);\n }\n };\n }\n }\n\n event(eventSpec: EventSpec) {\n if ('between' in eventSpec) {\n const [starEvent, endEvent] = eventSpec.between;\n // FIXME between需要生成唯一ID\n const id = `${starEvent.type}-${eventSpec.type}-${endEvent.type}`;\n\n let unbindEndEvent: any;\n\n this.bindEvents(\n Object.assign({}, starEvent, {\n callback: () => {\n if (!this._eventCache) {\n this._eventCache = {};\n }\n // 中间的事件绑定\n if (!this._eventCache[id]) {\n const unbindEvent = this.bindEvents(eventSpec);\n this._eventCache[id] = unbindEvent;\n }\n if (!unbindEndEvent) {\n // 结束的事件绑定\n unbindEndEvent = this.bindEvents(\n Object.assign({}, endEvent, {\n callback: () => {\n if (this._eventCache[id]) {\n this._eventCache[id]();\n this._eventCache[id] = null;\n }\n }\n })\n );\n }\n }\n })\n );\n } else if ('merge' in eventSpec) {\n eventSpec.merge.forEach(entry => {\n const singleEvent: Partial<BaseEventSpec> = Object.assign({}, eventSpec);\n\n if (isString(entry)) {\n singleEvent.type = entry;\n } else if (isObject(entry)) {\n Object.assign(singleEvent, entry);\n }\n singleEvent.debounce = 50;\n this.bindEvents(singleEvent as BaseEventSpec);\n });\n } else {\n this.bindEvents(eventSpec);\n }\n }\n\n interaction(type: string, spec: Partial<InteractionSpec>) {\n const interaction = Factory.createInteraction(type, this, spec);\n\n if (interaction) {\n interaction.bind();\n\n if (!this._boundInteractions) {\n this._boundInteractions = [];\n }\n\n this._boundInteractions.push(interaction);\n }\n return interaction;\n }\n\n removeInteraction(type: string | IInteraction, id?: string) {\n if (this._boundInteractions) {\n const instances = this._boundInteractions.filter(interaction => {\n if (!isNil(id)) {\n return interaction.options?.id === id;\n }\n\n if (isString(type)) {\n return interaction.type === type;\n }\n\n if (type) {\n return interaction === type;\n }\n });\n\n if (instances.length) {\n instances.forEach(instance => {\n instance.unbind();\n });\n }\n }\n\n return this;\n }\n\n removeAllInteractions() {\n if (this._boundInteractions) {\n this._boundInteractions.forEach(instance => {\n instance.unbind();\n });\n\n this._boundInteractions = null;\n }\n\n return this;\n }\n\n private initEvent() {\n // 基于 vRender 事件系统提供的委托机制\n const stage = this.renderer.stage();\n stage && stage.on('*', this.delegateEvent);\n }\n\n private releaseStageEvent() {\n const stage = this.renderer.stage();\n stage && stage.off('*', this.delegateEvent);\n }\n\n private delegateEvent = (event: any, type: string) => {\n const activeElement = event.target?.[BridgeElementKey];\n const extendedEvt = getExtendedEvents(this, event, activeElement, type, EVENT_SOURCE_VIEW);\n this.emit(type, extendedEvt, activeElement);\n };\n\n addEventListener(type: string, handler: BaseEventHandler, options?: any) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n callback = handler;\n (callback as any).raw = handler;\n }\n if (options && options.target) {\n (callback as any).target = options.target;\n }\n this.on(type, callback);\n return this;\n }\n\n removeEventListener(type: string, handler?: BaseEventHandler) {\n if (handler) {\n this.off(type, handler);\n } else {\n this.off(type);\n }\n return this;\n }\n\n // --- Initialization ---\n\n private initializeRenderer() {\n const width = this._options.width;\n const height = this._options.height;\n\n this.renderer = new CanvasRenderer(this);\n this.renderer.initialize(width, height, this._options, this._eventConfig).background(this._background);\n }\n\n private initialize() {\n this.grammars = new RecordedGrammars(\n grammar => grammar.id(),\n (key, grammar) => this.logger.warn(`Grammar id '${key}' has been occupied`, grammar)\n );\n this._cachedGrammars = new RecordedTreeGrammars(grammar => grammar.id());\n\n if (this._options.logger) {\n Logger.setInstance(this._options.logger);\n }\n this.logger = Logger.getInstance(this._options.logLevel ?? 0);\n\n this._dataflow = new Dataflow();\n\n this.animate = new ViewAnimate(this);\n\n this._morph = new Morph();\n\n // 执行钩子\n if (this._options.hooks) {\n Object.keys(this._options.hooks).forEach(key => {\n this.on(key, this._options.hooks[key]);\n });\n // 生命周期事件(包含原性能测试钩子)\n this.hooks = this._options.hooks;\n }\n this.container = null;\n\n // initialize renderer, handler and event management\n this.renderer = null;\n this._eventListeners = [];\n\n // initialize event configuration\n this._eventConfig = initializeEventConfig(this._options.eventConfig);\n\n // set default theme\n this._theme = this._options.disableTheme ? null : ThemeManager.getDefaultTheme();\n\n this.parseBuiltIn();\n\n // initialize DOM container(s) and renderer\n configureEnvironment(this._options);\n this.initializeRenderer();\n\n if (!this._eventConfig.disable) {\n this.initEvent();\n }\n this._bindResizeEvent();\n\n // update layout tree after initialization\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n // apply theme value after initialization\n this.theme(this._theme);\n }\n\n // --- Others ---\n\n pauseProgressive() {\n return false;\n }\n resumeProgressive() {\n return false;\n }\n restartProgressive() {\n return false;\n }\n\n private findProgressiveMarks() {\n const marks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n marks.push(mark);\n },\n (mark: IMark) => mark.markType !== GrammarMarkType.group && mark.isProgressive()\n );\n\n if (!marks.length) {\n this._progressiveMarks = null;\n return null;\n }\n\n this._progressiveMarks = marks;\n\n if (this.renderer) {\n this.renderer.combineIncrementalLayers();\n }\n\n return marks;\n }\n\n private doPreProgressive() {\n if (this._progressiveMarks && this._progressiveMarks.some(mark => mark.isDoingProgressive())) {\n const raf = vglobal.getRequestAnimationFrame();\n this._progressiveRafId = raf(this.handleProgressiveFrame);\n }\n }\n\n /** 监听frame事件,更新增量元素的mark */\n private handleProgressiveFrame = () => {\n if (this._progressiveMarks.length) {\n this._progressiveMarks.forEach(mark => {\n if (mark.isDoingProgressive()) {\n mark.evaluateProgressive();\n }\n });\n }\n\n this.doPreProgressive();\n };\n\n /** 清除 */\n private clearProgressive() {\n if (this._progressiveRafId) {\n const cancelRaf = vglobal.getCancelAnimationFrame();\n cancelRaf(this._progressiveRafId);\n }\n\n if (this._progressiveMarks && this._progressiveMarks.length) {\n this._progressiveMarks.forEach(entry => {\n entry.clearProgressive();\n });\n\n this._progressiveMarks = null;\n }\n }\n\n // --- release ---\n release() {\n this.removeAllInteractions();\n this.releaseStageEvent();\n this._unBindResizeEvent();\n this.clearProgressive();\n Factory.unregisterRuntimeTransforms();\n Logger.setInstance(null);\n\n this.animate.stop();\n\n this.grammars.release();\n this._cachedGrammars.release();\n\n this._dataflow.release();\n this._dataflow = null;\n\n this.renderer?.release?.();\n this.renderer = null;\n this._boundInteractions = null;\n\n // 卸载事件\n this.removeAllListeners();\n this._eventListeners?.forEach((listener: any) => {\n listener.source.removeEventListener(listener.type, listener.handler);\n });\n this._eventListeners = null;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visactor/vgrammar-core",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.9",
|
|
4
4
|
"description": "VGrammar is a visual grammar library",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"grammar",
|
|
@@ -24,12 +24,12 @@
|
|
|
24
24
|
"dist"
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@visactor/vgrammar-coordinate": "0.12.
|
|
28
|
-
"@visactor/vgrammar-util": "0.12.
|
|
27
|
+
"@visactor/vgrammar-coordinate": "0.12.9",
|
|
28
|
+
"@visactor/vgrammar-util": "0.12.9",
|
|
29
29
|
"@visactor/vscale": "~0.18.1",
|
|
30
|
-
"@visactor/vrender-core": "0.18.
|
|
31
|
-
"@visactor/vrender-kits": "0.18.
|
|
32
|
-
"@visactor/vrender-components": "0.18.
|
|
30
|
+
"@visactor/vrender-core": "0.18.13",
|
|
31
|
+
"@visactor/vrender-kits": "0.18.13",
|
|
32
|
+
"@visactor/vrender-components": "0.18.13",
|
|
33
33
|
"@visactor/vutils": "~0.18.1",
|
|
34
34
|
"@visactor/vdataset": "~0.18.1"
|
|
35
35
|
},
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
"ts-jest": "~29.1.0",
|
|
45
45
|
"@types/jest": "~29.5.0",
|
|
46
46
|
"typescript": "4.9.5",
|
|
47
|
-
"@internal/bundler": "0.0.1",
|
|
48
|
-
"@internal/ts-config": "0.0.1",
|
|
49
47
|
"@internal/eslint-config": "0.0.1",
|
|
48
|
+
"@internal/ts-config": "0.0.1",
|
|
49
|
+
"@internal/bundler": "0.0.1",
|
|
50
50
|
"@internal/jest-config": "0.0.1"
|
|
51
51
|
},
|
|
52
52
|
"publishConfig": {
|