peachsim 0.1.2225 → 0.1.2229

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 (118) hide show
  1. package/cli/bridge-flow-runner.ts +56 -3
  2. package/cli/commands/control.ts +27 -1
  3. package/cli/commands/device.ts +1 -1
  4. package/cli/commands/flow.ts +27 -1
  5. package/cli/commands/package.ts +9 -2
  6. package/cli/drivers/playwright.ts +1 -0
  7. package/cli/drivers/types.ts +3 -0
  8. package/dist-lib/agent-daemon-client.cjs +1 -1
  9. package/dist-lib/agent-events.cjs +1 -1
  10. package/dist-lib/attached-projects.cjs +1 -1
  11. package/dist-lib/auth/shared-session.cjs +1 -1
  12. package/dist-lib/backend-origin.cjs +1 -1
  13. package/dist-lib/beta.cjs +1 -1
  14. package/dist-lib/beta.mjs +1 -1
  15. package/dist-lib/bridge-constants.cjs +1 -1
  16. package/dist-lib/bridge-contract-input.cjs +1 -1
  17. package/dist-lib/bridge-contract-input.mjs +1 -1
  18. package/dist-lib/bridge-contract.cjs +1 -1
  19. package/dist-lib/bridge-contract.mjs +1 -1
  20. package/dist-lib/bundle-channel.cjs +108 -13
  21. package/dist-lib/capture-contract.cjs +1 -1
  22. package/dist-lib/capture-contract.mjs +1 -1
  23. package/dist-lib/cloud-contract.cjs +1 -1
  24. package/dist-lib/cloud-contract.mjs +1 -1
  25. package/dist-lib/cloud-test-args.cjs +1 -1
  26. package/dist-lib/cloud-test-args.mjs +1 -1
  27. package/dist-lib/cloud.cjs +1 -1
  28. package/dist-lib/cloud.mjs +1 -1
  29. package/dist-lib/config.cjs +1 -1
  30. package/dist-lib/config.mjs +1 -1
  31. package/dist-lib/detox/index.cjs +5 -2
  32. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  33. package/dist-lib/expo-swift-bundle.cjs +106 -11
  34. package/dist-lib/expo-swift-metadata.cjs +1 -1
  35. package/dist-lib/expo-swift-metadata.mjs +1 -1
  36. package/dist-lib/home-paths.cjs +1 -1
  37. package/dist-lib/host/bridge-host.cjs +108 -13
  38. package/dist-lib/host/fetch-proxy-handler.cjs +5 -5
  39. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  40. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  41. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  42. package/dist-lib/host/websocket-proxy.cjs +1 -1
  43. package/dist-lib/index.cjs +8 -6
  44. package/dist-lib/jump-to-source-babel.cjs +1 -1
  45. package/dist-lib/jump-to-source-native.cjs +1 -1
  46. package/dist-lib/kotlin-host.cjs +1 -1
  47. package/dist-lib/menu.cjs +16 -14
  48. package/dist-lib/menu.mjs +16 -14
  49. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  50. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  51. package/dist-lib/metro-production-bundle.cjs +11 -4
  52. package/dist-lib/metro-production-bundle.mjs +10 -4
  53. package/dist-lib/metro.cjs +8 -6
  54. package/dist-lib/native-app-identity-project.cjs +6 -4
  55. package/dist-lib/native-app-identity-project.mjs +6 -4
  56. package/dist-lib/native-app-identity.cjs +1 -1
  57. package/dist-lib/native-app-identity.mjs +1 -1
  58. package/dist-lib/native-firebase-metadata.cjs +1 -1
  59. package/dist-lib/native-firebase-metadata.mjs +1 -1
  60. package/dist-lib/pdfium-raster.cjs +1 -1
  61. package/dist-lib/pdfium-raster.mjs +1 -1
  62. package/dist-lib/plist.cjs +1 -1
  63. package/dist-lib/plist.mjs +1 -1
  64. package/dist-lib/profiles.cjs +1 -1
  65. package/dist-lib/public-brand.cjs +1 -1
  66. package/dist-lib/public-origins-lib-esm.json +25 -24
  67. package/dist-lib/public-origins-lib.json +56 -53
  68. package/dist-lib/react-native-host-modules.cjs +1 -1
  69. package/dist-lib/react-native-host-modules.mjs +1 -1
  70. package/dist-lib/reap-browser.cjs +1 -1
  71. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  72. package/dist-lib/sdk.cjs +1 -1
  73. package/dist-lib/sdk.mjs +1 -1
  74. package/dist-lib/skills.cjs +183 -27
  75. package/dist-lib/swift-compile.cjs +68 -4
  76. package/dist-lib/swift-compile.mjs +67 -4
  77. package/dist-lib/swift-package.cjs +1 -1
  78. package/dist-lib/swift-package.mjs +1 -1
  79. package/dist-lib/swift-submit.cjs +1 -1
  80. package/dist-lib/swift-submit.mjs +1 -1
  81. package/dist-lib/swift-toolchain.cjs +1 -1
  82. package/dist-lib/swift.cjs +1 -1
  83. package/dist-lib/vite-swift.cjs +105 -10
  84. package/dist-lib/vite.cjs +5 -5
  85. package/dist-lib/worklet-executable.cjs +1 -1
  86. package/dist-lib/worklet-executable.mjs +1 -1
  87. package/dist-types/packages/peach-engine/src/bundle-parse-receipt.d.ts +17 -0
  88. package/dist-types/packages/peach-engine/src/engine/canvaskit-api.d.ts +5 -1
  89. package/dist-types/packages/peach-engine/src/engine/font-config.d.ts +2 -2
  90. package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +11 -3
  91. package/dist-types/packages/peach-engine/src/engine/native-paragraph.d.ts +4 -0
  92. package/dist-types/packages/peach-engine/src/engine/node.d.ts +2 -0
  93. package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +1 -1
  94. package/dist-types/packages/peach-engine/src/engine/types.d.ts +9 -1
  95. package/dist-types/packages/peach-engine/src/engine/yoga-layout.d.ts +2 -0
  96. package/dist-types/packages/peach-engine/src/metro-fingerprint.d.ts +3 -2
  97. package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +1 -0
  98. package/dist-types/packages/peach-engine/src/render-worker/protocol.d.ts +3 -3
  99. package/dist-types/packages/peach-engine/src/rolldown-bundle-inventory.d.ts +0 -5
  100. package/dist-types/packages/peach-kit/src/capabilities.d.ts +2 -0
  101. package/dist-types/packages/peach-kit/src/internal.d.ts +1 -1
  102. package/dist-types/packages/peach-kit/src/ios-tint.d.ts +2 -0
  103. package/kotlin/sdk.tar.gz +0 -0
  104. package/package.json +1 -1
  105. package/runtime-companion.json +1 -1
  106. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UIControl.h +0 -26
  107. package/sdk/ios/System/Library/Frameworks/UIKitTypes.framework/Headers/UIKitTypes.h +27 -0
  108. package/sdk/ios/usr/include/ObjectiveC.apinotes +380 -7
  109. package/src/appPackageContract.ts +1 -1
  110. package/src/menu.ts +17 -99
  111. package/src/menuContract.ts +102 -0
  112. package/src/metro-production-bundle.ts +15 -2
  113. package/src/settingsContract.ts +8 -8
  114. package/src/swift-compile.ts +77 -2
  115. package/src/swift-host.ts +27 -2
  116. package/src/swift-standin-emit.ts +1 -0
  117. package/src/swift-standins.ts +8 -0
  118. package/src/xcode-project.ts +8 -2
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/swift-compile.ts
4
4
  import {
@@ -12084,6 +12084,20 @@ var clangInterfaceHeader = (header) => header.replace(/^@import (?:UIKitCore|UIK
12084
12084
  /^@import (?:CoreFoundation|FoundationNetworking);$/gm,
12085
12085
  "@import Foundation;"
12086
12086
  ).replace(/\b_TtC10Foundation\d+(NS\w+)\b/g, "$1").replace(/\b__attribute__\(\(objc_subclassing_restricted\)\)\s*/g, "");
12087
+ function swiftHeaderWithSuperclassImports(header, interfaceFor) {
12088
+ const superclasses = new Set(
12089
+ [...header.matchAll(/@interface\s+\w+\s*:\s*(\w+)/g)].map((match) => match[1])
12090
+ );
12091
+ return header.replace(/^@import (\w+);$/gm, (statement, name2) => {
12092
+ const dependency = interfaceFor(name2);
12093
+ if (!dependency || ![...swiftInterfaceDeclarations(dependency.header)].some(
12094
+ (name3) => superclasses.has(name3)
12095
+ ))
12096
+ return statement;
12097
+ return `${statement}
12098
+ #import ${JSON.stringify(dependency.file)}`;
12099
+ });
12100
+ }
12087
12101
  var swiftInterfaceDeclarations = (header) => /* @__PURE__ */ new Set([
12088
12102
  ...[
12089
12103
  ...header.matchAll(
@@ -12441,7 +12455,7 @@ var OPTIONAL_FRAMEWORKS = new Set(Object.keys(OPTIONAL_FRAMEWORK_DEPENDENCIES));
12441
12455
  function swiftOptionalFramework(name2) {
12442
12456
  return OPTIONAL_FRAMEWORKS.has(name2);
12443
12457
  }
12444
- var SWIFT_IMPORT = /^\s*(?:@\w+(?:\([^)]*\))?\s+)*import\s+(?:(?:typealias|struct|class|enum|protocol|let|var|func)\s+)?([A-Za-z_][A-Za-z0-9_]*)/;
12458
+ var SWIFT_IMPORT = /^\s*(?:@\w+(?:\([^)]*\))?\s+|(?:public|package|internal|fileprivate|private)\s+)*import\s+(?:(?:typealias|struct|class|enum|protocol|let|var|func)\s+)?([A-Za-z_][A-Za-z0-9_]*)/;
12445
12459
  var kleeneNot = (value) => value === void 0 ? void 0 : !value;
12446
12460
  var kleeneAnd = (left, right) => left === false || right === false ? false : left === true && right === true ? true : void 0;
12447
12461
  var kleeneOr = (left, right) => left === true || right === true ? true : left === false && right === false ? false : void 0;
@@ -12942,7 +12956,7 @@ var darwinRecordsRegion = (quoted2) => quoted2.length ? ["-Wl,--start-lib", ...q
12942
12956
  var REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
12943
12957
  var MULTI_MANIFEST_VERSION = 68;
12944
12958
  var SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
12945
- var compilerSourceDigest = true ? "645b0e6bc4e374f7c82da4d402e0ec9ddedfc49d6e5a74b73284852f1fbd4efc" : swiftCompilerSourceDigest(import.meta.dirname);
12959
+ var compilerSourceDigest = true ? "280e858b01b1c1393d3765c8d6ff1b3ce4a1a93d7fb7e3dd2d4d3e5f1d5f1ac2" : swiftCompilerSourceDigest(import.meta.dirname);
12946
12960
  function swiftArtifactHash(input, release, moduleRoot) {
12947
12961
  const hash = createHash13("sha256");
12948
12962
  hash.update(`swift-compile
@@ -17248,6 +17262,51 @@ function compileSwiftProjectOnce(input, options) {
17248
17262
  if (existsSync5(linked) && statSync2(linked).size <= 8)
17249
17263
  rmSync7(linked, { force: true });
17250
17264
  report("compiling and linking Swift modules");
17265
+ const frameworkInterfaces = /* @__PURE__ */ new Map();
17266
+ const frameworkInterface = (name2) => {
17267
+ if (frameworkInterfaces.has(name2)) return frameworkInterfaces.get(name2);
17268
+ const source = distribution ? path27.join(frameworkRoot, "modules", `${name2}-Swift.h`) : path27.join(
17269
+ prebuilt.modules,
17270
+ "..",
17271
+ `${name2}.build/include/${name2}-Swift.h`
17272
+ );
17273
+ if (!existsSync5(source)) {
17274
+ frameworkInterfaces.set(name2, null);
17275
+ return null;
17276
+ }
17277
+ const headers = path27.join(
17278
+ swiftSdkPaths(frameworkRoot, options.toolchainBin).darwin,
17279
+ `System/Library/Frameworks/${name2}.framework/Headers`
17280
+ );
17281
+ const declared = /* @__PURE__ */ new Set();
17282
+ if (existsSync5(headers)) {
17283
+ for (const file of readdirSync8(headers, {
17284
+ recursive: true,
17285
+ encoding: "utf8"
17286
+ }))
17287
+ if (file.endsWith(".h"))
17288
+ for (const name3 of swiftInterfaceDeclarations(
17289
+ readFileSync17(path27.join(headers, file), "utf8")
17290
+ ))
17291
+ declared.add(name3);
17292
+ }
17293
+ const header = withoutSwiftDeclarations(
17294
+ clangInterfaceHeader(readFileSync17(source, "utf8")),
17295
+ declared,
17296
+ `#import <${name2}/${name2}.h>`
17297
+ );
17298
+ const value = {
17299
+ file: path27.join(root, ".build/peach-framework-objc", `${name2}-Swift.h`),
17300
+ header
17301
+ };
17302
+ frameworkInterfaces.set(name2, value);
17303
+ writeBuildFile(
17304
+ value.file,
17305
+ (existsSync5(path27.join(headers, `${name2}.h`)) ? `#import <${name2}/${name2}.h>
17306
+ ` : "") + swiftHeaderWithSuperclassImports(header, frameworkInterface)
17307
+ );
17308
+ return value;
17309
+ };
17251
17310
  try {
17252
17311
  const headerBuilds = preparation.headerProductTarget ? [
17253
17312
  ...Object.keys(preparation.nativeHeaderDeclarations),
@@ -17275,7 +17334,10 @@ function compileSwiftProjectOnce(input, options) {
17275
17334
  writeBuildFile(
17276
17335
  emitted,
17277
17336
  withoutSwiftDeclarations(
17278
- clangInterfaceHeader(readFileSync17(original, "utf8")),
17337
+ swiftHeaderWithSuperclassImports(
17338
+ clangInterfaceHeader(readFileSync17(original, "utf8")),
17339
+ frameworkInterface
17340
+ ),
17279
17341
  new Set(preparation.nativeHeaderDeclarations[producer]),
17280
17342
  `#import <${producer}/${producer}.h>`
17281
17343
  )
@@ -17450,6 +17512,7 @@ export {
17450
17512
  swiftCompileSdkOptions,
17451
17513
  swiftCrossImportFlags,
17452
17514
  swiftDistributionAt,
17515
+ swiftHeaderWithSuperclassImports,
17453
17516
  swiftIcuAddress,
17454
17517
  swiftIcuAsset,
17455
17518
  swiftIcuBundleAsset,
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/swift-package.ts
4
4
  function swiftManifestSettings(target) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/is-record.ts
4
4
  function isRecord(value) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -39,7 +39,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
39
39
  var define_SWIFT_COVERAGE_SOURCE_DIGESTS_default;
40
40
  var init_define_SWIFT_COVERAGE_SOURCE_DIGESTS = __esm({
41
41
  "<define:__SWIFT_COVERAGE_SOURCE_DIGESTS__>"() {
42
- define_SWIFT_COVERAGE_SOURCE_DIGESTS_default = { "swift-coverage/indexdump.ts": "0d82d8eeb96bf377f409ea7e33274c341a710c0e071f6b6e17571a23d8d92412", "swift-coverage/indexing.ts": "633ccf19eec1f382a8847d0ee1dca42a2792a3c60aafd43622ed5152b09b8272", "swift-coverage/types.ts": "bd8fae54ea6c53e110cd8a5d7b57c1d532dd0166e09fdaea63c4f270c3780dd1", "swift-coverage/source.ts": "c151758a9f67631bc61473c375df0dc017da6902a34533b2cf4fc4fd7d19b6ee", "swift-coverage/package.ts": "1f0068be7461fa7c5a7a891faf318f305cbed2e94c19667ba76627f7e5be260b", "swift-coverage/xcode.ts": "65a500b806ce1c3a496de27f2e0ad77287c0f6795c618342c08af647f92af1fa", "swift-coverage/xcode-assets.ts": "d98d6294b359528f7733b26db6f80f554782354faa235605f9562be4ad98b8a3", "swift-coverage/xcode-asset-symbols.ts": "1b2a67733bc9d139b351466270205452a6172140bc25080d72619e2952c44671", "swift-coverage/xcode-bridging.ts": "33184be8c5daf6646aa5a1276a4e15531f1be27b7c26f56550e0fbb1fc678a11", "swift-coverage/xcode-packages.ts": "8e6020d17d24474150a5a50d042aca6261819ef75c79680a287a66f395909915", "swift-coverage/xcode-strings.ts": "f2dd4c7cd8ef77035184b0132909c2fa09fd20ed06b7757c2f1f960bfdde031c", "swift-coverage/reader.ts": "da559b67ecd1161dea70c980b5f98f2c55af3550f0714479100fa5e9e813625c", "swift-coverage/provenance.ts": "eb3b41ae8b58b48f6758f084800f188dfb1edb227e483abdd6b80cde66e849b9", "swift-package-manifest.ts": "bfde06f157f52d3dd76577b3c6059c95c0393180b054ced773624ea89558992b", "swift-package.ts": "338cfef9a34a930206ac2e1a8a90b85c8d61f776d9a41e6445dc18e0c5385cdb", "swift-source-file.ts": "93fd659ed63a27b67f54a7c229a7ceb636dc9c59e68414920ba36cff1eda1f94", "swift-toolchain.ts": "8deef5a824ed49209458a4b398cd8e88df260a0c8f1894d568279f6211866547", "home-paths.ts": "d1606390f0e8e50f0ff72544eadb3d49dfabf08e004c1218f2998c36fb8995dd", "xcode-header-search.ts": "f8c3d557b4eca5ddad32907545353eb7ad53b2ebd0969d9ed8f7275e109a13b1", "xcode-project.ts": "40ec039e7a2920e6b4e7610986eb3ba75c5811eed4ea41570c2a7e2424911721", "xcode-target-members.ts": "d49af77a690cff481b38333b5f63f6600123b1bb57f410b0adb298b010d2047b", "xcode-json-project.ts": "41990ebbe4b488eef34e74c4608b4b48e5a5b299ba98ca7fbcfdfa0e77be63b6", "openstep-plist.ts": "74e6ce1dac80c9c318e0e9f5e3e8cd19a898a8820c36fc160609695bcb59dcd3" };
42
+ define_SWIFT_COVERAGE_SOURCE_DIGESTS_default = { "swift-coverage/indexdump.ts": "0d82d8eeb96bf377f409ea7e33274c341a710c0e071f6b6e17571a23d8d92412", "swift-coverage/indexing.ts": "633ccf19eec1f382a8847d0ee1dca42a2792a3c60aafd43622ed5152b09b8272", "swift-coverage/types.ts": "bd8fae54ea6c53e110cd8a5d7b57c1d532dd0166e09fdaea63c4f270c3780dd1", "swift-coverage/source.ts": "c151758a9f67631bc61473c375df0dc017da6902a34533b2cf4fc4fd7d19b6ee", "swift-coverage/package.ts": "1f0068be7461fa7c5a7a891faf318f305cbed2e94c19667ba76627f7e5be260b", "swift-coverage/xcode.ts": "65a500b806ce1c3a496de27f2e0ad77287c0f6795c618342c08af647f92af1fa", "swift-coverage/xcode-assets.ts": "d98d6294b359528f7733b26db6f80f554782354faa235605f9562be4ad98b8a3", "swift-coverage/xcode-asset-symbols.ts": "1b2a67733bc9d139b351466270205452a6172140bc25080d72619e2952c44671", "swift-coverage/xcode-bridging.ts": "33184be8c5daf6646aa5a1276a4e15531f1be27b7c26f56550e0fbb1fc678a11", "swift-coverage/xcode-packages.ts": "8e6020d17d24474150a5a50d042aca6261819ef75c79680a287a66f395909915", "swift-coverage/xcode-strings.ts": "f2dd4c7cd8ef77035184b0132909c2fa09fd20ed06b7757c2f1f960bfdde031c", "swift-coverage/reader.ts": "da559b67ecd1161dea70c980b5f98f2c55af3550f0714479100fa5e9e813625c", "swift-coverage/provenance.ts": "eb3b41ae8b58b48f6758f084800f188dfb1edb227e483abdd6b80cde66e849b9", "swift-package-manifest.ts": "bfde06f157f52d3dd76577b3c6059c95c0393180b054ced773624ea89558992b", "swift-package.ts": "338cfef9a34a930206ac2e1a8a90b85c8d61f776d9a41e6445dc18e0c5385cdb", "swift-source-file.ts": "93fd659ed63a27b67f54a7c229a7ceb636dc9c59e68414920ba36cff1eda1f94", "swift-toolchain.ts": "8deef5a824ed49209458a4b398cd8e88df260a0c8f1894d568279f6211866547", "home-paths.ts": "d1606390f0e8e50f0ff72544eadb3d49dfabf08e004c1218f2998c36fb8995dd", "xcode-header-search.ts": "f8c3d557b4eca5ddad32907545353eb7ad53b2ebd0969d9ed8f7275e109a13b1", "xcode-project.ts": "774c42f06f8d5c1f3f3a09f94379db2046af0016f1fcd6cbe595a9c2da5dcf95", "xcode-target-members.ts": "d49af77a690cff481b38333b5f63f6600123b1bb57f410b0adb298b010d2047b", "xcode-json-project.ts": "41990ebbe4b488eef34e74c4608b4b48e5a5b299ba98ca7fbcfdfa0e77be63b6", "openstep-plist.ts": "74e6ce1dac80c9c318e0e9f5e3e8cd19a898a8820c36fc160609695bcb59dcd3" };
43
43
  }
44
44
  });
45
45
 
@@ -7102,7 +7102,7 @@ function emitSwiftStandin(sourceGraphs, options) {
7102
7102
  "Equatable",
7103
7103
  "CustomStringConvertible",
7104
7104
  "CustomDebugStringConvertible"
7105
- ].includes(name3)) && !(name3 === nsObjectProtocol && externalRoot(id) === nsObject) && !options.unconformed?.get(path51)?.has(name3)
7105
+ ].includes(name3)) && !(name3 === nsObjectProtocol && externalRoot(id) === nsObject) && !options.unconformed?.get(path51)?.has(name3.split(/::|\./).pop()) && !options.unconformed?.get(path51)?.has(name3)
7106
7106
  )
7107
7107
  ].filter((name3, at, all2) => all2.indexOf(name3) === at);
7108
7108
  const parentSymbol = superId.has(id) ? byId.get(superId.get(id)) : void 0;
@@ -16960,6 +16960,20 @@ var clangInterfaceHeader = (header) => header.replace(/^@import (?:UIKitCore|UIK
16960
16960
  /^@import (?:CoreFoundation|FoundationNetworking);$/gm,
16961
16961
  "@import Foundation;"
16962
16962
  ).replace(/\b_TtC10Foundation\d+(NS\w+)\b/g, "$1").replace(/\b__attribute__\(\(objc_subclassing_restricted\)\)\s*/g, "");
16963
+ function swiftHeaderWithSuperclassImports(header, interfaceFor) {
16964
+ const superclasses = new Set(
16965
+ [...header.matchAll(/@interface\s+\w+\s*:\s*(\w+)/g)].map((match) => match[1])
16966
+ );
16967
+ return header.replace(/^@import (\w+);$/gm, (statement, name3) => {
16968
+ const dependency = interfaceFor(name3);
16969
+ if (!dependency || ![...swiftInterfaceDeclarations(dependency.header)].some(
16970
+ (name4) => superclasses.has(name4)
16971
+ ))
16972
+ return statement;
16973
+ return `${statement}
16974
+ #import ${JSON.stringify(dependency.file)}`;
16975
+ });
16976
+ }
16963
16977
  var swiftInterfaceDeclarations = (header) => /* @__PURE__ */ new Set([
16964
16978
  ...[
16965
16979
  ...header.matchAll(
@@ -17313,7 +17327,7 @@ var OPTIONAL_FRAMEWORKS = new Set(Object.keys(OPTIONAL_FRAMEWORK_DEPENDENCIES));
17313
17327
  function swiftOptionalFramework(name3) {
17314
17328
  return OPTIONAL_FRAMEWORKS.has(name3);
17315
17329
  }
17316
- var SWIFT_IMPORT = /^\s*(?:@\w+(?:\([^)]*\))?\s+)*import\s+(?:(?:typealias|struct|class|enum|protocol|let|var|func)\s+)?([A-Za-z_][A-Za-z0-9_]*)/;
17330
+ var SWIFT_IMPORT = /^\s*(?:@\w+(?:\([^)]*\))?\s+|(?:public|package|internal|fileprivate|private)\s+)*import\s+(?:(?:typealias|struct|class|enum|protocol|let|var|func)\s+)?([A-Za-z_][A-Za-z0-9_]*)/;
17317
17331
  var kleeneNot = (value) => value === void 0 ? void 0 : !value;
17318
17332
  var kleeneAnd = (left, right) => left === false || right === false ? false : left === true && right === true ? true : void 0;
17319
17333
  var kleeneOr = (left, right) => left === true || right === true ? true : left === false && right === false ? false : void 0;
@@ -17814,7 +17828,7 @@ var darwinRecordsRegion = (quoted2) => quoted2.length ? ["-Wl,--start-lib", ...q
17814
17828
  var REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
17815
17829
  var MULTI_MANIFEST_VERSION = 68;
17816
17830
  var SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
17817
- var compilerSourceDigest = true ? "645b0e6bc4e374f7c82da4d402e0ec9ddedfc49d6e5a74b73284852f1fbd4efc" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
17831
+ var compilerSourceDigest = true ? "280e858b01b1c1393d3765c8d6ff1b3ce4a1a93d7fb7e3dd2d4d3e5f1d5f1ac2" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
17818
17832
  function swiftArtifactHash(input, release, moduleRoot) {
17819
17833
  const hash = (0, import_node_crypto13.createHash)("sha256");
17820
17834
  hash.update(`swift-compile
@@ -22027,6 +22041,51 @@ function compileSwiftProjectOnce(input, options) {
22027
22041
  if ((0, import_node_fs27.existsSync)(linked) && (0, import_node_fs27.statSync)(linked).size <= 8)
22028
22042
  (0, import_node_fs27.rmSync)(linked, { force: true });
22029
22043
  report("compiling and linking Swift modules");
22044
+ const frameworkInterfaces = /* @__PURE__ */ new Map();
22045
+ const frameworkInterface = (name3) => {
22046
+ if (frameworkInterfaces.has(name3)) return frameworkInterfaces.get(name3);
22047
+ const source = distribution ? import_node_path27.default.join(frameworkRoot, "modules", `${name3}-Swift.h`) : import_node_path27.default.join(
22048
+ prebuilt.modules,
22049
+ "..",
22050
+ `${name3}.build/include/${name3}-Swift.h`
22051
+ );
22052
+ if (!(0, import_node_fs27.existsSync)(source)) {
22053
+ frameworkInterfaces.set(name3, null);
22054
+ return null;
22055
+ }
22056
+ const headers = import_node_path27.default.join(
22057
+ swiftSdkPaths(frameworkRoot, options.toolchainBin).darwin,
22058
+ `System/Library/Frameworks/${name3}.framework/Headers`
22059
+ );
22060
+ const declared = /* @__PURE__ */ new Set();
22061
+ if ((0, import_node_fs27.existsSync)(headers)) {
22062
+ for (const file of (0, import_node_fs27.readdirSync)(headers, {
22063
+ recursive: true,
22064
+ encoding: "utf8"
22065
+ }))
22066
+ if (file.endsWith(".h"))
22067
+ for (const name4 of swiftInterfaceDeclarations(
22068
+ (0, import_node_fs27.readFileSync)(import_node_path27.default.join(headers, file), "utf8")
22069
+ ))
22070
+ declared.add(name4);
22071
+ }
22072
+ const header = withoutSwiftDeclarations(
22073
+ clangInterfaceHeader((0, import_node_fs27.readFileSync)(source, "utf8")),
22074
+ declared,
22075
+ `#import <${name3}/${name3}.h>`
22076
+ );
22077
+ const value = {
22078
+ file: import_node_path27.default.join(root, ".build/peach-framework-objc", `${name3}-Swift.h`),
22079
+ header
22080
+ };
22081
+ frameworkInterfaces.set(name3, value);
22082
+ writeBuildFile(
22083
+ value.file,
22084
+ ((0, import_node_fs27.existsSync)(import_node_path27.default.join(headers, `${name3}.h`)) ? `#import <${name3}/${name3}.h>
22085
+ ` : "") + swiftHeaderWithSuperclassImports(header, frameworkInterface)
22086
+ );
22087
+ return value;
22088
+ };
22030
22089
  try {
22031
22090
  const headerBuilds = preparation.headerProductTarget ? [
22032
22091
  ...Object.keys(preparation.nativeHeaderDeclarations),
@@ -22054,7 +22113,10 @@ function compileSwiftProjectOnce(input, options) {
22054
22113
  writeBuildFile(
22055
22114
  emitted,
22056
22115
  withoutSwiftDeclarations(
22057
- clangInterfaceHeader((0, import_node_fs27.readFileSync)(original, "utf8")),
22116
+ swiftHeaderWithSuperclassImports(
22117
+ clangInterfaceHeader((0, import_node_fs27.readFileSync)(original, "utf8")),
22118
+ frameworkInterface
22119
+ ),
22058
22120
  new Set(preparation.nativeHeaderDeclarations[producer]),
22059
22121
  `#import <${producer}/${producer}.h>`
22060
22122
  )
@@ -29914,7 +29976,7 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
29914
29976
  const postBundleScripts = [];
29915
29977
  for (const id of [...list(app.target.buildPhases)].reverse()) {
29916
29978
  const phase = app.project.object(id);
29917
- if (phase?.isa !== "PBXShellScriptBuildPhase" || list(phase.inputPaths).length || list(phase.inputFileListPaths).length || list(phase.outputPaths).length || list(phase.outputFileListPaths).length)
29979
+ if (phase?.isa !== "PBXShellScriptBuildPhase" || list(phase.outputPaths).length || list(phase.outputFileListPaths).length)
29918
29980
  break;
29919
29981
  postBundleScripts.unshift({
29920
29982
  name: str(phase.name) ?? id,
@@ -29923,6 +29985,8 @@ function readXcodeAppTarget(input, targetName, configurationName, options = {})
29923
29985
  str(phase.shellScript) ?? ""
29924
29986
  ),
29925
29987
  directory: app.project.projectDir,
29988
+ inputPaths: list(phase.inputPaths),
29989
+ inputFileListPaths: list(phase.inputFileListPaths),
29926
29990
  environment: Object.fromEntries(
29927
29991
  [...settingKeys].filter((key2) => /^[A-Za-z_][A-Za-z0-9_]*$/.test(key2)).map((key2) => [key2, settings(key2)])
29928
29992
  )
@@ -31378,7 +31442,7 @@ function sourceClosureDigest(srcDir, entrypoints) {
31378
31442
  return hash.digest("hex");
31379
31443
  }
31380
31444
  var standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
31381
- var STANDIN_SOURCE_DIGEST = true ? "7ad2d908aa8d716181e88c4bc1a8e1fb721aa69e8090d0d7ad5851f9b8de0944" : standinSourceDigest();
31445
+ var STANDIN_SOURCE_DIGEST = true ? "f8700690d0cd621b5d9417ea570f1f45c7ec1ad54492b23aa9792102938e9e82" : standinSourceDigest();
31382
31446
 
31383
31447
  // src/swift-standins.ts
31384
31448
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -33599,6 +33663,13 @@ function graphStandin(module2, graphs, values, wasm, binary, toolchain, work, re
33599
33663
  unconformed.set(owner, /* @__PURE__ */ new Set([...unconformed.get(owner) ?? [], conformance]));
33600
33664
  continue;
33601
33665
  }
33666
+ const redundant = /^redundant conformance of '\w+' to protocol '(\w+)'$/.exec(
33667
+ match[3]
33668
+ )?.[1];
33669
+ if (owner && redundant) {
33670
+ unconformed.set(owner, /* @__PURE__ */ new Set([...unconformed.get(owner) ?? [], redundant]));
33671
+ continue;
33672
+ }
33602
33673
  if (owner && swiftPaths.has(owner))
33603
33674
  throw new Error(
33604
33675
  `Swift declaration ${module2}.${owner} does not typecheck: ${match[3]}`
@@ -37951,11 +38022,35 @@ function buildSwiftBundleFiles(packagePath, hosted, inputs, resourceBundles) {
37951
38022
  CONTENTS_FOLDER_PATH: wrapper,
37952
38023
  UNLOCALIZED_RESOURCES_FOLDER_PATH: wrapper,
37953
38024
  INFOPLIST_PATH: `${wrapper}/Info.plist`,
37954
- SCRIPT_INPUT_FILE_COUNT: "0",
37955
- SCRIPT_INPUT_FILE_LIST_COUNT: "0",
38025
+ SCRIPT_INPUT_FILE_COUNT: String(phase.inputPaths.length),
38026
+ SCRIPT_INPUT_FILE_LIST_COUNT: String(phase.inputFileListPaths.length),
37956
38027
  SCRIPT_OUTPUT_FILE_COUNT: "0",
37957
38028
  SCRIPT_OUTPUT_FILE_LIST_COUNT: "0"
37958
38029
  };
38030
+ const inputPath = (raw2) => {
38031
+ const file = import_node_path55.default.resolve(
38032
+ phase.directory,
38033
+ expand(raw2, (key2) => env[key2] ?? "")
38034
+ );
38035
+ if (!import_node_fs54.default.existsSync(file))
38036
+ throw new Error(
38037
+ `${xcode.app.name}: Run Script "${phase.name}" missing input ${file}`
38038
+ );
38039
+ if (!file.startsWith(`${dir}${import_node_path55.default.sep}`))
38040
+ watched.push(import_node_path55.default.relative(packagePath, file).split(import_node_path55.default.sep).join("/"));
38041
+ return file;
38042
+ };
38043
+ phase.inputPaths.forEach((raw2, index) => {
38044
+ env[`SCRIPT_INPUT_FILE_${index}`] = inputPath(raw2);
38045
+ });
38046
+ phase.inputFileListPaths.forEach((raw2, index) => {
38047
+ const source = inputPath(raw2);
38048
+ const entries = fileListEntries(source, inputPath);
38049
+ const expanded = import_node_path55.default.join(dir, `Input-${index}.xcfilelist`);
38050
+ import_node_fs54.default.writeFileSync(expanded, `${entries.join("\n")}
38051
+ `);
38052
+ env[`SCRIPT_INPUT_FILE_LIST_${index}`] = expanded;
38053
+ });
37959
38054
  try {
37960
38055
  const [shell, ...args] = phase.command;
37961
38056
  (0, import_node_child_process34.execFileSync)(shell, args, {
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -39,7 +39,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
39
39
  var define_SWIFT_COVERAGE_SOURCE_DIGESTS_default;
40
40
  var init_define_SWIFT_COVERAGE_SOURCE_DIGESTS = __esm({
41
41
  "<define:__SWIFT_COVERAGE_SOURCE_DIGESTS__>"() {
42
- define_SWIFT_COVERAGE_SOURCE_DIGESTS_default = { "swift-coverage/indexdump.ts": "0d82d8eeb96bf377f409ea7e33274c341a710c0e071f6b6e17571a23d8d92412", "swift-coverage/indexing.ts": "633ccf19eec1f382a8847d0ee1dca42a2792a3c60aafd43622ed5152b09b8272", "swift-coverage/types.ts": "bd8fae54ea6c53e110cd8a5d7b57c1d532dd0166e09fdaea63c4f270c3780dd1", "swift-coverage/source.ts": "c151758a9f67631bc61473c375df0dc017da6902a34533b2cf4fc4fd7d19b6ee", "swift-coverage/package.ts": "1f0068be7461fa7c5a7a891faf318f305cbed2e94c19667ba76627f7e5be260b", "swift-coverage/xcode.ts": "65a500b806ce1c3a496de27f2e0ad77287c0f6795c618342c08af647f92af1fa", "swift-coverage/xcode-assets.ts": "d98d6294b359528f7733b26db6f80f554782354faa235605f9562be4ad98b8a3", "swift-coverage/xcode-asset-symbols.ts": "1b2a67733bc9d139b351466270205452a6172140bc25080d72619e2952c44671", "swift-coverage/xcode-bridging.ts": "33184be8c5daf6646aa5a1276a4e15531f1be27b7c26f56550e0fbb1fc678a11", "swift-coverage/xcode-packages.ts": "8e6020d17d24474150a5a50d042aca6261819ef75c79680a287a66f395909915", "swift-coverage/xcode-strings.ts": "f2dd4c7cd8ef77035184b0132909c2fa09fd20ed06b7757c2f1f960bfdde031c", "swift-coverage/reader.ts": "da559b67ecd1161dea70c980b5f98f2c55af3550f0714479100fa5e9e813625c", "swift-coverage/provenance.ts": "eb3b41ae8b58b48f6758f084800f188dfb1edb227e483abdd6b80cde66e849b9", "swift-package-manifest.ts": "bfde06f157f52d3dd76577b3c6059c95c0393180b054ced773624ea89558992b", "swift-package.ts": "338cfef9a34a930206ac2e1a8a90b85c8d61f776d9a41e6445dc18e0c5385cdb", "swift-source-file.ts": "93fd659ed63a27b67f54a7c229a7ceb636dc9c59e68414920ba36cff1eda1f94", "swift-toolchain.ts": "8deef5a824ed49209458a4b398cd8e88df260a0c8f1894d568279f6211866547", "home-paths.ts": "d1606390f0e8e50f0ff72544eadb3d49dfabf08e004c1218f2998c36fb8995dd", "xcode-header-search.ts": "f8c3d557b4eca5ddad32907545353eb7ad53b2ebd0969d9ed8f7275e109a13b1", "xcode-project.ts": "40ec039e7a2920e6b4e7610986eb3ba75c5811eed4ea41570c2a7e2424911721", "xcode-target-members.ts": "d49af77a690cff481b38333b5f63f6600123b1bb57f410b0adb298b010d2047b", "xcode-json-project.ts": "41990ebbe4b488eef34e74c4608b4b48e5a5b299ba98ca7fbcfdfa0e77be63b6", "openstep-plist.ts": "74e6ce1dac80c9c318e0e9f5e3e8cd19a898a8820c36fc160609695bcb59dcd3" };
42
+ define_SWIFT_COVERAGE_SOURCE_DIGESTS_default = { "swift-coverage/indexdump.ts": "0d82d8eeb96bf377f409ea7e33274c341a710c0e071f6b6e17571a23d8d92412", "swift-coverage/indexing.ts": "633ccf19eec1f382a8847d0ee1dca42a2792a3c60aafd43622ed5152b09b8272", "swift-coverage/types.ts": "bd8fae54ea6c53e110cd8a5d7b57c1d532dd0166e09fdaea63c4f270c3780dd1", "swift-coverage/source.ts": "c151758a9f67631bc61473c375df0dc017da6902a34533b2cf4fc4fd7d19b6ee", "swift-coverage/package.ts": "1f0068be7461fa7c5a7a891faf318f305cbed2e94c19667ba76627f7e5be260b", "swift-coverage/xcode.ts": "65a500b806ce1c3a496de27f2e0ad77287c0f6795c618342c08af647f92af1fa", "swift-coverage/xcode-assets.ts": "d98d6294b359528f7733b26db6f80f554782354faa235605f9562be4ad98b8a3", "swift-coverage/xcode-asset-symbols.ts": "1b2a67733bc9d139b351466270205452a6172140bc25080d72619e2952c44671", "swift-coverage/xcode-bridging.ts": "33184be8c5daf6646aa5a1276a4e15531f1be27b7c26f56550e0fbb1fc678a11", "swift-coverage/xcode-packages.ts": "8e6020d17d24474150a5a50d042aca6261819ef75c79680a287a66f395909915", "swift-coverage/xcode-strings.ts": "f2dd4c7cd8ef77035184b0132909c2fa09fd20ed06b7757c2f1f960bfdde031c", "swift-coverage/reader.ts": "da559b67ecd1161dea70c980b5f98f2c55af3550f0714479100fa5e9e813625c", "swift-coverage/provenance.ts": "eb3b41ae8b58b48f6758f084800f188dfb1edb227e483abdd6b80cde66e849b9", "swift-package-manifest.ts": "bfde06f157f52d3dd76577b3c6059c95c0393180b054ced773624ea89558992b", "swift-package.ts": "338cfef9a34a930206ac2e1a8a90b85c8d61f776d9a41e6445dc18e0c5385cdb", "swift-source-file.ts": "93fd659ed63a27b67f54a7c229a7ceb636dc9c59e68414920ba36cff1eda1f94", "swift-toolchain.ts": "8deef5a824ed49209458a4b398cd8e88df260a0c8f1894d568279f6211866547", "home-paths.ts": "d1606390f0e8e50f0ff72544eadb3d49dfabf08e004c1218f2998c36fb8995dd", "xcode-header-search.ts": "f8c3d557b4eca5ddad32907545353eb7ad53b2ebd0969d9ed8f7275e109a13b1", "xcode-project.ts": "774c42f06f8d5c1f3f3a09f94379db2046af0016f1fcd6cbe595a9c2da5dcf95", "xcode-target-members.ts": "d49af77a690cff481b38333b5f63f6600123b1bb57f410b0adb298b010d2047b", "xcode-json-project.ts": "41990ebbe4b488eef34e74c4608b4b48e5a5b299ba98ca7fbcfdfa0e77be63b6", "openstep-plist.ts": "74e6ce1dac80c9c318e0e9f5e3e8cd19a898a8820c36fc160609695bcb59dcd3" };
43
43
  }
44
44
  });
45
45
 
@@ -1072,7 +1072,7 @@ var init_src = __esm({
1072
1072
  var runtime_companion_default;
1073
1073
  var init_runtime_companion = __esm({
1074
1074
  "runtime-companion.json"() {
1075
- runtime_companion_default = { abi: 1, sha256: "ef38a3e8be87c77f4035640cf265efa9aff735577a2de14feb63c8a09afabd42", file: "node/cli-ef38a3e8be87c77f4035640cf265efa9aff735577a2de14feb63c8a09afabd42.cjs" };
1075
+ runtime_companion_default = { abi: 1, sha256: "00799b02f54a61aa35db60817d564847a255eef875cbc7225013f1f27991ccde", file: "node/cli-00799b02f54a61aa35db60817d564847a255eef875cbc7225013f1f27991ccde.cjs" };
1076
1076
  }
1077
1077
  });
1078
1078
 
@@ -3228,7 +3228,7 @@ function readIosSdkTree(root) {
3228
3228
 
3229
3229
  // src/swift-standin-digest.ts
3230
3230
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
3231
- var STANDIN_SOURCE_DIGEST = true ? "7ad2d908aa8d716181e88c4bc1a8e1fb721aa69e8090d0d7ad5851f9b8de0944" : standinSourceDigest();
3231
+ var STANDIN_SOURCE_DIGEST = true ? "f8700690d0cd621b5d9417ea570f1f45c7ec1ad54492b23aa9792102938e9e82" : standinSourceDigest();
3232
3232
 
3233
3233
  // src/expo-native-workspace.ts
3234
3234
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -6785,7 +6785,7 @@ var FOUNDATION_IMPLICIT_MODULES = [
6785
6785
  var FOUNDATION_IMPLICIT_FLAGS = FOUNDATION_IMPLICIT_MODULES.map(
6786
6786
  (module2) => `, "-Xfrontend", "-import-module", "-Xfrontend", "${module2}"`
6787
6787
  ).join("");
6788
- var compilerSourceDigest = true ? "645b0e6bc4e374f7c82da4d402e0ec9ddedfc49d6e5a74b73284852f1fbd4efc" : swiftCompilerSourceDigest2(__sootsim_import_meta_dirname);
6788
+ var compilerSourceDigest = true ? "280e858b01b1c1393d3765c8d6ff1b3ce4a1a93d7fb7e3dd2d4d3e5f1d5f1ac2" : swiftCompilerSourceDigest2(__sootsim_import_meta_dirname);
6789
6789
  var CORE_FOUNDATION_HANDLE_IMPORTS = [
6790
6790
  "CFAllocator",
6791
6791
  "CFArray",
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2225 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2229 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/worklet-executable.ts
4
4
  import { parse } from "acorn";
@@ -0,0 +1,17 @@
1
+ import type { RolldownBundleInventory } from './rolldown-bundle-inventory.d.ts';
2
+ export type MetroBundleLayout = RNXMetroBundleLayout;
3
+ import type { RNXMetroBundleLayout } from '../../../../src/metro-production-bundle.ts';
4
+ export type BundleParseReceipt = {
5
+ kind: 'rolldown';
6
+ key: string;
7
+ inventory: RolldownBundleInventory;
8
+ } | {
9
+ kind: 'metro';
10
+ key: string;
11
+ layout: MetroBundleLayout;
12
+ };
13
+ export declare function carryBundleParse(receipt: BundleParseReceipt | null, report: (receipt: BundleParseReceipt) => void): void;
14
+ export declare function sha256Hex(text: string): Promise<string>;
15
+ export declare function bundleParseKey(textHash: string): string;
16
+ export declare function takeCarriedBundleParse(key: string): BundleParseReceipt | null;
17
+ export declare function reportBundleParse(receipt: BundleParseReceipt): void;
@@ -1,7 +1,7 @@
1
1
  import type { RuntimePlatform } from '../../../../../src/device-catalog.ts';
2
2
  import type { CanvasKitReanimatedApi } from './nativeReanimatedContract.d.ts';
3
3
  import type { CanvasKitReplayApi } from './nativeReplayContract.d.ts';
4
- import type { Canvas, CanvasKit, ImageFilter, Image, RuntimeEffect, Surface, SkPicture } from 'canvaskit-wasm';
4
+ import type { Canvas, FontCollection, Paragraph, CanvasKit, ImageFilter, Image, RuntimeEffect, Surface, SkPicture } from 'canvaskit-wasm';
5
5
  export interface CanvasKitSvgPaintApi {
6
6
  p18(): RuntimeEffect;
7
7
  p17(k1: number, k2: number, k3: number, k4: number, android: boolean, in1: ImageFilter | null, in2: ImageFilter | null): ImageFilter;
@@ -50,6 +50,10 @@ export interface CanvasKitGifApi {
50
50
  _peachSkottieGifDemand(json: string, assets?: Record<string, ArrayBuffer | Uint8Array>): number;
51
51
  }
52
52
  export interface CanvasKitTextDataApi {
53
+ _peachRetainLayoutParagraph(slot: number, paragraph: Paragraph): void;
54
+ _peachLayoutParagraph(slot: number, width: number): Paragraph | null;
55
+ _peachReleaseLayoutParagraph(slot: number): void;
56
+ _peachMakeParagraph(collection: FontCollection, pointer: number, length: number): Paragraph | null;
53
57
  HEAPU8: Uint8Array;
54
58
  _malloc(length: number): number;
55
59
  _free(pointer: number): void;
@@ -2,7 +2,7 @@ import { SF_PRO_FONT_URL } from './generated/sf-pro-font.d.ts';
2
2
  import type { DeviceSpec, RuntimePlatform } from '../../../../../src/device-catalog.ts';
3
3
  import type { CanvasKitRenderingApi } from './canvaskit-api.d.ts';
4
4
  import type { SootSimStyle } from './types.d.ts';
5
- import type { FontMgr, ParagraphBuilder, ParagraphStyle } from 'canvaskit-wasm';
5
+ import type { FontMgr, ParagraphStyle } from 'canvaskit-wasm';
6
6
  export declare const DEFAULT_FONT_FAMILY = "SF Pro";
7
7
  export declare const SF_PRO_VERTICAL_METRICS: {
8
8
  ascender: number;
@@ -105,7 +105,7 @@ export declare function noteTextSymbolRegistered(): void;
105
105
  export declare function registerEngineFontFamily(family: string): void;
106
106
  export declare function markSystemNamedFaceFamily(face: SystemNamedFace): void;
107
107
  export declare function registerLazySystemFontFamily(family: string): void;
108
- export declare function makeParagraphBuilder(ck: CanvasKitRenderingApi, style: ParagraphStyle, fontMgr: FontMgr): ParagraphBuilder;
108
+ export declare function makeParagraphBuilder(ck: CanvasKitRenderingApi, style: ParagraphStyle, fontMgr: FontMgr): import("./native-paragraph.d.ts").NativeParagraphBuilder;
109
109
  export declare function registerEngineAppFontFace(aliases: readonly string[], face: AppFontFaceStyle): void;
110
110
  export declare function isFontFamilyRegistered(family: string): boolean;
111
111
  export declare function getRegisteredFontFamilies(): string[];
@@ -11,13 +11,13 @@ export interface NativeLayoutExports {
11
11
  _peach_layout_values(): number;
12
12
  _peach_layout_units(): number;
13
13
  _peach_layout_enums(): number;
14
- _peach_layout_scratch(): number;
15
14
  _peach_layout_node_new(slot: number, pointScaleFactor: number, measured: number): void;
16
15
  _peach_layout_node_free(slot: number): void;
17
16
  _peach_layout_subtree_free(root: number): number;
18
17
  _peach_layout_freed_nodes(): number;
19
18
  _peach_layout_bind(slot: number, tag: number, observers: number, scale: number): void;
20
19
  _peach_layout_apply(slot: number): void;
20
+ _peach_layout_centered(slot: number, leading: number, trailing: number, margin: number, width: number, gap: number, ownerScale: number, leadingScale: number, trailingScale: number): void;
21
21
  _peach_layout_alignment(slot: number, alignmentAxis: number, alignmentGuide: number, alignmentFraction: number, alignmentScale: number): void;
22
22
  _peach_layout_attach(parent: number, child: number, index: number): void;
23
23
  _peach_layout_detach(parent: number, child: number): void;
@@ -30,6 +30,8 @@ export interface NativeLayoutExports {
30
30
  _peach_layout_owner(slot: number): number;
31
31
  _peach_layout_child_count(slot: number): number;
32
32
  _peach_layout_mark_dirty(slot: number): void;
33
+ _peach_layout_text_policy(slot: number, policy: number, scale: number): void;
34
+ _peach_layout_measure_result(width: number, height: number, cacheable: number): void;
33
35
  _peach_layout_force(slot: number): void;
34
36
  _peach_layout_force_subtree(slot: number): void;
35
37
  _peach_layout_seen(slot: number): void;
@@ -44,6 +46,7 @@ export interface NativeLayoutExports {
44
46
  readonly HEAP32: Int32Array;
45
47
  readonly HEAPF32: Float32Array;
46
48
  peachLayoutMeasure?: MeasureHook;
49
+ peachLayoutTextLines?: (slot: number) => void;
47
50
  peachLayoutExit?: (slot: number) => void;
48
51
  }
49
52
  export type MeasureHook = (slot: number, width: number, widthMode: number, height: number, heightMode: number) => void;
@@ -135,6 +138,12 @@ export declare const OVERFLOW_SCROLL = 2;
135
138
  export declare const DISPLAY_FLEX = 0;
136
139
  export declare const DISPLAY_NONE = 1;
137
140
  export declare const DISPLAY_CONTENTS = 2;
141
+ export declare const TEXT_MEASURE = 1;
142
+ export declare const TEXT_MEASURE_PAPER = 2;
143
+ export declare const TEXT_MEASURE_ZERO_PROPOSAL = 4;
144
+ export declare const TEXT_MEASURE_STRETCH = 8;
145
+ export declare const TEXT_MEASURE_LINE_EVENTS = 16;
146
+ export declare const TEXT_MEASURE_HEIGHT_PROPOSAL = 32;
138
147
  export declare const MEASURE_MODE_UNDEFINED = 0;
139
148
  export declare const MEASURE_MODE_EXACTLY = 1;
140
149
  export declare const MEASURE_MODE_AT_MOST = 2;
@@ -143,6 +152,5 @@ export interface NativeLayout {
143
152
  readonly values: number;
144
153
  readonly units: number;
145
154
  readonly enums: number;
146
- readonly scratch: number;
147
155
  }
148
- export declare function bindNativeLayout(ck: CanvasKit, measure: MeasureHook, exit: (slot: number) => void): NativeLayout;
156
+ export declare function bindNativeLayout(ck: CanvasKit, measure: MeasureHook, textLines: (slot: number) => void, exit: (slot: number) => void): NativeLayout;
@@ -0,0 +1,4 @@
1
+ import type { CanvasKitRenderingApi } from './canvaskit-api.d.ts';
2
+ import type { FontCollection, ParagraphBuilder, ParagraphStyle } from 'canvaskit-wasm';
3
+ export type NativeParagraphBuilder = Pick<ParagraphBuilder, 'addText' | 'pushStyle' | 'pop' | 'addPlaceholder' | 'build' | 'reset' | 'delete'>;
4
+ export declare function makeNativeParagraphBuilder(ck: CanvasKitRenderingApi, style: ParagraphStyle, collection: FontCollection): NativeParagraphBuilder;
@@ -1,5 +1,6 @@
1
1
  import type { DamageRect } from './damage-rect.d.ts';
2
2
  import type { TextGuides } from './text-first-baseline.d.ts';
3
+ import type { CenteredLayoutPlacement } from './types.d.ts';
3
4
  export { beginReadFrame, endReadFrame, readAnimatedValue, readPresentedAnimatedValue, } from './animated-value.d.ts';
4
5
  import type { NativeRenderer } from '../../../../../src/config.ts';
5
6
  import type { AndroidEdgeEffectState } from './android-stretch-effect.d.ts';
@@ -253,6 +254,7 @@ export declare class SootSimNode {
253
254
  _memberVersion: number;
254
255
  _memberOf: boolean;
255
256
  _hookPlacement: LayoutHookPlacement | null;
257
+ _centeredPlacement: CenteredLayoutPlacement | null;
256
258
  _onLayoutDispatchScheduled: boolean;
257
259
  private _classicLayoutAnimFrom;
258
260
  get _layoutAnimFrom(): SootSimLayout | null;
@@ -177,7 +177,7 @@ export interface SceneNativeBinding {
177
177
  _peach_numeric_text_parameters(handle: number): number;
178
178
  _peach_numeric_text_draw(canvas: number, handle: number, x: number, y: number, elapsed: number): void;
179
179
  _peach_numeric_text_drop(handle: number): void;
180
- _peach_scene_set_image(slot: number, image: number, padLeft: number, padTop: number, padRight: number, padBottom: number, srcLeft: number, srcTop: number, srcRight: number, srcBottom: number, offsetX: number, adjustX: number, offsetY: number, adjustY: number, width: number, height: number, repeat: number, mipmaps: number, tintR: number, tintG: number, tintB: number, tintA: number, alpha: number, shape: number, sampling: number): void;
180
+ _peach_scene_set_image(slot: number, image: number, padLeft: number, padTop: number, padRight: number, padBottom: number, srcLeft: number, srcTop: number, srcRight: number, srcBottom: number, offsetX: number, adjustX: number, offsetY: number, adjustY: number, width: number, height: number, repeat: number, mipmaps: number, tintR: number, tintG: number, tintB: number, tintA: number, alpha: number, shape: number, sampling: number, swiftPixelOrigin: number): void;
181
181
  _peach_scene_set_picture(slot: number, picture: number, fontGeneration: number, drawnNodes: number): void;
182
182
  _peach_scene_set_ink(slot: number, glass: number, id: number, label: number): void;
183
183
  _peach_ink_draw_picture(canvas: number, picture: number, shader: number, text: number, left: number, top: number, right: number, bottom: number): void;
@@ -10,6 +10,13 @@ import type { FrameDamage } from './render-damage.d.ts';
10
10
  import type { AttributedParagraphStyle } from './text-paragraphContract.d.ts';
11
11
  import type { NumericTextPaintRequest } from '../../../peach-globals/src/index.d.ts';
12
12
  import type { Surface, Canvas, FontMgr, Image as SkImage } from 'canvaskit-wasm';
13
+ export interface CenteredLayoutPlacement {
14
+ leading: unknown;
15
+ trailing: unknown;
16
+ margin: number;
17
+ width: number;
18
+ gap: number;
19
+ }
13
20
  export type Falsy = undefined | null | false;
14
21
  export type RecursiveArray<T> = Array<T | RecursiveArray<T>>;
15
22
  export type StyleProp<T> = T | RecursiveArray<T | Falsy> | Falsy;
@@ -422,7 +429,7 @@ export interface SootSimStyle {
422
429
  _boxShadowOpacity?: SootSimAnimatedNumber;
423
430
  filter?: SootSimAnimatedFilter;
424
431
  _filter?: ParsedFilterOp[];
425
- mixBlendMode?: 'normal' | 'plus-lighter' | 'multiply' | 'screen' | 'overlay' | 'darken' | 'lighten' | 'color-dodge' | 'color-burn' | 'hard-light' | 'soft-light' | 'difference' | 'exclusion' | 'hue' | 'saturation' | 'color' | 'luminosity' | 'destination-out';
432
+ mixBlendMode?: 'normal' | 'plus-lighter' | 'plus-darker' | 'multiply' | 'screen' | 'overlay' | 'darken' | 'lighten' | 'color-dodge' | 'color-burn' | 'hard-light' | 'soft-light' | 'difference' | 'exclusion' | 'hue' | 'saturation' | 'color' | 'luminosity' | 'destination-out';
426
433
  isolation?: 'auto' | 'isolate';
427
434
  outlineWidth?: number;
428
435
  outlineStyle?: 'solid' | 'dashed' | 'dotted';
@@ -458,6 +465,7 @@ export interface SootSimStyle {
458
465
  _hyphenationLocale?: string;
459
466
  _hyphenationFactor?: number;
460
467
  _swiftUIText?: true;
468
+ _swiftUIPickerValue?: true;
461
469
  _composeText?: true;
462
470
  _androidTextView?: true;
463
471
  _androidTextSize?: 'dimension' | 'sp';
@@ -1,5 +1,6 @@
1
1
  import { type LayoutHookPlacement, SootSimNode } from './node.d.ts';
2
2
  import { type TextGuides } from './text-first-baseline.d.ts';
3
+ import type { CenteredLayoutPlacement } from './types.d.ts';
3
4
  import type { SootSimStyle, SootSimLayout, SootSimTextLayoutLine, MeasureContext } from './types.d.ts';
4
5
  export declare function setLayoutEventDispatcher(dispatcher: ((callback: () => void) => void) | null): void;
5
6
  export interface TextInkBox {
@@ -57,6 +58,7 @@ export declare function setLayoutHook(target: unknown, hook: ((view: SootSimNode
57
58
  export declare function invalidateLayoutHook(target: unknown): void;
58
59
  export declare function placeFromLayoutHook(target: unknown, placement: LayoutHookPlacement | null): void;
59
60
  export declare function layoutHookFrame(target: unknown): SootSimLayout | null;
61
+ export declare function setCenteredLayout(target: unknown, placement: CenteredLayoutPlacement | null): void;
60
62
  export declare function releaseYogaRoot(root: SootSimNode): void;
61
63
  export declare function nestsInParkedYogaTree(root: SootSimNode, owner: SootSimNode): boolean;
62
64
  export declare function parkYogaRoot(root: SootSimNode): boolean;