@fast-china/utils 2.1.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/array/index.mjs +1 -1
  3. package/dist/array/index.mjs.map +1 -1
  4. package/dist/async/index.mjs +21 -19
  5. package/dist/async/index.mjs.map +1 -1
  6. package/dist/base64/index.mjs +5 -5
  7. package/dist/base64/index.mjs.map +1 -1
  8. package/dist/color/index.mjs +4 -4
  9. package/dist/color/index.mjs.map +1 -1
  10. package/dist/crypto/index.mjs +27 -27
  11. package/dist/crypto/index.mjs.map +1 -1
  12. package/dist/date/index.mjs +3 -3
  13. package/dist/date/index.mjs.map +1 -1
  14. package/dist/dom/style.mjs +3 -3
  15. package/dist/dom/style.mjs.map +1 -1
  16. package/dist/identity/index.mjs +4 -4
  17. package/dist/identity/index.mjs.map +1 -1
  18. package/dist/index.global.min.js +2 -2
  19. package/dist/index.global.min.js.map +1 -1
  20. package/dist/internal/text.mjs +2 -2
  21. package/dist/internal/text.mjs.map +1 -1
  22. package/dist/logger/index.mjs +4 -4
  23. package/dist/logger/index.mjs.map +1 -1
  24. package/dist/number/index.mjs +12 -12
  25. package/dist/number/index.mjs.map +1 -1
  26. package/dist/object/index.mjs +1 -1
  27. package/dist/object/index.mjs.map +1 -1
  28. package/dist/storage/index.mjs +22 -22
  29. package/dist/storage/index.mjs.map +1 -1
  30. package/dist/string/index.mjs +13 -13
  31. package/dist/string/index.mjs.map +1 -1
  32. package/dist/vue/emits.mjs +2 -2
  33. package/dist/vue/emits.mjs.map +1 -1
  34. package/dist/vue/func.mjs +1 -1
  35. package/dist/vue/func.mjs.map +1 -1
  36. package/dist/vue/install.mjs +12 -12
  37. package/dist/vue/install.mjs.map +1 -1
  38. package/dist/vue/props.d.mts +1 -1
  39. package/dist/vue/props.mjs.map +1 -1
  40. package/dist/vue/render.mjs +1 -1
  41. package/dist/vue/render.mjs.map +1 -1
  42. package/docs/API.md +2 -0
  43. package/docs/API.zh-CN.md +2 -0
  44. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/date/index.ts"],"sourcesContent":["/** 可转换为日期的输入;数字始终按 Unix 毫秒时间戳处理。 */\nexport type DateInput = Date | number | string;\n\n/** {@link formatRelativeTime} 的语言与基准时间选项。 */\nexport interface RelativeTimeOptions {\n\t/** `Intl.RelativeTimeFormat` 使用的语言;默认固定为 `zh-CN`。 */\n\tlocale?: string | readonly string[];\n\t/** 比较基准,默认当前时间。 */\n\tnow?: DateInput;\n\t/** 是否允许“昨天”“明天”等文本;默认 `auto`。 */\n\tnumeric?: Intl.RelativeTimeFormatNumeric;\n\t/** 输出长度;默认 `long`。 */\n\tstyle?: Intl.RelativeTimeFormatStyle;\n}\n\n/**\n * 校验日期算术移动量。\n *\n * @param amount - 待校验的日、月或年移动量。\n * @throws `RangeError` 当值不是安全整数。\n */\nconst assertIntegerAmount = (amount: number): void => {\n\tif (!Number.isSafeInteger(amount)) throw new RangeError(\"amount must be a safe integer.\");\n};\n\n/**\n * 转换并克隆有效日期。\n *\n * @remarks 数字不进行秒/毫秒猜测;字符串遵循运行时 `Date` 解析规则,跨平台代码应传带显式时区的完整 ISO 8601。\n * @param value - Date、Unix 毫秒时间戳或运行时可解析字符串。\n * @returns 与输入不共享可变状态的新 Date。\n * @throws 输入无效时抛出 `TypeError`。\n */\nexport function toDate(value: DateInput): Date {\n\tconst date = value instanceof Date ? new Date(value.getTime()) : new Date(value);\n\tif (!Number.isFinite(date.getTime())) {\n\t\tthrow new TypeError(\"The value is not a valid date.\");\n\t}\n\treturn date;\n}\n\n/**\n * 判断输入能否转换为有效日期。\n *\n * @param value - 任意待检查值。\n * @returns 仅 Date、数字或字符串且时间戳有限时返回 `true`。\n */\nexport function isValidDate(value: unknown): value is DateInput {\n\tif (!(value instanceof Date || typeof value === \"number\" || typeof value === \"string\")) return false;\n\treturn Number.isFinite(new Date(value).getTime());\n}\n\n/**\n * 返回输入日期所在本地时区日期的 `00:00:00.000`,不修改输入。\n *\n * @param value - 有效日期输入。\n * @returns 新建的本地日开始时间。\n * @throws 输入无效时抛出 `TypeError`。\n */\nexport function startOfDay(value: DateInput): Date {\n\tconst date = toDate(value);\n\tdate.setHours(0, 0, 0, 0);\n\treturn toDate(date);\n}\n\n/**\n * 返回输入日期所在本地时区日期的 `23:59:59.999`,不修改输入。\n *\n * @param value - 有效日期输入。\n * @returns 新建的本地日结束时间。\n * @throws 输入无效时抛出 `TypeError`。\n */\nexport function endOfDay(value: DateInput): Date {\n\tconst date = toDate(value);\n\tdate.setHours(23, 59, 59, 999);\n\treturn toDate(date);\n}\n\n/**\n * 按本地日历增加整数天,不修改输入。\n *\n * @param value - 基准日期。\n * @param amount - 可为负数的安全整数日数。\n * @returns 本地日历运算后的新 Date;夏令时变化可能使实际毫秒差不等于 24 小时。\n * @throws 日期无效时抛出 `TypeError`;数量或结果非法时抛出 `RangeError`。\n */\nexport function addDays(value: DateInput, amount: number): Date {\n\tassertIntegerAmount(amount);\n\tconst date = toDate(value);\n\tdate.setDate(date.getDate() + amount);\n\treturn toDate(date);\n}\n\n/**\n * 按本地日历增加整数月,并把不存在的日期夹到目标月末。\n *\n * @example 1 月 31 日增加一个月会落在 2 月最后一天。\n * @param value - 基准日期。\n * @param amount - 可为负数的安全整数月数。\n * @returns 月份运算后的新 Date。\n * @throws 日期无效时抛出 `TypeError`;数量或结果非法时抛出 `RangeError`。\n */\nexport function addMonths(value: DateInput, amount: number): Date {\n\tassertIntegerAmount(amount);\n\tconst date = toDate(value);\n\tconst originalDay = date.getDate();\n\tdate.setDate(1);\n\tdate.setMonth(date.getMonth() + amount);\n\tconst targetMonthEnd = new Date(date.getTime());\n\t// 避免 `new Date(year, ...)` 把 0 至 99 年解释为 1900 至 1999 年。\n\ttargetMonthEnd.setMonth(targetMonthEnd.getMonth() + 1, 0);\n\tconst lastDay = targetMonthEnd.getDate();\n\tdate.setDate(Math.min(originalDay, lastDay));\n\treturn toDate(date);\n}\n\n/**\n * 按本地日历增加整数年,并沿用 {@link addMonths} 的月末夹取规则。\n *\n * @param value - 基准日期。\n * @param amount - 可为负数的安全整数年数。\n * @returns 年份运算后的新 Date。\n * @throws 日期无效时抛出 `TypeError`;数量或结果非法时抛出 `RangeError`。\n */\nexport function addYears(value: DateInput, amount: number): Date {\n\tassertIntegerAmount(amount);\n\treturn addMonths(value, amount * 12);\n}\n\n/**\n * 判断两个输入是否属于同一本地日历日。\n *\n * @param left - 第一日期。\n * @param right - 第二日期。\n * @returns 本地年、月、日均相同时返回 `true`。\n * @throws 任一输入无效时抛出 `TypeError`。\n */\nexport function isSameDay(left: DateInput, right: DateInput): boolean {\n\tconst first = toDate(left);\n\tconst second = toDate(right);\n\treturn first.getFullYear() === second.getFullYear() && first.getMonth() === second.getMonth() && first.getDate() === second.getDate();\n}\n\n/**\n * 判断时间是否晚于基准时间。\n *\n * @param value - 待比较时间。\n * @param now - 比较基准,默认调用时的当前时刻。\n * @returns `value` 严格晚于基准时返回 `true`。\n * @throws 任一输入无效时抛出 `TypeError`。\n */\nexport function isFuture(value: DateInput, now: DateInput = Date.now()): boolean {\n\treturn toDate(value).getTime() > toDate(now).getTime();\n}\n\n/**\n * 返回指定基准所在本地日历日的完整闭区间。\n *\n * @param value - 日期基准,默认调用时当前日期。\n * @returns 新建的本地日开始和结束时间二元组。\n * @throws 输入无效时抛出 `TypeError`。\n */\nexport function getLocalDayBounds(value: DateInput = Date.now()): [start: Date, end: Date] {\n\treturn [startOfDay(value), endOfDay(value)];\n}\n\n/**\n * 判断日期是否位于包含首尾的时间区间。\n *\n * @param value - 待检查日期。\n * @param start - 包含的起点。\n * @param end - 包含的终点。\n * @returns 时间戳位于闭区间内时返回 `true`。\n * @throws 无效日期抛出 `TypeError`;首尾反向时抛出 `RangeError`。\n */\nexport function isWithinInterval(value: DateInput, start: DateInput, end: DateInput): boolean {\n\tconst timestamp = toDate(value).getTime();\n\tconst startTimestamp = toDate(start).getTime();\n\tconst endTimestamp = toDate(end).getTime();\n\tif (startTimestamp > endTimestamp) throw new RangeError(\"start cannot be later than end.\");\n\treturn timestamp >= startTimestamp && timestamp <= endTimestamp;\n}\n\n/**\n * 使用 `Intl.RelativeTimeFormat` 生成人类可读相对时间。\n *\n * @remarks 秒、分钟、小时、天、周、月和年按固定时长阈值选择;这适合展示,不适合计费或日历运算。\n * @param value - 目标时间。\n * @param options - 语言、样式与比较基准。\n * @returns 由 `Intl.RelativeTimeFormat` 生成的本地化文本。\n * @throws 日期无效时抛出 `TypeError`;Locale 或 Intl 选项非法时抛出 `RangeError`。\n */\nexport function formatRelativeTime(value: DateInput, options: RelativeTimeOptions = {}): string {\n\tconst differenceSeconds = (toDate(value).getTime() - toDate(options.now ?? Date.now()).getTime()) / 1000;\n\tconst absolute = Math.abs(differenceSeconds);\n\tlet divisor: number;\n\tlet unit: Intl.RelativeTimeFormatUnit;\n\tif (absolute < 60) {\n\t\tdivisor = 1;\n\t\tunit = \"second\";\n\t} else if (absolute < 3_600) {\n\t\tdivisor = 60;\n\t\tunit = \"minute\";\n\t} else if (absolute < 86_400) {\n\t\tdivisor = 3_600;\n\t\tunit = \"hour\";\n\t} else if (absolute < 604_800) {\n\t\tdivisor = 86_400;\n\t\tunit = \"day\";\n\t} else if (absolute < 2_629_800) {\n\t\tdivisor = 604_800;\n\t\tunit = \"week\";\n\t} else if (absolute < 31_557_600) {\n\t\tdivisor = 2_629_800;\n\t\tunit = \"month\";\n\t} else {\n\t\tdivisor = 31_557_600;\n\t\tunit = \"year\";\n\t}\n\tconst formatter = new Intl.RelativeTimeFormat(options.locale ?? \"zh-CN\", {\n\t\tnumeric: options.numeric ?? \"auto\",\n\t\tstyle: options.style ?? \"long\",\n\t});\n\treturn formatter.format(Math.round(differenceSeconds / divisor), unit);\n}\n\n/** 日期选择器单日期快捷项。 */\nexport interface DateShortcut {\n\t/** 面向中文日期选择器的显示文本;调用方可直接用于菜单标签。 */\n\ttext: string;\n\t/**\n\t * 计算快捷项对应日期。\n\t * @returns 每次调用时基于当前本地时间创建的新 `Date`,调用方可安全修改。\n\t */\n\tvalue: () => Date;\n}\n\n/** 日期选择器范围快捷项。 */\nexport interface DateRangeShortcut {\n\t/** 面向中文日期范围选择器的显示文本;调用方可直接用于菜单标签。 */\n\ttext: string;\n\t/**\n\t * 计算快捷项对应的本地日期范围。\n\t * @returns 每次调用时创建的新元组;起点为 `00:00:00.000`,终点为 `23:59:59.999`。\n\t */\n\tvalue: () => [start: Date, end: Date];\n}\n\n/** 历史快捷项允许移动的本地日历单位。 */\ntype CalendarUnit = \"day\" | \"month\" | \"year\";\n\n/**\n * 移动本地日历字段。\n *\n * @remarks 直接使用 Date Setter,以保留历史快捷项在月底和闰年的溢出语义。\n * @param date - 会被原地修改的日期。\n * @param amount - 对目标字段增加的整数。\n * @param unit - 要移动的日历字段。\n */\nconst shiftCalendarFieldInPlace = (date: Date, amount: number, unit: CalendarUnit): void => {\n\tswitch (unit) {\n\t\tcase \"day\":\n\t\t\tdate.setDate(date.getDate() + amount);\n\t\t\tbreak;\n\t\tcase \"month\":\n\t\t\tdate.setMonth(date.getMonth() + amount);\n\t\t\tbreak;\n\t\tcase \"year\":\n\t\t\tdate.setFullYear(date.getFullYear() + amount);\n\t\t\tbreak;\n\t}\n};\n\n/**\n * 创建动态单日期快捷项。\n *\n * @param text - 日期选择器显示文本。\n * @param amount - 相对当前时间的移动量。\n * @param unit - 移动使用的日历单位。\n * @returns 每次执行 `value` 都重新读取当前时间的快捷项。\n */\nconst createDateShortcut = (text: string, amount: number, unit: CalendarUnit): DateShortcut => ({\n\ttext,\n\tvalue: (): Date => {\n\t\tconst date = new Date();\n\t\tshiftCalendarFieldInPlace(date, amount, unit);\n\t\tdate.setHours(0, 0, 0, 0);\n\t\treturn date;\n\t},\n});\n\n/**\n * 创建动态日期范围快捷项。\n *\n * @param text - 日期选择器显示文本。\n * @param amount - 范围边界相对当前时间的移动量。\n * @param unit - 移动使用的日历单位。\n * @param towardFuture - `true` 移动结束边界,`false` 移动开始边界。\n * @returns 每次求值都覆盖完整本地日边界的范围快捷项。\n */\nconst createRangeShortcut = (text: string, amount: number, unit: CalendarUnit, towardFuture: boolean): DateRangeShortcut => ({\n\ttext,\n\tvalue: (): [Date, Date] => {\n\t\tconst start = new Date();\n\t\tconst end = new Date();\n\t\tshiftCalendarFieldInPlace(towardFuture ? end : start, towardFuture ? amount : -amount, unit);\n\t\tstart.setHours(0, 0, 0, 0);\n\t\tend.setHours(23, 59, 59, 999);\n\t\treturn [start, end];\n\t},\n});\n\n/**\n * 把日期转换为固定中文相对时间文本。\n *\n * @remarks 10 位以内数字按 Unix 秒处理,其余数字按毫秒处理;月份与年份按本地日历月差计算。\n * @param value - Date、时间戳、可解析字符串或空值。\n * @returns 例如“3分钟前”“半年后”;非法或空输入返回空字符串。\n */\nexport function formatChineseRelativeTime(value: Date | number | string | null | undefined): string {\n\tif (value === null || value === undefined) return \"\";\n\tlet timestamp: number;\n\tif (typeof value === \"string\") timestamp = new Date(value).getTime();\n\telse if (typeof value === \"number\") timestamp = value.toString().length <= 10 ? value * 1000 : value;\n\telse timestamp = value.getTime();\n\tif (!Number.isFinite(timestamp)) return \"\";\n\n\tconst minute = 60_000;\n\tconst hour = minute * 60;\n\tconst day = hour * 24;\n\tconst currentTimestamp = Date.now();\n\tconst difference = currentTimestamp - timestamp;\n\tconst minuteDifference = Math.abs(difference) / minute;\n\tconst hourDifference = Math.abs(difference) / hour;\n\tconst dayDifference = Math.abs(difference) / day;\n\tconst currentDate = new Date(currentTimestamp);\n\tconst targetDate = new Date(timestamp);\n\tconst monthDifference = (currentDate.getFullYear() - targetDate.getFullYear()) * 12 + currentDate.getMonth() - targetDate.getMonth();\n\tconst suffix = difference < 0 ? \"后\" : \"前\";\n\tif (Math.abs(monthDifference) >= 12) return `${Math.floor(Math.abs(monthDifference) / 12)}年${suffix}`;\n\tif (Math.abs(monthDifference) >= 6) return `半年${suffix}`;\n\tif (Math.abs(monthDifference) >= 1) return `${Math.abs(monthDifference)}月${suffix}`;\n\tif (dayDifference >= 15) return `半月${suffix}`;\n\tif (dayDifference >= 7) return `${Math.floor(dayDifference / 7)}周${suffix}`;\n\tif (dayDifference >= 1) return `${Math.floor(dayDifference)}天${suffix}`;\n\tif (hourDifference >= 1) return `${Math.floor(hourDifference)}小时${suffix}`;\n\tif (minuteDifference >= 1) return `${Math.floor(minuteDifference)}分钟${suffix}`;\n\treturn \"刚刚\";\n}\n\n/**\n * 创建从今天到前后一个月日期的完整本地日范围。\n *\n * @param towardFuture - `true` 返回今天至一个月后,默认返回一个月前至今天。\n * @returns 每次调用新建的本地日首尾边界。\n */\nexport function createOneMonthRangeFromToday(towardFuture = false): [start: Date, end: Date] {\n\tconst start = new Date();\n\tconst end = new Date();\n\tshiftCalendarFieldInPlace(towardFuture ? end : start, towardFuture ? 1 : -1, \"month\");\n\tstart.setHours(0, 0, 0, 0);\n\tend.setHours(23, 59, 59, 999);\n\treturn [start, end];\n}\n\n/**\n * 判断日期是否晚于调用时的当前时刻。\n *\n * @param time - 待比较日期。\n * @returns 时间戳严格晚于 `Date.now()` 时返回 `true`。\n */\nexport function isDateAfterNow(time: Date): boolean {\n\treturn time.getTime() > Date.now();\n}\n\n/**\n * 根据浏览器本地小时返回固定中文问候语。\n *\n * @returns 与当前时段对应的中文欢迎文本。\n */\nexport function getLocalTimeGreeting(): string {\n\tconst hour = new Date().getHours();\n\tif (hour < 5) return \"夜深了,注意身体哦!\";\n\tif (hour < 9) return \"早上好!欢迎回来!\";\n\tif (hour < 12) return \"上午好!欢迎回来!\";\n\tif (hour < 14) return \"中午好!欢迎回来!\";\n\tif (hour < 18) return \"下午好!欢迎回来!\";\n\tif (hour < 24) return \"晚上好!欢迎回来!\";\n\treturn \"您好!欢迎回来!\";\n}\n\n/**\n * 创建面向过去或未来的常用完整日期范围快捷项。\n *\n * @param towardFuture - `true` 创建未来范围,默认创建历史范围。\n * @returns 每次求值都会重新读取当前时间的范围快捷项。\n */\nexport function createDateRangeShortcuts(towardFuture = false): DateRangeShortcut[] {\n\treturn towardFuture\n\t\t? [\n\t\t\t\tcreateRangeShortcut(\"后1天\", 1, \"day\", true),\n\t\t\t\tcreateRangeShortcut(\"后3天\", 3, \"day\", true),\n\t\t\t\tcreateRangeShortcut(\"后1周\", 7, \"day\", true),\n\t\t\t\tcreateRangeShortcut(\"后1月\", 1, \"month\", true),\n\t\t\t\tcreateRangeShortcut(\"后3月\", 3, \"month\", true),\n\t\t\t\tcreateRangeShortcut(\"后6月\", 6, \"month\", true),\n\t\t\t\tcreateRangeShortcut(\"后1年\", 1, \"year\", true),\n\t\t\t]\n\t\t: [\n\t\t\t\tcreateRangeShortcut(\"近1天\", 1, \"day\", false),\n\t\t\t\tcreateRangeShortcut(\"近3天\", 3, \"day\", false),\n\t\t\t\tcreateRangeShortcut(\"近1周\", 7, \"day\", false),\n\t\t\t\tcreateRangeShortcut(\"近1月\", 1, \"month\", false),\n\t\t\t\tcreateRangeShortcut(\"近3月\", 3, \"month\", false),\n\t\t\t\tcreateRangeShortcut(\"近6月\", 6, \"month\", false),\n\t\t\t\tcreateRangeShortcut(\"近1年\", 1, \"year\", false),\n\t\t\t];\n}\n\n/**\n * 创建面向过去或未来的常用单日期快捷项。\n *\n * @param towardFuture - `true` 创建未来日期,默认创建历史日期。\n * @returns 每次求值都会重新读取当前时间的单日期快捷项。\n */\nexport function createDateShortcuts(towardFuture = false): DateShortcut[] {\n\treturn towardFuture\n\t\t? [\n\t\t\t\tcreateDateShortcut(\"今天\", 0, \"day\"),\n\t\t\t\tcreateDateShortcut(\"明天\", 1, \"day\"),\n\t\t\t\tcreateDateShortcut(\"一周后\", 7, \"day\"),\n\t\t\t\tcreateDateShortcut(\"一月后\", 1, \"month\"),\n\t\t\t\tcreateDateShortcut(\"一年后\", 1, \"year\"),\n\t\t\t]\n\t\t: [\n\t\t\t\tcreateDateShortcut(\"今天\", 0, \"day\"),\n\t\t\t\tcreateDateShortcut(\"昨天\", -1, \"day\"),\n\t\t\t\tcreateDateShortcut(\"一周前\", -7, \"day\"),\n\t\t\t\tcreateDateShortcut(\"一月前\", -1, \"month\"),\n\t\t\t\tcreateDateShortcut(\"一年前\", -1, \"year\"),\n\t\t\t];\n}\n\n/**\n * 返回今天的本地零点。\n *\n * @returns 新建的 `00:00:00.000` Date。\n */\nexport function getStartOfToday(): Date {\n\treturn startOfDay(new Date());\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/date/index.ts"],"sourcesContent":["/** 可转换为日期的输入;数字始终按 Unix 毫秒时间戳处理。 */\nexport type DateInput = Date | number | string;\n\n/** {@link formatRelativeTime} 的语言与基准时间选项。 */\nexport interface RelativeTimeOptions {\n\t/** `Intl.RelativeTimeFormat` 使用的语言;默认固定为 `zh-CN`。 */\n\tlocale?: string | readonly string[];\n\t/** 比较基准,默认当前时间。 */\n\tnow?: DateInput;\n\t/** 是否允许“昨天”“明天”等文本;默认 `auto`。 */\n\tnumeric?: Intl.RelativeTimeFormatNumeric;\n\t/** 输出长度;默认 `long`。 */\n\tstyle?: Intl.RelativeTimeFormatStyle;\n}\n\n/**\n * 校验日期算术移动量。\n *\n * @param amount - 待校验的日、月或年移动量。\n * @throws `RangeError` 当值不是安全整数。\n */\nconst assertIntegerAmount = (amount: number): void => {\n\tif (!Number.isSafeInteger(amount)) throw new RangeError(\"`amount` 必须是安全整数。\");\n};\n\n/**\n * 转换并克隆有效日期。\n *\n * @remarks 数字不进行秒/毫秒猜测;字符串遵循运行时 `Date` 解析规则,跨平台代码应传带显式时区的完整 ISO 8601。\n * @param value - Date、Unix 毫秒时间戳或运行时可解析字符串。\n * @returns 与输入不共享可变状态的新 Date。\n * @throws 输入无效时抛出 `TypeError`。\n */\nexport function toDate(value: DateInput): Date {\n\tconst date = value instanceof Date ? new Date(value.getTime()) : new Date(value);\n\tif (!Number.isFinite(date.getTime())) {\n\t\tthrow new TypeError(\"该值不是有效日期。\");\n\t}\n\treturn date;\n}\n\n/**\n * 判断输入能否转换为有效日期。\n *\n * @param value - 任意待检查值。\n * @returns 仅 Date、数字或字符串且时间戳有限时返回 `true`。\n */\nexport function isValidDate(value: unknown): value is DateInput {\n\tif (!(value instanceof Date || typeof value === \"number\" || typeof value === \"string\")) return false;\n\treturn Number.isFinite(new Date(value).getTime());\n}\n\n/**\n * 返回输入日期所在本地时区日期的 `00:00:00.000`,不修改输入。\n *\n * @param value - 有效日期输入。\n * @returns 新建的本地日开始时间。\n * @throws 输入无效时抛出 `TypeError`。\n */\nexport function startOfDay(value: DateInput): Date {\n\tconst date = toDate(value);\n\tdate.setHours(0, 0, 0, 0);\n\treturn toDate(date);\n}\n\n/**\n * 返回输入日期所在本地时区日期的 `23:59:59.999`,不修改输入。\n *\n * @param value - 有效日期输入。\n * @returns 新建的本地日结束时间。\n * @throws 输入无效时抛出 `TypeError`。\n */\nexport function endOfDay(value: DateInput): Date {\n\tconst date = toDate(value);\n\tdate.setHours(23, 59, 59, 999);\n\treturn toDate(date);\n}\n\n/**\n * 按本地日历增加整数天,不修改输入。\n *\n * @param value - 基准日期。\n * @param amount - 可为负数的安全整数日数。\n * @returns 本地日历运算后的新 Date;夏令时变化可能使实际毫秒差不等于 24 小时。\n * @throws 日期无效时抛出 `TypeError`;数量或结果非法时抛出 `RangeError`。\n */\nexport function addDays(value: DateInput, amount: number): Date {\n\tassertIntegerAmount(amount);\n\tconst date = toDate(value);\n\tdate.setDate(date.getDate() + amount);\n\treturn toDate(date);\n}\n\n/**\n * 按本地日历增加整数月,并把不存在的日期夹到目标月末。\n *\n * @example 1 月 31 日增加一个月会落在 2 月最后一天。\n * @param value - 基准日期。\n * @param amount - 可为负数的安全整数月数。\n * @returns 月份运算后的新 Date。\n * @throws 日期无效时抛出 `TypeError`;数量或结果非法时抛出 `RangeError`。\n */\nexport function addMonths(value: DateInput, amount: number): Date {\n\tassertIntegerAmount(amount);\n\tconst date = toDate(value);\n\tconst originalDay = date.getDate();\n\tdate.setDate(1);\n\tdate.setMonth(date.getMonth() + amount);\n\tconst targetMonthEnd = new Date(date.getTime());\n\t// 避免 `new Date(year, ...)` 把 0 至 99 年解释为 1900 至 1999 年。\n\ttargetMonthEnd.setMonth(targetMonthEnd.getMonth() + 1, 0);\n\tconst lastDay = targetMonthEnd.getDate();\n\tdate.setDate(Math.min(originalDay, lastDay));\n\treturn toDate(date);\n}\n\n/**\n * 按本地日历增加整数年,并沿用 {@link addMonths} 的月末夹取规则。\n *\n * @param value - 基准日期。\n * @param amount - 可为负数的安全整数年数。\n * @returns 年份运算后的新 Date。\n * @throws 日期无效时抛出 `TypeError`;数量或结果非法时抛出 `RangeError`。\n */\nexport function addYears(value: DateInput, amount: number): Date {\n\tassertIntegerAmount(amount);\n\treturn addMonths(value, amount * 12);\n}\n\n/**\n * 判断两个输入是否属于同一本地日历日。\n *\n * @param left - 第一日期。\n * @param right - 第二日期。\n * @returns 本地年、月、日均相同时返回 `true`。\n * @throws 任一输入无效时抛出 `TypeError`。\n */\nexport function isSameDay(left: DateInput, right: DateInput): boolean {\n\tconst first = toDate(left);\n\tconst second = toDate(right);\n\treturn first.getFullYear() === second.getFullYear() && first.getMonth() === second.getMonth() && first.getDate() === second.getDate();\n}\n\n/**\n * 判断时间是否晚于基准时间。\n *\n * @param value - 待比较时间。\n * @param now - 比较基准,默认调用时的当前时刻。\n * @returns `value` 严格晚于基准时返回 `true`。\n * @throws 任一输入无效时抛出 `TypeError`。\n */\nexport function isFuture(value: DateInput, now: DateInput = Date.now()): boolean {\n\treturn toDate(value).getTime() > toDate(now).getTime();\n}\n\n/**\n * 返回指定基准所在本地日历日的完整闭区间。\n *\n * @param value - 日期基准,默认调用时当前日期。\n * @returns 新建的本地日开始和结束时间二元组。\n * @throws 输入无效时抛出 `TypeError`。\n */\nexport function getLocalDayBounds(value: DateInput = Date.now()): [start: Date, end: Date] {\n\treturn [startOfDay(value), endOfDay(value)];\n}\n\n/**\n * 判断日期是否位于包含首尾的时间区间。\n *\n * @param value - 待检查日期。\n * @param start - 包含的起点。\n * @param end - 包含的终点。\n * @returns 时间戳位于闭区间内时返回 `true`。\n * @throws 无效日期抛出 `TypeError`;首尾反向时抛出 `RangeError`。\n */\nexport function isWithinInterval(value: DateInput, start: DateInput, end: DateInput): boolean {\n\tconst timestamp = toDate(value).getTime();\n\tconst startTimestamp = toDate(start).getTime();\n\tconst endTimestamp = toDate(end).getTime();\n\tif (startTimestamp > endTimestamp) throw new RangeError(\"`start` 不能晚于 `end`。\");\n\treturn timestamp >= startTimestamp && timestamp <= endTimestamp;\n}\n\n/**\n * 使用 `Intl.RelativeTimeFormat` 生成人类可读相对时间。\n *\n * @remarks 秒、分钟、小时、天、周、月和年按固定时长阈值选择;这适合展示,不适合计费或日历运算。\n * @param value - 目标时间。\n * @param options - 语言、样式与比较基准。\n * @returns 由 `Intl.RelativeTimeFormat` 生成的本地化文本。\n * @throws 日期无效时抛出 `TypeError`;Locale 或 Intl 选项非法时抛出 `RangeError`。\n */\nexport function formatRelativeTime(value: DateInput, options: RelativeTimeOptions = {}): string {\n\tconst differenceSeconds = (toDate(value).getTime() - toDate(options.now ?? Date.now()).getTime()) / 1000;\n\tconst absolute = Math.abs(differenceSeconds);\n\tlet divisor: number;\n\tlet unit: Intl.RelativeTimeFormatUnit;\n\tif (absolute < 60) {\n\t\tdivisor = 1;\n\t\tunit = \"second\";\n\t} else if (absolute < 3_600) {\n\t\tdivisor = 60;\n\t\tunit = \"minute\";\n\t} else if (absolute < 86_400) {\n\t\tdivisor = 3_600;\n\t\tunit = \"hour\";\n\t} else if (absolute < 604_800) {\n\t\tdivisor = 86_400;\n\t\tunit = \"day\";\n\t} else if (absolute < 2_629_800) {\n\t\tdivisor = 604_800;\n\t\tunit = \"week\";\n\t} else if (absolute < 31_557_600) {\n\t\tdivisor = 2_629_800;\n\t\tunit = \"month\";\n\t} else {\n\t\tdivisor = 31_557_600;\n\t\tunit = \"year\";\n\t}\n\tconst formatter = new Intl.RelativeTimeFormat(options.locale ?? \"zh-CN\", {\n\t\tnumeric: options.numeric ?? \"auto\",\n\t\tstyle: options.style ?? \"long\",\n\t});\n\treturn formatter.format(Math.round(differenceSeconds / divisor), unit);\n}\n\n/** 日期选择器单日期快捷项。 */\nexport interface DateShortcut {\n\t/** 面向中文日期选择器的显示文本;调用方可直接用于菜单标签。 */\n\ttext: string;\n\t/**\n\t * 计算快捷项对应日期。\n\t * @returns 每次调用时基于当前本地时间创建的新 `Date`,调用方可安全修改。\n\t */\n\tvalue: () => Date;\n}\n\n/** 日期选择器范围快捷项。 */\nexport interface DateRangeShortcut {\n\t/** 面向中文日期范围选择器的显示文本;调用方可直接用于菜单标签。 */\n\ttext: string;\n\t/**\n\t * 计算快捷项对应的本地日期范围。\n\t * @returns 每次调用时创建的新元组;起点为 `00:00:00.000`,终点为 `23:59:59.999`。\n\t */\n\tvalue: () => [start: Date, end: Date];\n}\n\n/** 历史快捷项允许移动的本地日历单位。 */\ntype CalendarUnit = \"day\" | \"month\" | \"year\";\n\n/**\n * 移动本地日历字段。\n *\n * @remarks 直接使用 Date Setter,以保留历史快捷项在月底和闰年的溢出语义。\n * @param date - 会被原地修改的日期。\n * @param amount - 对目标字段增加的整数。\n * @param unit - 要移动的日历字段。\n */\nconst shiftCalendarFieldInPlace = (date: Date, amount: number, unit: CalendarUnit): void => {\n\tswitch (unit) {\n\t\tcase \"day\":\n\t\t\tdate.setDate(date.getDate() + amount);\n\t\t\tbreak;\n\t\tcase \"month\":\n\t\t\tdate.setMonth(date.getMonth() + amount);\n\t\t\tbreak;\n\t\tcase \"year\":\n\t\t\tdate.setFullYear(date.getFullYear() + amount);\n\t\t\tbreak;\n\t}\n};\n\n/**\n * 创建动态单日期快捷项。\n *\n * @param text - 日期选择器显示文本。\n * @param amount - 相对当前时间的移动量。\n * @param unit - 移动使用的日历单位。\n * @returns 每次执行 `value` 都重新读取当前时间的快捷项。\n */\nconst createDateShortcut = (text: string, amount: number, unit: CalendarUnit): DateShortcut => ({\n\ttext,\n\tvalue: (): Date => {\n\t\tconst date = new Date();\n\t\tshiftCalendarFieldInPlace(date, amount, unit);\n\t\tdate.setHours(0, 0, 0, 0);\n\t\treturn date;\n\t},\n});\n\n/**\n * 创建动态日期范围快捷项。\n *\n * @param text - 日期选择器显示文本。\n * @param amount - 范围边界相对当前时间的移动量。\n * @param unit - 移动使用的日历单位。\n * @param towardFuture - `true` 移动结束边界,`false` 移动开始边界。\n * @returns 每次求值都覆盖完整本地日边界的范围快捷项。\n */\nconst createRangeShortcut = (text: string, amount: number, unit: CalendarUnit, towardFuture: boolean): DateRangeShortcut => ({\n\ttext,\n\tvalue: (): [Date, Date] => {\n\t\tconst start = new Date();\n\t\tconst end = new Date();\n\t\tshiftCalendarFieldInPlace(towardFuture ? end : start, towardFuture ? amount : -amount, unit);\n\t\tstart.setHours(0, 0, 0, 0);\n\t\tend.setHours(23, 59, 59, 999);\n\t\treturn [start, end];\n\t},\n});\n\n/**\n * 把日期转换为固定中文相对时间文本。\n *\n * @remarks 10 位以内数字按 Unix 秒处理,其余数字按毫秒处理;月份与年份按本地日历月差计算。\n * @param value - Date、时间戳、可解析字符串或空值。\n * @returns 例如“3分钟前”“半年后”;非法或空输入返回空字符串。\n */\nexport function formatChineseRelativeTime(value: Date | number | string | null | undefined): string {\n\tif (value === null || value === undefined) return \"\";\n\tlet timestamp: number;\n\tif (typeof value === \"string\") timestamp = new Date(value).getTime();\n\telse if (typeof value === \"number\") timestamp = value.toString().length <= 10 ? value * 1000 : value;\n\telse timestamp = value.getTime();\n\tif (!Number.isFinite(timestamp)) return \"\";\n\n\tconst minute = 60_000;\n\tconst hour = minute * 60;\n\tconst day = hour * 24;\n\tconst currentTimestamp = Date.now();\n\tconst difference = currentTimestamp - timestamp;\n\tconst minuteDifference = Math.abs(difference) / minute;\n\tconst hourDifference = Math.abs(difference) / hour;\n\tconst dayDifference = Math.abs(difference) / day;\n\tconst currentDate = new Date(currentTimestamp);\n\tconst targetDate = new Date(timestamp);\n\tconst monthDifference = (currentDate.getFullYear() - targetDate.getFullYear()) * 12 + currentDate.getMonth() - targetDate.getMonth();\n\tconst suffix = difference < 0 ? \"后\" : \"前\";\n\tif (Math.abs(monthDifference) >= 12) return `${Math.floor(Math.abs(monthDifference) / 12)}年${suffix}`;\n\tif (Math.abs(monthDifference) >= 6) return `半年${suffix}`;\n\tif (Math.abs(monthDifference) >= 1) return `${Math.abs(monthDifference)}月${suffix}`;\n\tif (dayDifference >= 15) return `半月${suffix}`;\n\tif (dayDifference >= 7) return `${Math.floor(dayDifference / 7)}周${suffix}`;\n\tif (dayDifference >= 1) return `${Math.floor(dayDifference)}天${suffix}`;\n\tif (hourDifference >= 1) return `${Math.floor(hourDifference)}小时${suffix}`;\n\tif (minuteDifference >= 1) return `${Math.floor(minuteDifference)}分钟${suffix}`;\n\treturn \"刚刚\";\n}\n\n/**\n * 创建从今天到前后一个月日期的完整本地日范围。\n *\n * @param towardFuture - `true` 返回今天至一个月后,默认返回一个月前至今天。\n * @returns 每次调用新建的本地日首尾边界。\n */\nexport function createOneMonthRangeFromToday(towardFuture = false): [start: Date, end: Date] {\n\tconst start = new Date();\n\tconst end = new Date();\n\tshiftCalendarFieldInPlace(towardFuture ? end : start, towardFuture ? 1 : -1, \"month\");\n\tstart.setHours(0, 0, 0, 0);\n\tend.setHours(23, 59, 59, 999);\n\treturn [start, end];\n}\n\n/**\n * 判断日期是否晚于调用时的当前时刻。\n *\n * @param time - 待比较日期。\n * @returns 时间戳严格晚于 `Date.now()` 时返回 `true`。\n */\nexport function isDateAfterNow(time: Date): boolean {\n\treturn time.getTime() > Date.now();\n}\n\n/**\n * 根据浏览器本地小时返回固定中文问候语。\n *\n * @returns 与当前时段对应的中文欢迎文本。\n */\nexport function getLocalTimeGreeting(): string {\n\tconst hour = new Date().getHours();\n\tif (hour < 5) return \"夜深了,注意身体哦!\";\n\tif (hour < 9) return \"早上好!欢迎回来!\";\n\tif (hour < 12) return \"上午好!欢迎回来!\";\n\tif (hour < 14) return \"中午好!欢迎回来!\";\n\tif (hour < 18) return \"下午好!欢迎回来!\";\n\tif (hour < 24) return \"晚上好!欢迎回来!\";\n\treturn \"您好!欢迎回来!\";\n}\n\n/**\n * 创建面向过去或未来的常用完整日期范围快捷项。\n *\n * @param towardFuture - `true` 创建未来范围,默认创建历史范围。\n * @returns 每次求值都会重新读取当前时间的范围快捷项。\n */\nexport function createDateRangeShortcuts(towardFuture = false): DateRangeShortcut[] {\n\treturn towardFuture\n\t\t? [\n\t\t\t\tcreateRangeShortcut(\"后1天\", 1, \"day\", true),\n\t\t\t\tcreateRangeShortcut(\"后3天\", 3, \"day\", true),\n\t\t\t\tcreateRangeShortcut(\"后1周\", 7, \"day\", true),\n\t\t\t\tcreateRangeShortcut(\"后1月\", 1, \"month\", true),\n\t\t\t\tcreateRangeShortcut(\"后3月\", 3, \"month\", true),\n\t\t\t\tcreateRangeShortcut(\"后6月\", 6, \"month\", true),\n\t\t\t\tcreateRangeShortcut(\"后1年\", 1, \"year\", true),\n\t\t\t]\n\t\t: [\n\t\t\t\tcreateRangeShortcut(\"近1天\", 1, \"day\", false),\n\t\t\t\tcreateRangeShortcut(\"近3天\", 3, \"day\", false),\n\t\t\t\tcreateRangeShortcut(\"近1周\", 7, \"day\", false),\n\t\t\t\tcreateRangeShortcut(\"近1月\", 1, \"month\", false),\n\t\t\t\tcreateRangeShortcut(\"近3月\", 3, \"month\", false),\n\t\t\t\tcreateRangeShortcut(\"近6月\", 6, \"month\", false),\n\t\t\t\tcreateRangeShortcut(\"近1年\", 1, \"year\", false),\n\t\t\t];\n}\n\n/**\n * 创建面向过去或未来的常用单日期快捷项。\n *\n * @param towardFuture - `true` 创建未来日期,默认创建历史日期。\n * @returns 每次求值都会重新读取当前时间的单日期快捷项。\n */\nexport function createDateShortcuts(towardFuture = false): DateShortcut[] {\n\treturn towardFuture\n\t\t? [\n\t\t\t\tcreateDateShortcut(\"今天\", 0, \"day\"),\n\t\t\t\tcreateDateShortcut(\"明天\", 1, \"day\"),\n\t\t\t\tcreateDateShortcut(\"一周后\", 7, \"day\"),\n\t\t\t\tcreateDateShortcut(\"一月后\", 1, \"month\"),\n\t\t\t\tcreateDateShortcut(\"一年后\", 1, \"year\"),\n\t\t\t]\n\t\t: [\n\t\t\t\tcreateDateShortcut(\"今天\", 0, \"day\"),\n\t\t\t\tcreateDateShortcut(\"昨天\", -1, \"day\"),\n\t\t\t\tcreateDateShortcut(\"一周前\", -7, \"day\"),\n\t\t\t\tcreateDateShortcut(\"一月前\", -1, \"month\"),\n\t\t\t\tcreateDateShortcut(\"一年前\", -1, \"year\"),\n\t\t\t];\n}\n\n/**\n * 返回今天的本地零点。\n *\n * @returns 新建的 `00:00:00.000` Date。\n */\nexport function getStartOfToday(): Date {\n\treturn startOfDay(new Date());\n}\n"],"mappings":"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"}
@@ -37,9 +37,9 @@ const toCssPropertyName = (key) => {
37
37
  */
38
38
  function addCssUnit(value, unit = "px") {
39
39
  if (value === null || value === void 0 || value === "") return "";
40
- if (unit.length === 0) throw new RangeError("unit cannot be empty.");
40
+ if (unit.length === 0) throw new RangeError("`unit` 不能为空。");
41
41
  if (typeof value === "number") {
42
- if (!Number.isFinite(value)) throw new RangeError("value must be finite.");
42
+ if (!Number.isFinite(value)) throw new RangeError("`value` 必须是有限数。");
43
43
  return value === 0 ? "0" : `${value}${unit}`;
44
44
  }
45
45
  const trimmed = value.trim();
@@ -64,7 +64,7 @@ function serializeStyle(styles) {
64
64
  return value.length === 0 ? "" : value.endsWith(";") ? value : `${value};`;
65
65
  }
66
66
  return Object.entries(styles).filter(([, value]) => value !== null && value !== void 0 && value !== "").map(([key, value]) => {
67
- if (typeof value === "number" && !Number.isFinite(value)) throw new RangeError(`Style property "${key}" must be finite.`);
67
+ if (typeof value === "number" && !Number.isFinite(value)) throw new RangeError(`样式属性“${key}”必须是有限数。`);
68
68
  return `${toCssPropertyName(key)}:${String(value)};`;
69
69
  }).join(" ");
70
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"style.mjs","names":[],"sources":["../../src/dom/style.ts"],"sourcesContent":["/** 可序列化为内联 CSS 的单个值。 */\nexport type StyleValue = number | string | null | undefined;\n\n/** camelCase、kebab-case 或 CSS 自定义属性组成的只读样式对象。 */\nexport type StyleObject = Readonly<Record<string, StyleValue>>;\n\n/** 字符串、样式对象、嵌套数组或空值。 */\nexport type StyleInput = string | StyleObject | readonly StyleInput[] | null | undefined;\n\n/**\n * 判断 StyleInput 是否为递归样式数组。\n *\n * @param value - 待缩小的样式输入。\n * @returns 是只读样式数组时返回 `true`。\n */\nconst isStyleArray = (value: StyleInput): value is readonly StyleInput[] => Array.isArray(value);\n\n/**\n * 判断文本是否可按十进制数值追加 CSS 单位。\n *\n * @param value - 已去除外围空白的文本。\n * @returns 有限十进制数值返回 `true`;二、八、十六进制前缀返回 `false`。\n */\nconst isNumericString = (value: string): boolean => {\n\tif (value.length === 0 || !Number.isFinite(Number(value))) return false;\n\tconst unsigned = value.startsWith(\"+\") || value.startsWith(\"-\") ? value.slice(1) : value;\n\treturn !/^0[box]/iu.test(unsigned);\n};\n\n/**\n * 把 JavaScript 样式属性名转换为 CSS 属性名。\n *\n * @param key - camelCase、kebab-case 或 CSS 自定义属性名。\n * @returns kebab-case 属性名;`--` 自定义属性保持原样。\n */\nconst toCssPropertyName = (key: string): string => {\n\tif (key.startsWith(\"--\")) return key;\n\tconst normalized = key.startsWith(\"ms\") ? `-${key}` : key;\n\treturn normalized.replace(/([A-Z])/gu, \"-$1\").toLowerCase();\n};\n\n/**\n * 为数值或纯数字字符串添加 CSS 单位。\n *\n * @param value - 数字、数字字符串或已有单位的 CSS 值;空值返回空字符串。\n * @param unit - 非零数字使用的单位,默认 `px`。\n * @returns 零统一返回 `\"0\"`;非数字字符串保持原样。\n * @throws `RangeError` 当数字非有限或单位为空。\n */\nexport function addCssUnit(value?: string | number | null, unit = \"px\"): string {\n\tif (value === null || value === undefined || value === \"\") return \"\";\n\tif (unit.length === 0) throw new RangeError(\"unit cannot be empty.\");\n\tif (typeof value === \"number\") {\n\t\tif (!Number.isFinite(value)) throw new RangeError(\"value must be finite.\");\n\t\treturn value === 0 ? \"0\" : `${value}${unit}`;\n\t}\n\tconst trimmed = value.trim();\n\tif (!isNumericString(trimmed)) return value;\n\treturn Number(trimmed) === 0 ? \"0\" : `${trimmed}${unit}`;\n}\n\n/**\n * 将样式字符串、对象或嵌套数组序列化为内联 CSS。\n *\n * @remarks 本函数只负责结构转换,不是 CSS 安全清洗器。不可信值必须由调用方按照\n * 实际渲染上下文验证,尤其不能允许用户控制属性名、`url()` 或自定义属性内容。\n * 数字不会自动附加单位;需要长度单位时应先调用 {@link addCssUnit}。\n * @param styles - 可嵌套样式输入;后出现的声明由 CSS 层叠规则覆盖先前声明。\n * @returns 以分号结束、以空格分隔的 CSS 声明字符串。\n * @throws `RangeError` 当对象中包含 `NaN` 或无穷数字。\n */\nexport function serializeStyle(styles: StyleInput): string {\n\tif (styles === null || styles === undefined || styles === \"\") return \"\";\n\tif (isStyleArray(styles)) {\n\t\treturn styles\n\t\t\t.map((item) => serializeStyle(item))\n\t\t\t.filter((item) => item.length > 0)\n\t\t\t.join(\" \");\n\t}\n\tif (typeof styles === \"string\") {\n\t\tconst value = styles.trim();\n\t\treturn value.length === 0 ? \"\" : value.endsWith(\";\") ? value : `${value};`;\n\t}\n\n\treturn Object.entries(styles)\n\t\t.filter(([, value]) => value !== null && value !== undefined && value !== \"\")\n\t\t.map(([key, value]) => {\n\t\t\tif (typeof value === \"number\" && !Number.isFinite(value)) throw new RangeError(`Style property \"${key}\" must be finite.`);\n\t\t\treturn `${toCssPropertyName(key)}:${String(value)};`;\n\t\t})\n\t\t.join(\" \");\n}\n"],"mappings":";;;;;;;AAeA,MAAM,gBAAgB,UAAsD,MAAM,QAAQ,KAAK;;;;;;;AAQ/F,MAAM,mBAAmB,UAA2B;CACnD,IAAI,MAAM,WAAW,KAAK,CAAC,OAAO,SAAS,OAAO,KAAK,CAAC,GAAG,OAAO;CAClE,MAAM,WAAW,MAAM,WAAW,GAAG,KAAK,MAAM,WAAW,GAAG,IAAI,MAAM,MAAM,CAAC,IAAI;CACnF,OAAO,CAAC,YAAY,KAAK,QAAQ;AAClC;;;;;;;AAQA,MAAM,qBAAqB,QAAwB;CAClD,IAAI,IAAI,WAAW,IAAI,GAAG,OAAO;CAEjC,QADmB,IAAI,WAAW,IAAI,IAAI,IAAI,QAAQ,IAAA,CACpC,QAAQ,aAAa,KAAK,CAAC,CAAC,YAAY;AAC3D;;;;;;;;;AAUA,SAAgB,WAAW,OAAgC,OAAO,MAAc;CAC/E,IAAI,UAAU,QAAQ,UAAU,KAAA,KAAa,UAAU,IAAI,OAAO;CAClE,IAAI,KAAK,WAAW,GAAG,MAAM,IAAI,WAAW,uBAAuB;CACnE,IAAI,OAAO,UAAU,UAAU;EAC9B,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG,MAAM,IAAI,WAAW,uBAAuB;EACzE,OAAO,UAAU,IAAI,MAAM,GAAG,QAAQ;CACvC;CACA,MAAM,UAAU,MAAM,KAAK;CAC3B,IAAI,CAAC,gBAAgB,OAAO,GAAG,OAAO;CACtC,OAAO,OAAO,OAAO,MAAM,IAAI,MAAM,GAAG,UAAU;AACnD;;;;;;;;;;;AAYA,SAAgB,eAAe,QAA4B;CAC1D,IAAI,WAAW,QAAQ,WAAW,KAAA,KAAa,WAAW,IAAI,OAAO;CACrE,IAAI,aAAa,MAAM,GACtB,OAAO,OACL,KAAK,SAAS,eAAe,IAAI,CAAC,CAAC,CACnC,QAAQ,SAAS,KAAK,SAAS,CAAC,CAAC,CACjC,KAAK,GAAG;CAEX,IAAI,OAAO,WAAW,UAAU;EAC/B,MAAM,QAAQ,OAAO,KAAK;EAC1B,OAAO,MAAM,WAAW,IAAI,KAAK,MAAM,SAAS,GAAG,IAAI,QAAQ,GAAG,MAAM;CACzE;CAEA,OAAO,OAAO,QAAQ,MAAM,CAAC,CAC3B,QAAQ,GAAG,WAAW,UAAU,QAAQ,UAAU,KAAA,KAAa,UAAU,EAAE,CAAC,CAC5E,KAAK,CAAC,KAAK,WAAW;EACtB,IAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,GAAG,MAAM,IAAI,WAAW,mBAAmB,IAAI,kBAAkB;EACxH,OAAO,GAAG,kBAAkB,GAAG,EAAE,GAAG,OAAO,KAAK,EAAE;CACnD,CAAC,CAAC,CACD,KAAK,GAAG;AACX"}
1
+ {"version":3,"file":"style.mjs","names":[],"sources":["../../src/dom/style.ts"],"sourcesContent":["/** 可序列化为内联 CSS 的单个值。 */\nexport type StyleValue = number | string | null | undefined;\n\n/** camelCase、kebab-case 或 CSS 自定义属性组成的只读样式对象。 */\nexport type StyleObject = Readonly<Record<string, StyleValue>>;\n\n/** 字符串、样式对象、嵌套数组或空值。 */\nexport type StyleInput = string | StyleObject | readonly StyleInput[] | null | undefined;\n\n/**\n * 判断 StyleInput 是否为递归样式数组。\n *\n * @param value - 待缩小的样式输入。\n * @returns 是只读样式数组时返回 `true`。\n */\nconst isStyleArray = (value: StyleInput): value is readonly StyleInput[] => Array.isArray(value);\n\n/**\n * 判断文本是否可按十进制数值追加 CSS 单位。\n *\n * @param value - 已去除外围空白的文本。\n * @returns 有限十进制数值返回 `true`;二、八、十六进制前缀返回 `false`。\n */\nconst isNumericString = (value: string): boolean => {\n\tif (value.length === 0 || !Number.isFinite(Number(value))) return false;\n\tconst unsigned = value.startsWith(\"+\") || value.startsWith(\"-\") ? value.slice(1) : value;\n\treturn !/^0[box]/iu.test(unsigned);\n};\n\n/**\n * 把 JavaScript 样式属性名转换为 CSS 属性名。\n *\n * @param key - camelCase、kebab-case 或 CSS 自定义属性名。\n * @returns kebab-case 属性名;`--` 自定义属性保持原样。\n */\nconst toCssPropertyName = (key: string): string => {\n\tif (key.startsWith(\"--\")) return key;\n\tconst normalized = key.startsWith(\"ms\") ? `-${key}` : key;\n\treturn normalized.replace(/([A-Z])/gu, \"-$1\").toLowerCase();\n};\n\n/**\n * 为数值或纯数字字符串添加 CSS 单位。\n *\n * @param value - 数字、数字字符串或已有单位的 CSS 值;空值返回空字符串。\n * @param unit - 非零数字使用的单位,默认 `px`。\n * @returns 零统一返回 `\"0\"`;非数字字符串保持原样。\n * @throws `RangeError` 当数字非有限或单位为空。\n */\nexport function addCssUnit(value?: string | number | null, unit = \"px\"): string {\n\tif (value === null || value === undefined || value === \"\") return \"\";\n\tif (unit.length === 0) throw new RangeError(\"`unit` 不能为空。\");\n\tif (typeof value === \"number\") {\n\t\tif (!Number.isFinite(value)) throw new RangeError(\"`value` 必须是有限数。\");\n\t\treturn value === 0 ? \"0\" : `${value}${unit}`;\n\t}\n\tconst trimmed = value.trim();\n\tif (!isNumericString(trimmed)) return value;\n\treturn Number(trimmed) === 0 ? \"0\" : `${trimmed}${unit}`;\n}\n\n/**\n * 将样式字符串、对象或嵌套数组序列化为内联 CSS。\n *\n * @remarks 本函数只负责结构转换,不是 CSS 安全清洗器。不可信值必须由调用方按照\n * 实际渲染上下文验证,尤其不能允许用户控制属性名、`url()` 或自定义属性内容。\n * 数字不会自动附加单位;需要长度单位时应先调用 {@link addCssUnit}。\n * @param styles - 可嵌套样式输入;后出现的声明由 CSS 层叠规则覆盖先前声明。\n * @returns 以分号结束、以空格分隔的 CSS 声明字符串。\n * @throws `RangeError` 当对象中包含 `NaN` 或无穷数字。\n */\nexport function serializeStyle(styles: StyleInput): string {\n\tif (styles === null || styles === undefined || styles === \"\") return \"\";\n\tif (isStyleArray(styles)) {\n\t\treturn styles\n\t\t\t.map((item) => serializeStyle(item))\n\t\t\t.filter((item) => item.length > 0)\n\t\t\t.join(\" \");\n\t}\n\tif (typeof styles === \"string\") {\n\t\tconst value = styles.trim();\n\t\treturn value.length === 0 ? \"\" : value.endsWith(\";\") ? value : `${value};`;\n\t}\n\n\treturn Object.entries(styles)\n\t\t.filter(([, value]) => value !== null && value !== undefined && value !== \"\")\n\t\t.map(([key, value]) => {\n\t\t\tif (typeof value === \"number\" && !Number.isFinite(value)) throw new RangeError(`样式属性“${key}”必须是有限数。`);\n\t\t\treturn `${toCssPropertyName(key)}:${String(value)};`;\n\t\t})\n\t\t.join(\" \");\n}\n"],"mappings":";;;;;;;AAeA,MAAM,gBAAgB,UAAsD,MAAM,QAAQ,KAAK;;;;;;;AAQ/F,MAAM,mBAAmB,UAA2B;CACnD,IAAI,MAAM,WAAW,KAAK,CAAC,OAAO,SAAS,OAAO,KAAK,CAAC,GAAG,OAAO;CAClE,MAAM,WAAW,MAAM,WAAW,GAAG,KAAK,MAAM,WAAW,GAAG,IAAI,MAAM,MAAM,CAAC,IAAI;CACnF,OAAO,CAAC,YAAY,KAAK,QAAQ;AAClC;;;;;;;AAQA,MAAM,qBAAqB,QAAwB;CAClD,IAAI,IAAI,WAAW,IAAI,GAAG,OAAO;CAEjC,QADmB,IAAI,WAAW,IAAI,IAAI,IAAI,QAAQ,IAAA,CACpC,QAAQ,aAAa,KAAK,CAAC,CAAC,YAAY;AAC3D;;;;;;;;;AAUA,SAAgB,WAAW,OAAgC,OAAO,MAAc;CAC/E,IAAI,UAAU,QAAQ,UAAU,KAAA,KAAa,UAAU,IAAI,OAAO;CAClE,IAAI,KAAK,WAAW,GAAG,MAAM,IAAI,WAAW,cAAc;CAC1D,IAAI,OAAO,UAAU,UAAU;EAC9B,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG,MAAM,IAAI,WAAW,iBAAiB;EACnE,OAAO,UAAU,IAAI,MAAM,GAAG,QAAQ;CACvC;CACA,MAAM,UAAU,MAAM,KAAK;CAC3B,IAAI,CAAC,gBAAgB,OAAO,GAAG,OAAO;CACtC,OAAO,OAAO,OAAO,MAAM,IAAI,MAAM,GAAG,UAAU;AACnD;;;;;;;;;;;AAYA,SAAgB,eAAe,QAA4B;CAC1D,IAAI,WAAW,QAAQ,WAAW,KAAA,KAAa,WAAW,IAAI,OAAO;CACrE,IAAI,aAAa,MAAM,GACtB,OAAO,OACL,KAAK,SAAS,eAAe,IAAI,CAAC,CAAC,CACnC,QAAQ,SAAS,KAAK,SAAS,CAAC,CAAC,CACjC,KAAK,GAAG;CAEX,IAAI,OAAO,WAAW,UAAU;EAC/B,MAAM,QAAQ,OAAO,KAAK;EAC1B,OAAO,MAAM,WAAW,IAAI,KAAK,MAAM,SAAS,GAAG,IAAI,QAAQ,GAAG,MAAM;CACzE;CAEA,OAAO,OAAO,QAAQ,MAAM,CAAC,CAC3B,QAAQ,GAAG,WAAW,UAAU,QAAQ,UAAU,KAAA,KAAa,UAAU,EAAE,CAAC,CAC5E,KAAK,CAAC,KAAK,WAAW;EACtB,IAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,GAAG,MAAM,IAAI,WAAW,QAAQ,IAAI,SAAS;EACpG,OAAO,GAAG,kBAAkB,GAAG,EAAE,GAAG,OAAO,KAAK,EAAE;CACnD,CAAC,CAAC,CACD,KAAK,GAAG;AACX"}
@@ -9,7 +9,7 @@ const defaultInstallationIdentityStorageKey = "identity:installation-id";
9
9
  * @throws `TypeError` 当值不是 RFC 4122 UUID v4。
10
10
  */
11
11
  const assertInstallationId = (value) => {
12
- if (!isUuidV4(value)) throw new TypeError("Installation Identity values must be RFC 4122 version 4 UUIDs.");
12
+ if (!isUuidV4(value)) throw new TypeError("安装标识值必须是符合 RFC 4122 UUID v4。");
13
13
  };
14
14
  let activeStorageKey;
15
15
  /**
@@ -33,12 +33,12 @@ const getInstallationIdentityStorageKey = () => {
33
33
  */
34
34
  function configureInstallationIdentity(options = {}) {
35
35
  const cacheKey = options.cacheKey ?? defaultInstallationIdentityStorageKey;
36
- if (typeof cacheKey !== "string" || cacheKey.length === 0 || cacheKey.trim() !== cacheKey) throw new TypeError("Installation Identity cacheKey must be a non-empty string without surrounding whitespace.");
36
+ if (typeof cacheKey !== "string" || cacheKey.length === 0 || cacheKey.trim() !== cacheKey) throw new TypeError("安装标识的 `cacheKey` 必须是无外围空白的非空字符串。");
37
37
  if (activeStorageKey === void 0) {
38
38
  activeStorageKey = cacheKey;
39
39
  return;
40
40
  }
41
- if (activeStorageKey !== cacheKey) throw new Error("Installation Identity has already been configured with a different cacheKey.");
41
+ if (activeStorageKey !== cacheKey) throw new Error("安装标识已使用其他 `cacheKey` 完成配置。");
42
42
  }
43
43
  /**
44
44
  * 全局安装标识状态。
@@ -65,7 +65,7 @@ const installationIdentity = {
65
65
  read() {
66
66
  const stored = Local.get(installationIdentity.cacheKey);
67
67
  if (stored === void 0) return void 0;
68
- if (typeof stored !== "string") throw new TypeError("The stored identity is corrupted.");
68
+ if (typeof stored !== "string") throw new TypeError("存储的安装标识已损坏。");
69
69
  assertInstallationId(stored);
70
70
  return stored;
71
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/identity/index.ts"],"sourcesContent":["import { Local } from \"../storage/index\";\nimport { generateUuidV4, isUuidV4 } from \"../string/index\";\n\nconst defaultInstallationIdentityStorageKey = \"identity:installation-id\";\n\n/** {@link configureInstallationIdentity} 接收的安装标识配置。 */\nexport interface InstallationIdentityConfiguration {\n\t/**\n\t * `Local` 中使用的业务键,默认 `identity:installation-id`。\n\t *\n\t * @remarks 必须是无外围空白的非空字符串,并在首次访问 Identity API 前配置;物理键仍会叠加 Storage 全局前缀。\n\t */\n\tcacheKey?: string;\n}\n\n/** 浏览器或 uni-app 当前安装实例标识。 */\nexport interface InstallationIdentity {\n\t/**\n\t * `Local` 中使用的业务键。\n\t *\n\t * @remarks 首次读取会锁定默认配置;之后不能再切换为其他业务键。\n\t */\n\treadonly cacheKey: string;\n\t/**\n\t * 当前内存中的安装标识;尚未取得标识或调用 {@link InstallationIdentity.clear clear} 后为空字符串。\n\t *\n\t * @remarks 直接赋值只改变内存,不会校验或持久化;通常应调用 {@link InstallationIdentity.getOrCreate getOrCreate}。\n\t */\n\tdeviceId: string;\n\t/**\n\t * 删除当前 `cacheKey` 对应的持久化标识,并把 `deviceId` 重置为空字符串。\n\t *\n\t * @throws `Error` 当当前平台存储不可用。\n\t */\n\tclear: () => void;\n\t/**\n\t * 按“显式参数、当前内存、持久化值、随机生成值”的优先级取得安装标识。\n\t *\n\t * @param installationId - 可选 UUID v4;传入时覆盖内存值和当前持久化值。\n\t * @returns 已校验并同时写入 `deviceId` 与 `Local` 的 UUID v4。\n\t * @throws `TypeError` 当显式参数、内存值或持久化值不是 UUID v4。\n\t * @throws `Error` 当当前平台存储不可用。\n\t */\n\tgetOrCreate: (installationId?: string) => string;\n\t/**\n\t * 读取并校验当前 `cacheKey` 对应的持久化标识。\n\t *\n\t * @remarks 该方法不修改 `deviceId`,只负责读取;过期记录由 Storage 视为缺失。\n\t * @returns 已持久化的 UUID v4;键缺失或过期时返回 `undefined`。\n\t * @throws `TypeError` 当持久化值不是字符串或不是 UUID v4。\n\t * @throws `Error` 当当前平台存储不可用。\n\t */\n\tread: () => string | undefined;\n}\n\n/**\n * 校验安装标识格式。\n *\n * @param value - 外部传入或从 Storage 读取的候选值。\n * @throws `TypeError` 当值不是 RFC 4122 UUID v4。\n */\nconst assertInstallationId = (value: string): void => {\n\tif (!isUuidV4(value)) throw new TypeError(\"Installation Identity values must be RFC 4122 version 4 UUIDs.\");\n};\n\nlet activeStorageKey: string | undefined;\n\n/**\n * 取得已经锁定的安装标识业务键。\n *\n * @remarks 首次读取会锁定默认值,防止标识已经写入后再切换键而产生两个安装标识。\n * @returns 应用于后续全部 Identity 操作的业务键。\n */\nconst getInstallationIdentityStorageKey = (): string => {\n\tactiveStorageKey ??= defaultInstallationIdentityStorageKey;\n\treturn activeStorageKey;\n};\n\n/**\n * 在应用入口配置安装标识使用的 Storage 业务键。\n *\n * @remarks 必须在首次读取 `installationIdentity.cacheKey` 或调用其他安装标识 API 前执行。相同配置\n * 可以幂等重复调用;切换到不同键会抛错,避免同一页面产生分裂状态。\n * @param options - 安装标识配置;省略 `cacheKey` 时使用 `identity:installation-id`。\n * @throws `TypeError` 当 `cacheKey` 不是非空字符串或包含外围空白。\n * @throws `Error` 当安装标识已经使用另一个业务键初始化。\n */\nexport function configureInstallationIdentity(options: InstallationIdentityConfiguration = {}): void {\n\tconst cacheKey = options.cacheKey ?? defaultInstallationIdentityStorageKey;\n\tif (typeof cacheKey !== \"string\" || cacheKey.length === 0 || cacheKey.trim() !== cacheKey) {\n\t\tthrow new TypeError(\"Installation Identity cacheKey must be a non-empty string without surrounding whitespace.\");\n\t}\n\tif (activeStorageKey === undefined) {\n\t\tactiveStorageKey = cacheKey;\n\t\treturn;\n\t}\n\tif (activeStorageKey !== cacheKey) throw new Error(\"Installation Identity has already been configured with a different cacheKey.\");\n}\n\n/**\n * 全局安装标识状态。\n *\n * @remarks Storage 未显式配置时会使用其默认值。生成 UUID 时优先使用 Web Crypto,能力缺失时\n * 回退到 `Math.random()`。该值不是硬件标识、认证凭证或安全边界。\n */\nexport const installationIdentity: InstallationIdentity = {\n\tget cacheKey(): string {\n\t\treturn getInstallationIdentityStorageKey();\n\t},\n\tdeviceId: \"\",\n\tclear(): void {\n\t\tLocal.remove(installationIdentity.cacheKey);\n\t\tinstallationIdentity.deviceId = \"\";\n\t},\n\tgetOrCreate(installationId?: string): string {\n\t\tconst candidate =\n\t\t\tinstallationId ??\n\t\t\t(installationIdentity.deviceId.length > 0 ? installationIdentity.deviceId : installationIdentity.read()) ??\n\t\t\tgenerateUuidV4();\n\t\tassertInstallationId(candidate);\n\t\tLocal.set(installationIdentity.cacheKey, candidate);\n\t\tinstallationIdentity.deviceId = candidate;\n\t\treturn candidate;\n\t},\n\tread(): string | undefined {\n\t\tconst stored = Local.get(installationIdentity.cacheKey);\n\t\tif (stored === undefined) return undefined;\n\t\tif (typeof stored !== \"string\") throw new TypeError(\"The stored identity is corrupted.\");\n\t\tassertInstallationId(stored);\n\t\treturn stored;\n\t},\n};\n\n/**\n * 返回已有安装标识,否则创建并持久化一个 UUID v4。\n *\n * @param installationId - 可选的显式安装标识;传入时会校验并覆盖当前持久化值。\n * @returns 显式值、内存值、持久化值或新生成值中的最终安装标识。\n * @throws `TypeError` 当显式值或持久化值不是 UUID v4。\n * @throws `Error` 当当前平台存储不可用。\n */\nexport function getOrCreateInstallationId(installationId?: string): string {\n\treturn installationIdentity.getOrCreate(installationId);\n}\n"],"mappings":";;;AAGA,MAAM,wCAAwC;;;;;;;AA0D9C,MAAM,wBAAwB,UAAwB;CACrD,IAAI,CAAC,SAAS,KAAK,GAAG,MAAM,IAAI,UAAU,gEAAgE;AAC3G;AAEA,IAAI;;;;;;;AAQJ,MAAM,0CAAkD;CACvD,qBAAqB;CACrB,OAAO;AACR;;;;;;;;;;AAWA,SAAgB,8BAA8B,UAA6C,CAAC,GAAS;CACpG,MAAM,WAAW,QAAQ,YAAY;CACrC,IAAI,OAAO,aAAa,YAAY,SAAS,WAAW,KAAK,SAAS,KAAK,MAAM,UAChF,MAAM,IAAI,UAAU,2FAA2F;CAEhH,IAAI,qBAAqB,KAAA,GAAW;EACnC,mBAAmB;EACnB;CACD;CACA,IAAI,qBAAqB,UAAU,MAAM,IAAI,MAAM,8EAA8E;AAClI;;;;;;;AAQA,MAAa,uBAA6C;CACzD,IAAI,WAAmB;EACtB,OAAO,kCAAkC;CAC1C;CACA,UAAU;CACV,QAAc;EACb,MAAM,OAAO,qBAAqB,QAAQ;EAC1C,qBAAqB,WAAW;CACjC;CACA,YAAY,gBAAiC;EAC5C,MAAM,YACL,mBACC,qBAAqB,SAAS,SAAS,IAAI,qBAAqB,WAAW,qBAAqB,KAAK,MACtG,eAAe;EAChB,qBAAqB,SAAS;EAC9B,MAAM,IAAI,qBAAqB,UAAU,SAAS;EAClD,qBAAqB,WAAW;EAChC,OAAO;CACR;CACA,OAA2B;EAC1B,MAAM,SAAS,MAAM,IAAI,qBAAqB,QAAQ;EACtD,IAAI,WAAW,KAAA,GAAW,OAAO,KAAA;EACjC,IAAI,OAAO,WAAW,UAAU,MAAM,IAAI,UAAU,mCAAmC;EACvF,qBAAqB,MAAM;EAC3B,OAAO;CACR;AACD;;;;;;;;;AAUA,SAAgB,0BAA0B,gBAAiC;CAC1E,OAAO,qBAAqB,YAAY,cAAc;AACvD"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/identity/index.ts"],"sourcesContent":["import { Local } from \"../storage/index\";\nimport { generateUuidV4, isUuidV4 } from \"../string/index\";\n\nconst defaultInstallationIdentityStorageKey = \"identity:installation-id\";\n\n/** {@link configureInstallationIdentity} 接收的安装标识配置。 */\nexport interface InstallationIdentityConfiguration {\n\t/**\n\t * `Local` 中使用的业务键,默认 `identity:installation-id`。\n\t *\n\t * @remarks 必须是无外围空白的非空字符串,并在首次访问 Identity API 前配置;物理键仍会叠加 Storage 全局前缀。\n\t */\n\tcacheKey?: string;\n}\n\n/** 浏览器或 uni-app 当前安装实例标识。 */\nexport interface InstallationIdentity {\n\t/**\n\t * `Local` 中使用的业务键。\n\t *\n\t * @remarks 首次读取会锁定默认配置;之后不能再切换为其他业务键。\n\t */\n\treadonly cacheKey: string;\n\t/**\n\t * 当前内存中的安装标识;尚未取得标识或调用 {@link InstallationIdentity.clear clear} 后为空字符串。\n\t *\n\t * @remarks 直接赋值只改变内存,不会校验或持久化;通常应调用 {@link InstallationIdentity.getOrCreate getOrCreate}。\n\t */\n\tdeviceId: string;\n\t/**\n\t * 删除当前 `cacheKey` 对应的持久化标识,并把 `deviceId` 重置为空字符串。\n\t *\n\t * @throws `Error` 当当前平台存储不可用。\n\t */\n\tclear: () => void;\n\t/**\n\t * 按“显式参数、当前内存、持久化值、随机生成值”的优先级取得安装标识。\n\t *\n\t * @param installationId - 可选 UUID v4;传入时覆盖内存值和当前持久化值。\n\t * @returns 已校验并同时写入 `deviceId` 与 `Local` 的 UUID v4。\n\t * @throws `TypeError` 当显式参数、内存值或持久化值不是 UUID v4。\n\t * @throws `Error` 当当前平台存储不可用。\n\t */\n\tgetOrCreate: (installationId?: string) => string;\n\t/**\n\t * 读取并校验当前 `cacheKey` 对应的持久化标识。\n\t *\n\t * @remarks 该方法不修改 `deviceId`,只负责读取;过期记录由 Storage 视为缺失。\n\t * @returns 已持久化的 UUID v4;键缺失或过期时返回 `undefined`。\n\t * @throws `TypeError` 当持久化值不是字符串或不是 UUID v4。\n\t * @throws `Error` 当当前平台存储不可用。\n\t */\n\tread: () => string | undefined;\n}\n\n/**\n * 校验安装标识格式。\n *\n * @param value - 外部传入或从 Storage 读取的候选值。\n * @throws `TypeError` 当值不是 RFC 4122 UUID v4。\n */\nconst assertInstallationId = (value: string): void => {\n\tif (!isUuidV4(value)) throw new TypeError(\"安装标识值必须是符合 RFC 4122 UUID v4。\");\n};\n\nlet activeStorageKey: string | undefined;\n\n/**\n * 取得已经锁定的安装标识业务键。\n *\n * @remarks 首次读取会锁定默认值,防止标识已经写入后再切换键而产生两个安装标识。\n * @returns 应用于后续全部 Identity 操作的业务键。\n */\nconst getInstallationIdentityStorageKey = (): string => {\n\tactiveStorageKey ??= defaultInstallationIdentityStorageKey;\n\treturn activeStorageKey;\n};\n\n/**\n * 在应用入口配置安装标识使用的 Storage 业务键。\n *\n * @remarks 必须在首次读取 `installationIdentity.cacheKey` 或调用其他安装标识 API 前执行。相同配置\n * 可以幂等重复调用;切换到不同键会抛错,避免同一页面产生分裂状态。\n * @param options - 安装标识配置;省略 `cacheKey` 时使用 `identity:installation-id`。\n * @throws `TypeError` 当 `cacheKey` 不是非空字符串或包含外围空白。\n * @throws `Error` 当安装标识已经使用另一个业务键初始化。\n */\nexport function configureInstallationIdentity(options: InstallationIdentityConfiguration = {}): void {\n\tconst cacheKey = options.cacheKey ?? defaultInstallationIdentityStorageKey;\n\tif (typeof cacheKey !== \"string\" || cacheKey.length === 0 || cacheKey.trim() !== cacheKey) {\n\t\tthrow new TypeError(\"安装标识的 `cacheKey` 必须是无外围空白的非空字符串。\");\n\t}\n\tif (activeStorageKey === undefined) {\n\t\tactiveStorageKey = cacheKey;\n\t\treturn;\n\t}\n\tif (activeStorageKey !== cacheKey) throw new Error(\"安装标识已使用其他 `cacheKey` 完成配置。\");\n}\n\n/**\n * 全局安装标识状态。\n *\n * @remarks Storage 未显式配置时会使用其默认值。生成 UUID 时优先使用 Web Crypto,能力缺失时\n * 回退到 `Math.random()`。该值不是硬件标识、认证凭证或安全边界。\n */\nexport const installationIdentity: InstallationIdentity = {\n\tget cacheKey(): string {\n\t\treturn getInstallationIdentityStorageKey();\n\t},\n\tdeviceId: \"\",\n\tclear(): void {\n\t\tLocal.remove(installationIdentity.cacheKey);\n\t\tinstallationIdentity.deviceId = \"\";\n\t},\n\tgetOrCreate(installationId?: string): string {\n\t\tconst candidate =\n\t\t\tinstallationId ??\n\t\t\t(installationIdentity.deviceId.length > 0 ? installationIdentity.deviceId : installationIdentity.read()) ??\n\t\t\tgenerateUuidV4();\n\t\tassertInstallationId(candidate);\n\t\tLocal.set(installationIdentity.cacheKey, candidate);\n\t\tinstallationIdentity.deviceId = candidate;\n\t\treturn candidate;\n\t},\n\tread(): string | undefined {\n\t\tconst stored = Local.get(installationIdentity.cacheKey);\n\t\tif (stored === undefined) return undefined;\n\t\tif (typeof stored !== \"string\") throw new TypeError(\"存储的安装标识已损坏。\");\n\t\tassertInstallationId(stored);\n\t\treturn stored;\n\t},\n};\n\n/**\n * 返回已有安装标识,否则创建并持久化一个 UUID v4。\n *\n * @param installationId - 可选的显式安装标识;传入时会校验并覆盖当前持久化值。\n * @returns 显式值、内存值、持久化值或新生成值中的最终安装标识。\n * @throws `TypeError` 当显式值或持久化值不是 UUID v4。\n * @throws `Error` 当当前平台存储不可用。\n */\nexport function getOrCreateInstallationId(installationId?: string): string {\n\treturn installationIdentity.getOrCreate(installationId);\n}\n"],"mappings":";;;AAGA,MAAM,wCAAwC;;;;;;;AA0D9C,MAAM,wBAAwB,UAAwB;CACrD,IAAI,CAAC,SAAS,KAAK,GAAG,MAAM,IAAI,UAAU,gCAAgC;AAC3E;AAEA,IAAI;;;;;;;AAQJ,MAAM,0CAAkD;CACvD,qBAAqB;CACrB,OAAO;AACR;;;;;;;;;;AAWA,SAAgB,8BAA8B,UAA6C,CAAC,GAAS;CACpG,MAAM,WAAW,QAAQ,YAAY;CACrC,IAAI,OAAO,aAAa,YAAY,SAAS,WAAW,KAAK,SAAS,KAAK,MAAM,UAChF,MAAM,IAAI,UAAU,kCAAkC;CAEvD,IAAI,qBAAqB,KAAA,GAAW;EACnC,mBAAmB;EACnB;CACD;CACA,IAAI,qBAAqB,UAAU,MAAM,IAAI,MAAM,4BAA4B;AAChF;;;;;;;AAQA,MAAa,uBAA6C;CACzD,IAAI,WAAmB;EACtB,OAAO,kCAAkC;CAC1C;CACA,UAAU;CACV,QAAc;EACb,MAAM,OAAO,qBAAqB,QAAQ;EAC1C,qBAAqB,WAAW;CACjC;CACA,YAAY,gBAAiC;EAC5C,MAAM,YACL,mBACC,qBAAqB,SAAS,SAAS,IAAI,qBAAqB,WAAW,qBAAqB,KAAK,MACtG,eAAe;EAChB,qBAAqB,SAAS;EAC9B,MAAM,IAAI,qBAAqB,UAAU,SAAS;EAClD,qBAAqB,WAAW;EAChC,OAAO;CACR;CACA,OAA2B;EAC1B,MAAM,SAAS,MAAM,IAAI,qBAAqB,QAAQ;EACtD,IAAI,WAAW,KAAA,GAAW,OAAO,KAAA;EACjC,IAAI,OAAO,WAAW,UAAU,MAAM,IAAI,UAAU,aAAa;EACjE,qBAAqB,MAAM;EAC3B,OAAO;CACR;AACD;;;;;;;;;AAUA,SAAgB,0BAA0B,gBAAiC;CAC1E,OAAO,qBAAqB,YAAY,cAAc;AACvD"}
@@ -1,3 +1,3 @@
1
- var FastUtils=(function(e,t){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var n=Object.create,r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,o=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),l=(e,t,n,o)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var c=a(t),l=0,u=c.length,d;l<u;l++)d=c[l],!s.call(e,d)&&d!==n&&r(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(o=i(t,d))||o.enumerable});return e},u=(e,t,i)=>(i=e==null?{}:n(o(e)),l(t||!e||!e.__esModule||!s.call(e,`default`)?r(i,`default`,{value:e,enumerable:!0}):i,e));function d(e,t){if(!Number.isSafeInteger(t)||t<=0)throw RangeError(`size must be a positive safe integer.`);let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function f(e){return e.filter(e=>e!=null)}function p(e){let t=[],n=new Set;for(let r=0;r<e.length;r+=1){if(!(r in e))continue;let i=e[r];n.has(i)||(n.add(i),t.push(i))}return t}function m(e,t){let n=new Set,r=[];for(let i=0;i<e.length;i+=1){let a=e[i];if(a===void 0&&!(i in e))continue;let o=t(a,i);n.has(o)||(n.add(o),r.push(a))}return r}function h(e,t){let n=new Map;return e.forEach((e,r)=>{let i=t(e,r),a=n.get(i);a===void 0?n.set(i,[e]):a.push(e)}),n}function g(e,t){let n=[],r=[];return e.forEach((e,i)=>(t(e,i)?n:r).push(e)),[n,r]}function _(e,t){let n=new Set(p(t));return p(e).filter(e=>!n.has(e))}function v(e,t){let n=new Set(p(t));return p(e).filter(e=>n.has(e))}function y(e,t){let n=new Set;for(let r=0;r<e.length;r+=1){let i=e[r];if(i===void 0&&!(r in e))continue;let a=t(i,r);if(n.has(a))return!0;n.add(a)}return!1}function b(e,t){let n,r=!1;for(let i=0;i<e.length;i+=1){let a=e[i];if(a===void 0&&!(i in e))continue;let o=t(a,i);if(!r){n=o,r=!0;continue}if(!(n===o||Number.isNaN(n)&&Number.isNaN(o)))return!1}return!0}let x=2147483647,S=e=>{let t=Error(`The operation was aborted.`,{cause:e.reason});return t.name=`AbortError`,t},C=e=>{if(e?.aborted)throw S(e)},w=(e,t=`milliseconds`)=>{if(!Number.isFinite(e)||e<0||e>x)throw RangeError(`${t} must be a finite number from 0 through ${x}.`);return e};function T(e,t={}){let n=w(e),r=t.signal;return C(r),new Promise((e,t)=>{let i=()=>{r!==void 0&&(clearTimeout(a),t(S(r)))},a=setTimeout(()=>{r?.removeEventListener(`abort`,i),e()},n);r?.addEventListener(`abort`,i,{once:!0})})}function E(e,t,n={}){let r=w(t,`timeoutMs`),i=n.signal;return C(i),new Promise((t,a)=>{let o=!1,s=()=>{clearTimeout(u),i?.removeEventListener(`abort`,l)},c=e=>{o||(o=!0,s(),e())},l=()=>{i!==void 0&&c(()=>{a(S(i))})},u=setTimeout(()=>{c(()=>{a(Error(n.message??`The operation exceeded ${r} ms.`))})},r);i?.addEventListener(`abort`,l,{once:!0}),Promise.resolve(e).then(e=>{c(()=>{t(e)})},e=>{c(()=>{a(e)})})})}async function D(e,t={}){let n=t.attempts??3,r=w(t.delayMs??200,`delayMs`),i=w(t.maxDelayMs??3e4,`maxDelayMs`),a=t.factor??2;if(!Number.isSafeInteger(n)||n<=0)throw RangeError(`attempts must be a positive safe integer.`);if(!Number.isFinite(a)||a<1)throw RangeError(`factor must be a finite number greater than or equal to 1.`);for(let o=1;o<=n;o+=1){C(t.signal);let s=t.signal===void 0?{attempt:o}:{attempt:o,signal:t.signal};try{return await e(s)}catch(e){if(o===n||t.shouldRetry!==void 0&&!await t.shouldRetry(e,s))throw e;await T(r===0?0:Math.min(r*a**(o-1),i),t.signal===void 0?{}:{signal:t.signal})}}throw Error(`Retry finished without a result.`)}async function O(e,t,n,r={}){if(!Number.isSafeInteger(t)||t<=0)throw RangeError(`concurrency must be a positive safe integer.`);C(r.signal);let i=Array(e.length),a=0,o=!1,s=async()=>{for(;!o;){C(r.signal);let t=a;if(t>=e.length)return;if(a+=1,t in e)try{i[t]=await n(e[t],t,r.signal)}catch(e){throw o=!0,e}}},c=Math.min(t,e.length);return await Promise.all(Array.from({length:c},()=>s())),i}function k(e,t=300){let n=w(t,`delayMs`),r,i,a=[],o=async()=>{let t=i;if(t===void 0)throw Error(`No debounced invocation is pending.`);i=void 0,r=void 0;let n=a;a=[];try{let r=await e(...t);return n.forEach(e=>{e.resolve(r)}),r}catch(e){throw n.forEach(t=>{t.reject(e)}),e}},s=(...e)=>(i=e,r!==void 0&&clearTimeout(r),r=setTimeout(()=>{o().catch(()=>void 0)},n),new Promise((e,t)=>a.push({reject:t,resolve:e})));return s.cancel=e=>{r!==void 0&&clearTimeout(r),r=void 0,i=void 0;let t=e??Error(`The debounced invocation was cancelled.`);a.forEach(e=>{e.reject(t)}),a=[]},s.flush=()=>{if(r!==void 0)return clearTimeout(r),o()},s.pending=()=>r!==void 0,s}function A(e,t=300){let n=w(t,`delayMs`),r,i,a=!1,o=!1,s=()=>{!a&&o&&(i=void 0)},c=(...t)=>{if(i!==void 0)return i;a=!0,o=!1;let c;try{c=Promise.resolve(e(...t))}catch(e){c=Promise.reject(e)}return i=c,c.then(()=>{o=!0,s()},()=>{o=!0,s()}),r=setTimeout(()=>{r=void 0,a=!1,s()},n),c};return c.cancel=()=>{r!==void 0&&clearTimeout(r),r=void 0,a=!1,s()},c.pending=()=>i!==void 0,c}let ee=()=>{let e=globalThis.TextDecoder;if(typeof e!=`function`)throw Error(`TextDecoder is unavailable in the current runtime.`);return new e(`utf-8`,{fatal:!0})},te=()=>{let e=globalThis.TextEncoder;if(typeof e!=`function`)throw Error(`TextEncoder is unavailable in the current runtime.`);return new e},j=e=>te().encode(e),ne=[`B`,`kB`,`MB`,`GB`,`TB`,`PB`,`EB`,`ZB`,`YB`],re=[`B`,`KiB`,`MiB`,`GiB`,`TiB`,`PiB`,`EiB`,`ZiB`,`YiB`],M=(e,t)=>{if(Number.isNaN(e))throw RangeError(`${t} cannot be NaN.`)},N=(e,t)=>{if(!Number.isFinite(e))throw RangeError(`${t} must be finite.`)},ie=(e,t)=>{if(Object.is(e,-0))return-0;let[n=`0`,r=`0`]=e.toString().split(`e`);return Number(`${n}e${Number(r)+t}`)};function ae(e,t,n){if(M(e,`value`),M(t,`minimum`),M(n,`maximum`),t>n)throw RangeError(`minimum cannot be greater than maximum.`);return Math.min(Math.max(e,t),n)}function oe(e,t,n,r=!1){if(M(e,`value`),M(t,`minimum`),M(n,`maximum`),t>n)throw RangeError(`minimum cannot be greater than maximum.`);return e>=t&&(r?e<=n:e<n)}function se(e,t=0){if(N(e,`value`),!Number.isSafeInteger(t)||t<-15||t>15)throw RangeError(`digits must be a safe integer between -15 and 15.`);let n=ie(e,t);return Number.isFinite(n)?ie(Math.round(n),-t):e}function ce(e){let t=0,n=0;return e.forEach(e=>{N(e,`value`);let r=e-n,i=t+r;if(!Number.isFinite(i))throw RangeError(`The sum exceeds the finite number range.`);n=i-t-r,t=i}),t}function le(e){let t=0,n=0;return e.forEach(e=>{N(e,`value`),t+=1,n=n*((t-1)/t)+e/t}),t===0?void 0:n}function ue(e,t,n){N(e,`start`),N(t,`end`),N(n,`amount`);let r=e*(1-n)+t*n;if(!Number.isFinite(r))throw RangeError(`The interpolation result exceeds the finite number range.`);return r}function de(e,t={}){if(N(e,`bytes`),e<0)throw RangeError(`bytes cannot be negative.`);let n=t.base??1024;if(n!==1e3&&n!==1024)throw RangeError(`base must be 1000 or 1024.`);let r=n,i=t.decimals??2;if(!Number.isSafeInteger(i)||i<0||i>20)throw RangeError(`decimals must be a safe integer between 0 and 20.`);if(e===0)return`0 B`;let a=r===1024?re:ne,o=Math.min(Math.floor(Math.log(e)/Math.log(r)),a.length-1),s=e/r**o;return`${new Intl.NumberFormat(t.locale??`en-US`,{maximumFractionDigits:i,minimumFractionDigits:0,useGrouping:!1}).format(s)} ${a[o]??a.at(-1)}`}function fe(e,t){if(!Number.isSafeInteger(e)||!Number.isSafeInteger(t))throw RangeError(`minimum and maximumExclusive must be safe integers.`);let n=t-e,r=4294967296;if(n<=0||n>r)throw RangeError(`The interval must be non-empty and no wider than 2^32.`);let i=globalThis.crypto,a=typeof i?.getRandomValues==`function`,o=Math.floor(r/n)*n,s=new Uint32Array(1),c;do a?i.getRandomValues(s):s[0]=Math.floor(Math.random()*r),c=s[0]??r;while(c>=o);return e+c%n}let P=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,pe=e=>TypeError(`The value is not valid ${e===`url`?`Base64URL`:`Base64`}.`),me=(e,t)=>{let n=t===`standard`?e.replace(/[\t\n\f\r ]+/gu,``):e;if(!(t===`url`?/^[\w-]*={0,2}$/u:/^[A-Za-z\d+/]*={0,2}$/u).test(n)||n.length%4==1||n.includes(`=`)&&n.length%4!=0)throw pe(t);let r=(t===`url`?n.replace(/-/gu,`+`).replace(/_/gu,`/`):n).replace(/=+$/u,``);return r.padEnd(Math.ceil(r.length/4)*4,`=`)},he=e=>{let t=``;for(let n=0;n<e.length;n+=3){let r=e[n]??0,i=e[n+1],a=e[n+2],o=r<<16|(i??0)<<8|(a??0);t+=P[o>>18&63]??``,t+=P[o>>12&63]??``,t+=i===void 0?`=`:P[o>>6&63]??``,t+=a===void 0?`=`:P[o&63]??``}return t},ge=(e,t)=>{let n=me(e,t);if(n.length===0)return new Uint8Array;let r=n.endsWith(`==`)?2:+!!n.endsWith(`=`),i=new Uint8Array(n.length/4*3-r),a=0;for(let e=0;e<n.length;e+=4){let o=P.indexOf(n[e]??``),s=P.indexOf(n[e+1]??``),c=n[e+2]??`=`,l=n[e+3]??`=`,u=c===`=`?0:P.indexOf(c),d=l===`=`?0:P.indexOf(l);if(o<0||s<0||u<0||d<0||e+4===n.length&&(r===2&&s&15||r===1&&u&3))throw pe(t);let f=o<<18|s<<12|u<<6|d;a<i.length&&(i[a++]=f>>16&255),a<i.length&&(i[a++]=f>>8&255),a<i.length&&(i[a++]=f&255)}return i},_e=e=>{let t=ee();try{return t.decode(e)}catch(e){throw TypeError(`The decoded bytes are not valid UTF-8.`,{cause:e})}};function F(e){return he(e)}function I(e){return ge(e,`standard`)}function ve(e){return he(j(e))}function ye(e){return _e(I(e))}function L(e){return he(e).replace(/\+/gu,`-`).replace(/\//gu,`_`).replace(/=+$/u,``)}function R(e){return ge(e,`url`)}function be(e){return L(j(e))}function xe(e){return _e(R(e))}function Se(e){let t=new Uint8Array(e.length);for(let n=0;n<e.length;n+=1){let r=e.charCodeAt(n);if(r>255)throw TypeError(`The string to be encoded contains characters outside of the Latin-1 range.`);t[n]=r}return F(t)}function Ce(e){let t=I(e),n=``;for(let e of t)n+=String.fromCharCode(e);return n}let we=Object.freeze([{index:977,randomIndex:188},{index:926,randomIndex:201},{index:851,randomIndex:225},{index:700,randomIndex:255},{index:600,randomIndex:268},{index:500,randomIndex:277},{index:400,randomIndex:288},{index:330,randomIndex:327},{index:300,randomIndex:180},{index:200,randomIndex:178},{index:100,randomIndex:124},{index:98,randomIndex:95},{index:92,randomIndex:90},{index:91,randomIndex:87},{index:88,randomIndex:84},{index:82,randomIndex:79},{index:78,randomIndex:71},{index:72,randomIndex:69},{index:68,randomIndex:66},{index:59,randomIndex:55},{index:48,randomIndex:43},{index:42,randomIndex:37},{index:36,randomIndex:30},{index:33,randomIndex:27},{index:24,randomIndex:20},{index:23,randomIndex:18},{index:21,randomIndex:16},{index:17,randomIndex:14},{index:13,randomIndex:9},{index:7,randomIndex:4},{index:5,randomIndex:3},{index:2,randomIndex:1}]),Te=e=>{if(!Number.isSafeInteger(e)||e<0)throw RangeError(`prefixStrLength must be a non-negative safe integer.`)},Ee=e=>{let t=``;for(let n=0;n<e;n+=1)t+=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`[fe(0,52)]??``;return t},De=e=>{let t=e;for(let n of we){if(n.index>=e.length)continue;let r=e[n.randomIndex]??e.at(-1)??``;t=t.slice(0,n.index)+r+t.slice(n.index)}return t},Oe=e=>{let t=e;for(let n=we.length-1;n>=0;--n){let r=we[n];r!==void 0&&r.index<e.length&&(t=t.slice(0,r.index)+t.slice(r.index+1))}return t};function ke(e,t=6){if(e.length===0)return``;Te(t);let n=Ee(t),r=Se(encodeURIComponent(e));return t!==0&&(r=De(r)),n+r}function Ae(e,t=6){if(e.length===0)return``;if(Te(t),t>e.length)throw TypeError(`The Base64 value is shorter than its configured prefix.`);let n=e.slice(t);return t!==0&&(n=Oe(n)),decodeURIComponent(Ce(n))}let je=(e,t)=>{if(!Number.isFinite(e)||e<0||e>255)throw RangeError(`${t} must be a finite number from 0 through 255.`)},Me=e=>{if(!Number.isFinite(e)||e<0||e>1)throw RangeError(`alpha must be a finite number from 0 through 1.`)},Ne=e=>{let t=e.startsWith(`#`)?e.slice(1):e;if(![3,4,6,8].includes(t.length)||!/^[\dA-F]+$/iu.test(t))throw TypeError(`Expected a 3, 4, 6, or 8 digit hexadecimal color.`);return t.length<=4?Array.from(t,e=>`${e}${e}`).join(``):t},Pe=e=>Math.round(e).toString(16).padStart(2,`0`);function Fe(e){let t=Ne(e);return{red:Number.parseInt(t.slice(0,2),16),green:Number.parseInt(t.slice(2,4),16),blue:Number.parseInt(t.slice(4,6),16),alpha:t.length===8?Number.parseInt(t.slice(6,8),16)/255:1}}function Ie(e,t=`alpha`in e&&e.alpha<1){je(e.red,`red`),je(e.green,`green`),je(e.blue,`blue`);let n=`alpha`in e?e.alpha:1;return Me(n),`#${`${Pe(e.red)}${Pe(e.green)}${Pe(e.blue)}`}${t?Pe(n*255):``}`}function Le(e,t,n){if(!Number.isFinite(n)||n<0||n>1)throw RangeError(`amount must be a finite number from 0 through 1.`);let r=Fe(e),i=Fe(t),a=(e,t)=>e+(t-e)*n;return Ie({red:a(r.red,i.red),green:a(r.green,i.green),blue:a(r.blue,i.blue),alpha:a(r.alpha,i.alpha)},r.alpha<1||i.alpha<1)}function Re(e,t){return Le(e,`#000000`,t)}function ze(e,t){return Le(e,`#ffffff`,t)}let Be=e=>{let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4};function Ve(e){let{red:t,green:n,blue:r}=Fe(e);return .2126*Be(t)+.7152*Be(n)+.0722*Be(r)}function He(e,t){let n=Ve(e),r=Ve(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)}function Ue(e,t=`#000000`,n=`#ffffff`){return He(e,t)>=He(e,n)?t:n}var We=c((()=>{})),z=c(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r():typeof define==`function`&&define.amd?define([],r):n.CryptoJS=r()})(e,function(){var e=e||function(e,t){var n;if(typeof window<`u`&&window.crypto&&(n=window.crypto),typeof self<`u`&&self.crypto&&(n=self.crypto),typeof globalThis<`u`&&globalThis.crypto&&(n=globalThis.crypto),!n&&typeof window<`u`&&window.msCrypto&&(n=window.msCrypto),!n&&typeof global<`u`&&global.crypto&&(n=global.crypto),!n&&typeof require==`function`)try{n=We()}catch{}var r=function(){if(n){if(typeof n.getRandomValues==`function`)try{return n.getRandomValues(new Uint32Array(1))[0]}catch{}if(typeof n.randomBytes==`function`)try{return n.randomBytes(4).readInt32LE()}catch{}}throw Error(`Native crypto module could not be used to get secure random number.`)},i=Object.create||function(){function e(){}return function(t){var n;return e.prototype=t,n=new e,e.prototype=null,n}}(),a={},o=a.lib={},s=o.Base=function(){return{extend:function(e){var t=i(this);return e&&t.mixIn(e),(!t.hasOwnProperty(`init`)||this.init===t.init)&&(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty(`toString`)&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),c=o.WordArray=s.extend({init:function(e,n){e=this.words=e||[],this.sigBytes=n==t?e.length*4:n},toString:function(e){return(e||u).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes,i=e.sigBytes;if(this.clamp(),r%4)for(var a=0;a<i;a++){var o=n[a>>>2]>>>24-a%4*8&255;t[r+a>>>2]|=o<<24-(r+a)%4*8}else for(var s=0;s<i;s+=4)t[r+s>>>2]=n[s>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=s.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],n=0;n<e;n+=4)t.push(r());return new c.init(t,e)}}),l=a.enc={},u=l.Hex={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i<n;i++){var a=t[i>>>2]>>>24-i%4*8&255;r.push((a>>>4).toString(16)),r.push((a&15).toString(16))}return r.join(``)},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r+=2)n[r>>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new c.init(n,t/2)}},d=l.Latin1={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i<n;i++){var a=t[i>>>2]>>>24-i%4*8&255;r.push(String.fromCharCode(a))}return r.join(``)},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r++)n[r>>>2]|=(e.charCodeAt(r)&255)<<24-r%4*8;return new c.init(n,t)}},f=l.Utf8={stringify:function(e){try{return decodeURIComponent(escape(d.stringify(e)))}catch{throw Error(`Malformed UTF-8 data`)}},parse:function(e){return d.parse(unescape(encodeURIComponent(e)))}},p=o.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){typeof e==`string`&&(e=f.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n,r=this._data,i=r.words,a=r.sigBytes,o=this.blockSize,s=a/(o*4);s=t?e.ceil(s):e.max((s|0)-this._minBufferSize,0);var l=s*o,u=e.min(l*4,a);if(l){for(var d=0;d<l;d+=o)this._doProcessBlock(i,d);n=i.splice(0,l),r.sigBytes-=u}return new c.init(n,u)},clone:function(){var e=s.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});o.Hasher=p.extend({cfg:s.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){p.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:512/32,_createHelper:function(e){return function(t,n){return new e.init(n).finalize(t)}},_createHmacHelper:function(e){return function(t,n){return new m.HMAC.init(e,n).finalize(t)}}});var m=a.algo={};return a}(Math);return e})})),Ge=c(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r(z()):typeof define==`function`&&define.amd?define([`./core`],r):r(n.CryptoJS)})(e,function(e){return(function(){var t=e,n=t.lib.WordArray,r=t.enc;r.Base64={stringify:function(e){var t=e.words,n=e.sigBytes,r=this._map;e.clamp();for(var i=[],a=0;a<n;a+=3)for(var o=t[a>>>2]>>>24-a%4*8&255,s=t[a+1>>>2]>>>24-(a+1)%4*8&255,c=t[a+2>>>2]>>>24-(a+2)%4*8&255,l=o<<16|s<<8|c,u=0;u<4&&a+u*.75<n;u++)i.push(r.charAt(l>>>6*(3-u)&63));var d=r.charAt(64);if(d)for(;i.length%4;)i.push(d);return i.join(``)},parse:function(e){var t=e.length,n=this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var a=0;a<n.length;a++)r[n.charCodeAt(a)]=a}var o=n.charAt(64);if(o){var s=e.indexOf(o);s!==-1&&(t=s)}return i(e,t,r)},_map:`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=`};function i(e,t,r){for(var i=[],a=0,o=0;o<t;o++)if(o%4){var s=r[e.charCodeAt(o-1)]<<o%4*2|r[e.charCodeAt(o)]>>>6-o%4*2;i[a>>>2]|=s<<24-a%4*8,a++}return n.create(i,a)}})(),e.enc.Base64})})),Ke=c(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r(z()):typeof define==`function`&&define.amd?define([`./core`],r):r(n.CryptoJS)})(e,function(e){return(function(t){var n=e,r=n.lib,i=r.WordArray,a=r.Hasher,o=n.algo,s=[];(function(){for(var e=0;e<64;e++)s[e]=t.abs(t.sin(e+1))*4294967296|0})();var c=o.MD5=a.extend({_doReset:function(){this._hash=new i.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,t){for(var n=0;n<16;n++){var r=t+n,i=e[r];e[r]=(i<<8|i>>>24)&16711935|(i<<24|i>>>8)&4278255360}var a=this._hash.words,o=e[t+0],c=e[t+1],p=e[t+2],m=e[t+3],h=e[t+4],g=e[t+5],_=e[t+6],v=e[t+7],y=e[t+8],b=e[t+9],x=e[t+10],S=e[t+11],C=e[t+12],w=e[t+13],T=e[t+14],E=e[t+15],D=a[0],O=a[1],k=a[2],A=a[3];D=l(D,O,k,A,o,7,s[0]),A=l(A,D,O,k,c,12,s[1]),k=l(k,A,D,O,p,17,s[2]),O=l(O,k,A,D,m,22,s[3]),D=l(D,O,k,A,h,7,s[4]),A=l(A,D,O,k,g,12,s[5]),k=l(k,A,D,O,_,17,s[6]),O=l(O,k,A,D,v,22,s[7]),D=l(D,O,k,A,y,7,s[8]),A=l(A,D,O,k,b,12,s[9]),k=l(k,A,D,O,x,17,s[10]),O=l(O,k,A,D,S,22,s[11]),D=l(D,O,k,A,C,7,s[12]),A=l(A,D,O,k,w,12,s[13]),k=l(k,A,D,O,T,17,s[14]),O=l(O,k,A,D,E,22,s[15]),D=u(D,O,k,A,c,5,s[16]),A=u(A,D,O,k,_,9,s[17]),k=u(k,A,D,O,S,14,s[18]),O=u(O,k,A,D,o,20,s[19]),D=u(D,O,k,A,g,5,s[20]),A=u(A,D,O,k,x,9,s[21]),k=u(k,A,D,O,E,14,s[22]),O=u(O,k,A,D,h,20,s[23]),D=u(D,O,k,A,b,5,s[24]),A=u(A,D,O,k,T,9,s[25]),k=u(k,A,D,O,m,14,s[26]),O=u(O,k,A,D,y,20,s[27]),D=u(D,O,k,A,w,5,s[28]),A=u(A,D,O,k,p,9,s[29]),k=u(k,A,D,O,v,14,s[30]),O=u(O,k,A,D,C,20,s[31]),D=d(D,O,k,A,g,4,s[32]),A=d(A,D,O,k,y,11,s[33]),k=d(k,A,D,O,S,16,s[34]),O=d(O,k,A,D,T,23,s[35]),D=d(D,O,k,A,c,4,s[36]),A=d(A,D,O,k,h,11,s[37]),k=d(k,A,D,O,v,16,s[38]),O=d(O,k,A,D,x,23,s[39]),D=d(D,O,k,A,w,4,s[40]),A=d(A,D,O,k,o,11,s[41]),k=d(k,A,D,O,m,16,s[42]),O=d(O,k,A,D,_,23,s[43]),D=d(D,O,k,A,b,4,s[44]),A=d(A,D,O,k,C,11,s[45]),k=d(k,A,D,O,E,16,s[46]),O=d(O,k,A,D,p,23,s[47]),D=f(D,O,k,A,o,6,s[48]),A=f(A,D,O,k,v,10,s[49]),k=f(k,A,D,O,T,15,s[50]),O=f(O,k,A,D,g,21,s[51]),D=f(D,O,k,A,C,6,s[52]),A=f(A,D,O,k,m,10,s[53]),k=f(k,A,D,O,x,15,s[54]),O=f(O,k,A,D,c,21,s[55]),D=f(D,O,k,A,y,6,s[56]),A=f(A,D,O,k,E,10,s[57]),k=f(k,A,D,O,_,15,s[58]),O=f(O,k,A,D,w,21,s[59]),D=f(D,O,k,A,h,6,s[60]),A=f(A,D,O,k,S,10,s[61]),k=f(k,A,D,O,p,15,s[62]),O=f(O,k,A,D,b,21,s[63]),a[0]=a[0]+D|0,a[1]=a[1]+O|0,a[2]=a[2]+k|0,a[3]=a[3]+A|0},_doFinalize:function(){var e=this._data,n=e.words,r=this._nDataBytes*8,i=e.sigBytes*8;n[i>>>5]|=128<<24-i%32;var a=t.floor(r/4294967296),o=r;n[(i+64>>>9<<4)+15]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360,n[(i+64>>>9<<4)+14]=(o<<8|o>>>24)&16711935|(o<<24|o>>>8)&4278255360,e.sigBytes=(n.length+1)*4,this._process();for(var s=this._hash,c=s.words,l=0;l<4;l++){var u=c[l];c[l]=(u<<8|u>>>24)&16711935|(u<<24|u>>>8)&4278255360}return s},clone:function(){var e=a.clone.call(this);return e._hash=this._hash.clone(),e}});function l(e,t,n,r,i,a,o){var s=e+(t&n|~t&r)+i+o;return(s<<a|s>>>32-a)+t}function u(e,t,n,r,i,a,o){var s=e+(t&r|n&~r)+i+o;return(s<<a|s>>>32-a)+t}function d(e,t,n,r,i,a,o){var s=e+(t^n^r)+i+o;return(s<<a|s>>>32-a)+t}function f(e,t,n,r,i,a,o){var s=e+(n^(t|~r))+i+o;return(s<<a|s>>>32-a)+t}n.MD5=a._createHelper(c),n.HmacMD5=a._createHmacHelper(c)})(Math),e.MD5})})),qe=c(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r(z()):typeof define==`function`&&define.amd?define([`./core`],r):r(n.CryptoJS)})(e,function(e){return(function(){var t=e,n=t.lib,r=n.WordArray,i=n.Hasher,a=t.algo,o=[],s=a.SHA1=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],a=n[2],s=n[3],c=n[4],l=0;l<80;l++){if(l<16)o[l]=e[t+l]|0;else{var u=o[l-3]^o[l-8]^o[l-14]^o[l-16];o[l]=u<<1|u>>>31}var d=(r<<5|r>>>27)+c+o[l];d+=l<20?(i&a|~i&s)+1518500249:l<40?(i^a^s)+1859775393:l<60?(i&a|i&s|a&s)-1894007588:(i^a^s)-899497514,c=s,s=a,a=i<<30|i>>>2,i=r,r=d}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+a|0,n[3]=n[3]+s|0,n[4]=n[4]+c|0},_doFinalize:function(){var e=this._data,t=e.words,n=this._nDataBytes*8,r=e.sigBytes*8;return t[r>>>5]|=128<<24-r%32,t[(r+64>>>9<<4)+14]=Math.floor(n/4294967296),t[(r+64>>>9<<4)+15]=n,e.sigBytes=t.length*4,this._process(),this._hash},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA1=i._createHelper(s),t.HmacSHA1=i._createHmacHelper(s)})(),e.SHA1})})),Je=c(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r(z()):typeof define==`function`&&define.amd?define([`./core`],r):r(n.CryptoJS)})(e,function(e){(function(){var t=e,n=t.lib.Base,r=t.enc.Utf8,i=t.algo;i.HMAC=n.extend({init:function(e,t){e=this._hasher=new e.init,typeof t==`string`&&(t=r.parse(t));var n=e.blockSize,i=n*4;t.sigBytes>i&&(t=e.finalize(t)),t.clamp();for(var a=this._oKey=t.clone(),o=this._iKey=t.clone(),s=a.words,c=o.words,l=0;l<n;l++)s[l]^=1549556828,c[l]^=909522486;a.sigBytes=o.sigBytes=i,this.reset()},reset:function(){var e=this._hasher;e.reset(),e.update(this._iKey)},update:function(e){return this._hasher.update(e),this},finalize:function(e){var t=this._hasher,n=t.finalize(e);return t.reset(),t.finalize(this._oKey.clone().concat(n))}})})()})})),Ye=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),qe(),Je()):typeof define==`function`&&define.amd?define([`./core`,`./sha1`,`./hmac`],r):r(n.CryptoJS)})(e,function(e){return(function(){var t=e,n=t.lib,r=n.Base,i=n.WordArray,a=t.algo,o=a.MD5,s=a.EvpKDF=r.extend({cfg:r.extend({keySize:128/32,hasher:o,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n,r=this.cfg,a=r.hasher.create(),o=i.create(),s=o.words,c=r.keySize,l=r.iterations;s.length<c;){n&&a.update(n),n=a.update(e).finalize(t),a.reset();for(var u=1;u<l;u++)n=a.finalize(n),a.reset();o.concat(n)}return o.sigBytes=c*4,o}});t.EvpKDF=function(e,t,n){return s.create(n).compute(e,t)}})(),e.EvpKDF})})),B=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),Ye()):typeof define==`function`&&define.amd?define([`./core`,`./evpkdf`],r):r(n.CryptoJS)})(e,function(e){e.lib.Cipher||function(t){var n=e,r=n.lib,i=r.Base,a=r.WordArray,o=r.BufferedBlockAlgorithm,s=n.enc;s.Utf8;var c=s.Base64,l=n.algo.EvpKDF,u=r.Cipher=o.extend({cfg:i.extend(),createEncryptor:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,n){this.cfg=this.cfg.extend(n),this._xformMode=e,this._key=t,this.reset()},reset:function(){o.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){return e&&this._append(e),this._doFinalize()},keySize:128/32,ivSize:128/32,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function e(e){return typeof e==`string`?S:y}return function(t){return{encrypt:function(n,r,i){return e(r).encrypt(t,n,r,i)},decrypt:function(n,r,i){return e(r).decrypt(t,n,r,i)}}}}()});r.StreamCipher=u.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var d=n.mode={},f=r.BlockCipherMode=i.extend({createEncryptor:function(e,t){return this.Encryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}}),p=d.CBC=function(){var e=f.extend();e.Encryptor=e.extend({processBlock:function(e,t){var r=this._cipher,i=r.blockSize;n.call(this,e,t,i),r.encryptBlock(e,t),this._prevBlock=e.slice(t,t+i)}}),e.Decryptor=e.extend({processBlock:function(e,t){var r=this._cipher,i=r.blockSize,a=e.slice(t,t+i);r.decryptBlock(e,t),n.call(this,e,t,i),this._prevBlock=a}});function n(e,n,r){var i,a=this._iv;a?(i=a,this._iv=t):i=this._prevBlock;for(var o=0;o<r;o++)e[n+o]^=i[o]}return e}(),m=n.pad={},h=m.Pkcs7={pad:function(e,t){for(var n=t*4,r=n-e.sigBytes%n,i=r<<24|r<<16|r<<8|r,o=[],s=0;s<r;s+=4)o.push(i);var c=a.create(o,r);e.concat(c)},unpad:function(e){var t=e.words[e.sigBytes-1>>>2]&255;e.sigBytes-=t}};r.BlockCipher=u.extend({cfg:u.cfg.extend({mode:p,padding:h}),reset:function(){var e;u.reset.call(this);var t=this.cfg,n=t.iv,r=t.mode;this._xformMode==this._ENC_XFORM_MODE?e=r.createEncryptor:(e=r.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==e?this._mode.init(this,n&&n.words):(this._mode=e.call(r,this,n&&n.words),this._mode.__creator=e)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e,t=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(t.pad(this._data,this.blockSize),e=this._process(!0)):(e=this._process(!0),t.unpad(e)),e},blockSize:128/32});var g=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),_=n.format={},v=_.OpenSSL={stringify:function(e){var t,n=e.ciphertext,r=e.salt;return t=r?a.create([1398893684,1701076831]).concat(r).concat(n):n,t.toString(c)},parse:function(e){var t,n=c.parse(e),r=n.words;return r[0]==1398893684&&r[1]==1701076831&&(t=a.create(r.slice(2,4)),r.splice(0,4),n.sigBytes-=16),g.create({ciphertext:n,salt:t})}},y=r.SerializableCipher=i.extend({cfg:i.extend({format:v}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r),a=i.finalize(t),o=i.cfg;return g.create({ciphertext:a,key:n,iv:o.iv,algorithm:e,mode:o.mode,padding:o.padding,blockSize:e.blockSize,formatter:r.format})},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),e.createDecryptor(n,r).finalize(t.ciphertext)},_parse:function(e,t){return typeof e==`string`?t.parse(e,this):e}}),b=n.kdf={},x=b.OpenSSL={execute:function(e,t,n,r,i){if(r||=a.random(64/8),i)var o=l.create({keySize:t+n,hasher:i}).compute(e,r);else var o=l.create({keySize:t+n}).compute(e,r);var s=a.create(o.words.slice(t),n*4);return o.sigBytes=t*4,g.create({key:o,iv:s,salt:r})}},S=r.PasswordBasedCipher=y.extend({cfg:y.cfg.extend({kdf:x}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=r.kdf.execute(n,e.keySize,e.ivSize,r.salt,r.hasher);r.iv=i.iv;var a=y.encrypt.call(this,e,t,i.key,r);return a.mixIn(i),a},decrypt:function(e,t,n,r){r=this.cfg.extend(r),t=this._parse(t,r.format);var i=r.kdf.execute(n,e.keySize,e.ivSize,t.salt,r.hasher);return r.iv=i.iv,y.decrypt.call(this,e,t,i.key,r)}})}()})})),Xe=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),Ge(),Ke(),Ye(),B()):typeof define==`function`&&define.amd?define([`./core`,`./enc-base64`,`./md5`,`./evpkdf`,`./cipher-core`],r):r(n.CryptoJS)})(e,function(e){return(function(){var t=e,n=t.lib.BlockCipher,r=t.algo,i=[],a=[],o=[],s=[],c=[],l=[],u=[],d=[],f=[],p=[];(function(){for(var e=[],t=0;t<256;t++)t<128?e[t]=t<<1:e[t]=t<<1^283;for(var n=0,r=0,t=0;t<256;t++){var m=r^r<<1^r<<2^r<<3^r<<4;m=m>>>8^m&255^99,i[n]=m,a[m]=n;var h=e[n],g=e[h],_=e[g],v=e[m]*257^m*16843008;o[n]=v<<24|v>>>8,s[n]=v<<16|v>>>16,c[n]=v<<8|v>>>24,l[n]=v;var v=_*16843009^g*65537^h*257^n*16843008;u[m]=v<<24|v>>>8,d[m]=v<<16|v>>>16,f[m]=v<<8|v>>>24,p[m]=v,n?(n=h^e[e[e[_^h]]],r^=e[e[r]]):n=r=1}})();var m=[0,1,2,4,8,16,32,64,128,27,54],h=r.AES=n.extend({_doReset:function(){var e;if(!(this._nRounds&&this._keyPriorReset===this._key)){for(var t=this._keyPriorReset=this._key,n=t.words,r=t.sigBytes/4,a=((this._nRounds=r+6)+1)*4,o=this._keySchedule=[],s=0;s<a;s++)s<r?o[s]=n[s]:(e=o[s-1],s%r?r>6&&s%r==4&&(e=i[e>>>24]<<24|i[e>>>16&255]<<16|i[e>>>8&255]<<8|i[e&255]):(e=e<<8|e>>>24,e=i[e>>>24]<<24|i[e>>>16&255]<<16|i[e>>>8&255]<<8|i[e&255],e^=m[s/r|0]<<24),o[s]=o[s-r]^e);for(var c=this._invKeySchedule=[],l=0;l<a;l++){var s=a-l;if(l%4)var e=o[s];else var e=o[s-4];l<4||s<=4?c[l]=e:c[l]=u[i[e>>>24]]^d[i[e>>>16&255]]^f[i[e>>>8&255]]^p[i[e&255]]}}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,o,s,c,l,i)},decryptBlock:function(e,t){var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n,this._doCryptBlock(e,t,this._invKeySchedule,u,d,f,p,a);var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,a,o,s){for(var c=this._nRounds,l=e[t]^n[0],u=e[t+1]^n[1],d=e[t+2]^n[2],f=e[t+3]^n[3],p=4,m=1;m<c;m++){var h=r[l>>>24]^i[u>>>16&255]^a[d>>>8&255]^o[f&255]^n[p++],g=r[u>>>24]^i[d>>>16&255]^a[f>>>8&255]^o[l&255]^n[p++],_=r[d>>>24]^i[f>>>16&255]^a[l>>>8&255]^o[u&255]^n[p++],v=r[f>>>24]^i[l>>>16&255]^a[u>>>8&255]^o[d&255]^n[p++];l=h,u=g,d=_,f=v}var h=(s[l>>>24]<<24|s[u>>>16&255]<<16|s[d>>>8&255]<<8|s[f&255])^n[p++],g=(s[u>>>24]<<24|s[d>>>16&255]<<16|s[f>>>8&255]<<8|s[l&255])^n[p++],_=(s[d>>>24]<<24|s[f>>>16&255]<<16|s[l>>>8&255]<<8|s[u&255])^n[p++],v=(s[f>>>24]<<24|s[l>>>16&255]<<16|s[u>>>8&255]<<8|s[d&255])^n[p++];e[t]=h,e[t+1]=g,e[t+2]=_,e[t+3]=v},keySize:256/32});t.AES=n._createHelper(h)})(),e.AES})})),Ze=c(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r(z()):typeof define==`function`&&define.amd?define([`./core`],r):r(n.CryptoJS)})(e,function(e){return e.enc.Hex})})),Qe=c(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r(z()):typeof define==`function`&&define.amd?define([`./core`],r):r(n.CryptoJS)})(e,function(e){return e.enc.Utf8})})),$e=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),B()):typeof define==`function`&&define.amd?define([`./core`,`./cipher-core`],r):r(n.CryptoJS)})(e,function(e){return e.mode.ECB=function(){var t=e.lib.BlockCipherMode.extend();return t.Encryptor=t.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),t.Decryptor=t.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),t}(),e.mode.ECB})})),et=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),B()):typeof define==`function`&&define.amd?define([`./core`,`./cipher-core`],r):r(n.CryptoJS)})(e,function(e){return e.pad.AnsiX923={pad:function(e,t){var n=e.sigBytes,r=t*4,i=r-n%r,a=n+i-1;e.clamp(),e.words[a>>>2]|=i<<24-a%4*8,e.sigBytes+=i},unpad:function(e){var t=e.words[e.sigBytes-1>>>2]&255;e.sigBytes-=t}},e.pad.Ansix923})})),tt=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),B()):typeof define==`function`&&define.amd?define([`./core`,`./cipher-core`],r):r(n.CryptoJS)})(e,function(e){return e.pad.Iso10126={pad:function(t,n){var r=n*4,i=r-t.sigBytes%r;t.concat(e.lib.WordArray.random(i-1)).concat(e.lib.WordArray.create([i<<24],1))},unpad:function(e){var t=e.words[e.sigBytes-1>>>2]&255;e.sigBytes-=t}},e.pad.Iso10126})})),nt=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),B()):typeof define==`function`&&define.amd?define([`./core`,`./cipher-core`],r):r(n.CryptoJS)})(e,function(e){return e.pad.NoPadding={pad:function(){},unpad:function(){}},e.pad.NoPadding})})),rt=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),B()):typeof define==`function`&&define.amd?define([`./core`,`./cipher-core`],r):r(n.CryptoJS)})(e,function(e){return e.pad.Pkcs7})})),it=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),B()):typeof define==`function`&&define.amd?define([`./core`,`./cipher-core`],r):r(n.CryptoJS)})(e,function(e){return e.pad.ZeroPadding={pad:function(e,t){var n=t*4;e.clamp(),e.sigBytes+=n-(e.sigBytes%n||n)},unpad:function(e){for(var t=e.words,n=e.sigBytes-1,n=e.sigBytes-1;n>=0;n--)if(t[n>>>2]>>>24-n%4*8&255){e.sigBytes=n+1;break}}},e.pad.ZeroPadding})})),at=u(Xe(),1),ot=u(z(),1),st=u(Ze(),1),V=u(Qe(),1),ct=u(Ke(),1),lt=u($e(),1);et();var ut=u(tt(),1),dt=u(nt(),1),ft=u(rt(),1),pt=u(it(),1),mt=u(qe(),1);let ht=6e5,gt=1e5,_t=5e6,vt=1024,yt=8388608,bt=`FAST-AES-256-GCM-V1`,xt=`FAST-PBKDF2-SHA256-V1`,H=()=>{let e=globalThis.crypto,t=e?.subtle;if(typeof t?.decrypt!=`function`||typeof t.deriveBits!=`function`||typeof t.deriveKey!=`function`||typeof t.digest!=`function`||typeof t.encrypt!=`function`||typeof t.exportKey!=`function`||typeof t.generateKey!=`function`||typeof t.importKey!=`function`||typeof t.sign!=`function`||typeof t.verify!=`function`)throw Error(`Web Crypto SubtleCrypto is unavailable in the current runtime.`);return e},U=e=>{let t=new Uint8Array(e.byteLength);return t.set(e),t.buffer},W={private:`PRIVATE KEY`,public:`PUBLIC KEY`},St=(e,t)=>`-----BEGIN ${e}-----\n${F(new Uint8Array(t)).match(/.{1,64}/gu)?.join(`
2
- `)??``}\n-----END ${e}-----`,G=(e,t)=>{let n=`-----BEGIN ${t}-----`,r=`-----END ${t}-----`,i=e.trim();if(!i.startsWith(n)||!i.endsWith(r))throw TypeError(`Expected a ${t} PEM value.`);let a=i.slice(n.length,-r.length).replace(/\s+/gu,``);return U(I(a))},Ct=async e=>{let t=H(),[n,r]=await Promise.all([t.subtle.exportKey(`pkcs8`,e.privateKey),t.subtle.exportKey(`spki`,e.publicKey)]);return{privateKey:St(W.private,n),publicKey:St(W.public,r)}},wt=e=>{if(`privateKey`in e&&`publicKey`in e)return e;throw Error(`The runtime did not generate a key pair.`)},Tt=e=>{let t=j(e);if(t.length===0)throw TypeError(`The encryption password cannot be empty.`);if(t.length>vt)throw RangeError(`The UTF-8 password cannot exceed ${vt} bytes.`);return t},Et=e=>{if(!Number.isSafeInteger(e)||e<gt||e>_t)throw RangeError(`iterations must be a safe integer between ${gt} and ${_t}.`);return e},Dt=e=>Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``),Ot=e=>Dt(e).toUpperCase(),kt=async(e,t,n)=>{let r=j(t);if(r.length===0)throw TypeError(`The HMAC key cannot be empty.`);let i=H(),a=await i.subtle.importKey(`raw`,U(r),{hash:n,name:`HMAC`},!1,[`sign`]),o=await i.subtle.sign(`HMAC`,a,U(j(e)));return new Uint8Array(o)};function K(e){if(!Number.isSafeInteger(e)||e<0||e>65536)throw RangeError(`length must be a safe integer from 0 through 65,536.`);let t=new Uint8Array(e),n=globalThis.crypto;if(typeof n?.getRandomValues==`function`)return n.getRandomValues(t);for(let e=0;e<t.length;e+=1)t[e]=Math.floor(Math.random()*256);return t}function At(e,t){let n=Math.max(e.length,t.length),r=e.length===t.length?0:1;for(let i=0;i<n;i+=1)r|=(e[i]??0)^(t[i]??0);return r===0}function jt(e){return(0,ct.default)(e).toString(st.default)}function Mt(e){return(0,mt.default)(e).toString(st.default).toUpperCase()}async function Nt(e){let t=await H().subtle.digest(`SHA-256`,U(j(e)));return new Uint8Array(t)}async function Pt(e){return Ot(await Nt(e))}async function Ft(e){let t=await H().subtle.digest(`SHA-384`,U(j(e)));return new Uint8Array(t)}async function It(e){return Ot(await Ft(e))}async function Lt(e){let t=await H().subtle.digest(`SHA-512`,U(j(e)));return new Uint8Array(t)}async function Rt(e){return Ot(await Lt(e))}async function zt(e,t){return Dt(await kt(e,t,`SHA-256`))}async function Bt(e,t){return Dt(await kt(e,t,`SHA-384`))}async function Vt(e,t){return Dt(await kt(e,t,`SHA-512`))}async function Ht(e,t,n=ht,r=32){let i=Tt(e);if(t.length<8)throw RangeError(`The PBKDF2 salt must contain at least 8 bytes; 16 or more is recommended.`);if(!Number.isSafeInteger(r)||r<1||r>1024)throw RangeError(`outputLength must be a safe integer between 1 and 1,024.`);let a=H(),o=await a.subtle.importKey(`raw`,U(i),`PBKDF2`,!1,[`deriveBits`]),s=await a.subtle.deriveBits({hash:`SHA-256`,iterations:Et(n),name:`PBKDF2`,salt:U(t)},o,r*8);return new Uint8Array(s)}async function Ut(e,t=ht){let n=K(16),r=await Ht(e,n,t);return[xt,String(t),L(n),L(r)].join(`:`)}async function Wt(e,t){try{let n=t.split(`:`);if(n.length!==4||n[0]!==xt)return!1;let r=Et(Number(n[1])),i=R(n[2]??``),a=R(n[3]??``);return i.length!==16||a.length!==32?!1:At(await Ht(e,i,r,a.length),a)}catch{return!1}}async function Gt(e,t=new Uint8Array,n=new Uint8Array,r=32){if(!Number.isSafeInteger(r)||r<1||r>8160)throw RangeError(`outputLength must be a safe integer between 1 and 8,160.`);let i=H(),a=await i.subtle.importKey(`raw`,U(e),`HKDF`,!1,[`deriveBits`]),o=await i.subtle.deriveBits({hash:`SHA-256`,info:U(n),name:`HKDF`,salt:U(t)},a,r*8);return new Uint8Array(o)}function Kt(e,t,n,r=`CBC`,i=`PKCS7`){if(e.trim().length===0||t.trim().length===0||n.trim().length===0)return null;if(r!==`CBC`&&r!==`ECB`)throw RangeError(`cipherMode must be "CBC" or "ECB".`);let a=ft.default;switch(i){case`None`:a=dt.default;break;case`PKCS7`:break;case`Zeros`:a=pt.default;break;case`ANSIX923`:a=ot.default.pad.AnsiX923;break;case`ISO10126`:a=ut.default;break;default:throw RangeError(`paddingMode is not supported.`)}if(i===`None`&&j(e).length%16!=0)throw RangeError(`AES plaintext must contain a whole number of 16-byte blocks when paddingMode is None.`);let o=V.default.parse(t.padEnd(32,`f`).slice(0,32)),s=V.default.parse(n.padEnd(16,`f`).slice(0,16));return at.default.encrypt(e,o,r===`CBC`?{iv:s,padding:a}:{iv:s,mode:lt.default,padding:a}).toString()}function qt(e,t,n,r=`CBC`,i=`PKCS7`){if(e.trim().length===0||t.trim().length===0||n.trim().length===0)return null;if(r!==`CBC`&&r!==`ECB`)throw RangeError(`cipherMode must be "CBC" or "ECB".`);let a=ft.default;switch(i){case`None`:a=dt.default;break;case`PKCS7`:break;case`Zeros`:a=dt.default;break;case`ANSIX923`:a=ot.default.pad.AnsiX923;break;case`ISO10126`:a=ut.default;break;default:throw RangeError(`paddingMode is not supported.`)}let o=I(e);if(o.length===0||o.length%16!=0)throw RangeError(`AES ciphertext must contain one or more complete 16-byte blocks.`);let s=V.default.parse(t.padEnd(32,`f`).slice(0,32)),c=V.default.parse(n.padEnd(16,`f`).slice(0,16));return at.default.decrypt(e,s,r===`CBC`?{iv:c,padding:a}:{iv:c,mode:lt.default,padding:a}).toString(V.default)}async function Jt(e,t){if(t.trim().length===0)throw TypeError(`The encryption key cannot be empty.`);let n=H(),r=await Nt(t),i=await n.subtle.importKey(`raw`,U(r),{name:`AES-GCM`},!1,[`encrypt`]),a=K(12),o=new Uint8Array(await n.subtle.encrypt({iv:U(a),name:`AES-GCM`,tagLength:128},i,U(j(e)))),s=o.length-16,c=new Uint8Array(1+a.length+16+s);return c[0]=1,c.set(a,1),c.set(o.subarray(s),1+a.length),c.set(o.subarray(0,s),1+a.length+16),F(c)}async function Yt(e,t){if(t.trim().length===0)throw TypeError(`The encryption key cannot be empty.`);let n=I(e);if(n.length<29||n[0]!==1)throw TypeError(`The AES-GCM payload format or version is not supported.`);let r=n.subarray(1,13),i=n.subarray(13,29),a=n.subarray(29),o=new Uint8Array(a.length+i.length);o.set(a),o.set(i,a.length);let s=H(),c=await Nt(t),l=await s.subtle.importKey(`raw`,U(c),{name:`AES-GCM`},!1,[`decrypt`]),u=await s.subtle.decrypt({iv:U(r),name:`AES-GCM`,tagLength:128},l,U(o));return ee().decode(u)}async function Xt(e,t,n=ht){let r=Tt(t),i=j(e);if(i.length>yt)throw RangeError(`The UTF-8 plaintext cannot exceed ${yt} bytes.`);let a=Et(n),o=H(),s=K(16),c=K(12),l=await o.subtle.importKey(`raw`,U(r),`PBKDF2`,!1,[`deriveKey`]),u=await o.subtle.deriveKey({hash:`SHA-256`,iterations:a,name:`PBKDF2`,salt:U(s)},l,{length:256,name:`AES-GCM`},!1,[`encrypt`]),d=await o.subtle.encrypt({additionalData:U(j(bt)),iv:U(c),name:`AES-GCM`,tagLength:128},u,i);return[bt,String(a),L(s),L(c),L(new Uint8Array(d))].join(`:`)}async function Zt(e,t){let n=Tt(t);if(e.length>16777216)throw RangeError(`The encrypted payload exceeds the supported size.`);let r=e.split(`:`);if(r.length!==5||r[0]!==bt)throw TypeError(`The encrypted payload format is not supported.`);let i,a,o,s;try{if(i=Et(Number(r[1])),a=R(r[2]??``),o=R(r[3]??``),s=R(r[4]??``),a.length!==16||o.length!==12||s.length<16)throw TypeError(`The encrypted payload has invalid field lengths.`)}catch(e){throw TypeError(`The encrypted payload contains invalid fields.`,{cause:e})}let c=H(),l=ee();try{let e=await c.subtle.importKey(`raw`,U(n),`PBKDF2`,!1,[`deriveKey`]),t=await c.subtle.deriveKey({hash:`SHA-256`,iterations:i,name:`PBKDF2`,salt:U(a)},e,{length:256,name:`AES-GCM`},!1,[`decrypt`]),r=await c.subtle.decrypt({additionalData:U(j(bt)),iv:U(o),name:`AES-GCM`,tagLength:128},t,U(s));return l.decode(r)}catch(e){throw Error(`The payload could not be authenticated or decrypted.`,{cause:e})}}async function Qt(e=2048){if(!Number.isSafeInteger(e)||e<2048||e%256!=0)throw RangeError(`modulusLength must be a safe integer of at least 2048 and divisible by 256.`);let t=H(),n=wt(await t.subtle.generateKey({hash:`SHA-256`,modulusLength:e,name:`RSA-OAEP`,publicExponent:Uint8Array.of(1,0,1)},!0,[`decrypt`,`encrypt`]));return Ct(n)}async function $t(e,t){let n=H(),r=await n.subtle.importKey(`spki`,G(t,W.public),{hash:`SHA-256`,name:`RSA-OAEP`},!1,[`encrypt`]),i=await n.subtle.encrypt({name:`RSA-OAEP`},r,U(j(e)));return F(new Uint8Array(i))}async function en(e,t){let n=H(),r=await n.subtle.importKey(`pkcs8`,G(t,W.private),{hash:`SHA-256`,name:`RSA-OAEP`},!1,[`decrypt`]),i=await n.subtle.decrypt({name:`RSA-OAEP`},r,U(I(e)));return ee().decode(i)}async function tn(e,t){let n=H(),r=await n.subtle.importKey(`pkcs8`,G(t,W.private),{hash:`SHA-256`,name:`RSA-PSS`},!1,[`sign`]),i=await n.subtle.sign({name:`RSA-PSS`,saltLength:32},r,U(j(e)));return F(new Uint8Array(i))}async function nn(e,t,n){let r=H(),i=await r.subtle.importKey(`spki`,G(n,W.public),{hash:`SHA-256`,name:`RSA-PSS`},!1,[`verify`]);return r.subtle.verify({name:`RSA-PSS`,saltLength:32},i,U(I(t)),U(j(e)))}async function rn(e=`P-256`){let t=H(),n=wt(await t.subtle.generateKey({name:`ECDSA`,namedCurve:e},!0,[`sign`,`verify`]));return Ct(n)}async function an(e,t,n=`P-256`){let r=H(),i=await r.subtle.importKey(`pkcs8`,G(t,W.private),{name:`ECDSA`,namedCurve:n},!1,[`sign`]),a=n===`P-256`?`SHA-256`:n===`P-384`?`SHA-384`:`SHA-512`,o=await r.subtle.sign({hash:a,name:`ECDSA`},i,U(j(e)));return F(new Uint8Array(o))}async function on(e,t,n,r=`P-256`){let i=H(),a=await i.subtle.importKey(`spki`,G(n,W.public),{name:`ECDSA`,namedCurve:r},!1,[`verify`]),o=r===`P-256`?`SHA-256`:r===`P-384`?`SHA-384`:`SHA-512`;return i.subtle.verify({hash:o,name:`ECDSA`},a,U(I(t)),U(j(e)))}async function sn(e=`P-256`){let t=H(),n=wt(await t.subtle.generateKey({name:`ECDH`,namedCurve:e},!0,[`deriveBits`]));return Ct(n)}async function cn(e,t,n=`P-256`){let r=H(),[i,a]=await Promise.all([r.subtle.importKey(`pkcs8`,G(e,W.private),{name:`ECDH`,namedCurve:n},!1,[`deriveBits`]),r.subtle.importKey(`spki`,G(t,W.public),{name:`ECDH`,namedCurve:n},!1,[])]),o=n===`P-256`?256:n===`P-384`?384:528,s=await r.subtle.deriveBits({name:`ECDH`,public:a},i,o);return new Uint8Array(s)}async function ln(e,t,n=`P-256`){let r=await cn(e,t,n),i=await H().subtle.digest(`SHA-256`,U(r));return new Uint8Array(i)}let un=e=>{if(!Number.isSafeInteger(e))throw RangeError(`amount must be a safe integer.`)};function q(e){let t=e instanceof Date?new Date(e.getTime()):new Date(e);if(!Number.isFinite(t.getTime()))throw TypeError(`The value is not a valid date.`);return t}function dn(e){return e instanceof Date||typeof e==`number`||typeof e==`string`?Number.isFinite(new Date(e).getTime()):!1}function fn(e){let t=q(e);return t.setHours(0,0,0,0),q(t)}function pn(e){let t=q(e);return t.setHours(23,59,59,999),q(t)}function mn(e,t){un(t);let n=q(e);return n.setDate(n.getDate()+t),q(n)}function hn(e,t){un(t);let n=q(e),r=n.getDate();n.setDate(1),n.setMonth(n.getMonth()+t);let i=new Date(n.getTime());i.setMonth(i.getMonth()+1,0);let a=i.getDate();return n.setDate(Math.min(r,a)),q(n)}function gn(e,t){return un(t),hn(e,t*12)}function _n(e,t){let n=q(e),r=q(t);return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()}function vn(e,t=Date.now()){return q(e).getTime()>q(t).getTime()}function yn(e=Date.now()){return[fn(e),pn(e)]}function bn(e,t,n){let r=q(e).getTime(),i=q(t).getTime(),a=q(n).getTime();if(i>a)throw RangeError(`start cannot be later than end.`);return r>=i&&r<=a}function xn(e,t={}){let n=(q(e).getTime()-q(t.now??Date.now()).getTime())/1e3,r=Math.abs(n),i,a;return r<60?(i=1,a=`second`):r<3600?(i=60,a=`minute`):r<86400?(i=3600,a=`hour`):r<604800?(i=86400,a=`day`):r<2629800?(i=604800,a=`week`):r<31557600?(i=2629800,a=`month`):(i=31557600,a=`year`),new Intl.RelativeTimeFormat(t.locale??`zh-CN`,{numeric:t.numeric??`auto`,style:t.style??`long`}).format(Math.round(n/i),a)}let Sn=(e,t,n)=>{switch(n){case`day`:e.setDate(e.getDate()+t);break;case`month`:e.setMonth(e.getMonth()+t);break;case`year`:e.setFullYear(e.getFullYear()+t)}},J=(e,t,n)=>({text:e,value:()=>{let e=new Date;return Sn(e,t,n),e.setHours(0,0,0,0),e}}),Y=(e,t,n,r)=>({text:e,value:()=>{let e=new Date,i=new Date;return Sn(r?i:e,r?t:-t,n),e.setHours(0,0,0,0),i.setHours(23,59,59,999),[e,i]}});function Cn(e){if(e==null)return``;let t;if(t=typeof e==`string`?new Date(e).getTime():typeof e==`number`?e.toString().length<=10?e*1e3:e:e.getTime(),!Number.isFinite(t))return``;let n=Date.now(),r=n-t,i=Math.abs(r)/6e4,a=Math.abs(r)/36e5,o=Math.abs(r)/864e5,s=new Date(n),c=new Date(t),l=(s.getFullYear()-c.getFullYear())*12+s.getMonth()-c.getMonth(),u=r<0?`后`:`前`;return Math.abs(l)>=12?`${Math.floor(Math.abs(l)/12)}年${u}`:Math.abs(l)>=6?`半年${u}`:Math.abs(l)>=1?`${Math.abs(l)}月${u}`:o>=15?`半月${u}`:o>=7?`${Math.floor(o/7)}周${u}`:o>=1?`${Math.floor(o)}天${u}`:a>=1?`${Math.floor(a)}小时${u}`:i>=1?`${Math.floor(i)}分钟${u}`:`刚刚`}function wn(e=!1){let t=new Date,n=new Date;return Sn(e?n:t,e?1:-1,`month`),t.setHours(0,0,0,0),n.setHours(23,59,59,999),[t,n]}function Tn(e){return e.getTime()>Date.now()}function En(){let e=new Date().getHours();return e<5?`夜深了,注意身体哦!`:e<9?`早上好!欢迎回来!`:e<12?`上午好!欢迎回来!`:e<14?`中午好!欢迎回来!`:e<18?`下午好!欢迎回来!`:e<24?`晚上好!欢迎回来!`:`您好!欢迎回来!`}function Dn(e=!1){return e?[Y(`后1天`,1,`day`,!0),Y(`后3天`,3,`day`,!0),Y(`后1周`,7,`day`,!0),Y(`后1月`,1,`month`,!0),Y(`后3月`,3,`month`,!0),Y(`后6月`,6,`month`,!0),Y(`后1年`,1,`year`,!0)]:[Y(`近1天`,1,`day`,!1),Y(`近3天`,3,`day`,!1),Y(`近1周`,7,`day`,!1),Y(`近1月`,1,`month`,!1),Y(`近3月`,3,`month`,!1),Y(`近6月`,6,`month`,!1),Y(`近1年`,1,`year`,!1)]}function On(e=!1){return e?[J(`今天`,0,`day`),J(`明天`,1,`day`),J(`一周后`,7,`day`),J(`一月后`,1,`month`),J(`一年后`,1,`year`)]:[J(`今天`,0,`day`),J(`昨天`,-1,`day`),J(`一周前`,-7,`day`),J(`一月前`,-1,`month`),J(`一年前`,-1,`year`)]}function kn(){return fn(new Date)}let An=e=>Array.isArray(e),jn=e=>{if(e.length===0||!Number.isFinite(Number(e)))return!1;let t=e.startsWith(`+`)||e.startsWith(`-`)?e.slice(1):e;return!/^0[box]/iu.test(t)},Mn=e=>e.startsWith(`--`)?e:(e.startsWith(`ms`)?`-${e}`:e).replace(/([A-Z])/gu,`-$1`).toLowerCase();function Nn(e,t=`px`){if(e==null||e===``)return``;if(t.length===0)throw RangeError(`unit cannot be empty.`);if(typeof e==`number`){if(!Number.isFinite(e))throw RangeError(`value must be finite.`);return e===0?`0`:`${e}${t}`}let n=e.trim();return jn(n)?Number(n)===0?`0`:`${n}${t}`:e}function Pn(e){if(e==null||e===``)return``;if(An(e))return e.map(e=>Pn(e)).filter(e=>e.length>0).join(` `);if(typeof e==`string`){let t=e.trim();return t.length===0?``:t.endsWith(`;`)?t:`${t};`}return Object.entries(e).filter(([,e])=>e!=null&&e!==``).map(([e,t])=>{if(typeof t==`number`&&!Number.isFinite(t))throw RangeError(`Style property "${e}" must be finite.`);return`${Mn(e)}:${String(t)};`}).join(` `)}let Fn=()=>typeof globalThis.navigator?.userAgent==`string`?globalThis.navigator.userAgent:``,In=()=>typeof globalThis.navigator?.maxTouchPoints==`number`?globalThis.navigator.maxTouchPoints:0;function Ln(){let e=globalThis.window;return e!=null&&e.document!==null&&typeof e.document==`object`}function Rn(){return!Ln()&&typeof Reflect.get(globalThis,`importScripts`)==`function`}function zn(){let e=Reflect.get(globalThis,`process`);if(typeof e!=`object`&&typeof e!=`function`||e===null)return!1;let t=Reflect.get(e,`versions`);return(typeof t==`object`||typeof t==`function`)&&t!==null&&typeof Reflect.get(t,`node`)==`string`}function Bn(){return Reflect.get(globalThis,`uni`)!==void 0}function Vn(){let e=globalThis.crypto,t=e?.subtle;return typeof e?.getRandomValues==`function`&&typeof t?.decrypt==`function`&&typeof t.deriveBits==`function`&&typeof t.deriveKey==`function`&&typeof t.digest==`function`&&typeof t.encrypt==`function`&&typeof t.exportKey==`function`&&typeof t.generateKey==`function`&&typeof t.importKey==`function`&&typeof t.sign==`function`&&typeof t.verify==`function`}function Hn(){return Ln()?`browser`:Rn()?`worker`:zn()?`node`:`unknown`}function Un(e=Fn()){return/Mobile|iPhone|Android.*Mobile|Windows Phone/iu.test(e)}function Wn(e=Fn(),t=In()){return/iPad|Android(?!.*Mobile)|Tablet/iu.test(e)||/Macintosh/iu.test(e)&&t>1}let Gn=()=>{let e=Reflect.get(globalThis,`uni`);if(e===void 0)return;if(typeof e!=`object`&&typeof e!=`function`||e===null)throw TypeError(`The global uni object does not provide synchronous Storage APIs.`);let t=e;if(typeof t.getStorageSync!=`function`||typeof t.getStorageInfoSync!=`function`||typeof t.removeStorageSync!=`function`||typeof t.setStorageSync!=`function`)throw TypeError(`The global uni object does not provide synchronous Storage APIs.`);return t},Kn={decode:e=>JSON.parse(e),encode:e=>{let t=JSON.stringify(e);if(typeof t!=`string`)throw TypeError(`The storage value is not JSON-serializable.`);return t}},qn={decode:e=>JSON.parse(Ae(e)),encode:e=>{let t=JSON.stringify(e);if(typeof t!=`string`)throw TypeError(`The storage value is not JSON-serializable.`);return ke(t)}},X,Jn=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Yn=e=>{if(typeof e!=`string`||e.length===0)throw TypeError(`Storage keys must be non-empty strings.`)},Xn=e=>{let t=e===`local`?globalThis.localStorage:globalThis.sessionStorage;if(t===void 0)throw Error(`${e}Storage is unavailable in the current runtime.`);return{getItem:e=>t.getItem(e),keys:()=>{let e=[];for(let n=0;n<t.length;n+=1){let r=t.key(n);r!==null&&e.push(r)}return e},removeItem:e=>{t.removeItem(e)},setItem:(e,n)=>{t.setItem(e,n)}}},Zn=e=>({getItem:t=>{let n=e.getStorageSync(t);return n===``?e.getStorageInfoSync().keys.includes(t)?n:void 0:n},keys:()=>[...e.getStorageInfoSync().keys],removeItem:t=>{e.removeStorageSync(t)},setItem:(t,n)=>{e.setStorageSync(t,n)}}),Qn=(e,t)=>{if(typeof e!=`string`)throw TypeError(`Storage entry "${t}" is not a string.`);try{let t=JSON.parse(e);if(!Jn(t)||t.version!==3||typeof t.data!=`string`||!(t.expiresAt===null||typeof t.expiresAt==`number`&&Number.isFinite(t.expiresAt)))throw TypeError(`Unsupported storage envelope.`);return{data:t.data,expiresAt:t.expiresAt,version:3}}catch(e){throw TypeError(`Storage entry "${t}" is corrupted or unsupported.`,{cause:e})}},$n=(e,t,n,r)=>{let i=e=>`${t}${e}`,a=e=>{let n=e.keys();if(!Array.isArray(n)||!n.every(e=>typeof e==`string`))throw TypeError(`Storage backend keys must be strings.`);return[...new Set(n.filter(e=>e.startsWith(t)).map(e=>e.slice(t.length)))].sort()},o=(e,t)=>{Yn(t);let n=i(t),a=e.getItem(n);if(a==null)return;let o=Qn(a,n);if(o.expiresAt===null)return o;let s=r();if(!Number.isFinite(s))throw RangeError(`Storage clock must return a finite timestamp.`);if(s<o.expiresAt)return o;e.removeItem(n)};return{prefix:t,clear(){let t=e();for(let e of a(t))t.removeItem(i(e))},get(t){let r=o(e(),t);if(r!==void 0)try{return n.decode(r.data)}catch(e){throw TypeError(`Storage entry "${i(t)}" could not be decoded.`,{cause:e})}},has:t=>o(e(),t)!==void 0,keys:()=>a(e()),pruneExpired(){let t=e(),n=0;for(let e of a(t))t.getItem(i(e))!=null&&o(t,e)===void 0&&(n+=1);return n},remove(t){Yn(t),e().removeItem(i(t))},removeByPrefix(t){Yn(t);let n=e();for(let e of a(n))e.startsWith(t)&&n.removeItem(i(e))},set(t,a,o={}){if(Yn(t),a===void 0)throw TypeError(`Top-level undefined cannot be stored; remove the key instead.`);let s=null;if(o.ttlMs!==void 0){if(!Number.isFinite(o.ttlMs)||o.ttlMs<=0)throw RangeError(`ttlMs must be a positive finite number.`);let e=r();if(!Number.isFinite(e)||!Number.isFinite(e+o.ttlMs))throw RangeError(`Storage expiry exceeds the supported timestamp range.`);s=e+o.ttlMs}let c;try{if(c=n.encode(a),typeof c!=`string`)throw TypeError(`Storage codecs must return strings.`)}catch(e){throw TypeError(`The storage value could not be encoded.`,{cause:e})}e().setItem(i(t),JSON.stringify({data:c,expiresAt:s,version:3}))}}},er=()=>{if(X===void 0&&ir(),X===void 0)throw Error(`Storage configuration could not be initialized.`);return X},tr=(e,t)=>{let n=()=>{let n=e(er());if(n===void 0)throw Error(`${t} is unavailable in uni-app.`);return n};return{get prefix(){return n().prefix},clear:()=>{n().clear()},get:e=>n().get(e),has:e=>n().has(e),keys:()=>n().keys(),pruneExpired:()=>n().pruneExpired(),remove:e=>{n().remove(e)},removeByPrefix:e=>{n().removeByPrefix(e)},set:(e,t,r)=>{n().set(e,t,r)}}},nr=tr(e=>e.local,`Local`),rr=tr(e=>e.session,`Session`);function ir(e={}){let t=e.prefix??`fast__`;if(typeof t!=`string`||t.length===0)throw TypeError(`Storage prefix must be a non-empty string.`);if(e.codec!==void 0&&e.crypto===!0)throw TypeError(`Storage codec and crypto options cannot be used together.`);let n=e.codec??(e.crypto===!0?qn:Kn),r=e.now??Date.now;if(X!==void 0){if(X.prefix===t&&X.codec===n&&X.now===r)return;throw Error(`Storage has already been configured with different options.`)}let i=Gn(),a={codec:n,local:$n(i===void 0?()=>Xn(`local`):()=>Zn(i),t,n,r),now:r,prefix:t};i===void 0&&(a.session=$n(()=>Xn(`session`),t,n,r)),X=a}function ar(){return X!==void 0}let Z=`en-US`,or=1e6,sr=4294967296,cr=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu,lr=e=>{let t=globalThis.crypto;if(typeof t?.getRandomValues==`function`){t.getRandomValues(e);return}let n=e.BYTES_PER_ELEMENT===Uint8Array.BYTES_PER_ELEMENT?256:sr;for(let t=0;t<e.length;t+=1)e[t]=Math.floor(Math.random()*n)},ur=e=>{e[6]=(e[6]??0)&15|64,e[8]=(e[8]??0)&63|128;let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`},dr=(e,t)=>{let n=globalThis.Intl?.Segmenter;if(typeof n!=`function`)throw Error(`Intl.Segmenter is unavailable in the current runtime.`);let r=new n(t??Z,{granularity:`grapheme`});return Array.from(r.segment(e),({segment:e})=>e)};function fr(e,t=10){if(!Number.isSafeInteger(t)||t<0)throw RangeError(`maxDepth must be a non-negative safe integer.`);let n=e;for(let e=0;e<t;e+=1){let e=decodeURIComponent(n);if(e===n)break;n=e}return n}function pr(e){let t=e.indexOf(`#`),n=t<0?e:e.slice(0,t),r=/^[a-z][a-z\d+.-]*:\/\//iu.test(n),i=n.indexOf(`?`);if(r&&i<0)return{};let a=r?n.slice(i+1):n.replace(/^\?/u,``),o={};for(let[e,t]of new URLSearchParams(a)){let n=Object.hasOwn(o,e)?o[e]:void 0;n===void 0?Object.defineProperty(o,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):Array.isArray(n)?n.push(t):Object.defineProperty(o,e,{configurable:!0,enumerable:!0,value:[n,t],writable:!0})}return o}function mr(e){if(e.trim().length===0)return!1;try{return JSON.parse(e),!0}catch{return!1}}function hr(e){return e.trim().replace(/(\p{Ll}|\p{N})(\p{Lu})/gu,`$1 $2`).replace(/(\p{Lu})(\p{Lu}\p{Ll})/gu,`$1 $2`).split(/[\s_-]+/u).filter(e=>e.length>0)}function gr(e,t){let n=Array.from(e),r=n.shift();return r===void 0?``:r.toLocaleUpperCase(t??Z)+n.join(``)}function _r(e,t){let n=Array.from(e),r=n.shift();return r===void 0?``:r.toLocaleLowerCase(t??Z)+n.join(``)}function vr(e,t){return hr(e).map((e,n)=>{let r=e.toLocaleLowerCase(t??Z);return n===0?r:gr(r,t)}).join(``)}function yr(e,t){return gr(vr(e,t),t)}function br(e,t){return hr(e).map(e=>e.toLocaleLowerCase(t??Z)).join(`-`)}function xr(e,t,n=`…`,r){if(!Number.isSafeInteger(t)||t<0)throw RangeError(`maxLength must be a non-negative safe integer.`);let i=dr(e,r);return i.length>t?i.slice(0,t).join(``)+n:e}async function Sr(e){let t=Reflect.get(globalThis,`uni`);if(t!==void 0){if(typeof t!=`object`&&typeof t!=`function`||t===null)throw TypeError(`The global uni object does not provide setClipboardData.`);let n=Reflect.get(t,`setClipboardData`);if(typeof n!=`function`)throw TypeError(`The global uni object does not provide setClipboardData.`);await new Promise((r,i)=>{Reflect.apply(n,t,[{data:e,fail:e=>{i(e instanceof Error?e:Error(`Failed to copy text to the clipboard.`,{cause:e}))},success:r}])});return}let n=globalThis.navigator?.clipboard;if(globalThis.isSecureContext===!0&&typeof n?.writeText==`function`){await n.writeText(e);return}let r=globalThis.document;if(typeof r?.createElement!=`function`||r.body===null||typeof r.execCommand!=`function`)throw Error(`Clipboard access is unavailable in the current runtime.`);let i=r.createElement(`textarea`);i.value=e,i.style.left=`-999999px`,i.style.opacity=`0`,i.style.position=`fixed`,i.style.top=`-999999px`,r.body.appendChild(i);let a=!1;try{i.focus(),i.select(),a=r.execCommand(`copy`)}finally{i.remove()}if(!a)throw Error(`Failed to copy text to the clipboard.`)}function Cr(e,t=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`){if(!Number.isSafeInteger(e)||e<0||e>or)throw RangeError(`length must be a safe integer from 0 through ${or}.`);let n=Array.from(t);if(n.length===0)throw RangeError(`alphabet cannot be empty.`);if(new Set(n).size!==n.length)throw RangeError(`alphabet cannot contain duplicate characters.`);if(n.length>4294967296)throw RangeError(`alphabet cannot contain more than 2^32 characters.`);if(e===0)return``;let r=Math.floor(sr/n.length)*n.length,i=[];for(;i.length<e;){let t=e-i.length,a=new Uint32Array(Math.min(t,16384));lr(a);for(let t of a){if(t>=r)continue;let a=n[t%n.length];if(a!==void 0&&(i.push(a),i.length===e))break}}return i.join(``)}function wr(){let e=globalThis.crypto;if(typeof e?.randomUUID==`function`)return e.randomUUID();let t=new Uint8Array(16);return lr(t),ur(t)}function Tr(e){return cr.test(e)}function Er(e){return e.replace(/[&<>"']/gu,e=>{switch(e){case`&`:return`&amp;`;case`<`:return`&lt;`;case`>`:return`&gt;`;case`"`:return`&quot;`;default:return`&#39;`}})}function Dr(e){return e.trim().replace(/\s+/gu,` `)}let Or=`identity:installation-id`,kr=e=>{if(!Tr(e))throw TypeError(`Installation Identity values must be RFC 4122 version 4 UUIDs.`)},Q,Ar=()=>(Q??=Or,Q);function jr(e={}){let t=e.cacheKey??Or;if(typeof t!=`string`||t.length===0||t.trim()!==t)throw TypeError(`Installation Identity cacheKey must be a non-empty string without surrounding whitespace.`);if(Q===void 0){Q=t;return}if(Q!==t)throw Error(`Installation Identity has already been configured with a different cacheKey.`)}let $={get cacheKey(){return Ar()},deviceId:``,clear(){nr.remove($.cacheKey),$.deviceId=``},getOrCreate(e){let t=e??($.deviceId.length>0?$.deviceId:$.read())??wr();return kr(t),nr.set($.cacheKey,t),$.deviceId=t,t},read(){let e=nr.get($.cacheKey);if(e!==void 0){if(typeof e!=`string`)throw TypeError(`The stored identity is corrupted.`);return kr(e),e}}};function Mr(e){return $.getOrCreate(e)}let Nr={debug:10,info:20,warn:30,error:40},Pr=e=>typeof e==`string`&&Object.hasOwn(Nr,e),Fr=()=>Reflect.get(globalThis,`uni`)!==void 0&&Reflect.get(globalThis,`plus`)!==void 0,Ir=e=>{if(typeof e==`string`)return e;if(typeof e==`bigint`)return`${e.toString()}n`;if(e instanceof Error)return e.stack??`${e.name}: ${e.message}`;let t=new WeakSet;try{let n=JSON.stringify(e,(e,n)=>typeof n==`bigint`?`${n.toString()}n`:typeof n!=`object`||!n?n:t.has(n)?`[Circular]`:(t.add(n),n),2);return typeof n==`string`?n:String(e)}catch{return String(e)}},Lr={debug:(...e)=>{typeof console.debug==`function`?console.debug(...e):console.log(...e)},log:(...e)=>{console.log(...e)},warn:(...e)=>{console.warn(...e)},error:(...e)=>{console.error(...e)}};function Rr(e={}){let t=e.level??`info`,n=e.prefix??`Fast`,r=e.sink??Lr;if(!Pr(t))throw RangeError(`Unknown logger level: ${String(t)}.`);if(typeof n!=`string`||n.length===0)throw RangeError(`Logger prefix must be a non-empty string.`);let i=t,a=n,o=e.uniAppPlusSplit??!1,s=(e,t,n,s)=>{if(typeof t!=`string`)throw TypeError(`Logger scope must be a string.`);if(t.length===0||t.trim()!==t)throw RangeError(`Logger scope must be a non-empty string without surrounding whitespace.`);if(Nr[e]<Nr[i])return;let c=`[${a}:${t}]`,l=e===`info`?`log`:e;if(o&&Fr()){r[l](`${c} ${n}`);for(let e of s)r[l](Ir(e));return}r[l](c,n,...s)};return{debug:(e,t,...n)=>{s(`debug`,e,t,n)},info:(e,t,...n)=>{s(`info`,e,t,n)},warn:(e,t,...n)=>{s(`warn`,e,t,n)},error:(e,t,...n)=>{s(`error`,e,t,n)}}}let zr=Rr(),Br=e=>Array.isArray(e),Vr=(e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0})};function Hr(e){if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function Ur(e,t){return Object.hasOwn(e,t)}function Wr(e,t){let n={};for(let r of t)Object.prototype.propertyIsEnumerable.call(e,r)&&Vr(n,r,e[r]);return n}function Gr(e,t){let n={...e};for(let e of t)Reflect.deleteProperty(n,e);return n}function Kr(e,t){let n={};for(let r of Reflect.ownKeys(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Vr(n,r,t(e[r],r,e));return n}function qr(e,t){if(Object.is(e,t))return!0;let n=Reflect.ownKeys(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t)),r=Reflect.ownKeys(t).filter(e=>Object.prototype.propertyIsEnumerable.call(t,e));return n.length===r.length&&n.every(n=>Object.hasOwn(t,n)&&Object.is(Reflect.get(e,n),Reflect.get(t,n)))}let Jr=e=>{if(typeof e==`number`&&!Number.isFinite(e))throw RangeError(`Query parameter numbers must be finite.`);return String(e)};function Yr(e,t={}){let n=Object.entries(e);t.sort&&n.sort(([e],[t])=>e<t?-1:+(e>t));let r=new URLSearchParams;for(let[e,t]of n){let n=Br(t)?t:[t];for(let t of n)t!=null&&r.append(e,Jr(t))}let i=r.toString();return t.space===`percent`&&(i=i.replace(/\+/gu,`%20`)),i&&t.prefixQuestionMark?`?${i}`:i}let Xr=e=>`on${e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}`;function Zr(e,n,r=[]){let i=new Set(r),a=n;return(0,t.computed)(()=>{let t={},n=new Set;for(let r of Object.keys(e)){if(i.has(r))continue;if(r.length===0||/\s/u.test(r))throw TypeError(`Invalid Vue event name: "${r}".`);let e=Xr(r);if(n.has(e))throw TypeError(`Vue events map to the same handler property: "${e}".`);n.add(e),Object.defineProperty(t,e,{enumerable:!0,value:(...e)=>{a(r,...e)},writable:!0})}return t})}function Qr(e,t){return e(t),t}async function $r(e,...t){if(e!=null)return await e(...t)}let ei=e=>{if(typeof e!=`object`||!e)throw TypeError(`Vue plugin installation requires a Vue 3 App.`);let t=e;if(typeof t.component!=`function`||typeof t.directive!=`function`)throw TypeError(`Vue plugin installation requires component() and directive() registration methods.`);return t},ti=e=>{let t=e.name;if(typeof t!=`string`||t.length===0||/\s/u.test(t))throw TypeError(`Installable Vue components must expose a non-empty name without whitespace.`);return t},ni=(e,t)=>{let n=ti(t),r=e.component(n);if(r!==void 0&&r!==t)throw Error(`Vue component name "${n}" is already registered by another component.`);return{component:t,name:n,registered:r===t}};function ri(e,t){let n=new Set([ti(e)]);if(`install`in Object(e))throw TypeError(`The Vue component already defines an install property.`);let r=Object.entries(t??{});if(t!==void 0&&Object.getOwnPropertySymbols(t).some(e=>Object.prototype.propertyIsEnumerable.call(t,e)))throw TypeError(`Vue component extras must use string property names.`);for(let[t,i]of r){let r=ti(i);if(n.has(r))throw TypeError(`Vue component name "${r}" is registered more than once.`);if(n.add(r),t===`install`||t in Object(e))throw TypeError(`Vue component extra "${t}" would overwrite a property on the main component.`)}let i=e;for(let[e,t]of r)Object.defineProperty(i,e,{configurable:!0,enumerable:!0,value:t,writable:!0});return i.install=t=>{let n=ei(t),i=[e,...r.map(([,e])=>e)].map(e=>ni(n,e));for(let e of i)e.registered||n.component(e.name,e.component)},i}function ii(e){if(`install`in Object(e))throw TypeError(`The Vue component already defines an install property.`);let t=e;return t.install=()=>void 0,t}function ai(e,t){if(t.length===0||/\s/u.test(t)||t.startsWith(`v-`))throw TypeError(`Installable Vue directives require a name without whitespace or a v- prefix.`);if(`install`in Object(e))throw TypeError(`The Vue directive already defines an install property.`);let n=e;return n.install=n=>{let r=ei(n),i=r.directive(t);if(i!==void 0&&i!==e)throw Error(`Vue directive name "${t}" is already registered by another directive.`);i!==e&&r.directive(t,e)},n}function oi(e){return e}function si(e,n,r=[]){let i=new Set(r);return(0,t.computed)(()=>{let t={};for(let r of Reflect.ownKeys(n))i.has(r)||!Object.hasOwn(e,r)||Object.defineProperty(t,r,{configurable:!0,enumerable:!0,value:Reflect.get(e,r),writable:!0});return t})}function ci(e){let n=(0,t.getCurrentInstance)();if(n===null)throw Error(`useRender must be called from inside a setup function.`);n.render=e}function li(){return Object}function ui(e){return e}return e.AESDecrypt=qt,e.AESDecryptAuthenticated=Yt,e.AESDecryptWithPassword=Zt,e.AESEncrypt=Kt,e.AESEncryptAuthenticated=Jt,e.AESEncryptWithPassword=Xt,e.DeriveECDHKeySHA256=ln,e.DeriveECDHSecret=cn,e.ECDSASign=an,e.ECDSAVerify=on,e.FixedTimeEquals=At,e.GenerateECDHKeyPair=sn,e.GenerateECDSAKeyPair=rn,e.GenerateRSAKeyPair=Qt,e.GenerateRandomBytes=K,e.HKDFSHA256=Gt,e.HMACSHA256Encrypt=zt,e.HMACSHA384Encrypt=Bt,e.HMACSHA512Encrypt=Vt,e.HashPasswordPBKDF2SHA256=Ut,e.Local=nr,e.MD5Encrypt=jt,e.PBKDF2SHA256=Ht,e.RSADecryptOAEP=en,e.RSAEncryptOAEP=$t,e.RSASignPSS=tn,e.RSAVerifyPSS=nn,e.SHA1Encrypt=Mt,e.SHA256Bytes=Nt,e.SHA256Encrypt=Pt,e.SHA384Bytes=Ft,e.SHA384Encrypt=It,e.SHA512Bytes=Lt,e.SHA512Encrypt=Rt,e.Session=rr,e.VerifyPasswordPBKDF2SHA256=Wt,e.addCssUnit=Nn,e.addDays=mn,e.addMonths=hn,e.addYears=gn,e.allEqualBy=b,e.average=le,e.base64StorageCodec=qn,e.callOptionalFunction=$r,e.camelCase=vr,e.chunk=d,e.clamp=ae,e.configureInstallationIdentity=jr,e.configureStorage=ir,e.contrastRatio=He,e.copy=Sr,e.createDateRangeShortcuts=Dn,e.createDateShortcuts=On,e.createLogger=Rr,e.createOneMonthRangeFromToday=wn,e.debounce=k,e.decodeBase64=ye,e.decodeBase64Bytes=I,e.decodeBase64Url=xe,e.decodeBase64UrlBytes=R,e.decodeLatin1Base64=Ce,e.decodeSecureBase64=Ae,e.decodeURIComponentRepeatedly=fr,e.definePropType=oi,e.detectRuntime=Hn,e.difference=_,e.encodeBase64=ve,e.encodeBase64Bytes=F,e.encodeBase64Url=be,e.encodeBase64UrlBytes=L,e.encodeLatin1Base64=Se,e.encodeSecureBase64=ke,e.endOfDay=pn,e.escapeHtml=Er,e.formatBytes=de,e.formatChineseRelativeTime=Cn,e.formatHexColor=Ie,e.formatRelativeTime=xn,e.generateUuidV4=wr,e.getLocalDayBounds=yn,e.getLocalTimeGreeting=En,e.getOrCreateInstallationId=Mr,e.getStartOfToday=kn,e.groupBy=h,e.hasDuplicatesBy=y,e.hasOwn=Ur,e.hasWebCrypto=Vn,e.inRange=oe,e.installationIdentity=$,e.intersection=v,e.isBrowser=Ln,e.isDateAfterNow=Tn,e.isFuture=vn,e.isMobileUserAgent=Un,e.isNode=zn,e.isPlainObject=Hr,e.isSameDay=_n,e.isStorageConfigured=ar,e.isTabletUserAgent=Wn,e.isUniApp=Bn,e.isUuidV4=Tr,e.isValidDate=dn,e.isValidJson=mr,e.isWebWorker=Rn,e.isWithinInterval=bn,e.kebabCase=br,e.lerp=ue,e.logger=zr,e.lowerFirst=_r,e.makeSlots=li,e.mapConcurrent=O,e.mapValues=Kr,e.mixHexColorWithBlack=Re,e.mixHexColorWithWhite=ze,e.mixHexColors=Le,e.normalizeWhitespace=Dr,e.omit=Gr,e.parseHexColor=Fe,e.parseQueryString=pr,e.partition=g,e.pascalCase=yr,e.pick=Wr,e.pickHigherContrastColor=Ue,e.randomInt=fe,e.randomString=Cr,e.relativeLuminance=Ve,e.removeNullishValues=f,e.retry=D,e.roundTo=se,e.serializeStyle=Pn,e.shallowEqual=qr,e.sleep=T,e.splitWords=hr,e.startOfDay=fn,e.sum=ce,e.throttle=A,e.toDate=q,e.toQueryString=Yr,e.truncateGraphemes=xr,e.unique=p,e.uniqueBy=m,e.upperFirst=gr,e.useEmits=Zr,e.useExpose=Qr,e.useProps=si,e.useRender=ci,e.withDefineType=ui,e.withInstall=ri,e.withInstallDirective=ai,e.withNoopInstall=ii,e.withTimeout=E,e})({},Vue);
1
+ var FastUtils=(function(e,t){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var n=Object.create,r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,o=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),l=(e,t,n,o)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var c=a(t),l=0,u=c.length,d;l<u;l++)d=c[l],!s.call(e,d)&&d!==n&&r(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(o=i(t,d))||o.enumerable});return e},u=(e,t,i)=>(i=e==null?{}:n(o(e)),l(t||!e||!e.__esModule||!s.call(e,`default`)?r(i,`default`,{value:e,enumerable:!0}):i,e));function d(e,t){if(!Number.isSafeInteger(t)||t<=0)throw RangeError("`size` 必须是正安全整数。");let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function f(e){return e.filter(e=>e!=null)}function p(e){let t=[],n=new Set;for(let r=0;r<e.length;r+=1){if(!(r in e))continue;let i=e[r];n.has(i)||(n.add(i),t.push(i))}return t}function m(e,t){let n=new Set,r=[];for(let i=0;i<e.length;i+=1){let a=e[i];if(a===void 0&&!(i in e))continue;let o=t(a,i);n.has(o)||(n.add(o),r.push(a))}return r}function h(e,t){let n=new Map;return e.forEach((e,r)=>{let i=t(e,r),a=n.get(i);a===void 0?n.set(i,[e]):a.push(e)}),n}function g(e,t){let n=[],r=[];return e.forEach((e,i)=>(t(e,i)?n:r).push(e)),[n,r]}function _(e,t){let n=new Set(p(t));return p(e).filter(e=>!n.has(e))}function v(e,t){let n=new Set(p(t));return p(e).filter(e=>n.has(e))}function y(e,t){let n=new Set;for(let r=0;r<e.length;r+=1){let i=e[r];if(i===void 0&&!(r in e))continue;let a=t(i,r);if(n.has(a))return!0;n.add(a)}return!1}function b(e,t){let n,r=!1;for(let i=0;i<e.length;i+=1){let a=e[i];if(a===void 0&&!(i in e))continue;let o=t(a,i);if(!r){n=o,r=!0;continue}if(!(n===o||Number.isNaN(n)&&Number.isNaN(o)))return!1}return!0}let x=2147483647,S=e=>{let t=Error(`操作已取消。`,{cause:e.reason});return t.name=`AbortError`,t},C=e=>{if(e?.aborted)throw S(e)},w=(e,t=`milliseconds`)=>{if(!Number.isFinite(e)||e<0||e>x)throw RangeError(`\`${t}\` 必须是 0 到 ${x} 之间的有限数。`);return e};function T(e,t={}){let n=w(e),r=t.signal;return C(r),new Promise((e,t)=>{let i;function a(){r!==void 0&&(clearTimeout(i),t(S(r)))}i=setTimeout(()=>{r?.removeEventListener(`abort`,a),e()},n),r?.addEventListener(`abort`,a,{once:!0})})}function E(e,t,n={}){let r=w(t,`timeoutMs`),i=n.signal;return C(i),new Promise((t,a)=>{let o=!1,s;function c(){clearTimeout(s),i?.removeEventListener(`abort`,u)}function l(e){o||(o=!0,c(),e())}function u(){i!==void 0&&l(()=>{a(S(i))})}s=setTimeout(()=>{l(()=>{a(Error(n.message??`操作超过 ${r} 毫秒仍未完成。`))})},r),i?.addEventListener(`abort`,u,{once:!0}),Promise.resolve(e).then(e=>{l(()=>{t(e)})},e=>{l(()=>{a(e)})})})}async function D(e,t={}){let n=t.attempts??3,r=w(t.delayMs??200,`delayMs`),i=w(t.maxDelayMs??3e4,`maxDelayMs`),a=t.factor??2;if(!Number.isSafeInteger(n)||n<=0)throw RangeError("`attempts` 必须是正安全整数。");if(!Number.isFinite(a)||a<1)throw RangeError("`factor` 必须是大于或等于 1 的有限数。");for(let o=1;o<=n;o+=1){C(t.signal);let s=t.signal===void 0?{attempt:o}:{attempt:o,signal:t.signal};try{return await e(s)}catch(e){if(o===n||t.shouldRetry!==void 0&&!await t.shouldRetry(e,s))throw e;await T(r===0?0:Math.min(r*a**(o-1),i),t.signal===void 0?{}:{signal:t.signal})}}throw Error(`重试结束但未获得结果。`)}async function O(e,t,n,r={}){if(!Number.isSafeInteger(t)||t<=0)throw RangeError("`concurrency` 必须是正安全整数。");C(r.signal);let i=Array(e.length),a=0,o=!1,s=async()=>{for(;!o;){C(r.signal);let t=a;if(t>=e.length)return;if(a+=1,t in e)try{i[t]=await n(e[t],t,r.signal)}catch(e){throw o=!0,e}}},c=Math.min(t,e.length);return await Promise.all(Array.from({length:c},()=>s())),i}function k(e,t=300){let n=w(t,`delayMs`),r,i,a=[],o=async()=>{let t=i;if(t===void 0)throw Error(`当前没有待处理的防抖调用。`);i=void 0,r=void 0;let n=a;a=[];try{let r=await e(...t);return n.forEach(e=>{e.resolve(r)}),r}catch(e){throw n.forEach(t=>{t.reject(e)}),e}},s=(...e)=>(i=e,r!==void 0&&clearTimeout(r),r=setTimeout(()=>{o().catch(()=>void 0)},n),new Promise((e,t)=>a.push({reject:t,resolve:e})));return s.cancel=e=>{r!==void 0&&clearTimeout(r),r=void 0,i=void 0;let t=e??Error(`防抖调用已取消。`);a.forEach(e=>{e.reject(t)}),a=[]},s.flush=()=>{if(r!==void 0)return clearTimeout(r),o()},s.pending=()=>r!==void 0,s}function A(e,t=300){let n=w(t,`delayMs`),r,i,a=!1,o=!1,s=()=>{!a&&o&&(i=void 0)},c=(...t)=>{if(i!==void 0)return i;a=!0,o=!1;let c;try{c=Promise.resolve(e(...t))}catch(e){c=Promise.reject(e)}return i=c,c.then(()=>{o=!0,s()},()=>{o=!0,s()}),r=setTimeout(()=>{r=void 0,a=!1,s()},n),c};return c.cancel=()=>{r!==void 0&&clearTimeout(r),r=void 0,a=!1,s()},c.pending=()=>i!==void 0,c}let ee=()=>{let e=globalThis.TextDecoder;if(typeof e!=`function`)throw Error(`当前运行环境不支持 TextDecoder。`);return new e(`utf-8`,{fatal:!0})},te=()=>{let e=globalThis.TextEncoder;if(typeof e!=`function`)throw Error(`当前运行环境不支持 TextEncoder。`);return new e},j=e=>te().encode(e),ne=[`B`,`kB`,`MB`,`GB`,`TB`,`PB`,`EB`,`ZB`,`YB`],re=[`B`,`KiB`,`MiB`,`GiB`,`TiB`,`PiB`,`EiB`,`ZiB`,`YiB`],M=(e,t)=>{if(Number.isNaN(e))throw RangeError(`\`${t}\` 不能是 NaN。`)},N=(e,t)=>{if(!Number.isFinite(e))throw RangeError(`\`${t}\` 必须是有限数。`)},ie=(e,t)=>{if(Object.is(e,-0))return-0;let[n=`0`,r=`0`]=e.toString().split(`e`);return Number(`${n}e${Number(r)+t}`)};function ae(e,t,n){if(M(e,`value`),M(t,`minimum`),M(n,`maximum`),t>n)throw RangeError("`minimum` 不能大于 `maximum`。");return Math.min(Math.max(e,t),n)}function oe(e,t,n,r=!1){if(M(e,`value`),M(t,`minimum`),M(n,`maximum`),t>n)throw RangeError("`minimum` 不能大于 `maximum`。");return e>=t&&(r?e<=n:e<n)}function se(e,t=0){if(N(e,`value`),!Number.isSafeInteger(t)||t<-15||t>15)throw RangeError("`digits` 必须是 -15 到 15 之间的安全整数。");let n=ie(e,t);return Number.isFinite(n)?ie(Math.round(n),-t):e}function ce(e){let t=0,n=0;return e.forEach(e=>{N(e,`value`);let r=e-n,i=t+r;if(!Number.isFinite(i))throw RangeError(`总和超出有限数范围。`);n=i-t-r,t=i}),t}function le(e){let t=0,n=0;return e.forEach(e=>{N(e,`value`),t+=1,n=n*((t-1)/t)+e/t}),t===0?void 0:n}function ue(e,t,n){N(e,`start`),N(t,`end`),N(n,`amount`);let r=e*(1-n)+t*n;if(!Number.isFinite(r))throw RangeError(`插值结果超出有限数范围。`);return r}function de(e,t={}){if(N(e,`bytes`),e<0)throw RangeError("`bytes` 不能为负数。");let n=t.base??1024;if(n!==1e3&&n!==1024)throw RangeError("`base` 必须是 1000 或 1024。");let r=n,i=t.decimals??2;if(!Number.isSafeInteger(i)||i<0||i>20)throw RangeError("`decimals` 必须是 0 到 20 之间的安全整数。");if(e===0)return`0 B`;let a=r===1024?re:ne,o=Math.min(Math.floor(Math.log(e)/Math.log(r)),a.length-1),s=e/r**o;return`${new Intl.NumberFormat(t.locale??`en-US`,{maximumFractionDigits:i,minimumFractionDigits:0,useGrouping:!1}).format(s)} ${a[o]??a.at(-1)}`}function fe(e,t){if(!Number.isSafeInteger(e)||!Number.isSafeInteger(t))throw RangeError("`minimum` 和 `maximumExclusive` 必须是安全整数。");let n=t-e,r=4294967296;if(n<=0||n>r)throw RangeError(`区间不能为空且宽度不能超过 2^32。`);let i=globalThis.crypto,a=typeof i?.getRandomValues==`function`,o=Math.floor(r/n)*n,s=new Uint32Array(1),c;do a?i.getRandomValues(s):s[0]=Math.floor(Math.random()*r),c=s[0]??r;while(c>=o);return e+c%n}let P=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,pe=e=>TypeError(`该值不是有效的 ${e===`url`?`Base64URL`:`Base64`}。`),me=(e,t)=>{let n=t===`standard`?e.replace(/[\t\n\f\r ]+/gu,``):e;if(!(t===`url`?/^[\w-]*={0,2}$/u:/^[A-Za-z\d+/]*={0,2}$/u).test(n)||n.length%4==1||n.includes(`=`)&&n.length%4!=0)throw pe(t);let r=(t===`url`?n.replace(/-/gu,`+`).replace(/_/gu,`/`):n).replace(/=+$/u,``);return r.padEnd(Math.ceil(r.length/4)*4,`=`)},he=e=>{let t=``;for(let n=0;n<e.length;n+=3){let r=e[n]??0,i=e[n+1],a=e[n+2],o=r<<16|(i??0)<<8|(a??0);t+=P[o>>18&63]??``,t+=P[o>>12&63]??``,t+=i===void 0?`=`:P[o>>6&63]??``,t+=a===void 0?`=`:P[o&63]??``}return t},ge=(e,t)=>{let n=me(e,t);if(n.length===0)return new Uint8Array;let r=n.endsWith(`==`)?2:+!!n.endsWith(`=`),i=new Uint8Array(n.length/4*3-r),a=0;for(let e=0;e<n.length;e+=4){let o=P.indexOf(n[e]??``),s=P.indexOf(n[e+1]??``),c=n[e+2]??`=`,l=n[e+3]??`=`,u=c===`=`?0:P.indexOf(c),d=l===`=`?0:P.indexOf(l);if(o<0||s<0||u<0||d<0||e+4===n.length&&(r===2&&s&15||r===1&&u&3))throw pe(t);let f=o<<18|s<<12|u<<6|d;a<i.length&&(i[a++]=f>>16&255),a<i.length&&(i[a++]=f>>8&255),a<i.length&&(i[a++]=f&255)}return i},_e=e=>{let t=ee();try{return t.decode(e)}catch(e){throw TypeError(`解码后的字节不是有效的 UTF-8。`,{cause:e})}};function F(e){return he(e)}function I(e){return ge(e,`standard`)}function ve(e){return he(j(e))}function ye(e){return _e(I(e))}function L(e){return he(e).replace(/\+/gu,`-`).replace(/\//gu,`_`).replace(/=+$/u,``)}function R(e){return ge(e,`url`)}function be(e){return L(j(e))}function xe(e){return _e(R(e))}function Se(e){let t=new Uint8Array(e.length);for(let n=0;n<e.length;n+=1){let r=e.charCodeAt(n);if(r>255)throw TypeError(`待编码字符串包含超出 Latin-1 范围的字符。`);t[n]=r}return F(t)}function Ce(e){let t=I(e),n=``;for(let e of t)n+=String.fromCharCode(e);return n}let we=Object.freeze([{index:977,randomIndex:188},{index:926,randomIndex:201},{index:851,randomIndex:225},{index:700,randomIndex:255},{index:600,randomIndex:268},{index:500,randomIndex:277},{index:400,randomIndex:288},{index:330,randomIndex:327},{index:300,randomIndex:180},{index:200,randomIndex:178},{index:100,randomIndex:124},{index:98,randomIndex:95},{index:92,randomIndex:90},{index:91,randomIndex:87},{index:88,randomIndex:84},{index:82,randomIndex:79},{index:78,randomIndex:71},{index:72,randomIndex:69},{index:68,randomIndex:66},{index:59,randomIndex:55},{index:48,randomIndex:43},{index:42,randomIndex:37},{index:36,randomIndex:30},{index:33,randomIndex:27},{index:24,randomIndex:20},{index:23,randomIndex:18},{index:21,randomIndex:16},{index:17,randomIndex:14},{index:13,randomIndex:9},{index:7,randomIndex:4},{index:5,randomIndex:3},{index:2,randomIndex:1}]),Te=e=>{if(!Number.isSafeInteger(e)||e<0)throw RangeError("`prefixStrLength` 必须是非负安全整数。")},Ee=e=>{let t=``;for(let n=0;n<e;n+=1)t+=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`[fe(0,52)]??``;return t},De=e=>{let t=e;for(let n of we){if(n.index>=e.length)continue;let r=e[n.randomIndex]??e.at(-1)??``;t=t.slice(0,n.index)+r+t.slice(n.index)}return t},Oe=e=>{let t=e;for(let n=we.length-1;n>=0;--n){let r=we[n];r!==void 0&&r.index<e.length&&(t=t.slice(0,r.index)+t.slice(r.index+1))}return t};function ke(e,t=6){if(e.length===0)return``;Te(t);let n=Ee(t),r=Se(encodeURIComponent(e));return t!==0&&(r=De(r)),n+r}function Ae(e,t=6){if(e.length===0)return``;if(Te(t),t>e.length)throw TypeError(`Base64 值的长度小于配置的前缀长度。`);let n=e.slice(t);return t!==0&&(n=Oe(n)),decodeURIComponent(Ce(n))}let je=(e,t)=>{if(!Number.isFinite(e)||e<0||e>255)throw RangeError(`\`${t}\` 必须是 0 到 255 之间的有限数。`)},Me=e=>{if(!Number.isFinite(e)||e<0||e>1)throw RangeError("`alpha` 必须是 0 到 1 之间的有限数。")},Ne=e=>{let t=e.startsWith(`#`)?e.slice(1):e;if(![3,4,6,8].includes(t.length)||!/^[\dA-F]+$/iu.test(t))throw TypeError(`十六进制颜色必须包含 3、4、6 或 8 个十六进制字符。`);return t.length<=4?Array.from(t,e=>`${e}${e}`).join(``):t},Pe=e=>Math.round(e).toString(16).padStart(2,`0`);function Fe(e){let t=Ne(e);return{red:Number.parseInt(t.slice(0,2),16),green:Number.parseInt(t.slice(2,4),16),blue:Number.parseInt(t.slice(4,6),16),alpha:t.length===8?Number.parseInt(t.slice(6,8),16)/255:1}}function Ie(e,t=`alpha`in e&&e.alpha<1){je(e.red,`red`),je(e.green,`green`),je(e.blue,`blue`);let n=`alpha`in e?e.alpha:1;return Me(n),`#${`${Pe(e.red)}${Pe(e.green)}${Pe(e.blue)}`}${t?Pe(n*255):``}`}function Le(e,t,n){if(!Number.isFinite(n)||n<0||n>1)throw RangeError("`amount` 必须是 0 到 1 之间的有限数。");let r=Fe(e),i=Fe(t),a=(e,t)=>e+(t-e)*n;return Ie({red:a(r.red,i.red),green:a(r.green,i.green),blue:a(r.blue,i.blue),alpha:a(r.alpha,i.alpha)},r.alpha<1||i.alpha<1)}function Re(e,t){return Le(e,`#000000`,t)}function ze(e,t){return Le(e,`#ffffff`,t)}let Be=e=>{let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4};function Ve(e){let{red:t,green:n,blue:r}=Fe(e);return .2126*Be(t)+.7152*Be(n)+.0722*Be(r)}function He(e,t){let n=Ve(e),r=Ve(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)}function Ue(e,t=`#000000`,n=`#ffffff`){return He(e,t)>=He(e,n)?t:n}var We=c((()=>{})),z=c(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r():typeof define==`function`&&define.amd?define([],r):n.CryptoJS=r()})(e,function(){var e=e||function(e,t){var n;if(typeof window<`u`&&window.crypto&&(n=window.crypto),typeof self<`u`&&self.crypto&&(n=self.crypto),typeof globalThis<`u`&&globalThis.crypto&&(n=globalThis.crypto),!n&&typeof window<`u`&&window.msCrypto&&(n=window.msCrypto),!n&&typeof global<`u`&&global.crypto&&(n=global.crypto),!n&&typeof require==`function`)try{n=We()}catch{}var r=function(){if(n){if(typeof n.getRandomValues==`function`)try{return n.getRandomValues(new Uint32Array(1))[0]}catch{}if(typeof n.randomBytes==`function`)try{return n.randomBytes(4).readInt32LE()}catch{}}throw Error(`Native crypto module could not be used to get secure random number.`)},i=Object.create||function(){function e(){}return function(t){var n;return e.prototype=t,n=new e,e.prototype=null,n}}(),a={},o=a.lib={},s=o.Base=function(){return{extend:function(e){var t=i(this);return e&&t.mixIn(e),(!t.hasOwnProperty(`init`)||this.init===t.init)&&(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty(`toString`)&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),c=o.WordArray=s.extend({init:function(e,n){e=this.words=e||[],this.sigBytes=n==t?e.length*4:n},toString:function(e){return(e||u).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes,i=e.sigBytes;if(this.clamp(),r%4)for(var a=0;a<i;a++){var o=n[a>>>2]>>>24-a%4*8&255;t[r+a>>>2]|=o<<24-(r+a)%4*8}else for(var s=0;s<i;s+=4)t[r+s>>>2]=n[s>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=s.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],n=0;n<e;n+=4)t.push(r());return new c.init(t,e)}}),l=a.enc={},u=l.Hex={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i<n;i++){var a=t[i>>>2]>>>24-i%4*8&255;r.push((a>>>4).toString(16)),r.push((a&15).toString(16))}return r.join(``)},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r+=2)n[r>>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new c.init(n,t/2)}},d=l.Latin1={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i<n;i++){var a=t[i>>>2]>>>24-i%4*8&255;r.push(String.fromCharCode(a))}return r.join(``)},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r++)n[r>>>2]|=(e.charCodeAt(r)&255)<<24-r%4*8;return new c.init(n,t)}},f=l.Utf8={stringify:function(e){try{return decodeURIComponent(escape(d.stringify(e)))}catch{throw Error(`Malformed UTF-8 data`)}},parse:function(e){return d.parse(unescape(encodeURIComponent(e)))}},p=o.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){typeof e==`string`&&(e=f.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n,r=this._data,i=r.words,a=r.sigBytes,o=this.blockSize,s=a/(o*4);s=t?e.ceil(s):e.max((s|0)-this._minBufferSize,0);var l=s*o,u=e.min(l*4,a);if(l){for(var d=0;d<l;d+=o)this._doProcessBlock(i,d);n=i.splice(0,l),r.sigBytes-=u}return new c.init(n,u)},clone:function(){var e=s.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});o.Hasher=p.extend({cfg:s.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){p.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,n){return new e.init(n).finalize(t)}},_createHmacHelper:function(e){return function(t,n){return new m.HMAC.init(e,n).finalize(t)}}});var m=a.algo={};return a}(Math);return e})})),Ge=c(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r(z()):typeof define==`function`&&define.amd?define([`./core`],r):r(n.CryptoJS)})(e,function(e){return(function(){var t=e,n=t.lib.WordArray,r=t.enc;r.Base64={stringify:function(e){var t=e.words,n=e.sigBytes,r=this._map;e.clamp();for(var i=[],a=0;a<n;a+=3)for(var o=t[a>>>2]>>>24-a%4*8&255,s=t[a+1>>>2]>>>24-(a+1)%4*8&255,c=t[a+2>>>2]>>>24-(a+2)%4*8&255,l=o<<16|s<<8|c,u=0;u<4&&a+u*.75<n;u++)i.push(r.charAt(l>>>6*(3-u)&63));var d=r.charAt(64);if(d)for(;i.length%4;)i.push(d);return i.join(``)},parse:function(e){var t=e.length,n=this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var a=0;a<n.length;a++)r[n.charCodeAt(a)]=a}var o=n.charAt(64);if(o){var s=e.indexOf(o);s!==-1&&(t=s)}return i(e,t,r)},_map:`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=`};function i(e,t,r){for(var i=[],a=0,o=0;o<t;o++)if(o%4){var s=r[e.charCodeAt(o-1)]<<o%4*2|r[e.charCodeAt(o)]>>>6-o%4*2;i[a>>>2]|=s<<24-a%4*8,a++}return n.create(i,a)}})(),e.enc.Base64})})),Ke=c(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r(z()):typeof define==`function`&&define.amd?define([`./core`],r):r(n.CryptoJS)})(e,function(e){return(function(t){var n=e,r=n.lib,i=r.WordArray,a=r.Hasher,o=n.algo,s=[];(function(){for(var e=0;e<64;e++)s[e]=t.abs(t.sin(e+1))*4294967296|0})();var c=o.MD5=a.extend({_doReset:function(){this._hash=new i.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,t){for(var n=0;n<16;n++){var r=t+n,i=e[r];e[r]=(i<<8|i>>>24)&16711935|(i<<24|i>>>8)&4278255360}var a=this._hash.words,o=e[t+0],c=e[t+1],p=e[t+2],m=e[t+3],h=e[t+4],g=e[t+5],_=e[t+6],v=e[t+7],y=e[t+8],b=e[t+9],x=e[t+10],S=e[t+11],C=e[t+12],w=e[t+13],T=e[t+14],E=e[t+15],D=a[0],O=a[1],k=a[2],A=a[3];D=l(D,O,k,A,o,7,s[0]),A=l(A,D,O,k,c,12,s[1]),k=l(k,A,D,O,p,17,s[2]),O=l(O,k,A,D,m,22,s[3]),D=l(D,O,k,A,h,7,s[4]),A=l(A,D,O,k,g,12,s[5]),k=l(k,A,D,O,_,17,s[6]),O=l(O,k,A,D,v,22,s[7]),D=l(D,O,k,A,y,7,s[8]),A=l(A,D,O,k,b,12,s[9]),k=l(k,A,D,O,x,17,s[10]),O=l(O,k,A,D,S,22,s[11]),D=l(D,O,k,A,C,7,s[12]),A=l(A,D,O,k,w,12,s[13]),k=l(k,A,D,O,T,17,s[14]),O=l(O,k,A,D,E,22,s[15]),D=u(D,O,k,A,c,5,s[16]),A=u(A,D,O,k,_,9,s[17]),k=u(k,A,D,O,S,14,s[18]),O=u(O,k,A,D,o,20,s[19]),D=u(D,O,k,A,g,5,s[20]),A=u(A,D,O,k,x,9,s[21]),k=u(k,A,D,O,E,14,s[22]),O=u(O,k,A,D,h,20,s[23]),D=u(D,O,k,A,b,5,s[24]),A=u(A,D,O,k,T,9,s[25]),k=u(k,A,D,O,m,14,s[26]),O=u(O,k,A,D,y,20,s[27]),D=u(D,O,k,A,w,5,s[28]),A=u(A,D,O,k,p,9,s[29]),k=u(k,A,D,O,v,14,s[30]),O=u(O,k,A,D,C,20,s[31]),D=d(D,O,k,A,g,4,s[32]),A=d(A,D,O,k,y,11,s[33]),k=d(k,A,D,O,S,16,s[34]),O=d(O,k,A,D,T,23,s[35]),D=d(D,O,k,A,c,4,s[36]),A=d(A,D,O,k,h,11,s[37]),k=d(k,A,D,O,v,16,s[38]),O=d(O,k,A,D,x,23,s[39]),D=d(D,O,k,A,w,4,s[40]),A=d(A,D,O,k,o,11,s[41]),k=d(k,A,D,O,m,16,s[42]),O=d(O,k,A,D,_,23,s[43]),D=d(D,O,k,A,b,4,s[44]),A=d(A,D,O,k,C,11,s[45]),k=d(k,A,D,O,E,16,s[46]),O=d(O,k,A,D,p,23,s[47]),D=f(D,O,k,A,o,6,s[48]),A=f(A,D,O,k,v,10,s[49]),k=f(k,A,D,O,T,15,s[50]),O=f(O,k,A,D,g,21,s[51]),D=f(D,O,k,A,C,6,s[52]),A=f(A,D,O,k,m,10,s[53]),k=f(k,A,D,O,x,15,s[54]),O=f(O,k,A,D,c,21,s[55]),D=f(D,O,k,A,y,6,s[56]),A=f(A,D,O,k,E,10,s[57]),k=f(k,A,D,O,_,15,s[58]),O=f(O,k,A,D,w,21,s[59]),D=f(D,O,k,A,h,6,s[60]),A=f(A,D,O,k,S,10,s[61]),k=f(k,A,D,O,p,15,s[62]),O=f(O,k,A,D,b,21,s[63]),a[0]=a[0]+D|0,a[1]=a[1]+O|0,a[2]=a[2]+k|0,a[3]=a[3]+A|0},_doFinalize:function(){var e=this._data,n=e.words,r=this._nDataBytes*8,i=e.sigBytes*8;n[i>>>5]|=128<<24-i%32;var a=t.floor(r/4294967296),o=r;n[(i+64>>>9<<4)+15]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360,n[(i+64>>>9<<4)+14]=(o<<8|o>>>24)&16711935|(o<<24|o>>>8)&4278255360,e.sigBytes=(n.length+1)*4,this._process();for(var s=this._hash,c=s.words,l=0;l<4;l++){var u=c[l];c[l]=(u<<8|u>>>24)&16711935|(u<<24|u>>>8)&4278255360}return s},clone:function(){var e=a.clone.call(this);return e._hash=this._hash.clone(),e}});function l(e,t,n,r,i,a,o){var s=e+(t&n|~t&r)+i+o;return(s<<a|s>>>32-a)+t}function u(e,t,n,r,i,a,o){var s=e+(t&r|n&~r)+i+o;return(s<<a|s>>>32-a)+t}function d(e,t,n,r,i,a,o){var s=e+(t^n^r)+i+o;return(s<<a|s>>>32-a)+t}function f(e,t,n,r,i,a,o){var s=e+(n^(t|~r))+i+o;return(s<<a|s>>>32-a)+t}n.MD5=a._createHelper(c),n.HmacMD5=a._createHmacHelper(c)})(Math),e.MD5})})),qe=c(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r(z()):typeof define==`function`&&define.amd?define([`./core`],r):r(n.CryptoJS)})(e,function(e){return(function(){var t=e,n=t.lib,r=n.WordArray,i=n.Hasher,a=t.algo,o=[],s=a.SHA1=i.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],a=n[2],s=n[3],c=n[4],l=0;l<80;l++){if(l<16)o[l]=e[t+l]|0;else{var u=o[l-3]^o[l-8]^o[l-14]^o[l-16];o[l]=u<<1|u>>>31}var d=(r<<5|r>>>27)+c+o[l];d+=l<20?(i&a|~i&s)+1518500249:l<40?(i^a^s)+1859775393:l<60?(i&a|i&s|a&s)-1894007588:(i^a^s)-899497514,c=s,s=a,a=i<<30|i>>>2,i=r,r=d}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+a|0,n[3]=n[3]+s|0,n[4]=n[4]+c|0},_doFinalize:function(){var e=this._data,t=e.words,n=this._nDataBytes*8,r=e.sigBytes*8;return t[r>>>5]|=128<<24-r%32,t[(r+64>>>9<<4)+14]=Math.floor(n/4294967296),t[(r+64>>>9<<4)+15]=n,e.sigBytes=t.length*4,this._process(),this._hash},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA1=i._createHelper(s),t.HmacSHA1=i._createHmacHelper(s)})(),e.SHA1})})),Je=c(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r(z()):typeof define==`function`&&define.amd?define([`./core`],r):r(n.CryptoJS)})(e,function(e){(function(){var t=e,n=t.lib.Base,r=t.enc.Utf8,i=t.algo;i.HMAC=n.extend({init:function(e,t){e=this._hasher=new e.init,typeof t==`string`&&(t=r.parse(t));var n=e.blockSize,i=n*4;t.sigBytes>i&&(t=e.finalize(t)),t.clamp();for(var a=this._oKey=t.clone(),o=this._iKey=t.clone(),s=a.words,c=o.words,l=0;l<n;l++)s[l]^=1549556828,c[l]^=909522486;a.sigBytes=o.sigBytes=i,this.reset()},reset:function(){var e=this._hasher;e.reset(),e.update(this._iKey)},update:function(e){return this._hasher.update(e),this},finalize:function(e){var t=this._hasher,n=t.finalize(e);return t.reset(),t.finalize(this._oKey.clone().concat(n))}})})()})})),Ye=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),qe(),Je()):typeof define==`function`&&define.amd?define([`./core`,`./sha1`,`./hmac`],r):r(n.CryptoJS)})(e,function(e){return(function(){var t=e,n=t.lib,r=n.Base,i=n.WordArray,a=t.algo,o=a.MD5,s=a.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:o,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n,r=this.cfg,a=r.hasher.create(),o=i.create(),s=o.words,c=r.keySize,l=r.iterations;s.length<c;){n&&a.update(n),n=a.update(e).finalize(t),a.reset();for(var u=1;u<l;u++)n=a.finalize(n),a.reset();o.concat(n)}return o.sigBytes=c*4,o}});t.EvpKDF=function(e,t,n){return s.create(n).compute(e,t)}})(),e.EvpKDF})})),B=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),Ye()):typeof define==`function`&&define.amd?define([`./core`,`./evpkdf`],r):r(n.CryptoJS)})(e,function(e){e.lib.Cipher||function(t){var n=e,r=n.lib,i=r.Base,a=r.WordArray,o=r.BufferedBlockAlgorithm,s=n.enc;s.Utf8;var c=s.Base64,l=n.algo.EvpKDF,u=r.Cipher=o.extend({cfg:i.extend(),createEncryptor:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,n){this.cfg=this.cfg.extend(n),this._xformMode=e,this._key=t,this.reset()},reset:function(){o.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){return e&&this._append(e),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function e(e){return typeof e==`string`?S:y}return function(t){return{encrypt:function(n,r,i){return e(r).encrypt(t,n,r,i)},decrypt:function(n,r,i){return e(r).decrypt(t,n,r,i)}}}}()});r.StreamCipher=u.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var d=n.mode={},f=r.BlockCipherMode=i.extend({createEncryptor:function(e,t){return this.Encryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}}),p=d.CBC=function(){var e=f.extend();e.Encryptor=e.extend({processBlock:function(e,t){var r=this._cipher,i=r.blockSize;n.call(this,e,t,i),r.encryptBlock(e,t),this._prevBlock=e.slice(t,t+i)}}),e.Decryptor=e.extend({processBlock:function(e,t){var r=this._cipher,i=r.blockSize,a=e.slice(t,t+i);r.decryptBlock(e,t),n.call(this,e,t,i),this._prevBlock=a}});function n(e,n,r){var i,a=this._iv;a?(i=a,this._iv=t):i=this._prevBlock;for(var o=0;o<r;o++)e[n+o]^=i[o]}return e}(),m=n.pad={},h=m.Pkcs7={pad:function(e,t){for(var n=t*4,r=n-e.sigBytes%n,i=r<<24|r<<16|r<<8|r,o=[],s=0;s<r;s+=4)o.push(i);var c=a.create(o,r);e.concat(c)},unpad:function(e){var t=e.words[e.sigBytes-1>>>2]&255;e.sigBytes-=t}};r.BlockCipher=u.extend({cfg:u.cfg.extend({mode:p,padding:h}),reset:function(){var e;u.reset.call(this);var t=this.cfg,n=t.iv,r=t.mode;this._xformMode==this._ENC_XFORM_MODE?e=r.createEncryptor:(e=r.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==e?this._mode.init(this,n&&n.words):(this._mode=e.call(r,this,n&&n.words),this._mode.__creator=e)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e,t=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(t.pad(this._data,this.blockSize),e=this._process(!0)):(e=this._process(!0),t.unpad(e)),e},blockSize:4});var g=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),_=n.format={},v=_.OpenSSL={stringify:function(e){var t,n=e.ciphertext,r=e.salt;return t=r?a.create([1398893684,1701076831]).concat(r).concat(n):n,t.toString(c)},parse:function(e){var t,n=c.parse(e),r=n.words;return r[0]==1398893684&&r[1]==1701076831&&(t=a.create(r.slice(2,4)),r.splice(0,4),n.sigBytes-=16),g.create({ciphertext:n,salt:t})}},y=r.SerializableCipher=i.extend({cfg:i.extend({format:v}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r),a=i.finalize(t),o=i.cfg;return g.create({ciphertext:a,key:n,iv:o.iv,algorithm:e,mode:o.mode,padding:o.padding,blockSize:e.blockSize,formatter:r.format})},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),e.createDecryptor(n,r).finalize(t.ciphertext)},_parse:function(e,t){return typeof e==`string`?t.parse(e,this):e}}),b=n.kdf={},x=b.OpenSSL={execute:function(e,t,n,r,i){if(r||=a.random(8),i)var o=l.create({keySize:t+n,hasher:i}).compute(e,r);else var o=l.create({keySize:t+n}).compute(e,r);var s=a.create(o.words.slice(t),n*4);return o.sigBytes=t*4,g.create({key:o,iv:s,salt:r})}},S=r.PasswordBasedCipher=y.extend({cfg:y.cfg.extend({kdf:x}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=r.kdf.execute(n,e.keySize,e.ivSize,r.salt,r.hasher);r.iv=i.iv;var a=y.encrypt.call(this,e,t,i.key,r);return a.mixIn(i),a},decrypt:function(e,t,n,r){r=this.cfg.extend(r),t=this._parse(t,r.format);var i=r.kdf.execute(n,e.keySize,e.ivSize,t.salt,r.hasher);return r.iv=i.iv,y.decrypt.call(this,e,t,i.key,r)}})}()})})),Xe=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),Ge(),Ke(),Ye(),B()):typeof define==`function`&&define.amd?define([`./core`,`./enc-base64`,`./md5`,`./evpkdf`,`./cipher-core`],r):r(n.CryptoJS)})(e,function(e){return(function(){var t=e,n=t.lib.BlockCipher,r=t.algo,i=[],a=[],o=[],s=[],c=[],l=[],u=[],d=[],f=[],p=[];(function(){for(var e=[],t=0;t<256;t++)t<128?e[t]=t<<1:e[t]=t<<1^283;for(var n=0,r=0,t=0;t<256;t++){var m=r^r<<1^r<<2^r<<3^r<<4;m=m>>>8^m&255^99,i[n]=m,a[m]=n;var h=e[n],g=e[h],_=e[g],v=e[m]*257^m*16843008;o[n]=v<<24|v>>>8,s[n]=v<<16|v>>>16,c[n]=v<<8|v>>>24,l[n]=v;var v=_*16843009^g*65537^h*257^n*16843008;u[m]=v<<24|v>>>8,d[m]=v<<16|v>>>16,f[m]=v<<8|v>>>24,p[m]=v,n?(n=h^e[e[e[_^h]]],r^=e[e[r]]):n=r=1}})();var m=[0,1,2,4,8,16,32,64,128,27,54],h=r.AES=n.extend({_doReset:function(){var e;if(!(this._nRounds&&this._keyPriorReset===this._key)){for(var t=this._keyPriorReset=this._key,n=t.words,r=t.sigBytes/4,a=((this._nRounds=r+6)+1)*4,o=this._keySchedule=[],s=0;s<a;s++)s<r?o[s]=n[s]:(e=o[s-1],s%r?r>6&&s%r==4&&(e=i[e>>>24]<<24|i[e>>>16&255]<<16|i[e>>>8&255]<<8|i[e&255]):(e=e<<8|e>>>24,e=i[e>>>24]<<24|i[e>>>16&255]<<16|i[e>>>8&255]<<8|i[e&255],e^=m[s/r|0]<<24),o[s]=o[s-r]^e);for(var c=this._invKeySchedule=[],l=0;l<a;l++){var s=a-l;if(l%4)var e=o[s];else var e=o[s-4];l<4||s<=4?c[l]=e:c[l]=u[i[e>>>24]]^d[i[e>>>16&255]]^f[i[e>>>8&255]]^p[i[e&255]]}}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,o,s,c,l,i)},decryptBlock:function(e,t){var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n,this._doCryptBlock(e,t,this._invKeySchedule,u,d,f,p,a);var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,a,o,s){for(var c=this._nRounds,l=e[t]^n[0],u=e[t+1]^n[1],d=e[t+2]^n[2],f=e[t+3]^n[3],p=4,m=1;m<c;m++){var h=r[l>>>24]^i[u>>>16&255]^a[d>>>8&255]^o[f&255]^n[p++],g=r[u>>>24]^i[d>>>16&255]^a[f>>>8&255]^o[l&255]^n[p++],_=r[d>>>24]^i[f>>>16&255]^a[l>>>8&255]^o[u&255]^n[p++],v=r[f>>>24]^i[l>>>16&255]^a[u>>>8&255]^o[d&255]^n[p++];l=h,u=g,d=_,f=v}var h=(s[l>>>24]<<24|s[u>>>16&255]<<16|s[d>>>8&255]<<8|s[f&255])^n[p++],g=(s[u>>>24]<<24|s[d>>>16&255]<<16|s[f>>>8&255]<<8|s[l&255])^n[p++],_=(s[d>>>24]<<24|s[f>>>16&255]<<16|s[l>>>8&255]<<8|s[u&255])^n[p++],v=(s[f>>>24]<<24|s[l>>>16&255]<<16|s[u>>>8&255]<<8|s[d&255])^n[p++];e[t]=h,e[t+1]=g,e[t+2]=_,e[t+3]=v},keySize:8});t.AES=n._createHelper(h)})(),e.AES})})),Ze=c(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r(z()):typeof define==`function`&&define.amd?define([`./core`],r):r(n.CryptoJS)})(e,function(e){return e.enc.Hex})})),Qe=c(((e,t)=>{(function(n,r){typeof e==`object`?t.exports=e=r(z()):typeof define==`function`&&define.amd?define([`./core`],r):r(n.CryptoJS)})(e,function(e){return e.enc.Utf8})})),$e=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),B()):typeof define==`function`&&define.amd?define([`./core`,`./cipher-core`],r):r(n.CryptoJS)})(e,function(e){return e.mode.ECB=function(){var t=e.lib.BlockCipherMode.extend();return t.Encryptor=t.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),t.Decryptor=t.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),t}(),e.mode.ECB})})),et=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),B()):typeof define==`function`&&define.amd?define([`./core`,`./cipher-core`],r):r(n.CryptoJS)})(e,function(e){return e.pad.AnsiX923={pad:function(e,t){var n=e.sigBytes,r=t*4,i=r-n%r,a=n+i-1;e.clamp(),e.words[a>>>2]|=i<<24-a%4*8,e.sigBytes+=i},unpad:function(e){var t=e.words[e.sigBytes-1>>>2]&255;e.sigBytes-=t}},e.pad.Ansix923})})),tt=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),B()):typeof define==`function`&&define.amd?define([`./core`,`./cipher-core`],r):r(n.CryptoJS)})(e,function(e){return e.pad.Iso10126={pad:function(t,n){var r=n*4,i=r-t.sigBytes%r;t.concat(e.lib.WordArray.random(i-1)).concat(e.lib.WordArray.create([i<<24],1))},unpad:function(e){var t=e.words[e.sigBytes-1>>>2]&255;e.sigBytes-=t}},e.pad.Iso10126})})),nt=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),B()):typeof define==`function`&&define.amd?define([`./core`,`./cipher-core`],r):r(n.CryptoJS)})(e,function(e){return e.pad.NoPadding={pad:function(){},unpad:function(){}},e.pad.NoPadding})})),rt=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),B()):typeof define==`function`&&define.amd?define([`./core`,`./cipher-core`],r):r(n.CryptoJS)})(e,function(e){return e.pad.Pkcs7})})),it=c(((e,t)=>{(function(n,r,i){typeof e==`object`?t.exports=e=r(z(),B()):typeof define==`function`&&define.amd?define([`./core`,`./cipher-core`],r):r(n.CryptoJS)})(e,function(e){return e.pad.ZeroPadding={pad:function(e,t){var n=t*4;e.clamp(),e.sigBytes+=n-(e.sigBytes%n||n)},unpad:function(e){for(var t=e.words,n=e.sigBytes-1,n=e.sigBytes-1;n>=0;n--)if(t[n>>>2]>>>24-n%4*8&255){e.sigBytes=n+1;break}}},e.pad.ZeroPadding})})),at=u(Xe(),1),ot=u(z(),1),st=u(Ze(),1),V=u(Qe(),1),ct=u(Ke(),1),lt=u($e(),1);et();var ut=u(tt(),1),dt=u(nt(),1),ft=u(rt(),1),pt=u(it(),1),mt=u(qe(),1);let ht=6e5,gt=1e5,_t=5e6,vt=1024,yt=8388608,bt=`FAST-AES-256-GCM-V1`,xt=`FAST-PBKDF2-SHA256-V1`,H=()=>{let e=globalThis.crypto,t=e?.subtle;if(typeof t?.decrypt!=`function`||typeof t.deriveBits!=`function`||typeof t.deriveKey!=`function`||typeof t.digest!=`function`||typeof t.encrypt!=`function`||typeof t.exportKey!=`function`||typeof t.generateKey!=`function`||typeof t.importKey!=`function`||typeof t.sign!=`function`||typeof t.verify!=`function`)throw Error(`当前运行环境不支持 Web Crypto SubtleCrypto。`);return e},U=e=>{let t=new Uint8Array(e.byteLength);return t.set(e),t.buffer},W={private:`PRIVATE KEY`,public:`PUBLIC KEY`},St=(e,t)=>`-----BEGIN ${e}-----\n${F(new Uint8Array(t)).match(/.{1,64}/gu)?.join(`
2
+ `)??``}\n-----END ${e}-----`,G=(e,t)=>{let n=`-----BEGIN ${t}-----`,r=`-----END ${t}-----`,i=e.trim();if(!i.startsWith(n)||!i.endsWith(r))throw TypeError(`应提供 ${t} 格式的 PEM 值。`);let a=i.slice(n.length,-r.length).replace(/\s+/gu,``);return U(I(a))},Ct=async e=>{let t=H(),[n,r]=await Promise.all([t.subtle.exportKey(`pkcs8`,e.privateKey),t.subtle.exportKey(`spki`,e.publicKey)]);return{privateKey:St(W.private,n),publicKey:St(W.public,r)}},wt=e=>{if(`privateKey`in e&&`publicKey`in e)return e;throw Error(`当前运行环境未生成密钥对。`)},Tt=e=>{let t=j(e);if(t.length===0)throw TypeError(`加密密码不能为空。`);if(t.length>vt)throw RangeError(`UTF-8 密码不能超过 ${vt} 字节。`);return t},Et=e=>{if(!Number.isSafeInteger(e)||e<gt||e>_t)throw RangeError(`\`iterations\` 必须是 ${gt} 到 ${_t} 之间的安全整数。`);return e},Dt=e=>Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``),Ot=e=>Dt(e).toUpperCase(),kt=async(e,t,n)=>{let r=j(t);if(r.length===0)throw TypeError(`HMAC 密钥不能为空。`);let i=H(),a=await i.subtle.importKey(`raw`,U(r),{hash:n,name:`HMAC`},!1,[`sign`]),o=await i.subtle.sign(`HMAC`,a,U(j(e)));return new Uint8Array(o)};function K(e){if(!Number.isSafeInteger(e)||e<0||e>65536)throw RangeError("`length` 必须是 0 到 65,536 之间的安全整数。");let t=new Uint8Array(e),n=globalThis.crypto;if(typeof n?.getRandomValues==`function`)return n.getRandomValues(t);for(let e=0;e<t.length;e+=1)t[e]=Math.floor(Math.random()*256);return t}function At(e,t){let n=Math.max(e.length,t.length),r=e.length===t.length?0:1;for(let i=0;i<n;i+=1)r|=(e[i]??0)^(t[i]??0);return r===0}function jt(e){return(0,ct.default)(e).toString(st.default)}function Mt(e){return(0,mt.default)(e).toString(st.default).toUpperCase()}async function Nt(e){let t=await H().subtle.digest(`SHA-256`,U(j(e)));return new Uint8Array(t)}async function Pt(e){return Ot(await Nt(e))}async function Ft(e){let t=await H().subtle.digest(`SHA-384`,U(j(e)));return new Uint8Array(t)}async function It(e){return Ot(await Ft(e))}async function Lt(e){let t=await H().subtle.digest(`SHA-512`,U(j(e)));return new Uint8Array(t)}async function Rt(e){return Ot(await Lt(e))}async function zt(e,t){return Dt(await kt(e,t,`SHA-256`))}async function Bt(e,t){return Dt(await kt(e,t,`SHA-384`))}async function Vt(e,t){return Dt(await kt(e,t,`SHA-512`))}async function Ht(e,t,n=ht,r=32){let i=Tt(e);if(t.length<8)throw RangeError(`PBKDF2 盐值必须至少包含 8 字节,建议不少于 16 字节。`);if(!Number.isSafeInteger(r)||r<1||r>1024)throw RangeError("`outputLength` 必须是 1 到 1,024 之间的安全整数。");let a=H(),o=await a.subtle.importKey(`raw`,U(i),`PBKDF2`,!1,[`deriveBits`]),s=await a.subtle.deriveBits({hash:`SHA-256`,iterations:Et(n),name:`PBKDF2`,salt:U(t)},o,r*8);return new Uint8Array(s)}async function Ut(e,t=ht){let n=K(16),r=await Ht(e,n,t);return[xt,String(t),L(n),L(r)].join(`:`)}async function Wt(e,t){try{let n=t.split(`:`);if(n.length!==4||n[0]!==xt)return!1;let r=Et(Number(n[1])),i=R(n[2]??``),a=R(n[3]??``);return i.length!==16||a.length!==32?!1:At(await Ht(e,i,r,a.length),a)}catch{return!1}}async function Gt(e,t=new Uint8Array,n=new Uint8Array,r=32){if(!Number.isSafeInteger(r)||r<1||r>8160)throw RangeError("`outputLength` 必须是 1 到 8,160 之间的安全整数。");let i=H(),a=await i.subtle.importKey(`raw`,U(e),`HKDF`,!1,[`deriveBits`]),o=await i.subtle.deriveBits({hash:`SHA-256`,info:U(n),name:`HKDF`,salt:U(t)},a,r*8);return new Uint8Array(o)}function Kt(e,t,n,r=`CBC`,i=`PKCS7`){if(e.trim().length===0||t.trim().length===0||n.trim().length===0)return null;if(r!==`CBC`&&r!==`ECB`)throw RangeError("`cipherMode` 必须是 `CBC` 或 `ECB`。");let a=ft.default;switch(i){case`None`:a=dt.default;break;case`PKCS7`:break;case`Zeros`:a=pt.default;break;case`ANSIX923`:a=ot.default.pad.AnsiX923;break;case`ISO10126`:a=ut.default;break;default:throw RangeError("不支持当前 `paddingMode`。")}if(i===`None`&&j(e).length%16!=0)throw RangeError("当 `paddingMode` 为 `None` 时,AES 明文长度必须是 16 字节的整数倍。");let o=V.default.parse(t.padEnd(32,`f`).slice(0,32)),s=V.default.parse(n.padEnd(16,`f`).slice(0,16));return at.default.encrypt(e,o,r===`CBC`?{iv:s,padding:a}:{iv:s,mode:lt.default,padding:a}).toString()}function qt(e,t,n,r=`CBC`,i=`PKCS7`){if(e.trim().length===0||t.trim().length===0||n.trim().length===0)return null;if(r!==`CBC`&&r!==`ECB`)throw RangeError("`cipherMode` 必须是 `CBC` 或 `ECB`。");let a=ft.default;switch(i){case`None`:a=dt.default;break;case`PKCS7`:break;case`Zeros`:a=dt.default;break;case`ANSIX923`:a=ot.default.pad.AnsiX923;break;case`ISO10126`:a=ut.default;break;default:throw RangeError("不支持当前 `paddingMode`。")}let o=I(e);if(o.length===0||o.length%16!=0)throw RangeError(`AES 密文必须至少包含一个完整的 16 字节块。`);let s=V.default.parse(t.padEnd(32,`f`).slice(0,32)),c=V.default.parse(n.padEnd(16,`f`).slice(0,16));return at.default.decrypt(e,s,r===`CBC`?{iv:c,padding:a}:{iv:c,mode:lt.default,padding:a}).toString(V.default)}async function Jt(e,t){if(t.trim().length===0)throw TypeError(`加密密钥不能为空。`);let n=H(),r=await Nt(t),i=await n.subtle.importKey(`raw`,U(r),{name:`AES-GCM`},!1,[`encrypt`]),a=K(12),o=new Uint8Array(await n.subtle.encrypt({iv:U(a),name:`AES-GCM`,tagLength:128},i,U(j(e)))),s=o.length-16,c=new Uint8Array(1+a.length+16+s);return c[0]=1,c.set(a,1),c.set(o.subarray(s),1+a.length),c.set(o.subarray(0,s),1+a.length+16),F(c)}async function Yt(e,t){if(t.trim().length===0)throw TypeError(`加密密钥不能为空。`);let n=I(e);if(n.length<29||n[0]!==1)throw TypeError(`不支持该 AES-GCM 载荷格式或版本。`);let r=n.subarray(1,13),i=n.subarray(13,29),a=n.subarray(29),o=new Uint8Array(a.length+i.length);o.set(a),o.set(i,a.length);let s=H(),c=await Nt(t),l=await s.subtle.importKey(`raw`,U(c),{name:`AES-GCM`},!1,[`decrypt`]),u=await s.subtle.decrypt({iv:U(r),name:`AES-GCM`,tagLength:128},l,U(o));return ee().decode(u)}async function Xt(e,t,n=ht){let r=Tt(t),i=j(e);if(i.length>yt)throw RangeError(`UTF-8 明文不能超过 ${yt} 字节。`);let a=Et(n),o=H(),s=K(16),c=K(12),l=await o.subtle.importKey(`raw`,U(r),`PBKDF2`,!1,[`deriveKey`]),u=await o.subtle.deriveKey({hash:`SHA-256`,iterations:a,name:`PBKDF2`,salt:U(s)},l,{length:256,name:`AES-GCM`},!1,[`encrypt`]),d=await o.subtle.encrypt({additionalData:U(j(bt)),iv:U(c),name:`AES-GCM`,tagLength:128},u,i);return[bt,String(a),L(s),L(c),L(new Uint8Array(d))].join(`:`)}async function Zt(e,t){let n=Tt(t);if(e.length>16777216)throw RangeError(`加密载荷超出支持的大小。`);let r=e.split(`:`);if(r.length!==5||r[0]!==bt)throw TypeError(`不支持该加密载荷格式。`);let i,a,o,s;try{if(i=Et(Number(r[1])),a=R(r[2]??``),o=R(r[3]??``),s=R(r[4]??``),a.length!==16||o.length!==12||s.length<16)throw TypeError(`加密载荷的字段长度无效。`)}catch(e){throw TypeError(`加密载荷包含无效字段。`,{cause:e})}let c=H(),l=ee();try{let e=await c.subtle.importKey(`raw`,U(n),`PBKDF2`,!1,[`deriveKey`]),t=await c.subtle.deriveKey({hash:`SHA-256`,iterations:i,name:`PBKDF2`,salt:U(a)},e,{length:256,name:`AES-GCM`},!1,[`decrypt`]),r=await c.subtle.decrypt({additionalData:U(j(bt)),iv:U(o),name:`AES-GCM`,tagLength:128},t,U(s));return l.decode(r)}catch(e){throw Error(`无法认证或解密载荷。`,{cause:e})}}async function Qt(e=2048){if(!Number.isSafeInteger(e)||e<2048||e%256!=0)throw RangeError("`modulusLength` 必须是大于或等于 2048 且能被 256 整除的安全整数。");let t=H(),n=wt(await t.subtle.generateKey({hash:`SHA-256`,modulusLength:e,name:`RSA-OAEP`,publicExponent:Uint8Array.of(1,0,1)},!0,[`decrypt`,`encrypt`]));return Ct(n)}async function $t(e,t){let n=H(),r=await n.subtle.importKey(`spki`,G(t,W.public),{hash:`SHA-256`,name:`RSA-OAEP`},!1,[`encrypt`]),i=await n.subtle.encrypt({name:`RSA-OAEP`},r,U(j(e)));return F(new Uint8Array(i))}async function en(e,t){let n=H(),r=await n.subtle.importKey(`pkcs8`,G(t,W.private),{hash:`SHA-256`,name:`RSA-OAEP`},!1,[`decrypt`]),i=await n.subtle.decrypt({name:`RSA-OAEP`},r,U(I(e)));return ee().decode(i)}async function tn(e,t){let n=H(),r=await n.subtle.importKey(`pkcs8`,G(t,W.private),{hash:`SHA-256`,name:`RSA-PSS`},!1,[`sign`]),i=await n.subtle.sign({name:`RSA-PSS`,saltLength:32},r,U(j(e)));return F(new Uint8Array(i))}async function nn(e,t,n){let r=H(),i=await r.subtle.importKey(`spki`,G(n,W.public),{hash:`SHA-256`,name:`RSA-PSS`},!1,[`verify`]);return r.subtle.verify({name:`RSA-PSS`,saltLength:32},i,U(I(t)),U(j(e)))}async function rn(e=`P-256`){let t=H(),n=wt(await t.subtle.generateKey({name:`ECDSA`,namedCurve:e},!0,[`sign`,`verify`]));return Ct(n)}async function an(e,t,n=`P-256`){let r=H(),i=await r.subtle.importKey(`pkcs8`,G(t,W.private),{name:`ECDSA`,namedCurve:n},!1,[`sign`]),a=n===`P-256`?`SHA-256`:n===`P-384`?`SHA-384`:`SHA-512`,o=await r.subtle.sign({hash:a,name:`ECDSA`},i,U(j(e)));return F(new Uint8Array(o))}async function on(e,t,n,r=`P-256`){let i=H(),a=await i.subtle.importKey(`spki`,G(n,W.public),{name:`ECDSA`,namedCurve:r},!1,[`verify`]),o=r===`P-256`?`SHA-256`:r===`P-384`?`SHA-384`:`SHA-512`;return i.subtle.verify({hash:o,name:`ECDSA`},a,U(I(t)),U(j(e)))}async function sn(e=`P-256`){let t=H(),n=wt(await t.subtle.generateKey({name:`ECDH`,namedCurve:e},!0,[`deriveBits`]));return Ct(n)}async function cn(e,t,n=`P-256`){let r=H(),[i,a]=await Promise.all([r.subtle.importKey(`pkcs8`,G(e,W.private),{name:`ECDH`,namedCurve:n},!1,[`deriveBits`]),r.subtle.importKey(`spki`,G(t,W.public),{name:`ECDH`,namedCurve:n},!1,[])]),o=n===`P-256`?256:n===`P-384`?384:528,s=await r.subtle.deriveBits({name:`ECDH`,public:a},i,o);return new Uint8Array(s)}async function ln(e,t,n=`P-256`){let r=await cn(e,t,n),i=await H().subtle.digest(`SHA-256`,U(r));return new Uint8Array(i)}let un=e=>{if(!Number.isSafeInteger(e))throw RangeError("`amount` 必须是安全整数。")};function q(e){let t=e instanceof Date?new Date(e.getTime()):new Date(e);if(!Number.isFinite(t.getTime()))throw TypeError(`该值不是有效日期。`);return t}function dn(e){return e instanceof Date||typeof e==`number`||typeof e==`string`?Number.isFinite(new Date(e).getTime()):!1}function fn(e){let t=q(e);return t.setHours(0,0,0,0),q(t)}function pn(e){let t=q(e);return t.setHours(23,59,59,999),q(t)}function mn(e,t){un(t);let n=q(e);return n.setDate(n.getDate()+t),q(n)}function hn(e,t){un(t);let n=q(e),r=n.getDate();n.setDate(1),n.setMonth(n.getMonth()+t);let i=new Date(n.getTime());i.setMonth(i.getMonth()+1,0);let a=i.getDate();return n.setDate(Math.min(r,a)),q(n)}function gn(e,t){return un(t),hn(e,t*12)}function _n(e,t){let n=q(e),r=q(t);return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()}function vn(e,t=Date.now()){return q(e).getTime()>q(t).getTime()}function yn(e=Date.now()){return[fn(e),pn(e)]}function bn(e,t,n){let r=q(e).getTime(),i=q(t).getTime(),a=q(n).getTime();if(i>a)throw RangeError("`start` 不能晚于 `end`。");return r>=i&&r<=a}function xn(e,t={}){let n=(q(e).getTime()-q(t.now??Date.now()).getTime())/1e3,r=Math.abs(n),i,a;return r<60?(i=1,a=`second`):r<3600?(i=60,a=`minute`):r<86400?(i=3600,a=`hour`):r<604800?(i=86400,a=`day`):r<2629800?(i=604800,a=`week`):r<31557600?(i=2629800,a=`month`):(i=31557600,a=`year`),new Intl.RelativeTimeFormat(t.locale??`zh-CN`,{numeric:t.numeric??`auto`,style:t.style??`long`}).format(Math.round(n/i),a)}let Sn=(e,t,n)=>{switch(n){case`day`:e.setDate(e.getDate()+t);break;case`month`:e.setMonth(e.getMonth()+t);break;case`year`:e.setFullYear(e.getFullYear()+t)}},J=(e,t,n)=>({text:e,value:()=>{let e=new Date;return Sn(e,t,n),e.setHours(0,0,0,0),e}}),Y=(e,t,n,r)=>({text:e,value:()=>{let e=new Date,i=new Date;return Sn(r?i:e,r?t:-t,n),e.setHours(0,0,0,0),i.setHours(23,59,59,999),[e,i]}});function Cn(e){if(e==null)return``;let t;if(t=typeof e==`string`?new Date(e).getTime():typeof e==`number`?e.toString().length<=10?e*1e3:e:e.getTime(),!Number.isFinite(t))return``;let n=Date.now(),r=n-t,i=Math.abs(r)/6e4,a=Math.abs(r)/36e5,o=Math.abs(r)/864e5,s=new Date(n),c=new Date(t),l=(s.getFullYear()-c.getFullYear())*12+s.getMonth()-c.getMonth(),u=r<0?`后`:`前`;return Math.abs(l)>=12?`${Math.floor(Math.abs(l)/12)}年${u}`:Math.abs(l)>=6?`半年${u}`:Math.abs(l)>=1?`${Math.abs(l)}月${u}`:o>=15?`半月${u}`:o>=7?`${Math.floor(o/7)}周${u}`:o>=1?`${Math.floor(o)}天${u}`:a>=1?`${Math.floor(a)}小时${u}`:i>=1?`${Math.floor(i)}分钟${u}`:`刚刚`}function wn(e=!1){let t=new Date,n=new Date;return Sn(e?n:t,e?1:-1,`month`),t.setHours(0,0,0,0),n.setHours(23,59,59,999),[t,n]}function Tn(e){return e.getTime()>Date.now()}function En(){let e=new Date().getHours();return e<5?`夜深了,注意身体哦!`:e<9?`早上好!欢迎回来!`:e<12?`上午好!欢迎回来!`:e<14?`中午好!欢迎回来!`:e<18?`下午好!欢迎回来!`:e<24?`晚上好!欢迎回来!`:`您好!欢迎回来!`}function Dn(e=!1){return e?[Y(`后1天`,1,`day`,!0),Y(`后3天`,3,`day`,!0),Y(`后1周`,7,`day`,!0),Y(`后1月`,1,`month`,!0),Y(`后3月`,3,`month`,!0),Y(`后6月`,6,`month`,!0),Y(`后1年`,1,`year`,!0)]:[Y(`近1天`,1,`day`,!1),Y(`近3天`,3,`day`,!1),Y(`近1周`,7,`day`,!1),Y(`近1月`,1,`month`,!1),Y(`近3月`,3,`month`,!1),Y(`近6月`,6,`month`,!1),Y(`近1年`,1,`year`,!1)]}function On(e=!1){return e?[J(`今天`,0,`day`),J(`明天`,1,`day`),J(`一周后`,7,`day`),J(`一月后`,1,`month`),J(`一年后`,1,`year`)]:[J(`今天`,0,`day`),J(`昨天`,-1,`day`),J(`一周前`,-7,`day`),J(`一月前`,-1,`month`),J(`一年前`,-1,`year`)]}function kn(){return fn(new Date)}let An=e=>Array.isArray(e),jn=e=>{if(e.length===0||!Number.isFinite(Number(e)))return!1;let t=e.startsWith(`+`)||e.startsWith(`-`)?e.slice(1):e;return!/^0[box]/iu.test(t)},Mn=e=>e.startsWith(`--`)?e:(e.startsWith(`ms`)?`-${e}`:e).replace(/([A-Z])/gu,`-$1`).toLowerCase();function Nn(e,t=`px`){if(e==null||e===``)return``;if(t.length===0)throw RangeError("`unit` 不能为空。");if(typeof e==`number`){if(!Number.isFinite(e))throw RangeError("`value` 必须是有限数。");return e===0?`0`:`${e}${t}`}let n=e.trim();return jn(n)?Number(n)===0?`0`:`${n}${t}`:e}function Pn(e){if(e==null||e===``)return``;if(An(e))return e.map(e=>Pn(e)).filter(e=>e.length>0).join(` `);if(typeof e==`string`){let t=e.trim();return t.length===0?``:t.endsWith(`;`)?t:`${t};`}return Object.entries(e).filter(([,e])=>e!=null&&e!==``).map(([e,t])=>{if(typeof t==`number`&&!Number.isFinite(t))throw RangeError(`样式属性“${e}”必须是有限数。`);return`${Mn(e)}:${String(t)};`}).join(` `)}let Fn=()=>typeof globalThis.navigator?.userAgent==`string`?globalThis.navigator.userAgent:``,In=()=>typeof globalThis.navigator?.maxTouchPoints==`number`?globalThis.navigator.maxTouchPoints:0;function Ln(){let e=globalThis.window;return e!=null&&e.document!==null&&typeof e.document==`object`}function Rn(){return!Ln()&&typeof Reflect.get(globalThis,`importScripts`)==`function`}function zn(){let e=Reflect.get(globalThis,`process`);if(typeof e!=`object`&&typeof e!=`function`||e===null)return!1;let t=Reflect.get(e,`versions`);return(typeof t==`object`||typeof t==`function`)&&t!==null&&typeof Reflect.get(t,`node`)==`string`}function Bn(){return Reflect.get(globalThis,`uni`)!==void 0}function Vn(){let e=globalThis.crypto,t=e?.subtle;return typeof e?.getRandomValues==`function`&&typeof t?.decrypt==`function`&&typeof t.deriveBits==`function`&&typeof t.deriveKey==`function`&&typeof t.digest==`function`&&typeof t.encrypt==`function`&&typeof t.exportKey==`function`&&typeof t.generateKey==`function`&&typeof t.importKey==`function`&&typeof t.sign==`function`&&typeof t.verify==`function`}function Hn(){return Ln()?`browser`:Rn()?`worker`:zn()?`node`:`unknown`}function Un(e=Fn()){return/Mobile|iPhone|Android.*Mobile|Windows Phone/iu.test(e)}function Wn(e=Fn(),t=In()){return/iPad|Android(?!.*Mobile)|Tablet/iu.test(e)||/Macintosh/iu.test(e)&&t>1}let Gn=()=>{let e=Reflect.get(globalThis,`uni`);if(e===void 0)return;if(typeof e!=`object`&&typeof e!=`function`||e===null)throw TypeError(`全局 uni 对象未提供同步 Storage API。`);let t=e;if(typeof t.getStorageSync!=`function`||typeof t.getStorageInfoSync!=`function`||typeof t.removeStorageSync!=`function`||typeof t.setStorageSync!=`function`)throw TypeError(`全局 uni 对象未提供同步 Storage API。`);return t},Kn={decode:e=>JSON.parse(e),encode:e=>{let t=JSON.stringify(e);if(typeof t!=`string`)throw TypeError(`存储值无法序列化为 JSON。`);return t}},qn={decode:e=>JSON.parse(Ae(e)),encode:e=>{let t=JSON.stringify(e);if(typeof t!=`string`)throw TypeError(`存储值无法序列化为 JSON。`);return ke(t)}},X,Jn=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Yn=e=>{if(typeof e!=`string`||e.length===0)throw TypeError(`Storage 键必须是非空字符串。`)},Xn=e=>{let t=e===`local`?globalThis.localStorage:globalThis.sessionStorage;if(t===void 0)throw Error(`当前运行环境不支持 ${e}Storage。`);return{getItem:e=>t.getItem(e),keys:()=>{let e=[];for(let n=0;n<t.length;n+=1){let r=t.key(n);r!==null&&e.push(r)}return e},removeItem:e=>{t.removeItem(e)},setItem:(e,n)=>{t.setItem(e,n)}}},Zn=e=>({getItem:t=>{let n=e.getStorageSync(t);return n===``?e.getStorageInfoSync().keys.includes(t)?n:void 0:n},keys:()=>[...e.getStorageInfoSync().keys],removeItem:t=>{e.removeStorageSync(t)},setItem:(t,n)=>{e.setStorageSync(t,n)}}),Qn=(e,t)=>{if(typeof e!=`string`)throw TypeError(`Storage 条目“${t}”不是字符串。`);try{let t=JSON.parse(e);if(!Jn(t)||t.version!==3||typeof t.data!=`string`||!(t.expiresAt===null||typeof t.expiresAt==`number`&&Number.isFinite(t.expiresAt)))throw TypeError(`不支持该存储包络。`);return{data:t.data,expiresAt:t.expiresAt,version:3}}catch(e){throw TypeError(`Storage 条目“${t}”已损坏或不受支持。`,{cause:e})}},$n=(e,t,n,r)=>{let i=e=>`${t}${e}`,a=e=>{let n=e.keys();if(!Array.isArray(n)||!n.every(e=>typeof e==`string`))throw TypeError(`Storage 后端返回的键必须是字符串。`);return[...new Set(n.filter(e=>e.startsWith(t)).map(e=>e.slice(t.length)))].sort()},o=(e,t)=>{Yn(t);let n=i(t),a=e.getItem(n);if(a==null)return;let o=Qn(a,n);if(o.expiresAt===null)return o;let s=r();if(!Number.isFinite(s))throw RangeError(`Storage 时钟必须返回有限时间戳。`);if(s<o.expiresAt)return o;e.removeItem(n)};return{prefix:t,clear(){let t=e();for(let e of a(t))t.removeItem(i(e))},get(t){let r=o(e(),t);if(r!==void 0)try{return n.decode(r.data)}catch(e){throw TypeError(`无法解码 Storage 条目“${i(t)}”。`,{cause:e})}},has:t=>o(e(),t)!==void 0,keys:()=>a(e()),pruneExpired(){let t=e(),n=0;for(let e of a(t))t.getItem(i(e))!=null&&o(t,e)===void 0&&(n+=1);return n},remove(t){Yn(t),e().removeItem(i(t))},removeByPrefix(t){Yn(t);let n=e();for(let e of a(n))e.startsWith(t)&&n.removeItem(i(e))},set(t,a,o={}){if(Yn(t),a===void 0)throw TypeError("不能存储顶层 `undefined`,请改为移除对应的键。");let s=null;if(o.ttlMs!==void 0){if(!Number.isFinite(o.ttlMs)||o.ttlMs<=0)throw RangeError("`ttlMs` 必须是大于 0 的有限数。");let e=r();if(!Number.isFinite(e)||!Number.isFinite(e+o.ttlMs))throw RangeError(`Storage 过期时间超出支持的时间戳范围。`);s=e+o.ttlMs}let c;try{if(c=n.encode(a),typeof c!=`string`)throw TypeError(`Storage Codec 必须返回字符串。`)}catch(e){throw TypeError(`无法编码存储值。`,{cause:e})}e().setItem(i(t),JSON.stringify({data:c,expiresAt:s,version:3}))}}},er=()=>{if(X===void 0&&ir(),X===void 0)throw Error(`无法初始化 Storage 配置。`);return X},tr=(e,t)=>{let n=()=>{let n=e(er());if(n===void 0)throw Error(`uni-app 中不支持 ${t}。`);return n};return{get prefix(){return n().prefix},clear:()=>{n().clear()},get:e=>n().get(e),has:e=>n().has(e),keys:()=>n().keys(),pruneExpired:()=>n().pruneExpired(),remove:e=>{n().remove(e)},removeByPrefix:e=>{n().removeByPrefix(e)},set:(e,t,r)=>{n().set(e,t,r)}}},nr=tr(e=>e.local,`Local`),rr=tr(e=>e.session,`Session`);function ir(e={}){let t=e.prefix??`fast__`;if(typeof t!=`string`||t.length===0)throw TypeError(`Storage 前缀必须是非空字符串。`);if(e.codec!==void 0&&e.crypto===!0)throw TypeError(`Storage 的 Codec 和加密选项不能同时使用。`);let n=e.codec??(e.crypto===!0?qn:Kn),r=e.now??Date.now;if(X!==void 0){if(X.prefix===t&&X.codec===n&&X.now===r)return;throw Error(`Storage 已使用其他选项完成配置。`)}let i=Gn(),a={codec:n,local:$n(i===void 0?()=>Xn(`local`):()=>Zn(i),t,n,r),now:r,prefix:t};i===void 0&&(a.session=$n(()=>Xn(`session`),t,n,r)),X=a}function ar(){return X!==void 0}let Z=`en-US`,or=1e6,sr=4294967296,cr=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu,lr=e=>{let t=globalThis.crypto;if(typeof t?.getRandomValues==`function`){t.getRandomValues(e);return}let n=e.BYTES_PER_ELEMENT===Uint8Array.BYTES_PER_ELEMENT?256:sr;for(let t=0;t<e.length;t+=1)e[t]=Math.floor(Math.random()*n)},ur=e=>{e[6]=(e[6]??0)&15|64,e[8]=(e[8]??0)&63|128;let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`},dr=(e,t)=>{let n=globalThis.Intl?.Segmenter;if(typeof n!=`function`)throw Error(`当前运行环境不支持 Intl.Segmenter。`);let r=new n(t??Z,{granularity:`grapheme`});return Array.from(r.segment(e),({segment:e})=>e)};function fr(e,t=10){if(!Number.isSafeInteger(t)||t<0)throw RangeError("`maxDepth` 必须是非负安全整数。");let n=e;for(let e=0;e<t;e+=1){let e=decodeURIComponent(n);if(e===n)break;n=e}return n}function pr(e){let t=e.indexOf(`#`),n=t<0?e:e.slice(0,t),r=/^[a-z][a-z\d+.-]*:\/\//iu.test(n),i=n.indexOf(`?`);if(r&&i<0)return{};let a=r?n.slice(i+1):n.replace(/^\?/u,``),o={};for(let[e,t]of new URLSearchParams(a)){let n=Object.hasOwn(o,e)?o[e]:void 0;n===void 0?Object.defineProperty(o,e,{configurable:!0,enumerable:!0,value:t,writable:!0}):Array.isArray(n)?n.push(t):Object.defineProperty(o,e,{configurable:!0,enumerable:!0,value:[n,t],writable:!0})}return o}function mr(e){if(e.trim().length===0)return!1;try{return JSON.parse(e),!0}catch{return!1}}function hr(e){return e.trim().replace(/(\p{Ll}|\p{N})(\p{Lu})/gu,`$1 $2`).replace(/(\p{Lu})(\p{Lu}\p{Ll})/gu,`$1 $2`).split(/[\s_-]+/u).filter(e=>e.length>0)}function gr(e,t){let n=Array.from(e),r=n.shift();return r===void 0?``:r.toLocaleUpperCase(t??Z)+n.join(``)}function _r(e,t){let n=Array.from(e),r=n.shift();return r===void 0?``:r.toLocaleLowerCase(t??Z)+n.join(``)}function vr(e,t){return hr(e).map((e,n)=>{let r=e.toLocaleLowerCase(t??Z);return n===0?r:gr(r,t)}).join(``)}function yr(e,t){return gr(vr(e,t),t)}function br(e,t){return hr(e).map(e=>e.toLocaleLowerCase(t??Z)).join(`-`)}function xr(e,t,n=`…`,r){if(!Number.isSafeInteger(t)||t<0)throw RangeError("`maxLength` 必须是非负安全整数。");let i=dr(e,r);return i.length>t?i.slice(0,t).join(``)+n:e}async function Sr(e){let t=Reflect.get(globalThis,`uni`);if(t!==void 0){if(typeof t!=`object`&&typeof t!=`function`||t===null)throw TypeError("全局 uni 对象未提供 `setClipboardData`。");let n=Reflect.get(t,`setClipboardData`);if(typeof n!=`function`)throw TypeError("全局 uni 对象未提供 `setClipboardData`。");await new Promise((r,i)=>{Reflect.apply(n,t,[{data:e,fail:e=>{i(e instanceof Error?e:Error(`文本复制到剪贴板失败。`,{cause:e}))},success:r}])});return}let n=globalThis.navigator?.clipboard;if(globalThis.isSecureContext===!0&&typeof n?.writeText==`function`){await n.writeText(e);return}let r=globalThis.document;if(typeof r?.createElement!=`function`||r.body===null||typeof r.execCommand!=`function`)throw Error(`当前运行环境不支持访问剪贴板。`);let i=r.createElement(`textarea`);i.value=e,i.style.left=`-999999px`,i.style.opacity=`0`,i.style.position=`fixed`,i.style.top=`-999999px`,r.body.appendChild(i);let a;try{i.focus(),i.select(),a=r.execCommand(`copy`)}finally{i.remove()}if(!a)throw Error(`文本复制到剪贴板失败。`)}function Cr(e,t=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`){if(!Number.isSafeInteger(e)||e<0||e>or)throw RangeError(`\`length\` 必须是 0 到 ${or} 之间的安全整数。`);let n=Array.from(t);if(n.length===0)throw RangeError("`alphabet` 不能为空。");if(new Set(n).size!==n.length)throw RangeError("`alphabet` 不能包含重复字符。");if(n.length>4294967296)throw RangeError("`alphabet` 不能包含超过 2^32 个字符。");if(e===0)return``;let r=Math.floor(sr/n.length)*n.length,i=[];for(;i.length<e;){let t=e-i.length,a=new Uint32Array(Math.min(t,16384));lr(a);for(let t of a){if(t>=r)continue;let a=n[t%n.length];if(a!==void 0&&(i.push(a),i.length===e))break}}return i.join(``)}function wr(){let e=globalThis.crypto;if(typeof e?.randomUUID==`function`)return e.randomUUID();let t=new Uint8Array(16);return lr(t),ur(t)}function Tr(e){return cr.test(e)}function Er(e){return e.replace(/[&<>"']/gu,e=>{switch(e){case`&`:return`&amp;`;case`<`:return`&lt;`;case`>`:return`&gt;`;case`"`:return`&quot;`;default:return`&#39;`}})}function Dr(e){return e.trim().replace(/\s+/gu,` `)}let Or=`identity:installation-id`,kr=e=>{if(!Tr(e))throw TypeError(`安装标识值必须是符合 RFC 4122 的 UUID v4。`)},Q,Ar=()=>(Q??=Or,Q);function jr(e={}){let t=e.cacheKey??Or;if(typeof t!=`string`||t.length===0||t.trim()!==t)throw TypeError("安装标识的 `cacheKey` 必须是无外围空白的非空字符串。");if(Q===void 0){Q=t;return}if(Q!==t)throw Error("安装标识已使用其他 `cacheKey` 完成配置。")}let $={get cacheKey(){return Ar()},deviceId:``,clear(){nr.remove($.cacheKey),$.deviceId=``},getOrCreate(e){let t=e??($.deviceId.length>0?$.deviceId:$.read())??wr();return kr(t),nr.set($.cacheKey,t),$.deviceId=t,t},read(){let e=nr.get($.cacheKey);if(e!==void 0){if(typeof e!=`string`)throw TypeError(`存储的安装标识已损坏。`);return kr(e),e}}};function Mr(e){return $.getOrCreate(e)}let Nr={debug:10,info:20,warn:30,error:40},Pr=e=>typeof e==`string`&&Object.hasOwn(Nr,e),Fr=()=>Reflect.get(globalThis,`uni`)!==void 0&&Reflect.get(globalThis,`plus`)!==void 0,Ir=e=>{if(typeof e==`string`)return e;if(typeof e==`bigint`)return`${e.toString()}n`;if(e instanceof Error)return e.stack??`${e.name}: ${e.message}`;let t=new WeakSet;try{let n=JSON.stringify(e,(e,n)=>typeof n==`bigint`?`${n.toString()}n`:typeof n!=`object`||!n?n:t.has(n)?`[Circular]`:(t.add(n),n),2);return typeof n==`string`?n:String(e)}catch{return String(e)}},Lr={debug:(...e)=>{typeof console.debug==`function`?console.debug(...e):console.log(...e)},log:(...e)=>{console.log(...e)},warn:(...e)=>{console.warn(...e)},error:(...e)=>{console.error(...e)}};function Rr(e={}){let t=e.level??`info`,n=e.prefix??`Fast`,r=e.sink??Lr;if(!Pr(t))throw RangeError(`未知的日志级别:${String(t)}。`);if(typeof n!=`string`||n.length===0)throw RangeError(`日志前缀必须是非空字符串。`);let i=t,a=n,o=e.uniAppPlusSplit??!1,s=(e,t,n,s)=>{if(typeof t!=`string`)throw TypeError(`日志作用域必须是字符串。`);if(t.length===0||t.trim()!==t)throw RangeError(`日志作用域必须是无外围空白的非空字符串。`);if(Nr[e]<Nr[i])return;let c=`[${a}:${t}]`,l=e===`info`?`log`:e;if(o&&Fr()){r[l](`${c} ${n}`);for(let e of s)r[l](Ir(e));return}r[l](c,n,...s)};return{debug:(e,t,...n)=>{s(`debug`,e,t,n)},info:(e,t,...n)=>{s(`info`,e,t,n)},warn:(e,t,...n)=>{s(`warn`,e,t,n)},error:(e,t,...n)=>{s(`error`,e,t,n)}}}let zr=Rr(),Br=e=>Array.isArray(e),Vr=(e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0})};function Hr(e){if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function Ur(e,t){return Object.hasOwn(e,t)}function Wr(e,t){let n={};for(let r of t)Object.prototype.propertyIsEnumerable.call(e,r)&&Vr(n,r,e[r]);return n}function Gr(e,t){let n={...e};for(let e of t)Reflect.deleteProperty(n,e);return n}function Kr(e,t){let n={};for(let r of Reflect.ownKeys(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Vr(n,r,t(e[r],r,e));return n}function qr(e,t){if(Object.is(e,t))return!0;let n=Reflect.ownKeys(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t)),r=Reflect.ownKeys(t).filter(e=>Object.prototype.propertyIsEnumerable.call(t,e));return n.length===r.length&&n.every(n=>Object.hasOwn(t,n)&&Object.is(Reflect.get(e,n),Reflect.get(t,n)))}let Jr=e=>{if(typeof e==`number`&&!Number.isFinite(e))throw RangeError(`查询参数中的数字必须是有限数。`);return String(e)};function Yr(e,t={}){let n=Object.entries(e);t.sort&&n.sort(([e],[t])=>e<t?-1:+(e>t));let r=new URLSearchParams;for(let[e,t]of n){let n=Br(t)?t:[t];for(let t of n)t!=null&&r.append(e,Jr(t))}let i=r.toString();return t.space===`percent`&&(i=i.replace(/\+/gu,`%20`)),i&&t.prefixQuestionMark?`?${i}`:i}let Xr=e=>`on${e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}`;function Zr(e,n,r=[]){let i=new Set(r),a=n;return(0,t.computed)(()=>{let t={},n=new Set;for(let r of Object.keys(e)){if(i.has(r))continue;if(r.length===0||/\s/u.test(r))throw TypeError(`无效的 Vue 事件名称:“${r}”。`);let e=Xr(r);if(n.has(e))throw TypeError(`多个 Vue 事件映射到同一处理器属性:“${e}”。`);n.add(e),Object.defineProperty(t,e,{enumerable:!0,value:(...e)=>{a(r,...e)},writable:!0})}return t})}function Qr(e,t){return e(t),t}async function $r(e,...t){if(e!=null)return Promise.resolve(e(...t))}let ei=e=>{if(typeof e!=`object`||!e)throw TypeError(`安装 Vue 插件需要 Vue 3 App 实例。`);let t=e;if(typeof t.component!=`function`||typeof t.directive!=`function`)throw TypeError("安装 Vue 插件需要 `component()` 和 `directive()` 注册方法。");return t},ti=e=>{let t=e.name;if(typeof t!=`string`||t.length===0||/\s/u.test(t))throw TypeError(`可安装的 Vue 组件必须公开不含空白的非空名称。`);return t},ni=(e,t)=>{let n=ti(t),r=e.component(n);if(r!==void 0&&r!==t)throw Error(`Vue 组件名称“${n}”已被其他组件注册。`);return{component:t,name:n,registered:r===t}};function ri(e,t){let n=new Set([ti(e)]);if(`install`in Object(e))throw TypeError("Vue 组件已定义 `install` 属性。");let r=Object.entries(t??{});if(t!==void 0&&Object.getOwnPropertySymbols(t).some(e=>Object.prototype.propertyIsEnumerable.call(t,e)))throw TypeError(`Vue 组件附属项必须使用字符串属性名。`);for(let[t,i]of r){let r=ti(i);if(n.has(r))throw TypeError(`Vue 组件名称“${r}”被重复注册。`);if(n.add(r),t===`install`||t in Object(e))throw TypeError(`Vue 组件附属项“${t}”会覆盖主组件上的属性。`)}let i=e;for(let[e,t]of r)Object.defineProperty(i,e,{configurable:!0,enumerable:!0,value:t,writable:!0});return i.install=t=>{let n=ei(t),i=[e,...r.map(([,e])=>e)].map(e=>ni(n,e));for(let e of i)e.registered||n.component(e.name,e.component)},i}function ii(e){if(`install`in Object(e))throw TypeError("Vue 组件已定义 `install` 属性。");let t=e;return t.install=()=>void 0,t}function ai(e,t){if(t.length===0||/\s/u.test(t)||t.startsWith(`v-`))throw TypeError("可安装的 Vue 指令名称不能包含空白或 `v-` 前缀。");if(`install`in Object(e))throw TypeError("Vue 指令已定义 `install` 属性。");let n=e;return n.install=n=>{let r=ei(n),i=r.directive(t);if(i!==void 0&&i!==e)throw Error(`Vue 指令名称“${t}”已被其他指令注册。`);i!==e&&r.directive(t,e)},n}function oi(e){return e}function si(e,n,r=[]){let i=new Set(r);return(0,t.computed)(()=>{let t={};for(let r of Reflect.ownKeys(n))i.has(r)||!Object.hasOwn(e,r)||Object.defineProperty(t,r,{configurable:!0,enumerable:!0,value:Reflect.get(e,r),writable:!0});return t})}function ci(e){let n=(0,t.getCurrentInstance)();if(n===null)throw Error("`useRender` 必须在 `setup` 函数内部调用。");n.render=e}function li(){return Object}function ui(e){return e}return e.AESDecrypt=qt,e.AESDecryptAuthenticated=Yt,e.AESDecryptWithPassword=Zt,e.AESEncrypt=Kt,e.AESEncryptAuthenticated=Jt,e.AESEncryptWithPassword=Xt,e.DeriveECDHKeySHA256=ln,e.DeriveECDHSecret=cn,e.ECDSASign=an,e.ECDSAVerify=on,e.FixedTimeEquals=At,e.GenerateECDHKeyPair=sn,e.GenerateECDSAKeyPair=rn,e.GenerateRSAKeyPair=Qt,e.GenerateRandomBytes=K,e.HKDFSHA256=Gt,e.HMACSHA256Encrypt=zt,e.HMACSHA384Encrypt=Bt,e.HMACSHA512Encrypt=Vt,e.HashPasswordPBKDF2SHA256=Ut,e.Local=nr,e.MD5Encrypt=jt,e.PBKDF2SHA256=Ht,e.RSADecryptOAEP=en,e.RSAEncryptOAEP=$t,e.RSASignPSS=tn,e.RSAVerifyPSS=nn,e.SHA1Encrypt=Mt,e.SHA256Bytes=Nt,e.SHA256Encrypt=Pt,e.SHA384Bytes=Ft,e.SHA384Encrypt=It,e.SHA512Bytes=Lt,e.SHA512Encrypt=Rt,e.Session=rr,e.VerifyPasswordPBKDF2SHA256=Wt,e.addCssUnit=Nn,e.addDays=mn,e.addMonths=hn,e.addYears=gn,e.allEqualBy=b,e.average=le,e.base64StorageCodec=qn,e.callOptionalFunction=$r,e.camelCase=vr,e.chunk=d,e.clamp=ae,e.configureInstallationIdentity=jr,e.configureStorage=ir,e.contrastRatio=He,e.copy=Sr,e.createDateRangeShortcuts=Dn,e.createDateShortcuts=On,e.createLogger=Rr,e.createOneMonthRangeFromToday=wn,e.debounce=k,e.decodeBase64=ye,e.decodeBase64Bytes=I,e.decodeBase64Url=xe,e.decodeBase64UrlBytes=R,e.decodeLatin1Base64=Ce,e.decodeSecureBase64=Ae,e.decodeURIComponentRepeatedly=fr,e.definePropType=oi,e.detectRuntime=Hn,e.difference=_,e.encodeBase64=ve,e.encodeBase64Bytes=F,e.encodeBase64Url=be,e.encodeBase64UrlBytes=L,e.encodeLatin1Base64=Se,e.encodeSecureBase64=ke,e.endOfDay=pn,e.escapeHtml=Er,e.formatBytes=de,e.formatChineseRelativeTime=Cn,e.formatHexColor=Ie,e.formatRelativeTime=xn,e.generateUuidV4=wr,e.getLocalDayBounds=yn,e.getLocalTimeGreeting=En,e.getOrCreateInstallationId=Mr,e.getStartOfToday=kn,e.groupBy=h,e.hasDuplicatesBy=y,e.hasOwn=Ur,e.hasWebCrypto=Vn,e.inRange=oe,e.installationIdentity=$,e.intersection=v,e.isBrowser=Ln,e.isDateAfterNow=Tn,e.isFuture=vn,e.isMobileUserAgent=Un,e.isNode=zn,e.isPlainObject=Hr,e.isSameDay=_n,e.isStorageConfigured=ar,e.isTabletUserAgent=Wn,e.isUniApp=Bn,e.isUuidV4=Tr,e.isValidDate=dn,e.isValidJson=mr,e.isWebWorker=Rn,e.isWithinInterval=bn,e.kebabCase=br,e.lerp=ue,e.logger=zr,e.lowerFirst=_r,e.makeSlots=li,e.mapConcurrent=O,e.mapValues=Kr,e.mixHexColorWithBlack=Re,e.mixHexColorWithWhite=ze,e.mixHexColors=Le,e.normalizeWhitespace=Dr,e.omit=Gr,e.parseHexColor=Fe,e.parseQueryString=pr,e.partition=g,e.pascalCase=yr,e.pick=Wr,e.pickHigherContrastColor=Ue,e.randomInt=fe,e.randomString=Cr,e.relativeLuminance=Ve,e.removeNullishValues=f,e.retry=D,e.roundTo=se,e.serializeStyle=Pn,e.shallowEqual=qr,e.sleep=T,e.splitWords=hr,e.startOfDay=fn,e.sum=ce,e.throttle=A,e.toDate=q,e.toQueryString=Yr,e.truncateGraphemes=xr,e.unique=p,e.uniqueBy=m,e.upperFirst=gr,e.useEmits=Zr,e.useExpose=Qr,e.useProps=si,e.useRender=ci,e.withDefineType=ui,e.withInstall=ri,e.withInstallDirective=ai,e.withNoopInstall=ii,e.withTimeout=E,e})({},Vue);
3
3
  //# sourceMappingURL=index.global.min.js.map