@mmtitanl/tablets 0.1.1

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.
@@ -0,0 +1,383 @@
1
+ import { D as DeviceMeta, a as DeviceLayoutData, b as DeviceLayoutContract, S as SafeAreaInsets, c as DeviceCSSVariables, C as ContentRect, R as RegisteredDevice, H as HardwareOverlayType, O as OverlayRect, d as DeviceFrameInfo, e as SVGScreenRect } from './contract-types-Ch_kM--q.js';
2
+ export { f as SVGCropRect } from './contract-types-Ch_kM--q.js';
3
+ export { IPAD_PRO_13_FRAME, IPAD_PRO_13_LAYOUT, IPAD_PRO_13_META, IPAD_PRO_13_SCREEN_RECT, IPadPro13SVG } from './ios/index.js';
4
+ import * as react from 'react';
5
+ import { CSSProperties } from 'react';
6
+ export { GALAXY_TAB_S10_FRAME, GALAXY_TAB_S10_LAYOUT, GALAXY_TAB_S10_META, GALAXY_TAB_S10_SCREEN_RECT, GalaxyTabS10SVG } from './android/index.js';
7
+
8
+ declare function deriveContentZone(screenWidth: number, screenHeight: number, safeArea: SafeAreaInsets): ContentRect;
9
+ declare function buildCSSVariables(screen: DeviceMeta["screen"], safeArea: SafeAreaInsets, statusBar: DeviceLayoutContract["statusBar"], homeIndicator: DeviceLayoutContract["homeIndicator"], hardwareOverlays: DeviceLayoutContract["hardwareOverlays"]): DeviceCSSVariables;
10
+ declare function buildAIPromptConstraints(contract: Omit<DeviceLayoutContract, "aiPromptConstraints">): string;
11
+ declare const BUILTIN_DEVICES: Record<string, DeviceMeta>;
12
+ declare const DEVICE_LAYOUTS: Record<string, DeviceLayoutData>;
13
+ declare function getDeviceMetadata(deviceId: string): DeviceMeta;
14
+ declare function getAllDeviceIds(): string[];
15
+ declare function getDeviceContract(deviceId: string, orientation?: "portrait" | "landscape"): DeviceLayoutContract;
16
+
17
+ declare class DeviceRegistry {
18
+ private devices;
19
+ private storage;
20
+ constructor(storage?: Storage | null);
21
+ register(device: RegisteredDevice): void;
22
+ get(deviceId: string): RegisteredDevice | undefined;
23
+ getMeta(deviceId: string): DeviceMeta | undefined;
24
+ getContract(deviceId: string): DeviceLayoutContract | undefined;
25
+ list(): RegisteredDevice[];
26
+ listIds(): string[];
27
+ has(deviceId: string): boolean;
28
+ remove(deviceId: string): boolean;
29
+ clear(): void;
30
+ get size(): number;
31
+ exportAll(): string;
32
+ importAll(json: string): {
33
+ imported: number;
34
+ skipped: string[];
35
+ };
36
+ importAllOverwrite(json: string): number;
37
+ private load;
38
+ private save;
39
+ }
40
+ declare function getDeviceRegistry(): DeviceRegistry;
41
+ declare function resetDeviceRegistry(): void;
42
+
43
+ interface SVGNativeDimensions {
44
+ width: number;
45
+ height: number;
46
+ hasViewBox: boolean;
47
+ source: "viewBox" | "widthHeight" | "fallback";
48
+ }
49
+ declare function parseSVGNativeDimensions(svgString: string): SVGNativeDimensions;
50
+
51
+ interface NormalizationResult {
52
+ normalizedSVG: string;
53
+ scaleFactors: {
54
+ x: number;
55
+ y: number;
56
+ };
57
+ aspectRatioWarning: string | null;
58
+ wasAlreadyNormalized: boolean;
59
+ nativeDimensions: {
60
+ width: number;
61
+ height: number;
62
+ };
63
+ }
64
+ declare function normalizeSVGToLogicalPoints(svgString: string, targetWidth: number, targetHeight: number): NormalizationResult;
65
+
66
+ interface ParsedZone {
67
+ zone: string;
68
+ x: number;
69
+ y: number;
70
+ width: number;
71
+ height: number;
72
+ }
73
+ declare function extractZones(svgString: string): ParsedZone[];
74
+ interface ParseSVGContractOptions {
75
+ meta: DeviceMeta;
76
+ overlayType?: HardwareOverlayType;
77
+ overlayShape?: OverlayRect["shape"];
78
+ statusBarStyle?: DeviceLayoutContract["statusBar"]["style"];
79
+ homeIndicatorType?: DeviceLayoutContract["homeIndicator"]["type"];
80
+ }
81
+ declare function parseSVGToContract(normalizedSVG: string, options: ParseSVGContractOptions): DeviceLayoutContract;
82
+
83
+ interface ValidationResult {
84
+ passed: boolean;
85
+ warnings: string[];
86
+ errors: string[];
87
+ }
88
+ declare function validateNormalizedSVG(result: NormalizationResult, targetWidth: number, targetHeight: number): ValidationResult;
89
+
90
+ declare function scopeSVGIds(svgString: string, deviceId: string): string;
91
+
92
+ type ZoneType = "screen-area" | "hardware-overlay" | "safe-area-top" | "safe-area-bottom" | "safe-area-left" | "safe-area-right" | "status-bar" | "home-indicator" | "hardware-button";
93
+ interface DetectedZone {
94
+ id: string;
95
+ type: ZoneType;
96
+ sourceLabel: string;
97
+ matchedKeyword: string;
98
+ confidence: "high" | "medium";
99
+ x: number;
100
+ y: number;
101
+ width: number;
102
+ height: number;
103
+ rx?: number;
104
+ }
105
+ interface RectInfo {
106
+ x: number;
107
+ y: number;
108
+ width: number;
109
+ height: number;
110
+ rx: number;
111
+ fill: string | null;
112
+ id: string | null;
113
+ }
114
+ interface SVGAnalysis {
115
+ zones: DetectedZone[];
116
+ phoneBody: {
117
+ x: number;
118
+ y: number;
119
+ width: number;
120
+ height: number;
121
+ rx: number;
122
+ } | null;
123
+ sideButtons: {
124
+ x: number;
125
+ y: number;
126
+ width: number;
127
+ height: number;
128
+ }[];
129
+ allRects: RectInfo[];
130
+ }
131
+ declare function autoDetectZones(svgString: string): DetectedZone[];
132
+ declare function analyzeSVGGeometry(svgString: string): SVGAnalysis;
133
+ interface ClassifiedButton {
134
+ type: "volume-up" | "volume-down" | "power" | "action" | "camera";
135
+ side: "left" | "right";
136
+ x: number;
137
+ y: number;
138
+ width: number;
139
+ height: number;
140
+ }
141
+ declare function classifySideButtons(sideButtons: {
142
+ x: number;
143
+ y: number;
144
+ width: number;
145
+ height: number;
146
+ }[], phoneBody: {
147
+ x: number;
148
+ y: number;
149
+ width: number;
150
+ height: number;
151
+ } | null): ClassifiedButton[];
152
+ declare function listSVGLayerNames(svgString: string): {
153
+ tag: string;
154
+ name: string;
155
+ }[];
156
+
157
+ /**
158
+ * iPad Pro 11" (M4, 2024)
159
+ * Screen: 834×1194pt @ 2x (physical 1668×2388)
160
+ * Display: 11" Ultra Retina XDR OLED Tandem, 264 PPI
161
+ * Hardware: TrueDepth camera (landscape edge), Dynamic Island, no home button
162
+ */
163
+ declare const IPAD_PRO_11_META: DeviceMeta;
164
+ declare const IPAD_PRO_11_LAYOUT: DeviceLayoutData;
165
+ interface DeviceSVGProps$i {
166
+ colorScheme?: "light" | "dark";
167
+ style?: CSSProperties;
168
+ }
169
+ declare function IPadPro11SVG({ colorScheme, style }: DeviceSVGProps$i): react.JSX.Element;
170
+ declare const IPAD_PRO_11_FRAME: DeviceFrameInfo;
171
+ declare const IPAD_PRO_11_SCREEN_RECT: SVGScreenRect;
172
+
173
+ /**
174
+ * iPad Air 13" (M3, 2024)
175
+ * Screen: 1024×1366pt @ 2x (physical 2048×2732)
176
+ * Display: 13" Liquid Retina IPS, 264 PPI
177
+ * Hardware: Front camera (landscape edge), no notch, no home button, Touch ID in top button
178
+ */
179
+ declare const IPAD_AIR_13_META: DeviceMeta;
180
+ declare const IPAD_AIR_13_LAYOUT: DeviceLayoutData;
181
+ interface DeviceSVGProps$h {
182
+ colorScheme?: "light" | "dark";
183
+ style?: CSSProperties;
184
+ }
185
+ declare function IPadAir13SVG({ colorScheme, style }: DeviceSVGProps$h): react.JSX.Element;
186
+ declare const IPAD_AIR_13_FRAME: DeviceFrameInfo;
187
+ declare const IPAD_AIR_13_SCREEN_RECT: SVGScreenRect;
188
+
189
+ /**
190
+ * iPad Air 11" (M3, 2024)
191
+ * Screen: 820×1180pt @ 2x (physical 1640×2360)
192
+ * Display: 11" Liquid Retina IPS, 264 PPI
193
+ * Hardware: Front camera (landscape edge), no notch, no home button, Touch ID in top button
194
+ */
195
+ declare const IPAD_AIR_11_META: DeviceMeta;
196
+ declare const IPAD_AIR_11_LAYOUT: DeviceLayoutData;
197
+ interface DeviceSVGProps$g {
198
+ colorScheme?: "light" | "dark";
199
+ style?: CSSProperties;
200
+ }
201
+ declare function IPadAir11SVG({ colorScheme, style }: DeviceSVGProps$g): react.JSX.Element;
202
+ declare const IPAD_AIR_11_FRAME: DeviceFrameInfo;
203
+ declare const IPAD_AIR_11_SCREEN_RECT: SVGScreenRect;
204
+
205
+ /**
206
+ * iPad mini 7 (A17 Pro, 2024)
207
+ * Screen: 744×1133pt @ 2x (physical 1488×2266)
208
+ * Display: 8.3" Liquid Retina IPS, 326 PPI
209
+ * Hardware: Front camera (landscape edge), no notch, no home button, Touch ID in top button
210
+ */
211
+ declare const IPAD_MINI_7_META: DeviceMeta;
212
+ declare const IPAD_MINI_7_LAYOUT: DeviceLayoutData;
213
+ interface DeviceSVGProps$f {
214
+ colorScheme?: "light" | "dark";
215
+ style?: CSSProperties;
216
+ }
217
+ declare function IPadMini7SVG({ colorScheme, style }: DeviceSVGProps$f): react.JSX.Element;
218
+ declare const IPAD_MINI_7_FRAME: DeviceFrameInfo;
219
+ declare const IPAD_MINI_7_SCREEN_RECT: SVGScreenRect;
220
+
221
+ /**
222
+ * Galaxy Tab S10 Ultra (2024)
223
+ * Screen: 924×1480dp @ 2x (physical 1848×2960)
224
+ * Display: 14.6" Dynamic AMOLED 2X, 240 PPI
225
+ * Hardware: Punch-hole front camera in landscape top bezel, no home button
226
+ * Note: S Pen included, large productivity-focused tablet
227
+ */
228
+ declare const GALAXY_TAB_S10_ULTRA_META: DeviceMeta;
229
+ declare const GALAXY_TAB_S10_ULTRA_LAYOUT: DeviceLayoutData;
230
+ interface DeviceSVGProps$e {
231
+ colorScheme?: "light" | "dark";
232
+ style?: CSSProperties;
233
+ }
234
+ declare function GalaxyTabS10UltraSVG({ colorScheme, style }: DeviceSVGProps$e): react.JSX.Element;
235
+ declare const GALAXY_TAB_S10_ULTRA_FRAME: DeviceFrameInfo;
236
+ declare const GALAXY_TAB_S10_ULTRA_SCREEN_RECT: SVGScreenRect;
237
+
238
+ /**
239
+ * Galaxy Tab S10 FE (Fan Edition, 2024)
240
+ * Screen: 960×1536dp @ 1.5x (physical 1440×2304)
241
+ * Display: 10.9" TFT LCD, 240 PPI
242
+ * Hardware: Front camera in portrait top bezel, no home button, side-mounted fingerprint
243
+ */
244
+ declare const GALAXY_TAB_S10_FE_META: DeviceMeta;
245
+ declare const GALAXY_TAB_S10_FE_LAYOUT: DeviceLayoutData;
246
+ interface DeviceSVGProps$d {
247
+ colorScheme?: "light" | "dark";
248
+ style?: CSSProperties;
249
+ }
250
+ declare function GalaxyTabS10FeSVG({ colorScheme, style }: DeviceSVGProps$d): react.JSX.Element;
251
+ declare const GALAXY_TAB_S10_FE_FRAME: DeviceFrameInfo;
252
+ declare const GALAXY_TAB_S10_FE_SCREEN_RECT: SVGScreenRect;
253
+
254
+ interface DeviceSVGProps$c {
255
+ colorScheme?: "light" | "dark";
256
+ style?: CSSProperties;
257
+ }
258
+ declare const IPHONE_17_PRO_MAX_META: DeviceMeta;
259
+ declare const IPHONE_17_PRO_MAX_LAYOUT: DeviceLayoutData;
260
+ declare function IPhone17ProMaxSVG({ style }: DeviceSVGProps$c): react.JSX.Element;
261
+ declare const IPHONE_17_PRO_MAX_FRAME: DeviceFrameInfo;
262
+ declare const IPHONE_17_PRO_MAX_SCREEN_RECT: SVGScreenRect;
263
+
264
+ interface DeviceSVGProps$b {
265
+ colorScheme?: "light" | "dark";
266
+ style?: CSSProperties;
267
+ }
268
+ declare const IPHONE_17_PRO_META: DeviceMeta;
269
+ declare const IPHONE_17_PRO_LAYOUT: DeviceLayoutData;
270
+ declare function IPhone17ProSVG({ style }: DeviceSVGProps$b): react.JSX.Element;
271
+ declare const IPHONE_17_PRO_FRAME: DeviceFrameInfo;
272
+ declare const IPHONE_17_PRO_SCREEN_RECT: SVGScreenRect;
273
+
274
+ interface DeviceSVGProps$a {
275
+ colorScheme?: "light" | "dark";
276
+ style?: CSSProperties;
277
+ }
278
+ declare const IPHONE_AIR_META: DeviceMeta;
279
+ declare const IPHONE_AIR_LAYOUT: DeviceLayoutData;
280
+ declare function IPhoneAirSVG({ style }: DeviceSVGProps$a): react.JSX.Element;
281
+ declare const IPHONE_AIR_FRAME: DeviceFrameInfo;
282
+ declare const IPHONE_AIR_SCREEN_RECT: SVGScreenRect;
283
+
284
+ interface DeviceSVGProps$9 {
285
+ colorScheme?: "light" | "dark";
286
+ style?: CSSProperties;
287
+ }
288
+ declare const IPHONE_16_META: DeviceMeta;
289
+ declare const IPHONE_16_LAYOUT: DeviceLayoutData;
290
+ declare function IPhone16SVG({ style }: DeviceSVGProps$9): react.JSX.Element;
291
+ declare const IPHONE_16_FRAME: DeviceFrameInfo;
292
+ declare const IPHONE_16_SCREEN_RECT: SVGScreenRect;
293
+
294
+ interface DeviceSVGProps$8 {
295
+ colorScheme?: "light" | "dark";
296
+ style?: CSSProperties;
297
+ }
298
+ declare const IPHONE_16E_META: DeviceMeta;
299
+ declare const IPHONE_16E_LAYOUT: DeviceLayoutData;
300
+ declare function IPhone16eSVG({ style }: DeviceSVGProps$8): react.JSX.Element;
301
+ declare const IPHONE_16E_FRAME: DeviceFrameInfo;
302
+ declare const IPHONE_16E_SCREEN_RECT: SVGScreenRect;
303
+
304
+ interface DeviceSVGProps$7 {
305
+ colorScheme?: "light" | "dark";
306
+ style?: CSSProperties;
307
+ }
308
+ declare const IPHONE_SE_3_META: DeviceMeta;
309
+ declare const IPHONE_SE_3_LAYOUT: DeviceLayoutData;
310
+ declare function IPhoneSE3SVG({ style }: DeviceSVGProps$7): react.JSX.Element;
311
+ declare const IPHONE_SE_3_FRAME: DeviceFrameInfo;
312
+ declare const IPHONE_SE_3_SCREEN_RECT: SVGScreenRect;
313
+
314
+ interface DeviceSVGProps$6 {
315
+ colorScheme?: "light" | "dark";
316
+ style?: CSSProperties;
317
+ }
318
+ declare const GALAXY_S25_META: DeviceMeta;
319
+ declare const GALAXY_S25_LAYOUT: DeviceLayoutData;
320
+ declare function GalaxyS25SVG({ style }: DeviceSVGProps$6): react.JSX.Element;
321
+ declare const GALAXY_S25_FRAME: DeviceFrameInfo;
322
+ declare const GALAXY_S25_SCREEN_RECT: SVGScreenRect;
323
+
324
+ interface DeviceSVGProps$5 {
325
+ colorScheme?: "light" | "dark";
326
+ style?: CSSProperties;
327
+ }
328
+ declare const GALAXY_S25_EDGE_META: DeviceMeta;
329
+ declare const GALAXY_S25_EDGE_LAYOUT: DeviceLayoutData;
330
+ declare function GalaxyS25EdgeSVG({ colorScheme, style }: DeviceSVGProps$5): react.ReactElement<any, string | react.JSXElementConstructor<any>>;
331
+ declare const GALAXY_S25_EDGE_FRAME: DeviceFrameInfo;
332
+
333
+ interface DeviceSVGProps$4 {
334
+ colorScheme?: "light" | "dark";
335
+ style?: CSSProperties;
336
+ }
337
+ declare const GALAXY_S25_ULTRA_META: DeviceMeta;
338
+ declare const GALAXY_S25_ULTRA_LAYOUT: DeviceLayoutData;
339
+ declare function GalaxyS25UltraSVG({ style }: DeviceSVGProps$4): react.JSX.Element;
340
+ declare const GALAXY_S25_ULTRA_FRAME: DeviceFrameInfo;
341
+ declare const GALAXY_S25_ULTRA_SCREEN_RECT: SVGScreenRect;
342
+
343
+ interface DeviceSVGProps$3 {
344
+ colorScheme?: "light" | "dark";
345
+ style?: CSSProperties;
346
+ }
347
+ declare const PIXEL_9_PRO_META: DeviceMeta;
348
+ declare const PIXEL_9_PRO_LAYOUT: DeviceLayoutData;
349
+ declare function Pixel9ProSVG({ style }: DeviceSVGProps$3): react.JSX.Element;
350
+ declare const PIXEL_9_PRO_FRAME: DeviceFrameInfo;
351
+ declare const PIXEL_9_PRO_SCREEN_RECT: SVGScreenRect;
352
+
353
+ interface DeviceSVGProps$2 {
354
+ colorScheme?: "light" | "dark";
355
+ style?: CSSProperties;
356
+ }
357
+ declare const PIXEL_9_PRO_XL_META: DeviceMeta;
358
+ declare const PIXEL_9_PRO_XL_LAYOUT: DeviceLayoutData;
359
+ declare function Pixel9ProXLSVG({ style }: DeviceSVGProps$2): react.JSX.Element;
360
+ declare const PIXEL_9_PRO_XL_FRAME: DeviceFrameInfo;
361
+ declare const PIXEL_9_PRO_XL_SCREEN_RECT: SVGScreenRect;
362
+
363
+ interface DeviceSVGProps$1 {
364
+ colorScheme?: "light" | "dark";
365
+ style?: CSSProperties;
366
+ }
367
+ declare const GALAXY_Z_FOLD_7_META: DeviceMeta;
368
+ declare const GALAXY_Z_FOLD_7_LAYOUT: DeviceLayoutData;
369
+ declare function GalaxyZFold7SVG({ style }: DeviceSVGProps$1): react.JSX.Element;
370
+ declare const GALAXY_Z_FOLD_7_FRAME: DeviceFrameInfo;
371
+ declare const GALAXY_Z_FOLD_7_SCREEN_RECT: SVGScreenRect;
372
+
373
+ interface DeviceSVGProps {
374
+ colorScheme?: "light" | "dark";
375
+ style?: CSSProperties;
376
+ }
377
+ declare const GALAXY_Z_FOLD_7_OPEN_META: DeviceMeta;
378
+ declare const GALAXY_Z_FOLD_7_OPEN_LAYOUT: DeviceLayoutData;
379
+ declare function GalaxyZFold7OpenSVG({ style }: DeviceSVGProps): react.JSX.Element;
380
+ declare const GALAXY_Z_FOLD_7_OPEN_FRAME: DeviceFrameInfo;
381
+ declare const GALAXY_Z_FOLD_7_OPEN_SCREEN_RECT: SVGScreenRect;
382
+
383
+ export { BUILTIN_DEVICES, type ClassifiedButton, ContentRect, DEVICE_LAYOUTS, type DetectedZone, DeviceCSSVariables, DeviceFrameInfo, DeviceLayoutContract, DeviceLayoutData, DeviceMeta, DeviceRegistry, GALAXY_S25_EDGE_FRAME, GALAXY_S25_EDGE_LAYOUT, GALAXY_S25_EDGE_META, GALAXY_S25_FRAME, GALAXY_S25_LAYOUT, GALAXY_S25_META, GALAXY_S25_SCREEN_RECT, GALAXY_S25_ULTRA_FRAME, GALAXY_S25_ULTRA_LAYOUT, GALAXY_S25_ULTRA_META, GALAXY_S25_ULTRA_SCREEN_RECT, GALAXY_TAB_S10_FE_FRAME, GALAXY_TAB_S10_FE_LAYOUT, GALAXY_TAB_S10_FE_META, GALAXY_TAB_S10_FE_SCREEN_RECT, GALAXY_TAB_S10_ULTRA_FRAME, GALAXY_TAB_S10_ULTRA_LAYOUT, GALAXY_TAB_S10_ULTRA_META, GALAXY_TAB_S10_ULTRA_SCREEN_RECT, GALAXY_Z_FOLD_7_FRAME, GALAXY_Z_FOLD_7_LAYOUT, GALAXY_Z_FOLD_7_META, GALAXY_Z_FOLD_7_OPEN_FRAME, GALAXY_Z_FOLD_7_OPEN_LAYOUT, GALAXY_Z_FOLD_7_OPEN_META, GALAXY_Z_FOLD_7_OPEN_SCREEN_RECT, GALAXY_Z_FOLD_7_SCREEN_RECT, GalaxyS25EdgeSVG, GalaxyS25SVG, GalaxyS25UltraSVG, GalaxyTabS10FeSVG, GalaxyTabS10UltraSVG, GalaxyZFold7OpenSVG, GalaxyZFold7SVG, HardwareOverlayType, IPAD_AIR_11_FRAME, IPAD_AIR_11_LAYOUT, IPAD_AIR_11_META, IPAD_AIR_11_SCREEN_RECT, IPAD_AIR_13_FRAME, IPAD_AIR_13_LAYOUT, IPAD_AIR_13_META, IPAD_AIR_13_SCREEN_RECT, IPAD_MINI_7_FRAME, IPAD_MINI_7_LAYOUT, IPAD_MINI_7_META, IPAD_MINI_7_SCREEN_RECT, IPAD_PRO_11_FRAME, IPAD_PRO_11_LAYOUT, IPAD_PRO_11_META, IPAD_PRO_11_SCREEN_RECT, IPHONE_16E_FRAME, IPHONE_16E_LAYOUT, IPHONE_16E_META, IPHONE_16E_SCREEN_RECT, IPHONE_16_FRAME, IPHONE_16_LAYOUT, IPHONE_16_META, IPHONE_16_SCREEN_RECT, IPHONE_17_PRO_FRAME, IPHONE_17_PRO_LAYOUT, IPHONE_17_PRO_MAX_FRAME, IPHONE_17_PRO_MAX_LAYOUT, IPHONE_17_PRO_MAX_META, IPHONE_17_PRO_MAX_SCREEN_RECT, IPHONE_17_PRO_META, IPHONE_17_PRO_SCREEN_RECT, IPHONE_AIR_FRAME, IPHONE_AIR_LAYOUT, IPHONE_AIR_META, IPHONE_AIR_SCREEN_RECT, IPHONE_SE_3_FRAME, IPHONE_SE_3_LAYOUT, IPHONE_SE_3_META, IPHONE_SE_3_SCREEN_RECT, IPadAir11SVG, IPadAir13SVG, IPadMini7SVG, IPadPro11SVG, IPhone16SVG, IPhone16eSVG, IPhone17ProMaxSVG, IPhone17ProSVG, IPhoneAirSVG, IPhoneSE3SVG, type NormalizationResult, OverlayRect, PIXEL_9_PRO_FRAME, PIXEL_9_PRO_LAYOUT, PIXEL_9_PRO_META, PIXEL_9_PRO_SCREEN_RECT, PIXEL_9_PRO_XL_FRAME, PIXEL_9_PRO_XL_LAYOUT, PIXEL_9_PRO_XL_META, PIXEL_9_PRO_XL_SCREEN_RECT, type ParseSVGContractOptions, type ParsedZone, Pixel9ProSVG, Pixel9ProXLSVG, RegisteredDevice, type SVGAnalysis, type SVGNativeDimensions, SVGScreenRect, SafeAreaInsets, type ValidationResult, type ZoneType, analyzeSVGGeometry, autoDetectZones, buildAIPromptConstraints, buildCSSVariables, classifySideButtons, deriveContentZone, extractZones, getAllDeviceIds, getDeviceContract, getDeviceMetadata, getDeviceRegistry, listSVGLayerNames, normalizeSVGToLogicalPoints, parseSVGNativeDimensions, parseSVGToContract, resetDeviceRegistry, scopeSVGIds, validateNormalizedSVG };