@mmtitanl/tablets 0.1.1 → 0.2.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/dist/index.d.cts CHANGED
@@ -1,8 +1,8 @@
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.cjs';
1
+ import { D as DeviceMeta, a as DeviceLayoutData, b as DeviceLayoutContract, S as SafeAreaInsets, c as DeviceCSSVariables, C as ContentRect, R as RegisteredDevice, d as DeviceFrameInfo, e as SVGScreenRect, H as HardwareOverlayType, O as OverlayRect } from './contract-types-Ch_kM--q.cjs';
2
2
  export { f as SVGCropRect } from './contract-types-Ch_kM--q.cjs';
3
- export { IPAD_PRO_13_FRAME, IPAD_PRO_13_LAYOUT, IPAD_PRO_13_META, IPAD_PRO_13_SCREEN_RECT, IPadPro13SVG } from './ios/index.cjs';
4
3
  import * as react from 'react';
5
- import { CSSProperties } from 'react';
4
+ import { FC, CSSProperties } from 'react';
5
+ export { IPAD_PRO_13_FRAME, IPAD_PRO_13_LAYOUT, IPAD_PRO_13_META, IPAD_PRO_13_SCREEN_RECT, IPadPro13SVG } from './ios/index.cjs';
6
6
  export { GALAXY_TAB_S10_FRAME, GALAXY_TAB_S10_LAYOUT, GALAXY_TAB_S10_META, GALAXY_TAB_S10_SCREEN_RECT, GalaxyTabS10SVG } from './android/index.cjs';
7
7
 
8
8
  declare function deriveContentZone(screenWidth: number, screenHeight: number, safeArea: SafeAreaInsets): ContentRect;
@@ -40,6 +40,28 @@ declare class DeviceRegistry {
40
40
  declare function getDeviceRegistry(): DeviceRegistry;
41
41
  declare function resetDeviceRegistry(): void;
42
42
 
43
+ interface CustomDevicePersisted {
44
+ meta: DeviceMeta;
45
+ layout: Omit<DeviceLayoutData, "meta">;
46
+ svgString: string;
47
+ frame: DeviceFrameInfo;
48
+ screenRect: SVGScreenRect;
49
+ landscape?: {
50
+ svgString: string;
51
+ frame: DeviceFrameInfo;
52
+ screenRect: SVGScreenRect;
53
+ };
54
+ }
55
+ type DeviceSVGProps$j = {
56
+ colorScheme?: "light" | "dark";
57
+ style?: CSSProperties;
58
+ };
59
+ interface CustomDeviceRuntime extends CustomDevicePersisted {
60
+ Component: FC<DeviceSVGProps$j>;
61
+ LandscapeComponent?: FC<DeviceSVGProps$j>;
62
+ }
63
+ declare const CUSTOM_DEVICES: CustomDeviceRuntime[];
64
+
43
65
  interface SVGNativeDimensions {
44
66
  width: number;
45
67
  height: number;
@@ -380,4 +402,4 @@ declare function GalaxyZFold7OpenSVG({ style }: DeviceSVGProps): react.JSX.Eleme
380
402
  declare const GALAXY_Z_FOLD_7_OPEN_FRAME: DeviceFrameInfo;
381
403
  declare const GALAXY_Z_FOLD_7_OPEN_SCREEN_RECT: SVGScreenRect;
382
404
 
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 };
405
+ export { BUILTIN_DEVICES, CUSTOM_DEVICES, type ClassifiedButton, ContentRect, type CustomDevicePersisted, type CustomDeviceRuntime, DEVICE_LAYOUTS, type DetectedZone, DeviceCSSVariables, DeviceFrameInfo, DeviceLayoutContract, DeviceLayoutData, DeviceMeta, DeviceRegistry, type DeviceSVGProps$j as DeviceSVGProps, 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 };
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
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';
1
+ import { D as DeviceMeta, a as DeviceLayoutData, b as DeviceLayoutContract, S as SafeAreaInsets, c as DeviceCSSVariables, C as ContentRect, R as RegisteredDevice, d as DeviceFrameInfo, e as SVGScreenRect, H as HardwareOverlayType, O as OverlayRect } from './contract-types-Ch_kM--q.js';
2
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
3
  import * as react from 'react';
5
- import { CSSProperties } from 'react';
4
+ import { FC, CSSProperties } from 'react';
5
+ export { IPAD_PRO_13_FRAME, IPAD_PRO_13_LAYOUT, IPAD_PRO_13_META, IPAD_PRO_13_SCREEN_RECT, IPadPro13SVG } from './ios/index.js';
6
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
7
 
8
8
  declare function deriveContentZone(screenWidth: number, screenHeight: number, safeArea: SafeAreaInsets): ContentRect;
@@ -40,6 +40,28 @@ declare class DeviceRegistry {
40
40
  declare function getDeviceRegistry(): DeviceRegistry;
41
41
  declare function resetDeviceRegistry(): void;
42
42
 
43
+ interface CustomDevicePersisted {
44
+ meta: DeviceMeta;
45
+ layout: Omit<DeviceLayoutData, "meta">;
46
+ svgString: string;
47
+ frame: DeviceFrameInfo;
48
+ screenRect: SVGScreenRect;
49
+ landscape?: {
50
+ svgString: string;
51
+ frame: DeviceFrameInfo;
52
+ screenRect: SVGScreenRect;
53
+ };
54
+ }
55
+ type DeviceSVGProps$j = {
56
+ colorScheme?: "light" | "dark";
57
+ style?: CSSProperties;
58
+ };
59
+ interface CustomDeviceRuntime extends CustomDevicePersisted {
60
+ Component: FC<DeviceSVGProps$j>;
61
+ LandscapeComponent?: FC<DeviceSVGProps$j>;
62
+ }
63
+ declare const CUSTOM_DEVICES: CustomDeviceRuntime[];
64
+
43
65
  interface SVGNativeDimensions {
44
66
  width: number;
45
67
  height: number;
@@ -380,4 +402,4 @@ declare function GalaxyZFold7OpenSVG({ style }: DeviceSVGProps): react.JSX.Eleme
380
402
  declare const GALAXY_Z_FOLD_7_OPEN_FRAME: DeviceFrameInfo;
381
403
  declare const GALAXY_Z_FOLD_7_OPEN_SCREEN_RECT: SVGScreenRect;
382
404
 
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 };
405
+ export { BUILTIN_DEVICES, CUSTOM_DEVICES, type ClassifiedButton, ContentRect, type CustomDevicePersisted, type CustomDeviceRuntime, DEVICE_LAYOUTS, type DetectedZone, DeviceCSSVariables, DeviceFrameInfo, DeviceLayoutContract, DeviceLayoutData, DeviceMeta, DeviceRegistry, type DeviceSVGProps$j as DeviceSVGProps, 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 };
package/dist/index.js CHANGED
@@ -7025,6 +7025,56 @@ var GALAXY_Z_FOLD_7_OPEN_FRAME = {
7025
7025
  };
7026
7026
  var GALAXY_Z_FOLD_7_OPEN_SCREEN_RECT = { "x": 80.3916, "y": 85.6348, "width": 3074.1084, "height": 3407.9052, "rx": 20.97 };
7027
7027
 
7028
+ // src/svg/scope-ids.ts
7029
+ function scopeSVGIds(svgString, deviceId) {
7030
+ const safe = deviceId.replace(/[^a-zA-Z0-9_-]/g, "_");
7031
+ const prefix = `${safe}__`;
7032
+ const idRe = /\bid\s*=\s*["']([^"']+)["']/g;
7033
+ const ids = /* @__PURE__ */ new Set();
7034
+ let m;
7035
+ while (m = idRe.exec(svgString)) ids.add(m[1]);
7036
+ let out = svgString;
7037
+ for (const id of ids) {
7038
+ const escaped = id.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
7039
+ out = out.replace(new RegExp(`\\bid\\s*=\\s*(["'])${escaped}\\1`, "g"), `id="${prefix}${id}"`);
7040
+ out = out.replace(new RegExp(`url\\(#${escaped}\\)`, "g"), `url(#${prefix}${id})`);
7041
+ out = out.replace(new RegExp(`\\bhref\\s*=\\s*(["'])#${escaped}\\1`, "g"), `href="#${prefix}${id}"`);
7042
+ out = out.replace(
7043
+ new RegExp(`\\bxlink:href\\s*=\\s*(["'])#${escaped}\\1`, "g"),
7044
+ `xlink:href="#${prefix}${id}"`
7045
+ );
7046
+ }
7047
+ return out;
7048
+ }
7049
+
7050
+ // src/custom/data.json
7051
+ var data_default = [];
7052
+
7053
+ // src/custom/index.tsx
7054
+ import { jsx as jsx22 } from "react/jsx-runtime";
7055
+ function makeSVGComponent(svgString, scopeKey) {
7056
+ let svg = scopeSVGIds(svgString, scopeKey);
7057
+ svg = svg.replace(/<svg\b([^>]*)>/i, (_m, attrs) => {
7058
+ const stripped = attrs.replace(/\swidth\s*=\s*["'][^"']*["']/i, "").replace(/\sheight\s*=\s*["'][^"']*["']/i, "");
7059
+ return `<svg${stripped} width="100%" height="100%">`;
7060
+ });
7061
+ const Component = ({ style }) => /* @__PURE__ */ jsx22(
7062
+ "span",
7063
+ {
7064
+ style: { display: "block", width: "100%", height: "100%", ...style },
7065
+ dangerouslySetInnerHTML: { __html: svg }
7066
+ }
7067
+ );
7068
+ Component.displayName = `CustomDeviceSVG(${scopeKey})`;
7069
+ return Component;
7070
+ }
7071
+ var data = data_default;
7072
+ var CUSTOM_DEVICES = data.map((d) => ({
7073
+ ...d,
7074
+ Component: makeSVGComponent(d.svgString, d.meta.id),
7075
+ LandscapeComponent: d.landscape ? makeSVGComponent(d.landscape.svgString, `${d.meta.id}-landscape`) : void 0
7076
+ }));
7077
+
7028
7078
  // src/builtin.ts
7029
7079
  var BUILTIN_METAS = {
7030
7080
  // Tablets
@@ -7080,6 +7130,10 @@ var BUILTIN_LAYOUTS = {
7080
7130
  [GALAXY_Z_FOLD_7_META.id]: GALAXY_Z_FOLD_7_LAYOUT,
7081
7131
  [GALAXY_Z_FOLD_7_OPEN_META.id]: GALAXY_Z_FOLD_7_OPEN_LAYOUT
7082
7132
  };
7133
+ for (const c of CUSTOM_DEVICES) {
7134
+ BUILTIN_METAS[c.meta.id] = c.meta;
7135
+ BUILTIN_LAYOUTS[c.meta.id] = { meta: c.meta, ...c.layout };
7136
+ }
7083
7137
 
7084
7138
  // src/registry/device-registry.ts
7085
7139
  var STORAGE_KEY = "bielaframe-custom-tablets";
@@ -7457,28 +7511,6 @@ function validateNormalizedSVG(result, targetWidth, targetHeight) {
7457
7511
  return { passed: errors.length === 0, warnings, errors };
7458
7512
  }
7459
7513
 
7460
- // src/svg/scope-ids.ts
7461
- function scopeSVGIds(svgString, deviceId) {
7462
- const safe = deviceId.replace(/[^a-zA-Z0-9_-]/g, "_");
7463
- const prefix = `${safe}__`;
7464
- const idRe = /\bid\s*=\s*["']([^"']+)["']/g;
7465
- const ids = /* @__PURE__ */ new Set();
7466
- let m;
7467
- while (m = idRe.exec(svgString)) ids.add(m[1]);
7468
- let out = svgString;
7469
- for (const id of ids) {
7470
- const escaped = id.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
7471
- out = out.replace(new RegExp(`\\bid\\s*=\\s*(["'])${escaped}\\1`, "g"), `id="${prefix}${id}"`);
7472
- out = out.replace(new RegExp(`url\\(#${escaped}\\)`, "g"), `url(#${prefix}${id})`);
7473
- out = out.replace(new RegExp(`\\bhref\\s*=\\s*(["'])#${escaped}\\1`, "g"), `href="#${prefix}${id}"`);
7474
- out = out.replace(
7475
- new RegExp(`\\bxlink:href\\s*=\\s*(["'])#${escaped}\\1`, "g"),
7476
- `xlink:href="#${prefix}${id}"`
7477
- );
7478
- }
7479
- return out;
7480
- }
7481
-
7482
7514
  // src/svg/auto-detect.ts
7483
7515
  var KEYWORDS = [
7484
7516
  { kw: "screen", type: "screen-area" },
@@ -7604,6 +7636,7 @@ function listSVGLayerNames(svgString) {
7604
7636
  }
7605
7637
  export {
7606
7638
  BUILTIN_DEVICES,
7639
+ CUSTOM_DEVICES,
7607
7640
  DEVICE_LAYOUTS,
7608
7641
  DeviceRegistry,
7609
7642
  GALAXY_S25_EDGE_FRAME,