sa2kit 1.6.7 → 1.6.9

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 (139) hide show
  1. package/dist/calendar/index.js +334 -399
  2. package/dist/calendar/index.js.map +1 -1
  3. package/dist/calendar/index.mjs +241 -306
  4. package/dist/calendar/index.mjs.map +1 -1
  5. package/dist/calendar/routes/index.js +21 -21
  6. package/dist/calendar/routes/index.mjs +1 -1
  7. package/dist/calendar/server.js +13 -13
  8. package/dist/calendar/server.mjs +2 -2
  9. package/dist/chunk-4FOBBWXW.mjs +179 -0
  10. package/dist/chunk-4FOBBWXW.mjs.map +1 -0
  11. package/dist/chunk-CDK3DHKM.mjs +634 -0
  12. package/dist/chunk-CDK3DHKM.mjs.map +1 -0
  13. package/dist/chunk-G6WRJ2H2.js +187 -0
  14. package/dist/chunk-G6WRJ2H2.js.map +1 -0
  15. package/dist/{chunk-6WXOA4BE.mjs → chunk-GVVS4IMM.mjs} +2 -2
  16. package/dist/chunk-GVVS4IMM.mjs.map +1 -0
  17. package/dist/chunk-L5PW2YTI.js +647 -0
  18. package/dist/chunk-L5PW2YTI.js.map +1 -0
  19. package/dist/{chunk-AXP7KROR.js → chunk-WC5QFO3T.js} +2 -2
  20. package/dist/chunk-WC5QFO3T.js.map +1 -0
  21. package/dist/index.js +15 -7
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +6 -6
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/mmd/index.js +2 -2
  26. package/dist/mmd/index.mjs +1 -1
  27. package/dist/music/index.js +14 -6
  28. package/dist/music/index.mjs +1 -1
  29. package/package.json +41 -7
  30. package/dist/ConfigService-BxK06xP6.d.mts +0 -262
  31. package/dist/ConfigService-BxK06xP6.d.ts +0 -262
  32. package/dist/UniversalFileService-BuHN-jrR.d.ts +0 -515
  33. package/dist/UniversalFileService-CGGzYeeF.d.mts +0 -515
  34. package/dist/analytics/index.d.mts +0 -1084
  35. package/dist/analytics/index.d.ts +0 -1084
  36. package/dist/analytics/server/index.d.mts +0 -499
  37. package/dist/analytics/server/index.d.ts +0 -499
  38. package/dist/api/index.d.mts +0 -248
  39. package/dist/api/index.d.ts +0 -248
  40. package/dist/audioDetection/index.d.mts +0 -449
  41. package/dist/audioDetection/index.d.ts +0 -449
  42. package/dist/auth/client/index.d.mts +0 -153
  43. package/dist/auth/client/index.d.ts +0 -153
  44. package/dist/auth/components/index.d.mts +0 -227
  45. package/dist/auth/components/index.d.ts +0 -227
  46. package/dist/auth/hooks/index.d.mts +0 -31
  47. package/dist/auth/hooks/index.d.ts +0 -31
  48. package/dist/auth/index.d.mts +0 -40
  49. package/dist/auth/index.d.ts +0 -40
  50. package/dist/auth/middleware/index.d.mts +0 -75
  51. package/dist/auth/middleware/index.d.ts +0 -75
  52. package/dist/auth/routes/index.d.mts +0 -261
  53. package/dist/auth/routes/index.d.ts +0 -261
  54. package/dist/auth/schema/index.d.mts +0 -789
  55. package/dist/auth/schema/index.d.ts +0 -789
  56. package/dist/auth/services/index.d.mts +0 -48
  57. package/dist/auth/services/index.d.ts +0 -48
  58. package/dist/calendar/index.d.mts +0 -1197
  59. package/dist/calendar/index.d.ts +0 -1197
  60. package/dist/calendar/routes/index.d.mts +0 -118
  61. package/dist/calendar/routes/index.d.ts +0 -118
  62. package/dist/calendar/server.d.mts +0 -1184
  63. package/dist/calendar/server.d.ts +0 -1184
  64. package/dist/chunk-6WXOA4BE.mjs.map +0 -1
  65. package/dist/chunk-AXP7KROR.js.map +0 -1
  66. package/dist/chunk-GAC4J5GX.js +0 -228
  67. package/dist/chunk-GAC4J5GX.js.map +0 -1
  68. package/dist/chunk-IEA55H3G.js +0 -106
  69. package/dist/chunk-IEA55H3G.js.map +0 -1
  70. package/dist/chunk-R2F4BXUU.mjs +0 -100
  71. package/dist/chunk-R2F4BXUU.mjs.map +0 -1
  72. package/dist/chunk-T6TE7GTY.mjs +0 -218
  73. package/dist/chunk-T6TE7GTY.mjs.map +0 -1
  74. package/dist/config/index.d.mts +0 -64
  75. package/dist/config/index.d.ts +0 -64
  76. package/dist/config/server/index.d.mts +0 -1533
  77. package/dist/config/server/index.d.ts +0 -1533
  78. package/dist/drizzle-auth-service-Bxlovhv8.d.ts +0 -145
  79. package/dist/drizzle-auth-service-DZY2F1sv.d.mts +0 -145
  80. package/dist/drizzle-schema-BNhqj2AZ.d.mts +0 -1114
  81. package/dist/drizzle-schema-BNhqj2AZ.d.ts +0 -1114
  82. package/dist/enums-Dume-V5Y.d.mts +0 -16
  83. package/dist/enums-Dume-V5Y.d.ts +0 -16
  84. package/dist/i18n/index.d.mts +0 -417
  85. package/dist/i18n/index.d.ts +0 -417
  86. package/dist/imageCrop/index.d.mts +0 -165
  87. package/dist/imageCrop/index.d.ts +0 -165
  88. package/dist/index-DSel44Ke.d.mts +0 -93
  89. package/dist/index-DSel44Ke.d.ts +0 -93
  90. package/dist/index.d.mts +0 -671
  91. package/dist/index.d.ts +0 -671
  92. package/dist/logger/index.d.mts +0 -125
  93. package/dist/logger/index.d.ts +0 -125
  94. package/dist/mmd/admin/index.d.mts +0 -487
  95. package/dist/mmd/admin/index.d.ts +0 -487
  96. package/dist/mmd/index.d.mts +0 -599
  97. package/dist/mmd/index.d.ts +0 -599
  98. package/dist/mmd/server/index.d.mts +0 -138
  99. package/dist/mmd/server/index.d.ts +0 -138
  100. package/dist/music/index.d.mts +0 -79
  101. package/dist/music/index.d.ts +0 -79
  102. package/dist/music/server/index.d.mts +0 -1
  103. package/dist/music/server/index.d.ts +0 -1
  104. package/dist/request/index.d.mts +0 -51
  105. package/dist/request/index.d.ts +0 -51
  106. package/dist/storage/index.d.mts +0 -75
  107. package/dist/storage/index.d.ts +0 -75
  108. package/dist/testYourself/admin/index.d.mts +0 -58
  109. package/dist/testYourself/admin/index.d.ts +0 -58
  110. package/dist/testYourself/index.d.mts +0 -53
  111. package/dist/testYourself/index.d.ts +0 -53
  112. package/dist/testYourself/server/index.d.mts +0 -1029
  113. package/dist/testYourself/server/index.d.ts +0 -1029
  114. package/dist/types-B60F7EZZ.d.mts +0 -248
  115. package/dist/types-B60F7EZZ.d.ts +0 -248
  116. package/dist/types-BINlP9MK.d.mts +0 -286
  117. package/dist/types-BINlP9MK.d.ts +0 -286
  118. package/dist/types-BaZccpvk.d.mts +0 -48
  119. package/dist/types-BaZccpvk.d.ts +0 -48
  120. package/dist/types-CK4We_aI.d.mts +0 -270
  121. package/dist/types-CK4We_aI.d.ts +0 -270
  122. package/dist/types-CbTsi9CZ.d.mts +0 -31
  123. package/dist/types-CbTsi9CZ.d.ts +0 -31
  124. package/dist/types-CroexXnI.d.ts +0 -99
  125. package/dist/types-DmsXCWvm.d.mts +0 -99
  126. package/dist/types-Dt0oqeFM.d.mts +0 -70
  127. package/dist/types-zK6kDzDQ.d.ts +0 -70
  128. package/dist/universalExport/index.d.mts +0 -235
  129. package/dist/universalExport/index.d.ts +0 -235
  130. package/dist/universalExport/server/index.d.mts +0 -1270
  131. package/dist/universalExport/server/index.d.ts +0 -1270
  132. package/dist/universalFile/index.d.mts +0 -480
  133. package/dist/universalFile/index.d.ts +0 -480
  134. package/dist/universalFile/server/index.d.mts +0 -4516
  135. package/dist/universalFile/server/index.d.ts +0 -4516
  136. package/dist/useElectronStorage-Dj0rcorG.d.mts +0 -65
  137. package/dist/useElectronStorage-DwnNfIhl.d.ts +0 -65
  138. package/dist/utils/index.d.mts +0 -192
  139. package/dist/utils/index.d.ts +0 -192
@@ -1,417 +0,0 @@
1
- import React__default from 'react';
2
-
3
- /**
4
- * i18n 类型定义
5
- */
6
- type Locale = 'zh-CN' | 'zh-TW' | 'en-US' | 'ja-JP';
7
- type TranslationKey = string;
8
- type TranslationValue = string | {
9
- [key: string]: TranslationValue;
10
- };
11
- type Translations = {
12
- [key: string]: TranslationValue;
13
- };
14
- type LocaleResources = {
15
- [locale in Locale]?: Translations;
16
- };
17
- interface TranslateOptions {
18
- defaultValue?: string;
19
- count?: number;
20
- context?: Record<string, any>;
21
- }
22
- type InterpolateFunction = (template: string, data: Record<string, any>) => string;
23
- interface I18nConfig {
24
- locale: Locale;
25
- fallbackLocale?: Locale;
26
- resources: LocaleResources;
27
- interpolate?: InterpolateFunction;
28
- }
29
- interface I18nInstance {
30
- locale: Locale;
31
- t: (key: string, options?: TranslateOptions) => string;
32
- setLocale: (locale: Locale) => void;
33
- addResources: (locale: Locale, resources: Translations) => void;
34
- getLocale: () => Locale;
35
- }
36
- interface I18nAdapter {
37
- getSystemLocale: () => Locale;
38
- saveLocale: (locale: Locale) => Promise<void>;
39
- loadLocale: () => Promise<Locale | null>;
40
- }
41
-
42
- /**
43
- * 轻量级 i18n 核心实现
44
- * 支持:翻译、插值、复数、嵌套键、类型安全
45
- */
46
-
47
- /**
48
- * 创建 i18n 实例
49
- */
50
- declare function createI18n(config: I18nConfig): I18nInstance;
51
- /**
52
- * 初始化全局 i18n
53
- */
54
- declare function initI18n(config: I18nConfig): I18nInstance;
55
- /**
56
- * 获取全局 i18n 实例
57
- */
58
- declare function getI18n(): I18nInstance;
59
- /**
60
- * 快捷翻译函数
61
- */
62
- declare function t(key: string, options?: TranslateOptions): string;
63
-
64
- /**
65
- * React hooks for i18n
66
- */
67
-
68
- /**
69
- * useTranslation Hook
70
- * React 组件中使用翻译
71
- * 支持 SSR 环境,在 i18n 未初始化时安全降级
72
- */
73
- declare function useTranslation(): {
74
- t: (key: string, options?: TranslateOptions) => string;
75
- locale: Locale;
76
- setLocale: (newLocale: Locale) => void;
77
- };
78
- /**
79
- * useLocale Hook
80
- * 只获取和设置语言,不包含翻译函数
81
- */
82
- declare function useLocale(): {
83
- locale: Locale;
84
- setLocale: (newLocale: Locale) => void;
85
- };
86
-
87
- /**
88
- * 简体中文翻译
89
- */
90
- declare const _default$1: {
91
- readonly app: {
92
- readonly name: "LyricNote";
93
- readonly fullName: "LyricNote - 歌词笔记";
94
- readonly icon: "🎵";
95
- readonly description: "一个强大的歌词和笔记管理应用";
96
- readonly author: "LyricNote Team";
97
- readonly copyright: `\u00A9 ${number} LyricNote`;
98
- readonly version: "1.0.0";
99
- };
100
- readonly titles: {
101
- readonly main: "🎵 LyricNote";
102
- readonly admin: "LyricNote 管理后台";
103
- readonly withVersion: "LyricNote v1.0.0";
104
- readonly welcome: "欢迎使用 LyricNote";
105
- readonly about: "关于 LyricNote";
106
- };
107
- readonly common: {
108
- readonly hello: "你好";
109
- readonly welcome: "欢迎";
110
- readonly confirm: "确认";
111
- readonly cancel: "取消";
112
- readonly save: "保存";
113
- readonly delete: "删除";
114
- readonly edit: "编辑";
115
- readonly back: "返回";
116
- readonly next: "下一步";
117
- readonly submit: "提交";
118
- readonly finish: "完成";
119
- readonly loading: "加载中...";
120
- readonly success: "操作成功";
121
- readonly error: "操作失败";
122
- readonly retry: "重试";
123
- readonly empty: "暂无数据";
124
- };
125
- readonly nav: {
126
- readonly home: "首页";
127
- readonly lyrics: "歌词";
128
- readonly create: "创作";
129
- readonly collection: "收藏";
130
- readonly profile: "我的";
131
- readonly settings: "设置";
132
- readonly history: "历史";
133
- readonly logout: "退出登录";
134
- };
135
- readonly user: {
136
- readonly login: "登录";
137
- readonly register: "注册";
138
- readonly username: "用户名";
139
- readonly password: "密码";
140
- readonly email: "邮箱";
141
- readonly phone: "手机号";
142
- readonly nickname: "昵称";
143
- };
144
- readonly pages: {
145
- readonly home: {
146
- readonly title: "首页";
147
- readonly description: "一个强大的歌词和笔记管理应用";
148
- };
149
- readonly profile: {
150
- readonly title: "个人中心";
151
- readonly description: "管理您的个人信息和偏好设置";
152
- };
153
- readonly admin: {
154
- readonly title: "LyricNote 管理后台";
155
- readonly description: "系统管理和数据统计";
156
- };
157
- readonly login: {
158
- readonly title: "登录";
159
- readonly description: "登录到 LyricNote";
160
- };
161
- };
162
- readonly validation: {
163
- readonly required: "{{field}}不能为空";
164
- readonly invalid_email: "邮箱格式不正确";
165
- readonly password_too_short: "密码至少需要{{count}}个字符";
166
- readonly password_weak: "密码强度不够";
167
- readonly passwords_not_match: "两次密码不一致";
168
- };
169
- readonly status: {
170
- readonly loading: "加载中...";
171
- readonly success: "操作成功";
172
- readonly error: "操作失败";
173
- readonly empty: "暂无数据";
174
- readonly network_error: "网络错误,请稍后重试";
175
- };
176
- readonly errors: {
177
- readonly network: "网络错误,请稍后重试";
178
- readonly server: "服务器错误";
179
- readonly unauthorized: "未授权,请先登录";
180
- readonly not_found: "未找到相关内容";
181
- readonly unknown: "未知错误";
182
- };
183
- readonly success: {
184
- readonly saved: "保存成功";
185
- readonly deleted: "删除成功";
186
- readonly updated: "更新成功";
187
- readonly created: "创建成功";
188
- };
189
- readonly language: {
190
- readonly label: "语言";
191
- readonly zh_cn: "简体中文";
192
- readonly zh_tw: "繁體中文";
193
- readonly en_us: "English";
194
- readonly ja_jp: "日本語";
195
- };
196
- };
197
-
198
- /**
199
- * English translations
200
- */
201
- declare const _default: {
202
- readonly app: {
203
- readonly name: "LyricNote";
204
- readonly fullName: "LyricNote - Lyrics & Notes";
205
- readonly icon: "🎵";
206
- readonly description: "A powerful lyrics and notes management app";
207
- readonly author: "LyricNote Team";
208
- readonly copyright: `\u00A9 ${number} LyricNote`;
209
- readonly version: "1.0.0";
210
- };
211
- readonly titles: {
212
- readonly main: "🎵 LyricNote";
213
- readonly admin: "LyricNote Admin";
214
- readonly withVersion: "LyricNote v1.0.0";
215
- readonly welcome: "Welcome to LyricNote";
216
- readonly about: "About LyricNote";
217
- };
218
- readonly common: {
219
- readonly hello: "Hello";
220
- readonly welcome: "Welcome";
221
- readonly confirm: "Confirm";
222
- readonly cancel: "Cancel";
223
- readonly save: "Save";
224
- readonly delete: "Delete";
225
- readonly edit: "Edit";
226
- readonly back: "Back";
227
- readonly next: "Next";
228
- readonly submit: "Submit";
229
- readonly finish: "Finish";
230
- readonly loading: "Loading...";
231
- readonly success: "Success";
232
- readonly error: "Error";
233
- readonly retry: "Retry";
234
- readonly empty: "No data";
235
- };
236
- readonly nav: {
237
- readonly home: "Home";
238
- readonly lyrics: "Lyrics";
239
- readonly create: "Create";
240
- readonly collection: "Collection";
241
- readonly profile: "Profile";
242
- readonly settings: "Settings";
243
- readonly history: "History";
244
- readonly logout: "Logout";
245
- };
246
- readonly user: {
247
- readonly login: "Login";
248
- readonly register: "Register";
249
- readonly username: "Username";
250
- readonly password: "Password";
251
- readonly email: "Email";
252
- readonly phone: "Phone";
253
- readonly nickname: "Nickname";
254
- };
255
- readonly pages: {
256
- readonly home: {
257
- readonly title: "Home";
258
- readonly description: "A powerful lyrics and notes management app";
259
- };
260
- readonly profile: {
261
- readonly title: "Profile";
262
- readonly description: "Manage your personal information and preferences";
263
- };
264
- readonly admin: {
265
- readonly title: "LyricNote Admin";
266
- readonly description: "System management and data statistics";
267
- };
268
- readonly login: {
269
- readonly title: "Login";
270
- readonly description: "Login to LyricNote";
271
- };
272
- };
273
- readonly validation: {
274
- readonly required: "{{field}} is required";
275
- readonly invalid_email: "Invalid email format";
276
- readonly password_too_short: "Password must be at least {{count}} characters";
277
- readonly password_weak: "Password is too weak";
278
- readonly passwords_not_match: "Passwords do not match";
279
- };
280
- readonly status: {
281
- readonly loading: "Loading...";
282
- readonly success: "Success";
283
- readonly error: "Error";
284
- readonly empty: "No data";
285
- readonly network_error: "Network error, please try again later";
286
- };
287
- readonly errors: {
288
- readonly network: "Network error, please try again later";
289
- readonly server: "Server error";
290
- readonly unauthorized: "Unauthorized, please login first";
291
- readonly not_found: "Not found";
292
- readonly unknown: "Unknown error";
293
- };
294
- readonly success: {
295
- readonly saved: "Saved successfully";
296
- readonly deleted: "Deleted successfully";
297
- readonly updated: "Updated successfully";
298
- readonly created: "Created successfully";
299
- };
300
- readonly language: {
301
- readonly label: "Language";
302
- readonly zh_cn: "简体中文";
303
- readonly zh_tw: "繁體中文";
304
- readonly en_us: "English";
305
- readonly ja_jp: "日本語";
306
- };
307
- };
308
-
309
- /**
310
- * Web 平台适配器
311
- * 用于浏览器环境的语言检测和存储
312
- */
313
-
314
- /**
315
- * Web 平台适配器
316
- * 使用 localStorage 存储语言偏好
317
- */
318
- declare class WebI18nAdapter implements I18nAdapter {
319
- private storageKey;
320
- getSystemLocale(): Locale;
321
- saveLocale(locale: Locale): Promise<void>;
322
- loadLocale(): Promise<Locale | null>;
323
- private normalizeLocale;
324
- }
325
-
326
- /**
327
- * React Native 平台适配器
328
- * 用于 React Native 应用的语言检测和存储
329
- */
330
-
331
- /**
332
- * React Native 平台适配器
333
- * 使用 AsyncStorage 存储语言偏好
334
- *
335
- * 注意:需要安装 @react-native-async-storage/async-storage
336
- */
337
- declare class ReactNativeI18nAdapter implements I18nAdapter {
338
- private storageKey;
339
- getSystemLocale(): Locale;
340
- saveLocale(locale: Locale): Promise<void>;
341
- loadLocale(): Promise<Locale | null>;
342
- private normalizeLocale;
343
- }
344
-
345
- /**
346
- * Taro (小程序) 平台适配器
347
- * 用于微信小程序、支付宝小程序等通过 Taro 开发的应用
348
- */
349
-
350
- /**
351
- * Taro (小程序) 平台适配器
352
- * 使用 Taro.storage API 存储语言偏好
353
- *
354
- * 注意:需要安装 @tarojs/taro
355
- */
356
- declare class TaroI18nAdapter implements I18nAdapter {
357
- private storageKey;
358
- getSystemLocale(): Locale;
359
- saveLocale(locale: Locale): Promise<void>;
360
- loadLocale(): Promise<Locale | null>;
361
- private normalizeLocale;
362
- }
363
-
364
- /**
365
- * Electron 平台适配器
366
- * 用于 Electron 桌面应用的语言检测和存储
367
- */
368
-
369
- /**
370
- * Electron 平台适配器
371
- * 使用 localStorage 存储语言偏好
372
- *
373
- * 注意:Electron 渲染进程支持 Web API
374
- */
375
- declare class ElectronI18nAdapter implements I18nAdapter {
376
- private storageKey;
377
- getSystemLocale(): Locale;
378
- saveLocale(locale: Locale): Promise<void>;
379
- loadLocale(): Promise<Locale | null>;
380
- private normalizeLocale;
381
- }
382
-
383
- /**
384
- * 语言切换组件
385
- * 支持多种样式:按钮组、下拉菜单、图标按钮
386
- * 使用 Tailwind CSS 样式,支持暗色模式
387
- */
388
-
389
- interface LanguageSwitcherProps {
390
- variant?: 'buttons' | 'dropdown' | 'icon';
391
- className?: string;
392
- onLanguageChange?: (locale: Locale) => void;
393
- }
394
- interface LanguageOption {
395
- locale: Locale;
396
- label: string;
397
- flag: string;
398
- }
399
- /**
400
- * 按钮组语言切换器
401
- */
402
- declare function LanguageSwitcherButtons({ className, onLanguageChange, }: LanguageSwitcherProps): React__default.JSX.Element;
403
- /**
404
- * 下拉菜单语言切换器
405
- */
406
- declare function LanguageSwitcherDropdown({ className, onLanguageChange, }: LanguageSwitcherProps): React__default.JSX.Element;
407
- /**
408
- * 图标按钮语言切换器(带下拉菜单)
409
- */
410
- declare function LanguageSwitcherIcon({ className, onLanguageChange }: LanguageSwitcherProps): React__default.JSX.Element;
411
- /**
412
- * 语言切换器主组件
413
- * 根据 variant 自动选择样式
414
- */
415
- declare function LanguageSwitcher({ variant, className, onLanguageChange, }: LanguageSwitcherProps): React__default.JSX.Element;
416
-
417
- export { ElectronI18nAdapter, type I18nAdapter, type I18nConfig, type I18nInstance, type LanguageOption, LanguageSwitcher, LanguageSwitcherButtons, LanguageSwitcherDropdown, LanguageSwitcherIcon, type LanguageSwitcherProps, type Locale, type LocaleResources, ReactNativeI18nAdapter, TaroI18nAdapter, type TranslateOptions, type TranslationKey, type TranslationValue, type Translations, WebI18nAdapter, createI18n, _default as enUS, getI18n, initI18n, t, useLocale, useTranslation, _default$1 as zhCN };
@@ -1,165 +0,0 @@
1
- import React__default from 'react';
2
-
3
- /**
4
- * 图片裁剪相关类型定义
5
- */
6
- interface GridConfig {
7
- rows: number;
8
- columns: number;
9
- cellWidth: number;
10
- cellHeight: number;
11
- }
12
- interface GridCell {
13
- id: string;
14
- row: number;
15
- column: number;
16
- x: number;
17
- y: number;
18
- offsetX: number;
19
- offsetY: number;
20
- width: number;
21
- height: number;
22
- selected: boolean;
23
- }
24
- interface CropResult {
25
- blob: Blob;
26
- dataUrl: string;
27
- index: number;
28
- row: number;
29
- column: number;
30
- cell: GridCell;
31
- filename?: string;
32
- }
33
- interface ImageInfo {
34
- width: number;
35
- height: number;
36
- naturalWidth: number;
37
- naturalHeight: number;
38
- image?: HTMLImageElement;
39
- file?: File;
40
- }
41
- interface CropOptions {
42
- quality?: number;
43
- format?: 'image/png' | 'image/jpeg' | 'image/webp';
44
- filenamePrefix?: string;
45
- }
46
- interface ExportOptions extends CropOptions {
47
- filename?: string;
48
- zipFilename?: string;
49
- cropOptions?: CropOptions;
50
- }
51
- interface ImageGridCropperConfig {
52
- defaultRows?: number;
53
- defaultColumns?: number;
54
- defaultCellWidth?: number;
55
- defaultCellHeight?: number;
56
- minRows?: number;
57
- maxRows?: number;
58
- minColumns?: number;
59
- maxColumns?: number;
60
- maxCellSize?: number;
61
- minCellSize?: number;
62
- }
63
-
64
- /**
65
- * 图片网格裁剪器主组件
66
- * Image Grid Cropper Main Component
67
- */
68
-
69
- interface ImageGridCropperProps {
70
- /** 初始配置 */
71
- config?: ImageGridCropperConfig;
72
- /** 导出成功回调 */
73
- onExportSuccess?: (results: CropResult[]) => void;
74
- /** 导出失败回调 */
75
- onExportError?: (error: string) => void;
76
- /** 自定义样式类名 */
77
- className?: string;
78
- }
79
- declare const ImageGridCropper: React__default.FC<ImageGridCropperProps>;
80
-
81
- /**
82
- * 网格控制组件
83
- * Grid Controls Component
84
- */
85
-
86
- interface GridControlsProps {
87
- /** 网格配置 */
88
- config: GridConfig;
89
- /** 配置变更回调 */
90
- onChange: (config: GridConfig) => void;
91
- /** 是否禁用 */
92
- disabled?: boolean;
93
- /** 最大行列数 */
94
- maxRows?: number;
95
- maxColumns?: number;
96
- /** 最大最小单元格尺寸 */
97
- maxCellSize?: number;
98
- minCellSize?: number;
99
- /** 是否显示重置按钮 */
100
- showReset?: boolean;
101
- /** 重置回调 */
102
- onReset?: () => void;
103
- }
104
- declare const GridControls: React__default.FC<GridControlsProps>;
105
-
106
- /**
107
- * 图片裁剪工具函数
108
- * Image Cropping Utilities
109
- */
110
-
111
- /**
112
- * 从文件加载图片
113
- */
114
- declare function loadImageFromFile(file: File): Promise<ImageInfo>;
115
- /**
116
- * 裁剪单个网格单元格
117
- */
118
- declare function cropGridCell(imageInfo: ImageInfo, cell: GridCell, cellWidth: number, cellHeight: number, options?: CropOptions): Promise<CropResult>;
119
- /**
120
- * 批量裁剪多个网格单元格
121
- */
122
- declare function cropMultipleCells(imageInfo: ImageInfo, cells: GridCell[], cellWidth: number, cellHeight: number, options?: CropOptions, onProgress?: (current: number, total: number) => void): Promise<CropResult[]>;
123
- /**
124
- * 生成网格单元格预览
125
- */
126
- declare function generateCellPreview(imageInfo: ImageInfo, cell: GridCell, cellWidth: number, cellHeight: number, previewSize?: number): Promise<string>;
127
- /**
128
- * 验证裁剪区域是否在图片范围内
129
- */
130
- declare function validateCropArea(imageWidth: number, imageHeight: number, offsetX: number, offsetY: number, cropWidth: number, cropHeight: number): boolean;
131
- /**
132
- * 自动调整偏移量以保持在图片范围内
133
- */
134
- declare function constrainOffset(imageWidth: number, imageHeight: number, offsetX: number, offsetY: number, cropWidth: number, cropHeight: number): {
135
- offsetX: number;
136
- offsetY: number;
137
- };
138
-
139
- /**
140
- * 下载工具函数
141
- * Download Utilities
142
- */
143
-
144
- /**
145
- * 创建ZIP压缩包并下载
146
- */
147
- declare function downloadAsZip(results: CropResult[], zipFilename?: string): Promise<void>;
148
- /**
149
- * 下载单个Blob文件
150
- */
151
- declare function downloadBlob(blob: Blob, filename: string): void;
152
- /**
153
- * 批量下载多个文件(不压缩)
154
- */
155
- declare function downloadMultipleFiles(results: CropResult[], delay?: number): Promise<void>;
156
- /**
157
- * 计算压缩包大小
158
- */
159
- declare function calculateTotalSize(results: CropResult[]): number;
160
- /**
161
- * 格式化文件大小
162
- */
163
- declare function formatFileSize(bytes: number): string;
164
-
165
- export { type CropOptions, type CropResult, type ExportOptions, type GridCell, type GridConfig, GridControls, type GridControlsProps, ImageGridCropper, type ImageGridCropperConfig, type ImageGridCropperProps, type ImageInfo, calculateTotalSize, constrainOffset, cropGridCell, cropMultipleCells, downloadAsZip, downloadBlob, downloadMultipleFiles, formatFileSize, generateCellPreview, loadImageFromFile, validateCropArea };