/* * 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;