nfx-ui 0.7.4 → 0.9.0
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.
- package/dist/src/apis/index.d.ts +2 -0
- package/dist/src/apis/ip.d.ts +4 -0
- package/dist/src/constants/caches.d.ts +5 -0
- package/dist/src/constants/enums.d.ts +18 -0
- package/dist/src/constants/index.d.ts +9 -0
- package/dist/src/constants/query.itemkeys.d.ts +31 -0
- package/dist/src/constants/query.listkeys.d.ts +30 -0
- package/dist/src/constants/querykeys.d.ts +42 -0
- package/dist/src/designs/animations/BounceLoading/index.d.ts +7 -0
- package/dist/src/designs/animations/ECGLoading/index.d.ts +6 -0
- package/dist/src/designs/animations/LetterGlitch/index.d.ts +12 -0
- package/dist/src/designs/animations/PixelBlast/index.d.ts +28 -0
- package/dist/src/designs/animations/Squares/index.d.ts +13 -0
- package/dist/src/designs/animations/TruckLoading/index.d.ts +6 -0
- package/dist/src/designs/animations/Waves/index.d.ts +18 -0
- package/dist/src/designs/animations/index.d.ts +6 -0
- package/dist/src/designs/components/Button/index.d.ts +20 -0
- package/dist/src/designs/components/Dropdown/index.d.ts +24 -0
- package/dist/src/designs/components/Icon/index.d.ts +9 -0
- package/dist/src/designs/components/Input/index.d.ts +23 -0
- package/dist/src/designs/components/KeyValueEditor/index.d.ts +30 -0
- package/dist/src/designs/components/LayoutSwitcher/index.d.ts +3 -0
- package/dist/src/designs/components/SearchInput/index.d.ts +12 -0
- package/dist/src/designs/components/ShowFilter/index.d.ts +28 -0
- package/dist/src/designs/components/SlideDownSwitcher/index.d.ts +16 -0
- package/dist/src/designs/components/Slider/index.d.ts +26 -0
- package/dist/src/designs/components/Suspense/SuspenseErrorBoundary.d.ts +21 -0
- package/dist/src/designs/components/Suspense/index.d.ts +47 -0
- package/dist/src/designs/components/Textarea/index.d.ts +21 -0
- package/dist/src/designs/components/ThemeSwitcher/index.d.ts +3 -0
- package/dist/src/designs/components/VirtualList/index.d.ts +41 -0
- package/dist/src/designs/components/VirtualWindowList/index.d.ts +41 -0
- package/dist/src/designs/components/index.d.ts +33 -0
- package/dist/src/designs/layouts/components/Background/index.d.ts +11 -0
- package/dist/src/designs/layouts/components/Footer/index.d.ts +5 -0
- package/dist/src/designs/layouts/components/Header/index.d.ts +4 -0
- package/dist/src/designs/layouts/components/LayoutFrame/index.d.ts +3 -0
- package/dist/src/designs/layouts/components/MainWrapper/index.d.ts +3 -0
- package/dist/src/designs/layouts/components/SideHideLayout/index.d.ts +3 -0
- package/dist/src/designs/layouts/components/SideShowLayout/index.d.ts +3 -0
- package/dist/src/designs/layouts/components/Sidebar/index.d.ts +3 -0
- package/dist/src/designs/layouts/components/index.d.ts +8 -0
- package/dist/src/designs/layouts/hooks/index.d.ts +3 -0
- package/dist/src/designs/layouts/hooks/useAction.d.ts +7 -0
- package/dist/src/designs/layouts/hooks/useLayout.d.ts +5 -0
- package/dist/src/designs/layouts/hooks/useSet.d.ts +10 -0
- package/dist/src/designs/layouts/index.d.ts +8 -0
- package/dist/src/designs/layouts/providers/index.d.ts +3 -0
- package/dist/src/designs/layouts/types/components.d.ts +117 -0
- package/dist/src/designs/layouts/types/context.d.ts +12 -0
- package/dist/src/designs/layouts/types/index.d.ts +6 -0
- package/dist/src/designs/layouts/types/layout.d.ts +11 -0
- package/dist/src/designs/layouts/utils/index.d.ts +4 -0
- package/dist/src/designs/layouts/utils/layoutStorage.d.ts +4 -0
- package/dist/src/events/EventEmitter.d.ts +48 -0
- package/dist/src/events/index.d.ts +5 -0
- package/dist/src/hooks/index.d.ts +4 -0
- package/dist/src/hooks/makeCursorFetchFunction.d.ts +84 -0
- package/dist/src/hooks/makeUnifiedInfiniteQuery.d.ts +124 -0
- package/dist/src/hooks/makeUnifiedQuery.d.ts +19 -0
- package/dist/src/hooks/type.d.ts +36 -0
- package/dist/src/icons/index.d.ts +1 -0
- package/dist/src/icons/lucide.d.ts +2 -0
- package/dist/src/languages/hooks/index.d.ts +8 -0
- package/dist/src/languages/hooks/useLanguageLabel.d.ts +6 -0
- package/dist/src/languages/hooks/useLayoutLabel.d.ts +6 -0
- package/dist/src/languages/hooks/usePreferenceLabel.d.ts +6 -0
- package/dist/src/languages/hooks/useThemeLabel.d.ts +6 -0
- package/dist/src/languages/index.d.ts +11 -0
- package/dist/src/languages/languages/i18n.d.ts +8 -0
- package/dist/src/languages/languages/i18nResources.d.ts +13 -0
- package/dist/src/languages/languages/index.d.ts +2 -0
- package/dist/src/languages/providers/index.d.ts +3 -0
- package/dist/src/languages/resources/index.d.ts +8 -0
- package/dist/src/languages/types/components.d.ts +23 -0
- package/dist/src/languages/types/i18n.d.ts +28 -0
- package/dist/src/languages/types/index.d.ts +6 -0
- package/dist/src/languages/types/language.d.ts +13 -0
- package/dist/src/languages/utils/getLocalLanguage.d.ts +2 -0
- package/dist/src/languages/utils/index.d.ts +5 -0
- package/dist/src/languages/utils/languageStorage.d.ts +5 -0
- package/dist/src/navigations/index.d.ts +1 -0
- package/dist/src/navigations/navigation.d.ts +50 -0
- package/dist/src/preference/constants.d.ts +12 -0
- package/dist/src/preference/index.d.ts +35 -0
- package/dist/src/services/imageService.d.ts +6 -0
- package/dist/src/services/index.d.ts +1 -0
- package/dist/src/stores/index.d.ts +1 -0
- package/dist/src/stores/makeStore.d.ts +92 -0
- package/dist/src/themes/hooks/index.d.ts +2 -0
- package/dist/src/themes/hooks/useTheme.d.ts +5 -0
- package/dist/src/themes/hooks/useThemeVariables.d.ts +10 -0
- package/dist/src/themes/index.d.ts +8 -0
- package/dist/src/themes/providers/index.d.ts +3 -0
- package/dist/src/themes/themes/bases/android.d.ts +4 -0
- package/dist/src/themes/themes/bases/default.d.ts +5 -0
- package/dist/src/themes/themes/bases/index.d.ts +7 -0
- package/dist/src/themes/themes/bases/ios.d.ts +4 -0
- package/dist/src/themes/themes/bases/linux.d.ts +4 -0
- package/dist/src/themes/themes/bases/windows.d.ts +4 -0
- package/dist/src/themes/themes/colors/coffee.d.ts +7 -0
- package/dist/src/themes/themes/colors/corporate.d.ts +7 -0
- package/dist/src/themes/themes/colors/cosmic.d.ts +7 -0
- package/dist/src/themes/themes/colors/dark.d.ts +7 -0
- package/dist/src/themes/themes/colors/default.d.ts +7 -0
- package/dist/src/themes/themes/colors/forest.d.ts +7 -0
- package/dist/src/themes/themes/colors/index.d.ts +12 -0
- package/dist/src/themes/themes/colors/light.d.ts +7 -0
- package/dist/src/themes/themes/colors/wheat.d.ts +8 -0
- package/dist/src/themes/themes/colors/wine.d.ts +7 -0
- package/dist/src/themes/themes/index.d.ts +2 -0
- package/dist/src/themes/types/components.d.ts +20 -0
- package/dist/src/themes/types/context.d.ts +16 -0
- package/dist/src/themes/types/index.d.ts +6 -0
- package/dist/src/themes/types/theme.d.ts +209 -0
- package/dist/src/themes/utils/index.d.ts +4 -0
- package/dist/src/themes/utils/themeStorage.d.ts +7 -0
- package/dist/src/types/api.d.ts +75 -0
- package/dist/src/types/index.d.ts +2 -0
- package/dist/src/types/utils.d.ts +83 -0
- package/dist/src/utils/address.d.ts +7 -0
- package/dist/src/utils/apiError.d.ts +16 -0
- package/dist/src/utils/array.d.ts +21 -0
- package/dist/src/utils/colors.d.ts +41 -0
- package/dist/src/utils/email.d.ts +7 -0
- package/dist/src/utils/form.d.ts +14 -0
- package/dist/src/utils/index.d.ts +24 -0
- package/dist/src/utils/lstorage.d.ts +4 -0
- package/dist/src/utils/object.d.ts +10 -0
- package/dist/src/utils/polling.d.ts +12 -0
- package/dist/src/utils/price.d.ts +28 -0
- package/dist/src/utils/promise.d.ts +17 -0
- package/dist/src/utils/random.d.ts +39 -0
- package/dist/src/utils/result.d.ts +21 -0
- package/dist/src/utils/retry.d.ts +15 -0
- package/dist/src/utils/safe.d.ts +69 -0
- package/dist/src/utils/singleton.d.ts +21 -0
- package/dist/src/utils/suspense.d.ts +10 -0
- package/dist/src/utils/time.d.ts +49 -0
- package/dist/src/utils/types.d.ts +10 -0
- package/dist/utils.cjs +1 -1
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.mjs +171 -147
- package/dist/utils.mjs.map +1 -1
- package/package.json +19 -22
- package/dist/animations.d.ts +0 -1
- package/dist/apis.d.ts +0 -1
- package/dist/components.d.ts +0 -1
- package/dist/constants.d.ts +0 -1
- package/dist/events.d.ts +0 -1
- package/dist/hooks.d.ts +0 -1
- package/dist/icons.d.ts +0 -1
- package/dist/languages.d.ts +0 -1
- package/dist/layouts.d.ts +0 -1
- package/dist/navigations.d.ts +0 -1
- package/dist/pixel-blast.d.ts +0 -1
- package/dist/preference.d.ts +0 -1
- package/dist/services.d.ts +0 -1
- package/dist/stores.d.ts +0 -1
- package/dist/themes.d.ts +0 -1
- package/dist/types.d.ts +0 -1
- package/dist/utils.d.ts +0 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Random utilities (no color logic).
|
|
3
|
+
* 用于项目的随机数/随机选择工具(不包含颜色选择,颜色相关请看 `utils/colors.ts`)。
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Generate a floating number in range [min, max).
|
|
7
|
+
* 生成区间为 [min, max) 的浮点数。
|
|
8
|
+
*/
|
|
9
|
+
export declare const randomBetween: (min: number, max: number) => number;
|
|
10
|
+
/**
|
|
11
|
+
* Generate a random integer in range [min, maxInclusive].
|
|
12
|
+
* 生成区间为 [min, maxInclusive] 的整数。
|
|
13
|
+
*/
|
|
14
|
+
export declare const randomInt: (minInclusive: number, maxInclusive: number) => number;
|
|
15
|
+
/**
|
|
16
|
+
* Randomly return a boolean.
|
|
17
|
+
* @param probability True probability in range [0, 1] (default 0.5).
|
|
18
|
+
*/
|
|
19
|
+
export declare const randomBool: (probability?: number) => boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Alias of `randomBool` (chance).
|
|
22
|
+
* @param probability True probability in range [0, 1] (default 0.5).
|
|
23
|
+
*/
|
|
24
|
+
export declare const chance: (probability?: number) => boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Randomly return either -1 or 1.
|
|
27
|
+
*/
|
|
28
|
+
export declare const randomSign: () => number;
|
|
29
|
+
/**
|
|
30
|
+
* Randomly pick one element from a pool.
|
|
31
|
+
* 从数组/只读数组中随机取一个元素。
|
|
32
|
+
*/
|
|
33
|
+
export declare const pickRandom: <T>(pool: readonly T[]) => T;
|
|
34
|
+
/**
|
|
35
|
+
* Generate a Gaussian (normal) distributed number using Box-Muller.
|
|
36
|
+
* @param mean Mean of the normal distribution.
|
|
37
|
+
* @param stdDev Standard deviation (must be > 0).
|
|
38
|
+
*/
|
|
39
|
+
export declare const randomGaussian: (mean?: number, stdDev?: number) => number;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 结果类型:成功为 [T, null],失败为 [null, Error]。
|
|
3
|
+
* Result type: success [T, null], failure [null, Error].
|
|
4
|
+
* @template T - 成功时的值类型。Value type on success.
|
|
5
|
+
* @example const [data, err] = await withRetryResult(() => fetchData()); if (err) return; use(data);
|
|
6
|
+
*/
|
|
7
|
+
export type Result<T> = [T, null] | [null, Error];
|
|
8
|
+
/**
|
|
9
|
+
* 构造成功结果。Create a successful result.
|
|
10
|
+
* @param v - 结果值。Result value.
|
|
11
|
+
* @returns [v, null]
|
|
12
|
+
* @example ok(42) // [42, null]
|
|
13
|
+
*/
|
|
14
|
+
export declare const ok: <T>(v: T) => Result<T>;
|
|
15
|
+
/**
|
|
16
|
+
* 构造失败结果(非 Error 会包装为 Error)。Create a failed result; non-Error wrapped in Error.
|
|
17
|
+
* @param e - 错误或任意值。Error or any value.
|
|
18
|
+
* @returns [null, Error]
|
|
19
|
+
* @example err(new Error("fail")) // [null, Error]
|
|
20
|
+
*/
|
|
21
|
+
export declare const err: (e: unknown) => Result<never>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Options as RetryOptions } from 'async-retry';
|
|
2
|
+
import { Result } from './result';
|
|
3
|
+
export type WithRetryOptions = RetryOptions & {
|
|
4
|
+
/** 若返回 true 则不再重试,直接 bail。If true, do not retry and bail. */
|
|
5
|
+
isNonRetryable?: (e: Error) => boolean;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* 带重试执行异步函数,成功返回 ok(value),失败返回 err(error)。
|
|
9
|
+
* Retry async function until success or max attempts; returns Result.
|
|
10
|
+
* @param fn - 可接收 bail 与 attempt 的异步函数。Async function receiving bail and attempt.
|
|
11
|
+
* @param opts - async-retry 选项及 isNonRetryable。async-retry options and isNonRetryable.
|
|
12
|
+
* @returns Promise<Result<T>>
|
|
13
|
+
* @example const [data, err] = await withRetryResult(() => fetchData(), { retries: 3 });
|
|
14
|
+
*/
|
|
15
|
+
export declare function withRetryResult<T>(fn: (bail: (e: Error) => void, attempt: number) => Promise<T>, opts?: WithRetryOptions): Promise<Result<T>>;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Nullable, Maybe, Nilable, Emptyable, Zeroable, Stringable, Array } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* 将 Nilable 规范为 Nullable:undefined 转为 null,null 与 T 原样返回。返回类型 Nullable<T>。
|
|
4
|
+
* Normalize Nilable to Nullable: convert undefined to null; null and T unchanged. Returns Nullable<T>.
|
|
5
|
+
* @param value - 可能为 null 或 undefined 的值 (value that may be null or undefined)
|
|
6
|
+
* @returns 若为 undefined 则 null,否则原值 (null if undefined, otherwise value)
|
|
7
|
+
* @example safeNullable(apiResponse.data) // undefined → null,便于区分「未设置」与「空」
|
|
8
|
+
*/
|
|
9
|
+
export declare function safeNullable<T>(value: Nilable<T>): Nullable<T>;
|
|
10
|
+
/**
|
|
11
|
+
* 将 Nilable 规范为 Maybe:null 转为 undefined,undefined 与 T 原样返回。返回类型 Maybe<T>。等同 value ?? undefined。
|
|
12
|
+
* Normalize Nilable to Maybe: convert null to undefined; undefined and T unchanged. Returns Maybe<T>. Same as value ?? undefined.
|
|
13
|
+
* @param value - 可能为 null 或 undefined 的值 (value that may be null or undefined)
|
|
14
|
+
* @returns 若为 null 或 undefined 则 undefined,否则原值 (undefined if null/undefined, otherwise value)
|
|
15
|
+
* @example safeMaybe(product.price) // 代替 product.price ?? undefined
|
|
16
|
+
*/
|
|
17
|
+
export declare function safeMaybe<T>(value: Nilable<T>): Maybe<T>;
|
|
18
|
+
/**
|
|
19
|
+
* 将 Emptyable 字符串规范为 Nilable:空字符串转为 undefined,null/undefined/非空串原样。返回类型 Nilable<T>。常用于表单、接口字段。
|
|
20
|
+
* Normalize Emptyable string to Nilable: "" to undefined; null, undefined, non-empty string unchanged. Returns Nilable<T>. For form/API fields.
|
|
21
|
+
* @param value - 可能为 null、undefined 或空字符串 (value that may be null, undefined or "")
|
|
22
|
+
* @returns 若为 "" 则 undefined,否则原值 (undefined if "", otherwise value)
|
|
23
|
+
* @example safeNilable(product.remark) // "" 也视为「无值」
|
|
24
|
+
*/
|
|
25
|
+
export declare function safeNilable<T extends string>(value: Emptyable<T>): Nilable<T>;
|
|
26
|
+
/**
|
|
27
|
+
* 将 Nilable 数组规范为数组:null/undefined 转为 [] 或 defaultValue。返回类型 Array<T>(即 T[])。
|
|
28
|
+
* Normalize Nilable array to array: null/undefined to [] or defaultValue. Returns Array<T> (i.e. T[]).
|
|
29
|
+
* @param value - 可能为 null 或 undefined 的数组 (array that may be null or undefined)
|
|
30
|
+
* @param defaultValue - 可选,当 value 为 null/undefined 时使用;缺省为 [] (optional default when value is null/undefined; default is [])
|
|
31
|
+
* @returns value ?? defaultValue ?? [] (never null/undefined)
|
|
32
|
+
* @example safeArray(product.tags) // product.tags ?? []
|
|
33
|
+
* @example safeArray(product.tags, ['default'])
|
|
34
|
+
*/
|
|
35
|
+
export declare function safeArray<T>(value: Nilable<Array<T>>, defaultValue?: Array<T>): Array<T>;
|
|
36
|
+
/**
|
|
37
|
+
* 将 Nilable 数值规范为 Zeroable:null/undefined 转为 0。返回类型 Zeroable<number>(即 number,0 为兜底)。
|
|
38
|
+
* Normalize Nilable number to Zeroable: null/undefined to 0. Returns Zeroable<number> (number with 0 as fallback).
|
|
39
|
+
* @param value - 可能为 null 或 undefined 的数值 (number that may be null or undefined)
|
|
40
|
+
* @returns value ?? 0 (never null/undefined)
|
|
41
|
+
* @example safeZeroable(product.stock) // 代替 product.stock ?? 0
|
|
42
|
+
*/
|
|
43
|
+
export declare function safeZeroable(value: Nilable<number>): Zeroable<number>;
|
|
44
|
+
/**
|
|
45
|
+
* 将 Emptyable 字符串规范为 Stringable:null/undefined/"" 转为 ""。返回类型 Stringable<string>(即 string,"" 为兜底)。
|
|
46
|
+
* Normalize Emptyable string to Stringable: null/undefined/"" to "". Returns Stringable<string> (string with "" as fallback).
|
|
47
|
+
* @param value - 可能为 null、undefined 或空字符串 (value that may be null, undefined or "")
|
|
48
|
+
* @returns 若为 null、undefined 或 "" 则 "",否则原值 ("" if null/undefined/"", otherwise value)
|
|
49
|
+
* @example safeStringable(product.name) // 代替 product.name ?? ""
|
|
50
|
+
*/
|
|
51
|
+
export declare function safeStringable<T extends string>(value: Emptyable<T>): Stringable<T>;
|
|
52
|
+
/**
|
|
53
|
+
* 若值为 null/undefined 则返回默认值,否则返回原值。等同 value ?? defaultValue。
|
|
54
|
+
* Return defaultValue when value is null/undefined, otherwise value. Same as value ?? defaultValue.
|
|
55
|
+
* @param value - 可能为 null 或 undefined 的值 (value that may be null or undefined)
|
|
56
|
+
* @param defaultValue - 默认值 (default value)
|
|
57
|
+
* @returns value ?? defaultValue
|
|
58
|
+
* @example safeOr(product.stock, 0)
|
|
59
|
+
* @example safeOr(product.name, '')
|
|
60
|
+
*/
|
|
61
|
+
export declare function safeOr<T, D>(value: Nilable<T>, defaultValue: D): T | D;
|
|
62
|
+
/**
|
|
63
|
+
* 安全取数字:null/undefined/NaN 转为 undefined,合法数字原样。返回类型 Maybe<number>。
|
|
64
|
+
* Safe number: null/undefined/NaN to undefined; valid number unchanged. Returns Maybe<number>.
|
|
65
|
+
* @param value - 可能为 null、undefined 或非数字 (value that may be null, undefined or NaN)
|
|
66
|
+
* @returns 若为 null、undefined 或 NaN 则 undefined,否则数字 (undefined if null/undefined/NaN, otherwise number)
|
|
67
|
+
* @example safeNum(product.price) // 用于严格「有值才用」的场景
|
|
68
|
+
*/
|
|
69
|
+
export declare function safeNum(value: Nilable<number>): Maybe<number>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** 可实例化的构造函数类型。Instantiable constructor type. */
|
|
2
|
+
type Constructor<T extends object = object> = new (...args: unknown[]) => T;
|
|
3
|
+
/**
|
|
4
|
+
* 单例工厂:将传入的构造函数包装为单例模式;Proxy 拦截 construct,多次 new 返回同一实例。
|
|
5
|
+
* Singleton factory: wrap constructor so that multiple new calls return the same instance.
|
|
6
|
+
*
|
|
7
|
+
* @template T - 实例类型(需为 object)。Instance type (must be object).
|
|
8
|
+
* @param className - 被包装的构造函数(class)。Constructor (class) to wrap.
|
|
9
|
+
* @returns 代理后的构造函数,调用时始终返回同一实例。Proxied constructor returning same instance.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* class MyService { ... }
|
|
14
|
+
* const SingletonService = singleton(MyService);
|
|
15
|
+
* const a = new SingletonService();
|
|
16
|
+
* const b = new SingletonService();
|
|
17
|
+
* console.log(a === b); // true
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare const singleton: <T extends object>(className: Constructor<T>) => Constructor<T>;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Nilable } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* 若值为 null/undefined 则抛出 Promise 使 React Suspense 挂起,否则返回该值。
|
|
4
|
+
* If value is null/undefined, throw a promise to suspend (React Suspense); otherwise return value.
|
|
5
|
+
* @param value - 待检查的值。Value to check.
|
|
6
|
+
* @param delay - 重试前的延迟(毫秒)。Delay in ms before retry.
|
|
7
|
+
* @returns 非空时的 value。Value when non-null.
|
|
8
|
+
* @example const data = suspenseIfNull(resource); // 在 Suspense 边界内,data 非空时才渲染
|
|
9
|
+
*/
|
|
10
|
+
export declare function suspenseIfNull<T>(value: Nilable<T>, delay?: number): T;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 格式化日期为 YYYY/MM/DD(空或无效返回 "")
|
|
3
|
+
* Format date as YYYY/MM/DD; empty or invalid returns "".
|
|
4
|
+
* @param dateString - 日期字符串
|
|
5
|
+
* @returns 格式化后的日期字符串,无效则 ""
|
|
6
|
+
*/
|
|
7
|
+
export declare const formatDisplayDate: (dateString: string | undefined | null) => string;
|
|
8
|
+
/**
|
|
9
|
+
* 格式化为相对时间(如 2 days ago, 3 months ago)
|
|
10
|
+
* Format as relative time (e.g. 2 days ago, 3 months ago).
|
|
11
|
+
* @param dateString - 日期字符串
|
|
12
|
+
* @returns 相对时间字符串,无效为 "Invalid date",空为 "Unknown"
|
|
13
|
+
*/
|
|
14
|
+
export declare const formatRelativeTime: (dateString: string | undefined | null) => string;
|
|
15
|
+
/**
|
|
16
|
+
* 格式化 ISO 日期为图表轴/提示用短格式(如:Jan 4, 02:30 PM)
|
|
17
|
+
* Format ISO date for chart axis/tooltip (e.g. Jan 4, 02:30 PM).
|
|
18
|
+
* @param iso - ISO 日期字符串
|
|
19
|
+
* @returns 格式化字符串,解析失败则返回原串
|
|
20
|
+
*/
|
|
21
|
+
export declare function formatTickDate(iso: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* 格式化时间显示年月日时分 (YYYY/MM/DD HH:mm)
|
|
24
|
+
* Format date-time as year/month/day hour:minute.
|
|
25
|
+
* @param dateString - 时间字符串
|
|
26
|
+
* @returns 格式化后的时间字符串,无效则返回原串
|
|
27
|
+
*/
|
|
28
|
+
export declare const formatDateTime: (dateString: string) => string;
|
|
29
|
+
/**
|
|
30
|
+
* 格式化时间显示月日时分 (MM/DD HH:mm)
|
|
31
|
+
* Format date-time as month/day hour:minute.
|
|
32
|
+
* @param dateString - 时间字符串
|
|
33
|
+
* @returns 格式化后的时间字符串,无效则返回原串
|
|
34
|
+
*/
|
|
35
|
+
export declare const formatMonthDayTime: (dateString: string) => string;
|
|
36
|
+
/**
|
|
37
|
+
* 格式化日期仅年月日 (YYYY/MM/DD),用于生日等
|
|
38
|
+
* Format date as year/month/day only.
|
|
39
|
+
* @param dateString - 日期字符串,如 "2000-01-15" 或 ISO
|
|
40
|
+
* @returns 格式化后的日期字符串,无效则返回原串
|
|
41
|
+
*/
|
|
42
|
+
export declare const formatDate: (dateString: string) => string;
|
|
43
|
+
/**
|
|
44
|
+
* 格式化时间显示时分 (HH:mm)
|
|
45
|
+
* Format time as hour:minute.
|
|
46
|
+
* @param dateString - 时间字符串
|
|
47
|
+
* @returns 格式化后的时间字符串,无效则返回原串
|
|
48
|
+
*/
|
|
49
|
+
export declare const formatTime: (dateString: string) => string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 从字符串列表创建键值映射对象;可选 valueMapper 指定值
|
|
3
|
+
* Create record from string list; optional valueMapper for values.
|
|
4
|
+
* @param list - 字符串数组(作为键)
|
|
5
|
+
* @param valueMapper - 可选,(item, index) => value,缺省时值为键本身
|
|
6
|
+
* @returns Record<list[number], V>
|
|
7
|
+
* @example createMap(["a","b","c"]) // { a: "a", b: "b", c: "c" }
|
|
8
|
+
* @example createMap(["a","b","c"], (_, i) => i) // { a: 0, b: 1, c: 2 }
|
|
9
|
+
*/
|
|
10
|
+
export declare function createMap<T extends string, V = T>(list: ReadonlyArray<T>, valueMapper?: (item: T, index: number) => V): Record<T, V>;
|
package/dist/utils.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
(function(){try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(`.styles-module__loading___bgEAk{justify-content:center;align-items:center;display:inline-flex}.styles-module__loading___bgEAk svg polyline{fill:none;stroke-width:3px;stroke-linecap:round;stroke-linejoin:round}.styles-module__loading___bgEAk svg polyline.styles-module__back___XLPvD{fill:none;stroke:var(--color-primary-alpha,#ff4d5033)}.styles-module__loading___bgEAk svg polyline.styles-module__front___hSxig{fill:none;stroke:var(--color-primary,#ff4d4f);stroke-dasharray:48 144;stroke-dashoffset:192px;animation:1.4s linear infinite styles-module__dash_682___AQzo6}@keyframes styles-module__dash_682___AQzo6{72.5%{opacity:0}to{stroke-dashoffset:0}}.styles-module__loader___E7OIM{justify-content:center;align-items:center;width:fit-content;height:fit-content;display:flex}.styles-module__truckWrapper___Sk4zX{flex-direction:column;justify-content:flex-end;align-items:center;width:100%;height:100%;display:flex;position:relative;overflow-x:hidden}.styles-module__truckBody___j7w2C{width:65%;height:fit-content;margin-bottom:6px;animation:1s linear infinite styles-module__motion___IiNlW}@keyframes styles-module__motion___IiNlW{0%{transform:translateY(0)}50%{transform:translateY(3px)}to{transform:translateY(0)}}.styles-module__truckTires___4ncTl{justify-content:space-between;align-items:center;width:65%;height:fit-content;padding:0 10px 0 15px;display:flex;position:absolute;bottom:0}.styles-module__tiresvg___IBQcN{width:24px}.styles-module__road___sxx-E{background-color:var(--color-fg-heading);border-radius:3px;align-self:flex-end;width:100%;height:1.5px;position:relative;bottom:0}.styles-module__road___sxx-E:before{content:"";background-color:var(--color-fg-heading);border-left:10px solid var(--color-bg);border-radius:3px;width:20px;height:100%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;right:-50%}.styles-module__road___sxx-E:after{content:"";background-color:var(--color-fg-heading);border-left:4px solid var(--color-bg);border-radius:3px;width:10px;height:100%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;right:-65%}.styles-module__lampPost___okcN5{height:45%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;bottom:0;right:-90%}@keyframes styles-module__roadAnimation___yvrHP{0%{transform:translate(0)}to{transform:translate(-350px)}}.styles-module__loader___pFUzL{justify-content:center;align-items:center;display:inline-flex;position:relative}.styles-module__loader___pFUzL:before{content:"";background:var(--color-primary);opacity:.3;border-radius:50%;width:100%;height:5px;animation:.5s linear infinite styles-module__shadow324___sutUe;position:absolute;top:calc(100% + 12px);left:0}.styles-module__loader___pFUzL:after{content:"";background:var(--color-primary);width:100%;height:100%;position:absolute;top:0;left:0}.styles-module__square___GKjhm:after{border-radius:4px;animation:.5s linear infinite styles-module__jump7456Square___Z-D9b}.styles-module__circle___bUpSN:after{border-radius:50%;animation:.5s linear infinite styles-module__jump7456Circle___2AfF7}@keyframes styles-module__jump7456Square___Z-D9b{15%{border-bottom-right-radius:3px}25%{transform:translateY(9px)rotate(22.5deg)}50%{border-bottom-right-radius:40px;transform:translateY(18px)scaleY(.9)rotate(45deg)}75%{transform:translateY(9px)rotate(67.5deg)}to{transform:translateY(0)rotate(90deg)}}@keyframes styles-module__jump7456Circle___2AfF7{15%{border-bottom-right-radius:50%}25%{transform:translateY(9px)rotate(22.5deg)}50%{border-bottom-right-radius:40px;transform:translateY(18px)scaleY(.9)rotate(45deg)}75%{transform:translateY(9px)rotate(67.5deg)}to{transform:translateY(0)rotate(90deg)}}@keyframes styles-module__shadow324___sutUe{0%,to{transform:scale(1)}50%{transform:scaleX(1.2)}}.style-module__waves___oR3u7{width:100%;height:100%;margin:0;padding:0;position:absolute;top:0;left:0;overflow:hidden}.style-module__waves___oR3u7:before{content:"";width:.5rem;height:.5rem;transform:translate3d(calc(var(--x) - 50%), calc(var(--y) - 50%), 0);will-change:transform;background:#160000;border-radius:50%;position:absolute;top:0;left:0}.style-module__wavesCanvas___zkhTC{width:100%;height:100%;display:block}.style-module__squaresCanvas___22kMc{border:none;width:100%;height:100%;display:block}.style-module__container___HkxIe{background-color:#000;width:100%;height:100%;position:relative;overflow:hidden}.style-module__canvas___MR9JX{width:100%;height:100%;display:block}.style-module__outerVignette___i75nw{pointer-events:none;background:radial-gradient(circle,#0000 60%,#000 100%);width:100%;height:100%;position:absolute;top:0;left:0}.style-module__centerVignette___n9uVG{pointer-events:none;background:radial-gradient(circle,#000c 0%,#0000 60%);width:100%;height:100%;position:absolute;top:0;left:0}.styles-module__button___RbliA{cursor:pointer;border:1px solid #0000;border-radius:.5rem;outline:none;justify-content:center;align-items:center;gap:.5rem;font-family:inherit;font-weight:500;transition:all .2s;display:inline-flex;position:relative}.styles-module__button___RbliA:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.styles-module__button___RbliA:disabled{cursor:not-allowed;opacity:.6}.styles-module__button___RbliA.styles-module__small___yK0Yp{min-height:2rem;padding:.5rem 1rem;font-size:.8125rem}.styles-module__button___RbliA.styles-module__medium___eBTch{min-height:2.5rem;padding:.75rem 1.5rem;font-size:.875rem}.styles-module__button___RbliA.styles-module__large___pIZkl{min-height:3rem;padding:1rem 2rem;font-size:1rem}.styles-module__button___RbliA.styles-module__primary___qsZpA{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-fg,#fff)}.styles-module__button___RbliA.styles-module__primary___qsZpA:hover:not(:disabled){background:var(--color-primary-light);border-color:var(--color-primary-light);transform:translateY(-1px)}.styles-module__button___RbliA.styles-module__primary___qsZpA:active:not(:disabled){transform:translateY(0)}.styles-module__button___RbliA.styles-module__secondary___SCpPv{background:var(--color-bg-2);border-color:var(--color-border-4);color:var(--color-fg-text)}.styles-module__button___RbliA.styles-module__secondary___SCpPv:hover:not(:disabled){background:var(--color-bg-3);border-color:var(--color-primary)}.styles-module__button___RbliA.styles-module__outline___rrlk9{border-color:var(--color-border-4);color:var(--color-fg-text);background:0 0}.styles-module__button___RbliA.styles-module__outline___rrlk9:hover:not(:disabled){background:var(--color-bg-2);border-color:var(--color-primary)}.styles-module__button___RbliA.styles-module__ghost___QMoiH{color:var(--color-fg-text);background:0 0;border-color:#0000}.styles-module__button___RbliA.styles-module__ghost___QMoiH:hover:not(:disabled){background:var(--color-bg-2)}.styles-module__button___RbliA.styles-module__danger___MW-pg{background:var(--color-danger);border-color:var(--color-danger);color:#fff}.styles-module__button___RbliA.styles-module__danger___MW-pg:hover:not(:disabled){background:var(--color-danger-light);border-color:var(--color-danger-light);transform:translateY(-1px)}.styles-module__button___RbliA.styles-module__danger___MW-pg:active:not(:disabled){transform:translateY(0)}.styles-module__button___RbliA.styles-module__fullWidth___-dXBR{width:100%}.styles-module__button___RbliA.styles-module__loading___UWw6V{pointer-events:none}.styles-module__spinner___KpJ-L{border:2px solid;border-top-color:#0000;border-radius:50%;flex-shrink:0;width:1rem;height:1rem;animation:.6s linear infinite styles-module__spin___ntZKM}@keyframes styles-module__spin___ntZKM{to{transform:rotate(360deg)}}.styles-module__button___RbliA.styles-module__small___yK0Yp .styles-module__spinner___KpJ-L{border-width:1.5px;width:.875rem;height:.875rem}.styles-module__button___RbliA.styles-module__large___pIZkl .styles-module__spinner___KpJ-L{border-width:2.5px;width:1.25rem;height:1.25rem}.styles-module__content___oyZRO{align-items:center;display:flex}.styles-module__leftIcon___cDktv,.styles-module__rightIcon___1mpk0{flex-shrink:0;align-items:center;display:flex}.styles-module__leftIcon___cDktv{margin-right:-.25rem}.styles-module__rightIcon___1mpk0{margin-left:-.25rem}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U{aspect-ratio:1;min-width:2.5rem;min-height:2.5rem;padding:0}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U.styles-module__small___yK0Yp{min-width:2rem;min-height:2rem}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U.styles-module__large___pIZkl{min-width:3rem;min-height:3rem}.styles-module__iconContainer___bwvE3{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.styles-module__layout___WaGy9{flex-direction:column;justify-content:center;align-items:center;gap:.25rem;width:100%;display:flex}.styles-module__horizontal___lKpGq{justify-content:center;align-items:center;gap:.5rem;width:100%;display:flex}.styles-module__topIcon___bzw6s,.styles-module__bottomIcon___suPfa{flex-shrink:0;justify-content:center;align-items:center;display:flex}.styles-module__iconOnly___iOv-U .styles-module__iconContainer___bwvE3 .styles-module__leftIcon___cDktv,.styles-module__iconOnly___iOv-U .styles-module__iconContainer___bwvE3 .styles-module__rightIcon___1mpk0{margin:0}.Dropdown-module__dropdown___c9wIp{width:100%;display:inline-block;position:relative}.Dropdown-module__dropdownButton___suNh-{border:1px solid var(--color-separator);cursor:pointer;text-align:left;background:var(--color-bg-2);width:100%;color:var(--color-fg-text);border-radius:8px;outline:none;justify-content:space-between;align-items:center;padding:.75rem 2.5rem .75rem 1rem;font-family:inherit;font-size:1rem;font-weight:400;line-height:1.5rem;transition:all .2s ease-in-out;display:flex;position:relative}.Dropdown-module__dropdownButton___suNh-:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-bg-1)}.Dropdown-module__dropdownButton___suNh-:focus{border-color:var(--color-primary);background:var(--color-bg-1);box-shadow:0 0 0 2px var(--color-primary-transparent)}.Dropdown-module__dropdownButton___suNh-.Dropdown-module__disabled___Rz0pX{cursor:not-allowed;opacity:.6;background:var(--color-bg-3)}.Dropdown-module__dropdownButton___suNh-.Dropdown-module__error___F7dDu{border-color:#ef4444}.Dropdown-module__buttonText___D2zxn{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.Dropdown-module__chevronIcon___uyawp{color:var(--color-fg-highlight);flex-shrink:0;transition:transform .15s;position:absolute;right:1rem}.Dropdown-module__chevronIcon___uyawp.Dropdown-module__open___APoXd{transform:rotate(180deg)}.Dropdown-module__dropdownMenu___WJ-QO{background:var(--color-bg);border:1px solid var(--color-border-4);z-index:1000;border-radius:8px;min-width:100%;animation:.15s ease-out Dropdown-module__slideDown___sRCmO;position:absolute;top:calc(100% + .5rem);left:0;right:0;overflow:hidden;box-shadow:0 .5rem 1rem #0000002d}@keyframes Dropdown-module__slideDown___sRCmO{0%{opacity:0;transform:translateY(-.5rem)}to{opacity:1;transform:translateY(0)}}.Dropdown-module__optionsList___Be6RN{margin:0;padding:.5rem 0;list-style:none}.Dropdown-module__option___q-NgT{cursor:pointer;color:var(--color-fg-text);align-items:center;padding:.75rem 1rem;font-size:.875rem;transition:all .15s;display:flex}.Dropdown-module__option___q-NgT:hover{background-color:var(--color-bg-2)}.Dropdown-module__option___q-NgT.Dropdown-module__selected___-OTW-{background-color:var(--color-bg-3);color:var(--color-fg-highlight);font-weight:600}@media (width<=768px){.Dropdown-module__dropdownButton___suNh-{padding:.625rem 2.25rem .625rem .875rem;font-size:.875rem}.Dropdown-module__chevronIcon___uyawp{right:.875rem}.Dropdown-module__option___q-NgT{padding:.625rem .875rem;font-size:.8125rem}}.styles-module__wrapper___COeGm{flex-direction:column;gap:.5rem;display:flex}.styles-module__wrapper___COeGm.styles-module__fullWidth___lVU49{width:100%}.styles-module__label___gfOA7{color:var(--color-fg-heading);align-items:center;gap:.25rem;font-size:.875rem;font-weight:500;display:flex}.styles-module__required___-zOy5{color:var(--color-danger)}.styles-module__inputContainer___wXY53{align-items:center;width:100%;display:flex;position:relative}.styles-module__input___IZDc3{border:1px solid var(--color-border-4);background:var(--color-bg);width:100%;color:var(--color-fg-text);border-radius:.5rem;outline:none;font-family:inherit;font-size:.875rem;transition:all .2s}.styles-module__input___IZDc3[type=password]::-webkit-credentials-auto-fill-button{visibility:hidden!important;opacity:0!important;pointer-events:none!important;appearance:none!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-webkit-strong-password-toggle-button{visibility:hidden!important;opacity:0!important;pointer-events:none!important;appearance:none!important;width:0!important;height:0!important;margin:0!important;padding:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-ms-reveal{visibility:hidden!important;opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-ms-clear{visibility:hidden!important;opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb,102, 126, 234), .1)}.styles-module__input___IZDc3::placeholder{color:var(--color-fg-muted,var(--color-fg-text));opacity:.5}.styles-module__input___IZDc3.styles-module__small___cuGyE{padding:.5rem .75rem;font-size:.8125rem}.styles-module__input___IZDc3.styles-module__medium___JdDPu{padding:.75rem;font-size:.875rem}.styles-module__input___IZDc3.styles-module__large___fMmiG{padding:1rem;font-size:1rem}.styles-module__input___IZDc3.styles-module__default___-eZTG{background:var(--color-bg);border-color:var(--color-border-4)}.styles-module__input___IZDc3.styles-module__filled___EQ5PQ{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3{padding-left:2.5rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3{padding-right:2.5rem}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3.styles-module__small___cuGyE{padding-left:2rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3.styles-module__small___cuGyE{padding-right:2rem}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3.styles-module__large___fMmiG{padding-left:3rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3.styles-module__large___fMmiG{padding-right:3rem}.styles-module__leftIcon___jEW5H,.styles-module__rightIcon___bA3Eo{color:var(--color-fg-muted,var(--color-fg-text));pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute}.styles-module__leftIcon___jEW5H{left:.75rem}.styles-module__rightIcon___bA3Eo{right:.75rem}.styles-module__rightIcon___bA3Eo.styles-module__rightIconInteractive___ccypw{pointer-events:auto}.styles-module__inputContainer___wXY53.styles-module__containerSmall___20ICq .styles-module__leftIcon___jEW5H{left:.5rem}.styles-module__inputContainer___wXY53.styles-module__containerSmall___20ICq .styles-module__rightIcon___bA3Eo{right:.5rem}.styles-module__inputContainer___wXY53.styles-module__containerLarge___IztuN .styles-module__leftIcon___jEW5H{left:1rem}.styles-module__inputContainer___wXY53.styles-module__containerLarge___IztuN .styles-module__rightIcon___bA3Eo{right:1rem}.styles-module__input___IZDc3.styles-module__error___946qV{border-color:var(--color-danger)}.styles-module__input___IZDc3.styles-module__error___946qV:focus{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb,244, 67, 54), .1)}.styles-module__input___IZDc3.styles-module__disabled___sJvLd{background:var(--color-bg-3);border-color:var(--color-border-5);color:var(--color-fg-muted);cursor:not-allowed;opacity:.6}.styles-module__errorMessage___5Mn22{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___T2eui{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__container___xeg8O{flex-direction:column;gap:1rem;display:flex}.styles-module__label___qhbKe{color:var(--color-fg-text);font-size:.875rem;font-weight:500}.styles-module__error___O-7AY{color:var(--color-error);font-size:.875rem}.styles-module__pairs___owGV3{flex-direction:column;gap:.75rem;display:flex}.styles-module__pair___G4WFY{grid-template-columns:1fr 2fr auto;align-items:start;gap:.75rem;display:grid}.styles-module__keyInput___wl1M1,.styles-module__valueInput___HiwJ5{flex:1}.styles-module__removeButton___4-X0b{min-width:auto;color:var(--color-error);padding:.5rem}.styles-module__removeButton___4-X0b:hover{background-color:var(--color-error);color:#fff}.styles-module__addButton___QFljt{align-self:flex-start}@media (width<=768px){.styles-module__pair___G4WFY{grid-template-columns:1fr}.styles-module__removeButton___4-X0b{align-self:flex-end}}.styles-module__searchContainer___86TGN{width:100%;max-width:400px;position:relative}.styles-module__searchIcon___ZInry{color:var(--color-fg-muted);pointer-events:none;position:absolute;top:50%;left:1rem;transform:translateY(-50%)}.styles-module__searchInput___SqZXQ{border:1px solid var(--color-border);width:100%;color:var(--color-fg-text);background:var(--color-bg-2);border-radius:.5rem;padding:.75rem 3rem;font-size:1rem;transition:all .2s}.styles-module__searchInput___SqZXQ:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-bg);outline:none}.styles-module__searchInput___SqZXQ::placeholder{color:var(--color-fg-muted)}.styles-module__clearBtn___7jExr{width:1.5rem;height:1.5rem;color:var(--color-fg-muted);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:all .2s;display:flex;position:absolute;top:50%;right:.75rem;transform:translateY(-50%)}.styles-module__clearBtn___7jExr:hover{color:var(--color-fg-text)}@media (width<=768px){.styles-module__searchContainer___86TGN{max-width:100%}}.styles-module__container___nGxdM{flex-direction:column;gap:.75rem;display:flex}.styles-module__toggleContainer___VrsKI{align-items:center;display:flex}.styles-module__toggleButton___IzD6Z{border:1px solid var(--color-border-4);background:var(--color-bg);color:var(--color-fg-muted);cursor:pointer;border-radius:.5rem;align-items:center;gap:.5rem;padding:.5rem 1rem;font-size:.875rem;transition:all .2s;display:flex}.styles-module__toggleButton___IzD6Z:hover{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__toggleButton___IzD6Z.styles-module__enabled___cao0G{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.styles-module__toggleButton___IzD6Z.styles-module__enabled___cao0G:hover{background:var(--color-primary-hover);border-color:var(--color-primary-hover)}.styles-module__optionsContainer___LOzlO{background:var(--color-bg-2);border:1px solid var(--color-border-4);border-radius:.5rem;gap:.5rem;padding:.5rem;display:flex}.styles-module__option___abhnC{border:1px solid var(--color-border-4);background:var(--color-bg);color:var(--color-fg);cursor:pointer;border-radius:.375rem;flex:1;justify-content:center;align-items:center;gap:.375rem;padding:.5rem .875rem;font-size:.875rem;font-weight:500;transition:all .2s;display:flex}.styles-module__option___abhnC:hover{background:var(--color-bg-3);border-color:var(--color-border-3)}.styles-module__option___abhnC.styles-module__active___pqmSi{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.styles-module__option___abhnC.styles-module__active___pqmSi:hover{background:var(--color-primary-hover);border-color:var(--color-primary-hover)}.styles-module__nbSelect___KjxSc{font-family:inherit;font-size:.9375rem;font-weight:600;line-height:1.5rem;display:inline-block;position:relative}.styles-module__selectButton___AKZe4{cursor:pointer;text-align:left;width:100%;min-width:8rem;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;appearance:none;border:1px solid;border-radius:.25rem;outline:none;justify-content:space-between;align-items:center;padding:.4375rem 2.2rem .4375rem 1.125rem;transition:all .15s ease-in-out;display:flex;position:relative}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a{background-color:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-fg)}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a:hover:not(:disabled){background-color:var(--color-primary-light);border-color:var(--color-primary-light)}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a:focus,.styles-module__selectButton___AKZe4.styles-module__primary___HU36a.styles-module__open___9AKMb{background-color:var(--color-primary-light);border-color:var(--color-primary-light);box-shadow:0 0 0 .125rem #8f9bb340}.styles-module__selectButton___AKZe4.styles-module__default___LedYP{background-color:var(--color-bg);border-color:var(--color-border-4);color:var(--color-fg-text)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP:hover:not(:disabled){background-color:var(--color-bg-2);border-color:var(--color-primary)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP:focus,.styles-module__selectButton___AKZe4.styles-module__default___LedYP.styles-module__open___9AKMb{background-color:var(--color-bg-2);border-color:var(--color-primary);box-shadow:0 0 0 .125rem #8f9bb340}.styles-module__selectButton___AKZe4:disabled{cursor:not-allowed;opacity:.6}.styles-module__buttonText___QSLO1{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.styles-module__chevronIcon___qAHaD{flex-shrink:0;width:1.5rem;height:1.5rem;transition:transform .15s;position:absolute;right:.41rem}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a .styles-module__chevronIcon___qAHaD{color:var(--color-primary-fg)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP .styles-module__chevronIcon___qAHaD{color:var(--color-fg)}.styles-module__chevronIcon___qAHaD.styles-module__open___9AKMb{transform:rotate(180deg)}.styles-module__optionsPanel___NWAp3{background-color:var(--color-bg);border:1px solid var(--color-border-4);z-index:1000;transform-origin:top;visibility:hidden;pointer-events:none;border-radius:.25rem;min-width:100%;position:absolute;top:calc(100% + .5rem);left:0;right:0;overflow:hidden;box-shadow:0 .5rem 1rem #00000026}.styles-module__optionsPanel___NWAp3.styles-module__open___9AKMb{visibility:visible;pointer-events:auto;animation:.25s ease-out styles-module__expandDown___eD4lh}.styles-module__optionsPanel___NWAp3.styles-module__closed___bez-q{visibility:hidden;pointer-events:none;animation:.25s ease-out styles-module__collapseUp___dt1E7}@keyframes styles-module__expandDown___eD4lh{0%{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}@keyframes styles-module__collapseUp___dt1E7{0%{opacity:1;transform:scaleY(1)}to{opacity:0;transform:scaleY(0)}}.styles-module__optionsPanel___NWAp3.styles-module__primary___HU36a{border-color:var(--color-primary)}.styles-module__optionsPanel___NWAp3.styles-module__default___LedYP{border-color:var(--color-border-4)}.styles-module__optionsList___AxhVp{margin:0;padding:.5rem 0;list-style:none}.styles-module__option___t1SSw{cursor:pointer;color:var(--color-fg-text);justify-content:space-between;align-items:center;padding:.75rem 1.125rem;transition:all .15s;display:flex}.styles-module__option___t1SSw:hover{background-color:var(--color-bg-2)}.styles-module__option___t1SSw.styles-module__selected___azD4A{background-color:var(--color-primary);color:var(--color-primary-fg);font-weight:700}@media (prefers-color-scheme:dark){.styles-module__optionsPanel___NWAp3{box-shadow:0 .5rem 1rem #0000004d}}.styles-module__sliderContainer___lgpaD{flex-direction:column;gap:.5rem;display:flex}.styles-module__sliderContainer___lgpaD.styles-module__fullWidth___ZS8W5{width:100%}.styles-module__labelRow___dkVVM{justify-content:space-between;align-items:center;min-height:1.5rem;margin-bottom:.5rem;display:flex}.styles-module__label___bXGZs{color:var(--color-fg-text);font-size:.875rem;font-weight:500}.styles-module__required___FuyfE{color:var(--color-danger);margin-left:.25rem}.styles-module__sliderWrapper___1Wdti{touch-action:none;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;gap:.75rem;width:100%;display:flex}.styles-module__sliderRoot___yzOjR{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;flex-grow:1;align-items:center;width:100%;padding:.75rem 0;display:flex;position:relative}.styles-module__sliderRoot___yzOjR:active{cursor:grabbing}.styles-module__sliderTrackWrapper___N72WQ{flex-grow:1;display:flex;position:relative}.styles-module__sliderTrack___AltcD{background-color:var(--color-bg-3);border-radius:9999px;width:100%;height:.375rem;position:relative;overflow:hidden}.styles-module__sliderRange___U3g0-{background-color:var(--color-primary);border-radius:9999px;height:100%;position:absolute}.styles-module__valueIndicator___aLf0I{color:var(--color-primary);text-align:center;flex-shrink:0;min-width:2rem;font-size:.875rem;font-weight:600;line-height:1}.styles-module__iconWrapper___wL-b8{flex-shrink:0;justify-content:center;align-items:center;display:flex}.styles-module__icon___vHsID{width:20px;height:20px;color:var(--color-fg-muted)}.styles-module__errorMessage___qFgGe{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___tgBGl{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__loadingContainer___OMgwS{flex-direction:column;justify-content:center;align-items:center;gap:1.5rem;min-height:60vh;display:flex}.styles-module__loadingText___KRZqR{color:var(--color-fg-muted);font-size:1rem}.styles-module__errorContainer___qhAg2{text-align:center;min-height:60vh;color:var(--color-fg-text);flex-direction:column;justify-content:center;align-items:center;gap:2rem;padding:3rem 2rem;display:flex}.styles-module__errorIconWrapper___IHZrN{background:linear-gradient(135deg, rgba(var(--color-error-rgb,239, 68, 68), .1), rgba(var(--color-error-rgb,239, 68, 68), .05));border:2px solid rgba(var(--color-error-rgb,239, 68, 68), .2);border-radius:50%;justify-content:center;align-items:center;width:120px;height:120px;animation:2s ease-in-out infinite styles-module__pulse___Lju-z;display:flex}@keyframes styles-module__pulse___Lju-z{0%,to{opacity:1;transform:scale(1)}50%{opacity:.9;transform:scale(1.05)}}.styles-module__errorIcon___oGDIP{color:var(--color-error,#ef4444);stroke-width:1.5px}.styles-module__errorContent___F55rQ{flex-direction:column;align-items:center;gap:1rem;width:100%;max-width:600px;display:flex}.styles-module__errorTitle___hC8D-{color:var(--color-fg-heading);letter-spacing:-.02em;margin:0;font-size:1.75rem;font-weight:700;line-height:1.2}.styles-module__errorDescription___hZtuP{color:var(--color-fg-muted);max-width:480px;margin:0;font-size:1rem;line-height:1.6}.styles-module__errorDetailsWrapper___-sp8b{width:100%;max-width:600px;margin-top:.5rem}.styles-module__errorDetailsContainer___eywMo{text-align:left;border:1px solid var(--color-border,#0000001a);background:var(--color-bg-2,#00000005);border-radius:.75rem;width:100%;transition:all .2s;overflow:hidden}.styles-module__errorDetailsContainer___eywMo:hover{border-color:var(--color-border-hover,#00000026);background:var(--color-bg-3,#00000008)}.styles-module__errorDetailsSummary___hGEoD{cursor:pointer;color:var(--color-fg-muted);-webkit-user-select:none;user-select:none;padding:.875rem 1.25rem;font-size:.875rem;font-weight:500;list-style:none;transition:color .2s}.styles-module__errorDetailsSummary___hGEoD:hover{color:var(--color-fg-text)}.styles-module__errorDetailsSummary___hGEoD::-webkit-details-marker{display:none}.styles-module__errorDetailsSummary___hGEoD:before{content:"▶";margin-right:.5rem;font-size:.75rem;transition:transform .2s;display:inline-block}.styles-module__errorDetailsContainer___eywMo[open] .styles-module__errorDetailsSummary___hGEoD:before{transform:rotate(90deg)}.styles-module__errorDetails___tzCT-{background:var(--color-bg-3,#00000008);border-top:1px solid var(--color-border,#0000001a);max-width:100%;color:var(--color-fg-muted);white-space:pre-wrap;word-break:break-word;margin:0;padding:1rem 1.25rem;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace;font-size:.8125rem;line-height:1.6;overflow-x:auto}.styles-module__errorActions___gtqYw{flex-wrap:wrap;justify-content:center;align-items:center;gap:.75rem;margin-top:1rem;display:flex}.styles-module__retryButton___TA4jm{background:var(--color-primary);color:var(--color-primary-fg);cursor:pointer;border:none;border-radius:.5rem;justify-content:center;align-items:center;gap:.5rem;padding:.75rem 2rem;font-size:.9375rem;font-weight:500;transition:all .2s;display:inline-flex;box-shadow:0 2px 8px #00000014}.styles-module__retryButton___TA4jm:hover{background:var(--color-primary-hover,var(--color-primary));transform:translateY(-2px);box-shadow:0 4px 16px #0000001f}.styles-module__retryButton___TA4jm:active{transform:translateY(0);box-shadow:0 2px 8px #00000014}.styles-module__retryButtonIcon___vzfp-{font-size:1.125rem;line-height:1;transition:transform .3s;display:inline-block}.styles-module__retryButton___TA4jm:hover .styles-module__retryButtonIcon___vzfp-{transform:rotate(180deg)}.styles-module__clearLocalDataButton___T3B-K{color:var(--color-fg-muted);border:1px solid var(--color-border-4);cursor:pointer;background:0 0;border-radius:.5rem;justify-content:center;align-items:center;padding:.75rem 1.5rem;font-size:.9375rem;font-weight:500;transition:all .2s;display:inline-flex}.styles-module__clearLocalDataButton___T3B-K:hover{color:var(--color-fg-text);border-color:var(--color-border-3);background:var(--color-bg-secondary)}.styles-module__wrapper___jXPV3{flex-direction:column;gap:.5rem;display:flex}.styles-module__wrapper___jXPV3.styles-module__fullWidth___eKyGB{width:100%}.styles-module__label___MyTeo{color:var(--color-fg-heading);align-items:center;gap:.25rem;font-size:.875rem;font-weight:500;display:flex}.styles-module__required___TV-m8{color:var(--color-danger)}.styles-module__inputContainer___VvGBl{align-items:flex-start;width:100%;display:flex;position:relative}.styles-module__textarea___AjX9N{border:1px solid var(--color-border-4);background:var(--color-bg);width:100%;color:var(--color-fg-text);resize:vertical;border-radius:.5rem;outline:none;min-height:4rem;font-family:inherit;font-size:.875rem;transition:all .2s}.styles-module__textarea___AjX9N:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb,102, 126, 234), .1)}.styles-module__textarea___AjX9N::placeholder{color:var(--color-fg-muted,var(--color-fg-text));opacity:.5}.styles-module__textarea___AjX9N.styles-module__small___zMx0G{min-height:3rem;padding:.5rem .75rem;font-size:.8125rem}.styles-module__textarea___AjX9N.styles-module__medium___tO2Lb{min-height:4rem;padding:.75rem;font-size:.875rem}.styles-module__textarea___AjX9N.styles-module__large___3eU2g{min-height:5rem;padding:1rem;font-size:1rem}.styles-module__textarea___AjX9N.styles-module__default___vsSxX{background:var(--color-bg);border-color:var(--color-border-4)}.styles-module__textarea___AjX9N.styles-module__filled___TPQgI{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__inputContainer___VvGBl .styles-module__leftIcon___FHp2R{color:var(--color-fg-muted,var(--color-fg-text));pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute;top:.75rem;left:.75rem}.styles-module__inputContainer___VvGBl .styles-module__rightIcon___dkyvP{color:var(--color-fg-muted,var(--color-fg-text));pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute;top:.75rem;right:.75rem}.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__small___zMx0G+.styles-module__leftIcon___FHp2R,.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__small___zMx0G+.styles-module__rightIcon___dkyvP{top:.5rem}.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__large___3eU2g+.styles-module__leftIcon___FHp2R,.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__large___3eU2g+.styles-module__rightIcon___dkyvP{top:1rem}.styles-module__textarea___AjX9N.styles-module__error___d8gLK{border-color:var(--color-danger)}.styles-module__textarea___AjX9N.styles-module__error___d8gLK:focus{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb,244, 67, 54), .1)}.styles-module__textarea___AjX9N.styles-module__disabled___IzbfE{background:var(--color-bg-3);border-color:var(--color-border-5);color:var(--color-fg-muted);cursor:not-allowed;opacity:.6}.styles-module__errorText___Nom7x{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___97Def{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__virtualList___pM6rN{contain:strict;width:100%;padding-bottom:300px;position:relative;overflow:auto}.styles-module__emptyContainer___rm938{height:100%;color:var(--color-fg-muted);justify-content:center;align-items:center;display:flex}.styles-module__virtualListInner___HxRzc{width:100%;position:relative}.styles-module__virtualListItems___p19-a{width:100%;position:absolute;top:0;left:0}.styles-module__loadingMore___zAdLM{color:var(--color-fg-muted);justify-content:center;align-items:center;gap:.75rem;padding:2rem 0;font-size:.875rem;display:flex}.styles-module__endOfList___5cYFh{color:var(--color-fg-muted);border-top:1px solid var(--color-border-3);justify-content:center;margin-top:1rem;padding:2rem 0;font-size:.875rem;display:flex}.styles-module__endOfList___5cYFh span{background-color:var(--color-bg-2);border-radius:.25rem;padding:.5rem 1rem}.styles-module__virtualList___xmj2v{width:100%;padding-bottom:300px;position:relative;overflow:visible}.styles-module__virtualListInner___quD74{width:100%;position:relative}.styles-module__virtualListItems___-Muml{width:100%;position:absolute;top:0;left:0}.styles-module__virtualListRow___h3pzX{width:100%}.styles-module__emptyContainer___LIy8r{color:var(--color-fg-muted);justify-content:center;align-items:center;padding:2rem 0;display:flex}.styles-module__loadingMore___Mzf-p{color:var(--color-fg-muted);justify-content:center;align-items:center;padding:1.5rem 0;display:flex}.styles-module__endOfList___g5G--{color:var(--color-fg-muted);border-top:1px solid var(--color-border-3);justify-content:center;padding:1.5rem 0;display:flex}.styles-module__sidebar___BMt0j{flex-direction:column;height:100%;min-height:0;display:flex;overflow:hidden}.styles-module__sidebarContent___iAwiw{flex-direction:column;height:100%;min-height:0;padding-top:1rem;display:flex;overflow:hidden}.styles-module__menuWrapper___DKuEv{flex:1;min-height:0;overflow:hidden auto}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar{width:0}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar-track{background:0 0}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar-thumb{background:0 0}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar-thumb:hover{background:0 0}.styles-module__sidebar___BMt0j a{margin-left:0}.styles-module__sidebar___BMt0j .ps-sidebar-root{background-color:var(--color-bg-2)!important;border-right:1px solid var(--color-separator)!important;flex-direction:column!important;height:100%!important;min-height:0!important;display:flex!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-sidebar-container{background-color:var(--color-bg-2)!important;height:100%!important;min-height:0!important;color:var(--color-fg-text)!important;flex-direction:column!important;flex:1!important;display:flex!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-menu-button{color:var(--color-fg-text)!important;border-radius:.375rem!important;margin:.125rem .5rem!important;padding:.5rem .75rem!important;font-size:.875rem!important;transition:all .2s!important}.styles-module__sidebar___BMt0j .ps-menu-button:hover{background-color:var(--color-bg-3)!important;color:var(--color-fg-text)!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active{background-color:var(--color-primary)!important;color:#fff!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active *,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-icon,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-label{color:#fff!important}.styles-module__sidebar___BMt0j .ps-menu-icon{width:1.25rem!important;height:1.25rem!important;color:var(--color-fg-text)!important;margin-right:.5rem!important}.styles-module__sidebar___BMt0j .ps-submenu-content{background-color:var(--color-bg-3)!important;padding-left:.5rem!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-submenu-content .ps-menu-button{margin:.125rem .25rem!important;padding:.375rem .5rem!important;font-size:.8125rem!important;transition:all .2s!important}.styles-module__sidebar___BMt0j .ps-menu-label{color:var(--color-fg-text)!important;font-weight:500!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active span,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active div,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-icon,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-label{color:#fff!important}.styles-module__logoutContainer___7NwBL{border-top:1px solid var(--color-separator);writing-mode:horizontal-tb;text-orientation:mixed;flex-shrink:0;margin-top:auto;padding:.5rem}.styles-module__logoutButton___rfD6u{width:100%;color:var(--color-fg-text);cursor:pointer;white-space:nowrap;writing-mode:horizontal-tb;text-orientation:mixed;direction:ltr;background:0 0;border:none;border-radius:.375rem;justify-content:flex-start;align-items:center;gap:.5rem;padding:.5rem .75rem;font-size:.875rem;transition:background-color .2s,color .2s;display:flex;overflow:hidden}.styles-module__logoutButton___rfD6u span{opacity:1;max-width:200px;transition:opacity .3s,max-width .3s;display:inline-block;writing-mode:horizontal-tb!important;text-orientation:mixed!important;direction:ltr!important;transform:none!important}.styles-module__logoutButton___rfD6u .styles-module__hiddenText___z183T{opacity:0;width:0;max-width:0;overflow:hidden}.styles-module__logoutButton___rfD6u .styles-module__visibleText___lfsv-{opacity:1;width:auto;max-width:200px}.styles-module__logoutButton___rfD6u:hover{background-color:var(--color-bg-3)}.styles-module__logoutButton___rfD6u:active{transform:scale(.98)}.styles-module__logoutButton___rfD6u svg{color:inherit;flex-shrink:0}.styles-module__footer___g-hY7{background:var(--color-bg-2);width:100%;padding:0 2rem}.styles-module__footerContent___Oen5n{justify-content:space-between;align-items:center;max-width:100%;margin:0 auto;display:flex}.styles-module__copyright___1R2o3{color:var(--color-fg-text);font-size:.875rem}.styles-module__links___dQyvB{gap:1.5rem;display:flex}.styles-module__link___UWfyK{color:var(--color-fg-text);font-size:.875rem;text-decoration:none;transition:color .3s}.styles-module__link___UWfyK:hover{color:var(--color-primary)}@media (width<=768px){.styles-module__footerContent___Oen5n{flex-direction:column;gap:1rem}.styles-module__links___dQyvB{gap:1rem}}.styles-module__header___4Uc8h{width:100%;padding:.5rem 2rem;display:flex}.styles-module__header___4Uc8h>:first-child{flex:1;justify-content:flex-start;align-items:center;display:flex}.styles-module__header___4Uc8h>:last-child{flex:1;justify-content:flex-end;align-items:center;display:flex}.styles-module__layout___ZQKU7{background:var(--color-bg);flex-direction:column;width:100%;height:100vh;display:flex;position:relative}.styles-module__header___XIaFb{z-index:100;background:var(--color-bg);width:100%;position:fixed;top:0;box-shadow:0 .125rem .25rem #2c33491a}.styles-module__footer___r8ASO{z-index:100;width:100%;position:fixed;bottom:0}.styles-module__mainWrapper___i4tEI{flex:1;display:flex;position:relative}.styles-module__sidebar___ij-8-{position:fixed;top:0}.styles-module__content___mTgUr{background:var(--color-bg);flex:1;min-height:calc(100vh - 10rem);margin:0;padding-top:0;padding-bottom:0;overflow:hidden auto}@media (width<=768px){.styles-module__content___mTgUr{width:100%}.styles-module__sidebar___ij-8-{z-index:999;height:100vh;position:fixed;top:0;left:0}}.styles-module__mainWrapper___AiTAw{flex-direction:row;flex:1;display:flex;position:relative}.styles-module__sidebarContainer___X4yj8{z-index:99;flex-direction:column;display:flex;position:fixed;left:0;overflow:hidden}.styles-module__sidebar___VQTlH{flex-shrink:0;top:0;left:0}.styles-module__content___htJlH{background:var(--color-bg);flex:1;margin:0;padding-top:0;padding-bottom:0;overflow:hidden auto}@media (width<=1024px){.styles-module__content___htJlH{padding:1.5rem}}@media (width<=768px){.styles-module__content___htJlH{width:100%}.styles-module__sidebar___VQTlH{z-index:999;height:100vh;position:fixed;top:0;left:0}}.styles-module__wavesWrapper___TK7DI{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__wavesWrapper___TK7DI>*{pointer-events:auto}.styles-module__squaresWrapper___P25uF{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__squaresWrapper___P25uF>*{pointer-events:auto}.styles-module__letterGlitchWrapper___KWtWU{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__letterGlitchWrapper___KWtWU>*{pointer-events:auto}.styles-module__pixelBlastWrapper___YptHh{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__pixelBlastWrapper___YptHh>*{pointer-events:auto}.style-module__container___Hh3-c{width:100%;height:100%;position:relative;overflow:hidden}
|
|
2
2
|
/*$vite$:1*/`)),document.head.appendChild(e)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
|
|
3
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
3
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("./chunk-chunk-BFrxaqQT.cjs"),p=require("./chunk-lstorage-BnxLXHgH.cjs"),N=require("./chunk-i18n-BCDF-skF.cjs");let m=require("async-retry");m=I.__toESM(m);function A(t){return t.trim().replace(/\s+/g," ")}function y(t){const r=t?.response?.data;return!r||typeof r!="object"?null:{status:r.status,errCode:r.errCode,message:r.message,details:r.details,traceId:r.traceId}}function D(t,r){const e=y(t);if(e?.errCode){const n=N.i18n_default.t(`errors:${e.errCode}`);if(n&&n!==`errors:${e.errCode}`)return n}return e?.message?e.message:r}function T(t,r,e,n,o){if(r.length===0)return t;switch(o){case"insert":return E(t,r,e,n);case"upsert":return k(t,r,e,n)}}function E(t,r,e,n){const o=new Set(t.map(e)),i=r.filter(a=>{const s=e(a);return o.has(s)?!1:(o.add(s),!0)});return i.length===0?t:n==="prepend"?[...i,...t]:[...t,...i]}function k(t,r,e,n){const o=new Map;t.forEach((u,f)=>o.set(e(u),f));let i=!1;const a=t.slice();for(const u of r){const f=e(u),c=o.get(f);c!==void 0&&a[c]!==u&&(a[c]=u,i=!0)}const s=[];for(const u of r){const f=e(u);o.has(f)||s.push(u)}return s.length>0?(i=!0,n==="prepend"?[...s,...a]:[...a,...s]):i?a:t}function R(t,r,e){let n=!1;const o=t.filter(i=>{const a=!r.has(e(i));return a||(n=!0),a});return n?o:t}var v=(t,r)=>{const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*[\d.]+)?\)/);if(e){const[,n,o,i]=e;return`rgba(${n}, ${o}, ${i}, ${r})`}return h(t,r)},B=(t,r)=>{if(t.startsWith("rgba"))return t;const e=t.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);if(e){const[,n,o,i]=e;return`rgba(${n}, ${o}, ${i}, ${r})`}return console.warn("Invalid RGB color format:",t),t},h=(t,r)=>{if(t.indexOf("rgb")!==-1)return t;let e=0,n=0,o=0;return t.startsWith("#")&&(t=t.slice(1)),t.length===3?(e=parseInt(t[0]+t[0],16),n=parseInt(t[1]+t[1],16),o=parseInt(t[2]+t[2],16)):t.length===6?(e=parseInt(t.slice(0,2),16),n=parseInt(t.slice(2,4),16),o=parseInt(t.slice(4,6),16)):console.warn("Unsupported HEX color format"),`rgba(${e}, ${n}, ${o}, ${r})`},C=(t,r,e)=>{const n=c=>{const l=c.match(/^#?([\da-f]{2})([\da-f]{2})([\da-f]{2})$/i);if(l)return[parseInt(l[1],16),parseInt(l[2],16),parseInt(l[3],16)];const d=c.match(/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/i);return d?[parseInt(d[1]),parseInt(d[2]),parseInt(d[3])]:[0,0,0]},[o,i,a]=n(t),[s,u,f]=n(r);return`rgb(${Math.round(o+(s-o)*e)}, ${Math.round(i+(u-i)*e)}, ${Math.round(a+(f-a)*e)})`},P=t=>t[Math.floor(Math.random()*t.length)]||"#ffffff",q=t=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t);function _(t){return typeof t=="string"?t:t==null?"":typeof t=="number"||typeof t=="boolean"?String(t):Array.isArray(t)?t.map(r=>String(r)).join(", "):typeof t=="object"?JSON.stringify(t):String(t)}function j(t){return t==null?"":typeof t=="number"?Number.isFinite(t)?String(t):"":typeof t=="string"?t:typeof t=="boolean"?t?"1":"0":Array.isArray(t)&&t.length>0?String(t[0]):""}function F(t,r,...e){const n={},o=Array.isArray(r)?r:[r,...e],i=new Set(o);for(const a of Object.keys(t))i.has(a)||(n[a]=t[a]);return n}var $=t=>[t,null],b=t=>[null,t instanceof Error?t:new Error(String(t))];async function M(t,r){try{return $(await(0,m.default)(async(e,n)=>{try{return await t(e,n)}catch(o){throw r?.isNonRetryable?.(o)&&e(o),o}},r))}catch(e){return b(e)}}async function G(t,r,e){return M(async(n,o)=>{const i=await t();if(!r(i))throw new Error("Condition not satisfied");return i},e)}function V(t){return Math.round(Number(t)*100)}function w(t){return(Number(t)/100).toFixed(2)}function H(t){return Number(w(t))}function O(t){return t<1e3?t.toString():t<1e6?`${(t/1e3).toFixed(1).replace(/\.0$/,"")}k+`:t<1e9?`${(t/1e6).toFixed(1).replace(/\.0$/,"")}M+`:`${(t/1e9).toFixed(1).replace(/\.0$/,"")}B+`}function U(t){let r=null;return async(...e)=>r||(r=t(...e).finally(()=>r=null),r)}function W(t,r){const e=new Map;return async(...n)=>{const o=r(...n),i=e.get(o);if(i)return i;const a=t(...n).finally(()=>e.delete(o));return e.set(o,a),a}}function Y(t){return t===void 0?null:t}function K(t){return t??void 0}function z(t){return t===""?void 0:t}function J(t,r){return t??r??[]}function Z(t){return t??0}function x(t){return t==null||t===""?"":t}function L(t,r){return t??r}function X(t){if(t==null)return;const r=Number(t);return Number.isNaN(r)?void 0:r}function g(t,r){if(Object.is(t,r))return!0;if(typeof t!=typeof r)return!1;if(t===null||r===null||typeof t!="object"||typeof r!="object")return t===r;const e=Array.isArray(t),n=Array.isArray(r);if(e!==n)return!1;if(e&&n)return t.length!==r.length?!1:t.every((a,s)=>g(a,r[s]));const o=Object.keys(t).sort(),i=Object.keys(r).sort();return o.length!==i.length||!o.every((a,s)=>a===i[s])?!1:o.every(a=>g(t[a],r[a]))}var Q=t=>{let r,e=[];return new Proxy(t,{construct(n,o){if(r||(r=new t(...o),e=o),!g(o,e))throw new Error("Cannot create multiple instances with different parameters");return r}})};function tt(t,r=100){if(t==null)throw new Promise(e=>setTimeout(e,r));return t}var rt=t=>{if(!t)return"";const r=new Date(t);return isNaN(r.getTime())?"":`${r.getFullYear()}/${(r.getMonth()+1).toString().padStart(2,"0")}/${r.getDate().toString().padStart(2,"0")}`},et=t=>{if(!t)return"Unknown";const r=new Date(t);if(isNaN(r.getTime()))return"Invalid date";const e=new Date().getTime()-r.getTime(),n=Math.floor(e/1e3),o=Math.floor(n/60),i=Math.floor(o/60),a=Math.floor(i/24),s=Math.floor(a/30),u=Math.floor(a/365);return u>0?`${u} year${u>1?"s":""} ago`:s>0?`${s} month${s>1?"s":""} ago`:a>0?`${a} day${a>1?"s":""} ago`:i>0?`${i} hour${i>1?"s":""} ago`:o>0?`${o} minute${o>1?"s":""} ago`:"Just now"};function nt(t){try{return new Date(t).toLocaleDateString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return t}}var ot=t=>{try{const r=new Date(t);return isNaN(r.getTime())?t:`${r.getFullYear()}/${String(r.getMonth()+1).padStart(2,"0")}/${String(r.getDate()).padStart(2,"0")} ${String(r.getHours()).padStart(2,"0")}:${String(r.getMinutes()).padStart(2,"0")}`}catch{return t}},at=t=>{try{const r=new Date(t);return isNaN(r.getTime())?t:`${String(r.getMonth()+1).padStart(2,"0")}/${String(r.getDate()).padStart(2,"0")} ${String(r.getHours()).padStart(2,"0")}:${String(r.getMinutes()).padStart(2,"0")}`}catch{return t}},it=t=>{try{const r=new Date(t);return isNaN(r.getTime())?t:`${r.getFullYear()}/${String(r.getMonth()+1).padStart(2,"0")}/${String(r.getDate()).padStart(2,"0")}`}catch{return t}},st=t=>{try{const r=new Date(t);return isNaN(r.getTime())?t:`${String(r.getHours()).padStart(2,"0")}:${String(r.getMinutes()).padStart(2,"0")}`}catch{return t}},ut=(t,r)=>t+Math.random()*(r-t),ft=(t,r)=>{if(r<t)throw new Error("randomInt: maxInclusive must be >= minInclusive");const e=r-t+1;return t+Math.floor(Math.random()*e)},S=(t=.5)=>{if(t<0||t>1)throw new Error("randomBool: probability must be within [0, 1]");return Math.random()<t},ct=(t=.5)=>S(t),lt=()=>Math.random()<.5?-1:1,dt=t=>{if(t.length===0)throw new Error("pickRandom: empty pool");return t[Math.floor(Math.random()*t.length)]},mt=(t=0,r=1)=>{if(r<=0)throw new Error("randomGaussian: stdDev must be > 0");let e=0,n=0;for(;e===0;)e=Math.random();for(;n===0;)n=Math.random();return Math.sqrt(-2*Math.log(e))*Math.cos(2*Math.PI*n)*r+t};function gt(t,r){return t.reduce((e,n,o)=>(e[n]=r?r(n,o):n,e),{})}exports.chance=ct;exports.createMap=gt;exports.err=b;exports.formatDate=it;exports.formatDateTime=ot;exports.formatDisplayDate=rt;exports.formatMonthDayTime=at;exports.formatNumberAbbreviated=O;exports.formatRelativeTime=et;exports.formatTickDate=nt;exports.formatTime=st;exports.getApiError=y;exports.getApiErrorMessage=D;exports.getItem=p.getItem;exports.hexToRGBA=h;exports.interpolateColor=C;exports.isValidEmail=q;exports.mergeById=T;exports.normalizeAddress=A;exports.ok=$;exports.omit=F;exports.onceAsync=U;exports.onceAsyncByKey=W;exports.pickColor=P;exports.pickRandom=dt;exports.pollUntil=G;exports.pruneArray=R;exports.randomBetween=ut;exports.randomBool=S;exports.randomGaussian=mt;exports.randomInt=ft;exports.randomSign=lt;exports.removeItem=p.removeItem;exports.rgbToRgba=B;exports.safeArray=J;exports.safeMaybe=K;exports.safeNilable=z;exports.safeNullable=Y;exports.safeNum=X;exports.safeOr=L;exports.safeStringable=x;exports.safeZeroable=Z;exports.setItem=p.setItem;exports.singleton=Q;exports.suspenseIfNull=tt;exports.toDatabasePrice=V;exports.toDisplayPrice=w;exports.toDisplayPriceNumber=H;exports.toNumberInputValue=j;exports.toRgbaWithAlpha=v;exports.toTextInputValue=_;exports.withRetryResult=M;
|
|
4
4
|
|
|
5
5
|
//# sourceMappingURL=utils.cjs.map
|