whole_func_string: function flattenMixins(mixins, target, opts) {
      mixins.forEach(item => {
          if (typeof item === 'function') {
              item = item(true, opts); // return okam mixin definition
          }
  
          if (!item || typeof item !== 'object') {
              return;
          }
  
          let submixins = item.mixins;
          if (Array.isArray(submixins) && submixins.length) {
              item = Object.assign({}, item);
              flattenMixins(submixins, item, opts);
          }
  
          Object.keys(item).forEach(
              k => doMixin(target, item, k, opts)
          );
      });
  }
func_code_string: function flattenMixins(mixins, target, opts) {
      mixins.forEach(item => {
          if (typeof item === 'function') {
              item = item(true, opts); // return okam mixin definition
          }
  
          if (!item || typeof item !== 'object') {
              return;
          }
  
          let submixins = item.mixins;
          if (Array.isArray(submixins) && submixins.length) {
              item = Object.assign({}, item);
              flattenMixins(submixins, item, opts);
          }
  
          Object.keys(item).forEach(
              k => doMixin(target, item, k, opts)
          );
      });
  }
func_documentation_string: Flatten mixins for not support native behavior or Page mixins
  
  @inner
  @param {Array.<string|Object>} mixins the mixins
  @param {Object} target the target component or behavior
  @param {Object=} opts the mixin options