| /* | 
 | * Licensed to the Apache Software Foundation (ASF) under one | 
 | * or more contributor license agreements.  See the NOTICE file | 
 | * distributed with this work for additional information | 
 | * regarding copyright ownership.  The ASF licenses this file | 
 | * to you under the Apache License, Version 2.0 (the | 
 | * "License"); you may not use this file except in compliance | 
 | * with the License.  You may obtain a copy of the License at | 
 | * | 
 | *   http://www.apache.org/licenses/LICENSE-2.0 | 
 | * | 
 | * Unless required by applicable law or agreed to in writing, | 
 | * software distributed under the License is distributed on an | 
 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
 | * KIND, either express or implied.  See the License for the | 
 | * specific language governing permissions and limitations | 
 | * under the License. | 
 | */ | 
 |  | 
 | import Group from 'zrender/src/graphic/Group'; | 
 | import * as componentUtil from '../util/component'; | 
 | import * as clazzUtil from '../util/clazz'; | 
 | import ComponentModel from '../model/Component'; | 
 | import GlobalModel from '../model/Global'; | 
 | import ExtensionAPI from '../core/ExtensionAPI'; | 
 | import {Payload, ViewRootGroup, ECActionEvent, EventQueryItem, ECElementEvent} from '../util/types'; | 
 | import Element from 'zrender/src/Element'; | 
 | import SeriesModel from '../model/Series'; | 
 |  | 
 | interface ComponentView { | 
 |     /** | 
 |      * Implement it if needed. | 
 |      */ | 
 |     updateTransform?( | 
 |         model: ComponentModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload | 
 |     ): void | {update: true}; | 
 |  | 
 |     /** | 
 |      * Pass only when return `true`. | 
 |      * Implement it if needed. | 
 |      */ | 
 |     filterForExposedEvent( | 
 |         eventType: string, query: EventQueryItem, targetEl: Element, packedEvent: ECActionEvent | ECElementEvent | 
 |     ): boolean; | 
 |  | 
 |     /** | 
 |      * Find dispatchers for highlight/downplay by name. | 
 |      * If this methods provided, hover link (within the same name) is enabled in component. | 
 |      * That is, in component, a name can correspond to multiple dispatchers. | 
 |      * Those dispatchers can have no common ancestor. | 
 |      * The highlight/downplay state change will be applied on the | 
 |      * dispatchers and their descendents. | 
 |      * | 
 |      * @return Must return an array but not null/undefined. | 
 |      */ | 
 |     findHighDownDispatchers?( | 
 |         name: string | 
 |     ): Element[]; | 
 |  | 
 |     focusBlurEnabled?: boolean; | 
 | } | 
 |  | 
 | class ComponentView { | 
 |  | 
 |     // [Caution]: Because this class or desecendants can be used as `XXX.extend(subProto)`, | 
 |     // the class members must not be initialized in constructor or declaration place. | 
 |     // Otherwise there is bad case: | 
 |     //   class A {xxx = 1;} | 
 |     //   enableClassExtend(A); | 
 |     //   class B extends A {} | 
 |     //   var C = B.extend({xxx: 5}); | 
 |     //   var c = new C(); | 
 |     //   console.log(c.xxx); // expect 5 but always 1. | 
 |  | 
 |     readonly group: ViewRootGroup; | 
 |  | 
 |     readonly uid: string; | 
 |  | 
 |     // ---------------------- | 
 |     // Injectable properties | 
 |     // ---------------------- | 
 |     __model: ComponentModel; | 
 |     __alive: boolean; | 
 |     __id: string; | 
 |  | 
 |     constructor() { | 
 |         this.group = new Group(); | 
 |         this.uid = componentUtil.getUID('viewComponent'); | 
 |     } | 
 |  | 
 |     init(ecModel: GlobalModel, api: ExtensionAPI): void {} | 
 |  | 
 |     render(model: ComponentModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload): void {} | 
 |  | 
 |     dispose(ecModel: GlobalModel, api: ExtensionAPI): void {} | 
 |  | 
 |     updateView(model: ComponentModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload): void { | 
 |         // Do nothing; | 
 |     } | 
 |  | 
 |     updateLayout(model: ComponentModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload): void { | 
 |         // Do nothing; | 
 |     } | 
 |  | 
 |     updateVisual(model: ComponentModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload): void { | 
 |         // Do nothing; | 
 |     } | 
 |  | 
 |     /** | 
 |      * Hook for toggle blur target series. | 
 |      * Can be used in marker for blur or leave blur the markers | 
 |      */ | 
 |     toggleBlurSeries(seriesModels: SeriesModel[], isBlur: boolean, ecModel: GlobalModel): void { | 
 |         // Do nothing; | 
 |     } | 
 |  | 
 |     /** | 
 |      * Traverse the new rendered elements. | 
 |      * | 
 |      * It will traverse the new added element in progressive rendering. | 
 |      * And traverse all in normal rendering. | 
 |      */ | 
 |     eachRendered(cb: (el: Element) => boolean | void) { | 
 |         const group = this.group; | 
 |         if (group) { | 
 |             group.traverse(cb); | 
 |         } | 
 |     } | 
 |  | 
 |     static registerClass: clazzUtil.ClassManager['registerClass']; | 
 | }; | 
 |  | 
 |  | 
 | export type ComponentViewConstructor = typeof ComponentView | 
 |     & clazzUtil.ExtendableConstructor | 
 |     & clazzUtil.ClassManager; | 
 |  | 
 | clazzUtil.enableClassExtend(ComponentView as ComponentViewConstructor); | 
 | clazzUtil.enableClassManagement(ComponentView as ComponentViewConstructor); | 
 |  | 
 | export default ComponentView; |