| 
/* 
 | 
* 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'; 
 | 
var TYPE_DELIMITER = '.'; 
 | 
var IS_CONTAINER = '___EC__COMPONENT__CONTAINER___'; 
 | 
var IS_EXTENDED_CLASS = '___EC__EXTENDED_CLASS___'; 
 | 
/** 
 | 
 * Notice, parseClassType('') should returns {main: '', sub: ''} 
 | 
 * @public 
 | 
 */ 
 | 
export function parseClassType(componentType) { 
 | 
  var ret = { 
 | 
    main: '', 
 | 
    sub: '' 
 | 
  }; 
 | 
  if (componentType) { 
 | 
    var typeArr = componentType.split(TYPE_DELIMITER); 
 | 
    ret.main = typeArr[0] || ''; 
 | 
    ret.sub = typeArr[1] || ''; 
 | 
  } 
 | 
  return ret; 
 | 
} 
 | 
/** 
 | 
 * @public 
 | 
 */ 
 | 
function checkClassType(componentType) { 
 | 
  zrUtil.assert(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(componentType), 'componentType "' + componentType + '" illegal'); 
 | 
} 
 | 
export function isExtendedClass(clz) { 
 | 
  return !!(clz && clz[IS_EXTENDED_CLASS]); 
 | 
} 
 | 
/** 
 | 
 * Implements `ExtendableConstructor` for `rootClz`. 
 | 
 * 
 | 
 * @usage 
 | 
 * ```ts 
 | 
 * class Xxx {} 
 | 
 * type XxxConstructor = typeof Xxx & ExtendableConstructor 
 | 
 * enableClassExtend(Xxx as XxxConstructor); 
 | 
 * ``` 
 | 
 */ 
 | 
export function enableClassExtend(rootClz, mandatoryMethods) { 
 | 
  rootClz.$constructor = rootClz; // FIXME: not necessary? 
 | 
  rootClz.extend = function (proto) { 
 | 
    if (process.env.NODE_ENV !== 'production') { 
 | 
      zrUtil.each(mandatoryMethods, function (method) { 
 | 
        if (!proto[method]) { 
 | 
          console.warn('Method `' + method + '` should be implemented' + (proto.type ? ' in ' + proto.type : '') + '.'); 
 | 
        } 
 | 
      }); 
 | 
    } 
 | 
    var superClass = this; 
 | 
    var ExtendedClass; 
 | 
    if (isESClass(superClass)) { 
 | 
      ExtendedClass = /** @class */function (_super) { 
 | 
        __extends(class_1, _super); 
 | 
        function class_1() { 
 | 
          return _super.apply(this, arguments) || this; 
 | 
        } 
 | 
        return class_1; 
 | 
      }(superClass); 
 | 
    } else { 
 | 
      // For backward compat, we both support ts class inheritance and this 
 | 
      // "extend" approach. 
 | 
      // The constructor should keep the same behavior as ts class inheritance: 
 | 
      // If this constructor/$constructor is not declared, auto invoke the super 
 | 
      // constructor. 
 | 
      // If this constructor/$constructor is declared, it is responsible for 
 | 
      // calling the super constructor. 
 | 
      ExtendedClass = function () { 
 | 
        (proto.$constructor || superClass).apply(this, arguments); 
 | 
      }; 
 | 
      zrUtil.inherits(ExtendedClass, this); 
 | 
    } 
 | 
    zrUtil.extend(ExtendedClass.prototype, proto); 
 | 
    ExtendedClass[IS_EXTENDED_CLASS] = true; 
 | 
    ExtendedClass.extend = this.extend; 
 | 
    ExtendedClass.superCall = superCall; 
 | 
    ExtendedClass.superApply = superApply; 
 | 
    ExtendedClass.superClass = superClass; 
 | 
    return ExtendedClass; 
 | 
  }; 
 | 
} 
 | 
function isESClass(fn) { 
 | 
  return zrUtil.isFunction(fn) && /^class\s/.test(Function.prototype.toString.call(fn)); 
 | 
} 
 | 
/** 
 | 
 * A work around to both support ts extend and this extend mechanism. 
 | 
 * on sub-class. 
 | 
 * @usage 
 | 
 * ```ts 
 | 
 * class Component { ... } 
 | 
 * classUtil.enableClassExtend(Component); 
 | 
 * classUtil.enableClassManagement(Component, {registerWhenExtend: true}); 
 | 
 * 
 | 
 * class Series extends Component { ... } 
 | 
 * // Without calling `markExtend`, `registerWhenExtend` will not work. 
 | 
 * Component.markExtend(Series); 
 | 
 * ``` 
 | 
 */ 
 | 
export function mountExtend(SubClz, SupperClz) { 
 | 
  SubClz.extend = SupperClz.extend; 
 | 
} 
 | 
// A random offset. 
 | 
var classBase = Math.round(Math.random() * 10); 
 | 
/** 
 | 
 * Implements `CheckableConstructor` for `target`. 
 | 
 * Can not use instanceof, consider different scope by 
 | 
 * cross domain or es module import in ec extensions. 
 | 
 * Mount a method "isInstance()" to Clz. 
 | 
 * 
 | 
 * @usage 
 | 
 * ```ts 
 | 
 * class Xxx {} 
 | 
 * type XxxConstructor = typeof Xxx & CheckableConstructor; 
 | 
 * enableClassCheck(Xxx as XxxConstructor) 
 | 
 * ``` 
 | 
 */ 
 | 
export function enableClassCheck(target) { 
 | 
  var classAttr = ['__\0is_clz', classBase++].join('_'); 
 | 
  target.prototype[classAttr] = true; 
 | 
  if (process.env.NODE_ENV !== 'production') { 
 | 
    zrUtil.assert(!target.isInstance, 'The method "is" can not be defined.'); 
 | 
  } 
 | 
  target.isInstance = function (obj) { 
 | 
    return !!(obj && obj[classAttr]); 
 | 
  }; 
 | 
} 
 | 
// superCall should have class info, which can not be fetched from 'this'. 
 | 
// Consider this case: 
 | 
// class A has method f, 
 | 
// class B inherits class A, overrides method f, f call superApply('f'), 
 | 
// class C inherits class B, does not override method f, 
 | 
// then when method of class C is called, dead loop occurred. 
 | 
function superCall(context, methodName) { 
 | 
  var args = []; 
 | 
  for (var _i = 2; _i < arguments.length; _i++) { 
 | 
    args[_i - 2] = arguments[_i]; 
 | 
  } 
 | 
  return this.superClass.prototype[methodName].apply(context, args); 
 | 
} 
 | 
function superApply(context, methodName, args) { 
 | 
  return this.superClass.prototype[methodName].apply(context, args); 
 | 
} 
 | 
/** 
 | 
 * Implements `ClassManager` for `target` 
 | 
 * 
 | 
 * @usage 
 | 
 * ```ts 
 | 
 * class Xxx {} 
 | 
 * type XxxConstructor = typeof Xxx & ClassManager 
 | 
 * enableClassManagement(Xxx as XxxConstructor); 
 | 
 * ``` 
 | 
 */ 
 | 
export function enableClassManagement(target) { 
 | 
  /** 
 | 
   * Component model classes 
 | 
   * key: componentType, 
 | 
   * value: 
 | 
   *     componentClass, when componentType is 'a' 
 | 
   *     or Object.<subKey, componentClass>, when componentType is 'a.b' 
 | 
   */ 
 | 
  var storage = {}; 
 | 
  target.registerClass = function (clz) { 
 | 
    // `type` should not be a "instance member". 
 | 
    // If using TS class, should better declared as `static type = 'series.pie'`. 
 | 
    // otherwise users have to mount `type` on prototype manually. 
 | 
    // For backward compat and enable instance visit type via `this.type`, 
 | 
    // we still support fetch `type` from prototype. 
 | 
    var componentFullType = clz.type || clz.prototype.type; 
 | 
    if (componentFullType) { 
 | 
      checkClassType(componentFullType); 
 | 
      // If only static type declared, we assign it to prototype mandatorily. 
 | 
      clz.prototype.type = componentFullType; 
 | 
      var componentTypeInfo = parseClassType(componentFullType); 
 | 
      if (!componentTypeInfo.sub) { 
 | 
        if (process.env.NODE_ENV !== 'production') { 
 | 
          if (storage[componentTypeInfo.main]) { 
 | 
            console.warn(componentTypeInfo.main + ' exists.'); 
 | 
          } 
 | 
        } 
 | 
        storage[componentTypeInfo.main] = clz; 
 | 
      } else if (componentTypeInfo.sub !== IS_CONTAINER) { 
 | 
        var container = makeContainer(componentTypeInfo); 
 | 
        container[componentTypeInfo.sub] = clz; 
 | 
      } 
 | 
    } 
 | 
    return clz; 
 | 
  }; 
 | 
  target.getClass = function (mainType, subType, throwWhenNotFound) { 
 | 
    var clz = storage[mainType]; 
 | 
    if (clz && clz[IS_CONTAINER]) { 
 | 
      clz = subType ? clz[subType] : null; 
 | 
    } 
 | 
    if (throwWhenNotFound && !clz) { 
 | 
      throw new Error(!subType ? mainType + '.' + 'type should be specified.' : 'Component ' + mainType + '.' + (subType || '') + ' is used but not imported.'); 
 | 
    } 
 | 
    return clz; 
 | 
  }; 
 | 
  target.getClassesByMainType = function (componentType) { 
 | 
    var componentTypeInfo = parseClassType(componentType); 
 | 
    var result = []; 
 | 
    var obj = storage[componentTypeInfo.main]; 
 | 
    if (obj && obj[IS_CONTAINER]) { 
 | 
      zrUtil.each(obj, function (o, type) { 
 | 
        type !== IS_CONTAINER && result.push(o); 
 | 
      }); 
 | 
    } else { 
 | 
      result.push(obj); 
 | 
    } 
 | 
    return result; 
 | 
  }; 
 | 
  target.hasClass = function (componentType) { 
 | 
    // Just consider componentType.main. 
 | 
    var componentTypeInfo = parseClassType(componentType); 
 | 
    return !!storage[componentTypeInfo.main]; 
 | 
  }; 
 | 
  /** 
 | 
   * @return Like ['aa', 'bb'], but can not be ['aa.xx'] 
 | 
   */ 
 | 
  target.getAllClassMainTypes = function () { 
 | 
    var types = []; 
 | 
    zrUtil.each(storage, function (obj, type) { 
 | 
      types.push(type); 
 | 
    }); 
 | 
    return types; 
 | 
  }; 
 | 
  /** 
 | 
   * If a main type is container and has sub types 
 | 
   */ 
 | 
  target.hasSubTypes = function (componentType) { 
 | 
    var componentTypeInfo = parseClassType(componentType); 
 | 
    var obj = storage[componentTypeInfo.main]; 
 | 
    return obj && obj[IS_CONTAINER]; 
 | 
  }; 
 | 
  function makeContainer(componentTypeInfo) { 
 | 
    var container = storage[componentTypeInfo.main]; 
 | 
    if (!container || !container[IS_CONTAINER]) { 
 | 
      container = storage[componentTypeInfo.main] = {}; 
 | 
      container[IS_CONTAINER] = true; 
 | 
    } 
 | 
    return container; 
 | 
  } 
 | 
} 
 | 
// /** 
 | 
//  * @param {string|Array.<string>} properties 
 | 
//  */ 
 | 
// export function setReadOnly(obj, properties) { 
 | 
// FIXME It seems broken in IE8 simulation of IE11 
 | 
// if (!zrUtil.isArray(properties)) { 
 | 
//     properties = properties != null ? [properties] : []; 
 | 
// } 
 | 
// zrUtil.each(properties, function (prop) { 
 | 
//     let value = obj[prop]; 
 | 
//     Object.defineProperty 
 | 
//         && Object.defineProperty(obj, prop, { 
 | 
//             value: value, writable: false 
 | 
//         }); 
 | 
//     zrUtil.isArray(obj[prop]) 
 | 
//         && Object.freeze 
 | 
//         && Object.freeze(obj[prop]); 
 | 
// }); 
 | 
// } 
 |