/**
 * 数字或空字符串或数字字符串
 */
type $NumbStr = number | '' | `${number}`;

/**
 * 页面加载按钮类型
 */
type $PageLoadButton = {
  text: string;
  callBack: () => void;
};

/**
 * 上拉加载状态
 * 1 - 加载前(有更多数据)
 * 2 - 加载中
 * 3 - 没有更多了
 * 4 - 什么都不显示
 */
type $PageMoreStatus = 1 | 2 | 3 | 4;

/**
 * 页面加载状态类型
 * true - 加载中
 * false - 加载完成
 * err - 错误
 * null - 没有内容
 * noNet - 无网络
 * noPermission - 无权限
 */
declare type $LoadState = 'err' | 'noNet' | 'noPermission' | 'null' | false | true;

/**
 * 全局尺寸类型
 * large - 大尺寸(尽量不要使用)
 * default - 默认尺寸
 * small - 小尺寸
 */
declare type $GlobalSize = 'default' | 'large' | 'small';

/**
 * 全局主题类型
 * dark - 暗色主题
 * light - 亮色主题
 */
declare type $GlobalTheme = 'dark' | 'light';

/**
 * 应用版本号
 */
declare const __APP_VERSION_TIMESTAMP__: string;

/**
 * 日期字符串精确到天
 */
declare type $DateStrDayType = `${number}-${number}-${number}` | `${number}/${number}/${number}` | `${number}年${number}月${number}日`;

/**
 * 日期字符串精确到秒
 */
type $DateStrTime =
  | `${number}-${number}-${number} ${number}:${number}:${number}`
  | `${number}/${number}/${number} ${number}:${number}:${number}`
  | `${number}年${number}月${number}日${number}时${number}分${number}秒`;

/**
 * 需要格式化的日期类型
 */
declare type $FormatDate = $DateStrDayType | $DateStrTime | Date | number | [number, number, number];

/**
 * 页面状态对象
 */
declare type $PageLoad = {
  [str: string]: unknown;
  /** 当前状态 */
  loadState: $LoadState;
  /** 异常状态下的提示文字 */
  description?: string;
  /** 异常状态下的按钮对象 */
  pageLoadButton?: $PageLoadButton[];
};

/**
 * 无限滚动HTML元素
 */
type $InfiniteScrollHTMLElement = HTMLElement & {
  /** 用于记录某个高度下是否触发了一次,防止重复触发 */
  triggerRecord?: Record<number, boolean>;
};
