|   | 
| /* | 
| * 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. | 
| */ | 
|   | 
|   | 
| /** | 
|  * AUTO-GENERATED FILE. DO NOT MODIFY. | 
|  */ | 
|   | 
| /* | 
| * 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 { __extends } from "tslib"; | 
| import * as zrUtil from 'zrender/lib/core/util.js'; | 
| import Model from './Model.js'; | 
| import * as componentUtil from '../util/component.js'; | 
| import { enableClassManagement, parseClassType, isExtendedClass, mountExtend } from '../util/clazz.js'; | 
| import { makeInner, queryReferringComponents } from '../util/model.js'; | 
| import * as layout from '../util/layout.js'; | 
| var inner = makeInner(); | 
| var ComponentModel = /** @class */function (_super) { | 
|   __extends(ComponentModel, _super); | 
|   function ComponentModel(option, parentModel, ecModel) { | 
|     var _this = _super.call(this, option, parentModel, ecModel) || this; | 
|     _this.uid = componentUtil.getUID('ec_cpt_model'); | 
|     return _this; | 
|   } | 
|   ComponentModel.prototype.init = function (option, parentModel, ecModel) { | 
|     this.mergeDefaultAndTheme(option, ecModel); | 
|   }; | 
|   ComponentModel.prototype.mergeDefaultAndTheme = function (option, ecModel) { | 
|     var layoutMode = layout.fetchLayoutMode(this); | 
|     var inputPositionParams = layoutMode ? layout.getLayoutParams(option) : {}; | 
|     var themeModel = ecModel.getTheme(); | 
|     zrUtil.merge(option, themeModel.get(this.mainType)); | 
|     zrUtil.merge(option, this.getDefaultOption()); | 
|     if (layoutMode) { | 
|       layout.mergeLayoutParam(option, inputPositionParams, layoutMode); | 
|     } | 
|   }; | 
|   ComponentModel.prototype.mergeOption = function (option, ecModel) { | 
|     zrUtil.merge(this.option, option, true); | 
|     var layoutMode = layout.fetchLayoutMode(this); | 
|     if (layoutMode) { | 
|       layout.mergeLayoutParam(this.option, option, layoutMode); | 
|     } | 
|   }; | 
|   /** | 
|    * Called immediately after `init` or `mergeOption` of this instance called. | 
|    */ | 
|   ComponentModel.prototype.optionUpdated = function (newCptOption, isInit) {}; | 
|   /** | 
|    * [How to declare defaultOption]: | 
|    * | 
|    * (A) If using class declaration in typescript (since echarts 5): | 
|    * ```ts | 
|    * import {ComponentOption} from '../model/option.js'; | 
|    * export interface XxxOption extends ComponentOption { | 
|    *     aaa: number | 
|    * } | 
|    * export class XxxModel extends Component { | 
|    *     static type = 'xxx'; | 
|    *     static defaultOption: XxxOption = { | 
|    *         aaa: 123 | 
|    *     } | 
|    * } | 
|    * Component.registerClass(XxxModel); | 
|    * ``` | 
|    * ```ts | 
|    * import {inheritDefaultOption} from '../util/component.js'; | 
|    * import {XxxModel, XxxOption} from './XxxModel.js'; | 
|    * export interface XxxSubOption extends XxxOption { | 
|    *     bbb: number | 
|    * } | 
|    * class XxxSubModel extends XxxModel { | 
|    *     static defaultOption: XxxSubOption = inheritDefaultOption(XxxModel.defaultOption, { | 
|    *         bbb: 456 | 
|    *     }) | 
|    *     fn() { | 
|    *         let opt = this.getDefaultOption(); | 
|    *         // opt is {aaa: 123, bbb: 456} | 
|    *     } | 
|    * } | 
|    * ``` | 
|    * | 
|    * (B) If using class extend (previous approach in echarts 3 & 4): | 
|    * ```js | 
|    * let XxxComponent = Component.extend({ | 
|    *     defaultOption: { | 
|    *         xx: 123 | 
|    *     } | 
|    * }) | 
|    * ``` | 
|    * ```js | 
|    * let XxxSubComponent = XxxComponent.extend({ | 
|    *     defaultOption: { | 
|    *         yy: 456 | 
|    *     }, | 
|    *     fn: function () { | 
|    *         let opt = this.getDefaultOption(); | 
|    *         // opt is {xx: 123, yy: 456} | 
|    *     } | 
|    * }) | 
|    * ``` | 
|    */ | 
|   ComponentModel.prototype.getDefaultOption = function () { | 
|     var ctor = this.constructor; | 
|     // If using class declaration, it is different to travel super class | 
|     // in legacy env and auto merge defaultOption. So if using class | 
|     // declaration, defaultOption should be merged manually. | 
|     if (!isExtendedClass(ctor)) { | 
|       // When using ts class, defaultOption must be declared as static. | 
|       return ctor.defaultOption; | 
|     } | 
|     // FIXME: remove this approach? | 
|     var fields = inner(this); | 
|     if (!fields.defaultOption) { | 
|       var optList = []; | 
|       var clz = ctor; | 
|       while (clz) { | 
|         var opt = clz.prototype.defaultOption; | 
|         opt && optList.push(opt); | 
|         clz = clz.superClass; | 
|       } | 
|       var defaultOption = {}; | 
|       for (var i = optList.length - 1; i >= 0; i--) { | 
|         defaultOption = zrUtil.merge(defaultOption, optList[i], true); | 
|       } | 
|       fields.defaultOption = defaultOption; | 
|     } | 
|     return fields.defaultOption; | 
|   }; | 
|   /** | 
|    * Notice: always force to input param `useDefault` in case that forget to consider it. | 
|    * The same behavior as `modelUtil.parseFinder`. | 
|    * | 
|    * @param useDefault In many cases like series refer axis and axis refer grid, | 
|    *        If axis index / axis id not specified, use the first target as default. | 
|    *        In other cases like dataZoom refer axis, if not specified, measn no refer. | 
|    */ | 
|   ComponentModel.prototype.getReferringComponents = function (mainType, opt) { | 
|     var indexKey = mainType + 'Index'; | 
|     var idKey = mainType + 'Id'; | 
|     return queryReferringComponents(this.ecModel, mainType, { | 
|       index: this.get(indexKey, true), | 
|       id: this.get(idKey, true) | 
|     }, opt); | 
|   }; | 
|   ComponentModel.prototype.getBoxLayoutParams = function () { | 
|     // Consider itself having box layout configs. | 
|     var boxLayoutModel = this; | 
|     return { | 
|       left: boxLayoutModel.get('left'), | 
|       top: boxLayoutModel.get('top'), | 
|       right: boxLayoutModel.get('right'), | 
|       bottom: boxLayoutModel.get('bottom'), | 
|       width: boxLayoutModel.get('width'), | 
|       height: boxLayoutModel.get('height') | 
|     }; | 
|   }; | 
|   /** | 
|    * Get key for zlevel. | 
|    * If developers don't configure zlevel. We will assign zlevel to series based on the key. | 
|    * For example, lines with trail effect and progressive series will in an individual zlevel. | 
|    */ | 
|   ComponentModel.prototype.getZLevelKey = function () { | 
|     return ''; | 
|   }; | 
|   ComponentModel.prototype.setZLevel = function (zlevel) { | 
|     this.option.zlevel = zlevel; | 
|   }; | 
|   ComponentModel.protoInitialize = function () { | 
|     var proto = ComponentModel.prototype; | 
|     proto.type = 'component'; | 
|     proto.id = ''; | 
|     proto.name = ''; | 
|     proto.mainType = ''; | 
|     proto.subType = ''; | 
|     proto.componentIndex = 0; | 
|   }(); | 
|   return ComponentModel; | 
| }(Model); | 
| mountExtend(ComponentModel, Model); | 
| enableClassManagement(ComponentModel); | 
| componentUtil.enableSubTypeDefaulter(ComponentModel); | 
| componentUtil.enableTopologicalTravel(ComponentModel, getDependencies); | 
| function getDependencies(componentType) { | 
|   var deps = []; | 
|   zrUtil.each(ComponentModel.getClassesByMainType(componentType), function (clz) { | 
|     deps = deps.concat(clz.dependencies || clz.prototype.dependencies || []); | 
|   }); | 
|   // Ensure main type. | 
|   deps = zrUtil.map(deps, function (type) { | 
|     return parseClassType(type).main; | 
|   }); | 
|   // Hack dataset for convenience. | 
|   if (componentType !== 'dataset' && zrUtil.indexOf(deps, 'dataset') <= 0) { | 
|     deps.unshift('dataset'); | 
|   } | 
|   return deps; | 
| } | 
| export default ComponentModel; |