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.
Files changed (162) hide show
  1. package/dist/src/apis/index.d.ts +2 -0
  2. package/dist/src/apis/ip.d.ts +4 -0
  3. package/dist/src/constants/caches.d.ts +5 -0
  4. package/dist/src/constants/enums.d.ts +18 -0
  5. package/dist/src/constants/index.d.ts +9 -0
  6. package/dist/src/constants/query.itemkeys.d.ts +31 -0
  7. package/dist/src/constants/query.listkeys.d.ts +30 -0
  8. package/dist/src/constants/querykeys.d.ts +42 -0
  9. package/dist/src/designs/animations/BounceLoading/index.d.ts +7 -0
  10. package/dist/src/designs/animations/ECGLoading/index.d.ts +6 -0
  11. package/dist/src/designs/animations/LetterGlitch/index.d.ts +12 -0
  12. package/dist/src/designs/animations/PixelBlast/index.d.ts +28 -0
  13. package/dist/src/designs/animations/Squares/index.d.ts +13 -0
  14. package/dist/src/designs/animations/TruckLoading/index.d.ts +6 -0
  15. package/dist/src/designs/animations/Waves/index.d.ts +18 -0
  16. package/dist/src/designs/animations/index.d.ts +6 -0
  17. package/dist/src/designs/components/Button/index.d.ts +20 -0
  18. package/dist/src/designs/components/Dropdown/index.d.ts +24 -0
  19. package/dist/src/designs/components/Icon/index.d.ts +9 -0
  20. package/dist/src/designs/components/Input/index.d.ts +23 -0
  21. package/dist/src/designs/components/KeyValueEditor/index.d.ts +30 -0
  22. package/dist/src/designs/components/LayoutSwitcher/index.d.ts +3 -0
  23. package/dist/src/designs/components/SearchInput/index.d.ts +12 -0
  24. package/dist/src/designs/components/ShowFilter/index.d.ts +28 -0
  25. package/dist/src/designs/components/SlideDownSwitcher/index.d.ts +16 -0
  26. package/dist/src/designs/components/Slider/index.d.ts +26 -0
  27. package/dist/src/designs/components/Suspense/SuspenseErrorBoundary.d.ts +21 -0
  28. package/dist/src/designs/components/Suspense/index.d.ts +47 -0
  29. package/dist/src/designs/components/Textarea/index.d.ts +21 -0
  30. package/dist/src/designs/components/ThemeSwitcher/index.d.ts +3 -0
  31. package/dist/src/designs/components/VirtualList/index.d.ts +41 -0
  32. package/dist/src/designs/components/VirtualWindowList/index.d.ts +41 -0
  33. package/dist/src/designs/components/index.d.ts +33 -0
  34. package/dist/src/designs/layouts/components/Background/index.d.ts +11 -0
  35. package/dist/src/designs/layouts/components/Footer/index.d.ts +5 -0
  36. package/dist/src/designs/layouts/components/Header/index.d.ts +4 -0
  37. package/dist/src/designs/layouts/components/LayoutFrame/index.d.ts +3 -0
  38. package/dist/src/designs/layouts/components/MainWrapper/index.d.ts +3 -0
  39. package/dist/src/designs/layouts/components/SideHideLayout/index.d.ts +3 -0
  40. package/dist/src/designs/layouts/components/SideShowLayout/index.d.ts +3 -0
  41. package/dist/src/designs/layouts/components/Sidebar/index.d.ts +3 -0
  42. package/dist/src/designs/layouts/components/index.d.ts +8 -0
  43. package/dist/src/designs/layouts/hooks/index.d.ts +3 -0
  44. package/dist/src/designs/layouts/hooks/useAction.d.ts +7 -0
  45. package/dist/src/designs/layouts/hooks/useLayout.d.ts +5 -0
  46. package/dist/src/designs/layouts/hooks/useSet.d.ts +10 -0
  47. package/dist/src/designs/layouts/index.d.ts +8 -0
  48. package/dist/src/designs/layouts/providers/index.d.ts +3 -0
  49. package/dist/src/designs/layouts/types/components.d.ts +117 -0
  50. package/dist/src/designs/layouts/types/context.d.ts +12 -0
  51. package/dist/src/designs/layouts/types/index.d.ts +6 -0
  52. package/dist/src/designs/layouts/types/layout.d.ts +11 -0
  53. package/dist/src/designs/layouts/utils/index.d.ts +4 -0
  54. package/dist/src/designs/layouts/utils/layoutStorage.d.ts +4 -0
  55. package/dist/src/events/EventEmitter.d.ts +48 -0
  56. package/dist/src/events/index.d.ts +5 -0
  57. package/dist/src/hooks/index.d.ts +4 -0
  58. package/dist/src/hooks/makeCursorFetchFunction.d.ts +84 -0
  59. package/dist/src/hooks/makeUnifiedInfiniteQuery.d.ts +124 -0
  60. package/dist/src/hooks/makeUnifiedQuery.d.ts +19 -0
  61. package/dist/src/hooks/type.d.ts +36 -0
  62. package/dist/src/icons/index.d.ts +1 -0
  63. package/dist/src/icons/lucide.d.ts +2 -0
  64. package/dist/src/languages/hooks/index.d.ts +8 -0
  65. package/dist/src/languages/hooks/useLanguageLabel.d.ts +6 -0
  66. package/dist/src/languages/hooks/useLayoutLabel.d.ts +6 -0
  67. package/dist/src/languages/hooks/usePreferenceLabel.d.ts +6 -0
  68. package/dist/src/languages/hooks/useThemeLabel.d.ts +6 -0
  69. package/dist/src/languages/index.d.ts +11 -0
  70. package/dist/src/languages/languages/i18n.d.ts +8 -0
  71. package/dist/src/languages/languages/i18nResources.d.ts +13 -0
  72. package/dist/src/languages/languages/index.d.ts +2 -0
  73. package/dist/src/languages/providers/index.d.ts +3 -0
  74. package/dist/src/languages/resources/index.d.ts +8 -0
  75. package/dist/src/languages/types/components.d.ts +23 -0
  76. package/dist/src/languages/types/i18n.d.ts +28 -0
  77. package/dist/src/languages/types/index.d.ts +6 -0
  78. package/dist/src/languages/types/language.d.ts +13 -0
  79. package/dist/src/languages/utils/getLocalLanguage.d.ts +2 -0
  80. package/dist/src/languages/utils/index.d.ts +5 -0
  81. package/dist/src/languages/utils/languageStorage.d.ts +5 -0
  82. package/dist/src/navigations/index.d.ts +1 -0
  83. package/dist/src/navigations/navigation.d.ts +50 -0
  84. package/dist/src/preference/constants.d.ts +12 -0
  85. package/dist/src/preference/index.d.ts +35 -0
  86. package/dist/src/services/imageService.d.ts +6 -0
  87. package/dist/src/services/index.d.ts +1 -0
  88. package/dist/src/stores/index.d.ts +1 -0
  89. package/dist/src/stores/makeStore.d.ts +92 -0
  90. package/dist/src/themes/hooks/index.d.ts +2 -0
  91. package/dist/src/themes/hooks/useTheme.d.ts +5 -0
  92. package/dist/src/themes/hooks/useThemeVariables.d.ts +10 -0
  93. package/dist/src/themes/index.d.ts +8 -0
  94. package/dist/src/themes/providers/index.d.ts +3 -0
  95. package/dist/src/themes/themes/bases/android.d.ts +4 -0
  96. package/dist/src/themes/themes/bases/default.d.ts +5 -0
  97. package/dist/src/themes/themes/bases/index.d.ts +7 -0
  98. package/dist/src/themes/themes/bases/ios.d.ts +4 -0
  99. package/dist/src/themes/themes/bases/linux.d.ts +4 -0
  100. package/dist/src/themes/themes/bases/windows.d.ts +4 -0
  101. package/dist/src/themes/themes/colors/coffee.d.ts +7 -0
  102. package/dist/src/themes/themes/colors/corporate.d.ts +7 -0
  103. package/dist/src/themes/themes/colors/cosmic.d.ts +7 -0
  104. package/dist/src/themes/themes/colors/dark.d.ts +7 -0
  105. package/dist/src/themes/themes/colors/default.d.ts +7 -0
  106. package/dist/src/themes/themes/colors/forest.d.ts +7 -0
  107. package/dist/src/themes/themes/colors/index.d.ts +12 -0
  108. package/dist/src/themes/themes/colors/light.d.ts +7 -0
  109. package/dist/src/themes/themes/colors/wheat.d.ts +8 -0
  110. package/dist/src/themes/themes/colors/wine.d.ts +7 -0
  111. package/dist/src/themes/themes/index.d.ts +2 -0
  112. package/dist/src/themes/types/components.d.ts +20 -0
  113. package/dist/src/themes/types/context.d.ts +16 -0
  114. package/dist/src/themes/types/index.d.ts +6 -0
  115. package/dist/src/themes/types/theme.d.ts +209 -0
  116. package/dist/src/themes/utils/index.d.ts +4 -0
  117. package/dist/src/themes/utils/themeStorage.d.ts +7 -0
  118. package/dist/src/types/api.d.ts +75 -0
  119. package/dist/src/types/index.d.ts +2 -0
  120. package/dist/src/types/utils.d.ts +83 -0
  121. package/dist/src/utils/address.d.ts +7 -0
  122. package/dist/src/utils/apiError.d.ts +16 -0
  123. package/dist/src/utils/array.d.ts +21 -0
  124. package/dist/src/utils/colors.d.ts +41 -0
  125. package/dist/src/utils/email.d.ts +7 -0
  126. package/dist/src/utils/form.d.ts +14 -0
  127. package/dist/src/utils/index.d.ts +24 -0
  128. package/dist/src/utils/lstorage.d.ts +4 -0
  129. package/dist/src/utils/object.d.ts +10 -0
  130. package/dist/src/utils/polling.d.ts +12 -0
  131. package/dist/src/utils/price.d.ts +28 -0
  132. package/dist/src/utils/promise.d.ts +17 -0
  133. package/dist/src/utils/random.d.ts +39 -0
  134. package/dist/src/utils/result.d.ts +21 -0
  135. package/dist/src/utils/retry.d.ts +15 -0
  136. package/dist/src/utils/safe.d.ts +69 -0
  137. package/dist/src/utils/singleton.d.ts +21 -0
  138. package/dist/src/utils/suspense.d.ts +10 -0
  139. package/dist/src/utils/time.d.ts +49 -0
  140. package/dist/src/utils/types.d.ts +10 -0
  141. package/dist/utils.cjs +1 -1
  142. package/dist/utils.cjs.map +1 -1
  143. package/dist/utils.mjs +171 -147
  144. package/dist/utils.mjs.map +1 -1
  145. package/package.json +19 -22
  146. package/dist/animations.d.ts +0 -1
  147. package/dist/apis.d.ts +0 -1
  148. package/dist/components.d.ts +0 -1
  149. package/dist/constants.d.ts +0 -1
  150. package/dist/events.d.ts +0 -1
  151. package/dist/hooks.d.ts +0 -1
  152. package/dist/icons.d.ts +0 -1
  153. package/dist/languages.d.ts +0 -1
  154. package/dist/layouts.d.ts +0 -1
  155. package/dist/navigations.d.ts +0 -1
  156. package/dist/pixel-blast.d.ts +0 -1
  157. package/dist/preference.d.ts +0 -1
  158. package/dist/services.d.ts +0 -1
  159. package/dist/stores.d.ts +0 -1
  160. package/dist/themes.d.ts +0 -1
  161. package/dist/types.d.ts +0 -1
  162. package/dist/utils.d.ts +0 -1
@@ -0,0 +1,2 @@
1
+ export { themes, defaultTheme, darkTheme, cosmicTheme, corporateTheme, forestTheme, coffeeTheme, wineTheme } from './colors';
2
+ export { bases } from './bases';
@@ -0,0 +1,20 @@
1
+ import { ReactNode } from 'react';
2
+ import { BaseEnum, ThemeEnum } from './theme';
3
+ /** 主题 Provider 的 props。ThemeProvider props. */
4
+ export interface ThemeProviderProps {
5
+ /** 子节点。Children. */
6
+ children: ReactNode;
7
+ /** 默认颜色主题。Default color theme. */
8
+ defaultTheme?: ThemeEnum;
9
+ /** 默认基础主题(如圆角规范)。Default base theme (e.g. radius). */
10
+ defaultBase?: BaseEnum;
11
+ }
12
+ /** 主题切换器 props。ThemeSwitcher props. */
13
+ export interface ThemeSwitcherProps {
14
+ /** 样式状态。Visual status. */
15
+ status?: "primary" | "default";
16
+ /** 根据 theme 返回显示名称;未传则使用 theme 原值。Display name for theme; default is theme value. */
17
+ getThemeDisplayName?: (theme: ThemeEnum) => string;
18
+ /** 处理主题改变。Handle theme change. */
19
+ handleChangeTheme?: (theme: ThemeEnum) => void;
20
+ }
@@ -0,0 +1,16 @@
1
+ import { BaseEnum, Theme, ThemeEnum } from './theme';
2
+ /** useTheme 返回值类型。Return type of useTheme. */
3
+ export interface ThemeContextType {
4
+ /** 当前完整主题(颜色+基础)。Current full theme (colors + base). */
5
+ currentTheme: Theme;
6
+ /** 当前颜色主题名。Current color theme name. */
7
+ themeName: ThemeEnum;
8
+ /** 当前基础主题名。Current base theme name. */
9
+ baseName: BaseEnum;
10
+ setTheme: (themeName: ThemeEnum) => void;
11
+ setBase: (baseName: BaseEnum) => void;
12
+ /** 可选颜色主题列表。Available color themes. */
13
+ availableThemes: ThemeEnum[];
14
+ /** 可选基础主题列表。Available base themes. */
15
+ availableBases: BaseEnum[];
16
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 主题模块类型统一导出。All theme module types re-exported.
3
+ */
4
+ export * from './theme';
5
+ export * from './components';
6
+ export * from './context';
@@ -0,0 +1,209 @@
1
+ /**
2
+ * 主题相关类型:颜色变量、基础变量、主题枚举与常量。
3
+ * Theme types: color/base variables, theme enums and constants.
4
+ */
5
+ /** 颜色变量(主题色、背景、边框、文字、图表等一切与颜色相关) */
6
+ export interface ColorVariables {
7
+ /** 主品牌色 — 按钮、链接、激活态 | `--color-primary` */
8
+ primary: string;
9
+ /** 主色悬停 — 按钮 hover / ShowFilter active | `--color-primary-hover` */
10
+ primaryHover: string;
11
+ /** 主色浅色 — 标签底色、浅色按钮、选中态背景 | `--color-primary-light` */
12
+ primaryLight: string;
13
+ /** 主色极浅底 — Input/SearchInput focus 发光底、选中行底 | `--color-primary-bg` */
14
+ primaryBg: string;
15
+ /** 主色 RGB 三元组 — 用于 `rgba(var(--color-primary-rgb), α)` 计算 | `--color-primary-rgb` */
16
+ primaryRgb: string;
17
+ /** 主色半透明 — focus ring 外环、Dropdown 聚焦阴影 | `--color-primary-transparent` `--color-primary-alpha` */
18
+ primaryTransparent: string;
19
+ /** 主色上的前景文字 — 按钮白字 / 深色背景字 | `--color-primary-fg` */
20
+ primaryFg: string;
21
+ /** 成功色 — Toast 成功、状态徽标 | `--color-success` */
22
+ success: string;
23
+ /** 成功色浅底 — 成功 Alert 背景 | `--color-success-light` */
24
+ successLight: string;
25
+ /** 成功色 RGB — `rgba(var(--color-success-rgb), α)` | `--color-success-rgb` */
26
+ successRgb: string;
27
+ /** 信息色 — 提示 Alert、Badge | `--color-info` */
28
+ info: string;
29
+ /** 信息色浅底 — 信息 Alert 背景 | `--color-info-light` */
30
+ infoLight: string;
31
+ /** 信息色 RGB — `rgba(var(--color-info-rgb), α)` | `--color-info-rgb` */
32
+ infoRgb: string;
33
+ /** 警告色 — 警告 Toast、图标 | `--color-warning` */
34
+ warning: string;
35
+ /** 警告色浅底 — 警告 Alert 背景 | `--color-warning-light` */
36
+ warningLight: string;
37
+ /** 警告色 RGB — `rgba(var(--color-warning-rgb), α)` | `--color-warning-rgb` */
38
+ warningRgb: string;
39
+ /** 危险色 — 删除按钮、表单错误边框 | `--color-danger` `--color-error` */
40
+ danger: string;
41
+ /** 危险色浅底 — 危险按钮 hover、错误 Alert 底 | `--color-danger-light` */
42
+ dangerLight: string;
43
+ /** 危险色 RGB — Input/Textarea 错误 focus ring | `--color-danger-rgb` `--color-error-rgb` */
44
+ dangerRgb: string;
45
+ /** 页面底色 — html body、最外层容器 | `--color-bg` `--color-bg-1` */
46
+ bg: string;
47
+ /** 二级背景 — Sidebar、Footer、卡片 | `--color-bg-2` */
48
+ bg2: string;
49
+ /** 三级背景 — 菜单 hover、条纹行 | `--color-bg-3` */
50
+ bg3: string;
51
+ /** 四级背景 — 深层嵌套面板 | `--color-bg-4` */
52
+ bg4: string;
53
+ /** 辅助背景 — Suspense fallback 面板 | `--color-bg-secondary` */
54
+ bgSecondary: string;
55
+ /** 最浅边框 — 容器默认边框 | `--color-border` */
56
+ border: string;
57
+ /** 二级边框 — 分隔线 | `--color-border-2` */
58
+ border2: string;
59
+ /** 三级边框 — Input 非激活边、列表分隔 | `--color-border-3` */
60
+ border3: string;
61
+ /** 四级边框 — Input/Button 默认边框 | `--color-border-4` */
62
+ border4: string;
63
+ /** 五级边框(最深) — disabled Input 边框 | `--color-border-5` */
64
+ border5: string;
65
+ /** 悬停边框 — Suspense retry hover、ShowFilter hover | `--color-border-hover` */
66
+ borderHover: string;
67
+ /** 辅助图标色 — icon placeholder、ShowFilter 默认色 | `--color-fg` */
68
+ fg: string;
69
+ /** 正文文字 — 段落、表格内容 | `--color-fg-text` */
70
+ fgText: string;
71
+ /** 标题文字 — h1-h6、Input label | `--color-fg-heading` */
72
+ fgHeading: string;
73
+ /** 高亮文字 — 链接、Dropdown 选中项 | `--color-fg-highlight` */
74
+ fgHighlight: string;
75
+ /** 次要文字 — placeholder、hint、辅助说明 | `--color-fg-muted` */
76
+ fgMuted: string;
77
+ /** 主色上的文字 — primary 按钮/Badge 内文字 | `--color-fg-on-primary` */
78
+ fgOnPrimary: string;
79
+ /** 分隔线 — Sidebar 底部分隔、Dropdown 选项间隔 | `--color-separator` */
80
+ separator: string;
81
+ /** 遮罩层 — Modal/Drawer 背景蒙版 | `--color-overlay` */
82
+ overlay: string;
83
+ /** 阴影色 — 卡片/弹出层 box-shadow 基色 | `--color-shadow` */
84
+ shadow: string;
85
+ /** 焦点环 — 键盘 Tab 导航 focus outline | `--color-ring` */
86
+ ring: string;
87
+ /** 图表系列 1(通常=主色) — 多系列折线/柱状图第 1 组 | `--color-chart-1` */
88
+ chart1: string;
89
+ /** 图表系列 2 — 第 2 组数据线 | `--color-chart-2` */
90
+ chart2: string;
91
+ /** 图表系列 3 — 第 3 组数据线 | `--color-chart-3` */
92
+ chart3: string;
93
+ /** 图表系列 4 — 第 4 组数据线 | `--color-chart-4` */
94
+ chart4: string;
95
+ /** 图表系列 5 — 第 5 组数据线 | `--color-chart-5` */
96
+ chart5: string;
97
+ /** 温度计仪表盘 — 圆弧填充渐变(5 色由浅到深)、空弧、滑块 */
98
+ temperature: {
99
+ arcFill: string[];
100
+ arcEmpty: string;
101
+ thumbBg: string;
102
+ thumbBorder: string;
103
+ };
104
+ /** 太阳能面板图 — 渐变、阴影、第二系列 */
105
+ solar: {
106
+ gradientLeft: string;
107
+ gradientRight: string;
108
+ shadowColor: string;
109
+ secondSeriesFill: string;
110
+ };
111
+ /** 流量图 — tooltip、坐标轴、数据点、渐变 */
112
+ traffic: {
113
+ tooltipBg: string;
114
+ tooltipBorderColor: string;
115
+ tooltipTextColor: string;
116
+ yAxisSplitLine: string;
117
+ lineBg: string;
118
+ itemColor: string;
119
+ itemBorderColor: string;
120
+ itemEmphasisBorderColor: string;
121
+ shadowLineDarkBg: string;
122
+ shadowLineShadow: string;
123
+ gradFrom: string;
124
+ gradTo: string;
125
+ };
126
+ /** 电力图 — tooltip、坐标轴、折线渐变、面积渐变 */
127
+ electricity: {
128
+ tooltipBg: string;
129
+ tooltipLineColor: string;
130
+ tooltipBorderColor: string;
131
+ tooltipTextColor: string;
132
+ axisLineColor: string;
133
+ xAxisTextColor: string;
134
+ yAxisSplitLine: string;
135
+ itemBorderColor: string;
136
+ lineGradFrom: string;
137
+ lineGradTo: string;
138
+ lineShadow: string;
139
+ areaGradFrom: string;
140
+ areaGradTo: string;
141
+ shadowLineDarkBg: string;
142
+ };
143
+ /** ECharts 全局 — 画布底色、文字、坐标轴、tooltip */
144
+ echarts: {
145
+ bg: string;
146
+ textColor: string;
147
+ axisLineColor: string;
148
+ splitLineColor: string;
149
+ itemHoverShadowColor: string;
150
+ tooltipBackgroundColor: string;
151
+ };
152
+ /** Chart.js 全局 — 坐标轴、文字 */
153
+ chartjs: {
154
+ axisLineColor: string;
155
+ textColor: string;
156
+ };
157
+ }
158
+ /** 非颜色变量(圆角等,可随平台不同:iOS 24 / Android|Windows 6 / Linux 4) */
159
+ export interface BaseVariables {
160
+ /** 按钮圆角(px) | `--radius-button` */
161
+ buttonRadius: number;
162
+ /** 卡片圆角(px) | `--radius-card` */
163
+ cardRadius: number;
164
+ /** 输入框圆角(px) | `--radius-input` */
165
+ inputRadius: number;
166
+ }
167
+ /** 颜色主题:name/displayName 表示这套配色是谁 */
168
+ export interface ColorTheme {
169
+ name: string;
170
+ displayName: string;
171
+ variables: ColorVariables;
172
+ }
173
+ /** 基础主题:name/displayName 表示这套基础规范是谁(如 iOS / Android / 默认) */
174
+ export interface BaseTheme {
175
+ name: string;
176
+ displayName: string;
177
+ variables: BaseVariables;
178
+ }
179
+ /** 完整主题 = 颜色主题 + 基础主题 */
180
+ export interface Theme {
181
+ colors: ColorTheme;
182
+ base: BaseTheme;
183
+ }
184
+ /** 颜色主题枚举 */
185
+ export declare enum ThemeEnum {
186
+ DEFAULT = "default",
187
+ LIGHT = "light",
188
+ CORPORATE = "corporate",
189
+ FOREST = "forest",
190
+ DARK = "dark",
191
+ COSMIC = "cosmic",
192
+ COFFEE = "coffee",
193
+ WINE = "wine",
194
+ WHEAT = "wheat"
195
+ }
196
+ export declare const DEFAULT_THEME = ThemeEnum.DEFAULT;
197
+ export declare const THEME_VALUES: ThemeEnum[];
198
+ /** 基础主题枚举(平台/圆角等,如 iOS 24 / Android|Windows 6 / Linux 4) */
199
+ export declare enum BaseEnum {
200
+ DEFAULT = "default",
201
+ IOS = "ios",
202
+ ANDROID = "android",
203
+ WINDOWS = "windows",
204
+ LINUX = "linux"
205
+ }
206
+ export declare const DEFAULT_BASE = BaseEnum.DEFAULT;
207
+ export declare const BASE_VALUES: BaseEnum[];
208
+ export declare const COLOR_STORAGE_KEY = "theme-color";
209
+ export declare const BASE_STORAGE_KEY = "theme-base";
@@ -0,0 +1,4 @@
1
+ /**
2
+ * 主题模块工具函数。Theme module utils.
3
+ */
4
+ export { getThemeBaseStorage, getThemeColorStorage, removeThemeStorage, setThemeBaseStorage, setThemeColorStorage, } from './themeStorage';
@@ -0,0 +1,7 @@
1
+ import { Nilable } from '../../../types/utils';
2
+ import { BaseEnum, ThemeEnum } from '../types';
3
+ export declare function getThemeColorStorage(): Nilable<ThemeEnum>;
4
+ export declare function setThemeColorStorage(value: ThemeEnum): void;
5
+ export declare function getThemeBaseStorage(): Nilable<BaseEnum>;
6
+ export declare function setThemeBaseStorage(value: BaseEnum): void;
7
+ export declare function removeThemeStorage(): void;
@@ -0,0 +1,75 @@
1
+ import { Array } from './utils';
2
+ /** 基础响应(status、errCode、message)。Base response (status, errCode, message). */
3
+ interface BaseResponse {
4
+ /** 状态码。Status code. */
5
+ status?: number;
6
+ /** 错误码。Error code. */
7
+ errCode?: string;
8
+ /** 消息。Message. */
9
+ message?: string;
10
+ }
11
+ /** 列表元信息(如 total)。List meta (e.g. total). */
12
+ interface ListMeta {
13
+ /** 总数。Total count. */
14
+ total?: number;
15
+ }
16
+ /** 带 data 与可选 meta 的响应。Response with data and optional meta. */
17
+ interface DataResponse<T, M = Record<string, unknown>> extends BaseResponse {
18
+ /** 数据。Data payload. */
19
+ data: T;
20
+ /** 元信息。Meta. */
21
+ meta?: M;
22
+ }
23
+ /** 数字 offset 分页参数(用于 makeCursorFetchFunction 等)。Number offset pagination params; used by makeCursorFetchFunction etc. */
24
+ interface OffsetLimitNumber {
25
+ /** 偏移量。Offset. */
26
+ offset: number;
27
+ /** 每页条数。Limit. */
28
+ limit: number;
29
+ }
30
+ /** 字符串游标分页参数(用于 makeStringCursorFetchFunction 等)。String cursor pagination params; used by makeStringCursorFetchFunction etc. */
31
+ interface OffsetLimitString {
32
+ /** 游标(字符串)。Cursor (string). */
33
+ offset: string;
34
+ /** 每页条数。Limit. */
35
+ limit: number;
36
+ }
37
+ /** 列表 + 总数:items + total(用于 offset/limit 分页的返回)。List with total count; used as offset/limit response. */
38
+ interface ListDTOWithTotalNumber<T> {
39
+ /** 列表项。Items. */
40
+ items: Array<T>;
41
+ /** 总数。Total count. */
42
+ total: number;
43
+ }
44
+ /** 字符串游标列表:items + nextCursor(用于 nextCursor 为 string 的 API)。List with string nextCursor. */
45
+ interface ListDTOWithNextCursor<T> {
46
+ /** 列表项。Items. */
47
+ items: Array<T>;
48
+ /** 下一页游标。Next cursor. */
49
+ nextCursor: string;
50
+ }
51
+ /** 分页响应(data、total、page、pageSize)。Paginated response (data, total, page, pageSize). */
52
+ interface PaginatedResponse<T> {
53
+ /** 数据列表。Data array. */
54
+ data: Array<T>;
55
+ /** 总数。Total count. */
56
+ total: number;
57
+ /** 当前页。Current page. */
58
+ page: number;
59
+ /** 每页条数。Page size. */
60
+ pageSize: number;
61
+ }
62
+ /** 错误响应。Error response. */
63
+ interface ApiErrorBody {
64
+ /** 状态码。Status code. */
65
+ status?: number;
66
+ /** 错误码。Error code. */
67
+ errCode?: string;
68
+ /** 消息。Message. */
69
+ message?: string;
70
+ /** 详情。Details. */
71
+ details?: unknown;
72
+ /** 追踪 ID。Trace ID. */
73
+ traceId?: string;
74
+ }
75
+ export type { BaseResponse, DataResponse, ListDTOWithNextCursor, ListDTOWithTotalNumber, ListMeta, OffsetLimitNumber, OffsetLimitString, PaginatedResponse, ApiErrorBody, };
@@ -0,0 +1,2 @@
1
+ export * from './api';
2
+ export * from './utils';
@@ -0,0 +1,83 @@
1
+ /**
2
+ * 数组类型。Array type.
3
+ * @example Array<string> => string[]
4
+ */
5
+ type Array<T> = T[];
6
+ /**
7
+ * 可为 null。Nullable: T | null.
8
+ * @example Nullable<string> => string | null
9
+ */
10
+ type Nullable<T> = T | null;
11
+ /**
12
+ * 可为 undefined。Maybe: T | undefined.
13
+ * @example Maybe<number> => number | undefined
14
+ */
15
+ type Maybe<T> = T | undefined;
16
+ /**
17
+ * 可为 null 或 undefined。Nilable: T | null | undefined.
18
+ * @example Nilable<boolean> => boolean | null | undefined
19
+ */
20
+ type Nilable<T> = T | null | undefined;
21
+ /**
22
+ * 可为 null、undefined 或空字符串。Emptyable: T | null | undefined | "".
23
+ * @example Emptyable<string> => string | null | undefined | ""
24
+ */
25
+ type Emptyable<T> = T | null | undefined | "";
26
+ /**
27
+ * 可为 0 的数值类型。Zeroable: T | 0,T 为 number 子类型。
28
+ * @example Zeroable<number> => number | 0
29
+ */
30
+ type Zeroable<T extends number> = T | 0;
31
+ /**
32
+ * 可为空字符串的类型。Stringable: T | "",T 为 string 子类型。
33
+ * @example Stringable<string> => string | ""
34
+ */
35
+ type Stringable<T extends string> = T | "";
36
+ /**
37
+ * 可为空对象。Objectable: T | {},T 为对象类型。
38
+ * @example Objectable<{ a: number }> => { a: number } | {}
39
+ */
40
+ type Objectable<T extends Record<string, unknown>> = T | {};
41
+ /**
42
+ * 可为空数组;T 为元素类型,等价于 ArrayType<T> | []。
43
+ * Arrayable: T[] | [],T 为数组元素类型。
44
+ * @example Arrayable<string> => string[] | []
45
+ */
46
+ type Arrayable<T> = Array<T> | [];
47
+ /**
48
+ * 存在性结果元组:有值时为 [T, true],无值时为 [null, false]。用于区分「有值」与「无」而不依赖 undefined。
49
+ * Existence result tuple: [T, true] when present, [null, false] when absent.
50
+ * @example ExistenceResult<{ id: string }> => [{ id: string }, true] | [null, false]
51
+ */
52
+ type ExistenceResult<T> = [T, true] | [null, false];
53
+ /**
54
+ * 对象 T 所有属性值的联合类型。ValueOf: union of all property value types of T.
55
+ * @example ValueOf<{ a: number; b: string }> => number | string
56
+ */
57
+ type ValueOf<T> = T[keyof T];
58
+ /**
59
+ * 对象 T 的键字面量联合类型,即 keyof T。KeyOf: key type of T.
60
+ * @example KeyOf<{ a: 1; b: 2 }> => "a" | "b"
61
+ */
62
+ type KeyOf<T> = keyof T;
63
+ /**
64
+ * 定义品牌类型:用于 defineXxx 的返回值,仅对应的 createXxx/构造函数可接受;Tag 区分不同定义(如 "events" | "router")。
65
+ * Define brand type: for defineXxx return value, only the matching createXxx accepts; Tag discriminates (e.g. "events" | "router").
66
+ * @example Defined<{ HOME: "/" }, "router"> 仅能传入 createRouter;Defined<{ FOO: "x" }, "events"> 仅能传入 EventEmitter
67
+ */
68
+ type Defined<T, Tag extends string> = T & {
69
+ readonly __defineBrand?: Tag;
70
+ };
71
+ /**
72
+ * 判断结果为 OK 时的元组形态:[T, true];与 ExistenceResult 的「有值」分支一致。
73
+ * Result is OK: tuple [T, true]; same as the present branch of ExistenceResult.
74
+ * @example isOK<{ id: string }> => [T, true]
75
+ */
76
+ type isOK<T> = [T, true] | [null, false];
77
+ /**
78
+ * 数组或单个元素:T[] | T。用于接口/参数既可传数组也可传单元素时。
79
+ * Array or single element: T[] | T. For APIs that accept either an array or one element.
80
+ * @example ArrayOrSingle<string> => string[] | string
81
+ */
82
+ type ArrayOrSingle<T> = T[] | T;
83
+ export type { Nullable, Maybe, Nilable, Emptyable, Zeroable, Stringable, Objectable, Arrayable, ExistenceResult, ValueOf, Defined, KeyOf, isOK, Array, ArrayOrSingle };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 规范化地址字符串:去除首尾空白并将连续空白合并为单个空格
3
+ * Normalize address string: trim and collapse consecutive spaces to one.
4
+ * @param address - 原始地址字符串
5
+ * @returns 规范化后的地址
6
+ */
7
+ export declare function normalizeAddress(address: string): string;
@@ -0,0 +1,16 @@
1
+ import { ApiErrorBody } from '../../types/api';
2
+ /**
3
+ * 仅当为后端错误(有 response.data)时解析为 ApiErrorBody,否则返回 null
4
+ * Parse to ApiErrorBody only when response.data exists; otherwise null.
5
+ * @param error - 通常为 Axios 错误或 unknown
6
+ * @returns ApiErrorBody 或 null
7
+ */
8
+ export declare function getApiError(error: unknown): ApiErrorBody | null;
9
+ /**
10
+ * UI 展示用错误文案:优先 i18n errors 命名空间(errCode),其次 api.message,最后 fallback
11
+ * Get display message: i18n errors namespace (by errCode) → api.message → fallback.
12
+ * @param error - 通常为 Axios 错误
13
+ * @param fallback - 无法解析时的默认文案
14
+ * @returns 展示用字符串
15
+ */
16
+ export declare function getApiErrorMessage(error: unknown, fallback: string): string;
@@ -0,0 +1,21 @@
1
+ import { Array } from '../../types';
2
+ /**
3
+ * 按 id 将 items 合并进数组:insert 仅插入新 id,upsert 覆盖同 id 并插入新 id;可 prepend 或 append
4
+ * Merge items into array by id: insert = only new ids, upsert = overwrite same id + insert new; place = prepend | append.
5
+ * @param arr - 原数组
6
+ * @param items - 待合并项
7
+ * @param idOf - 取 id 的函数
8
+ * @param place - 新项插入位置
9
+ * @param mode - insert 不覆盖已有 id;upsert 覆盖同 id
10
+ * @returns 合并后的新数组
11
+ */
12
+ export declare function mergeById<T>(arr: Array<T>, items: Array<T>, idOf: (x: T) => string, place: "prepend" | "append", mode: "insert" | "upsert"): Array<T>;
13
+ /**
14
+ * 从数组中移除 id 在集合 ids 中的项,返回新数组
15
+ * Remove elements whose id is in the given set; return new array.
16
+ * @param arr - 原数组
17
+ * @param ids - 要移除的 id 集合
18
+ * @param idOf - 取 id 的函数
19
+ * @returns 若无变化返回原数组,否则返回新数组
20
+ */
21
+ export declare function pruneArray<T>(arr: Array<T>, ids: ReadonlySet<string>, idOf: (x: T) => string): Array<T>;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * 将任意颜色统一为指定透明度的 RGBA(rgb/rgba/hex 均用新 alpha 覆盖)
3
+ * Convert any color to RGBA with given alpha (overwrites existing alpha).
4
+ * @param color - rgb / rgba / hex 字符串
5
+ * @param alpha - 透明度 0–1
6
+ * @returns rgba(r, g, b, alpha) 字符串
7
+ */
8
+ export declare const toRgbaWithAlpha: (color: string, alpha: number) => string;
9
+ /**
10
+ * 将 RGB 颜色转换为 RGBA
11
+ * @param rgb - RGB 颜色字符串,格式: "rgb(r, g, b)"
12
+ * @param alpha - 透明度,范围 0-1
13
+ * @returns RGBA 颜色字符串,格式: "rgba(r, g, b, alpha)"
14
+ *
15
+ * @example
16
+ * rgbToRgba("rgb(250, 30, 22)", 0.3) // "rgba(250, 30, 22, 0.3)"
17
+ */
18
+ export declare const rgbToRgba: (rgb: string, alpha: number) => string;
19
+ /**
20
+ * 将 HEX 颜色转换为 RGBA
21
+ * @param hex - HEX 颜色字符串,格式: "#RRGGBB" 或 "#RGB"
22
+ * @param alpha - 透明度,范围 0-1
23
+ * @returns RGBA 颜色字符串,格式: "rgba(r, g, b, alpha)"
24
+ *
25
+ * @example
26
+ * hexToRGBA("#FA1E16", 0.3) // "rgba(250, 30, 22, 0.3)"
27
+ */
28
+ export declare const hexToRGBA: (hex: string, alpha: number) => string;
29
+ /**
30
+ * 在两色之间按 factor 线性插值(支持 hex / rgb)
31
+ * Linear color interpolation between start and end by factor (0–1); supports hex and rgb.
32
+ * @param start - 起始颜色
33
+ * @param end - 结束颜色
34
+ * @param factor - 插值系数 0–1
35
+ * @returns rgb(r, g, b) 字符串
36
+ */
37
+ export declare const interpolateColor: (start: string, end: string, factor: number) => string;
38
+ /**
39
+ * Pick one color from a string pool; fallback to white.
40
+ */
41
+ export declare const pickColor: (pool: string[]) => string;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 校验邮箱格式是否有效(简单正则:含 @ 与点)
3
+ * Check if email format is valid (simple regex: contains @ and dot).
4
+ * @param email - 待校验的邮箱字符串
5
+ * @returns 是否有效
6
+ */
7
+ export declare const isValidEmail: (email: string) => boolean;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 将任意值转为文本输入框可用的字符串(用于表单回显)
3
+ * Convert any value to a string suitable for text input (e.g. form display).
4
+ * @param value - 任意值
5
+ * @returns 字符串;null/undefined → "";数组 → 逗号拼接;对象 → JSON 字符串
6
+ */
7
+ export declare function toTextInputValue(value: unknown): string;
8
+ /**
9
+ * 将任意值转为数字输入框可用的字符串(用于表单回显)
10
+ * Convert any value to a string suitable for number input (e.g. form display).
11
+ * @param value - 任意值
12
+ * @returns 字符串;null/undefined → "";非有限数字 → "";数组取首项
13
+ */
14
+ export declare function toNumberInputValue(value: unknown): string;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Utils 统一导出 / Utils barrel exports
3
+ * 地址、数组、API 错误、浏览器、颜色、邮箱、表单、图片、对象、电话、轮询、价格、safe、
4
+ * Promise、Result、重试、单例、Suspense、时间、类型工具、类型等
5
+ */
6
+ export * from './address';
7
+ export * from './lstorage';
8
+ export * from './apiError';
9
+ export * from './array';
10
+ export * from './colors';
11
+ export * from './email';
12
+ export * from './form';
13
+ export * from './object';
14
+ export * from './polling';
15
+ export * from './price';
16
+ export * from './promise';
17
+ export * from './result';
18
+ export * from './retry';
19
+ export * from './safe';
20
+ export * from './singleton';
21
+ export * from './suspense';
22
+ export * from './time';
23
+ export * from './random';
24
+ export * from './types';
@@ -0,0 +1,4 @@
1
+ import { Nilable } from '../../types/utils';
2
+ export declare function removeItem(key: string): void;
3
+ export declare function getItem(key: string): Nilable<string>;
4
+ export declare function setItem(key: string, value: string): void;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 从对象中剔除指定键,返回新对象(不修改原对象)
3
+ * Omit specified keys from object and return a new object.
4
+ * @param obj - 源对象
5
+ * @param keys - 要剔除的键(数组或单个键,可再接多个键)
6
+ * @returns 剔除后的新对象
7
+ * @example omit({ a: 1, b: 2, c: 3 }, ['a', 'c']) // { b: 2 }
8
+ * @example omit({ a: 1, b: 2, c: 3 }, 'a', 'b') // { c: 3 }
9
+ */
10
+ export declare function omit<Obj extends object, Key extends keyof Obj>(obj: Obj, keys: Key[] | Key, ...restKeys: Key[]): Omit<Obj, Key>;
@@ -0,0 +1,12 @@
1
+ import { Result } from './result';
2
+ import { WithRetryOptions } from './retry';
3
+ /**
4
+ * 轮询直到 isOK(data) 为 true(内部用 withRetryResult 重试)。
5
+ * Poll until fetcher returns data that satisfies isOK; uses withRetryResult.
6
+ * @param fetcher - 拉取数据的函数。Function that fetches data.
7
+ * @param isOK - 判断数据是否满足条件。Predicate to check if data is OK.
8
+ * @param opts - 重试选项。Retry options.
9
+ * @returns Promise<Result<T>>
10
+ * @example const [job] = await pollUntil(() => getJob(id), (j) => j.status === "done", { retries: 10 });
11
+ */
12
+ export declare function pollUntil<T>(fetcher: () => Promise<T>, isOK: (data: T) => boolean, opts?: WithRetryOptions): Promise<Result<T>>;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * 显示价格 → 数据库价格(分)。用于提交到后端、保存草稿等
3
+ * Display price to database price (cents). For submit/save.
4
+ * @param displayPrice - 展示用价格(元)
5
+ * @returns 数据库存储价格(分)
6
+ */
7
+ export declare function toDatabasePrice(displayPrice: number): number;
8
+ /**
9
+ * 数据库价格(分)→ 显示价格字符串(两位小数)
10
+ * Database price (cents) to display string (2 decimal places).
11
+ * @param databasePrice - 数据库价格(分)
12
+ * @returns 如 "12.34"
13
+ */
14
+ export declare function toDisplayPrice(databasePrice: number): string;
15
+ /**
16
+ * 数据库价格(分)→ 显示价格数字。用于表单、计算等
17
+ * Database price (cents) to display number.
18
+ * @param databasePrice - 数据库价格(分)
19
+ * @returns 数字(元)
20
+ */
21
+ export declare function toDisplayPriceNumber(databasePrice: number): number;
22
+ /**
23
+ * 数字缩写显示(如 1.2k+、3.5M+、1.1B+)
24
+ * Format number to abbreviated string (e.g. 1.2k+, 3.5M+, 1.1B+).
25
+ * @param num - 数字
26
+ * @returns 缩写字符串
27
+ */
28
+ export declare function formatNumberAbbreviated(num: number): string;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * 包装为「仅执行一次」的异步函数(重复调用返回同一 Promise)。
3
+ * Wrap async function so it runs only once; repeated calls return the same promise.
4
+ * @param fn - 要执行的异步函数。Async function to run once.
5
+ * @returns 包装后的函数,多次调用只执行一次。Wrapped function; only first call runs.
6
+ * @example const loadOnce = onceAsync(() => fetch("/api/config")); loadOnce(); loadOnce(); // 只请求一次
7
+ */
8
+ export declare function onceAsync<T, Args extends unknown[]>(fn: (...args: Args) => Promise<T>): (...args: Args) => Promise<T>;
9
+ /**
10
+ * 按 key 仅执行一次的异步函数(同一 key 重复调用返回同一 Promise)。
11
+ * Async function that runs only once per key; same key returns same promise.
12
+ * @param fn - 要执行的异步函数。Async function to run.
13
+ * @param keyExtractor - 从参数中提取 key 的函数。Function to extract key from args.
14
+ * @returns 包装后的函数。Wrapped function.
15
+ * @example const fetchUser = onceAsyncByKey((id: string) => api.getUser(id), (id) => id); fetchUser("1"); fetchUser("1"); // 同 id 只请求一次
16
+ */
17
+ export declare function onceAsyncByKey<T, Args extends unknown[]>(fn: (...args: Args) => Promise<T>, keyExtractor: (...args: Args) => string): (...args: Args) => Promise<T>;