opencode-nanobanana 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ralph-events.json +151 -0
- package/.ralph-last-branch +1 -0
- package/.ralph-monitor-state.json +7 -0
- package/.ralph-monitor.pid +1 -0
- package/.ralph-timing.json +26 -0
- package/README.md +708 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/platforms/android.d.ts +94 -0
- package/dist/platforms/android.d.ts.map +1 -0
- package/dist/platforms/android.js +123 -0
- package/dist/platforms/android.js.map +1 -0
- package/dist/platforms/ios.d.ts +51 -0
- package/dist/platforms/ios.d.ts.map +1 -0
- package/dist/platforms/ios.js +149 -0
- package/dist/platforms/ios.js.map +1 -0
- package/dist/platforms/macos.d.ts +33 -0
- package/dist/platforms/macos.d.ts.map +1 -0
- package/dist/platforms/macos.js +50 -0
- package/dist/platforms/macos.js.map +1 -0
- package/dist/platforms/watchos.d.ts +36 -0
- package/dist/platforms/watchos.d.ts.map +1 -0
- package/dist/platforms/watchos.js +113 -0
- package/dist/platforms/watchos.js.map +1 -0
- package/dist/platforms/web.d.ts +64 -0
- package/dist/platforms/web.d.ts.map +1 -0
- package/dist/platforms/web.js +96 -0
- package/dist/platforms/web.js.map +1 -0
- package/dist/providers/gemini.d.ts +41 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +177 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/tools/analyze/compare.d.ts +12 -0
- package/dist/tools/analyze/compare.d.ts.map +1 -0
- package/dist/tools/analyze/compare.js +83 -0
- package/dist/tools/analyze/compare.js.map +1 -0
- package/dist/tools/analyze/mockup.d.ts +12 -0
- package/dist/tools/analyze/mockup.d.ts.map +1 -0
- package/dist/tools/analyze/mockup.js +88 -0
- package/dist/tools/analyze/mockup.js.map +1 -0
- package/dist/tools/analyze/screenshot.d.ts +12 -0
- package/dist/tools/analyze/screenshot.d.ts.map +1 -0
- package/dist/tools/analyze/screenshot.js +61 -0
- package/dist/tools/analyze/screenshot.js.map +1 -0
- package/dist/tools/app-assets/app-icon.d.ts +9 -0
- package/dist/tools/app-assets/app-icon.d.ts.map +1 -0
- package/dist/tools/app-assets/app-icon.js +133 -0
- package/dist/tools/app-assets/app-icon.js.map +1 -0
- package/dist/tools/app-assets/device-mockup.d.ts +9 -0
- package/dist/tools/app-assets/device-mockup.d.ts.map +1 -0
- package/dist/tools/app-assets/device-mockup.js +139 -0
- package/dist/tools/app-assets/device-mockup.js.map +1 -0
- package/dist/tools/app-assets/launch-images.d.ts +3 -0
- package/dist/tools/app-assets/launch-images.d.ts.map +1 -0
- package/dist/tools/app-assets/launch-images.js +171 -0
- package/dist/tools/app-assets/launch-images.js.map +1 -0
- package/dist/tools/app-assets/resize-devices.d.ts +14 -0
- package/dist/tools/app-assets/resize-devices.d.ts.map +1 -0
- package/dist/tools/app-assets/resize-devices.js +296 -0
- package/dist/tools/app-assets/resize-devices.js.map +1 -0
- package/dist/tools/app-assets/screenshots.d.ts +14 -0
- package/dist/tools/app-assets/screenshots.d.ts.map +1 -0
- package/dist/tools/app-assets/screenshots.js +186 -0
- package/dist/tools/app-assets/screenshots.js.map +1 -0
- package/dist/tools/core/edit-image.d.ts +12 -0
- package/dist/tools/core/edit-image.d.ts.map +1 -0
- package/dist/tools/core/edit-image.js +102 -0
- package/dist/tools/core/edit-image.js.map +1 -0
- package/dist/tools/core/generate-image.d.ts +12 -0
- package/dist/tools/core/generate-image.d.ts.map +1 -0
- package/dist/tools/core/generate-image.js +96 -0
- package/dist/tools/core/generate-image.js.map +1 -0
- package/dist/tools/core/restore-image.d.ts +12 -0
- package/dist/tools/core/restore-image.d.ts.map +1 -0
- package/dist/tools/core/restore-image.js +104 -0
- package/dist/tools/core/restore-image.js.map +1 -0
- package/dist/tools/design/mockup-to-code.d.ts +3 -0
- package/dist/tools/design/mockup-to-code.d.ts.map +1 -0
- package/dist/tools/design/mockup-to-code.js +311 -0
- package/dist/tools/design/mockup-to-code.js.map +1 -0
- package/dist/tools/design/sketch-to-code.d.ts +3 -0
- package/dist/tools/design/sketch-to-code.d.ts.map +1 -0
- package/dist/tools/design/sketch-to-code.js +325 -0
- package/dist/tools/design/sketch-to-code.js.map +1 -0
- package/dist/tools/docs/architecture-diagram.d.ts +12 -0
- package/dist/tools/docs/architecture-diagram.d.ts.map +1 -0
- package/dist/tools/docs/architecture-diagram.js +179 -0
- package/dist/tools/docs/architecture-diagram.js.map +1 -0
- package/dist/tools/docs/readme-banner.d.ts +6 -0
- package/dist/tools/docs/readme-banner.d.ts.map +1 -0
- package/dist/tools/docs/readme-banner.js +108 -0
- package/dist/tools/docs/readme-banner.js.map +1 -0
- package/dist/tools/docs/sequence-diagram.d.ts +12 -0
- package/dist/tools/docs/sequence-diagram.d.ts.map +1 -0
- package/dist/tools/docs/sequence-diagram.js +161 -0
- package/dist/tools/docs/sequence-diagram.js.map +1 -0
- package/dist/tools/docs/social-preview.d.ts +11 -0
- package/dist/tools/docs/social-preview.d.ts.map +1 -0
- package/dist/tools/docs/social-preview.js +111 -0
- package/dist/tools/docs/social-preview.js.map +1 -0
- package/dist/tools/video/extend-video.d.ts +14 -0
- package/dist/tools/video/extend-video.d.ts.map +1 -0
- package/dist/tools/video/extend-video.js +39 -0
- package/dist/tools/video/extend-video.js.map +1 -0
- package/dist/tools/video/generate-video.d.ts +14 -0
- package/dist/tools/video/generate-video.d.ts.map +1 -0
- package/dist/tools/video/generate-video.js +39 -0
- package/dist/tools/video/generate-video.js.map +1 -0
- package/dist/tools/video/image-to-video.d.ts +15 -0
- package/dist/tools/video/image-to-video.d.ts.map +1 -0
- package/dist/tools/video/image-to-video.js +42 -0
- package/dist/tools/video/image-to-video.js.map +1 -0
- package/dist/tools/video/storyboard-video.d.ts +91 -0
- package/dist/tools/video/storyboard-video.d.ts.map +1 -0
- package/dist/tools/video/storyboard-video.js +230 -0
- package/dist/tools/video/storyboard-video.js.map +1 -0
- package/dist/utils/ffmpeg.d.ts +30 -0
- package/dist/utils/ffmpeg.d.ts.map +1 -0
- package/dist/utils/ffmpeg.js +205 -0
- package/dist/utils/ffmpeg.js.map +1 -0
- package/dist/utils/file-handler.d.ts +7 -0
- package/dist/utils/file-handler.d.ts.map +1 -0
- package/dist/utils/file-handler.js +10 -0
- package/dist/utils/file-handler.js.map +1 -0
- package/dist/utils/image-processing.d.ts +7 -0
- package/dist/utils/image-processing.d.ts.map +1 -0
- package/dist/utils/image-processing.js +10 -0
- package/dist/utils/image-processing.js.map +1 -0
- package/docs/PLUGIN-VERIFICATION.md +182 -0
- package/logs/notifications.jsonl +46 -0
- package/package.json +61 -0
- package/prd.json +216 -0
- package/progress.txt +145 -0
- package/ralph-report.html +297 -0
- package/src/index.ts +23 -0
- package/src/platforms/android/.gitkeep +0 -0
- package/src/platforms/ios/.gitkeep +0 -0
- package/src/platforms/web/.gitkeep +0 -0
- package/src/providers/.gitkeep +0 -0
- package/src/providers/gemini.ts +288 -0
- package/src/tools/core/.gitkeep +0 -0
- package/src/tools/platform/.gitkeep +0 -0
- package/src/tools/video/extend-video.ts +71 -0
- package/src/tools/video/generate-video.ts +70 -0
- package/src/tools/video/image-to-video.ts +76 -0
- package/src/tools/video/storyboard-video.ts +325 -0
- package/src/utils/.gitkeep +0 -0
- package/src/utils/ffmpeg.ts +266 -0
- package/src/utils/file-handler.ts +10 -0
- package/src/utils/image-processing.ts +10 -0
- package/templates/.gitkeep +0 -0
- package/test-analyze-screenshot.ts +50 -0
- package/test-app-icons.ts +55 -0
- package/test-cat-sunset.ts +30 -0
- package/test-full-plugin.ts +88 -0
- package/test-icon-gen.ts +30 -0
- package/test-output/test-edit.png +0 -0
- package/test-output/test-generate.png +0 -0
- package/test-output/test-video.mp4 +0 -0
- package/test-plugin-load.js +45 -0
- package/test-princess-emma-continue.ts +35 -0
- package/test-princess-emma-full.ts +38 -0
- package/test-princess-emma-short.ts +32 -0
- package/test-princess-emma-with-reference.ts +34 -0
- package/test-princess-emma.ts +38 -0
- package/test-product-ad.ts +66 -0
- package/test-ralph-droid.ts +30 -0
- package/test-social-preview.ts +61 -0
- package/test-veo31-live.ts +187 -0
- package/test-video-gen.ts +40 -0
- package/test-video-veo.ts +73 -0
- package/test-zurich-video.ts +64 -0
- package/tests/.gitkeep +0 -0
- package/tests/providers/gemini.test.ts +388 -0
- package/tests/utils/ffmpeg.test.ts +328 -0
- package/tests/video/storyboard.test.ts +469 -0
- package/tsconfig.json +25 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode Visual Toolkit
|
|
3
|
+
*
|
|
4
|
+
* A comprehensive plugin providing visual capabilities:
|
|
5
|
+
* - Image generation (Nano Banana)
|
|
6
|
+
* - Visual analysis
|
|
7
|
+
* - Design-to-code
|
|
8
|
+
* - App asset pipelines (iOS, Android, macOS, Web)
|
|
9
|
+
*/
|
|
10
|
+
export * from './providers/gemini.js';
|
|
11
|
+
export * from './utils/file-handler.js';
|
|
12
|
+
export * from './utils/image-processing.js';
|
|
13
|
+
export * from './utils/ffmpeg.js';
|
|
14
|
+
export * from './tools/video/generate-video.js';
|
|
15
|
+
export * from './tools/video/image-to-video.js';
|
|
16
|
+
export * from './tools/video/storyboard-video.js';
|
|
17
|
+
export * from './tools/video/extend-video.js';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,cAAc,uBAAuB,CAAC;AAGtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAGlC,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode Visual Toolkit
|
|
3
|
+
*
|
|
4
|
+
* A comprehensive plugin providing visual capabilities:
|
|
5
|
+
* - Image generation (Nano Banana)
|
|
6
|
+
* - Visual analysis
|
|
7
|
+
* - Design-to-code
|
|
8
|
+
* - App asset pipelines (iOS, Android, macOS, Web)
|
|
9
|
+
*/
|
|
10
|
+
// Re-export providers
|
|
11
|
+
export * from './providers/gemini.js';
|
|
12
|
+
// Re-export utilities
|
|
13
|
+
export * from './utils/file-handler.js';
|
|
14
|
+
export * from './utils/image-processing.js';
|
|
15
|
+
export * from './utils/ffmpeg.js';
|
|
16
|
+
// Re-export tools
|
|
17
|
+
export * from './tools/video/generate-video.js';
|
|
18
|
+
export * from './tools/video/image-to-video.js';
|
|
19
|
+
export * from './tools/video/storyboard-video.js';
|
|
20
|
+
export * from './tools/video/extend-video.js';
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sBAAsB;AACtB,cAAc,uBAAuB,CAAC;AAEtC,sBAAsB;AACtB,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAElC,kBAAkB;AAClB,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Android Platform Module
|
|
3
|
+
*
|
|
4
|
+
* Provides Android-specific asset specifications including:
|
|
5
|
+
* - Icon sizes for all density buckets (mdpi through xxxhdpi)
|
|
6
|
+
* - Screenshot sizes for phones and tablets
|
|
7
|
+
* - Adaptive icon XML generation
|
|
8
|
+
* - Density path helpers
|
|
9
|
+
*/
|
|
10
|
+
export interface AndroidDensity {
|
|
11
|
+
name: string;
|
|
12
|
+
scale: number;
|
|
13
|
+
iconSize: number;
|
|
14
|
+
directory: string;
|
|
15
|
+
}
|
|
16
|
+
export interface AndroidIconSize {
|
|
17
|
+
density: string;
|
|
18
|
+
size: number;
|
|
19
|
+
directory: string;
|
|
20
|
+
filename: string;
|
|
21
|
+
}
|
|
22
|
+
export interface AndroidScreenshotSize {
|
|
23
|
+
device: string;
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
description: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Android density buckets with their scale factors
|
|
30
|
+
* Based on Android's density-independent pixel (dp) system
|
|
31
|
+
*/
|
|
32
|
+
export declare const ANDROID_DENSITIES: AndroidDensity[];
|
|
33
|
+
/**
|
|
34
|
+
* Complete Android icon size specifications
|
|
35
|
+
* Covers all density buckets for launcher icons
|
|
36
|
+
*/
|
|
37
|
+
export declare const ANDROID_ICON_SIZES: AndroidIconSize[];
|
|
38
|
+
/**
|
|
39
|
+
* Android screenshot sizes for Google Play Store
|
|
40
|
+
* Based on common device resolutions and aspect ratios
|
|
41
|
+
*/
|
|
42
|
+
export declare const ANDROID_SCREENSHOT_SIZES: AndroidScreenshotSize[];
|
|
43
|
+
/**
|
|
44
|
+
* Generates adaptive icon XML content for Android
|
|
45
|
+
* Adaptive icons consist of foreground and background layers
|
|
46
|
+
*
|
|
47
|
+
* @param foregroundPath - Path to foreground drawable (default: @mipmap/ic_launcher_foreground)
|
|
48
|
+
* @param backgroundPath - Path to background drawable (default: @mipmap/ic_launcher_background)
|
|
49
|
+
* @returns Valid ic_launcher.xml content for res/mipmap-anydpi-v26/
|
|
50
|
+
*/
|
|
51
|
+
export declare function generateAdaptiveIconXml(foregroundPath?: string, backgroundPath?: string): string;
|
|
52
|
+
/**
|
|
53
|
+
* Generates adaptive icon XML with monochrome layer (Android 13+)
|
|
54
|
+
* Includes monochrome layer for themed icons
|
|
55
|
+
*
|
|
56
|
+
* @param foregroundPath - Path to foreground drawable
|
|
57
|
+
* @param backgroundPath - Path to background drawable
|
|
58
|
+
* @param monochromePath - Path to monochrome drawable (default: @mipmap/ic_launcher_foreground)
|
|
59
|
+
* @returns Valid ic_launcher.xml content with monochrome support
|
|
60
|
+
*/
|
|
61
|
+
export declare function generateAdaptiveIconXmlWithMonochrome(foregroundPath?: string, backgroundPath?: string, monochromePath?: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Gets the mipmap directory path for a given density
|
|
64
|
+
*
|
|
65
|
+
* @param density - Density name (e.g., 'mdpi', 'hdpi', 'xhdpi')
|
|
66
|
+
* @returns Directory path in format 'mipmap-{density}'
|
|
67
|
+
*/
|
|
68
|
+
export declare function getDensityPath(density: string): string;
|
|
69
|
+
/**
|
|
70
|
+
* Gets icon size in pixels for a given density
|
|
71
|
+
*
|
|
72
|
+
* @param density - Density name
|
|
73
|
+
* @returns Icon size in pixels, or null if density not found
|
|
74
|
+
*/
|
|
75
|
+
export declare function getIconSizeForDensity(density: string): number | null;
|
|
76
|
+
/**
|
|
77
|
+
* Calculates the pixel size for a given dp value at a specific density
|
|
78
|
+
*
|
|
79
|
+
* @param dp - Value in density-independent pixels
|
|
80
|
+
* @param density - Density name
|
|
81
|
+
* @returns Pixel size, or null if density not found
|
|
82
|
+
*/
|
|
83
|
+
export declare function dpToPixels(dp: number, density: string): number | null;
|
|
84
|
+
/**
|
|
85
|
+
* Android adaptive icon specifications
|
|
86
|
+
* Defines the safe zone and dimensions for foreground/background layers
|
|
87
|
+
*/
|
|
88
|
+
export declare const ADAPTIVE_ICON_SPECS: {
|
|
89
|
+
fullSize: number;
|
|
90
|
+
visibleSize: number;
|
|
91
|
+
safeZone: number;
|
|
92
|
+
maskPadding: number;
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=android.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"android.d.ts","sourceRoot":"","sources":["../../src/platforms/android.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAAc,EAM7C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,eAAe,EAK7C,CAAC;AAEJ;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,qBAAqB,EAkB3D,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,GAAE,MAAyC,EACzD,cAAc,GAAE,MAAyC,GACxD,MAAM,CAMR;AAED;;;;;;;;GAQG;AACH,wBAAgB,qCAAqC,CACnD,cAAc,GAAE,MAAyC,EACzD,cAAc,GAAE,MAAyC,EACzD,cAAc,GAAE,MAAyC,GACxD,MAAM,CAOR;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGrE;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;CAK/B,CAAC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Android Platform Module
|
|
3
|
+
*
|
|
4
|
+
* Provides Android-specific asset specifications including:
|
|
5
|
+
* - Icon sizes for all density buckets (mdpi through xxxhdpi)
|
|
6
|
+
* - Screenshot sizes for phones and tablets
|
|
7
|
+
* - Adaptive icon XML generation
|
|
8
|
+
* - Density path helpers
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Android density buckets with their scale factors
|
|
12
|
+
* Based on Android's density-independent pixel (dp) system
|
|
13
|
+
*/
|
|
14
|
+
export const ANDROID_DENSITIES = [
|
|
15
|
+
{ name: 'mdpi', scale: 1.0, iconSize: 48, directory: 'mipmap-mdpi' },
|
|
16
|
+
{ name: 'hdpi', scale: 1.5, iconSize: 72, directory: 'mipmap-hdpi' },
|
|
17
|
+
{ name: 'xhdpi', scale: 2.0, iconSize: 96, directory: 'mipmap-xhdpi' },
|
|
18
|
+
{ name: 'xxhdpi', scale: 3.0, iconSize: 144, directory: 'mipmap-xxhdpi' },
|
|
19
|
+
{ name: 'xxxhdpi', scale: 4.0, iconSize: 192, directory: 'mipmap-xxxhdpi' },
|
|
20
|
+
];
|
|
21
|
+
/**
|
|
22
|
+
* Complete Android icon size specifications
|
|
23
|
+
* Covers all density buckets for launcher icons
|
|
24
|
+
*/
|
|
25
|
+
export const ANDROID_ICON_SIZES = ANDROID_DENSITIES.map(density => ({
|
|
26
|
+
density: density.name,
|
|
27
|
+
size: density.iconSize,
|
|
28
|
+
directory: density.directory,
|
|
29
|
+
filename: 'ic_launcher.png',
|
|
30
|
+
}));
|
|
31
|
+
/**
|
|
32
|
+
* Android screenshot sizes for Google Play Store
|
|
33
|
+
* Based on common device resolutions and aspect ratios
|
|
34
|
+
*/
|
|
35
|
+
export const ANDROID_SCREENSHOT_SIZES = [
|
|
36
|
+
// Phones - Portrait
|
|
37
|
+
{ device: 'Phone 16:9', width: 1080, height: 1920, description: 'Standard phone portrait' },
|
|
38
|
+
{ device: 'Phone 18:9', width: 1080, height: 2160, description: 'Tall phone portrait' },
|
|
39
|
+
{ device: 'Phone 19:9', width: 1080, height: 2280, description: 'Extra tall phone portrait' },
|
|
40
|
+
{ device: 'Phone 20:9', width: 1080, height: 2400, description: 'Ultra tall phone portrait' },
|
|
41
|
+
// Phones - Landscape
|
|
42
|
+
{ device: 'Phone 16:9 Landscape', width: 1920, height: 1080, description: 'Standard phone landscape' },
|
|
43
|
+
{ device: 'Phone 18:9 Landscape', width: 2160, height: 1080, description: 'Tall phone landscape' },
|
|
44
|
+
// Tablets - Portrait
|
|
45
|
+
{ device: 'Tablet 7"', width: 1200, height: 1920, description: '7-inch tablet portrait' },
|
|
46
|
+
{ device: 'Tablet 10"', width: 1600, height: 2560, description: '10-inch tablet portrait' },
|
|
47
|
+
// Tablets - Landscape
|
|
48
|
+
{ device: 'Tablet 7" Landscape', width: 1920, height: 1200, description: '7-inch tablet landscape' },
|
|
49
|
+
{ device: 'Tablet 10" Landscape', width: 2560, height: 1600, description: '10-inch tablet landscape' },
|
|
50
|
+
];
|
|
51
|
+
/**
|
|
52
|
+
* Generates adaptive icon XML content for Android
|
|
53
|
+
* Adaptive icons consist of foreground and background layers
|
|
54
|
+
*
|
|
55
|
+
* @param foregroundPath - Path to foreground drawable (default: @mipmap/ic_launcher_foreground)
|
|
56
|
+
* @param backgroundPath - Path to background drawable (default: @mipmap/ic_launcher_background)
|
|
57
|
+
* @returns Valid ic_launcher.xml content for res/mipmap-anydpi-v26/
|
|
58
|
+
*/
|
|
59
|
+
export function generateAdaptiveIconXml(foregroundPath = '@mipmap/ic_launcher_foreground', backgroundPath = '@mipmap/ic_launcher_background') {
|
|
60
|
+
return `<?xml version="1.0" encoding="utf-8"?>
|
|
61
|
+
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
62
|
+
<background android:drawable="${backgroundPath}" />
|
|
63
|
+
<foreground android:drawable="${foregroundPath}" />
|
|
64
|
+
</adaptive-icon>`;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Generates adaptive icon XML with monochrome layer (Android 13+)
|
|
68
|
+
* Includes monochrome layer for themed icons
|
|
69
|
+
*
|
|
70
|
+
* @param foregroundPath - Path to foreground drawable
|
|
71
|
+
* @param backgroundPath - Path to background drawable
|
|
72
|
+
* @param monochromePath - Path to monochrome drawable (default: @mipmap/ic_launcher_foreground)
|
|
73
|
+
* @returns Valid ic_launcher.xml content with monochrome support
|
|
74
|
+
*/
|
|
75
|
+
export function generateAdaptiveIconXmlWithMonochrome(foregroundPath = '@mipmap/ic_launcher_foreground', backgroundPath = '@mipmap/ic_launcher_background', monochromePath = '@mipmap/ic_launcher_foreground') {
|
|
76
|
+
return `<?xml version="1.0" encoding="utf-8"?>
|
|
77
|
+
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
78
|
+
<background android:drawable="${backgroundPath}" />
|
|
79
|
+
<foreground android:drawable="${foregroundPath}" />
|
|
80
|
+
<monochrome android:drawable="${monochromePath}" />
|
|
81
|
+
</adaptive-icon>`;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Gets the mipmap directory path for a given density
|
|
85
|
+
*
|
|
86
|
+
* @param density - Density name (e.g., 'mdpi', 'hdpi', 'xhdpi')
|
|
87
|
+
* @returns Directory path in format 'mipmap-{density}'
|
|
88
|
+
*/
|
|
89
|
+
export function getDensityPath(density) {
|
|
90
|
+
return `mipmap-${density}`;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Gets icon size in pixels for a given density
|
|
94
|
+
*
|
|
95
|
+
* @param density - Density name
|
|
96
|
+
* @returns Icon size in pixels, or null if density not found
|
|
97
|
+
*/
|
|
98
|
+
export function getIconSizeForDensity(density) {
|
|
99
|
+
const found = ANDROID_DENSITIES.find(d => d.name === density);
|
|
100
|
+
return found ? found.iconSize : null;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Calculates the pixel size for a given dp value at a specific density
|
|
104
|
+
*
|
|
105
|
+
* @param dp - Value in density-independent pixels
|
|
106
|
+
* @param density - Density name
|
|
107
|
+
* @returns Pixel size, or null if density not found
|
|
108
|
+
*/
|
|
109
|
+
export function dpToPixels(dp, density) {
|
|
110
|
+
const found = ANDROID_DENSITIES.find(d => d.name === density);
|
|
111
|
+
return found ? Math.round(dp * found.scale) : null;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Android adaptive icon specifications
|
|
115
|
+
* Defines the safe zone and dimensions for foreground/background layers
|
|
116
|
+
*/
|
|
117
|
+
export const ADAPTIVE_ICON_SPECS = {
|
|
118
|
+
fullSize: 108, // dp - full drawable size (108x108 dp)
|
|
119
|
+
visibleSize: 72, // dp - always visible area (72x72 dp)
|
|
120
|
+
safeZone: 66, // dp - safe zone for important content (66x66 dp)
|
|
121
|
+
maskPadding: 18, // dp - padding from edge to mask (108 - 72) / 2
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=android.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"android.js","sourceRoot":"","sources":["../../src/platforms/android.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* iOS Platform Specifications
|
|
3
|
+
* Complete icon and screenshot sizes for iOS, iPadOS, watchOS, and CarPlay
|
|
4
|
+
*/
|
|
5
|
+
export interface IconSize {
|
|
6
|
+
size: number;
|
|
7
|
+
scale: number;
|
|
8
|
+
pixels: number;
|
|
9
|
+
idiom: 'iphone' | 'ipad' | 'ios-marketing' | 'watch' | 'car';
|
|
10
|
+
filename: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ScreenshotSize {
|
|
13
|
+
name: string;
|
|
14
|
+
width: number;
|
|
15
|
+
height: number;
|
|
16
|
+
device: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Complete iOS icon sizes (18+ sizes)
|
|
20
|
+
* Covers iPhone, iPad, App Store, Notifications, Settings, Spotlight
|
|
21
|
+
*/
|
|
22
|
+
export declare const IOS_ICON_SIZES: IconSize[];
|
|
23
|
+
/**
|
|
24
|
+
* watchOS icon sizes (optional export)
|
|
25
|
+
* Notification, Companion Settings, Home Screen, Short Look
|
|
26
|
+
*/
|
|
27
|
+
export declare const WATCHOS_ICON_SIZES: IconSize[];
|
|
28
|
+
/**
|
|
29
|
+
* CarPlay icon sizes (optional export)
|
|
30
|
+
*/
|
|
31
|
+
export declare const CARPLAY_ICON_SIZES: IconSize[];
|
|
32
|
+
/**
|
|
33
|
+
* iOS Screenshot sizes for all devices
|
|
34
|
+
* Based on native resolutions for App Store screenshots
|
|
35
|
+
*/
|
|
36
|
+
export declare const IOS_SCREENSHOT_SIZES: ScreenshotSize[];
|
|
37
|
+
/**
|
|
38
|
+
* Generate Contents.json for Xcode asset catalog
|
|
39
|
+
* @param sizes Array of icon sizes to include
|
|
40
|
+
* @returns Valid Xcode Contents.json object
|
|
41
|
+
*/
|
|
42
|
+
export declare function generateContentsJson(sizes: IconSize[]): object;
|
|
43
|
+
/**
|
|
44
|
+
* Get icon filename based on size, scale, and idiom
|
|
45
|
+
* @param size Size in points
|
|
46
|
+
* @param scale Scale multiplier (1, 2, or 3)
|
|
47
|
+
* @param idiom Device idiom
|
|
48
|
+
* @returns Filename string
|
|
49
|
+
*/
|
|
50
|
+
export declare function getIconFilename(size: number, scale: number, idiom: 'iphone' | 'ipad' | 'ios-marketing' | 'watch' | 'car'): string;
|
|
51
|
+
//# sourceMappingURL=ios.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ios.d.ts","sourceRoot":"","sources":["../../src/platforms/ios.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,eAAe,GAAG,OAAO,GAAG,KAAK,CAAC;IAC7D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,EA4CpC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,EAqCxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,EAIxC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAAc,EA6BhD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAe9D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,eAAe,GAAG,OAAO,GAAG,KAAK,GAC3D,MAAM,CAWR"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* iOS Platform Specifications
|
|
3
|
+
* Complete icon and screenshot sizes for iOS, iPadOS, watchOS, and CarPlay
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Complete iOS icon sizes (18+ sizes)
|
|
7
|
+
* Covers iPhone, iPad, App Store, Notifications, Settings, Spotlight
|
|
8
|
+
*/
|
|
9
|
+
export const IOS_ICON_SIZES = [
|
|
10
|
+
// iPhone App Icon (60pt)
|
|
11
|
+
{ size: 60, scale: 2, pixels: 120, idiom: 'iphone', filename: 'Icon-App-60x60@2x.png' },
|
|
12
|
+
{ size: 60, scale: 3, pixels: 180, idiom: 'iphone', filename: 'Icon-App-60x60@3x.png' },
|
|
13
|
+
// iPhone Notification Icon (20pt)
|
|
14
|
+
{ size: 20, scale: 2, pixels: 40, idiom: 'iphone', filename: 'Icon-App-20x20@2x.png' },
|
|
15
|
+
{ size: 20, scale: 3, pixels: 60, idiom: 'iphone', filename: 'Icon-App-20x20@3x.png' },
|
|
16
|
+
// iPhone Settings Icon (29pt)
|
|
17
|
+
{ size: 29, scale: 2, pixels: 58, idiom: 'iphone', filename: 'Icon-App-29x29@2x.png' },
|
|
18
|
+
{ size: 29, scale: 3, pixels: 87, idiom: 'iphone', filename: 'Icon-App-29x29@3x.png' },
|
|
19
|
+
// iPhone Spotlight Icon (40pt)
|
|
20
|
+
{ size: 40, scale: 2, pixels: 80, idiom: 'iphone', filename: 'Icon-App-40x40@2x.png' },
|
|
21
|
+
{ size: 40, scale: 3, pixels: 120, idiom: 'iphone', filename: 'Icon-App-40x40@3x.png' },
|
|
22
|
+
// iPad App Icon (76pt)
|
|
23
|
+
{ size: 76, scale: 1, pixels: 76, idiom: 'ipad', filename: 'Icon-App-76x76@1x.png' },
|
|
24
|
+
{ size: 76, scale: 2, pixels: 152, idiom: 'ipad', filename: 'Icon-App-76x76@2x.png' },
|
|
25
|
+
// iPad Pro App Icon (83.5pt)
|
|
26
|
+
{ size: 83.5, scale: 2, pixels: 167, idiom: 'ipad', filename: 'Icon-App-83.5x83.5@2x.png' },
|
|
27
|
+
// iPad Notification Icon (20pt)
|
|
28
|
+
{ size: 20, scale: 1, pixels: 20, idiom: 'ipad', filename: 'Icon-App-20x20@1x.png' },
|
|
29
|
+
{ size: 20, scale: 2, pixels: 40, idiom: 'ipad', filename: 'Icon-App-20x20@2x.png' },
|
|
30
|
+
// iPad Settings Icon (29pt)
|
|
31
|
+
{ size: 29, scale: 1, pixels: 29, idiom: 'ipad', filename: 'Icon-App-29x29@1x.png' },
|
|
32
|
+
{ size: 29, scale: 2, pixels: 58, idiom: 'ipad', filename: 'Icon-App-29x29@2x.png' },
|
|
33
|
+
// iPad Spotlight Icon (40pt)
|
|
34
|
+
{ size: 40, scale: 1, pixels: 40, idiom: 'ipad', filename: 'Icon-App-40x40@1x.png' },
|
|
35
|
+
{ size: 40, scale: 2, pixels: 80, idiom: 'ipad', filename: 'Icon-App-40x40@2x.png' },
|
|
36
|
+
// App Store Icon (1024pt)
|
|
37
|
+
{
|
|
38
|
+
size: 1024,
|
|
39
|
+
scale: 1,
|
|
40
|
+
pixels: 1024,
|
|
41
|
+
idiom: 'ios-marketing',
|
|
42
|
+
filename: 'Icon-App-1024x1024@1x.png',
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
/**
|
|
46
|
+
* watchOS icon sizes (optional export)
|
|
47
|
+
* Notification, Companion Settings, Home Screen, Short Look
|
|
48
|
+
*/
|
|
49
|
+
export const WATCHOS_ICON_SIZES = [
|
|
50
|
+
// watchOS App Icon - 38mm
|
|
51
|
+
{ size: 40, scale: 2, pixels: 80, idiom: 'watch', filename: 'Icon-Watch-40x40@2x.png' },
|
|
52
|
+
// watchOS App Icon - 40mm
|
|
53
|
+
{ size: 44, scale: 2, pixels: 88, idiom: 'watch', filename: 'Icon-Watch-44x44@2x.png' },
|
|
54
|
+
// watchOS App Icon - 41mm
|
|
55
|
+
{ size: 45, scale: 2, pixels: 90, idiom: 'watch', filename: 'Icon-Watch-45x45@2x.png' },
|
|
56
|
+
// watchOS App Icon - 42mm
|
|
57
|
+
{ size: 46, scale: 2, pixels: 92, idiom: 'watch', filename: 'Icon-Watch-46x46@2x.png' },
|
|
58
|
+
// watchOS App Icon - 44mm
|
|
59
|
+
{ size: 50, scale: 2, pixels: 100, idiom: 'watch', filename: 'Icon-Watch-50x50@2x.png' },
|
|
60
|
+
// watchOS Notification - 38mm
|
|
61
|
+
{ size: 24, scale: 2, pixels: 48, idiom: 'watch', filename: 'Icon-Watch-24x24@2x.png' },
|
|
62
|
+
// watchOS Notification - 42mm
|
|
63
|
+
{ size: 27.5, scale: 2, pixels: 55, idiom: 'watch', filename: 'Icon-Watch-27.5x27.5@2x.png' },
|
|
64
|
+
// watchOS Companion Settings
|
|
65
|
+
{ size: 29, scale: 2, pixels: 58, idiom: 'watch', filename: 'Icon-Watch-29x29@2x.png' },
|
|
66
|
+
{ size: 29, scale: 3, pixels: 87, idiom: 'watch', filename: 'Icon-Watch-29x29@3x.png' },
|
|
67
|
+
// watchOS Home Screen - 40mm
|
|
68
|
+
{
|
|
69
|
+
size: 40,
|
|
70
|
+
scale: 2,
|
|
71
|
+
pixels: 80,
|
|
72
|
+
idiom: 'watch',
|
|
73
|
+
filename: 'Icon-Watch-HomeScreen-40x40@2x.png',
|
|
74
|
+
},
|
|
75
|
+
// watchOS App Store
|
|
76
|
+
{ size: 1024, scale: 1, pixels: 1024, idiom: 'watch', filename: 'Icon-Watch-1024x1024@1x.png' },
|
|
77
|
+
];
|
|
78
|
+
/**
|
|
79
|
+
* CarPlay icon sizes (optional export)
|
|
80
|
+
*/
|
|
81
|
+
export const CARPLAY_ICON_SIZES = [
|
|
82
|
+
// CarPlay App Icon (60pt)
|
|
83
|
+
{ size: 60, scale: 2, pixels: 120, idiom: 'car', filename: 'Icon-CarPlay-60x60@2x.png' },
|
|
84
|
+
{ size: 60, scale: 3, pixels: 180, idiom: 'car', filename: 'Icon-CarPlay-60x60@3x.png' },
|
|
85
|
+
];
|
|
86
|
+
/**
|
|
87
|
+
* iOS Screenshot sizes for all devices
|
|
88
|
+
* Based on native resolutions for App Store screenshots
|
|
89
|
+
*/
|
|
90
|
+
export const IOS_SCREENSHOT_SIZES = [
|
|
91
|
+
// iPhone 16 Pro Max / 15 Pro Max / 14 Pro Max (6.9" / 6.7")
|
|
92
|
+
{ name: '6.9-inch', width: 1320, height: 2868, device: 'iPhone 16 Pro Max' },
|
|
93
|
+
{ name: '6.7-inch', width: 1290, height: 2796, device: 'iPhone 15 Pro Max' },
|
|
94
|
+
// iPhone 16 Pro / 15 Pro / 14 Pro (6.3" / 6.1")
|
|
95
|
+
{ name: '6.3-inch', width: 1206, height: 2622, device: 'iPhone 16 Pro' },
|
|
96
|
+
{ name: '6.1-inch', width: 1179, height: 2556, device: 'iPhone 15 Pro' },
|
|
97
|
+
// iPhone 13 Pro Max / 12 Pro Max (6.7")
|
|
98
|
+
{ name: '6.7-inch-legacy', width: 1284, height: 2778, device: 'iPhone 13 Pro Max' },
|
|
99
|
+
// iPhone 13 / 12 (6.1")
|
|
100
|
+
{ name: '6.1-inch-legacy', width: 1170, height: 2532, device: 'iPhone 13' },
|
|
101
|
+
// iPhone 8 Plus / 7 Plus / 6s Plus (5.5")
|
|
102
|
+
{ name: '5.5-inch', width: 1242, height: 2208, device: 'iPhone 8 Plus' },
|
|
103
|
+
// iPad Pro 12.9" (3rd gen and later)
|
|
104
|
+
{ name: 'iPad-12.9', width: 2048, height: 2732, device: 'iPad Pro 12.9"' },
|
|
105
|
+
// iPad Pro 11" / iPad Air 11"
|
|
106
|
+
{ name: 'iPad-11', width: 1668, height: 2388, device: 'iPad Pro 11"' },
|
|
107
|
+
// iPad Pro 10.5" / iPad Air 10.9"
|
|
108
|
+
{ name: 'iPad-10.5', width: 1668, height: 2224, device: 'iPad Pro 10.5"' },
|
|
109
|
+
// iPad 9.7" / iPad mini
|
|
110
|
+
{ name: 'iPad-9.7', width: 1536, height: 2048, device: 'iPad 9.7"' },
|
|
111
|
+
];
|
|
112
|
+
/**
|
|
113
|
+
* Generate Contents.json for Xcode asset catalog
|
|
114
|
+
* @param sizes Array of icon sizes to include
|
|
115
|
+
* @returns Valid Xcode Contents.json object
|
|
116
|
+
*/
|
|
117
|
+
export function generateContentsJson(sizes) {
|
|
118
|
+
const images = sizes.map((iconSize) => ({
|
|
119
|
+
filename: iconSize.filename,
|
|
120
|
+
idiom: iconSize.idiom,
|
|
121
|
+
scale: `${iconSize.scale}x`,
|
|
122
|
+
size: `${iconSize.size}x${iconSize.size}`,
|
|
123
|
+
}));
|
|
124
|
+
return {
|
|
125
|
+
images,
|
|
126
|
+
info: {
|
|
127
|
+
author: 'opencode-visual-toolkit',
|
|
128
|
+
version: 1,
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get icon filename based on size, scale, and idiom
|
|
134
|
+
* @param size Size in points
|
|
135
|
+
* @param scale Scale multiplier (1, 2, or 3)
|
|
136
|
+
* @param idiom Device idiom
|
|
137
|
+
* @returns Filename string
|
|
138
|
+
*/
|
|
139
|
+
export function getIconFilename(size, scale, idiom) {
|
|
140
|
+
const prefix = idiom === 'watch'
|
|
141
|
+
? 'Icon-Watch'
|
|
142
|
+
: idiom === 'car'
|
|
143
|
+
? 'Icon-CarPlay'
|
|
144
|
+
: idiom === 'ios-marketing'
|
|
145
|
+
? 'Icon-App'
|
|
146
|
+
: 'Icon-App';
|
|
147
|
+
return `${prefix}-${size}x${size}@${scale}x.png`;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=ios.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ios.js","sourceRoot":"","sources":["../../src/platforms/ios.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* macOS Platform Specifications
|
|
3
|
+
* Complete icon sizes for macOS app icons (.icns)
|
|
4
|
+
*/
|
|
5
|
+
export interface MacOSIconSize {
|
|
6
|
+
size: number;
|
|
7
|
+
scale: number;
|
|
8
|
+
pixels: number;
|
|
9
|
+
filename: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Complete macOS icon sizes
|
|
13
|
+
* Covers all required sizes for .icns icon sets
|
|
14
|
+
* From 16x16 to 512x512 at 1x and 2x
|
|
15
|
+
*/
|
|
16
|
+
export declare const MACOS_ICON_SIZES: MacOSIconSize[];
|
|
17
|
+
/**
|
|
18
|
+
* Generate macOS iconset folder structure information
|
|
19
|
+
* @returns Information about the iconset folder structure
|
|
20
|
+
*/
|
|
21
|
+
export declare function generateMacIconset(): {
|
|
22
|
+
folderName: string;
|
|
23
|
+
description: string;
|
|
24
|
+
sizes: MacOSIconSize[];
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Get icon filename based on size and scale
|
|
28
|
+
* @param size Size in points
|
|
29
|
+
* @param scale Scale multiplier (1 or 2)
|
|
30
|
+
* @returns Filename string following macOS conventions
|
|
31
|
+
*/
|
|
32
|
+
export declare function getIconFilename(size: number, scale: number): string;
|
|
33
|
+
//# sourceMappingURL=macos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"macos.d.ts","sourceRoot":"","sources":["../../src/platforms/macos.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAAa,EAoB3C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB,CAOA;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKnE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* macOS Platform Specifications
|
|
3
|
+
* Complete icon sizes for macOS app icons (.icns)
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Complete macOS icon sizes
|
|
7
|
+
* Covers all required sizes for .icns icon sets
|
|
8
|
+
* From 16x16 to 512x512 at 1x and 2x
|
|
9
|
+
*/
|
|
10
|
+
export const MACOS_ICON_SIZES = [
|
|
11
|
+
// 16pt icon
|
|
12
|
+
{ size: 16, scale: 1, pixels: 16, filename: 'icon_16x16.png' },
|
|
13
|
+
{ size: 16, scale: 2, pixels: 32, filename: 'icon_16x16@2x.png' },
|
|
14
|
+
// 32pt icon
|
|
15
|
+
{ size: 32, scale: 1, pixels: 32, filename: 'icon_32x32.png' },
|
|
16
|
+
{ size: 32, scale: 2, pixels: 64, filename: 'icon_32x32@2x.png' },
|
|
17
|
+
// 128pt icon
|
|
18
|
+
{ size: 128, scale: 1, pixels: 128, filename: 'icon_128x128.png' },
|
|
19
|
+
{ size: 128, scale: 2, pixels: 256, filename: 'icon_128x128@2x.png' },
|
|
20
|
+
// 256pt icon
|
|
21
|
+
{ size: 256, scale: 1, pixels: 256, filename: 'icon_256x256.png' },
|
|
22
|
+
{ size: 256, scale: 2, pixels: 512, filename: 'icon_256x256@2x.png' },
|
|
23
|
+
// 512pt icon
|
|
24
|
+
{ size: 512, scale: 1, pixels: 512, filename: 'icon_512x512.png' },
|
|
25
|
+
{ size: 512, scale: 2, pixels: 1024, filename: 'icon_512x512@2x.png' },
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* Generate macOS iconset folder structure information
|
|
29
|
+
* @returns Information about the iconset folder structure
|
|
30
|
+
*/
|
|
31
|
+
export function generateMacIconset() {
|
|
32
|
+
return {
|
|
33
|
+
folderName: 'AppIcon.iconset',
|
|
34
|
+
description: 'macOS iconset folder containing all required icon sizes. Use iconutil to convert to .icns file: iconutil -c icns AppIcon.iconset',
|
|
35
|
+
sizes: MACOS_ICON_SIZES,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get icon filename based on size and scale
|
|
40
|
+
* @param size Size in points
|
|
41
|
+
* @param scale Scale multiplier (1 or 2)
|
|
42
|
+
* @returns Filename string following macOS conventions
|
|
43
|
+
*/
|
|
44
|
+
export function getIconFilename(size, scale) {
|
|
45
|
+
if (scale === 1) {
|
|
46
|
+
return `icon_${size}x${size}.png`;
|
|
47
|
+
}
|
|
48
|
+
return `icon_${size}x${size}@2x.png`;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=macos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"macos.js","sourceRoot":"","sources":["../../src/platforms/macos.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,YAAY;IACZ,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;IAC9D,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE;IAEjE,YAAY;IACZ,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;IAC9D,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE;IAEjE,aAAa;IACb,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,kBAAkB,EAAE;IAClE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,qBAAqB,EAAE;IAErE,aAAa;IACb,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,kBAAkB,EAAE;IAClE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,qBAAqB,EAAE;IAErE,aAAa;IACb,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,kBAAkB,EAAE;IAClE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,qBAAqB,EAAE;CACvE,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAKhC,OAAO;QACL,UAAU,EAAE,iBAAiB;QAC7B,WAAW,EACT,kIAAkI;QACpI,KAAK,EAAE,gBAAgB;KACxB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa;IACzD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC;IACpC,CAAC;IACD,OAAO,QAAQ,IAAI,IAAI,IAAI,SAAS,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* watchOS Platform Specifications
|
|
3
|
+
*
|
|
4
|
+
* Defines icon sizes and specifications for Apple Watch apps across all watch sizes.
|
|
5
|
+
* Supports notification, home screen, short look, and App Store icons.
|
|
6
|
+
*/
|
|
7
|
+
export interface WatchOSIconSize {
|
|
8
|
+
size: number;
|
|
9
|
+
scale: number;
|
|
10
|
+
pixels: number;
|
|
11
|
+
context: string;
|
|
12
|
+
watchSize: string;
|
|
13
|
+
filename: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Complete watchOS icon sizes for all watch models and contexts
|
|
17
|
+
* Based on Apple's Human Interface Guidelines for watchOS
|
|
18
|
+
*/
|
|
19
|
+
export declare const WATCHOS_ICON_SIZES: WatchOSIconSize[];
|
|
20
|
+
/**
|
|
21
|
+
* Generates Contents.json for Xcode watchOS asset catalog
|
|
22
|
+
*/
|
|
23
|
+
export declare function generateWatchContentsJson(sizes: WatchOSIconSize[]): string;
|
|
24
|
+
/**
|
|
25
|
+
* Gets appropriate icon filename for watch size and context
|
|
26
|
+
*/
|
|
27
|
+
export declare function getWatchIconFilename(size: number, context: string, watchSize: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Groups icon sizes by watch size for organized generation
|
|
30
|
+
*/
|
|
31
|
+
export declare function groupIconsByWatchSize(): Record<string, WatchOSIconSize[]>;
|
|
32
|
+
/**
|
|
33
|
+
* Gets all unique contexts (notification, home, short-look, store)
|
|
34
|
+
*/
|
|
35
|
+
export declare function getWatchContexts(): string[];
|
|
36
|
+
//# sourceMappingURL=watchos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watchos.d.ts","sourceRoot":"","sources":["../../src/platforms/watchos.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,eAAe,EAkD/C,CAAC;AAEF;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM,CAiB1E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAe7F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAYzE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAG3C"}
|