@opendesign-plus/composables 0.0.1-rc.6 → 0.0.1-rc.7

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.
@@ -0,0 +1,12 @@
1
+ import { InjectionKey, MaybeRef, WatchSource } from 'vue';
2
+ type BubbleData = Record<string | symbol, any>;
3
+ type DataSource<T = any> = MaybeRef<BubbleData> | ((val?: T | Event, old?: T) => Promise<BubbleData> | BubbleData);
4
+ type ConfigOptions = {
5
+ key?: InjectionKey<any> | string;
6
+ bubble?: boolean;
7
+ catchBubble?: boolean;
8
+ };
9
+ export declare function useWatchAnalytics<T = any>(watchSource: WatchSource<T>, dataSource: DataSource<T>, options?: ConfigOptions): void;
10
+ export declare function useElementEventAnalytics<T = any>(el: MaybeRef<HTMLElement>, event: string, dataSource: DataSource<T>, options?: ConfigOptions): void;
11
+ export declare function useAnalytics<DS = any>(dataSource: DataSource<DS>, options: ConfigOptions): void;
12
+ export {};
@@ -0,0 +1,9 @@
1
+ import { MaybeRefOrGetter } from 'vue';
2
+ export declare const useCheckbox: <T>(datasource: MaybeRefOrGetter<T[]>, cbValueExtractor: (item: T) => string | number) => {
3
+ checkboxes: import('vue').Ref<(string | number)[], (string | number)[]>;
4
+ indeterminate: import('vue').Ref<boolean, boolean>;
5
+ parentCheckbox: import('vue').Ref<(string | number)[], (string | number)[]>;
6
+ isCheckedAll: import('vue').ComputedRef<boolean>;
7
+ clearCheckboxes: () => void;
8
+ checkAll: () => void;
9
+ };
@@ -0,0 +1,65 @@
1
+ import { Ref } from 'vue';
2
+ /**
3
+ * 登录状态枚举
4
+ */
5
+ export declare enum LOGIN_STATUS {
6
+ FAILED = -1,// 登录失败
7
+ NOT = 0,// 未登录
8
+ DOING = 1,// 登录中
9
+ DONE = 2
10
+ }
11
+ /**
12
+ * 设置 CSRF Token 的 Cookie 键名
13
+ * @param key - Cookie 键名,默认为 '_U_T_'
14
+ */
15
+ export declare const setLoginKeys: (key: string) => void;
16
+ /**
17
+ * 获取当前存储的登录凭证
18
+ * @returns 包含 csrfCookie 的对象
19
+ */
20
+ export declare const getUserAuth: () => {
21
+ csrfCookie: string | undefined;
22
+ };
23
+ /**
24
+ * 清除存储的登录凭证
25
+ */
26
+ export declare const clearUserAuth: () => void;
27
+ /**
28
+ * 跳转到登录页面
29
+ * @param loginUrl - 登录页面的 URL
30
+ */
31
+ export declare const doLogin: (loginUrl: string) => void;
32
+ /**
33
+ * 设置登录状态到 store
34
+ * @param status - 登录状态值
35
+ */
36
+ export declare const setStatus: (status: LOGIN_STATUS) => void;
37
+ /**
38
+ * 尝试自动登录并获取用户信息
39
+ * @param getUserInfo - 获取用户信息的异步函数
40
+ * @param noPrivacy - 是否跳过隐私检查,默认为 false
41
+ * @returns 用户信息或 undefined
42
+ */
43
+ export declare const tryLogin: (getUserInfo: () => Promise<{
44
+ data?: any;
45
+ }>, noPrivacy?: boolean) => Promise<any>;
46
+ /**
47
+ * 执行退出登录操作
48
+ * @param logoutUrl - 退出登录后要跳转的 URL
49
+ */
50
+ export declare const doLogout: (logoutUrl: string) => void;
51
+ /**
52
+ * 监听路由变化,自动处理登录状态
53
+ * @param guardList - 需要登录的路由路径数组
54
+ * @param getUserInfo - 获取用户信息的异步函数
55
+ * @param userInfo - 用户信息的响应式引用
56
+ * @param noPrivacy - 是否跳过隐私检查,默认为 false
57
+ *
58
+ * 行为说明:
59
+ * - 监听立即生效(immediate: true)
60
+ * - 若目标路由在 guardList 中,等待 tryLogin 完成后再进入
61
+ * - 其他路由直接进入,同时在后台执行 tryLogin
62
+ */
63
+ export declare const useLoginWatcher: (guardList: string[], getUserInfo: () => Promise<{
64
+ data?: any;
65
+ }>, userInfo: Ref<any>, route: any, noPrivacy?: boolean) => void;
@@ -2,7 +2,7 @@ import { MarkdownItAsyncOptions } from 'markdown-it-async';
2
2
  import { BundledLanguage, BundledTheme } from 'shiki';
3
3
  export type * from 'markdown-it-async';
4
4
  export type * from 'shiki';
5
- export interface UseMdOptions extends MarkdownItAsyncOptions {
5
+ export interface UseMdOptionsT extends MarkdownItAsyncOptions {
6
6
  anchor?: boolean;
7
7
  anchorType?: 'vitepress' | 'github';
8
8
  copy?: boolean;
@@ -17,7 +17,7 @@ export interface UseMdOptions extends MarkdownItAsyncOptions {
17
17
  * @param options - 配置选项
18
18
  * @returns 返回一个对象可解构出 shiki 实例和 markdown-it 实例
19
19
  */
20
- export declare function useMdRender(options?: UseMdOptions): Promise<{
20
+ export declare function useMdRender(options?: UseMdOptionsT): Promise<{
21
21
  shiki: import('shiki').HighlighterGeneric<BundledLanguage, BundledTheme>;
22
22
  markdwon: import('markdown-it-async').MarkdownItAsync;
23
23
  }>;
@@ -0,0 +1,4 @@
1
+ import { OScroller } from '@opensig/opendesign';
2
+ import { Ref } from 'vue';
3
+ declare const useScrollBottom: (scrollerRef: Ref<InstanceType<typeof OScroller>>, callback: () => void) => void;
4
+ export default useScrollBottom;
@@ -1,19 +1,37 @@
1
+ import { ComputedRef, Plugin } from 'vue';
1
2
  /**
2
- * 初始化主题,建议在 vue 应用初始化前调用
3
- * @param storageKey - 用于存储主题偏好设置的键名
4
- * @param cookieDomain - Cookie 的作用域域名
3
+ * 创建主题配置项
4
+ * @param options - 配置项
5
+ * @param options.cookieKey - cookie 键名
6
+ * @param options.cookieDomain - cookie 域
7
+ * @param options.lightValue - 浅色主题值
8
+ * @param options.darkValue - 深色主题值
9
+ * @param options.attribute - 属性名
10
+ * @param options.attributeLightValue - 浅色主题属性值
11
+ * @param options.attributeDarkValue - 深色主题属性值
12
+ * @param options.classLightValue - 浅色主题类名
13
+ * @param options.classDarkValue - 深色主题类名
14
+ * @returns theme 插件实例
5
15
  */
6
- export declare function initTheme(storageKey: string, cookieDomain: string): void;
16
+ export declare function createTheme<ThemeValue = 'dark | light'>(options?: {
17
+ cookieKey: string;
18
+ cookieDomain: string;
19
+ lightValue?: string;
20
+ darkValue?: string;
21
+ attribute?: string;
22
+ attributeLightValue?: string;
23
+ attributeDarkValue?: string;
24
+ classLightValue?: string;
25
+ classDarkValue?: string;
26
+ }): Plugin;
7
27
  /**
8
28
  * 主题切换组合式函数
9
- * @param storageKey - 用于存储主题偏好设置的键名,若调用过 initTheme 可不传
10
- * @param cookieDomain - Cookie 的作用域域名,若调用过 initTheme 可不传
11
29
  * @returns 包含当前主题状态和操作方法的对象
12
30
  */
13
- export declare function useTheme(storageKey?: string, cookieDomain?: string): {
14
- theme: import('vue').ComputedRef<"light" | "dark">;
15
- isLight: import('vue').ComputedRef<boolean>;
16
- isDark: import('vue').ComputedRef<boolean>;
17
- setTheme: (newTheme: "light" | "dark") => void;
18
- toggleTheme: () => void;
31
+ export declare function useTheme<ThemeValue = 'dark | light'>(): {
32
+ theme: ComputedRef<ThemeValue> | undefined;
33
+ isLight: ComputedRef<boolean> | undefined;
34
+ isDark: ComputedRef<boolean> | undefined;
35
+ setTheme: ((val: ThemeValue) => void) | undefined;
36
+ toggleTheme: (() => void) | undefined;
19
37
  };
package/dist/index.d.ts CHANGED
@@ -3,3 +3,6 @@ export * from './core/useScreen';
3
3
  export * from './core/useLocale';
4
4
  export * from './core/useTheme';
5
5
  export * from './core/useClipboard';
6
+ export * from './analytics/useAnalytics';
7
+ export * from './core/useLogin';
8
+ export * from './login/loginStore';
package/dist/index.js CHANGED
@@ -1,92 +1,98 @@
1
- import { onBeforeUnmount as T, reactive as P, ref as I, computed as C, onMounted as $, nextTick as k, onUnmounted as S, getCurrentInstance as H, watch as V } from "vue";
2
- import z from "markdown-it-async";
3
- import U from "markdown-it-anchor";
4
- import { bundledLanguages as K, bundledThemes as v, createHighlighter as M } from "shiki";
5
- import { useI18n as R } from "vue-i18n";
6
- import { isClient as G, isUndefined as q } from "@opensig/opendesign";
7
- import { useColorMode as N } from "@vueuse/core";
8
- import y from "js-cookie";
9
- const O = new Set(Object.keys(K));
10
- async function nu(D = {}) {
11
- const { anchor: u = !0, anchorType: e = "vitepress", copy: F = !0, wrapMarkdownBodyDiv: s = !0, theme: t = {}, ...o } = D, B = typeof (t == null ? void 0 : t.light) == "string" && t.light in v ? t.light : "light-plus", a = typeof (t == null ? void 0 : t.dark) == "string" && t.dark in v ? t.dark : "dark-plus", d = /* @__PURE__ */ new Set(["text"]);
12
- T(() => {
13
- i && i.dispose();
1
+ var Fu = Object.defineProperty;
2
+ var eu = (u, D, e) => D in u ? Fu(u, D, { enumerable: !0, configurable: !0, writable: !0, value: e }) : u[D] = e;
3
+ var y = (u, D, e) => eu(u, typeof D != "symbol" ? D + "" : D, e);
4
+ import { onBeforeUnmount as $, reactive as tu, ref as M, computed as A, onMounted as W, nextTick as z, onUnmounted as j, getCurrentInstance as nu, watch as O, inject as p, unref as U, isRef as Eu, provide as ou } from "vue";
5
+ import Cu from "markdown-it-async";
6
+ import Au from "markdown-it-anchor";
7
+ import { bundledLanguages as ru, bundledThemes as K, createHighlighter as su } from "shiki";
8
+ import { useI18n as iu } from "vue-i18n";
9
+ import { isClient as au, isUndefined as cu } from "@opensig/opendesign";
10
+ import b from "js-cookie";
11
+ import { defineStore as Bu } from "pinia";
12
+ const lu = new Set(Object.keys(ru));
13
+ async function Ku(u = {}) {
14
+ const { anchor: D = !0, anchorType: e = "vitepress", copy: F = !0, wrapMarkdownBodyDiv: t = !0, theme: n = {}, ...o } = u, E = typeof (n == null ? void 0 : n.light) == "string" && n.light in K ? n.light : "light-plus", C = typeof (n == null ? void 0 : n.dark) == "string" && n.dark in K ? n.dark : "dark-plus", r = /* @__PURE__ */ new Set(["text"]);
15
+ $(() => {
16
+ a && a.dispose();
14
17
  });
15
- const i = await M({
16
- themes: [B, a],
18
+ const a = await su({
19
+ themes: [E, C],
17
20
  langs: ["text"]
18
- }), E = z({
19
- async highlight(A, n) {
20
- return O.has(n) || (n = "text"), d.has(n) || (await i.loadLanguage(n), d.add(n)), i.codeToHtml(A, {
21
- lang: n,
21
+ }), i = Cu({
22
+ async highlight(c, s) {
23
+ return lu.has(s) || (s = "text"), r.has(s) || (await a.loadLanguage(s), r.add(s)), a.codeToHtml(c, {
24
+ lang: s,
22
25
  themes: {
23
- light: B,
24
- dark: a
26
+ light: E,
27
+ dark: C
25
28
  }
26
29
  });
27
30
  },
28
31
  ...o
29
32
  });
30
- if (u && E.use(U, {
31
- slugify: (A) => e === "github" ? W(A) : j(A)
33
+ if (D && i.use(Au, {
34
+ slugify: (c) => e === "github" ? du(c) : fu(c)
32
35
  }), F) {
33
- const A = E.renderer.rules.fence;
34
- E.renderer.rules.fence = (...n) => {
35
- var p;
36
- const [c, l] = n, m = c[l], g = E.utils.escapeHtml(m.content || "");
37
- return `<div class="language-${((p = m.info) == null ? void 0 : p.trim()) || ""}"><div class="copy" data-clipboard-text="${g}"></div>` + A(...n) + "</div>";
36
+ const c = i.renderer.rules.fence;
37
+ i.renderer.rules.fence = (...s) => {
38
+ var d;
39
+ const [l, m] = s, B = l[m], f = i.utils.escapeHtml(B.content || "");
40
+ return `<div class="language-${((d = B.info) == null ? void 0 : d.trim()) || ""}"><div class="copy" data-clipboard-text="${f}"></div>` + c(...s) + "</div>";
38
41
  };
39
42
  }
40
- if (s) {
41
- const A = E.render;
42
- E.render = (c, l) => `<div class="markdown-body">${A.call(E, c, l)}</div>`;
43
- const n = E.renderInline;
44
- E.renderInline = (c, l) => `<div class="markdown-body">${n.call(E, c, l)}</div>`;
43
+ if (t) {
44
+ const c = i.render;
45
+ i.render = (l, m) => `<div class="markdown-body">${c.call(i, l, m)}</div>`;
46
+ const s = i.renderInline;
47
+ i.renderInline = (l, m) => `<div class="markdown-body">${s.call(i, l, m)}</div>`;
45
48
  }
46
49
  return {
47
- shiki: i,
48
- markdwon: E
50
+ shiki: a,
51
+ markdwon: i
49
52
  };
50
53
  }
51
- function W(D) {
52
- const u = /[\0-\x1F!-,\.\/:-@\[-\^`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482\u0530\u0557\u0558\u055A-\u055F\u0589-\u0590\u05BE\u05C0\u05C3\u05C6\u05C8-\u05CF\u05EB-\u05EE\u05F3-\u060F\u061B-\u061F\u066A-\u066D\u06D4\u06DD\u06DE\u06E9\u06FD\u06FE\u0700-\u070F\u074B\u074C\u07B2-\u07BF\u07F6-\u07F9\u07FB\u07FC\u07FE\u07FF\u082E-\u083F\u085C-\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u08E2\u0964\u0965\u0970\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09F2-\u09FB\u09FD\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF0-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B70\u0B72-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BF0-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C7F\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D4F-\u0D53\u0D58-\u0D5E\u0D64\u0D65\u0D70-\u0D79\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF4-\u0E00\u0E3B-\u0E3F\u0E4F\u0E5A-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F01-\u0F17\u0F1A-\u0F1F\u0F2A-\u0F34\u0F36\u0F38\u0F3A-\u0F3D\u0F48\u0F6D-\u0F70\u0F85\u0F98\u0FBD-\u0FC5\u0FC7-\u0FFF\u104A-\u104F\u109E\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u1360-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16ED\u16F9-\u16FF\u170D\u1715-\u171F\u1735-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17D4-\u17D6\u17D8-\u17DB\u17DE\u17DF\u17EA-\u180A\u180E\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u1945\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DA-\u19FF\u1A1C-\u1A1F\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1AA6\u1AA8-\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B5A-\u1B6A\u1B74-\u1B7F\u1BF4-\u1BFF\u1C38-\u1C3F\u1C4A-\u1C4C\u1C7E\u1C7F\u1C89-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CCF\u1CD3\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u203E\u2041-\u2053\u2055-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u20CF\u20F1-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u215F\u2189-\u24B5\u24EA-\u2BFF\u2C2F\u2C5F\u2CE5-\u2CEA\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E00-\u2E2E\u2E30-\u3004\u3008-\u3020\u3030\u3036\u3037\u303D-\u3040\u3097\u3098\u309B\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\u9FFD-\u9FFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA62C-\uA63F\uA673\uA67E\uA6F2-\uA716\uA720\uA721\uA789\uA78A\uA7C0\uA7C1\uA7CB-\uA7F4\uA828-\uA82B\uA82D-\uA83F\uA874-\uA87F\uA8C6-\uA8CF\uA8DA-\uA8DF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA954-\uA95F\uA97D-\uA97F\uA9C1-\uA9CE\uA9DA-\uA9DF\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A-\uAA5F\uAA77-\uAA79\uAAC3-\uAADA\uAADE\uAADF\uAAF0\uAAF1\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABEB\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFDFF\uFE10-\uFE1F\uFE30-\uFE32\uFE35-\uFE4C\uFE50-\uFE6F\uFE75\uFEFD-\uFF0F\uFF1A-\uFF20\uFF3B-\uFF3E\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDD3F\uDD75-\uDDFC\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEE1-\uDEFF\uDF20-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE40-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE7-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD28-\uDD2F\uDD3A-\uDE7F\uDEAA\uDEAD-\uDEAF\uDEB2-\uDEFF\uDF1D-\uDF26\uDF28-\uDF2F\uDF51-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC47-\uDC65\uDC70-\uDC7E\uDCBB-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD40-\uDD43\uDD48-\uDD4F\uDD74\uDD75\uDD77-\uDD7F\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDFF\uDE12\uDE38-\uDE3D\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC4B-\uDC4F\uDC5A-\uDC5D\uDC62-\uDC7F\uDCC6\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDC1-\uDDD7\uDDDE-\uDDFF\uDE41-\uDE43\uDE45-\uDE4F\uDE5A-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF3A-\uDFFF]|\uD806[\uDC3B-\uDC9F\uDCEA-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD44-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE2\uDDE5-\uDDFF\uDE3F-\uDE46\uDE48-\uDE4F\uDE9A-\uDE9C\uDE9E-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC41-\uDC4F\uDC5A-\uDC71\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF7-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83D\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDECF\uDEEE\uDEEF\uDEF5-\uDEFF\uDF37-\uDF3F\uDF44-\uDF4F\uDF5A-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE2\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDC9C\uDC9F-\uDFFF]|\uD834[\uDC00-\uDD64\uDD6A-\uDD6C\uDD73-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDE41\uDE45-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC\uDFCD]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD4F-\uDEBF\uDEFA-\uDFFF]|\uD83A[\uDCC5-\uDCCF\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD83C[\uDC00-\uDD2F\uDD4A-\uDD4F\uDD6A-\uDD6F\uDD8A-\uDFFF]|\uD83E[\uDC00-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]/g;
53
- return `user-content-${D.toLowerCase().replace(u, "").replace(/ /g, "-")}`;
54
+ function du(u) {
55
+ const D = (
56
+ // eslint-disable-next-line no-useless-escape,no-control-regex,no-misleading-character-class
57
+ /[\0-\x1F!-,\.\/:-@\[-\^`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482\u0530\u0557\u0558\u055A-\u055F\u0589-\u0590\u05BE\u05C0\u05C3\u05C6\u05C8-\u05CF\u05EB-\u05EE\u05F3-\u060F\u061B-\u061F\u066A-\u066D\u06D4\u06DD\u06DE\u06E9\u06FD\u06FE\u0700-\u070F\u074B\u074C\u07B2-\u07BF\u07F6-\u07F9\u07FB\u07FC\u07FE\u07FF\u082E-\u083F\u085C-\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u08E2\u0964\u0965\u0970\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09F2-\u09FB\u09FD\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF0-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B70\u0B72-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BF0-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C7F\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D4F-\u0D53\u0D58-\u0D5E\u0D64\u0D65\u0D70-\u0D79\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF4-\u0E00\u0E3B-\u0E3F\u0E4F\u0E5A-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F01-\u0F17\u0F1A-\u0F1F\u0F2A-\u0F34\u0F36\u0F38\u0F3A-\u0F3D\u0F48\u0F6D-\u0F70\u0F85\u0F98\u0FBD-\u0FC5\u0FC7-\u0FFF\u104A-\u104F\u109E\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u1360-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16ED\u16F9-\u16FF\u170D\u1715-\u171F\u1735-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17D4-\u17D6\u17D8-\u17DB\u17DE\u17DF\u17EA-\u180A\u180E\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u1945\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DA-\u19FF\u1A1C-\u1A1F\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1AA6\u1AA8-\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B5A-\u1B6A\u1B74-\u1B7F\u1BF4-\u1BFF\u1C38-\u1C3F\u1C4A-\u1C4C\u1C7E\u1C7F\u1C89-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CCF\u1CD3\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u203E\u2041-\u2053\u2055-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u20CF\u20F1-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u215F\u2189-\u24B5\u24EA-\u2BFF\u2C2F\u2C5F\u2CE5-\u2CEA\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E00-\u2E2E\u2E30-\u3004\u3008-\u3020\u3030\u3036\u3037\u303D-\u3040\u3097\u3098\u309B\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\u9FFD-\u9FFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA62C-\uA63F\uA673\uA67E\uA6F2-\uA716\uA720\uA721\uA789\uA78A\uA7C0\uA7C1\uA7CB-\uA7F4\uA828-\uA82B\uA82D-\uA83F\uA874-\uA87F\uA8C6-\uA8CF\uA8DA-\uA8DF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA954-\uA95F\uA97D-\uA97F\uA9C1-\uA9CE\uA9DA-\uA9DF\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A-\uAA5F\uAA77-\uAA79\uAAC3-\uAADA\uAADE\uAADF\uAAF0\uAAF1\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABEB\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFDFF\uFE10-\uFE1F\uFE30-\uFE32\uFE35-\uFE4C\uFE50-\uFE6F\uFE75\uFEFD-\uFF0F\uFF1A-\uFF20\uFF3B-\uFF3E\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDD3F\uDD75-\uDDFC\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEE1-\uDEFF\uDF20-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE40-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE7-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD28-\uDD2F\uDD3A-\uDE7F\uDEAA\uDEAD-\uDEAF\uDEB2-\uDEFF\uDF1D-\uDF26\uDF28-\uDF2F\uDF51-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC47-\uDC65\uDC70-\uDC7E\uDCBB-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD40-\uDD43\uDD48-\uDD4F\uDD74\uDD75\uDD77-\uDD7F\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDFF\uDE12\uDE38-\uDE3D\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC4B-\uDC4F\uDC5A-\uDC5D\uDC62-\uDC7F\uDCC6\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDC1-\uDDD7\uDDDE-\uDDFF\uDE41-\uDE43\uDE45-\uDE4F\uDE5A-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF3A-\uDFFF]|\uD806[\uDC3B-\uDC9F\uDCEA-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD44-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE2\uDDE5-\uDDFF\uDE3F-\uDE46\uDE48-\uDE4F\uDE9A-\uDE9C\uDE9E-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC41-\uDC4F\uDC5A-\uDC71\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF7-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83D\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDECF\uDEEE\uDEEF\uDEF5-\uDEFF\uDF37-\uDF3F\uDF44-\uDF4F\uDF5A-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE2\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDC9C\uDC9F-\uDFFF]|\uD834[\uDC00-\uDD64\uDD6A-\uDD6C\uDD73-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDE41\uDE45-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC\uDFCD]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD4F-\uDEBF\uDEFA-\uDFFF]|\uD83A[\uDCC5-\uDCCF\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD83C[\uDC00-\uDD2F\uDD4A-\uDD4F\uDD6A-\uDD6F\uDD8A-\uDFFF]|\uD83E[\uDC00-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]/g
58
+ );
59
+ return `user-content-${u.toLowerCase().replace(D, "").replace(/ /g, "-")}`;
54
60
  }
55
- function j(D) {
56
- return D.normalize("NFKD").replace(/[\u0300-\u036F]/g, "").replace(/[\u0000-\u001f]/g, "").replace(/[\s~`!@#$%^&*()\-_+=[\]{}|\\;:"'“”‘’<>,.?/]+/g, "-").replace(/-{2,}/g, "-").replace(/^-+|-+$/g, "").replace(/^(\d)/, "_$1").toLowerCase();
61
+ function fu(u) {
62
+ return u.normalize("NFKD").replace(/[\u0300-\u036F]/g, "").replace(/[\u0000-\u001f]/g, "").replace(/[\s~`!@#$%^&*()\-_+=[\]{}|\\;:"'“”‘’<>,.?/]+/g, "-").replace(/-{2,}/g, "-").replace(/^-+|-+$/g, "").replace(/^(\d)/, "_$1").toLowerCase();
57
63
  }
58
- var Q = /* @__PURE__ */ ((D) => (D.Phone = "phone", D.PadV = "pad_v", D.PadH = "pad_h", D.Laptop = "laptop", D))(Q || {});
59
- const h = {
64
+ var mu = /* @__PURE__ */ ((u) => (u.Phone = "phone", u.PadV = "pad_v", u.PadH = "pad_h", u.Laptop = "laptop", u))(mu || {});
65
+ const L = {
60
66
  phone: 600,
61
67
  pad_v: 840,
62
68
  pad_h: 1200,
63
69
  laptop: 1440
64
- }, Z = {
65
- lt: (D, u) => D < u,
66
- le: (D, u) => D <= u,
67
- eq: (D, u) => D === u,
68
- ne: (D, u) => D !== u,
69
- ge: (D, u) => D >= u,
70
- gt: (D, u) => D > u
71
- }, ou = () => {
72
- const D = P({
70
+ }, hu = {
71
+ lt: (u, D) => u < D,
72
+ le: (u, D) => u <= D,
73
+ eq: (u, D) => u === D,
74
+ ne: (u, D) => u !== D,
75
+ ge: (u, D) => u >= D,
76
+ gt: (u, D) => u > D
77
+ }, Pu = () => {
78
+ const u = tu({
73
79
  width: 1440,
74
80
  height: 0
75
- }), u = I(
81
+ }), D = M(
76
82
  "laptop"
77
83
  /* Laptop */
78
- ), e = (r) => (typeof r > "u" && (r = D.width), r < h.phone ? "phone" : r < h.pad_v ? "pad_v" : r < h.pad_h ? "pad_h" : "laptop"), F = (r = "eq", f) => {
79
- const L = D.width, _ = h[f], b = Z[r];
80
- return b(L, _);
81
- }, s = C(() => F(
84
+ ), e = (h) => (typeof h > "u" && (h = u.width), h < L.phone ? "phone" : h < L.pad_v ? "pad_v" : h < L.pad_h ? "pad_h" : "laptop"), F = (h = "eq", R) => {
85
+ const X = u.width, uu = L[R], Du = hu[h];
86
+ return Du(X, uu);
87
+ }, t = A(() => F(
82
88
  "le",
83
89
  "phone"
84
90
  /* Phone */
85
- )), t = C(() => F(
91
+ )), n = A(() => F(
86
92
  "gt",
87
93
  "phone"
88
94
  /* Phone */
89
- )), o = C(() => F(
95
+ )), o = A(() => F(
90
96
  "gt",
91
97
  "phone"
92
98
  /* Phone */
@@ -94,15 +100,15 @@ const h = {
94
100
  "le",
95
101
  "pad_h"
96
102
  /* PadH */
97
- )), B = C(() => F(
103
+ )), E = A(() => F(
98
104
  "le",
99
105
  "pad_h"
100
106
  /* PadH */
101
- )), a = C(() => F(
107
+ )), C = A(() => F(
102
108
  "gt",
103
109
  "pad_h"
104
110
  /* PadH */
105
- )), d = C(() => F(
111
+ )), r = A(() => F(
106
112
  "gt",
107
113
  "phone"
108
114
  /* Phone */
@@ -110,15 +116,15 @@ const h = {
110
116
  "le",
111
117
  "pad_v"
112
118
  /* PadV */
113
- )), i = C(() => F(
119
+ )), a = A(() => F(
114
120
  "le",
115
121
  "pad_v"
116
122
  /* PadV */
117
- )), E = C(() => F(
123
+ )), i = A(() => F(
118
124
  "gt",
119
125
  "pad_v"
120
126
  /* PadV */
121
- )), A = C(() => F(
127
+ )), c = A(() => F(
122
128
  "gt",
123
129
  "pad_v"
124
130
  /* PadV */
@@ -126,7 +132,7 @@ const h = {
126
132
  "le",
127
133
  "pad_h"
128
134
  /* PadH */
129
- )), n = C(() => F(
135
+ )), s = A(() => F(
130
136
  "gt",
131
137
  "pad_h"
132
138
  /* PadH */
@@ -134,15 +140,15 @@ const h = {
134
140
  "le",
135
141
  "laptop"
136
142
  /* Laptop */
137
- )), c = C(() => F(
143
+ )), l = A(() => F(
138
144
  "le",
139
145
  "laptop"
140
146
  /* Laptop */
141
- )), l = C(() => F(
147
+ )), m = A(() => F(
142
148
  "gt",
143
149
  "laptop"
144
150
  /* Laptop */
145
- )), m = C(() => F(
151
+ )), B = A(() => F(
146
152
  "gt",
147
153
  "phone"
148
154
  /* Phone */
@@ -150,7 +156,7 @@ const h = {
150
156
  "le",
151
157
  "laptop"
152
158
  /* Laptop */
153
- )), g = C(() => F(
159
+ )), f = A(() => F(
154
160
  "gt",
155
161
  "pad_v"
156
162
  /* PadV */
@@ -158,137 +164,343 @@ const h = {
158
164
  "le",
159
165
  "laptop"
160
166
  /* Laptop */
161
- )), p = () => {
162
- const { innerWidth: r, innerHeight: f } = window;
163
- D.width = r, D.height = f, u.value = e();
167
+ )), d = () => {
168
+ const { innerWidth: h, innerHeight: R } = window;
169
+ u.width = h, u.height = R, D.value = e();
164
170
  };
165
- return $(() => {
166
- typeof window < "u" && (window.addEventListener("resize", p), p(), k(() => p()));
167
- }), S(() => {
168
- typeof window < "u" && window.removeEventListener("resize", p);
171
+ return W(() => {
172
+ typeof window < "u" && (window.addEventListener("resize", d), d(), z(() => d()));
173
+ }), j(() => {
174
+ typeof window < "u" && window.removeEventListener("resize", d);
169
175
  }), {
170
176
  // 获取屏幕宽度分级
171
177
  getSize: e,
172
178
  // 当前屏幕分级
173
- current: u,
179
+ current: D,
174
180
  // 当前屏幕宽度
175
- size: D,
176
- isPhone: s,
181
+ size: u,
182
+ isPhone: t,
177
183
  // [0, 600]
178
- gtPhone: t,
184
+ gtPhone: n,
179
185
  // [601, -]
180
186
  isPad: o,
181
187
  // [601, 1200]
182
- lePad: B,
188
+ lePad: E,
183
189
  // [0, 1200]
184
- gtPad: a,
190
+ gtPad: C,
185
191
  // [1201, -]
186
- isPadV: d,
192
+ isPadV: r,
187
193
  // [601, 840]
188
- lePadV: i,
194
+ lePadV: a,
189
195
  // [0, 840]
190
- gtPadV: E,
196
+ gtPadV: i,
191
197
  // [841, -]
192
- isPadH: A,
198
+ isPadH: c,
193
199
  // [841, 1200]
194
- isLaptop: n,
200
+ isLaptop: s,
195
201
  // [1201, 1440]
196
- leLaptop: c,
202
+ leLaptop: l,
197
203
  // [0, 1440]
198
- gtLaptop: l,
204
+ gtLaptop: m,
199
205
  // [1441, -]
200
- isPadToLaptop: m,
206
+ isPadToLaptop: B,
201
207
  // [601, 1440]
202
- isPadVToLaptop: g
208
+ isPadVToLaptop: f
203
209
  // [841, 1440]
204
210
  };
205
- }, Bu = () => {
206
- const { t: D, locale: u } = R(), e = H(), F = C(() => u.value === "zh"), s = C(() => u.value === "en");
207
- return V(
208
- () => u.value,
211
+ }, Iu = () => {
212
+ const { t: u, locale: D } = iu(), e = nu(), F = A(() => D.value === "zh"), t = A(() => D.value === "en");
213
+ return O(
214
+ () => D.value,
209
215
  (o) => {
210
- G && (document.documentElement.lang = o, localStorage.setItem("locale", o));
216
+ au && (document.documentElement.lang = o, localStorage.setItem("locale", o));
211
217
  },
212
218
  {
213
219
  immediate: !0
214
220
  }
215
221
  ), {
216
- t: D,
217
- $t: D,
218
- locale: u,
222
+ t: u,
223
+ $t: u,
224
+ locale: D,
219
225
  isZh: F,
220
- isEn: s,
226
+ isEn: t,
221
227
  changeLocale: async (o) => {
222
- var a;
223
- const B = q(o) ? F.value ? "en" : "zh" : o;
224
- u.value !== B && (u.value = B, await k(), (a = e == null ? void 0 : e.proxy) != null && a.$forceUpdate && e.proxy.$forceUpdate());
228
+ var C;
229
+ const E = cu(o) ? F.value ? "en" : "zh" : o;
230
+ D.value !== E && (D.value = E, await z(), (C = e == null ? void 0 : e.proxy) != null && C.$forceUpdate && e.proxy.$forceUpdate());
225
231
  }
226
232
  };
227
- }, J = `
228
- [警告] useTheme 缺少参数 storageKey 和 cookieDomain,解决方法:
229
- 1. 在项目入口处调用 initTheme 初始化主题,后续调用 useTheme 不必再传值;
230
- 2. 调用 useTheme 时传入 storageKey 和 cookieDomain 参数
231
- `.trim();
232
- let w, x;
233
- function au(D, u) {
234
- w = D, x = u;
235
- const { isDark: e } = X();
236
- e.value && (document.documentElement.getAttribute("data-o-theme") !== "dark" && document.documentElement.setAttribute("data-o-theme", "dark"), document.documentElement.classList.contains("dark") || document.documentElement.classList.add("dark"));
237
- }
238
- function X(D, u) {
239
- const e = D || w, F = u || x;
240
- let s;
241
- typeof window < "u" && e && (s = y.get(e));
242
- const t = N({
243
- // 初始值,优先从 Cookie 中获取用户偏好设置
244
- initialValue: s,
245
- // 存储键名,用于 localStorage 持久化
246
- storageKey: e || null,
247
- // HTML 属性名,会添加到 html 元素上标识当前主题
248
- attribute: "data-o-theme",
249
- // 定义支持的主题模式映射
250
- modes: {
251
- light: "light",
252
- dark: "dark"
253
- }
254
- }), o = C(() => t.value), B = C(() => t.value === "light"), a = C(() => t.value === "dark"), d = (E) => {
255
- const A = E === "dark" ? "dark" : "light";
256
- e && F ? y.set(e, A, { domain: F }) : console.warn(J), t.value = A, typeof window < "u" && (A === "dark" ? document.documentElement.classList.add("dark") : (document.documentElement.classList.remove("dark"), document.documentElement.classList.length === 0 && document.documentElement.removeAttribute("class")));
233
+ }, pu = "[警告] 请在项目中注入主题配置项:app.use(createTheme(options))", gu = "[警告] 缺少参数 cookieKey 和 cookieDomain,请在 createTheme 传入 cookieKey 和 cookieDomain 参数", Y = Symbol("theme"), G = Symbol("isLight"), q = Symbol("isDark"), Q = Symbol("setTheme"), J = Symbol("toggleTheme");
234
+ function Hu(u) {
235
+ const {
236
+ cookieKey: D,
237
+ cookieDomain: e,
238
+ lightValue: F = "light",
239
+ darkValue: t = "dark",
240
+ attribute: n = "data-o-theme",
241
+ attributeLightValue: o = F,
242
+ attributeDarkValue: E = t,
243
+ classLightValue: C = F,
244
+ classDarkValue: r = t
245
+ } = u || {}, a = M(F), i = A(() => a.value === F), c = A(() => a.value === t), s = A(() => a.value), l = (B, f = !0) => {
246
+ const d = B === t ? t : F;
247
+ a.value = d, !(typeof window > "u") && (d === t ? (document.documentElement.setAttribute(n, E), document.documentElement.classList.add(r), document.documentElement.classList.remove(C)) : (document.documentElement.setAttribute(n, o), document.documentElement.classList.add(C), document.documentElement.classList.remove(r)), f && (D && e ? b.set(D, d, { domain: e }) : console.warn(gu)));
248
+ }, m = () => {
249
+ l(s.value === t ? F : t);
257
250
  };
258
251
  return {
259
- theme: o,
260
- isLight: B,
261
- isDark: a,
262
- setTheme: d,
263
- toggleTheme: () => {
264
- d(o.value === "light" ? "dark" : "light");
252
+ install(B) {
253
+ if (B.provide(Y, s), B.provide(G, i), B.provide(q, c), B.provide(Q, l), B.provide(J, m), typeof window > "u")
254
+ return;
255
+ let f;
256
+ D && (f = b.get(D)), f || (f = window.matchMedia("(prefers-color-scheme: dark)").matches ? t : F), l(f === t ? t : F, !1);
265
257
  }
266
258
  };
267
259
  }
268
- async function ru(D) {
260
+ function Vu() {
261
+ const u = p(Y);
262
+ return u || console.warn(pu), {
263
+ theme: u,
264
+ isLight: p(G),
265
+ isDark: p(q),
266
+ setTheme: p(Q),
267
+ toggleTheme: p(J)
268
+ };
269
+ }
270
+ async function $u(u) {
269
271
  try {
270
- return navigator.clipboard ? (await navigator.clipboard.writeText(D), !0) : Y(D);
272
+ return navigator.clipboard ? (await navigator.clipboard.writeText(u), !0) : yu(u);
271
273
  } catch {
272
274
  return !1;
273
275
  }
274
276
  }
275
- function Y(D) {
276
- const u = document.createElement("textarea");
277
- u.value = D, u.style.top = "0", u.style.left = "0", u.style.width = "1px", u.style.height = "1px", u.style.position = "fixed", u.style.opacity = "0", document.body.appendChild(u), u.focus(), u.select();
277
+ function yu(u) {
278
+ const D = document.createElement("textarea");
279
+ D.value = u, D.style.top = "0", D.style.left = "0", D.style.width = "1px", D.style.height = "1px", D.style.position = "fixed", D.style.opacity = "0", document.body.appendChild(D), D.focus(), D.select();
278
280
  try {
279
281
  const e = document.execCommand("copy");
280
- return document.body.removeChild(u), e;
282
+ return document.body.removeChild(D), e;
281
283
  } catch {
282
- return document.body.removeChild(u), !1;
284
+ return document.body.removeChild(D), !1;
285
+ }
286
+ }
287
+ class w {
288
+ constructor(D) {
289
+ y(this, "prev", null);
290
+ y(this, "next", null);
291
+ y(this, "data", null);
292
+ this.data = D;
293
+ }
294
+ removeSelf() {
295
+ this.data = null, this.prev && (this.prev.next = this.next), this.next && (this.next.prev = this.prev), this.prev = null, this.next = null;
296
+ }
297
+ }
298
+ class vu {
299
+ constructor() {
300
+ y(this, "dummyHead", new w(null));
301
+ }
302
+ shift(D) {
303
+ const e = new w(D), F = this.dummyHead.next;
304
+ return e.prev = this.dummyHead, this.dummyHead.next = e, F && (e.next = F, F.prev = e), e;
305
+ }
306
+ remove(D) {
307
+ D.removeSelf();
308
+ }
309
+ clear() {
310
+ let D = this.dummyHead.next;
311
+ for (; D; ) {
312
+ const e = D.next;
313
+ D.removeSelf(), D = e;
314
+ }
315
+ this.dummyHead.next = null;
283
316
  }
284
317
  }
318
+ const P = Symbol(), _ = Symbol(), k = async (u, ...D) => typeof u == "function" ? await u(...D) : U(u), x = (u) => typeof u == "object" && u !== null, T = (u) => typeof u.event == "string" && x(u.properties);
319
+ function S(u, D) {
320
+ let e, F;
321
+ if (D != null && D.catchBubble)
322
+ e = new vu(), F = e.shift(async (t) => {
323
+ var n, o;
324
+ if (x(t))
325
+ if (t[_]) {
326
+ const E = await k(u);
327
+ if (!T(E)) return;
328
+ delete t[_];
329
+ const C = {
330
+ ...E,
331
+ properties: {
332
+ ...E.properties,
333
+ ...t
334
+ }
335
+ };
336
+ (n = window.__OA_REPORT__) == null || n.call(window, C.event, C.properties);
337
+ } else T(t) && ((o = window.__OA_REPORT__) == null || o.call(window, t.event, t.properties));
338
+ }), ou((D == null ? void 0 : D.key) ?? P, e);
339
+ else if (D != null && D.bubble) {
340
+ if (e = p((D == null ? void 0 : D.key) ?? P), !e) return;
341
+ F = e.shift(async (t) => {
342
+ var n, o, E, C;
343
+ if (x(t))
344
+ if (t[_]) {
345
+ const r = await k(u);
346
+ if (!x(r)) return;
347
+ const a = {
348
+ ...r,
349
+ ...t
350
+ };
351
+ (o = (n = F.next) == null ? void 0 : n.data) == null || o.call(n, a);
352
+ } else
353
+ (C = (E = F.next) == null ? void 0 : E.data) == null || C.call(E, { ...t, [_]: !0 });
354
+ });
355
+ } else
356
+ F = (t) => {
357
+ var n;
358
+ T(t) && ((n = window.__OA_REPORT__) == null || n.call(window, t.event, t.properties));
359
+ };
360
+ return j(() => {
361
+ e = null, F instanceof w && F.removeSelf(), F = null;
362
+ }), F;
363
+ }
364
+ function Mu(u, D, e) {
365
+ if (!Eu(u) && typeof u != "function") return;
366
+ const F = S(D, e);
367
+ O(u, async (t, n) => {
368
+ var E;
369
+ const o = await k(D, t, n);
370
+ F instanceof w ? (E = F.data) == null || E.call(F, o) : typeof F == "function" && F(o);
371
+ });
372
+ }
373
+ const I = /* @__PURE__ */ new WeakSet();
374
+ function Wu(u, D, e, F) {
375
+ const t = A(() => U(u)), n = S(e, { ...F, key: D }), o = async (E) => {
376
+ var r;
377
+ if (F != null && F.bubble && I.has(E)) return;
378
+ I.add(E);
379
+ const C = await k(e, E);
380
+ typeof C == "object" && C !== null && (n instanceof w ? (r = n.data) == null || r.call(n, C) : typeof n == "function" && n(C));
381
+ };
382
+ W(() => {
383
+ var E;
384
+ return (E = t.value) == null ? void 0 : E.addEventListener(D, o);
385
+ }), $(() => {
386
+ var E;
387
+ return (E = t.value) == null ? void 0 : E.removeEventListener(D, o);
388
+ });
389
+ }
390
+ function zu(u, D) {
391
+ S(u, D);
392
+ }
393
+ const Z = Bu("login", {
394
+ state: () => ({
395
+ loginStatus: g.NOT
396
+ }),
397
+ actions: {
398
+ /**
399
+ * 设置登录状态
400
+ * @param status - 登录状态值
401
+ */
402
+ setLoginStatus(u) {
403
+ this.loginStatus = u;
404
+ }
405
+ },
406
+ getters: {
407
+ // 登录失败
408
+ isLoginFailed() {
409
+ return this.loginStatus === g.FAILED;
410
+ },
411
+ // 未登录
412
+ isLoginNot() {
413
+ return this.loginStatus === g.NOT;
414
+ },
415
+ // 登录中
416
+ isLoggingIn() {
417
+ return this.loginStatus === g.DOING;
418
+ },
419
+ // 登录成功
420
+ isLogined() {
421
+ return this.loginStatus === g.DONE;
422
+ }
423
+ }
424
+ });
425
+ var g = /* @__PURE__ */ ((u) => (u[u.FAILED = -1] = "FAILED", u[u.NOT = 0] = "NOT", u[u.DOING = 1] = "DOING", u[u.DONE = 2] = "DONE", u))(g || {});
426
+ const N = {
427
+ CSRF_TOKEN: "_U_T_"
428
+ }, wu = 300, ju = (u) => {
429
+ N.CSRF_TOKEN = u;
430
+ }, Lu = () => ({
431
+ csrfCookie: b.get(N.CSRF_TOKEN)
432
+ }), H = () => {
433
+ b.remove(N.CSRF_TOKEN);
434
+ }, Uu = (u) => {
435
+ window.location.href = u;
436
+ }, v = (u) => {
437
+ Z().setLoginStatus(u);
438
+ }, V = async (u, D = !1) => {
439
+ const { csrfCookie: e } = Lu();
440
+ if (!(!e || D))
441
+ try {
442
+ v(
443
+ 1
444
+ /* DOING */
445
+ );
446
+ const F = await u();
447
+ if (F != null && F.data)
448
+ return v(
449
+ 2
450
+ /* DONE */
451
+ ), F.data;
452
+ v(
453
+ -1
454
+ /* FAILED */
455
+ ), H();
456
+ return;
457
+ } catch {
458
+ v(
459
+ -1
460
+ /* FAILED */
461
+ ), H();
462
+ return;
463
+ }
464
+ }, Yu = (u) => {
465
+ window.location.href = u, setTimeout(() => {
466
+ v(
467
+ 0
468
+ /* NOT */
469
+ );
470
+ }, wu);
471
+ }, Gu = (u, D, e, F, t = !1) => {
472
+ const n = Z();
473
+ O(
474
+ () => F.path,
475
+ async (o, E) => {
476
+ if (o === E || n.isLogined) return;
477
+ u.some((r) => o.includes(r)) ? e.value = await V(D, t) : V(D, t).then((r) => {
478
+ e.value = r;
479
+ });
480
+ },
481
+ { immediate: !0 }
482
+ );
483
+ };
285
484
  export {
286
- h as ScreenConfig,
287
- Q as Size,
288
- au as initTheme,
289
- ru as useClipboard,
290
- Bu as useLocale,
291
- nu as useMdRender,
292
- ou as useScreen,
293
- X as useTheme
485
+ g as LOGIN_STATUS,
486
+ L as ScreenConfig,
487
+ mu as Size,
488
+ H as clearUserAuth,
489
+ Hu as createTheme,
490
+ Uu as doLogin,
491
+ Yu as doLogout,
492
+ Lu as getUserAuth,
493
+ ju as setLoginKeys,
494
+ v as setStatus,
495
+ V as tryLogin,
496
+ zu as useAnalytics,
497
+ $u as useClipboard,
498
+ Wu as useElementEventAnalytics,
499
+ Iu as useLocale,
500
+ Z as useLoginStore,
501
+ Gu as useLoginWatcher,
502
+ Ku as useMdRender,
503
+ Pu as useScreen,
504
+ Vu as useTheme,
505
+ Mu as useWatchAnalytics
294
506
  };
@@ -1,5 +1 @@
1
- (function(t,F){typeof exports=="object"&&typeof module<"u"?F(exports,require("vue"),require("markdown-it-async"),require("markdown-it-anchor"),require("shiki"),require("vue-i18n"),require("@opensig/opendesign"),require("@vueuse/core"),require("js-cookie")):typeof define=="function"&&define.amd?define(["exports","vue","markdown-it-async","markdown-it-anchor","shiki","vue-i18n","@opensig/opendesign","@vueuse/core","js-cookie"],F):(t=typeof globalThis<"u"?globalThis:t||self,F(t.OpenDesignPlusComposables={},t.Vue,t.MarkdownItAsync,t.markdownItAnchor,t.shiki,t.VueI18n,t.OpenDesign,t.VueUse,t.Cookies))})(this,(function(t,F,b,P,g,S,w,I,L){"use strict";const $=new Set(Object.keys(g.bundledLanguages));async function q(D={}){const{anchor:u=!0,anchorType:C="vitepress",copy:e=!0,wrapMarkdownBodyDiv:s=!0,theme:E={},...B}=D,d=typeof(E==null?void 0:E.light)=="string"&&E.light in g.bundledThemes?E.light:"light-plus",i=typeof(E==null?void 0:E.dark)=="string"&&E.dark in g.bundledThemes?E.dark:"dark-plus",r=new Set(["text"]);F.onBeforeUnmount(()=>{c&&c.dispose()});const c=await g.createHighlighter({themes:[d,i],langs:["text"]}),A=b({async highlight(n,o){return $.has(o)||(o="text"),r.has(o)||(await c.loadLanguage(o),r.add(o)),c.codeToHtml(n,{lang:o,themes:{light:d,dark:i}})},...B});if(u&&A.use(P,{slugify:n=>C==="github"?V(n):z(n)}),e){const n=A.renderer.rules.fence;A.renderer.rules.fence=(...o)=>{var m;const[l,p]=o,f=l[p],y=A.utils.escapeHtml(f.content||"");return`<div class="language-${((m=f.info)==null?void 0:m.trim())||""}"><div class="copy" data-clipboard-text="${y}"></div>`+n(...o)+"</div>"}}if(s){const n=A.render;A.render=(l,p)=>`<div class="markdown-body">${n.call(A,l,p)}</div>`;const o=A.renderInline;A.renderInline=(l,p)=>`<div class="markdown-body">${o.call(A,l,p)}</div>`}return{shiki:c,markdwon:A}}function V(D){const u=/[\0-\x1F!-,\.\/:-@\[-\^`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482\u0530\u0557\u0558\u055A-\u055F\u0589-\u0590\u05BE\u05C0\u05C3\u05C6\u05C8-\u05CF\u05EB-\u05EE\u05F3-\u060F\u061B-\u061F\u066A-\u066D\u06D4\u06DD\u06DE\u06E9\u06FD\u06FE\u0700-\u070F\u074B\u074C\u07B2-\u07BF\u07F6-\u07F9\u07FB\u07FC\u07FE\u07FF\u082E-\u083F\u085C-\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u08E2\u0964\u0965\u0970\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09F2-\u09FB\u09FD\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF0-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B70\u0B72-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BF0-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C7F\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D4F-\u0D53\u0D58-\u0D5E\u0D64\u0D65\u0D70-\u0D79\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF4-\u0E00\u0E3B-\u0E3F\u0E4F\u0E5A-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F01-\u0F17\u0F1A-\u0F1F\u0F2A-\u0F34\u0F36\u0F38\u0F3A-\u0F3D\u0F48\u0F6D-\u0F70\u0F85\u0F98\u0FBD-\u0FC5\u0FC7-\u0FFF\u104A-\u104F\u109E\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u1360-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16ED\u16F9-\u16FF\u170D\u1715-\u171F\u1735-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17D4-\u17D6\u17D8-\u17DB\u17DE\u17DF\u17EA-\u180A\u180E\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u1945\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DA-\u19FF\u1A1C-\u1A1F\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1AA6\u1AA8-\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B5A-\u1B6A\u1B74-\u1B7F\u1BF4-\u1BFF\u1C38-\u1C3F\u1C4A-\u1C4C\u1C7E\u1C7F\u1C89-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CCF\u1CD3\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u203E\u2041-\u2053\u2055-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u20CF\u20F1-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u215F\u2189-\u24B5\u24EA-\u2BFF\u2C2F\u2C5F\u2CE5-\u2CEA\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E00-\u2E2E\u2E30-\u3004\u3008-\u3020\u3030\u3036\u3037\u303D-\u3040\u3097\u3098\u309B\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\u9FFD-\u9FFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA62C-\uA63F\uA673\uA67E\uA6F2-\uA716\uA720\uA721\uA789\uA78A\uA7C0\uA7C1\uA7CB-\uA7F4\uA828-\uA82B\uA82D-\uA83F\uA874-\uA87F\uA8C6-\uA8CF\uA8DA-\uA8DF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA954-\uA95F\uA97D-\uA97F\uA9C1-\uA9CE\uA9DA-\uA9DF\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A-\uAA5F\uAA77-\uAA79\uAAC3-\uAADA\uAADE\uAADF\uAAF0\uAAF1\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABEB\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFDFF\uFE10-\uFE1F\uFE30-\uFE32\uFE35-\uFE4C\uFE50-\uFE6F\uFE75\uFEFD-\uFF0F\uFF1A-\uFF20\uFF3B-\uFF3E\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDD3F\uDD75-\uDDFC\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEE1-\uDEFF\uDF20-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE40-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE7-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD28-\uDD2F\uDD3A-\uDE7F\uDEAA\uDEAD-\uDEAF\uDEB2-\uDEFF\uDF1D-\uDF26\uDF28-\uDF2F\uDF51-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC47-\uDC65\uDC70-\uDC7E\uDCBB-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD40-\uDD43\uDD48-\uDD4F\uDD74\uDD75\uDD77-\uDD7F\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDFF\uDE12\uDE38-\uDE3D\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC4B-\uDC4F\uDC5A-\uDC5D\uDC62-\uDC7F\uDCC6\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDC1-\uDDD7\uDDDE-\uDDFF\uDE41-\uDE43\uDE45-\uDE4F\uDE5A-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF3A-\uDFFF]|\uD806[\uDC3B-\uDC9F\uDCEA-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD44-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE2\uDDE5-\uDDFF\uDE3F-\uDE46\uDE48-\uDE4F\uDE9A-\uDE9C\uDE9E-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC41-\uDC4F\uDC5A-\uDC71\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF7-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83D\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDECF\uDEEE\uDEEF\uDEF5-\uDEFF\uDF37-\uDF3F\uDF44-\uDF4F\uDF5A-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE2\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDC9C\uDC9F-\uDFFF]|\uD834[\uDC00-\uDD64\uDD6A-\uDD6C\uDD73-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDE41\uDE45-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC\uDFCD]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD4F-\uDEBF\uDEFA-\uDFFF]|\uD83A[\uDCC5-\uDCCF\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD83C[\uDC00-\uDD2F\uDD4A-\uDD4F\uDD6A-\uDD6F\uDD8A-\uDFFF]|\uD83E[\uDC00-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]/g;return`user-content-${D.toLowerCase().replace(u,"").replace(/ /g,"-")}`}function z(D){return D.normalize("NFKD").replace(/[\u0300-\u036F]/g,"").replace(/[\u0000-\u001f]/g,"").replace(/[\s~`!@#$%^&*()\-_+=[\]{}|\\;:"'“”‘’<>,.?/]+/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"").replace(/^(\d)/,"_$1").toLowerCase()}var T=(D=>(D.Phone="phone",D.PadV="pad_v",D.PadH="pad_h",D.Laptop="laptop",D))(T||{});const h={phone:600,pad_v:840,pad_h:1200,laptop:1440},H={lt:(D,u)=>D<u,le:(D,u)=>D<=u,eq:(D,u)=>D===u,ne:(D,u)=>D!==u,ge:(D,u)=>D>=u,gt:(D,u)=>D>u},M=()=>{const D=F.reactive({width:1440,height:0}),u=F.ref("laptop"),C=a=>(typeof a>"u"&&(a=D.width),a<h.phone?"phone":a<h.pad_v?"pad_v":a<h.pad_h?"pad_h":"laptop"),e=(a="eq",k)=>{const G=D.width,N=h[k],W=H[a];return W(G,N)},s=F.computed(()=>e("le","phone")),E=F.computed(()=>e("gt","phone")),B=F.computed(()=>e("gt","phone")&&e("le","pad_h")),d=F.computed(()=>e("le","pad_h")),i=F.computed(()=>e("gt","pad_h")),r=F.computed(()=>e("gt","phone")&&e("le","pad_v")),c=F.computed(()=>e("le","pad_v")),A=F.computed(()=>e("gt","pad_v")),n=F.computed(()=>e("gt","pad_v")&&e("le","pad_h")),o=F.computed(()=>e("gt","pad_h")&&e("le","laptop")),l=F.computed(()=>e("le","laptop")),p=F.computed(()=>e("gt","laptop")),f=F.computed(()=>e("gt","phone")&&e("le","laptop")),y=F.computed(()=>e("gt","pad_v")&&e("le","laptop")),m=()=>{const{innerWidth:a,innerHeight:k}=window;D.width=a,D.height=k,u.value=C()};return F.onMounted(()=>{typeof window<"u"&&(window.addEventListener("resize",m),m(),F.nextTick(()=>m()))}),F.onUnmounted(()=>{typeof window<"u"&&window.removeEventListener("resize",m)}),{getSize:C,current:u,size:D,isPhone:s,gtPhone:E,isPad:B,lePad:d,gtPad:i,isPadV:r,lePadV:c,gtPadV:A,isPadH:n,isLaptop:o,leLaptop:l,gtLaptop:p,isPadToLaptop:f,isPadVToLaptop:y}},U=()=>{const{t:D,locale:u}=S.useI18n(),C=F.getCurrentInstance(),e=F.computed(()=>u.value==="zh"),s=F.computed(()=>u.value==="en");return F.watch(()=>u.value,B=>{w.isClient&&(document.documentElement.lang=B,localStorage.setItem("locale",B))},{immediate:!0}),{t:D,$t:D,locale:u,isZh:e,isEn:s,changeLocale:async B=>{var i;const d=w.isUndefined(B)?e.value?"en":"zh":B;u.value!==d&&(u.value=d,await F.nextTick(),(i=C==null?void 0:C.proxy)!=null&&i.$forceUpdate&&C.proxy.$forceUpdate())}}},R=`
2
- [警告] useTheme 缺少参数 storageKey 和 cookieDomain,解决方法:
3
- 1. 在项目入口处调用 initTheme 初始化主题,后续调用 useTheme 不必再传值;
4
- 2. 调用 useTheme 时传入 storageKey 和 cookieDomain 参数
5
- `.trim();let v,x;function j(D,u){v=D,x=u;const{isDark:C}=_();C.value&&(document.documentElement.getAttribute("data-o-theme")!=="dark"&&document.documentElement.setAttribute("data-o-theme","dark"),document.documentElement.classList.contains("dark")||document.documentElement.classList.add("dark"))}function _(D,u){const C=D||v,e=u||x;let s;typeof window<"u"&&C&&(s=L.get(C));const E=I.useColorMode({initialValue:s,storageKey:C||null,attribute:"data-o-theme",modes:{light:"light",dark:"dark"}}),B=F.computed(()=>E.value),d=F.computed(()=>E.value==="light"),i=F.computed(()=>E.value==="dark"),r=A=>{const n=A==="dark"?"dark":"light";C&&e?L.set(C,n,{domain:e}):console.warn(R),E.value=n,typeof window<"u"&&(n==="dark"?document.documentElement.classList.add("dark"):(document.documentElement.classList.remove("dark"),document.documentElement.classList.length===0&&document.documentElement.removeAttribute("class")))};return{theme:B,isLight:d,isDark:i,setTheme:r,toggleTheme:()=>{r(B.value==="light"?"dark":"light")}}}async function K(D){try{return navigator.clipboard?(await navigator.clipboard.writeText(D),!0):O(D)}catch{return!1}}function O(D){const u=document.createElement("textarea");u.value=D,u.style.top="0",u.style.left="0",u.style.width="1px",u.style.height="1px",u.style.position="fixed",u.style.opacity="0",document.body.appendChild(u),u.focus(),u.select();try{const C=document.execCommand("copy");return document.body.removeChild(u),C}catch{return document.body.removeChild(u),!1}}t.ScreenConfig=h,t.Size=T,t.initTheme=j,t.useClipboard=K,t.useLocale=U,t.useMdRender=q,t.useScreen=M,t.useTheme=_,Object.defineProperty(t,Symbol.toStringTag,{value:"Module"})}));
1
+ (function(n,F){typeof exports=="object"&&typeof module<"u"?F(exports,require("vue"),require("markdown-it-async"),require("markdown-it-anchor"),require("shiki"),require("vue-i18n"),require("@opensig/opendesign"),require("js-cookie"),require("pinia")):typeof define=="function"&&define.amd?define(["exports","vue","markdown-it-async","markdown-it-anchor","shiki","vue-i18n","@opensig/opendesign","js-cookie","pinia"],F):(n=typeof globalThis<"u"?globalThis:n||self,F(n.OpenDesignPlusComposables={},n.Vue,n.MarkdownItAsync,n.markdownItAnchor,n.shiki,n.VueI18n,n.OpenDesign,n.Cookies,n.Pinia))})(this,(function(n,F,y,Q,v,J,H,b,Z){"use strict";var wu=Object.defineProperty;var Lu=(n,F,y)=>F in n?wu(n,F,{enumerable:!0,configurable:!0,writable:!0,value:y}):n[F]=y;var k=(n,F,y)=>Lu(n,typeof F!="symbol"?F+"":F,y);const X=new Set(Object.keys(v.bundledLanguages));async function uu(u={}){const{anchor:D=!0,anchorType:o="vitepress",copy:e=!0,wrapMarkdownBodyDiv:t=!0,theme:E={},...C}=u,i=typeof(E==null?void 0:E.light)=="string"&&E.light in v.bundledThemes?E.light:"light-plus",A=typeof(E==null?void 0:E.dark)=="string"&&E.dark in v.bundledThemes?E.dark:"dark-plus",s=new Set(["text"]);F.onBeforeUnmount(()=>{a&&a.dispose()});const a=await v.createHighlighter({themes:[i,A],langs:["text"]}),c=y({async highlight(d,r){return X.has(r)||(r="text"),s.has(r)||(await a.loadLanguage(r),s.add(r)),a.codeToHtml(d,{lang:r,themes:{light:i,dark:A}})},...C});if(D&&c.use(Q,{slugify:d=>o==="github"?Du(d):eu(d)}),e){const d=c.renderer.rules.fence;c.renderer.rules.fence=(...r)=>{var m;const[l,f]=r,B=l[f],h=c.utils.escapeHtml(B.content||"");return`<div class="language-${((m=B.info)==null?void 0:m.trim())||""}"><div class="copy" data-clipboard-text="${h}"></div>`+d(...r)+"</div>"}}if(t){const d=c.render;c.render=(l,f)=>`<div class="markdown-body">${d.call(c,l,f)}</div>`;const r=c.renderInline;c.renderInline=(l,f)=>`<div class="markdown-body">${r.call(c,l,f)}</div>`}return{shiki:a,markdwon:c}}function Du(u){const D=/[\0-\x1F!-,\.\/:-@\[-\^`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482\u0530\u0557\u0558\u055A-\u055F\u0589-\u0590\u05BE\u05C0\u05C3\u05C6\u05C8-\u05CF\u05EB-\u05EE\u05F3-\u060F\u061B-\u061F\u066A-\u066D\u06D4\u06DD\u06DE\u06E9\u06FD\u06FE\u0700-\u070F\u074B\u074C\u07B2-\u07BF\u07F6-\u07F9\u07FB\u07FC\u07FE\u07FF\u082E-\u083F\u085C-\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u08E2\u0964\u0965\u0970\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09F2-\u09FB\u09FD\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF0-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B70\u0B72-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BF0-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C7F\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D4F-\u0D53\u0D58-\u0D5E\u0D64\u0D65\u0D70-\u0D79\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF4-\u0E00\u0E3B-\u0E3F\u0E4F\u0E5A-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F01-\u0F17\u0F1A-\u0F1F\u0F2A-\u0F34\u0F36\u0F38\u0F3A-\u0F3D\u0F48\u0F6D-\u0F70\u0F85\u0F98\u0FBD-\u0FC5\u0FC7-\u0FFF\u104A-\u104F\u109E\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u1360-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16ED\u16F9-\u16FF\u170D\u1715-\u171F\u1735-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17D4-\u17D6\u17D8-\u17DB\u17DE\u17DF\u17EA-\u180A\u180E\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u1945\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DA-\u19FF\u1A1C-\u1A1F\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1AA6\u1AA8-\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B5A-\u1B6A\u1B74-\u1B7F\u1BF4-\u1BFF\u1C38-\u1C3F\u1C4A-\u1C4C\u1C7E\u1C7F\u1C89-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CCF\u1CD3\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u203E\u2041-\u2053\u2055-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u20CF\u20F1-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u215F\u2189-\u24B5\u24EA-\u2BFF\u2C2F\u2C5F\u2CE5-\u2CEA\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E00-\u2E2E\u2E30-\u3004\u3008-\u3020\u3030\u3036\u3037\u303D-\u3040\u3097\u3098\u309B\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\u9FFD-\u9FFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA62C-\uA63F\uA673\uA67E\uA6F2-\uA716\uA720\uA721\uA789\uA78A\uA7C0\uA7C1\uA7CB-\uA7F4\uA828-\uA82B\uA82D-\uA83F\uA874-\uA87F\uA8C6-\uA8CF\uA8DA-\uA8DF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA954-\uA95F\uA97D-\uA97F\uA9C1-\uA9CE\uA9DA-\uA9DF\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A-\uAA5F\uAA77-\uAA79\uAAC3-\uAADA\uAADE\uAADF\uAAF0\uAAF1\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABEB\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFDFF\uFE10-\uFE1F\uFE30-\uFE32\uFE35-\uFE4C\uFE50-\uFE6F\uFE75\uFEFD-\uFF0F\uFF1A-\uFF20\uFF3B-\uFF3E\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDD3F\uDD75-\uDDFC\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEE1-\uDEFF\uDF20-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE40-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE7-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD28-\uDD2F\uDD3A-\uDE7F\uDEAA\uDEAD-\uDEAF\uDEB2-\uDEFF\uDF1D-\uDF26\uDF28-\uDF2F\uDF51-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC47-\uDC65\uDC70-\uDC7E\uDCBB-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD40-\uDD43\uDD48-\uDD4F\uDD74\uDD75\uDD77-\uDD7F\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDFF\uDE12\uDE38-\uDE3D\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC4B-\uDC4F\uDC5A-\uDC5D\uDC62-\uDC7F\uDCC6\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDC1-\uDDD7\uDDDE-\uDDFF\uDE41-\uDE43\uDE45-\uDE4F\uDE5A-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF3A-\uDFFF]|\uD806[\uDC3B-\uDC9F\uDCEA-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD44-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE2\uDDE5-\uDDFF\uDE3F-\uDE46\uDE48-\uDE4F\uDE9A-\uDE9C\uDE9E-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC41-\uDC4F\uDC5A-\uDC71\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF7-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83D\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDECF\uDEEE\uDEEF\uDEF5-\uDEFF\uDF37-\uDF3F\uDF44-\uDF4F\uDF5A-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE2\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDC9C\uDC9F-\uDFFF]|\uD834[\uDC00-\uDD64\uDD6A-\uDD6C\uDD73-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDE41\uDE45-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC\uDFCD]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD4F-\uDEBF\uDEFA-\uDFFF]|\uD83A[\uDCC5-\uDCCF\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD83C[\uDC00-\uDD2F\uDD4A-\uDD4F\uDD6A-\uDD6F\uDD8A-\uDFFF]|\uD83E[\uDC00-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]/g;return`user-content-${u.toLowerCase().replace(D,"").replace(/ /g,"-")}`}function eu(u){return u.normalize("NFKD").replace(/[\u0300-\u036F]/g,"").replace(/[\u0000-\u001f]/g,"").replace(/[\s~`!@#$%^&*()\-_+=[\]{}|\\;:"'“”‘’<>,.?/]+/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"").replace(/^(\d)/,"_$1").toLowerCase()}var V=(u=>(u.Phone="phone",u.PadV="pad_v",u.PadH="pad_h",u.Laptop="laptop",u))(V||{});const L={phone:600,pad_v:840,pad_h:1200,laptop:1440},Fu={lt:(u,D)=>u<D,le:(u,D)=>u<=D,eq:(u,D)=>u===D,ne:(u,D)=>u!==D,ge:(u,D)=>u>=D,gt:(u,D)=>u>D},tu=()=>{const u=F.reactive({width:1440,height:0}),D=F.ref("laptop"),o=p=>(typeof p>"u"&&(p=u.width),p<L.phone?"phone":p<L.pad_v?"pad_v":p<L.pad_h?"pad_h":"laptop"),e=(p="eq",j)=>{const pu=u.width,gu=L[j],yu=Fu[p];return yu(pu,gu)},t=F.computed(()=>e("le","phone")),E=F.computed(()=>e("gt","phone")),C=F.computed(()=>e("gt","phone")&&e("le","pad_h")),i=F.computed(()=>e("le","pad_h")),A=F.computed(()=>e("gt","pad_h")),s=F.computed(()=>e("gt","phone")&&e("le","pad_v")),a=F.computed(()=>e("le","pad_v")),c=F.computed(()=>e("gt","pad_v")),d=F.computed(()=>e("gt","pad_v")&&e("le","pad_h")),r=F.computed(()=>e("gt","pad_h")&&e("le","laptop")),l=F.computed(()=>e("le","laptop")),f=F.computed(()=>e("gt","laptop")),B=F.computed(()=>e("gt","phone")&&e("le","laptop")),h=F.computed(()=>e("gt","pad_v")&&e("le","laptop")),m=()=>{const{innerWidth:p,innerHeight:j}=window;u.width=p,u.height=j,D.value=o()};return F.onMounted(()=>{typeof window<"u"&&(window.addEventListener("resize",m),m(),F.nextTick(()=>m()))}),F.onUnmounted(()=>{typeof window<"u"&&window.removeEventListener("resize",m)}),{getSize:o,current:D,size:u,isPhone:t,gtPhone:E,isPad:C,lePad:i,gtPad:A,isPadV:s,lePadV:a,gtPadV:c,isPadH:d,isLaptop:r,leLaptop:l,gtLaptop:f,isPadToLaptop:B,isPadVToLaptop:h}},nu=()=>{const{t:u,locale:D}=J.useI18n(),o=F.getCurrentInstance(),e=F.computed(()=>D.value==="zh"),t=F.computed(()=>D.value==="en");return F.watch(()=>D.value,C=>{H.isClient&&(document.documentElement.lang=C,localStorage.setItem("locale",C))},{immediate:!0}),{t:u,$t:u,locale:D,isZh:e,isEn:t,changeLocale:async C=>{var A;const i=H.isUndefined(C)?e.value?"en":"zh":C;D.value!==i&&(D.value=i,await F.nextTick(),(A=o==null?void 0:o.proxy)!=null&&A.$forceUpdate&&o.proxy.$forceUpdate())}}},ou="[警告] 请在项目中注入主题配置项:app.use(createTheme(options))",Eu="[警告] 缺少参数 cookieKey 和 cookieDomain,请在 createTheme 传入 cookieKey 和 cookieDomain 参数",$=Symbol("theme"),q=Symbol("isLight"),M=Symbol("isDark"),U=Symbol("setTheme"),W=Symbol("toggleTheme");function iu(u){const{cookieKey:D,cookieDomain:o,lightValue:e="light",darkValue:t="dark",attribute:E="data-o-theme",attributeLightValue:C=e,attributeDarkValue:i=t,classLightValue:A=e,classDarkValue:s=t}=u||{},a=F.ref(e),c=F.computed(()=>a.value===e),d=F.computed(()=>a.value===t),r=F.computed(()=>a.value),l=(B,h=!0)=>{const m=B===t?t:e;a.value=m,!(typeof window>"u")&&(m===t?(document.documentElement.setAttribute(E,i),document.documentElement.classList.add(s),document.documentElement.classList.remove(A)):(document.documentElement.setAttribute(E,C),document.documentElement.classList.add(A),document.documentElement.classList.remove(s)),h&&(D&&o?b.set(D,m,{domain:o}):console.warn(Eu)))},f=()=>{l(r.value===t?e:t)};return{install(B){if(B.provide($,r),B.provide(q,c),B.provide(M,d),B.provide(U,l),B.provide(W,f),typeof window>"u")return;let h;D&&(h=b.get(D)),h||(h=window.matchMedia("(prefers-color-scheme: dark)").matches?t:e),l(h===t?t:e,!1)}}}function Cu(){const u=F.inject($);return u||console.warn(ou),{theme:u,isLight:F.inject(q),isDark:F.inject(M),setTheme:F.inject(U),toggleTheme:F.inject(W)}}async function Au(u){try{return navigator.clipboard?(await navigator.clipboard.writeText(u),!0):su(u)}catch{return!1}}function su(u){const D=document.createElement("textarea");D.value=u,D.style.top="0",D.style.left="0",D.style.width="1px",D.style.height="1px",D.style.position="fixed",D.style.opacity="0",document.body.appendChild(D),D.focus(),D.select();try{const o=document.execCommand("copy");return document.body.removeChild(D),o}catch{return document.body.removeChild(D),!1}}class _{constructor(D){k(this,"prev",null);k(this,"next",null);k(this,"data",null);this.data=D}removeSelf(){this.data=null,this.prev&&(this.prev.next=this.next),this.next&&(this.next.prev=this.prev),this.prev=null,this.next=null}}class ru{constructor(){k(this,"dummyHead",new _(null))}shift(D){const o=new _(D),e=this.dummyHead.next;return o.prev=this.dummyHead,this.dummyHead.next=o,e&&(o.next=e,e.prev=o),o}remove(D){D.removeSelf()}clear(){let D=this.dummyHead.next;for(;D;){const o=D.next;D.removeSelf(),D=o}this.dummyHead.next=null}}const z=Symbol(),T=Symbol(),S=async(u,...D)=>typeof u=="function"?await u(...D):F.unref(u),x=u=>typeof u=="object"&&u!==null,O=u=>typeof u.event=="string"&&x(u.properties);function R(u,D){let o,e;if(D!=null&&D.catchBubble)o=new ru,e=o.shift(async t=>{var E,C;if(x(t))if(t[T]){const i=await S(u);if(!O(i))return;delete t[T];const A={...i,properties:{...i.properties,...t}};(E=window.__OA_REPORT__)==null||E.call(window,A.event,A.properties)}else O(t)&&((C=window.__OA_REPORT__)==null||C.call(window,t.event,t.properties))}),F.provide((D==null?void 0:D.key)??z,o);else if(D!=null&&D.bubble){if(o=F.inject((D==null?void 0:D.key)??z),!o)return;e=o.shift(async t=>{var E,C,i,A;if(x(t))if(t[T]){const s=await S(u);if(!x(s))return;const a={...s,...t};(C=(E=e.next)==null?void 0:E.data)==null||C.call(E,a)}else(A=(i=e.next)==null?void 0:i.data)==null||A.call(i,{...t,[T]:!0})})}else e=t=>{var E;O(t)&&((E=window.__OA_REPORT__)==null||E.call(window,t.event,t.properties))};return F.onUnmounted(()=>{o=null,e instanceof _&&e.removeSelf(),e=null}),e}function cu(u,D,o){if(!F.isRef(u)&&typeof u!="function")return;const e=R(D,o);F.watch(u,async(t,E)=>{var i;const C=await S(D,t,E);e instanceof _?(i=e.data)==null||i.call(e,C):typeof e=="function"&&e(C)})}const G=new WeakSet;function au(u,D,o,e){const t=F.computed(()=>F.unref(u)),E=R(o,{...e,key:D}),C=async i=>{var s;if(e!=null&&e.bubble&&G.has(i))return;G.add(i);const A=await S(o,i);typeof A=="object"&&A!==null&&(E instanceof _?(s=E.data)==null||s.call(E,A):typeof E=="function"&&E(A))};F.onMounted(()=>{var i;return(i=t.value)==null?void 0:i.addEventListener(D,C)}),F.onBeforeUnmount(()=>{var i;return(i=t.value)==null?void 0:i.removeEventListener(D,C)})}function du(u,D){R(u,D)}const N=Z.defineStore("login",{state:()=>({loginStatus:g.NOT}),actions:{setLoginStatus(u){this.loginStatus=u}},getters:{isLoginFailed(){return this.loginStatus===g.FAILED},isLoginNot(){return this.loginStatus===g.NOT},isLoggingIn(){return this.loginStatus===g.DOING},isLogined(){return this.loginStatus===g.DONE}}});var g=(u=>(u[u.FAILED=-1]="FAILED",u[u.NOT=0]="NOT",u[u.DOING=1]="DOING",u[u.DONE=2]="DONE",u))(g||{});const P={CSRF_TOKEN:"_U_T_"},Bu=300,lu=u=>{P.CSRF_TOKEN=u},Y=()=>({csrfCookie:b.get(P.CSRF_TOKEN)}),K=()=>{b.remove(P.CSRF_TOKEN)},mu=u=>{window.location.href=u},w=u=>{N().setLoginStatus(u)},I=async(u,D=!1)=>{const{csrfCookie:o}=Y();if(!(!o||D))try{w(1);const e=await u();if(e!=null&&e.data)return w(2),e.data;w(-1),K();return}catch{w(-1),K();return}},hu=u=>{window.location.href=u,setTimeout(()=>{w(0)},Bu)},fu=(u,D,o,e,t=!1)=>{const E=N();F.watch(()=>e.path,async(C,i)=>{if(C===i||E.isLogined)return;u.some(s=>C.includes(s))?o.value=await I(D,t):I(D,t).then(s=>{o.value=s})},{immediate:!0})};n.LOGIN_STATUS=g,n.ScreenConfig=L,n.Size=V,n.clearUserAuth=K,n.createTheme=iu,n.doLogin=mu,n.doLogout=hu,n.getUserAuth=Y,n.setLoginKeys=lu,n.setStatus=w,n.tryLogin=I,n.useAnalytics=du,n.useClipboard=Au,n.useElementEventAnalytics=au,n.useLocale=nu,n.useLoginStore=N,n.useLoginWatcher=fu,n.useMdRender=uu,n.useScreen=tu,n.useTheme=Cu,n.useWatchAnalytics=cu,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"})}));
@@ -0,0 +1,18 @@
1
+ import { LOGIN_STATUS } from '../core/useLogin';
2
+ /**
3
+ * 登录状态 Store
4
+ */
5
+ export declare const useLoginStore: import('pinia').StoreDefinition<"login", {
6
+ loginStatus: LOGIN_STATUS;
7
+ }, {
8
+ isLoginFailed(): boolean;
9
+ isLoginNot(): boolean;
10
+ isLoggingIn(): boolean;
11
+ isLogined(): boolean;
12
+ }, {
13
+ /**
14
+ * 设置登录状态
15
+ * @param status - 登录状态值
16
+ */
17
+ setLoginStatus(status: LOGIN_STATUS): void;
18
+ }>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opendesign-plus/composables",
3
- "version": "0.0.1-rc.6",
3
+ "version": "0.0.1-rc.7",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -25,6 +25,9 @@
25
25
  "shiki": "^3.7.0",
26
26
  "js-cookie": "3.0.5"
27
27
  },
28
+ "peerDependencies": {
29
+ "pinia": "^3.0.3"
30
+ },
28
31
  "devDependencies": {
29
32
  "sass": "^1.71.1",
30
33
  "typescript": "~5.8.2",