models_options.js

import { FHelp } from '../utils/index.js';

/**
 * @class
 * @summary Live2d 数据类
 * @classdesc Live2d 数据集合, 用于存储 live2d 对应的数据
 * @memberof module:modules
 * @alias DLive2dOptions
 */
export class DLive2dOptions {
  /**
   * 是否在初始化阶段打印项目信息
   * @summary 打印项目信息
   * @type {?boolean}
   * @default true
   */
  sayHello;

  /**
   * 模型入场和离开的过渡动画时长,单位 ms
   * @summary 过渡动画时长
   * @type {?number}
   * @default 500
   */
  transitionTime;

  /**
   * 模型配置, 默认值是空数组, 请至少配置一个有效的模型配置
   *
   * 前往{@link TModels}模型选项查看详细内容
   *
   * @summary 模型配置
   * @type {?TModels}
   * @default []
   * @see TModels
   */
  models;

  /**
   * 自定义提示框样式和内容, 前往 {@link DTips} 提示框选项查看详细内容
   * @summary 消息提示配置
   * @type {?DTips}
   * @default null
   * @see DTips
   */
  tips;

  /**
   * 默认你启用的菜单项
   * @summary 菜单项
   * @type {?(string[])}
   * @default ['home', 'switchTexture', 'switchModule', 'capture', 'info', 'quit']
   * @example
   * [
   *   'home', 'switchTexture', 'switchModule',
   *   'capture', 'info', 'quit'
   * ]
   */
  menus;

  /**
   * 父元素的选择器, 支持 css 选择器语法, 以及 xpath 语法. 默认父元素为 {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/body document.body}
   * @summary 父元素选择器
   * @type {?string}
   * @default ''
   * @example
   * '#id'           // => document.querySelector('#id');
   * '//*[@id="id"]' // => document.evaluate('//*[@id="id"]', document).iterateNext();
   */
  selector;

  /**
   * 组件是否使用固定定位
   * > 注意, 关闭这个属性后舞台的定位属性将从 fixed 改为 relative, 使舞台回到文档流, 另外该属性不影响状态条定位属性, 状态条与舞台之间相互独立,样式互不干扰.
   * @summary 组件固定定位
   * @type {?boolean}
   * @default true
   */
  fixed;

  /**
   * 需要使用的插件集
   * @summary 插件
   * @type {?(FBasePlugin[])}
   * @default []
   */
  plugins;

  /**
   * 如果是 true, 则启用 wrapper 元素的拖拽, 否则不启用拖拽
   * @summary 启用拖拽
   * @type {?boolean}
   * @default true
   */
  drag;

  /**
   * `homePath` 是一个 `url` 路径, 将完整的拼接在 `URL.origin` 后面
   * @summary url 路径
   * @type {?string}
   * @default ''
   * @example
   * let url = 'https://localhost/live2d';
   * // origin   => https://localhost
   * // homePath => /live2d
   */
  homePath;

  /**
   * 创建 live2d 数据实例
   * @summary Live2d 数据构造
   * @constructor
   * @param {DLive2dOptions | null} [data=null] live2d 数据
   */
  constructor(data = null) {
    FHelp.mixinProperty(this, data);
    this.sayHello = data?.sayHello ?? true;
    this.transitionTime = data?.transitionTime ?? 500;
    this.models = data?.models ?? [];
    this.tips = data?.tips;
    this.menus = data?.menus ?? ['home', 'switchTexture', 'switchModule', 'capture', 'info', 'quit'];
    this.selector = data?.selector ?? '';
    this.fixed = data?.fixed ?? true;
    this.plugins = data?.plugins ?? [];
    this.drag = data?.drag ?? true;
    this.homePath = data?.homePath ?? '';
  }
}