@pawover/kit 0.0.0-beta.32 → 0.0.0-beta.40

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.
@@ -1,3 +1,39 @@
1
+ //#region src/enums/date.ts
2
+ const DATE_FORMAT = {
3
+ ISO_DATE: "yyyy-MM-dd",
4
+ ISO_TIME: "HH:mm:ss",
5
+ ISO_DATE_TIME: "yyyy-MM-dd HH:mm:ss",
6
+ ISO_DATE_TIME_MS: "yyyy-MM-dd HH:mm:ss.SSS",
7
+ ISO_DATETIME_TZ: "yyyy-MM-dd'T'HH:mm:ssXXX",
8
+ ISO_DATETIME_TZ_MS: "yyyy-MM-dd'T'HH:mm:ss.SSSXXX",
9
+ US_DATE: "MM/dd/yyyy",
10
+ US_DATE_TIME: "MM/dd/yyyy HH:mm:ss",
11
+ US_DATE_SHORT_YEAR: "MM/dd/yy",
12
+ EU_DATE: "dd/MM/yyyy",
13
+ EU_DATE_TIME: "dd/MM/yyyy HH:mm:ss",
14
+ CN_DATE: "yyyy年MM月dd日",
15
+ CN_DATE_TIME: "yyyy年MM月dd日 HH时mm分ss秒",
16
+ CN_DATE_WEEKDAY: "yyyy年MM月dd日 EEE",
17
+ CN_WEEKDAY_FULL: "EEEE",
18
+ SHORT_DATE: "yy-MM-dd",
19
+ SHORT_DATE_SLASH: "yy/MM/dd",
20
+ MONTH_DAY: "MM-dd",
21
+ MONTH_DAY_CN: "MM月dd日",
22
+ DATE_WITH_WEEKDAY_SHORT: "yyyy-MM-dd (EEE)",
23
+ DATE_WITH_WEEKDAY_FULL: "yyyy-MM-dd (EEEE)",
24
+ TIME_24: "HH:mm:ss",
25
+ TIME_24_NO_SEC: "HH:mm",
26
+ TIME_12: "hh:mm:ss a",
27
+ TIME_12_NO_SEC: "hh:mm a",
28
+ TIMESTAMP: "yyyyMMddHHmmss",
29
+ TIMESTAMP_MS: "yyyyMMddHHmmssSSS",
30
+ RFC2822: "EEE, dd MMM yyyy HH:mm:ss xxx",
31
+ READABLE_DATE: "MMM dd, yyyy",
32
+ READABLE_DATE_TIME: "MMM dd, yyyy HH:mm",
33
+ COMPACT_DATETIME: "yyyyMMdd_HHmmss"
34
+ };
35
+
36
+ //#endregion
1
37
  //#region src/enums/grid.ts
2
38
  /** 屏幕响应断点 token 配置 */
3
39
  const BREAK_POINT_TOKEN_ENUM = {
@@ -96,5 +132,17 @@ const MIME = {
96
132
  };
97
133
 
98
134
  //#endregion
99
- export { BREAK_POINT_TOKEN_ENUM as n, MIME as t };
100
- //# sourceMappingURL=enums-XkYDzrre.js.map
135
+ //#region src/enums/theme.ts
136
+ const THEME_ENUM = {
137
+ LIGHT: "light",
138
+ DARK: "dark"
139
+ };
140
+ const THEME_MODE_ENUM = {
141
+ LIGHT: "light",
142
+ DARK: "dark",
143
+ SYSTEM: "system"
144
+ };
145
+
146
+ //#endregion
147
+ export { DATE_FORMAT as a, BREAK_POINT_TOKEN_ENUM as i, THEME_MODE_ENUM as n, MIME as r, THEME_ENUM as t };
148
+ //# sourceMappingURL=enums-BL6w5-mS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums-BL6w5-mS.js","names":[],"sources":["../src/enums/date.ts","../src/enums/grid.ts","../src/enums/mime.ts","../src/enums/theme.ts"],"sourcesContent":["export const DATE_FORMAT = {\n // ISO 8601\n ISO_DATE: \"yyyy-MM-dd\",\n ISO_TIME: \"HH:mm:ss\",\n ISO_DATE_TIME: \"yyyy-MM-dd HH:mm:ss\",\n ISO_DATE_TIME_MS: \"yyyy-MM-dd HH:mm:ss.SSS\",\n ISO_DATETIME_TZ: \"yyyy-MM-dd'T'HH:mm:ssXXX\",\n ISO_DATETIME_TZ_MS: \"yyyy-MM-dd'T'HH:mm:ss.SSSXXX\",\n\n // US\n US_DATE: \"MM/dd/yyyy\",\n US_DATE_TIME: \"MM/dd/yyyy HH:mm:ss\",\n US_DATE_SHORT_YEAR: \"MM/dd/yy\",\n\n // EU\n EU_DATE: \"dd/MM/yyyy\",\n EU_DATE_TIME: \"dd/MM/yyyy HH:mm:ss\",\n\n // CN\n CN_DATE: \"yyyy年MM月dd日\",\n CN_DATE_TIME: \"yyyy年MM月dd日 HH时mm分ss秒\",\n CN_DATE_WEEKDAY: \"yyyy年MM月dd日 EEE\",\n CN_WEEKDAY_FULL: \"EEEE\",\n\n // 简洁\n SHORT_DATE: \"yy-MM-dd\",\n SHORT_DATE_SLASH: \"yy/MM/dd\",\n MONTH_DAY: \"MM-dd\",\n MONTH_DAY_CN: \"MM月dd日\",\n\n // 带星期\n DATE_WITH_WEEKDAY_SHORT: \"yyyy-MM-dd (EEE)\",\n DATE_WITH_WEEKDAY_FULL: \"yyyy-MM-dd (EEEE)\",\n\n // 时间\n TIME_24: \"HH:mm:ss\",\n TIME_24_NO_SEC: \"HH:mm\",\n TIME_12: \"hh:mm:ss a\",\n TIME_12_NO_SEC: \"hh:mm a\",\n\n // 时间戳\n TIMESTAMP: \"yyyyMMddHHmmss\",\n TIMESTAMP_MS: \"yyyyMMddHHmmssSSS\",\n\n // RFC\n RFC2822: \"EEE, dd MMM yyyy HH:mm:ss xxx\",\n\n // 其他\n READABLE_DATE: \"MMM dd, yyyy\",\n READABLE_DATE_TIME: \"MMM dd, yyyy HH:mm\",\n COMPACT_DATETIME: \"yyyyMMdd_HHmmss\",\n} as const;\n","export type BREAK_POINT_TOKEN_TYPE = Record<keyof typeof BREAK_POINT_TOKEN_ENUM, number>;\n/** 屏幕响应断点 token 配置 */\nexport const BREAK_POINT_TOKEN_ENUM = {\n XS: 480,\n XSMax: 575,\n XSMin: 480,\n\n SM: 576,\n SMMax: 767,\n SMMin: 576,\n\n MD: 768,\n MDMax: 991,\n MDMin: 768,\n\n LG: 992,\n LGMax: 1199,\n LGMin: 992,\n\n XL: 1200,\n XLMax: 1599,\n XLMin: 1200,\n\n XXL: 1600,\n XXLMax: 1919,\n XXLMin: 1600,\n\n XXXL: 1920,\n XXXLMin: 1920,\n} as const;\n","/**\n * 标准 MIME 类型常量,用于文件类型标识和 HTTP Content-Type 头部\n * 基于 IANA 注册标准和浏览器兼容性验证\n */\nexport const MIME = {\n /** 普通文本文件 */\n TEXT: \"text/plain\",\n /** 超文本标记语言文档 */\n HTML: \"text/html\",\n /** 层叠样式表文件 */\n CSS: \"text/css\",\n /** 逗号分隔值文件(表格数据) */\n CSV: \"text/csv\",\n /** 制表符分隔值文件 */\n TSV: \"text/tab-separated-values\",\n /** XML 文档 */\n XML: \"text/xml\",\n /** XHTML 文档(XML 严格格式的 HTML) */\n XHTML: \"application/xhtml+xml\",\n /** JavaScript 脚本文件(标准推荐) */\n JS: \"text/javascript\",\n /** Markdown 格式文档 */\n MARKDOWN: \"text/markdown\",\n /** 富文本格式文档(.rtf) */\n RTF: \"application/rtf\",\n /** iCalendar 日历格式(.ics) */\n CALENDAR: \"text/calendar\",\n /** JPEG 图像(.jpg/.jpeg) */\n JPEG: \"image/jpeg\",\n /** PNG 图像(无损压缩,支持透明) */\n PNG: \"image/png\",\n /** GIF 图像(支持动画) */\n GIF: \"image/gif\",\n /** Windows 位图(.bmp) */\n BMP: \"image/bmp\",\n /** SVG 向量图形(.svg) */\n SVG: \"image/svg+xml\",\n /** APNG 动态图像(.apng) */\n APNG: \"image/apng\",\n /** AVIF 图像(高效压缩) */\n AVIF: \"image/avif\",\n /** 图标文件格式(.ico) */\n ICO: \"image/vnd.microsoft.icon\",\n /** WebP 图像(高效压缩) */\n WEBP: \"image/webp\",\n /** MP3 音频(.mp3) */\n MP3: \"audio/mpeg\",\n /** AAC 音频(.aac) */\n AAC: \"audio/aac\",\n /** MIDI 音乐文件(.mid/.midi) */\n MIDI: \"audio/midi\",\n /** OGG 音频(.oga) */\n OGG_AUDIO: \"audio/ogg\",\n /** Opus 音频(.opus) */\n OPUS: \"audio/opus\",\n /** WAV 音频(.wav) */\n WAV: \"audio/wav\",\n /** RealAudio 音频(.ra/.ram) */\n REAL_AUDIO: \"audio/x-pn-realaudio\",\n /** MP4 视频(.mp4) */\n MP4: \"video/mp4\",\n /** MPEG 视频(.mpeg/.mpg) */\n MPEG: \"video/mpeg\",\n /** OGG 视频(.ogv) */\n OGG_VIDEO: \"video/ogg\",\n /** AVI 视频(.avi) */\n AVI: \"video/x-msvideo\",\n /** 3GPP 视频(.3gp) */\n THREE_GPP: \"video/3gpp\",\n /** 3GPP2 视频(.3g2) */\n THREE_GPP2: \"video/3gpp2\",\n /** WebM 视频(.webm) */\n WEBM: \"video/webm\",\n /** PDF 文档 */\n PDF: \"application/pdf\",\n /** Word 97-2003 文档(.doc) */\n DOC: \"application/msword\",\n /** Word 2007+ 文档(.docx) */\n DOCX: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n /** Excel 2007+ 工作簿(.xlsx) */\n XLSX: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n /** 启用宏的Excel工作簿(.xlsm) */\n XLSM: \"application/vnd.ms-excel.sheet.macroEnabled.12\",\n /** Excel模板文件(.xltx) */\n XLTX: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\",\n /** PowerPoint 2007+ 演示文稿(.pptx) */\n PPTX: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n /** PowerPoint 97-2003 演示文稿(.ppt) */\n PPT: \"application/vnd.ms-powerpoint\",\n /** OpenDocument 文本文档(.odt) */\n ODT: \"application/vnd.oasis.opendocument.text\",\n /** OpenDocument 表格文档(.ods) */\n ODS: \"application/vnd.oasis.opendocument.spreadsheet\",\n /** OpenDocument 演示文稿(.odp) */\n ODP: \"application/vnd.oasis.opendocument.presentation\",\n /** EPUB 电子书(.epub) */\n EPUB: \"application/epub+zip\",\n /** Kindle 电子书(.azw) */\n AZW: \"application/vnd.amazon.ebook\",\n /** ZIP 压缩文件(.zip) */\n ZIP: \"application/zip\",\n /** GZIP 压缩文件(.gz) */\n GZIP: \"application/gzip\",\n /** GZIP 压缩文件(旧格式) */\n X_GZIP: \"application/x-gzip\",\n /** TAR 归档文件(.tar) */\n TAR: \"application/x-tar\",\n /** BZip 归档(.bz) */\n BZIP: \"application/x-bzip\",\n /** BZip2 归档(.bz2) */\n BZIP2: \"application/x-bzip2\",\n /** 7-Zip 压缩文件(.7z) */\n SEVEN_Z: \"application/x-7z-compressed\",\n /** 通用二进制数据(默认类型) */\n OCTET_STREAM: \"application/octet-stream\",\n /** JSON 数据格式(.json) */\n JSON: \"application/json\",\n /** JSON-LD 格式(.jsonld) */\n LD_JSON: \"application/ld+json\",\n /** Java 归档文件(.jar) */\n JAR: \"application/java-archive\",\n /** MS 嵌入式 OpenType 字体(.eot) */\n EOT: \"application/vnd.ms-fontobject\",\n /** OpenType 字体(.otf) */\n OTF: \"font/otf\",\n /** Excel 97-2003 工作簿(.xls) */\n XLS: \"application/vnd.ms-excel\",\n /** Microsoft XPS 文档(.xps) */\n XPS: \"application/vnd.ms-xpsdocument\",\n /** Word 启用宏文档(.docm) */\n DOCM: \"application/vnd.ms-word.document.macroEnabled.12\",\n} as const;\n","import type { ValueOf } from \"type-fest\";\n\nexport type THEME_TYPE = ValueOf<typeof THEME_ENUM>;\nexport const THEME_ENUM = {\n LIGHT: \"light\",\n DARK: \"dark\",\n} as const;\n\nexport type THEME_MODE_TYPE = ValueOf<typeof THEME_MODE_ENUM>;\nexport const THEME_MODE_ENUM = {\n LIGHT: \"light\",\n DARK: \"dark\",\n SYSTEM: \"system\",\n} as const;\n"],"mappings":";AAAA,MAAa,cAAc;CAEzB,UAAU;CACV,UAAU;CACV,eAAe;CACf,kBAAkB;CAClB,iBAAiB;CACjB,oBAAoB;CAGpB,SAAS;CACT,cAAc;CACd,oBAAoB;CAGpB,SAAS;CACT,cAAc;CAGd,SAAS;CACT,cAAc;CACd,iBAAiB;CACjB,iBAAiB;CAGjB,YAAY;CACZ,kBAAkB;CAClB,WAAW;CACX,cAAc;CAGd,yBAAyB;CACzB,wBAAwB;CAGxB,SAAS;CACT,gBAAgB;CAChB,SAAS;CACT,gBAAgB;CAGhB,WAAW;CACX,cAAc;CAGd,SAAS;CAGT,eAAe;CACf,oBAAoB;CACpB,kBAAkB;CACnB;;;;;ACjDD,MAAa,yBAAyB;CACpC,IAAI;CACJ,OAAO;CACP,OAAO;CAEP,IAAI;CACJ,OAAO;CACP,OAAO;CAEP,IAAI;CACJ,OAAO;CACP,OAAO;CAEP,IAAI;CACJ,OAAO;CACP,OAAO;CAEP,IAAI;CACJ,OAAO;CACP,OAAO;CAEP,KAAK;CACL,QAAQ;CACR,QAAQ;CAER,MAAM;CACN,SAAS;CACV;;;;;;;;ACzBD,MAAa,OAAO;CAElB,MAAM;CAEN,MAAM;CAEN,KAAK;CAEL,KAAK;CAEL,KAAK;CAEL,KAAK;CAEL,OAAO;CAEP,IAAI;CAEJ,UAAU;CAEV,KAAK;CAEL,UAAU;CAEV,MAAM;CAEN,KAAK;CAEL,KAAK;CAEL,KAAK;CAEL,KAAK;CAEL,MAAM;CAEN,MAAM;CAEN,KAAK;CAEL,MAAM;CAEN,KAAK;CAEL,KAAK;CAEL,MAAM;CAEN,WAAW;CAEX,MAAM;CAEN,KAAK;CAEL,YAAY;CAEZ,KAAK;CAEL,MAAM;CAEN,WAAW;CAEX,KAAK;CAEL,WAAW;CAEX,YAAY;CAEZ,MAAM;CAEN,KAAK;CAEL,KAAK;CAEL,MAAM;CAEN,MAAM;CAEN,MAAM;CAEN,MAAM;CAEN,MAAM;CAEN,KAAK;CAEL,KAAK;CAEL,KAAK;CAEL,KAAK;CAEL,MAAM;CAEN,KAAK;CAEL,KAAK;CAEL,MAAM;CAEN,QAAQ;CAER,KAAK;CAEL,MAAM;CAEN,OAAO;CAEP,SAAS;CAET,cAAc;CAEd,MAAM;CAEN,SAAS;CAET,KAAK;CAEL,KAAK;CAEL,KAAK;CAEL,KAAK;CAEL,KAAK;CAEL,MAAM;CACP;;;;AChID,MAAa,aAAa;CACxB,OAAO;CACP,MAAM;CACP;AAGD,MAAa,kBAAkB;CAC7B,OAAO;CACP,MAAM;CACN,QAAQ;CACT"}
package/dist/enums.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { n as BREAK_POINT_TOKEN_ENUM, r as BREAK_POINT_TOKEN_TYPE, t as MIME } from "./index-CCujFuKP.js";
2
- export { BREAK_POINT_TOKEN_ENUM, BREAK_POINT_TOKEN_TYPE, MIME };
1
+ import { a as MIME, c as DATE_FORMAT, i as THEME_TYPE, n as THEME_MODE_ENUM, o as BREAK_POINT_TOKEN_ENUM, r as THEME_MODE_TYPE, s as BREAK_POINT_TOKEN_TYPE, t as THEME_ENUM } from "./index-Bn_PNnsM.js";
2
+ export { BREAK_POINT_TOKEN_ENUM, BREAK_POINT_TOKEN_TYPE, DATE_FORMAT, MIME, THEME_ENUM, THEME_MODE_ENUM, THEME_MODE_TYPE, THEME_TYPE };
package/dist/enums.js CHANGED
@@ -1,3 +1,3 @@
1
- import { n as BREAK_POINT_TOKEN_ENUM, t as MIME } from "./enums-XkYDzrre.js";
1
+ import { a as DATE_FORMAT, i as BREAK_POINT_TOKEN_ENUM, n as THEME_MODE_ENUM, r as MIME, t as THEME_ENUM } from "./enums-BL6w5-mS.js";
2
2
 
3
- export { BREAK_POINT_TOKEN_ENUM, MIME };
3
+ export { BREAK_POINT_TOKEN_ENUM, DATE_FORMAT, MIME, THEME_ENUM, THEME_MODE_ENUM };
@@ -1,4 +1,4 @@
1
- import * as alova_client0 from "alova/client";
1
+ import * as alova_client1 from "alova/client";
2
2
  import { AlovaFrontMiddlewareContext, AlovaMethodHandler, CompleteHandler, ErrorHandler, PaginationHookConfig, RequestHookConfig, SuccessHandler, WatcherHookConfig } from "alova/client";
3
3
  import { AlovaGenerics, Method } from "alova";
4
4
 
@@ -9,7 +9,7 @@ interface HookOptions$2<AG extends AlovaGenerics, L extends any[], Args extends
9
9
  onError?: ErrorHandler<AG, Args> | undefined;
10
10
  onComplete?: CompleteHandler<AG, Args> | undefined;
11
11
  }
12
- declare function useAlovaPagination<AG extends AlovaGenerics, L extends any[], Args extends any[]>(methodHandler: (page: number, pageSize: number, ...args: Args) => Method<AG>, hookOptions?: HookOptions$2<AG, L, Args> | undefined): alova_client0.UsePaginationExposure<AG, L, Args>;
12
+ declare function useAlovaPagination<AG extends AlovaGenerics, L extends any[], Args extends any[]>(methodHandler: (page: number, pageSize: number, ...args: Args) => Method<AG>, hookOptions?: HookOptions$2<AG, L, Args> | undefined): alova_client1.UsePaginationExposure<AG, L, Args>;
13
13
  //#endregion
14
14
  //#region src/hooks/alova/useAlovaRequest.d.ts
15
15
  interface HookOptions$1<AG extends AlovaGenerics, Args extends any[]> extends RequestHookConfig<AG, Args> {
@@ -18,7 +18,7 @@ interface HookOptions$1<AG extends AlovaGenerics, Args extends any[]> extends Re
18
18
  onError?: ErrorHandler<AG, Args> | undefined;
19
19
  onComplete?: CompleteHandler<AG, Args> | undefined;
20
20
  }
21
- declare function useAlovaRequest<AG extends AlovaGenerics, Args extends any[] = any[]>(methodHandler: Method<AG> | AlovaMethodHandler<AG, Args>, hookOptions?: HookOptions$1<AG, Args> | undefined): alova_client0.UseHookExposure<AG, Args, unknown>;
21
+ declare function useAlovaRequest<AG extends AlovaGenerics, Args extends any[] = any[]>(methodHandler: Method<AG> | AlovaMethodHandler<AG, Args>, hookOptions?: HookOptions$1<AG, Args> | undefined): alova_client1.UseHookExposure<AG, Args, unknown>;
22
22
  //#endregion
23
23
  //#region src/hooks/alova/useAlovaWatcher.d.ts
24
24
  interface HookOptions<AG extends AlovaGenerics, Args extends any[]> extends WatcherHookConfig<AG, Args> {
@@ -26,7 +26,7 @@ interface HookOptions<AG extends AlovaGenerics, Args extends any[]> extends Watc
26
26
  onError?: ErrorHandler<AG, Args> | undefined;
27
27
  onComplete?: CompleteHandler<AG, Args> | undefined;
28
28
  }
29
- declare function useAlovaWatcher<AG extends AlovaGenerics, Args extends any[] = any[]>(methodHandler: Method<AG> | AlovaMethodHandler<AG, Args>, watchingStates: AG["StatesExport"]["Watched"][], hookOptions?: HookOptions<AG, Args>): alova_client0.UseHookExposure<AG, Args, unknown>;
29
+ declare function useAlovaWatcher<AG extends AlovaGenerics, Args extends any[] = any[]>(methodHandler: Method<AG> | AlovaMethodHandler<AG, Args>, watchingStates: AG["StatesExport"]["Watched"][], hookOptions?: HookOptions<AG, Args>): alova_client1.UseHookExposure<AG, Args, unknown>;
30
30
  //#endregion
31
31
  export { useAlovaPagination, useAlovaRequest, useAlovaWatcher };
32
32
  //# sourceMappingURL=hooks-alova.d.ts.map
@@ -1,28 +1,9 @@
1
- import { r as BREAK_POINT_TOKEN_TYPE } from "./index-CCujFuKP.js";
2
- import { r as AnyFunction, t as AnyAsyncFunction } from "./index-BPEx210u.js";
1
+ import { s as BREAK_POINT_TOKEN_TYPE } from "./index-Bn_PNnsM.js";
2
+ import { r as AnyFunction, t as AnyAsyncFunction } from "./index-DBPmnr4a.js";
3
3
  import { DependencyList, EffectCallback, RefObject } from "react";
4
4
 
5
- //#region src/hooks/react/useCreation.d.ts
6
-
7
- /**
8
- * useCreation
9
- * @reference https://ahooks.js.org/zh-CN/hooks/use-creation
10
- *
11
- * @param factory
12
- * @param deps
13
- */
14
- declare function useCreation<T>(factory: () => T, deps: DependencyList): T;
15
- //#endregion
16
- //#region src/hooks/react/useLatest.d.ts
17
- /**
18
- * 返回当前最新值的 Hook
19
- * @reference https://ahooks.js.org/zh-CN/hooks/use-latest
20
- *
21
- * @param value
22
- */
23
- declare function useLatest<T>(value: T): RefObject<T>;
24
- //#endregion
25
5
  //#region node_modules/.pnpm/type-fest@5.4.4/node_modules/type-fest/source/tuple-to-union.d.ts
6
+
26
7
  /**
27
8
  Convert a tuple/array into a union type of its elements.
28
9
 
@@ -76,12 +57,30 @@ type NumberBool = typeof numberBool[number];
76
57
  */
77
58
  type TupleToUnion<ArrayType> = ArrayType extends readonly unknown[] ? ArrayType[number] : never;
78
59
  //#endregion
60
+ //#region src/hooks/react/useCreation.d.ts
61
+ /**
62
+ * useCreation
63
+ * @reference https://ahooks.js.org/zh-CN/hooks/use-creation
64
+ *
65
+ * @param factory
66
+ * @param deps
67
+ */
68
+ declare function useCreation<T>(factory: () => T, deps: DependencyList): T;
69
+ //#endregion
70
+ //#region src/hooks/react/useLatest.d.ts
71
+ /**
72
+ * 返回当前最新值的 Hook
73
+ * @reference https://ahooks.js.org/zh-CN/hooks/use-latest
74
+ *
75
+ * @param value
76
+ */
77
+ declare function useLatest<T>(value: T): RefObject<T>;
78
+ //#endregion
79
79
  //#region src/hooks/react/useMount.d.ts
80
80
  type MountCallback = EffectCallback | AnyAsyncFunction;
81
81
  /**
82
82
  * 在组件初始化时执行的 Hook
83
83
  * - 即使在严格模式下也只执行一次
84
- * @reference https://ahooks.js.org/hooks/use-mount
85
84
  *
86
85
  * @param effect 副作用函数
87
86
  */
@@ -92,26 +91,29 @@ type Breakpoint = TupleToUnion<typeof tuple>;
92
91
  type ResponsiveValues = Record<Breakpoint, boolean>;
93
92
  declare const tuple: readonly ["xxxl", "xxl", "xl", "lg", "md", "sm", "xs"];
94
93
  interface ResponsiveHookOptions {
95
- /**
96
- * 紧凑布局断点
97
- * - 低于此断点时使用紧凑布局
98
- * @default "xl"
99
- */
100
- compactBreakPoint?: Breakpoint;
101
94
  /** 屏幕响应断点 token 配置 */
102
95
  breakPointTokens?: BREAK_POINT_TOKEN_TYPE;
103
96
  }
104
97
  declare function useResponsive(options?: ResponsiveHookOptions): {
105
98
  responsive: ResponsiveValues;
106
99
  current: "xxxl" | "xxl" | "xl" | "lg" | "md" | "sm" | "xs";
107
- isCompact: boolean;
108
100
  breakPointTokens: BREAK_POINT_TOKEN_TYPE;
109
101
  };
110
102
  //#endregion
111
103
  //#region src/hooks/react/useTitle.d.ts
112
104
  interface TitleHookOptions {
105
+ /** 件卸载时是否恢复原始标题 */
113
106
  isRestoreOnUnmount?: boolean;
114
107
  }
108
+ /**
109
+ * 设置页面标题
110
+ * - 轻量级,适用于无路由库时设置页面标题
111
+ * - 多个 `useTitle` 实例会互相干扰,需在顶层组件使用
112
+ * - 无法处理 `document.title` 固有的竞态问题
113
+ *
114
+ * @param title 页面标题
115
+ * @param options 配置选项
116
+ */
115
117
  declare function useTitle(title: string, options?: TitleHookOptions | undefined): void;
116
118
  //#endregion
117
119
  //#region src/hooks/react/useUnmount.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"hooks-react.d.ts","names":["TupleToUnion","ArrayType"],"sources":["../src/hooks/react/useCreation.ts","../src/hooks/react/useLatest.ts","../node_modules/.pnpm/type-fest@5.4.4/node_modules/type-fest/source/tuple-to-union.d.ts","../src/hooks/react/useMount.ts","../src/hooks/react/useResponsive.ts","../src/hooks/react/useTitle.ts","../src/hooks/react/useUnmount.ts"],"sourcesContent":["/**\nConvert a tuple/array into a union type of its elements.\n\nThis can be useful when you have a fixed set of allowed values and want a type defining only the allowed values, but do not want to repeat yourself.\n\n@example\n```\nimport type {TupleToUnion} from 'type-fest';\n\nconst destinations = ['a', 'b', 'c'] as const;\n\ntype Destination = TupleToUnion<typeof destinations>;\n//=> 'a' | 'b' | 'c'\n\nfunction verifyDestination(destination: unknown): destination is Destination {\n\treturn destinations.includes(destination as any);\n}\n\ntype RequestBody = {\n\tdeliverTo: Destination;\n};\n\nfunction verifyRequestBody(body: unknown): body is RequestBody {\n\tconst {deliverTo} = (body as any);\n\treturn typeof body === 'object' && body !== null && verifyDestination(deliverTo);\n}\n```\n\nAlternatively, you may use `typeof destinations[number]`. If `destinations` is a tuple, there is no difference. However if `destinations` is a string, the resulting type will the union of the characters in the string. Other types of `destinations` may result in a compile error. In comparison, TupleToUnion will return `never` if a tuple is not provided.\n\n@example\n```\nconst destinations = ['a', 'b', 'c'] as const;\n\ntype Destination = typeof destinations[number];\n//=> 'a' | 'b' | 'c'\n\nconst erroringType = new Set(['a', 'b', 'c']);\n\n// @ts-expect-error\ntype ErroringType = typeof erroringType[number];\n// Error: Type 'Set<string>' has no matching index signature for type 'number'. ts(2537)\n\nconst numberBool: {[n: number]: boolean} = {1: true};\n\ntype NumberBool = typeof numberBool[number];\n//=> boolean\n```\n\n@category Array\n*/\nexport type TupleToUnion<ArrayType> = ArrayType extends readonly unknown[] ? ArrayType[number] : never;\n\nexport {};\n"],"x_google_ignoreList":[2],"mappings":";;;;;;;;;;AAgBA;;;AAAsE,iBAAtD,WAAsD,CAAA,CAAA,CAAA,CAAA,OAAA,EAAA,GAAA,GAAvB,CAAuB,EAAA,IAAA,EAAd,cAAc,CAAA,EAAA,CAAA;;;;;;;AAAtE;;AAAwD,iBCRxC,SDQwC,CAAA,CAAA,CAAA,CAAA,KAAA,ECRnB,CDQmB,CAAA,ECRf,SDQe,CCRL,CDQK,CAAA;;;;;;;;AAAxD;;;;;;;;ACRA;;;;;;;;AC2CA;;;;AClDuD;AAavD;;;;ACX8C;AAEhB;AAGA;AAS9B;AAUA;;;;;;;;;ACpBA;;;;ACIA;;;;KJwCYA,0BAA0BC,uCAAuCA;;;KC9CxE,aAAA,GAAgB,iBAAiB;;;AHWtC;;;;;iBGFgB,QAAA,SAAkB;;;KCT7B,UAAA,GAAa,oBAAoB;KAGjC,gBAAA,GAAmB,OAAO;cAEzB;AJMU,UICC,qBAAA,CJDU;EAAoB;;;;;sBIOzB;;EHfN,gBAAS,CAAA,EGiBJ,sBHjBI;;AAA0B,iBGmBnC,aAAA,CHnBmC,OAAA,CAAA,EGmBV,qBHnBU,CAAA,EAAA;EAAV,UAAA,kBAAA;EAAS,OAAA,EAAA,MAAA,GAAA,KAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA;;;;;;UIJxC,gBAAA;;;iBAGM,QAAA,0BAAmC;;;;;;;ALSnD;;AAAwD,iBMLxC,UAAA,CNKwC,MAAA,EMLpB,WNKoB,CAAA,EAAA,IAAA"}
1
+ {"version":3,"file":"hooks-react.d.ts","names":["TupleToUnion","ArrayType"],"sources":["../node_modules/.pnpm/type-fest@5.4.4/node_modules/type-fest/source/tuple-to-union.d.ts","../src/hooks/react/useCreation.ts","../src/hooks/react/useLatest.ts","../src/hooks/react/useMount.ts","../src/hooks/react/useResponsive.ts","../src/hooks/react/useTitle.ts","../src/hooks/react/useUnmount.ts"],"sourcesContent":["/**\nConvert a tuple/array into a union type of its elements.\n\nThis can be useful when you have a fixed set of allowed values and want a type defining only the allowed values, but do not want to repeat yourself.\n\n@example\n```\nimport type {TupleToUnion} from 'type-fest';\n\nconst destinations = ['a', 'b', 'c'] as const;\n\ntype Destination = TupleToUnion<typeof destinations>;\n//=> 'a' | 'b' | 'c'\n\nfunction verifyDestination(destination: unknown): destination is Destination {\n\treturn destinations.includes(destination as any);\n}\n\ntype RequestBody = {\n\tdeliverTo: Destination;\n};\n\nfunction verifyRequestBody(body: unknown): body is RequestBody {\n\tconst {deliverTo} = (body as any);\n\treturn typeof body === 'object' && body !== null && verifyDestination(deliverTo);\n}\n```\n\nAlternatively, you may use `typeof destinations[number]`. If `destinations` is a tuple, there is no difference. However if `destinations` is a string, the resulting type will the union of the characters in the string. Other types of `destinations` may result in a compile error. In comparison, TupleToUnion will return `never` if a tuple is not provided.\n\n@example\n```\nconst destinations = ['a', 'b', 'c'] as const;\n\ntype Destination = typeof destinations[number];\n//=> 'a' | 'b' | 'c'\n\nconst erroringType = new Set(['a', 'b', 'c']);\n\n// @ts-expect-error\ntype ErroringType = typeof erroringType[number];\n// Error: Type 'Set<string>' has no matching index signature for type 'number'. ts(2537)\n\nconst numberBool: {[n: number]: boolean} = {1: true};\n\ntype NumberBool = typeof numberBool[number];\n//=> boolean\n```\n\n@category Array\n*/\nexport type TupleToUnion<ArrayType> = ArrayType extends readonly unknown[] ? ArrayType[number] : never;\n\nexport {};\n"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;AAmDA;;;;ACnCA;;;;;;;;ACRA;;;;;;;;ACP+D;AAY/D;;;;ACV8C;AAEhB;AACA;AAM9B;AAIA;;;;;;;;;ACEA;;;;ACPA;;;;KNwCYA,0BAA0BC,uCAAuCA;;;;;;;AAA7E;;;iBCnCgB,8BAA+B,SAAS,iBAAc;;;;;;;ADmCtE;;iBE3CgB,oBAAqB,IAAI,UAAU;;;KCH9C,aAAA,GAAgB,iBAAiB;;;AH8CtC;;;;ACnCgB,iBEHA,QAAA,CFGW,MAAA,EEHO,aFGP,CAAA,EAAA,IAAA;;;KGXtB,UAAA,GAAa,oBAAoB;KACjC,gBAAA,GAAmB,OAAO;cAEzB;AJ2CMD,UIvCK,qBAAA,CJuCOC;;qBIrCH;;AHEL,iBGAA,aAAA,CHAW,OAAA,CAAA,EGAc,qBHAd,CAAA,EAAA;EAAoB,UAAA,kBAAA;EAAS,OAAA,EAAA,MAAA,GAAA,KAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA;EAAc,gBAAA,wBAAA;CAAA;;;UIZ5D,gBAAA;;;;;AL+CV;;;;ACnCA;;;;AAAsE,iBIEtD,QAAA,CJFsD,KAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EIEnB,gBJFmB,GAAA,SAAA,CAAA,EAAA,IAAA;;;;;;;ADmCtE;;iBMxCgB,UAAA,SAAoB"}
@@ -1,6 +1,6 @@
1
- import { B as arrayZipToObject, Ft as isFunction, R as isBrowser, S as objectAssign, kt as isEqual, pt as isPromiseLike, y as objectKeys } from "./utils-RGh-N7TJ.js";
2
- import { n as BREAK_POINT_TOKEN_ENUM } from "./enums-XkYDzrre.js";
3
- import { useEffect, useRef, useState } from "react";
1
+ import { B as isBrowser, H as arrayZipToObject, Nt as isEqual, S as objectAssign, ft as isString, ht as isPromiseLike, y as objectKeys, zt as isFunction } from "./utils-DbMbll5L.js";
2
+ import { i as BREAK_POINT_TOKEN_ENUM } from "./enums-BL6w5-mS.js";
3
+ import { useEffect, useMemo, useRef, useState } from "react";
4
4
 
5
5
  //#region src/hooks/react/useCreation.ts
6
6
  /**
@@ -43,21 +43,20 @@ function useLatest(value) {
43
43
  /**
44
44
  * 在组件初始化时执行的 Hook
45
45
  * - 即使在严格模式下也只执行一次
46
- * @reference https://ahooks.js.org/hooks/use-mount
47
46
  *
48
47
  * @param effect 副作用函数
49
48
  */
50
49
  function useMount(effect) {
51
- if (!isFunction(effect)) console.error(`useMount expected parameter is a function, but got ${typeof effect}`);
52
- let isMounted = false;
50
+ const isMountedRef = useRef(false);
53
51
  const effectRef = useLatest(effect);
54
52
  useEffect(() => {
55
- if (isMounted) return;
56
- isMounted = true;
53
+ if (!isFunction(effectRef.current)) console.error(`useMount expected parameter is a function, but got ${typeof effectRef.current}`);
54
+ if (isMountedRef.current) return;
55
+ isMountedRef.current = true;
57
56
  const result = effectRef.current?.();
58
57
  if (isPromiseLike(result)) return;
59
58
  return result;
60
- }, []);
59
+ }, [effectRef]);
61
60
  }
62
61
 
63
62
  //#endregion
@@ -80,58 +79,40 @@ const TUPLE = [
80
79
  "SM",
81
80
  "XS"
82
81
  ];
83
- const subscriberList = /* @__PURE__ */ new Set();
84
- const defaultResponsiveValues = arrayZipToObject(tuple, tuple.map(() => false));
85
- let responsiveConfig = arrayZipToObject(tuple, TUPLE.map((t) => BREAK_POINT_TOKEN_ENUM[t]));
86
- let responsiveValues = { ...defaultResponsiveValues };
82
+ const defaultValues = arrayZipToObject(tuple, tuple.map(() => false));
87
83
  function useResponsive(options) {
88
- const { compactBreakPoint = "xl", breakPointTokens = {} } = options || {};
89
- const tokens = objectAssign(BREAK_POINT_TOKEN_ENUM, breakPointTokens);
90
- responsiveConfig = arrayZipToObject(tuple, TUPLE.map((t) => tokens[t]));
91
- calculate();
92
- const [responsive, setResponsive] = useState(responsiveValues);
93
- const isCompact = !responsive[compactBreakPoint];
94
- const current = objectKeys(defaultResponsiveValues).find((key) => responsive[key] === true) || "xs";
84
+ const { breakPointTokens = {} } = options || {};
85
+ const responsiveValuesRef = useRef({ ...defaultValues });
86
+ const [responsive, setResponsive] = useState({ ...defaultValues });
87
+ const tokens = useMemo(() => objectAssign(BREAK_POINT_TOKEN_ENUM, breakPointTokens), [breakPointTokens]);
88
+ const current = objectKeys(responsive).find((key) => responsive[key] === true) || "xs";
95
89
  useEffect(() => {
96
- addListener();
97
- const subscriber = () => {
98
- setResponsive(responsiveValues);
99
- };
100
- subscriberList.add(subscriber);
90
+ function calculate() {
91
+ const newValues = { ...defaultValues };
92
+ const responsiveConfig = arrayZipToObject(tuple, TUPLE.map((t) => tokens[t]));
93
+ let shouldUpdate = false;
94
+ for (const key of tuple) {
95
+ newValues[key] = window.innerWidth >= responsiveConfig[key];
96
+ if (newValues[key] !== responsiveValuesRef.current[key]) shouldUpdate = true;
97
+ }
98
+ if (shouldUpdate) responsiveValuesRef.current = newValues;
99
+ }
100
+ function resizeListener() {
101
+ const oldInfo = responsiveValuesRef.current;
102
+ calculate();
103
+ if (oldInfo !== responsiveValuesRef.current) setResponsive(responsiveValuesRef.current);
104
+ }
105
+ window.addEventListener("resize", resizeListener);
101
106
  return () => {
102
- subscriberList.delete(subscriber);
103
- if (subscriberList.size === 0) removeListener();
107
+ window.removeEventListener("resize", resizeListener);
104
108
  };
105
- }, []);
109
+ }, [tokens]);
106
110
  return {
107
111
  responsive,
108
112
  current,
109
- isCompact,
110
113
  breakPointTokens: tokens
111
114
  };
112
115
  }
113
- function resizeListener() {
114
- const oldInfo = responsiveValues;
115
- calculate();
116
- if (oldInfo === responsiveValues) return;
117
- for (const subscriber of subscriberList) subscriber();
118
- }
119
- function addListener() {
120
- window.addEventListener("resize", resizeListener);
121
- }
122
- function removeListener() {
123
- window.removeEventListener("resize", resizeListener);
124
- }
125
- function calculate() {
126
- const width = window.innerWidth;
127
- const newValues = { ...defaultResponsiveValues };
128
- let shouldUpdate = false;
129
- for (const key of objectKeys(responsiveConfig)) {
130
- newValues[key] = width >= responsiveConfig[key];
131
- if (newValues[key] !== responsiveValues[key]) shouldUpdate = true;
132
- }
133
- if (shouldUpdate) responsiveValues = newValues;
134
- }
135
116
 
136
117
  //#endregion
137
118
  //#region src/hooks/react/useUnmount.ts
@@ -142,23 +123,38 @@ function calculate() {
142
123
  * @param effect 副作用函数
143
124
  */
144
125
  function useUnmount(effect) {
145
- if (!isFunction(effect)) console.error(`useUnmount expected parameter is a function, got ${typeof effect}`);
146
126
  const effectRef = useLatest(effect);
147
127
  useEffect(() => () => {
128
+ if (!isFunction(effectRef.current)) {
129
+ console.error(`useUnmount expected parameter is a function, but got ${typeof effectRef.current}`);
130
+ return;
131
+ }
148
132
  effectRef.current?.();
149
- }, []);
133
+ }, [effectRef]);
150
134
  }
151
135
 
152
136
  //#endregion
153
137
  //#region src/hooks/react/useTitle.ts
138
+ /**
139
+ * 设置页面标题
140
+ * - 轻量级,适用于无路由库时设置页面标题
141
+ * - 多个 `useTitle` 实例会互相干扰,需在顶层组件使用
142
+ * - 无法处理 `document.title` 固有的竞态问题
143
+ *
144
+ * @param title 页面标题
145
+ * @param options 配置选项
146
+ */
154
147
  function useTitle(title, options) {
155
- if (!isBrowser()) return;
156
- const titleRef = useRef(document.title);
148
+ const titleRef = useRef(isBrowser() ? document.title : "");
157
149
  useEffect(() => {
158
- document.title = title;
150
+ if (!isString(title)) {
151
+ console.error(`useTitle expected title is a string, but got ${typeof title}`);
152
+ return;
153
+ }
154
+ if (isBrowser()) document.title = title;
159
155
  }, [title]);
160
156
  useUnmount(() => {
161
- if (options?.isRestoreOnUnmount) document.title = titleRef.current;
157
+ if (isBrowser() && options?.isRestoreOnUnmount) document.title = titleRef.current;
162
158
  });
163
159
  }
164
160
 
@@ -1 +1 @@
1
- {"version":3,"file":"hooks-react.js","names":["defaultResponsiveValues: ResponsiveValues","responsiveConfig: ResponsiveConfig","responsiveValues: ResponsiveValues","tokens: BREAK_POINT_TOKEN_TYPE"],"sources":["../src/hooks/react/useCreation.ts","../src/hooks/react/useLatest.ts","../src/hooks/react/useMount.ts","../src/hooks/react/useResponsive.ts","../src/hooks/react/useUnmount.ts","../src/hooks/react/useTitle.ts"],"sourcesContent":["import { useRef, type DependencyList } from \"react\";\nimport { isEqual } from \"src/utils\";\n\ninterface RefObject<T> {\n deps: DependencyList;\n result: T;\n isInitialized: boolean;\n}\n\n/**\n * useCreation\n * @reference https://ahooks.js.org/zh-CN/hooks/use-creation\n *\n * @param factory\n * @param deps\n */\nexport function useCreation<T> (factory: () => T, deps: DependencyList) {\n const { current } = useRef<RefObject<T>>({ deps, result: undefined!, isInitialized: false });\n\n if (current.isInitialized === false || !isEqual(current.deps, deps)) {\n current.deps = deps;\n current.result = factory();\n current.isInitialized = true;\n }\n\n return current.result;\n}\n","import { useRef, type RefObject } from \"react\";\n\n/**\n * 返回当前最新值的 Hook\n * @reference https://ahooks.js.org/zh-CN/hooks/use-latest\n *\n * @param value\n */\nexport function useLatest<T> (value: T): RefObject<T> {\n const ref = useRef(value);\n ref.current = value;\n\n return ref;\n}\n","import type { AnyAsyncFunction } from \"@pawover/types\";\nimport { useEffect, type EffectCallback } from \"react\";\nimport { isFunction, isPromiseLike } from \"src/utils\";\nimport { useLatest } from \"./useLatest\";\n\ntype MountCallback = EffectCallback | AnyAsyncFunction;\n\n/**\n * 在组件初始化时执行的 Hook\n * - 即使在严格模式下也只执行一次\n * @reference https://ahooks.js.org/hooks/use-mount\n *\n * @param effect 副作用函数\n */\nexport function useMount (effect: MountCallback) {\n if (!isFunction(effect)) {\n console.error(`useMount expected parameter is a function, but got ${typeof effect}`);\n }\n\n let isMounted = false;\n const effectRef = useLatest(effect);\n\n useEffect(() => {\n if (isMounted) {\n return;\n }\n\n isMounted = true;\n const result = effectRef.current?.();\n // If fn returns a Promise, don't return it as cleanup function\n if (isPromiseLike(result)) {\n return;\n }\n\n return result as ReturnType<EffectCallback>;\n }, []);\n}\n","import { useEffect, useState } from \"react\";\nimport { BREAK_POINT_TOKEN_ENUM, type BREAK_POINT_TOKEN_TYPE } from \"src/enums\";\nimport { arrayZipToObject, objectAssign, objectKeys } from \"src/utils\";\nimport type { TupleToUnion } from \"type-fest\";\n\ntype Breakpoint = TupleToUnion<typeof tuple>;\ntype Subscriber = () => void;\ntype ResponsiveConfig = Record<Breakpoint, number>;\ntype ResponsiveValues = Record<Breakpoint, boolean>;\n\nconst tuple = [\"xxxl\", \"xxl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"] as const;\nconst TUPLE = [\"XXXL\", \"XXL\", \"XL\", \"LG\", \"MD\", \"SM\", \"XS\"] as const;\nconst subscriberList = new Set<Subscriber>();\nconst defaultResponsiveValues: ResponsiveValues = arrayZipToObject(tuple, tuple.map(() => false));\nlet responsiveConfig: ResponsiveConfig = arrayZipToObject(tuple, TUPLE.map((t) => BREAK_POINT_TOKEN_ENUM[t]));\nlet responsiveValues: ResponsiveValues = { ...defaultResponsiveValues };\n\nexport interface ResponsiveHookOptions {\n /**\n * 紧凑布局断点\n * - 低于此断点时使用紧凑布局\n * @default \"xl\"\n */\n compactBreakPoint?: Breakpoint;\n /** 屏幕响应断点 token 配置 */\n breakPointTokens?: BREAK_POINT_TOKEN_TYPE;\n}\nexport function useResponsive (options?: ResponsiveHookOptions) {\n const { compactBreakPoint = \"xl\", breakPointTokens = {} } = options || {};\n const tokens: BREAK_POINT_TOKEN_TYPE = objectAssign(BREAK_POINT_TOKEN_ENUM, breakPointTokens);\n responsiveConfig = arrayZipToObject(tuple, TUPLE.map((t) => tokens[t]));\n\n calculate();\n\n const [responsive, setResponsive] = useState<ResponsiveValues>(responsiveValues);\n const isCompact = !responsive[compactBreakPoint];\n const current = objectKeys(defaultResponsiveValues).find((key) => responsive[key] === true) || \"xs\";\n\n useEffect(() => {\n addListener();\n\n const subscriber = () => {\n setResponsive(responsiveValues);\n };\n\n subscriberList.add(subscriber);\n\n return () => {\n subscriberList.delete(subscriber);\n\n if (subscriberList.size === 0) {\n removeListener();\n }\n };\n }, []);\n\n return { responsive, current, isCompact, breakPointTokens: tokens };\n}\n\nfunction resizeListener () {\n const oldInfo = responsiveValues;\n calculate();\n\n if (oldInfo === responsiveValues) {\n return;\n }\n\n for (const subscriber of subscriberList) {\n subscriber();\n }\n}\nfunction addListener () {\n window.addEventListener(\"resize\", resizeListener);\n}\nfunction removeListener () {\n window.removeEventListener(\"resize\", resizeListener);\n}\nfunction calculate () {\n const width = window.innerWidth;\n const newValues = { ...defaultResponsiveValues };\n let shouldUpdate = false;\n\n for (const key of objectKeys(responsiveConfig)) {\n newValues[key] = width >= responsiveConfig[key];\n if (newValues[key] !== responsiveValues[key]) {\n shouldUpdate = true;\n }\n }\n if (shouldUpdate) {\n responsiveValues = newValues;\n }\n}\n","import type { AnyFunction } from \"@pawover/types\";\nimport { useEffect } from \"react\";\nimport { isFunction } from \"src/utils\";\nimport { useLatest } from \"./useLatest\";\n\n/**\n * 在组件卸载时执行的 Hook\n * @reference https://ahooks.js.org/zh-CN/hooks/use-unmount\n *\n * @param effect 副作用函数\n */\nexport function useUnmount (effect: AnyFunction) {\n if (!isFunction(effect)) {\n console.error(`useUnmount expected parameter is a function, got ${typeof effect}`);\n }\n\n const effectRef = useLatest(effect);\n\n useEffect(\n () => () => {\n effectRef.current?.();\n },\n [],\n );\n}\n","import { useEffect, useRef } from \"react\";\nimport { isBrowser } from \"../../utils\";\nimport { useUnmount } from \"./useUnmount\";\n\ninterface TitleHookOptions {\n isRestoreOnUnmount?: boolean;\n}\nexport function useTitle (title: string, options?: TitleHookOptions | undefined) {\n if (!isBrowser()) {\n return;\n }\n\n const titleRef = useRef(document.title);\n\n useEffect(() => {\n document.title = title;\n }, [title]);\n\n useUnmount(() => {\n if (options?.isRestoreOnUnmount) {\n document.title = titleRef.current;\n }\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"hooks-react.js","names":["defaultValues: ResponsiveValues","tokens: BREAK_POINT_TOKEN_TYPE"],"sources":["../src/hooks/react/useCreation.ts","../src/hooks/react/useLatest.ts","../src/hooks/react/useMount.ts","../src/hooks/react/useResponsive.ts","../src/hooks/react/useUnmount.ts","../src/hooks/react/useTitle.ts"],"sourcesContent":["import { useRef, type DependencyList } from \"react\";\nimport { isEqual } from \"src/utils\";\n\ninterface RefObject<T> {\n deps: DependencyList;\n result: T;\n isInitialized: boolean;\n}\n\n/**\n * useCreation\n * @reference https://ahooks.js.org/zh-CN/hooks/use-creation\n *\n * @param factory\n * @param deps\n */\nexport function useCreation<T> (factory: () => T, deps: DependencyList) {\n const { current } = useRef<RefObject<T>>({ deps, result: undefined!, isInitialized: false });\n\n if (current.isInitialized === false || !isEqual(current.deps, deps)) {\n current.deps = deps;\n current.result = factory();\n current.isInitialized = true;\n }\n\n return current.result;\n}\n","import { useRef, type RefObject } from \"react\";\n\n/**\n * 返回当前最新值的 Hook\n * @reference https://ahooks.js.org/zh-CN/hooks/use-latest\n *\n * @param value\n */\nexport function useLatest<T> (value: T): RefObject<T> {\n const ref = useRef(value);\n // eslint-disable-next-line react-x/refs\n ref.current = value;\n\n return ref;\n}\n","import type { AnyAsyncFunction } from \"@pawover/types\";\nimport { useEffect, useRef, type EffectCallback } from \"react\";\nimport { isFunction, isPromiseLike } from \"src/utils\";\nimport { useLatest } from \"./useLatest\";\n\ntype MountCallback = EffectCallback | AnyAsyncFunction;\n\n/**\n * 在组件初始化时执行的 Hook\n * - 即使在严格模式下也只执行一次\n *\n * @param effect 副作用函数\n */\nexport function useMount (effect: MountCallback) {\n const isMountedRef = useRef(false);\n const effectRef = useLatest(effect);\n\n useEffect(() => {\n if (!isFunction(effectRef.current)) {\n console.error(`useMount expected parameter is a function, but got ${typeof effectRef.current}`);\n }\n if (isMountedRef.current) {\n return;\n }\n isMountedRef.current = true;\n const result = effectRef.current?.();\n // If fn returns a Promise, don't return it as cleanup function\n if (isPromiseLike(result)) {\n return;\n }\n\n return result;\n }, [effectRef]);\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { BREAK_POINT_TOKEN_ENUM, type BREAK_POINT_TOKEN_TYPE } from \"src/enums\";\nimport { arrayZipToObject, objectAssign, objectKeys } from \"src/utils\";\nimport type { TupleToUnion } from \"type-fest\";\n\ntype Breakpoint = TupleToUnion<typeof tuple>;\ntype ResponsiveValues = Record<Breakpoint, boolean>;\n\nconst tuple = [\"xxxl\", \"xxl\", \"xl\", \"lg\", \"md\", \"sm\", \"xs\"] as const;\nconst TUPLE = [\"XXXL\", \"XXL\", \"XL\", \"LG\", \"MD\", \"SM\", \"XS\"] as const;\nconst defaultValues: ResponsiveValues = arrayZipToObject(tuple, tuple.map(() => false));\n\nexport interface ResponsiveHookOptions {\n /** 屏幕响应断点 token 配置 */\n breakPointTokens?: BREAK_POINT_TOKEN_TYPE;\n}\nexport function useResponsive (options?: ResponsiveHookOptions) {\n const { breakPointTokens = {} } = options || {};\n const responsiveValuesRef = useRef({ ...defaultValues });\n const [responsive, setResponsive] = useState<ResponsiveValues>({ ...defaultValues });\n const tokens: BREAK_POINT_TOKEN_TYPE = useMemo(() => objectAssign(BREAK_POINT_TOKEN_ENUM, breakPointTokens), [breakPointTokens]);\n const current = objectKeys(responsive).find((key) => responsive[key] === true) || \"xs\";\n\n useEffect(() => {\n function calculate () {\n const newValues = { ...defaultValues };\n const responsiveConfig = arrayZipToObject(tuple, TUPLE.map((t) => tokens[t]));\n let shouldUpdate = false;\n\n for (const key of tuple) {\n newValues[key] = window.innerWidth >= responsiveConfig[key];\n if (newValues[key] !== responsiveValuesRef.current[key]) {\n shouldUpdate = true;\n }\n }\n if (shouldUpdate) {\n responsiveValuesRef.current = newValues;\n }\n }\n\n function resizeListener () {\n const oldInfo = responsiveValuesRef.current;\n calculate();\n\n if (oldInfo !== responsiveValuesRef.current) {\n setResponsive(responsiveValuesRef.current);\n }\n }\n\n window.addEventListener(\"resize\", resizeListener);\n\n return () => {\n window.removeEventListener(\"resize\", resizeListener);\n };\n }, [tokens]);\n\n return { responsive, current, breakPointTokens: tokens };\n}\n","import type { AnyFunction } from \"@pawover/types\";\nimport { useEffect } from \"react\";\nimport { isFunction } from \"src/utils\";\nimport { useLatest } from \"./useLatest\";\n\n/**\n * 在组件卸载时执行的 Hook\n * @reference https://ahooks.js.org/zh-CN/hooks/use-unmount\n *\n * @param effect 副作用函数\n */\nexport function useUnmount (effect: AnyFunction) {\n const effectRef = useLatest(effect);\n\n useEffect(\n () => () => {\n if (!isFunction(effectRef.current)) {\n console.error(`useUnmount expected parameter is a function, but got ${typeof effectRef.current}`);\n\n return;\n }\n effectRef.current?.();\n },\n [effectRef],\n );\n}\n","import { useEffect, useRef } from \"react\";\nimport { isBrowser, isString } from \"../../utils\";\nimport { useUnmount } from \"./useUnmount\";\n\ninterface TitleHookOptions {\n /** 件卸载时是否恢复原始标题 */\n isRestoreOnUnmount?: boolean;\n}\n\n/**\n * 设置页面标题\n * - 轻量级,适用于无路由库时设置页面标题\n * - 多个 `useTitle` 实例会互相干扰,需在顶层组件使用\n * - 无法处理 `document.title` 固有的竞态问题\n *\n * @param title 页面标题\n * @param options 配置选项\n */\nexport function useTitle (title: string, options?: TitleHookOptions | undefined) {\n const titleRef = useRef(isBrowser() ? document.title : \"\");\n\n useEffect(() => {\n if (!isString(title)) {\n console.error(`useTitle expected title is a string, but got ${typeof title}`);\n\n return;\n }\n if (isBrowser()) {\n document.title = title;\n }\n }, [title]);\n\n useUnmount(() => {\n if (isBrowser() && options?.isRestoreOnUnmount) {\n document.title = titleRef.current;\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;AAgBA,SAAgB,YAAgB,SAAkB,MAAsB;CACtE,MAAM,EAAE,YAAY,OAAqB;EAAE;EAAM,QAAQ;EAAY,eAAe;EAAO,CAAC;AAE5F,KAAI,QAAQ,kBAAkB,SAAS,CAAC,QAAQ,QAAQ,MAAM,KAAK,EAAE;AACnE,UAAQ,OAAO;AACf,UAAQ,SAAS,SAAS;AAC1B,UAAQ,gBAAgB;;AAG1B,QAAO,QAAQ;;;;;;;;;;;ACjBjB,SAAgB,UAAc,OAAwB;CACpD,MAAM,MAAM,OAAO,MAAM;AAEzB,KAAI,UAAU;AAEd,QAAO;;;;;;;;;;;ACAT,SAAgB,SAAU,QAAuB;CAC/C,MAAM,eAAe,OAAO,MAAM;CAClC,MAAM,YAAY,UAAU,OAAO;AAEnC,iBAAgB;AACd,MAAI,CAAC,WAAW,UAAU,QAAQ,CAChC,SAAQ,MAAM,sDAAsD,OAAO,UAAU,UAAU;AAEjG,MAAI,aAAa,QACf;AAEF,eAAa,UAAU;EACvB,MAAM,SAAS,UAAU,WAAW;AAEpC,MAAI,cAAc,OAAO,CACvB;AAGF,SAAO;IACN,CAAC,UAAU,CAAC;;;;;ACxBjB,MAAM,QAAQ;CAAC;CAAQ;CAAO;CAAM;CAAM;CAAM;CAAM;CAAK;AAC3D,MAAM,QAAQ;CAAC;CAAQ;CAAO;CAAM;CAAM;CAAM;CAAM;CAAK;AAC3D,MAAMA,gBAAkC,iBAAiB,OAAO,MAAM,UAAU,MAAM,CAAC;AAMvF,SAAgB,cAAe,SAAiC;CAC9D,MAAM,EAAE,mBAAmB,EAAE,KAAK,WAAW,EAAE;CAC/C,MAAM,sBAAsB,OAAO,EAAE,GAAG,eAAe,CAAC;CACxD,MAAM,CAAC,YAAY,iBAAiB,SAA2B,EAAE,GAAG,eAAe,CAAC;CACpF,MAAMC,SAAiC,cAAc,aAAa,wBAAwB,iBAAiB,EAAE,CAAC,iBAAiB,CAAC;CAChI,MAAM,UAAU,WAAW,WAAW,CAAC,MAAM,QAAQ,WAAW,SAAS,KAAK,IAAI;AAElF,iBAAgB;EACd,SAAS,YAAa;GACpB,MAAM,YAAY,EAAE,GAAG,eAAe;GACtC,MAAM,mBAAmB,iBAAiB,OAAO,MAAM,KAAK,MAAM,OAAO,GAAG,CAAC;GAC7E,IAAI,eAAe;AAEnB,QAAK,MAAM,OAAO,OAAO;AACvB,cAAU,OAAO,OAAO,cAAc,iBAAiB;AACvD,QAAI,UAAU,SAAS,oBAAoB,QAAQ,KACjD,gBAAe;;AAGnB,OAAI,aACF,qBAAoB,UAAU;;EAIlC,SAAS,iBAAkB;GACzB,MAAM,UAAU,oBAAoB;AACpC,cAAW;AAEX,OAAI,YAAY,oBAAoB,QAClC,eAAc,oBAAoB,QAAQ;;AAI9C,SAAO,iBAAiB,UAAU,eAAe;AAEjD,eAAa;AACX,UAAO,oBAAoB,UAAU,eAAe;;IAErD,CAAC,OAAO,CAAC;AAEZ,QAAO;EAAE;EAAY;EAAS,kBAAkB;EAAQ;;;;;;;;;;;AC7C1D,SAAgB,WAAY,QAAqB;CAC/C,MAAM,YAAY,UAAU,OAAO;AAEnC,uBACc;AACV,MAAI,CAAC,WAAW,UAAU,QAAQ,EAAE;AAClC,WAAQ,MAAM,wDAAwD,OAAO,UAAU,UAAU;AAEjG;;AAEF,YAAU,WAAW;IAEvB,CAAC,UAAU,CACZ;;;;;;;;;;;;;;ACNH,SAAgB,SAAU,OAAe,SAAwC;CAC/E,MAAM,WAAW,OAAO,WAAW,GAAG,SAAS,QAAQ,GAAG;AAE1D,iBAAgB;AACd,MAAI,CAAC,SAAS,MAAM,EAAE;AACpB,WAAQ,MAAM,gDAAgD,OAAO,QAAQ;AAE7E;;AAEF,MAAI,WAAW,CACb,UAAS,QAAQ;IAElB,CAAC,MAAM,CAAC;AAEX,kBAAiB;AACf,MAAI,WAAW,IAAI,SAAS,mBAC1B,UAAS,QAAQ,SAAS;GAE5B"}
@@ -1,3 +1,40 @@
1
+ import { t as ValueOf } from "./value-of-DUmTbnuw.js";
2
+
3
+ //#region src/enums/date.d.ts
4
+ declare const DATE_FORMAT: {
5
+ readonly ISO_DATE: "yyyy-MM-dd";
6
+ readonly ISO_TIME: "HH:mm:ss";
7
+ readonly ISO_DATE_TIME: "yyyy-MM-dd HH:mm:ss";
8
+ readonly ISO_DATE_TIME_MS: "yyyy-MM-dd HH:mm:ss.SSS";
9
+ readonly ISO_DATETIME_TZ: "yyyy-MM-dd'T'HH:mm:ssXXX";
10
+ readonly ISO_DATETIME_TZ_MS: "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
11
+ readonly US_DATE: "MM/dd/yyyy";
12
+ readonly US_DATE_TIME: "MM/dd/yyyy HH:mm:ss";
13
+ readonly US_DATE_SHORT_YEAR: "MM/dd/yy";
14
+ readonly EU_DATE: "dd/MM/yyyy";
15
+ readonly EU_DATE_TIME: "dd/MM/yyyy HH:mm:ss";
16
+ readonly CN_DATE: "yyyy年MM月dd日";
17
+ readonly CN_DATE_TIME: "yyyy年MM月dd日 HH时mm分ss秒";
18
+ readonly CN_DATE_WEEKDAY: "yyyy年MM月dd日 EEE";
19
+ readonly CN_WEEKDAY_FULL: "EEEE";
20
+ readonly SHORT_DATE: "yy-MM-dd";
21
+ readonly SHORT_DATE_SLASH: "yy/MM/dd";
22
+ readonly MONTH_DAY: "MM-dd";
23
+ readonly MONTH_DAY_CN: "MM月dd日";
24
+ readonly DATE_WITH_WEEKDAY_SHORT: "yyyy-MM-dd (EEE)";
25
+ readonly DATE_WITH_WEEKDAY_FULL: "yyyy-MM-dd (EEEE)";
26
+ readonly TIME_24: "HH:mm:ss";
27
+ readonly TIME_24_NO_SEC: "HH:mm";
28
+ readonly TIME_12: "hh:mm:ss a";
29
+ readonly TIME_12_NO_SEC: "hh:mm a";
30
+ readonly TIMESTAMP: "yyyyMMddHHmmss";
31
+ readonly TIMESTAMP_MS: "yyyyMMddHHmmssSSS";
32
+ readonly RFC2822: "EEE, dd MMM yyyy HH:mm:ss xxx";
33
+ readonly READABLE_DATE: "MMM dd, yyyy";
34
+ readonly READABLE_DATE_TIME: "MMM dd, yyyy HH:mm";
35
+ readonly COMPACT_DATETIME: "yyyyMMdd_HHmmss";
36
+ };
37
+ //#endregion
1
38
  //#region src/enums/grid.d.ts
2
39
  type BREAK_POINT_TOKEN_TYPE = Record<keyof typeof BREAK_POINT_TOKEN_ENUM, number>;
3
40
  /** 屏幕响应断点 token 配置 */
@@ -158,5 +195,18 @@ declare const MIME: {
158
195
  readonly DOCM: "application/vnd.ms-word.document.macroEnabled.12";
159
196
  };
160
197
  //#endregion
161
- export { BREAK_POINT_TOKEN_ENUM as n, BREAK_POINT_TOKEN_TYPE as r, MIME as t };
162
- //# sourceMappingURL=index-CCujFuKP.d.ts.map
198
+ //#region src/enums/theme.d.ts
199
+ type THEME_TYPE = ValueOf<typeof THEME_ENUM>;
200
+ declare const THEME_ENUM: {
201
+ readonly LIGHT: "light";
202
+ readonly DARK: "dark";
203
+ };
204
+ type THEME_MODE_TYPE = ValueOf<typeof THEME_MODE_ENUM>;
205
+ declare const THEME_MODE_ENUM: {
206
+ readonly LIGHT: "light";
207
+ readonly DARK: "dark";
208
+ readonly SYSTEM: "system";
209
+ };
210
+ //#endregion
211
+ export { MIME as a, DATE_FORMAT as c, THEME_TYPE as i, THEME_MODE_ENUM as n, BREAK_POINT_TOKEN_ENUM as o, THEME_MODE_TYPE as r, BREAK_POINT_TOKEN_TYPE as s, THEME_ENUM as t };
212
+ //# sourceMappingURL=index-Bn_PNnsM.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Bn_PNnsM.d.ts","names":[],"sources":["../src/enums/date.ts","../src/enums/grid.ts","../src/enums/mime.ts","../src/enums/theme.ts"],"sourcesContent":[],"mappings":";;;cAAa;;;EAAA,SAAA,aAmDH,EAAA,qBAAA;;;;ECnDE,SAAA,OAAA,EAAA,YAAsB;EAErB,SAAA,YAAA,EAAA,qBA2BH;;;;ECzBG,SA+HH,OAAA,EAAA,aAAA;;;;ECjIE,SAAA,UAAU,EAAA,UAAkB;EAC3B,SAAA,gBAGH,EAAA,UAAA;EAEE,SAAA,SAAe,EAAA,OAAA;EACd,SAAA,YAIH,EAAA,QAAA;;;;;;;;;;;;;;;;KFbE,sBAAA,GAAyB,oBAAoB;;cAE5C;EDFA,SAAA,EAAA,EAAA,GAmDH;;;;ECnDE,SAAA,KAAA,EAAA,GAAA;EAEC,SAAA,KAAA,EAAA,GAAA;;;;ECEA,SA+HH,EAAA,EAAA,GAAA;;;;ECjIE,SAAA,KAAU,EAAA,IAAA;EACT,SAAA,KAGH,EAAA,IAAA;EAEE,SAAA,GAAA,EAAA,IAAe;EACd,SAAA,MAAA,EAAA,IAIH;;;;;;;;;;AHbV;cEIa;;;EDJD;EAEC,SAAA,IAAA,EAAA,WA2BH;;;;ECzBG,SA+HH,GAAA,EAAA,UAAA;;;;ECjIE,SAAA,GAAA,EAAU,UAAkB;EAC3B;EAKD,SAAA,KAAA,EAAA,uBAAiC;EAChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAPD,UAAA,GAAa,eAAe;cAC3B;EHHA,SAAA,KAmDH,EAAA,OAAA;;;KG3CE,eAAA,GAAkB,eAAe;AFRjC,cESC,eFTqB,EAAA;EAErB,SAAA,KAAA,EAAA,OAAA"}
@@ -1,4 +1,4 @@
1
- //#region node_modules/.pnpm/@pawover+types@0.0.0-alpha._2f84ec986ed9c8cd8cf34605feea084b/node_modules/@pawover/types/dist/index.d.ts
1
+ //#region node_modules/.pnpm/@pawover+types@0.0.0-alpha._d6a4faea50420a71bc77e0a59520b8b6/node_modules/@pawover/types/dist/index.d.ts
2
2
 
3
3
  //#endregion
4
4
  //#region src/index.d.ts
@@ -18,4 +18,4 @@ type AnyAsyncGeneratorFunction<P extends any[] = any[], T = any, R$1 = any, N =
18
18
 
19
19
  //#endregion
20
20
  export { AnyObject as a, AnyGeneratorFunction as i, AnyAsyncGeneratorFunction as n, PlainObject as o, AnyFunction as r, TreeLike as s, AnyAsyncFunction as t };
21
- //# sourceMappingURL=index-BPEx210u.d.ts.map
21
+ //# sourceMappingURL=index-DBPmnr4a.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DBPmnr4a.d.ts","names":["Split","TupleToUnion","ALPHABET","Alphabet","ValidChar","ApiNameCheck","N","P","R","L","AdvancedRecordMode","AdvancedRecord","K","A","mode","PropertyKey","AnyObject","T","Record","PlainObject","TreeLike","CK","AnyFunction","R$1","AnyAsyncFunction","Promise","AnyGeneratorFunction","Generator","AnyAsyncGeneratorFunction","AsyncGenerator"],"sources":["../node_modules/.pnpm/@pawover+types@0.0.0-alpha._d6a4faea50420a71bc77e0a59520b8b6/node_modules/@pawover/types/dist/index.d.ts"],"sourcesContent":["import { Split, TupleToUnion } from \"type-fest\";\n\n//#region src/api.d.ts\n/** 字母表 */\ntype ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n/** 单个字母 */\ntype Alphabet = TupleToUnion<Split<ALPHABET, \"\">>;\n/** 有效字符 */\ntype ValidChar = Alphabet | \"_\";\n/** 定义 API 命名 - 键名检查 */\ntype ApiNameCheck<N extends string, P extends string = \"\"> = N extends `${infer L extends ValidChar}${infer R}` ? ApiNameCheck<R, `${P}${L}`> : P extends `${infer S}_` ? S : P;\n//#endregion\n//#region src/advancedRecord.d.ts\ntype AdvancedRecordMode = [\"?\" | \"!\", \"W\" | \"R\"];\ntype AdvancedRecord<K extends PropertyKey, A = unknown, mode extends AdvancedRecordMode = [\"!\", \"W\"]> = {\n \"!\": {\n R: { readonly [P in K]: A };\n W: { [P in K]: A };\n };\n \"?\": {\n R: { readonly [P in K]?: A };\n W: { [P in K]?: A };\n };\n}[mode[0]][mode[1]];\n//#endregion\n//#region src/index.d.ts\n/** 任意对象类型 */\ntype AnyObject<K extends PropertyKey = PropertyKey, T = any> = Record<K, T>;\n/** 普通对象类型 */\ntype PlainObject<K extends PropertyKey = PropertyKey, T = unknown> = Record<K, T>;\n/** 描述树类型 */\ntype TreeLike<T extends AnyObject, CK extends string = \"children\"> = T & Record<CK, TreeLike<T, CK>[]>;\n/** 描述函数类型 */\ntype AnyFunction<P extends any[] = any[], R$1 = any> = (...arg: P) => R$1;\n/** 描述异步函数类型 */\ntype AnyAsyncFunction<P extends any[] = any[], R$1 = any> = (...args: P) => Promise<R$1>;\ntype AnyGeneratorFunction<P extends any[] = any[], T = any, R$1 = any, N = any> = (...args: P) => Generator<T, R$1, N>;\ntype AnyAsyncGeneratorFunction<P extends any[] = any[], T = any, R$1 = any, N = any> = (...args: P) => AsyncGenerator<T, R$1, N>;\n//#endregion\nexport { AdvancedRecord, AdvancedRecordMode, AnyAsyncFunction, AnyAsyncGeneratorFunction, AnyFunction, AnyGeneratorFunction, AnyObject, type ApiNameCheck, PlainObject, TreeLike };\n//# sourceMappingURL=index.d.ts.map"],"x_google_ignoreList":[0],"mappings":";;AA+B+E;AAEN;;KANpEgB,SAQ+EO,CAAAA,UAR3DR,WAQ2DQ,GAR7CR,WAQ6CQ,EAAAA,IAAAA,GAAAA,CAAAA,GARrBL,MAQqBK,CARdX,CAQcW,EARXN,CAQWM,CAAAA;;KAN/EJ,WAM8E,CAAA,UANxDJ,WAMwD,GAN1CA,WAM0C,EAAA,IAAA,OAAA,CAAA,GANdG,MAMc,CANPN,CAMO,EANJK,CAMI,CAAA;AAAA;KAJ9EG,QAKuFb,CAAAA,UALpES,SAKoET,EAAAA,WAAAA,MAAAA,GAAAA,UAAAA,CAAAA,GALvBU,CAKuBV,GALnBW,MAKmBX,CALZc,EAKYd,EALRa,QAKQb,CALCU,CAKDV,EALIc,EAKJd,CAAAA,EAAAA,CAAAA;;KAHvFe,WAG0GC,CAAAA,UAAAA,GAAAA,EAAAA,GAAAA,GAAAA,EAAAA,EAAAA,MAAAA,GAAAA,CAAAA,GAAAA,CAAAA,GAAAA,GAAAA,EAH/ChB,CAG+CgB,EAAAA,GAHzCA,GAGyCA;;KAD1GC,gBAC6FG,CAAAA,UAAAA,GAAAA,EAAAA,GAAAA,GAAAA,EAAAA,EAAAA,MAAAA,GAAAA,CAAAA,GAAAA,CAAAA,GAAAA,IAAAA,EAD5BpB,CAC4BoB,EAAAA,GADtBF,OACsBE,CADdJ,GACcI,CAAAA;KAA7FD,oBAAsG,CAAA,UAAA,GAAA,EAAA,GAAA,GAAA,EAAA,EAAA,IAAA,GAAA,EAAA,MAAA,GAAA,EAAA,IAAA,GAAA,CAAA,GAAA,CAAA,GAAA,IAAA,EAAfnB,CAAe,EAAA,GAAToB,SAAS,CAACV,CAAD,EAAIM,GAAJ,EAASjB,CAAT,CAAA;AAAA,KACtGsB,yBAAAA,CAAAA,UAAyBrB,GAAAU,EAAAM,GAAAA,GAAAjB,EAAAA,EAAA,IAAA,GAAA,EAAA,MAAA,GAAA,EAAA,IAAA,GAAA,CAAA,GAAA,CAAA,GAAA,IAAA,EAAmEC,CAAnE,EAAA,GAAyEsB,cAAzE,CAAwFZ,CAAxF,EAA2FM,GAA3F,EAAgGjB,CAAhG,CAAA"}