appshot-cli 0.4.0 → 0.6.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 (87) hide show
  1. package/README.md +159 -17
  2. package/dist/cli.js +36 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/build.d.ts.map +1 -1
  5. package/dist/commands/build.js +144 -61
  6. package/dist/commands/build.js.map +1 -1
  7. package/dist/commands/caption.d.ts.map +1 -1
  8. package/dist/commands/caption.js +28 -1
  9. package/dist/commands/caption.js.map +1 -1
  10. package/dist/commands/doctor.d.ts +3 -0
  11. package/dist/commands/doctor.d.ts.map +1 -0
  12. package/dist/commands/doctor.js +67 -0
  13. package/dist/commands/doctor.js.map +1 -0
  14. package/dist/commands/fonts.d.ts.map +1 -1
  15. package/dist/commands/fonts.js +89 -6
  16. package/dist/commands/fonts.js.map +1 -1
  17. package/dist/commands/gradients.d.ts.map +1 -1
  18. package/dist/commands/gradients.js +42 -2
  19. package/dist/commands/gradients.js.map +1 -1
  20. package/dist/commands/init.d.ts.map +1 -1
  21. package/dist/commands/init.js +20 -1
  22. package/dist/commands/init.js.map +1 -1
  23. package/dist/commands/localize.d.ts.map +1 -1
  24. package/dist/commands/localize.js +33 -1
  25. package/dist/commands/localize.js.map +1 -1
  26. package/dist/commands/specs.d.ts.map +1 -1
  27. package/dist/commands/specs.js +61 -46
  28. package/dist/commands/specs.js.map +1 -1
  29. package/dist/commands/style.d.ts.map +1 -1
  30. package/dist/commands/style.js +35 -2
  31. package/dist/commands/style.js.map +1 -1
  32. package/dist/core/app-store-specs.d.ts +2 -0
  33. package/dist/core/app-store-specs.d.ts.map +1 -1
  34. package/dist/core/app-store-specs.js +2 -0
  35. package/dist/core/app-store-specs.js.map +1 -1
  36. package/dist/core/compose.d.ts +6 -0
  37. package/dist/core/compose.d.ts.map +1 -1
  38. package/dist/core/compose.js +104 -4
  39. package/dist/core/compose.js.map +1 -1
  40. package/dist/core/devices.d.ts +1 -1
  41. package/dist/core/devices.d.ts.map +1 -1
  42. package/dist/core/devices.js +5 -1
  43. package/dist/core/devices.js.map +1 -1
  44. package/dist/services/doctor.d.ts +35 -0
  45. package/dist/services/doctor.d.ts.map +1 -0
  46. package/dist/services/doctor.js +439 -0
  47. package/dist/services/doctor.js.map +1 -0
  48. package/dist/services/fonts.d.ts +37 -2
  49. package/dist/services/fonts.d.ts.map +1 -1
  50. package/dist/services/fonts.js +223 -0
  51. package/dist/services/fonts.js.map +1 -1
  52. package/dist/types/exec.d.ts +5 -0
  53. package/dist/types/exec.d.ts.map +1 -0
  54. package/dist/types/exec.js +2 -0
  55. package/dist/types/exec.js.map +1 -0
  56. package/dist/types.d.ts +1 -0
  57. package/dist/types.d.ts.map +1 -1
  58. package/fonts/DMSans/DMSans-LICENSE.txt +93 -0
  59. package/fonts/DMSans/DMSans-Regular.ttf +0 -0
  60. package/fonts/Inter/InterVariable-Italic.ttf +0 -0
  61. package/fonts/Inter/InterVariable.ttf +0 -0
  62. package/fonts/Inter/LICENSE.txt +92 -0
  63. package/fonts/Lato/Lato-Bold.ttf +0 -0
  64. package/fonts/Lato/Lato-BoldItalic.ttf +0 -0
  65. package/fonts/Lato/Lato-Italic.ttf +0 -0
  66. package/fonts/Lato/Lato-LICENSE.txt +93 -0
  67. package/fonts/Lato/Lato-Regular.ttf +0 -0
  68. package/fonts/Montserrat/Montserrat-Bold.ttf +2070 -0
  69. package/fonts/Montserrat/Montserrat-BoldItalic.ttf +2070 -0
  70. package/fonts/Montserrat/Montserrat-Italic.ttf +2070 -0
  71. package/fonts/Montserrat/Montserrat-LICENSE.txt +93 -0
  72. package/fonts/Montserrat/Montserrat-Regular.ttf +2070 -0
  73. package/fonts/OpenSans/OpenSans-LICENSE.txt +92 -0
  74. package/fonts/OpenSans/OpenSans-Regular.ttf +0 -0
  75. package/fonts/Poppins/Poppins-Bold.ttf +0 -0
  76. package/fonts/Poppins/Poppins-BoldItalic.ttf +0 -0
  77. package/fonts/Poppins/Poppins-Italic.ttf +0 -0
  78. package/fonts/Poppins/Poppins-LICENSE.txt +93 -0
  79. package/fonts/Poppins/Poppins-Regular.ttf +0 -0
  80. package/fonts/Roboto/Roboto-Bold.ttf +2070 -0
  81. package/fonts/Roboto/Roboto-BoldItalic.ttf +2070 -0
  82. package/fonts/Roboto/Roboto-Italic.ttf +2070 -0
  83. package/fonts/Roboto/Roboto-LICENSE.txt +2070 -0
  84. package/fonts/Roboto/Roboto-Regular.ttf +2070 -0
  85. package/fonts/WorkSans/WorkSans-LICENSE.txt +93 -0
  86. package/fonts/WorkSans/WorkSans-Regular.ttf +0 -0
  87. package/package.json +7 -3
@@ -0,0 +1,439 @@
1
+ import { exec } from 'child_process';
2
+ import { promises as fs } from 'fs';
3
+ import path from 'path';
4
+ import { promisify } from 'util';
5
+ import { platform } from 'os';
6
+ import sharp from 'sharp';
7
+ import { FontService } from './fonts.js';
8
+ import { loadConfig } from '../core/files.js';
9
+ import { frameRegistry } from '../core/devices.js';
10
+ const execAsync = promisify(exec);
11
+ export class DoctorService {
12
+ results = [];
13
+ suggestions = [];
14
+ async runAllChecks(categories) {
15
+ this.results = [];
16
+ this.suggestions = [];
17
+ const availableCategories = ['system', 'dependencies', 'fonts', 'filesystem', 'frames'];
18
+ const categoriesToRun = categories?.length
19
+ ? categories.filter(c => availableCategories.includes(c))
20
+ : availableCategories;
21
+ if (categoriesToRun.includes('system')) {
22
+ await this.checkSystemRequirements();
23
+ }
24
+ if (categoriesToRun.includes('dependencies')) {
25
+ await this.checkDependencies();
26
+ }
27
+ if (categoriesToRun.includes('fonts')) {
28
+ await this.checkFontSystem();
29
+ }
30
+ if (categoriesToRun.includes('filesystem')) {
31
+ await this.checkFileSystem();
32
+ }
33
+ if (categoriesToRun.includes('frames')) {
34
+ await this.checkFrameAssets();
35
+ }
36
+ return this.generateReport();
37
+ }
38
+ addResult(result) {
39
+ this.results.push(result);
40
+ if (result.suggestion && result.status !== 'pass') {
41
+ this.suggestions.push(result.suggestion);
42
+ }
43
+ }
44
+ async checkSystemRequirements() {
45
+ // Check Node.js version
46
+ const nodeVersion = process.version;
47
+ const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0]);
48
+ this.addResult({
49
+ name: 'Node.js Version',
50
+ category: 'system',
51
+ status: majorVersion >= 18 ? 'pass' : 'error',
52
+ message: `Node.js ${nodeVersion} (minimum: v18.0.0)`,
53
+ suggestion: majorVersion < 18 ? 'Update Node.js to version 18 or higher' : undefined
54
+ });
55
+ // Check npm availability
56
+ try {
57
+ const { stdout } = await execAsync('npm --version');
58
+ this.addResult({
59
+ name: 'npm',
60
+ category: 'system',
61
+ status: 'pass',
62
+ message: `npm v${stdout.trim()}`
63
+ });
64
+ }
65
+ catch {
66
+ this.addResult({
67
+ name: 'npm',
68
+ category: 'system',
69
+ status: 'warning',
70
+ message: 'npm not found',
71
+ suggestion: 'Install npm or ensure it\'s in your PATH'
72
+ });
73
+ }
74
+ // Platform detection
75
+ const os = platform();
76
+ this.addResult({
77
+ name: 'Platform',
78
+ category: 'system',
79
+ status: 'pass',
80
+ message: `${os} (${this.getPlatformName(os)})`
81
+ });
82
+ }
83
+ async checkDependencies() {
84
+ // Check Sharp installation
85
+ try {
86
+ const sharpVersion = sharp.versions;
87
+ this.addResult({
88
+ name: 'Sharp Module',
89
+ category: 'dependencies',
90
+ status: 'pass',
91
+ message: `Sharp v${sharpVersion.sharp} installed`
92
+ });
93
+ // Check Sharp native bindings
94
+ if (sharpVersion.vips) {
95
+ this.addResult({
96
+ name: 'Sharp Native Bindings',
97
+ category: 'dependencies',
98
+ status: 'pass',
99
+ message: `libvips v${sharpVersion.vips} loaded`
100
+ });
101
+ }
102
+ // Test Sharp functionality
103
+ try {
104
+ await sharp({
105
+ create: {
106
+ width: 100,
107
+ height: 100,
108
+ channels: 4,
109
+ background: { r: 255, g: 0, b: 0, alpha: 1 }
110
+ }
111
+ })
112
+ .png()
113
+ .toBuffer();
114
+ this.addResult({
115
+ name: 'Image Processing',
116
+ category: 'dependencies',
117
+ status: 'pass',
118
+ message: 'Sharp image processing test passed'
119
+ });
120
+ }
121
+ catch (error) {
122
+ this.addResult({
123
+ name: 'Image Processing',
124
+ category: 'dependencies',
125
+ status: 'error',
126
+ message: 'Sharp image processing test failed',
127
+ details: error instanceof Error ? error.message : String(error),
128
+ suggestion: 'Try reinstalling sharp: npm install sharp --force'
129
+ });
130
+ }
131
+ }
132
+ catch (error) {
133
+ this.addResult({
134
+ name: 'Sharp Module',
135
+ category: 'dependencies',
136
+ status: 'error',
137
+ message: 'Sharp not installed or not functional',
138
+ details: error instanceof Error ? error.message : String(error),
139
+ suggestion: 'Install sharp: npm install sharp'
140
+ });
141
+ }
142
+ // Check OpenAI API key
143
+ const hasApiKey = !!process.env.OPENAI_API_KEY;
144
+ this.addResult({
145
+ name: 'OpenAI API Key',
146
+ category: 'dependencies',
147
+ status: hasApiKey ? 'pass' : 'warning',
148
+ message: hasApiKey ? 'OpenAI API key found' : 'OpenAI API key not found (translation features disabled)',
149
+ suggestion: hasApiKey ? undefined : 'Set OPENAI_API_KEY environment variable to enable translation features'
150
+ });
151
+ }
152
+ async checkFontSystem() {
153
+ const fontService = FontService.getInstance();
154
+ const os = platform();
155
+ // Check font detection command availability
156
+ let fontCommandAvailable = false;
157
+ let fontCommand = '';
158
+ if (os === 'darwin') {
159
+ fontCommand = 'system_profiler';
160
+ try {
161
+ await execAsync('which system_profiler');
162
+ fontCommandAvailable = true;
163
+ }
164
+ catch {
165
+ fontCommandAvailable = false;
166
+ }
167
+ }
168
+ else if (os === 'win32') {
169
+ fontCommand = 'PowerShell';
170
+ fontCommandAvailable = true; // PowerShell is always available on Windows
171
+ }
172
+ else {
173
+ fontCommand = 'fc-list';
174
+ try {
175
+ await execAsync('which fc-list');
176
+ fontCommandAvailable = true;
177
+ }
178
+ catch {
179
+ fontCommandAvailable = false;
180
+ }
181
+ }
182
+ this.addResult({
183
+ name: 'Font Detection',
184
+ category: 'fonts',
185
+ status: fontCommandAvailable ? 'pass' : 'warning',
186
+ message: fontCommandAvailable
187
+ ? `Font detection available (${fontCommand})`
188
+ : `Font detection command not found (${fontCommand})`,
189
+ suggestion: !fontCommandAvailable && os === 'linux'
190
+ ? 'Install fontconfig: apt-get install fontconfig or yum install fontconfig'
191
+ : undefined
192
+ });
193
+ // Try to load system fonts
194
+ try {
195
+ const fonts = await fontService.getSystemFonts();
196
+ this.addResult({
197
+ name: 'System Fonts',
198
+ category: 'fonts',
199
+ status: fonts.length > 0 ? 'pass' : 'warning',
200
+ message: fonts.length > 0
201
+ ? `System fonts loaded (${fonts.length} fonts)`
202
+ : 'No system fonts detected',
203
+ suggestion: fonts.length === 0
204
+ ? 'Font detection may not be working properly on your system'
205
+ : undefined
206
+ });
207
+ // Check for common fonts
208
+ const commonFonts = ['Arial', 'Helvetica', 'Times New Roman'];
209
+ for (const fontName of commonFonts) {
210
+ const isInstalled = await fontService.isFontInstalled(fontName);
211
+ if (isInstalled) {
212
+ this.addResult({
213
+ name: `${fontName} Font`,
214
+ category: 'fonts',
215
+ status: 'pass',
216
+ message: `${fontName} font available`
217
+ });
218
+ break; // Just need one common font to pass
219
+ }
220
+ }
221
+ }
222
+ catch (error) {
223
+ this.addResult({
224
+ name: 'System Fonts',
225
+ category: 'fonts',
226
+ status: 'warning',
227
+ message: 'Could not load system fonts',
228
+ details: error instanceof Error ? error.message : String(error)
229
+ });
230
+ }
231
+ }
232
+ async checkFileSystem() {
233
+ // Check write permissions in current directory
234
+ const testFile = path.join(process.cwd(), '.appshot-doctor-test');
235
+ try {
236
+ await fs.writeFile(testFile, 'test', 'utf8');
237
+ await fs.unlink(testFile);
238
+ this.addResult({
239
+ name: 'Current Directory',
240
+ category: 'filesystem',
241
+ status: 'pass',
242
+ message: 'Write permissions in current directory'
243
+ });
244
+ }
245
+ catch (error) {
246
+ this.addResult({
247
+ name: 'Current Directory',
248
+ category: 'filesystem',
249
+ status: 'error',
250
+ message: 'No write permissions in current directory',
251
+ details: error instanceof Error ? error.message : String(error),
252
+ suggestion: 'Check directory permissions'
253
+ });
254
+ }
255
+ // Check write permissions in temp directory
256
+ const tempDir = process.platform === 'win32' ? process.env.TEMP || 'C:\\Temp' : '/tmp';
257
+ const tempFile = path.join(tempDir, '.appshot-doctor-test');
258
+ try {
259
+ await fs.writeFile(tempFile, 'test', 'utf8');
260
+ await fs.unlink(tempFile);
261
+ this.addResult({
262
+ name: 'Temp Directory',
263
+ category: 'filesystem',
264
+ status: 'pass',
265
+ message: 'Write permissions in temp directory'
266
+ });
267
+ }
268
+ catch (error) {
269
+ this.addResult({
270
+ name: 'Temp Directory',
271
+ category: 'filesystem',
272
+ status: 'warning',
273
+ message: 'No write permissions in temp directory',
274
+ details: error instanceof Error ? error.message : String(error)
275
+ });
276
+ }
277
+ // Check .appshot directory
278
+ const appshotDir = path.join(process.cwd(), '.appshot');
279
+ try {
280
+ await fs.stat(appshotDir);
281
+ this.addResult({
282
+ name: '.appshot Directory',
283
+ category: 'filesystem',
284
+ status: 'pass',
285
+ message: '.appshot directory exists'
286
+ });
287
+ // Check configuration file
288
+ try {
289
+ await loadConfig();
290
+ this.addResult({
291
+ name: 'Configuration File',
292
+ category: 'filesystem',
293
+ status: 'pass',
294
+ message: 'Configuration file valid'
295
+ });
296
+ }
297
+ catch {
298
+ this.addResult({
299
+ name: 'Configuration File',
300
+ category: 'filesystem',
301
+ status: 'warning',
302
+ message: 'Configuration file missing or invalid',
303
+ suggestion: 'Run "appshot init" to create configuration'
304
+ });
305
+ }
306
+ }
307
+ catch {
308
+ this.addResult({
309
+ name: '.appshot Directory',
310
+ category: 'filesystem',
311
+ status: 'warning',
312
+ message: '.appshot directory not found',
313
+ suggestion: 'Run "appshot init" to initialize project'
314
+ });
315
+ }
316
+ }
317
+ async checkFrameAssets() {
318
+ const framesDir = path.join(process.cwd(), 'frames');
319
+ try {
320
+ const files = await fs.readdir(framesDir);
321
+ const frameFiles = files.filter(f => f.endsWith('.png'));
322
+ this.addResult({
323
+ name: 'Frames Directory',
324
+ category: 'frames',
325
+ status: 'pass',
326
+ message: `Frames directory found (${frameFiles.length} files)`
327
+ });
328
+ // Check Frames.json
329
+ const framesJsonPath = path.join(framesDir, 'Frames.json');
330
+ try {
331
+ const framesJson = await fs.readFile(framesJsonPath, 'utf8');
332
+ JSON.parse(framesJson);
333
+ this.addResult({
334
+ name: 'Frames.json',
335
+ category: 'frames',
336
+ status: 'pass',
337
+ message: 'Frames.json valid'
338
+ });
339
+ // Count frames by device type
340
+ const deviceCounts = {
341
+ iphone: 0,
342
+ ipad: 0,
343
+ mac: 0,
344
+ watch: 0
345
+ };
346
+ for (const frame of frameRegistry) {
347
+ deviceCounts[frame.deviceType]++;
348
+ }
349
+ for (const [device, count] of Object.entries(deviceCounts)) {
350
+ if (count > 0) {
351
+ this.addResult({
352
+ name: `${device.charAt(0).toUpperCase() + device.slice(1)} Frames`,
353
+ category: 'frames',
354
+ status: 'pass',
355
+ message: `${device === 'mac' ? 'Mac' : device.charAt(0).toUpperCase() + device.slice(1)} frames: ${count}`
356
+ });
357
+ }
358
+ }
359
+ // Check if all frame files referenced in registry exist
360
+ let missingFrames = 0;
361
+ for (const frame of frameRegistry) {
362
+ const framePath = path.join(framesDir, `${frame.originalName || frame.displayName}.png`);
363
+ try {
364
+ await fs.access(framePath);
365
+ }
366
+ catch {
367
+ missingFrames++;
368
+ }
369
+ }
370
+ if (missingFrames === 0) {
371
+ this.addResult({
372
+ name: 'Frame Files',
373
+ category: 'frames',
374
+ status: 'pass',
375
+ message: 'All frame files present'
376
+ });
377
+ }
378
+ else {
379
+ this.addResult({
380
+ name: 'Frame Files',
381
+ category: 'frames',
382
+ status: 'warning',
383
+ message: `${missingFrames} frame files missing`,
384
+ suggestion: 'Some device frames may not be available'
385
+ });
386
+ }
387
+ }
388
+ catch (error) {
389
+ this.addResult({
390
+ name: 'Frames.json',
391
+ category: 'frames',
392
+ status: 'warning',
393
+ message: 'Frames.json missing or invalid',
394
+ details: error instanceof Error ? error.message : String(error)
395
+ });
396
+ }
397
+ }
398
+ catch {
399
+ this.addResult({
400
+ name: 'Frames Directory',
401
+ category: 'frames',
402
+ status: 'warning',
403
+ message: 'Frames directory not found',
404
+ suggestion: 'Device frames may not be available for the build command'
405
+ });
406
+ }
407
+ }
408
+ getPlatformName(os) {
409
+ switch (os) {
410
+ case 'darwin': return 'macOS';
411
+ case 'win32': return 'Windows';
412
+ case 'linux': return 'Linux';
413
+ default: return os;
414
+ }
415
+ }
416
+ generateReport() {
417
+ const categorizedChecks = {};
418
+ for (const result of this.results) {
419
+ if (!categorizedChecks[result.category]) {
420
+ categorizedChecks[result.category] = [];
421
+ }
422
+ categorizedChecks[result.category].push(result);
423
+ }
424
+ const summary = {
425
+ passed: this.results.filter(r => r.status === 'pass').length,
426
+ warnings: this.results.filter(r => r.status === 'warning').length,
427
+ errors: this.results.filter(r => r.status === 'error').length
428
+ };
429
+ return {
430
+ timestamp: new Date().toISOString(),
431
+ version: '0.6.0',
432
+ platform: platform(),
433
+ checks: categorizedChecks,
434
+ summary,
435
+ suggestions: [...new Set(this.suggestions)] // Remove duplicates
436
+ };
437
+ }
438
+ }
439
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/services/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AA0BlC,MAAM,OAAO,aAAa;IAChB,OAAO,GAAkB,EAAE,CAAC;IAC5B,WAAW,GAAa,EAAE,CAAC;IAEnC,KAAK,CAAC,YAAY,CAAC,UAAqB;QACtC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAEtB,MAAM,mBAAmB,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QACxF,MAAM,eAAe,GAAG,UAAU,EAAE,MAAM;YACxC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC,CAAC,mBAAmB,CAAC;QAExB,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACvC,CAAC;QACD,IAAI,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACjC,CAAC;QACD,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChC,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAEO,SAAS,CAAC,MAAmB;QACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAClD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,uBAAuB;QACnC,wBAAwB;QACxB,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;QACpC,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElE,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YAC7C,OAAO,EAAE,WAAW,WAAW,qBAAqB;YACpD,UAAU,EAAE,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,SAAS;SACrF,CAAC,CAAC;QAEH,yBAAyB;QACzB,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;YACpD,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,KAAK;gBACX,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,QAAQ,MAAM,CAAC,IAAI,EAAE,EAAE;aACjC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,KAAK;gBACX,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,eAAe;gBACxB,UAAU,EAAE,0CAA0C;aACvD,CAAC,CAAC;QACL,CAAC;QAED,qBAAqB;QACrB,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG;SAC/C,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,2BAA2B;QAC3B,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,cAAc;gBACxB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,UAAU,YAAY,CAAC,KAAK,YAAY;aAClD,CAAC,CAAC;YAEH,8BAA8B;YAC9B,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,uBAAuB;oBAC7B,QAAQ,EAAE,cAAc;oBACxB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,YAAY,YAAY,CAAC,IAAI,SAAS;iBAChD,CAAC,CAAC;YACL,CAAC;YAED,2BAA2B;YAC3B,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC;oBACV,MAAM,EAAE;wBACN,KAAK,EAAE,GAAG;wBACV,MAAM,EAAE,GAAG;wBACX,QAAQ,EAAE,CAAC;wBACX,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;qBAC7C;iBACF,CAAC;qBACC,GAAG,EAAE;qBACL,QAAQ,EAAE,CAAC;gBAEd,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,cAAc;oBACxB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,oCAAoC;iBAC9C,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,cAAc;oBACxB,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,oCAAoC;oBAC7C,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;oBAC/D,UAAU,EAAE,mDAAmD;iBAChE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,cAAc;gBACxB,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,uCAAuC;gBAChD,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC/D,UAAU,EAAE,kCAAkC;aAC/C,CAAC,CAAC;QACL,CAAC;QAED,uBAAuB;QACvB,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,cAAc;YACxB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YACtC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,0DAA0D;YACxG,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wEAAwE;SAC7G,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;QAEtB,4CAA4C;QAC5C,IAAI,oBAAoB,GAAG,KAAK,CAAC;QACjC,IAAI,WAAW,GAAG,EAAE,CAAC;QAErB,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;YACpB,WAAW,GAAG,iBAAiB,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,uBAAuB,CAAC,CAAC;gBACzC,oBAAoB,GAAG,IAAI,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,oBAAoB,GAAG,KAAK,CAAC;YAC/B,CAAC;QACH,CAAC;aAAM,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;YAC1B,WAAW,GAAG,YAAY,CAAC;YAC3B,oBAAoB,GAAG,IAAI,CAAC,CAAC,4CAA4C;QAC3E,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,SAAS,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;gBACjC,oBAAoB,GAAG,IAAI,CAAC;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,oBAAoB,GAAG,KAAK,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YACjD,OAAO,EAAE,oBAAoB;gBAC3B,CAAC,CAAC,6BAA6B,WAAW,GAAG;gBAC7C,CAAC,CAAC,qCAAqC,WAAW,GAAG;YACvD,UAAU,EAAE,CAAC,oBAAoB,IAAI,EAAE,KAAK,OAAO;gBACjD,CAAC,CAAC,0EAA0E;gBAC5E,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;QAEH,2BAA2B;QAC3B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,CAAC;YACjD,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC7C,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;oBACvB,CAAC,CAAC,wBAAwB,KAAK,CAAC,MAAM,SAAS;oBAC/C,CAAC,CAAC,0BAA0B;gBAC9B,UAAU,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC;oBAC5B,CAAC,CAAC,2DAA2D;oBAC7D,CAAC,CAAC,SAAS;aACd,CAAC,CAAC;YAEH,yBAAyB;YACzB,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;YAC9D,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;gBACnC,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;gBAChE,IAAI,WAAW,EAAE,CAAC;oBAChB,IAAI,CAAC,SAAS,CAAC;wBACb,IAAI,EAAE,GAAG,QAAQ,OAAO;wBACxB,QAAQ,EAAE,OAAO;wBACjB,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE,GAAG,QAAQ,iBAAiB;qBACtC,CAAC,CAAC;oBACH,MAAM,CAAC,oCAAoC;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,6BAA6B;gBACtC,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAChE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,sBAAsB,CAAC,CAAC;QAClE,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,mBAAmB;gBACzB,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,wCAAwC;aAClD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,mBAAmB;gBACzB,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,2CAA2C;gBACpD,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC/D,UAAU,EAAE,6BAA6B;aAC1C,CAAC,CAAC;QACL,CAAC;QAED,4CAA4C;QAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;QACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,gBAAgB;gBACtB,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,qCAAqC;aAC/C,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,gBAAgB;gBACtB,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,wCAAwC;gBACjD,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAChE,CAAC,CAAC;QACL,CAAC;QAED,2BAA2B;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1B,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,oBAAoB;gBAC1B,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,2BAA2B;aACrC,CAAC,CAAC;YAEH,2BAA2B;YAC3B,IAAI,CAAC;gBACH,MAAM,UAAU,EAAE,CAAC;gBACnB,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,oBAAoB;oBAC1B,QAAQ,EAAE,YAAY;oBACtB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,0BAA0B;iBACpC,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,oBAAoB;oBAC1B,QAAQ,EAAE,YAAY;oBACtB,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,uCAAuC;oBAChD,UAAU,EAAE,4CAA4C;iBACzD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,oBAAoB;gBAC1B,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,8BAA8B;gBACvC,UAAU,EAAE,0CAA0C;aACvD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QAErD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAEzD,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,2BAA2B,UAAU,CAAC,MAAM,SAAS;aAC/D,CAAC,CAAC;YAEH,oBAAoB;YACpB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YAC3D,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;gBAC7D,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAEvB,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,aAAa;oBACnB,QAAQ,EAAE,QAAQ;oBAClB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,mBAAmB;iBAC7B,CAAC,CAAC;gBAEH,8BAA8B;gBAC9B,MAAM,YAAY,GAA2B;oBAC3C,MAAM,EAAE,CAAC;oBACT,IAAI,EAAE,CAAC;oBACP,GAAG,EAAE,CAAC;oBACN,KAAK,EAAE,CAAC;iBACT,CAAC;gBAEF,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;oBAClC,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnC,CAAC;gBAED,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC3D,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;wBACd,IAAI,CAAC,SAAS,CAAC;4BACb,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;4BAClE,QAAQ,EAAE,QAAQ;4BAClB,MAAM,EAAE,MAAM;4BACd,OAAO,EAAE,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE;yBAC3G,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,wDAAwD;gBACxD,IAAI,aAAa,GAAG,CAAC,CAAC;gBACtB,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;oBAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,CAAC;oBACzF,IAAI,CAAC;wBACH,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAC7B,CAAC;oBAAC,MAAM,CAAC;wBACP,aAAa,EAAE,CAAC;oBAClB,CAAC;gBACH,CAAC;gBAED,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;oBACxB,IAAI,CAAC,SAAS,CAAC;wBACb,IAAI,EAAE,aAAa;wBACnB,QAAQ,EAAE,QAAQ;wBAClB,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE,yBAAyB;qBACnC,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,SAAS,CAAC;wBACb,IAAI,EAAE,aAAa;wBACnB,QAAQ,EAAE,QAAQ;wBAClB,MAAM,EAAE,SAAS;wBACjB,OAAO,EAAE,GAAG,aAAa,sBAAsB;wBAC/C,UAAU,EAAE,yCAAyC;qBACtD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,CAAC;oBACb,IAAI,EAAE,aAAa;oBACnB,QAAQ,EAAE,QAAQ;oBAClB,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,gCAAgC;oBACzC,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAChE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,4BAA4B;gBACrC,UAAU,EAAE,0DAA0D;aACvE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,EAAU;QAChC,QAAQ,EAAE,EAAE,CAAC;YACb,KAAK,QAAQ,CAAC,CAAC,OAAO,OAAO,CAAC;YAC9B,KAAK,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;YAC/B,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;YAC7B,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,cAAc;QACpB,MAAM,iBAAiB,GAAkC,EAAE,CAAC;QAE5D,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC1C,CAAC;YACD,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;YAC5D,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;YACjE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM;SAC9D,CAAC;QAEF,OAAO;YACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,QAAQ,EAAE;YACpB,MAAM,EAAE,iBAAiB;YACzB,OAAO;YACP,WAAW,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAoB;SACjE,CAAC;IACJ,CAAC;CACF"}
@@ -1,10 +1,19 @@
1
+ export interface FontVariant {
2
+ style: 'normal' | 'italic';
3
+ weight: 'normal' | 'bold' | number;
4
+ path: string;
5
+ }
1
6
  export interface FontInfo {
2
7
  name: string;
3
8
  family?: string;
4
9
  style?: string;
5
- category?: 'system' | 'recommended' | 'web-safe';
10
+ weight?: string | number;
11
+ category?: 'system' | 'recommended' | 'web-safe' | 'embedded';
6
12
  fallback?: string;
7
13
  installed?: boolean;
14
+ embedded?: boolean;
15
+ path?: string;
16
+ variants?: FontVariant[];
8
17
  }
9
18
  export interface FontCategory {
10
19
  name: string;
@@ -13,13 +22,19 @@ export interface FontCategory {
13
22
  export interface FontStatus {
14
23
  name: string;
15
24
  installed: boolean;
16
- category?: 'system' | 'recommended' | 'web-safe';
25
+ embedded?: boolean;
26
+ category?: 'system' | 'recommended' | 'web-safe' | 'embedded';
17
27
  fallback: string;
18
28
  warning?: string;
29
+ path?: string;
30
+ style?: 'normal' | 'italic';
31
+ weight?: 'normal' | 'bold' | number;
32
+ variants?: FontVariant[];
19
33
  }
20
34
  export declare class FontService {
21
35
  private static instance;
22
36
  private systemFontsCache;
37
+ private embeddedFontsCache;
23
38
  static getInstance(): FontService;
24
39
  /**
25
40
  * Get list of system fonts based on platform
@@ -67,5 +82,25 @@ export declare class FontService {
67
82
  * Get a font's fallback chain (synchronous for backward compatibility)
68
83
  */
69
84
  getFontFallback(fontName: string): string;
85
+ /**
86
+ * Get the path to the fonts directory
87
+ */
88
+ private getFontsDirectory;
89
+ /**
90
+ * Get list of embedded fonts bundled with the package
91
+ */
92
+ getEmbeddedFonts(): Promise<FontInfo[]>;
93
+ /**
94
+ * Check if a font is available (either embedded or installed)
95
+ */
96
+ isFontAvailable(fontName: string): Promise<boolean>;
97
+ /**
98
+ * Get detailed status about a font (including embedded status)
99
+ */
100
+ getFontStatusWithEmbedded(fontName: string): Promise<FontStatus>;
101
+ /**
102
+ * Get all available fonts (embedded + system + recommended)
103
+ */
104
+ getAllAvailableFonts(): Promise<FontInfo[]>;
70
105
  }
71
106
  //# sourceMappingURL=fonts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../src/services/fonts.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAc;IACrC,OAAO,CAAC,gBAAgB,CAAyB;WAEnC,WAAW,IAAI,WAAW;IAOxC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA8BzC;;OAEG;YACW,aAAa;IA8B3B;;OAEG;YACW,aAAa;IAwB3B;;OAEG;YACW,eAAe;IAkB7B;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IA8ChD;;OAEG;IACH,uBAAuB,IAAI,QAAQ,EAAE;IAcrC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAsDlD;;;OAGG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKzD;;;OAGG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAyB1D;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAgD1C"}
1
+ {"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../src/services/fonts.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3B,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,CAAC;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,CAAC;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAc;IACrC,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,kBAAkB,CAA2B;WAEvC,WAAW,IAAI,WAAW;IAOxC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAmCzC;;OAEG;YACW,aAAa;IA8B3B;;OAEG;YACW,aAAa;IAwB3B;;OAEG;YACW,eAAe;IAkB7B;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IA8ChD;;OAEG;IACH,uBAAuB,IAAI,QAAQ,EAAE;IAcrC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAsDlD;;;OAGG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKzD;;;OAGG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAyB1D;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAiDzC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAyI7C;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWzD;;OAEG;IACG,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAsBtE;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;CA6ClD"}